From 65355bc6bf1699263bc5f2e82668253e1e2b0417 Mon Sep 17 00:00:00 2001 From: Boris Serebrov Date: Sat, 20 Mar 2021 23:21:13 +0200 Subject: [PATCH] Rebuild --- dist/emoji-mart.js | 2 +- docs/bundle.js | 73 +++++++++++++++------------------------------- 2 files changed, 24 insertions(+), 51 deletions(-) diff --git a/dist/emoji-mart.js b/dist/emoji-mart.js index a4b76092..a199e167 100644 --- a/dist/emoji-mart.js +++ b/dist/emoji-mart.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.EmojiMart=t():e.EmojiMart=t()}("undefined"!=typeof self?self:this,function(){return function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=11)}([function(e,t,i){var n=i(4),o={name:"a",unified:"b",non_qualified:"c",has_img_apple:"d",has_img_google:"e",has_img_twitter:"f",has_img_facebook:"h",keywords:"j",sheet:"k",emoticons:"l",text:"m",short_names:"n",added_in:"o"},s=function(e){var t=[],i=function(e,i){e&&(Array.isArray(e)?e:[e]).forEach(function(e){(i?e.split(/[-|_|\s]+/):[e]).forEach(function(e){e=e.toLowerCase(),-1==t.indexOf(e)&&t.push(e)})})};return i(e.short_names,!0),i(e.name,!0),i(e.keywords,!1),i(e.emoticons,!1),t.join(",")};e.exports={buildSearch:s,compress:function(e){for(var t in e.short_names=e.short_names.filter(function(t){return t!==e.short_name}),delete e.short_name,e.sheet=[e.sheet_x,e.sheet_y],delete e.sheet_x,delete e.sheet_y,e.added_in=parseInt(e.added_in),6===e.added_in&&delete e.added_in,o)e[o[t]]=e[t],delete e[t];for(var i in e){var n=e[i];Array.isArray(n)&&!n.length?delete e[i]:"string"!=typeof n||n.length?null===n&&delete e[i]:delete e[i]}},uncompress:function(e){if(!e.compressed)return e;for(var t in e.compressed=!1,e.emojis){var i=e.emojis[t];for(var r in o)i[r]=i[o[r]],delete i[o[r]];i.short_names||(i.short_names=[]),i.short_names.unshift(t),i.sheet_x=i.sheet[0],i.sheet_y=i.sheet[1],delete i.sheet,i.text||(i.text=""),i.added_in||(i.added_in=6),i.added_in=i.added_in.toFixed(1),i.search=s(i)}return e=function e(t){var i=Object.getOwnPropertyNames(t),o=!0,s=!1,r=void 0;try{for(var a,c=i[Symbol.iterator]();!(o=(a=c.next()).done);o=!0){var u=a.value,l=t[u];t[u]=l&&"object"===n(l)?e(l):l}}catch(e){s=!0,r=e}finally{try{o||null==c.return||c.return()}finally{if(s)throw r}}return Object.freeze(t)}(e)}}},function(e,t,i){var n=i(6);e.exports=function(e){for(var t=1;t',custom:'',flags:'',foods:'',nature:'',objects:'',smileys:'',people:' ',places:'',recent:'',symbols:''};function g(e,t,i,n,o,s,r,a){var c,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),s&&(u._scopeId="data-v-"+s),r?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},u._ssrRegister=c):o&&(c=a?function(){o.call(this,this.$root.$options.shadowRoot)}:o),c)if(u.functional){u._injectStyles=c;var l=u.render;u.render=function(e,t){return c.call(t),l(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,c):[c]}return{exports:e,options:u}}var _=g({props:{i18n:{type:Object,required:!0},color:{type:String},categories:{type:Array,required:!0},activeCategory:{type:Object,default:function(){return{}}}},created:function(){this.svgs=j}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-anchors"},e._l(e.categories,function(t){return i("span",{key:t.id,class:{"emoji-mart-anchor":!0,"emoji-mart-anchor-selected":t.id==e.activeCategory.id},style:{color:t.id==e.activeCategory.id?e.color:""},attrs:{"data-title":e.i18n.categories[t.id]},on:{click:function(i){return e.$emit("click",t)}}},[i("div",{domProps:{innerHTML:e._s(e.svgs[t.id])}}),e._v(" "),i("span",{staticClass:"emoji-mart-anchor-bar",style:{backgroundColor:e.color}})])}),0)},[],!1,null,null,null).exports,y=i(2),w=i.n(y),C=i(3),b=i.n(C),k=i(4),S=i.n(k),x=String.fromCodePoint||function(){var e,t,i=[],n=-1,o=arguments.length;if(!o)return"";for(var s="";++n1114111||Math.floor(r)!=r)throw RangeError("Invalid code point: "+r);r<=65535?i.push(r):(e=55296+((r-=65536)>>10),t=r%1024+56320,i.push(e,t)),(n+1===o||i.length>16384)&&(s+=String.fromCharCode.apply(null,i),i.length=0)}return s};function E(e){var t=e.split("-").map(function(e){return"0x".concat(e)});return x.apply(null,t)}function O(e){return e.reduce(function(e,t){return-1===e.indexOf(t)&&e.push(t),e},[])}var P=/^(?:\:([^\:]+)\:)(?:\:skin-tone-(\d)\:)?$/,M=["1F3FA","1F3FB","1F3FC","1F3FD","1F3FE","1F3FF"],z=function(){function e(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=i.emojisToShowFilter,o=i.include,s=i.exclude,r=i.custom,a=i.recent,c=i.recentLength,u=void 0===c?20:c;w()(this,e),this._data=Object(m.uncompress)(t),this._emojisFilter=n||null,this._include=o||null,this._exclude=s||null,this._custom=r||[],this._recent=a||v.get(u),this._emojis={},this._nativeEmojis={},this._emoticons={},this._categories=[],this._recentCategory={id:"recent",name:"Recent",emojis:[]},this._customCategory={id:"custom",name:"Custom",emojis:[]},this._searchIndex={},this.buildIndex(),Object.freeze(this)}return b()(e,[{key:"buildIndex",value:function(){var e=this,t=this._data.categories;if(this._include&&(t=(t=t.filter(function(t){return e._include.includes(t.id)})).sort(function(t,i){var n=e._include.indexOf(t.id),o=e._include.indexOf(i.id);return no?1:0})),t.forEach(function(t){if(e.isCategoryNeeded(t.id)){var i={id:t.id,name:t.name,emojis:[]};t.emojis.forEach(function(t){var n=e.addEmoji(t);n&&i.emojis.push(n)}),i.emojis.length&&e._categories.push(i)}}),this.isCategoryNeeded("custom")){if(this._custom.length>0){var i=!0,n=!1,o=void 0;try{for(var s,r=this._custom[Symbol.iterator]();!(i=(s=r.next()).done);i=!0){var a=s.value;this.addCustomEmoji(a)}}catch(e){n=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(n)throw o}}}this._customCategory.emojis.length&&this._categories.push(this._customCategory)}this.isCategoryNeeded("recent")&&(this._recent.length&&this._recent.map(function(t){var i=!0,n=!1,o=void 0;try{for(var s,r=e._customCategory.emojis[Symbol.iterator]();!(i=(s=r.next()).done);i=!0){var a=s.value;if(a.id===t)return void e._recentCategory.emojis.push(a)}}catch(e){n=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(n)throw o}}e.hasEmoji(t)&&e._recentCategory.emojis.push(e.emoji(t))}),this._recentCategory.emojis.length&&this._categories.unshift(this._recentCategory))}},{key:"findEmoji",value:function(e,t){var i=e.match(P);if(i&&(e=i[1],i[2]&&(t=parseInt(i[2],10))),this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),this._emojis.hasOwnProperty(e)){var n=this._emojis[e];return t?n.getSkin(t):n}return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:"categories",value:function(){return this._categories}},{key:"emoji",value:function(e){this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]);var t=this._emojis[e];if(!t)throw new Error("Can not find emoji by id: "+e);return t}},{key:"firstEmoji",value:function(){var e=this._emojis[Object.keys(this._emojis)[0]];if(!e)throw new Error("Can not get first emoji");return e}},{key:"hasEmoji",value:function(e){return this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),!!this._emojis[e]}},{key:"nativeEmoji",value:function(e){return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:"search",value:function(e,t){var i=this;if(t||(t=75),!e.length)return null;if("-"==e||"-1"==e)return[this.emoji("-1")];var n,o=e.toLowerCase().split(/[\s|,|\-|_]+/);o.length>2&&(o=[o[0],o[1]]);var s=null;return(s=(n=o.map(function(e){for(var t=i._emojis,n=i._searchIndex,o=0,s=0;s1?function(e,t){var i=O(e),n=O(t);return i.filter(function(e){return n.indexOf(e)>=0})}.apply(null,n):n.length?n[0]:[])&&s.length>t&&(s=s.slice(0,t)),s}},{key:"addCustomEmoji",value:function(e){var t=Object.assign({},e,{id:e.short_names[0],custom:!0});t.search||(t.search=Object(m.buildSearch)(t));var i=new F(t);return this._emojis[i.id]=i,this._customCategory.emojis.push(i),i}},{key:"addEmoji",value:function(e){var t=this,i=this._data.emojis[e];if(!this.isEmojiNeeded(i))return!1;var n=new F(i);if(this._emojis[e]=n,n.native&&(this._nativeEmojis[n.native]=n),n._skins)for(var o in n._skins){var s=n._skins[o];s.native&&(this._nativeEmojis[s.native]=s)}return n.emoticons&&n.emoticons.forEach(function(i){t._emoticons[i]||(t._emoticons[i]=e)}),n}},{key:"isCategoryNeeded",value:function(e){var t=!this._include||!this._include.length||this._include.indexOf(e)>-1,i=!(!this._exclude||!this._exclude.length)&&this._exclude.indexOf(e)>-1;return!(!t||i)}},{key:"isEmojiNeeded",value:function(e){return!this._emojisFilter||this._emojisFilter(e)}}]),e}(),F=function(){function e(t){if(w()(this,e),this._data=Object.assign({},t),this._skins=null,this._data.skin_variations)for(var i in this._skins=[],M){var n=M[i],o=this._data.skin_variations[n],s=Object.assign({},t);for(var r in o)s[r]=o[r];delete s.skin_variations,s.skin_tone=parseInt(i)+1,this._skins.push(new e(s))}for(var a in this._sanitized=N(this._data),this._sanitized)this[a]=this._sanitized[a];this.short_names=this._data.short_names,this.short_name=this._data.short_names[0],Object.freeze(this)}return b()(e,[{key:"getSkin",value:function(e){return e&&"native"!=e&&this._skins?this._skins[e-1]:this}},{key:"getPosition",value:function(){var e=Math.round(100/57*this._data.sheet_x*100)/100,t=Math.round(100/57*this._data.sheet_y*100)/100;return"".concat(e,"% ").concat(t,"%")}}]),e}(),A=function(){function e(t,i,n,o,s,r,a){w()(this,e),this._emoji=t,this._native=o,this._skin=i,this._set=n,this._fallback=s,this.canRender=this._canRender(),this.cssClass=this._cssClass(),this.cssStyle=this._cssStyle(a),this.content=this._content(),this.title=!0===r?t.short_name:null,Object.freeze(this)}return b()(e,[{key:"getEmoji",value:function(){return this._emoji.getSkin(this._skin)}},{key:"_canRender",value:function(){return this._isCustom()||this._isNative()||this._hasEmoji()||this._fallback}},{key:"_cssClass",value:function(){return["emoji-set-"+this._set,"emoji-type-"+this._emojiType()]}},{key:"_cssStyle",value:function(e){var t={};return this._isCustom()?t={backgroundImage:"url("+this.getEmoji()._data.imageUrl+")",backgroundSize:"100%",width:e+"px",height:e+"px"}:this._hasEmoji()&&!this._isNative()&&(t={backgroundPosition:this.getEmoji().getPosition()}),e&&(t=this._isNative()?Object.assign(t,{fontSize:Math.round(.8*e*10)/10+"px"}):Object.assign(t,{width:e+"px",height:e+"px"})),t}},{key:"_content",value:function(){return this._isCustom()?"":this._isNative()?this.getEmoji().native:this._hasEmoji()?"":this._fallback?this._fallback(this.getEmoji()):null}},{key:"_isNative",value:function(){return this._native}},{key:"_isCustom",value:function(){return this.getEmoji().custom}},{key:"_hasEmoji",value:function(){if(!this.getEmoji()._data)return!1;var e=this.getEmoji()._data["has_img_"+this._set];return void 0===e||e}},{key:"_emojiType",value:function(){return this._isCustom()?"custom":this._isNative()?"native":this._hasEmoji()?"image":"fallback"}}]),e}();function N(e){var t=e.name,i=e.short_names,n=e.skin_tone,o=e.skin_variations,s=e.emoticons,r=e.unified,a=e.custom,c=e.imageUrl,u=e.id||i[0],l=":".concat(u,":");return a?{id:u,name:t,colons:l,emoticons:s,custom:a,imageUrl:c}:(n&&(l+=":skin-tone-".concat(n,":")),{id:u,name:t,colons:l,emoticons:s,unified:r.toLowerCase(),skin:n||(o?1:null),native:E(r)})}var q=i(1),T=i.n(q),$={native:{type:Boolean,default:!1},tooltip:{type:Boolean,default:!1},fallback:{type:Function},skin:{type:Number,default:1},set:{type:String,default:"apple"},emoji:{type:[String,Object],required:!0},size:{type:Number,default:null}},B={perLine:{type:Number,default:9},maxSearchResults:{type:Number,default:75},emojiSize:{type:Number,default:24},title:{type:String,default:"Emoji Martâ„¢"},emoji:{type:String,default:"department_store"},color:{type:String,default:"#ae65c5"},set:{type:String,default:"apple"},skin:{type:Number,default:null},defaultSkin:{type:Number,default:1},native:{type:Boolean,default:!1},emojiTooltip:{type:Boolean,default:!1},autoFocus:{type:Boolean,default:!1},i18n:{type:Object,default:function(){return{}}},showPreview:{type:Boolean,default:!0},showSearch:{type:Boolean,default:!0},showCategories:{type:Boolean,default:!0},showSkinTones:{type:Boolean,default:!0},infiniteScroll:{type:Boolean,default:!0},pickerStyles:{type:Object,default:function(){return{}}}},R=g({props:T()({},$,{data:{type:Object,required:!0}}),computed:{view:function(){return new A(this.emojiObject,this.skin,this.set,this.native,this.fallback,this.tooltip,this.size)},sanitizedData:function(){return this.emojiObject._sanitized},title:function(){return this.tooltip?this.emojiObject.short_name:null},emojiObject:function(){return"string"==typeof this.emoji?this.data.findEmoji(this.emoji):this.emoji}},created:function(){},methods:{onClick:function(){this.$emit("click",this.emojiObject)},onMouseEnter:function(){this.$emit("mouseenter",this.emojiObject)},onMouseLeave:function(){this.$emit("mouseleave",this.emojiObject)}}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.view.canRender?i("span",{staticClass:"emoji-mart-emoji",attrs:{title:e.view.title,"data-title":e.title},on:{mouseenter:e.onMouseEnter,mouseleave:e.onMouseLeave,click:e.onClick}},[i("span",{class:e.view.cssClass,style:e.view.cssStyle},[e._v(e._s(e.view.content))])]):e._e()},[],!1,null,null,null).exports,L=g({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},id:{type:String,required:!0},name:{type:String,required:!0},emojis:{type:Array},emojiProps:{type:Object,required:!0}},computed:{isVisible:function(){return!!this.emojis},isSearch:function(){return"Search"==this.name},hasResults:function(){return this.emojis.length>0},emojiObjects:function(){var e=this;return this.emojis.map(function(t){return{emojiObject:t,emojiView:new A(t,e.emojiProps.skin,e.emojiProps.set,e.emojiProps.native,e.emojiProps.fallback,e.emojiProps.emojiTooltip,e.emojiProps.emojiSize)}})}},components:{Emoji:R}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible&&(e.isSearch||e.hasResults)?i("div",{class:{"emoji-mart-category":!0,"emoji-mart-no-results":!e.hasResults}},[i("div",{staticClass:"emoji-mart-category-label"},[i("span",[e._v(e._s(e.i18n.categories[e.id]))])]),e._v(" "),e._l(e.emojiObjects,function(t){var n=t.emojiObject,o=t.emojiView;return[o.canRender?i("span",{staticClass:"emoji-mart-emoji",attrs:{"data-title":n.short_name,title:o.title},on:{mouseenter:function(t){e.emojiProps.onEnter(o.getEmoji())},mouseleave:function(t){e.emojiProps.onLeave(o.getEmoji())},click:function(t){e.emojiProps.onClick(o.getEmoji())}}},[i("span",{class:o.cssClass,style:o.cssStyle},[e._v(e._s(o.content))])]):e._e()]}),e._v(" "),e.hasResults?e._e():i("div",[i("emoji",{attrs:{data:e.data,emoji:"sleuth_or_spy",native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}}),e._v(" "),i("div",{staticClass:"emoji-mart-no-results-label"},[e._v(e._s(e.i18n.notfound))])],1)],2):e._e()},[],!1,null,null,null).exports,H=g({props:{skin:{type:Number,required:!0}},data:function(){return{opened:!1}},methods:{onClick:function(e){this.opened&&e!=this.skin&&this.$emit("change",e),this.opened=!this.opened}}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:{"emoji-mart-skin-swatches":!0,"emoji-mart-skin-swatches-opened":e.opened}},e._l(6,function(t){return i("span",{key:t,class:{"emoji-mart-skin-swatch":!0,"emoji-mart-skin-swatch-selected":e.skin==t}},[i("span",{class:"emoji-mart-skin emoji-mart-skin-tone-"+t,on:{click:function(i){return e.onClick(t)}}})])}),0)},[],!1,null,null,null).exports,I=g({props:{data:{type:Object,required:!0},title:{type:String,required:!0},emoji:{type:[String,Object]},idleEmoji:{type:[String,Object],required:!0},showSkinTones:{type:Boolean,default:!0},emojiProps:{type:Object,required:!0},skinProps:{type:Object,required:!0},onSkinChange:{type:Function,required:!0}},computed:{emojiData:function(){return this.emoji?this.emoji:{}},emojiShortNames:function(){return this.emojiData.short_names},emojiEmoticons:function(){return this.emojiData.emoticons}},components:{Emoji:R,Skins:H}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-preview"},[e.emoji?[i("div",{staticClass:"emoji-mart-preview-emoji"},[i("emoji",{attrs:{data:e.data,emoji:e.emoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(" "),i("div",{staticClass:"emoji-mart-preview-data"},[i("div",{staticClass:"emoji-mart-preview-name"},[e._v(e._s(e.emoji.name))]),e._v(" "),i("div",{staticClass:"emoji-mart-preview-shortnames"},e._l(e.emojiShortNames,function(t){return i("span",{key:t,staticClass:"emoji-mart-preview-shortname"},[e._v(":"+e._s(t)+":")])}),0),e._v(" "),i("div",{staticClass:"emoji-mart-preview-emoticons"},e._l(e.emojiEmoticons,function(t){return i("span",{key:t,staticClass:"emoji-mart-preview-emoticon"},[e._v(e._s(t))])}),0)])]:[i("div",{staticClass:"emoji-mart-preview-emoji"},[i("emoji",{attrs:{data:e.data,emoji:e.idleEmoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(" "),i("div",{staticClass:"emoji-mart-preview-data"},[i("span",{staticClass:"emoji-mart-title-label"},[e._v(e._s(e.title))])]),e._v(" "),e.showSkinTones?i("div",{staticClass:"emoji-mart-preview-skins"},[i("skins",{attrs:{skin:e.skinProps.skin},on:{change:function(t){return e.onSkinChange(t)}}})],1):e._e()]],2)},[],!1,null,null,null).exports,V=g({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},autoFocus:{type:Boolean,default:!1},onSearch:{type:Function,required:!0}},data:function(){return{value:""}},computed:{emojiIndex:function(){return this.data}},watch:{value:function(){this.$emit("search",this.value)}},methods:{clear:function(){this.value=""}},mounted:function(){var e=this.$el.querySelector("input");this.autoFocus&&e.focus()}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-search"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],attrs:{type:"text",placeholder:e.i18n.search},domProps:{value:e.value},on:{input:function(t){t.target.composing||(e.value=t.target.value)}}})])},[],!1,null,null,null).exports,D=i(5),U=i.n(D),W=(i(10),{search:"Search",notfound:"No Emoji Found",categories:{search:"Search Results",recent:"Frequently Used",smileys:"Smileys & Emotion",people:"People & Body",nature:"Animals & Nature",foods:"Food & Drink",activity:"Activity",places:"Travel & Places",objects:"Objects",symbols:"Symbols",flags:"Flags",custom:"Custom"}}),J=g({props:T()({},B,{data:{type:Object,required:!0}}),data:function(){return{activeSkin:this.skin||h.get("skin")||this.defaultSkin,activeCategory:null,previewEmoji:null,searchEmojis:null}},computed:{customStyles:function(){return T()({width:this.calculateWidth+"px"},this.pickerStyles)},emojiProps:function(){return{native:this.native,skin:this.activeSkin,set:this.set,emojiTooltip:this.emojiTooltip,emojiSize:this.emojiSize,onEnter:this.onEmojiEnter.bind(this),onLeave:this.onEmojiLeave.bind(this),onClick:this.onEmojiClick.bind(this)}},skinProps:function(){return{skin:this.activeSkin}},calculateWidth:function(){return this.perLine*(this.emojiSize+12)+12+2+function(){if("undefined"==typeof document)return 0;var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.overflow="scroll",e.style.position="absolute",e.style.top="-9999px",document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),t}()},filteredCategories:function(){return this.categories.filter(function(e){return e.emojis.length>0})},mergedI18n:function(){return Object.freeze(function e(t,i){var n={};for(var o in t){var s=t[o],r=s;i.hasOwnProperty(o)&&(r=i[o]),"object"===S()(r)&&(r=e(s,r)),n[o]=r}return n}(W,this.i18n))},idleEmoji:function(){try{return this.data.emoji(this.emoji)}catch(e){return console.error("Default preview emoji `"+this.emoji+"` is not available, check the Picker `emoji` property"),console.error(e),this.data.firstEmoji()}}},created:function(){var e;this.categories=[],(e=this.categories).push.apply(e,U()(this.data.categories())),this.categories=this.categories.filter(function(e){return e.emojis.length>0}),this.categories[0].first=!0,Object.freeze(this.categories),this.activeCategory=this.categories[0],this.skipScrollUpdate=!1},methods:{onScroll:function(){this.infiniteScroll&&!this.waitingForPaint&&(this.waitingForPaint=!0,window.requestAnimationFrame(this.onScrollPaint.bind(this)))},onScrollPaint:function(){this.waitingForPaint=!1;for(var e=this.$refs.scroll.scrollTop,t=this.filteredCategories[0],i=0,n=this.filteredCategories.length;ie)break;t=o}this.activeCategory=t},onAnchorClick:function(e){var t=this;if(!this.searchEmojis){var i=this.filteredCategories.indexOf(e),n=this.getCategoryComponent(i);this.infiniteScroll?function(){if(n){var i=n.$el.offsetTop;e.first&&(i=0),t.$refs.scroll.scrollTop=i}}():this.activeCategory=this.filteredCategories[i]}},onSearch:function(e){var t=this.data.search(e,this.maxSearchResults);this.searchEmojis=t},onEmojiEnter:function(e){this.previewEmoji=e},onEmojiLeave:function(e){this.previewEmoji=null},onEmojiClick:function(e){this.$emit("select",e),v.add(e)},onSkinChange:function(e){this.activeSkin=e,h.update({skin:e}),this.$emit("skin-change",e)},getCategoryComponent:function(e){var t=this.$refs["categories_"+e];return t&&"0"in t?t[0]:t}},components:{Anchors:_,Category:L,Preview:I,Search:V}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart emoji-mart-static",style:e.customStyles},[e.showCategories?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-anchors"},[i("anchors",{attrs:{data:e.data,i18n:e.mergedI18n,color:e.color,categories:e.categories,"active-category":e.activeCategory},on:{click:e.onAnchorClick}})],1):e._e(),e._v(" "),e._t("searchTemplate",[e.showSearch?i("search",{ref:"search",attrs:{data:e.data,i18n:e.mergedI18n,"auto-focus":e.autoFocus,"on-search":e.onSearch},on:{search:e.onSearch}}):e._e()],{data:e.data,i18n:e.i18n,autoFocus:e.autoFocus,onSearch:e.onSearch}),e._v(" "),i("div",{ref:"scroll",staticClass:"emoji-mart-scroll",on:{scroll:e.onScroll}},[i("category",{directives:[{name:"show",rawName:"v-show",value:e.searchEmojis,expression:"searchEmojis"}],attrs:{data:e.data,i18n:e.mergedI18n,id:"search",name:"Search",emojis:e.searchEmojis,"emoji-props":e.emojiProps}}),e._v(" "),e._l(e.filteredCategories,function(t,n){return i("category",{directives:[{name:"show",rawName:"v-show",value:!e.searchEmojis&&(e.infiniteScroll||t==e.activeCategory),expression:"!searchEmojis && (infiniteScroll || category == activeCategory)"}],key:t.id,ref:"categories_"+n,refInFor:!0,attrs:{data:e.data,i18n:e.mergedI18n,id:t.id,name:t.name,emojis:t.emojis,"emoji-props":e.emojiProps}})})],2),e._v(" "),e._t("previewTemplate",[e.showPreview?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-preview"},[i("preview",{attrs:{data:e.data,title:e.title,emoji:e.previewEmoji,"idle-emoji":e.idleEmoji,"show-skin-tones":e.showSkinTones,"emoji-props":e.emojiProps,"skin-props":e.skinProps,"on-skin-change":e.onSkinChange}})],1):e._e()],{data:e.data,title:e.title,emoji:e.previewEmoji,idleEmoji:e.idleEmoji,showSkinTones:e.showSkinTones,emojiProps:e.emojiProps,skinProps:e.skinProps,onSkinChange:e.onSkinChange})],2)},[],!1,null,null,null).exports;i.d(t,"Picker",function(){return J}),i.d(t,"Emoji",function(){return R}),i.d(t,"Anchors",function(){return _}),i.d(t,"Preview",function(){return I}),i.d(t,"Search",function(){return V}),i.d(t,"Category",function(){return L}),i.d(t,"Skins",function(){return H}),i.d(t,"EmojiIndex",function(){return z}),i.d(t,"EmojiView",function(){return A}),i.d(t,"EmojiData",function(){return F}),i.d(t,"sanitize",function(){return N}),i.d(t,"uncompress",function(){return m.uncompress}),i.d(t,"store",function(){return h}),i.d(t,"frequently",function(){return v})}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.EmojiMart=t():e.EmojiMart=t()}("undefined"!=typeof self?self:this,function(){return function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=10)}([function(e,t,i){var n=i(5);e.exports=function(e){for(var t=1;t',custom:'',flags:'',foods:'',nature:'',objects:'',smileys:'',people:' ',places:'',recent:'',symbols:''};function C(e,t,i,n,o,s,r,a){var c,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),s&&(u._scopeId="data-v-"+s),r?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},u._ssrRegister=c):o&&(c=a?function(){o.call(this,this.$root.$options.shadowRoot)}:o),c)if(u.functional){u._injectStyles=c;var l=u.render;u.render=function(e,t){return c.call(t),l(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,c):[c]}return{exports:e,options:u}}var k=C({props:{i18n:{type:Object,required:!0},color:{type:String},categories:{type:Array,required:!0},activeCategory:{type:Object,default:function(){return{}}}},created:function(){this.svgs=w}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-anchors"},e._l(e.categories,function(t){return i("span",{key:t.id,class:{"emoji-mart-anchor":!0,"emoji-mart-anchor-selected":t.id==e.activeCategory.id},style:{color:t.id==e.activeCategory.id?e.color:""},attrs:{"data-title":e.i18n.categories[t.id]},on:{click:function(i){return e.$emit("click",t)}}},[i("div",{domProps:{innerHTML:e._s(e.svgs[t.id])}}),e._v(" "),i("span",{staticClass:"emoji-mart-anchor-bar",style:{backgroundColor:e.color}})])}),0)},[],!1,null,null,null).exports,b=i(2),S=i.n(b),x=i(3),E=i.n(x),O=String.fromCodePoint||function(){var e,t,i=[],n=-1,o=arguments.length;if(!o)return"";for(var s="";++n1114111||Math.floor(r)!=r)throw RangeError("Invalid code point: "+r);r<=65535?i.push(r):(e=55296+((r-=65536)>>10),t=r%1024+56320,i.push(e,t)),(n+1===o||i.length>16384)&&(s+=String.fromCharCode.apply(null,i),i.length=0)}return s};function P(e){var t=e.split("-").map(function(e){return"0x".concat(e)});return O.apply(null,t)}function M(e){return e.reduce(function(e,t){return-1===e.indexOf(t)&&e.push(t),e},[])}var z=/^(?:\:([^\:]+)\:)(?:\:skin-tone-(\d)\:)?$/,F=["1F3FA","1F3FB","1F3FC","1F3FD","1F3FE","1F3FF"],A=function(){function e(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=i.emojisToShowFilter,o=i.include,s=i.exclude,r=i.custom,a=i.recent,c=i.recentLength,u=void 0===c?20:c;S()(this,e),this._data=v(t),this._emojisFilter=n||null,this._include=o||null,this._exclude=s||null,this._custom=r||[],this._recent=a||_.get(u),this._emojis={},this._nativeEmojis={},this._emoticons={},this._categories=[],this._recentCategory={id:"recent",name:"Recent",emojis:[]},this._customCategory={id:"custom",name:"Custom",emojis:[]},this._searchIndex={},this.buildIndex(),Object.freeze(this)}return E()(e,[{key:"buildIndex",value:function(){var e=this,t=this._data.categories;if(this._include&&(t=(t=t.filter(function(t){return e._include.includes(t.id)})).sort(function(t,i){var n=e._include.indexOf(t.id),o=e._include.indexOf(i.id);return no?1:0})),t.forEach(function(t){if(e.isCategoryNeeded(t.id)){var i={id:t.id,name:t.name,emojis:[]};t.emojis.forEach(function(t){var n=e.addEmoji(t);n&&i.emojis.push(n)}),i.emojis.length&&e._categories.push(i)}}),this.isCategoryNeeded("custom")){if(this._custom.length>0){var i=!0,n=!1,o=void 0;try{for(var s,r=this._custom[Symbol.iterator]();!(i=(s=r.next()).done);i=!0){var a=s.value;this.addCustomEmoji(a)}}catch(e){n=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(n)throw o}}}this._customCategory.emojis.length&&this._categories.push(this._customCategory)}this.isCategoryNeeded("recent")&&(this._recent.length&&this._recent.map(function(t){var i=!0,n=!1,o=void 0;try{for(var s,r=e._customCategory.emojis[Symbol.iterator]();!(i=(s=r.next()).done);i=!0){var a=s.value;if(a.id===t)return void e._recentCategory.emojis.push(a)}}catch(e){n=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(n)throw o}}e.hasEmoji(t)&&e._recentCategory.emojis.push(e.emoji(t))}),this._recentCategory.emojis.length&&this._categories.unshift(this._recentCategory))}},{key:"findEmoji",value:function(e,t){var i=e.match(z);if(i&&(e=i[1],i[2]&&(t=parseInt(i[2],10))),this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),this._emojis.hasOwnProperty(e)){var n=this._emojis[e];return t?n.getSkin(t):n}return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:"categories",value:function(){return this._categories}},{key:"emoji",value:function(e){this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]);var t=this._emojis[e];if(!t)throw new Error("Can not find emoji by id: "+e);return t}},{key:"firstEmoji",value:function(){var e=this._emojis[Object.keys(this._emojis)[0]];if(!e)throw new Error("Can not get first emoji");return e}},{key:"hasEmoji",value:function(e){return this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),!!this._emojis[e]}},{key:"nativeEmoji",value:function(e){return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:"search",value:function(e,t){var i=this;if(t||(t=75),!e.length)return null;if("-"==e||"-1"==e)return[this.emoji("-1")];var n,o=e.toLowerCase().split(/[\s|,|\-|_]+/);o.length>2&&(o=[o[0],o[1]]);var s=null;return(s=(n=o.map(function(e){for(var t=i._emojis,n=i._searchIndex,o=0,s=0;s1?function(e,t){var i=M(e),n=M(t);return i.filter(function(e){return n.indexOf(e)>=0})}.apply(null,n):n.length?n[0]:[])&&s.length>t&&(s=s.slice(0,t)),s}},{key:"addCustomEmoji",value:function(e){var t=Object.assign({},e,{id:e.short_names[0],custom:!0});t.search||(t.search=d(t));var i=new N(t);return this._emojis[i.id]=i,this._customCategory.emojis.push(i),i}},{key:"addEmoji",value:function(e){var t=this,i=this._data.emojis[e];if(!this.isEmojiNeeded(i))return!1;var n=new N(i);if(this._emojis[e]=n,n.native&&(this._nativeEmojis[n.native]=n),n._skins)for(var o in n._skins){var s=n._skins[o];s.native&&(this._nativeEmojis[s.native]=s)}return n.emoticons&&n.emoticons.forEach(function(i){t._emoticons[i]||(t._emoticons[i]=e)}),n}},{key:"isCategoryNeeded",value:function(e){var t=!this._include||!this._include.length||this._include.indexOf(e)>-1,i=!(!this._exclude||!this._exclude.length)&&this._exclude.indexOf(e)>-1;return!(!t||i)}},{key:"isEmojiNeeded",value:function(e){return!this._emojisFilter||this._emojisFilter(e)}}]),e}(),N=function(){function e(t){if(S()(this,e),this._data=Object.assign({},t),this._skins=null,this._data.skin_variations)for(var i in this._skins=[],F){var n=F[i],o=this._data.skin_variations[n],s=Object.assign({},t);for(var r in o)s[r]=o[r];delete s.skin_variations,s.skin_tone=parseInt(i)+1,this._skins.push(new e(s))}for(var a in this._sanitized=T(this._data),this._sanitized)this[a]=this._sanitized[a];this.short_names=this._data.short_names,this.short_name=this._data.short_names[0],Object.freeze(this)}return E()(e,[{key:"getSkin",value:function(e){return e&&"native"!=e&&this._skins?this._skins[e-1]:this}},{key:"getPosition",value:function(){var e=Math.round(100/57*this._data.sheet_x*100)/100,t=Math.round(100/57*this._data.sheet_y*100)/100;return"".concat(e,"% ").concat(t,"%")}}]),e}(),q=function(){function e(t,i,n,o,s,r,a){S()(this,e),this._emoji=t,this._native=o,this._skin=i,this._set=n,this._fallback=s,this.canRender=this._canRender(),this.cssClass=this._cssClass(),this.cssStyle=this._cssStyle(a),this.content=this._content(),this.title=!0===r?t.short_name:null,Object.freeze(this)}return E()(e,[{key:"getEmoji",value:function(){return this._emoji.getSkin(this._skin)}},{key:"_canRender",value:function(){return this._isCustom()||this._isNative()||this._hasEmoji()||this._fallback}},{key:"_cssClass",value:function(){return["emoji-set-"+this._set,"emoji-type-"+this._emojiType()]}},{key:"_cssStyle",value:function(e){var t={};return this._isCustom()?t={backgroundImage:"url("+this.getEmoji()._data.imageUrl+")",backgroundSize:"100%",width:e+"px",height:e+"px"}:this._hasEmoji()&&!this._isNative()&&(t={backgroundPosition:this.getEmoji().getPosition()}),e&&(t=this._isNative()?Object.assign(t,{fontSize:Math.round(.8*e*10)/10+"px"}):Object.assign(t,{width:e+"px",height:e+"px"})),t}},{key:"_content",value:function(){return this._isCustom()?"":this._isNative()?this.getEmoji().native:this._hasEmoji()?"":this._fallback?this._fallback(this.getEmoji()):null}},{key:"_isNative",value:function(){return this._native}},{key:"_isCustom",value:function(){return this.getEmoji().custom}},{key:"_hasEmoji",value:function(){if(!this.getEmoji()._data)return!1;var e=this.getEmoji()._data["has_img_"+this._set];return void 0===e||e}},{key:"_emojiType",value:function(){return this._isCustom()?"custom":this._isNative()?"native":this._hasEmoji()?"image":"fallback"}}]),e}();function T(e){var t=e.name,i=e.short_names,n=e.skin_tone,o=e.skin_variations,s=e.emoticons,r=e.unified,a=e.custom,c=e.imageUrl,u=e.id||i[0],l=":".concat(u,":");return a?{id:u,name:t,colons:l,emoticons:s,custom:a,imageUrl:c}:(n&&(l+=":skin-tone-".concat(n,":")),{id:u,name:t,colons:l,emoticons:s,unified:r.toLowerCase(),skin:n||(o?1:null),native:P(r)})}var $=i(0),B=i.n($),R={native:{type:Boolean,default:!1},tooltip:{type:Boolean,default:!1},fallback:{type:Function},skin:{type:Number,default:1},set:{type:String,default:"apple"},emoji:{type:[String,Object],required:!0},size:{type:Number,default:null}},L={perLine:{type:Number,default:9},maxSearchResults:{type:Number,default:75},emojiSize:{type:Number,default:24},title:{type:String,default:"Emoji Martâ„¢"},emoji:{type:String,default:"department_store"},color:{type:String,default:"#ae65c5"},set:{type:String,default:"apple"},skin:{type:Number,default:null},defaultSkin:{type:Number,default:1},native:{type:Boolean,default:!1},emojiTooltip:{type:Boolean,default:!1},autoFocus:{type:Boolean,default:!1},i18n:{type:Object,default:function(){return{}}},showPreview:{type:Boolean,default:!0},showSearch:{type:Boolean,default:!0},showCategories:{type:Boolean,default:!0},showSkinTones:{type:Boolean,default:!0},infiniteScroll:{type:Boolean,default:!0},pickerStyles:{type:Object,default:function(){return{}}}},H=C({props:B()({},R,{data:{type:Object,required:!0}}),computed:{view:function(){return new q(this.emojiObject,this.skin,this.set,this.native,this.fallback,this.tooltip,this.size)},sanitizedData:function(){return this.emojiObject._sanitized},title:function(){return this.tooltip?this.emojiObject.short_name:null},emojiObject:function(){return"string"==typeof this.emoji?this.data.findEmoji(this.emoji):this.emoji}},created:function(){},methods:{onClick:function(){this.$emit("click",this.emojiObject)},onMouseEnter:function(){this.$emit("mouseenter",this.emojiObject)},onMouseLeave:function(){this.$emit("mouseleave",this.emojiObject)}}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.view.canRender?i("span",{staticClass:"emoji-mart-emoji",attrs:{title:e.view.title,"data-title":e.title},on:{mouseenter:e.onMouseEnter,mouseleave:e.onMouseLeave,click:e.onClick}},[i("span",{class:e.view.cssClass,style:e.view.cssStyle},[e._v(e._s(e.view.content))])]):e._e()},[],!1,null,null,null).exports,I=C({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},id:{type:String,required:!0},name:{type:String,required:!0},emojis:{type:Array},emojiProps:{type:Object,required:!0}},computed:{isVisible:function(){return!!this.emojis},isSearch:function(){return"Search"==this.name},hasResults:function(){return this.emojis.length>0},emojiObjects:function(){var e=this;return this.emojis.map(function(t){return{emojiObject:t,emojiView:new q(t,e.emojiProps.skin,e.emojiProps.set,e.emojiProps.native,e.emojiProps.fallback,e.emojiProps.emojiTooltip,e.emojiProps.emojiSize)}})}},components:{Emoji:H}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible&&(e.isSearch||e.hasResults)?i("div",{class:{"emoji-mart-category":!0,"emoji-mart-no-results":!e.hasResults}},[i("div",{staticClass:"emoji-mart-category-label"},[i("span",[e._v(e._s(e.i18n.categories[e.id]))])]),e._v(" "),e._l(e.emojiObjects,function(t){var n=t.emojiObject,o=t.emojiView;return[o.canRender?i("span",{staticClass:"emoji-mart-emoji",attrs:{"data-title":n.short_name,title:o.title},on:{mouseenter:function(t){e.emojiProps.onEnter(o.getEmoji())},mouseleave:function(t){e.emojiProps.onLeave(o.getEmoji())},click:function(t){e.emojiProps.onClick(o.getEmoji())}}},[i("span",{class:o.cssClass,style:o.cssStyle},[e._v(e._s(o.content))])]):e._e()]}),e._v(" "),e.hasResults?e._e():i("div",[i("emoji",{attrs:{data:e.data,emoji:"sleuth_or_spy",native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}}),e._v(" "),i("div",{staticClass:"emoji-mart-no-results-label"},[e._v(e._s(e.i18n.notfound))])],1)],2):e._e()},[],!1,null,null,null).exports,V=C({props:{skin:{type:Number,required:!0}},data:function(){return{opened:!1}},methods:{onClick:function(e){this.opened&&e!=this.skin&&this.$emit("change",e),this.opened=!this.opened}}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:{"emoji-mart-skin-swatches":!0,"emoji-mart-skin-swatches-opened":e.opened}},e._l(6,function(t){return i("span",{key:t,class:{"emoji-mart-skin-swatch":!0,"emoji-mart-skin-swatch-selected":e.skin==t}},[i("span",{class:"emoji-mart-skin emoji-mart-skin-tone-"+t,on:{click:function(i){return e.onClick(t)}}})])}),0)},[],!1,null,null,null).exports,D=C({props:{data:{type:Object,required:!0},title:{type:String,required:!0},emoji:{type:[String,Object]},idleEmoji:{type:[String,Object],required:!0},showSkinTones:{type:Boolean,default:!0},emojiProps:{type:Object,required:!0},skinProps:{type:Object,required:!0},onSkinChange:{type:Function,required:!0}},computed:{emojiData:function(){return this.emoji?this.emoji:{}},emojiShortNames:function(){return this.emojiData.short_names},emojiEmoticons:function(){return this.emojiData.emoticons}},components:{Emoji:H,Skins:V}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-preview"},[e.emoji?[i("div",{staticClass:"emoji-mart-preview-emoji"},[i("emoji",{attrs:{data:e.data,emoji:e.emoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(" "),i("div",{staticClass:"emoji-mart-preview-data"},[i("div",{staticClass:"emoji-mart-preview-name"},[e._v(e._s(e.emoji.name))]),e._v(" "),i("div",{staticClass:"emoji-mart-preview-shortnames"},e._l(e.emojiShortNames,function(t){return i("span",{key:t,staticClass:"emoji-mart-preview-shortname"},[e._v(":"+e._s(t)+":")])}),0),e._v(" "),i("div",{staticClass:"emoji-mart-preview-emoticons"},e._l(e.emojiEmoticons,function(t){return i("span",{key:t,staticClass:"emoji-mart-preview-emoticon"},[e._v(e._s(t))])}),0)])]:[i("div",{staticClass:"emoji-mart-preview-emoji"},[i("emoji",{attrs:{data:e.data,emoji:e.idleEmoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(" "),i("div",{staticClass:"emoji-mart-preview-data"},[i("span",{staticClass:"emoji-mart-title-label"},[e._v(e._s(e.title))])]),e._v(" "),e.showSkinTones?i("div",{staticClass:"emoji-mart-preview-skins"},[i("skins",{attrs:{skin:e.skinProps.skin},on:{change:function(t){return e.onSkinChange(t)}}})],1):e._e()]],2)},[],!1,null,null,null).exports,U=C({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},autoFocus:{type:Boolean,default:!1},onSearch:{type:Function,required:!0}},data:function(){return{value:""}},computed:{emojiIndex:function(){return this.data}},watch:{value:function(){this.$emit("search",this.value)}},methods:{clear:function(){this.value=""}},mounted:function(){var e=this.$el.querySelector("input");this.autoFocus&&e.focus()}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-search"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],attrs:{type:"text",placeholder:e.i18n.search},domProps:{value:e.value},on:{input:function(t){t.target.composing||(e.value=t.target.value)}}})])},[],!1,null,null,null).exports,W=i(4),J=i.n(W),X=(i(9),{search:"Search",notfound:"No Emoji Found",categories:{search:"Search Results",recent:"Frequently Used",smileys:"Smileys & Emotion",people:"People & Body",nature:"Animals & Nature",foods:"Food & Drink",activity:"Activity",places:"Travel & Places",objects:"Objects",symbols:"Symbols",flags:"Flags",custom:"Custom"}}),Z=C({props:B()({},L,{data:{type:Object,required:!0}}),data:function(){return{activeSkin:this.skin||u.get("skin")||this.defaultSkin,activeCategory:null,previewEmoji:null,searchEmojis:null}},computed:{customStyles:function(){return B()({width:this.calculateWidth+"px"},this.pickerStyles)},emojiProps:function(){return{native:this.native,skin:this.activeSkin,set:this.set,emojiTooltip:this.emojiTooltip,emojiSize:this.emojiSize,onEnter:this.onEmojiEnter.bind(this),onLeave:this.onEmojiLeave.bind(this),onClick:this.onEmojiClick.bind(this)}},skinProps:function(){return{skin:this.activeSkin}},calculateWidth:function(){return this.perLine*(this.emojiSize+12)+12+2+function(){if("undefined"==typeof document)return 0;var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.overflow="scroll",e.style.position="absolute",e.style.top="-9999px",document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),t}()},filteredCategories:function(){return this.categories.filter(function(e){return e.emojis.length>0})},mergedI18n:function(){return Object.freeze(function e(t,i){var n={};for(var o in t){var s=t[o],r=s;i.hasOwnProperty(o)&&(r=i[o]),"object"===h()(r)&&(r=e(s,r)),n[o]=r}return n}(X,this.i18n))},idleEmoji:function(){try{return this.data.emoji(this.emoji)}catch(e){return console.error("Default preview emoji `"+this.emoji+"` is not available, check the Picker `emoji` property"),console.error(e),this.data.firstEmoji()}}},created:function(){var e;this.categories=[],(e=this.categories).push.apply(e,J()(this.data.categories())),this.categories=this.categories.filter(function(e){return e.emojis.length>0}),this.categories[0].first=!0,Object.freeze(this.categories),this.activeCategory=this.categories[0],this.skipScrollUpdate=!1},methods:{onScroll:function(){this.infiniteScroll&&!this.waitingForPaint&&(this.waitingForPaint=!0,window.requestAnimationFrame(this.onScrollPaint.bind(this)))},onScrollPaint:function(){this.waitingForPaint=!1;for(var e=this.$refs.scroll.scrollTop,t=this.filteredCategories[0],i=0,n=this.filteredCategories.length;ie)break;t=o}this.activeCategory=t},onAnchorClick:function(e){var t=this;if(!this.searchEmojis){var i=this.filteredCategories.indexOf(e),n=this.getCategoryComponent(i);this.infiniteScroll?function(){if(n){var i=n.$el.offsetTop;e.first&&(i=0),t.$refs.scroll.scrollTop=i}}():this.activeCategory=this.filteredCategories[i]}},onSearch:function(e){var t=this.data.search(e,this.maxSearchResults);this.searchEmojis=t},onEmojiEnter:function(e){this.previewEmoji=e},onEmojiLeave:function(e){this.previewEmoji=null},onEmojiClick:function(e){this.$emit("select",e),_.add(e)},onSkinChange:function(e){this.activeSkin=e,u.update({skin:e}),this.$emit("skin-change",e)},getCategoryComponent:function(e){var t=this.$refs["categories_"+e];return t&&"0"in t?t[0]:t}},components:{Anchors:k,Category:I,Preview:D,Search:U}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart emoji-mart-static",style:e.customStyles},[e.showCategories?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-anchors"},[i("anchors",{attrs:{data:e.data,i18n:e.mergedI18n,color:e.color,categories:e.categories,"active-category":e.activeCategory},on:{click:e.onAnchorClick}})],1):e._e(),e._v(" "),e._t("searchTemplate",[e.showSearch?i("search",{ref:"search",attrs:{data:e.data,i18n:e.mergedI18n,"auto-focus":e.autoFocus,"on-search":e.onSearch},on:{search:e.onSearch}}):e._e()],{data:e.data,i18n:e.i18n,autoFocus:e.autoFocus,onSearch:e.onSearch}),e._v(" "),i("div",{ref:"scroll",staticClass:"emoji-mart-scroll",on:{scroll:e.onScroll}},[i("category",{directives:[{name:"show",rawName:"v-show",value:e.searchEmojis,expression:"searchEmojis"}],attrs:{data:e.data,i18n:e.mergedI18n,id:"search",name:"Search",emojis:e.searchEmojis,"emoji-props":e.emojiProps}}),e._v(" "),e._l(e.filteredCategories,function(t,n){return i("category",{directives:[{name:"show",rawName:"v-show",value:!e.searchEmojis&&(e.infiniteScroll||t==e.activeCategory),expression:"!searchEmojis && (infiniteScroll || category == activeCategory)"}],key:t.id,ref:"categories_"+n,refInFor:!0,attrs:{data:e.data,i18n:e.mergedI18n,id:t.id,name:t.name,emojis:t.emojis,"emoji-props":e.emojiProps}})})],2),e._v(" "),e._t("previewTemplate",[e.showPreview?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-preview"},[i("preview",{attrs:{data:e.data,title:e.title,emoji:e.previewEmoji,"idle-emoji":e.idleEmoji,"show-skin-tones":e.showSkinTones,"emoji-props":e.emojiProps,"skin-props":e.skinProps,"on-skin-change":e.onSkinChange}})],1):e._e()],{data:e.data,title:e.title,emoji:e.previewEmoji,idleEmoji:e.idleEmoji,showSkinTones:e.showSkinTones,emojiProps:e.emojiProps,skinProps:e.skinProps,onSkinChange:e.onSkinChange})],2)},[],!1,null,null,null).exports;i.d(t,"Picker",function(){return Z}),i.d(t,"Emoji",function(){return H}),i.d(t,"Anchors",function(){return k}),i.d(t,"Preview",function(){return D}),i.d(t,"Search",function(){return U}),i.d(t,"Category",function(){return I}),i.d(t,"Skins",function(){return V}),i.d(t,"EmojiIndex",function(){return A}),i.d(t,"EmojiView",function(){return q}),i.d(t,"EmojiData",function(){return N}),i.d(t,"sanitize",function(){return T}),i.d(t,"uncompress",function(){return v}),i.d(t,"store",function(){return u}),i.d(t,"frequently",function(){return _})}])}); \ No newline at end of file diff --git a/docs/bundle.js b/docs/bundle.js index dbbbb785..66300438 100644 --- a/docs/bundle.js +++ b/docs/bundle.js @@ -15513,7 +15513,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "store", function() { return _utils_store__WEBPACK_IMPORTED_MODULE_0__["default"]; }); /* harmony import */ var _utils_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/data */ "./src/utils/data.js"); -/* harmony import */ var _utils_data__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_utils_data__WEBPACK_IMPORTED_MODULE_1__); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "uncompress", function() { return _utils_data__WEBPACK_IMPORTED_MODULE_1__["uncompress"]; }); /* harmony import */ var _utils_frequently__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/frequently */ "./src/utils/frequently.js"); @@ -15646,22 +15645,33 @@ var SVGs = { /*!***************************!*\ !*** ./src/utils/data.js ***! \***************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! exports provided: buildSearch, uncompress */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { -var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js"); +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildSearch", function() { return buildSearch; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uncompress", function() { return uncompress; }); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js"); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es7.symbol.async-iterator */ "./node_modules/core-js/modules/es7.symbol.async-iterator.js"); +/* harmony import */ var core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es6.symbol */ "./node_modules/core-js/modules/es6.symbol.js"); +/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var core_js_modules_es6_object_freeze__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es6.object.freeze */ "./node_modules/core-js/modules/es6.object.freeze.js"); +/* harmony import */ var core_js_modules_es6_object_freeze__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_freeze__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es6.function.name */ "./node_modules/core-js/modules/es6.function.name.js"); +/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es6.regexp.split */ "./node_modules/core-js/modules/es6.regexp.split.js"); +/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/web.dom.iterable */ "./node_modules/core-js/modules/web.dom.iterable.js"); +/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_6__); -__webpack_require__(/*! core-js/modules/es7.symbol.async-iterator */ "./node_modules/core-js/modules/es7.symbol.async-iterator.js"); -__webpack_require__(/*! core-js/modules/es6.symbol */ "./node_modules/core-js/modules/es6.symbol.js"); -__webpack_require__(/*! core-js/modules/es6.object.freeze */ "./node_modules/core-js/modules/es6.object.freeze.js"); -__webpack_require__(/*! core-js/modules/es6.function.name */ "./node_modules/core-js/modules/es6.function.name.js"); -__webpack_require__(/*! core-js/modules/es6.regexp.split */ "./node_modules/core-js/modules/es6.regexp.split.js"); -__webpack_require__(/*! core-js/modules/web.dom.iterable */ "./node_modules/core-js/modules/web.dom.iterable.js"); var mapping = { name: 'a', @@ -15707,38 +15717,6 @@ var buildSearch = function buildSearch(emoji) { return search.join(','); }; -var compress = function compress(emoji) { - emoji.short_names = emoji.short_names.filter(function (short_name) { - return short_name !== emoji.short_name; - }); - delete emoji.short_name; - emoji.sheet = [emoji.sheet_x, emoji.sheet_y]; - delete emoji.sheet_x; - delete emoji.sheet_y; - emoji.added_in = parseInt(emoji.added_in); - - if (emoji.added_in === 6) { - delete emoji.added_in; - } - - for (var key in mapping) { - emoji[mapping[key]] = emoji[key]; - delete emoji[key]; - } - - for (var _key in emoji) { - var value = emoji[_key]; - - if (Array.isArray(value) && !value.length) { - delete emoji[_key]; - } else if (typeof value === 'string' && !value.length) { - delete emoji[_key]; - } else if (value === null) { - delete emoji[_key]; - } - } -}; - function deepFreeze(object) { // Retrieve the property names defined on object var propNames = Object.getOwnPropertyNames(object); // Freeze properties before freezing self @@ -15751,7 +15729,7 @@ function deepFreeze(object) { for (var _iterator = propNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var name = _step.value; var value = object[name]; - object[name] = value && _typeof(value) === 'object' ? deepFreeze(value) : value; + object[name] = value && _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(value) === 'object' ? deepFreeze(value) : value; } } catch (err) { _didIteratorError = true; @@ -15801,11 +15779,7 @@ var uncompress = function uncompress(data) { return data; }; -module.exports = { - buildSearch: buildSearch, - compress: compress, - uncompress: uncompress -}; + /***/ }), @@ -15856,7 +15830,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_15__); /* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./index */ "./src/utils/index.js"); /* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./data */ "./src/utils/data.js"); -/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_data__WEBPACK_IMPORTED_MODULE_17__); /* harmony import */ var _frequently__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./frequently */ "./src/utils/frequently.js"); @@ -17103,4 +17076,4 @@ isWindowAvailable && function () { /******/ }); }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9FbW9qaU1hcnQvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0Vtb2ppTWFydC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9jc3MvZW1vamktbWFydC5jc3M/YzlmYiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9kb2NzL2FwcC52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzdlZTAiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzRjYTMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlP2NlNjciLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhvdXRIb2xlcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvZG9jcy9hcHAudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9FbW9qaS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL1BpY2tlci52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9jYXRlZ29yeS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL3ByZXZpZXcudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9zZWFyY2gudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9za2lucy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oYXMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19odG1sLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1wcm90by5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmljdC1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1jb250ZXh0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy13cy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9jc3MvZW1vamktbWFydC5jc3MiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3F1YXNhci1mcmFtZXdvcmsvZGlzdC91bWQvcXVhc2FyLm1hdC5jc3MiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzg3M2QiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3F1YXNhci1mcmFtZXdvcmsvZGlzdC9xdWFzYXIubWF0LmVzbS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvcXVhc2FyLWZyYW1ld29yay9kaXN0L3VtZC9xdWFzYXIubWF0LmNzcz8xZTJhIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL2RvY3MvYXBwLnZ1ZT85M2MwIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL0Vtb2ppLnZ1ZT8wNTQ1Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL1BpY2tlci52dWU/YzNkNyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9hbmNob3JzLnZ1ZT8zNGRhIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL2NhdGVnb3J5LnZ1ZT80MjRhIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3ByZXZpZXcudnVlP2Y3MTgiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2VhcmNoLnZ1ZT8yZDJiIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NraW5zLnZ1ZT9jMzQ5Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlP2E5NjgiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvbGlzdFRvU3R5bGVzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUucnVudGltZS5lc20uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Lyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9FbW9qaS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvRW1vamkudnVlP2MyMWIiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvRW1vamkudnVlPzk0YWQiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvUGlja2VyLnZ1ZSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9QaWNrZXIudnVlPzJkZDciLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvUGlja2VyLnZ1ZT9mMGYyIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlP2QxYTUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvYW5jaG9ycy52dWU/MWI5OCIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9jYXRlZ29yeS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvY2F0ZWdvcnkudnVlPzNlMzUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvY2F0ZWdvcnkudnVlPzczYjUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvcHJldmlldy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvcHJldmlldy52dWU/NWVkMyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9wcmV2aWV3LnZ1ZT9lMzU5Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NlYXJjaC52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2VhcmNoLnZ1ZT9mNTJkIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NlYXJjaC52dWU/ZTU4NiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9za2lucy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2tpbnMudnVlPzhiZWIiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2tpbnMudnVlPzk5NWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2luZGV4LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9wb2x5ZmlsbHMvc3RyaW5nRnJvbUNvZGVQb2ludC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvc3Zncy9pbmRleC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZGF0YS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZW1vamktZGF0YS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZnJlcXVlbnRseS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL3V0aWxzL3NoYXJlZC1wcm9wcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvc3RvcmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL3ZlbmRvci9yYWYtcG9seWZpbGwuanMiXSwibmFtZXMiOlsiVnVlIiwidXNlIiwiUXVhc2FyIiwiZWwiLCJyZW5kZXIiLCJoIiwiQXBwIiwiX1N0cmluZyIsIlN0cmluZyIsImZyb21Db2RlUG9pbnQiLCJzdHJpbmdGcm9tQ29kZVBvaW50IiwiTUFYX1NJWkUiLCJjb2RlVW5pdHMiLCJoaWdoU3Vycm9nYXRlIiwibG93U3Vycm9nYXRlIiwiaW5kZXgiLCJsZW5ndGgiLCJhcmd1bWVudHMiLCJyZXN1bHQiLCJjb2RlUG9pbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIk1hdGgiLCJmbG9vciIsIlJhbmdlRXJyb3IiLCJwdXNoIiwiZnJvbUNoYXJDb2RlIiwiYXBwbHkiLCJTVkdzIiwiYWN0aXZpdHkiLCJjdXN0b20iLCJmbGFncyIsImZvb2RzIiwibmF0dXJlIiwib2JqZWN0cyIsInNtaWxleXMiLCJwZW9wbGUiLCJwbGFjZXMiLCJyZWNlbnQiLCJzeW1ib2xzIiwibWFwcGluZyIsIm5hbWUiLCJ1bmlmaWVkIiwibm9uX3F1YWxpZmllZCIsImhhc19pbWdfYXBwbGUiLCJoYXNfaW1nX2dvb2dsZSIsImhhc19pbWdfdHdpdHRlciIsImhhc19pbWdfZmFjZWJvb2siLCJrZXl3b3JkcyIsInNoZWV0IiwiZW1vdGljb25zIiwidGV4dCIsInNob3J0X25hbWVzIiwiYWRkZWRfaW4iLCJidWlsZFNlYXJjaCIsImVtb2ppIiwic2VhcmNoIiwiYWRkVG9TZWFyY2giLCJzdHJpbmdzIiwic3BsaXQiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic3RyaW5nIiwicyIsInRvTG93ZXJDYXNlIiwiaW5kZXhPZiIsImpvaW4iLCJjb21wcmVzcyIsImZpbHRlciIsInNob3J0X25hbWUiLCJzaGVldF94Iiwic2hlZXRfeSIsInBhcnNlSW50Iiwia2V5IiwidmFsdWUiLCJkZWVwRnJlZXplIiwib2JqZWN0IiwicHJvcE5hbWVzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZyZWV6ZSIsInVuY29tcHJlc3MiLCJkYXRhIiwiY29tcHJlc3NlZCIsImlkIiwiZW1vamlzIiwidW5zaGlmdCIsInRvRml4ZWQiLCJtb2R1bGUiLCJleHBvcnRzIiwiU0hFRVRfQ09MVU1OUyIsIkNPTE9OU19SRUdFWCIsIlNLSU5TIiwiRW1vamlJbmRleCIsImVtb2ppc1RvU2hvd0ZpbHRlciIsImluY2x1ZGUiLCJleGNsdWRlIiwicmVjZW50TGVuZ3RoIiwiX2RhdGEiLCJfZW1vamlzRmlsdGVyIiwiX2luY2x1ZGUiLCJfZXhjbHVkZSIsIl9jdXN0b20iLCJfcmVjZW50IiwiZnJlcXVlbnRseSIsImdldCIsIl9lbW9qaXMiLCJfbmF0aXZlRW1vamlzIiwiX2Vtb3RpY29ucyIsIl9jYXRlZ29yaWVzIiwiX3JlY2VudENhdGVnb3J5IiwiX2N1c3RvbUNhdGVnb3J5IiwiX3NlYXJjaEluZGV4IiwiYnVpbGRJbmRleCIsImFsbENhdGVnb3JpZXMiLCJjYXRlZ29yaWVzIiwiaXRlbSIsImluY2x1ZGVzIiwic29ydCIsImEiLCJiIiwiaW5kZXhBIiwiaW5kZXhCIiwiY2F0ZWdvcnlEYXRhIiwiaXNDYXRlZ29yeU5lZWRlZCIsImNhdGVnb3J5IiwiZW1vamlJZCIsImFkZEVtb2ppIiwiY3VzdG9tRW1vamkiLCJhZGRDdXN0b21FbW9qaSIsIm1hcCIsImhhc0Vtb2ppIiwic2tpbiIsIm1hdGNoZXMiLCJtYXRjaCIsImFsaWFzZXMiLCJoYXNPd25Qcm9wZXJ0eSIsImVtb2ppT2JqZWN0IiwiZ2V0U2tpbiIsIkVycm9yIiwia2V5cyIsInVuaWNvZGVFbW9qaSIsIm1heFJlc3VsdHMiLCJ2YWx1ZXMiLCJhbGxSZXN1bHRzIiwiY3VycmVudEluZGV4IiwiY2hhckluZGV4IiwiY2hhciIsInJlc3VsdHMiLCJzY29yZXMiLCJzdWIiLCJzdWJzdHIiLCJzdWJJbmRleCIsInNjb3JlIiwiYVNjb3JlIiwiYlNjb3JlIiwiaW50ZXJzZWN0Iiwic2xpY2UiLCJlbW9qaURhdGEiLCJhc3NpZ24iLCJFbW9qaURhdGEiLCJpc0Vtb2ppTmVlZGVkIiwibmF0aXZlIiwiX3NraW5zIiwiaWR4IiwiZW1vdGljb24iLCJjYXRlZ29yeV9pZCIsImlzSW5jbHVkZWQiLCJpc0V4Y2x1ZGVkIiwic2tpbl92YXJpYXRpb25zIiwic2tpbklkeCIsInNraW5LZXkiLCJ2YXJpYXRpb25EYXRhIiwic2tpbkRhdGEiLCJrIiwiX3Nhbml0aXplZCIsInNhbml0aXplIiwibXVsdGlwbHkiLCJ4Iiwicm91bmQiLCJ5IiwiRW1vamlWaWV3Iiwic2V0IiwiZmFsbGJhY2siLCJlbW9qaVRvb2x0aXAiLCJlbW9qaVNpemUiLCJfZW1vamkiLCJfbmF0aXZlIiwiX3NraW4iLCJfc2V0IiwiX2ZhbGxiYWNrIiwiY2FuUmVuZGVyIiwiX2NhblJlbmRlciIsImNzc0NsYXNzIiwiX2Nzc0NsYXNzIiwiY3NzU3R5bGUiLCJfY3NzU3R5bGUiLCJjb250ZW50IiwiX2NvbnRlbnQiLCJ0aXRsZSIsIl9pc0N1c3RvbSIsIl9pc05hdGl2ZSIsIl9oYXNFbW9qaSIsIl9lbW9qaVR5cGUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJnZXRFbW9qaSIsImltYWdlVXJsIiwiYmFja2dyb3VuZFNpemUiLCJ3aWR0aCIsImhlaWdodCIsImJhY2tncm91bmRQb3NpdGlvbiIsImdldFBvc2l0aW9uIiwiZm9udFNpemUiLCJoYXNJbWFnZSIsInVuZGVmaW5lZCIsInNraW5fdG9uZSIsImNvbG9ucyIsInVuaWZpZWRUb05hdGl2ZSIsIkRFRkFVTFRTIiwiaW5pdGlhbGl6ZWQiLCJkZWZhdWx0cyIsImluaXQiLCJzdG9yZSIsImFkZCIsIm1heE51bWJlciIsImRlZmF1bHRMZW5ndGgiLCJtaW4iLCJpIiwicXVhbnRpdHkiLCJmcmVxdWVudGx5S2V5cyIsInNvcnRlZCIsInJldmVyc2UiLCJzbGljZWQiLCJsYXN0IiwicG9wIiwidW5pY29kZXMiLCJjb2RlUG9pbnRzIiwidSIsInVuaXEiLCJhcnIiLCJyZWR1Y2UiLCJhY2MiLCJ1bmlxQSIsInVuaXFCIiwiZGVlcE1lcmdlIiwibyIsIm9yaWdpbmFsVmFsdWUiLCJtZWFzdXJlU2Nyb2xsYmFyIiwiZG9jdW1lbnQiLCJkaXYiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJvdmVyZmxvdyIsInBvc2l0aW9uIiwidG9wIiwiYm9keSIsImFwcGVuZENoaWxkIiwic2Nyb2xsYmFyV2lkdGgiLCJvZmZzZXRXaWR0aCIsImNsaWVudFdpZHRoIiwicmVtb3ZlQ2hpbGQiLCJFbW9qaVByb3BzIiwidHlwZSIsIkJvb2xlYW4iLCJkZWZhdWx0IiwidG9vbHRpcCIsIkZ1bmN0aW9uIiwicmVxdWlyZWQiLCJzaXplIiwiUGlja2VyUHJvcHMiLCJwZXJMaW5lIiwibWF4U2VhcmNoUmVzdWx0cyIsImNvbG9yIiwiZGVmYXVsdFNraW4iLCJhdXRvRm9jdXMiLCJpMThuIiwic2hvd1ByZXZpZXciLCJzaG93U2VhcmNoIiwic2hvd0NhdGVnb3JpZXMiLCJzaG93U2tpblRvbmVzIiwiaW5maW5pdGVTY3JvbGwiLCJwaWNrZXJTdHlsZXMiLCJOQU1FU1BBQ0UiLCJfSlNPTiIsIkpTT04iLCJpc0xvY2FsU3RvcmFnZVN1cHBvcnRlZCIsIndpbmRvdyIsImdldHRlciIsInNldHRlciIsInNldEhhbmRsZXJzIiwiaGFuZGxlcnMiLCJzZXROYW1lc3BhY2UiLCJuYW1lc3BhY2UiLCJ1cGRhdGUiLCJzdGF0ZSIsImxvY2FsU3RvcmFnZSIsInN0cmluZ2lmeSIsImUiLCJwYXJzZSIsImlzV2luZG93QXZhaWxhYmxlIiwibGFzdFRpbWUiLCJ2ZW5kb3JzIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJjYWxsYmFjayIsImVsZW1lbnQiLCJjdXJyVGltZSIsIkRhdGUiLCJnZXRUaW1lIiwidGltZVRvQ2FsbCIsIm1heCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7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LHNCQUFzQiw4QkFBOEIsR0FBRyxzQkFBc0IsOEJBQThCLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsY0FBYyw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGNBQWMsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxlQUFlLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4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QUFtQyxHQUFHLGFBQWEsbUNBQW1DLEdBQUcsYUFBYSxtQ0FBbUMsR0FBRyxhQUFhLG1DQUFtQyxHQUFHLGFBQWEsbUNBQW1DLEdBQUcsYUFBYSxtQ0FBbUMsR0FBRyxhQUFhLG1DQUFtQyxHQUFHLGFBQWEsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLFlBQVksbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixnQ0FBZ0MsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsWUFBWSxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsa0JBQWtCLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcsWUFBWSxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsWUFBWSxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsYUFBYSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLFlBQVksbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsZ0NBQWdDLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxhQUFhLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLGFBQWEsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxZQUFZLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLGdDQUFnQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLGdDQUFnQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxzQkFBc0IseUVBQXlFLEdBQUcsYUFBYSx1R0FBdUcsR0FBRyxnQkFBZ0IsMEdBQTBHLEdBQUcsYUFBYSx1R0FBdUcsR0FBRyxnQkFBZ0IsMEdBQTBHLEdBQUcsYUFBYSx1R0FBdUcsR0FBRyxnQkFBZ0IsMEdBQTBHLEdBQUcsYUFBYSx3R0FBd0csR0FBRyxnQkFBZ0IsMkdBQTJHLEdBQUcsYUFBYSx3R0FBd0csR0FBRyxnQkFBZ0IsMkdBQTJHLEdBQUcsYUFBYSx5R0FBeUcsR0FBRyxnQkFBZ0IsNEdBQTRHLEdBQUcsYUFBYSxpSEFBaUgsR0FBRyxnQkFBZ0Isb0hBQW9ILEdBQUcsYUFBYSxpSEFBaUgsR0FBRyxnQkFBZ0Isb0hBQW9ILEdBQUcsYUFBYSxpSEFBaUgsR0FBRyxnQkFBZ0Isb0hBQW9ILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxtSEFBbUgsR0FBRyxpQkFBaUIsc0hBQXNILEdBQUcsY0FBYyxtSEFBbUgsR0FBRyxpQkFBaUIsc0hBQXNILEdBQUcsY0FBYyxtSEFBbUgsR0FBRyxpQkFBaUIsc0hBQXNILEdBQUcsY0FBYyxtSEFBbUgsR0FBRyxpQkFBaUIsc0hBQXNILEdBQUcsY0FBYyxvSEFBb0gsR0FBRyxpQkFBaUIsdUhBQXVILEdBQUcsY0FBYyxvSEFBb0gsR0FBRyxpQkFBaUIsdUhBQXVILEdBQUcsY0FBYyxvSEFBb0gsR0FBRyxpQkFBaUIsdUhBQXVILEdBQUcsY0FBYyxvSEFBb0gsR0FBRyxpQkFBaUIsdUhBQXVILEdBQUcsY0FBYyxvSEFBb0gsR0FBRyxpQkFBaUIsdUhBQXVILEdBQUcsMEJBQTBCLGdDQUFnQyxHQUFHLGlCQUFpQixnRUFBZ0UsR0FBRyxnQkFBZ0Isa0JBQWtCLEdBQUcsYUFBYSxrQkFBa0IsR0FBRyxpQkFBaUIsa0JBQWtCLEdBQUcsY0FBYyxnQ0FBZ0MsR0FBRywwQkFBMEIseUJBQXlCLGtCQUFrQix3QkFBd0Isd0JBQXdCLEdBQUcsK0NBQStDLGdDQUFnQyx5QkFBeUIsR0FBRyxnQkFBZ0Isb0NBQW9DLGdDQUFnQyxHQUFHLFdBQVcsK0JBQStCLDJCQUEyQixHQUFHLG1CQUFtQix1Q0FBdUMsbUNBQW1DLEdBQUcsU0FBUyx3QkFBd0Isd0JBQXdCLEdBQUcsWUFBWSwwQkFBMEIsMEJBQTBCLEdBQUcsaUJBQWlCLGdDQUFnQyxnQ0FBZ0MsR0FBRyxnQkFBZ0IsMkJBQTJCLHNCQUFzQixHQUFHLGVBQWUsMEJBQTBCLHFCQUFxQixHQUFHLGVBQWUsc0JBQXNCLGlCQUFpQixHQUFHLGtCQUFrQix5QkFBeUIsb0NBQW9DLEdBQUcsZ0JBQWdCLHVCQUF1QixrQ0FBa0MsR0FBRyxrQ0FBa0MsMEJBQTBCLGdDQUFnQyxHQUFHLG9CQUFvQiwyQkFBMkIsdUNBQXVDLEdBQUcsbUJBQW1CLDhCQUE4QixzQ0FBc0MsR0FBRyxnQkFBZ0IsMEJBQTBCLGdDQUFnQyxHQUFHLGNBQWMsd0JBQXdCLDhCQUE4QixHQUFHLGdDQUFnQywyQkFBMkIsNEJBQTRCLEdBQUcsbUJBQW1CLDZCQUE2Qiw4QkFBOEIsR0FBRyxrQkFBa0IsNEJBQTRCLDZCQUE2QixHQUFHLGtCQUFrQiw4QkFBOEIsa0NBQWtDLEdBQUcsZ0JBQWdCLDRCQUE0QixnQ0FBZ0MsR0FBRyxtQkFBbUIsK0JBQStCLDhCQUE4QixHQUFHLG9CQUFvQixnQ0FBZ0MsK0JBQStCLEdBQUcsb0JBQW9CLGdDQUFnQyxxQ0FBcUMsR0FBRyxtQkFBbUIsbUNBQW1DLG9DQUFvQyxHQUFHLGVBQWUsK0JBQStCLCtCQUErQixHQUFHLGFBQWEsNkJBQTZCLDZCQUE2QixHQUFHLGdCQUFnQixnQ0FBZ0MsbUNBQW1DLDJCQUEyQixHQUFHLGtCQUFrQixrQ0FBa0MsNkJBQTZCLEdBQUcsaUJBQWlCLGlDQUFpQyxvQ0FBb0MsNEJBQTRCLEdBQUcsaUNBQWlDLG1CQUFtQixHQUFHLDZDQUE2QyxvQkFBb0IsR0FBRyxpQ0FBaUMsa0JBQWtCLEdBQUcsNkNBQTZDLG1CQUFtQixHQUFHLDZCQUE2QixzQkFBc0IsR0FBRyx5Q0FBeUMsc0JBQXNCLEdBQUcsNkJBQTZCLHFCQUFxQixHQUFHLHlDQUF5QyxxQkFBcUIsR0FBRyw2QkFBNkIsdUJBQXVCLEdBQUcseUNBQXlDLHVCQUF1QixHQUFHLDZCQUE2QixzQkFBc0IsR0FBRyx5Q0FBeUMsc0JBQXNCLEdBQUcsNkJBQTZCLHVCQUF1QixHQUFHLHlDQUF5Qyx1QkFBdUIsR0FBRyw2QkFBNkIsc0JBQXNCLEdBQUcseUNBQXlDLHNCQUFzQixHQUFHLDZCQUE2Qix1QkFBdUIsR0FBRyx5Q0FBeUMsdUJBQXVCLEdBQUcsNkJBQTZCLHNCQUFzQixHQUFHLHlDQUF5QyxzQkFBc0IsR0FBRyw2QkFBNkIsdUJBQXVCLEdBQUcseUNBQXlDLHVCQUF1QixHQUFHLDZCQUE2QixzQkFBc0IsR0FBRyx5Q0FBeUMsc0JBQXNCLEdBQUcseUJBQXlCLDZ4Q0FBNnhDLGtCQUFrQixtQkFBbUIsc0JBQXNCLEtBQUssNjNDQUE2M0MsbUJBQW1CLG9CQUFvQix1QkFBdUIsS0FBSyxzQkFBc0IsMkJBQTJCLDJCQUEyQixLQUFLLDJXQUEyVyx5QkFBeUIseUJBQXlCLEtBQUssZ0NBQWdDLHlCQUF5Qix5QkFBeUIsS0FBSyx3Q0FBd0MsbUJBQW1CLGdCQUFnQixLQUFLLDhDQUE4QyxzQkFBc0IsS0FBSyw4Q0FBOEMsaUJBQWlCLGtCQUFrQixLQUFLLHdDQUF3QyxtQkFBbUIscUJBQXFCLEtBQUssOENBQThDLDJCQUEyQixLQUFLLDhDQUE4QyxzQkFBc0Isa0JBQWtCLEtBQUssd0NBQXdDLG1CQUFtQixzQkFBc0IsS0FBSyw4Q0FBOEMsNEJBQTRCLEtBQUssOENBQThDLHVCQUF1QixrQkFBa0IsS0FBSyx3Q0FBd0MsbUJBQW1CLGlCQUFpQixLQUFLLDhDQUE4Qyx1QkFBdUIsS0FBSyw4Q0FBOEMsa0JBQWtCLGtCQUFrQixLQUFLLHdDQUF3QyxtQkFBbUIsc0JBQXNCLEtBQUssOENBQThDLDRCQUE0QixLQUFLLDhDQUE4Qyx1QkFBdUIsa0JBQWtCLEtBQUssd0NBQXdDLG1CQUFtQixzQkFBc0IsS0FBSyw4Q0FBOEMsNEJBQTRCLEtBQUssOENBQThDLHVCQUF1QixrQkFBa0IsS0FBSyx3Q0FBd0MsbUJBQW1CLGlCQUFpQixLQUFLLDhDQUE4Qyx1QkFBdUIsS0FBSyw4Q0FBOEMsa0JBQWtCLGtCQUFrQixLQUFLLHdDQUF3QyxtQkFBbUIsc0JBQXNCLEtBQUssOENBQThDLDRCQUE0QixLQUFLLDhDQUE4Qyx1QkFBdUIsa0JBQWtCLEtBQUssd0NBQXdDLG1CQUFtQixzQkFBc0IsS0FBSyw4Q0FBOEMsNEJBQTRCLEtBQUssOENBQThDLHVCQUF1QixrQkFBa0IsS0FBSyx3Q0FBd0MsbUJBQW1CLGlCQUFpQixLQUFLLDhDQUE4Qyx1QkFBdUIsS0FBSyw4Q0FBOEMsa0JBQWtCLGtCQUFrQixLQUFLLDBDQUEwQyxtQkFBbUIsc0JBQXNCLEtBQUssZ0RBQWdELDRCQUE0QixLQUFLLGdEQUFnRCx1QkFBdUIsa0JBQWtCLEtBQUssMENBQTBDLG1CQUFtQixzQkFBc0IsS0FBSyxnREFBZ0QsNEJBQTRCLEtBQUssZ0RBQWdELHVCQUF1QixrQkFBa0IsS0FBSywwQ0FBMEMsbUJBQW1CLGtCQUFrQixLQUFLLGdEQUFnRCx3QkFBd0IsS0FBSyxnREFBZ0QsbUJBQW1CLGtCQUFrQixLQUFLLEdBQUcsNkJBQTZCLCtyQkFBK3JCLGtCQUFrQixtQkFBbUIsc0JBQXNCLEtBQUssK3VCQUErdUIsbUJBQW1CLG9CQUFvQix1QkFBdUIsS0FBSyxhQUFhLDJCQUEyQiwyQkFBMkIsS0FBSywyTUFBMk0seUJBQXlCLHlCQUF5QixLQUFLLGtCQUFrQix5QkFBeUIseUJBQXlCLEtBQUssc0JBQXNCLG1CQUFtQixnQkFBZ0IsS0FBSyx5QkFBeUIsc0JBQXNCLEtBQUsseUJBQXlCLGlCQUFpQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHFCQUFxQixLQUFLLHlCQUF5QiwyQkFBMkIsS0FBSyx5QkFBeUIsc0JBQXNCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyx1QkFBdUIsbUJBQW1CLHNCQUFzQixLQUFLLDBCQUEwQiw0QkFBNEIsS0FBSywwQkFBMEIsdUJBQXVCLGtCQUFrQixLQUFLLHVCQUF1QixtQkFBbUIsc0JBQXNCLEtBQUssMEJBQTBCLDRCQUE0QixLQUFLLDBCQUEwQix1QkFBdUIsa0JBQWtCLEtBQUssdUJBQXVCLG1CQUFtQixrQkFBa0IsS0FBSywwQkFBMEIsd0JBQXdCLEtBQUssMEJBQTBCLG1CQUFtQixrQkFBa0IsS0FBSyxHQUFHLDZCQUE2QiwrckJBQStyQixrQkFBa0IsbUJBQW1CLHNCQUFzQixLQUFLLCt1QkFBK3VCLG1CQUFtQixvQkFBb0IsdUJBQXVCLEtBQUssYUFBYSwyQkFBMkIsMkJBQTJCLEtBQUssMk1BQTJNLHlCQUF5Qix5QkFBeUIsS0FBSyxrQkFBa0IseUJBQXlCLHlCQUF5QixLQUFLLHNCQUFzQixtQkFBbUIsZ0JBQWdCLEtBQUsseUJBQXlCLHNCQUFzQixLQUFLLHlCQUF5QixpQkFBaUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixxQkFBcUIsS0FBSyx5QkFBeUIsMkJBQTJCLEtBQUsseUJBQXlCLHNCQUFzQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsaUJBQWlCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHlCQUF5QixrQkFBa0Isa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixzQkFBc0IsS0FBSyx5QkFBeUIsNEJBQTRCLEtBQUsseUJBQXlCLHVCQUF1QixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsaUJBQWlCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHlCQUF5QixrQkFBa0Isa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixzQkFBc0IsS0FBSyx5QkFBeUIsNEJBQTRCLEtBQUsseUJBQXlCLHVCQUF1QixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsaUJBQWlCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHlCQUF5QixrQkFBa0Isa0JBQWtCLEtBQUssdUJBQXVCLG1CQUFtQixzQkFBc0IsS0FBSywwQkFBMEIsNEJBQTRCLEtBQUssMEJBQTBCLHVCQUF1QixrQkFBa0IsS0FBSyx1QkFBdUIsbUJBQW1CLHNCQUFzQixLQUFLLDBCQUEwQiw0QkFBNEIsS0FBSywwQkFBMEIsdUJBQXVCLGtCQUFrQixLQUFLLHVCQUF1QixtQkFBbUIsa0JBQWtCLEtBQUssMEJBQTBCLHdCQUF3QixLQUFLLDBCQUEwQixtQkFBbUIsa0JBQWtCLEtBQUssR0FBRyw2QkFBNkIsK3JCQUErckIsa0JBQWtCLG1CQUFtQixzQkFBc0IsS0FBSywrdUJBQSt1QixtQkFBbUIsb0JBQW9CLHVCQUF1QixLQUFLLGFBQWEsMkJBQTJCLDJCQUEyQixLQUFLLDJNQUEyTSx5QkFBeUIseUJBQXlCLEtBQUssa0JBQWtCLHlCQUF5Qix5QkFBeUIsS0FBSyxzQkFBc0IsbUJBQW1CLGdCQUFnQixLQUFLLHlCQUF5QixzQkFBc0IsS0FBSyx5QkFBeUIsaUJBQWlCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIscUJBQXFCLEtBQUsseUJBQXlCLDJCQUEyQixLQUFLLHlCQUF5QixzQkFBc0Isa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixzQkFBc0IsS0FBSyx5QkFBeUIsNEJBQTRCLEtBQUsseUJBQXlCLHVCQUF1QixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLGlCQUFpQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx5QkFBeUIsa0JBQWtCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixzQkFBc0IsS0FBSyx5QkFBeUIsNEJBQTRCLEtBQUsseUJBQXlCLHVCQUF1QixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLGlCQUFpQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx5QkFBeUIsa0JBQWtCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixzQkFBc0IsS0FBSyx5QkFBeUIsNEJBQTRCLEtBQUsseUJBQXlCLHVCQUF1QixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLGlCQUFpQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx5QkFBeUIsa0JBQWtCLGtCQUFrQixLQUFLLHVCQUF1QixtQkFBbUIsc0JBQXNCLEtBQUssMEJBQTBCLDRCQUE0QixLQUFLLDBCQUEwQix1QkFBdUIsa0JBQWtCLEtBQUssdUJBQXVCLG1CQUFtQixzQkFBc0IsS0FBSywwQkFBMEIsNEJBQTRCLEtBQUssMEJBQTBCLHVCQUF1QixrQkFBa0IsS0FBSyx1QkFBdUIsbUJBQW1CLGtCQUFrQixLQUFLLDBCQUEwQix3QkFBd0IsS0FBSywwQkFBMEIsbUJBQW1CLGtCQUFrQixLQUFLLEdBQUcsOEJBQThCLCtyQkFBK3JCLGtCQUFrQixtQkFBbUIsc0JBQXNCLEtBQUssK3VCQUErdUIsbUJBQW1CLG9CQUFvQix1QkFBdUIsS0FBSyxhQUFhLDJCQUEyQiwyQkFBMkIsS0FBSywyTUFBMk0seUJBQXlCLHlCQUF5QixLQUFLLGtCQUFrQix5QkFBeUIseUJBQXlCLEtBQUssc0JBQXNCLG1CQUFtQixnQkFBZ0IsS0FBSyx5QkFBeUIsc0JBQXNCLEtBQUsseUJBQXlCLGlCQUFpQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHFCQUFxQixLQUFLLHlCQUF5QiwyQkFBMkIsS0FBSyx5QkFBeUIsc0JBQXNCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyx1QkFBdUIsbUJBQW1CLHNCQUFzQixLQUFLLDBCQUEwQiw0QkFBNEIsS0FBSywwQkFBMEIsdUJBQXVCLGtCQUFrQixLQUFLLHVCQUF1QixtQkFBbUIsc0JBQXNCLEtBQUssMEJBQTBCLDRCQUE0QixLQUFLLDBCQUEwQix1QkFBdUIsa0JBQWtCLEtBQUssdUJBQXVCLG1CQUFtQixrQkFBa0IsS0FBSywwQkFBMEIsd0JBQXdCLEtBQUssMEJBQTBCLG1CQUFtQixrQkFBa0IsS0FBSyxHQUFHLGFBQWEsa0JBQWtCLG9CQUFvQixXQUFXLGFBQWEsY0FBYyxZQUFZLGlCQUFpQixrQkFBa0IsNEJBQTRCLHlDQUF5QyxHQUFHLG9CQUFvQixtQkFBbUIsZ0NBQWdDLEdBQUcsa0JBQWtCLGtDQUFrQyxHQUFHLGdDQUFnQyxnQkFBZ0IsR0FBRyxrQkFBa0IsZ0NBQWdDLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLFdBQVcsb0pBQW9KLEdBQUcsNkNBQTZDLG1CQUFtQixpQkFBaUIsR0FBRyxvQ0FBb0MsbUJBQW1CLGlCQUFpQixHQUFHLHdDQUF3QyxtQkFBbUIsaUJBQWlCLEdBQUcscURBQXFELGdDQUFnQyxHQUFHLHVCQUF1QiwwQ0FBMEMsR0FBRyxtR0FBbUcsNkJBQTZCLGNBQWMsR0FBRyxZQUFZLGVBQWUsbUJBQW1CLDBCQUEwQixHQUFHLHVCQUF1QixpREFBaUQsR0FBRyx1QkFBdUIsK0NBQStDLEdBQUcsdUJBQXVCLHlCQUF5QixHQUFHLHlDQUF5QywwREFBMEQsR0FBRyx5QkFBeUIsaUNBQWlDLEdBQUcsa0JBQWtCLG9FQUFvRSxHQUFHLGdCQUFnQiwyQ0FBMkMsR0FBRyxrQkFBa0IsNkNBQTZDLEdBQUcsaUJBQWlCLDRDQUE0QyxHQUFHLG1CQUFtQixxREFBcUQsR0FBRyxrQkFBa0IsNkJBQTZCLGdFQUFnRSxHQUFHLDJDQUEyQyw4REFBOEQsR0FBRyxtREFBbUQsbUVBQW1FLEdBQUcsdUJBQXVCLG1EQUFtRCxvREFBb0QsR0FBRyxxQkFBcUIsaURBQWlELHVEQUF1RCxHQUFHLHNCQUFzQiw0RkFBNEYsR0FBRyx1QkFBdUIsNkZBQTZGLEdBQUcsYUFBYSwyQkFBMkIsOEJBQThCLEdBQUcsc0JBQXNCLHdDQUF3QyxHQUFHLG1CQUFtQiwyQkFBMkIsR0FBRyxzRkFBc0YsOEJBQThCLEdBQUcsbUJBQW1CLHlDQUF5Qyx5Q0FBeUMseUNBQXlDLHlDQUF5QyxHQUFHLFdBQVcsbUJBQW1CLEdBQUcsbUNBQW1DLHNDQUFzQyxpQ0FBaUMsR0FBRyxhQUFhLHFCQUFxQixHQUFHLGFBQWEscUJBQXFCLEdBQUcsY0FBYyxnQ0FBZ0MsR0FBRyxzQkFBc0Isb0NBQW9DLEdBQUcsdUJBQXVCLG1DQUFtQyxHQUFHLG1CQUFtQiwrQkFBK0IsR0FBRyx1QkFBdUIsbUNBQW1DLEdBQUcsbUJBQW1CLCtCQUErQixHQUFHLGNBQWMsOENBQThDLEdBQUcsY0FBYyw4Q0FBOEMsR0FBRyxlQUFlLCtDQUErQyxHQUFHLGVBQWUsK0NBQStDLEdBQUcsZUFBZSwrQ0FBK0MsR0FBRyxlQUFlLCtDQUErQyxHQUFHLGVBQWUsK0NBQStDLEdBQUcsb0JBQW9CLDRCQUE0QixHQUFHLGtCQUFrQiw0QkFBNEIsR0FBRyxlQUFlLGdCQUFnQixHQUFHLGdCQUFnQixpQkFBaUIsR0FBRyxzQkFBc0IsdUJBQXVCLEdBQUcsa0xBQWtMLG9CQUFvQixHQUFHLG1OQUFtTix1QkFBdUIsR0FBRyw4QkFBOEIsV0FBVyxZQUFZLGFBQWEsR0FBRyxrQ0FBa0MsV0FBVyxhQUFhLGNBQWMsR0FBRyxvQ0FBb0MsYUFBYSxjQUFjLFlBQVksR0FBRyxnQ0FBZ0MsV0FBVyxjQUFjLFlBQVksR0FBRyx3Q0FBd0MsV0FBVyxZQUFZLEdBQUcsMENBQTBDLFdBQVcsYUFBYSxHQUFHLDhDQUE4QyxjQUFjLFlBQVksR0FBRyxnREFBZ0QsY0FBYyxhQUFhLEdBQUcsZUFBZSxrQkFBa0IsZ0NBQWdDLHFCQUFxQixzQkFBc0IsR0FBRyxnQ0FBZ0MsV0FBVyxhQUFhLGNBQWMsWUFBWSxHQUFHLG9DQUFvQyxhQUFhLGNBQWMscUNBQXFDLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLG9CQUFvQixzQ0FBc0MsR0FBRyxvQkFBb0Isc0NBQXNDLEdBQUcsWUFBWSx1QkFBdUIsR0FBRyxhQUFhLHNCQUFzQixHQUFHLHVCQUF1QixXQUFXLFlBQVksZ0JBQWdCLGlCQUFpQix1QkFBdUIsbUJBQW1CLDJCQUEyQixxQkFBcUIsZUFBZSx5QkFBeUIsR0FBRyx1QkFBdUIsV0FBVyw2QkFBNkIsZUFBZSxtQkFBbUIsdUJBQXVCLHVCQUF1Qiw2QkFBNkIsK0dBQStHLHlCQUF5QixxQkFBcUIsb0NBQW9DLEdBQUcsNkJBQTZCLHFCQUFxQixHQUFHLCtCQUErQixrQkFBa0IsR0FBRyxvQkFBb0IscUJBQXFCLHVCQUF1Qix5QkFBeUIsdUJBQXVCLGNBQWMsZUFBZSxnQkFBZ0IsaUJBQWlCLEdBQUcsMEJBQTBCLGdCQUFnQixtQkFBbUIsdUJBQXVCLFdBQVcsWUFBWSxhQUFhLGNBQWMsb0ZBQW9GLGlDQUFpQyw2QkFBNkIsNkJBQTZCLGVBQWUsMkNBQTJDLEdBQUcsaUNBQWlDLDJCQUEyQixpQkFBaUIsbUJBQW1CLEdBQUcsU0FBUyxtQkFBbUIsdUJBQXVCLHVCQUF1Qix1QkFBdUIsd0JBQXdCLEdBQUcsUUFBUSwyQkFBMkIsNEJBQTRCLEdBQUcsZ0JBQWdCLDRCQUE0QixHQUFHLGVBQWUsMkJBQTJCLDhCQUE4QiwrQkFBK0IsR0FBRyxrQkFBa0IsNkJBQTZCLGdDQUFnQyw2QkFBNkIsR0FBRyxpQkFBaUIsOEJBQThCLCtCQUErQiw0QkFBNEIsR0FBRyxVQUFVLDhCQUE4QixHQUFHLGlCQUFpQixxQ0FBcUMsR0FBRyxjQUFjLGlCQUFpQixHQUFHLDJCQUEyQixvQkFBb0IsR0FBRywyQkFBMkIscUJBQXFCLEdBQUcsMkJBQTJCLG1CQUFtQixHQUFHLDJCQUEyQixzQkFBc0IsR0FBRyxjQUFjLGdCQUFnQixHQUFHLDJCQUEyQixtQkFBbUIsR0FBRywyQkFBMkIsb0JBQW9CLEdBQUcsMkJBQTJCLGtCQUFrQixHQUFHLDJCQUEyQixxQkFBcUIsR0FBRyxZQUFZLHFCQUFxQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRyxZQUFZLG9CQUFvQixHQUFHLHVCQUF1QixxQkFBcUIsR0FBRyx1QkFBdUIsc0JBQXNCLEdBQUcsdUJBQXVCLG9CQUFvQixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyxZQUFZLHFCQUFxQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRyxZQUFZLG9CQUFvQixHQUFHLHVCQUF1QixxQkFBcUIsR0FBRyx1QkFBdUIsc0JBQXNCLEdBQUcsdUJBQXVCLG9CQUFvQixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyxZQUFZLHVCQUF1QixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyx1QkFBdUIsd0JBQXdCLEdBQUcsdUJBQXVCLHNCQUFzQixHQUFHLHVCQUF1Qix5QkFBeUIsR0FBRyxZQUFZLHNCQUFzQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRyxZQUFZLHVCQUF1QixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyx1QkFBdUIsd0JBQXdCLEdBQUcsdUJBQXVCLHNCQUFzQixHQUFHLHVCQUF1Qix5QkFBeUIsR0FBRyxZQUFZLHNCQUFzQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRyxZQUFZLHVCQUF1QixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyx1QkFBdUIsd0JBQXdCLEdBQUcsdUJBQXVCLHNCQUFzQixHQUFHLHVCQUF1Qix5QkFBeUIsR0FBRyxZQUFZLHNCQUFzQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRywyQkFBMkIsc0JBQXNCLEdBQUcsMkJBQTJCLHVC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QUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsY0FBYzs7QUFFbEU7QUFDQTs7Ozs7Ozs7Ozs7O0FDM0VBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7Ozs7Ozs7QUN2THRDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsS0FBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsT0FBTztB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUVRO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7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QUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFtQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsS0FBcUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxxQ0FBcUMsZ0VBQWdFO0FBQ3JHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCw0QkFBNEIsK0JBQStCO0FBQzNELDRCQUE0QiwrQkFBK0I7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQyxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyx1RkFBdUY7QUFDNUY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEM7QUFDMUMsaUJBQWlCLHlCQUF5QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsU0FBUztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjs7QUFFMUIsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIscUJBQXFCO0FBQ3hDO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHlCQUF5QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix5QkFBeUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiwwQkFBMEI7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLG9CQUFvQixFQUFFOztBQUVwRDtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxLQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUlBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsS0FBcUM7QUFDekQ7QUFDQSxNQUFNLFNBQUU7QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUMscUJBQXFCLCtCQUErQjtBQUNwRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QjtBQUNBLHNCQUFzQixpQ0FBaUM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxNQUFNLEVBRU47QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssVUFBVSxJQUFxQztBQUNwRDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixvQkFBb0I7QUFDekM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLDhCQUE4QjtBQUM5QixNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0EsS0FBSyxNQUFNLEVBRU47QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixlQUFlO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxZQUFZLEtBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsMkJBQTJCLEVBQUU7QUFDdkUsS0FBSztBQUNMO0FBQ0EsMENBQTBDLDRCQUE0QixFQUFFO0FBQ3hFLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZUFBZTtBQUM5QyxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMkJBQTJCO0FBQ3RELGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyw2Q0FBNkMsRUFBRTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix3QkFBd0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELDRCQUE0QixFQUFFO0FBQ2xGLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELCtCQUErQixFQUFFO0FBQ3JGLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsYUFBYTs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxLQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxxQ0FBcUM7O0FBRXRFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1Q0FBdUMsRUFBRTtBQUNwRjtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsMkNBQTJDLEVBQUU7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLDhCQUE4QixFQUFFO0FBQ3JFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDLHVDQUF1Qzs7QUFFekUscUNBQXFDLDBCQUEwQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLGdCQUFnQjtBQUN4RDtBQUNBO0FBQ0EsZ0VBQWdFLHNCQUFzQixFQUFFO0FBQ3hGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQix3QkFBd0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFNBQVMsVUFBVSxJQUFxQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDJCQUEyQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCx5QkFBeUIsRUFBRTtBQUNqRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLFFBQVEsSUFDK0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEtBQzZCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFZSxrRUFBRyxFQUFDOzs7Ozs7Ozs7Ozs7O0FDNXZRbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7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QUFZLE1BQU1KLFFBQVEsR0FBR04sUUFBakIsQ0FBWixDQUFqQjtBQUNBLFFBQUl4TixFQUFFLEdBQUcwTSxNQUFNLENBQUN5QixVQUFQLENBQWtCLFlBQVc7QUFDcENQLGNBQVEsQ0FBQ0UsUUFBUSxHQUFHRyxVQUFaLENBQVI7QUFDRCxLQUZRLEVBRU5BLFVBRk0sQ0FBVDtBQUlBVCxZQUFRLEdBQUdNLFFBQVEsR0FBR0csVUFBdEI7QUFDQSxXQUFPak8sRUFBUDtBQUNELEdBVEQ7QUFXRixNQUFJLENBQUMwTSxNQUFNLENBQUNpQixvQkFBWixFQUNFakIsTUFBTSxDQUFDaUIsb0JBQVAsR0FBOEIsVUFBUzNOLEVBQVQsRUFBYTtBQUN6Q29PLGdCQUFZLENBQUNwTyxFQUFELENBQVo7QUFDRCxHQUZEO0FBR0gsQ0E1QkQsRUFERixDIiwiZmlsZSI6ImJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkVtb2ppTWFydFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJFbW9qaU1hcnRcIl0gPSBmYWN0b3J5KCk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vZG9jcy9pbmRleC5qc1wiKTtcbiIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZW1vamktbWFydC5jc3NcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiNmYwZTBmOGNcIiwgY29udGVudCwgZmFsc2UsIHt9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9lbW9qaS1tYXJ0LmNzc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZW1vamktbWFydC5jc3NcIik7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZmJjNzM1YiZzY29wZWQ9dHJ1ZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL2FwcC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00ZmJjNzM1YiZzY29wZWQ9dHJ1ZSZsYW5nPWNzcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNGZiYzczNWJcIixcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvc2ViL3dlYi9lbW9qaS1tYXJ0LXZ1ZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGZiYzczNWInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGZiYzczNWInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FwcC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNGZiYzczNWInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImRvY3MvYXBwLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmbGFuZz1jc3MmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmbGFuZz1jc3MmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZmJjNzM1YiZzY29wZWQ9dHJ1ZSZcIiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IEFwcCBmcm9tICcuL2FwcCdcblxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9xdWFzYXJmcmFtZXdvcmsvcXVhc2FyL2lzc3Vlcy8xNTc2XG4vLyBmb3IgdGhlIGluZm9ybWF0aW9uIGFib3V0IFF1YXNhciBpbnRlZ3JhdGlvbiBpbnRvIGV4aXN0aW5nIGFwcC5cbmltcG9ydCAncXVhc2FyLWZyYW1ld29yay9kaXN0L3VtZC9xdWFzYXIubWF0LmNzcydcbmltcG9ydCBRdWFzYXIgZnJvbSAncXVhc2FyLWZyYW1ld29yay9kaXN0L3F1YXNhci5tYXQuZXNtJ1xuVnVlLnVzZShRdWFzYXIpXG5cbm5ldyBWdWUoe1xuXHRlbDogJyNhcHAnLFxuXHRyZW5kZXI6IChoKSA9PiBoKEFwcCksXG59KVxuIiwiZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycjJbaV0gPSBhcnJbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheTsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQ7IiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4vZGVmaW5lUHJvcGVydHlcIik7XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgdmFyIG93bktleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvd25LZXlzID0gb3duS2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIG93bktleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0U3ByZWFkOyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheTsiLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJhcHBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8aDE+RW1vamkgTWFydCBWdWUg8J+PrDwvaDE+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGVtb2ppIDpkYXRhPVwiaW5kZXhcIiBlbW9qaT1cIjpzYW50YTo6c2tpbi10b25lLTM6XCIgOnNpemU9XCIzMlwiIC8+XG4gICAgICA8ZW1vamkgOmRhdGE9XCJpbmRleFwiIGVtb2ppPVwic2FudGFcIiBzZXQ9XCJ0d2l0dGVyXCIgOnNpemU9XCIzMlwiIC8+XG4gICAgICA8ZW1vamkgOmRhdGE9XCJpbmRleFwiIDplbW9qaT1cInNhbnRhRW1vamlPYmplY3RcIiA6c2l6ZT1cIjMyXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxidXR0b24gQGNsaWNrPVwidG9nZ2xlVmlzaWJsZVwiPlNob3cgLyBoaWRlIHRoZSBwaWNrZXI8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gQGNsaWNrPVwidG9nZ2xlVmlzaWJsZVwiIHYtaHRtbD1cInNtaWxlXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8dGVtcGxhdGVcbiAgICAgICAgdi1mb3I9XCJzZXQgaW4gWyduYXRpdmUnLCAnYXBwbGUnLCAnZ29vZ2xlJywgJ3R3aXR0ZXInLCAnZmFjZWJvb2snXVwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICA6a2V5PVwic2V0XCJcbiAgICAgICAgICBAY2xpY2s9XCJhY3RpdmVTZXQgPSBzZXRcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImFjdGl2ZVNldCA9PSBzZXRcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgc2V0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgdi1pZj1cImlzVmlzaWJsZVwiIGNsYXNzPVwicm93XCI+XG4gICAgICA8cGlja2VyXG4gICAgICAgIDpkYXRhPVwiaW5kZXhcIlxuICAgICAgICA6c2V0PVwiYWN0aXZlU2V0XCJcbiAgICAgICAgOm5hdGl2ZT1cIm5hdGl2ZVwiXG4gICAgICAgIDplbW9qaT1cImVtb2ppXCJcbiAgICAgICAgOmVtb2ppVG9vbHRpcD1cInRydWVcIlxuICAgICAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgICAgIDplbW9qaVNpemU9XCIzMFwiXG4gICAgICAgIEBzZWxlY3Q9XCJzaG93RW1vamlcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj57eyBlbW9qaXNPdXRwdXQgfX08L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3ctc21hbGxcIj5cbiAgICAgIDxpZnJhbWVcbiAgICAgICAgc3JjPVwiaHR0cHM6Ly9naGJ0bnMuY29tL2dpdGh1Yi1idG4uaHRtbD91c2VyPXNlcmVicm92JnJlcG89ZW1vamktbWFydC12dWUmdHlwZT1zdGFyJmNvdW50PXRydWVcIlxuICAgICAgICBmcmFtZUJvcmRlcj1cIjBcIlxuICAgICAgICBzY3JvbGxpbmc9XCIwXCJcbiAgICAgICAgd2lkdGg9XCI5MHB4XCJcbiAgICAgICAgaGVpZ2h0PVwiMjBweFwiXG4gICAgICA+PC9pZnJhbWU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+PC9kaXY+XG4gICAgPGgyPlFEaWFsb2cgRXhhbXBsZTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPHEtYnRuIGxhYmVsPVwiT3BlbiBRRGlhbG9nXCIgQGNsaWNrPVwiZW1vamlQaWNrZXJEaWFsb2cgPSB0cnVlXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxxLWRpYWxvZyB2LW1vZGVsPVwiZW1vamlQaWNrZXJEaWFsb2dcIj5cbiAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6Ym9keSBzdHlsZT1cImhlaWdodDo0NTBweFwiPlxuICAgICAgICA8cGlja2VyIDpkYXRhPVwiaW5kZXhcIiA6ZW1vamlTaXplPVwiMjRcIiA6bmF0aXZlPVwidHJ1ZVwiPjwvcGlja2VyPlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L3EtZGlhbG9nPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjwvZGl2PlxuICAgIDxoMj5DdXN0b20gRGlhbG9nIEV4YW1wbGU8L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxidXR0b24gQGNsaWNrPVwiZW1vamlQaWNrZXJDdXN0b21EaWFsb2cgPSB0cnVlXCI+XG4gICAgICAgIE9wZW4gQ3V0dG9tIERpYWxvZ1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXBcIiB2LWlmPVwiZW1vamlQaWNrZXJDdXN0b21EaWFsb2dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ib3hcIiBAY2xpY2s9XCJlbW9qaVBpY2tlckN1c3RvbURpYWxvZyA9IGZhbHNlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCIgQGNsaWNrPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNsb3NlXCI+XG4gICAgICAgICAgICA8YSBAY2xpY2s9XCJlbW9qaVBpY2tlckN1c3RvbURpYWxvZyA9IGZhbHNlXCI+WDwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8aDI+XG4gICAgICAgICAgICBFbW9qaSBTZWxlY3RvclxuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPHBpY2tlciA6ZGF0YT1cImluZGV4XCIgOmVtb2ppU2l6ZT1cIjI0XCIgOm5hdGl2ZT1cInRydWVcIj48L3BpY2tlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48L2Rpdj5cbiAgICA8aDI+Q3VzdG9tIFNlYXJjaCBBbmQgUHJldmlldyBUZW1wbGF0ZXMgRXhhbXBsZTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPFBpY2tlciA6ZGF0YT1cImluZGV4XCIgOm5hdGl2ZT1cInRydWVcIj5cbiAgICAgICAgPHRlbXBsYXRlIHNsb3Q9XCJzZWFyY2hUZW1wbGF0ZVwiIHNsb3Qtc2NvcGU9XCJzbG90UHJvcHNcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIDpwbGFjZWhvbGRlcj1cInNsb3RQcm9wcy5pMThuLnNlYXJjaFwiXG4gICAgICAgICAgICB2LW9uOmlucHV0PVwic2xvdFByb3BzLm9uU2VhcmNoKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgc2xvdD1cInByZXZpZXdUZW1wbGF0ZVwiIHNsb3Qtc2NvcGU9XCJzbG90UHJvcHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCI+XG4gICAgICAgICAgICAgIDxFbW9qaVxuICAgICAgICAgICAgICAgIDpkYXRhPVwic2xvdFByb3BzLmRhdGFcIlxuICAgICAgICAgICAgICAgIDplbW9qaT1cInNsb3RQcm9wcy5lbW9qaSA/IHNsb3RQcm9wcy5lbW9qaSA6ICdwb2ludF91cCdcIlxuICAgICAgICAgICAgICAgIDpuYXRpdmU9XCJzbG90UHJvcHMuZW1vamlQcm9wcy5uYXRpdmVcIlxuICAgICAgICAgICAgICAgIDpza2luPVwic2xvdFByb3BzLmVtb2ppUHJvcHMuc2tpblwiXG4gICAgICAgICAgICAgICAgOnNldD1cInNsb3RQcm9wcy5lbW9qaVByb3BzLnNldFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgc2xvdFByb3BzLmVtb2ppXG4gICAgICAgICAgICAgICAgICAgID8gJ34nICsgc2xvdFByb3BzLmVtb2ppLm5hbWUgKyAnfidcbiAgICAgICAgICAgICAgICAgICAgOiAnQ2hvb3NlLi4uJ1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZXNcIj5cbiAgICAgICAgICAgICAgICB7eyBzbG90UHJvcHMuZW1vamkgPyBzbG90UHJvcHMuZW1vamkuY29sb25zIDogJycgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDwvUGlja2VyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjwvZGl2PlxuICAgIDxoMj5GaWx0ZXJlZCBwaWNrZXIgZXhhbXBsZTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiIHYtc2hvdz1cImZsYWdzVmlzaWJsZVwiPlxuICAgICAgPFBpY2tlclxuICAgICAgICA6bmF0aXZlPVwidHJ1ZVwiXG4gICAgICAgIGVtb2ppPVwiZmxhZy10ZlwiXG4gICAgICAgIDplbW9qaVNpemU9XCIxOFwiXG4gICAgICAgIDpkYXRhPVwiaW5kZXhGaWx0ZXJlZFwiXG4gICAgICAgIHJlZj1cImZsYWdzXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ0b2dnbGVGbGFnc1Zpc2libGVcIj5cbiAgICAgICAgU2hvdyAvIGhpZGUgdGhlIGZsYWdzIHBpY2tlciAod2l0aCB2LXNob3cpXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48L2Rpdj5cbiAgICA8aDI+STE4biBwaWNrZXIgZXhhbXBsZTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPFBpY2tlciBlbW9qaT1cImRlcGFydG1lbnRfc3RvcmVcIiA6ZGF0YT1cImluZGV4STE4blwiIDppMThuPVwiaTE4blwiIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+PC9kaXY+XG4gICAgPGgyPkN1c3RvbSBvcmRlciBleGFtcGxlPC9oMj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8UGlja2VyIDpkYXRhPVwiaW5kZXhJbmNsdWRlXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IGRhdGEgZnJvbSAnLi4vZGF0YS9hbGwuanNvbidcbmltcG9ydCB7IFBpY2tlciwgRW1vamksIEVtb2ppSW5kZXggfSBmcm9tICcuLi9zcmMnXG5pbXBvcnQgJy4uL2Nzcy9lbW9qaS1tYXJ0LmNzcydcblxuaW1wb3J0IHsgUUJ0biwgUURpYWxvZyB9IGZyb20gJ3F1YXNhci1mcmFtZXdvcmsvZGlzdC9xdWFzYXIubWF0LmVzbSdcblxuY29uc3QgQ1VTVE9NX0VNT0pJUyA9IFtcbiAge1xuICAgIG5hbWU6ICdQYXJ0eSBQYXJyb3QnLFxuICAgIHNob3J0X25hbWVzOiBbJ3BhcnJvdCddLFxuICAgIGtleXdvcmRzOiBbJ3BhcnR5J10sXG4gICAgaW1hZ2VVcmw6ICcuL2ltYWdlcy9wYXJyb3QuZ2lmJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdPY3RvY2F0JyxcbiAgICBzaG9ydF9uYW1lczogWydvY3RvY2F0J10sXG4gICAga2V5d29yZHM6IFsnZ2l0aHViJ10sXG4gICAgaW1hZ2VVcmw6ICdodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2ltYWdlcy9pY29ucy9lbW9qaS9vY3RvY2F0LnBuZycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU3F1aXJyZWwnLFxuICAgIHNob3J0X25hbWVzOiBbJ3NoaXBpdCcsICdzcXVpcnJlbCddLFxuICAgIGtleXdvcmRzOiBbJ2dpdGh1YiddLFxuICAgIGltYWdlVXJsOiAnaHR0cHM6Ly9naXRodWIuZ2l0aHViYXNzZXRzLmNvbS9pbWFnZXMvaWNvbnMvZW1vamkvc2hpcGl0LnBuZycsXG4gIH0sXG5dXG5cbmxldCBpbmRleCA9IG5ldyBFbW9qaUluZGV4KGRhdGEsIHtcbiAgY3VzdG9tOiBDVVNUT01fRU1PSklTLFxufSlcblxubGV0IGluZGV4RmlsdGVyZWQgPSBuZXcgRW1vamlJbmRleChkYXRhLCB7XG4gIGN1c3RvbTogQ1VTVE9NX0VNT0pJUyxcbiAgZW1vamlzVG9TaG93RmlsdGVyOiAoZW1vamkpID0+IHtcbiAgICByZXR1cm4gZW1vamkuc2hvcnRfbmFtZXNbMF0ubWF0Y2goL15mbGFnLiovKSAhPT0gbnVsbFxuICB9LFxufSlcblxuY29uc3QgaTE4biA9IHtcbiAgY2F0ZWdvcmllczoge1xuICAgIHNlYXJjaDogJ+aQnOe0oue7k+aenCcsXG4gICAgcmVjZW50OiAn57uP5bi45L2/55SoJyxcbiAgICBzbWlsZXlzOiAn5b+D5oOFJyxcbiAgICBwZW9wbGU6ICfkurrniaknLFxuICAgIG5hdHVyZTogJ+WKqOeJqSAmIOWkp+iHqueEticsXG4gICAgZm9vZHM6ICfpo5/niakgJiDppa7mlpknLFxuICAgIGFjdGl2aXR5OiAn5rS75YqoJyxcbiAgICBwbGFjZXM6ICfml4XooYwgJiDlnLDmoIcnLFxuICAgIG9iamVjdHM6ICfniankvZMnLFxuICAgIHN5bWJvbHM6ICfnrKblj7cnLFxuICAgIGZsYWdzOiAn5Zu95peXJyxcbiAgICBjdXN0b206ICfoh6rlrprkuYknLFxuICB9LFxufVxuXG5jb25zdCBpbmRleEkxOG4gPSBuZXcgRW1vamlJbmRleChkYXRhLCB7XG4gIGV4Y2x1ZGU6IFtcbiAgICAnZmxhZ3MnLFxuICAgICdzeW1ib2xzJyxcbiAgICAnb2JqZWN0cycsXG4gICAgJ2FjdGl2aXR5JyxcbiAgICAnZm9vZHMnLFxuICAgICdwZW9wbGUnLFxuICAgICdwbGFjZXMnLFxuICBdLFxufSlcblxuY29uc3QgaW5kZXhJbmNsdWRlID0gbmV3IEVtb2ppSW5kZXgoZGF0YSwge1xuICBpbmNsdWRlOiBbJ25hdHVyZScsICdzbWlsZXlzJywgJ3JlY2VudCddLFxufSlcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBpbmRleEZpbHRlcmVkOiBpbmRleEZpbHRlcmVkLFxuICAgICAgaW5kZXhJbmNsdWRlOiBpbmRleEluY2x1ZGUsXG4gICAgICBpbmRleEkxOG46IGluZGV4STE4bixcbiAgICAgIGkxOG46IGkxOG4sXG4gICAgICBhY3RpdmVTZXQ6ICduYXRpdmUnLFxuICAgICAgZW1vamk6ICdwb2ludF91cCcsXG4gICAgICB0aXRsZTogJ1BpY2sgeW91ciBlbW9qaeKApicsXG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBlbW9qaVBpY2tlckRpYWxvZzogZmFsc2UsXG4gICAgICBlbW9qaVBpY2tlckN1c3RvbURpYWxvZzogZmFsc2UsXG4gICAgICBlbW9qaXNPdXRwdXQ6ICcnLFxuICAgICAgZmxhZ3NWaXNpYmxlOiB0cnVlLFxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBuYXRpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVTZXQgPT0gJ25hdGl2ZSdcbiAgICB9LFxuICAgIHNtaWxlKCkge1xuICAgICAgLy8gU3RhdGljIGVtb2ppIGV4YW1wbGVcbiAgICAgIGxldCBlbW9qaSA9IGluZGV4LmZpbmRFbW9qaSgnOnNtaWxlOicpXG4gICAgICAvLyBOb3RlLCB0aGF0IHBvc2l0aW9uIGluIHRoZSBlbW9qaSBzaGVldCBpcyBjYWxjdWxhdGVkIGJ5XG4gICAgICAvLyBgZW1vamlgIG9iamVjdFxuICAgICAgbGV0IHN0eWxlID0gYGJhY2tncm91bmQtcG9zaXRpb246ICR7ZW1vamkuZ2V0UG9zaXRpb24oKX07IGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL3VucGtnLmNvbS9lbW9qaS1kYXRhc291cmNlLXR3aXR0ZXJANi4wLjEvaW1nL3R3aXR0ZXIvc2hlZXRzLTI1Ni82NC5wbmcpOyB3aWR0aDogMjRweDsgaGVpZ2h0OiAyNHB4OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJhY2tncm91bmQtc2l6ZTogNTcwMCVgXG4gICAgICByZXR1cm4gYDxkaXYgY2xhc3M9J2Vtb2ppJyBzdHlsZT1cIiR7c3R5bGV9XCI+PC9kaXY+YFxuICAgIH0sXG4gICAgc2FudGFFbW9qaU9iamVjdCgpIHtcbiAgICAgIHJldHVybiBpbmRleC5maW5kRW1vamkoJzpzYW50YTonKVxuICAgIH0sXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB0b2dnbGVWaXNpYmxlKCkge1xuICAgICAgdGhpcy5pc1Zpc2libGUgPSAhdGhpcy5pc1Zpc2libGVcbiAgICB9LFxuICAgIHRvZ2dsZUZsYWdzVmlzaWJsZSgpIHtcbiAgICAgIHRoaXMuZmxhZ3NWaXNpYmxlID0gIXRoaXMuZmxhZ3NWaXNpYmxlXG4gICAgICBpZiAoIXRoaXMuZmxhZ3NWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMuJHJlZnMuZmxhZ3Mub25BbmNob3JDbGljayh0aGlzLiRyZWZzLmZsYWdzLmNhdGVnb3JpZXNbMF0pXG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93RW1vamkoZW1vamkpIHtcbiAgICAgIHRoaXMuZW1vamlzT3V0cHV0ID0gdGhpcy5lbW9qaXNPdXRwdXQgKyBlbW9qaS5uYXRpdmVcbiAgICB9LFxuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgUGlja2VyLFxuICAgIEVtb2ppLFxuICAgIFFCdG4sXG4gICAgUURpYWxvZyxcbiAgfSxcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuYnV0dG9uICsgYnV0dG9uIHtcbiAgbWFyZ2luLWxlZnQ6IDAuNWVtO1xufVxuYnV0dG9uIHtcbiAgcGFkZGluZzogMC40ZW0gMC42ZW07XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBvdXRsaW5lOiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmJ1dHRvbltkaXNhYmxlZF0ge1xuICBib3JkZXItY29sb3I6ICNhZTY1YzU7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLm1vZGFsIHtcbiAgY29sb3I6IHJlZDtcbn1cblxuLyoqXG4gKiBTZWUgaHR0cHM6Ly92dWUtbG9hZGVyLnZ1ZWpzLm9yZy9ndWlkZS9zY29wZWQtY3NzLmh0bWwjZGVlcC1zZWxlY3RvcnNcbiAqIHRoZSBgPj4+YCBhbGxvd3MgdG8gYXBwbHkgc2NvcGVkIGNzcyB0byBjaGlsZCBlbGVtZW50IHRoYXQgaXMgZ2VuZXJhdGVkXG4gKiBkeW5hbWljYWxseVxuKiovXG4ubW9kYWwgPj4+IC5tb2RhbC1zY3JvbGwge1xuICBjb2xvcjogcmVkO1xuICBtYXgtaGVpZ2h0OiBub25lO1xufVxuLm1vZGFsIC5tb2RhbC1ib2R5IHtcbiAgbWF4LWhlaWdodDogbm9uZTtcbn1cblxuaDEge1xuICBmb250LWZhbWlseTogQ291cmllcjtcbiAgZm9udC1zaXplOiAycmVtO1xufVxuXG5oMiB7XG4gIGZvbnQtZmFtaWx5OiBDb3VyaWVyO1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIG1hcmdpbi10b3A6IDJyZW07XG59XG5cbi5hcHAgLnJvdyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ucm93ICsgLnJvdyB7XG4gIG1hcmdpbi10b3A6IDJlbTtcbn1cblxuLnJvdy1zbWFsbCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn1cblxuLmVtb2ppLW1hcnQge1xuICBtYXJnaW46IDAgYXV0bztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmVtb2ppLW1hcnQtdGl0bGUtbGFiZWwge1xuICBmb250LXNpemU6IDIxcHg7XG59XG5cbi5wb3B1cCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwdmg7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgei1pbmRleDogMjAwO1xuICBiYWNrZ3JvdW5kOiByZWJlY2NhcHVycGxlO1xuICBvcGFjaXR5OiA5NSU7XG59XG4ucG9wdXAtYm94IHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmctdG9wOiAxMjBweDtcbiAgcGFkZGluZy1ib3R0b206IDgwcHg7XG59XG4ucG9wdXAtY29udGVudCB7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBib3gtc2hhZG93OiAwcHggMjRweCA1NHB4IHJnYmEoMjAsIDI4LCA0OSwgMC4xNCk7XG4gIGJvcmRlci1yYWRpdXM6IDE4cHg7XG4gIHBhZGRpbmc6IDZweCA2cHggOXB4IDZweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA0NjJweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4ucG9wdXAtY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMjBweDtcbiAgcmlnaHQ6IDMwcHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxzcGFuXG4gICAgdi1pZj1cInZpZXcuY2FuUmVuZGVyXCJcbiAgICA6dGl0bGU9XCJ2aWV3LnRpdGxlXCJcbiAgICA6ZGF0YS10aXRsZT1cInRpdGxlXCJcbiAgICBjbGFzcz1cImVtb2ppLW1hcnQtZW1vamlcIlxuICAgIEBtb3VzZWVudGVyPVwib25Nb3VzZUVudGVyXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uTW91c2VMZWF2ZVwiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gID5cbiAgICA8c3BhbiA6Y2xhc3M9XCJ2aWV3LmNzc0NsYXNzXCIgOnN0eWxlPVwidmlldy5jc3NTdHlsZVwiPnt7XG4gICAgICB2aWV3LmNvbnRlbnRcbiAgICB9fTwvc3Bhbj5cbiAgPC9zcGFuPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IEVtb2ppUHJvcHMgfSBmcm9tICcuLi91dGlscy9zaGFyZWQtcHJvcHMnXG5pbXBvcnQgeyBFbW9qaVZpZXcgfSBmcm9tICcuLi91dGlscy9lbW9qaS1kYXRhJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgLi4uRW1vamlQcm9wcyxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gbmV3IEVtb2ppVmlldyhcbiAgICAgICAgdGhpcy5lbW9qaU9iamVjdCxcbiAgICAgICAgdGhpcy5za2luLFxuICAgICAgICB0aGlzLnNldCxcbiAgICAgICAgdGhpcy5uYXRpdmUsXG4gICAgICAgIHRoaXMuZmFsbGJhY2ssXG4gICAgICAgIHRoaXMudG9vbHRpcCxcbiAgICAgICAgdGhpcy5zaXplLFxuICAgICAgKVxuICAgIH0sXG4gICAgc2FuaXRpemVkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtb2ppT2JqZWN0Ll9zYW5pdGl6ZWRcbiAgICB9LFxuICAgIHRpdGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcCA/IHRoaXMuZW1vamlPYmplY3Quc2hvcnRfbmFtZSA6IG51bGxcbiAgICB9LFxuICAgIGVtb2ppT2JqZWN0KCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtb2ppID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmluZEVtb2ppKHRoaXMuZW1vamkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5lbW9qaVxuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZWQoKSB7fSxcbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLiRlbWl0KCdjbGljaycsIHRoaXMuZW1vamlPYmplY3QpXG4gICAgfSxcbiAgICBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdtb3VzZWVudGVyJywgdGhpcy5lbW9qaU9iamVjdClcbiAgICB9LFxuICAgIG9uTW91c2VMZWF2ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ21vdXNlbGVhdmUnLCB0aGlzLmVtb2ppT2JqZWN0KVxuICAgIH0sXG4gIH0sXG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQgZW1vamktbWFydC1zdGF0aWNcIiA6c3R5bGU9XCJjdXN0b21TdHlsZXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1iYXIgZW1vamktbWFydC1iYXItYW5jaG9yc1wiIHYtaWY9XCJzaG93Q2F0ZWdvcmllc1wiPlxuICAgICAgPGFuY2hvcnNcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmNvbG9yPVwiY29sb3JcIlxuICAgICAgICA6Y2F0ZWdvcmllcz1cImNhdGVnb3JpZXNcIlxuICAgICAgICA6YWN0aXZlLWNhdGVnb3J5PVwiYWN0aXZlQ2F0ZWdvcnlcIlxuICAgICAgICBAY2xpY2s9XCJvbkFuY2hvckNsaWNrXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8c2xvdFxuICAgICAgbmFtZT1cInNlYXJjaFRlbXBsYXRlXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6aTE4bj1cImkxOG5cIlxuICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgOm9uLXNlYXJjaD1cIm9uU2VhcmNoXCJcbiAgICA+XG4gICAgICA8c2VhcmNoXG4gICAgICAgIHYtaWY9XCJzaG93U2VhcmNoXCJcbiAgICAgICAgcmVmPVwic2VhcmNoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgICA6b24tc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgICBAc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L3Nsb3Q+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1zY3JvbGxcIiByZWY9XCJzY3JvbGxcIiBAc2Nyb2xsPVwib25TY3JvbGxcIj5cbiAgICAgIDxjYXRlZ29yeVxuICAgICAgICB2LXNob3c9XCJzZWFyY2hFbW9qaXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6aTE4bj1cIm1lcmdlZEkxOG5cIlxuICAgICAgICBpZD1cInNlYXJjaFwiXG4gICAgICAgIG5hbWU9XCJTZWFyY2hcIlxuICAgICAgICA6ZW1vamlzPVwic2VhcmNoRW1vamlzXCJcbiAgICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICAvPlxuICAgICAgPGNhdGVnb3J5XG4gICAgICAgIHYtZm9yPVwiKGNhdGVnb3J5LCBpZHgpIGluIGZpbHRlcmVkQ2F0ZWdvcmllc1wiXG4gICAgICAgIHYtc2hvdz1cIiFzZWFyY2hFbW9qaXMgJiYgKGluZmluaXRlU2Nyb2xsIHx8IGNhdGVnb3J5ID09IGFjdGl2ZUNhdGVnb3J5KVwiXG4gICAgICAgIDpyZWY9XCInY2F0ZWdvcmllc18nICsgaWR4XCJcbiAgICAgICAgOmtleT1cImNhdGVnb3J5LmlkXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmlkPVwiY2F0ZWdvcnkuaWRcIlxuICAgICAgICA6bmFtZT1cImNhdGVnb3J5Lm5hbWVcIlxuICAgICAgICA6ZW1vamlzPVwiY2F0ZWdvcnkuZW1vamlzXCJcbiAgICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPHNsb3RcbiAgICAgIG5hbWU9XCJwcmV2aWV3VGVtcGxhdGVcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICAgIDplbW9qaT1cInByZXZpZXdFbW9qaVwiXG4gICAgICA6aWRsZS1lbW9qaT1cImlkbGVFbW9qaVwiXG4gICAgICA6c2hvdy1za2luLXRvbmVzPVwic2hvd1NraW5Ub25lc1wiXG4gICAgICA6ZW1vamktcHJvcHM9XCJlbW9qaVByb3BzXCJcbiAgICAgIDpza2luLXByb3BzPVwic2tpblByb3BzXCJcbiAgICAgIDpvbi1za2luLWNoYW5nZT1cIm9uU2tpbkNoYW5nZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtYmFyIGVtb2ppLW1hcnQtYmFyLXByZXZpZXdcIiB2LWlmPVwic2hvd1ByZXZpZXdcIj5cbiAgICAgICAgPHByZXZpZXdcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICAgICAgICA6ZW1vamk9XCJwcmV2aWV3RW1vamlcIlxuICAgICAgICAgIDppZGxlLWVtb2ppPVwiaWRsZUVtb2ppXCJcbiAgICAgICAgICA6c2hvdy1za2luLXRvbmVzPVwic2hvd1NraW5Ub25lc1wiXG4gICAgICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICAgICAgOnNraW4tcHJvcHM9XCJza2luUHJvcHNcIlxuICAgICAgICAgIDpvbi1za2luLWNoYW5nZT1cIm9uU2tpbkNoYW5nZVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Nsb3Q+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCAnLi4vdmVuZG9yL3JhZi1wb2x5ZmlsbCdcbmltcG9ydCBzdG9yZSBmcm9tICcuLi91dGlscy9zdG9yZSdcbmltcG9ydCBmcmVxdWVudGx5IGZyb20gJy4uL3V0aWxzL2ZyZXF1ZW50bHknXG5pbXBvcnQgeyBkZWVwTWVyZ2UsIG1lYXN1cmVTY3JvbGxiYXIgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IFBpY2tlclByb3BzIH0gZnJvbSAnLi4vdXRpbHMvc2hhcmVkLXByb3BzJ1xuaW1wb3J0IEFuY2hvcnMgZnJvbSAnLi9hbmNob3JzLnZ1ZSdcbmltcG9ydCBDYXRlZ29yeSBmcm9tICcuL2NhdGVnb3J5LnZ1ZSdcbmltcG9ydCBQcmV2aWV3IGZyb20gJy4vcHJldmlldy52dWUnXG5pbXBvcnQgU2VhcmNoIGZyb20gJy4vc2VhcmNoLnZ1ZSdcblxuY29uc3QgSTE4TiA9IHtcbiAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgbm90Zm91bmQ6ICdObyBFbW9qaSBGb3VuZCcsXG4gIGNhdGVnb3JpZXM6IHtcbiAgICBzZWFyY2g6ICdTZWFyY2ggUmVzdWx0cycsXG4gICAgcmVjZW50OiAnRnJlcXVlbnRseSBVc2VkJyxcbiAgICBzbWlsZXlzOiAnU21pbGV5cyAmIEVtb3Rpb24nLFxuICAgIHBlb3BsZTogJ1Blb3BsZSAmIEJvZHknLFxuICAgIG5hdHVyZTogJ0FuaW1hbHMgJiBOYXR1cmUnLFxuICAgIGZvb2RzOiAnRm9vZCAmIERyaW5rJyxcbiAgICBhY3Rpdml0eTogJ0FjdGl2aXR5JyxcbiAgICBwbGFjZXM6ICdUcmF2ZWwgJiBQbGFjZXMnLFxuICAgIG9iamVjdHM6ICdPYmplY3RzJyxcbiAgICBzeW1ib2xzOiAnU3ltYm9scycsXG4gICAgZmxhZ3M6ICdGbGFncycsXG4gICAgY3VzdG9tOiAnQ3VzdG9tJyxcbiAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIC4uLlBpY2tlclByb3BzLFxuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZVNraW46IHRoaXMuc2tpbiB8fCBzdG9yZS5nZXQoJ3NraW4nKSB8fCB0aGlzLmRlZmF1bHRTa2luLFxuICAgICAgYWN0aXZlQ2F0ZWdvcnk6IG51bGwsXG4gICAgICBwcmV2aWV3RW1vamk6IG51bGwsXG4gICAgICBzZWFyY2hFbW9qaXM6IG51bGwsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGN1c3RvbVN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiB0aGlzLmNhbGN1bGF0ZVdpZHRoICsgJ3B4JyxcbiAgICAgICAgLi4udGhpcy5waWNrZXJTdHlsZXMsXG4gICAgICB9XG4gICAgfSxcbiAgICBlbW9qaVByb3BzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmF0aXZlOiB0aGlzLm5hdGl2ZSxcbiAgICAgICAgc2tpbjogdGhpcy5hY3RpdmVTa2luLFxuICAgICAgICBzZXQ6IHRoaXMuc2V0LFxuICAgICAgICBlbW9qaVRvb2x0aXA6IHRoaXMuZW1vamlUb29sdGlwLFxuICAgICAgICBlbW9qaVNpemU6IHRoaXMuZW1vamlTaXplLFxuICAgICAgICBvbkVudGVyOiB0aGlzLm9uRW1vamlFbnRlci5iaW5kKHRoaXMpLFxuICAgICAgICBvbkxlYXZlOiB0aGlzLm9uRW1vamlMZWF2ZS5iaW5kKHRoaXMpLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLm9uRW1vamlDbGljay5iaW5kKHRoaXMpLFxuICAgICAgfVxuICAgIH0sXG4gICAgc2tpblByb3BzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2tpbjogdGhpcy5hY3RpdmVTa2luLFxuICAgICAgfVxuICAgIH0sXG4gICAgY2FsY3VsYXRlV2lkdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wZXJMaW5lICogKHRoaXMuZW1vamlTaXplICsgMTIpICsgMTIgKyAyICsgbWVhc3VyZVNjcm9sbGJhcigpXG4gICAgfSxcbiAgICBmaWx0ZXJlZENhdGVnb3JpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzLmZpbHRlcigoY2F0ZWdvcnkpID0+IHtcbiAgICAgICAgbGV0IGhhc0Vtb2ppcyA9IGNhdGVnb3J5LmVtb2ppcy5sZW5ndGggPiAwXG4gICAgICAgIHJldHVybiBoYXNFbW9qaXNcbiAgICAgIH0pXG4gICAgfSxcbiAgICBtZXJnZWRJMThuKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcmVlemUoZGVlcE1lcmdlKEkxOE4sIHRoaXMuaTE4bikpXG4gICAgfSxcbiAgICBpZGxlRW1vamkoKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmVtb2ppKHRoaXMuZW1vamkpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0RlZmF1bHQgcHJldmlldyBlbW9qaSBgJyArXG4gICAgICAgICAgICB0aGlzLmVtb2ppICtcbiAgICAgICAgICAgICdgIGlzIG5vdCBhdmFpbGFibGUsIGNoZWNrIHRoZSBQaWNrZXIgYGVtb2ppYCBwcm9wZXJ0eScsXG4gICAgICAgIClcbiAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmZpcnN0RW1vamkoKVxuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jYXRlZ29yaWVzID0gW11cbiAgICB0aGlzLmNhdGVnb3JpZXMucHVzaCguLi50aGlzLmRhdGEuY2F0ZWdvcmllcygpKVxuICAgIHRoaXMuY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcy5maWx0ZXIoKGNhdGVnb3J5KSA9PiB7XG4gICAgICByZXR1cm4gY2F0ZWdvcnkuZW1vamlzLmxlbmd0aCA+IDBcbiAgICB9KVxuXG4gICAgdGhpcy5jYXRlZ29yaWVzWzBdLmZpcnN0ID0gdHJ1ZVxuICAgIE9iamVjdC5mcmVlemUodGhpcy5jYXRlZ29yaWVzKVxuICAgIHRoaXMuYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNbMF1cbiAgICB0aGlzLnNraXBTY3JvbGxVcGRhdGUgPSBmYWxzZVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgb25TY3JvbGwoKSB7XG4gICAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCAmJiAhdGhpcy53YWl0aW5nRm9yUGFpbnQpIHtcbiAgICAgICAgdGhpcy53YWl0aW5nRm9yUGFpbnQgPSB0cnVlXG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5vblNjcm9sbFBhaW50LmJpbmQodGhpcykpXG4gICAgICB9XG4gICAgfSxcbiAgICBvblNjcm9sbFBhaW50KCkge1xuICAgICAgdGhpcy53YWl0aW5nRm9yUGFpbnQgPSBmYWxzZVxuICAgICAgbGV0IHNjcm9sbFRvcCA9IHRoaXMuJHJlZnMuc2Nyb2xsLnNjcm9sbFRvcFxuICAgICAgbGV0IGFjdGl2ZUNhdGVnb3J5ID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXNbMF1cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGxldCBjYXRlZ29yeSA9IHRoaXMuZmlsdGVyZWRDYXRlZ29yaWVzW2ldXG4gICAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmdldENhdGVnb3J5Q29tcG9uZW50KGkpXG4gICAgICAgIC8vIFRoZSBgLTUwYCBvZmZzZXQgc3dpdGNoZXMgYWN0aXZlIGNhdGVnb3J5IChzZWxlY3RlZCBpbiB0aGVcbiAgICAgICAgLy8gYW5jaG9ycyBiYXIpIGEgYml0IGVhcmlsZXIsIGJlZm9yZSBpdCBhY3R1YWxseSByZWFjaGVzIHRoZSB0b3AuXG4gICAgICAgIGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LiRlbC5vZmZzZXRUb3AgLSA1MCA+IHNjcm9sbFRvcCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgYWN0aXZlQ2F0ZWdvcnkgPSBjYXRlZ29yeVxuICAgICAgfVxuICAgICAgdGhpcy5hY3RpdmVDYXRlZ29yeSA9IGFjdGl2ZUNhdGVnb3J5XG4gICAgfSxcbiAgICBvbkFuY2hvckNsaWNrKGNhdGVnb3J5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hFbW9qaXMpIHtcbiAgICAgICAgLy8gTm8gY2F0ZWdvcmllcyBhcmUgc2hvd24gd2hlbiBzZWFyY2ggaXMgYWN0aXZlLlxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGxldCBpID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXMuaW5kZXhPZihjYXRlZ29yeSlcbiAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmdldENhdGVnb3J5Q29tcG9uZW50KGkpXG4gICAgICBsZXQgc2Nyb2xsVG9Db21wb25lbnQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBsZXQgdG9wID0gY29tcG9uZW50LiRlbC5vZmZzZXRUb3BcbiAgICAgICAgICBpZiAoY2F0ZWdvcnkuZmlyc3QpIHtcbiAgICAgICAgICAgIHRvcCA9IDBcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4kcmVmcy5zY3JvbGwuc2Nyb2xsVG9wID0gdG9wXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgIHNjcm9sbFRvQ29tcG9uZW50KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllc1tpXVxuICAgICAgfVxuICAgIH0sXG4gICAgb25TZWFyY2godmFsdWUpIHtcbiAgICAgIGxldCBlbW9qaXMgPSB0aGlzLmRhdGEuc2VhcmNoKHZhbHVlLCB0aGlzLm1heFNlYXJjaFJlc3VsdHMpXG4gICAgICB0aGlzLnNlYXJjaEVtb2ppcyA9IGVtb2ppc1xuICAgIH0sXG4gICAgb25FbW9qaUVudGVyKGVtb2ppKSB7XG4gICAgICB0aGlzLnByZXZpZXdFbW9qaSA9IGVtb2ppXG4gICAgfSxcbiAgICBvbkVtb2ppTGVhdmUoZW1vamkpIHtcbiAgICAgIHRoaXMucHJldmlld0Vtb2ppID0gbnVsbFxuICAgIH0sXG4gICAgb25FbW9qaUNsaWNrKGVtb2ppKSB7XG4gICAgICB0aGlzLiRlbWl0KCdzZWxlY3QnLCBlbW9qaSlcbiAgICAgIGZyZXF1ZW50bHkuYWRkKGVtb2ppKVxuICAgIH0sXG4gICAgb25Ta2luQ2hhbmdlKHNraW4pIHtcbiAgICAgIHRoaXMuYWN0aXZlU2tpbiA9IHNraW5cbiAgICAgIHN0b3JlLnVwZGF0ZSh7IHNraW4gfSlcblxuICAgICAgdGhpcy4kZW1pdCgnc2tpbi1jaGFuZ2UnLCBza2luKVxuICAgIH0sXG4gICAgZ2V0Q2F0ZWdvcnlDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLiRyZWZzWydjYXRlZ29yaWVzXycgKyBpbmRleF1cbiAgICAgIGlmIChjb21wb25lbnQgJiYgJzAnIGluIGNvbXBvbmVudCkge1xuICAgICAgICAvLyBWdWUgMiBoYXMgJHJlZnMgdW5kZXIgdi1mb3IgYXMgYW4gYXJyYXkuXG4gICAgICAgIHJldHVybiBjb21wb25lbnRbJzAnXVxuICAgICAgfVxuICAgICAgLy8gVnVlIDMgZG9lcyBub3Qgc3VwcG9ydCAkcmVmcyBhcyBhcnJheS5cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICB9LFxuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgQW5jaG9ycyxcbiAgICBDYXRlZ29yeSxcbiAgICBQcmV2aWV3LFxuICAgIFNlYXJjaCxcbiAgfSxcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuXG48ZGl2IGNsYXNzPVwiZW1vamktbWFydC1hbmNob3JzXCI+XG4gIDxzcGFuXG4gICAgdi1mb3I9XCJjYXRlZ29yeSBpbiBjYXRlZ29yaWVzXCJcbiAgICA6a2V5PVwiY2F0ZWdvcnkuaWRcIlxuICAgIDpjbGFzcz1cInsgJ2Vtb2ppLW1hcnQtYW5jaG9yJzogdHJ1ZSwgJ2Vtb2ppLW1hcnQtYW5jaG9yLXNlbGVjdGVkJzogY2F0ZWdvcnkuaWQgPT0gYWN0aXZlQ2F0ZWdvcnkuaWQgfVwiXG4gICAgOnN0eWxlPVwieyAnY29sb3InOiAoY2F0ZWdvcnkuaWQgPT0gYWN0aXZlQ2F0ZWdvcnkuaWQgPyBjb2xvciA6ICcnKSB9XCJcbiAgICA6ZGF0YS10aXRsZT1cImkxOG4uY2F0ZWdvcmllc1tjYXRlZ29yeS5pZF1cIlxuICAgIEBjbGljaz1cIiRlbWl0KCdjbGljaycsIGNhdGVnb3J5KVwiPlxuICAgIDxkaXYgdi1odG1sPVwic3Znc1tjYXRlZ29yeS5pZF1cIi8+XG4gICAgPHNwYW4gY2xhc3M9XCJlbW9qaS1tYXJ0LWFuY2hvci1iYXJcIiA6c3R5bGU9XCJ7IGJhY2tncm91bmRDb2xvcjogY29sb3IgfVwiPjwvc3Bhbj5cbiAgPC9zcGFuPlxuPC9kaXY+XG5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBzdmdzIGZyb20gJy4uL3N2Z3MnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBpMThuOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0sXG4gICAgY2F0ZWdvcmllczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgYWN0aXZlQ2F0ZWdvcnk6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLnN2Z3MgPSBzdmdzXG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG5cbjxkaXYgOmNsYXNzPVwieyAnZW1vamktbWFydC1jYXRlZ29yeSc6IHRydWUsICdlbW9qaS1tYXJ0LW5vLXJlc3VsdHMnOiAhaGFzUmVzdWx0cyB9XCIgdi1pZj1cImlzVmlzaWJsZSAmJiAoaXNTZWFyY2ggfHwgaGFzUmVzdWx0cylcIj5cbiAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtY2F0ZWdvcnktbGFiZWxcIj5cbiAgICA8c3Bhbj57eyBpMThuLmNhdGVnb3JpZXNbaWRdIH19PC9zcGFuPlxuICA8L2Rpdj5cblxuICA8dGVtcGxhdGUgdi1mb3I9XCJ7IGVtb2ppT2JqZWN0LCBlbW9qaVZpZXd9IGluIGVtb2ppT2JqZWN0c1wiPlxuICAgIDxzcGFuXG4gICAgICB2LWlmPVwiZW1vamlWaWV3LmNhblJlbmRlclwiXG4gICAgICA6ZGF0YS10aXRsZT1cImVtb2ppT2JqZWN0LnNob3J0X25hbWVcIlxuICAgICAgOnRpdGxlPVwiZW1vamlWaWV3LnRpdGxlXCJcbiAgICAgIGNsYXNzPVwiZW1vamktbWFydC1lbW9qaVwiXG4gICAgICBAbW91c2VlbnRlcj1cImVtb2ppUHJvcHMub25FbnRlcihlbW9qaVZpZXcuZ2V0RW1vamkoKSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJlbW9qaVByb3BzLm9uTGVhdmUoZW1vamlWaWV3LmdldEVtb2ppKCkpXCJcbiAgICAgIEBjbGljaz1cImVtb2ppUHJvcHMub25DbGljayhlbW9qaVZpZXcuZ2V0RW1vamkoKSlcIj5cbiAgICAgIDxzcGFuICA6Y2xhc3M9XCJlbW9qaVZpZXcuY3NzQ2xhc3NcIiA6c3R5bGU9XCJlbW9qaVZpZXcuY3NzU3R5bGVcIj57e2Vtb2ppVmlldy5jb250ZW50fX08L3NwYW4+XG4gICAgPC9zcGFuPlxuICA8L3RlbXBsYXRlPlxuXG4gIDxkaXYgdi1pZj1cIiFoYXNSZXN1bHRzXCI+XG4gICAgPGVtb2ppXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgZW1vamk9XCJzbGV1dGhfb3Jfc3B5XCJcbiAgICAgIDpuYXRpdmU9XCJlbW9qaVByb3BzLm5hdGl2ZVwiXG4gICAgICA6c2tpbj1cImVtb2ppUHJvcHMuc2tpblwiXG4gICAgICA6c2V0PVwiZW1vamlQcm9wcy5zZXRcIlxuICAgIC8+XG4gICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtbm8tcmVzdWx0cy1sYWJlbFwiPnt7IGkxOG4ubm90Zm91bmQgfX08L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IHsgRW1vamlWaWV3IH0gZnJvbSAnLi4vdXRpbHMvZW1vamktZGF0YSdcbmltcG9ydCBFbW9qaSBmcm9tICcuL0Vtb2ppLnZ1ZSdcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgZGF0YToge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGkxOG46IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBpZDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBlbW9qaXM6IHtcbiAgICAgIHR5cGU6IEFycmF5XG4gICAgfSxcbiAgICBlbW9qaVByb3BzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBpc1Zpc2libGUoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmVtb2ppc1xuICAgIH0sXG4gICAgaXNTZWFyY2goKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYW1lID09ICdTZWFyY2gnXG4gICAgfSxcbiAgICBoYXNSZXN1bHRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW1vamlzLmxlbmd0aCA+IDBcbiAgICB9LFxuICAgIGVtb2ppT2JqZWN0cygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtb2ppcy5tYXAoKGVtb2ppKSA9PiB7XG4gICAgICAgICAgbGV0IGVtb2ppT2JqZWN0ID0gZW1vamlcbiAgICAgICAgICBsZXQgZW1vamlWaWV3ID0gbmV3IEVtb2ppVmlldyhcbiAgICAgICAgICAgIGVtb2ppLFxuICAgICAgICAgICAgdGhpcy5lbW9qaVByb3BzLnNraW4sXG4gICAgICAgICAgICB0aGlzLmVtb2ppUHJvcHMuc2V0LFxuICAgICAgICAgICAgdGhpcy5lbW9qaVByb3BzLm5hdGl2ZSxcbiAgICAgICAgICAgIHRoaXMuZW1vamlQcm9wcy5mYWxsYmFjayxcbiAgICAgICAgICAgIHRoaXMuZW1vamlQcm9wcy5lbW9qaVRvb2x0aXAsXG4gICAgICAgICAgICB0aGlzLmVtb2ppUHJvcHMuZW1vamlTaXplLFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm4geyBlbW9qaU9iamVjdCwgZW1vamlWaWV3IH1cbiAgICAgIH0pXG4gICAgfVxuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgRW1vamlcbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlld1wiPlxuICA8dGVtcGxhdGUgdi1pZj1cImVtb2ppXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCI+XG4gICAgICAgIDxlbW9qaVxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOmVtb2ppPVwiZW1vamlcIlxuICAgICAgICAgIDpuYXRpdmU9XCJlbW9qaVByb3BzLm5hdGl2ZVwiXG4gICAgICAgICAgOnNraW49XCJlbW9qaVByb3BzLnNraW5cIlxuICAgICAgICAgIDpzZXQ9XCJlbW9qaVByb3BzLnNldFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1kYXRhXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctbmFtZVwiPnt7IGVtb2ppLm5hbWUgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWVzXCI+XG4gICAgICAgICAgPHNwYW4gdi1mb3I9XCJzaG9ydE5hbWUgaW4gZW1vamlTaG9ydE5hbWVzXCIgOmtleT1cInNob3J0TmFtZVwiIGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZVwiPjp7eyBzaG9ydE5hbWUgfX06PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbnNcIj5cbiAgICAgICAgICA8c3BhbiB2LWZvcj1cImVtb3RpY29uIGluIGVtb2ppRW1vdGljb25zXCIgOmtleT1cImVtb3RpY29uXCIgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb25cIj57eyBlbW90aWNvbiB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgPC90ZW1wbGF0ZT5cblxuICA8dGVtcGxhdGUgdi1lbHNlPlxuICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vamlcIj5cbiAgICAgIDxlbW9qaVxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6ZW1vamk9XCJpZGxlRW1vamlcIlxuICAgICAgICA6bmF0aXZlPVwiZW1vamlQcm9wcy5uYXRpdmVcIlxuICAgICAgICA6c2tpbj1cImVtb2ppUHJvcHMuc2tpblwiXG4gICAgICAgIDpzZXQ9XCJlbW9qaVByb3BzLnNldFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1kYXRhXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImVtb2ppLW1hcnQtdGl0bGUtbGFiZWxcIj57eyB0aXRsZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgdi1pZj1cInNob3dTa2luVG9uZXNcIiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1za2luc1wiPlxuICAgICAgPHNraW5zIDpza2luPVwic2tpblByb3BzLnNraW5cIiBAY2hhbmdlPVwib25Ta2luQ2hhbmdlKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICA8L3RlbXBsYXRlPlxuPC9kaXY+XG5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBFbW9qaSBmcm9tICcuL0Vtb2ppLnZ1ZSdcbmltcG9ydCBTa2lucyBmcm9tICcuL3NraW5zLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0aXRsZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGVtb2ppOiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdXG4gICAgfSxcbiAgICBpZGxlRW1vamk6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgc2hvd1NraW5Ub25lczoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGVtb2ppUHJvcHM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBza2luUHJvcHM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBvblNraW5DaGFuZ2U6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZW1vamlEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuZW1vamkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1vamlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgICAgfVxuICAgIH0sXG4gICAgZW1vamlTaG9ydE5hbWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW1vamlEYXRhLnNob3J0X25hbWVzXG4gICAgfSxcbiAgICBlbW9qaUVtb3RpY29ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtb2ppRGF0YS5lbW90aWNvbnNcbiAgICB9XG4gIH0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbW9qaSxcbiAgICBTa2luc1xuICB9XG59XG5cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1zZWFyY2hcIj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiA6cGxhY2Vob2xkZXI9XCJpMThuLnNlYXJjaFwiIHYtbW9kZWw9XCJ2YWx1ZVwiPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgaTE4bjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGF1dG9Gb2N1czoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBvblNlYXJjaDoge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6ICcnXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGVtb2ppSW5kZXgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIHZhbHVlKCkge1xuICAgICAgdGhpcy4kZW1pdCgnc2VhcmNoJywgdGhpcy52YWx1ZSlcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAnJ1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICBsZXQgJGlucHV0ID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuXG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICAkaW5wdXQuZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cblxuPGRpdiA6Y2xhc3M9XCJ7ICdlbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMnOiB0cnVlLCAnZW1vamktbWFydC1za2luLXN3YXRjaGVzLW9wZW5lZCc6IG9wZW5lZCB9XCI+XG4gIDxzcGFuIHYtZm9yPVwic2tpblRvbmUgaW4gNlwiIDprZXk9XCJza2luVG9uZVwiIDpjbGFzcz1cInsgJ2Vtb2ppLW1hcnQtc2tpbi1zd2F0Y2gnOiB0cnVlLCAnZW1vamktbWFydC1za2luLXN3YXRjaC1zZWxlY3RlZCc6IHNraW4gPT0gc2tpblRvbmUgfVwiPlxuICAgIDxzcGFuIDpjbGFzcz1cIidlbW9qaS1tYXJ0LXNraW4gZW1vamktbWFydC1za2luLXRvbmUtJyArIHNraW5Ub25lXCIgQGNsaWNrPVwib25DbGljayhza2luVG9uZSlcIj48L3NwYW4+XG4gIDwvc3Bhbj5cbjwvZGl2PlxuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgc2tpbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrKHNraW5Ub25lKSB7XG4gICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgaWYgKHNraW5Ub25lICE9IHRoaXMuc2tpbikge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHNraW5Ub25lKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3BlbmVkID0gIXRoaXMub3BlbmVkXG4gICAgfVxuICB9XG59XG5cbjwvc2NyaXB0PlxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi41JyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwidmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIHJlID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW0tFWV0ocmUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICEnLy4vJ1tLRVldKHJlKTtcbiAgICB9IGNhdGNoIChmKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xuXG52YXIgU1BFQ0lFUyA9IHdrcygnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMiAmJiByZXN1bHRbMF0gPT09ICdhJyAmJiByZXN1bHRbMV0gPT09ICdiJztcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MID8gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgfVxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUykgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgZm5zID0gZXhlYyhcbiAgICAgIGRlZmluZWQsXG4gICAgICBTWU1CT0wsXG4gICAgICAnJ1tLRVldLFxuICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHZhciBzdHJmbiA9IGZuc1swXTtcbiAgICB2YXIgcnhmbiA9IGZuc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyZm4pO1xuICAgIGhpZGUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikgaWYgKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpIFRba2V5XSA9IFNba2V5XTtcbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuL19zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRzZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbic7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFELmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgdmFyIElTX09QID0gaXQgPT09IE9iamVjdFByb3RvO1xuICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXQgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJykuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7IGE6IFMgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7XG4gICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgIHZhciBpID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgJHJlcGxhY2VyID0gcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmVtb2ppLW1hcnQsXFxuLmVtb2ppLW1hcnQgKiB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgbGluZS1oZWlnaHQ6IDEuMTU7XFxufVxcblxcbi5lbW9qaS1tYXJ0IHtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIHNhbnMtc2VyaWY7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICAvKiBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7ICovXFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgaGVpZ2h0OiA0MjBweDtcXG4gIGNvbG9yOiAjMjIyNDI3O1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2Q5ZDlkOTtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWVtb2ppIHtcXG4gIHBhZGRpbmc6IDZweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogMDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtZW1vamkgc3BhbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctZW1vamkgLmVtb2ppLW1hcnQtZW1vamkgc3BhbiB7XFxuICB3aWR0aDogMzhweDtcXG4gIGhlaWdodDogMzhweDtcXG4gIGZvbnQtc2l6ZTogMzJweDtcXG59XFxuXFxuLmVtb2ppLXR5cGUtbmF0aXZlIHtcXG4gIGZvbnQtZmFtaWx5OiBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIiwgXFxcIlNlZ29lIFVJXFxcIiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlR3ZW1vamkgTW96aWxsYVxcXCIsIFxcXCJOb3RvIENvbG9yIEVtb2ppXFxcIiwgXFxcIkVtb2ppT25lIENvbG9yXFxcIiwgXFxcIkFuZHJvaWQgRW1vamlcXFwiO1xcbiAgd29yZC1icmVhazoga2VlcC1hbGw7XFxufVxcblxcbi5lbW9qaS10eXBlLWltYWdlIHtcXG4gIC8qIEVtb2ppIHNoZWV0IGhhcyA1NiBjb2x1bW5zLCBzZWUgYWxzbyB1dGlscy9lbW9qaS1kYXRhLmpzLCBTSEVFVF9DT0xVTU5TIHZhcmlhYmxlICovXFxuICAvKiBIZXJlIHdlIHVzZSAoNTYrMSkgKiAxMDAlIHRvIGF2b2lkIHZpc2libGUgZWRnZXMgb2YgbmVhcmJ5IGljb25zIHdoZW4gc2NhbGluZyBmb3IgZGlmZmVyZW50XFxuICAgKiBzY3JlZW4gc2l6ZXMgKi9cXG4gIGJhY2tncm91bmQtc2l6ZTogNTcwMCU7XFxufVxcbi5lbW9qaS10eXBlLWltYWdlLmVtb2ppLXNldC1hcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImh0dHBzOi8vdW5wa2cuY29tL2Vtb2ppLWRhdGFzb3VyY2UtYXBwbGVANi4wLjEvaW1nL2FwcGxlL3NoZWV0cy0yNTYvNjQucG5nXFxcIik7XFxufVxcbi5lbW9qaS10eXBlLWltYWdlLmVtb2ppLXNldC1mYWNlYm9vayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImh0dHBzOi8vdW5wa2cuY29tL2Vtb2ppLWRhdGFzb3VyY2UtZmFjZWJvb2tANi4wLjEvaW1nL2ZhY2Vib29rL3NoZWV0cy0yNTYvNjQucG5nXFxcIik7XFxufVxcbi5lbW9qaS10eXBlLWltYWdlLmVtb2ppLXNldC1nb29nbGUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJodHRwczovL3VucGtnLmNvbS9lbW9qaS1kYXRhc291cmNlLWdvb2dsZUA2LjAuMS9pbWcvZ29vZ2xlL3NoZWV0cy0yNTYvNjQucG5nXFxcIik7XFxufVxcbi5lbW9qaS10eXBlLWltYWdlLmVtb2ppLXNldC10d2l0dGVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiaHR0cHM6Ly91bnBrZy5jb20vZW1vamktZGF0YXNvdXJjZS10d2l0dGVyQDYuMC4xL2ltZy90d2l0dGVyL3NoZWV0cy0yNTYvNjQucG5nXFxcIik7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWJhciB7XFxuICBib3JkZXI6IDAgc29saWQgI2Q5ZDlkOTtcXG59XFxuLmVtb2ppLW1hcnQtYmFyOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDFweDtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XFxufVxcbi5lbW9qaS1tYXJ0LWJhcjpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3Atd2lkdGg6IDFweDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNjcm9sbCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxuICAtbXMtZmxleDogMTtcXG4gICAgICBmbGV4OiAxO1xcbiAgcGFkZGluZzogMCA2cHggNnB4IDZweDtcXG4gIHotaW5kZXg6IDA7IC8qIEZpeCBmb3IgcmVuZGVyaW5nIHN0aWNreSBwb3NpdGlvbmVkIGNhdGVnb3J5IGxhYmVscyBvbiBDaHJvbWUgKi9cXG4gIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07IC8qIGF2b2lkcyBcXFwicmVwYWludHMgb24gc2Nyb2xsXFxcIiBpbiBtb2JpbGUgQ2hyb21lICovXFxuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWFuY2hvcnMge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcGFkZGluZzogMCA2cHg7XFxuICBjb2xvcjogIzg1ODU4NTtcXG4gIGxpbmUtaGVpZ2h0OiAwO1xcbn1cXG5cXG4uZW1vamktbWFydC1hbmNob3Ige1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgZmxleDogMSAxIGF1dG87XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxMnB4IDRweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0cmFuc2l0aW9uOiBjb2xvciAuMXMgZWFzZS1vdXQ7XFxufVxcbi5lbW9qaS1tYXJ0LWFuY2hvcjpob3ZlcixcXG4uZW1vamktbWFydC1hbmNob3Itc2VsZWN0ZWQge1xcbiAgY29sb3I6ICM0NjQ2NDY7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWFuY2hvci1zZWxlY3RlZCAuZW1vamktbWFydC1hbmNob3ItYmFyIHtcXG4gIGJvdHRvbTogMDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtYW5jaG9yLWJhciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IC0zcHg7IGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTsgaGVpZ2h0OiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDY0NjQ2O1xcbn1cXG5cXG4uZW1vamktbWFydC1hbmNob3JzIGkge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDIycHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWFuY2hvcnMgc3ZnIHtcXG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcXG4gIG1heC1oZWlnaHQ6IDE4cHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0IC5zY3JvbGxlciB7XFxuICBoZWlnaHQ6IDI1MHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLW1zLWZsZXg6IDE7XFxuICAgICAgZmxleDogMTtcXG4gIHBhZGRpbmc6IDAgNnB4IDZweCA2cHg7XFxuICB6LWluZGV4OiAwOyAvKiBGaXggZm9yIHJlbmRlcmluZyBzdGlja3kgcG9zaXRpb25lZCBjYXRlZ29yeSBsYWJlbHMgb24gQ2hyb21lICovXFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOyAvKiBhdm9pZHMgXFxcInJlcGFpbnRzIG9uIHNjcm9sbFxcXCIgaW4gbW9iaWxlIENocm9tZSAqL1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbn1cXG5cXG4uZW1vamktbWFydC1zZWFyY2gge1xcbiAgbWFyZ2luLXRvcDogNnB4O1xcbiAgcGFkZGluZzogMCA2cHg7XFxufVxcbi5lbW9qaS1tYXJ0LXNlYXJjaCBpbnB1dCB7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogLjJlbSAuNmVtO1xcbiAgYm9yZGVyLXJhZGl1czogMjVweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkOWQ5ZDk7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uZW1vamktbWFydC1zZWFyY2gtcmVzdWx0cyB7XFxuICBoZWlnaHQ6IDI1MHB4O1xcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcbn1cXG5cXG4uZW1vamktbWFydC1jYXRlZ29yeSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWNhdGVnb3J5IC5lbW9qaS1tYXJ0LWVtb2ppIHNwYW4ge1xcbiAgei1pbmRleDogMTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtY2F0ZWdvcnkgLmVtb2ppLW1hcnQtZW1vamk6aG92ZXI6YmVmb3JlIHtcXG4gIHotaW5kZXg6IDA7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDsgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0O1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIG9wYWNpdHk6IDA7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWNhdGVnb3J5IC5lbW9qaS1tYXJ0LWVtb2ppOmhvdmVyOmJlZm9yZSB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uZW1vamktbWFydC1jYXRlZ29yeS1sYWJlbCB7XFxuICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XFxuICBwb3NpdGlvbjogc3RpY2t5O1xcbiAgdG9wOiAwO1xcbn1cXG4uZW1vamktbWFydC1zdGF0aWMgLmVtb2ppLW1hcnQtY2F0ZWdvcnktbGFiZWwge1xcbiAgei1pbmRleDogMjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC8qIHBvc2l0aW9uOiBzdGlja3k7ICovXFxuICAvKiBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7ICovXFxufVxcblxcbi5lbW9qaS1tYXJ0LWNhdGVnb3J5LWxhYmVsIHNwYW4ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBwYWRkaW5nOiA1cHggNnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjk1KTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtZW1vamkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAwO1xcbn1cXG5cXG4uZW1vamktbWFydC1uby1yZXN1bHRzIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHBhZGRpbmctdG9wOiA3MHB4O1xcbiAgY29sb3I6ICM4NTg1ODU7XFxufVxcbi5lbW9qaS1tYXJ0LW5vLXJlc3VsdHMgLmVtb2ppLW1hcnQtY2F0ZWdvcnktbGFiZWwge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLmVtb2ppLW1hcnQtbm8tcmVzdWx0cyAuZW1vamktbWFydC1uby1yZXN1bHRzLWxhYmVsIHtcXG4gIG1hcmdpbi10b3A6IC4yZW07XFxufVxcbi5lbW9qaS1tYXJ0LW5vLXJlc3VsdHMgLmVtb2ppLW1hcnQtZW1vamk6aG92ZXI6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IG5vbmU7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiA3MHB4O1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LWVtb2ppLFxcbi5lbW9qaS1tYXJ0LXByZXZpZXctZGF0YSxcXG4uZW1vamktbWFydC1wcmV2aWV3LXNraW5zIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctZW1vamkge1xcbiAgbGVmdDogMTJweDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtcHJldmlldy1kYXRhIHtcXG4gIGxlZnQ6IDY4cHg7IHJpZ2h0OiAxMnB4O1xcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LXNraW5zIHtcXG4gIHJpZ2h0OiAzMHB4O1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctbmFtZSB7XFxuICBmb250LXNpemU6IDE0cHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiAjODg4O1xcbn1cXG4uZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZSArIC5lbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lLFxcbi5lbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lICsgLmVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbixcXG4uZW1vamktbWFydC1wcmV2aWV3LWVtb3RpY29uICsgLmVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbiB7XFxuICBtYXJnaW4tbGVmdDogLjVlbTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbiB7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogI2JiYjtcXG59XFxuXFxuLmVtb2ppLW1hcnQtdGl0bGUgc3BhbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG5cXG4uZW1vamktbWFydC10aXRsZSAuZW1vamktbWFydC1lbW9qaSB7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4uZW1vamktbWFydC10aXRsZS1sYWJlbCB7XFxuICBjb2xvcjogIzk5OUE5QztcXG4gIGZvbnQtc2l6ZTogMjFweDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMge1xcbiAgZm9udC1zaXplOiAwO1xcbiAgcGFkZGluZzogMnB4IDA7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZDlkOWQ5O1xcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMtb3BlbmVkIC5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoIHtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgcGFkZGluZzogMCAycHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMtb3BlbmVkIC5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoLXNlbGVjdGVkOmFmdGVyIHtcXG4gIG9wYWNpdHk6IC43NTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtc2tpbi1zd2F0Y2gge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogd2lkdGgsIHBhZGRpbmc7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAuMTI1cztcXG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtc2tpbi1zd2F0Y2g6bnRoLWNoaWxkKDEpIHsgdHJhbnNpdGlvbi1kZWxheTogMHMgfVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCgyKSB7IHRyYW5zaXRpb24tZGVsYXk6IC4wM3MgfVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCgzKSB7IHRyYW5zaXRpb24tZGVsYXk6IC4wNnMgfVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCg0KSB7IHRyYW5zaXRpb24tZGVsYXk6IC4wOXMgfVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCg1KSB7IHRyYW5zaXRpb24tZGVsYXk6IC4xMnMgfVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCg2KSB7IHRyYW5zaXRpb24tZGVsYXk6IC4xNXMgfVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoLXNlbGVjdGVkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgcGFkZGluZzogMCAycHg7XFxufVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoLXNlbGVjdGVkOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7IGxlZnQ6IDUwJTtcXG4gIHdpZHRoOiA0cHg7IGhlaWdodDogNHB4O1xcbiAgbWFyZ2luOiAtMnB4IDAgMCAtMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4ycyBlYXNlLW91dDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtc2tpbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMTAwJTsgcGFkZGluZy10b3A6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDEycHg7XFxuICBib3JkZXItcmFkaXVzOiAxMDAlO1xcbn1cXG5cXG4uZW1vamktbWFydC1za2luLXRvbmUtMSB7IGJhY2tncm91bmQtY29sb3I6ICNmZmM5M2EgfVxcbi5lbW9qaS1tYXJ0LXNraW4tdG9uZS0yIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZhZGNiYyB9XFxuLmVtb2ppLW1hcnQtc2tpbi10b25lLTMgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBiYjk1IH1cXG4uZW1vamktbWFydC1za2luLXRvbmUtNCB7IGJhY2tncm91bmQtY29sb3I6ICNiZjhmNjggfVxcbi5lbW9qaS1tYXJ0LXNraW4tdG9uZS01IHsgYmFja2dyb3VuZC1jb2xvcjogIzliNjQzZCB9XFxuLmVtb2ppLW1hcnQtc2tpbi10b25lLTYgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjNTk0NTM5IH1cXG5cXG5cXG4vKiB2dWUtdmlydHVhbC1zY3JvbGxlci9kaXN0L3Z1ZS12aXJ0dWFsLXNjcm9sbGVyLmNzcyAqL1xcbi5lbW9qaS1tYXJ0IC52dWUtcmVjeWNsZS1zY3JvbGxlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5lbW9qaS1tYXJ0IC52dWUtcmVjeWNsZS1zY3JvbGxlci5kaXJlY3Rpb24tdmVydGljYWw6bm90KC5wYWdlLW1vZGUpIHtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcbi5lbW9qaS1tYXJ0IC52dWUtcmVjeWNsZS1zY3JvbGxlci5kaXJlY3Rpb24taG9yaXpvbnRhbDpub3QoLnBhZ2UtbW9kZSkge1xcbiAgb3ZlcmZsb3cteDogYXV0bztcXG59XFxuLmVtb2ppLW1hcnQgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLmRpcmVjdGlvbi1ob3Jpem9udGFsIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmVtb2ppLW1hcnQgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyX19zbG90IHtcXG4gIC1tcy1mbGV4OiBhdXRvIDAgMHB4O1xcbiAgICAgIGZsZXg6IGF1dG8gMCAwO1xcbn1cXG4uZW1vamktbWFydCAudnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0td3JhcHBlciB7XFxuICAtbXMtZmxleDogMTtcXG4gICAgICBmbGV4OiAxO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5lbW9qaS1tYXJ0IC52dWUtcmVjeWNsZS1zY3JvbGxlci5yZWFkeSAudnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0tdmlldyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcXG59XFxuLmVtb2ppLW1hcnQgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLmRpcmVjdGlvbi12ZXJ0aWNhbCAudnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0td3JhcHBlciB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLmVtb2ppLW1hcnQgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLmRpcmVjdGlvbi1ob3Jpem9udGFsIC52dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS13cmFwcGVyIHtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLmVtb2ppLW1hcnQgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLnJlYWR5LmRpcmVjdGlvbi12ZXJ0aWNhbFxcbiAgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyX19pdGVtLXZpZXcge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi5lbW9qaS1tYXJ0IC52dWUtcmVjeWNsZS1zY3JvbGxlci5yZWFkeS5kaXJlY3Rpb24taG9yaXpvbnRhbFxcbiAgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyX19pdGVtLXZpZXcge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4uZW1vamktbWFydCAucmVzaXplLW9ic2VydmVyW2RhdGEtdi1iMzI5ZWU0Y10ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IC0xO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLmVtb2ppLW1hcnQgLnJlc2l6ZS1vYnNlcnZlcltkYXRhLXYtYjMyOWVlNGNdIG9iamVjdCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHotaW5kZXg6IC0xO1xcbn1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLypcXG4gKiBRdWFzYXIgRnJhbWV3b3JrIHYwLjE3LjIwXFxuICogKGMpIDIwMTYtcHJlc2VudCBSYXp2YW4gU3RvZW5lc2N1XFxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxcbiAqL1xcbiosXFxuKjpiZWZvcmUsXFxuKjphZnRlciB7XFxuICBib3gtc2l6aW5nOiBpbmhlcml0O1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIC1tb3otdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbmh0bWwsXFxuYm9keSxcXG4jcS1hcHAge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXJlY3Rpb246IGx0cjtcXG59XFxuaHRtbCxcXG5ib2R5IHtcXG4gIG1hcmdpbjogMDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbmlucHV0W3R5cGU9J3RleHQnXSxcXG5pbnB1dFt0eXBlPSdlbWFpbCddLFxcbmlucHV0W3R5cGU9J3NlYXJjaCddLFxcbmlucHV0W3R5cGU9J3Bhc3N3b3JkJ10ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lIC8qIG1vYmlsZSBmaXJlZm94IHRvbyEgKi87XFxufVxcbmFydGljbGUsXFxuYXNpZGUsXFxuZGV0YWlscyxcXG5maWdjYXB0aW9uLFxcbmZpZ3VyZSxcXG5mb290ZXIsXFxuaGVhZGVyLFxcbm1haW4sXFxubWVudSxcXG5uYXYsXFxuc2VjdGlvbixcXG5zdW1tYXJ5IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5hdWRpbzpub3QoW2NvbnRyb2xzXSkge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGhlaWdodDogMDtcXG59XFxuYWJiclt0aXRsZV0ge1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG59XFxuZGZuIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcXG59XFxuaW1nIHtcXG4gIGJvcmRlci1zdHlsZTogbm9uZTtcXG59XFxuc3ZnOm5vdCg6cm9vdCkge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuY29kZSxcXG5rYmQsXFxucHJlLFxcbnNhbXAge1xcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlO1xcbiAgZm9udC1zaXplOiAxZW07XFxufVxcbmhyIHtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgaGVpZ2h0OiAwO1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxufVxcbmJ1dHRvbixcXG5pbnB1dCxcXG5zZWxlY3QsXFxudGV4dGFyZWEge1xcbiAgZm9udDogaW5oZXJpdDtcXG4gIG1hcmdpbjogMDtcXG59XFxub3B0Z3JvdXAge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbmJ1dHRvbixcXG5pbnB1dCxcXG5zZWxlY3Qge1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxufVxcbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcXG5pbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7XFxuICBib3JkZXI6IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5idXR0b246LW1vei1mb2N1c3JpbmcsXFxuaW5wdXQ6LW1vei1mb2N1c3Jpbmcge1xcbiAgb3V0bGluZTogMXB4IGRvdHRlZCBCdXR0b25UZXh0O1xcbn1cXG50ZXh0YXJlYSB7XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuaW5wdXRbdHlwZT0nc2VhcmNoJ10ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxufVxcbmlucHV0W3R5cGU9J3NlYXJjaCddOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxcbmlucHV0W3R5cGU9J3NlYXJjaCddOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuLnEtaWNvbiB7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB3b3JkLXdyYXA6IG5vcm1hbDtcXG4gIGRpcmVjdGlvbjogbHRyO1xcbn1cXG4ucS1pY29uLFxcbi5tYXRlcmlhbC1pY29ucyB7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY3Vyc29yOiBpbmhlcml0O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS1hY3Rpb25zaGVldC10aXRsZSB7XFxuICBtaW4taGVpZ2h0OiA1NnB4O1xcbiAgcGFkZGluZzogMCAxNnB4O1xcbiAgY29sb3I6ICM3Nzc7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1mYWRlZCk7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWJvZHkge1xcbiAgbWF4LWhlaWdodDogNTAwcHg7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWdyaWQge1xcbiAgcGFkZGluZzogOHB4IDE2cHg7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWdyaWQgLnEtaXRlbS1zZXBhcmF0b3ItY29tcG9uZW50IHtcXG4gIG1hcmdpbjogMjRweCAwO1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW0ge1xcbiAgcGFkZGluZzogOHB4IDE2cHg7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3M7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWdyaWQtaXRlbTpob3ZlcixcXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW06Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogI2QwZDBkMDtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWdyaWQtaXRlbSBpLFxcbi5xLWFjdGlvbnNoZWV0LWdyaWQtaXRlbSBpbWcge1xcbiAgZm9udC1zaXplOiA0OHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW0gLmF2YXRhciB7XFxuICB3aWR0aDogNDhweDtcXG4gIGhlaWdodDogNDhweDtcXG59XFxuLnEtYWN0aW9uc2hlZXQtZ3JpZC1pdGVtIHNwYW4ge1xcbiAgY29sb3I6ICM3Nzc7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1mYWRlZCk7XFxufVxcbi5xLWxvYWRpbmctYmFyIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHotaW5kZXg6IDk5OTg7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSwgb3BhY2l0eSAwLjVzO1xcbn1cXG4ucS1sb2FkaW5nLWJhci50b3Age1xcbiAgbGVmdDogMCAvKiBydGw6aWdub3JlICovO1xcbiAgcmlnaHQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ucS1sb2FkaW5nLWJhci5ib3R0b20ge1xcbiAgbGVmdDogMCAvKiBydGw6aWdub3JlICovO1xcbiAgcmlnaHQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG4gIGJvdHRvbTogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ucS1sb2FkaW5nLWJhci5yaWdodCB7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICByaWdodDogMDtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnEtbG9hZGluZy1iYXIubGVmdCB7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucS1hbGVydCB7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4ucS1hbGVydCAuYXZhdGFyIHtcXG4gIHdpZHRoOiAzMnB4O1xcbiAgaGVpZ2h0OiAzMnB4O1xcbn1cXG4ucS1hbGVydC1zaWRlLFxcbi5xLWFsZXJ0LWNvbnRlbnQge1xcbiAgcGFkZGluZzogMTJweDtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XFxufVxcbi5xLWFsZXJ0LXNpZGUge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbn1cXG4ucS1hbGVydC1hY3Rpb25zIHtcXG4gIHBhZGRpbmc6IDEycHggMTJweCAxMnB4IDA7XFxufVxcbi5xLWFsZXJ0LWRldGFpbCB7XFxuICBmb250LXNpemU6IDEycHg7XFxufVxcbi5xLWJyZWFkY3J1bWJzIC5xLWljb24sXFxuLnEtYnJlYWRjcnVtYnMgLnEtYnJlYWRjcnVtYnMtc2VwYXJhdG9yIHtcXG4gIGZvbnQtc2l6ZTogMTUwJTtcXG59XFxuLnEtYnJlYWRjcnVtYnMtbGFzdCBhIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5bZGlyPXJ0bF0gLnEtYnJlYWRjcnVtYnMtc2VwYXJhdG9yIC5xLWljb24ge1xcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWJ0biB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm9yZGVyOiAwO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHBhZGRpbmc6IDRweCAxNnB4O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIHRyYW5zaXRpb246IDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC41LCAxKTtcXG4gIG1pbi1oZWlnaHQ6IDIuNTcyZW07XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbn1cXG5idXR0b24ucS1idG4ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XFxufVxcbmEucS1idG4ge1xcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxufVxcbi5xLWJ0biAucS1pY29uLFxcbi5xLWJ0biAucS1zcGlubmVyIHtcXG4gIGZvbnQtc2l6ZTogMS40ZW07XFxufVxcbi5xLWJ0biAucS1idG4taW5uZXIge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzO1xcbn1cXG4ucS1idG4gLnEtYnRuLWlubmVyLS1oaWRkZW4ge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtYnRuIC5xLWJ0bi1pbm5lcjpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxufVxcbi5xLWJ0bi5kaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAwLjcgIWltcG9ydGFudDtcXG59XFxuLnEtYnRuOm5vdCguZGlzYWJsZWQpOm5vdCgucS1idG4tZmxhdCk6bm90KC5xLWJ0bi1vdXRsaW5lKTpub3QoLnEtYnRuLXB1c2gpOmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICB6LWluZGV4OiAtMTtcXG4gIHRyYW5zaXRpb246IDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC41LCAxKTtcXG59XFxuLnEtYnRuOm5vdCguZGlzYWJsZWQpOm5vdCgucS1idG4tZmxhdCk6bm90KC5xLWJ0bi1vdXRsaW5lKTpub3QoLnEtYnRuLXB1c2gpOmFjdGl2ZTpiZWZvcmUsXFxuLnEtYnRuOm5vdCguZGlzYWJsZWQpOm5vdCgucS1idG4tZmxhdCk6bm90KC5xLWJ0bi1vdXRsaW5lKTpub3QoLnEtYnRuLXB1c2gpLmFjdGl2ZTpiZWZvcmUge1xcbiAgYm94LXNoYWRvdzogMCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwwLjIpLCAwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1idG4tcHJvZ3Jlc3Mge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMjUpO1xcbn1cXG4ucS1idG4tcHJvZ3Jlc3MucS1idG4tZGFyay1wcm9ncmVzcyB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMik7XFxufVxcbi5xLWJ0bi1uby11cHBlcmNhc2Uge1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxufVxcbi5xLWJ0bi1yZWN0YW5nbGUge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbn1cXG4ucS1idG4tb3V0bGluZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG4ucS1idG4tcHVzaCB7XFxuICBib3JkZXItcmFkaXVzOiA3cHg7XFxuICBib3JkZXItYm90dG9tOiAzcHggc29saWQgcmdiYSgwLDAsMCwwLjE1KTtcXG59XFxuLnEtYnRuLXB1c2g6YWN0aXZlOm5vdCguZGlzYWJsZWQpLFxcbi5xLWJ0bi1wdXNoLmFjdGl2ZTpub3QoLmRpc2FibGVkKSB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuLnEtYnRuLXB1c2ggLnEtZm9jdXMtaGVscGVyLFxcbi5xLWJ0bi1wdXNoIC5xLXJpcHBsZS1jb250YWluZXIge1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgYm90dG9tOiAtM3B4O1xcbn1cXG4ucS1idG4tcm91bmRlZCB7XFxuICBib3JkZXItcmFkaXVzOiAyOHB4O1xcbn1cXG4ucS1idG4tcm91bmQge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgcGFkZGluZzogMDtcXG4gIG1pbi1oZWlnaHQ6IDA7XFxuICBoZWlnaHQ6IDNlbTtcXG4gIHdpZHRoOiAzZW07XFxufVxcbi5xLWJ0bi1mbGF0LFxcbi5xLWJ0bi1vdXRsaW5lIHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi5xLWJ0bi1kZW5zZSB7XFxuICBwYWRkaW5nOiAwLjI4NWVtO1xcbiAgbWluLWhlaWdodDogMmVtO1xcbn1cXG4ucS1idG4tZGVuc2UucS1idG4tcm91bmQge1xcbiAgcGFkZGluZzogMDtcXG4gIGhlaWdodDogMi40ZW07XFxuICB3aWR0aDogMi40ZW07XFxufVxcbi5xLWJ0bi1kZW5zZSAub24tbGVmdCB7XFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcXG59XFxuLnEtYnRuLWRlbnNlIC5vbi1yaWdodCB7XFxuICBtYXJnaW4tbGVmdDogNnB4O1xcbn1cXG4ucS1idG4tZmFiIC5xLWljb24sXFxuLnEtYnRuLWZhYi1taW5pIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbn1cXG4ucS1idG4tZmFiIHtcXG4gIGhlaWdodDogNTZweDtcXG4gIHdpZHRoOiA1NnB4O1xcbn1cXG4ucS1idG4tZmFiLW1pbmkge1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgd2lkdGg6IDQwcHg7XFxufVxcbi5xLXRyYW5zaXRpb24tLWZhZGUtbGVhdmUtYWN0aXZlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLnEtdHJhbnNpdGlvbi0tZmFkZS1lbnRlci1hY3RpdmUsXFxuLnEtdHJhbnNpdGlvbi0tZmFkZS1sZWF2ZS1hY3RpdmUge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2Utb3V0O1xcbn1cXG4ucS10cmFuc2l0aW9uLS1mYWRlLWVudGVyLFxcbi5xLXRyYW5zaXRpb24tLWZhZGUtbGVhdmUsXFxuLnEtdHJhbnNpdGlvbi0tZmFkZS1sZWF2ZS10byB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1idG4tZHJvcGRvd24tc3BsaXQgLnEtYnRuLWRyb3Bkb3duLWFycm93IHtcXG4gIHBhZGRpbmc6IDAgNHB4O1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMyk7XFxufVxcbi5xLWJ0bi1ncm91cCB7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5xLWJ0bi1ncm91cCA+IC5xLWJ0bi1pdGVtIHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi5xLWJ0bi1ncm91cCA+IC5xLWJ0bi1ncm91cCA+IC5xLWJ0bjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBpbmhlcml0O1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogaW5oZXJpdDtcXG59XFxuLnEtYnRuLWdyb3VwID4gLnEtYnRuLWdyb3VwID4gLnEtYnRuOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGluaGVyaXQ7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogaW5oZXJpdDtcXG59XFxuLnEtYnRuLWdyb3VwID4gLnEtYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpID4gLnEtYnRuOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci1sZWZ0OiAwO1xcbn1cXG4ucS1idG4tZ3JvdXAgPiAucS1idG4tZ3JvdXA6bm90KDpsYXN0LWNoaWxkKSA+IC5xLWJ0bjpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1yaWdodDogMDtcXG59XFxuLnEtYnRuLWdyb3VwID4gLnEtYnRuLWl0ZW06bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG4ucS1idG4tZ3JvdXAgPiAucS1idG4taXRlbSArIC5xLWJ0bi1pdGVtIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG4ucS1idG4tZ3JvdXAtcHVzaCB7XFxuICBib3JkZXItcmFkaXVzOiA3cHg7XFxufVxcbi5xLWJ0bi1ncm91cC1wdXNoID4gLnEtYnRuLXB1c2ggLnEtYnRuLWlubmVyIHtcXG4gIHRyYW5zaXRpb246IDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC41LCAxKTtcXG59XFxuLnEtYnRuLWdyb3VwLXB1c2ggPiAucS1idG4tcHVzaDphY3RpdmU6bm90KC5kaXNhYmxlZCksXFxuLnEtYnRuLWdyb3VwLXB1c2ggPiAucS1idG4tcHVzaC5hY3RpdmU6bm90KC5kaXNhYmxlZCkge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgwLDAsMCwwLjE1KTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG59XFxuLnEtYnRuLWdyb3VwLXB1c2ggPiAucS1idG4tcHVzaDphY3RpdmU6bm90KC5kaXNhYmxlZCkgLnEtYnRuLWlubmVyLFxcbi5xLWJ0bi1ncm91cC1wdXNoID4gLnEtYnRuLXB1c2guYWN0aXZlOm5vdCguZGlzYWJsZWQpIC5xLWJ0bi1pbm5lciB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTtcXG59XFxuLnEtYnRuLWdyb3VwLXJvdW5kZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMjhweDtcXG59XFxuLnEtYnRuLWdyb3VwLWZsYXQsXFxuLnEtYnRuLWdyb3VwLW91dGxpbmUge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLnEtYnRuLWdyb3VwLW91dGxpbmUgPiAucS1idG4taXRlbSArIC5xLWJ0bi1pdGVtIHtcXG4gIGJvcmRlci1sZWZ0OiAwO1xcbn1cXG4ucS1idG4tZ3JvdXAtb3V0bGluZSA+IC5xLWJ0bi1pdGVtOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgYm9yZGVyLXJpZ2h0OiAwO1xcbn1cXG4ucS1jYXJkIHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcXG59XFxuLnEtY2FyZCA+IGRpdjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBpbmhlcml0O1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGluaGVyaXQ7XFxufVxcbi5xLWNhcmQgPiBkaXY6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiBpbmhlcml0O1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IGluaGVyaXQ7XFxufVxcbi5xLWNhcmQgPiAucS1saXN0IHtcXG4gIGJvcmRlcjogMDtcXG59XFxuLnEtY2FyZC1zZXBhcmF0b3Ige1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbiAgaGVpZ2h0OiAxcHg7XFxufVxcbi5xLWNhcmQtc2VwYXJhdG9yLmluc2V0IHtcXG4gIG1hcmdpbjogMCAxNnB4O1xcbn1cXG4ucS1jYXJkLWNvbnRhaW5lciB7XFxuICBwYWRkaW5nOiAxNnB4O1xcbn1cXG4ucS1jYXJkLXRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IDJyZW07XFxufVxcbi5xLWNhcmQtdGl0bGU6ZW1wdHkge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtY2FyZC1zdWJ0aXRsZSxcXG4ucS1jYXJkLXRpdGxlLWV4dHJhIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuNCk7XFxufVxcbi5xLWNhcmQtc3VidGl0bGUgLnEtaWNvbixcXG4ucS1jYXJkLXRpdGxlLWV4dHJhIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbn1cXG4ucS1jYXJkLW1haW4ge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG4ucS1jYXJkLXByaW1hcnkgKyAucS1jYXJkLW1haW4ge1xcbiAgcGFkZGluZy10b3A6IDA7XFxufVxcbi5xLWNhcmQtYWN0aW9ucyB7XFxuICBwYWRkaW5nOiA4cHg7XFxufVxcbi5xLWNhcmQtYWN0aW9ucyAucS1idG4ge1xcbiAgcGFkZGluZzogMCA4cHg7XFxufVxcbi5xLWNhcmQtYWN0aW9ucy1ob3JpeiAucS1idG46bm90KDpsYXN0LWNoaWxkKSB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnEtY2FyZC1hY3Rpb25zLXZlcnQgLnEtYnRuICsgLnEtYnRuIHtcXG4gIG1hcmdpbi10b3A6IDRweDtcXG59XFxuLnEtY2FyZC1tZWRpYSB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucS1jYXJkLW1lZGlhID4gaW1nIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBib3JkZXI6IDA7XFxufVxcbi5xLWNhcmQtbWVkaWEtb3ZlcmxheSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40Nyk7XFxufVxcbi5xLWNhcmQtbWVkaWEtb3ZlcmxheSAucS1jYXJkLXN1YnRpdGxlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1jYXJkLWRhcmsgLnEtY2FyZC1zZXBhcmF0b3Ige1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjIpO1xcbn1cXG4ucS1jYXJkLWRhcmsgLnEtY2FyZC1zdWJ0aXRsZSxcXG4ucS1jYXJkLWRhcmsgLnEtY2FyZC10aXRsZS1leHRyYSB7XFxuICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjYpO1xcbn1cXG4ucS1jYXJvdXNlbCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucS1jYXJvdXNlbC1pbm5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5xLWNhcm91c2VsLXNsaWRlIHtcXG4gIC1tcy1mbGV4OiAwIDAgMTAwJTtcXG4gICAgICBmbGV4OiAwIDAgMTAwJTtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDE4cHg7XFxufVxcbi5xLWNhcm91c2VsLXRyYWNrIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IDA7XFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucS1jYXJvdXNlbC10cmFjay5pbmZpbml0ZS1sZWZ0ID4gZGl2Om50aC1sYXN0LWNoaWxkKDIpIHtcXG4gIC1tcy1mbGV4LW9yZGVyOiAtMTAwMDtcXG4gICAgICBvcmRlcjogLTEwMDA7XFxuICBtYXJnaW4tbGVmdDogLTEwMCU7XFxufVxcbi5xLWNhcm91c2VsLXRyYWNrLmluZmluaXRlLXJpZ2h0ID4gZGl2Om50aC1jaGlsZCgyKSB7XFxuICAtbXMtZmxleC1vcmRlcjogMTAwMDtcXG4gICAgICBvcmRlcjogMTAwMDtcXG59XFxuLnEtY2Fyb3VzZWwtbGVmdC1hcnJvdyxcXG4ucS1jYXJvdXNlbC1yaWdodC1hcnJvdyB7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4zKTtcXG59XFxuLnEtY2Fyb3VzZWwtbGVmdC1hcnJvdyB7XFxuICBsZWZ0OiA1cHg7XFxufVxcbi5xLWNhcm91c2VsLXJpZ2h0LWFycm93IHtcXG4gIHJpZ2h0OiA1cHg7XFxufVxcbi5xLWNhcm91c2VsLXF1aWNrLW5hdiB7XFxuICBwYWRkaW5nOiAycHggMDtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4zKTtcXG59XFxuLnEtY2Fyb3VzZWwtcXVpY2stbmF2IC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWNhcm91c2VsLXF1aWNrLW5hdiAucS1idG4uaW5hY3RpdmUge1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG4ucS1jYXJvdXNlbC1xdWljay1uYXYgLnEtYnRuLmluYWN0aXZlIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWNhcm91c2VsLXRodW1ibmFpbHMge1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwNSUpO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBtYXgtaGVpZ2h0OiA2MCU7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIGJhY2tncm91bmQ6ICMwMDA7XFxuICBwYWRkaW5nOiAwLjVyZW07XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBib3gtc2hhZG93OiAwIC0zcHggNnB4IHJnYmEoMCwwLDAsMC4xNiksIDAgLTVweCA2cHggcmdiYSgwLDAsMCwwLjIzKTtcXG59XFxuLnEtY2Fyb3VzZWwtdGh1bWJuYWlscy5hY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbn1cXG4ucS1jYXJvdXNlbC10aHVtYm5haWxzIGltZyB7XFxuICBoZWlnaHQ6IGF1dG87XFxuICB3aWR0aDogMTAwJTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgb3BhY2l0eTogMC41O1xcbiAgd2lsbC1jaGFuZ2U6IG9wYWNpdHk7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3M7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xcbn1cXG4ucS1jYXJvdXNlbC10aHVtYm5haWxzID4gZGl2ID4gZGl2IHtcXG4gIC1tcy1mbGV4OiAwIDAgMTA4cHg7XFxuICAgICAgZmxleDogMCAwIDEwOHB4O1xcbn1cXG4ucS1jYXJvdXNlbC10aHVtYm5haWxzID4gZGl2ID4gZGl2LmFjdGl2ZSBpbWcsXFxuLnEtY2Fyb3VzZWwtdGh1bWJuYWlscyA+IGRpdiA+IGRpdiBpbWcuYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDE7XFxuICBib3JkZXItY29sb3I6ICNmZmY7XFxufVxcbi5xLWNhcm91c2VsLXRodW1ibmFpbC1idG4ge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjMpO1xcbiAgdG9wOiA1cHg7XFxuICByaWdodDogNXB4O1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtY2Fyb3VzZWwtdGh1bWJuYWlscyBpbWc6aG92ZXIge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtbWVzc2FnZS1uYW1lLFxcbi5xLW1lc3NhZ2Utc3RhbXAsXFxuLnEtbWVzc2FnZS1sYWJlbCB7XFxuICBmb250LXNpemU6IHNtYWxsO1xcbn1cXG4ucS1tZXNzYWdlLWxhYmVsIHtcXG4gIG1hcmdpbjogMjRweCAwO1xcbn1cXG4ucS1tZXNzYWdlLXN0YW1wIHtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbiAgb3BhY2l0eTogMC42O1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtbWVzc2FnZS1hdmF0YXIge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgd2lkdGg6IDQ4cHg7XFxuICBoZWlnaHQ6IDQ4cHg7XFxufVxcbi5xLW1lc3NhZ2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4ucS1tZXNzYWdlOmZpcnN0LWNoaWxkIC5xLW1lc3NhZ2UtbGFiZWwge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLnEtbWVzc2FnZS1yZWNlaXZlZCAucS1tZXNzYWdlLWF2YXRhciB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnEtbWVzc2FnZS1yZWNlaXZlZCAucS1tZXNzYWdlLXRleHQge1xcbiAgY29sb3I6ICM4MWM3ODQ7XFxuICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDNweCAwO1xcbn1cXG4ucS1tZXNzYWdlLXJlY2VpdmVkIC5xLW1lc3NhZ2UtdGV4dDpsYXN0LWNoaWxkOmJlZm9yZSB7XFxuICByaWdodDogMTAwJTtcXG4gIGJvcmRlci1yaWdodDogMCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1sZWZ0OiA4cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItYm90dG9tOiA4cHggc29saWQgY3VycmVudENvbG9yO1xcbn1cXG4ucS1tZXNzYWdlLXJlY2VpdmVkIC5xLW1lc3NhZ2UtdGV4dC1jb250ZW50IHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1tZXNzYWdlLXNlbnQgLnEtbWVzc2FnZS1uYW1lIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG4ucS1tZXNzYWdlLXNlbnQgLnEtbWVzc2FnZS1hdmF0YXIge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnEtbWVzc2FnZS1zZW50IC5xLW1lc3NhZ2UtY29udGFpbmVyIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcbi5xLW1lc3NhZ2Utc2VudCAucS1tZXNzYWdlLXRleHQge1xcbiAgY29sb3I6ICNlMGUwZTA7XFxuICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDAgM3B4O1xcbn1cXG4ucS1tZXNzYWdlLXNlbnQgLnEtbWVzc2FnZS10ZXh0Omxhc3QtY2hpbGQ6YmVmb3JlIHtcXG4gIGxlZnQ6IDEwMCU7XFxuICBib3JkZXItbGVmdDogMCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtbWVzc2FnZS1zZW50IC5xLW1lc3NhZ2UtdGV4dC1jb250ZW50IHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1tZXNzYWdlLXRleHQge1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgcGFkZGluZzogOHB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuMjtcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbn1cXG4ucS1tZXNzYWdlLXRleHQgKyAucS1tZXNzYWdlLXRleHQge1xcbiAgbWFyZ2luLXRvcDogM3B4O1xcbn1cXG4ucS1tZXNzYWdlLXRleHQ6bGFzdC1jaGlsZCB7XFxuICBtaW4taGVpZ2h0OiA0OHB4O1xcbn1cXG4ucS1tZXNzYWdlLXRleHQ6bGFzdC1jaGlsZCAucS1tZXNzYWdlLXN0YW1wIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG4ucS1tZXNzYWdlLXRleHQ6bGFzdC1jaGlsZDpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG59XFxuLnEtY2hlY2tib3gtaWNvbiB7XFxuICBoZWlnaHQ6IDIxcHg7XFxuICB3aWR0aDogMjFweDtcXG4gIGZvbnQtc2l6ZTogMjFweDtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLWNoaXAge1xcbiAgbWluLWhlaWdodDogMzJweDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDAgMTJweDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGJvcmRlcjogI2UwZTBlMDtcXG4gIGJvcmRlci1yYWRpdXM6IDJyZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgY29sb3I6ICMwMDA7XFxuICBiYWNrZ3JvdW5kOiAjZWVlO1xcbn1cXG4ucS1jaGlwOmZvY3VzIC5xLWNoaXAtY2xvc2Uge1xcbiAgb3BhY2l0eTogMC44O1xcbn1cXG4ucS1jaGlwIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxufVxcbi5xLWNoaXAtbWFpbiB7XFxuICBsaW5lLWhlaWdodDogaW5pdGlhbDtcXG4gIC1tcy1mbGV4OiAxIDEgYXV0bztcXG4gICAgICBmbGV4OiAxIDEgYXV0bztcXG59XFxuLnEtY2hpcC1zaWRlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGhlaWdodDogMzJweDtcXG4gIHdpZHRoOiAzMnB4O1xcbiAgbWluLXdpZHRoOiAzMnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtY2hpcC1zaWRlIGltZyB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnEtY2hpcC1sZWZ0IHtcXG4gIG1hcmdpbi1sZWZ0OiAtMTJweDtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG4ucS1jaGlwLXJpZ2h0IHtcXG4gIG1hcmdpbi1sZWZ0OiAycHg7XFxuICBtYXJnaW4tcmlnaHQ6IC0xMnB4O1xcbn1cXG4ucS1jaGlwLXNxdWFyZSB7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxufVxcbi5xLWNoaXAtZmxvYXRpbmcge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtMC4zZW07XFxuICByaWdodDogLTAuM2VtO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICB6LWluZGV4OiAxO1xcbn1cXG4ucS1jaGlwLXRhZyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nLWxlZnQ6IDEuN3JlbTtcXG59XFxuLnEtY2hpcC10YWc6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDAuNXJlbTtcXG4gIG1hcmdpbi10b3A6IC0wLjI1cmVtO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIHdpZHRoOiAwLjVyZW07XFxuICBoZWlnaHQ6IDAuNXJlbTtcXG4gIGJveC1zaGFkb3c6IDAgLTFweCAxcHggMCByZ2JhKDAsMCwwLDAuMyk7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcbi5xLWNoaXAtcG9pbnRpbmcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMDtcXG59XFxuLnEtY2hpcC1wb2ludGluZzpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICB6LWluZGV4OiAtMTtcXG4gIGJhY2tncm91bmQ6IGluaGVyaXQ7XFxuICB3aWR0aDogMTZweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLnEtY2hpcC1wb2ludGluZy11cCB7XFxuICBtYXJnaW4tdG9wOiAwLjhyZW07XFxufVxcbi5xLWNoaXAtcG9pbnRpbmctdXA6YmVmb3JlIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC0yMiUpIHJvdGF0ZSg0NWRlZyk7XFxufVxcbi5xLWNoaXAtcG9pbnRpbmctZG93biB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjhyZW07XFxufVxcbi5xLWNoaXAtcG9pbnRpbmctZG93bjpiZWZvcmUge1xcbiAgcmlnaHQ6IGF1dG87XFxuICB0b3A6IDEwMCU7XFxuICBsZWZ0OiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNzglKSByb3RhdGUoNDVkZWcpO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLXJpZ2h0IHtcXG4gIG1hcmdpbi1yaWdodDogMC44cmVtO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLXJpZ2h0OmJlZm9yZSB7XFxuICB0b3A6IDUwJTtcXG4gIHJpZ2h0OiAycHg7XFxuICBib3R0b206IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDMzJSkgdHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoNDVkZWcpO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLWxlZnQge1xcbiAgbWFyZ2luLWxlZnQ6IDAuOHJlbTtcXG59XFxuLnEtY2hpcC1wb2ludGluZy1sZWZ0OmJlZm9yZSB7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDJweDtcXG4gIGJvdHRvbTogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zMyUpIHRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKDQ1ZGVnKTtcXG59XFxuLnEtY2hpcC1kZXRhaWwge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbiAgb3BhY2l0eTogMC44O1xcbiAgcGFkZGluZzogMCA1cHg7XFxuICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuLnEtY2hpcC1zbWFsbCB7XFxuICBtaW4taGVpZ2h0OiAyNnB4O1xcbn1cXG4ucS1jaGlwLXNtYWxsIC5xLWNoaXAtbWFpbiB7XFxuICBwYWRkaW5nOiA0cHggMXB4O1xcbiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7XFxufVxcbi5xLWNoaXAtc21hbGwgLnEtY2hpcC1zaWRlIHtcXG4gIGhlaWdodDogMjZweDtcXG4gIHdpZHRoOiAyNnB4O1xcbiAgbWluLXdpZHRoOiAyNnB4O1xcbn1cXG4ucS1jaGlwLXNtYWxsIC5xLWNoaXAtaWNvbiB7XFxuICBmb250LXNpemU6IDE2cHg7XFxufVxcbi5xLWNoaXAtZGVuc2Uge1xcbiAgbWluLWhlaWdodDogMXB4O1xcbiAgcGFkZGluZzogMCAzcHg7XFxuICBmb250LXNpemU6IDEycHg7XFxufVxcbi5xLWNoaXAtZGVuc2UucS1jaGlwLXRhZyB7XFxuICBwYWRkaW5nLWxlZnQ6IDEuM3JlbTtcXG59XFxuLnEtY2hpcC1kZW5zZS5xLWNoaXAtcG9pbnRpbmc6YmVmb3JlIHtcXG4gIHdpZHRoOiA5cHg7XFxuICBoZWlnaHQ6IDlweDtcXG59XFxuLnEtY2hpcC1kZW5zZSAucS1jaGlwLW1haW4ge1xcbiAgcGFkZGluZzogMXB4O1xcbn1cXG4ucS1jaGlwLWRlbnNlIC5xLWNoaXAtc2lkZSB7XFxuICBoZWlnaHQ6IDE4cHg7XFxuICB3aWR0aDogMThweDtcXG4gIG1pbi13aWR0aDogMTZweDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG59XFxuLnEtY2hpcC1kZW5zZSAucS1jaGlwLWxlZnQge1xcbiAgbWFyZ2luLWxlZnQ6IC0zcHg7XFxuICBtYXJnaW4tcmlnaHQ6IDJweDtcXG59XFxuLnEtY2hpcC1kZW5zZSAucS1jaGlwLXJpZ2h0IHtcXG4gIG1hcmdpbi1sZWZ0OiAycHg7XFxuICBtYXJnaW4tcmlnaHQ6IC0ycHg7XFxufVxcbi5xLWNoaXAtZGVuc2UgLnEtaWNvbiB7XFxuICBmb250LXNpemU6IDE2cHg7XFxufVxcbi5xLWlucHV0LWNoaXBzIHtcXG4gIG1hcmdpbi10b3A6IC0xcHg7XFxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xcbn1cXG4ucS1pbnB1dC1jaGlwcyAucS1jaGlwIHtcXG4gIG1hcmdpbjogMXB4O1xcbn1cXG4ucS1pbnB1dC1jaGlwcyBpbnB1dC5xLWlucHV0LXRhcmdldCB7XFxuICBtaW4td2lkdGg6IDcwcHggIWltcG9ydGFudDtcXG59XFxuLnEtY29sbGFwc2libGUtc3ViLWl0ZW0ge1xcbiAgcGFkZGluZzogOHB4IDE2cHg7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXN1Yi1pdGVtLmluZGVudCB7XFxuICBwYWRkaW5nLWxlZnQ6IDQ4cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1zdWItaXRlbSAucS1jYXJkIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcbi5xLWNvbGxhcHNpYmxlLnJvdXRlci1saW5rLWFjdGl2ZSA+IC5xLWl0ZW0ge1xcbiAgYmFja2dyb3VuZDogcmdiYSgxODksMTg5LDE4OSwwLjQpO1xcbn1cXG4ucS1jb2xsYXBzaWJsZSB7XFxuICB0cmFuc2l0aW9uOiBwYWRkaW5nIDAuNXM7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXBvcHVwLWNsb3NlZCB7XFxuICBwYWRkaW5nOiAwIDE1cHg7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXBvcHVwLWNsb3NlZCAucS1jb2xsYXBzaWJsZS1pbm5lciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1wb3B1cC1jbG9zZWQgKyAucS1jb2xsYXBzaWJsZS1wb3B1cC1jbG9zZWQgLnEtY29sbGFwc2libGUtaW5uZXIge1xcbiAgYm9yZGVyLXRvcDogMDtcXG59XFxuLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkIHtcXG4gIHBhZGRpbmc6IDE1cHggMDtcXG59XFxuLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkIC5xLWNvbGxhcHNpYmxlLWlubmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1wb3B1cC1vcGVuZWQgKyAucS1jb2xsYXBzaWJsZS1wb3B1cC1vcGVuZWQsXFxuLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkOmZpcnN0LWNoaWxkIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1wb3B1cC1vcGVuZWQ6bGFzdC1jaGlsZCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMDtcXG59XFxuLnEtY29sbGFwc2libGUtY3Vyc29yLXBvaW50ZXIgPiAucS1jb2xsYXBzaWJsZS1pbm5lciA+IC5xLWl0ZW0ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS10b2dnbGUtaWNvbiB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB3aWR0aDogMWVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4ucS1jb2xvciB7XFxuICBtYXgtd2lkdGg6IDEwMHZ3O1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG59XFxuLnEtY29sb3Itc2F0dXJhdGlvbiB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTIzcHg7XFxufVxcbi5xLWNvbG9yLXNhdHVyYXRpb24td2hpdGUge1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjZmZmLCByZ2JhKDI1NSwyNTUsMjU1LDApKTtcXG59XFxuLnEtY29sb3Itc2F0dXJhdGlvbi1ibGFjayB7XFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCAjMDAwLCByZ2JhKDAsMCwwLDApKTtcXG59XFxuLnEtY29sb3Itc2F0dXJhdGlvbi1jaXJjbGUge1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxLjVweCAjZmZmLCBpbnNldCAwIDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMyksIDAgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40KTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01cHgsIC01cHgpO1xcbn1cXG4ucS1jb2xvci1zd2F0Y2gsXFxuLnEtY29sb3ItYWxwaGEgLnEtc2xpZGVyLXRyYWNrIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQ0FZQUFBREVENzZMQUFBQUgwbEVRVlFvVTJOa1lHQXdaa0FGWjVHNWpQUlJnT1lFVkRlQjNFQmpCUUJPWndUVnVnSUd5QUFBQUFCSlJVNUVya0pnZ2c9PVxcXCIpICFpbXBvcnRhbnQ7XFxufVxcbi5xLWNvbG9yLXN3YXRjaCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMzJweDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4ucS1jb2xvci1odWUgLnEtc2xpZGVyLXRyYWNrIHtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2YwMCAwJSwgI2ZmMCAxNyUsICMwZjAgMzMlLCAjMGZmIDUwJSwgIzAwZiA2NyUsICNmMGYgODMlLCAjZjAwIDEwMCUpO1xcbiAgb3BhY2l0eTogMTtcXG4gIGhlaWdodDogOHB4O1xcbn1cXG4ucS1jb2xvci1odWUgLnEtc2xpZGVyLXRyYWNrLmFjdGl2ZS10cmFjayB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1jb2xvci1hbHBoYSAucS1zbGlkZXItdHJhY2sge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIG9wYWNpdHk6IDE7XFxuICBoZWlnaHQ6IDhweDtcXG59XFxuLnEtY29sb3ItYWxwaGEgLnEtc2xpZGVyLXRyYWNrOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDI1NSwyNTUsMjU1LDApLCAjNzU3NTc1KTtcXG59XFxuLnEtY29sb3ItYWxwaGEgLnEtc2xpZGVyLXRyYWNrLmFjdGl2ZS10cmFjayB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1jb2xvci1zbGlkZXJzIHtcXG4gIGhlaWdodDogNTZweDtcXG59XFxuLnEtY29sb3Itc2xpZGVycyAucS1zbGlkZXIge1xcbiAgaGVpZ2h0OiAyMHB4O1xcbn1cXG4ucS1jb2xvci1zbGlkZXJzIC5xLXNsaWRlci1oYW5kbGUge1xcbiAgYm94LXNoYWRvdzogMCAxcHggNHB4IDAgcmdiYSgwLDAsMCwwLjM3KTtcXG59XFxuLnEtY29sb3Itc2xpZGVycyAucS1zbGlkZXItcmluZyB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1jb2xvci1pbnB1dHMge1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgY29sb3I6ICM3NTc1NzU7XFxufVxcbi5xLWNvbG9yLWlucHV0cyBpbnB1dCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgb3V0bGluZTogMDtcXG59XFxuLnEtY29sb3ItcGFkZGluZyB7XFxuICBwYWRkaW5nOiAwIDJweDtcXG59XFxuLnEtY29sb3ItbGFiZWwge1xcbiAgcGFkZGluZy10b3A6IDRweDtcXG59XFxuLnEtY29sb3ItZGFyayB7XFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzQyNDI0MjtcXG59XFxuLnEtY29sb3ItZGFyayBpbnB1dCB7XFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgY29sb3I6ICNiZGJkYmQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1saWdodCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjNDI0MjQyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcS1jb2xvci1kYXJrKTtcXG59XFxuLnEtY29sb3ItZGFyayAucS1jb2xvci1pbnB1dHMge1xcbiAgY29sb3I6ICNiZGJkYmQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1saWdodCk7XFxufVxcbi5xLWNvbG9yLWRhcmsgLnEtY29sb3Itc3dhdGNoIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICM0MjQyNDI7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1xLWNvbG9yLWRhcmspO1xcbn1cXG4ucS1kYXRldGltZS1pbnB1dCB7XFxuICBtaW4td2lkdGg6IDcwcHg7XFxufVxcbi5xLWRhdGV0aW1lLWNvbnRyb2xzIHtcXG4gIHBhZGRpbmc6IDAgMTBweCA4cHg7XFxufVxcbi5xLWRhdGV0aW1lIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBsaW5lLWhlaWdodDogaW5pdGlhbDtcXG59XFxuLnEtZGF0ZXRpbWUgLm1vZGFsLWJ1dHRvbnMge1xcbiAgcGFkZGluZy10b3A6IDhweDtcXG59XFxuLnEtZGF0ZXRpbWU6bm90KC5uby1ib3JkZXIpOm5vdCgucS1kYXRldGltZS1kYXJrKSAucS1kYXRldGltZS1jb250ZW50IHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XFxufVxcbi5xLWRhdGV0aW1lOm5vdCgubm8tYm9yZGVyKS5xLWRhdGV0aW1lLWRhcmsge1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzQyNDI0MjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXEtY29sb3ItZGFyayk7XFxufVxcbi5xLWRhdGV0aW1lLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWhlYWRlciA+IGRpdiB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ubW9kYWwtY29udGVudCA+IC5xLWRhdGV0aW1lID4gLnEtZGF0ZXRpbWUtaGVhZGVyLFxcbi5xLXBvcG92ZXIgPiAucS1kYXRldGltZSA+IC5xLWRhdGV0aW1lLWhlYWRlciB7XFxuICBtaW4td2lkdGg6IDE3NXB4O1xcbn1cXG4ucS1kYXRldGltZS13ZWVrZGF5c3RyaW5nIHtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbiAgcGFkZGluZzogNXB4IDA7XFxufVxcbi5xLWRhdGV0aW1lLXRpbWUge1xcbiAgcGFkZGluZzogMTBweCAwO1xcbiAgd2lsbC1jaGFuZ2U6IHNjcm9sbC1wb3NpdGlvbjtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG4ucS1kYXRldGltZS1hbXBtIHtcXG4gIGZvbnQtc2l6ZTogMC45cmVtO1xcbiAgcGFkZGluZzogNXB4O1xcbn1cXG4ucS1kYXRldGltZS1kYXRlc3RyaW5nIHtcXG4gIHBhZGRpbmc6IDEwcHggMDtcXG59XFxuLnEtZGF0ZXRpbWUtZGF0ZXN0cmluZyAucS1kYXRldGltZS1saW5rIHtcXG4gIGZvbnQtc2l6ZTogMi43cmVtO1xcbn1cXG4ucS1kYXRldGltZS1kYXRlc3RyaW5nIC5xLWRhdGV0aW1lLWxpbmsgc3BhbiB7XFxuICBwYWRkaW5nOiAwIDVweDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ucS1kYXRldGltZS1kYXRlc3RyaW5nIC5xLWRhdGV0aW1lLWxpbmsuc21hbGwge1xcbiAgbWFyZ2luOiAwIDVweDtcXG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xcbn1cXG4ucS1kYXRldGltZS1kYXRlc3RyaW5nIC5xLWRhdGV0aW1lLWxpbmsuc21hbGwgc3BhbiB7XFxuICBwYWRkaW5nOiA1cHg7XFxufVxcbi5xLWRhdGV0aW1lLWxpbmsge1xcbiAgb3BhY2l0eTogMC42O1xcbn1cXG4ucS1kYXRldGltZS1saW5rID4gc3BhbiB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4ucS1kYXRldGltZS1saW5rLmFjdGl2ZSB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1kYXRldGltZS1jbG9ja3N0cmluZyB7XFxuICBtaW4td2lkdGg6IDIxMHB4O1xcbiAgZm9udC1zaXplOiAyLjdyZW07XFxuICBkaXJlY3Rpb246IGx0ciAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1zZWxlY3RvciB7XFxuICBtaW4td2lkdGg6IDI5MHB4O1xcbiAgaGVpZ2h0OiAzMTBweDtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG4ucS1kYXRldGltZS12aWV3LWRheSB7XFxuICB3aWR0aDogMjUwcHg7XFxuICBoZWlnaHQ6IDI4NXB4O1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWRhdGV0aW1lLXZpZXcteWVhciA+IC5xLWJ0bjpub3QoLmFjdGl2ZSksXFxuLnEtZGF0ZXRpbWUtdmlldy1tb250aCA+IC5xLWJ0bjpub3QoLmFjdGl2ZSkge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWRhdGV0aW1lLW1vbnRoLXN0YW1wIHtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG59XFxuLnEtZGF0ZXRpbWUtd2Vla2RheXMge1xcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xcbn1cXG4ucS1kYXRldGltZS13ZWVrZGF5cyBkaXYge1xcbiAgb3BhY2l0eTogMC42O1xcbiAgd2lkdGg6IDM1cHg7XFxuICBoZWlnaHQ6IDM1cHg7XFxuICBsaW5lLWhlaWdodDogMzVweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBtaW4td2lkdGg6IDA7XFxuICBtaW4taGVpZ2h0OiAwO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxufVxcbi5xLWRhdGV0aW1lLWRheXMgZGl2IHtcXG4gIG1hcmdpbjogMXB4O1xcbiAgbGluZS1oZWlnaHQ6IDMzcHg7XFxuICB3aWR0aDogMzNweDtcXG4gIGhlaWdodDogMzNweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuLnEtZGF0ZXRpbWUtZGF5cyBkaXYucS1kYXRldGltZS1kYXktYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtZGF0ZXRpbWUtZGF5cyBkaXYucS1kYXRldGltZS1kYXktYWN0aXZlID4gc3BhbiB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtZGF0ZXRpbWUtZGF5cyBkaXYucS1kYXRldGltZS1kYXktdG9kYXkge1xcbiAgY29sb3I6IGN1cnJlbnRDb2xvcjtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtZGF0ZXRpbWUtZGF5cyBkaXY6bm90KC5xLWRhdGV0aW1lLWZpbGxlcmRheSk6bm90KC5kaXNhYmxlZCk6bm90KC5xLWRhdGV0aW1lLWRheS1hY3RpdmUpOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6ICNlMGUwZTA7XFxufVxcbi5xLWRhdGV0aW1lLWJ0biB7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbn1cXG4ucS1kYXRldGltZS1idG4uYWN0aXZlIHtcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcbiAgcGFkZGluZy10b3A6IDFyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2sge1xcbiAgd2lkdGg6IDI1MHB4O1xcbiAgaGVpZ2h0OiAyNTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6ICNlMGUwZTA7XFxuICBwYWRkaW5nOiAyNHB4O1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1jaXJjbGUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYW5pbWF0aW9uOiBxLXBvcCAwLjVzIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLWNlbnRlciB7XFxuICBoZWlnaHQ6IDZweDtcXG4gIHdpZHRoOiA2cHg7XFxuICB0b3A6IDA7XFxuICBtYXJnaW46IGF1dG87XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBtaW4taGVpZ2h0OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb2ludGVyIHtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDUwJTtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlciAvKiBydGw6aWdub3JlICovO1xcbiAgbWluLWhlaWdodDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9pbnRlciBzcGFuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHdpZHRoOiA4cHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJvdHRvbTogLThweDtcXG4gIGxlZnQ6IDA7XFxuICBtaW4td2lkdGg6IDA7XFxuICBtaW4taGVpZ2h0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWFycm93IHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIHtcXG4gIGJhY2tncm91bmQ6ICM0MjQyNDI7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1xLWNvbG9yLWRhcmspO1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLWFycm93IHtcXG4gIGNvbG9yOiAjYmRiZGJkO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbGlnaHQpO1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLWhlYWRlcixcXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLWNsb2NrIHtcXG4gIGJhY2tncm91bmQ6ICM2MTYxNjE7XFxufVxcbi5xLWRhdGV0aW1lLWRhcmsgLnEtZGF0ZXRpbWUtdmlldy1kYXkge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLWRhdGV0aW1lLWRhcmsgLnEtZGF0ZXRpbWUtdmlldy15ZWFyID4gLnEtYnRuOm5vdCguYWN0aXZlKSxcXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLXZpZXctbW9udGggPiAucS1idG46bm90KC5hY3RpdmUpIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLWRheXMgZGl2LnEtZGF0ZXRpbWUtZGF5LWFjdGl2ZSA+IHNwYW4sXFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1kYXlzIGRpdjpub3QoLnEtZGF0ZXRpbWUtZmlsbGVyZGF5KTpub3QoLmRpc2FibGVkKTpub3QoLnEtZGF0ZXRpbWUtZGF5LWFjdGl2ZSk6aG92ZXIge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbmJvZHkuZGVza3RvcCAucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbjpub3QoLmFjdGl2ZSk6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogI2Y1ZjVmNSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbjpub3QoLmFjdGl2ZSk6aG92ZXIge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG1pbi1oZWlnaHQ6IDMycHg7XFxuICB3aWR0aDogMzJweDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIC8qIHJ0bDppZ25vcmUgKi87XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uOm5vdCguYWN0aXZlKSB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbjpub3QoLmFjdGl2ZSkge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uLmFjdGl2ZSA+IHNwYW4ge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0wIHtcXG4gIHRvcDogMCU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEge1xcbiAgdG9wOiA2LjclO1xcbiAgbGVmdDogNzUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0yIHtcXG4gIHRvcDogMjUlO1xcbiAgbGVmdDogOTMuMyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTMge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAxMDAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy00IHtcXG4gIHRvcDogNzUlO1xcbiAgbGVmdDogOTMuMyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTUge1xcbiAgdG9wOiA5My4zJTtcXG4gIGxlZnQ6IDc1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtNiB7XFxuICB0b3A6IDEwMCU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTcge1xcbiAgdG9wOiA5My4zJTtcXG4gIGxlZnQ6IDI1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtOCB7XFxuICB0b3A6IDc1JTtcXG4gIGxlZnQ6IDYuNyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTkge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAwJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTAge1xcbiAgdG9wOiAyNSU7XFxuICBsZWZ0OiA2LjclIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xMSB7XFxuICB0b3A6IDYuNyU7XFxuICBsZWZ0OiAyNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEyIHtcXG4gIHRvcDogMCU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEuZm10MjQge1xcbiAgdG9wOiA2LjclO1xcbiAgbGVmdDogNzUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0yLmZtdDI0IHtcXG4gIHRvcDogMjUlO1xcbiAgbGVmdDogOTMuMyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTMuZm10MjQge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAxMDAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy00LmZtdDI0IHtcXG4gIHRvcDogNzUlO1xcbiAgbGVmdDogOTMuMyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTUuZm10MjQge1xcbiAgdG9wOiA5My4zJTtcXG4gIGxlZnQ6IDc1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtNi5mbXQyNCB7XFxuICB0b3A6IDEwMCU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTcuZm10MjQge1xcbiAgdG9wOiA5My4zJTtcXG4gIGxlZnQ6IDI1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtOC5mbXQyNCB7XFxuICB0b3A6IDc1JTtcXG4gIGxlZnQ6IDYuNyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTkuZm10MjQge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAwJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTAuZm10MjQge1xcbiAgdG9wOiAyNSU7XFxuICBsZWZ0OiA2LjclIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xMS5mbXQyNCB7XFxuICB0b3A6IDYuNyU7XFxuICBsZWZ0OiAyNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEyLmZtdDI0IHtcXG4gIHRvcDogMCU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEzLmZtdDI0IHtcXG4gIHRvcDogMTkuNjklO1xcbiAgbGVmdDogNjcuNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTE0LmZtdDI0IHtcXG4gIHRvcDogMzIuNSU7XFxuICBsZWZ0OiA4MC4zMSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTE1LmZtdDI0IHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogODUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xNi5mbXQyNCB7XFxuICB0b3A6IDY3LjUlO1xcbiAgbGVmdDogODAuMzElIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xNy5mbXQyNCB7XFxuICB0b3A6IDgwLjMxJTtcXG4gIGxlZnQ6IDY3LjUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xOC5mbXQyNCB7XFxuICB0b3A6IDg1JTtcXG4gIGxlZnQ6IDUwJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTkuZm10MjQge1xcbiAgdG9wOiA4MC4zMSU7XFxuICBsZWZ0OiAzMi41JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMjAuZm10MjQge1xcbiAgdG9wOiA2Ny41JTtcXG4gIGxlZnQ6IDE5LjY5JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMjEuZm10MjQge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAxNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTIyLmZtdDI0IHtcXG4gIHRvcDogMzIuNSU7XFxuICBsZWZ0OiAxOS42OSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTIzLmZtdDI0IHtcXG4gIHRvcDogMTkuNjklO1xcbiAgbGVmdDogMzIuNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTAuZm10MjQge1xcbiAgdG9wOiAxNSU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtcmFuZ2Uucm93IC5xLWRhdGV0aW1lLXJhbmdlLWxlZnQge1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuLnEtZGF0ZXRpbWUtcmFuZ2Uucm93IC5xLWRhdGV0aW1lLXJhbmdlLXJpZ2h0IHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG4ucS1kYXRldGltZS1yYW5nZS5jb2x1bW4gPiBkaXYgKyBkaXYge1xcbiAgbWFyZ2luLXRvcDogMTBweDtcXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICAucS1kYXRldGltZSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAucS1kYXRldGltZS1oZWFkZXIge1xcbiAgICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDEgYXV0bztcXG4gIH1cXG4gIC5xLWRhdGV0aW1lLWNvbnRlbnQge1xcbiAgICAtbXMtZmxleDogMiAyIGF1dG87XFxuICAgICAgICBmbGV4OiAyIDIgYXV0bztcXG4gIH1cXG59XFxuLnEtZG90IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTJweDtcXG4gIHJpZ2h0OiAtMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZDogI2Y0NDMzNjtcXG4gIG9wYWNpdHk6IDAuODtcXG59XFxuLnEtZWRpdG9yIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XFxufVxcbi5xLWVkaXRvci5kaXNhYmxlZCB7XFxuICBib3JkZXItc3R5bGU6IGRhc2hlZDtcXG59XFxuLnEtZWRpdG9yLmZ1bGxzY3JlZW4ge1xcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5xLWVkaXRvci1jb250ZW50IHtcXG4gIG91dGxpbmU6IDA7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgbWluLWhlaWdodDogMTBlbTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxufVxcbi5xLWVkaXRvci1jb250ZW50IGhyIHtcXG4gIGJvcmRlcjogMDtcXG4gIG91dGxpbmU6IDA7XFxuICBtYXJnaW46IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgYmFja2dyb3VuZDogI2NjYztcXG59XFxuLnEtZWRpdG9yLXRvb2xiYXItcGFkZGluZyB7XFxuICBwYWRkaW5nOiA0cHg7XFxufVxcbi5xLWVkaXRvci10b29sYmFyIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xcbiAgYmFja2dyb3VuZDogI2UwZTBlMDtcXG4gIG1pbi1oZWlnaHQ6IDM3cHg7XFxufVxcbi5xLWVkaXRvci10b29sYmFyIC5xLWJ0bi1ncm91cCB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4ucS1lZGl0b3ItdG9vbGJhciAucS1idG4tZ3JvdXAgKyAucS1idG4tZ3JvdXAge1xcbiAgbWFyZ2luLWxlZnQ6IDVweDtcXG59XFxuLnEtZWRpdG9yLXRvb2xiYXItc2VwYXJhdG9yIC5xLWJ0bi1ncm91cCArIC5xLWJ0bi1ncm91cCB7XFxuICBwYWRkaW5nLWxlZnQ6IDVweDtcXG59XFxuLnEtZWRpdG9yLXRvb2xiYXItc2VwYXJhdG9yIC5xLWJ0bi1ncm91cCArIC5xLWJ0bi1ncm91cDpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDFweDtcXG4gIGJhY2tncm91bmQ6ICNjY2M7XFxufVxcbi5xLWVkaXRvci1pbnB1dCBpbnB1dCB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuLnEtZmFiIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi56LWZhYiB7XFxuICB6LWluZGV4OiA5OTA7XFxufVxcbi5xLWZhYi1vcGVuZWQgLnEtZmFiLWFjdGlvbnMge1xcbiAgb3BhY2l0eTogMTtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDEpIHNjYWxlWSgxKSB0cmFuc2xhdGVYKDApIHRyYW5zbGF0ZVkoMCk7XFxuICBwb2ludGVyLWV2ZW50czogYWxsO1xcbn1cXG4ucS1mYWItb3BlbmVkIC5xLWZhYi1pY29uIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMTgwZGVnKTtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLWZhYi1vcGVuZWQgLnEtZmFiLWFjdGl2ZS1pY29uIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMGRlZyk7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1mYWItaWNvbixcXG4ucS1mYWItYWN0aXZlLWljb24ge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzLCB0cmFuc2Zvcm0gMC40cztcXG59XFxuLnEtZmFiLWljb24ge1xcbiAgb3BhY2l0eTogMTtcXG4gIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMGRlZyk7XFxufVxcbi5xLWZhYi1hY3RpdmUtaWNvbiB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUzZCgwLCAwLCAxLCAtMTgwZGVnKTtcXG59XFxuLnEtZmFiLWFjdGlvbnMge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW47XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnEtZmFiLWFjdGlvbnMgLnEtYnRuIHtcXG4gIG1hcmdpbjogNXB4O1xcbn1cXG4ucS1mYWItcmlnaHQge1xcbiAgdHJhbnNmb3JtOiBzY2FsZVgoMC40KSBzY2FsZVkoMC40KSB0cmFuc2xhdGVYKC0xMDAlKTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDEyMCU7XFxufVxcbi5xLWZhYi1sZWZ0IHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDAuNCkgc2NhbGVZKDAuNCkgdHJhbnNsYXRlWCgxMDAlKTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHJpZ2h0OiAxMjAlO1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcXG59XFxuLnEtZmFiLXVwIHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDAuNCkgc2NhbGVZKDAuNCkgdHJhbnNsYXRlWSgxMDAlKTtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBib3R0b206IDEyMCU7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxufVxcbi5xLWZhYi1kb3duIHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDAuNCkgc2NhbGVZKDAuNCkgdHJhbnNsYXRlWSgtMTAwJSk7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB0b3A6IDEyMCU7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxufVxcbi5xLWZpZWxkLWljb24ge1xcbiAgd2lkdGg6IDI4cHg7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBtaW4td2lkdGg6IDI4cHg7XFxuICBmb250LXNpemU6IDI4cHg7XFxuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XFxuICBjb2xvcjogIzk3OTc5NztcXG59XFxuLnEtZmllbGQtbGFiZWwge1xcbiAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgY29sb3I6ICM5Nzk3OTc7XFxufVxcbi5xLWZpZWxkLWxhYmVsLWlubmVyIHtcXG4gIG1pbi1oZWlnaHQ6IDI4cHg7XFxufVxcbi5xLWZpZWxkLWxhYmVsLWhpbnQge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XFxufVxcbi5xLWZpZWxkLWJvdHRvbSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBwYWRkaW5nLXRvcDogOHB4O1xcbiAgY29sb3I6ICM5Nzk3OTc7XFxufVxcbi5xLWZpZWxkLW5vLWlucHV0IC5xLWZpZWxkLWJvdHRvbSB7XFxuICBtYXJnaW4tdG9wOiA4cHg7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtZmllbGQtY291bnRlciB7XFxuICBjb2xvcjogIzk3OTc5NztcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbn1cXG4ucS1maWVsZC1kYXJrIC5xLWZpZWxkLWxhYmVsLFxcbi5xLWZpZWxkLWRhcmsgLnEtZmllbGQtaWNvbixcXG4ucS1maWVsZC1kYXJrIC5xLWZpZWxkLWNvdW50ZXIsXFxuLnEtZmllbGQtZGFyayAucS1maWVsZC1ib3R0b20ge1xcbiAgY29sb3I6ICNhN2E3YTc7XFxufVxcbi5xLWZpZWxkLWRhcmsgLnEtZmllbGQtbm8taW5wdXQgLnEtZmllbGQtYm90dG9tIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjOTc5Nzk3O1xcbn1cXG4ucS1maWVsZC13aXRoLWVycm9yIC5xLWZpZWxkLWljb24sXFxuLnEtZmllbGQtd2l0aC1lcnJvciAucS1maWVsZC1sYWJlbCxcXG4ucS1maWVsZC13aXRoLWVycm9yIC5xLWZpZWxkLWJvdHRvbSB7XFxuICBjb2xvcjogI2RiMjgyODtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLW5lZ2F0aXZlKTtcXG59XFxuLnEtZmllbGQtd2l0aC1lcnJvciAucS1maWVsZC1uby1pbnB1dCAucS1maWVsZC1ib3R0b20ge1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkYjI4Mjg7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSk7XFxufVxcbi5xLWZpZWxkLXdpdGgtd2FybmluZyAucS1maWVsZC1pY29uLFxcbi5xLWZpZWxkLXdpdGgtd2FybmluZyAucS1maWVsZC1sYWJlbCxcXG4ucS1maWVsZC13aXRoLXdhcm5pbmcgLnEtZmllbGQtYm90dG9tIHtcXG4gIGNvbG9yOiAjZjJjMDM3O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3Itd2FybmluZyk7XFxufVxcbi5xLWZpZWxkLXdpdGgtd2FybmluZyAucS1maWVsZC1uby1pbnB1dCAucS1maWVsZC1ib3R0b20ge1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNmMmMwMzc7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcS1jb2xvci13YXJuaW5nKTtcXG59XFxuLnEtZmllbGQtbWFyZ2luIHtcXG4gIG1hcmdpbi10b3A6IDVweDtcXG59XFxuLnEtZmllbGQtZmxvYXRpbmcgLnEtZmllbGQtbWFyZ2luIHtcXG4gIG1hcmdpbi10b3A6IDIzcHg7XFxufVxcbi5xLWZpZWxkLW5vLWlucHV0IC5xLWZpZWxkLW1hcmdpbiB7XFxuICBtYXJnaW4tdG9wOiAzcHg7XFxufVxcbi5xLWZpZWxkLWNvbnRlbnQgLnEtaWYucS1pZi1oYXMtbGFiZWw6bm90KC5xLWlmLXN0YW5kYXJkKSB7XFxuICBtYXJnaW4tdG9wOiA5cHg7XFxufVxcbi5xLWZpZWxkLWNvbnRlbnQgLnEtaWYtc3RhbmRhcmQ6bm90KC5xLWlmLWhhcy1sYWJlbCkge1xcbiAgcGFkZGluZy10b3A6IDZweDtcXG59XFxuLnEtZmllbGQtY29udGVudCAucS1vcHRpb24tZ3JvdXAge1xcbiAgcGFkZGluZy10b3A6IDA7XFxufVxcbi5xLWZpZWxkLW5vLWlucHV0IC5xLWZpZWxkLWNvbnRlbnQge1xcbiAgcGFkZGluZy10b3A6IDZweDtcXG59XFxuLnEtZmllbGQtdmVydGljYWw6bm90KC5xLWZpZWxkLW5vLWxhYmVsKSAucS1maWVsZC1tYXJnaW4ge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLnEtZmllbGQtdmVydGljYWw6bm90KC5xLWZpZWxkLW5vLWxhYmVsKSAucS1pZi1zdGFuZGFyZDpub3QoLnEtaWYtaGFzLWxhYmVsKSB7XFxuICBwYWRkaW5nLXRvcDogMDtcXG59XFxuLnEtZmllbGQtdmVydGljYWw6bm90KC5xLWZpZWxkLW5vLWxhYmVsKSAucS1pZi5xLWlmLWhhcy1sYWJlbDpub3QoLnEtaWYtc3RhbmRhcmQpIHtcXG4gIG1hcmdpbi10b3A6IDBweDtcXG59XFxuLnEtZmllbGQtdmVydGljYWwucS1maWVsZC1uby1sYWJlbCAucS1maWVsZC1sYWJlbCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHtcXG4gIC5xLWZpZWxkLXJlc3BvbnNpdmU6bm90KC5xLWZpZWxkLW5vLWxhYmVsKSAucS1maWVsZC1tYXJnaW4ge1xcbiAgICBtYXJnaW4tdG9wOiAwO1xcbiAgfVxcbiAgLnEtZmllbGQtcmVzcG9uc2l2ZTpub3QoLnEtZmllbGQtbm8tbGFiZWwpIC5xLWlmLXN0YW5kYXJkOm5vdCgucS1pZi1oYXMtbGFiZWwpIHtcXG4gICAgcGFkZGluZy10b3A6IDA7XFxuICB9XFxuICAucS1maWVsZC1yZXNwb25zaXZlOm5vdCgucS1maWVsZC1uby1sYWJlbCkgLnEtaWYucS1pZi1oYXMtbGFiZWw6bm90KC5xLWlmLXN0YW5kYXJkKSB7XFxuICAgIG1hcmdpbi10b3A6IDBweDtcXG4gIH1cXG4gIC5xLWZpZWxkLXJlc3BvbnNpdmUucS1maWVsZC1uby1sYWJlbCAucS1maWVsZC1sYWJlbCB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxuICB9XFxufVxcbi5xLWlubmVyLWxvYWRpbmcge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjYpO1xcbn1cXG4ucS1pbm5lci1sb2FkaW5nLmRhcmsge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjQpO1xcbn1cXG4ucS1pZixcXG4ucS1pZjpiZWZvcmUsXFxuLnEtaWYtbGFiZWwsXFxuLnEtaWYtYWRkb24sXFxuLnEtZmllbGQtaWNvbixcXG4ucS1maWVsZC1sYWJlbCxcXG4ucS1pZi1jb250cm9sLFxcbi5xLWZpZWxkLWJvdHRvbSB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC40NXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpLCBkaXNwbGF5IDBzIDBzO1xcbn1cXG4ucS1pZi5xLWlmLWhpZGUtdW5kZXJsaW5lOmJlZm9yZSxcXG4ucS1pZi5xLWlmLWludmVydGVkOmJlZm9yZSxcXG4ucS1pZi5xLWlmLWhpZGUtdW5kZXJsaW5lOmFmdGVyLFxcbi5xLWlmLnEtaWYtaW52ZXJ0ZWQ6YWZ0ZXIge1xcbiAgY29udGVudDogbm9uZTtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA4cHg7XFxufVxcbi5xLWlmLWludmVydGVkIC5xLWlmLWlubmVyIHtcXG4gIG1hcmdpbi10b3A6IDdweDtcXG4gIG1hcmdpbi1ib3R0b206IDdweDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQucS1pZi1oYXMtbGFiZWwgLnEtaWYtaW5uZXIge1xcbiAgbWFyZ2luLXRvcDogMjVweDtcXG59XFxuLnEtaWY6YmVmb3JlLFxcbi5xLWlmOmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvcmRlcjogMXB4IGhpZGRlbiBjdXJyZW50Q29sb3I7XFxuICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb250ZW50OiAnJztcXG59XFxuLnEtaWY6YmVmb3JlIHtcXG4gIGNvbG9yOiAjYmRiZGJkO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbGlnaHQpO1xcbn1cXG4ucS1pZjphZnRlciB7XFxuICBib3JkZXItd2lkdGg6IDA7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyIDA7XFxuICB0cmFuc2Zvcm06IHNjYWxlWCgwKTtcXG59XFxuLnEtaWY6bm90KC5xLWlmLWRpc2FibGVkKTpub3QoLnEtaWYtZXJyb3IpOm5vdCgucS1pZi13YXJuaW5nKTpob3ZlcjpiZWZvcmUsXFxuLnEtaWYucS1pZi1yZWFkb25seTpub3QoLnEtaWYtZXJyb3IpOm5vdCgucS1pZi13YXJuaW5nKTphZnRlciB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnEtaWYtZGFyay5xLWlmOm5vdCgucS1pZi1kaXNhYmxlZCk6bm90KC5xLWlmLWVycm9yKTpub3QoLnEtaWYtd2FybmluZyk6aG92ZXI6YmVmb3JlLFxcbi5xLWlmLWRhcmsucS1pZi5xLWlmLXJlYWRvbmx5Om5vdCgucS1pZi1lcnJvcik6bm90KC5xLWlmLXdhcm5pbmcpOmFmdGVyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1pZi1mb2N1c2VkOmFmdGVyIHtcXG4gIGJvcmRlci13aWR0aDogMnB4O1xcbiAgdHJhbnNmb3JtOiBzY2FsZVgoMSk7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40NXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpLCBib3JkZXItbGVmdC13aWR0aCAwcyAwLjQ1cywgYm9yZGVyLXJpZ2h0LXdpZHRoIDBzIDAuNDVzO1xcbn1cXG4ucS1pZiB7XFxuICBvdXRsaW5lOiAwO1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbn1cXG4ucS1pZiAucS1pZi1pbm5lciB7XFxuICBtaW4taGVpZ2h0OiAyNHB4O1xcbn1cXG4ucS1pZi1zdGFuZGFyZCB7XFxuICBwYWRkaW5nLXRvcDogN3B4O1xcbiAgcGFkZGluZy1ib3R0b206IDdweDtcXG59XFxuLnEtaWYtc3RhbmRhcmQucS1pZi1oYXMtbGFiZWwge1xcbiAgcGFkZGluZy10b3A6IDI1cHg7XFxufVxcbi5xLWlmLWhpZGUtdW5kZXJsaW5lIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxufVxcbi5xLWlmLWhpZGUtdW5kZXJsaW5lLnEtaWYtaGFzLWxhYmVsIHtcXG4gIHBhZGRpbmctdG9wOiAxOHB4O1xcbn1cXG4ucS1pZi1zdGFuZGFyZCAucS1pZi1sYWJlbCxcXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1sYWJlbCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGxlZnQ7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcXG59XFxuLnEtaWYtc3RhbmRhcmQgLnEtaWYtbGFiZWwucS1pZi1sYWJlbC1hYm92ZSxcXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1sYWJlbC5xLWlmLWxhYmVsLWFib3ZlIHtcXG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0xMDAlKTtcXG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1xcbn1cXG4ucS1pZi1pbnZlcnRlZCB7XFxuICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjIpLCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtbGFiZWwge1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjFweCk7XFxufVxcbi5xLWlmLWludmVydGVkIC5xLWlmLWxhYmVsLnEtaWYtbGFiZWwtYWJvdmUge1xcbiAgdG9wOiA0cHg7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMTI1JSk7XFxufVxcbi5xLWlmLWludmVydGVkIC5xLWlucHV0LXRhcmdldCB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuLnEtaWYtZm9jdXNlZDpub3QoLnEtaWYtcmVhZG9ubHkpIC5xLWlmLWxhYmVsLFxcbi5xLWlmLWZvY3VzZWQ6bm90KC5xLWlmLXJlYWRvbmx5KSAucS1pZi1hZGRvbixcXG4ucS1pZi1mb2N1c2VkOm5vdCgucS1pZi1yZWFkb25seSkgLnEtaWYtY29udHJvbCB7XFxuICBjb2xvcjogY3VycmVudENvbG9yO1xcbn1cXG4ucS1pZi13YXJuaW5nOmJlZm9yZSxcXG4ucS1pZi13YXJuaW5nOmFmdGVyLFxcbi5xLWlmLXdhcm5pbmc6bm90KC5xLWlmLWludmVydGVkKSAucS1pZi1sYWJlbCB7XFxuICBjb2xvcjogI2YyYzAzNztcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXdhcm5pbmcpO1xcbn1cXG4ucS1pZi13YXJuaW5nOmhvdmVyOmJlZm9yZSB7XFxuICBjb2xvcjogI2Y4ZGQ5MztcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXdhcm5pbmctbCk7XFxufVxcbi5xLWlmLWVycm9yOmJlZm9yZSxcXG4ucS1pZi1lcnJvcjphZnRlcixcXG4ucS1pZi1lcnJvcjpub3QoLnEtaWYtaW52ZXJ0ZWQpIC5xLWlmLWxhYmVsIHtcXG4gIGNvbG9yOiAjZGIyODI4O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbmVnYXRpdmUpO1xcbn1cXG4ucS1pZi1lcnJvcjpob3ZlcjpiZWZvcmUge1xcbiAgY29sb3I6ICNlYzhiOGI7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZS1sKTtcXG59XFxuLnEtaWYtZGlzYWJsZWQge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gIG9wYWNpdHk6IDAuNjtcXG59XFxuLnEtaWYtZGlzYWJsZWQgLnEtaWYtbGFiZWwsXFxuLnEtaWYtZGlzYWJsZWQgLnEtaWYtY29udHJvbCxcXG4ucS1pZi1kaXNhYmxlZCAucS1pbnB1dC10YXJnZXQsXFxuLnEtaWYtZGlzYWJsZWQgLnEtY2hpcCB7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG4ucS1pZi1kYXJrOm5vdCgucS1pZi1pbnZlcnRlZC1saWdodCkgLnEtaW5wdXQtdGFyZ2V0Om5vdCgucS1pbnB1dC10YXJnZXQtcGxhY2Vob2xkZXIpIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1pZi1mb2N1c2FibGUge1xcbiAgb3V0bGluZTogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtaWYtbGFiZWwsXFxuLnEtaW5wdXQtdGFyZ2V0LFxcbi5xLWlucHV0LXRhcmdldC1wbGFjZWhvbGRlciB7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG59XFxuLnEtaWYtY29udHJvbCB7XFxuICBmb250LXNpemU6IDI0cHg7XFxuICB3aWR0aDogMjRweDtcXG4gIGhlaWdodDogMjRweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtaWYtY29udHJvbCArIC5xLWlmLWNvbnRyb2wsXFxuLnEtaWYtY29udHJvbCArIC5xLWlmLWlubmVyLFxcbi5xLWlmLWlubmVyICsgLnEtaWYtY29udHJvbCB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG4ucS1pZi1jb250cm9sOmhvdmVyIHtcXG4gIG9wYWNpdHk6IDAuNztcXG59XFxuLnEtaWYtYmFzZWxpbmUge1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxuICB3aWR0aDogMDtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuLnEtaWYtbGFiZWwtaW5uZXIsXFxuLnEtaWYtbGFiZWwtc3BhY2VyLFxcbi5xLWlmLWJhc2VsaW5lIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuLnEtaWYtbGFiZWwtc3BhY2VyIHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIGhlaWdodDogMCAhaW1wb3J0YW50O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuLnEtaWYtbGFiZWwge1xcbiAgY3Vyc29yOiB0ZXh0O1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtaWYtbGFiZWwsXFxuLnEtaWYtYWRkb24sXFxuLnEtaWYtY29udHJvbCB7XFxuICBjb2xvcjogIzk3OTc5NztcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbn1cXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1sYWJlbCxcXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1hZGRvbixcXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1jb250cm9sIHtcXG4gIGNvbG9yOiAjZGRkO1xcbn1cXG4ucS1pZi1pbnZlcnRlZC1saWdodCAucS1pZi1sYWJlbCxcXG4ucS1pZi1pbnZlcnRlZC1saWdodCAucS1pZi1hZGRvbixcXG4ucS1pZi1pbnZlcnRlZC1saWdodCAucS1pZi1jb250cm9sIHtcXG4gIGNvbG9yOiAjNjU2NTY1O1xcbn1cXG4ucS1pZi1hZGRvbiB7XFxuICBvcGFjaXR5OiAwO1xcbiAgY3Vyc29yOiBpbmhlcml0O1xcbn1cXG4ucS1pZi1hZGRvbjpub3QoLnEtaWYtYWRkb24tdmlzaWJsZSkge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtaWYtYWRkb24tbGVmdCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxcHg7XFxufVxcbi5xLWlmLWFkZG9uLXJpZ2h0IHtcXG4gIHBhZGRpbmctbGVmdDogMXB4O1xcbn1cXG4ucS1pZi1hZGRvbi12aXNpYmxlIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5xLWlucHV0LXRhcmdldCxcXG4ucS1pbnB1dC1zaGFkb3cge1xcbiAgYm9yZGVyOiAwO1xcbiAgb3V0bGluZTogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgcmVzaXplOiBub25lO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWlucHV0LXRhcmdldDotd2Via2l0LWF1dG9maWxsIHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHdlYmtpdC1hdXRvZmlsbC1vbjtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDtcXG59XFxuLnEtaW5wdXQtdGFyZ2V0LnEtaW5wdXQtYXV0b2ZpbGw6bm90KDotd2Via2l0LWF1dG9maWxsKSB7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiB3ZWJraXQtYXV0b2ZpbGwtb2ZmO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xcbn1cXG4ucS1pbnB1dC10YXJnZXQ6Oi1tcy1jbGVhcixcXG4ucS1pbnB1dC10YXJnZXQ6Oi1tcy1yZXZlYWwge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbn1cXG4ucS1pbnB1dC10YXJnZXQ6aW52YWxpZCB7XFxuICBib3gtc2hhZG93OiBpbmhlcml0O1xcbn1cXG4ucS1pbnB1dC10YXJnZXQ6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICd8JztcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgd2lkdGg6IDA7XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbmlucHV0LnEtaW5wdXQtdGFyZ2V0IHtcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBvdXRsaW5lOiAwO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbn1cXG4ucS1pZiAucS1pbnB1dC10YXJnZXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICM5Nzk3OTcgIWltcG9ydGFudDtcXG59XFxuLnEtaWYgLnEtaW5wdXQtdGFyZ2V0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmIC5xLWlucHV0LXRhcmdldDo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZiAucS1pbnB1dC10YXJnZXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmLWRhcmsgLnEtaW5wdXQtdGFyZ2V0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmLWRhcmsgLnEtaW5wdXQtdGFyZ2V0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmLWRhcmsgLnEtaW5wdXQtdGFyZ2V0OjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmLWRhcmsgLnEtaW5wdXQtdGFyZ2V0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1pbnZlcnRlZDpub3QoLnEtaWYtaW52ZXJ0ZWQtbGlnaHQpIC5xLWlucHV0LXRhcmdldC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogI2RkZCAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1pbnZlcnRlZDpub3QoLnEtaWYtaW52ZXJ0ZWQtbGlnaHQpIC5xLWlucHV0LXRhcmdldDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogI2RkZCAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1pbnZlcnRlZDpub3QoLnEtaWYtaW52ZXJ0ZWQtbGlnaHQpIC5xLWlucHV0LXRhcmdldDo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogI2RkZCAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1pbnZlcnRlZDpub3QoLnEtaWYtaW52ZXJ0ZWQtbGlnaHQpIC5xLWlucHV0LXRhcmdldDotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICNkZGQgIWltcG9ydGFudDtcXG59XFxuLnEtaW5wdXQtc2hhZG93IHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGhlaWdodDogYXV0bztcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxufVxcbi5xLWp1bWJvdHJvbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nOiAycmVtIDFyZW07XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XFxufVxcbi5xLWp1bWJvdHJvbi1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc1NzU3NTtcXG59XFxuLnEtanVtYm90cm9uLWRhcmsgaHIucS1ociB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMzYpO1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5xLWp1bWJvdHJvbiB7XFxuICAgIHBhZGRpbmc6IDRyZW0gMnJlbTtcXG4gIH1cXG59XFxuLnEta25vYixcXG4ucS1rbm9iID4gZGl2IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuLnEta25vYiA+IGRpdiB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnEta25vYi1sYWJlbCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbn1cXG4ucS1rbm9iLWxhYmVsIGkge1xcbiAgZm9udC1zaXplOiAxMzAlO1xcbn1cXG4ucS1sYXlvdXQge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtaW4taGVpZ2h0OiAxMDB2aDtcXG59XFxuLnEtbGF5b3V0LWNvbnRhaW5lciAucS1sYXlvdXQge1xcbiAgbWluLWhlaWdodDogMTAwJTtcXG59XFxuLnEtbGF5b3V0LWNvbnRhaW5lciA+IGRpdiB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbn1cXG4ucS1sYXlvdXQtY29udGFpbmVyID4gZGl2ID4gZGl2IHtcXG4gIG1pbi1oZWlnaHQ6IDA7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucS1sYXlvdXQtaGVhZGVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDhweCByZ2JhKDAsMCwwLDAuMiksIDAgM3B4IDRweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAzcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1sYXlvdXQtaGVhZGVyLWhpZGRlbiB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTExMCUpO1xcbn1cXG4ucS1sYXlvdXQtZm9vdGVyIHtcXG4gIGJveC1zaGFkb3c6IDAgLTFweCA4cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0zcHggNHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTNweCAzcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1sYXlvdXQtZm9vdGVyLWhpZGRlbiB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTEwJSk7XFxufVxcbi5xLWxheW91dC1kcmF3ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIHotaW5kZXg6IDEwMDA7XFxufVxcbi5xLWxheW91dC1kcmF3ZXIub24tdG9wIHtcXG4gIHotaW5kZXg6IDMwMDA7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItZGVsaW1pdGVyIHtcXG4gIGJveC1zaGFkb3c6IDAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsMC4yKSwgMCA1cHggOHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMXB4IDE0cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1sZWZ0IHtcXG4gIGxlZnQ6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLXJpZ2h0IHtcXG4gIHJpZ2h0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xcbn1cXG4ucS1sYXlvdXQsXFxuLnEtbGF5b3V0LWhlYWRlcixcXG4ucS1sYXlvdXQtZm9vdGVyLFxcbi5xLWxheW91dC1wYWdlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnEtbGF5b3V0LWhlYWRlcixcXG4ucS1sYXlvdXQtZm9vdGVyIHtcXG4gIHotaW5kZXg6IDIwMDA7XFxufVxcbi5xLWxheW91dC1iYWNrZHJvcCB7XFxuICB6LWluZGV4OiAyOTk5ICFpbXBvcnRhbnQ7XFxuICB3aWxsLWNoYW5nZTogYmFja2dyb3VuZC1jb2xvcjtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1taW5pIHtcXG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWl0ZW0sXFxuLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWl0ZW0tc2lkZSB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1taW5pLWRyYXdlci1oaWRlLFxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1jb2xsYXBzaWJsZS1pbm5lciA+IGRpdjpsYXN0LW9mLXR5cGUsXFxuLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWxpc3QtaGVhZGVyLFxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1pdGVtLW1haW4sXFxuLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWl0ZW0tc2lkZS1yaWdodCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLW5vcm1hbCAucS1taW5pLWRyYXdlci1vbmx5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItbW9iaWxlIC5xLW1pbmktZHJhd2VyLW9ubHksXFxuLnEtbGF5b3V0LWRyYXdlci1tb2JpbGUgLnEtbWluaS1kcmF3ZXItaGlkZSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLW9wZW5lciB7XFxuICB6LWluZGV4OiAyMDAxO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDE1cHg7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG4ucS1wYWdlLXN0aWNreS1zaHJpbmsge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLXBhZ2Utc3RpY2t5LXNocmluayA+IHNwYW4ge1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxufVxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXBhZGRpbmcgLnEtbGF5b3V0IC5xLWxheW91dC1oZWFkZXIgPiAucS10b29sYmFyOm50aC1jaGlsZCgyKSxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci1wYWRkaW5nIC5xLWxheW91dCAucS1sYXlvdXQtaGVhZGVyID4gLnEtdGFiczpudGgtY2hpbGQoMikgLnEtdGFicy1oZWFkLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXBhZGRpbmcgLnEtbGF5b3V0IC5xLWxheW91dC1kcmF3ZXIudG9wLXBhZGRpbmcsXFxuYm9keS5xLWlvcy1zdGF0dXNiYXItcGFkZGluZyAubW9kYWw6bm90KC5taW5pbWl6ZWQpIC5xLWxheW91dC1oZWFkZXIgPiAucS10b29sYmFyOm50aC1jaGlsZCgxKSB7XFxuICBwYWRkaW5nLXRvcDogMjBweDtcXG4gIG1pbi1oZWlnaHQ6IDcwcHg7XFxufVxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbGF5b3V0IC5xLWxheW91dC1oZWFkZXIgPiAucS10b29sYmFyOm50aC1jaGlsZCgyKSxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtaGVhZGVyID4gLnEtdGFiczpudGgtY2hpbGQoMikgLnEtdGFicy1oZWFkLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbGF5b3V0IC5xLWxheW91dC1kcmF3ZXIudG9wLXBhZGRpbmcsXFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAubW9kYWw6bm90KC5taW5pbWl6ZWQpIC5xLWxheW91dC1oZWFkZXIgPiAucS10b29sYmFyOm50aC1jaGlsZCgxKSB7XFxuICBwYWRkaW5nLXRvcDogZW52KHNhZmUtYXJlYS1pbnNldC10b3ApO1xcbn1cXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtZm9vdGVyID4gLnEtdG9vbGJhcjpsYXN0LWNoaWxkLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbGF5b3V0IC5xLWxheW91dC1mb290ZXIgPiAucS10YWJzOmxhc3QtY2hpbGQgLnEtdGFicy1oZWFkLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbGF5b3V0IC5xLWxheW91dC1kcmF3ZXIudG9wLXBhZGRpbmcsXFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAubW9kYWw6bm90KC5taW5pbWl6ZWQpIC5xLWxheW91dC1mb290ZXIgPiAucS10b29sYmFyOmxhc3QtY2hpbGQge1xcbiAgcGFkZGluZy1ib3R0b206IGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcXG4gIG1pbi1oZWlnaHQ6IDcwcHg7XFxufVxcbi5xLWxheW91dC1hbmltYXRlIC5xLWxheW91dC10cmFuc2l0aW9uIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjEycyBlYXNlLWluICFpbXBvcnRhbnQ7XFxufVxcbi5xLWJvZHktZHJhd2VyLXRvZ2dsZSB7XFxuICBvdmVyZmxvdy14OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICAubGF5b3V0LXBhZGRpbmcge1xcbiAgICBwYWRkaW5nOiAxLjVyZW0gMC41cmVtO1xcbiAgfVxcbiAgLmxheW91dC1wYWRkaW5nLmhvcml6b250YWwge1xcbiAgICBwYWRkaW5nOiAwIDAuNXJlbTtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcXG4gIC5sYXlvdXQtcGFkZGluZyB7XFxuICAgIHBhZGRpbmc6IDEuNXJlbSAycmVtO1xcbiAgICBtYXJnaW46IGF1dG87XFxuICB9XFxuICAubGF5b3V0LXBhZGRpbmcuaG9yaXpvbnRhbCB7XFxuICAgIHBhZGRpbmc6IDAgMnJlbTtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XFxuICAubGF5b3V0LXBhZGRpbmcge1xcbiAgICBwYWRkaW5nOiAyLjVyZW0gM3JlbTtcXG4gICAgbWFyZ2luOiBhdXRvO1xcbiAgfVxcbiAgLmxheW91dC1wYWRkaW5nLmhvcml6b250YWwge1xcbiAgICBwYWRkaW5nOiAwIDNyZW07XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5sYXlvdXQtcGFkZGluZyB7XFxuICAgIHBhZGRpbmc6IDNyZW0gNHJlbTtcXG4gICAgbWFyZ2luOiBhdXRvO1xcbiAgfVxcbiAgLmxheW91dC1wYWRkaW5nLmhvcml6b250YWwge1xcbiAgICBwYWRkaW5nOiAwIDRyZW07XFxuICB9XFxufVxcbi5xLWl0ZW0tc3RhbXAge1xcbiAgZm9udC1zaXplOiAwLjhyZW07XFxuICBsaW5lLWhlaWdodDogMC44cmVtO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG1hcmdpbjogMC4zcmVtIDA7XFxufVxcbi5xLWl0ZW0tc2lkZSB7XFxuICBjb2xvcjogIzczNzM3MztcXG4gIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgICBmbGV4OiAwIDAgYXV0bztcXG4gIG1pbi13aWR0aDogMzhweDtcXG59XFxuLnEtaXRlbS1zaWRlLXJpZ2h0IHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG4ucS1pdGVtLWF2YXRhcixcXG4ucS1pdGVtLWF2YXRhciBpbWcge1xcbiAgd2lkdGg6IDM4cHg7XFxuICBoZWlnaHQ6IDM4cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcbi5xLWl0ZW0tbGV0dGVyLFxcbi5xLWl0ZW0taWNvbiB7XFxuICBmb250LXNpemU6IDI0cHg7XFxufVxcbi5xLWl0ZW0taW52ZXJ0ZWQge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kOiAjNzM3MzczO1xcbiAgaGVpZ2h0OiAzOHB4O1xcbiAgd2lkdGg6IDM4cHg7XFxufVxcbi5xLWl0ZW0taW52ZXJ0ZWQsXFxuLnEtaXRlbS1pbnZlcnRlZCAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG59XFxuLnEtaXRlbS1tYWluIHtcXG4gIC1tcy1mbGV4OiAxIDEgYXV0bztcXG4gICAgICBmbGV4OiAxIDEgYXV0bztcXG4gIG1pbi13aWR0aDogMDtcXG59XFxuLnEtaXRlbS1tYWluLWluc2V0IHtcXG4gIG1hcmdpbi1sZWZ0OiA0OHB4O1xcbn1cXG4ucS1pdGVtLWxhYmVsIHtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxufVxcbi5xLWl0ZW0tbGFiZWwgPiBzcGFuIHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbn1cXG4ucS1pdGVtLXN1YmxhYmVsIHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbiAgZm9udC1zaXplOiA5MCU7XFxuICBtYXJnaW4tdG9wOiAwLjJyZW07XFxufVxcbi5xLWl0ZW0tc3VibGFiZWwgPiBzcGFuIHtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcbi5xLWl0ZW0tc2VjdGlvbiArIC5xLWl0ZW0tc2VjdGlvbiB7XFxuICBtYXJnaW4tbGVmdDogMTBweDtcXG59XFxuLnEtaXRlbSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBmb250LXNpemU6IDFyZW07XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgcGFkZGluZzogOHB4IDE2cHg7XFxuICBtaW4taGVpZ2h0OiA0MHB4O1xcbn1cXG4ucS1pdGVtLmFjdGl2ZSxcXG4ucS1pdGVtLnJvdXRlci1saW5rLWFjdGl2ZSxcXG4ucS1pdGVtOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMTg5LDE4OSwxODksMC40KTtcXG59XFxuLnEtaXRlbTpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4ucS1pdGVtLWltYWdlIHtcXG4gIG1pbi13aWR0aDogMTE0cHg7XFxuICBtYXgtd2lkdGg6IDExNHB4O1xcbiAgbWF4LWhlaWdodDogMTE0cHg7XFxufVxcbi5xLWxpc3QtbXVsdGlsaW5lID4gLnEtaXRlbSxcXG4ucS1pdGVtLW11bHRpbGluZSB7XFxuICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XFxuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxufVxcbi5xLWxpc3QtbGluayA+IC5xLWl0ZW0sXFxuLnEtaXRlbS1saW5rIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtbGlzdC1oaWdobGlnaHQgPiAucS1pdGVtOmhvdmVyLFxcbi5xLWl0ZW0taGlnaGxpZ2h0OmhvdmVyLFxcbi5xLWxpc3QtbGluayA+IC5xLWl0ZW06aG92ZXIsXFxuLnEtaXRlbS1saW5rOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMTg5LDE4OSwxODksMC41KTtcXG59XFxuLnEtbGlzdC1zZXBhcmF0b3IgPiAucS1pdGVtLWRpdmlzaW9uICsgLnEtaXRlbS1kaXZpc2lvbixcXG4ucS1pdGVtLWRpdmlzaW9uICsgLnEtaXRlbS1zZXBhcmF0b3Ige1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlMGUwZTA7XFxufVxcbi5xLWxpc3QtaW5zZXQtc2VwYXJhdG9yID4gLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0tZGl2aXNpb246YWZ0ZXIsXFxuLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0taW5zZXQtc2VwYXJhdG9yOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBsZWZ0OiA2NHB4O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBiYWNrZ3JvdW5kOiAjZTBlMGUwO1xcbn1cXG4ucS1saXN0LWRlbnNlID4gLnEtaXRlbSxcXG4ucS1pdGVtLWRlbnNlIHtcXG4gIHBhZGRpbmc6IDNweCAxNnB4O1xcbiAgbWluLWhlaWdodDogOHB4O1xcbn1cXG4ucS1saXN0LXNwYXJzZSA+IC5xLWl0ZW0sXFxuLnEtaXRlbS1zcGFyc2Uge1xcbiAgcGFkZGluZzogMjIuNHB4IDE2cHg7XFxuICBtaW4taGVpZ2h0OiA1NnB4O1xcbn1cXG4ucS1saXN0LXN0cmlwZWQgPiAucS1pdGVtOm50aC1jaGlsZChldmVuKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE4OSwxODksMTg5LDAuNjUpO1xcbn1cXG4ucS1saXN0LXN0cmlwZWQtb2RkID4gLnEtaXRlbTpudGgtY2hpbGQob2RkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE4OSwxODksMTg5LDAuNjUpO1xcbn1cXG4ucS1saXN0IHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XFxuICBwYWRkaW5nOiA4cHggMDtcXG59XFxuLnEtaXRlbS1zZXBhcmF0b3ItY29tcG9uZW50IHtcXG4gIG1hcmdpbjogOHB4IDA7XFxuICBoZWlnaHQ6IDFweDtcXG4gIGJvcmRlcjogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7XFxufVxcbi5xLWl0ZW0tc2VwYXJhdG9yLWNvbXBvbmVudDpsYXN0LWNoaWxkIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLWl0ZW0tc2VwYXJhdG9yLWNvbXBvbmVudCArIC5xLWxpc3QtaGVhZGVyIHtcXG4gIG1hcmdpbi10b3A6IC04cHg7XFxufVxcbi5xLWl0ZW0tc2VwYXJhdG9yLWluc2V0LWNvbXBvbmVudCB7XFxuICBtYXJnaW4tbGVmdDogNjRweDtcXG59XFxuLnEtbGlzdC1oZWFkZXIge1xcbiAgY29sb3I6ICM3NTc1NzU7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XFxuICBtaW4taGVpZ2h0OiA0OHB4O1xcbiAgcGFkZGluZzogMTVweCAxNnB4O1xcbn1cXG4ucS1saXN0LWhlYWRlci1pbnNldCB7XFxuICBwYWRkaW5nLWxlZnQ6IDY0cHg7XFxufVxcbi5xLWxpc3QtZGFyayAucS1pdGVtLXNpZGUsXFxuLnEtaXRlbS1kYXJrIC5xLWl0ZW0tc2lkZSB7XFxuICBjb2xvcjogI2JiYjtcXG59XFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0taW52ZXJ0ZWQsXFxuLnEtaXRlbS1kYXJrIC5xLWl0ZW0taW52ZXJ0ZWQge1xcbiAgY29sb3I6ICMwMDA7XFxuICBiYWNrZ3JvdW5kOiAjYmJiO1xcbn1cXG4ucS1saXN0LWRhcmsgLnEtaXRlbS1sYWJlbCA+IHNwYW4sXFxuLnEtaXRlbS1kYXJrIC5xLWl0ZW0tbGFiZWwgPiBzcGFuLFxcbi5xLWxpc3QtZGFyayAucS1pdGVtLXN1YmxhYmVsLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLXN1YmxhYmVsIHtcXG4gIGNvbG9yOiAjYmRiZGJkO1xcbn1cXG4ucS1saXN0LWRhcmsgLnEtaXRlbSxcXG4ucS1pdGVtLWRhcmsgLnEtaXRlbSB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0uYWN0aXZlLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLmFjdGl2ZSxcXG4ucS1saXN0LWRhcmsgLnEtaXRlbS5yb3V0ZXItbGluay1hY3RpdmUsXFxuLnEtaXRlbS1kYXJrIC5xLWl0ZW0ucm91dGVyLWxpbmstYWN0aXZlLFxcbi5xLWxpc3QtZGFyayAucS1pdGVtOmZvY3VzLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMTE3LDExNywxMTcsMC4yKTtcXG59XFxuLnEtbGlzdC1kYXJrIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4zMik7XFxufVxcbi5xLWxpc3QtZGFyay5xLWxpc3Qtc2VwYXJhdG9yID4gLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0tZGl2aXNpb24sXFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0tZGl2aXNpb24gKyAucS1pdGVtLXNlcGFyYXRvciB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjMyKTtcXG59XFxuLnEtbGlzdC1kYXJrLnEtbGlzdC1pbnNldC1zZXBhcmF0b3IgPiAucS1pdGVtLWRpdmlzaW9uICsgLnEtaXRlbS1kaXZpc2lvbjphZnRlcixcXG4ucS1saXN0LWRhcmsgLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0taW5zZXQtc2VwYXJhdG9yOmFmdGVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4zMik7XFxufVxcbi5xLWxpc3QtZGFyay5xLWxpc3Qtc3RyaXBlZCA+IC5xLWl0ZW06bnRoLWNoaWxkKGV2ZW4pIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTE3LDExNywxMTcsMC40NSk7XFxufVxcbi5xLWxpc3QtZGFyay5xLWxpc3Qtc3RyaXBlZC1vZGQgPiAucS1pdGVtOm50aC1jaGlsZChvZGQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTE3LDExNywxMTcsMC40NSk7XFxufVxcbi5xLWxpc3QtZGFyayAucS1pdGVtLXNlcGFyYXRvci1jb21wb25lbnQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjMyKTtcXG59XFxuLnEtbGlzdC1kYXJrIC5xLWxpc3QtaGVhZGVyIHtcXG4gIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNjQpO1xcbn1cXG4ucS1saXN0LWRhcmsucS1saXN0LWhpZ2hsaWdodCA+IC5xLWl0ZW06aG92ZXIsXFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0taGlnaGxpZ2h0OmhvdmVyLFxcbi5xLWxpc3QtZGFyay5xLWxpc3QtbGluayA+IC5xLWl0ZW06aG92ZXIsXFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0tbGluazpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDExNywxMTcsMTE3LDAuMyk7XFxufVxcbmJvZHkud2l0aC1sb2FkaW5nIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLWxvYWRpbmcge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjQpO1xcbn1cXG4ucS1sb2FkaW5nID4gZGl2IHtcXG4gIG1hcmdpbjogNDBweCAyMHB4IDA7XFxuICBtYXgtd2lkdGg6IDQ1MHB4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdGV4dC1zaGFkb3c6IDAgMCA3cHggIzAwMDtcXG59XFxuLm1vZGFsLWJhY2tkcm9wIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40KTtcXG59XFxuLm1vZGFsLm1heGltaXplZCAubW9kYWwtYmFja2Ryb3Age1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLm1vZGFsLWNvbnRlbnQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIHdpbGwtY2hhbmdlOiBzY3JvbGwtcG9zaXRpb247XFxuICBtaW4td2lkdGg6IDI4MHB4O1xcbiAgbWF4LWhlaWdodDogODB2aDtcXG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgb3V0bGluZTogMDtcXG59XFxuLm1vZGFsIHtcXG4gIHotaW5kZXg6IDUwMDA7XFxufVxcbi5tb2RhbC5taW5pbWl6ZWQgLm1vZGFsLWNvbnRlbnQge1xcbiAgbWF4LXdpZHRoOiA4MHZ3O1xcbiAgbWF4LWhlaWdodDogODB2aDtcXG59XFxuLm1vZGFsLm1heGltaXplZCAubW9kYWwtY29udGVudCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIG1heC1oZWlnaHQ6IDEwMCU7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG4ubW9kYWwubWF4aW1pemVkIC5tb2RhbC1jb250ZW50IC5xLWxheW91dC1jb250YWluZXIge1xcbiAgbWluLWhlaWdodDogMTAwdmggIWltcG9ydGFudDtcXG59XFxuLnEtbW9kYWwtZW50ZXIsXFxuLnEtbW9kYWwtbGVhdmUtYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLm1vZGFsOm5vdCgubWF4aW1pemVkKS5xLW1vZGFsLWVudGVyIC5tb2RhbC1jb250ZW50IHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xcbiAgfVxcbiAgLm1vZGFsOm5vdCgubWF4aW1pemVkKS5xLW1vZGFsLWxlYXZlLWFjdGl2ZSAubW9kYWwtY29udGVudCB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMC44KTtcXG4gIH1cXG4gIC5tb2RhbC5tYXhpbWl6ZWQucS1tb2RhbC1lbnRlciAubW9kYWwtY29udGVudCxcXG4gIC5tb2RhbC5tYXhpbWl6ZWQucS1tb2RhbC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzAlKTtcXG4gIH1cXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICAucS1yZXNwb25zaXZlLW1vZGFsIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIH1cXG4gIC5tb2RhbDpub3QoLm1pbmltaXplZCkgLm1vZGFsLWNvbnRlbnQge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XFxuICAgIGJvcmRlci1yYWRpdXM6IDA7XFxuICB9XFxuICAubW9kYWw6bm90KC5taW5pbWl6ZWQpIC5tb2RhbC1jb250ZW50IC5xLWxheW91dC1jb250YWluZXIge1xcbiAgICBtaW4taGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1vZGFsOm5vdCgubWluaW1pemVkKS5xLW1vZGFsLWVudGVyIC5tb2RhbC1jb250ZW50LFxcbiAgLm1vZGFsOm5vdCgubWluaW1pemVkKS5xLW1vZGFsLWxlYXZlLWFjdGl2ZSAubW9kYWwtY29udGVudCB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgzMCUpO1xcbiAgfVxcbiAgLm1vZGFsLm1pbmltaXplZC5xLW1vZGFsLWVudGVyIC5tb2RhbC1jb250ZW50IHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xcbiAgfVxcbiAgLm1vZGFsLm1pbmltaXplZC5xLW1vZGFsLWxlYXZlLWFjdGl2ZSAubW9kYWwtY29udGVudCB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMC44KTtcXG4gIH1cXG59XFxuLnEtbWF4aW1pemVkLW1vZGFsIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5tb2RhbCxcXG4ubW9kYWwtY29udGVudCB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcXG59XFxuLm1vZGFsLWhlYWRlciB7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgcGFkZGluZzogMjRweCAyNHB4IDEwcHggMjRweDtcXG4gIGZvbnQtc2l6ZTogMS42cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG59XFxuLm1vZGFsLWJvZHkge1xcbiAgcGFkZGluZzogMTBweCAyNHB4O1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41KTtcXG59XFxuLnNtYWxsLW1vZGFsLXNjcm9sbCxcXG4ubW9kYWwtc2Nyb2xsLFxcbi5iaWctbW9kYWwtc2Nyb2xsIHtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgd2lsbC1jaGFuZ2U6IHNjcm9sbC1wb3NpdGlvbjtcXG59XFxuLnNtYWxsLW1vZGFsLXNjcm9sbCB7XFxuICBtYXgtaGVpZ2h0OiAxNTZweDtcXG59XFxuLm1vZGFsLXNjcm9sbCB7XFxuICBtYXgtaGVpZ2h0OiAyNDBweDtcXG59XFxuLmJpZy1tb2RhbC1zY3JvbGwge1xcbiAgbWF4LWhlaWdodDogNDgwcHg7XFxufVxcbi5tb2RhbC1idXR0b25zIHtcXG4gIHBhZGRpbmc6IDIycHggOHB4IDhweDtcXG4gIC1tcy1mbGV4LXBhY2s6IGVuZDtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgY29sb3I6ICMwMjdiZTM7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1wcmltYXJ5KTtcXG59XFxuLm1vZGFsLWJ1dHRvbnMucm93IC5xLWJ0biArIC5xLWJ0biB7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG4ubW9kYWwtYnV0dG9ucy5jb2x1bW4ge1xcbiAgLW1zLWZsZXgtYWxpZ246IGVuZDtcXG4gICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcbi5tb2RhbC1idXR0b25zLmNvbHVtbiAucS1idG4gKyAucS1idG4ge1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbn1cXG4ucS1tb2RhbC1ib3R0b20tZW50ZXIsXFxuLnEtbW9kYWwtYm90dG9tLWxlYXZlLWFjdGl2ZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1tb2RhbC1ib3R0b20tZW50ZXIgLm1vZGFsLWNvbnRlbnQsXFxuLnEtbW9kYWwtYm90dG9tLWxlYXZlLWFjdGl2ZSAubW9kYWwtY29udGVudCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzAlKTtcXG59XFxuLnEtbW9kYWwtdG9wLWVudGVyLFxcbi5xLW1vZGFsLXRvcC1sZWF2ZS1hY3RpdmUge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtbW9kYWwtdG9wLWVudGVyIC5tb2RhbC1jb250ZW50LFxcbi5xLW1vZGFsLXRvcC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zMCUpO1xcbn1cXG4ucS1tb2RhbC1yaWdodC1lbnRlcixcXG4ucS1tb2RhbC1yaWdodC1sZWF2ZS1hY3RpdmUge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtbW9kYWwtcmlnaHQtZW50ZXIgLm1vZGFsLWNvbnRlbnQsXFxuLnEtbW9kYWwtcmlnaHQtbGVhdmUtYWN0aXZlIC5tb2RhbC1jb250ZW50IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgzMCUpO1xcbn1cXG4ucS1tb2RhbC1sZWZ0LWVudGVyLFxcbi5xLW1vZGFsLWxlZnQtbGVhdmUtYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLW1vZGFsLWxlZnQtZW50ZXIgLm1vZGFsLWNvbnRlbnQsXFxuLnEtbW9kYWwtbGVmdC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zMCUpO1xcbn1cXG4ucS1ub3RpZmljYXRpb25zID4gZGl2IHtcXG4gIHotaW5kZXg6IDk1MDA7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi1saXN0IHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnEtbm90aWZpY2F0aW9uLWxpc3QtY2VudGVyIHtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG59XFxuLnEtbm90aWZpY2F0aW9uLWxpc3QtdG9wIHtcXG4gIHRvcDogMDtcXG59XFxuLnEtbm90aWZpY2F0aW9uLWxpc3QtYm90dG9tIHtcXG4gIGJvdHRvbTogMDtcXG59XFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAucS1ub3RpZmljYXRpb24tbGlzdC1jZW50ZXIsXFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAucS1ub3RpZmljYXRpb24tbGlzdC10b3Age1xcbiAgdG9wOiBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCk7XFxufVxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbm90aWZpY2F0aW9uLWxpc3QtY2VudGVyLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbm90aWZpY2F0aW9uLWxpc3QtYm90dG9tIHtcXG4gIGJvdHRvbTogZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO1xcbn1cXG4ucS1ub3RpZmljYXRpb24ge1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbjogMTBweCAxMHB4IDA7XFxuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAxcztcXG4gIHotaW5kZXg6IDk1MDA7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi10b3AtbGVmdC1lbnRlcixcXG4ucS1ub3RpZmljYXRpb24tdG9wLWxlZnQtbGVhdmUtdG8sXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1lbnRlcixcXG4ucS1ub3RpZmljYXRpb24tdG9wLWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi10b3AtcmlnaHQtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1yaWdodC1sZWF2ZS10byB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MHB4KTtcXG4gIHotaW5kZXg6IDk0OTk7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi1sZWZ0LWVudGVyLFxcbi5xLW5vdGlmaWNhdGlvbi1sZWZ0LWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi1jZW50ZXItZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLWNlbnRlci1sZWF2ZS10byxcXG4ucS1ub3RpZmljYXRpb24tcmlnaHQtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLXJpZ2h0LWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tbGVmdC1lbnRlcixcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlZnQtbGVhdmUtdG8sXFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1lbnRlcixcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tcmlnaHQtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1yaWdodC1sZWF2ZS10byB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwcHgpO1xcbiAgei1pbmRleDogOTQ5OTtcXG59XFxuLnEtbm90aWZpY2F0aW9uLXRvcC1sZWZ0LWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tdG9wLWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tdG9wLXJpZ2h0LWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tbGVmdC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLWNlbnRlci1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLXJpZ2h0LWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlZnQtbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tcmlnaHQtbGVhdmUtYWN0aXZlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDk0OTk7XFxuICBtYXJnaW4tbGVmdDogMDtcXG4gIG1hcmdpbi1yaWdodDogMDtcXG59XFxuLnEtbm90aWZpY2F0aW9uLXRvcC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLWNlbnRlci1sZWF2ZS1hY3RpdmUge1xcbiAgdG9wOiAwO1xcbn1cXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlZnQtbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tcmlnaHQtbGVhdmUtYWN0aXZlIHtcXG4gIGJvdHRvbTogMDtcXG59XFxuLnEtb3B0aW9uLWlubmVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGxpbmUtaGVpZ2h0OiAwO1xcbn1cXG4ucS1vcHRpb24taW5uZXIgKyAucS1vcHRpb24tbGFiZWwge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnEtb3B0aW9uIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5xLW9wdGlvbiBpbnB1dCB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5xLW9wdGlvbi5yZXZlcnNlIC5xLW9wdGlvbi1pbm5lciArIC5xLW9wdGlvbi1sYWJlbCB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG4ucS1vcHRpb24tZ3JvdXAtaW5saW5lLW9wdHMgPiBkaXYge1xcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxufVxcbi5xLW9wdGlvbi1ncm91cCB7XFxuICBtYXJnaW46IC01cHg7XFxuICBwYWRkaW5nOiA1cHggMDtcXG59XFxuLnEtcGFnaW5hdGlvbiBpbnB1dCB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5xLXBhZ2luYXRpb24gLnEtYnRuIHtcXG4gIHBhZGRpbmc6IDAgNXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5xLXBhZ2luYXRpb24gLnEtYnRuLmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjNzc3O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItZmFkZWQpO1xcbn1cXG4ucS1wYXJhbGxheCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbn1cXG4ucS1wYXJhbGxheC1tZWRpYSA+IGltZyxcXG4ucS1wYXJhbGxheC1tZWRpYSA+IHZpZGVvIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwJTtcXG4gIGJvdHRvbTogMDtcXG4gIG1pbi13aWR0aDogMTAwJTtcXG4gIG1pbi1oZWlnaHQ6IDEwMCU7XFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xcbn1cXG4ucS1wYXJhbGxheC10ZXh0IHtcXG4gIHRleHQtc2hhZG93OiAwIDAgNXB4ICNmZmY7XFxufVxcbi5xLXBvcG92ZXIge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgei1pbmRleDogODAwMDtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICBtYXgtd2lkdGg6IDEwMHZ3O1xcbiAgb3V0bGluZTogMDtcXG59XFxuLnEtcG9wb3ZlciA+IC5xLWxpc3Q6b25seS1jaGlsZCB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcbmJvZHkgZGl2IC5xLXBvcG92ZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtcHJvZ3Jlc3Mge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiA1cHg7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtcHJvZ3Jlc3MtbW9kZWwuYW5pbWF0ZSB7XFxuICBhbmltYXRpb246IHEtcHJvZ3Jlc3Mtc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsOm5vdCguaW5kZXRlcm1pbmF0ZSkge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBsaW5lYXI7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsLmluZGV0ZXJtaW5hdGU6YmVmb3JlLFxcbi5xLXByb2dyZXNzLW1vZGVsLmluZGV0ZXJtaW5hdGU6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHdpbGwtY2hhbmdlOiBsZWZ0LCByaWdodDtcXG59XFxuLnEtcHJvZ3Jlc3MtbW9kZWwuaW5kZXRlcm1pbmF0ZTpiZWZvcmUge1xcbiAgYW5pbWF0aW9uOiBxLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUgMi4xcyBjdWJpYy1iZXppZXIoMC42NSwgMC44MTUsIDAuNzM1LCAwLjM5NSkgaW5maW5pdGU7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsLmluZGV0ZXJtaW5hdGU6YWZ0ZXIge1xcbiAgYW5pbWF0aW9uOiBxLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtc2hvcnQgMi4xcyBjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQsIDAuNDQsIDEpIGluZmluaXRlO1xcbiAgYW5pbWF0aW9uLWRlbGF5OiAxLjE1cztcXG59XFxuLnEtcHJvZ3Jlc3MtbW9kZWwuc3RyaXBlLFxcbi5xLXByb2dyZXNzLW1vZGVsLnN0cmlwZTpiZWZvcmUsXFxuLnEtcHJvZ3Jlc3MtbW9kZWwuc3RyaXBlOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDQwcHggNDBweCAhaW1wb3J0YW50O1xcbn1cXG4ucS1wcm9ncmVzcy10cmFjayB7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBsaW5lYXI7XFxufVxcbi5xLXByb2dyZXNzLWJ1ZmZlciB7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG4gIGhlaWdodDogNHB4O1xcbiAgcmlnaHQ6IDA7XFxuICB0cmFuc2l0aW9uOiB3aWR0aCAwLjNzIGxpbmVhcjtcXG4gIC13ZWJraXQtbWFzazogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lqOCtDanh6ZG1jZ2QybGtkR2c5SWpFeUlpQm9aV2xuYUhROUlqUWlJSFpwWlhkUWIzSjBQU0l3SURBZ01USWdOQ0lnZG1WeWMybHZiajBpTVM0eElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaVBnb2dJRHhsYkd4cGNITmxJR040UFNJeUlpQmplVDBpTWlJZ2NuZzlJaklpSUhKNVBTSXlJajRLSUNBZ0lEeGhibWx0WVhSbElHRjBkSEpwWW5WMFpVNWhiV1U5SW1ONElpQm1jbTl0UFNJeUlpQjBiejBpTFRFd0lpQmtkWEk5SWpBdU5uTWlJSEpsY0dWaGRFTnZkVzUwUFNKcGJtUmxabWx1YVhSbElpQXZQZ29nSUR3dlpXeHNhWEJ6WlQ0S0lDQThaV3hzYVhCelpTQmplRDBpTVRRaUlHTjVQU0l5SWlCeWVEMGlNaUlnY25rOUlqSWlJR05zWVhOelBTSnNiMkZrWlhJaVBnb2dJQ0FnUEdGdWFXMWhkR1VnWVhSMGNtbGlkWFJsVG1GdFpUMGlZM2dpSUdaeWIyMDlJakUwSWlCMGJ6MGlNaUlnWkhWeVBTSXdMalp6SWlCeVpYQmxZWFJEYjNWdWREMGlhVzVrWldacGJtbDBaU0lnTHo0S0lDQThMMlZzYkdsd2MyVStDand2YzNablBnbz1cXFwiKTtcXG4gICAgICAgICAgbWFzazogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lqOCtDanh6ZG1jZ2QybGtkR2c5SWpFeUlpQm9aV2xuYUhROUlqUWlJSFpwWlhkUWIzSjBQU0l3SURBZ01USWdOQ0lnZG1WeWMybHZiajBpTVM0eElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaVBnb2dJRHhsYkd4cGNITmxJR040UFNJeUlpQmplVDBpTWlJZ2NuZzlJaklpSUhKNVBTSXlJajRLSUNBZ0lEeGhibWx0WVhSbElHRjBkSEpwWW5WMFpVNWhiV1U5SW1ONElpQm1jbTl0UFNJeUlpQjBiejBpTFRFd0lpQmtkWEk5SWpBdU5uTWlJSEpsY0dWaGRFTnZkVzUwUFNKcGJtUmxabWx1YVhSbElpQXZQZ29nSUR3dlpXeHNhWEJ6WlQ0S0lDQThaV3hzYVhCelpTQmplRDBpTVRRaUlHTjVQU0l5SWlCeWVEMGlNaUlnY25rOUlqSWlJR05zWVhOelBTSnNiMkZrWlhJaVBnb2dJQ0FnUEdGdWFXMWhkR1VnWVhSMGNtbGlkWFJsVG1GdFpUMGlZM2dpSUdaeWIyMDlJakUwSWlCMGJ6MGlNaUlnWkhWeVBTSXdMalp6SWlCeVpYQmxZWFJEYjNWdWREMGlhVzVrWldacGJtbDBaU0lnTHo0S0lDQThMMlZzYkdsd2MyVStDand2YzNablBnbz1cXFwiKTtcXG59XFxuLnEtcHJvZ3Jlc3MtdHJhY2ssXFxuLnEtcHJvZ3Jlc3MtYnVmZmVyIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG4gIG9wYWNpdHk6IDAuMjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLnB1bGwtdG8tcmVmcmVzaCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5wdWxsLXRvLXJlZnJlc2gtbWVzc2FnZSB7XFxuICBoZWlnaHQ6IDY1cHg7XFxuICBmb250LXNpemU6IDFyZW07XFxufVxcbi5wdWxsLXRvLXJlZnJlc2gtbWVzc2FnZSAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXG4gIG1hcmdpbi1yaWdodDogMTVweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzO1xcbn1cXG4ucS1yYWRpby11bmNoZWNrZWQsXFxuLnEtcmFkaW8tY2hlY2tlZCxcXG4ucS1yYWRpbyAucS1vcHRpb24taW5uZXIge1xcbiAgaGVpZ2h0OiAyMXB4O1xcbiAgd2lkdGg6IDIxcHg7XFxuICBtaW4td2lkdGg6IDIxcHg7XFxuICBmb250LXNpemU6IDIxcHg7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40NXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtcmFkaW8tdW5jaGVja2VkIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5xLXJhZGlvLWNoZWNrZWQge1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJSAwO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXG59XFxuLnEtcmFkaW8gLnEtb3B0aW9uLWlubmVyLmFjdGl2ZSAucS1yYWRpby11bmNoZWNrZWQge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtcmFkaW8gLnEtb3B0aW9uLWlubmVyLmFjdGl2ZSAucS1yYWRpby1jaGVja2VkIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxufVxcbi5xLXJhdGluZyB7XFxuICBjb2xvcjogI2ZmZWIzYjtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5xLXJhdGluZyBzcGFuIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgZGlzcGxheTogaW5oZXJpdDtcXG59XFxuLnEtcmF0aW5nIGkge1xcbiAgY29sb3I6IGN1cnJlbnRDb2xvcjtcXG4gIHRleHQtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjEyKSwgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yNCk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBvcGFjaXR5OiAwLjQ7XFxuICBwb2ludGVyLWV2ZW50czogYWxsO1xcbn1cXG4ucS1yYXRpbmcgaS5ob3ZlcmVkIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMS4zKTtcXG59XFxuLnEtcmF0aW5nIGkuZXhzZWxlY3RlZCB7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcbi5xLXJhdGluZyBpLmFjdGl2ZSB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1yYXRpbmcgaSArIGkge1xcbiAgbWFyZ2luLWxlZnQ6IDAuM3JlbTtcXG59XFxuLnEtcmF0aW5nLmVkaXRhYmxlIGkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucS1yYXRpbmc6bm90KC5lZGl0YWJsZSkgc3BhbixcXG4ucS1yYXRpbmcgaSB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4ucS1zY3JvbGxhcmVhLXRodW1iIHtcXG4gIGJhY2tncm91bmQ6ICMwMDA7XFxuICB3aWR0aDogMTBweDtcXG4gIHJpZ2h0OiAwO1xcbiAgb3BhY2l0eTogMC4yO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xcbn1cXG4ucS1zY3JvbGxhcmVhLXRodW1iLmludmlzaWJsZS10aHVtYiB7XFxuICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XFxufVxcbi5xLXNjcm9sbGFyZWEtdGh1bWI6aG92ZXIge1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG4ucS1zY3JvbGxhcmVhLXRodW1iOmFjdGl2ZSB7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLXRvb2xiYXIgLnEtc2VhcmNoIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4yNSk7XFxufVxcbi5xLXNsaWRlci10cmFjayxcXG4ucS1zbGlkZXItbWFyayB7XFxuICBvcGFjaXR5OiAwLjQ7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXNsaWRlci10cmFjayB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICBoZWlnaHQ6IDJweDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ucS1zbGlkZXItdHJhY2s6bm90KC5kcmFnZ2luZykge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcXG59XFxuLnEtc2xpZGVyLXRyYWNrLmFjdGl2ZS10cmFjayB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1zbGlkZXItdHJhY2sudHJhY2stZHJhZ2dhYmxlLmRyYWdnaW5nIHtcXG4gIGhlaWdodDogNHB4O1xcbiAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuM3MgZWFzZTtcXG59XFxuLnEtc2xpZGVyLXRyYWNrLmhhbmRsZS1hdC1taW5pbXVtIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbn1cXG4ucS1zbGlkZXItbWFyayB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGhlaWdodDogMTBweDtcXG4gIHdpZHRoOiAycHg7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKTtcXG59XFxuLnEtc2xpZGVyLWhhbmRsZS1jb250YWluZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbWFyZ2luLWxlZnQ6IDZweDtcXG4gIG1hcmdpbi1yaWdodDogNnB4O1xcbn1cXG4ucS1zbGlkZXItbGFiZWwge1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogNnB4O1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKDApIHNjYWxlKDApO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XFxuICBwYWRkaW5nOiAycHggNHB4O1xcbn1cXG4ucS1zbGlkZXItbGFiZWwubGFiZWwtYWx3YXlzIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtMTM5JSkgc2NhbGUoMSk7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC01MCUsIC01MCUsIDApO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcXG4gIHdpZHRoOiAxMnB4O1xcbiAgaGVpZ2h0OiAxMnB4O1xcbiAgb3V0bGluZTogMDtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc2xpZGVyLWhhbmRsZSAucS1jaGlwIHtcXG4gIG1heC13aWR0aDogdW5zZXQ7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUuZHJhZ2dpbmcge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtNTAlLCAtNTAlLCAwKSBzY2FsZSgxLjMpO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2UsIHRyYW5zZm9ybSAwLjNzIGVhc2U7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUuZHJhZ2dpbmcgLnEtc2xpZGVyLWxhYmVsIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtMTM5JSkgc2NhbGUoMSk7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUuaGFuZGxlLWF0LW1pbmltdW0ge1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG59XFxuLnEtc2xpZGVyLWhhbmRsZS5oYW5kbGUtYXQtbWluaW11bTphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc2xpZGVyLXJpbmcge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtNTAlO1xcbiAgbGVmdDogLTUwJTtcXG4gIHdpZHRoOiAyMDAlO1xcbiAgaGVpZ2h0OiAyMDAlO1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1zbGlkZXI6bm90KC5kaXNhYmxlZCk6bm90KC5yZWFkb25seSkgLnEtc2xpZGVyLWhhbmRsZS5kcmFnZ2luZyAucS1zbGlkZXItcmluZyxcXG4ucS1zbGlkZXI6bm90KC5kaXNhYmxlZCk6bm90KC5yZWFkb25seSkgLnEtc2xpZGVyLWhhbmRsZTpmb2N1cyAucS1zbGlkZXItcmluZyxcXG5ib2R5LmRlc2t0b3AgLnEtc2xpZGVyOm5vdCguZGlzYWJsZWQpOm5vdCgucmVhZG9ubHkpOmhvdmVyIC5xLXNsaWRlci1yaW5nIHtcXG4gIG9wYWNpdHk6IDAuNDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxufVxcbi5xLXNsaWRlci5kaXNhYmxlZCAucS1zbGlkZXItaGFuZGxlIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICNmZmY7XFxufVxcbi5xLXNsaWRlci5kaXNhYmxlZCAucS1zbGlkZXItaGFuZGxlLmhhbmRsZS1hdC1taW5pbXVtIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc2xpZGVyIHtcXG4gIGhlaWdodDogMjhweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgY29sb3I6ICMwMjdiZTM7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1wcmltYXJ5KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtc2xpZGVyLmxhYmVsLWFsd2F5cyxcXG4ucS1zbGlkZXIud2l0aC1wYWRkaW5nIHtcXG4gIHBhZGRpbmc6IDM2cHggMCA4cHg7XFxuICBoZWlnaHQ6IDY0cHg7XFxufVxcbi5xLXNsaWRlci5oYXMtZXJyb3Ige1xcbiAgY29sb3I6ICNkYjI4Mjg7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSk7XFxufVxcbi5xLXNsaWRlci5oYXMtd2FybmluZyB7XFxuICBjb2xvcjogI2YyYzAzNztcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXdhcm5pbmcpO1xcbn1cXG4ucS1zcGlubmVyIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5xLXNwaW5uZXItbWF0IHtcXG4gIGFuaW1hdGlvbjogcS1zcGluIDJzIGxpbmVhciBpbmZpbml0ZSAvKiBydGw6aWdub3JlICovO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlciAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1zcGlubmVyLW1hdCAucGF0aCB7XFxuICBzdHJva2UtZGFzaGFycmF5OiAxLCAyMDA7XFxuICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gIHN0cm9rZS1saW5lY2FwOiByb3VuZDtcXG4gIGFuaW1hdGlvbjogcS1tYXQtZGFzaCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLXN0ZXBwZXIge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5xLXN0ZXBwZXItdGl0bGUge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG4ucS1zdGVwcGVyLXN1YnRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIG9wYWNpdHk6IDAuNztcXG59XFxuLnEtc3RlcHBlci1kb3Qge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICB3aWR0aDogMjRweDtcXG4gIGhlaWdodDogMjRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc3RlcHBlci1kb3Qgc3BhbiB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtc3RlcHBlci10YWIge1xcbiAgcGFkZGluZzogMjRweDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIHRyYW5zaXRpb246IGNvbG9yIDAuMjhzLCBiYWNrZ3JvdW5kIDAuMjhzO1xcbn1cXG4ucS1zdGVwcGVyLXRhYi5zdGVwLXdhaXRpbmcge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtd2FpdGluZyAucS1zdGVwcGVyLWRvdCB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjQyKTtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1uYXZpZ2F0aW9uIHtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtY29sb3Ige1xcbiAgY29sb3I6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1hY3RpdmUgLnEtc3RlcHBlci10aXRsZSB7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1kaXNhYmxlZCB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjQyKTtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1lcnJvciB7XFxuICBjb2xvcjogI2RiMjgyODtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLW5lZ2F0aXZlKTtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1lcnJvciAucS1zdGVwcGVyLWRvdCB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1lcnJvciAucS1zdGVwcGVyLWRvdCBzcGFuIHtcXG4gIGNvbG9yOiAjZGIyODI4O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbmVnYXRpdmUpO1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlciB7XFxuICBtaW4taGVpZ2h0OiA3MnB4O1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlcjpub3QoLmFsdGVybmF0aXZlLWxhYmVscykgLnEtc3RlcHBlci10YWIge1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlcjpub3QoLmFsdGVybmF0aXZlLWxhYmVscykgLnEtc3RlcHBlci1kb3Q6YWZ0ZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXIuYWx0ZXJuYXRpdmUtbGFiZWxzIHtcXG4gIG1pbi1oZWlnaHQ6IDEwNHB4O1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlci5hbHRlcm5hdGl2ZS1sYWJlbHMgLnEtc3RlcHBlci10YWIge1xcbiAgcGFkZGluZzogMjRweCAzMnB4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlci5hbHRlcm5hdGl2ZS1sYWJlbHMgLnEtc3RlcHBlci1kb3Qge1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlci5hbHRlcm5hdGl2ZS1sYWJlbHMgLnEtc3RlcHBlci1sYWJlbCB7XFxuICBtYXJnaW4tdG9wOiA4cHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5xLXN0ZXBwZXItaGVhZGVyLmFsdGVybmF0aXZlLWxhYmVscyAucS1zdGVwcGVyLWxhYmVsOmJlZm9yZSxcXG4ucS1zdGVwcGVyLWhlYWRlci5hbHRlcm5hdGl2ZS1sYWJlbHMgLnEtc3RlcHBlci1sYWJlbDphZnRlciB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1zdGVwcGVyLXN0ZXAtY29udGVudCB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci10YWIge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1maXJzdCAucS1zdGVwcGVyLWRvdDpiZWZvcmUsXFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1sYXN0IC5xLXN0ZXBwZXItbGFiZWw6YWZ0ZXIsXFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1sYXN0IC5xLXN0ZXBwZXItZG90OmFmdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItbGluZTpiZWZvcmUsXFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1saW5lOmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgaGVpZ2h0OiAxcHg7XFxuICB3aWR0aDogMTAwdnc7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLWxhYmVsOmFmdGVyLFxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItZG90OmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgbGVmdDogMTAwJTtcXG4gIG1hcmdpbi1sZWZ0OiA4cHg7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItZG90OmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIHJpZ2h0OiAxMDAlO1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItbmF2IHtcXG4gIG1hcmdpbjogMCAxNnB4IDhweDtcXG59XFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1zdGVwIC5xLXN0ZXBwZXItbmF2IHtcXG4gIG1hcmdpbjogMTZweCAwIDA7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItc3RlcCAucS1zdGVwcGVyLW5hdiA+IGRpdi5jb2wge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci1zdGVwLWNvbnRlbnQgPiAucS1zdGVwcGVyLXN0ZXAtaW5uZXIge1xcbiAgcGFkZGluZzogMjRweDtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCB7XFxuICBwYWRkaW5nOiA4cHggMCAxOHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1uYXYge1xcbiAgbWFyZ2luLXRvcDogMTZweDtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItbmF2ID4gZGl2LmNvbCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXN0ZXAtY29udGVudCA+IC5xLXN0ZXBwZXItc3RlcC1pbm5lciB7XFxuICBwYWRkaW5nOiAwIDI0cHggMjRweCA0OHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIge1xcbiAgcGFkZGluZzogMTJweCAxNnB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIgLnEtc3RlcHBlci1kb3Q6YmVmb3JlLFxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYiAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwJTtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItc3RlcCA+IC5xLXN0ZXBwZXItdGFiIC5xLXN0ZXBwZXItZG90OmJlZm9yZSB7XFxuICBib3R0b206IDEwMCU7XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYiAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICB0b3A6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiA4cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYiAucS1zdGVwcGVyLWxhYmVsIHtcXG4gIHBhZGRpbmctdG9wOiA0cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYiAucS1zdGVwcGVyLWxhYmVsIC5xLXN0ZXBwZXItdGl0bGUge1xcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYi5xLXN0ZXBwZXItZmlyc3QgLnEtc3RlcHBlci1kb3Q6YmVmb3JlLFxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYi5xLXN0ZXBwZXItbGFzdCAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtc3RlcHBlci10YWIuc3RlcC1uYXZpZ2F0aW9uOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLnEtc3RlcHBlci1ob3Jpem9udGFsLnEtc3RlcHBlci1jb250cmFjdGFibGUgPiAucS1zdGVwcGVyLWhlYWRlciB7XFxuICAgIG1pbi1oZWlnaHQ6IDcycHg7XFxuICB9XFxuICAucS1zdGVwcGVyLWhvcml6b250YWwucS1zdGVwcGVyLWNvbnRyYWN0YWJsZSA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItdGFiIHtcXG4gICAgcGFkZGluZzogMjRweCAwO1xcbiAgfVxcbiAgLnEtc3RlcHBlci1ob3Jpem9udGFsLnEtc3RlcHBlci1jb250cmFjdGFibGUgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLXRhYjpub3QoOmxhc3QtY2hpbGQpIC5xLXN0ZXBwZXItZG90OmFmdGVyIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5xLXN0ZXBwZXItaG9yaXpvbnRhbC5xLXN0ZXBwZXItY29udHJhY3RhYmxlID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1kb3Qge1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuICAucS1zdGVwcGVyLWhvcml6b250YWwucS1zdGVwcGVyLWNvbnRyYWN0YWJsZSA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItbGFiZWwge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG4ucS10YWJzIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuLnEtbGF5b3V0LW1hcmdpbmFsIC5xLXRhYnMge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG59XFxuLnEtdGFicy1zY3JvbGxlciB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucS10YWItcGFuZSB7XFxuICBwYWRkaW5nOiAxMnB4O1xcbn1cXG4ucS10YWJzLXBhbmVzOmVtcHR5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXRhYnMtbm9ybWFsIC5xLXRhYi1pY29uLFxcbi5xLXRhYnMtbm9ybWFsIC5xLXRhYi1sYWJlbCB7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcbi5xLXRhYiB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzLCBiYWNrZ3JvdW5kIDAuM3M7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBhZGRpbmc6IDhweCAxMHB4O1xcbiAgbWluLWhlaWdodDogNDhweDtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxufVxcbi5xLXRhYiAucS10YWItaWNvbi1wYXJlbnQgKyAucS10YWItbGFiZWwtcGFyZW50IHtcXG4gIG1hcmdpbi10b3A6IDRweDtcXG59XFxuLnEtdGFiIC5xLWNoaXAge1xcbiAgdG9wOiAtOHB4O1xcbiAgcmlnaHQ6IC0xMHB4O1xcbiAgbGVmdDogYXV0bztcXG4gIG1pbi1oZWlnaHQ6IGF1dG87XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjQ0LDY3LDU0LDAuNzUpO1xcbn1cXG4ucS10YWIuYWN0aXZlIC5xLXRhYi1pY29uLFxcbi5xLXRhYi5hY3RpdmUgLnEtdGFiLWxhYmVsIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5xLXRhYi1sYWJlbCB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5xLXRhYi1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMjdweDtcXG59XFxuLnEtdGFiLWZvY3VzLWhlbHBlciB7XFxuICB6LWluZGV4OiAtMTtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5xLXRhYi1mb2N1cy1oZWxwZXI6Zm9jdXMge1xcbiAgei1pbmRleDogdW5zZXQ7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxuICBvcGFjaXR5OiAwLjE7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLnEtdGFiLmhpZGUtaWNvbiAucS10YWItaWNvbi1wYXJlbnQsXFxuICAucS10YWIuaGlkZS1sYWJlbCAucS10YWItbGFiZWwtcGFyZW50IHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnEtdGFiLmhpZGUtaWNvbiAucS10YWItbGFiZWwge1xcbiAgICBtYXJnaW4tdG9wOiAwO1xcbiAgfVxcbiAgLnEtdGFiLWZ1bGwuaGlkZS1ub25lIC5xLXRhYi1sYWJlbC1wYXJlbnQgLnEtdGFiLW1ldGEge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5xLXRhYi1mdWxsIC5xLXRhYi1sYWJlbC1wYXJlbnQgLnEtdGFiLW1ldGEge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcXG4gIC5xLXRhYnMtaGVhZDpub3QoLnNjcm9sbGFibGUpIC5xLXRhYnMtc2Nyb2xsZXIsXFxuICAucS10YWJzLWhlYWQ6bm90KC5zY3JvbGxhYmxlKSAucS10YWIge1xcbiAgICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDEgYXV0bztcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAucS10YWIge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDI1cHg7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDI1cHg7XFxuICB9XFxuICAucS1sYXlvdXQtbWFyZ2luYWwgLnEtdGFicy1oZWFkOm5vdCguc2Nyb2xsYWJsZSkge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEycHg7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEycHg7XFxuICB9XFxufVxcbi5xLXRhYnMtaGVhZCB7XFxuICBtaW4taGVpZ2h0OiA0OHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGZvbnQtc2l6ZTogMC45NXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjE4cyBlYXNlLWluLCBib3gtc2hhZG93IDAuMThzIGVhc2UtaW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5xLXRhYnMtaGVhZDpub3QoLnNjcm9sbGFibGUpIC5xLXRhYnMtbGVmdC1zY3JvbGwsXFxuLnEtdGFicy1oZWFkOm5vdCguc2Nyb2xsYWJsZSkgLnEtdGFicy1yaWdodC1zY3JvbGwge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4ucS10YWJzLWxlZnQtc2Nyb2xsLFxcbi5xLXRhYnMtcmlnaHQtc2Nyb2xsIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdG9wOiAwO1xcbn1cXG4ucS10YWJzLWxlZnQtc2Nyb2xsIC5xLWljb24sXFxuLnEtdGFicy1yaWdodC1zY3JvbGwgLnEtaWNvbiB7XFxuICB0ZXh0LXNoYWRvdzogMCAwIDEwcHggIzAwMDtcXG4gIGZvbnQtc2l6ZTogMzIuNHB4O1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG4ucS10YWJzLWxlZnQtc2Nyb2xsLmRpc2FibGVkLFxcbi5xLXRhYnMtcmlnaHQtc2Nyb2xsLmRpc2FibGVkIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXRhYnM6aG92ZXIgLnEtdGFicy1sZWZ0LXNjcm9sbCAucS1pY29uLFxcbi5xLXRhYnM6aG92ZXIgLnEtdGFicy1yaWdodC1zY3JvbGwgLnEtaWNvbiB7XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbn1cXG4ucS10YWJzLWxlZnQtc2Nyb2xsIHtcXG4gIGxlZnQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtdGFicy1yaWdodC1zY3JvbGwge1xcbiAgcmlnaHQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtdGFicy1hbGlnbi1qdXN0aWZ5IC5xLXRhYnMtc2Nyb2xsZXIsXFxuLnEtdGFicy1hbGlnbi1qdXN0aWZ5IC5xLXRhYiB7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgZmxleDogMSAxIGF1dG87XFxufVxcbi5xLXRhYnMtYWxpZ24tY2VudGVyIHtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuLnEtdGFicy1hbGlnbi1yaWdodCB7XFxuICAtbXMtZmxleC1wYWNrOiBlbmQ7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuLnEtdGFicy1iYXIge1xcbiAgYm9yZGVyOiAycHggc29saWQgY3VycmVudENvbG9yO1xcbiAgYm9yZGVyLXdpZHRoOiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgaGVpZ2h0OiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbn1cXG4ucS10YWJzLWdsb2JhbC1iYXIge1xcbiAgd2lkdGg6IDFweDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzO1xcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpO1xcbn1cXG4ucS10YWJzLWdsb2JhbC1iYXIuY29udHJhY3Qge1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xOHM7XFxuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7XFxufVxcbi5xLXRhYnMtZ2xvYmFsLWJhci1jb250YWluZXIuaGlnaGxpZ2h0ID4gLnEtdGFicy1nbG9iYWwtYmFyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXRhYnMtdHdvLWxpbmVzIC5xLXRhYiB7XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xcbn1cXG4ucS10YWJzLXR3by1saW5lcyAucS10YWIgLnEtdGFiLWxhYmVsIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcXG59XFxuLnEtdGFicy1wb3NpdGlvbi10b3AgPiAucS10YWJzLWhlYWQgLnEtdGFicy1iYXIge1xcbiAgYm90dG9tOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMnB4O1xcbn1cXG4ucS10YWJzLXBvc2l0aW9uLWJvdHRvbSA+IC5xLXRhYnMtaGVhZCAucS10YWJzLWJhciB7XFxuICB0b3A6IDA7XFxuICBib3JkZXItdG9wLXdpZHRoOiAycHg7XFxufVxcbi5xLXRhYnMtcG9zaXRpb24tYm90dG9tID4gLnEtdGFicy1wYW5lcyB7XFxuICAtbXMtZmxleC1vcmRlcjogLTE7XFxuICAgICAgb3JkZXI6IC0xO1xcbn1cXG4ucS10YWJzLWludmVydGVkIC5xLXRhYnMtaGVhZCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbn1cXG4ucS10YWJzLWludmVydGVkLnEtdGFicy1wb3NpdGlvbi10b3AgPiAucS10YWJzLXBhbmVzIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMSk7XFxufVxcbi5xLXRhYnMtaW52ZXJ0ZWQucS10YWJzLXBvc2l0aW9uLXRvcCA+IC5xLXRhYi1wYW5lIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcbi5xLXRhYnMtaW52ZXJ0ZWQucS10YWJzLXBvc2l0aW9uLWJvdHRvbSA+IC5xLXRhYnMtcGFuZXMge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xKTtcXG59XFxuLnEtdGFicy1pbnZlcnRlZC5xLXRhYnMtcG9zaXRpb24tYm90dG9tID4gLnEtdGFiLXBhbmUge1xcbiAgYm9yZGVyLWJvdHRvbTogMDtcXG59XFxuYm9keS5tb2JpbGUgLnEtdGFicy1zY3JvbGxlciB7XFxuICBvdmVyZmxvdy15OiBoaWRkZW47XFxuICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgd2lsbC1jaGFuZ2U6IHNjcm9sbC1wb3NpdGlvbjtcXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG59XFxuYm9keS5kZXNrdG9wIC5xLXRhYjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgb3BhY2l0eTogMC4xO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtdGFiOmhvdmVyOmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG59XFxuLnEtdGFibGUtY29udGFpbmVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucS10YWJsZS1jb250YWluZXIuZnVsbHNjcmVlbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcbn1cXG4ucS10YWJsZS10b3Age1xcbiAgbWluLWhlaWdodDogNjRweDtcXG4gIHBhZGRpbmc6IDhweCAyNHB4O1xcbn1cXG4ucS10YWJsZS10b3A6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICBvcGFjaXR5OiAwLjI7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxufVxcbi5xLXRhYmxlLXRvcCAucS10YWJsZS1jb250cm9sIHtcXG4gIG1pbi1oZWlnaHQ6IDM2cHg7XFxuICBwYWRkaW5nOiA4cHggMDtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgZmxleC13cmFwOiB3cmFwO1xcbn1cXG4ucS10YWJsZS10aXRsZSB7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBsZXR0ZXItc3BhY2luZzogMC4wMDVlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcbi5xLXRhYmxlLXNlcGFyYXRvciB7XFxuICBtaW4td2lkdGg6IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ucS10YWJsZS1ub2RhdGEgLnEtaWNvbiB7XFxuICBmb250LXNpemU6IDIwMCU7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbn1cXG4ucS10YWJsZS1wcm9ncmVzcyB7XFxuICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcXG59XFxuLnEtdGFibGUtcHJvZ3Jlc3MgdGQge1xcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcbi5xLXRhYmxlLXByb2dyZXNzIC5xLXByb2dyZXNzIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGhlaWdodDogMnB4O1xcbiAgYm90dG9tOiAwO1xcbn1cXG4ucS10YWJsZS1taWRkbGUge1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbn1cXG4ucS10YWJsZS1ib3R0b20ge1xcbiAgbWluLWhlaWdodDogNDhweDtcXG4gIHBhZGRpbmc6IDRweCAxNHB4IDRweCAyNHB4O1xcbn1cXG4ucS10YWJsZS1ib3R0b20sXFxuLnEtdGFibGUtYm90dG9tIC5xLWlmIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG59XFxuLnEtdGFibGUtYm90dG9tIC5xLXRhYmxlLWNvbnRyb2wge1xcbiAgbWluLWhlaWdodDogMjRweDtcXG59XFxuLnEtdGFibGUtY29udHJvbCB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5xLXRhYmxlLXNvcnQtaWNvbiB7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxuICB3aWxsLWNoYW5nZTogb3BhY2l0eSwgdHJhbnNmb3JtO1xcbiAgb3BhY2l0eTogMDtcXG4gIGZvbnQtc2l6ZTogMTIwJTtcXG59XFxuLnEtdGFibGUtc29ydC1pY29uLWxlZnQsXFxuLnEtdGFibGUtc29ydC1pY29uLWNlbnRlciB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG4ucS10YWJsZS1zb3J0LWljb24tcmlnaHQge1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxufVxcbi5xLXRhYmxlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG4gIGJvcmRlci1zcGFjaW5nOiAwO1xcbn1cXG4ucS10YWJsZSB0aGVhZCB0ciB7XFxuICBoZWlnaHQ6IDU2cHg7XFxufVxcbi5xLXRhYmxlIHRoIHtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBmb250LXNpemU6IDEycHg7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG4ucS10YWJsZSB0aC5zb3J0YWJsZSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLXRhYmxlIHRoLnNvcnRhYmxlOmhvdmVyIC5xLXRhYmxlLXNvcnQtaWNvbiB7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLXRhYmxlIHRoLnNvcnRlZCAucS10YWJsZS1zb3J0LWljb24ge1xcbiAgb3BhY2l0eTogMSAhaW1wb3J0YW50O1xcbn1cXG4ucS10YWJsZSB0aC5zb3J0LWRlc2MgLnEtdGFibGUtc29ydC1pY29uIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcbi5xLXRhYmxlIHRib2R5IHRyIHtcXG4gIHRyYW5zaXRpb246IDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC41LCAxKTtcXG4gIHdpbGwtY2hhbmdlOiBiYWNrZ3JvdW5kO1xcbn1cXG4ucS10YWJsZSB0aCxcXG4ucS10YWJsZSB0ZCB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgcGFkZGluZzogN3B4IDI0cHg7XFxufVxcbi5xLXRhYmxlIHRoZWFkLFxcbi5xLXRhYmxlIHRkLFxcbi5xLXRhYmxlIHRoIHtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICBib3JkZXItd2lkdGg6IDA7XFxufVxcbi5xLXRhYmxlIHRib2R5IHRkIHtcXG4gIGhlaWdodDogNDhweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXNpemU6IDEzcHg7XFxufVxcbi5xLXRhYmxlLWNvbC1hdXRvLXdpZHRoIHtcXG4gIHdpZHRoOiAxcHg7XFxufVxcbi5xLXRhYmxlLWJvdHRvbS1pdGVtIHtcXG4gIG1hcmdpbi1yaWdodDogMjRweDtcXG59XFxuLnEtdGFibGUtZ3JpZCB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4ucS10YWJsZS1ncmlkIC5xLXRhYmxlLWJvdHRvbSB7XFxuICBib3JkZXItdG9wOiAwO1xcbn1cXG4ucS10YWJsZS1ncmlkIC5xLXRhYmxlIHtcXG4gIGhlaWdodDogMnB4O1xcbn1cXG4ucS10YWJsZS1ncmlkIC5xLXRhYmxlIHRoZWFkIHtcXG4gIGJvcmRlcjogMDtcXG59XFxuLnEtdGFibGUtaG9yaXpvbnRhbC1zZXBhcmF0b3IgdGhlYWQsXFxuLnEtdGFibGUtaG9yaXpvbnRhbC1zZXBhcmF0b3IgdGJvZHkgdGQge1xcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4IDA7XFxufVxcbi5xLXRhYmxlLXZlcnRpY2FsLXNlcGFyYXRvciB0aGVhZCB7XFxuICBib3JkZXItd2lkdGg6IDAgMCAxcHggMDtcXG59XFxuLnEtdGFibGUtdmVydGljYWwtc2VwYXJhdG9yIHRkIHtcXG4gIGJvcmRlci13aWR0aDogMCAwIDAgMXB4O1xcbn1cXG4ucS10YWJsZS12ZXJ0aWNhbC1zZXBhcmF0b3IgdGQ6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLWxlZnQ6IDA7XFxufVxcbi5xLXRhYmxlLWNlbGwtc2VwYXJhdG9yIHRkIHtcXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbn1cXG4ucS10YWJsZS1jZWxsLXNlcGFyYXRvciB0ZDpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItbGVmdDogMDtcXG59XFxuLnEtdGFibGUtY2VsbC1zZXBhcmF0b3IgdGQ6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItcmlnaHQ6IDA7XFxufVxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlLXRvcCB7XFxuICBtaW4taGVpZ2h0OiA0OHB4O1xcbn1cXG4ucS10YWJsZS1kZW5zZSAucS10YWJsZS10b3AsXFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUtYm90dG9tIHtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbiAgcGFkZGluZy1yaWdodDogOHB4O1xcbn1cXG4ucS10YWJsZS1kZW5zZSAucS10YWJsZS1ib3R0b20ge1xcbiAgbWluLWhlaWdodDogNDJweDtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUtc29ydC1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMTEwJTtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUgdGgsXFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUgdGQge1xcbiAgcGFkZGluZzogNHB4IDhweDtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUgdGhlYWQgdHIge1xcbiAgaGVpZ2h0OiA0MHB4O1xcbn1cXG4ucS10YWJsZS1kZW5zZSAucS10YWJsZSB0Ym9keSB0ZCB7XFxuICBoZWlnaHQ6IDI4cHg7XFxufVxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlLWJvdHRvbS1pdGVtIHtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIC5xLXRhYmxlLXRvcCB7XFxuICAgIG1pbi1oZWlnaHQ6IDQ4cHg7XFxuICB9XFxuICAucS10YWJsZS10b3AsXFxuICAucS10YWJsZS1ib3R0b20ge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDhweDtcXG4gICAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgfVxcbiAgLnEtdGFibGUtYm90dG9tIHtcXG4gICAgbWluLWhlaWdodDogNDJweDtcXG4gIH1cXG4gIC5xLXRhYmxlLXNvcnQtaWNvbiB7XFxuICAgIGZvbnQtc2l6ZTogMTEwJTtcXG4gIH1cXG4gIC5xLXRhYmxlIHRoLFxcbiAgLnEtdGFibGUgdGQge1xcbiAgICBwYWRkaW5nOiA0cHggOHB4O1xcbiAgfVxcbiAgLnEtdGFibGUgdGhlYWQgdHIge1xcbiAgICBoZWlnaHQ6IDQwcHg7XFxuICB9XFxuICAucS10YWJsZSB0Ym9keSB0ZCB7XFxuICAgIGhlaWdodDogMjhweDtcXG4gIH1cXG4gIC5xLXRhYmxlLWJvdHRvbS1pdGVtIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxuICB9XFxufVxcbi5xLXRhYmxlLWJvdHRvbSB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjU0KTtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS10YWJsZSB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjg3KTtcXG59XFxuLnEtdGFibGUgdGhlYWQsXFxuLnEtdGFibGUgdHIsXFxuLnEtdGFibGUgdGgsXFxuLnEtdGFibGUgdGQge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS10YWJsZSB0aCB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjU0KTtcXG59XFxuLnEtdGFibGUgdGguc29ydGFibGU6aG92ZXIsXFxuLnEtdGFibGUgdGguc29ydGVkIHtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuODcpO1xcbn1cXG4ucS10YWJsZSB0Ym9keSB0ci5zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDYpO1xcbn1cXG4ucS10YWJsZSB0Ym9keSB0cjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDMpO1xcbn1cXG4ucS10YWJsZS1kYXJrIHtcXG4gIGNvbG9yOiAjZWVlO1xcbn1cXG4ucS10YWJsZS1kYXJrIC5xLXRhYmxlLWJvdHRvbSxcXG4ucS10YWJsZS1kYXJrIC5xLXRhYmxlLXRvcCB7XFxuICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjY0KTtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpO1xcbn1cXG4ucS10YWJsZS1kYXJrIHRoZWFkLFxcbi5xLXRhYmxlLWRhcmsgdHIsXFxuLnEtdGFibGUtZGFyayB0aCxcXG4ucS10YWJsZS1kYXJrIHRkIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjEyKTtcXG59XFxuLnEtdGFibGUtZGFyayB0aCB7XFxuICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjY0KTtcXG59XFxuLnEtdGFibGUtZGFyayB0aC5zb3J0YWJsZTpob3ZlcixcXG4ucS10YWJsZS1kYXJrIHRoLnNvcnRlZCB7XFxuICBjb2xvcjogI2VlZTtcXG59XFxuLnEtdGFibGUtZGFyayB0Ym9keSB0ci5zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMik7XFxufVxcbi5xLXRhYmxlLWRhcmsgdGJvZHkgdHI6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjEpO1xcbn1cXG4ucS10aW1lbGluZSB7XFxuICBwYWRkaW5nOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbn1cXG4ucS10aW1lbGluZSBoNiB7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG59XFxuLnEtdGltZWxpbmUtdGl0bGUge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxufVxcbi5xLXRpbWVsaW5lLXN1YnRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIG9wYWNpdHk6IDAuNDtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuICBsZXR0ZXItc3BhY2luZzogMXB4O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG59XFxuLnEtdGltZWxpbmUtZG90IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTVweDtcXG59XFxuLnEtdGltZWxpbmUtZG90OmJlZm9yZSxcXG4ucS10aW1lbGluZS1kb3Q6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLnEtdGltZWxpbmUtZG90OmJlZm9yZSB7XFxuICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XFxuICBoZWlnaHQ6IDE1cHg7XFxuICB3aWR0aDogMTVweDtcXG4gIHRvcDogNHB4O1xcbiAgbGVmdDogMDtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zcyBlYXNlLWluLW91dCwgYm9yZGVyIDAuM3MgZWFzZS1pbi1vdXQ7XFxufVxcbi5xLXRpbWVsaW5lLWRvdDphZnRlciB7XFxuICB3aWR0aDogM3B4O1xcbiAgb3BhY2l0eTogMC40O1xcbiAgdG9wOiAyNHB4O1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogNnB4O1xcbn1cXG4ucS10aW1lbGluZS1lbnRyeS13aXRoLWljb24gLnEtdGltZWxpbmUtZG90IHtcXG4gIHdpZHRoOiAzMXB4O1xcbiAgbGVmdDogLThweDtcXG59XFxuLnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uIC5xLXRpbWVsaW5lLWRvdDpiZWZvcmUge1xcbiAgaGVpZ2h0OiAzMXB4O1xcbiAgd2lkdGg6IDMxcHg7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5LXdpdGgtaWNvbiAucS10aW1lbGluZS1kb3Q6YWZ0ZXIge1xcbiAgdG9wOiA0MXB4O1xcbiAgbGVmdDogMTRweDtcXG59XFxuLnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uIC5xLXRpbWVsaW5lLXN1YnRpdGxlIHtcXG4gIHBhZGRpbmctdG9wOiA4cHg7XFxufVxcbi5xLXRpbWVsaW5lLWRvdCAucS1pY29uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgaGVpZ2h0OiAzOHB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzIGVhc2UtaW4tb3V0O1xcbn1cXG4ucS10aW1lbGluZS1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS10aW1lbGluZS1kYXJrIC5xLXRpbWVsaW5lLXN1YnRpdGxlIHtcXG4gIG9wYWNpdHk6IDAuNztcXG59XFxuLnEtdGltZWxpbmUtZW50cnkge1xcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbGluZS1oZWlnaHQ6IDIycHg7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5Omxhc3QtY2hpbGQge1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5Omxhc3QtY2hpbGQgLnEtdGltZWxpbmUtZG90OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IG5vbmU7XFxufVxcbi5xLXRpbWVsaW5lLWhvdmVyIC5xLXRpbWVsaW5lLWVudHJ5OmhvdmVyIC5xLXRpbWVsaW5lLWRvdDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDNweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXRpbWVsaW5lLWhvdmVyIC5xLXRpbWVsaW5lLWVudHJ5LnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uOmhvdmVyIC5xLXRpbWVsaW5lLWRvdCAucS1pY29uIHtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXRpbWVsaW5lLWNvbnRlbnQge1xcbiAgcGFkZGluZy1ib3R0b206IDI0cHg7XFxufVxcbi5xLXRpbWVsaW5lLWhlYWRpbmcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucS10aW1lbGluZS1oZWFkaW5nOmZpcnN0LWNoaWxkIC5xLXRpbWVsaW5lLWhlYWRpbmctdGl0bGUge1xcbiAgcGFkZGluZy10b3A6IDA7XFxufVxcbi5xLXRpbWVsaW5lLWhlYWRpbmc6bGFzdC1jaGlsZCAucS10aW1lbGluZS1oZWFkaW5nLXRpdGxlIHtcXG4gIHBhZGRpbmctYm90dG9tOiAwO1xcbn1cXG4ucS10aW1lbGluZS1oZWFkaW5nLXRpdGxlIHtcXG4gIHBhZGRpbmc6IDMycHggMDtcXG4gIG1hcmdpbjogMDtcXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtaGVhZGluZyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdztcXG4gICAgZm9udC1zaXplOiAyMDAlO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1oZWFkaW5nID4gZGl2IHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtaGVhZGluZy10aXRsZSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtNTBweDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUge1xcbiAgICBkaXNwbGF5OiB0YWJsZTtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnkge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XFxuICAgIHBhZGRpbmc6IDA7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLXN1YnRpdGxlLFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1kb3QsXFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWNvbnRlbnQge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1zdWJ0aXRsZSB7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xcbiAgICB3aWR0aDogMzUlO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1kb3Qge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWNvbnRlbnQge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5LXdpdGgtaWNvbiAucS10aW1lbGluZS1jb250ZW50IHtcXG4gICAgcGFkZGluZy10b3A6IDhweDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtc3VidGl0bGUge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtaGVhZGluZy10aXRsZSB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5LFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1zdWJ0aXRsZSxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZG90LFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1jb250ZW50IHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgcGFkZGluZzogMDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZG90IHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBsZWZ0OiA1MCU7XFxuICAgIG1hcmdpbi1sZWZ0OiAtNy4xNXB4O1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeS13aXRoLWljb24gLnEtdGltZWxpbmUtZG90IHtcXG4gICAgbGVmdDogNTAlO1xcbiAgICBtYXJnaW4tbGVmdDogLTE1cHg7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLXN1YnRpdGxlLFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1jb250ZW50IHtcXG4gICAgd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktbGVmdCAucS10aW1lbGluZS1jb250ZW50LFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeS1yaWdodCAucS10aW1lbGluZS1zdWJ0aXRsZSB7XFxuICAgIGZsb2F0OiBsZWZ0O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktbGVmdCAucS10aW1lbGluZS1zdWJ0aXRsZSxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktcmlnaHQgLnEtdGltZWxpbmUtY29udGVudCB7XFxuICAgIGZsb2F0OiByaWdodDtcXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcXG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeS13aXRoLWljb24gLnEtdGltZWxpbmUtY29udGVudCB7XFxuICAgIHBhZGRpbmctdG9wOiA4cHg7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5IHtcXG4gICAgcGFkZGluZy1ib3R0b206IDI0cHg7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxufVxcbi5xLXRvZ2dsZS1iYXNlIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjQ1cyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTJweDtcXG4gIGJvcmRlci1yYWRpdXM6IDMwcHg7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLXRvZ2dsZS1oYW5kbGUge1xcbiAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcXG4gIHRyYW5zaXRpb246IGFsbCA0NTBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XFxuICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjIpLCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMjFweDtcXG4gIGhlaWdodDogMjFweDtcXG4gIGxpbmUtaGVpZ2h0OiAyMXB4O1xcbn1cXG4ucS10b2dnbGUgLnEtb3B0aW9uLWlubmVyIHtcXG4gIGhlaWdodDogMjFweDtcXG4gIHdpZHRoOiA0MHB4O1xcbiAgbWluLXdpZHRoOiA0MHB4O1xcbiAgcGFkZGluZzogNXB4IDA7XFxufVxcbi5xLXRvZ2dsZSAucS1vcHRpb24taW5uZXIuYWN0aXZlIC5xLXRvZ2dsZS1oYW5kbGUge1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgbGVmdDogMTlweDtcXG59XFxuLnEtdG9nZ2xlIC5xLW9wdGlvbi1pbm5lci5hY3RpdmUgLnEtdG9nZ2xlLWljb24ge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLXRvb2xiYXIge1xcbiAgcGFkZGluZzogNHB4IDEycHg7XFxuICBtaW4taGVpZ2h0OiA1MHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ucS10b29sYmFyLWludmVydGVkIHtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxufVxcbi5xLXRvb2xiYXItdGl0bGUge1xcbiAgLW1zLWZsZXg6IDEgMSAwJTtcXG4gICAgICBmbGV4OiAxIDEgMCU7XFxuICBtaW4td2lkdGg6IDFweDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBwYWRkaW5nOiAwIDEycHg7XFxufVxcbi5xLXRvb2xiYXItc3VidGl0bGUge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgb3BhY2l0eTogMC43O1xcbn1cXG4ucS10b29sYmFyLXRpdGxlLFxcbi5xLXRvb2xiYXItc3VidGl0bGUge1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtdG9vbHRpcCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogI2ZhZmFmYTtcXG4gIGJhY2tncm91bmQ6ICM3NDc0NzQ7XFxuICB6LWluZGV4OiA5MDAwO1xcbiAgcGFkZGluZzogMTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnEtdHJlZS1ub2RlIHtcXG4gIG1hcmdpbjogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmc6IDAgMCAzcHggMjJweDtcXG59XFxuLnEtdHJlZS1ub2RlOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtM3B4O1xcbiAgYm90dG9tOiAwO1xcbiAgd2lkdGg6IDFweDtcXG4gIHJpZ2h0OiBhdXRvO1xcbiAgbGVmdDogLTEzcHg7XFxuICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtdHJlZS1ub2RlOmxhc3QtY2hpbGQ6YWZ0ZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtdHJlZS1ub2RlLWhlYWRlcjpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC0zcHg7XFxuICBib3R0b206IDUwJTtcXG4gIHdpZHRoOiAzNXB4O1xcbiAgbGVmdDogLTM1cHg7XFxuICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXRyZWUtY2hpbGRyZW4ge1xcbiAgcGFkZGluZy1sZWZ0OiAyNXB4O1xcbn1cXG4ucS10cmVlLWNoaWxkcmVuLmRpc2FibGVkIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4ucS10cmVlLW5vZGUtYm9keSB7XFxuICBwYWRkaW5nOiA1cHggMCA4cHggNXB4O1xcbn1cXG4ucS10cmVlLW5vZGUtcGFyZW50IHtcXG4gIHBhZGRpbmctbGVmdDogMnB4O1xcbn1cXG4ucS10cmVlLW5vZGUtcGFyZW50ID4gLnEtdHJlZS1ub2RlLWhlYWRlcjpiZWZvcmUge1xcbiAgd2lkdGg6IDE1cHg7XFxuICBsZWZ0OiAtMTVweDtcXG59XFxuLnEtdHJlZS1ub2RlLXBhcmVudCA+IC5xLXRyZWUtbm9kZS1jb2xsYXBzaWJsZSA+IC5xLXRyZWUtbm9kZS1ib2R5IHtcXG4gIHBhZGRpbmc6IDVweCAwIDhweCAyN3B4O1xcbn1cXG4ucS10cmVlLW5vZGUtcGFyZW50ID4gLnEtdHJlZS1ub2RlLWNvbGxhcHNpYmxlID4gLnEtdHJlZS1ub2RlLWJvZHk6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgcmlnaHQ6IGF1dG87XFxuICBsZWZ0OiAxMnB4O1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxuICBib3R0b206IDUwcHg7XFxufVxcbi5xLXRyZWUtbm9kZS1saW5rIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtdHJlZS1ub2RlLXNlbGVjdGVkIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xNSk7XFxufVxcbi5xLXRyZWUtZGFyayAucS10cmVlLW5vZGUtc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjQpO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtdHJlZS1ub2RlLWxpbms6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtdHJlZS1kYXJrIC5xLXRyZWUtbm9kZS1saW5rOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4zKTtcXG59XFxuLnEtdHJlZS1ub2RlLWhlYWRlciB7XFxuICBwYWRkaW5nOiA0cHg7XFxuICBtYXJnaW4tdG9wOiAzcHg7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxufVxcbi5xLXRyZWUtbm9kZS1oZWFkZXIuZGlzYWJsZWQge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLXRyZWUtaWNvbiB7XFxuICBmb250LXNpemU6IDEuNWVtO1xcbn1cXG4ucS10cmVlLWltZyB7XFxuICBoZWlnaHQ6IDNlbTtcXG59XFxuLnEtdHJlZS1pbWcuYXZhdGFyIHtcXG4gIHdpZHRoOiAyZW07XFxuICBoZWlnaHQ6IDJlbTtcXG59XFxuLnEtdHJlZS1hcnJvdyB7XFxuICBmb250LXNpemU6IDFyZW07XFxuICB3aWR0aDogMXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG59XFxuLnEtdHJlZS1hcnJvdy1yb3RhdGUge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xcbn1cXG5bZGlyPXJ0bF0gLnEtdHJlZS1hcnJvdyB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbltkaXI9cnRsXSAucS10cmVlLWFycm93LXJvdGF0ZSB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtdHJlZSA+IC5xLXRyZWUtbm9kZSB7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4ucS10cmVlID4gLnEtdHJlZS1ub2RlOmFmdGVyLFxcbi5xLXRyZWUgPiAucS10cmVlLW5vZGUgPiAucS10cmVlLW5vZGUtaGVhZGVyOmJlZm9yZSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS10cmVlID4gLnEtdHJlZS1ub2RlLWNoaWxkID4gLnEtdHJlZS1ub2RlLWhlYWRlciB7XFxuICBwYWRkaW5nLWxlZnQ6IDI0cHg7XFxufVxcbi5xLXVwbG9hZGVyLWV4cGFuZGVkIC5xLWlmIHtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuLnEtdXBsb2FkZXItaW5wdXQge1xcbiAgb3BhY2l0eTogMDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZm9udC1zaXplOiAwO1xcbn1cXG4ucS11cGxvYWRlci1waWNrLWJ1dHRvbltkaXNhYmxlZF0gLnEtdXBsb2FkZXItaW5wdXQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtdXBsb2FkZXItZmlsZXMge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIG1heC1oZWlnaHQ6IDUwMHB4O1xcbn1cXG4ucS11cGxvYWRlci1maWxlcy1uby1ib3JkZXIgLnEtdXBsb2FkZXItZmlsZXMge1xcbiAgYm9yZGVyLXRvcDogMCAhaW1wb3J0YW50O1xcbn1cXG4ucS11cGxvYWRlci1maWxlOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XFxufVxcbi5xLXVwbG9hZGVyLXByb2dyZXNzLWJnLFxcbi5xLXVwbG9hZGVyLXByb2dyZXNzLXRleHQge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLXVwbG9hZGVyLXByb2dyZXNzLWJnIHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG9wYWNpdHk6IDAuMjtcXG59XFxuLnEtdXBsb2FkZXItcHJvZ3Jlc3MtdGV4dCB7XFxuICBmb250LXNpemU6IDQwcHg7XFxuICBvcGFjaXR5OiAwLjE7XFxuICByaWdodDogNDRweDtcXG4gIGJvdHRvbTogMDtcXG59XFxuLnEtdXBsb2FkZXItZG5kIHtcXG4gIG91dGxpbmU6IDJweCBkYXNoZWQgY3VycmVudENvbG9yO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC02cHg7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuNik7XFxufVxcbi5xLXVwbG9hZGVyLWRuZC5pbnZlcnRlZCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMyk7XFxufVxcbi5xLXVwbG9hZGVyLWRhcmsgLnEtdXBsb2FkZXItZmlsZXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjYTdhN2E3O1xcbn1cXG4ucS11cGxvYWRlci1kYXJrIC5xLXVwbG9hZGVyLWJnIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS11cGxvYWRlci1kYXJrIC5xLXVwbG9hZGVyLXByb2dyZXNzLXRleHQge1xcbiAgb3BhY2l0eTogMC4yO1xcbn1cXG4ucS11cGxvYWRlci1kYXJrIC5xLXVwbG9hZGVyLWZpbGU6bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQyNDI0MjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1xLWNvbG9yLWRhcmspO1xcbn1cXG5pbWcucmVzcG9uc2l2ZSB7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbmltZy5hdmF0YXIge1xcbiAgd2lkdGg6IDUwcHg7XFxuICBoZWlnaHQ6IDUwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjIpLCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5xLXZpZGVvIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbn1cXG4ucS12aWRlbyBpZnJhbWUsXFxuLnEtdmlkZW8gb2JqZWN0LFxcbi5xLXZpZGVvIGVtYmVkIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG46cm9vdCB7XFxuICAtLXEtY29sb3ItcHJpbWFyeTogIzAyN2JlMztcXG4gIC0tcS1jb2xvci1zZWNvbmRhcnk6ICMyNmE2OWE7XFxuICAtLXEtY29sb3ItdGVydGlhcnk6ICM1NTU7XFxuICAtLXEtY29sb3ItcG9zaXRpdmU6ICMyMWJhNDU7XFxuICAtLXEtY29sb3ItbmVnYXRpdmU6ICNkYjI4Mjg7XFxuICAtLXEtY29sb3ItbmVnYXRpdmUtbDogI2VjOGI4YjtcXG4gIC0tcS1jb2xvci1pbmZvOiAjMzFjY2VjO1xcbiAgLS1xLWNvbG9yLXdhcm5pbmc6ICNmMmMwMzc7XFxuICAtLXEtY29sb3Itd2FybmluZy1sOiAjZjhkZDkzO1xcbiAgLS1xLWNvbG9yLWxpZ2h0OiAjYmRiZGJkO1xcbiAgLS1xLWNvbG9yLWxpZ2h0LWQ6ICNhYWE7XFxuICAtLXEtY29sb3ItZmFkZWQ6ICM3Nzc7XFxuICAtLXEtY29sb3ItZGFyazogIzQyNDI0MjtcXG59XFxuLnRleHQtcHJpbWFyeSB7XFxuICBjb2xvcjogIzAyN2JlMyAhaW1wb3J0YW50O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItcHJpbWFyeSkgIWltcG9ydGFudDtcXG59XFxuLmJnLXByaW1hcnkge1xcbiAgYmFja2dyb3VuZDogIzAyN2JlMyAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1wcmltYXJ5KSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICMyNmE2OWEgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXNlY29uZGFyeSkgIWltcG9ydGFudDtcXG59XFxuLmJnLXNlY29uZGFyeSB7XFxuICBiYWNrZ3JvdW5kOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1xLWNvbG9yLXNlY29uZGFyeSkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVydGlhcnkge1xcbiAgY29sb3I6ICM1NTUgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXRlcnRpYXJ5KSAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVydGlhcnkge1xcbiAgYmFja2dyb3VuZDogIzU1NSAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci10ZXJ0aWFyeSkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZmFkZWQge1xcbiAgY29sb3I6ICM3NzcgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWZhZGVkKSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZmFkZWQge1xcbiAgYmFja2dyb3VuZDogIzc3NyAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1mYWRlZCkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcG9zaXRpdmUge1xcbiAgY29sb3I6ICMyMWJhNDUgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXBvc2l0aXZlKSAhaW1wb3J0YW50O1xcbn1cXG4uYmctcG9zaXRpdmUge1xcbiAgYmFja2dyb3VuZDogIzIxYmE0NSAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1wb3NpdGl2ZSkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbmVnYXRpdmUge1xcbiAgY29sb3I6ICNkYjI4MjggIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLW5lZ2F0aXZlKSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbmVnYXRpdmUge1xcbiAgYmFja2dyb3VuZDogI2RiMjgyOCAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5mbyB7XFxuICBjb2xvcjogIzMxY2NlYyAhaW1wb3J0YW50O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItaW5mbykgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZm8ge1xcbiAgYmFja2dyb3VuZDogIzMxY2NlYyAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1pbmZvKSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC13YXJuaW5nIHtcXG4gIGNvbG9yOiAjZjJjMDM3ICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci13YXJuaW5nKSAhaW1wb3J0YW50O1xcbn1cXG4uYmctd2FybmluZyB7XFxuICBiYWNrZ3JvdW5kOiAjZjJjMDM3ICFpbXBvcnRhbnQ7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1xLWNvbG9yLXdhcm5pbmcpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXdoaXRlIHtcXG4gIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy13aGl0ZSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsYWNrIHtcXG4gIGNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibGFjayB7XFxuICBiYWNrZ3JvdW5kOiAjMDAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0IHtcXG4gIGNvbG9yOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1saWdodCkgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0IHtcXG4gIGJhY2tncm91bmQ6ICNiZGJkYmQgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItbGlnaHQpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRhcmsge1xcbiAgY29sb3I6ICM0MjQyNDIgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWRhcmspICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kYXJrIHtcXG4gIGJhY2tncm91bmQ6ICM0MjQyNDIgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItZGFyaykgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdHJhbnNwYXJlbnQge1xcbiAgY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10cmFuc3BhcmVudCB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1yZWQge1xcbiAgY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTEge1xcbiAgY29sb3I6ICNmZmViZWUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTIge1xcbiAgY29sb3I6ICNmZmNkZDIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTMge1xcbiAgY29sb3I6ICNlZjlhOWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTQge1xcbiAgY29sb3I6ICNlNTczNzMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTUge1xcbiAgY29sb3I6ICNlZjUzNTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTYge1xcbiAgY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTcge1xcbiAgY29sb3I6ICNlNTM5MzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTgge1xcbiAgY29sb3I6ICNkMzJmMmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTkge1xcbiAgY29sb3I6ICNjNjI4MjggIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTEwIHtcXG4gIGNvbG9yOiAjYjcxYzFjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0xMSB7XFxuICBjb2xvcjogI2ZmOGE4MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1yZWQtMTIge1xcbiAgY29sb3I6ICNmZjUyNTIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTEzIHtcXG4gIGNvbG9yOiAjZmYxNzQ0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0xNCB7XFxuICBjb2xvcjogI2Q1MDAwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rIHtcXG4gIGNvbG9yOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMSB7XFxuICBjb2xvcjogI2ZjZTRlYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTIge1xcbiAgY29sb3I6ICNmOGJiZDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay0zIHtcXG4gIGNvbG9yOiAjZjQ4ZmIxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstNCB7XFxuICBjb2xvcjogI2YwNjI5MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTUge1xcbiAgY29sb3I6ICNlYzQwN2EgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay02IHtcXG4gIGNvbG9yOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstNyB7XFxuICBjb2xvcjogI2Q4MWI2MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTgge1xcbiAgY29sb3I6ICNjMjE4NWIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay05IHtcXG4gIGNvbG9yOiAjYWQxNDU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMTAge1xcbiAgY29sb3I6ICM4ODBlNGYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay0xMSB7XFxuICBjb2xvcjogI2ZmODBhYiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTEyIHtcXG4gIGNvbG9yOiAjZmY0MDgxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMTMge1xcbiAgY29sb3I6ICNmNTAwNTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay0xNCB7XFxuICBjb2xvcjogI2M1MTE2MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1wdXJwbGUge1xcbiAgY29sb3I6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTEge1xcbiAgY29sb3I6ICNmM2U1ZjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTIge1xcbiAgY29sb3I6ICNlMWJlZTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTMge1xcbiAgY29sb3I6ICNjZTkzZDggIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTQge1xcbiAgY29sb3I6ICNiYTY4YzggIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTUge1xcbiAgY29sb3I6ICNhYjQ3YmMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTYge1xcbiAgY29sb3I6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTcge1xcbiAgY29sb3I6ICM4ZTI0YWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTgge1xcbiAgY29sb3I6ICM3YjFmYTIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTkge1xcbiAgY29sb3I6ICM2YTFiOWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTEwIHtcXG4gIGNvbG9yOiAjNGExNDhjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0xMSB7XFxuICBjb2xvcjogI2VhODBmYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1wdXJwbGUtMTIge1xcbiAgY29sb3I6ICNlMDQwZmIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTEzIHtcXG4gIGNvbG9yOiAjZDUwMGY5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0xNCB7XFxuICBjb2xvcjogI2EwZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZSB7XFxuICBjb2xvcjogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xIHtcXG4gIGNvbG9yOiAjZWRlN2Y2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTIge1xcbiAgY29sb3I6ICNkMWM0ZTkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMyB7XFxuICBjb2xvcjogI2IzOWRkYiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS00IHtcXG4gIGNvbG9yOiAjOTU3NWNkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTUge1xcbiAgY29sb3I6ICM3ZTU3YzIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtNiB7XFxuICBjb2xvcjogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS03IHtcXG4gIGNvbG9yOiAjNWUzNWIxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTgge1xcbiAgY29sb3I6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtOSB7XFxuICBjb2xvcjogIzQ1MjdhMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xMCB7XFxuICBjb2xvcjogIzMxMWI5MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xMSB7XFxuICBjb2xvcjogI2IzODhmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xMiB7XFxuICBjb2xvcjogIzdjNGRmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xMyB7XFxuICBjb2xvcjogIzY1MWZmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xNCB7XFxuICBjb2xvcjogIzYyMDBlYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1pbmRpZ28ge1xcbiAgY29sb3I6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTEge1xcbiAgY29sb3I6ICNlOGVhZjYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTIge1xcbiAgY29sb3I6ICNjNWNhZTkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTMge1xcbiAgY29sb3I6ICM5ZmE4ZGEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTQge1xcbiAgY29sb3I6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTUge1xcbiAgY29sb3I6ICM1YzZiYzAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTYge1xcbiAgY29sb3I6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTcge1xcbiAgY29sb3I6ICMzOTQ5YWIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTgge1xcbiAgY29sb3I6ICMzMDNmOWYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTkge1xcbiAgY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTEwIHtcXG4gIGNvbG9yOiAjMWEyMzdlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0xMSB7XFxuICBjb2xvcjogIzhjOWVmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1pbmRpZ28tMTIge1xcbiAgY29sb3I6ICM1MzZkZmUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTEzIHtcXG4gIGNvbG9yOiAjM2Q1YWZlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0xNCB7XFxuICBjb2xvcjogIzMwNGZmZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlIHtcXG4gIGNvbG9yOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMSB7XFxuICBjb2xvcjogI2UzZjJmZCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTIge1xcbiAgY29sb3I6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS0zIHtcXG4gIGNvbG9yOiAjOTBjYWY5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtNCB7XFxuICBjb2xvcjogIzY0YjVmNiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTUge1xcbiAgY29sb3I6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS02IHtcXG4gIGNvbG9yOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtNyB7XFxuICBjb2xvcjogIzFlODhlNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTgge1xcbiAgY29sb3I6ICMxOTc2ZDIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS05IHtcXG4gIGNvbG9yOiAjMTU2NWMwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMTAge1xcbiAgY29sb3I6ICMwZDQ3YTEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS0xMSB7XFxuICBjb2xvcjogIzgyYjFmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTEyIHtcXG4gIGNvbG9yOiAjNDQ4YWZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMTMge1xcbiAgY29sb3I6ICMyOTc5ZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS0xNCB7XFxuICBjb2xvcjogIzI5NjJmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlIHtcXG4gIGNvbG9yOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMSB7XFxuICBjb2xvcjogI2UxZjVmZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTIge1xcbiAgY29sb3I6ICNiM2U1ZmMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS0zIHtcXG4gIGNvbG9yOiAjODFkNGZhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtNCB7XFxuICBjb2xvcjogIzRmYzNmNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTUge1xcbiAgY29sb3I6ICMyOWI2ZjYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS02IHtcXG4gIGNvbG9yOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtNyB7XFxuICBjb2xvcjogIzAzOWJlNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTgge1xcbiAgY29sb3I6ICMwMjg4ZDEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS05IHtcXG4gIGNvbG9yOiAjMDI3N2JkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMTAge1xcbiAgY29sb3I6ICMwMTU3OWIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS0xMSB7XFxuICBjb2xvcjogIzgwZDhmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTEyIHtcXG4gIGNvbG9yOiAjNDBjNGZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMTMge1xcbiAgY29sb3I6ICMwMGIwZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS0xNCB7XFxuICBjb2xvcjogIzAwOTFlYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuIHtcXG4gIGNvbG9yOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMSB7XFxuICBjb2xvcjogI2UwZjdmYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTIge1xcbiAgY29sb3I6ICNiMmViZjIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi0zIHtcXG4gIGNvbG9yOiAjODBkZWVhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tNCB7XFxuICBjb2xvcjogIzRkZDBlMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTUge1xcbiAgY29sb3I6ICMyNmM2ZGEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi02IHtcXG4gIGNvbG9yOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tNyB7XFxuICBjb2xvcjogIzAwYWNjMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTgge1xcbiAgY29sb3I6ICMwMDk3YTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi05IHtcXG4gIGNvbG9yOiAjMDA4MzhmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMTAge1xcbiAgY29sb3I6ICMwMDYwNjQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi0xMSB7XFxuICBjb2xvcjogIzg0ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTEyIHtcXG4gIGNvbG9yOiAjMThmZmZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMTMge1xcbiAgY29sb3I6ICMwMGU1ZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi0xNCB7XFxuICBjb2xvcjogIzAwYjhkNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsIHtcXG4gIGNvbG9yOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMSB7XFxuICBjb2xvcjogI2UwZjJmMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTIge1xcbiAgY29sb3I6ICNiMmRmZGIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC0zIHtcXG4gIGNvbG9yOiAjODBjYmM0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtNCB7XFxuICBjb2xvcjogIzRkYjZhYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTUge1xcbiAgY29sb3I6ICMyNmE2OWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC02IHtcXG4gIGNvbG9yOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtNyB7XFxuICBjb2xvcjogIzAwODk3YiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTgge1xcbiAgY29sb3I6ICMwMDc5NmIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC05IHtcXG4gIGNvbG9yOiAjMDA2OTVjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMTAge1xcbiAgY29sb3I6ICMwMDRkNDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC0xMSB7XFxuICBjb2xvcjogI2E3ZmZlYiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTEyIHtcXG4gIGNvbG9yOiAjNjRmZmRhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMTMge1xcbiAgY29sb3I6ICMxZGU5YjYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC0xNCB7XFxuICBjb2xvcjogIzAwYmZhNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbiB7XFxuICBjb2xvcjogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xIHtcXG4gIGNvbG9yOiAjZThmNWU5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTIge1xcbiAgY29sb3I6ICNjOGU2YzkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMyB7XFxuICBjb2xvcjogI2E1ZDZhNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi00IHtcXG4gIGNvbG9yOiAjODFjNzg0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTUge1xcbiAgY29sb3I6ICM2NmJiNmEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tNiB7XFxuICBjb2xvcjogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi03IHtcXG4gIGNvbG9yOiAjNDNhMDQ3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTgge1xcbiAgY29sb3I6ICMzODhlM2MgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tOSB7XFxuICBjb2xvcjogIzJlN2QzMiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xMCB7XFxuICBjb2xvcjogIzFiNWUyMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xMSB7XFxuICBjb2xvcjogI2I5ZjZjYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xMiB7XFxuICBjb2xvcjogIzY5ZjBhZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xMyB7XFxuICBjb2xvcjogIzAwZTY3NiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xNCB7XFxuICBjb2xvcjogIzAwYzg1MyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbiB7XFxuICBjb2xvcjogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xIHtcXG4gIGNvbG9yOiAjZjFmOGU5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTIge1xcbiAgY29sb3I6ICNkY2VkYzggIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMyB7XFxuICBjb2xvcjogI2M1ZTFhNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi00IHtcXG4gIGNvbG9yOiAjYWVkNTgxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTUge1xcbiAgY29sb3I6ICM5Y2NjNjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tNiB7XFxuICBjb2xvcjogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi03IHtcXG4gIGNvbG9yOiAjN2NiMzQyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTgge1xcbiAgY29sb3I6ICM2ODlmMzggIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tOSB7XFxuICBjb2xvcjogIzU1OGIyZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xMCB7XFxuICBjb2xvcjogIzMzNjkxZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xMSB7XFxuICBjb2xvcjogI2NjZmY5MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xMiB7XFxuICBjb2xvcjogI2IyZmY1OSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xMyB7XFxuICBjb2xvcjogIzc2ZmYwMyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xNCB7XFxuICBjb2xvcjogIzY0ZGQxNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lIHtcXG4gIGNvbG9yOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMSB7XFxuICBjb2xvcjogI2Y5ZmJlNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTIge1xcbiAgY29sb3I6ICNmMGY0YzMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS0zIHtcXG4gIGNvbG9yOiAjZTZlZTljICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtNCB7XFxuICBjb2xvcjogI2RjZTc3NSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTUge1xcbiAgY29sb3I6ICNkNGUxNTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS02IHtcXG4gIGNvbG9yOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtNyB7XFxuICBjb2xvcjogI2MwY2EzMyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTgge1xcbiAgY29sb3I6ICNhZmI0MmIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS05IHtcXG4gIGNvbG9yOiAjOWU5ZDI0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMTAge1xcbiAgY29sb3I6ICM4Mjc3MTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS0xMSB7XFxuICBjb2xvcjogI2Y0ZmY4MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTEyIHtcXG4gIGNvbG9yOiAjZWVmZjQxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMTMge1xcbiAgY29sb3I6ICNjNmZmMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS0xNCB7XFxuICBjb2xvcjogI2FlZWEwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC15ZWxsb3cge1xcbiAgY29sb3I6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTEge1xcbiAgY29sb3I6ICNmZmZkZTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTIge1xcbiAgY29sb3I6ICNmZmY5YzQgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTMge1xcbiAgY29sb3I6ICNmZmY1OWQgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTQge1xcbiAgY29sb3I6ICNmZmYxNzYgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTUge1xcbiAgY29sb3I6ICNmZmVlNTggIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTYge1xcbiAgY29sb3I6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTcge1xcbiAgY29sb3I6ICNmZGQ4MzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTgge1xcbiAgY29sb3I6ICNmYmMwMmQgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTkge1xcbiAgY29sb3I6ICNmOWE4MjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTEwIHtcXG4gIGNvbG9yOiAjZjU3ZjE3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0xMSB7XFxuICBjb2xvcjogI2ZmZmY4ZCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC15ZWxsb3ctMTIge1xcbiAgY29sb3I6ICNmZjAgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTEzIHtcXG4gIGNvbG9yOiAjZmZlYTAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0xNCB7XFxuICBjb2xvcjogI2ZmZDYwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlciB7XFxuICBjb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xIHtcXG4gIGNvbG9yOiAjZmZmOGUxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTIge1xcbiAgY29sb3I6ICNmZmVjYjMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMyB7XFxuICBjb2xvcjogI2ZmZTA4MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci00IHtcXG4gIGNvbG9yOiAjZmZkNTRmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTUge1xcbiAgY29sb3I6ICNmZmNhMjggIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItNiB7XFxuICBjb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci03IHtcXG4gIGNvbG9yOiAjZmZiMzAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTgge1xcbiAgY29sb3I6ICNmZmEwMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItOSB7XFxuICBjb2xvcjogI2ZmOGYwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xMCB7XFxuICBjb2xvcjogI2ZmNmYwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xMSB7XFxuICBjb2xvcjogI2ZmZTU3ZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xMiB7XFxuICBjb2xvcjogI2ZmZDc0MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xMyB7XFxuICBjb2xvcjogI2ZmYzQwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xNCB7XFxuICBjb2xvcjogI2ZmYWIwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1vcmFuZ2Uge1xcbiAgY29sb3I6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTEge1xcbiAgY29sb3I6ICNmZmYzZTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTIge1xcbiAgY29sb3I6ICNmZmUwYjIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTMge1xcbiAgY29sb3I6ICNmZmNjODAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTQge1xcbiAgY29sb3I6ICNmZmI3NGQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTUge1xcbiAgY29sb3I6ICNmZmE3MjYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTYge1xcbiAgY29sb3I6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTcge1xcbiAgY29sb3I6ICNmYjhjMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTgge1xcbiAgY29sb3I6ICNmNTdjMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTkge1xcbiAgY29sb3I6ICNlZjZjMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTEwIHtcXG4gIGNvbG9yOiAjZTY1MTAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0xMSB7XFxuICBjb2xvcjogI2ZmZDE4MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1vcmFuZ2UtMTIge1xcbiAgY29sb3I6ICNmZmFiNDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTEzIHtcXG4gIGNvbG9yOiAjZmY5MTAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0xNCB7XFxuICBjb2xvcjogI2ZmNmQwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZSB7XFxuICBjb2xvcjogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xIHtcXG4gIGNvbG9yOiAjZmJlOWU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTIge1xcbiAgY29sb3I6ICNmZmNjYmMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMyB7XFxuICBjb2xvcjogI2ZmYWI5MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS00IHtcXG4gIGNvbG9yOiAjZmY4YTY1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTUge1xcbiAgY29sb3I6ICNmZjcwNDMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtNiB7XFxuICBjb2xvcjogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS03IHtcXG4gIGNvbG9yOiAjZjQ1MTFlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTgge1xcbiAgY29sb3I6ICNlNjRhMTkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtOSB7XFxuICBjb2xvcjogI2Q4NDMxNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xMCB7XFxuICBjb2xvcjogI2JmMzYwYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xMSB7XFxuICBjb2xvcjogI2ZmOWU4MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xMiB7XFxuICBjb2xvcjogI2ZmNmU0MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xMyB7XFxuICBjb2xvcjogI2ZmM2QwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xNCB7XFxuICBjb2xvcjogI2RkMmMwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93biB7XFxuICBjb2xvcjogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xIHtcXG4gIGNvbG9yOiAjZWZlYmU5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTIge1xcbiAgY29sb3I6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMyB7XFxuICBjb2xvcjogI2JjYWFhNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi00IHtcXG4gIGNvbG9yOiAjYTE4ODdmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTUge1xcbiAgY29sb3I6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tNiB7XFxuICBjb2xvcjogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi03IHtcXG4gIGNvbG9yOiAjNmQ0YzQxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTgge1xcbiAgY29sb3I6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tOSB7XFxuICBjb2xvcjogIzRlMzQyZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xMCB7XFxuICBjb2xvcjogIzNlMjcyMyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xMSB7XFxuICBjb2xvcjogI2Q3Y2NjOCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xMiB7XFxuICBjb2xvcjogI2JjYWFhNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xMyB7XFxuICBjb2xvcjogIzhkNmU2MyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xNCB7XFxuICBjb2xvcjogIzVkNDAzNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5IHtcXG4gIGNvbG9yOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMSB7XFxuICBjb2xvcjogI2ZhZmFmYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTIge1xcbiAgY29sb3I6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS0zIHtcXG4gIGNvbG9yOiAjZWVlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktNCB7XFxuICBjb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTUge1xcbiAgY29sb3I6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS02IHtcXG4gIGNvbG9yOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktNyB7XFxuICBjb2xvcjogIzc1NzU3NSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTgge1xcbiAgY29sb3I6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS05IHtcXG4gIGNvbG9yOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMTAge1xcbiAgY29sb3I6ICMyMTIxMjEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS0xMSB7XFxuICBjb2xvcjogI2Y1ZjVmNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTEyIHtcXG4gIGNvbG9yOiAjZWVlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMTMge1xcbiAgY29sb3I6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS0xNCB7XFxuICBjb2xvcjogIzYxNjE2MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLWdyZXkge1xcbiAgY29sb3I6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTEge1xcbiAgY29sb3I6ICNlY2VmZjEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTIge1xcbiAgY29sb3I6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTMge1xcbiAgY29sb3I6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTQge1xcbiAgY29sb3I6ICM5MGE0YWUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTUge1xcbiAgY29sb3I6ICM3ODkwOWMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTYge1xcbiAgY29sb3I6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTcge1xcbiAgY29sb3I6ICM1NDZlN2EgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTgge1xcbiAgY29sb3I6ICM0NTVhNjQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTkge1xcbiAgY29sb3I6ICMzNzQ3NGYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTEwIHtcXG4gIGNvbG9yOiAjMjYzMjM4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0xMSB7XFxuICBjb2xvcjogI2NmZDhkYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLWdyZXktMTIge1xcbiAgY29sb3I6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTEzIHtcXG4gIGNvbG9yOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0xNCB7XFxuICBjb2xvcjogIzQ1NWE2NCAhaW1wb3J0YW50O1xcbn1cXG4uYmctcmVkIHtcXG4gIGJhY2tncm91bmQ6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0xIHtcXG4gIGJhY2tncm91bmQ6ICNmZmViZWUgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0yIHtcXG4gIGJhY2tncm91bmQ6ICNmZmNkZDIgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0zIHtcXG4gIGJhY2tncm91bmQ6ICNlZjlhOWEgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC00IHtcXG4gIGJhY2tncm91bmQ6ICNlNTczNzMgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC01IHtcXG4gIGJhY2tncm91bmQ6ICNlZjUzNTAgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC02IHtcXG4gIGJhY2tncm91bmQ6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC03IHtcXG4gIGJhY2tncm91bmQ6ICNlNTM5MzUgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC04IHtcXG4gIGJhY2tncm91bmQ6ICNkMzJmMmYgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC05IHtcXG4gIGJhY2tncm91bmQ6ICNjNjI4MjggIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjYjcxYzFjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmOGE4MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctcmVkLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNmZjUyNTIgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjZmYxNzQ0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMTQge1xcbiAgYmFja2dyb3VuZDogI2Q1MDAwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluayB7XFxuICBiYWNrZ3JvdW5kOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTEge1xcbiAgYmFja2dyb3VuZDogI2ZjZTRlYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay0yIHtcXG4gIGJhY2tncm91bmQ6ICNmOGJiZDAgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstMyB7XFxuICBiYWNrZ3JvdW5kOiAjZjQ4ZmIxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTQge1xcbiAgYmFja2dyb3VuZDogI2YwNjI5MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay01IHtcXG4gIGJhY2tncm91bmQ6ICNlYzQwN2EgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstNiB7XFxuICBiYWNrZ3JvdW5kOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTcge1xcbiAgYmFja2dyb3VuZDogI2Q4MWI2MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay04IHtcXG4gIGJhY2tncm91bmQ6ICNjMjE4NWIgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstOSB7XFxuICBiYWNrZ3JvdW5kOiAjYWQxNDU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTEwIHtcXG4gIGJhY2tncm91bmQ6ICM4ODBlNGYgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmODBhYiAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmY0MDgxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTEzIHtcXG4gIGJhY2tncm91bmQ6ICNmNTAwNTcgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstMTQge1xcbiAgYmFja2dyb3VuZDogI2M1MTE2MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctcHVycGxlIHtcXG4gIGJhY2tncm91bmQ6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0xIHtcXG4gIGJhY2tncm91bmQ6ICNmM2U1ZjUgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNlMWJlZTcgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0zIHtcXG4gIGJhY2tncm91bmQ6ICNjZTkzZDggIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS00IHtcXG4gIGJhY2tncm91bmQ6ICNiYTY4YzggIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS01IHtcXG4gIGJhY2tncm91bmQ6ICNhYjQ3YmMgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS02IHtcXG4gIGJhY2tncm91bmQ6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS03IHtcXG4gIGJhY2tncm91bmQ6ICM4ZTI0YWEgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS04IHtcXG4gIGJhY2tncm91bmQ6ICM3YjFmYTIgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS05IHtcXG4gIGJhY2tncm91bmQ6ICM2YTFiOWEgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjNGExNDhjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMTEge1xcbiAgYmFja2dyb3VuZDogI2VhODBmYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcHVycGxlLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNlMDQwZmIgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjZDUwMGY5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMTQge1xcbiAgYmFja2dyb3VuZDogI2EwZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUge1xcbiAgYmFja2dyb3VuZDogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMSB7XFxuICBiYWNrZ3JvdW5kOiAjZWRlN2Y2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNkMWM0ZTkgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTMge1xcbiAgYmFja2dyb3VuZDogI2IzOWRkYiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtNCB7XFxuICBiYWNrZ3JvdW5kOiAjOTU3NWNkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS01IHtcXG4gIGJhY2tncm91bmQ6ICM3ZTU3YzIgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTYge1xcbiAgYmFja2dyb3VuZDogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtNyB7XFxuICBiYWNrZ3JvdW5kOiAjNWUzNWIxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS04IHtcXG4gIGJhY2tncm91bmQ6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTkge1xcbiAgYmFja2dyb3VuZDogIzQ1MjdhMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMTAge1xcbiAgYmFja2dyb3VuZDogIzMxMWI5MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMTEge1xcbiAgYmFja2dyb3VuZDogI2IzODhmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMTIge1xcbiAgYmFja2dyb3VuZDogIzdjNGRmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMTMge1xcbiAgYmFja2dyb3VuZDogIzY1MWZmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMTQge1xcbiAgYmFja2dyb3VuZDogIzYyMDBlYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctaW5kaWdvIHtcXG4gIGJhY2tncm91bmQ6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0xIHtcXG4gIGJhY2tncm91bmQ6ICNlOGVhZjYgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0yIHtcXG4gIGJhY2tncm91bmQ6ICNjNWNhZTkgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0zIHtcXG4gIGJhY2tncm91bmQ6ICM5ZmE4ZGEgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby00IHtcXG4gIGJhY2tncm91bmQ6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby01IHtcXG4gIGJhY2tncm91bmQ6ICM1YzZiYzAgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby02IHtcXG4gIGJhY2tncm91bmQ6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby03IHtcXG4gIGJhY2tncm91bmQ6ICMzOTQ5YWIgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby04IHtcXG4gIGJhY2tncm91bmQ6ICMzMDNmOWYgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby05IHtcXG4gIGJhY2tncm91bmQ6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMWEyMzdlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMTEge1xcbiAgYmFja2dyb3VuZDogIzhjOWVmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctaW5kaWdvLTEyIHtcXG4gIGJhY2tncm91bmQ6ICM1MzZkZmUgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjM2Q1YWZlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMTQge1xcbiAgYmFja2dyb3VuZDogIzMwNGZmZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZSB7XFxuICBiYWNrZ3JvdW5kOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTEge1xcbiAgYmFja2dyb3VuZDogI2UzZjJmZCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtMyB7XFxuICBiYWNrZ3JvdW5kOiAjOTBjYWY5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTQge1xcbiAgYmFja2dyb3VuZDogIzY0YjVmNiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS01IHtcXG4gIGJhY2tncm91bmQ6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtNiB7XFxuICBiYWNrZ3JvdW5kOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTcge1xcbiAgYmFja2dyb3VuZDogIzFlODhlNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS04IHtcXG4gIGJhY2tncm91bmQ6ICMxOTc2ZDIgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtOSB7XFxuICBiYWNrZ3JvdW5kOiAjMTU2NWMwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMwZDQ3YTEgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtMTEge1xcbiAgYmFja2dyb3VuZDogIzgyYjFmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjNDQ4YWZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTEzIHtcXG4gIGJhY2tncm91bmQ6ICMyOTc5ZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtMTQge1xcbiAgYmFja2dyb3VuZDogIzI5NjJmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZSB7XFxuICBiYWNrZ3JvdW5kOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTEge1xcbiAgYmFja2dyb3VuZDogI2UxZjVmZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNiM2U1ZmMgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtMyB7XFxuICBiYWNrZ3JvdW5kOiAjODFkNGZhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTQge1xcbiAgYmFja2dyb3VuZDogIzRmYzNmNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS01IHtcXG4gIGJhY2tncm91bmQ6ICMyOWI2ZjYgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtNiB7XFxuICBiYWNrZ3JvdW5kOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTcge1xcbiAgYmFja2dyb3VuZDogIzAzOWJlNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS04IHtcXG4gIGJhY2tncm91bmQ6ICMwMjg4ZDEgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtOSB7XFxuICBiYWNrZ3JvdW5kOiAjMDI3N2JkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMwMTU3OWIgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtMTEge1xcbiAgYmFja2dyb3VuZDogIzgwZDhmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjNDBjNGZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTEzIHtcXG4gIGJhY2tncm91bmQ6ICMwMGIwZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtMTQge1xcbiAgYmFja2dyb3VuZDogIzAwOTFlYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbiB7XFxuICBiYWNrZ3JvdW5kOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTEge1xcbiAgYmFja2dyb3VuZDogI2UwZjdmYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi0yIHtcXG4gIGJhY2tncm91bmQ6ICNiMmViZjIgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tMyB7XFxuICBiYWNrZ3JvdW5kOiAjODBkZWVhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTQge1xcbiAgYmFja2dyb3VuZDogIzRkZDBlMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi01IHtcXG4gIGJhY2tncm91bmQ6ICMyNmM2ZGEgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tNiB7XFxuICBiYWNrZ3JvdW5kOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTcge1xcbiAgYmFja2dyb3VuZDogIzAwYWNjMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi04IHtcXG4gIGJhY2tncm91bmQ6ICMwMDk3YTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tOSB7XFxuICBiYWNrZ3JvdW5kOiAjMDA4MzhmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMwMDYwNjQgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tMTEge1xcbiAgYmFja2dyb3VuZDogIzg0ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjMThmZmZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTEzIHtcXG4gIGJhY2tncm91bmQ6ICMwMGU1ZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tMTQge1xcbiAgYmFja2dyb3VuZDogIzAwYjhkNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTEge1xcbiAgYmFja2dyb3VuZDogI2UwZjJmMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC0yIHtcXG4gIGJhY2tncm91bmQ6ICNiMmRmZGIgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtMyB7XFxuICBiYWNrZ3JvdW5kOiAjODBjYmM0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTQge1xcbiAgYmFja2dyb3VuZDogIzRkYjZhYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC01IHtcXG4gIGJhY2tncm91bmQ6ICMyNmE2OWEgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtNiB7XFxuICBiYWNrZ3JvdW5kOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTcge1xcbiAgYmFja2dyb3VuZDogIzAwODk3YiAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC04IHtcXG4gIGJhY2tncm91bmQ6ICMwMDc5NmIgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtOSB7XFxuICBiYWNrZ3JvdW5kOiAjMDA2OTVjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMwMDRkNDAgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtMTEge1xcbiAgYmFja2dyb3VuZDogI2E3ZmZlYiAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjNjRmZmRhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTEzIHtcXG4gIGJhY2tncm91bmQ6ICMxZGU5YjYgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtMTQge1xcbiAgYmFja2dyb3VuZDogIzAwYmZhNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4ge1xcbiAgYmFja2dyb3VuZDogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMSB7XFxuICBiYWNrZ3JvdW5kOiAjZThmNWU5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi0yIHtcXG4gIGJhY2tncm91bmQ6ICNjOGU2YzkgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTMge1xcbiAgYmFja2dyb3VuZDogI2E1ZDZhNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tNCB7XFxuICBiYWNrZ3JvdW5kOiAjODFjNzg0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi01IHtcXG4gIGJhY2tncm91bmQ6ICM2NmJiNmEgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTYge1xcbiAgYmFja2dyb3VuZDogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tNyB7XFxuICBiYWNrZ3JvdW5kOiAjNDNhMDQ3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi04IHtcXG4gIGJhY2tncm91bmQ6ICMzODhlM2MgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTkge1xcbiAgYmFja2dyb3VuZDogIzJlN2QzMiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMTAge1xcbiAgYmFja2dyb3VuZDogIzFiNWUyMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMTEge1xcbiAgYmFja2dyb3VuZDogI2I5ZjZjYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMTIge1xcbiAgYmFja2dyb3VuZDogIzY5ZjBhZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMTMge1xcbiAgYmFja2dyb3VuZDogIzAwZTY3NiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMTQge1xcbiAgYmFja2dyb3VuZDogIzAwYzg1MyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4ge1xcbiAgYmFja2dyb3VuZDogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMSB7XFxuICBiYWNrZ3JvdW5kOiAjZjFmOGU5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi0yIHtcXG4gIGJhY2tncm91bmQ6ICNkY2VkYzggIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTMge1xcbiAgYmFja2dyb3VuZDogI2M1ZTFhNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tNCB7XFxuICBiYWNrZ3JvdW5kOiAjYWVkNTgxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi01IHtcXG4gIGJhY2tncm91bmQ6ICM5Y2NjNjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTYge1xcbiAgYmFja2dyb3VuZDogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tNyB7XFxuICBiYWNrZ3JvdW5kOiAjN2NiMzQyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi04IHtcXG4gIGJhY2tncm91bmQ6ICM2ODlmMzggIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTkge1xcbiAgYmFja2dyb3VuZDogIzU1OGIyZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMTAge1xcbiAgYmFja2dyb3VuZDogIzMzNjkxZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMTEge1xcbiAgYmFja2dyb3VuZDogI2NjZmY5MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMTIge1xcbiAgYmFja2dyb3VuZDogI2IyZmY1OSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMTMge1xcbiAgYmFja2dyb3VuZDogIzc2ZmYwMyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMTQge1xcbiAgYmFja2dyb3VuZDogIzY0ZGQxNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZSB7XFxuICBiYWNrZ3JvdW5kOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTEge1xcbiAgYmFja2dyb3VuZDogI2Y5ZmJlNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNmMGY0YzMgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtMyB7XFxuICBiYWNrZ3JvdW5kOiAjZTZlZTljICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTQge1xcbiAgYmFja2dyb3VuZDogI2RjZTc3NSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS01IHtcXG4gIGJhY2tncm91bmQ6ICNkNGUxNTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtNiB7XFxuICBiYWNrZ3JvdW5kOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTcge1xcbiAgYmFja2dyb3VuZDogI2MwY2EzMyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS04IHtcXG4gIGJhY2tncm91bmQ6ICNhZmI0MmIgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtOSB7XFxuICBiYWNrZ3JvdW5kOiAjOWU5ZDI0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTEwIHtcXG4gIGJhY2tncm91bmQ6ICM4Mjc3MTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtMTEge1xcbiAgYmFja2dyb3VuZDogI2Y0ZmY4MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZWVmZjQxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTEzIHtcXG4gIGJhY2tncm91bmQ6ICNjNmZmMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtMTQge1xcbiAgYmFja2dyb3VuZDogI2FlZWEwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmcteWVsbG93IHtcXG4gIGJhY2tncm91bmQ6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0xIHtcXG4gIGJhY2tncm91bmQ6ICNmZmZkZTcgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0yIHtcXG4gIGJhY2tncm91bmQ6ICNmZmY5YzQgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0zIHtcXG4gIGJhY2tncm91bmQ6ICNmZmY1OWQgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy00IHtcXG4gIGJhY2tncm91bmQ6ICNmZmYxNzYgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy01IHtcXG4gIGJhY2tncm91bmQ6ICNmZmVlNTggIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy02IHtcXG4gIGJhY2tncm91bmQ6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy03IHtcXG4gIGJhY2tncm91bmQ6ICNmZGQ4MzUgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy04IHtcXG4gIGJhY2tncm91bmQ6ICNmYmMwMmQgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy05IHtcXG4gIGJhY2tncm91bmQ6ICNmOWE4MjUgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjZjU3ZjE3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmZmY4ZCAhaW1wb3J0YW50O1xcbn1cXG4uYmcteWVsbG93LTEyIHtcXG4gIGJhY2tncm91bmQ6ICNmZjAgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlYTAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMTQge1xcbiAgYmFja2dyb3VuZDogI2ZmZDYwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXIge1xcbiAgYmFja2dyb3VuZDogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmOGUxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci0yIHtcXG4gIGJhY2tncm91bmQ6ICNmZmVjYjMgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTMge1xcbiAgYmFja2dyb3VuZDogI2ZmZTA4MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItNCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZkNTRmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci01IHtcXG4gIGJhY2tncm91bmQ6ICNmZmNhMjggIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTYge1xcbiAgYmFja2dyb3VuZDogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItNyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZiMzAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci04IHtcXG4gIGJhY2tncm91bmQ6ICNmZmEwMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTkge1xcbiAgYmFja2dyb3VuZDogI2ZmOGYwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMTAge1xcbiAgYmFja2dyb3VuZDogI2ZmNmYwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmZTU3ZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMTIge1xcbiAgYmFja2dyb3VuZDogI2ZmZDc0MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMTMge1xcbiAgYmFja2dyb3VuZDogI2ZmYzQwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMTQge1xcbiAgYmFja2dyb3VuZDogI2ZmYWIwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctb3JhbmdlIHtcXG4gIGJhY2tncm91bmQ6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0xIHtcXG4gIGJhY2tncm91bmQ6ICNmZmYzZTAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNmZmUwYjIgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0zIHtcXG4gIGJhY2tncm91bmQ6ICNmZmNjODAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS00IHtcXG4gIGJhY2tncm91bmQ6ICNmZmI3NGQgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS01IHtcXG4gIGJhY2tncm91bmQ6ICNmZmE3MjYgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS02IHtcXG4gIGJhY2tncm91bmQ6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS03IHtcXG4gIGJhY2tncm91bmQ6ICNmYjhjMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS04IHtcXG4gIGJhY2tncm91bmQ6ICNmNTdjMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS05IHtcXG4gIGJhY2tncm91bmQ6ICNlZjZjMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjZTY1MTAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmZDE4MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctb3JhbmdlLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNmZmFiNDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjZmY5MTAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMTQge1xcbiAgYmFja2dyb3VuZDogI2ZmNmQwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2Uge1xcbiAgYmFja2dyb3VuZDogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMSB7XFxuICBiYWNrZ3JvdW5kOiAjZmJlOWU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNmZmNjYmMgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTMge1xcbiAgYmFja2dyb3VuZDogI2ZmYWI5MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtNCB7XFxuICBiYWNrZ3JvdW5kOiAjZmY4YTY1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS01IHtcXG4gIGJhY2tncm91bmQ6ICNmZjcwNDMgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTYge1xcbiAgYmFja2dyb3VuZDogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtNyB7XFxuICBiYWNrZ3JvdW5kOiAjZjQ1MTFlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS04IHtcXG4gIGJhY2tncm91bmQ6ICNlNjRhMTkgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTkge1xcbiAgYmFja2dyb3VuZDogI2Q4NDMxNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMTAge1xcbiAgYmFja2dyb3VuZDogI2JmMzYwYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmOWU4MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMTIge1xcbiAgYmFja2dyb3VuZDogI2ZmNmU0MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMTMge1xcbiAgYmFja2dyb3VuZDogI2ZmM2QwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMTQge1xcbiAgYmFja2dyb3VuZDogI2RkMmMwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24ge1xcbiAgYmFja2dyb3VuZDogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMSB7XFxuICBiYWNrZ3JvdW5kOiAjZWZlYmU5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi0yIHtcXG4gIGJhY2tncm91bmQ6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTMge1xcbiAgYmFja2dyb3VuZDogI2JjYWFhNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tNCB7XFxuICBiYWNrZ3JvdW5kOiAjYTE4ODdmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi01IHtcXG4gIGJhY2tncm91bmQ6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTYge1xcbiAgYmFja2dyb3VuZDogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tNyB7XFxuICBiYWNrZ3JvdW5kOiAjNmQ0YzQxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi04IHtcXG4gIGJhY2tncm91bmQ6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTkge1xcbiAgYmFja2dyb3VuZDogIzRlMzQyZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMTAge1xcbiAgYmFja2dyb3VuZDogIzNlMjcyMyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMTEge1xcbiAgYmFja2dyb3VuZDogI2Q3Y2NjOCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMTIge1xcbiAgYmFja2dyb3VuZDogI2JjYWFhNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMTMge1xcbiAgYmFja2dyb3VuZDogIzhkNmU2MyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMTQge1xcbiAgYmFja2dyb3VuZDogIzVkNDAzNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleSB7XFxuICBiYWNrZ3JvdW5kOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTEge1xcbiAgYmFja2dyb3VuZDogI2ZhZmFmYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS0yIHtcXG4gIGJhY2tncm91bmQ6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktMyB7XFxuICBiYWNrZ3JvdW5kOiAjZWVlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTQge1xcbiAgYmFja2dyb3VuZDogI2UwZTBlMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS01IHtcXG4gIGJhY2tncm91bmQ6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktNiB7XFxuICBiYWNrZ3JvdW5kOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTcge1xcbiAgYmFja2dyb3VuZDogIzc1NzU3NSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS04IHtcXG4gIGJhY2tncm91bmQ6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktOSB7XFxuICBiYWNrZ3JvdW5kOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTEwIHtcXG4gIGJhY2tncm91bmQ6ICMyMTIxMjEgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktMTEge1xcbiAgYmFja2dyb3VuZDogI2Y1ZjVmNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZWVlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTEzIHtcXG4gIGJhY2tncm91bmQ6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktMTQge1xcbiAgYmFja2dyb3VuZDogIzYxNjE2MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS1ncmV5IHtcXG4gIGJhY2tncm91bmQ6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0xIHtcXG4gIGJhY2tncm91bmQ6ICNlY2VmZjEgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0yIHtcXG4gIGJhY2tncm91bmQ6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0zIHtcXG4gIGJhY2tncm91bmQ6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS00IHtcXG4gIGJhY2tncm91bmQ6ICM5MGE0YWUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS01IHtcXG4gIGJhY2tncm91bmQ6ICM3ODkwOWMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS02IHtcXG4gIGJhY2tncm91bmQ6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS03IHtcXG4gIGJhY2tncm91bmQ6ICM1NDZlN2EgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS04IHtcXG4gIGJhY2tncm91bmQ6ICM0NTVhNjQgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS05IHtcXG4gIGJhY2tncm91bmQ6ICMzNzQ3NGYgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMjYzMjM4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMTEge1xcbiAgYmFja2dyb3VuZDogI2NmZDhkYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS1ncmV5LTEyIHtcXG4gIGJhY2tncm91bmQ6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMTQge1xcbiAgYmFja2dyb3VuZDogIzQ1NWE2NCAhaW1wb3J0YW50O1xcbn1cXG4uc2hhZG93LXRyYW5zaXRpb24ge1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpICFpbXBvcnRhbnQ7XFxufVxcbi5zaGFkb3ctMSB7XFxuICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjIpLCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xIHtcXG4gIGJveC1zaGFkb3c6IDAgLTFweCAzcHggcmdiYSgwLDAsMCwwLjIpLCAwIC0xcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTJweCAxcHggLTFweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTIge1xcbiAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMiB7XFxuICBib3gtc2hhZG93OiAwIC0xcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0zcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0zIHtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDhweCByZ2JhKDAsMCwwLDAuMiksIDAgM3B4IDRweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAzcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTMge1xcbiAgYm94LXNoYWRvdzogMCAtMXB4IDhweCByZ2JhKDAsMCwwLDAuMiksIDAgLTNweCA0cHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtM3B4IDNweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctNCB7XFxuICBib3gtc2hhZG93OiAwIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLDAuMiksIDAgNHB4IDVweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDFweCAxMHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtNCB7XFxuICBib3gtc2hhZG93OiAwIC0ycHggNHB4IC0xcHggcmdiYSgwLDAsMCwwLjIpLCAwIC00cHggNXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTFweCAxMHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctNSB7XFxuICBib3gtc2hhZG93OiAwIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLDAuMiksIDAgNXB4IDhweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDFweCAxNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtNSB7XFxuICBib3gtc2hhZG93OiAwIC0zcHggNXB4IC0xcHggcmdiYSgwLDAsMCwwLjIpLCAwIC01cHggOHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTFweCAxNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctNiB7XFxuICBib3gtc2hhZG93OiAwIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLDAuMiksIDAgNnB4IDEwcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAxcHggMThweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTYge1xcbiAgYm94LXNoYWRvdzogMCAtM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtNnB4IDEwcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtMXB4IDE4cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy03IHtcXG4gIGJveC1zaGFkb3c6IDAgNHB4IDVweCAtMnB4IHJnYmEoMCwwLDAsMC4yKSwgMCA3cHggMTBweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAycHggMTZweCAxcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC03IHtcXG4gIGJveC1zaGFkb3c6IDAgLTRweCA1cHggLTJweCByZ2JhKDAsMCwwLDAuMiksIDAgLTdweCAxMHB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0ycHggMTZweCAxcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy04IHtcXG4gIGJveC1zaGFkb3c6IDAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC04IHtcXG4gIGJveC1zaGFkb3c6IDAgLTVweCA1cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgLThweCAxMHB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0zcHggMTRweCAycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy05IHtcXG4gIGJveC1zaGFkb3c6IDAgNXB4IDZweCAtM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCA5cHggMTJweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMTZweCAycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC05IHtcXG4gIGJveC1zaGFkb3c6IDAgLTVweCA2cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgLTlweCAxMnB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0zcHggMTZweCAycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xMCB7XFxuICBib3gtc2hhZG93OiAwIDZweCA2cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDRweCAxOHB4IDNweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTEwIHtcXG4gIGJveC1zaGFkb3c6IDAgLTZweCA2cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgLTEwcHggMTRweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNHB4IDE4cHggM3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTEge1xcbiAgYm94LXNoYWRvdzogMCA2cHggN3B4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIDExcHggMTVweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCA0cHggMjBweCAzcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xMSB7XFxuICBib3gtc2hhZG93OiAwIC02cHggN3B4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0xMXB4IDE1cHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTRweCAyMHB4IDNweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTEyIHtcXG4gIGJveC1zaGFkb3c6IDAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNXB4IDIycHggNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTIge1xcbiAgYm94LXNoYWRvdzogMCAtN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC01cHggMjJweCA0cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xMyB7XFxuICBib3gtc2hhZG93OiAwIDdweCA4cHggLTRweCByZ2JhKDAsMCwwLDAuMiksIDAgMTNweCAxOXB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDVweCAyNHB4IDRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTEzIHtcXG4gIGJveC1zaGFkb3c6IDAgLTdweCA4cHggLTRweCByZ2JhKDAsMCwwLDAuMiksIDAgLTEzcHggMTlweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNXB4IDI0cHggNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTQge1xcbiAgYm94LXNoYWRvdzogMCA3cHggOXB4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIDE0cHggMjFweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA1cHggMjZweCA0cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xNCB7XFxuICBib3gtc2hhZG93OiAwIC03cHggOXB4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0xNHB4IDIxcHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTVweCAyNnB4IDRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTE1IHtcXG4gIGJveC1zaGFkb3c6IDAgOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxNXB4IDIycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNnB4IDI4cHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTUge1xcbiAgYm94LXNoYWRvdzogMCAtOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC02cHggMjhweCA1cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xNiB7XFxuICBib3gtc2hhZG93OiAwIDhweCAxMHB4IC01cHggcmdiYSgwLDAsMCwwLjIpLCAwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA2cHggMzBweCA1cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xNiB7XFxuICBib3gtc2hhZG93OiAwIC04cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTZweCAyNHB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC02cHggMzBweCA1cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xNyB7XFxuICBib3gtc2hhZG93OiAwIDhweCAxMXB4IC01cHggcmdiYSgwLDAsMCwwLjIpLCAwIDE3cHggMjZweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA2cHggMzJweCA1cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xNyB7XFxuICBib3gtc2hhZG93OiAwIC04cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTdweCAyNnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC02cHggMzJweCA1cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xOCB7XFxuICBib3gtc2hhZG93OiAwIDlweCAxMXB4IC01cHggcmdiYSgwLDAsMCwwLjIpLCAwIDE4cHggMjhweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA3cHggMzRweCA2cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xOCB7XFxuICBib3gtc2hhZG93OiAwIC05cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMThweCAyOHB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC03cHggMzRweCA2cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xOSB7XFxuICBib3gtc2hhZG93OiAwIDlweCAxMnB4IC02cHggcmdiYSgwLDAsMCwwLjIpLCAwIDE5cHggMjlweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA3cHggMzZweCA2cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xOSB7XFxuICBib3gtc2hhZG93OiAwIC05cHggMTJweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTlweCAyOXB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC03cHggMzZweCA2cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0yMCB7XFxuICBib3gtc2hhZG93OiAwIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAyMHB4IDMxcHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgOHB4IDM4cHggN3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMjAge1xcbiAgYm94LXNoYWRvdzogMCAtMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0yMHB4IDMxcHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgLThweCAzOHB4IDdweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTIxIHtcXG4gIGJveC1zaGFkb3c6IDAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwwLjIpLCAwIDIxcHggMzNweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCA4cHggNDBweCA3cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0yMSB7XFxuICBib3gtc2hhZG93OiAwIC0xMHB4IDEzcHggLTZweCByZ2JhKDAsMCwwLDAuMiksIDAgLTIxcHggMzNweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtOHB4IDQwcHggN3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMjIge1xcbiAgYm94LXNoYWRvdzogMCAxMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLDAuMiksIDAgMjJweCAzNXB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDhweCA0MnB4IDdweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTIyIHtcXG4gIGJveC1zaGFkb3c6IDAgLTEwcHggMTRweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMjJweCAzNXB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC04cHggNDJweCA3cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0yMyB7XFxuICBib3gtc2hhZG93OiAwIDExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAyM3B4IDM2cHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgOXB4IDQ0cHggOHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMjMge1xcbiAgYm94LXNoYWRvdzogMCAtMTFweCAxNHB4IC03cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0yM3B4IDM2cHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTlweCA0NHB4IDhweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTI0IHtcXG4gIGJveC1zaGFkb3c6IDAgMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwwLjIpLCAwIDI0cHggMzhweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCA5cHggNDZweCA4cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0yNCB7XFxuICBib3gtc2hhZG93OiAwIC0xMXB4IDE1cHggLTdweCByZ2JhKDAsMCwwLDAuMiksIDAgLTI0cHggMzhweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtOXB4IDQ2cHggOHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5uby1zaGFkb3csXFxuLnNoYWRvdy0wIHtcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmluc2V0LXNoYWRvdyB7XFxuICBib3gtc2hhZG93OiAwIDdweCA5cHggLTdweCByZ2JhKDAsMCwwLDAuNykgaW5zZXQgIWltcG9ydGFudDtcXG59XFxuLnotbWFyZ2luYWxzIHtcXG4gIHotaW5kZXg6IDIwMDA7XFxufVxcbi56LW5vdGlmeSB7XFxuICB6LWluZGV4OiA5NTAwO1xcbn1cXG4uei1mdWxsc2NyZWVuIHtcXG4gIHotaW5kZXg6IDYwMDA7XFxufVxcbi56LWluaGVyaXQge1xcbiAgei1pbmRleDogaW5oZXJpdCAhaW1wb3J0YW50O1xcbn1cXG4ucm93LFxcbi5jb2x1bW4sXFxuLmZsZXgge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XFxufVxcbi5yb3cuaW5saW5lLFxcbi5jb2x1bW4uaW5saW5lLFxcbi5mbGV4LmlubGluZSB7XFxuICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG59XFxuLnJvdy5yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcbi5jb2x1bW4ge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG4uY29sdW1uLnJldmVyc2Uge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcXG59XFxuLndyYXAge1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XFxufVxcbi5uby13cmFwIHtcXG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcXG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG59XFxuLnJldmVyc2Utd3JhcCB7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XFxuICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XFxufVxcbi5vcmRlci1maXJzdCB7XFxuICAtbXMtZmxleC1vcmRlcjogLTEwMDAwO1xcbiAgICAgIG9yZGVyOiAtMTAwMDA7XFxufVxcbi5vcmRlci1sYXN0IHtcXG4gIC1tcy1mbGV4LW9yZGVyOiAxMDAwMDtcXG4gICAgICBvcmRlcjogMTAwMDA7XFxufVxcbi5vcmRlci1ub25lIHtcXG4gIC1tcy1mbGV4LW9yZGVyOiAwO1xcbiAgICAgIG9yZGVyOiAwO1xcbn1cXG4uanVzdGlmeS1zdGFydCB7XFxuICAtbXMtZmxleC1wYWNrOiBzdGFydDtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcbi5qdXN0aWZ5LWVuZCB7XFxuICAtbXMtZmxleC1wYWNrOiBlbmQ7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuLmp1c3RpZnktY2VudGVyLFxcbi5mbGV4LWNlbnRlciB7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5qdXN0aWZ5LWJldHdlZW4ge1xcbiAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi5qdXN0aWZ5LWFyb3VuZCB7XFxuICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbn1cXG4uaXRlbXMtc3RhcnQge1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG4uaXRlbXMtZW5kIHtcXG4gIC1tcy1mbGV4LWFsaWduOiBlbmQ7XFxuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbn1cXG4uaXRlbXMtY2VudGVyLFxcbi5mbGV4LWNlbnRlciB7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5pdGVtcy1iYXNlbGluZSB7XFxuICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmU7XFxuICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xcbn1cXG4uaXRlbXMtc3RyZXRjaCB7XFxuICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaDtcXG4gICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcXG59XFxuLmNvbnRlbnQtc3RhcnQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDtcXG4gICAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbn1cXG4uY29udGVudC1lbmQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7XFxuICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7XFxufVxcbi5jb250ZW50LWNlbnRlciB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjtcXG4gICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5jb250ZW50LXN0cmV0Y2gge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdHJldGNoO1xcbiAgICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7XFxufVxcbi5jb250ZW50LWJldHdlZW4ge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5O1xcbiAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi5jb250ZW50LWFyb3VuZCB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7XFxuICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kO1xcbn1cXG4uc2VsZi1zdGFydCB7XFxuICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdGFydDtcXG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xcbn1cXG4uc2VsZi1lbmQge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogZW5kO1xcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xcbn1cXG4uc2VsZi1jZW50ZXIge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyO1xcbiAgICAgIC1tcy1ncmlkLXJvdy1hbGlnbjogY2VudGVyO1xcbiAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcXG59XFxuLnNlbGYtYmFzZWxpbmUge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYmFzZWxpbmU7XFxuICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7XFxufVxcbi5zZWxmLXN0cmV0Y2gge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RyZXRjaDtcXG4gICAgICAtbXMtZ3JpZC1yb3ctYWxpZ246IHN0cmV0Y2g7XFxuICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcXG59XFxuLmd1dHRlci14LW5vbmUsXFxuLmd1dHRlci1ub25lIHtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG4uZ3V0dGVyLXgtbm9uZSA+IGRpdixcXG4uZ3V0dGVyLW5vbmUgPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG4uZ3V0dGVyLXktbm9uZSxcXG4uZ3V0dGVyLW5vbmUge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLmd1dHRlci15LW5vbmUgPiBkaXYsXFxuLmd1dHRlci1ub25lID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4uZ3V0dGVyLXgteHMsXFxuLmd1dHRlci14cyB7XFxuICBtYXJnaW4tbGVmdDogLThweDtcXG59XFxuLmd1dHRlci14LXhzID4gZGl2LFxcbi5ndXR0ZXIteHMgPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XFxufVxcbi5ndXR0ZXIteS14cyxcXG4uZ3V0dGVyLXhzIHtcXG4gIG1hcmdpbi10b3A6IC04cHg7XFxufVxcbi5ndXR0ZXIteS14cyA+IGRpdixcXG4uZ3V0dGVyLXhzID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiA4cHg7XFxufVxcbi5ndXR0ZXIteC1zbSxcXG4uZ3V0dGVyLXNtIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG59XFxuLmd1dHRlci14LXNtID4gZGl2LFxcbi5ndXR0ZXItc20gPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xcbn1cXG4uZ3V0dGVyLXktc20sXFxuLmd1dHRlci1zbSB7XFxuICBtYXJnaW4tdG9wOiAtMTZweDtcXG59XFxuLmd1dHRlci15LXNtID4gZGl2LFxcbi5ndXR0ZXItc20gPiBkaXYge1xcbiAgcGFkZGluZy10b3A6IDE2cHg7XFxufVxcbi5ndXR0ZXIteC1tZCxcXG4uZ3V0dGVyLW1kIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMzJweDtcXG59XFxuLmd1dHRlci14LW1kID4gZGl2LFxcbi5ndXR0ZXItbWQgPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiAzMnB4O1xcbn1cXG4uZ3V0dGVyLXktbWQsXFxuLmd1dHRlci1tZCB7XFxuICBtYXJnaW4tdG9wOiAtMzJweDtcXG59XFxuLmd1dHRlci15LW1kID4gZGl2LFxcbi5ndXR0ZXItbWQgPiBkaXYge1xcbiAgcGFkZGluZy10b3A6IDMycHg7XFxufVxcbi5ndXR0ZXIteC1sZyxcXG4uZ3V0dGVyLWxnIHtcXG4gIG1hcmdpbi1sZWZ0OiAtNDhweDtcXG59XFxuLmd1dHRlci14LWxnID4gZGl2LFxcbi5ndXR0ZXItbGcgPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiA0OHB4O1xcbn1cXG4uZ3V0dGVyLXktbGcsXFxuLmd1dHRlci1sZyB7XFxuICBtYXJnaW4tdG9wOiAtNDhweDtcXG59XFxuLmd1dHRlci15LWxnID4gZGl2LFxcbi5ndXR0ZXItbGcgPiBkaXYge1xcbiAgcGFkZGluZy10b3A6IDQ4cHg7XFxufVxcbi5ndXR0ZXIteC14bCxcXG4uZ3V0dGVyLXhsIHtcXG4gIG1hcmdpbi1sZWZ0OiAtNjRweDtcXG59XFxuLmd1dHRlci14LXhsID4gZGl2LFxcbi5ndXR0ZXIteGwgPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiA2NHB4O1xcbn1cXG4uZ3V0dGVyLXkteGwsXFxuLmd1dHRlci14bCB7XFxuICBtYXJnaW4tdG9wOiAtNjRweDtcXG59XFxuLmd1dHRlci15LXhsID4gZGl2LFxcbi5ndXR0ZXIteGwgPiBkaXYge1xcbiAgcGFkZGluZy10b3A6IDY0cHg7XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAwKSB7XFxuICAucm93ID4gLmNvbCxcXG4gIC5yb3cgPiAuY29sLXhzLFxcbiAgLnJvdyA+IC5jb2wtYXV0byxcXG4gIC5yb3cgPiAuY29sLXhzLWF1dG8sXFxuICAucm93ID4gLmNvbC1ncm93LFxcbiAgLnJvdyA+IC5jb2wteHMtZ3JvdyxcXG4gIC5yb3cgPiAuY29sLTAsXFxuICAucm93ID4gLmNvbC14cy0wLFxcbiAgLnJvdyA+IC5jb2wtMSxcXG4gIC5yb3cgPiAuY29sLXhzLTEsXFxuICAucm93ID4gLmNvbC0yLFxcbiAgLnJvdyA+IC5jb2wteHMtMixcXG4gIC5yb3cgPiAuY29sLTMsXFxuICAucm93ID4gLmNvbC14cy0zLFxcbiAgLnJvdyA+IC5jb2wtNCxcXG4gIC5yb3cgPiAuY29sLXhzLTQsXFxuICAucm93ID4gLmNvbC01LFxcbiAgLnJvdyA+IC5jb2wteHMtNSxcXG4gIC5yb3cgPiAuY29sLTYsXFxuICAucm93ID4gLmNvbC14cy02LFxcbiAgLnJvdyA+IC5jb2wtNyxcXG4gIC5yb3cgPiAuY29sLXhzLTcsXFxuICAucm93ID4gLmNvbC04LFxcbiAgLnJvdyA+IC5jb2wteHMtOCxcXG4gIC5yb3cgPiAuY29sLTksXFxuICAucm93ID4gLmNvbC14cy05LFxcbiAgLnJvdyA+IC5jb2wtMTAsXFxuICAucm93ID4gLmNvbC14cy0xMCxcXG4gIC5yb3cgPiAuY29sLTExLFxcbiAgLnJvdyA+IC5jb2wteHMtMTEsXFxuICAucm93ID4gLmNvbC0xMixcXG4gIC5yb3cgPiAuY29sLXhzLTEyLFxcbiAgLmZsZXggPiAuY29sLFxcbiAgLmZsZXggPiAuY29sLXhzLFxcbiAgLmZsZXggPiAuY29sLWF1dG8sXFxuICAuZmxleCA+IC5jb2wteHMtYXV0byxcXG4gIC5mbGV4ID4gLmNvbC1ncm93LFxcbiAgLmZsZXggPiAuY29sLXhzLWdyb3csXFxuICAuZmxleCA+IC5jb2wtMCxcXG4gIC5mbGV4ID4gLmNvbC14cy0wLFxcbiAgLmZsZXggPiAuY29sLTEsXFxuICAuZmxleCA+IC5jb2wteHMtMSxcXG4gIC5mbGV4ID4gLmNvbC0yLFxcbiAgLmZsZXggPiAuY29sLXhzLTIsXFxuICAuZmxleCA+IC5jb2wtMyxcXG4gIC5mbGV4ID4gLmNvbC14cy0zLFxcbiAgLmZsZXggPiAuY29sLTQsXFxuICAuZmxleCA+IC5jb2wteHMtNCxcXG4gIC5mbGV4ID4gLmNvbC01LFxcbiAgLmZsZXggPiAuY29sLXhzLTUsXFxuICAuZmxleCA+IC5jb2wtNixcXG4gIC5mbGV4ID4gLmNvbC14cy02LFxcbiAgLmZsZXggPiAuY29sLTcsXFxuICAuZmxleCA+IC5jb2wteHMtNyxcXG4gIC5mbGV4ID4gLmNvbC04LFxcbiAgLmZsZXggPiAuY29sLXhzLTgsXFxuICAuZmxleCA+IC5jb2wtOSxcXG4gIC5mbGV4ID4gLmNvbC14cy05LFxcbiAgLmZsZXggPiAuY29sLTEwLFxcbiAgLmZsZXggPiAuY29sLXhzLTEwLFxcbiAgLmZsZXggPiAuY29sLTExLFxcbiAgLmZsZXggPiAuY29sLXhzLTExLFxcbiAgLmZsZXggPiAuY29sLTEyLFxcbiAgLmZsZXggPiAuY29sLXhzLTEyIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1pbi13aWR0aDogMDtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wsXFxuICAuY29sdW1uID4gLmNvbC14cyxcXG4gIC5jb2x1bW4gPiAuY29sLWF1dG8sXFxuICAuY29sdW1uID4gLmNvbC14cy1hdXRvLFxcbiAgLmNvbHVtbiA+IC5jb2wtZ3JvdyxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLWdyb3csXFxuICAuY29sdW1uID4gLmNvbC0wLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMCxcXG4gIC5jb2x1bW4gPiAuY29sLTEsXFxuICAuY29sdW1uID4gLmNvbC14cy0xLFxcbiAgLmNvbHVtbiA+IC5jb2wtMixcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTIsXFxuICAuY29sdW1uID4gLmNvbC0zLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMyxcXG4gIC5jb2x1bW4gPiAuY29sLTQsXFxuICAuY29sdW1uID4gLmNvbC14cy00LFxcbiAgLmNvbHVtbiA+IC5jb2wtNSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTUsXFxuICAuY29sdW1uID4gLmNvbC02LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtNixcXG4gIC5jb2x1bW4gPiAuY29sLTcsXFxuICAuY29sdW1uID4gLmNvbC14cy03LFxcbiAgLmNvbHVtbiA+IC5jb2wtOCxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTgsXFxuICAuY29sdW1uID4gLmNvbC05LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtOSxcXG4gIC5jb2x1bW4gPiAuY29sLTEwLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMTAsXFxuICAuY29sdW1uID4gLmNvbC0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTExLFxcbiAgLmNvbHVtbiA+IC5jb2wtMTIsXFxuICAuY29sdW1uID4gLmNvbC14cy0xMixcXG4gIC5mbGV4ID4gLmNvbCxcXG4gIC5mbGV4ID4gLmNvbC14cyxcXG4gIC5mbGV4ID4gLmNvbC1hdXRvLFxcbiAgLmZsZXggPiAuY29sLXhzLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC14cy1ncm93LFxcbiAgLmZsZXggPiAuY29sLTAsXFxuICAuZmxleCA+IC5jb2wteHMtMCxcXG4gIC5mbGV4ID4gLmNvbC0xLFxcbiAgLmZsZXggPiAuY29sLXhzLTEsXFxuICAuZmxleCA+IC5jb2wtMixcXG4gIC5mbGV4ID4gLmNvbC14cy0yLFxcbiAgLmZsZXggPiAuY29sLTMsXFxuICAuZmxleCA+IC5jb2wteHMtMyxcXG4gIC5mbGV4ID4gLmNvbC00LFxcbiAgLmZsZXggPiAuY29sLXhzLTQsXFxuICAuZmxleCA+IC5jb2wtNSxcXG4gIC5mbGV4ID4gLmNvbC14cy01LFxcbiAgLmZsZXggPiAuY29sLTYsXFxuICAuZmxleCA+IC5jb2wteHMtNixcXG4gIC5mbGV4ID4gLmNvbC03LFxcbiAgLmZsZXggPiAuY29sLXhzLTcsXFxuICAuZmxleCA+IC5jb2wtOCxcXG4gIC5mbGV4ID4gLmNvbC14cy04LFxcbiAgLmZsZXggPiAuY29sLTksXFxuICAuZmxleCA+IC5jb2wteHMtOSxcXG4gIC5mbGV4ID4gLmNvbC0xMCxcXG4gIC5mbGV4ID4gLmNvbC14cy0xMCxcXG4gIC5mbGV4ID4gLmNvbC0xMSxcXG4gIC5mbGV4ID4gLmNvbC14cy0xMSxcXG4gIC5mbGV4ID4gLmNvbC0xMixcXG4gIC5mbGV4ID4gLmNvbC14cy0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgbWluLWhlaWdodDogMDtcXG4gICAgbWF4LWhlaWdodDogMTAwJTtcXG4gIH1cXG4gIC5jb2wsXFxuICAuY29sLXhzIHtcXG4gICAgLW1zLWZsZXg6IDEwMDAwIDEgMCU7XFxuICAgICAgICBmbGV4OiAxMDAwMCAxIDAlO1xcbiAgfVxcbiAgLmNvbC1hdXRvLFxcbiAgLmNvbC14cy1hdXRvLFxcbiAgLmNvbC0wLFxcbiAgLmNvbC14cy0wLFxcbiAgLmNvbC0xLFxcbiAgLmNvbC14cy0xLFxcbiAgLmNvbC0yLFxcbiAgLmNvbC14cy0yLFxcbiAgLmNvbC0zLFxcbiAgLmNvbC14cy0zLFxcbiAgLmNvbC00LFxcbiAgLmNvbC14cy00LFxcbiAgLmNvbC01LFxcbiAgLmNvbC14cy01LFxcbiAgLmNvbC02LFxcbiAgLmNvbC14cy02LFxcbiAgLmNvbC03LFxcbiAgLmNvbC14cy03LFxcbiAgLmNvbC04LFxcbiAgLmNvbC14cy04LFxcbiAgLmNvbC05LFxcbiAgLmNvbC14cy05LFxcbiAgLmNvbC0xMCxcXG4gIC5jb2wteHMtMTAsXFxuICAuY29sLTExLFxcbiAgLmNvbC14cy0xMSxcXG4gIC5jb2wtMTIsXFxuICAuY29sLXhzLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMCAwIGF1dG87XFxuICB9XFxuICAuY29sLWdyb3csXFxuICAuY29sLXhzLWdyb3cge1xcbiAgICAtbXMtZmxleDogMSAwIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDAgYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTAsXFxuICAucm93ID4gLmNvbC14cy0wIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC0wLFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTAsXFxuICAuY29sdW1uID4gLmNvbC14cy0wIHtcXG4gICAgaGVpZ2h0OiAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC0xLFxcbiAgLnJvdyA+IC5jb2wteHMtMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC0xLFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtMSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTEge1xcbiAgICBoZWlnaHQ6IDguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtMixcXG4gIC5yb3cgPiAuY29sLXhzLTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxNi42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTIsXFxuICAucm93ID4gLm9mZnNldC14cy0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtMixcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTIge1xcbiAgICBoZWlnaHQ6IDE2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTMsXFxuICAucm93ID4gLmNvbC14cy0zIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMjUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMyxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtMyxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTMge1xcbiAgICBoZWlnaHQ6IDI1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC00LFxcbiAgLnJvdyA+IC5jb2wteHMtNCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtNCxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC00LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtNCB7XFxuICAgIGhlaWdodDogMzMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtNSxcXG4gIC5yb3cgPiAuY29sLXhzLTUge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA0MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTUsXFxuICAucm93ID4gLm9mZnNldC14cy01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtNSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTUge1xcbiAgICBoZWlnaHQ6IDQxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTYsXFxuICAucm93ID4gLmNvbC14cy02IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtNixcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtNixcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTYge1xcbiAgICBoZWlnaHQ6IDUwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC03LFxcbiAgLnJvdyA+IC5jb2wteHMtNyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtNyxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC03LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtNyB7XFxuICAgIGhlaWdodDogNTguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtOCxcXG4gIC5yb3cgPiAuY29sLXhzLTgge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTgsXFxuICAucm93ID4gLm9mZnNldC14cy04IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtOCxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTgge1xcbiAgICBoZWlnaHQ6IDY2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTksXFxuICAucm93ID4gLmNvbC14cy05IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNzUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtOSxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtOSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTkge1xcbiAgICBoZWlnaHQ6IDc1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC0xMCxcXG4gIC5yb3cgPiAuY29sLXhzLTEwIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogODMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC0xMCxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtMTAsXFxuICAuY29sdW1uID4gLmNvbC14cy0xMCB7XFxuICAgIGhlaWdodDogODMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtMTEsXFxuICAucm93ID4gLmNvbC14cy0xMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDkxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMTEsXFxuICAucm93ID4gLm9mZnNldC14cy0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTExLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMTEge1xcbiAgICBoZWlnaHQ6IDkxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTEyLFxcbiAgLnJvdyA+IC5jb2wteHMtMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMTIsXFxuICAucm93ID4gLm9mZnNldC14cy0xMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtMTIsXFxuICAuY29sdW1uID4gLmNvbC14cy0xMiB7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLnJvdyA+IC5jb2wtc20sXFxuICAucm93ID4gLmNvbC1zbS1hdXRvLFxcbiAgLnJvdyA+IC5jb2wtc20tZ3JvdyxcXG4gIC5yb3cgPiAuY29sLXNtLTAsXFxuICAucm93ID4gLmNvbC1zbS0xLFxcbiAgLnJvdyA+IC5jb2wtc20tMixcXG4gIC5yb3cgPiAuY29sLXNtLTMsXFxuICAucm93ID4gLmNvbC1zbS00LFxcbiAgLnJvdyA+IC5jb2wtc20tNSxcXG4gIC5yb3cgPiAuY29sLXNtLTYsXFxuICAucm93ID4gLmNvbC1zbS03LFxcbiAgLnJvdyA+IC5jb2wtc20tOCxcXG4gIC5yb3cgPiAuY29sLXNtLTksXFxuICAucm93ID4gLmNvbC1zbS0xMCxcXG4gIC5yb3cgPiAuY29sLXNtLTExLFxcbiAgLnJvdyA+IC5jb2wtc20tMTIsXFxuICAuZmxleCA+IC5jb2wtc20sXFxuICAuZmxleCA+IC5jb2wtc20tYXV0byxcXG4gIC5mbGV4ID4gLmNvbC1zbS1ncm93LFxcbiAgLmZsZXggPiAuY29sLXNtLTAsXFxuICAuZmxleCA+IC5jb2wtc20tMSxcXG4gIC5mbGV4ID4gLmNvbC1zbS0yLFxcbiAgLmZsZXggPiAuY29sLXNtLTMsXFxuICAuZmxleCA+IC5jb2wtc20tNCxcXG4gIC5mbGV4ID4gLmNvbC1zbS01LFxcbiAgLmZsZXggPiAuY29sLXNtLTYsXFxuICAuZmxleCA+IC5jb2wtc20tNyxcXG4gIC5mbGV4ID4gLmNvbC1zbS04LFxcbiAgLmZsZXggPiAuY29sLXNtLTksXFxuICAuZmxleCA+IC5jb2wtc20tMTAsXFxuICAuZmxleCA+IC5jb2wtc20tMTEsXFxuICAuZmxleCA+IC5jb2wtc20tMTIge1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgbWluLXdpZHRoOiAwO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbSxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLWF1dG8sXFxuICAuY29sdW1uID4gLmNvbC1zbS1ncm93LFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMCxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTEsXFxuICAuY29sdW1uID4gLmNvbC1zbS0yLFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMyxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTQsXFxuICAuY29sdW1uID4gLmNvbC1zbS01LFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNixcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTcsXFxuICAuY29sdW1uID4gLmNvbC1zbS04LFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tOSxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTEwLFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMTEsXFxuICAuY29sdW1uID4gLmNvbC1zbS0xMixcXG4gIC5mbGV4ID4gLmNvbC1zbSxcXG4gIC5mbGV4ID4gLmNvbC1zbS1hdXRvLFxcbiAgLmZsZXggPiAuY29sLXNtLWdyb3csXFxuICAuZmxleCA+IC5jb2wtc20tMCxcXG4gIC5mbGV4ID4gLmNvbC1zbS0xLFxcbiAgLmZsZXggPiAuY29sLXNtLTIsXFxuICAuZmxleCA+IC5jb2wtc20tMyxcXG4gIC5mbGV4ID4gLmNvbC1zbS00LFxcbiAgLmZsZXggPiAuY29sLXNtLTUsXFxuICAuZmxleCA+IC5jb2wtc20tNixcXG4gIC5mbGV4ID4gLmNvbC1zbS03LFxcbiAgLmZsZXggPiAuY29sLXNtLTgsXFxuICAuZmxleCA+IC5jb2wtc20tOSxcXG4gIC5mbGV4ID4gLmNvbC1zbS0xMCxcXG4gIC5mbGV4ID4gLmNvbC1zbS0xMSxcXG4gIC5mbGV4ID4gLmNvbC1zbS0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgbWluLWhlaWdodDogMDtcXG4gICAgbWF4LWhlaWdodDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtc20ge1xcbiAgICAtbXMtZmxleDogMTAwMDAgMSAwJTtcXG4gICAgICAgIGZsZXg6IDEwMDAwIDEgMCU7XFxuICB9XFxuICAuY29sLXNtLWF1dG8sXFxuICAuY29sLXNtLTAsXFxuICAuY29sLXNtLTEsXFxuICAuY29sLXNtLTIsXFxuICAuY29sLXNtLTMsXFxuICAuY29sLXNtLTQsXFxuICAuY29sLXNtLTUsXFxuICAuY29sLXNtLTYsXFxuICAuY29sLXNtLTcsXFxuICAuY29sLXNtLTgsXFxuICAuY29sLXNtLTksXFxuICAuY29sLXNtLTEwLFxcbiAgLmNvbC1zbS0xMSxcXG4gIC5jb2wtc20tMTIge1xcbiAgICAtbXMtZmxleDogMCAwIGF1dG87XFxuICAgICAgICBmbGV4OiAwIDAgYXV0bztcXG4gIH1cXG4gIC5jb2wtc20tZ3JvdyB7XFxuICAgIC1tcy1mbGV4OiAxIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDEgMCBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTAge1xcbiAgICBoZWlnaHQ6IDAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMSB7XFxuICAgIGhlaWdodDogOC4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS0yIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMiB7XFxuICAgIGhlaWdodDogMTYuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tMyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMyB7XFxuICAgIGhlaWdodDogMjUlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTQge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS00IHtcXG4gICAgaGVpZ2h0OiAzMy4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS01IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNDEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNSB7XFxuICAgIGhlaWdodDogNDEuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tNiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNiB7XFxuICAgIGhlaWdodDogNTAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTcge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS03IHtcXG4gICAgaGVpZ2h0OiA1OC4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS04IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNjYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS04IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tOCB7XFxuICAgIGhlaWdodDogNjYuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tOSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tOSB7XFxuICAgIGhlaWdodDogNzUlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTEwIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogODMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS0xMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTEwIHtcXG4gICAgaGVpZ2h0OiA4My4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS0xMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDkxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS0xMSB7XFxuICAgIGhlaWdodDogOTEuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTEyIHtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAucm93ID4gLmNvbC1tZCxcXG4gIC5yb3cgPiAuY29sLW1kLWF1dG8sXFxuICAucm93ID4gLmNvbC1tZC1ncm93LFxcbiAgLnJvdyA+IC5jb2wtbWQtMCxcXG4gIC5yb3cgPiAuY29sLW1kLTEsXFxuICAucm93ID4gLmNvbC1tZC0yLFxcbiAgLnJvdyA+IC5jb2wtbWQtMyxcXG4gIC5yb3cgPiAuY29sLW1kLTQsXFxuICAucm93ID4gLmNvbC1tZC01LFxcbiAgLnJvdyA+IC5jb2wtbWQtNixcXG4gIC5yb3cgPiAuY29sLW1kLTcsXFxuICAucm93ID4gLmNvbC1tZC04LFxcbiAgLnJvdyA+IC5jb2wtbWQtOSxcXG4gIC5yb3cgPiAuY29sLW1kLTEwLFxcbiAgLnJvdyA+IC5jb2wtbWQtMTEsXFxuICAucm93ID4gLmNvbC1tZC0xMixcXG4gIC5mbGV4ID4gLmNvbC1tZCxcXG4gIC5mbGV4ID4gLmNvbC1tZC1hdXRvLFxcbiAgLmZsZXggPiAuY29sLW1kLWdyb3csXFxuICAuZmxleCA+IC5jb2wtbWQtMCxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xLFxcbiAgLmZsZXggPiAuY29sLW1kLTIsXFxuICAuZmxleCA+IC5jb2wtbWQtMyxcXG4gIC5mbGV4ID4gLmNvbC1tZC00LFxcbiAgLmZsZXggPiAuY29sLW1kLTUsXFxuICAuZmxleCA+IC5jb2wtbWQtNixcXG4gIC5mbGV4ID4gLmNvbC1tZC03LFxcbiAgLmZsZXggPiAuY29sLW1kLTgsXFxuICAuZmxleCA+IC5jb2wtbWQtOSxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMCxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMSxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMiB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtaW4td2lkdGg6IDA7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtYXV0byxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLWdyb3csXFxuICAuY29sdW1uID4gLmNvbC1tZC0wLFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMSxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTIsXFxuICAuY29sdW1uID4gLmNvbC1tZC0zLFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtNCxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTUsXFxuICAuY29sdW1uID4gLmNvbC1tZC02LFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtNyxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTgsXFxuICAuY29sdW1uID4gLmNvbC1tZC05LFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMTAsXFxuICAuY29sdW1uID4gLmNvbC1tZC0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTEyLFxcbiAgLmZsZXggPiAuY29sLW1kLFxcbiAgLmZsZXggPiAuY29sLW1kLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtbWQtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC1tZC0wLFxcbiAgLmZsZXggPiAuY29sLW1kLTEsXFxuICAuZmxleCA+IC5jb2wtbWQtMixcXG4gIC5mbGV4ID4gLmNvbC1tZC0zLFxcbiAgLmZsZXggPiAuY29sLW1kLTQsXFxuICAuZmxleCA+IC5jb2wtbWQtNSxcXG4gIC5mbGV4ID4gLmNvbC1tZC02LFxcbiAgLmZsZXggPiAuY29sLW1kLTcsXFxuICAuZmxleCA+IC5jb2wtbWQtOCxcXG4gIC5mbGV4ID4gLmNvbC1tZC05LFxcbiAgLmZsZXggPiAuY29sLW1kLTEwLFxcbiAgLmZsZXggPiAuY29sLW1kLTExLFxcbiAgLmZsZXggPiAuY29sLW1kLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1tZCB7XFxuICAgIC1tcy1mbGV4OiAxMDAwMCAxIDAlO1xcbiAgICAgICAgZmxleDogMTAwMDAgMSAwJTtcXG4gIH1cXG4gIC5jb2wtbWQtYXV0byxcXG4gIC5jb2wtbWQtMCxcXG4gIC5jb2wtbWQtMSxcXG4gIC5jb2wtbWQtMixcXG4gIC5jb2wtbWQtMyxcXG4gIC5jb2wtbWQtNCxcXG4gIC5jb2wtbWQtNSxcXG4gIC5jb2wtbWQtNixcXG4gIC5jb2wtbWQtNyxcXG4gIC5jb2wtbWQtOCxcXG4gIC5jb2wtbWQtOSxcXG4gIC5jb2wtbWQtMTAsXFxuICAuY29sLW1kLTExLFxcbiAgLmNvbC1tZC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgfVxcbiAgLmNvbC1tZC1ncm93IHtcXG4gICAgLW1zLWZsZXg6IDEgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMSAwIGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC0wIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMCB7XFxuICAgIGhlaWdodDogMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC0xIHtcXG4gICAgaGVpZ2h0OiA4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxNi42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC0yIHtcXG4gICAgaGVpZ2h0OiAxNi42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC0zIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMjUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC0zIHtcXG4gICAgaGVpZ2h0OiAyNSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtNCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTQge1xcbiAgICBoZWlnaHQ6IDMzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTUge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA0MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC01IHtcXG4gICAgaGVpZ2h0OiA0MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC02IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC02IHtcXG4gICAgaGVpZ2h0OiA1MCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtNyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTcge1xcbiAgICBoZWlnaHQ6IDU4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTgge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC04IHtcXG4gICAgaGVpZ2h0OiA2Ni42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC05IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNzUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC05IHtcXG4gICAgaGVpZ2h0OiA3NSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtMTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4My4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMTAge1xcbiAgICBoZWlnaHQ6IDgzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTExIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOTEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTExIHtcXG4gICAgaGVpZ2h0OiA5MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0xMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMTIge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5yb3cgPiAuY29sLWxnLFxcbiAgLnJvdyA+IC5jb2wtbGctYXV0byxcXG4gIC5yb3cgPiAuY29sLWxnLWdyb3csXFxuICAucm93ID4gLmNvbC1sZy0wLFxcbiAgLnJvdyA+IC5jb2wtbGctMSxcXG4gIC5yb3cgPiAuY29sLWxnLTIsXFxuICAucm93ID4gLmNvbC1sZy0zLFxcbiAgLnJvdyA+IC5jb2wtbGctNCxcXG4gIC5yb3cgPiAuY29sLWxnLTUsXFxuICAucm93ID4gLmNvbC1sZy02LFxcbiAgLnJvdyA+IC5jb2wtbGctNyxcXG4gIC5yb3cgPiAuY29sLWxnLTgsXFxuICAucm93ID4gLmNvbC1sZy05LFxcbiAgLnJvdyA+IC5jb2wtbGctMTAsXFxuICAucm93ID4gLmNvbC1sZy0xMSxcXG4gIC5yb3cgPiAuY29sLWxnLTEyLFxcbiAgLmZsZXggPiAuY29sLWxnLFxcbiAgLmZsZXggPiAuY29sLWxnLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtbGctZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC1sZy0wLFxcbiAgLmZsZXggPiAuY29sLWxnLTEsXFxuICAuZmxleCA+IC5jb2wtbGctMixcXG4gIC5mbGV4ID4gLmNvbC1sZy0zLFxcbiAgLmZsZXggPiAuY29sLWxnLTQsXFxuICAuZmxleCA+IC5jb2wtbGctNSxcXG4gIC5mbGV4ID4gLmNvbC1sZy02LFxcbiAgLmZsZXggPiAuY29sLWxnLTcsXFxuICAuZmxleCA+IC5jb2wtbGctOCxcXG4gIC5mbGV4ID4gLmNvbC1sZy05LFxcbiAgLmZsZXggPiAuY29sLWxnLTEwLFxcbiAgLmZsZXggPiAuY29sLWxnLTExLFxcbiAgLmZsZXggPiAuY29sLWxnLTEyIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1pbi13aWR0aDogMDtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGcsXFxuICAuY29sdW1uID4gLmNvbC1sZy1hdXRvLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctZ3JvdyxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTAsXFxuICAuY29sdW1uID4gLmNvbC1sZy0xLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMixcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTMsXFxuICAuY29sdW1uID4gLmNvbC1sZy00LFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctNSxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTYsXFxuICAuY29sdW1uID4gLmNvbC1sZy03LFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctOCxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTksXFxuICAuY29sdW1uID4gLmNvbC1sZy0xMCxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTExLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMTIsXFxuICAuZmxleCA+IC5jb2wtbGcsXFxuICAuZmxleCA+IC5jb2wtbGctYXV0byxcXG4gIC5mbGV4ID4gLmNvbC1sZy1ncm93LFxcbiAgLmZsZXggPiAuY29sLWxnLTAsXFxuICAuZmxleCA+IC5jb2wtbGctMSxcXG4gIC5mbGV4ID4gLmNvbC1sZy0yLFxcbiAgLmZsZXggPiAuY29sLWxnLTMsXFxuICAuZmxleCA+IC5jb2wtbGctNCxcXG4gIC5mbGV4ID4gLmNvbC1sZy01LFxcbiAgLmZsZXggPiAuY29sLWxnLTYsXFxuICAuZmxleCA+IC5jb2wtbGctNyxcXG4gIC5mbGV4ID4gLmNvbC1sZy04LFxcbiAgLmZsZXggPiAuY29sLWxnLTksXFxuICAuZmxleCA+IC5jb2wtbGctMTAsXFxuICAuZmxleCA+IC5jb2wtbGctMTEsXFxuICAuZmxleCA+IC5jb2wtbGctMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIG1pbi1oZWlnaHQ6IDA7XFxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XFxuICB9XFxuICAuY29sLWxnIHtcXG4gICAgLW1zLWZsZXg6IDEwMDAwIDEgMCU7XFxuICAgICAgICBmbGV4OiAxMDAwMCAxIDAlO1xcbiAgfVxcbiAgLmNvbC1sZy1hdXRvLFxcbiAgLmNvbC1sZy0wLFxcbiAgLmNvbC1sZy0xLFxcbiAgLmNvbC1sZy0yLFxcbiAgLmNvbC1sZy0zLFxcbiAgLmNvbC1sZy00LFxcbiAgLmNvbC1sZy01LFxcbiAgLmNvbC1sZy02LFxcbiAgLmNvbC1sZy03LFxcbiAgLmNvbC1sZy04LFxcbiAgLmNvbC1sZy05LFxcbiAgLmNvbC1sZy0xMCxcXG4gIC5jb2wtbGctMTEsXFxuICAuY29sLWxnLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMCAwIGF1dG87XFxuICB9XFxuICAuY29sLWxnLWdyb3cge1xcbiAgICAtbXMtZmxleDogMSAwIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDAgYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0wIHtcXG4gICAgaGVpZ2h0OiAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy0xIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTEge1xcbiAgICBoZWlnaHQ6IDguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDE2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTIge1xcbiAgICBoZWlnaHQ6IDE2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTMge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAyNSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTMge1xcbiAgICBoZWlnaHQ6IDI1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy00IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMzMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctNCB7XFxuICAgIGhlaWdodDogMzMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctNSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDQxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTUge1xcbiAgICBoZWlnaHQ6IDQxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTYge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1MCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTYge1xcbiAgICBoZWlnaHQ6IDUwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy03IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctNyB7XFxuICAgIGhlaWdodDogNTguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctOCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDY2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTgge1xcbiAgICBoZWlnaHQ6IDY2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTkge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA3NSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTkge1xcbiAgICBoZWlnaHQ6IDc1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy0xMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0xMCB7XFxuICAgIGhlaWdodDogODMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctMTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA5MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMTEge1xcbiAgICBoZWlnaHQ6IDkxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTEyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0xMiB7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5yb3cgPiAuY29sLXhsLFxcbiAgLnJvdyA+IC5jb2wteGwtYXV0byxcXG4gIC5yb3cgPiAuY29sLXhsLWdyb3csXFxuICAucm93ID4gLmNvbC14bC0wLFxcbiAgLnJvdyA+IC5jb2wteGwtMSxcXG4gIC5yb3cgPiAuY29sLXhsLTIsXFxuICAucm93ID4gLmNvbC14bC0zLFxcbiAgLnJvdyA+IC5jb2wteGwtNCxcXG4gIC5yb3cgPiAuY29sLXhsLTUsXFxuICAucm93ID4gLmNvbC14bC02LFxcbiAgLnJvdyA+IC5jb2wteGwtNyxcXG4gIC5yb3cgPiAuY29sLXhsLTgsXFxuICAucm93ID4gLmNvbC14bC05LFxcbiAgLnJvdyA+IC5jb2wteGwtMTAsXFxuICAucm93ID4gLmNvbC14bC0xMSxcXG4gIC5yb3cgPiAuY29sLXhsLTEyLFxcbiAgLmZsZXggPiAuY29sLXhsLFxcbiAgLmZsZXggPiAuY29sLXhsLWF1dG8sXFxuICAuZmxleCA+IC5jb2wteGwtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC14bC0wLFxcbiAgLmZsZXggPiAuY29sLXhsLTEsXFxuICAuZmxleCA+IC5jb2wteGwtMixcXG4gIC5mbGV4ID4gLmNvbC14bC0zLFxcbiAgLmZsZXggPiAuY29sLXhsLTQsXFxuICAuZmxleCA+IC5jb2wteGwtNSxcXG4gIC5mbGV4ID4gLmNvbC14bC02LFxcbiAgLmZsZXggPiAuY29sLXhsLTcsXFxuICAuZmxleCA+IC5jb2wteGwtOCxcXG4gIC5mbGV4ID4gLmNvbC14bC05LFxcbiAgLmZsZXggPiAuY29sLXhsLTEwLFxcbiAgLmZsZXggPiAuY29sLXhsLTExLFxcbiAgLmZsZXggPiAuY29sLXhsLTEyIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1pbi13aWR0aDogMDtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwsXFxuICAuY29sdW1uID4gLmNvbC14bC1hdXRvLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtZ3JvdyxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTAsXFxuICAuY29sdW1uID4gLmNvbC14bC0xLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMixcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTMsXFxuICAuY29sdW1uID4gLmNvbC14bC00LFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtNSxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTYsXFxuICAuY29sdW1uID4gLmNvbC14bC03LFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtOCxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTksXFxuICAuY29sdW1uID4gLmNvbC14bC0xMCxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTExLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMTIsXFxuICAuZmxleCA+IC5jb2wteGwsXFxuICAuZmxleCA+IC5jb2wteGwtYXV0byxcXG4gIC5mbGV4ID4gLmNvbC14bC1ncm93LFxcbiAgLmZsZXggPiAuY29sLXhsLTAsXFxuICAuZmxleCA+IC5jb2wteGwtMSxcXG4gIC5mbGV4ID4gLmNvbC14bC0yLFxcbiAgLmZsZXggPiAuY29sLXhsLTMsXFxuICAuZmxleCA+IC5jb2wteGwtNCxcXG4gIC5mbGV4ID4gLmNvbC14bC01LFxcbiAgLmZsZXggPiAuY29sLXhsLTYsXFxuICAuZmxleCA+IC5jb2wteGwtNyxcXG4gIC5mbGV4ID4gLmNvbC14bC04LFxcbiAgLmZsZXggPiAuY29sLXhsLTksXFxuICAuZmxleCA+IC5jb2wteGwtMTAsXFxuICAuZmxleCA+IC5jb2wteGwtMTEsXFxuICAuZmxleCA+IC5jb2wteGwtMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIG1pbi1oZWlnaHQ6IDA7XFxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XFxuICB9XFxuICAuY29sLXhsIHtcXG4gICAgLW1zLWZsZXg6IDEwMDAwIDEgMCU7XFxuICAgICAgICBmbGV4OiAxMDAwMCAxIDAlO1xcbiAgfVxcbiAgLmNvbC14bC1hdXRvLFxcbiAgLmNvbC14bC0wLFxcbiAgLmNvbC14bC0xLFxcbiAgLmNvbC14bC0yLFxcbiAgLmNvbC14bC0zLFxcbiAgLmNvbC14bC00LFxcbiAgLmNvbC14bC01LFxcbiAgLmNvbC14bC02LFxcbiAgLmNvbC14bC03LFxcbiAgLmNvbC14bC04LFxcbiAgLmNvbC14bC05LFxcbiAgLmNvbC14bC0xMCxcXG4gIC5jb2wteGwtMTEsXFxuICAuY29sLXhsLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMCAwIGF1dG87XFxuICB9XFxuICAuY29sLXhsLWdyb3cge1xcbiAgICAtbXMtZmxleDogMSAwIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDAgYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0wIHtcXG4gICAgaGVpZ2h0OiAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC0xIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTEge1xcbiAgICBoZWlnaHQ6IDguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDE2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTIge1xcbiAgICBoZWlnaHQ6IDE2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTMge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAyNSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTMge1xcbiAgICBoZWlnaHQ6IDI1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC00IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMzMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtNCB7XFxuICAgIGhlaWdodDogMzMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtNSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDQxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTUge1xcbiAgICBoZWlnaHQ6IDQxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTYge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1MCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTYge1xcbiAgICBoZWlnaHQ6IDUwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC03IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtNyB7XFxuICAgIGhlaWdodDogNTguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtOCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDY2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTgge1xcbiAgICBoZWlnaHQ6IDY2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTkge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA3NSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTkge1xcbiAgICBoZWlnaHQ6IDc1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC0xMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0xMCB7XFxuICAgIGhlaWdodDogODMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtMTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA5MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMTEge1xcbiAgICBoZWlnaHQ6IDkxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTEyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0xMiB7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxufVxcbi5iYWNrZHJvcCB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMHZ3O1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjI4cyBlYXNlLWluO1xcbn1cXG4uYmFja2Ryb3AuYWN0aXZlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjMpO1xcbn1cXG4ucm91bmQtYm9yZGVycyB7XFxuICBib3JkZXItcmFkaXVzOiAzcHggIWltcG9ydGFudDtcXG59XFxuLmdlbmVyaWMtbWFyZ2luLFxcbi5ncm91cCA+ICoge1xcbiAgbWFyZ2luOiA1cHg7XFxufVxcbi5uby10cmFuc2l0aW9uIHtcXG4gIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLnRyYW5zaXRpb24tMCB7XFxuICB0cmFuc2l0aW9uOiAwcyAhaW1wb3J0YW50O1xcbn1cXG4uZ2xvc3N5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LDI1NSwyNTUsMC4zKSwgcmdiYSgyNTUsMjU1LDI1NSwwKSA1MCUsIHJnYmEoMCwwLDAsMC4xMikgNTElLCByZ2JhKDAsMCwwLDAuMDQpKSAhaW1wb3J0YW50O1xcbn1cXG4ucS1wbGFjZWhvbGRlcjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIG9wYWNpdHk6IDAuNTtcXG59XFxuLnEtcGxhY2Vob2xkZXI6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIG9wYWNpdHk6IDAuNTtcXG59XFxuLnEtYm9keS1mdWxsc2NyZWVuLW1peGluLFxcbi5xLWJvZHktcHJldmVudC1zY3JvbGwge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbn1cXG4ucS1uby1pbnB1dC1zcGlubmVyIHtcXG4gIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkICFpbXBvcnRhbnQ7XFxufVxcbi5xLW5vLWlucHV0LXNwaW5uZXI6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXFxuLnEtbm8taW5wdXQtc3Bpbm5lcjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICBtYXJnaW46IDA7XFxufVxcbmEucS1saW5rIHtcXG4gIG91dGxpbmU6IDA7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuLnEtc2VsZWN0LWhpZ2hsaWdodCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDE4OSwxODksMTg5LDAuNSkgIWltcG9ydGFudDtcXG59XFxuLmhpZ2hsaWdodC1hbmQtZmFkZSB7XFxuICBhbmltYXRpb246IHEtaGlnaGxpZ2h0IDJzIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi50cmFuc2l0aW9uLWdlbmVyaWMge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XFxufVxcbi5hbmltYXRlLXNwaW4sXFxuLmFuaW1hdGUtc3Bpbi1yZXZlcnNlIHtcXG4gIGFuaW1hdGlvbjogcS1zcGluIDJzIGluZmluaXRlIGxpbmVhciAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1zcGluLXJldmVyc2Uge1xcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTtcXG59XFxuLmFuaW1hdGUtYmxpbmsge1xcbiAgYW5pbWF0aW9uOiBxLWJsaW5rIDFzIHN0ZXBzKDUsIHN0YXJ0KSBpbmZpbml0ZSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1wb3Age1xcbiAgYW5pbWF0aW9uOiBxLXBvcCAwLjJzIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5hbmltYXRlLXNjYWxlIHtcXG4gIGFuaW1hdGlvbjogcS1zY2FsZSAwLjJzIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5hbmltYXRlLWZhZGUge1xcbiAgYW5pbWF0aW9uOiBxLWZhZGUgMC4ycyAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1ib3VuY2Uge1xcbiAgYW5pbWF0aW9uOiBxLWJvdW5jZSAycyBpbmZpbml0ZSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1zaGFrZSB7XFxuICBhbmltYXRpb246IHEtc2hha2UgMC4xNXM7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtcXG59XFxuLmFuaW1hdGUtcG9wdXAtdXAsXFxuLmFuaW1hdGUtcG9wdXAtZG93biB7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XFxufVxcbi5hbmltYXRlLXBvcHVwLXVwID4gKixcXG4uYW5pbWF0ZS1wb3B1cC1kb3duID4gKiB7XFxuICBhbmltYXRpb246IHEtZmFkZSAwLjgycyBjdWJpYy1iZXppZXIoMC43ODUsIDAuMTM1LCAwLjE1LCAwLjg2KTtcXG59XFxuLmFuaW1hdGUtcG9wdXAtZG93biB7XFxuICBhbmltYXRpb246IHEtcG9wdXAtZG93biAwLjM2cyAvKiBydGw6aWdub3JlICovO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3AgMHB4IC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5hbmltYXRlLXBvcHVwLXVwIHtcXG4gIGFuaW1hdGlvbjogcS1wb3B1cC11cCAwLjM2cyAvKiBydGw6aWdub3JlICovO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBib3R0b20gMHB4IC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5hbmltYXRlLWZhZGUtbGVmdCB7XFxuICBhbmltYXRpb246IHEtZmFkZSAwLjM2cyBjdWJpYy1iZXppZXIoMC43ODUsIDAuMTM1LCAwLjE1LCAwLjg2KSwgcS1zbGlkZS1sZWZ0IDAuMzZzIGVhc2U7XFxufVxcbi5hbmltYXRlLWZhZGUtcmlnaHQge1xcbiAgYW5pbWF0aW9uOiBxLWZhZGUgMC4zNnMgY3ViaWMtYmV6aWVyKDAuNzg1LCAwLjEzNSwgMC4xNSwgMC44NiksIHEtc2xpZGUtcmlnaHQgMC4zNnMgZWFzZTtcXG59XFxuLmFuaW1hdGVkIHtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7XFxuICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xcbn1cXG4uYW5pbWF0ZWQuaW5maW5pdGUge1xcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XFxufVxcbi5hbmltYXRlZC5oaW5nZSB7XFxuICBhbmltYXRpb24tZHVyYXRpb246IDJzO1xcbn1cXG4uYW5pbWF0ZWQuZmxpcE91dFgsXFxuLmFuaW1hdGVkLmZsaXBPdXRZLFxcbi5hbmltYXRlZC5ib3VuY2VJbixcXG4uYW5pbWF0ZWQuYm91bmNlT3V0IHtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogMC43NXM7XFxufVxcbi5ub24tc2VsZWN0YWJsZSB7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lICFpbXBvcnRhbnQ7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lICFpbXBvcnRhbnQ7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lICFpbXBvcnRhbnQ7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5zY3JvbGwge1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxufVxcbi5zY3JvbGwsXFxuLnNjcm9sbC14LFxcbi5zY3JvbGwteSB7XFxuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxuICB3aWxsLWNoYW5nZTogc2Nyb2xsLXBvc2l0aW9uO1xcbn1cXG4uc2Nyb2xsLXgge1xcbiAgb3ZlcmZsb3cteDogYXV0bztcXG59XFxuLnNjcm9sbC15IHtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcbi5uby1zY3JvbGwge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbn1cXG4ubm8tcG9pbnRlci1ldmVudHMge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmFsbC1wb2ludGVyLWV2ZW50cyB7XFxuICBwb2ludGVyLWV2ZW50czogYWxsICFpbXBvcnRhbnQ7XFxufVxcbi5jdXJzb3ItcG9pbnRlciB7XFxuICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDtcXG59XFxuLmN1cnNvci1ub3QtYWxsb3dlZCB7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkICFpbXBvcnRhbnQ7XFxufVxcbi5jdXJzb3ItaW5oZXJpdCB7XFxuICBjdXJzb3I6IGluaGVyaXQgIWltcG9ydGFudDtcXG59XFxuLnJvdGF0ZS00NSB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnJvdGF0ZS05MCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnJvdGF0ZS0xMzUge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucm90YXRlLTE4MCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5yb3RhdGUtMjA1IHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDIwNWRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnJvdGF0ZS0yNzAge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucm90YXRlLTMxNSB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgzMTVkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5mbGlwLWhvcml6b250YWwge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XFxufVxcbi5mbGlwLXZlcnRpY2FsIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xcbn1cXG4uZmxvYXQtbGVmdCB7XFxuICBmbG9hdDogbGVmdDtcXG59XFxuLmZsb2F0LXJpZ2h0IHtcXG4gIGZsb2F0OiByaWdodDtcXG59XFxuLnJlbGF0aXZlLXBvc2l0aW9uIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmZpeGVkLFxcbi5mdWxsc2NyZWVuLFxcbi5maXhlZC1jZW50ZXIsXFxuLmZpeGVkLWJvdHRvbSxcXG4uZml4ZWQtbGVmdCxcXG4uZml4ZWQtcmlnaHQsXFxuLmZpeGVkLXRvcCxcXG4uZml4ZWQtdG9wLWxlZnQsXFxuLmZpeGVkLXRvcC1yaWdodCxcXG4uZml4ZWQtYm90dG9tLWxlZnQsXFxuLmZpeGVkLWJvdHRvbS1yaWdodCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxufVxcbi5hYnNvbHV0ZSxcXG4uYWJzb2x1dGUtZnVsbCxcXG4uYWJzb2x1dGUtY2VudGVyLFxcbi5hYnNvbHV0ZS1ib3R0b20sXFxuLmFic29sdXRlLWxlZnQsXFxuLmFic29sdXRlLXJpZ2h0LFxcbi5hYnNvbHV0ZS10b3AsXFxuLmFic29sdXRlLXRvcC1sZWZ0LFxcbi5hYnNvbHV0ZS10b3AtcmlnaHQsXFxuLmFic29sdXRlLWJvdHRvbS1sZWZ0LFxcbi5hYnNvbHV0ZS1ib3R0b20tcmlnaHQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbn1cXG4uZml4ZWQtdG9wLFxcbi5hYnNvbHV0ZS10b3Age1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbn1cXG4uZml4ZWQtcmlnaHQsXFxuLmFic29sdXRlLXJpZ2h0IHtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbn1cXG4uZml4ZWQtYm90dG9tLFxcbi5hYnNvbHV0ZS1ib3R0b20ge1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbn1cXG4uZml4ZWQtbGVmdCxcXG4uYWJzb2x1dGUtbGVmdCB7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbn1cXG4uZml4ZWQtdG9wLWxlZnQsXFxuLmFic29sdXRlLXRvcC1sZWZ0IHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxufVxcbi5maXhlZC10b3AtcmlnaHQsXFxuLmFic29sdXRlLXRvcC1yaWdodCB7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG59XFxuLmZpeGVkLWJvdHRvbS1sZWZ0LFxcbi5hYnNvbHV0ZS1ib3R0b20tbGVmdCB7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbn1cXG4uZml4ZWQtYm90dG9tLXJpZ2h0LFxcbi5hYnNvbHV0ZS1ib3R0b20tcmlnaHQge1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxufVxcbi5mdWxsc2NyZWVuIHtcXG4gIHotaW5kZXg6IDYwMDA7XFxuICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XFxuICBtYXgtd2lkdGg6IDEwMHZ3O1xcbiAgbWF4LWhlaWdodDogMTAwdmg7XFxufVxcbi5hYnNvbHV0ZS1mdWxsLFxcbi5mdWxsc2NyZWVuIHtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG59XFxuLmZpeGVkLWNlbnRlcixcXG4uYWJzb2x1dGUtY2VudGVyIHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxufVxcbi52ZXJ0aWNhbC10b3Age1xcbiAgdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50O1xcbn1cXG4udmVydGljYWwtbWlkZGxlIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUgIWltcG9ydGFudDtcXG59XFxuLnZlcnRpY2FsLWJvdHRvbSB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tICFpbXBvcnRhbnQ7XFxufVxcbi5vbi1sZWZ0IHtcXG4gIG1hcmdpbi1yaWdodDogMTJweDtcXG59XFxuLm9uLXJpZ2h0IHtcXG4gIG1hcmdpbi1sZWZ0OiAxMnB4O1xcbn1cXG4ucS1yaXBwbGUtY29udGFpbmVyIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB6LWluZGV4OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLXJpcHBsZS1hbmltYXRpb24ge1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMCAvKiBydGw6aWdub3JlICovO1xcbiAgb3BhY2l0eTogMDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgdHJhbnNpdGlvbjogMC4zcyB0cmFuc2Zvcm0gY3ViaWMtYmV6aWVyKDAuMiwgMC40LCAwLjQsIDAuOSksIDAuM3Mgb3BhY2l0eSBjdWJpYy1iZXppZXIoMC4yLCAwLjQsIDAuNCwgMC4xKTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm0sIG9wYWNpdHk7XFxufVxcbi5xLXJpcHBsZS1hbmltYXRpb24tZW50ZXIge1xcbiAgdHJhbnNpdGlvbjogbm9uZTtcXG59XFxuLnEtcmlwcGxlLWFuaW1hdGlvbi12aXNpYmxlIHtcXG4gIG9wYWNpdHk6IDAuMTU7XFxufVxcbi5xLXJhZGlhbC1yaXBwbGUge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtNTAlO1xcbiAgbGVmdDogLTUwJTtcXG4gIHdpZHRoOiAyMDAlO1xcbiAgaGVpZ2h0OiAyMDAlO1xcbn1cXG4ucS1yYWRpYWwtcmlwcGxlOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCBjdXJyZW50Q29sb3IgMTAlLCB0cmFuc3BhcmVudCAxMC4wMSUpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IDUwJTtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMTAsIDEwKTtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cywgb3BhY2l0eSAxcztcXG59XFxuLnEtcmFkaWFsLXJpcHBsZS5hY3RpdmU6YWZ0ZXIge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKTtcXG4gIG9wYWNpdHk6IDAuNDtcXG4gIHRyYW5zaXRpb246IDBzO1xcbn1cXG46cm9vdCB7XFxuICAtLXEtc2l6ZS14czogMDtcXG4gIC0tcS1zaXplLXNtOiA1NzZweDtcXG4gIC0tcS1zaXplLW1kOiA3NjhweDtcXG4gIC0tcS1zaXplLWxnOiA5OTJweDtcXG4gIC0tcS1zaXplLXhsOiAxMjAwcHg7XFxufVxcbi5maXQge1xcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcXG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG4uZnVsbC1oZWlnaHQge1xcbiAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XFxufVxcbi5mdWxsLXdpZHRoIHtcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxuICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcbi53aW5kb3ctaGVpZ2h0IHtcXG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcXG4gIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIGhlaWdodDogMTAwdmggIWltcG9ydGFudDtcXG59XFxuLndpbmRvdy13aWR0aCB7XFxuICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB3aWR0aDogMTAwdncgIWltcG9ydGFudDtcXG59XFxuLmJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxufVxcbi5pbmxpbmUtYmxvY2sge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XFxufVxcbi5xLXBhLW5vbmUge1xcbiAgcGFkZGluZzogMCAwO1xcbn1cXG4ucS1wbC1ub25lLFxcbi5xLXB4LW5vbmUge1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG4ucS1wci1ub25lLFxcbi5xLXB4LW5vbmUge1xcbiAgcGFkZGluZy1yaWdodDogMDtcXG59XFxuLnEtcHQtbm9uZSxcXG4ucS1weS1ub25lIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4ucS1wYi1ub25lLFxcbi5xLXB5LW5vbmUge1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxufVxcbi5xLW1hLW5vbmUge1xcbiAgbWFyZ2luOiAwIDA7XFxufVxcbi5xLW1sLW5vbmUsXFxuLnEtbXgtbm9uZSB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuLnEtbXItbm9uZSxcXG4ucS1teC1ub25lIHtcXG4gIG1hcmdpbi1yaWdodDogMDtcXG59XFxuLnEtbXQtbm9uZSxcXG4ucS1teS1ub25lIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi5xLW1iLW5vbmUsXFxuLnEtbXktbm9uZSB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG4ucS1wYS14cyB7XFxuICBwYWRkaW5nOiA0cHggNHB4O1xcbn1cXG4ucS1wbC14cyxcXG4ucS1weC14cyB7XFxuICBwYWRkaW5nLWxlZnQ6IDRweDtcXG59XFxuLnEtcHIteHMsXFxuLnEtcHgteHMge1xcbiAgcGFkZGluZy1yaWdodDogNHB4O1xcbn1cXG4ucS1wdC14cyxcXG4ucS1weS14cyB7XFxuICBwYWRkaW5nLXRvcDogNHB4O1xcbn1cXG4ucS1wYi14cyxcXG4ucS1weS14cyB7XFxuICBwYWRkaW5nLWJvdHRvbTogNHB4O1xcbn1cXG4ucS1tYS14cyB7XFxuICBtYXJnaW46IDRweCA0cHg7XFxufVxcbi5xLW1sLXhzLFxcbi5xLW14LXhzIHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxufVxcbi5xLW1yLXhzLFxcbi5xLW14LXhzIHtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG4ucS1tdC14cyxcXG4ucS1teS14cyB7XFxuICBtYXJnaW4tdG9wOiA0cHg7XFxufVxcbi5xLW1iLXhzLFxcbi5xLW15LXhzIHtcXG4gIG1hcmdpbi1ib3R0b206IDRweDtcXG59XFxuLnEtcGEtc20ge1xcbiAgcGFkZGluZzogOHB4IDhweDtcXG59XFxuLnEtcGwtc20sXFxuLnEtcHgtc20ge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XFxufVxcbi5xLXByLXNtLFxcbi5xLXB4LXNtIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcXG59XFxuLnEtcHQtc20sXFxuLnEtcHktc20ge1xcbiAgcGFkZGluZy10b3A6IDhweDtcXG59XFxuLnEtcGItc20sXFxuLnEtcHktc20ge1xcbiAgcGFkZGluZy1ib3R0b206IDhweDtcXG59XFxuLnEtbWEtc20ge1xcbiAgbWFyZ2luOiA4cHggOHB4O1xcbn1cXG4ucS1tbC1zbSxcXG4ucS1teC1zbSB7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG4ucS1tci1zbSxcXG4ucS1teC1zbSB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnEtbXQtc20sXFxuLnEtbXktc20ge1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbn1cXG4ucS1tYi1zbSxcXG4ucS1teS1zbSB7XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XFxufVxcbi5xLXBhLW1kIHtcXG4gIHBhZGRpbmc6IDE2cHggMTZweDtcXG59XFxuLnEtcGwtbWQsXFxuLnEtcHgtbWQge1xcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xcbn1cXG4ucS1wci1tZCxcXG4ucS1weC1tZCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNnB4O1xcbn1cXG4ucS1wdC1tZCxcXG4ucS1weS1tZCB7XFxuICBwYWRkaW5nLXRvcDogMTZweDtcXG59XFxuLnEtcGItbWQsXFxuLnEtcHktbWQge1xcbiAgcGFkZGluZy1ib3R0b206IDE2cHg7XFxufVxcbi5xLW1hLW1kIHtcXG4gIG1hcmdpbjogMTZweCAxNnB4O1xcbn1cXG4ucS1tbC1tZCxcXG4ucS1teC1tZCB7XFxuICBtYXJnaW4tbGVmdDogMTZweDtcXG59XFxuLnEtbXItbWQsXFxuLnEtbXgtbWQge1xcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xcbn1cXG4ucS1tdC1tZCxcXG4ucS1teS1tZCB7XFxuICBtYXJnaW4tdG9wOiAxNnB4O1xcbn1cXG4ucS1tYi1tZCxcXG4ucS1teS1tZCB7XFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbn1cXG4ucS1wYS1sZyB7XFxuICBwYWRkaW5nOiAyNHB4IDI0cHg7XFxufVxcbi5xLXBsLWxnLFxcbi5xLXB4LWxnIHtcXG4gIHBhZGRpbmctbGVmdDogMjRweDtcXG59XFxuLnEtcHItbGcsXFxuLnEtcHgtbGcge1xcbiAgcGFkZGluZy1yaWdodDogMjRweDtcXG59XFxuLnEtcHQtbGcsXFxuLnEtcHktbGcge1xcbiAgcGFkZGluZy10b3A6IDI0cHg7XFxufVxcbi5xLXBiLWxnLFxcbi5xLXB5LWxnIHtcXG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xcbn1cXG4ucS1tYS1sZyB7XFxuICBtYXJnaW46IDI0cHggMjRweDtcXG59XFxuLnEtbWwtbGcsXFxuLnEtbXgtbGcge1xcbiAgbWFyZ2luLWxlZnQ6IDI0cHg7XFxufVxcbi5xLW1yLWxnLFxcbi5xLW14LWxnIHtcXG4gIG1hcmdpbi1yaWdodDogMjRweDtcXG59XFxuLnEtbXQtbGcsXFxuLnEtbXktbGcge1xcbiAgbWFyZ2luLXRvcDogMjRweDtcXG59XFxuLnEtbWItbGcsXFxuLnEtbXktbGcge1xcbiAgbWFyZ2luLWJvdHRvbTogMjRweDtcXG59XFxuLnEtcGEteGwge1xcbiAgcGFkZGluZzogNDhweCA0OHB4O1xcbn1cXG4ucS1wbC14bCxcXG4ucS1weC14bCB7XFxuICBwYWRkaW5nLWxlZnQ6IDQ4cHg7XFxufVxcbi5xLXByLXhsLFxcbi5xLXB4LXhsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDQ4cHg7XFxufVxcbi5xLXB0LXhsLFxcbi5xLXB5LXhsIHtcXG4gIHBhZGRpbmctdG9wOiA0OHB4O1xcbn1cXG4ucS1wYi14bCxcXG4ucS1weS14bCB7XFxuICBwYWRkaW5nLWJvdHRvbTogNDhweDtcXG59XFxuLnEtbWEteGwge1xcbiAgbWFyZ2luOiA0OHB4IDQ4cHg7XFxufVxcbi5xLW1sLXhsLFxcbi5xLW14LXhsIHtcXG4gIG1hcmdpbi1sZWZ0OiA0OHB4O1xcbn1cXG4ucS1tci14bCxcXG4ucS1teC14bCB7XFxuICBtYXJnaW4tcmlnaHQ6IDQ4cHg7XFxufVxcbi5xLW10LXhsLFxcbi5xLW15LXhsIHtcXG4gIG1hcmdpbi10b3A6IDQ4cHg7XFxufVxcbi5xLW1iLXhsLFxcbi5xLW15LXhsIHtcXG4gIG1hcmdpbi1ib3R0b206IDQ4cHg7XFxufVxcbi5xLW1sLWF1dG8sXFxuLnEtbXgtYXV0byB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuLnEtbXItYXV0byxcXG4ucS1teC1hdXRvIHtcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuLnEtbXktZm9ybSB7XFxuICBtYXJnaW4tdG9wOiAxNnB4O1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4ucS10b3VjaCB7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgdXNlci1kcmFnOiBub25lO1xcbiAgLWtodG1sLXVzZXItZHJhZzogbm9uZTtcXG4gIC13ZWJraXQtdXNlci1kcmFnOiBub25lO1xcbn1cXG4ucS10b3VjaC14IHtcXG4gIC1tcy10b3VjaC1hY3Rpb246IHBhbi14O1xcbiAgICAgIHRvdWNoLWFjdGlvbjogcGFuLXg7XFxufVxcbi5xLXRvdWNoLXkge1xcbiAgLW1zLXRvdWNoLWFjdGlvbjogcGFuLXk7XFxuICAgICAgdG91Y2gtYWN0aW9uOiBwYW4teTtcXG59XFxuYm9keSB7XFxuICBtaW4td2lkdGg6IDEwMHB4O1xcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCAnLWFwcGxlLXN5c3RlbScsICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XFxuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcXG4gIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBjb2xvcjogIzBjMGMwYztcXG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xcbn1cXG5oMSB7XFxuICBmb250LXNpemU6IDExMnB4O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjEyO1xcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoMSB7XFxuICAgIGZvbnQtc2l6ZTogNjcuMnB4O1xcbiAgfVxcbn1cXG5oMiB7XFxuICBmb250LXNpemU6IDU2cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMzU7XFxuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIGgyIHtcXG4gICAgZm9udC1zaXplOiAzMy42cHg7XFxuICB9XFxufVxcbmgzIHtcXG4gIGZvbnQtc2l6ZTogNDVweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogNDhweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoMyB7XFxuICAgIGZvbnQtc2l6ZTogMjdweDtcXG4gIH1cXG59XFxuaDQge1xcbiAgZm9udC1zaXplOiAzNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIGg0IHtcXG4gICAgZm9udC1zaXplOiAyMC40cHg7XFxuICB9XFxufVxcbmg1IHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoNSB7XFxuICAgIGZvbnQtc2l6ZTogMTQuMzk5OTk5OTk5OTk5OTk5cHg7XFxuICB9XFxufVxcbmg2IHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBsaW5lLWhlaWdodDogMS4xMjtcXG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoNiB7XFxuICAgIGZvbnQtc2l6ZTogMTJweDtcXG4gIH1cXG59XFxuLnEtZGlzcGxheS00LW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC41NDtcXG59XFxuLnEtZGlzcGxheS00IHtcXG4gIGZvbnQtc2l6ZTogMTEycHg7XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMTI7XFxuICBsZXR0ZXItc3BhY2luZzogLTAuMDRlbTtcXG59XFxuLnEtZGlzcGxheS0zLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC41NDtcXG59XFxuLnEtZGlzcGxheS0zIHtcXG4gIGZvbnQtc2l6ZTogNTZweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS4zNTtcXG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xcbn1cXG4ucS1kaXNwbGF5LTItb3BhY2l0eSB7XFxuICBvcGFjaXR5OiAwLjU0O1xcbn1cXG4ucS1kaXNwbGF5LTIge1xcbiAgZm9udC1zaXplOiA0NXB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiA0OHB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG59XFxuLnEtZGlzcGxheS0xLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC41NDtcXG59XFxuLnEtZGlzcGxheS0xIHtcXG4gIGZvbnQtc2l6ZTogMzRweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogNDBweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbi5xLWhlYWRsaW5lLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC44NztcXG59XFxuLnEtaGVhZGxpbmUge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG59XFxuLnEtdGl0bGUtb3BhY2l0eSB7XFxuICBvcGFjaXR5OiAwLjg3O1xcbn1cXG4ucS10aXRsZSB7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMTI7XFxuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xcbn1cXG4ucS1zdWJoZWFkaW5nLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC44NztcXG59XFxuLnEtc3ViaGVhZGluZyB7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4ucS1ib2R5LTItb3BhY2l0eSB7XFxuICBvcGFjaXR5OiAwLjg3O1xcbn1cXG4ucS1ib2R5LTIge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG59XFxuLnEtYm9keS0xLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC44NztcXG59XFxuLnEtYm9keS0xIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcbi5xLWNhcHRpb24tb3BhY2l0eSB7XFxuICBvcGFjaXR5OiAwLjU0O1xcbn1cXG4ucS1jYXB0aW9uIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcbnAge1xcbiAgbWFyZ2luOiAwIDAgMTZweDtcXG59XFxuLmNhcHRpb24ge1xcbiAgY29sb3I6ICM0MjQyNDI7XFxuICBsZXR0ZXItc3BhY2luZzogMDtcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgcGFkZGluZzogMDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxufVxcbi51cHBlcmNhc2Uge1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuLmxvd2VyY2FzZSB7XFxuICB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlO1xcbn1cXG4uY2FwaXRhbGl6ZSB7XFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcXG59XFxuLnRleHQtY2VudGVyIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLnRleHQtbGVmdCB7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4udGV4dC1yaWdodCB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLnRleHQtanVzdGlmeSB7XFxuICB0ZXh0LWFsaWduOiBqdXN0aWZ5O1xcbiAgLXdlYmtpdC1oeXBoZW5zOiBhdXRvO1xcbiAgICAgIC1tcy1oeXBoZW5zOiBhdXRvO1xcbiAgICAgICAgICBoeXBoZW5zOiBhdXRvO1xcbn1cXG4udGV4dC1pdGFsaWMge1xcbiAgZm9udC1zdHlsZTogaXRhbGljO1xcbn1cXG4udGV4dC1ib2xkIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4udGV4dC1uby13cmFwIHtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcbi50ZXh0LXdlaWdodC10aGluIHtcXG4gIGZvbnQtd2VpZ2h0OiAxMDA7XFxufVxcbi50ZXh0LXdlaWdodC1saWdodCB7XFxuICBmb250LXdlaWdodDogMzAwO1xcbn1cXG4udGV4dC13ZWlnaHQtcmVndWxhciB7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4udGV4dC13ZWlnaHQtbWVkaXVtIHtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcbi50ZXh0LXdlaWdodC1ib2xkIHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcbi50ZXh0LXdlaWdodC1ib2xkZXIge1xcbiAgZm9udC13ZWlnaHQ6IDkwMDtcXG59XFxuc21hbGwge1xcbiAgZm9udC1zaXplOiA4MCU7XFxufVxcbmJpZyB7XFxuICBmb250LXNpemU6IDE3MCU7XFxufVxcbnN1YiB7XFxuICBib3R0b206IC0wLjI1ZW07XFxufVxcbnN1cCB7XFxuICB0b3A6IC0wLjVlbTtcXG59XFxuYmxvY2txdW90ZSB7XFxuICBwYWRkaW5nOiA4cHggMTZweDtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzAyN2JlMztcXG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tcS1jb2xvci1wcmltYXJ5KTtcXG59XFxuYmxvY2txdW90ZS50ZXh0LXJpZ2h0IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCAjMDI3YmUzO1xcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdmFyKC0tcS1jb2xvci1wcmltYXJ5KTtcXG4gIGJvcmRlci1sZWZ0OiAwO1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbmJsb2NrcXVvdGUgc21hbGwge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBsaW5lLWhlaWdodDogMS40O1xcbiAgY29sb3I6ICM3Nzc7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1mYWRlZCk7XFxufVxcbmJsb2NrcXVvdGUgc21hbGw6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICdcXFxcMjAxNCAgIFxcXFxBMCc7XFxufVxcbi5xdW90ZSB7XFxuICBwYWRkaW5nOiAxMHB4IDIwcHg7XFxuICBtYXJnaW46IDAgMCAyMHB4O1xcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMDI3YmUzO1xcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB2YXIoLS1xLWNvbG9yLXByaW1hcnkpO1xcbn1cXG4ucXVvdGUudGV4dC1yaWdodCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgIzAyN2JlMztcXG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHZhcigtLXEtY29sb3ItcHJpbWFyeSk7XFxuICBib3JkZXItbGVmdDogMDtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG5kdCB7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuZGQge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcbmR0LFxcbmRkIHtcXG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XFxufVxcbmRsIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xcbn1cXG5kbC5ob3Jpem9udGFsIGR0IHtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgd2lkdGg6IDI1JTtcXG4gIGNsZWFyOiBsZWZ0O1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5kbC5ob3Jpem9udGFsIGRkIHtcXG4gIG1hcmdpbi1sZWZ0OiAzMCU7XFxufVxcbmhyLnEtaHIsXFxuaHIucS1oci1kYXJrIHtcXG4gIGhlaWdodDogMXB4O1xcbiAgbWluLWhlaWdodDogMXB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBib3JkZXI6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbmhyLnEtaHItZGFyayB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMzYpO1xcbn1cXG4ubm8tbWFyZ2luIHtcXG4gIG1hcmdpbjogMCAhaW1wb3J0YW50O1xcbn1cXG4ubm8tcGFkZGluZyB7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5uby1ib3JkZXIge1xcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5uby1ib3JkZXItcmFkaXVzIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG59XFxuLm5vLWJveC1zaGFkb3cge1xcbiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4ubm8tb3V0bGluZSB7XFxuICBvdXRsaW5lOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5lbGxpcHNpcyB7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4uZWxsaXBzaXMtMi1saW5lcyxcXG4uZWxsaXBzaXMtMy1saW5lcyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxufVxcbi5lbGxpcHNpcy0yLWxpbmVzIHtcXG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcXG59XFxuLmVsbGlwc2lzLTMtbGluZXMge1xcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xcbn1cXG4ucmVhZG9ubHkge1xcbiAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XFxufVxcbi5kaXNhYmxlZCxcXG5bZGlzYWJsZWRdLFxcbi5kaXNhYmxlZCAqLFxcbltkaXNhYmxlZF0gKiB7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkICFpbXBvcnRhbnQ7XFxufVxcbi5kaXNhYmxlZCxcXG5bZGlzYWJsZWRdIHtcXG4gIG9wYWNpdHk6IDAuNiAhaW1wb3J0YW50O1xcbn1cXG4uaGlkZGVuIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmludmlzaWJsZSB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuLnRyYW5zcGFyZW50IHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcbi5vdmVyZmxvdy1hdXRvIHtcXG4gIG92ZXJmbG93OiBhdXRvICFpbXBvcnRhbnQ7XFxufVxcbi5vdmVyZmxvdy1oaWRkZW4ge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbn1cXG4ub3ZlcmZsb3ctaGlkZGVuLXkge1xcbiAgb3ZlcmZsb3cteTogaGlkZGVuICFpbXBvcnRhbnQ7XFxufVxcbi5kaW1tZWQ6YWZ0ZXIsXFxuLmxpZ2h0LWRpbW1lZDphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG59XFxuLmRpbW1lZDphZnRlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuNCkgIWltcG9ydGFudDtcXG59XFxuLmxpZ2h0LWRpbW1lZDphZnRlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuNikgIWltcG9ydGFudDtcXG59XFxuLnotdG9wIHtcXG4gIHotaW5kZXg6IDcwMDAgIWltcG9ydGFudDtcXG59XFxuLnotbWF4IHtcXG4gIHotaW5kZXg6IDk5OTggIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLmRlc2t0b3ApIC5kZXNrdG9wLW9ubHksXFxuYm9keS5kZXNrdG9wIC5kZXNrdG9wLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCgubW9iaWxlKSAubW9iaWxlLW9ubHksXFxuYm9keS5tb2JpbGUgLm1vYmlsZS1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLmNvcmRvdmEpIC5jb3Jkb3ZhLW9ubHksXFxuYm9keS5jb3Jkb3ZhIC5jb3Jkb3ZhLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCguZWxlY3Ryb24pIC5lbGVjdHJvbi1vbmx5LFxcbmJvZHkuZWxlY3Ryb24gLmVsZWN0cm9uLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCguaW9zKSAuaW9zLW9ubHksXFxuYm9keS5pb3MgLmlvcy1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLm1hdCkgLm1hdC1vbmx5LFxcbmJvZHkubWF0IC5tYXQtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC50b3VjaCkgLnRvdWNoLW9ubHksXFxuYm9keS50b3VjaCAudG91Y2gtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC53aXRoaW4taWZyYW1lKSAud2l0aGluLWlmcmFtZS1vbmx5LFxcbmJvZHkud2l0aGluLWlmcmFtZSAud2l0aGluLWlmcmFtZS1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLnBsYXRmb3JtLWlvcykgLnBsYXRmb3JtLWlvcy1vbmx5LFxcbmJvZHkucGxhdGZvcm0taW9zIC5wbGF0Zm9ybS1pb3MtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC5wbGF0Zm9ybS1hbmRyb2lkKSAucGxhdGZvcm0tYW5kcm9pZC1vbmx5LFxcbmJvZHkucGxhdGZvcm0tYW5kcm9pZCAucGxhdGZvcm0tYW5kcm9pZC1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuQG1lZGlhIGFsbCBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xcbiAgLm9yaWVudGF0aW9uLWxhbmRzY2FwZSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIGFsbCBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcXG4gIC5vcmllbnRhdGlvbi1wb3J0cmFpdCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIHNjcmVlbiB7XFxuICAucHJpbnQtb25seSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIHByaW50IHtcXG4gIC5wcmludC1oaWRlIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHtcXG4gIC54cy1oaWRlLFxcbiAgLmd0LXhzLFxcbiAgLnNtLFxcbiAgLmd0LXNtLFxcbiAgLm1kLFxcbiAgLmd0LW1kLFxcbiAgLmxnLFxcbiAgLmd0LWxnLFxcbiAgLnhsIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLnNtLWhpZGUsXFxuICAueHMsXFxuICAubHQtc20sXFxuICAuZ3Qtc20sXFxuICAubWQsXFxuICAuZ3QtbWQsXFxuICAubGcsXFxuICAuZ3QtbGcsXFxuICAueGwge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XFxuICAubWQtaGlkZSxcXG4gIC54cyxcXG4gIC5sdC1zbSxcXG4gIC5zbSxcXG4gIC5sdC1tZCxcXG4gIC5ndC1tZCxcXG4gIC5sZyxcXG4gIC5ndC1sZyxcXG4gIC54bCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XFxuICAubGctaGlkZSxcXG4gIC54cyxcXG4gIC5sdC1zbSxcXG4gIC5zbSxcXG4gIC5sdC1tZCxcXG4gIC5tZCxcXG4gIC5sdC1sZyxcXG4gIC5ndC1sZyxcXG4gIC54bCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLnhsLWhpZGUsXFxuICAueHMsXFxuICAubHQtc20sXFxuICAuc20sXFxuICAubHQtbWQsXFxuICAubWQsXFxuICAubHQtbGcsXFxuICAubGcsXFxuICAubHQteGwge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbi5xLWZvY3VzLWhlbHBlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwIC8qIHJ0bDppZ25vcmUgKi87XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIG9wYWNpdHk6IDAuMTU7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC41LCAxKTtcXG59XFxuLnEtZm9jdXMtaGVscGVyLXJvdW5kZWQge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbn1cXG4ucS1mb2N1cy1oZWxwZXItcm91bmQge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtZm9jdXNhYmxlOmZvY3VzIC5xLWZvY3VzLWhlbHBlcixcXG5ib2R5LmRlc2t0b3AgLnEtaG92ZXJhYmxlOmhvdmVyIC5xLWZvY3VzLWhlbHBlciB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbmJvZHkuaW9zIC5xLWhvdmVyYWJsZTphY3RpdmUgLnEtZm9jdXMtaGVscGVyIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpIHtcXG4gIC5xLWlmID4gLnEtaWYtaW5uZXIge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICB9XFxuICAucS1pZiA+IC5xLWlmLWlubmVyID4gZGl2ID4gLnEtaW5wdXQtdGFyZ2V0IHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLnEtaWYgPiAucS1pZi1pbm5lciA+IGRpdiA+IGlucHV0LnEtaW5wdXQtdGFyZ2V0IHtcXG4gICAgbWluLXdpZHRoOiAzcmVtO1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMCUgIWltcG9ydGFudDtcXG4gICAgICAgIGZsZXgtYmFzaXM6IDAlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucS1pbnB1dC10YXJnZXQ6YmVmb3JlIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICB9XFxuICAucS1pZi1sYWJlbC1zcGFjZXIge1xcbiAgICB3aWR0aDogMDtcXG4gIH1cXG4gIC5xLWVkaXRvci10b29sYmFyIC5xLWJ0bi1ncm91cC5yb3cuaW5saW5lIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB9XFxuICAucS10b29sYmFyLFxcbiAgLnEtYWN0aW9uc2hlZXQtdGl0bGUsXFxuICAucS1maWVsZC1sYWJlbC1pbm5lciB7XFxuICAgIGhlaWdodDogMHB4O1xcbiAgfVxcbiAgLnEtY2Fyb3VzZWwtc2xpZGUge1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAucm93ID4gLmNvbC5xLWFsZXJ0LWNvbnRlbnQge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICB9XFxuICAucS1zbGlkZXItaGFuZGxlID4gLnEtY2hpcC5pbmxpbmUucm93IHtcXG4gICAgZGlzcGxheTogdGFibGU7XFxuICB9XFxuICBhLnEtYnRuOm5vdCgucS1idG4tcm91bmQpIHtcXG4gICAgaGVpZ2h0OiAwcHg7XFxuICB9XFxuICAucS1idG4gLnEtYnRuLWlubmVyIHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLnEtYnRuOmFjdGl2ZSAucS1idG4taW5uZXIsXFxuICAucS1idG4uYWN0aXZlIC5xLWJ0bi1pbm5lciB7XFxuICAgIG1hcmdpbjogLTFweCAxcHggMXB4IC0xcHg7XFxuICB9XFxuICAucS1idG46YWN0aXZlLnEtYnRuLXB1c2ggLnEtYnRuLWlubmVyLFxcbiAgLnEtYnRuLmFjdGl2ZS5xLWJ0bi1wdXNoIC5xLWJ0bi1pbm5lciB7XFxuICAgIG1hcmdpbjogMXB4IDFweCAtMXB4IC0xcHg7XFxuICB9XFxuICAucS1idG46YWN0aXZlLnEtYnRuLXB1c2guZGlzYWJsZWQgLnEtYnRuLWlubmVyLFxcbiAgLnEtYnRuLmFjdGl2ZS5xLWJ0bi1wdXNoLmRpc2FibGVkIC5xLWJ0bi1pbm5lciB7XFxuICAgIG1hcmdpbjogLTFweCAxcHggMXB4IC0xcHg7XFxuICB9XFxuICAucS1idG4tZ3JvdXAgPiAucS1idG4ucS1idG4tcHVzaDpub3QoLmRpc2FibGVkKTphY3RpdmUgLnEtYnRuLWlubmVyLFxcbiAgLnEtYnRuLWdyb3VwID4gLnEtYnRuLnEtYnRuLXB1c2g6bm90KC5kaXNhYmxlZCkuYWN0aXZlIC5xLWJ0bi1pbm5lciB7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG4gIC5xLWNoaXA6bm90KC5xLWNoaXAtc21hbGwpOm5vdCgucS1jaGlwLWRlbnNlKSAucS1jaGlwLW1haW4ge1xcbiAgICBsaW5lLWhlaWdodDogMzJweDtcXG4gIH1cXG4gIC5xLWJ0biAucS1jaGlwIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgfVxcbiAgLnEtdGFiIC5xLWNoaXAgLnEtY2hpcC1tYWluIHtcXG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcXG4gIH1cXG4gIC5xLWZhYi1hY3Rpb25zLnEtZmFiLWxlZnQsXFxuICAucS1mYWItYWN0aW9ucy5xLWZhYi1yaWdodCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgfVxcbiAgLnEtaXRlbS1tYWluIHtcXG4gICAgbWluLXdpZHRoOiAxcHg7XFxuICB9XFxuICAucS1sYXlvdXQtZHJhd2VyLW1pbmkgLnEtaXRlbSB7XFxuICAgIHBhZGRpbmctbGVmdDogMDtcXG4gICAgcGFkZGluZy1yaWdodDogMDtcXG4gIH1cXG4gIC5xLW1vZGFsLWxheW91dCB7XFxuICAgIG1pbi1oZWlnaHQ6IDgwdmggIWltcG9ydGFudDtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIH1cXG59XFxuQHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOiBhdXRvKSB7XFxuICAucS1pZiA+IC5xLWlmLWlubmVyIHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgfVxcbiAgLnEtaWYgPiAucS1pZi1pbm5lciA+IGRpdiA+IC5xLWlucHV0LXRhcmdldCB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gIH1cXG4gIC5xLWlmID4gLnEtaWYtaW5uZXIgPiBkaXYgPiBpbnB1dC5xLWlucHV0LXRhcmdldCB7XFxuICAgIG1pbi13aWR0aDogM3JlbTtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDAlICFpbXBvcnRhbnQ7XFxuICAgICAgICBmbGV4LWJhc2lzOiAwJSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnEtaW5wdXQtdGFyZ2V0OmJlZm9yZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgfVxcbiAgLnEtaWYtbGFiZWwtc3BhY2VyIHtcXG4gICAgd2lkdGg6IDA7XFxuICB9XFxuICAucS1lZGl0b3ItdG9vbGJhciAucS1idG4tZ3JvdXAucm93LmlubGluZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgfVxcbiAgLnEtdG9vbGJhcixcXG4gIC5xLWFjdGlvbnNoZWV0LXRpdGxlLFxcbiAgLnEtZmllbGQtbGFiZWwtaW5uZXIge1xcbiAgICBoZWlnaHQ6IDBweDtcXG4gIH1cXG4gIC5xLWNhcm91c2VsLXNsaWRlIHtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wucS1hbGVydC1jb250ZW50IHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLnEtc2xpZGVyLWhhbmRsZSA+IC5xLWNoaXAuaW5saW5lLnJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlO1xcbiAgfVxcbiAgYS5xLWJ0bjpub3QoLnEtYnRuLXJvdW5kKSB7XFxuICAgIGhlaWdodDogMHB4O1xcbiAgfVxcbiAgLnEtYnRuIC5xLWJ0bi1pbm5lciB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gIH1cXG4gIC5xLWJ0bjphY3RpdmUgLnEtYnRuLWlubmVyLFxcbiAgLnEtYnRuLmFjdGl2ZSAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IC0xcHggMXB4IDFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuOmFjdGl2ZS5xLWJ0bi1wdXNoIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi5hY3RpdmUucS1idG4tcHVzaCAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IDFweCAxcHggLTFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuOmFjdGl2ZS5xLWJ0bi1wdXNoLmRpc2FibGVkIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi5hY3RpdmUucS1idG4tcHVzaC5kaXNhYmxlZCAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IC0xcHggMXB4IDFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuLWdyb3VwID4gLnEtYnRuLnEtYnRuLXB1c2g6bm90KC5kaXNhYmxlZCk6YWN0aXZlIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi1ncm91cCA+IC5xLWJ0bi5xLWJ0bi1wdXNoOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuICAucS1jaGlwOm5vdCgucS1jaGlwLXNtYWxsKTpub3QoLnEtY2hpcC1kZW5zZSkgLnEtY2hpcC1tYWluIHtcXG4gICAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICB9XFxuICAucS1idG4gLnEtY2hpcCB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIH1cXG4gIC5xLXRhYiAucS1jaGlwIC5xLWNoaXAtbWFpbiB7XFxuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XFxuICB9XFxuICAucS1mYWItYWN0aW9ucy5xLWZhYi1sZWZ0LFxcbiAgLnEtZmFiLWFjdGlvbnMucS1mYWItcmlnaHQge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIH1cXG4gIC5xLWl0ZW0tbWFpbiB7XFxuICAgIG1pbi13aWR0aDogMXB4O1xcbiAgfVxcbiAgLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWl0ZW0ge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDA7XFxuICB9XFxuICAucS1tb2RhbC1sYXlvdXQge1xcbiAgICBtaW4taGVpZ2h0OiA4MHZoICFpbXBvcnRhbnQ7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgd2Via2l0LWF1dG9maWxsLW9uIHtcXG4gIHRvIHtcXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICAgIGNvbG9yOiAjZmY5ODAwO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHdlYmtpdC1hdXRvZmlsbC1vZmYge1xcbiAgdG8ge1xcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUge1xcbiAgMCUge1xcbiAgICBsZWZ0OiAtMzUlO1xcbiAgICByaWdodDogMTAwJTtcXG4gIH1cXG4gIDYwJSB7XFxuICAgIGxlZnQ6IDEwMCU7XFxuICAgIHJpZ2h0OiAtOTAlO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIGxlZnQ6IDEwMCU7XFxuICAgIHJpZ2h0OiAtOTAlO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1zaG9ydCB7XFxuICAwJSB7XFxuICAgIGxlZnQ6IC0yMDAlO1xcbiAgICByaWdodDogMTAwJTtcXG4gIH1cXG4gIDYwJSB7XFxuICAgIGxlZnQ6IDEwNyU7XFxuICAgIHJpZ2h0OiAtOCU7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgbGVmdDogMTA3JTtcXG4gICAgcmlnaHQ6IC04JTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXByb2dyZXNzLXN0cmlwZXMge1xcbiAgZnJvbSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDQwcHggMDtcXG4gIH1cXG4gIHRvIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtbWF0LWRhc2gge1xcbiAgMCUge1xcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxLCAyMDA7XFxuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgc3Ryb2tlLWRhc2hhcnJheTogODksIDIwMDtcXG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0zNXB4O1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDg5LCAyMDA7XFxuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTI0cHg7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1oaWdobGlnaHQge1xcbiAgMCUge1xcbiAgICBiYWNrZ3JvdW5kOiAjY2RkYzM5O1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtcm90YXRlIHtcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMCkgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG4gIDI1JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbiAgfVxcbiAgNzUlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLWJsaW5rIHtcXG4gIHRvIHtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtc3BpbiB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxuICB9XFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKSAvKiBydGw6aWdub3JlICovO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtcG9wIHtcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjcpO1xcbiAgfVxcbiAgNzAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA3KTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtZmFkZSB7XFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXNjYWxlIHtcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjcpO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1ib3VuY2Uge1xcbiAgMCUsIDIwJSwgNTAlLCA4MCUsIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxuICB9XFxuICA0MCUge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTMwcHgpO1xcbiAgfVxcbiAgNjAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNXB4KTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXNoYWtlIHtcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMik7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXBvcHVwLWRvd24ge1xcbiAgMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpIHNjYWxlWSgwLjMpO1xcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIH1cXG4gIDMwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1wb3B1cC11cCB7XFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KSBzY2FsZVkoMC4zKTtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICB9XFxuICAzMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtc2xpZGUtbGVmdCB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNzAlKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXNsaWRlLXJpZ2h0IHtcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDcwJSk7XFxuICB9XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiXFxuYnV0dG9uICsgYnV0dG9uW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgbWFyZ2luLWxlZnQ6IDAuNWVtO1xcbn1cXG5idXR0b25bZGF0YS12LTRmYmM3MzViXSB7XFxuICBwYWRkaW5nOiAwLjRlbSAwLjZlbTtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBvdXRsaW5lOiAwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5idXR0b25bZGlzYWJsZWRdW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgYm9yZGVyLWNvbG9yOiAjYWU2NWM1O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG4ubW9kYWxbZGF0YS12LTRmYmM3MzViXSB7XFxuICBjb2xvcjogcmVkO1xcbn1cXG5cXG4vKipcXG4gKiBTZWUgaHR0cHM6Ly92dWUtbG9hZGVyLnZ1ZWpzLm9yZy9ndWlkZS9zY29wZWQtY3NzLmh0bWwjZGVlcC1zZWxlY3RvcnNcXG4gKiB0aGUgYD4+PmAgYWxsb3dzIHRvIGFwcGx5IHNjb3BlZCBjc3MgdG8gY2hpbGQgZWxlbWVudCB0aGF0IGlzIGdlbmVyYXRlZFxcbiAqIGR5bmFtaWNhbGx5XFxuKiovXFxuLm1vZGFsW2RhdGEtdi00ZmJjNzM1Yl0gLm1vZGFsLXNjcm9sbCB7XFxuICBjb2xvcjogcmVkO1xcbiAgbWF4LWhlaWdodDogbm9uZTtcXG59XFxuLm1vZGFsIC5tb2RhbC1ib2R5W2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgbWF4LWhlaWdodDogbm9uZTtcXG59XFxuaDFbZGF0YS12LTRmYmM3MzViXSB7XFxuICBmb250LWZhbWlseTogQ291cmllcjtcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXG59XFxuaDJbZGF0YS12LTRmYmM3MzViXSB7XFxuICBmb250LWZhbWlseTogQ291cmllcjtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIG1hcmdpbi10b3A6IDJyZW07XFxufVxcbi5hcHAgLnJvd1tkYXRhLXYtNGZiYzczNWJdIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG4ucm93ICsgLnJvd1tkYXRhLXYtNGZiYzczNWJdIHtcXG4gIG1hcmdpbi10b3A6IDJlbTtcXG59XFxuLnJvdy1zbWFsbFtkYXRhLXYtNGZiYzczNWJdIHtcXG4gIG1hcmdpbi10b3A6IDFlbTtcXG59XFxuLmVtb2ppLW1hcnRbZGF0YS12LTRmYmM3MzViXSB7XFxuICBtYXJnaW46IDAgYXV0bztcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcbi5lbW9qaS1tYXJ0LXRpdGxlLWxhYmVsW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgZm9udC1zaXplOiAyMXB4O1xcbn1cXG4ucG9wdXBbZGF0YS12LTRmYmM3MzViXSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwdmg7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogMjAwO1xcbiAgYmFja2dyb3VuZDogcmViZWNjYXB1cnBsZTtcXG4gIG9wYWNpdHk6IDk1JTtcXG59XFxuLnBvcHVwLWJveFtkYXRhLXYtNGZiYzczNWJdIHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nLXRvcDogMTIwcHg7XFxuICBwYWRkaW5nLWJvdHRvbTogODBweDtcXG59XFxuLnBvcHVwLWNvbnRlbnRbZGF0YS12LTRmYmM3MzViXSB7XFxuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcXG4gIGJveC1zaGFkb3c6IDBweCAyNHB4IDU0cHggcmdiYSgyMCwgMjgsIDQ5LCAwLjE0KTtcXG4gIGJvcmRlci1yYWRpdXM6IDE4cHg7XFxuICBwYWRkaW5nOiA2cHggNnB4IDlweCA2cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1heC13aWR0aDogNDYycHg7XFxuICBtYXJnaW46IDAgYXV0bztcXG59XFxuLnBvcHVwLWNsb3NlW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAyMHB4O1xcbiAgcmlnaHQ6IDMwcHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih1c2VTb3VyY2VNYXApIHtcblx0dmFyIGxpc3QgPSBbXTtcblxuXHQvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cdGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXHRcdFx0aWYoaXRlbVsyXSkge1xuXHRcdFx0XHRyZXR1cm4gXCJAbWVkaWEgXCIgKyBpdGVtWzJdICsgXCJ7XCIgKyBjb250ZW50ICsgXCJ9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHRcdH1cblx0XHR9KS5qb2luKFwiXCIpO1xuXHR9O1xuXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcblx0XHRpZih0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIilcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxuXHRcdFx0XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG5cdFx0fVxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gbW9kdWxlc1tpXTtcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxuXHRcdFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG5cdFx0XHRcdGlmKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gXCIoXCIgKyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIpXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7XG5cdHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblx0aWYgKCFjc3NNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdH1cblxuXHRpZiAodXNlU291cmNlTWFwICYmIHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIHNvdXJjZU1hcHBpbmcgPSB0b0NvbW1lbnQoY3NzTWFwcGluZyk7XG5cdFx0dmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0XHRcdHJldHVybiAnLyojIHNvdXJjZVVSTD0nICsgY3NzTWFwcGluZy5zb3VyY2VSb290ICsgc291cmNlICsgJyAqLydcblx0XHR9KTtcblxuXHRcdHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuXHR9XG5cblx0cmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn1cblxuLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuZnVuY3Rpb24gdG9Db21tZW50KHNvdXJjZU1hcCkge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblx0dmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSk7XG5cdHZhciBkYXRhID0gJ3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCcgKyBiYXNlNjQ7XG5cblx0cmV0dXJuICcvKiMgJyArIGRhdGEgKyAnICovJztcbn1cbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiFcbiAqIFF1YXNhciBGcmFtZXdvcmsgdjAuMTcuMjBcbiAqIChjKSAyMDE2LXByZXNlbnQgUmF6dmFuIFN0b2VuZXNjdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG52YXIgd2ViU3RvcmFnZSxpc1NTUj1cInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93LGZyb21TU1I9ITEsb25TU1I9aXNTU1I7ZnVuY3Rpb24gZ2V0TWF0Y2godCxlKXt2YXIgaT0vKGVkZ2UpXFwvKFtcXHcuXSspLy5leGVjKHQpfHwvKG9wcilbXFwvXShbXFx3Ll0rKS8uZXhlYyh0KXx8Lyh2aXZhbGRpKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKGNocm9tZSlbXFwvXShbXFx3Ll0rKS8uZXhlYyh0KXx8LyhpZW1vYmlsZSlbXFwvXShbXFx3Ll0rKS8uZXhlYyh0KXx8Lyh2ZXJzaW9uKShhcHBsZXdlYmtpdClbXFwvXShbXFx3Ll0rKS4qKHNhZmFyaSlbXFwvXShbXFx3Ll0rKS8uZXhlYyh0KXx8Lyh3ZWJraXQpW1xcL10oW1xcdy5dKykuKih2ZXJzaW9uKVtcXC9dKFtcXHcuXSspLiooc2FmYXJpKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKHdlYmtpdClbXFwvXShbXFx3Ll0rKS8uZXhlYyh0KXx8LyhvcGVyYSkoPzouKnZlcnNpb258KVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKG1zaWUpIChbXFx3Ll0rKS8uZXhlYyh0KXx8dC5pbmRleE9mKFwidHJpZGVudFwiKT49MCYmLyhydikoPzo6fCApKFtcXHcuXSspLy5leGVjKHQpfHx0LmluZGV4T2YoXCJjb21wYXRpYmxlXCIpPDAmJi8obW96aWxsYSkoPzouKj8gcnY6KFtcXHcuXSspfCkvLmV4ZWModCl8fFtdO3JldHVybnticm93c2VyOmlbNV18fGlbM118fGlbMV18fFwiXCIsdmVyc2lvbjppWzJdfHxpWzRdfHxcIjBcIix2ZXJzaW9uTnVtYmVyOmlbNF18fGlbMl18fFwiMFwiLHBsYXRmb3JtOmVbMF18fFwiXCJ9fWZ1bmN0aW9uIGdldFBsYXRmb3JtTWF0Y2godCl7cmV0dXJuLyhpcGFkKS8uZXhlYyh0KXx8LyhpcG9kKS8uZXhlYyh0KXx8Lyh3aW5kb3dzIHBob25lKS8uZXhlYyh0KXx8LyhpcGhvbmUpLy5leGVjKHQpfHwvKGtpbmRsZSkvLmV4ZWModCl8fC8oc2lsaykvLmV4ZWModCl8fC8oYW5kcm9pZCkvLmV4ZWModCl8fC8od2luKS8uZXhlYyh0KXx8LyhtYWMpLy5leGVjKHQpfHwvKGxpbnV4KS8uZXhlYyh0KXx8Lyhjcm9zKS8uZXhlYyh0KXx8LyhwbGF5Ym9vaykvLmV4ZWModCl8fC8oYmIpLy5leGVjKHQpfHwvKGJsYWNrYmVycnkpLy5leGVjKHQpfHxbXX1mdW5jdGlvbiBnZXRQbGF0Zm9ybSh0KXt2YXIgZT1nZXRNYXRjaCh0PSh0fHxuYXZpZ2F0b3IudXNlckFnZW50fHxuYXZpZ2F0b3IudmVuZG9yfHx3aW5kb3cub3BlcmEpLnRvTG93ZXJDYXNlKCksZ2V0UGxhdGZvcm1NYXRjaCh0KSksaT17fTtyZXR1cm4gZS5icm93c2VyJiYoaVtlLmJyb3dzZXJdPSEwLGkudmVyc2lvbj1lLnZlcnNpb24saS52ZXJzaW9uTnVtYmVyPXBhcnNlSW50KGUudmVyc2lvbk51bWJlciwxMCkpLGUucGxhdGZvcm0mJihpW2UucGxhdGZvcm1dPSEwKSwoaS5hbmRyb2lkfHxpLmJifHxpLmJsYWNrYmVycnl8fGkuaXBhZHx8aS5pcGhvbmV8fGkuaXBvZHx8aS5raW5kbGV8fGkucGxheWJvb2t8fGkuc2lsa3x8aVtcIndpbmRvd3MgcGhvbmVcIl0pJiYoaS5tb2JpbGU9ITApLChpLmlwb2R8fGkuaXBhZHx8aS5pcGhvbmUpJiYoaS5pb3M9ITApLGlbXCJ3aW5kb3dzIHBob25lXCJdJiYoaS53aW5waG9uZT0hMCxkZWxldGUgaVtcIndpbmRvd3MgcGhvbmVcIl0pLChpLmNyb3N8fGkubWFjfHxpLmxpbnV4fHxpLndpbikmJihpLmRlc2t0b3A9ITApLChpLmNocm9tZXx8aS5vcHJ8fGkuc2FmYXJpfHxpLnZpdmFsZGkpJiYoaS53ZWJraXQ9ITApLChpLnJ2fHxpLmllbW9iaWxlKSYmKGUuYnJvd3Nlcj1cImllXCIsaS5pZT0hMCksaS5lZGdlJiYoZS5icm93c2VyPVwiZWRnZVwiLGkuZWRnZT0hMCksKGkuc2FmYXJpJiZpLmJsYWNrYmVycnl8fGkuYmIpJiYoZS5icm93c2VyPVwiYmxhY2tiZXJyeVwiLGkuYmxhY2tiZXJyeT0hMCksaS5zYWZhcmkmJmkucGxheWJvb2smJihlLmJyb3dzZXI9XCJwbGF5Ym9va1wiLGkucGxheWJvb2s9ITApLGkub3ByJiYoZS5icm93c2VyPVwib3BlcmFcIixpLm9wZXJhPSEwKSxpLnNhZmFyaSYmaS5hbmRyb2lkJiYoZS5icm93c2VyPVwiYW5kcm9pZFwiLGkuYW5kcm9pZD0hMCksaS5zYWZhcmkmJmkua2luZGxlJiYoZS5icm93c2VyPVwia2luZGxlXCIsaS5raW5kbGU9ITApLGkuc2FmYXJpJiZpLnNpbGsmJihlLmJyb3dzZXI9XCJzaWxrXCIsaS5zaWxrPSEwKSxpLnZpdmFsZGkmJihlLmJyb3dzZXI9XCJ2aXZhbGRpXCIsaS52aXZhbGRpPSEwKSxpLm5hbWU9ZS5icm93c2VyLGkucGxhdGZvcm09ZS5wbGF0Zm9ybSxpc1NTUnx8KHdpbmRvdy5wcm9jZXNzJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucyYmd2luZG93LnByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24/aS5lbGVjdHJvbj0hMDowPT09ZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKFwiY2hyb21lLWV4dGVuc2lvbjovL1wiKT9pLmNocm9tZUV4dD0hMDood2luZG93Ll9jb3Jkb3ZhTmF0aXZlfHx3aW5kb3cuY29yZG92YSkmJihpLmNvcmRvdmE9ITApLChmcm9tU1NSPXZvaWQgMD09PWkuY29yZG92YSYmdm9pZCAwPT09aS5lbGVjdHJvbiYmISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtc2VydmVyLXJlbmRlcmVkXVwiKSkmJihvblNTUj0hMCkpLGl9ZnVuY3Rpb24gaGFzV2ViU3RvcmFnZSgpe2lmKHZvaWQgMCE9PXdlYlN0b3JhZ2UpcmV0dXJuIHdlYlN0b3JhZ2U7dHJ5e2lmKHdpbmRvdy5sb2NhbFN0b3JhZ2UpcmV0dXJuIHdlYlN0b3JhZ2U9ITAsITB9Y2F0Y2godCl7fXJldHVybiB3ZWJTdG9yYWdlPSExLCExfWZ1bmN0aW9uIGdldENsaWVudFByb3BlcnRpZXMoKXtyZXR1cm57aGFzOnt0b3VjaDohIShcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXx8d2luZG93Lm5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzPjAsd2ViU3RvcmFnZTpoYXNXZWJTdG9yYWdlKCl9LHdpdGhpbjp7aWZyYW1lOndpbmRvdy5zZWxmIT09d2luZG93LnRvcH19fXZhciBQbGF0Zm9ybT17aGFzOnt0b3VjaDohMSx3ZWJTdG9yYWdlOiExfSx3aXRoaW46e2lmcmFtZTohMX0scGFyc2VTU1I6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/e2lzOmdldFBsYXRmb3JtKHQucmVxLmhlYWRlcnNbXCJ1c2VyLWFnZW50XCJdKSxoYXM6dGhpcy5oYXMsd2l0aGluOnRoaXMud2l0aGlufTpPYmplY3QuYXNzaWduKHt9LHtpczpnZXRQbGF0Zm9ybSgpfSxnZXRDbGllbnRQcm9wZXJ0aWVzKCkpfSxpbnN0YWxsOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzO2lzU1NSP2Uuc2VydmVyLnB1c2goZnVuY3Rpb24odCxlKXt0LnBsYXRmb3JtPXMucGFyc2VTU1IoZS5zc3IpfSk6KHRoaXMuaXM9Z2V0UGxhdGZvcm0oKSxmcm9tU1NSPyhlLnRha2VvdmVyLnB1c2goZnVuY3Rpb24odCl7b25TU1I9ZnJvbVNTUj0hMSxPYmplY3QuYXNzaWduKHQucGxhdGZvcm0sZ2V0Q2xpZW50UHJvcGVydGllcygpKX0pLGkudXRpbC5kZWZpbmVSZWFjdGl2ZSh0LFwicGxhdGZvcm1cIix0aGlzKSk6KE9iamVjdC5hc3NpZ24odGhpcyxnZXRDbGllbnRQcm9wZXJ0aWVzKCkpLHQucGxhdGZvcm09dGhpcykpfX07ZnVuY3Rpb24gYXNzaWduKHQsZSl7dmFyIGk9YXJndW1lbnRzO2lmKHZvaWQgMD09PXR8fG51bGw9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCBmaXJzdCBhcmd1bWVudCB0byBvYmplY3RcIik7Zm9yKHZhciBzPU9iamVjdCh0KSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIG89aVtuXTtpZih2b2lkIDAhPT1vJiZudWxsIT09bylmb3IodmFyIHI9T2JqZWN0LmtleXMoT2JqZWN0KG8pKSxhPTAsbD1yLmxlbmd0aDthPGw7YSsrKXt2YXIgYz1yW2FdLGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLGMpO3ZvaWQgMCE9PWgmJmguZW51bWVyYWJsZSYmKHNbY109b1tjXSl9fXJldHVybiBzfU9iamVjdC5hc3NpZ258fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QsXCJhc3NpZ25cIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6YXNzaWdufSksTnVtYmVyLmlzSW50ZWdlcnx8KE51bWJlci5pc0ludGVnZXI9ZnVuY3Rpb24odCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQmJmlzRmluaXRlKHQpJiZNYXRoLmZsb29yKHQpPT09dH0pLEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc3x8KEFycmF5LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUpe3ZhciBpPU9iamVjdCh0aGlzKSxzPXBhcnNlSW50KGkubGVuZ3RoLDEwKXx8MDtpZigwPT09cylyZXR1cm4hMTt2YXIgbixvLHI9cGFyc2VJbnQoZSwxMCl8fDA7Zm9yKHI+PTA/bj1yOihuPXMrcik8MCYmKG49MCk7bjxzOyl7aWYodD09PShvPWlbbl0pfHx0IT10JiZvIT1vKXJldHVybiEwO24rK31yZXR1cm4hMX0pLFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aHx8KFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aD1mdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDAsdGhpcy5zdWJzdHIoZSx0Lmxlbmd0aCk9PT10fSksU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aHx8KFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGg9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnRvU3RyaW5nKCk7KFwibnVtYmVyXCIhPXR5cGVvZiBlfHwhaXNGaW5pdGUoZSl8fE1hdGguZmxvb3IoZSkhPT1lfHxlPmkubGVuZ3RoKSYmKGU9aS5sZW5ndGgpLGUtPXQubGVuZ3RoO3ZhciBzPWkuaW5kZXhPZih0LGUpO3JldHVybi0xIT09cyYmcz09PWV9KSxpc1NTUnx8KFwiZnVuY3Rpb25cIiE9dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMmJihFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzPUVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS5tb3pNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSh0aGlzLmRvY3VtZW50fHx0aGlzLm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwodCksaT0wO2VbaV0mJmVbaV0hPT10aGlzOykrK2k7cmV0dXJuIEJvb2xlYW4oZVtpXSl9KSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5jbG9zZXN0JiYoRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcztlJiYxPT09ZS5ub2RlVHlwZTspe2lmKGUubWF0Y2hlcyh0KSlyZXR1cm4gZTtlPWUucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH0pLFtFbGVtZW50LnByb3RvdHlwZSxDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZSxEb2N1bWVudFR5cGUucHJvdG90eXBlXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuaGFzT3duUHJvcGVydHkoXCJyZW1vdmVcIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicmVtb3ZlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpfX0pfSkpLEFycmF5LnByb3RvdHlwZS5maW5kfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLFwiZmluZFwiLHt2YWx1ZTpmdW5jdGlvbih0KXtpZihudWxsPT10aGlzKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheS5wcm90b3R5cGUuZmluZCBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWRcIik7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwicHJlZGljYXRlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtmb3IodmFyIGUsaT1PYmplY3QodGhpcykscz1pLmxlbmd0aD4+PjAsbj1hcmd1bWVudHNbMV0sbz0wO288cztvKyspaWYoZT1pW29dLHQuY2FsbChuLGUsbyxpKSlyZXR1cm4gZX19KTt2YXIgdmVyc2lvbj1cIjAuMTcuMjBcIixIaXN0b3J5PXtfX2hpc3Rvcnk6W10sYWRkOmZ1bmN0aW9uKCl7fSxyZW1vdmU6ZnVuY3Rpb24oKXt9LGluc3RhbGw6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO2lmKCFpc1NTUiYmdC5wbGF0Zm9ybS5pcy5jb3Jkb3ZhKXt0aGlzLmFkZD1mdW5jdGlvbih0KXtpLl9faGlzdG9yeS5wdXNoKHQpfSx0aGlzLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT1pLl9faGlzdG9yeS5pbmRleE9mKHQpO2U+PTAmJmkuX19oaXN0b3J5LnNwbGljZShlLDEpfTt2YXIgcz12b2lkIDA9PT1lLmNvcmRvdmF8fCExIT09ZS5jb3Jkb3ZhLmJhY2tCdXR0b25FeGl0O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJkZXZpY2VyZWFkeVwiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImJhY2tidXR0b25cIixmdW5jdGlvbigpe2kuX19oaXN0b3J5Lmxlbmd0aD9pLl9faGlzdG9yeS5wb3AoKS5oYW5kbGVyKCk6cyYmXCIjL1wiPT09d2luZG93LmxvY2F0aW9uLmhhc2g/bmF2aWdhdG9yLmFwcC5leGl0QXBwKCk6d2luZG93Lmhpc3RvcnkuYmFjaygpfSwhMSl9KX19fSxsYW5nRW49e2xhbmc6XCJlbi11c1wiLGxhYmVsOntjbGVhcjpcIkNsZWFyXCIsb2s6XCJPS1wiLGNhbmNlbDpcIkNhbmNlbFwiLGNsb3NlOlwiQ2xvc2VcIixzZXQ6XCJTZXRcIixzZWxlY3Q6XCJTZWxlY3RcIixyZXNldDpcIlJlc2V0XCIscmVtb3ZlOlwiUmVtb3ZlXCIsdXBkYXRlOlwiVXBkYXRlXCIsY3JlYXRlOlwiQ3JlYXRlXCIsc2VhcmNoOlwiU2VhcmNoXCIsZmlsdGVyOlwiRmlsdGVyXCIscmVmcmVzaDpcIlJlZnJlc2hcIn0sZGF0ZTp7ZGF5czpcIlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5XCIuc3BsaXQoXCJfXCIpLGRheXNTaG9ydDpcIlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdFwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksZmlyc3REYXlPZldlZWs6MCxmb3JtYXQyNGg6ITF9LHB1bGxUb1JlZnJlc2g6e3B1bGw6XCJQdWxsIGRvd24gdG8gcmVmcmVzaFwiLHJlbGVhc2U6XCJSZWxlYXNlIHRvIHJlZnJlc2hcIixyZWZyZXNoOlwiUmVmcmVzaGluZy4uLlwifSx0YWJsZTp7bm9EYXRhOlwiTm8gZGF0YSBhdmFpbGFibGVcIixub1Jlc3VsdHM6XCJObyBtYXRjaGluZyByZWNvcmRzIGZvdW5kXCIsbG9hZGluZzpcIkxvYWRpbmcuLi5cIixzZWxlY3RlZFJlY29yZHM6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P1wiMSByZWNvcmQgc2VsZWN0ZWQuXCI6KDA9PT10P1wiTm9cIjp0KStcIiByZWNvcmRzIHNlbGVjdGVkLlwifSxyZWNvcmRzUGVyUGFnZTpcIlJlY29yZHMgcGVyIHBhZ2U6XCIsYWxsUm93czpcIkFsbFwiLHBhZ2luYXRpb246ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0K1wiLVwiK2UrXCIgb2YgXCIraX0sY29sdW1uczpcIkNvbHVtbnNcIn0sZWRpdG9yOnt1cmw6XCJVUkxcIixib2xkOlwiQm9sZFwiLGl0YWxpYzpcIkl0YWxpY1wiLHN0cmlrZXRocm91Z2g6XCJTdHJpa2V0aHJvdWdoXCIsdW5kZXJsaW5lOlwiVW5kZXJsaW5lXCIsdW5vcmRlcmVkTGlzdDpcIlVub3JkZXJlZCBMaXN0XCIsb3JkZXJlZExpc3Q6XCJPcmRlcmVkIExpc3RcIixzdWJzY3JpcHQ6XCJTdWJzY3JpcHRcIixzdXBlcnNjcmlwdDpcIlN1cGVyc2NyaXB0XCIsaHlwZXJsaW5rOlwiSHlwZXJsaW5rXCIsdG9nZ2xlRnVsbHNjcmVlbjpcIlRvZ2dsZSBGdWxsc2NyZWVuXCIscXVvdGU6XCJRdW90ZVwiLGxlZnQ6XCJMZWZ0IGFsaWduXCIsY2VudGVyOlwiQ2VudGVyIGFsaWduXCIscmlnaHQ6XCJSaWdodCBhbGlnblwiLGp1c3RpZnk6XCJKdXN0aWZ5IGFsaWduXCIscHJpbnQ6XCJQcmludFwiLG91dGRlbnQ6XCJEZWNyZWFzZSBpbmRlbnRhdGlvblwiLGluZGVudDpcIkluY3JlYXNlIGluZGVudGF0aW9uXCIscmVtb3ZlRm9ybWF0OlwiUmVtb3ZlIGZvcm1hdHRpbmdcIixmb3JtYXR0aW5nOlwiRm9ybWF0dGluZ1wiLGZvbnRTaXplOlwiRm9udCBTaXplXCIsYWxpZ246XCJBbGlnblwiLGhyOlwiSW5zZXJ0IEhvcml6b250YWwgUnVsZVwiLHVuZG86XCJVbmRvXCIscmVkbzpcIlJlZG9cIixoZWFkZXIxOlwiSGVhZGVyIDFcIixoZWFkZXIyOlwiSGVhZGVyIDJcIixoZWFkZXIzOlwiSGVhZGVyIDNcIixoZWFkZXI0OlwiSGVhZGVyIDRcIixoZWFkZXI1OlwiSGVhZGVyIDVcIixoZWFkZXI2OlwiSGVhZGVyIDZcIixwYXJhZ3JhcGg6XCJQYXJhZ3JhcGhcIixjb2RlOlwiQ29kZVwiLHNpemUxOlwiVmVyeSBzbWFsbFwiLHNpemUyOlwiQSBiaXQgc21hbGxcIixzaXplMzpcIk5vcm1hbFwiLHNpemU0OlwiTWVkaXVtLWxhcmdlXCIsc2l6ZTU6XCJCaWdcIixzaXplNjpcIlZlcnkgYmlnXCIsc2l6ZTc6XCJNYXhpbXVtXCIsZGVmYXVsdEZvbnQ6XCJEZWZhdWx0IEZvbnRcIn0sdHJlZTp7bm9Ob2RlczpcIk5vIG5vZGVzIGF2YWlsYWJsZVwiLG5vUmVzdWx0czpcIk5vIG1hdGNoaW5nIG5vZGVzIGZvdW5kXCJ9fSxpMThuPXtpbnN0YWxsOmZ1bmN0aW9uKHQsZSxpLHMpe3ZhciBuPXRoaXM7aXNTU1ImJmUuc2VydmVyLnB1c2goZnVuY3Rpb24odCxlKXt2YXIgaT17bGFuZzp0LmkxOG4ubGFuZyxkaXI6dC5pMThuLnJ0bD9cInJ0bFwiOlwibHRyXCJ9LHM9ZS5zc3Iuc2V0SHRtbEF0dHJzO1wiZnVuY3Rpb25cIj09dHlwZW9mIHM/cyhpKTplLnNzci5RX0hUTUxfQVRUUlM9T2JqZWN0LmtleXMoaSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0K1wiPVwiK2lbdF19KS5qb2luKFwiIFwiKX0pLHRoaXMuc2V0PWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPWxhbmdFbiksZS5zZXQ9bi5zZXQsZS5nZXRMb2NhbGU9bi5nZXRMb2NhbGUsZS5ydGw9ZS5ydGx8fCExLCFpc1NTUil7dmFyIHM9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Muc2V0QXR0cmlidXRlKFwiZGlyXCIsZS5ydGw/XCJydGxcIjpcImx0clwiKSxzLnNldEF0dHJpYnV0ZShcImxhbmdcIixlLmxhbmcpfWlzU1NSfHx0LmkxOG4/dC5pMThuPWU6aS51dGlsLmRlZmluZVJlYWN0aXZlKHQsXCJpMThuXCIsZSksbi5uYW1lPWUubGFuZyxuLmxhbmc9ZX0sdGhpcy5zZXQocyl9LGdldExvY2FsZTpmdW5jdGlvbigpe2lmKCFpc1NTUil7dmFyIHQ9bmF2aWdhdG9yLmxhbmd1YWdlfHxuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHxuYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlfHxuYXZpZ2F0b3IudXNlckxhbmd1YWdlfHxuYXZpZ2F0b3Iuc3lzdGVtTGFuZ3VhZ2U7cmV0dXJuIHQ/dC50b0xvd2VyQ2FzZSgpOnZvaWQgMH19fTtmdW5jdGlvbiByZ2JUb0hleCh0KXt2YXIgZT10LnIsaT10Lmcscz10LmIsbj10LmEsbz12b2lkIDAhPT1uO2lmKGU9TWF0aC5yb3VuZChlKSxpPU1hdGgucm91bmQoaSkscz1NYXRoLnJvdW5kKHMpLGU+MjU1fHxpPjI1NXx8cz4yNTV8fG8mJm4+MTAwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCAzIG51bWJlcnMgYmVsb3cgMjU2IChhbmQgb3B0aW9uYWxseSBvbmUgYmVsb3cgMTAwKVwiKTtyZXR1cm4gbj1vPygyNTZ8TWF0aC5yb3VuZCgyNTUqbi8xMDApKS50b1N0cmluZygxNikuc2xpY2UoMSk6XCJcIixcIiNcIisoc3xpPDw4fGU8PDE2fDE8PDI0KS50b1N0cmluZygxNikuc2xpY2UoMSkrbn1mdW5jdGlvbiBoZXhUb1JnYih0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmdcIik7Mz09PSh0PXQucmVwbGFjZSgvXiMvLFwiXCIpKS5sZW5ndGg/dD10WzBdK3RbMF0rdFsxXSt0WzFdK3RbMl0rdFsyXTo0PT09dC5sZW5ndGgmJih0PXRbMF0rdFswXSt0WzFdK3RbMV0rdFsyXSt0WzJdK3RbM10rdFszXSk7dmFyIGU9cGFyc2VJbnQodCwxNik7cmV0dXJuIHQubGVuZ3RoPjY/e3I6ZT4+MjQmMjU1LGc6ZT4+MTYmMjU1LGI6ZT4+OCYyNTUsYTpNYXRoLnJvdW5kKCgyNTUmZSkvMi41NSl9OntyOmU+PjE2LGc6ZT4+OCYyNTUsYjoyNTUmZX19ZnVuY3Rpb24gaHN2VG9SZ2IodCl7dmFyIGUsaSxzLG4sbyxyLGEsbCxjPXQuaCxoPXQucyx1PXQudixkPXQuYTtzd2l0Y2gocj0odS89MTAwKSooMS0oaC89MTAwKSksYT11KigxLShvPTYqKGMvPTM2MCktKG49TWF0aC5mbG9vcig2KmMpKSkqaCksbD11KigxLSgxLW8pKmgpLG4lNil7Y2FzZSAwOmU9dSxpPWwscz1yO2JyZWFrO2Nhc2UgMTplPWEsaT11LHM9cjticmVhaztjYXNlIDI6ZT1yLGk9dSxzPWw7YnJlYWs7Y2FzZSAzOmU9cixpPWEscz11O2JyZWFrO2Nhc2UgNDplPWwsaT1yLHM9dTticmVhaztjYXNlIDU6ZT11LGk9cixzPWF9cmV0dXJue3I6TWF0aC5yb3VuZCgyNTUqZSksZzpNYXRoLnJvdW5kKDI1NSppKSxiOk1hdGgucm91bmQoMjU1KnMpLGE6ZH19ZnVuY3Rpb24gcmdiVG9Ic3YodCl7dmFyIGUsaT10LnIscz10Lmcsbj10LmIsbz10LmEscj1NYXRoLm1heChpLHMsbiksYT1NYXRoLm1pbihpLHMsbiksbD1yLWEsYz0wPT09cj8wOmwvcixoPXIvMjU1O3N3aXRjaChyKXtjYXNlIGE6ZT0wO2JyZWFrO2Nhc2UgaTplPXMtbitsKihzPG4/NjowKSxlLz02Kmw7YnJlYWs7Y2FzZSBzOmU9bi1pKzIqbCxlLz02Kmw7YnJlYWs7Y2FzZSBuOmU9aS1zKzQqbCxlLz02Kmx9cmV0dXJue2g6TWF0aC5yb3VuZCgzNjAqZSksczpNYXRoLnJvdW5kKDEwMCpjKSx2Ok1hdGgucm91bmQoMTAwKmgpLGE6b319dmFyIHJlUkdCQT0vXlxccypyZ2IoYSk/XFxzKlxcKChcXHMqKFxcZCspXFxzKixcXHMqPyl7Mn0oXFxkKylcXHMqLD9cXHMqKFswMV0/XFwuP1xcZCo/KT9cXHMqXFwpXFxzKiQvO2Z1bmN0aW9uIHRleHRUb1JnYih0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmdcIik7dmFyIGU9cmVSR0JBLmV4ZWModCk7aWYoZSl7dmFyIGk9e3I6TWF0aC5tYXgoMjU1LHBhcnNlSW50KGVbMl0sMTApKSxnOk1hdGgubWF4KDI1NSxwYXJzZUludChlWzNdLDEwKSksYjpNYXRoLm1heCgyNTUscGFyc2VJbnQoZVs0XSwxMCkpfTtyZXR1cm4gZVsxXSYmKGkuYT1NYXRoLm1heCgxLHBhcnNlRmxvYXQoZVs1XSkpKSxpfXJldHVybiBoZXhUb1JnYih0KX1mdW5jdGlvbiBsaWdodGVuKHQsZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgc3RyaW5nIGFzIGNvbG9yXCIpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIG51bWVyaWMgcGVyY2VudFwiKTt2YXIgaT10ZXh0VG9SZ2IodCkscz1lPDA/MDoyNTUsbj1NYXRoLmFicyhlKS8xMDAsbz1pLnIscj1pLmcsYT1pLmI7cmV0dXJuXCIjXCIrKDE2Nzc3MjE2KzY1NTM2KihNYXRoLnJvdW5kKChzLW8pKm4pK28pKzI1NiooTWF0aC5yb3VuZCgocy1yKSpuKStyKSsoTWF0aC5yb3VuZCgocy1hKSpuKSthKSkudG9TdHJpbmcoMTYpLnNsaWNlKDEpfWZ1bmN0aW9uIGx1bWlub3NpdHkodCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQmJighdHx8dm9pZCAwPT09dC5yKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYSB7ciwgZywgYn0gb2JqZWN0IGFzIGNvbG9yXCIpO3ZhciBlPVwic3RyaW5nXCI9PXR5cGVvZiB0P3RleHRUb1JnYih0KTp0LGk9ZS5yLzI1NSxzPWUuZy8yNTUsbj1lLmIvMjU1O3JldHVybi4yMTI2KihpPD0uMDM5Mjg/aS8xMi45MjpNYXRoLnBvdygoaSsuMDU1KS8xLjA1NSwyLjQpKSsuNzE1Miooczw9LjAzOTI4P3MvMTIuOTI6TWF0aC5wb3coKHMrLjA1NSkvMS4wNTUsMi40KSkrLjA3MjIqKG48PS4wMzkyOD9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCkpfWZ1bmN0aW9uIHNldEJyYW5kKHQsZSxpKXtpZih2b2lkIDA9PT1pJiYoaT1kb2N1bWVudC5ib2R5KSxcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmcgYXMgY29sb3JcIik7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgc3RyaW5nIGFzIHZhbHVlXCIpO2lmKCEoaSBpbnN0YW5jZW9mIEVsZW1lbnQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIERPTSBlbGVtZW50XCIpO3N3aXRjaChpLnN0eWxlLnNldFByb3BlcnR5KFwiLS1xLWNvbG9yLVwiK3QsZSksdCl7Y2FzZVwibmVnYXRpdmVcIjpjYXNlXCJ3YXJuaW5nXCI6aS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcS1jb2xvci1cIit0K1wiLWxcIixsaWdodGVuKGUsNDYpKTticmVhaztjYXNlXCJsaWdodFwiOmkuc3R5bGUuc2V0UHJvcGVydHkoXCItLXEtY29sb3ItXCIrdCtcIi1kXCIsbGlnaHRlbihlLC0xMCkpfX1mdW5jdGlvbiBnZXRCcmFuZCh0LGUpe2lmKHZvaWQgMD09PWUmJihlPWRvY3VtZW50LmJvZHkpLFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIHN0cmluZyBhcyBjb2xvclwiKTtpZighKGUgaW5zdGFuY2VvZiBFbGVtZW50KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBET00gZWxlbWVudFwiKTtyZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlKS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1xLWNvbG9yLVwiK3QpLnRyaW0oKXx8bnVsbH12YXIgY29sb3JzPXtyZ2JUb0hleDpyZ2JUb0hleCxoZXhUb1JnYjpoZXhUb1JnYixoc3ZUb1JnYjpoc3ZUb1JnYixyZ2JUb0hzdjpyZ2JUb0hzdix0ZXh0VG9SZ2I6dGV4dFRvUmdiLGxpZ2h0ZW46bGlnaHRlbixsdW1pbm9zaXR5Omx1bWlub3NpdHksc2V0QnJhbmQ6c2V0QnJhbmQsZ2V0QnJhbmQ6Z2V0QnJhbmR9O2Z1bmN0aW9uIGdldEJvZHlDbGFzc2VzKHQsZSl7dmFyIGk9dC5pcyxzPXQuaGFzLG49dC53aXRoaW4sbz1bXCJtYXRcIixpLmRlc2t0b3A/XCJkZXNrdG9wXCI6XCJtb2JpbGVcIixzLnRvdWNoP1widG91Y2hcIjpcIm5vLXRvdWNoXCIsXCJwbGF0Zm9ybS1cIisoaS5pb3M/XCJpb3NcIjpcIm1hdFwiKV07aWYoaS5jb3Jkb3ZhJiYoby5wdXNoKFwiY29yZG92YVwiKSxpLmlvcyYmKHZvaWQgMD09PWUuY29yZG92YXx8ITEhPT1lLmNvcmRvdmEuaW9zU3RhdHVzQmFyUGFkZGluZykpKXt2YXIgcj13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSxhPXdpbmRvdy5zY3JlZW4ud2lkdGgqcixsPXdpbmRvdy5zY3JlZW4uaGVpZ2h0KnI7MTEyNT09PWEmJjI0MzY9PT1sJiZvLnB1c2goXCJxLWlvcy1zdGF0dXNiYXIteFwiKSwxMTI1PT09YSYmMjAwMT09PWx8fG8ucHVzaChcInEtaW9zLXN0YXR1c2Jhci1wYWRkaW5nXCIpfXJldHVybiBuLmlmcmFtZSYmby5wdXNoKFwid2l0aGluLWlmcmFtZVwiKSxpLmVsZWN0cm9uJiZvLnB1c2goXCJlbGVjdHJvblwiKSxvfWZ1bmN0aW9uIGJvZHlJbml0KHQsZSl7dmFyIGk9Z2V0Qm9keUNsYXNzZXModCxlKTt0LmlzLmllJiYxMT09PXQuaXMudmVyc2lvbk51bWJlcj9pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCh0KX0pOmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZC5hcHBseShkb2N1bWVudC5ib2R5LmNsYXNzTGlzdCxpKSx0LmlzLmlvcyYmZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGZ1bmN0aW9uKCl7fSl9ZnVuY3Rpb24gc2V0Q29sb3JzKHQpe2Zvcih2YXIgZSBpbiB0KXNldEJyYW5kKGUsdFtlXSl9dmFyIEJvZHk9e2luc3RhbGw6ZnVuY3Rpb24odCxlLGkpe2lzU1NSP2Uuc2VydmVyLnB1c2goZnVuY3Rpb24odCxlKXt2YXIgcz1nZXRCb2R5Q2xhc3Nlcyh0LnBsYXRmb3JtLGkpLG49ZS5zc3Iuc2V0Qm9keUNsYXNzZXM7XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uKHMpOmUuc3NyLlFfQk9EWV9DTEFTU0VTPXMuam9pbihcIiBcIil9KTooaS5icmFuZCYmc2V0Q29sb3JzKGkuYnJhbmQpLGJvZHlJbml0KHQucGxhdGZvcm0saSkpfX0sbWF0ZXJpYWxJY29ucz17bmFtZTpcIm1hdGVyaWFsLWljb25zXCIsdHlwZTp7cG9zaXRpdmU6XCJjaGVja19jaXJjbGVcIixuZWdhdGl2ZTpcIndhcm5pbmdcIixpbmZvOlwiaW5mb1wiLHdhcm5pbmc6XCJwcmlvcml0eV9oaWdoXCJ9LGFycm93Ont1cDpcImFycm93X3Vwd2FyZFwiLHJpZ2h0OlwiYXJyb3dfZm9yd2FyZFwiLGRvd246XCJhcnJvd19kb3dud2FyZFwiLGxlZnQ6XCJhcnJvd19iYWNrXCJ9LGNoZXZyb246e2xlZnQ6XCJjaGV2cm9uX2xlZnRcIixyaWdodDpcImNoZXZyb25fcmlnaHRcIn0scHVsbFRvUmVmcmVzaDp7YXJyb3c6XCJhcnJvd19kb3dud2FyZFwiLHJlZnJlc2g6XCJyZWZyZXNoXCJ9LHNlYXJjaDp7aWNvbjpcInNlYXJjaFwiLGNsZWFyOlwiY2FuY2VsXCIsY2xlYXJJbnZlcnRlZDpcImNsZWFyXCJ9LGNhcm91c2VsOntsZWZ0OlwiY2hldnJvbl9sZWZ0XCIscmlnaHQ6XCJjaGV2cm9uX3JpZ2h0XCIscXVpY2tOYXY6XCJsZW5zXCIsdGh1bWJuYWlsczpcInZpZXdfY2Fyb3VzZWxcIn0sY2hlY2tib3g6e2NoZWNrZWQ6e2lvczpcImNoZWNrX2NpcmNsZVwiLG1hdDpcImNoZWNrX2JveFwifSx1bmNoZWNrZWQ6e2lvczpcInJhZGlvX2J1dHRvbl91bmNoZWNrZWRcIixtYXQ6XCJjaGVja19ib3hfb3V0bGluZV9ibGFua1wifSxpbmRldGVybWluYXRlOntpb3M6XCJyZW1vdmVfY2lyY2xlX291dGxpbmVcIixtYXQ6XCJpbmRldGVybWluYXRlX2NoZWNrX2JveFwifX0sY2hpcDp7Y2xvc2U6XCJjYW5jZWxcIn0sY2hpcHNJbnB1dDp7YWRkOlwic2VuZFwifSxjb2xsYXBzaWJsZTp7aWNvbjpcImFycm93X2Ryb3BfZG93blwifSxkYXRldGltZTp7YXJyb3dMZWZ0OlwiY2hldnJvbl9sZWZ0XCIsYXJyb3dSaWdodDpcImNoZXZyb25fcmlnaHRcIn0sZWRpdG9yOntib2xkOlwiZm9ybWF0X2JvbGRcIixpdGFsaWM6XCJmb3JtYXRfaXRhbGljXCIsc3RyaWtldGhyb3VnaDpcInN0cmlrZXRocm91Z2hfc1wiLHVuZGVybGluZTpcImZvcm1hdF91bmRlcmxpbmVkXCIsdW5vcmRlcmVkTGlzdDpcImZvcm1hdF9saXN0X2J1bGxldGVkXCIsb3JkZXJlZExpc3Q6XCJmb3JtYXRfbGlzdF9udW1iZXJlZFwiLHN1YnNjcmlwdDpcInZlcnRpY2FsX2FsaWduX2JvdHRvbVwiLHN1cGVyc2NyaXB0OlwidmVydGljYWxfYWxpZ25fdG9wXCIsaHlwZXJsaW5rOlwibGlua1wiLHRvZ2dsZUZ1bGxzY3JlZW46XCJmdWxsc2NyZWVuXCIscXVvdGU6XCJmb3JtYXRfcXVvdGVcIixsZWZ0OlwiZm9ybWF0X2FsaWduX2xlZnRcIixjZW50ZXI6XCJmb3JtYXRfYWxpZ25fY2VudGVyXCIscmlnaHQ6XCJmb3JtYXRfYWxpZ25fcmlnaHRcIixqdXN0aWZ5OlwiZm9ybWF0X2FsaWduX2p1c3RpZnlcIixwcmludDpcInByaW50XCIsb3V0ZGVudDpcImZvcm1hdF9pbmRlbnRfZGVjcmVhc2VcIixpbmRlbnQ6XCJmb3JtYXRfaW5kZW50X2luY3JlYXNlXCIscmVtb3ZlRm9ybWF0OlwiZm9ybWF0X2NsZWFyXCIsZm9ybWF0dGluZzpcInRleHRfZm9ybWF0XCIsZm9udFNpemU6XCJmb3JtYXRfc2l6ZVwiLGFsaWduOlwiZm9ybWF0X2FsaWduX2xlZnRcIixocjpcInJlbW92ZVwiLHVuZG86XCJ1bmRvXCIscmVkbzpcInJlZG9cIixoZWFkZXI6XCJmb3JtYXRfc2l6ZVwiLGNvZGU6XCJjb2RlXCIsc2l6ZTpcImZvcm1hdF9zaXplXCIsZm9udDpcImZvbnRfZG93bmxvYWRcIn0sZmFiOntpY29uOlwiYWRkXCIsYWN0aXZlSWNvbjpcImNsb3NlXCJ9LGlucHV0OntzaG93UGFzczpcInZpc2liaWxpdHlcIixoaWRlUGFzczpcInZpc2liaWxpdHlfb2ZmXCIsc2hvd051bWJlcjpcImtleWJvYXJkXCIsaGlkZU51bWJlcjpcImtleWJvYXJkX2hpZGVcIixjbGVhcjpcImNhbmNlbFwiLGNsZWFySW52ZXJ0ZWQ6XCJjbGVhclwiLGRyb3Bkb3duOlwiYXJyb3dfZHJvcF9kb3duXCJ9LHBhZ2luYXRpb246e2ZpcnN0OlwiZmlyc3RfcGFnZVwiLHByZXY6XCJrZXlib2FyZF9hcnJvd19sZWZ0XCIsbmV4dDpcImtleWJvYXJkX2Fycm93X3JpZ2h0XCIsbGFzdDpcImxhc3RfcGFnZVwifSxyYWRpbzp7Y2hlY2tlZDp7aW9zOlwiY2hlY2tcIixtYXQ6XCJyYWRpb19idXR0b25fY2hlY2tlZFwifSx1bmNoZWNrZWQ6e2lvczpcIlwiLG1hdDpcInJhZGlvX2J1dHRvbl91bmNoZWNrZWRcIn19LHJhdGluZzp7aWNvbjpcImdyYWRlXCJ9LHN0ZXBwZXI6e2RvbmU6XCJjaGVja1wiLGFjdGl2ZTpcImVkaXRcIixlcnJvcjpcIndhcm5pbmdcIn0sdGFiczp7bGVmdDpcImNoZXZyb25fbGVmdFwiLHJpZ2h0OlwiY2hldnJvbl9yaWdodFwifSx0YWJsZTp7YXJyb3dVcDpcImFycm93X3Vwd2FyZFwiLHdhcm5pbmc6XCJ3YXJuaW5nXCIscHJldlBhZ2U6XCJjaGV2cm9uX2xlZnRcIixuZXh0UGFnZTpcImNoZXZyb25fcmlnaHRcIn0sdHJlZTp7aWNvbjpcInBsYXlfYXJyb3dcIn0sdXBsb2FkZXI6e2RvbmU6XCJkb25lXCIsY2xlYXI6XCJjYW5jZWxcIixjbGVhckludmVydGVkOlwiY2xlYXJcIixhZGQ6XCJhZGRcIix1cGxvYWQ6XCJjbG91ZF91cGxvYWRcIixleHBhbmQ6XCJrZXlib2FyZF9hcnJvd19kb3duXCIsZmlsZTpcImluc2VydF9kcml2ZV9maWxlXCJ9fSxJY29ucz17X19pbnN0YWxsZWQ6ITEsaW5zdGFsbDpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpczt0aGlzLnNldD1mdW5jdGlvbihpKXt2b2lkIDA9PT1pJiYoaT1tYXRlcmlhbEljb25zKSxpLnNldD1zLnNldCxpc1NTUnx8dC5pY29uP3QuaWNvbj1pOmUudXRpbC5kZWZpbmVSZWFjdGl2ZSh0LFwiaWNvblwiLGkpLHMubmFtZT1pLm5hbWUscy5kZWY9aX0sdGhpcy5zZXQoaSl9fSxxdWV1ZXM9e3NlcnZlcjpbXSx0YWtlb3ZlcjpbXX0sJHE9e3ZlcnNpb246dmVyc2lvbix0aGVtZTpcIm1hdFwifTtmdW5jdGlvbiBpbnN0YWxsKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9e30pLCF0aGlzLl9faW5zdGFsbGVkKXt0aGlzLl9faW5zdGFsbGVkPSEwO3ZhciBpPWUuY29uZmlnfHx7fTtpZihQbGF0Zm9ybS5pbnN0YWxsKCRxLHF1ZXVlcyx0KSxCb2R5Lmluc3RhbGwoJHEscXVldWVzLGkpLEhpc3RvcnkuaW5zdGFsbCgkcSxpKSxpMThuLmluc3RhbGwoJHEscXVldWVzLHQsZS5pMThuKSxJY29ucy5pbnN0YWxsKCRxLHQsZS5pY29uU2V0KSxpc1NTUj90Lm1peGluKHtiZWZvcmVDcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLiRxPXRoaXMuJHJvb3QuJG9wdGlvbnMuJHF9fSk6dC5wcm90b3R5cGUuJHE9JHEsZS5jb21wb25lbnRzJiZPYmplY3Qua2V5cyhlLmNvbXBvbmVudHMpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9ZS5jb21wb25lbnRzW2ldO3ZvaWQgMD09PXMubmFtZXx8dm9pZCAwPT09cy5yZW5kZXImJnZvaWQgMD09PXMubWl4aW5zfHx0LmNvbXBvbmVudChzLm5hbWUscyl9KSxlLmRpcmVjdGl2ZXMmJk9iamVjdC5rZXlzKGUuZGlyZWN0aXZlcykuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcz1lLmRpcmVjdGl2ZXNbaV07dm9pZCAwIT09cy5uYW1lJiZ2b2lkIDAhPT1zLnVuYmluZCYmdC5kaXJlY3RpdmUocy5uYW1lLHMpfSksZS5wbHVnaW5zKXt2YXIgcz17JHE6JHEscXVldWVzOnF1ZXVlcyxWdWU6dCxjZmc6aX07T2JqZWN0LmtleXMoZS5wbHVnaW5zKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPWUucGx1Z2luc1t0XTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmluc3RhbGwmJmkhPT1QbGF0Zm9ybSYmaS5pbnN0YWxsKHMpfSl9fX12YXIgbWl4aW49e21vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3F1ZXVlcy50YWtlb3Zlci5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UodC4kcSl9KX19O2Z1bmN0aW9uIHNzclVwZGF0ZSh0KXtpZih0LnNzcil7dmFyIGU9T2JqZWN0LmFzc2lnbih7fSwkcSk7T2JqZWN0LmFzc2lnbih0LnNzcix7UV9IRUFEX1RBR1M6XCJcIixRX0JPRFlfQVRUUlM6XCJcIixRX0JPRFlfVEFHUzpcIlwifSkscXVldWVzLnNlcnZlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2koZSx0KX0pLHQuYXBwLiRxPWV9ZWxzZXt2YXIgaT10LmFwcC5taXhpbnN8fFtdO2kuaW5jbHVkZXMobWl4aW4pfHwodC5hcHAubWl4aW5zPWkuY29uY2F0KG1peGluKSl9fXZhciB0aGVtZT1cIm1hdFwiLFZ1ZVBsdWdpbj17dmVyc2lvbjp2ZXJzaW9uLGluc3RhbGw6aW5zdGFsbCxpMThuOmkxOG4saWNvbnM6SWNvbnMsdGhlbWU6dGhlbWUsc3NyVXBkYXRlOnNzclVwZGF0ZX0saGFuZGxlcnM9W10sRXNjYXBlS2V5PXtfX2luc3RhbGxlZDohMSxfX2luc3RhbGw6ZnVuY3Rpb24oKXt0aGlzLl9faW5zdGFsbGVkPSEwLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixmdW5jdGlvbih0KXswIT09aGFuZGxlcnMubGVuZ3RoJiYoMjchPT10LndoaWNoJiYyNyE9PXQua2V5Q29kZXx8aGFuZGxlcnNbaGFuZGxlcnMubGVuZ3RoLTFdKCkpfSl9LHJlZ2lzdGVyOmZ1bmN0aW9uKHQpe1BsYXRmb3JtLmlzLmRlc2t0b3AmJih0aGlzLl9faW5zdGFsbGVkfHx0aGlzLl9faW5zdGFsbCgpLGhhbmRsZXJzLnB1c2godCkpfSxwb3A6ZnVuY3Rpb24oKXtQbGF0Zm9ybS5pcy5kZXNrdG9wJiZoYW5kbGVycy5wb3AoKX19LE1vZGVsVG9nZ2xlTWl4aW49e3Byb3BzOnt2YWx1ZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Nob3dpbmc6ITF9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmRpc2FibGUmJnQ/dGhpcy4kZW1pdChcImlucHV0XCIsITEpOnRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7ZS52YWx1ZSE9PWUuc2hvd2luZyYmZVt0P1wic2hvd1wiOlwiaGlkZVwiXSgpfSl9fSxtZXRob2RzOnt0b2dnbGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbdGhpcy5zaG93aW5nP1wiaGlkZVwiOlwic2hvd1wiXSh0KX0sc2hvdzpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmRpc2FibGV8fHRoaXMuc2hvd2luZz90aGlzLnNob3dQcm9taXNlfHxQcm9taXNlLnJlc29sdmUodCk6KHRoaXMuaGlkZVByb21pc2UmJnRoaXMuaGlkZVByb21pc2VSZWplY3QoKSx0aGlzLnNob3dpbmc9ITAsITE9PT10aGlzLnZhbHVlJiZ0aGlzLiRlbWl0KFwiaW5wdXRcIiwhMCksKHZvaWQgMD09PXRoaXMuJG9wdGlvbnMubW9kZWxUb2dnbGV8fHRoaXMuJG9wdGlvbnMubW9kZWxUb2dnbGUuaGlzdG9yeSkmJih0aGlzLl9faGlzdG9yeUVudHJ5PXtoYW5kbGVyOnRoaXMuaGlkZX0sSGlzdG9yeS5hZGQodGhpcy5fX2hpc3RvcnlFbnRyeSkpLHRoaXMuX19zaG93Pyh0aGlzLnNob3dQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGkscyl7ZS5zaG93UHJvbWlzZVJlc29sdmU9ZnVuY3Rpb24oKXtlLnNob3dQcm9taXNlPW51bGwsZS4kZW1pdChcInNob3dcIix0KSxpKHQpfSxlLnNob3dQcm9taXNlUmVqZWN0PWZ1bmN0aW9uKCl7ZS5zaG93UHJvbWlzZS5jYXRjaChmdW5jdGlvbigpe30pLGUuc2hvd1Byb21pc2U9bnVsbCxzKG51bGwpfX0pLHRoaXMuX19zaG93KHQpLHRoaXMuc2hvd1Byb21pc2V8fFByb21pc2UucmVzb2x2ZSh0KSk6KHRoaXMuJGVtaXQoXCJzaG93XCIsdCksUHJvbWlzZS5yZXNvbHZlKHQpKSl9LGhpZGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5kaXNhYmxlfHwhdGhpcy5zaG93aW5nP3RoaXMuaGlkZVByb21pc2V8fFByb21pc2UucmVzb2x2ZSh0KToodGhpcy5zaG93UHJvbWlzZSYmdGhpcy5zaG93UHJvbWlzZVJlamVjdCgpLHRoaXMuc2hvd2luZz0hMSwhMD09PXRoaXMudmFsdWUmJnRoaXMuJGVtaXQoXCJpbnB1dFwiLCExKSx0aGlzLl9fcmVtb3ZlSGlzdG9yeSgpLHRoaXMuX19oaWRlPyh0aGlzLmhpZGVQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGkscyl7ZS5oaWRlUHJvbWlzZVJlc29sdmU9ZnVuY3Rpb24oKXtlLmhpZGVQcm9taXNlPW51bGwsZS4kZW1pdChcImhpZGVcIix0KSxpKCl9LGUuaGlkZVByb21pc2VSZWplY3Q9ZnVuY3Rpb24oKXtlLmhpZGVQcm9taXNlLmNhdGNoKGZ1bmN0aW9uKCl7fSksZS5oaWRlUHJvbWlzZT1udWxsLHMobnVsbCl9fSksdGhpcy5fX2hpZGUodCksdGhpcy5oaWRlUHJvbWlzZXx8UHJvbWlzZS5yZXNvbHZlKHQpKToodGhpcy4kZW1pdChcImhpZGVcIix0KSxQcm9taXNlLnJlc29sdmUoKSkpfSxfX3JlbW92ZUhpc3Rvcnk6ZnVuY3Rpb24oKXt0aGlzLl9faGlzdG9yeUVudHJ5JiYoSGlzdG9yeS5yZW1vdmUodGhpcy5fX2hpc3RvcnlFbnRyeSksdGhpcy5fX2hpc3RvcnlFbnRyeT1udWxsKX19LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnNob3dpbmcmJih0aGlzLnNob3dQcm9taXNlJiZ0aGlzLnNob3dQcm9taXNlUmVqZWN0KCksdGhpcy5oaWRlUHJvbWlzZSYmdGhpcy5oaWRlUHJvbWlzZVJlamVjdCgpLHRoaXMuX19yZW1vdmVIaXN0b3J5KCkpfX0sbGlzdGVuT3B0cz17fTtmdW5jdGlvbiBsZWZ0Q2xpY2sodCl7cmV0dXJuIDA9PT10LmJ1dHRvbn1mdW5jdGlvbiBtaWRkbGVDbGljayh0KXtyZXR1cm4gMT09PXQuYnV0dG9ufWZ1bmN0aW9uIHJpZ2h0Q2xpY2sodCl7cmV0dXJuIDI9PT10LmJ1dHRvbn1mdW5jdGlvbiBnZXRFdmVudEtleSh0KXtyZXR1cm4gdC53aGljaHx8dC5rZXlDb2RlfWZ1bmN0aW9uIHBvc2l0aW9uKHQpe3ZhciBlLGk7aWYodC50b3VjaGVzJiZ0LnRvdWNoZXNbMF0/dD10LnRvdWNoZXNbMF06dC5jaGFuZ2VkVG91Y2hlcyYmdC5jaGFuZ2VkVG91Y2hlc1swXSYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksdC5jbGllbnRYfHx0LmNsaWVudFkpZT10LmNsaWVudFgsaT10LmNsaWVudFk7ZWxzZSBpZih0LnBhZ2VYfHx0LnBhZ2VZKWU9dC5wYWdlWC1kb2N1bWVudC5ib2R5LnNjcm9sbExlZnQtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsaT10LnBhZ2VZLWRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7ZWxzZXt2YXIgcz10YXJnZXRFbGVtZW50KHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2U9KHMucmlnaHQtcy5sZWZ0KS8yK3MubGVmdCxpPShzLmJvdHRvbS1zLnRvcCkvMitzLnRvcH1yZXR1cm57dG9wOmksbGVmdDplfX1mdW5jdGlvbiB0YXJnZXRFbGVtZW50KHQpe3ZhciBlO3JldHVybiB0LnRhcmdldD9lPXQudGFyZ2V0OnQuc3JjRWxlbWVudCYmKGU9dC5zcmNFbGVtZW50KSwzPT09ZS5ub2RlVHlwZSYmKGU9ZS5wYXJlbnROb2RlKSxlfWZ1bmN0aW9uIGdldEV2ZW50UGF0aCh0KXtpZih0LnBhdGgpcmV0dXJuIHQucGF0aDtpZih0LmNvbXBvc2VkUGF0aClyZXR1cm4gdC5jb21wb3NlZFBhdGgoKTtmb3IodmFyIGU9W10saT10LnRhcmdldDtpOyl7aWYoZS5wdXNoKGkpLFwiSFRNTFwiPT09aS50YWdOYW1lKXJldHVybiBlLnB1c2goZG9jdW1lbnQpLGUucHVzaCh3aW5kb3cpLGU7aT1pLnBhcmVudEVsZW1lbnR9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsaXN0ZW5PcHRzLFwicGFzc2l2ZVwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ7dHJ5e3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7dD17cGFzc2l2ZTohMH19fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJxdGVzdFwiLG51bGwsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJxdGVzdFwiLG51bGwsZSl9Y2F0Y2godCl7fXJldHVybiBsaXN0ZW5PcHRzLnBhc3NpdmU9dCx0fSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYXNzaXZlXCIse3ZhbHVlOnR9KX19KTt2YXIgTElORV9IRUlHSFQ9NDAsUEFHRV9IRUlHSFQ9ODAwO2Z1bmN0aW9uIGdldE1vdXNlV2hlZWxEaXN0YW5jZSh0KXt2YXIgZSxpPXQuZGVsdGFYLHM9dC5kZWx0YVk7aWYoKGl8fHMpJiZ0LmRlbHRhTW9kZSl7dmFyIG49MT09PXQuZGVsdGFNb2RlP0xJTkVfSEVJR0hUOlBBR0VfSEVJR0hUO2kqPW4scyo9bn1yZXR1cm4gdC5zaGlmdEtleSYmIWkmJihzPShlPVtpLHNdKVswXSxpPWVbMV0pLHt4OmkseTpzfX1mdW5jdGlvbiBzdG9wQW5kUHJldmVudCh0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKX12YXIgZXZlbnQ9e2xpc3Rlbk9wdHM6bGlzdGVuT3B0cyxsZWZ0Q2xpY2s6bGVmdENsaWNrLG1pZGRsZUNsaWNrOm1pZGRsZUNsaWNrLHJpZ2h0Q2xpY2s6cmlnaHRDbGljayxnZXRFdmVudEtleTpnZXRFdmVudEtleSxwb3NpdGlvbjpwb3NpdGlvbix0YXJnZXRFbGVtZW50OnRhcmdldEVsZW1lbnQsZ2V0RXZlbnRQYXRoOmdldEV2ZW50UGF0aCxnZXRNb3VzZVdoZWVsRGlzdGFuY2U6Z2V0TW91c2VXaGVlbERpc3RhbmNlLHN0b3BBbmRQcmV2ZW50OnN0b3BBbmRQcmV2ZW50fTtmdW5jdGlvbiBvZmZzZXQodCl7aWYoIXR8fHQ9PT13aW5kb3cpcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOmUudG9wLGxlZnQ6ZS5sZWZ0fX1mdW5jdGlvbiBzdHlsZSh0LGUpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIGhlaWdodCh0KXtyZXR1cm4gdD09PXdpbmRvdz93aW5kb3cuaW5uZXJIZWlnaHQ6cGFyc2VGbG9hdChzdHlsZSh0LFwiaGVpZ2h0XCIpKX1mdW5jdGlvbiB3aWR0aCh0KXtyZXR1cm4gdD09PXdpbmRvdz93aW5kb3cuaW5uZXJXaWR0aDpwYXJzZUZsb2F0KHN0eWxlKHQsXCJ3aWR0aFwiKSl9ZnVuY3Rpb24gY3NzKHQsZSl7dmFyIGk9dC5zdHlsZTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdF09ZVt0XX0pfWZ1bmN0aW9uIHJlYWR5KHQpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpcmV0dXJuXCJsb2FkaW5nXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlP3QoKTp2b2lkIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsdCwhMSl9dmFyIHByZWZpeD1bXCItd2Via2l0LVwiLFwiLW1vei1cIixcIi1tcy1cIixcIi1vLVwiXTtmdW5jdGlvbiBjc3NUcmFuc2Zvcm0odCl7dmFyIGU9e3RyYW5zZm9ybTp0fTtyZXR1cm4gcHJlZml4LmZvckVhY2goZnVuY3Rpb24oaSl7ZVtpK1widHJhbnNmb3JtXCJdPXR9KSxlfXZhciBzaXplLGRvbT17b2Zmc2V0Om9mZnNldCxzdHlsZTpzdHlsZSxoZWlnaHQ6aGVpZ2h0LHdpZHRoOndpZHRoLGNzczpjc3MscmVhZHk6cmVhZHksY3NzVHJhbnNmb3JtOmNzc1RyYW5zZm9ybX07ZnVuY3Rpb24gZ2V0U2Nyb2xsVGFyZ2V0KHQpe3JldHVybiB0LmNsb3Nlc3QoXCIuc2Nyb2xsLC5zY3JvbGwteSwub3ZlcmZsb3ctYXV0b1wiKXx8d2luZG93fWZ1bmN0aW9uIGdldFNjcm9sbEhlaWdodCh0KXtyZXR1cm4odD09PXdpbmRvdz9kb2N1bWVudC5ib2R5OnQpLnNjcm9sbEhlaWdodH1mdW5jdGlvbiBnZXRTY3JvbGxQb3NpdGlvbih0KXtyZXR1cm4gdD09PXdpbmRvdz93aW5kb3cucGFnZVlPZmZzZXR8fHdpbmRvdy5zY3JvbGxZfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcHx8MDp0LnNjcm9sbFRvcH1mdW5jdGlvbiBnZXRIb3Jpem9udGFsU2Nyb2xsUG9zaXRpb24odCl7cmV0dXJuIHQ9PT13aW5kb3c/d2luZG93LnBhZ2VYT2Zmc2V0fHx3aW5kb3cuc2Nyb2xsWHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0fHwwOnQuc2Nyb2xsTGVmdH1mdW5jdGlvbiBhbmltU2Nyb2xsVG8odCxlLGkpe3ZhciBzPWdldFNjcm9sbFBvc2l0aW9uKHQpO2k8PTA/cyE9PWUmJnNldFNjcm9sbCh0LGUpOnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3ZhciBuPXMrKGUtcykvTWF0aC5tYXgoMTYsaSkqMTY7c2V0U2Nyb2xsKHQsbiksbiE9PWUmJmFuaW1TY3JvbGxUbyh0LGUsaS0xNil9KX1mdW5jdGlvbiBzZXRTY3JvbGwodCxlKXtpZih0PT09d2luZG93KXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wPWUsdm9pZChkb2N1bWVudC5ib2R5LnNjcm9sbFRvcD1lKTt0LnNjcm9sbFRvcD1lfWZ1bmN0aW9uIHNldFNjcm9sbFBvc2l0aW9uKHQsZSxpKXtpP2FuaW1TY3JvbGxUbyh0LGUsaSk6c2V0U2Nyb2xsKHQsZSl9ZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyV2lkdGgoKXtpZih2b2lkIDAhPT1zaXplKXJldHVybiBzaXplO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtjc3ModCx7d2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMjAwcHhcIn0pLGNzcyhlLHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOlwiMHB4XCIsbGVmdDpcIjBweFwiLHZpc2liaWxpdHk6XCJoaWRkZW5cIix3aWR0aDpcIjIwMHB4XCIsaGVpZ2h0OlwiMTUwcHhcIixvdmVyZmxvdzpcImhpZGRlblwifSksZS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO3ZhciBpPXQub2Zmc2V0V2lkdGg7ZS5zdHlsZS5vdmVyZmxvdz1cInNjcm9sbFwiO3ZhciBzPXQub2Zmc2V0V2lkdGg7cmV0dXJuIGk9PT1zJiYocz1lLmNsaWVudFdpZHRoKSxlLnJlbW92ZSgpLHNpemU9aS1zfWZ1bmN0aW9uIGhhc1Njcm9sbGJhcih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMCksISghdHx8dC5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKSYmKGU/dC5zY3JvbGxIZWlnaHQ+dC5jbGllbnRIZWlnaHQmJih0LmNsYXNzTGlzdC5jb250YWlucyhcInNjcm9sbFwiKXx8dC5jbGFzc0xpc3QuY29udGFpbnMoXCJvdmVyZmxvdy1hdXRvXCIpfHxbXCJhdXRvXCIsXCJzY3JvbGxcIl0uaW5jbHVkZXMod2luZG93LmdldENvbXB1dGVkU3R5bGUodClbXCJvdmVyZmxvdy15XCJdKSk6dC5zY3JvbGxXaWR0aD50LmNsaWVudFdpZHRoJiYodC5jbGFzc0xpc3QuY29udGFpbnMoXCJzY3JvbGxcIil8fHQuY2xhc3NMaXN0LmNvbnRhaW5zKFwib3ZlcmZsb3ctYXV0b1wiKXx8W1wiYXV0b1wiLFwic2Nyb2xsXCJdLmluY2x1ZGVzKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW1wib3ZlcmZsb3cteFwiXSkpKX12YXIgc2Nyb2xsPXtnZXRTY3JvbGxUYXJnZXQ6Z2V0U2Nyb2xsVGFyZ2V0LGdldFNjcm9sbEhlaWdodDpnZXRTY3JvbGxIZWlnaHQsZ2V0U2Nyb2xsUG9zaXRpb246Z2V0U2Nyb2xsUG9zaXRpb24sYW5pbVNjcm9sbFRvOmFuaW1TY3JvbGxUbyxzZXRTY3JvbGxQb3NpdGlvbjpzZXRTY3JvbGxQb3NpdGlvbixnZXRTY3JvbGxiYXJXaWR0aDpnZXRTY3JvbGxiYXJXaWR0aCxoYXNTY3JvbGxiYXI6aGFzU2Nyb2xsYmFyfSxyZWdpc3RlcmVkPTA7ZnVuY3Rpb24gb25XaGVlbCh0KXtzaG91bGRQcmV2ZW50U2Nyb2xsKHQpJiZzdG9wQW5kUHJldmVudCh0KX1mdW5jdGlvbiBzaG91bGRQcmV2ZW50U2Nyb2xsKHQpe2lmKHQudGFyZ2V0PT09ZG9jdW1lbnQuYm9keXx8dC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1sYXlvdXQtYmFja2Ryb3BcIikpcmV0dXJuITA7Zm9yKHZhciBlPWdldEV2ZW50UGF0aCh0KSxpPXQuc2hpZnRLZXkmJiF0LmRlbHRhWCxzPSFpJiZNYXRoLmFicyh0LmRlbHRhWCk8PU1hdGguYWJzKHQuZGVsdGFZKSxuPWl8fHM/dC5kZWx0YVk6dC5kZWx0YVgsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcj1lW29dO2lmKGhhc1Njcm9sbGJhcihyLHMpKXJldHVybiBzP248MCYmMD09PXIuc2Nyb2xsVG9wfHxuPjAmJnIuc2Nyb2xsVG9wK3IuY2xpZW50SGVpZ2h0PT09ci5zY3JvbGxIZWlnaHQ6bjwwJiYwPT09ci5zY3JvbGxMZWZ0fHxuPjAmJnIuc2Nyb2xsTGVmdCtyLmNsaWVudFdpZHRoPT09ci5zY3JvbGxXaWR0aH1yZXR1cm4hMH1mdW5jdGlvbiBwcmV2ZW50U2Nyb2xsKHQpe2lmKCEoKHJlZ2lzdGVyZWQrPXQ/MTotMSk+MSkpe3ZhciBlPXQ/XCJhZGRcIjpcInJlbW92ZVwiO1BsYXRmb3JtLmlzLm1vYmlsZT9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdFtlXShcInEtYm9keS1wcmV2ZW50LXNjcm9sbFwiKTpQbGF0Zm9ybS5pcy5kZXNrdG9wJiZ3aW5kb3dbZStcIkV2ZW50TGlzdGVuZXJcIl0oXCJ3aGVlbFwiLG9uV2hlZWwpfX12YXIgcG9zaXRpb25zPXt0b3A6XCJpdGVtcy1zdGFydCBqdXN0aWZ5LWNlbnRlciB3aXRoLWJhY2tkcm9wXCIsYm90dG9tOlwiaXRlbXMtZW5kIGp1c3RpZnktY2VudGVyIHdpdGgtYmFja2Ryb3BcIixyaWdodDpcIml0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCB3aXRoLWJhY2tkcm9wXCIsbGVmdDpcIml0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IHdpdGgtYmFja2Ryb3BcIn0scG9zaXRpb25DU1M9e21heEhlaWdodDpcIjgwdmhcIixoZWlnaHQ6XCJhdXRvXCJ9O2Z1bmN0aW9uIGFkZGl0aW9uYWxDU1ModCl7dmFyIGU9e307cmV0dXJuW1wibGVmdFwiLFwicmlnaHRcIl0uaW5jbHVkZXModCkmJihlLm1heFdpZHRoPVwiOTB2d1wiKSxbXCJsZWZ0XCIsXCJ0b3BcIl0uaW5jbHVkZXModCkmJihlLmJvcmRlclRvcExlZnRSYWRpdXM9MCksW1wicmlnaHRcIixcInRvcFwiXS5pbmNsdWRlcyh0KSYmKGUuYm9yZGVyVG9wUmlnaHRSYWRpdXM9MCksW1wibGVmdFwiLFwiYm90dG9tXCJdLmluY2x1ZGVzKHQpJiYoZS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzPTApLFtcInJpZ2h0XCIsXCJib3R0b21cIl0uaW5jbHVkZXModCkmJihlLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzPTApLGV9dmFyIG1vZGFscz17cmVzcG9uc2l2ZTowLG1heGltaXplZDowfSxRTW9kYWw9e25hbWU6XCJRTW9kYWxcIixtaXhpbnM6W01vZGVsVG9nZ2xlTWl4aW5dLHByb3ZpZGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybntfX3Ftb2RhbDp7cmVnaXN0ZXI6ZnVuY3Rpb24oZSl7dC5sYXlvdXQhPT1lJiYodC5sYXlvdXQ9ZSl9LHVucmVnaXN0ZXI6ZnVuY3Rpb24oZSl7dC5sYXlvdXQ9PT1lJiYodC5sYXlvdXQ9bnVsbCl9fX19LHByb3BzOntwb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIlwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5cIlwiPT09dHx8W1widG9wXCIsXCJib3R0b21cIixcImxlZnRcIixcInJpZ2h0XCJdLmluY2x1ZGVzKHQpfX0sdHJhbnNpdGlvbjpTdHJpbmcsZW50ZXJDbGFzczpTdHJpbmcsbGVhdmVDbGFzczpTdHJpbmcscG9zaXRpb25DbGFzc2VzOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZmxleC1jZW50ZXJcIn0sY29udGVudENsYXNzZXM6W09iamVjdCxBcnJheSxTdHJpbmddLGNvbnRlbnRDc3M6W09iamVjdCxBcnJheSxTdHJpbmddLG5vQmFja2Ryb3BEaXNtaXNzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sbm9Fc2NEaXNtaXNzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sbm9Sb3V0ZURpc21pc3M6Qm9vbGVhbixub1JlZm9jdXM6Qm9vbGVhbixtaW5pbWl6ZWQ6Qm9vbGVhbixtYXhpbWl6ZWQ6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybntsYXlvdXQ6bnVsbH19LHdhdGNoOnskcm91dGU6ZnVuY3Rpb24oKXt0aGlzLm5vUm91dGVEaXNtaXNzfHx0aGlzLmhpZGUoKX0sbWF4aW1pemVkOmZ1bmN0aW9uKHQsZSl7dGhpcy5fX3JlZ2lzdGVyKCExLGUpLHRoaXMuX19yZWdpc3RlcighMCx0KX0sbWluaW1pemVkOmZ1bmN0aW9uKHQsZSl7dGhpcy5fX3JlZ2lzdGVyKCExLHRoaXMubWF4aW1pemVkLGUpLHRoaXMuX19yZWdpc3RlcighMCx0aGlzLm1heGltaXplZCx0KX19LGNvbXB1dGVkOnttb2RhbENsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBvc2l0aW9uP3Bvc2l0aW9uc1t0aGlzLnBvc2l0aW9uXTp0aGlzLnBvc2l0aW9uQ2xhc3NlcztyZXR1cm4gdGhpcy5tYXhpbWl6ZWQ/W1wibWF4aW1pemVkXCIsdF06dGhpcy5taW5pbWl6ZWQ/W1wibWluaW1pemVkXCIsdF06dH0sY29udGVudENsYXNzZXNDYWxjOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0P1t0aGlzLmNvbnRlbnRDbGFzc2VzLFwiY29sdW1uIG5vLXdyYXBcIl06dGhpcy5jb250ZW50Q2xhc3Nlc30sdHJhbnNpdGlvblByb3BzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24/e25hbWU6XCJxLW1vZGFsLVwiK3RoaXMucG9zaXRpb259OnRoaXMuZW50ZXJDbGFzc3x8dGhpcy5sZWF2ZUNsYXNzP3tlbnRlckFjdGl2ZUNsYXNzOnRoaXMuZW50ZXJDbGFzcyxsZWF2ZUFjdGl2ZUNsYXNzOnRoaXMubGVhdmVDbGFzc306e25hbWU6dGhpcy50cmFuc2l0aW9ufHxcInEtbW9kYWxcIn19LG1vZGFsQ3NzOmZ1bmN0aW9uKCl7aWYodGhpcy5wb3NpdGlvbil7dmFyIHQ9QXJyYXkuaXNBcnJheSh0aGlzLmNvbnRlbnRDc3MpP3RoaXMuY29udGVudENzczpbdGhpcy5jb250ZW50Q3NzXTtyZXR1cm4gdC51bnNoaWZ0KE9iamVjdC5hc3NpZ24oe30scG9zaXRpb25DU1MsYWRkaXRpb25hbENTUyh0aGlzLnBvc2l0aW9uKSkpLHR9cmV0dXJuIHRoaXMuY29udGVudENzc319LG1ldGhvZHM6e19fZGlzbWlzczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5ub0JhY2tkcm9wRGlzbWlzcz90aGlzLl9fc2hha2UoKTp0aGlzLmhpZGUoKS50aGVuKGZ1bmN0aW9uKCl7dC4kZW1pdChcImRpc21pc3NcIil9KX0sX19zaG93OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLm5vUmVmb2N1c3x8KHRoaXMuX19yZWZvY3VzVGFyZ2V0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy4kZWwpLHRoaXMuX19yZWdpc3RlcighMCkscHJldmVudFNjcm9sbCghMCksRXNjYXBlS2V5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7dC5ub0VzY0Rpc21pc3M/dC5fX3NoYWtlKCk6KHQuJGVtaXQoXCJlc2NhcGUta2V5XCIpLHQuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXt0LiRlbWl0KFwiZGlzbWlzc1wiKX0pKX0pO3ZhciBlPXRoaXMuJHJlZnMuY29udGVudDt0aGlzLiRxLnBsYXRmb3JtLmlzLmlvcyYmZS5jbGljaygpLGUuc2Nyb2xsVG9wPTAsW1wibW9kYWwtc2Nyb2xsXCIsXCJsYXlvdXQtdmlld1wiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1tdLnNsaWNlLmNhbGwoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHQpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2Nyb2xsVG9wPTB9KX0pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGUmJmUuZm9jdXMoKX0pfSxfX2hpZGU6ZnVuY3Rpb24oKXt0aGlzLl9fY2xlYW51cCgpLCF0aGlzLm5vUmVmb2N1cyYmdGhpcy5fX3JlZm9jdXNUYXJnZXQmJih0aGlzLl9fcmVmb2N1c1RhcmdldC5mb2N1cygpLCF0aGlzLl9fcmVmb2N1c1RhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJxLWlmXCIpJiZ0aGlzLl9fcmVmb2N1c1RhcmdldC5ibHVyKCkpfSxfX2NsZWFudXA6ZnVuY3Rpb24oKXtFc2NhcGVLZXkucG9wKCkscHJldmVudFNjcm9sbCghMSksdGhpcy5fX3JlZ2lzdGVyKCExKX0sX19zdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX0sX19yZWdpc3RlcjpmdW5jdGlvbih0LGUsaSl7dm9pZCAwPT09ZSYmKGU9dGhpcy5tYXhpbWl6ZWQpLHZvaWQgMD09PWkmJihpPXRoaXMubWluaW1pemVkKTt2YXIgcz10P3thY3Rpb246XCJhZGRcIixzdGVwOjF9OnthY3Rpb246XCJyZW1vdmVcIixzdGVwOi0xfTtpZihlKXtpZihtb2RhbHMubWF4aW1pemVkKz1zLnN0ZXAsIXQmJm1vZGFscy5tYXhpbWl6ZWQ+MClyZXR1cm47ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Rbcy5hY3Rpb25dKFwicS1tYXhpbWl6ZWQtbW9kYWxcIil9ZWxzZSBpZighaSl7aWYobW9kYWxzLnJlc3BvbnNpdmUrPXMuc3RlcCwhdCYmbW9kYWxzLnJlc3BvbnNpdmU+MClyZXR1cm47ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Rbcy5hY3Rpb25dKFwicS1yZXNwb25zaXZlLW1vZGFsXCIpfX0sX19zaGFrZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kZWwuY2xhc3NMaXN0LnJlbW92ZShcImFuaW1hdGUtc2hha2VcIiksdGhpcy4kZWwuY2xhc3NMaXN0LmFkZChcImFuaW1hdGUtc2hha2VcIiksY2xlYXJUaW1lb3V0KHRoaXMuc2hha2VUaW1lb3V0KSx0aGlzLnNoYWtlVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC4kZWwuY2xhc3NMaXN0LnJlbW92ZShcImFuaW1hdGUtc2hha2VcIil9LDE1MCl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy52YWx1ZSYmdGhpcy5zaG93KCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5zaGFrZVRpbWVvdXQpLHRoaXMuJGVsLnJlbW92ZSgpLHRoaXMuc2hvd2luZyYmdGhpcy5fX2NsZWFudXAoKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJ0cmFuc2l0aW9uXCIse3Byb3BzOnRoaXMudHJhbnNpdGlvblByb3BzLG9uOnthZnRlckVudGVyOmZ1bmN0aW9uKCl7ZS5zaG93UHJvbWlzZSYmZS5zaG93UHJvbWlzZVJlc29sdmUoKX0sZW50ZXJDYW5jZWxsZWQ6ZnVuY3Rpb24oKXtlLnNob3dQcm9taXNlJiZlLnNob3dQcm9taXNlUmVqZWN0KCksZS4kZWwucmVtb3ZlKCl9LGFmdGVyTGVhdmU6ZnVuY3Rpb24oKXtlLmhpZGVQcm9taXNlJiZlLmhpZGVQcm9taXNlUmVzb2x2ZSgpLGUuJGVsLnJlbW92ZSgpfSxsZWF2ZUNhbmNlbGxlZDpmdW5jdGlvbigpe2UuaGlkZVByb21pc2UmJmUuaGlkZVByb21pc2VSZWplY3QoKX19fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm1vZGFsIGZ1bGxzY3JlZW4gcm93XCIsY2xhc3M6dGhpcy5tb2RhbENsYXNzZXMsZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIsdmFsdWU6dGhpcy5zaG93aW5nfV19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYmFja2Ryb3AgYWJzb2x1dGUtZnVsbFwiLG9uOntjbGljazp0aGlzLl9fZGlzbWlzc319KSx0KFwiZGl2XCIse3JlZjpcImNvbnRlbnRcIixzdGF0aWNDbGFzczpcIm1vZGFsLWNvbnRlbnRcIixzdHlsZTp0aGlzLm1vZGFsQ3NzLGNsYXNzOnRoaXMuY29udGVudENsYXNzZXNDYWxjLGF0dHJzOnt0YWJpbmRleDotMX0sb246e2NsaWNrOnRoaXMuX19zdG9wUHJvcGFnYXRpb24sdG91Y2hzdGFydDp0aGlzLl9fc3RvcFByb3BhZ2F0aW9ufX0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKV0pfX0scHJlZml4JDE9XCJtZFwiLFFJY29uPXtuYW1lOlwiUUljb25cIixwcm9wczp7bmFtZTpTdHJpbmcsY29sb3I6U3RyaW5nLHNpemU6U3RyaW5nfSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5uYW1lO3JldHVybiBlPyh0PS9eZmFbc3xyfGx8Yl17MCwxfSAvLnRlc3QoZSl8fGUuc3RhcnRzV2l0aChcImljb24tXCIpP2U6ZS5zdGFydHNXaXRoKFwiYnQtXCIpP1wiYnQgXCIrZTplLnN0YXJ0c1dpdGgoXCJldmEtXCIpP1wiZXZhIFwiK2U6L15pb24tKG1kfGlvc3xsb2dvKS8udGVzdChlKT9cImlvbmljb25zIFwiK2U6ZS5zdGFydHNXaXRoKFwiaW9uLVwiKT9cImlvbmljb25zIGlvbi1cIitwcmVmaXgkMStlLnN1YnN0cigzKTplLnN0YXJ0c1dpdGgoXCJtZGktXCIpP1wibWRpIFwiK2U6XCJtYXRlcmlhbC1pY29uc1wiLHRoaXMuY29sb3I/dCtcIiB0ZXh0LVwiK3RoaXMuY29sb3I6dCk6XCJcIn0sY29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzZXMuc3RhcnRzV2l0aChcIm1hdGVyaWFsLWljb25zXCIpP3RoaXMubmFtZS5yZXBsYWNlKC8gL2csXCJfXCIpOlwiIFwifSxzdHlsZTpmdW5jdGlvbigpe2lmKHRoaXMuc2l6ZSlyZXR1cm57Zm9udFNpemU6dGhpcy5zaXplfX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImlcIix7c3RhdGljQ2xhc3M6XCJxLWljb25cIixjbGFzczp0aGlzLmNsYXNzZXMsc3R5bGU6dGhpcy5zdHlsZSxhdHRyczp7XCJhcmlhLWhpZGRlblwiOiEwfX0sW3RoaXMuY29udGVudCx0aGlzLiRzbG90cy5kZWZhdWx0XSl9fSxRTGlzdD17bmFtZTpcIlFMaXN0XCIscHJvcHM6e25vQm9yZGVyOkJvb2xlYW4sZGFyazpCb29sZWFuLGRlbnNlOkJvb2xlYW4sc3BhcnNlOkJvb2xlYW4sc3RyaXBlZDpCb29sZWFuLHN0cmlwZWRPZGQ6Qm9vbGVhbixzZXBhcmF0b3I6Qm9vbGVhbixpbnNldFNlcGFyYXRvcjpCb29sZWFuLG11bHRpbGluZTpCb29sZWFuLGhpZ2hsaWdodDpCb29sZWFuLGxpbms6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJuby1ib3JkZXJcIjp0aGlzLm5vQm9yZGVyLFwicS1saXN0LWRhcmtcIjp0aGlzLmRhcmssXCJxLWxpc3QtZGVuc2VcIjp0aGlzLmRlbnNlLFwicS1saXN0LXNwYXJzZVwiOnRoaXMuc3BhcnNlLFwicS1saXN0LXN0cmlwZWRcIjp0aGlzLnN0cmlwZWQsXCJxLWxpc3Qtc3RyaXBlZC1vZGRcIjp0aGlzLnN0cmlwZWRPZGQsXCJxLWxpc3Qtc2VwYXJhdG9yXCI6dGhpcy5zZXBhcmF0b3IsXCJxLWxpc3QtaW5zZXQtc2VwYXJhdG9yXCI6dGhpcy5pbnNldFNlcGFyYXRvcixcInEtbGlzdC1tdWx0aWxpbmVcIjp0aGlzLm11bHRpbGluZSxcInEtbGlzdC1oaWdobGlnaHRcIjp0aGlzLmhpZ2hsaWdodCxcInEtbGlzdC1saW5rXCI6dGhpcy5saW5rfX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbGlzdFwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxyb3V0ZXJMaW5rRXZlbnROYW1lPVwicXJvdXRlcmxpbmtjbGlja1wiLGV2dD1udWxsO2lmKCFpc1NTUil0cnl7ZXZ0PW5ldyBFdmVudChyb3V0ZXJMaW5rRXZlbnROYW1lKX1jYXRjaCh0KXsoZXZ0PWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIikpLmluaXRFdmVudChyb3V0ZXJMaW5rRXZlbnROYW1lLCEwLCExKX12YXIgcm91dGVyTGlua1Byb3BzPXt0bzpbU3RyaW5nLE9iamVjdF0sZXhhY3Q6Qm9vbGVhbixhcHBlbmQ6Qm9vbGVhbixyZXBsYWNlOkJvb2xlYW4sZXZlbnQ6W1N0cmluZyxBcnJheV0sYWN0aXZlQ2xhc3M6U3RyaW5nLGV4YWN0QWN0aXZlQ2xhc3M6U3RyaW5nfSxSb3V0ZXJMaW5rTWl4aW49e3Byb3BzOnJvdXRlckxpbmtQcm9wcyxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3JvdXRlckxpbmtFdmVudE5hbWU6cm91dGVyTGlua0V2ZW50TmFtZX19fTtmdW5jdGlvbiB0ZXh0U3R5bGUodCl7cmV0dXJuIHZvaWQgMD09PXR8fHQ8Mj97fTp7b3ZlcmZsb3c6XCJoaWRkZW5cIixkaXNwbGF5OlwiLXdlYmtpdC1ib3hcIixcIi13ZWJraXQtYm94LW9yaWVudFwiOlwidmVydGljYWxcIixcIi13ZWJraXQtbGluZS1jbGFtcFwiOnR9fXZhciBzdWJJdGVtUHJvcHM9e2ljb246U3RyaW5nLHJpZ2h0SWNvbjpTdHJpbmcsaW1hZ2U6U3RyaW5nLHJpZ2h0SW1hZ2U6U3RyaW5nLGF2YXRhcjpTdHJpbmcscmlnaHRBdmF0YXI6U3RyaW5nLGxldHRlcjpTdHJpbmcscmlnaHRMZXR0ZXI6U3RyaW5nLGxhYmVsOlN0cmluZyxzdWJsYWJlbDpTdHJpbmcsbGFiZWxMaW5lczpbU3RyaW5nLE51bWJlcl0sc3VibGFiZWxMaW5lczpbU3RyaW5nLE51bWJlcl19LEl0ZW1NaXhpbj17bWl4aW5zOlt7cHJvcHM6cm91dGVyTGlua1Byb3BzfV0scHJvcHM6e2Rhcms6Qm9vbGVhbixsaW5rOkJvb2xlYW4sZGVuc2U6Qm9vbGVhbixzcGFyc2U6Qm9vbGVhbixzZXBhcmF0b3I6Qm9vbGVhbixpbnNldFNlcGFyYXRvcjpCb29sZWFuLG11bHRpbGluZTpCb29sZWFuLGhpZ2hsaWdodDpCb29sZWFuLHRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRpdlwifX0sY29tcHV0ZWQ6e2l0ZW1DbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJue1wicS1pdGVtXCI6ITAsXCJxLWl0ZW0tZGl2aXNpb25cIjohMCxcInJlbGF0aXZlLXBvc2l0aW9uXCI6ITAsXCJxLWl0ZW0tZGFya1wiOnRoaXMuZGFyayxcInEtaXRlbS1kZW5zZVwiOnRoaXMuZGVuc2UsXCJxLWl0ZW0tc3BhcnNlXCI6dGhpcy5zcGFyc2UsXCJxLWl0ZW0tc2VwYXJhdG9yXCI6dGhpcy5zZXBhcmF0b3IsXCJxLWl0ZW0taW5zZXQtc2VwYXJhdG9yXCI6dGhpcy5pbnNldFNlcGFyYXRvcixcInEtaXRlbS1tdWx0aWxpbmVcIjp0aGlzLm11bHRpbGluZSxcInEtaXRlbS1oaWdobGlnaHRcIjp0aGlzLmhpZ2hsaWdodCxcInEtaXRlbS1saW5rXCI6dGhpcy50b3x8dGhpcy5saW5rfX19fSxRSXRlbT17bmFtZTpcIlFJdGVtXCIsbWl4aW5zOltJdGVtTWl4aW5dLHByb3BzOnthY3RpdmU6Qm9vbGVhbixsaW5rOkJvb2xlYW59LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMCE9PXRoaXMudG8/XCJxLWxpbmtcIjp7YWN0aXZlOnRoaXMuYWN0aXZlfSx0aGlzLml0ZW1DbGFzc2VzXX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy50bz90KFwicm91dGVyLWxpbmtcIix7cHJvcHM6T2JqZWN0LmFzc2lnbih7fSx0aGlzLiRwcm9wcyx7dGFnOlwiYVwifSksY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KTp0KHRoaXMudGFnLHtjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUl0ZW1TaWRlPXtuYW1lOlwiUUl0ZW1TaWRlXCIscHJvcHM6e3JpZ2h0OkJvb2xlYW4saWNvbjpTdHJpbmcsbGV0dGVyOnt0eXBlOlN0cmluZyx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aH19LGludmVydGVkOkJvb2xlYW4sYXZhdGFyOlN0cmluZyxpbWFnZTpTdHJpbmcsc3RhbXA6U3RyaW5nLGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nfSxjb21wdXRlZDp7dHlwZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuW1wiaWNvblwiLFwiaW1hZ2VcIixcImF2YXRhclwiLFwibGV0dGVyXCIsXCJzdGFtcFwiXS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXCJxLWl0ZW0tc2lkZS1cIisodGhpcy5yaWdodD9cInJpZ2h0XCI6XCJsZWZ0XCIpXTtyZXR1cm4hdGhpcy5jb2xvcnx8dGhpcy5pY29ufHx0aGlzLmxldHRlcnx8dC5wdXNoKFwidGV4dC1cIit0aGlzLmNvbG9yKSx0fSx0eXBlQ2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtcInEtaXRlbS1cIit0aGlzLnR5cGVdO3JldHVybiB0aGlzLmNvbG9yJiYodGhpcy5pbnZlcnRlZCYmKHRoaXMuaWNvbnx8dGhpcy5sZXR0ZXIpP3QucHVzaChcImJnLVwiK3RoaXMuY29sb3IpOnRoaXMudGV4dENvbG9yfHx0LnB1c2goXCJ0ZXh0LVwiK3RoaXMuY29sb3IpKSx0aGlzLnRleHRDb2xvciYmdC5wdXNoKFwidGV4dC1cIit0aGlzLnRleHRDb2xvciksdGhpcy5pbnZlcnRlZCYmKHRoaXMuaWNvbnx8dGhpcy5sZXR0ZXIpJiYodC5wdXNoKFwicS1pdGVtLWludmVydGVkXCIpLHQucHVzaChcImZsZXhcIiksdC5wdXNoKFwiZmxleC1jZW50ZXJcIikpLHR9LGltYWdlUGF0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmltYWdlfHx0aGlzLmF2YXRhcn19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gdGhpcy50eXBlJiYodGhpcy5pY29uPyhlPXQoUUljb24se2NsYXNzOnRoaXMuaW52ZXJ0ZWQ/bnVsbDp0aGlzLnR5cGVDbGFzc2VzLHByb3BzOntuYW1lOnRoaXMuaWNvbn19KSx0aGlzLmludmVydGVkJiYoZT10KFwiZGl2XCIse2NsYXNzOnRoaXMudHlwZUNsYXNzZXN9LFtlXSkpKTplPXRoaXMuaW1hZ2VQYXRoP3QoXCJpbWdcIix7Y2xhc3M6dGhpcy50eXBlQ2xhc3NlcyxhdHRyczp7c3JjOnRoaXMuaW1hZ2VQYXRofX0pOnQoXCJkaXZcIix7Y2xhc3M6dGhpcy50eXBlQ2xhc3Nlc30sW3RoaXMuc3RhbXB8fHRoaXMubGV0dGVyXSkpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWl0ZW0tc2lkZSBxLWl0ZW0tc2VjdGlvblwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sW2UsdGhpcy4kc2xvdHMuZGVmYXVsdF0pfX07ZnVuY3Rpb24gdGV4dCh0LGUsaSxzKXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaXRlbS1cIitlKygxPT09KHM9cGFyc2VJbnQocywxMCkpP1wiIGVsbGlwc2lzXCI6XCJcIiksc3R5bGU6dGV4dFN0eWxlKHMpLGRvbVByb3BzOntpbm5lckhUTUw6aX19KX12YXIgUUl0ZW1NYWluPXtuYW1lOlwiUUl0ZW1NYWluXCIscHJvcHM6e2xhYmVsOlN0cmluZyxsYWJlbExpbmVzOltTdHJpbmcsTnVtYmVyXSxzdWJsYWJlbDpTdHJpbmcsc3VibGFiZWxMaW5lczpbU3RyaW5nLE51bWJlcl0saW5zZXQ6Qm9vbGVhbix0YWc6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJkaXZcIn19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCh0aGlzLnRhZyx7c3RhdGljQ2xhc3M6XCJxLWl0ZW0tbWFpbiBxLWl0ZW0tc2VjdGlvblwiLGNsYXNzOntcInEtaXRlbS1tYWluLWluc2V0XCI6dGhpcy5pbnNldH19LFt0aGlzLmxhYmVsP3RleHQodCxcImxhYmVsXCIsdGhpcy5sYWJlbCx0aGlzLmxhYmVsTGluZXMpOm51bGwsdGhpcy5zdWJsYWJlbD90ZXh0KHQsXCJzdWJsYWJlbFwiLHRoaXMuc3VibGFiZWwsdGhpcy5zdWJsYWJlbExpbmVzKTpudWxsLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX19LFFJdGVtU2VwYXJhdG9yPXtuYW1lOlwiUUl0ZW1TZXBhcmF0b3JcIixwcm9wczp7aW5zZXQ6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pdGVtLXNlcGFyYXRvci1jb21wb25lbnRcIixjbGFzczp7XCJxLWl0ZW0tc2VwYXJhdG9yLWluc2V0LWNvbXBvbmVudFwiOnRoaXMuaW5zZXR9fSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFBY3Rpb25TaGVldD17bmFtZTpcIlFBY3Rpb25TaGVldFwiLHByb3BzOnt2YWx1ZTpCb29sZWFuLHRpdGxlOlN0cmluZyxncmlkOkJvb2xlYW4sYWN0aW9uczpBcnJheSxkaXNtaXNzTGFiZWw6U3RyaW5nfSxjb21wdXRlZDp7Y29udGVudENzczpmdW5jdGlvbigpe319LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W10scz10aGlzLiRzbG90cy50aXRsZXx8dGhpcy50aXRsZTtyZXR1cm4gcyYmaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWFjdGlvbnNoZWV0LXRpdGxlIGNvbHVtbiBqdXN0aWZ5LWNlbnRlclwifSxbc10pKSxpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWN0aW9uc2hlZXQtYm9keSBzY3JvbGxcIn0sdGhpcy5hY3Rpb25zP1t0aGlzLmdyaWQ/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWN0aW9uc2hlZXQtZ3JpZCByb3cgd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCJ9LHRoaXMuX19nZXRBY3Rpb25zKHQpKTp0KFFMaXN0LHtzdGF0aWNDbGFzczpcIm5vLWJvcmRlclwiLHByb3BzOntsaW5rOiEwfX0sdGhpcy5fX2dldEFjdGlvbnModCkpXTp0aGlzLiRzbG90cy5kZWZhdWx0KSksdChRTW9kYWwse3JlZjpcIm1vZGFsXCIscHJvcHM6e3ZhbHVlOnRoaXMudmFsdWUscG9zaXRpb246XCJib3R0b21cIixjb250ZW50Q3NzOnRoaXMuY29udGVudENzc30sb246e2lucHV0OmZ1bmN0aW9uKHQpe2UuJGVtaXQoXCJpbnB1dFwiLHQpfSxzaG93OmZ1bmN0aW9uKCl7ZS4kZW1pdChcInNob3dcIil9LGhpZGU6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiaGlkZVwiKX0sZGlzbWlzczpmdW5jdGlvbigpe2UuJGVtaXQoXCJjYW5jZWxcIil9LFwiZXNjYXBlLWtleVwiOmZ1bmN0aW9uKCl7ZS4kZW1pdChcImVzY2FwZS1rZXlcIil9fX0saSl9LG1ldGhvZHM6e3Nob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5tb2RhbC5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5tb2RhbD90aGlzLiRyZWZzLm1vZGFsLmhpZGUoKTpQcm9taXNlLnJlc29sdmUoKX0sX19nZXRBY3Rpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuYWN0aW9ucy5tYXAoZnVuY3Rpb24oaSl7dmFyIHM7cmV0dXJuIGkubGFiZWw/dChlLmdyaWQ/XCJkaXZcIjpRSXRlbSwoKHM9e3N0YXRpY0NsYXNzOmUuZ3JpZD9cInEtYWN0aW9uc2hlZXQtZ3JpZC1pdGVtIGN1cnNvci1wb2ludGVyIHJlbGF0aXZlLXBvc2l0aW9uIGNvbHVtbiBpbmxpbmUgZmxleC1jZW50ZXJcIjpudWxsLGNsYXNzOmkuY2xhc3NlcyxhdHRyczp7dGFiaW5kZXg6MH19KVtlLmdyaWQ/XCJvblwiOlwibmF0aXZlT25cIl09e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19vbk9rKGkpfSxrZXl1cDpmdW5jdGlvbih0KXsxMz09PWdldEV2ZW50S2V5KHQpJiZlLl9fb25PayhpKX19LHMpLGUuZ3JpZD9baS5pY29uP3QoUUljb24se3Byb3BzOntuYW1lOmkuaWNvbixjb2xvcjppLmNvbG9yfX0pOm51bGwsaS5hdmF0YXI/dChcImltZ1wiLHtkb21Qcm9wczp7c3JjOmkuYXZhdGFyfSxzdGF0aWNDbGFzczpcImF2YXRhclwifSk6bnVsbCx0KFwic3BhblwiLFtpLmxhYmVsXSldOlt0KFFJdGVtU2lkZSx7cHJvcHM6e2ljb246aS5pY29uLGNvbG9yOmkuY29sb3IsYXZhdGFyOmkuYXZhdGFyfX0pLHQoUUl0ZW1NYWluLHtwcm9wczp7aW5zZXQ6ITAsbGFiZWw6aS5sYWJlbH19KV0pOnQoUUl0ZW1TZXBhcmF0b3Ise3N0YXRpY0NsYXNzOlwiY29sLTEyXCJ9KX0pfSxfX29uT2s6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmhpZGUoKS50aGVuKGZ1bmN0aW9uKCl7XCJmdW5jdGlvblwiPT10eXBlb2YgdC5oYW5kbGVyJiZ0LmhhbmRsZXIoKSxlLiRlbWl0KFwib2tcIix0KX0pfSxfX29uQ2FuY2VsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmhpZGUoKS50aGVuKGZ1bmN0aW9uKCl7dC4kZW1pdChcImNhbmNlbFwiKX0pfSxfX29uS2V5Q2FuY2VsOmZ1bmN0aW9uKHQpezEzPT09Z2V0RXZlbnRLZXkodCkmJnRoaXMuX19vbkNhbmNlbCgpfX19LHVuaXRzPVtcIkJcIixcImtCXCIsXCJNQlwiLFwiR0JcIixcIlRCXCIsXCJQQlwiXTtmdW5jdGlvbiBodW1hblN0b3JhZ2VTaXplKHQpe2Zvcih2YXIgZT0wO3BhcnNlSW50KHQsMTApPj0xMDI0JiZlPHVuaXRzLmxlbmd0aC0xOyl0Lz0xMDI0LCsrZTtyZXR1cm4gdC50b0ZpeGVkKDEpK1wiIFwiK3VuaXRzW2VdfWZ1bmN0aW9uIGNhcGl0YWxpemUodCl7cmV0dXJuIHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKX1mdW5jdGlvbiBiZXR3ZWVuKHQsZSxpKXtyZXR1cm4gaTw9ZT9lOk1hdGgubWluKGksTWF0aC5tYXgoZSx0KSl9ZnVuY3Rpb24gbm9ybWFsaXplVG9JbnRlcnZhbCh0LGUsaSl7aWYoaTw9ZSlyZXR1cm4gZTt2YXIgcz1pLWUrMSxuPWUrKHQtZSklcztyZXR1cm4gbjxlJiYobj1zK24pLDA9PT1uPzA6bn1mdW5jdGlvbiBwYWQodCxlLGkpe3ZvaWQgMD09PWUmJihlPTIpLHZvaWQgMD09PWkmJihpPVwiMFwiKTt2YXIgcz1cIlwiK3Q7cmV0dXJuIHMubGVuZ3RoPj1lP3M6bmV3IEFycmF5KGUtcy5sZW5ndGgrMSkuam9pbihpKStzfXZhciBmb3JtYXQ9e2h1bWFuU3RvcmFnZVNpemU6aHVtYW5TdG9yYWdlU2l6ZSxjYXBpdGFsaXplOmNhcGl0YWxpemUsYmV0d2VlbjpiZXR3ZWVuLG5vcm1hbGl6ZVRvSW50ZXJ2YWw6bm9ybWFsaXplVG9JbnRlcnZhbCxwYWQ6cGFkfSx4aHI9aXNTU1I/bnVsbDpYTUxIdHRwUmVxdWVzdCxzZW5kPWlzU1NSP251bGw6eGhyLnByb3RvdHlwZS5zZW5kLHN0YWNrPXtzdGFydDpbXSxzdG9wOltdfSxoaWdoamFja0NvdW50PTA7ZnVuY3Rpb24gdHJhbnNsYXRlKHQpe3ZhciBlPXQucCxpPXQucG9zLHM9dC5hY3RpdmUsbj10Lmhvcml6LG89dC5yZXZlcnNlLHI9dC5kaXIsYT0xLGw9MTtyZXR1cm4gbj8obyYmKGE9LTEpLFwiYm90dG9tXCI9PT1pJiYobD0tMSkse3RyYW5zZm9ybTpcInRyYW5zbGF0ZTNkKFwiK2EqKGUtMTAwKStcIiUsXCIrKHM/MDotMjAwKmwpK1wiJSwwKVwifSk6KG8mJihsPS0xKSxcInJpZ2h0XCI9PT1pJiYoYT0tMSkse3RyYW5zZm9ybTpcInRyYW5zbGF0ZTNkKFwiKyhzPzA6ciphKi0yMDApK1wiJSxcIitsKihlLTEwMCkrXCIlLDApXCJ9KX1mdW5jdGlvbiBpbmModCxlKXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgZSYmKGU9dDwyNT8zKk1hdGgucmFuZG9tKCkrMzp0PDY1PzMqTWF0aC5yYW5kb20oKTp0PDg1PzIqTWF0aC5yYW5kb20oKTp0PDk5Py42OjApLGJldHdlZW4odCtlLDAsMTAwKX1mdW5jdGlvbiBoaWdoamFja0FqYXgodCxlKXtmdW5jdGlvbiBpKCl7c3RhY2suc3RvcC5tYXAoZnVuY3Rpb24odCl7dCgpfSl9c3RhY2suc3RhcnQucHVzaCh0KSxzdGFjay5zdG9wLnB1c2goZSksKytoaWdoamFja0NvdW50PjF8fCh4aHIucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLHM9YXJndW1lbnRzLmxlbmd0aDtzLS07KWVbc109YXJndW1lbnRzW3NdO3N0YWNrLnN0YXJ0Lm1hcChmdW5jdGlvbih0KXt0KCl9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGksITEpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIixmdW5jdGlvbigpezQ9PT10LnJlYWR5U3RhdGUmJmkoKX0sITEpLHNlbmQuYXBwbHkodGhpcyxlKX0pfWZ1bmN0aW9uIHJlc3RvcmVBamF4KHQsZSl7c3RhY2suc3RhcnQ9c3RhY2suc3RhcnQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pLHN0YWNrLnN0b3A9c3RhY2suc3RvcC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSksKGhpZ2hqYWNrQ291bnQ9TWF0aC5tYXgoMCxoaWdoamFja0NvdW50LTEpKXx8KHhoci5wcm90b3R5cGUuc2VuZD1zZW5kKX12YXIgUUFqYXhCYXI9e25hbWU6XCJRQWpheEJhclwiLHByb3BzOntwb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInRvcFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ0b3BcIixcInJpZ2h0XCIsXCJib3R0b21cIixcImxlZnRcIl0uaW5jbHVkZXModCl9fSxzaXplOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiMnB4XCJ9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicmVkXCJ9LHNraXBIaWphY2s6Qm9vbGVhbixyZXZlcnNlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Y2FsbHM6MCxwcm9ncmVzczowLG9uU2NyZWVuOiExLGFuaW1hdGU6ITB9fSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVyblt0aGlzLnBvc2l0aW9uLFwiYmctXCIrdGhpcy5jb2xvcix0aGlzLmFuaW1hdGU/XCJcIjpcIm5vLXRyYW5zaXRpb25cIl19LHN0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vblNjcmVlbixlPXRyYW5zbGF0ZSh7cDp0aGlzLnByb2dyZXNzLHBvczp0aGlzLnBvc2l0aW9uLGFjdGl2ZTp0LGhvcml6OnRoaXMuaG9yaXpvbnRhbCxyZXZlcnNlOnRoaXMuJHEuaTE4bi5ydGwmJltcInRvcFwiLFwiYm90dG9tXCJdLmluY2x1ZGVzKHRoaXMucG9zaXRpb24pPyF0aGlzLnJldmVyc2U6dGhpcy5yZXZlcnNlLGRpcjp0aGlzLiRxLmkxOG4ucnRsPy0xOjF9KTtyZXR1cm4gZVt0aGlzLnNpemVQcm9wXT10aGlzLnNpemUsZS5vcGFjaXR5PXQ/MTowLGV9LGhvcml6b250YWw6ZnVuY3Rpb24oKXtyZXR1cm5cInRvcFwiPT09dGhpcy5wb3NpdGlvbnx8XCJib3R0b21cIj09PXRoaXMucG9zaXRpb259LHNpemVQcm9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD9cImhlaWdodFwiOlwid2lkdGhcIn19LG1ldGhvZHM6e3N0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9MzAwKSx0aGlzLmNhbGxzKyssdGhpcy5jYWxscz4xfHwoY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuJGVtaXQoXCJzdGFydFwiKSx0aGlzLm9uU2NyZWVufHwodGhpcy5wcm9ncmVzcz0wLHRoaXMub25TY3JlZW49ITAsdGhpcy5hbmltYXRlPSExLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2UuYW5pbWF0ZT0hMCxlLl9fd29yayh0KX0sMTAwKSkpfSxpbmNyZW1lbnQ6ZnVuY3Rpb24odCl7dGhpcy5jYWxscz4wJiYodGhpcy5wcm9ncmVzcz1pbmModGhpcy5wcm9ncmVzcyx0KSl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuY2FsbHM9TWF0aC5tYXgoMCx0aGlzLmNhbGxzLTEpLCEodGhpcy5jYWxscz4wKSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuJGVtaXQoXCJzdG9wXCIpO3ZhciBlPWZ1bmN0aW9uKCl7dC5hbmltYXRlPSEwLHQucHJvZ3Jlc3M9MTAwLHQudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3Qub25TY3JlZW49ITF9LDFlMyl9OzA9PT10aGlzLnByb2dyZXNzP3RoaXMudGltZXI9c2V0VGltZW91dChlLDEpOmUoKX19LF9fd29yazpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMucHJvZ3Jlc3M8MTAwJiYodGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5pbmNyZW1lbnQoKSxlLl9fd29yayh0KX0sdCkpfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuc2tpcEhpamFja3x8KHRoaXMuaGlqYWNrZWQ9ITAsaGlnaGphY2tBamF4KHRoaXMuc3RhcnQsdGhpcy5zdG9wKSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5oaWphY2tlZCYmcmVzdG9yZUFqYXgodGhpcy5zdGFydCx0aGlzLnN0b3ApfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxvYWRpbmctYmFyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLHN0eWxlOnRoaXMuc3R5bGV9KX19O2Z1bmN0aW9uIHNob3dSaXBwbGUodCxlLGkpe3ZhciBzPWkuc3RvcCxuPWkuY2VudGVyO3MmJnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIG8scixhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpLGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIiksYz1lLmNsaWVudFdpZHRoPmUuY2xpZW50SGVpZ2h0P2UuY2xpZW50V2lkdGg6ZS5jbGllbnRIZWlnaHQsaD0obj9jOjIqYykrXCJweFwiLHU9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihhLmFwcGVuZENoaWxkKGwpLGEuY2xhc3NOYW1lPVwicS1yaXBwbGUtY29udGFpbmVyXCIsbC5jbGFzc05hbWU9XCJxLXJpcHBsZS1hbmltYXRpb25cIixsLnN0eWxlLndpZHRoPWgsbC5zdHlsZS5oZWlnaHQ9aCxlLmFwcGVuZENoaWxkKGEpLG4pbz1yPTA7ZWxzZXt2YXIgZD1wb3NpdGlvbih0KTtvPWQubGVmdC11LmxlZnQtYyxyPWQudG9wLXUudG9wLWN9bC5jbGFzc0xpc3QuYWRkKFwicS1yaXBwbGUtYW5pbWF0aW9uLWVudGVyXCIpLGwuY2xhc3NMaXN0LmFkZChcInEtcmlwcGxlLWFuaW1hdGlvbi12aXNpYmxlXCIpLGwuc3R5bGUudHJhbnNmb3JtPVwidHJhbnNsYXRlKFwiK28rXCJweCwgXCIrcitcInB4KSBzY2FsZTNkKDAsIDAsIDApXCIsc2V0VGltZW91dChmdW5jdGlvbigpe2wuY2xhc3NMaXN0LnJlbW92ZShcInEtcmlwcGxlLWFuaW1hdGlvbi1lbnRlclwiKSxsLnN0eWxlLnRyYW5zZm9ybT1cInRyYW5zbGF0ZShcIitvK1wicHgsIFwiK3IrXCJweCkgc2NhbGUzZCgxLCAxLCAxKVwiLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtsLmNsYXNzTGlzdC5yZW1vdmUoXCJxLXJpcHBsZS1hbmltYXRpb24tdmlzaWJsZVwiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5yZW1vdmUoKX0sMzAwKX0sMzAwKX0sMTApfWZ1bmN0aW9uIHNob3VsZEFib3J0KHQpe3QubWF0O3JldHVybiB0LmlvcyYmITB9dmFyIFJpcHBsZT17bmFtZTpcInJpcHBsZVwiLGluc2VydGVkOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS52YWx1ZSxzPWUubW9kaWZpZXJzO2lmKCFzaG91bGRBYm9ydChzKSl7dmFyIG49e2VuYWJsZWQ6ITEhPT1pLG1vZGlmaWVyczp7c3RvcDpzLnN0b3AsY2VudGVyOnMuY2VudGVyfSxjbGljazpmdW5jdGlvbihlKXtuLmVuYWJsZWQmJi0xIT09ZS5kZXRhaWwmJnNob3dSaXBwbGUoZSx0LG4ubW9kaWZpZXJzKX0sa2V5dXA6ZnVuY3Rpb24oZSl7bi5lbmFibGVkJiYxMz09PWUua2V5Q29kZSYmc2hvd1JpcHBsZShlLHQsbi5tb2RpZmllcnMpfX07dC5fX3FyaXBwbGU9bix0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLG4uY2xpY2ssITEpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsbi5rZXl1cCwhMSl9fSx1cGRhdGU6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLnZhbHVlLHM9ZS5tb2RpZmllcnMsbj1zLnN0b3Asbz1zLmNlbnRlcixyPXQuX19xcmlwcGxlO3ImJihyLmVuYWJsZWQ9ITEhPT1pLHIubW9kaWZpZXJzPXtzdG9wOm4sY2VudGVyOm99KX0sdW5iaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5tb2RpZmllcnMscz10Ll9fcXJpcHBsZTtzJiYhc2hvdWxkQWJvcnQoaSkmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHMuY2xpY2ssITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIscy5rZXl1cCwhMSksZGVsZXRlIHQuX19xcmlwcGxlKX19LGFsaWduTWFwPXtsZWZ0Olwic3RhcnRcIixjZW50ZXI6XCJjZW50ZXJcIixyaWdodDpcImVuZFwiLGJldHdlZW46XCJiZXR3ZWVuXCIsYXJvdW5kOlwiYXJvdW5kXCJ9LGFsaWduVmFsdWVzPU9iamVjdC5rZXlzKGFsaWduTWFwKSxBbGlnbk1peGluPXtwcm9wczp7YWxpZ246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJjZW50ZXJcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIGFsaWduVmFsdWVzLmluY2x1ZGVzKHQpfX19LGNvbXB1dGVkOnthbGlnbkNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuXCJqdXN0aWZ5LVwiK2FsaWduTWFwW3RoaXMuYWxpZ25dfX19LHNpemVzPXt4czo4LHNtOjEwLG1kOjE0LGxnOjIwLHhsOjI0LGZvcm06MTQuNzc3LFwiZm9ybS1sYWJlbFwiOjIxLjc3NyxcImZvcm0taGlkZS11bmRlcmxpbmVcIjo5LjMzMyxcImZvcm0tbGFiZWwtaGlkZS11bmRlcmxpbmVcIjoxNi4zMzN9LEJ0bk1peGluPXttaXhpbnM6W0FsaWduTWl4aW5dLGRpcmVjdGl2ZXM6e1JpcHBsZTpSaXBwbGV9LHByb3BzOnt0eXBlOlN0cmluZyxsb2FkaW5nOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpudWxsfSxkaXNhYmxlOkJvb2xlYW4sbGFiZWw6W051bWJlcixTdHJpbmddLG5vQ2FwczpCb29sZWFuLG5vV3JhcDpCb29sZWFuLGljb246U3RyaW5nLGljb25SaWdodDpTdHJpbmcscm91bmQ6Qm9vbGVhbixvdXRsaW5lOkJvb2xlYW4sZmxhdDpCb29sZWFuLHJvdW5kZWQ6Qm9vbGVhbixwdXNoOkJvb2xlYW4sc2l6ZTpTdHJpbmcsZmFiOkJvb2xlYW4sZmFiTWluaTpCb29sZWFuLGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nLGdsb3NzeTpCb29sZWFuLGRlbnNlOkJvb2xlYW4sbm9SaXBwbGU6Qm9vbGVhbix0YWJpbmRleDpOdW1iZXIsdG86W09iamVjdCxTdHJpbmddLHJlcGxhY2U6Qm9vbGVhbn0sY29tcHV0ZWQ6e3N0eWxlOmZ1bmN0aW9uKCl7aWYodGhpcy5zaXplJiYhdGhpcy5mYWImJiF0aGlzLmZhYk1pbmkpcmV0dXJue2ZvbnRTaXplOnRoaXMuc2l6ZSBpbiBzaXplcz9zaXplc1t0aGlzLnNpemVdK1wicHhcIjp0aGlzLnNpemV9fSxpc1JlY3RhbmdsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzUm91bmR9LGlzUm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3VuZHx8dGhpcy5mYWJ8fHRoaXMuZmFiTWluaX0sc2hhcGU6ZnVuY3Rpb24oKXtyZXR1cm5cInEtYnRuLVwiKyh0aGlzLmlzUm91bmQ/XCJyb3VuZFwiOlwicmVjdGFuZ2xlXCIpfSxpc0Rpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZXx8dGhpcy5sb2FkaW5nfSxoYXNSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub1JpcHBsZSYmIXRoaXMuaXNEaXNhYmxlZH0sY29tcHV0ZWRUYWJJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRGlzYWJsZWQ/LTE6dGhpcy50YWJpbmRleHx8MH0saXNMaW5rOmZ1bmN0aW9uKCl7cmV0dXJuXCJhXCI9PT10aGlzLnR5cGV8fHZvaWQgMCE9PXRoaXMudG99LGF0dHJzOmZ1bmN0aW9uKCl7dmFyIHQ9e3RhYmluZGV4OnRoaXMuY29tcHV0ZWRUYWJJbmRleH07cmV0dXJuXCJhXCIhPT10aGlzLnR5cGUmJih0LnR5cGU9dGhpcy50eXBlfHxcImJ1dHRvblwiKSx2b2lkIDAhPT10aGlzLnRvJiYodC5ocmVmPXRoaXMuJHJvdXRlci5yZXNvbHZlKHRoaXMudG8pLmhyZWYpLHR9LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5zaGFwZV07cmV0dXJuIHRoaXMuZmFiP3QucHVzaChcInEtYnRuLWZhYlwiKTp0aGlzLmZhYk1pbmkmJnQucHVzaChcInEtYnRuLWZhYi1taW5pXCIpLHRoaXMuZmxhdD90LnB1c2goXCJxLWJ0bi1mbGF0XCIpOnRoaXMub3V0bGluZT90LnB1c2goXCJxLWJ0bi1vdXRsaW5lXCIpOnRoaXMucHVzaCYmdC5wdXNoKFwicS1idG4tcHVzaFwiKSx0aGlzLmlzRGlzYWJsZWQ/dC5wdXNoKFwiZGlzYWJsZWRcIik6KHQucHVzaChcInEtZm9jdXNhYmxlIHEtaG92ZXJhYmxlXCIpLHRoaXMuYWN0aXZlJiZ0LnB1c2goXCJhY3RpdmVcIikpLHRoaXMuY29sb3I/dGhpcy5mbGF0fHx0aGlzLm91dGxpbmU/dC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fHRoaXMuY29sb3IpKToodC5wdXNoKFwiYmctXCIrdGhpcy5jb2xvciksdC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fFwid2hpdGVcIikpKTp0aGlzLnRleHRDb2xvciYmdC5wdXNoKFwidGV4dC1cIit0aGlzLnRleHRDb2xvciksdC5wdXNoKHtcInEtYnRuLW5vLXVwcGVyY2FzZVwiOnRoaXMubm9DYXBzLFwicS1idG4tcm91bmRlZFwiOnRoaXMucm91bmRlZCxcInEtYnRuLWRlbnNlXCI6dGhpcy5kZW5zZSxnbG9zc3k6dGhpcy5nbG9zc3l9KSx0fSxpbm5lckNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5hbGlnbkNsYXNzXTtyZXR1cm4hMD09PXRoaXMubm9XcmFwJiZ0LnB1c2goXCJuby13cmFwXCIsXCJ0ZXh0LW5vLXdyYXBcIiksITA9PT10aGlzLnJlcGVhdGluZyYmdC5wdXNoKFwibm9uLXNlbGVjdGFibGVcIiksITA9PT10aGlzLmxvYWRpbmcmJnQucHVzaChcInEtYnRuLWlubmVyLS1oaWRkZW5cIiksdH19fSxtaXhpbiQxPXtwcm9wczp7Y29sb3I6U3RyaW5nLHNpemU6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6XCIxZW1cIn19LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7aWYodGhpcy5jb2xvcilyZXR1cm5cInRleHQtXCIrdGhpcy5jb2xvcn19fSxEZWZhdWx0U3Bpbm5lcj17bmFtZTpcIlFTcGlubmVyTWF0XCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXIgcS1zcGlubmVyLW1hdFwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjI1IDI1IDUwIDUwXCJ9fSxbdChcImNpcmNsZVwiLHtzdGF0aWNDbGFzczpcInBhdGhcIixhdHRyczp7Y3g6XCI1MFwiLGN5OlwiNTBcIixyOlwiMjBcIixmaWxsOlwibm9uZVwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlLXdpZHRoXCI6XCIzXCIsXCJzdHJva2UtbWl0ZXJsaW1pdFwiOlwiMTBcIn19KV0pfX0sUVNwaW5uZXI9e21peGluczpbRGVmYXVsdFNwaW5uZXJdLG5hbWU6XCJRU3Bpbm5lclwifSxRQnRuPXtuYW1lOlwiUUJ0blwiLG1peGluczpbQnRuTWl4aW5dLHByb3BzOntwZXJjZW50YWdlOk51bWJlcixkYXJrUGVyY2VudGFnZTpCb29sZWFuLHdhaXRGb3JSaXBwbGU6Qm9vbGVhbixyZXBlYXRUaW1lb3V0OltOdW1iZXIsRnVuY3Rpb25dfSxjb21wdXRlZDp7aGFzUGVyY2VudGFnZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLnBlcmNlbnRhZ2V9LHdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIGJldHdlZW4odGhpcy5wZXJjZW50YWdlLDAsMTAwKStcIiVcIn0sZXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pc0Rpc2FibGVkfHwhdGhpcy5yZXBlYXRUaW1lb3V0P3tjbGljazp0aGlzLmNsaWNrLGtleWRvd246dGhpcy5fX29uS2V5RG93bixrZXl1cDp0aGlzLl9fb25LZXlVcH06e21vdXNlZG93bjp0aGlzLl9fc3RhcnRSZXBlYXQsdG91Y2hzdGFydDp0aGlzLl9fc3RhcnRSZXBlYXQsa2V5ZG93bjpmdW5jdGlvbihlKXt0Ll9fb25LZXlEb3duKGUsITApfSxtb3VzZXVwOnRoaXMuX19lbmRSZXBlYXQsdG91Y2hlbmQ6dGhpcy5fX2VuZFJlcGVhdCxrZXl1cDpmdW5jdGlvbihlKXt0Ll9fb25LZXlVcChlLCEwKX0sbW91c2VsZWF2ZTp0aGlzLl9fYWJvcnRSZXBlYXQsdG91Y2htb3ZlOnRoaXMuX19hYm9ydFJlcGVhdCxibHVyOnRoaXMuX19hYm9ydFJlcGVhdH19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3JlcGVhdGluZzohMSxhY3RpdmU6ITF9fSxtZXRob2RzOntjbGljazpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX19jbGVhbnVwKCksdm9pZCAwPT09dGhpcy50byYmIXRoaXMuaXNEaXNhYmxlZHx8KHQmJnN0b3BBbmRQcmV2ZW50KHQpLCF0aGlzLmlzRGlzYWJsZWQpKWlmKHQmJi0xIT09dC5kZXRhaWwmJlwic3VibWl0XCI9PT10aGlzLnR5cGUpe3N0b3BBbmRQcmV2ZW50KHQpO3ZhciBpPW5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIixPYmplY3QuYXNzaWduKHt9LHQse2RldGFpbDotMX0pKTt0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS4kZWwmJmUuJGVsLmRpc3BhdGNoRXZlbnQoaSl9LDIwMCl9ZWxzZXt2YXIgcz1mdW5jdGlvbigpe2UuJHJvdXRlcltlLnJlcGxhY2U/XCJyZXBsYWNlXCI6XCJwdXNoXCJdKGUudG8pfSxuPWZ1bmN0aW9uKCl7ZS5pc0Rpc2FibGVkfHwoZS4kZW1pdChcImNsaWNrXCIsdCxzKSx2b2lkIDAhPT1lLnRvJiYhMSE9PXQubmF2aWdhdGUmJnMoKSl9O3RoaXMud2FpdEZvclJpcHBsZSYmdGhpcy5oYXNSaXBwbGU/dGhpcy50aW1lcj1zZXRUaW1lb3V0KG4sMzAwKTpuKCl9fSxfX2NsZWFudXA6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lcil9LF9fb25LZXlEb3duOmZ1bmN0aW9uKHQsZSl7dGhpcy5pc0Rpc2FibGVkfHwxMyE9PXQua2V5Q29kZXx8KHRoaXMuYWN0aXZlPSEwLGU/dGhpcy5fX3N0YXJ0UmVwZWF0KHQpOnN0b3BBbmRQcmV2ZW50KHQpKX0sX19vbktleVVwOmZ1bmN0aW9uKHQsZSl7dGhpcy5hY3RpdmUmJih0aGlzLmFjdGl2ZT0hMSx0aGlzLmlzRGlzYWJsZWR8fDEzIT09dC5rZXlDb2RlfHx0aGlzW2U/XCJfX2VuZFJlcGVhdFwiOlwiY2xpY2tcIl0odCkpfSxfX3N0YXJ0UmVwZWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMucmVwZWF0aW5nKXt2YXIgaT1mdW5jdGlvbigpe2UudGltZXI9c2V0VGltZW91dChzLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVwZWF0VGltZW91dD9lLnJlcGVhdFRpbWVvdXQoZS5yZXBlYXRDb3VudCk6ZS5yZXBlYXRUaW1lb3V0KX0scz1mdW5jdGlvbigpe2UuaXNEaXNhYmxlZHx8KGUucmVwZWF0Q291bnQrPTEsdC5yZXBlYXRDb3VudD1lLnJlcGVhdENvdW50LGUuJGVtaXQoXCJjbGlja1wiLHQpLGkoKSl9O3RoaXMucmVwZWF0Q291bnQ9MCx0aGlzLnJlcGVhdGluZz0hMCxpKCl9fSxfX2Fib3J0UmVwZWF0OmZ1bmN0aW9uKCl7dGhpcy5yZXBlYXRpbmc9ITEsdGhpcy5fX2NsZWFudXAoKX0sX19lbmRSZXBlYXQ6ZnVuY3Rpb24odCl7dGhpcy5yZXBlYXRpbmcmJih0aGlzLnJlcGVhdGluZz0hMSx0aGlzLnJlcGVhdENvdW50P3RoaXMucmVwZWF0Q291bnQ9MDoodC5kZXRhaWx8fHQua2V5Q29kZSkmJih0LnJlcGVhdENvdW50PTAsdGhpcy4kZW1pdChcImNsaWNrXCIsdCkpLHRoaXMuX19jbGVhbnVwKCkpfX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX19jbGVhbnVwKCl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT1bXS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCk7cmV0dXJuIHZvaWQgMCE9PXRoaXMubGFiZWwmJiEwPT09dGhpcy5pc1JlY3RhbmdsZSYmZS51bnNoaWZ0KHQoXCJkaXZcIixbdGhpcy5sYWJlbF0pKSx2b2lkIDAhPT10aGlzLmljb24mJmUudW5zaGlmdCh0KFFJY29uLHtjbGFzczp7XCJvbi1sZWZ0XCI6dm9pZCAwIT09dGhpcy5sYWJlbCYmITA9PT10aGlzLmlzUmVjdGFuZ2xlfSxwcm9wczp7bmFtZTp0aGlzLmljb259fSkpLHZvaWQgMCE9PXRoaXMuaWNvblJpZ2h0JiYhMT09PXRoaXMuaXNSb3VuZCYmZS5wdXNoKHQoUUljb24se3N0YXRpY0NsYXNzOlwib24tcmlnaHRcIixwcm9wczp7bmFtZTp0aGlzLmljb25SaWdodH19KSksdCh0aGlzLmlzTGluaz9cImFcIjpcImJ1dHRvblwiLHtzdGF0aWNDbGFzczpcInEtYnRuIGlubGluZSByZWxhdGl2ZS1wb3NpdGlvbiBxLWJ0bi1pdGVtIG5vbi1zZWxlY3RhYmxlXCIsY2xhc3M6dGhpcy5jbGFzc2VzLHN0eWxlOnRoaXMuc3R5bGUsYXR0cnM6dGhpcy5hdHRycyxvbjp0aGlzLmV2ZW50cyxkaXJlY3RpdmVzOnRoaXMuaGFzUmlwcGxlP1t7bmFtZTpcInJpcHBsZVwiLHZhbHVlOiEwLG1vZGlmaWVyczp7Y2VudGVyOnRoaXMuaXNSb3VuZH19XTpudWxsfSxbdGhpcy4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZvY3VzLWhlbHBlclwifSk6bnVsbCx0aGlzLmxvYWRpbmcmJnRoaXMuaGFzUGVyY2VudGFnZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1idG4tcHJvZ3Jlc3MgYWJzb2x1dGUtZnVsbFwiLGNsYXNzOntcInEtYnRuLWRhcmstcHJvZ3Jlc3NcIjp0aGlzLmRhcmtQZXJjZW50YWdlfSxzdHlsZTp7d2lkdGg6dGhpcy53aWR0aH19KTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWJ0bi1pbm5lciByb3cgY29sIGl0ZW1zLWNlbnRlciBxLXBvcHVwLS1za2lwXCIsY2xhc3M6dGhpcy5pbm5lckNsYXNzZXN9LGUpLG51bGwhPT10aGlzLmxvYWRpbmc/dChcInRyYW5zaXRpb25cIix7cHJvcHM6e25hbWU6XCJxLXRyYW5zaXRpb24tLWZhZGVcIn19LCEwPT09dGhpcy5sb2FkaW5nP1t0KFwiZGl2XCIse2tleTpcImxvYWRpbmdcIixzdGF0aWNDbGFzczpcImFic29sdXRlLWZ1bGwgZmxleCBmbGV4LWNlbnRlclwifSx2b2lkIDAhPT10aGlzLiRzbG90cy5sb2FkaW5nP3RoaXMuJHNsb3RzLmxvYWRpbmc6W3QoUVNwaW5uZXIpXSldOnZvaWQgMCk6bnVsbF0pfX0sUUFsZXJ0PXtuYW1lOlwiUUFsZXJ0XCIscHJvcHM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJwb3NpdGl2ZVwiLFwibmVnYXRpdmVcIixcIndhcm5pbmdcIixcImluZm9cIl0uaW5jbHVkZXModCl9fSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIm5lZ2F0aXZlXCJ9LHRleHRDb2xvcjpTdHJpbmcsbWVzc2FnZTpTdHJpbmcsZGV0YWlsOlN0cmluZyxpY29uOlN0cmluZyxhdmF0YXI6U3RyaW5nLGFjdGlvbnM6QXJyYXl9LGNvbXB1dGVkOntjb21wdXRlZEljb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29uP3RoaXMuaWNvbjp0aGlzLiRxLmljb24udHlwZVt0aGlzLnR5cGV8fHRoaXMuY29sb3JdfSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuXCJiZy1cIisodGhpcy50eXBlfHx0aGlzLmNvbG9yKStcIiB0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8XCJ3aGl0ZVwiKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W10scz10aGlzLiRzbG90cy5kZXRhaWx8fHRoaXMuZGV0YWlsO3JldHVybiB0aGlzLmF2YXRhcj9pLnB1c2godChcImltZ1wiLHtzdGF0aWNDbGFzczpcImF2YXRhclwiLGF0dHJzOntzcmM6dGhpcy5hdmF0YXJ9fSkpOih0aGlzLmljb258fHRoaXMudHlwZSkmJmkucHVzaCh0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLmNvbXB1dGVkSWNvbn19KSksdChcImRpdlwiLFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hbGVydCByb3cgbm8td3JhcCBzaGFkb3ctMlwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sW2kubGVuZ3RoP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWFsZXJ0LXNpZGUgY29sLWF1dG8gcm93IGZsZXgtY2VudGVyXCJ9LGkpOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWxlcnQtY29udGVudCBjb2wgc2VsZi1jZW50ZXJcIn0sW3QoXCJkaXZcIix0aGlzLiRzbG90cy5kZWZhdWx0fHx0aGlzLm1lc3NhZ2UpLHM/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWxlcnQtZGV0YWlsXCJ9LFtzXSk6bnVsbF0pLHRoaXMuYWN0aW9ucyYmdGhpcy5hY3Rpb25zLmxlbmd0aD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hbGVydC1hY3Rpb25zIGNvbC1hdXRvIGd1dHRlci14cyBjb2x1bW4gZmxleC1jZW50ZXJcIn0sdGhpcy5hY3Rpb25zLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImZ1bGwtd2lkdGhcIn0sW3QoUUJ0bix7c3RhdGljQ2xhc3M6XCJmdWxsLXdpZHRoXCIscHJvcHM6e2ZsYXQ6ITAsZGVuc2U6ITAsYWxpZ246XCJsZWZ0XCIsaWNvbjppLmljb24sbGFiZWw6ITA9PT1pLmNsb3NlQnRuP1wic3RyaW5nXCI9PXR5cGVvZiBpLmxhYmVsP2kubGFiZWw6ZS4kcS5pMThuLmxhYmVsLmNsb3NlOmkubGFiZWx9LG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZXIoKX19fSldKX0pKTpudWxsXSldKX19O2Z1bmN0aW9uIGZpbHRlcih0LGUpe3ZhciBpPWUuZmllbGQscz1lLmxpc3Qsbj10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybihcIlwiK3RbaV0pLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuKX0pfWZ1bmN0aW9uIHM0KCl7cmV0dXJuIE1hdGguZmxvb3IoNjU1MzYqKDErTWF0aC5yYW5kb20oKSkpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSl9ZnVuY3Rpb24gdWlkKCl7cmV0dXJuIHM0KCkrczQoKStcIi1cIitzNCgpK1wiLVwiK3M0KCkrXCItXCIrczQoKStcIi1cIitzNCgpK3M0KCkrczQoKX1mdW5jdGlvbiBnZXRBbmNob3JQb3NpdGlvbih0LGUpe3ZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1pLnRvcCxuPWkubGVmdCxvPWkucmlnaHQscj1pLmJvdHRvbSxhPXt0b3A6cyxsZWZ0Om4sd2lkdGg6dC5vZmZzZXRXaWR0aCxoZWlnaHQ6dC5vZmZzZXRIZWlnaHR9O3JldHVybiBlJiYoYS50b3AtPWVbMV0sYS5sZWZ0LT1lWzBdLHImJihyKz1lWzFdKSxvJiYobys9ZVswXSksYS53aWR0aCs9ZVswXSxhLmhlaWdodCs9ZVsxXSksYS5yaWdodD1vfHxhLmxlZnQrYS53aWR0aCxhLmJvdHRvbT1yfHxhLnRvcCthLmhlaWdodCxhLm1pZGRsZT1hLmxlZnQrKGEucmlnaHQtYS5sZWZ0KS8yLGEuY2VudGVyPWEudG9wKyhhLmJvdHRvbS1hLnRvcCkvMixhfWZ1bmN0aW9uIGdldFRhcmdldFBvc2l0aW9uKHQpe3JldHVybnt0b3A6MCxjZW50ZXI6dC5vZmZzZXRIZWlnaHQvMixib3R0b206dC5vZmZzZXRIZWlnaHQsbGVmdDowLG1pZGRsZTp0Lm9mZnNldFdpZHRoLzIscmlnaHQ6dC5vZmZzZXRXaWR0aH19ZnVuY3Rpb24gcmVwb3NpdGlvbklmTmVlZGVkKHQsZSxpLHMsbixvKXt2YXIgcj1nZXRTY3JvbGxiYXJXaWR0aCgpLGE9d2luZG93LmlubmVySGVpZ2h0LGw9d2luZG93LmlubmVyV2lkdGg7aWYoYS09cixsLT1yLG4udG9wPDB8fG4udG9wK2UuYm90dG9tPmEpaWYoXCJjZW50ZXJcIj09PWkudmVydGljYWwpbi50b3A9dFtpLnZlcnRpY2FsXT5hLzI/YS1lLmJvdHRvbTowLG4ubWF4SGVpZ2h0PU1hdGgubWluKGUuYm90dG9tLGEpO2Vsc2UgaWYodFtpLnZlcnRpY2FsXT5hLzIpe3ZhciBjPU1hdGgubWluKGEsXCJjZW50ZXJcIj09PXMudmVydGljYWw/dC5jZW50ZXI6cy52ZXJ0aWNhbD09PWkudmVydGljYWw/dC5ib3R0b206dC50b3ApO24ubWF4SGVpZ2h0PU1hdGgubWluKGUuYm90dG9tLGMpLG4udG9wPU1hdGgubWF4KDAsYy1uLm1heEhlaWdodCl9ZWxzZSBuLnRvcD1cImNlbnRlclwiPT09cy52ZXJ0aWNhbD90LmNlbnRlcjpzLnZlcnRpY2FsPT09aS52ZXJ0aWNhbD90LnRvcDp0LmJvdHRvbSxuLm1heEhlaWdodD1NYXRoLm1pbihlLmJvdHRvbSxhLW4udG9wKTtpZihuLmxlZnQ8MHx8bi5sZWZ0K2UucmlnaHQ+bClpZihuLm1heFdpZHRoPU1hdGgubWluKGUucmlnaHQsbCksXCJtaWRkbGVcIj09PWkuaG9yaXpvbnRhbCluLmxlZnQ9dFtpLmhvcml6b250YWxdPmwvMj9sLWUucmlnaHQ6MDtlbHNlIGlmKG8pbi5sZWZ0PW4ubGVmdDwwPzA6bC1lLnJpZ2h0O2Vsc2UgaWYodFtpLmhvcml6b250YWxdPmwvMil7dmFyIGg9TWF0aC5taW4obCxcIm1pZGRsZVwiPT09cy5ob3Jpem9udGFsP3QuY2VudGVyOnMuaG9yaXpvbnRhbD09PWkuaG9yaXpvbnRhbD90LnJpZ2h0OnQubGVmdCk7bi5tYXhXaWR0aD1NYXRoLm1pbihlLnJpZ2h0LGgpLG4ubGVmdD1NYXRoLm1heCgwLGgtbi5tYXhXaWR0aCl9ZWxzZSBuLmxlZnQ9XCJtaWRkbGVcIj09PXMuaG9yaXpvbnRhbD90LmNlbnRlcjpzLmhvcml6b250YWw9PT1pLmhvcml6b250YWw/dC5sZWZ0OnQucmlnaHQsbi5tYXhXaWR0aD1NYXRoLm1pbihlLnJpZ2h0LGwtbi5sZWZ0KTtyZXR1cm4gbn1mdW5jdGlvbiBzZXRQb3NpdGlvbih0KXt2YXIgZSxpPXQuZWwscz10LmFuaW1hdGUsbj10LmFuY2hvckVsLG89dC5hbmNob3JPcmlnaW4scj10LnNlbGZPcmlnaW4sYT10Lm1heEhlaWdodCxsPXQuZXZlbnQsYz10LmFuY2hvckNsaWNrLGg9dC50b3VjaFBvc2l0aW9uLHU9dC5vZmZzZXQsZD10LnRvdWNoT2Zmc2V0LHA9dC5jb3ZlcjtpZihpLnN0eWxlLm1heEhlaWdodD1hfHxcIjY1dmhcIixpLnN0eWxlLm1heFdpZHRoPVwiMTAwdndcIiwhbHx8YyYmIWgpaWYoZCl7dmFyIGY9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxtPWYudG9wLGc9Zi5sZWZ0LHY9bStkLnRvcCxiPWcrZC5sZWZ0O2U9e3RvcDp2LGxlZnQ6Yix3aWR0aDoxLGhlaWdodDoxLHJpZ2h0OmIrMSxjZW50ZXI6dixtaWRkbGU6Yixib3R0b206disxfX1lbHNlIGU9Z2V0QW5jaG9yUG9zaXRpb24obix1KTtlbHNle3ZhciBfPXBvc2l0aW9uKGwpLHk9Xy50b3Asdz1fLmxlZnQ7ZT17dG9wOnksbGVmdDp3LHdpZHRoOjEsaGVpZ2h0OjEscmlnaHQ6dysxLGNlbnRlcjp5LG1pZGRsZTp3LGJvdHRvbTp5KzF9fXZhciBDPWdldFRhcmdldFBvc2l0aW9uKGkpLHg9e3RvcDplW28udmVydGljYWxdLUNbci52ZXJ0aWNhbF0sbGVmdDplW28uaG9yaXpvbnRhbF0tQ1tyLmhvcml6b250YWxdfTtpZih4PXJlcG9zaXRpb25JZk5lZWRlZChlLEMscixvLHgscCksaS5zdHlsZS50b3A9TWF0aC5tYXgoMCx4LnRvcCkrXCJweFwiLGkuc3R5bGUubGVmdD1NYXRoLm1heCgwLHgubGVmdCkrXCJweFwiLHgubWF4SGVpZ2h0JiYoaS5zdHlsZS5tYXhIZWlnaHQ9eC5tYXhIZWlnaHQrXCJweFwiKSx4Lm1heFdpZHRoJiYoaS5zdHlsZS5tYXhXaWR0aD14Lm1heFdpZHRoK1wicHhcIikscyl7dmFyIFM9eC50b3A8ZS50b3A/W1widXBcIixcImRvd25cIl06W1wiZG93blwiLFwidXBcIl07aS5jbGFzc0xpc3QuYWRkKFwiYW5pbWF0ZS1wb3B1cC1cIitTWzBdKSxpLmNsYXNzTGlzdC5yZW1vdmUoXCJhbmltYXRlLXBvcHVwLVwiK1NbMV0pfX1mdW5jdGlvbiBwb3NpdGlvblZhbGlkYXRvcih0KXt2YXIgZT10LnNwbGl0KFwiIFwiKTtyZXR1cm4gMj09PWUubGVuZ3RoJiYoW1widG9wXCIsXCJjZW50ZXJcIixcImJvdHRvbVwiXS5pbmNsdWRlcyhlWzBdKT8hIVtcImxlZnRcIixcIm1pZGRsZVwiLFwicmlnaHRcIl0uaW5jbHVkZXMoZVsxXSl8fChjb25zb2xlLmVycm9yKFwiQW5jaG9yL1NlbGYgcG9zaXRpb24gbXVzdCBlbmQgd2l0aCBvbmUgb2YgbGVmdC9taWRkbGUvcmlnaHRcIiksITEpOihjb25zb2xlLmVycm9yKFwiQW5jaG9yL1NlbGYgcG9zaXRpb24gbXVzdCBzdGFydCB3aXRoIG9uZSBvZiB0b3AvY2VudGVyL2JvdHRvbVwiKSwhMSkpfWZ1bmN0aW9uIG9mZnNldFZhbGlkYXRvcih0KXtyZXR1cm4hdHx8Mj09PXQubGVuZ3RoJiYoXCJudW1iZXJcIj09dHlwZW9mIHRbMF0mJlwibnVtYmVyXCI9PXR5cGVvZiB0WzFdKX1mdW5jdGlvbiBwYXJzZVBvc2l0aW9uKHQpe3ZhciBlPXQuc3BsaXQoXCIgXCIpO3JldHVybnt2ZXJ0aWNhbDplWzBdLGhvcml6b250YWw6ZVsxXX19ZnVuY3Rpb24gZnJhbWVEZWJvdW5jZSh0KXt2YXIgZSxpPSExO2Z1bmN0aW9uIHMoKXtmb3IodmFyIHM9dGhpcyxuPVtdLG89YXJndW1lbnRzLmxlbmd0aDtvLS07KW5bb109YXJndW1lbnRzW29dO2l8fChpPSEwLGU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dC5hcHBseShzLG4pLGk9ITF9KSl9cmV0dXJuIHMuY2FuY2VsPWZ1bmN0aW9uKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGUpLGk9ITF9LHN9dmFyIENhblJlbmRlck1peGluPXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2NhblJlbmRlcjohb25TU1J9fSxtb3VudGVkOmZ1bmN0aW9uKCl7ITE9PT10aGlzLmNhblJlbmRlciYmKHRoaXMuY2FuUmVuZGVyPSEwKX19LFFQb3BvdmVyPXtuYW1lOlwiUVBvcG92ZXJcIixtaXhpbnM6W01vZGVsVG9nZ2xlTWl4aW4sQ2FuUmVuZGVyTWl4aW5dLHByb3BzOnthbmNob3I6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpwb3NpdGlvblZhbGlkYXRvcn0sc2VsZjp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOnBvc2l0aW9uVmFsaWRhdG9yfSxmaXQ6Qm9vbGVhbixjb3ZlcjpCb29sZWFuLHBlcnNpc3RlbnQ6Qm9vbGVhbixrZWVwT25TY3JlZW46Qm9vbGVhbixtYXhIZWlnaHQ6U3RyaW5nLHRvdWNoUG9zaXRpb246Qm9vbGVhbixhbmNob3JDbGljazp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LG9mZnNldDp7dHlwZTpBcnJheSx2YWxpZGF0b3I6b2Zmc2V0VmFsaWRhdG9yfSxub0ZvY3VzOkJvb2xlYW4sbm9SZWZvY3VzOkJvb2xlYW4sZGlzYWJsZTpCb29sZWFufSx3YXRjaDp7JHJvdXRlOmZ1bmN0aW9uKCl7dGhpcy5oaWRlKCl9fSxjb21wdXRlZDp7aG9yaXpTaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHEuaTE4bi5ydGw/XCJyaWdodFwiOlwibGVmdFwifSxhbmNob3JPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VQb3NpdGlvbih0aGlzLmNvdmVyP1widG9wIFwiK3RoaXMuaG9yaXpTaWRlOnRoaXMuYW5jaG9yfHxcImJvdHRvbSBcIit0aGlzLmhvcml6U2lkZSl9LHNlbGZPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VQb3NpdGlvbih0aGlzLnNlbGZ8fFwidG9wIFwiK3RoaXMuaG9yaXpTaWRlKX19LHJlbmRlcjpmdW5jdGlvbih0KXtpZih0aGlzLmNhblJlbmRlcilyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcG9wb3ZlciBzY3JvbGxcIixyZWY6XCJjb250ZW50XCIsYXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX19fSx0aGlzLiRzbG90cy5kZWZhdWx0KX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fX3VwZGF0ZVBvc2l0aW9uPWZyYW1lRGVib3VuY2UoZnVuY3Rpb24oZSxpLHMpe3JldHVybiB0LnJlcG9zaXRpb24oaSxzKX0pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5hbmNob3JFbD10LiRlbC5wYXJlbnROb2RlLHQuYW5jaG9yRWwucmVtb3ZlQ2hpbGQodC4kZWwpLCh0LmFuY2hvckVsLmNsYXNzTGlzdC5jb250YWlucyhcInEtcG9wdXAtLXNraXBcIil8fHQuYW5jaG9yRWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwibm8tcG9pbnRlci1ldmVudHNcIikpJiYodC5hbmNob3JFbD10LmFuY2hvckVsLnBhcmVudE5vZGUpLHQuYW5jaG9yQ2xpY2smJih0LmFuY2hvckVsLmNsYXNzTGlzdC5hZGQoXCJjdXJzb3ItcG9pbnRlclwiKSx0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHQudG9nZ2xlKSx0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLHQuX190b2dnbGVLZXkpKX0pLHRoaXMudmFsdWUmJnRoaXMuc2hvdygpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5zaG93aW5nJiZ0aGlzLl9fY2xlYW51cCgpLHRoaXMuYW5jaG9yQ2xpY2smJnRoaXMuYW5jaG9yRWwmJih0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMudG9nZ2xlKSx0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLHRoaXMuX190b2dnbGVLZXkpKX0sbWV0aG9kczp7X19zaG93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5ub1JlZm9jdXN8fCh0aGlzLl9fcmVmb2N1c1RhcmdldD10aGlzLmFuY2hvckNsaWNrJiZ0aGlzLmFuY2hvckVsfHxkb2N1bWVudC5hY3RpdmVFbGVtZW50KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuJGVsKSxFc2NhcGVLZXkucmVnaXN0ZXIoZnVuY3Rpb24oKXtlLiRlbWl0KFwiZXNjYXBlLWtleVwiKSxlLmhpZGUoKX0pLHRoaXMuc2Nyb2xsVGFyZ2V0PWdldFNjcm9sbFRhcmdldCh0aGlzLmFuY2hvckVsKSx0aGlzLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5fX3VwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy5zY3JvbGxUYXJnZXQhPT13aW5kb3cmJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5fX3VwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLl9fdXBkYXRlUG9zaXRpb24sbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLl9fdXBkYXRlUG9zaXRpb24oMCx0LCEwKSxjbGVhclRpbWVvdXQodGhpcy50aW1lciksIXRoaXMubm9Gb2N1cyYmdGhpcy4kcmVmcy5jb250ZW50JiZ0aGlzLiRyZWZzLmNvbnRlbnQuZm9jdXMoKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixlLl9fYm9keUhpZGUsITApLGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixlLl9fYm9keUhpZGUsITApLGUuc2hvd1Byb21pc2UmJmUuc2hvd1Byb21pc2VSZXNvbHZlKCl9LDApfSxfX3RvZ2dsZUtleTpmdW5jdGlvbih0KXsxMz09PXQua2V5Q29kZSYmdGhpcy50b2dnbGUodCl9LF9fYm9keUhpZGU6ZnVuY3Rpb24odCl7dGhpcy5wZXJzaXN0ZW50fHx0JiZ0LnRhcmdldCYmKHRoaXMuJGVsLmNvbnRhaW5zKHQudGFyZ2V0KXx8dGhpcy5hbmNob3JFbC5jb250YWlucyh0LnRhcmdldCkpfHx0aGlzLmhpZGUodCl9LF9faGlkZTpmdW5jdGlvbigpe3RoaXMuX19jbGVhbnVwKCksdGhpcy5oaWRlUHJvbWlzZSYmdGhpcy5oaWRlUHJvbWlzZVJlc29sdmUoKSwhdGhpcy5ub1JlZm9jdXMmJnRoaXMuX19yZWZvY3VzVGFyZ2V0JiYodGhpcy5fX3JlZm9jdXNUYXJnZXQuZm9jdXMoKSwhdGhpcy5fX3JlZm9jdXNUYXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1pZlwiKSYmdGhpcy5fX3JlZm9jdXNUYXJnZXQuYmx1cigpKX0sX19jbGVhbnVwOmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHRoaXMuX19ib2R5SGlkZSwhMCksZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHRoaXMuX19ib2R5SGlkZSwhMCksdGhpcy5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuX191cGRhdGVQb3NpdGlvbixsaXN0ZW5PcHRzLnBhc3NpdmUpLHRoaXMuc2Nyb2xsVGFyZ2V0IT09d2luZG93JiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuX191cGRhdGVQb3NpdGlvbixsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fX3VwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksRXNjYXBlS2V5LnBvcCgpLHRoaXMuJGVsLnJlbW92ZSgpfSxyZXBvc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5hbmNob3JFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWkudG9wLG49aS5ib3R0b20sbz1pLmxlZnQscj1pLnJpZ2h0O2lmKCF0aGlzLmtlZXBPblNjcmVlbiYmKG48MHx8cz53aW5kb3cuaW5uZXJIZWlnaHR8fHI8MHx8bz53aW5kb3cuaW5uZXJXaWR0aCkpcmV0dXJuIHRoaXMuaGlkZSgpO2lmKHRoaXMuZml0fHx0aGlzLmNvdmVyKXt2YXIgYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmFuY2hvckVsKTt0aGlzLiRlbC5zdHlsZS5taW5XaWR0aD1hLmdldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiKSx0aGlzLmNvdmVyJiYodGhpcy4kZWwuc3R5bGUubWluSGVpZ2h0PWEuZ2V0UHJvcGVydHlWYWx1ZShcImhlaWdodFwiKSl9aWYoZSlpZih0aGlzLnRvdWNoUG9zaXRpb24pe3ZhciBsPXBvc2l0aW9uKHQpLGM9bC50b3AsaD1sLmxlZnQ7dGhpcy50b3VjaE9mZnNldD17bGVmdDpoLW8sdG9wOmMtc319ZWxzZSBkZWxldGUgdGhpcy50b3VjaE9mZnNldDtzZXRQb3NpdGlvbih7ZXZlbnQ6dCxhbmltYXRlOmUsZWw6dGhpcy4kZWwsb2Zmc2V0OnRoaXMub2Zmc2V0LGFuY2hvckVsOnRoaXMuYW5jaG9yRWwsYW5jaG9yT3JpZ2luOnRoaXMuYW5jaG9yT3JpZ2luLHNlbGZPcmlnaW46dGhpcy5zZWxmT3JpZ2luLG1heEhlaWdodDp0aGlzLm1heEhlaWdodCxhbmNob3JDbGljazp0aGlzLmFuY2hvckNsaWNrLHRvdWNoUG9zaXRpb246dGhpcy50b3VjaFBvc2l0aW9uLHRvdWNoT2Zmc2V0OnRoaXMudG91Y2hPZmZzZXQsY292ZXI6dGhpcy5jb3Zlcn0pfX19O2Z1bmN0aW9uIHB1c2godCxlLGkscyxuLG8pe3ZhciByPXtwcm9wczp7cmlnaHQ6by5yaWdodH19O2lmKHMmJm4pdC5wdXNoKGUoaSxyLHMpKTtlbHNle3ZhciBhPSExO2Zvcih2YXIgbCBpbiBvKWlmKG8uaGFzT3duUHJvcGVydHkobCkmJnZvaWQgMCE9PShhPW9bbF0pJiYhMCE9PWEpe3QucHVzaChlKGkse3Byb3BzOm99KSk7YnJlYWt9cyYmdC5wdXNoKGUoaSxyLHMpKX19dmFyIFFJdGVtV3JhcHBlcj17bmFtZTpcIlFJdGVtV3JhcHBlclwiLHByb3BzOntjZmc6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LHNsb3RSZXBsYWNlOkJvb2xlYW59LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmNmZyxpPXRoaXMuc2xvdFJlcGxhY2Uscz1bXTtyZXR1cm4gcHVzaChzLHQsUUl0ZW1TaWRlLHRoaXMuJHNsb3RzLmxlZnQsaSx7aWNvbjplLmljb24sY29sb3I6ZS5sZWZ0Q29sb3IsYXZhdGFyOmUuYXZhdGFyLGxldHRlcjplLmxldHRlcixpbWFnZTplLmltYWdlLGludmVydGVkOmUubGVmdEludmVydGVkLHRleHRDb2xvcjplLmxlZnRUZXh0Q29sb3J9KSxwdXNoKHMsdCxRSXRlbU1haW4sdGhpcy4kc2xvdHMubWFpbixpLHtsYWJlbDplLmxhYmVsLHN1YmxhYmVsOmUuc3VibGFiZWwsbGFiZWxMaW5lczplLmxhYmVsTGluZXMsc3VibGFiZWxMaW5lczplLnN1YmxhYmVsTGluZXMsaW5zZXQ6ZS5pbnNldH0pLHB1c2gocyx0LFFJdGVtU2lkZSx0aGlzLiRzbG90cy5yaWdodCxpLHtyaWdodDohMCxpY29uOmUucmlnaHRJY29uLGNvbG9yOmUucmlnaHRDb2xvcixhdmF0YXI6ZS5yaWdodEF2YXRhcixsZXR0ZXI6ZS5yaWdodExldHRlcixpbWFnZTplLnJpZ2h0SW1hZ2Usc3RhbXA6ZS5zdGFtcCxpbnZlcnRlZDplLnJpZ2h0SW52ZXJ0ZWQsdGV4dENvbG9yOmUucmlnaHRUZXh0Q29sb3J9KSxzLnB1c2godGhpcy4kc2xvdHMuZGVmYXVsdCksdChRSXRlbSx7YXR0cnM6dGhpcy4kYXR0cnMsb246dGhpcy4kbGlzdGVuZXJzLHByb3BzOmV9LHMpfX0sS2V5Ym9hcmRTZWxlY3Rpb25NaXhpbj17ZGF0YTpmdW5jdGlvbigpe3JldHVybntrZXlib2FyZEluZGV4OjAsa2V5Ym9hcmRNb3ZlRGlyZWN0aW9uOiExLGtleWJvYXJkTW92ZVRpbWVyOiExfX0sd2F0Y2g6e2tleWJvYXJkSW5kZXg6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRyZWZzLnBvcG92ZXImJnRoaXMuJHJlZnMucG9wb3Zlci5zaG93aW5nJiZ0aGlzLmtleWJvYXJkTW92ZURpcmVjdGlvbiYmdD4tMSYmdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpZihlLiRyZWZzLnBvcG92ZXIpe3ZhciB0PWUuJHJlZnMucG9wb3Zlci4kZWwucXVlcnlTZWxlY3RvcihcIi5xLXNlbGVjdC1oaWdobGlnaHRcIik7aWYodCYmdC5zY3JvbGxJbnRvVmlldyl7aWYodC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKXJldHVybiB0LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoITEpO3Quc2Nyb2xsSW50b1ZpZXcoZS5rZXlib2FyZE1vdmVEaXJlY3Rpb248MCl9fX0pfX0sbWV0aG9kczp7X19rZXlib2FyZFNob3c6ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCksdGhpcy5rZXlib2FyZEluZGV4IT09dCYmKHRoaXMua2V5Ym9hcmRJbmRleD10KX0sX19rZXlib2FyZFNldEN1cnJlbnRTZWxlY3Rpb246ZnVuY3Rpb24odCl7dGhpcy5rZXlib2FyZEluZGV4Pj0wJiZ0aGlzLmtleWJvYXJkSW5kZXg8PXRoaXMua2V5Ym9hcmRNYXhJbmRleCYmdGhpcy5fX2tleWJvYXJkU2V0U2VsZWN0aW9uKHRoaXMua2V5Ym9hcmRJbmRleCx0KX0sX19rZXlib2FyZEhhbmRsZUtleTpmdW5jdGlvbih0KXt2YXIgZT1nZXRFdmVudEtleSh0KTtzd2l0Y2goZSl7Y2FzZSAzODp0aGlzLl9fa2V5Ym9hcmRNb3ZlQ3Vyc29yKC0xLHQpO2JyZWFrO2Nhc2UgNDA6dGhpcy5fX2tleWJvYXJkTW92ZUN1cnNvcigxLHQpO2JyZWFrO2Nhc2UgMTM6aWYodGhpcy4kcmVmcy5wb3BvdmVyLnNob3dpbmcpcmV0dXJuIHN0b3BBbmRQcmV2ZW50KHQpLHZvaWQgdGhpcy5fX2tleWJvYXJkU2V0Q3VycmVudFNlbGVjdGlvbigpO2JyZWFrO2Nhc2UgOTp0aGlzLmhpZGUoKX10aGlzLl9fa2V5Ym9hcmRDdXN0b21LZXlIYW5kbGUoZSx0KX0sX19rZXlib2FyZE1vdmVDdXJzb3I6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO2lmKHN0b3BBbmRQcmV2ZW50KGUpLHRoaXMuJHJlZnMucG9wb3Zlci5zaG93aW5nKXtjbGVhclRpbWVvdXQodGhpcy5rZXlib2FyZE1vdmVUaW1lcik7dmFyIHM9dGhpcy5rZXlib2FyZEluZGV4LG49dGhpcy5fX2tleWJvYXJkSXNTZWxlY3RhYmxlSW5kZXh8fGZ1bmN0aW9uKCl7cmV0dXJuITB9O2Rve3M9bm9ybWFsaXplVG9JbnRlcnZhbChzK3QsLTEsaS5rZXlib2FyZE1heEluZGV4KX13aGlsZShzIT09dGhpcy5rZXlib2FyZEluZGV4JiYhbihzKSk7cmV0dXJuIHRoaXMua2V5Ym9hcmRNb3ZlRGlyZWN0aW9uPXM+dGhpcy5rZXlib2FyZEluZGV4PzE6LTEsdGhpcy5rZXlib2FyZE1vdmVUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5rZXlib2FyZE1vdmVEaXJlY3Rpb249ITF9LDUwMCksdm9pZCh0aGlzLmtleWJvYXJkSW5kZXg9cyl9dGhpcy5fX2tleWJvYXJkU2hvd1RyaWdnZXIoKX19fSxRQXV0b2NvbXBsZXRlPXtuYW1lOlwiUUF1dG9jb21wbGV0ZVwiLG1peGluczpbS2V5Ym9hcmRTZWxlY3Rpb25NaXhpbl0scHJvcHM6e21pbkNoYXJhY3RlcnM6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MX0sbWF4UmVzdWx0czp7dHlwZTpOdW1iZXIsZGVmYXVsdDo2fSxtYXhIZWlnaHQ6U3RyaW5nLGRlYm91bmNlOnt0eXBlOk51bWJlcixkZWZhdWx0OjUwMH0sZmlsdGVyOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6ZmlsdGVyfSxzdGF0aWNEYXRhOk9iamVjdCx2YWx1ZUZpZWxkOltTdHJpbmcsRnVuY3Rpb25dLHNlcGFyYXRvcjpCb29sZWFufSxpbmplY3Q6e19faW5wdXQ6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUUF1dG9jb21wbGV0ZSBuZWVkcyB0byBiZSBjaGlsZCBvZiBRSW5wdXQsIFFDaGlwc0lucHV0IG9yIFFTZWFyY2hcIil9fSxfX2lucHV0RGVib3VuY2U6e2RlZmF1bHQ6bnVsbH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2VhcmNoSWQ6XCJcIixyZXN1bHRzOltdLHdpZHRoOjAsZW50ZXJLZXk6ITEsdGltZXI6bnVsbH19LHdhdGNoOntcIl9faW5wdXQudmFsXCI6ZnVuY3Rpb24oKXt0aGlzLmVudGVyS2V5P3RoaXMuZW50ZXJLZXk9ITE6dGhpcy5fX2RlbGF5VHJpZ2dlcigpfX0sY29tcHV0ZWQ6e2NvbXB1dGVkUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heFJlc3VsdHMmJnRoaXMucmVzdWx0cy5sZW5ndGg+MD90aGlzLnJlc3VsdHMuc2xpY2UoMCx0aGlzLm1heFJlc3VsdHMpOltdfSxjb21wdXRlZFZhbHVlRmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZUZpZWxkfHx0aGlzLnN0YXRpY0RhdGEmJnRoaXMuc3RhdGljRGF0YS5maWVsZHx8XCJ2YWx1ZVwifSxrZXlib2FyZE1heEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcHV0ZWRSZXN1bHRzLmxlbmd0aC0xfSxjb21wdXRlZFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJue21pbldpZHRoOnRoaXMud2lkdGh9fSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWFyY2hJZC5sZW5ndGg+MH19LG1ldGhvZHM6e2lzV29ya2luZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzJiZ0aGlzLiRyZWZzLnBvcG92ZXJ9LHRyaWdnZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLl9faW5wdXQmJnRoaXMuX19pbnB1dC5pc0VkaXRhYmxlKCkmJnRoaXMuX19pbnB1dC5oYXNGb2N1cygpJiZ0aGlzLmlzV29ya2luZygpKXt2YXIgaT1bbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuX19pbnB1dC52YWwpP1wiXCI6U3RyaW5nKHRoaXMuX19pbnB1dC52YWwpLHM9aS5sZW5ndGgsbj11aWQoKSxvPXRoaXMuJHJlZnMucG9wb3ZlcjtpZih0aGlzLnNlYXJjaElkPW4sczx0aGlzLm1pbkNoYXJhY3RlcnN8fCEwPT09dCYmcz4wKXJldHVybiB0aGlzLnNlYXJjaElkPVwiXCIsdGhpcy5fX2NsZWFyU2VhcmNoKCksdm9pZCB0aGlzLmhpZGUoKTtpZih0aGlzLndpZHRoPXdpZHRoKHRoaXMuaW5wdXRFbCkrXCJweFwiLHRoaXMuc3RhdGljRGF0YSlyZXR1cm4gdGhpcy5zZWFyY2hJZD1cIlwiLHRoaXMucmVzdWx0cz10aGlzLmZpbHRlcihpLHRoaXMuc3RhdGljRGF0YSksdGhpcy5yZXN1bHRzLmxlbmd0aD92b2lkIHRoaXMuX19zaG93UmVzdWx0cygpOnZvaWQgby5oaWRlKCk7dGhpcy5fX2lucHV0LmxvYWRpbmc9ITAsdGhpcy4kZW1pdChcInNlYXJjaFwiLGksZnVuY3Rpb24odCl7aWYoZS5pc1dvcmtpbmcoKSYmZS5zZWFyY2hJZD09PW4pe2lmKGUuX19jbGVhclNlYXJjaCgpLEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjApcmV0dXJuIGUucmVzdWx0cz10LHZvaWQgZS5fX3Nob3dSZXN1bHRzKCk7ZS5oaWRlKCl9fSl9fSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVzdWx0cz1bXSx0aGlzLmlzV29ya2luZygpP3RoaXMuJHJlZnMucG9wb3Zlci5oaWRlKCk6UHJvbWlzZS5yZXNvbHZlKCl9LGJsdXJIaWRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9fY2xlYXJTZWFyY2goKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5oaWRlKCl9LDMwMCl9LF9fY2xlYXJTZWFyY2g6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5fX2lucHV0LmxvYWRpbmc9ITEsdGhpcy5zZWFyY2hJZD1cIlwifSxfX2tleWJvYXJkQ3VzdG9tS2V5SGFuZGxlOmZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDI3OnRoaXMuX19jbGVhclNlYXJjaCgpO2JyZWFrO2Nhc2UgMzg6Y2FzZSA0MDpjYXNlIDk6dGhpcy5fX2tleWJvYXJkU2V0Q3VycmVudFNlbGVjdGlvbighMCl9fSxfX2tleWJvYXJkU2hvd1RyaWdnZXI6ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoKX0sX19mb2N1c1Nob3dUcmlnZ2VyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQudHJpZ2dlcighMCl9LDEwMCl9LF9fa2V5Ym9hcmRJc1NlbGVjdGFibGVJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdD4tMSYmdDx0aGlzLmNvbXB1dGVkUmVzdWx0cy5sZW5ndGgmJiF0aGlzLmNvbXB1dGVkUmVzdWx0c1t0XS5kaXNhYmxlfSxzZXRWYWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMscz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmNvbXB1dGVkVmFsdWVGaWVsZD90aGlzLmNvbXB1dGVkVmFsdWVGaWVsZCh0KTp0W3RoaXMuY29tcHV0ZWRWYWx1ZUZpZWxkXSxuPXRoaXMuX19pbnB1dERlYm91bmNlP1wiRGVib3VuY2VcIjpcIlwiO3RoaXMuaW5wdXRFbCYmdGhpcy5fX2lucHV0JiYhdGhpcy5fX2lucHV0Lmhhc0ZvY3VzKCkmJih0aGlzLiRxLnBsYXRmb3JtLmlzLmllP3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aS5pbnB1dEVsLmZvY3VzKCl9KTp0aGlzLmlucHV0RWwuZm9jdXMoKSksdGhpcy5lbnRlcktleT10aGlzLl9faW5wdXQmJnMhPT10aGlzLl9faW5wdXQudmFsLHRoaXNbXCJfX2lucHV0XCIrbl1bZT9cInNldE5hdlwiOlwic2V0XCJdKHMpLHRoaXMuJGVtaXQoXCJzZWxlY3RlZFwiLHQsISFlKSxlfHwodGhpcy5fX2NsZWFyU2VhcmNoKCksdGhpcy5oaWRlKCkpfSxfX2tleWJvYXJkU2V0U2VsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7dGhpcy5zZXRWYWx1ZSh0aGlzLnJlc3VsdHNbdF0sZSl9LF9fZGVsYXlUcmlnZ2VyOmZ1bmN0aW9uKCl7dGhpcy5fX2NsZWFyU2VhcmNoKCksdGhpcy5fX2lucHV0Lmhhc0ZvY3VzKCkmJih0aGlzLnN0YXRpY0RhdGE/dGhpcy50cmlnZ2VyKCk6dGhpcy50aW1lcj1zZXRUaW1lb3V0KHRoaXMudHJpZ2dlcix0aGlzLmRlYm91bmNlKSl9LF9fc2hvd1Jlc3VsdHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRyZWZzLnBvcG92ZXI7dGhpcy5fX2tleWJvYXJkU2hvdygtMSksdC5zaG93aW5nP3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2hvd2luZyYmdC5yZXBvc2l0aW9uKCl9KTp0LnNob3coKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX19pbnB1dC5yZWdpc3RlcigpLHRoaXMuX19pbnB1dERlYm91bmNlJiZ0aGlzLl9faW5wdXREZWJvdW5jZS5zZXRDaGlsZERlYm91bmNlKCEwKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QuX19pbnB1dCYmKHQuaW5wdXRFbD10Ll9faW5wdXQuZ2V0RWwoKSx0LmlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0Ll9fa2V5Ym9hcmRIYW5kbGVLZXkpLHQuaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHQuYmx1ckhpZGUpLHQuaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0Ll9fZm9jdXNTaG93VHJpZ2dlcikpfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9fY2xlYXJTZWFyY2goKSx0aGlzLl9faW5wdXQudW5yZWdpc3RlcigpLHRoaXMuX19pbnB1dERlYm91bmNlJiZ0aGlzLl9faW5wdXREZWJvdW5jZS5zZXRDaGlsZERlYm91bmNlKCExKSx0aGlzLmlucHV0RWwmJih0aGlzLmlucHV0RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0aGlzLl9fa2V5Ym9hcmRIYW5kbGVLZXkpLHRoaXMuaW5wdXRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLHRoaXMuYmx1ckhpZGUpLHRoaXMuaW5wdXRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0aGlzLl9fZm9jdXNTaG93VHJpZ2dlciksdGhpcy5oaWRlKCkpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMuX19pbnB1dC5pc0RhcmsoKTtyZXR1cm4gdChRUG9wb3Zlcix7cmVmOlwicG9wb3ZlclwiLGNsYXNzOmk/XCJiZy1kYXJrXCI6bnVsbCxwcm9wczp7Zml0OiEwLGtlZXBPblNjcmVlbjohMCxhbmNob3JDbGljazohMSxtYXhIZWlnaHQ6dGhpcy5tYXhIZWlnaHQsbm9Gb2N1czohMCxub1JlZm9jdXM6ITB9LG9uOntzaG93OmZ1bmN0aW9uKCl7ZS5fX2lucHV0LnNlbGVjdGlvbk9wZW49ITAsZS4kZW1pdChcInNob3dcIil9LGhpZGU6ZnVuY3Rpb24oKXtlLl9faW5wdXQuc2VsZWN0aW9uT3Blbj0hMSxlLiRlbWl0KFwiaGlkZVwiKX19fSxbdChRTGlzdCx7cHJvcHM6e2Rhcms6aSxub0JvcmRlcjohMCxzZXBhcmF0b3I6dGhpcy5zZXBhcmF0b3J9LHN0eWxlOnRoaXMuY29tcHV0ZWRXaWR0aH0sdGhpcy5jb21wdXRlZFJlc3VsdHMubWFwKGZ1bmN0aW9uKGkscyl7cmV0dXJuIHQoUUl0ZW1XcmFwcGVyLHtrZXk6aS5pZHx8cyxjbGFzczp7XCJxLXNlbGVjdC1oaWdobGlnaHRcIjplLmtleWJvYXJkSW5kZXg9PT1zLFwiY3Vyc29yLXBvaW50ZXJcIjohaS5kaXNhYmxlLFwidGV4dC1mYWRlZFwiOmkuZGlzYWJsZX0scHJvcHM6e2NmZzppfSxuYXRpdmVPbjp7bW91c2VlbnRlcjpmdW5jdGlvbigpeyFpLmRpc2FibGUmJihlLmtleWJvYXJkSW5kZXg9cyl9LGNsaWNrOmZ1bmN0aW9uKCl7IWkuZGlzYWJsZSYmZS5zZXRWYWx1ZShpKX19fSl9KSldKX19LFFCcmVhZGNydW1icz17bmFtZTpcIlFCcmVhZGNydW1ic1wiLG1peGluczpbQWxpZ25NaXhpbl0scHJvcHM6e2NvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZmFkZWRcIn0sYWN0aXZlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHNlcGFyYXRvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIi9cIn0sYWxpZ246T2JqZWN0LmFzc2lnbih7fSxBbGlnbk1peGluLnByb3BzLmFsaWduLHtkZWZhdWx0OlwibGVmdFwifSl9LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW1widGV4dC1cIit0aGlzLmNvbG9yLHRoaXMuYWxpZ25DbGFzc119fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLiRzbG90cy5kZWZhdWx0KXt2YXIgaT1bXSxzPXRoaXMuJHNsb3RzLmRlZmF1bHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10LnRhZyYmdC50YWcuZW5kc1dpdGgoXCItUUJyZWFkY3J1bWJzRWxcIil9KS5sZW5ndGgsbj10aGlzLiRzY29wZWRTbG90cy5zZXBhcmF0b3J8fGZ1bmN0aW9uKCl7cmV0dXJuIGUuc2VwYXJhdG9yfSxvPVwidGV4dC1cIit0aGlzLmNvbG9yLHI9XCJ0ZXh0LVwiK3RoaXMuYWN0aXZlQ29sb3IsYT0xO2Zvcih2YXIgbCBpbiBlLiRzbG90cy5kZWZhdWx0KXt2YXIgYz1lLiRzbG90cy5kZWZhdWx0W2xdO2lmKHZvaWQgMCE9PWMudGFnJiZjLnRhZy5lbmRzV2l0aChcIi1RQnJlYWRjcnVtYnNFbFwiKSl7dmFyIGg9YTxzO2ErKyxpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcImZsZXggaXRlbXMtY2VudGVyXCIsY2xhc3M6W2g/cjpvLGg/XCJ0ZXh0LXdlaWdodC1ib2xkXCI6XCJxLWJyZWFkY3J1bWJzLWxhc3RcIl19LFtjXSkpLGgmJmkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1icmVhZGNydW1icy1zZXBhcmF0b3JcIixjbGFzczpvfSxbbigpXSkpfWVsc2UgaS5wdXNoKGMpfXJldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1icmVhZGNydW1icyBmbGV4IGd1dHRlci14cyBpdGVtcy1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxpKX19fSxRQnJlYWRjcnVtYnNFbD17bmFtZTpcIlFCcmVhZGNydW1ic0VsXCIsbWl4aW5zOlt7cHJvcHM6cm91dGVyTGlua1Byb3BzfV0scHJvcHM6e2xhYmVsOlN0cmluZyxpY29uOlN0cmluZyxjb2xvcjpTdHJpbmd9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCh2b2lkIDAhPT10aGlzLnRvP1wicm91dGVyLWxpbmtcIjpcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWxpbmsgcS1icmVhZGNydW1icy1lbCBmbGV4IGlubGluZSBpdGVtcy1jZW50ZXIgcmVsYXRpdmUtcG9zaXRpb25cIixwcm9wczp2b2lkIDAhPT10aGlzLnRvP3RoaXMuJHByb3BzOm51bGx9LFt0aGlzLmljb24/dChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLWJyZWFjcnVtYnMtZWwtaWNvbiBxLW1yLXNtXCIscHJvcHM6e25hbWU6dGhpcy5pY29ufX0pOm51bGwsdGhpcy5sYWJlbF0uY29uY2F0KHRoaXMuJHNsb3RzLmRlZmF1bHQpKX19LFFCdG5Hcm91cD17bmFtZTpcIlFCdG5Hcm91cFwiLHByb3BzOntvdXRsaW5lOkJvb2xlYW4sZmxhdDpCb29sZWFuLHJvdW5kZWQ6Qm9vbGVhbixwdXNoOkJvb2xlYW59LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm5bXCJvdXRsaW5lXCIsXCJmbGF0XCIsXCJyb3VuZGVkXCIsXCJwdXNoXCJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cInEtYnRuLWdyb3VwLVwiK3R9KS5qb2luKFwiIFwiKX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYnRuLWdyb3VwIHJvdyBuby13cmFwIGlubGluZVwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRQnRuRHJvcGRvd249e25hbWU6XCJRQnRuRHJvcGRvd25cIixtaXhpbnM6W0J0bk1peGluXSxwcm9wczp7dmFsdWU6Qm9vbGVhbixzcGxpdDpCb29sZWFuLGNvbnRlbnRDbGFzczpbQXJyYXksU3RyaW5nLE9iamVjdF0sY29udGVudFN0eWxlOltBcnJheSxTdHJpbmcsT2JqZWN0XSxwb3BvdmVyQW5jaG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYm90dG9tIHJpZ2h0XCJ9LHBvcG92ZXJTZWxmOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwidG9wIHJpZ2h0XCJ9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Nob3dpbmc6dGhpcy52YWx1ZX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLiRyZWZzLnBvcG92ZXImJnRoaXMuJHJlZnMucG9wb3Zlclt0P1wic2hvd1wiOlwiaGlkZVwiXSgpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10KFFQb3BvdmVyLHtyZWY6XCJwb3BvdmVyXCIscHJvcHM6e2Rpc2FibGU6dGhpcy5kaXNhYmxlLGZpdDohMCxhbmNob3JDbGljazohdGhpcy5zcGxpdCxhbmNob3I6dGhpcy5wb3BvdmVyQW5jaG9yLHNlbGY6dGhpcy5wb3BvdmVyU2VsZn0sY2xhc3M6dGhpcy5jb250ZW50Q2xhc3Msc3R5bGU6dGhpcy5jb250ZW50U3R5bGUsb246e3Nob3c6ZnVuY3Rpb24odCl7ZS5zaG93aW5nPSEwLGUuJGVtaXQoXCJzaG93XCIsdCksZS4kZW1pdChcImlucHV0XCIsITApfSxoaWRlOmZ1bmN0aW9uKHQpe2Uuc2hvd2luZz0hMSxlLiRlbWl0KFwiaGlkZVwiLHQpLGUuJGVtaXQoXCJpbnB1dFwiLCExKX19fSx0aGlzLiRzbG90cy5kZWZhdWx0KSxzPXQoUUljb24se3Byb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dC5kcm9wZG93bn0sc3RhdGljQ2xhc3M6XCJ0cmFuc2l0aW9uLWdlbmVyaWNcIixjbGFzczp7XCJyb3RhdGUtMTgwXCI6dGhpcy5zaG93aW5nLFwib24tcmlnaHRcIjohdGhpcy5zcGxpdCxcInEtYnRuLWRyb3Bkb3duLWFycm93XCI6IXRoaXMuc3BsaXR9fSksbj10KFFCdG4se3Byb3BzOk9iamVjdC5hc3NpZ24oe30sdGhpcy4kcHJvcHMse2ljb25SaWdodDp0aGlzLnNwbGl0P3RoaXMuaWNvblJpZ2h0Om51bGx9KSxjbGFzczp0aGlzLnNwbGl0P1wicS1idG4tZHJvcGRvd24tY3VycmVudFwiOlwicS1idG4tZHJvcGRvd24gcS1idG4tZHJvcGRvd24tc2ltcGxlXCIsb246e2NsaWNrOmZ1bmN0aW9uKHQpe2Uuc3BsaXQmJmUuaGlkZSgpLGUuZGlzYWJsZXx8ZS4kZW1pdChcImNsaWNrXCIsdCl9fX0sdGhpcy5zcGxpdD9udWxsOltzLGldKTtyZXR1cm4gdGhpcy5zcGxpdD90KFFCdG5Hcm91cCx7cHJvcHM6e291dGxpbmU6dGhpcy5vdXRsaW5lLGZsYXQ6dGhpcy5mbGF0LHJvdW5kZWQ6dGhpcy5yb3VuZGVkLHB1c2g6dGhpcy5wdXNofSxzdGF0aWNDbGFzczpcInEtYnRuLWRyb3Bkb3duIHEtYnRuLWRyb3Bkb3duLXNwbGl0IG5vLXdyYXAgcS1idG4taXRlbVwifSxbbix0KFFCdG4se3Byb3BzOntkaXNhYmxlOnRoaXMuZGlzYWJsZSxvdXRsaW5lOnRoaXMub3V0bGluZSxmbGF0OnRoaXMuZmxhdCxyb3VuZGVkOnRoaXMucm91bmRlZCxwdXNoOnRoaXMucHVzaCxzaXplOnRoaXMuc2l6ZSxjb2xvcjp0aGlzLmNvbG9yLHRleHRDb2xvcjp0aGlzLnRleHRDb2xvcixkZW5zZTp0aGlzLmRlbnNlLGdsb3NzeTp0aGlzLmdsb3NzeSxub1JpcHBsZTp0aGlzLm5vUmlwcGxlLHdhaXRGb3JSaXBwbGU6dGhpcy53YWl0Rm9yUmlwcGxlfSxzdGF0aWNDbGFzczpcInEtYnRuLWRyb3Bkb3duLWFycm93XCIsb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS50b2dnbGUoKX19fSxbc10pLFtpXV0pOm59LG1ldGhvZHM6e3RvZ2dsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLnBvcG92ZXI/dGhpcy4kcmVmcy5wb3BvdmVyLnRvZ2dsZSgpOlByb21pc2UucmVzb2x2ZSgpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wb3Zlcj90aGlzLiRyZWZzLnBvcG92ZXIuc2hvdygpOlByb21pc2UucmVzb2x2ZSgpfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wb3Zlcj90aGlzLiRyZWZzLnBvcG92ZXIuaGlkZSgpOlByb21pc2UucmVzb2x2ZSgpfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LnZhbHVlJiZ0LiRyZWZzLnBvcG92ZXImJnQuJHJlZnMucG9wb3Zlci5zaG93KCl9KX19LFFCdG5Ub2dnbGU9e25hbWU6XCJRQnRuVG9nZ2xlXCIscHJvcHM6e3ZhbHVlOntyZXF1aXJlZDohMH0sY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsdG9nZ2xlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHRvZ2dsZVRleHRDb2xvcjpTdHJpbmcsb3B0aW9uczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMCx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuKFwibGFiZWxcImluIHR8fFwiaWNvblwiaW4gdCkmJlwidmFsdWVcImluIHR9KX19LHJlYWRvbmx5OkJvb2xlYW4sZGlzYWJsZTpCb29sZWFuLG5vQ2FwczpCb29sZWFuLG5vV3JhcDpCb29sZWFuLG91dGxpbmU6Qm9vbGVhbixmbGF0OkJvb2xlYW4sZGVuc2U6Qm9vbGVhbixyb3VuZGVkOkJvb2xlYW4scHVzaDpCb29sZWFuLHNpemU6U3RyaW5nLGdsb3NzeTpCb29sZWFuLG5vUmlwcGxlOkJvb2xlYW4sd2FpdEZvclJpcHBsZTpCb29sZWFufSxjb21wdXRlZDp7dmFsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5vcHRpb25zLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT09PXQudmFsdWV9KX19LG1ldGhvZHM6e3NldDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7dGhpcy5yZWFkb25seXx8KHRoaXMuJGVtaXQoXCJpbnB1dFwiLHQsZSksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGkudmFsdWUpJiZpLiRlbWl0KFwiY2hhbmdlXCIsdCxlKX0pKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFFCdG5Hcm91cCx7c3RhdGljQ2xhc3M6XCJxLWJ0bi10b2dnbGVcIixwcm9wczp7b3V0bGluZTp0aGlzLm91dGxpbmUsZmxhdDp0aGlzLmZsYXQscm91bmRlZDp0aGlzLnJvdW5kZWQscHVzaDp0aGlzLnB1c2h9fSx0aGlzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKGkscyl7cmV0dXJuIHQoUUJ0bix7a2V5OlwiXCIraS5sYWJlbCtpLmljb24raS5pY29uUmlnaHQsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KGkudmFsdWUsaSl9fSxwcm9wczp7ZGlzYWJsZTplLmRpc2FibGV8fGkuZGlzYWJsZSxsYWJlbDppLmxhYmVsLGNvbG9yOmUudmFsW3NdP2kudG9nZ2xlQ29sb3J8fGUudG9nZ2xlQ29sb3I6aS5jb2xvcnx8ZS5jb2xvcix0ZXh0Q29sb3I6ZS52YWxbc10/aS50b2dnbGVUZXh0Q29sb3J8fGUudG9nZ2xlVGV4dENvbG9yOmkudGV4dENvbG9yfHxlLnRleHRDb2xvcixpY29uOmkuaWNvbixpY29uUmlnaHQ6aS5pY29uUmlnaHQsbm9DYXBzOmUubm9DYXBzfHxpLm5vQ2Fwcyxub1dyYXA6ZS5ub1dyYXB8fGkubm9XcmFwLG91dGxpbmU6ZS5vdXRsaW5lLGZsYXQ6ZS5mbGF0LHJvdW5kZWQ6ZS5yb3VuZGVkLHB1c2g6ZS5wdXNoLGdsb3NzeTplLmdsb3NzeSxzaXplOmUuc2l6ZSxkZW5zZTplLmRlbnNlLG5vUmlwcGxlOmUubm9SaXBwbGV8fGkubm9SaXBwbGUsd2FpdEZvclJpcHBsZTplLndhaXRGb3JSaXBwbGV8fGkud2FpdEZvclJpcHBsZSx0YWJpbmRleDppLnRhYmluZGV4fX0pfSkpfX0sUUNhcmQ9e25hbWU6XCJRQ2FyZFwiLHByb3BzOntkYXJrOkJvb2xlYW4sc3F1YXJlOkJvb2xlYW4sZmxhdDpCb29sZWFuLGlubGluZTpCb29sZWFuLGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nfSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVt7XCJuby1ib3JkZXItcmFkaXVzXCI6dGhpcy5zcXVhcmUsXCJuby1zaGFkb3dcIjp0aGlzLmZsYXQsXCJpbmxpbmUtYmxvY2tcIjp0aGlzLmlubGluZSxcInEtY2FyZC1kYXJrXCI6dGhpcy5kYXJrfV07cmV0dXJuIHRoaXMuY29sb3I/KHQucHVzaChcImJnLVwiK3RoaXMuY29sb3IpLHQucHVzaChcInRleHQtXCIrKHRoaXMudGV4dENvbG9yfHxcIndoaXRlXCIpKSk6dGhpcy50ZXh0Q29sb3ImJnQucHVzaChcInRleHQtXCIrdGhpcy50ZXh0Q29sb3IpLHR9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmRcIixjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUNhcmRUaXRsZT17bmFtZTpcIlFDYXJkVGl0bGVcIixyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtcHJpbWFyeSBxLWNhcmQtY29udGFpbmVyIHJvdyBuby13cmFwXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIGNvbHVtblwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2FyZC10aXRsZVwifSx0aGlzLiRzbG90cy5kZWZhdWx0KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLXN1YnRpdGxlXCJ9LFt0aGlzLiRzbG90cy5zdWJ0aXRsZV0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbC1hdXRvIHNlbGYtY2VudGVyIHEtY2FyZC10aXRsZS1leHRyYVwifSxbdGhpcy4kc2xvdHMucmlnaHRdKV0pfX0sUUNhcmRNYWluPXtuYW1lOlwiUUNhcmRNYWluXCIscmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLW1haW4gcS1jYXJkLWNvbnRhaW5lclwifSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFDYXJkQWN0aW9ucz17bmFtZTpcIlFDYXJkQWN0aW9uc1wiLHByb3BzOnt2ZXJ0aWNhbDpCb29sZWFuLGFsaWduOnt0eXBlOlN0cmluZyxkZWZhdWx0Olwic3RhcnRcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wic3RhcnRcIixcImNlbnRlclwiLFwiZW5kXCIsXCJhcm91bmRcIixcImJldHdlZW5cIl0uaW5jbHVkZXModCl9fX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5cInEtY2FyZC1hY3Rpb25zLVwiKyh0aGlzLnZlcnRpY2FsP1widmVydCBjb2x1bW4ganVzdGlmeS1zdGFydFwiOlwiaG9yaXogcm93XCIpK1wiIFwiKyh0aGlzLnZlcnRpY2FsP1wiaXRlbXNcIjpcImp1c3RpZnlcIikrXCItXCIrdGhpcy5hbGlnbn19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2FyZC1hY3Rpb25zXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFDYXJkTWVkaWE9e25hbWU6XCJRQ2FyZE1lZGlhXCIscHJvcHM6e292ZXJsYXlQb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImJvdHRvbVwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ0b3BcIixcImJvdHRvbVwiLFwiZnVsbFwiXS5pbmNsdWRlcyh0KX19fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtbWVkaWEgcmVsYXRpdmUtcG9zaXRpb25cIn0sW3RoaXMuJHNsb3RzLmRlZmF1bHQsdGhpcy4kc2xvdHMub3ZlcmxheT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLW1lZGlhLW92ZXJsYXlcIixjbGFzczpcImFic29sdXRlLVwiK3RoaXMub3ZlcmxheVBvc2l0aW9ufSxbdGhpcy4kc2xvdHMub3ZlcmxheV0pOm51bGxdKX19LFFDYXJkU2VwYXJhdG9yPXtuYW1lOlwiUUNhcmRTZXBhcmF0b3JcIixwcm9wczp7aW5zZXQ6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLXNlcGFyYXRvclwiLGNsYXNzOntpbnNldDp0aGlzLmluc2V0fX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fTtmdW5jdGlvbiBnZXREaXJlY3Rpb24odCl7dmFyIGU9ITAhPT10Lmhvcml6b250YWwmJiEwIT09dC52ZXJ0aWNhbCxpPXt9O3JldHVybiEwIT09dC5ob3Jpem9udGFsJiYhMCE9PWV8fChpLmhvcml6b250YWw9ITApLCEwIT09dC52ZXJ0aWNhbCYmITAhPT1lfHwoaS52ZXJ0aWNhbD0hMCksaX1mdW5jdGlvbiBwcm9jZXNzQ2hhbmdlcyh0LGUsaSl7dmFyIHM9cG9zaXRpb24odCksbj1zLmxlZnQtZS5ldmVudC54LG89cy50b3AtZS5ldmVudC55LHI9TWF0aC5hYnMobiksYT1NYXRoLmFicyhvKTtyZXR1cm57ZXZ0OnQscG9zaXRpb246cyxkaXJlY3Rpb246ZS5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmIWUuZGlyZWN0aW9uLnZlcnRpY2FsP248MD9cImxlZnRcIjpcInJpZ2h0XCI6IWUuZGlyZWN0aW9uLmhvcml6b250YWwmJmUuZGlyZWN0aW9uLnZlcnRpY2FsP288MD9cInVwXCI6XCJkb3duXCI6cj49YT9uPDA/XCJsZWZ0XCI6XCJyaWdodFwiOm88MD9cInVwXCI6XCJkb3duXCIsaXNGaXJzdDplLmV2ZW50LmlzRmlyc3QsaXNGaW5hbDppLGR1cmF0aW9uOihuZXcgRGF0ZSkuZ2V0VGltZSgpLWUuZXZlbnQudGltZSxkaXN0YW5jZTp7eDpyLHk6YX0sb2Zmc2V0Ont4Om4seTpvfSxkZWx0YTp7eDpzLmxlZnQtZS5ldmVudC5sYXN0WCx5OnMudG9wLWUuZXZlbnQubGFzdFl9fX1mdW5jdGlvbiBzaG91bGRUcmlnZ2VyKHQsZSl7cmV0dXJuISghdC5kaXJlY3Rpb24uaG9yaXpvbnRhbHx8IXQuZGlyZWN0aW9uLnZlcnRpY2FsKXx8KHQuZGlyZWN0aW9uLmhvcml6b250YWwmJiF0LmRpcmVjdGlvbi52ZXJ0aWNhbD9NYXRoLmFicyhlLmRlbHRhLngpPjA6IXQuZGlyZWN0aW9uLmhvcml6b250YWwmJnQuZGlyZWN0aW9uLnZlcnRpY2FsP01hdGguYWJzKGUuZGVsdGEueSk+MDp2b2lkIDApfXZhciBUb3VjaFBhbj17bmFtZTpcInRvdWNoLXBhblwiLGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT0hMCE9PWUubW9kaWZpZXJzLm5vTW91c2Uscz1lLm1vZGlmaWVycy5zdG9wLG49ZS5tb2RpZmllcnMucHJldmVudCxvPW58fGUubW9kaWZpZXJzLm1pZ2h0UHJldmVudD9udWxsOmxpc3Rlbk9wdHMucGFzc2l2ZSxyPXtoYW5kbGVyOmUudmFsdWUsZGlyZWN0aW9uOmdldERpcmVjdGlvbihlLm1vZGlmaWVycyksbW91c2VTdGFydDpmdW5jdGlvbih0KXtsZWZ0Q2xpY2sodCkmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsci5tb3ZlLG8pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsci5tb3VzZUVuZCxvKSxyLnN0YXJ0KHQsITApKX0sbW91c2VFbmQ6ZnVuY3Rpb24odCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHIubW92ZSxvKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHIubW91c2VFbmQsbyksci5lbmQodCl9LHN0YXJ0OmZ1bmN0aW9uKGUsaSl7dmFyIG89cG9zaXRpb24oZSk7ci5ldmVudD17eDpvLmxlZnQseTpvLnRvcCx0aW1lOihuZXcgRGF0ZSkuZ2V0VGltZSgpLGRldGVjdGVkOiEwPT09aXx8ci5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmci5kaXJlY3Rpb24udmVydGljYWwsYWJvcnQ6ITEsaXNGaXJzdDohMCxsYXN0WDpvLmxlZnQsbGFzdFk6by50b3B9LHIuZXZlbnQuZGV0ZWN0ZWQmJih0LmNsYXNzTGlzdC5hZGQoXCJxLXRvdWNoXCIpLCEwIT09aSYmKHMmJmUuc3RvcFByb3BhZ2F0aW9uKCksbiYmZS5wcmV2ZW50RGVmYXVsdCgpLHIubW92ZShlKSkpfSxtb3ZlOmZ1bmN0aW9uKHQpe2lmKCEwIT09ci5ldmVudC5hYm9ydClpZighMCE9PXIuZXZlbnQuZGV0ZWN0ZWQpe3ZhciBlPXBvc2l0aW9uKHQpLGk9TWF0aC5hYnMoZS5sZWZ0LXIuZXZlbnQueCksbz1NYXRoLmFicyhlLnRvcC1yLmV2ZW50LnkpO2khPT1vJiYoci5ldmVudC5kZXRlY3RlZD0hMCxyLmV2ZW50LmFib3J0PXIuZGlyZWN0aW9uLnZlcnRpY2FsP2k+bzppPG8sci5tb3ZlKHQpKX1lbHNle3MmJnQuc3RvcFByb3BhZ2F0aW9uKCksbiYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBhPXByb2Nlc3NDaGFuZ2VzKHQsciwhMSk7c2hvdWxkVHJpZ2dlcihyLGEpJiYoci5oYW5kbGVyKGEpLHIuZXZlbnQubGFzdFg9YS5wb3NpdGlvbi5sZWZ0LHIuZXZlbnQubGFzdFk9YS5wb3NpdGlvbi50b3Asci5ldmVudC5pc0ZpcnN0PSExKX19LGVuZDpmdW5jdGlvbihlKXt0LmNsYXNzTGlzdC5yZW1vdmUoXCJxLXRvdWNoXCIpLHIuZXZlbnQuYWJvcnR8fCFyLmV2ZW50LmRldGVjdGVkfHxyLmV2ZW50LmlzRmlyc3R8fChzJiZlLnN0b3BQcm9wYWdhdGlvbigpLG4mJmUucHJldmVudERlZmF1bHQoKSxyLmhhbmRsZXIocHJvY2Vzc0NoYW5nZXMoZSxyLCEwKSkpfX07dC5fX3F0b3VjaHBhbiYmKHQuX19xdG91Y2hwYW5fb2xkPXQuX19xdG91Y2hwYW4pLHQuX19xdG91Y2hwYW49cixpJiZ0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixyLm1vdXNlU3RhcnQsbyksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHIuc3RhcnQsbyksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsci5tb3ZlLG8pLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsci5lbmQsbyl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe3ZhciBpPWUub2xkVmFsdWUscz1lLnZhbHVlLG49ZS5tb2RpZmllcnMsbz10Ll9fcXRvdWNocGFuO2khPT1zJiYoby5oYW5kbGVyPXMpLG4uaG9yaXpvbnRhbD09PW8uZGlyZWN0aW9uLmhvcml6b250YWwmJm4udmVydGljYWw9PT1vLmRpcmVjdGlvbi52ZXJ0aWNhbHx8KG8uZGlyZWN0aW9uPWdldERpcmVjdGlvbihuKSl9LHVuYmluZDpmdW5jdGlvbih0LGUpe3ZhciBpPXQuX19xdG91Y2hwYW5fb2xkfHx0Ll9fcXRvdWNocGFuO2lmKHZvaWQgMCE9PWkpe3ZhciBzPWUubW9kaWZpZXJzLnByZXZlbnQ/bnVsbDpsaXN0ZW5PcHRzLnBhc3NpdmU7dC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsaS5tb3VzZVN0YXJ0LHMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixpLnN0YXJ0LHMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGkubW92ZSxzKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLGkuZW5kLHMpLGRlbGV0ZSB0W3QuX19xdG91Y2hwYW5fb2xkP1wiX19xdG91Y2hwYW5fb2xkXCI6XCJfX3F0b3VjaHBhblwiXX19fTtmdW5jdGlvbiBpc0RhdGUodCl7cmV0dXJuXCJbb2JqZWN0IERhdGVdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gaXNOdW1iZXIodCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQmJmlzRmluaXRlKHQpfWZ1bmN0aW9uIGlzU3RyaW5nKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0fXZhciBsaW5lYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGVhc2VJblF1YWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQqdH0sZWFzZU91dFF1YWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQqKDItdCl9LGVhc2VJbk91dFF1YWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/Mip0KnQ6KDQtMip0KSp0LTF9LGVhc2VJbkN1YmljPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LDMpfSxlYXNlT3V0Q3ViaWM9ZnVuY3Rpb24odCl7cmV0dXJuIDErTWF0aC5wb3codC0xLDMpfSxlYXNlSW5PdXRDdWJpYz1mdW5jdGlvbih0KXtyZXR1cm4gdDwuNT80Kk1hdGgucG93KHQsMyk6MSsodC0xKSpNYXRoLnBvdygyKnQtMiwyKX0sZWFzZUluUXVhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KHQsNCl9LGVhc2VPdXRRdWFydD1mdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdyh0LTEsNCl9LGVhc2VJbk91dFF1YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0PC41PzgqTWF0aC5wb3codCw0KToxLTgqTWF0aC5wb3codC0xLDQpfSxlYXNlSW5RdWludD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCw1KX0sZWFzZU91dFF1aW50PWZ1bmN0aW9uKHQpe3JldHVybiAxK01hdGgucG93KHQtMSw1KX0sZWFzZUluT3V0UXVpbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/MTYqTWF0aC5wb3codCw1KToxKzE2Kk1hdGgucG93KHQtMSw1KX0sZWFzZUluQ2lyYz1mdW5jdGlvbih0KXtyZXR1cm4tMSpNYXRoLnNxcnQoMS1NYXRoLnBvdyh0LDIpKSsxfSxlYXNlT3V0Q2lyYz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KC0xKih0LTIpKnQpfSxlYXNlSW5PdXRDaXJjPWZ1bmN0aW9uKHQpe3JldHVybiB0PC41Py41KigxLU1hdGguc3FydCgxLTQqdCp0KSk6LjUqKDErTWF0aC5zcXJ0KDgqdC0zLTQqdCp0KSl9LG92ZXJzaG9vdD1mdW5jdGlvbih0KXtyZXR1cm4tMSpNYXRoLnBvdyhNYXRoLkUsLTYuMyp0KSpNYXRoLmNvcyg1KnQpKzF9LHN0YW5kYXJkPWZ1bmN0aW9uKHQpe3JldHVybiB0PC40MDMxPzEyKk1hdGgucG93KHQsNCk6MS8xMjkwKigxMSpNYXRoLnNxcnQoLTRlNCp0KnQrOGU0KnQtMjMzNTkpLTEyOSl9LGRlY2VsZXJhdGU9ZWFzZU91dEN1YmljLGFjY2VsZXJhdGU9ZWFzZUluQ3ViaWMsc2hhcnA9ZWFzZUluT3V0UXVhZCxlYXNpbmc9e2xpbmVhcjpsaW5lYXIsZWFzZUluUXVhZDplYXNlSW5RdWFkLGVhc2VPdXRRdWFkOmVhc2VPdXRRdWFkLGVhc2VJbk91dFF1YWQ6ZWFzZUluT3V0UXVhZCxlYXNlSW5DdWJpYzplYXNlSW5DdWJpYyxlYXNlT3V0Q3ViaWM6ZWFzZU91dEN1YmljLGVhc2VJbk91dEN1YmljOmVhc2VJbk91dEN1YmljLGVhc2VJblF1YXJ0OmVhc2VJblF1YXJ0LGVhc2VPdXRRdWFydDplYXNlT3V0UXVhcnQsZWFzZUluT3V0UXVhcnQ6ZWFzZUluT3V0UXVhcnQsZWFzZUluUXVpbnQ6ZWFzZUluUXVpbnQsZWFzZU91dFF1aW50OmVhc2VPdXRRdWludCxlYXNlSW5PdXRRdWludDplYXNlSW5PdXRRdWludCxlYXNlSW5DaXJjOmVhc2VJbkNpcmMsZWFzZU91dENpcmM6ZWFzZU91dENpcmMsZWFzZUluT3V0Q2lyYzplYXNlSW5PdXRDaXJjLG92ZXJzaG9vdDpvdmVyc2hvb3Qsc3RhbmRhcmQ6c3RhbmRhcmQsZGVjZWxlcmF0ZTpkZWNlbGVyYXRlLGFjY2VsZXJhdGU6YWNjZWxlcmF0ZSxzaGFycDpzaGFycH0saWRzPXt9O2Z1bmN0aW9uIHN0YXJ0KHQpe3ZhciBlPXQubmFtZSxpPXQuZHVyYXRpb247dm9pZCAwPT09aSYmKGk9MzAwKTt2YXIgcz10LnRvLG49dC5mcm9tLG89dC5hcHBseSxyPXQuZG9uZSxhPXQuY2FuY2VsLGw9dC5lYXNpbmcsYz1lLGg9bmV3IERhdGU7Yz9zdG9wKGMpOmM9dWlkKCk7dmFyIHU9bHx8bGluZWFyLGQ9ZnVuY3Rpb24oKXt2YXIgdD0obmV3IERhdGUtaCkvaTt0PjEmJih0PTEpO3ZhciBlPW4rKHMtbikqdSh0KTtpZihvKGUsdCksMT09PXQpcmV0dXJuIGRlbGV0ZSBpZHNbY10sdm9pZChyJiZyKGUpKTtwLmxhc3Q9e3BvczplLHByb2dyZXNzOnR9LHAudGltZXI9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpfSxwPWlkc1tjXT17Y2FuY2VsOmEsdGltZXI6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpfTtyZXR1cm4gY31mdW5jdGlvbiBzdG9wKHQpe2lmKHQpe3ZhciBlPWlkc1t0XTtlJiZlLnRpbWVyJiYoY2FuY2VsQW5pbWF0aW9uRnJhbWUoZS50aW1lciksZS5jYW5jZWwmJmUuY2FuY2VsKGUubGFzdCksZGVsZXRlIGlkc1t0XSl9fXZhciBhbmltYXRlPXtzdGFydDpzdGFydCxzdG9wOnN0b3B9LEZ1bGxzY3JlZW5NaXhpbj17ZGF0YTpmdW5jdGlvbigpe3JldHVybntpbkZ1bGxzY3JlZW46ITF9fSx3YXRjaDp7JHJvdXRlOmZ1bmN0aW9uKCl7dGhpcy5leGl0RnVsbHNjcmVlbigpfSxpbkZ1bGxzY3JlZW46ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcImZ1bGxzY3JlZW5cIix0KX19LG1ldGhvZHM6e3RvZ2dsZUZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmluRnVsbHNjcmVlbj90aGlzLmV4aXRGdWxsc2NyZWVuKCk6dGhpcy5zZXRGdWxsc2NyZWVuKCl9LHNldEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmluRnVsbHNjcmVlbnx8KHRoaXMuaW5GdWxsc2NyZWVuPSEwLHRoaXMuY29udGFpbmVyPXRoaXMuJGVsLnBhcmVudE5vZGUsdGhpcy5jb250YWluZXIucmVwbGFjZUNoaWxkKHRoaXMuZnVsbHNjcmVlbkZpbGxlck5vZGUsdGhpcy4kZWwpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy4kZWwpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcInEtYm9keS1mdWxsc2NyZWVuLW1peGluXCIpLHRoaXMuX19oaXN0b3J5RnVsbHNjcmVlbj17aGFuZGxlcjp0aGlzLmV4aXRGdWxsc2NyZWVufSxIaXN0b3J5LmFkZCh0aGlzLl9faGlzdG9yeUZ1bGxzY3JlZW4pKX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmluRnVsbHNjcmVlbiYmKHRoaXMuX19oaXN0b3J5RnVsbHNjcmVlbiYmKEhpc3RvcnkucmVtb3ZlKHRoaXMuX19oaXN0b3J5RnVsbHNjcmVlbiksdGhpcy5fX2hpc3RvcnlGdWxsc2NyZWVuPW51bGwpLHRoaXMuY29udGFpbmVyLnJlcGxhY2VDaGlsZCh0aGlzLiRlbCx0aGlzLmZ1bGxzY3JlZW5GaWxsZXJOb2RlKSxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJxLWJvZHktZnVsbHNjcmVlbi1taXhpblwiKSx0aGlzLmluRnVsbHNjcmVlbj0hMSl9fSxiZWZvcmVNb3VudDpmdW5jdGlvbigpe3RoaXMuZnVsbHNjcmVlbkZpbGxlck5vZGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIil9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmV4aXRGdWxsc2NyZWVuKCl9fSxRQ2Fyb3VzZWw9e25hbWU6XCJRQ2Fyb3VzZWxcIixtaXhpbnM6W0Z1bGxzY3JlZW5NaXhpbl0sZGlyZWN0aXZlczp7VG91Y2hQYW46VG91Y2hQYW59LHByb3BzOnt2YWx1ZTpOdW1iZXIsY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LGhlaWdodDpTdHJpbmcsYXJyb3dzOkJvb2xlYW4saW5maW5pdGU6Qm9vbGVhbixhbmltYXRpb246e3R5cGU6W051bWJlcixCb29sZWFuXSxkZWZhdWx0OiEwfSxlYXNpbmc6RnVuY3Rpb24sc3dpcGVFYXNpbmc6RnVuY3Rpb24sbm9Td2lwZTpCb29sZWFuLGF1dG9wbGF5OltOdW1iZXIsQm9vbGVhbl0saGFuZGxlQXJyb3dLZXlzOkJvb2xlYW4scXVpY2tOYXY6Qm9vbGVhbixxdWlja05hdlBvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYm90dG9tXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInRvcFwiLFwiYm90dG9tXCJdLmluY2x1ZGVzKHQpfX0scXVpY2tOYXZJY29uOlN0cmluZyx0aHVtYm5haWxzOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LHRodW1ibmFpbHNJY29uOlN0cmluZyx0aHVtYm5haWxzSG9yaXpvbnRhbDpCb29sZWFufSxwcm92aWRlOmZ1bmN0aW9uKCl7cmV0dXJue2Nhcm91c2VsOnRoaXN9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Bvc2l0aW9uOjAsc2xpZGU6MCxwb3NpdGlvblNsaWRlOjAsc2xpZGVzTnVtYmVyOjAsYW5pbVVpZDohMSx2aWV3VGh1bWJuYWlsczohMX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0IT09dGhpcy5zbGlkZSYmdGhpcy5nb1RvU2xpZGUodCl9LGF1dG9wbGF5OmZ1bmN0aW9uKCl7dGhpcy5fX3BsYW5BdXRvUGxheSgpfSxpbmZpbml0ZTpmdW5jdGlvbigpe3RoaXMuX19wbGFuQXV0b1BsYXkoKX0saGFuZGxlQXJyb3dLZXlzOmZ1bmN0aW9uKHQpe3RoaXMuX19zZXRBcnJvd0tleXModCl9fSxjb21wdXRlZDp7cnRsRGlyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHEuaTE4bi5ydGw/LTE6MX0sYXJyb3dJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMuJHEuaWNvbi5jYXJvdXNlbC5sZWZ0LHRoaXMuJHEuaWNvbi5jYXJvdXNlbC5yaWdodF07cmV0dXJuIHRoaXMuJHEuaTE4bi5ydGw/dC5yZXZlcnNlKCk6dH0sdHJhY2tQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGVYKFwiK3RoaXMucnRsRGlyKnRoaXMucG9zaXRpb24rXCIlKVwifX0saW5maW5pdGVMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5maW5pdGUmJnRoaXMuc2xpZGVzTnVtYmVyPjEmJnRoaXMucG9zaXRpb25TbGlkZTwwfSxpbmZpbml0ZVJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5maW5pdGUmJnRoaXMuc2xpZGVzTnVtYmVyPjEmJnRoaXMucG9zaXRpb25TbGlkZT49dGhpcy5zbGlkZXNOdW1iZXJ9LGNhbkdvVG9QcmV2aW91czpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZmluaXRlP3RoaXMuc2xpZGVzTnVtYmVyPjE6dGhpcy5zbGlkZT4wfSxjYW5Hb1RvTmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZmluaXRlP3RoaXMuc2xpZGVzTnVtYmVyPjE6dGhpcy5zbGlkZTx0aGlzLnNsaWRlc051bWJlci0xfSxjb21wdXRlZFF1aWNrTmF2SWNvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1aWNrTmF2SWNvbnx8dGhpcy4kcS5pY29uLmNhcm91c2VsLnF1aWNrTmF2fSxjb21wdXRlZFN0eWxlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5GdWxsc2NyZWVuJiZ0aGlzLmhlaWdodClyZXR1cm5cImhlaWdodDogXCIrdGhpcy5oZWlnaHR9LHNsb3RTY29wZTpmdW5jdGlvbigpe3JldHVybntzbGlkZTp0aGlzLnNsaWRlLHNsaWRlc051bWJlcjp0aGlzLnNsaWRlc051bWJlcixwZXJjZW50YWdlOnRoaXMuc2xpZGVzTnVtYmVyPDI/MTAwOjEwMCp0aGlzLnNsaWRlLyh0aGlzLnNsaWRlc051bWJlci0xKSxnb1RvU2xpZGU6dGhpcy5nb1RvU2xpZGUscHJldmlvdXM6dGhpcy5wcmV2aW91cyxuZXh0OnRoaXMubmV4dCxjb2xvcjp0aGlzLmNvbG9yLGluRnVsbHNjcmVlbjp0aGlzLmluRnVsbHNjcmVlbix0b2dnbGVGdWxsc2NyZWVuOnRoaXMudG9nZ2xlRnVsbHNjcmVlbixjYW5Hb1RvTmV4dDp0aGlzLmNhbkdvVG9OZXh0LGNhbkdvVG9QcmV2aW91czp0aGlzLmNhbkdvVG9QcmV2aW91c319LGNvbXB1dGVkVGh1bWJuYWlsSWNvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRodW1ibmFpbHNJY29ufHx0aGlzLiRxLmljb24uY2Fyb3VzZWwudGh1bWJuYWlsc319LG1ldGhvZHM6e3ByZXZpb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuR29Ub1ByZXZpb3VzP3RoaXMuZ29Ub1NsaWRlKHRoaXMuc2xpZGUtMSk6UHJvbWlzZS5yZXNvbHZlKCl9LG5leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5Hb1RvTmV4dD90aGlzLmdvVG9TbGlkZSh0aGlzLnNsaWRlKzEpOlByb21pc2UucmVzb2x2ZSgpfSxnb1RvU2xpZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksbmV3IFByb21pc2UoZnVuY3Rpb24ocyl7dmFyIG4sbz1cIlwiLHI9aS5zbGlkZTtpLl9fY2xlYW51cCgpO3ZhciBhPWZ1bmN0aW9uKCl7aS4kZW1pdChcImlucHV0XCIsaS5zbGlkZSksaS4kZW1pdChcInNsaWRlXCIsaS5zbGlkZSxvKSxpLiRlbWl0KFwic2xpZGUtZGlyZWN0aW9uXCIsbyksaS5fX3BsYW5BdXRvUGxheSgpLHMoKX07aWYoaS5zbGlkZXNOdW1iZXI8Mj8oaS5zbGlkZT0wLGkucG9zaXRpb25TbGlkZT0wLG49MCk6KGkuaGFzT3duUHJvcGVydHkoXCJpbml0aWFsUG9zaXRpb25cIil8fChpLnBvc2l0aW9uPTEwMCotaS5zbGlkZSksbz10Pmkuc2xpZGU/XCJuZXh0XCI6XCJwcmV2aW91c1wiLGkuaW5maW5pdGU/KGkuc2xpZGU9bm9ybWFsaXplVG9JbnRlcnZhbCh0LDAsaS5zbGlkZXNOdW1iZXItMSksbj1ub3JtYWxpemVUb0ludGVydmFsKHQsLTEsaS5zbGlkZXNOdW1iZXIpLGV8fChpLnBvc2l0aW9uU2xpZGU9bikpOihpLnNsaWRlPWJldHdlZW4odCwwLGkuc2xpZGVzTnVtYmVyLTEpLGkucG9zaXRpb25TbGlkZT1pLnNsaWRlLG49aS5zbGlkZSkpLGkuJGVtaXQoXCJzbGlkZS10cmlnZ2VyXCIscixpLnNsaWRlLG8pLG4qPS0xMDAsIWkuYW5pbWF0aW9uKXJldHVybiBpLnBvc2l0aW9uPW4sdm9pZCBhKCk7aS5hbmltYXRpb25JblByb2dyZXNzPSEwLGkuYW5pbVVpZD1zdGFydCh7ZnJvbTppLnBvc2l0aW9uLHRvOm4sZHVyYXRpb246aXNOdW1iZXIoaS5hbmltYXRpb24pP2kuYW5pbWF0aW9uOjMwMCxlYXNpbmc6ZT9pLnN3aXBlRWFzaW5nfHxkZWNlbGVyYXRlOmkuZWFzaW5nfHxzdGFuZGFyZCxhcHBseTpmdW5jdGlvbih0KXtpLnBvc2l0aW9uPXR9LGRvbmU6ZnVuY3Rpb24oKXtpLmluZmluaXRlJiYoaS5wb3NpdGlvbj0xMDAqLWkuc2xpZGUsaS5wb3NpdGlvblNsaWRlPWkuc2xpZGUpLGkuYW5pbWF0aW9uSW5Qcm9ncmVzcz0hMSxhKCl9fSl9KX0sc3RvcEFuaW1hdGlvbjpmdW5jdGlvbigpe3N0b3AodGhpcy5hbmltVWlkKSx0aGlzLmFuaW1hdGlvbkluUHJvZ3Jlc3M9ITF9LF9fcGFuOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMuaW5maW5pdGV8fCF0aGlzLmFuaW1hdGlvbkluUHJvZ3Jlc3Mpe3QuaXNGaXJzdCYmKHRoaXMuaW5pdGlhbFBvc2l0aW9uPXRoaXMucG9zaXRpb24sdGhpcy5fX2NsZWFudXAoKSk7dmFyIGk9dGhpcy5ydGxEaXIqKFwibGVmdFwiPT09dC5kaXJlY3Rpb24/LTE6MSkqdC5kaXN0YW5jZS54Oyh0aGlzLmluZmluaXRlJiZ0aGlzLnNsaWRlc051bWJlcjwyfHwhdGhpcy5pbmZpbml0ZSYmKDA9PT10aGlzLnNsaWRlJiZpPjB8fHRoaXMuc2xpZGU9PT10aGlzLnNsaWRlc051bWJlci0xJiZpPDApKSYmKGk9MCk7dmFyIHM9dGhpcy5pbml0aWFsUG9zaXRpb24raS90aGlzLiRyZWZzLnRyYWNrLm9mZnNldFdpZHRoKjEwMCxuPXRoaXMuc2xpZGUrdGhpcy5ydGxEaXIqKFwibGVmdFwiPT09dC5kaXJlY3Rpb24/MTotMSk7dGhpcy5wb3NpdGlvbiE9PXMmJih0aGlzLnBvc2l0aW9uPXMpLHRoaXMucG9zaXRpb25TbGlkZSE9PW4mJih0aGlzLnBvc2l0aW9uU2xpZGU9biksdC5pc0ZpbmFsJiZ0aGlzLmdvVG9TbGlkZSh0LmRpc3RhbmNlLng8NDA/dGhpcy5zbGlkZTp0aGlzLnBvc2l0aW9uU2xpZGUsITApLnRoZW4oZnVuY3Rpb24oKXtkZWxldGUgZS5pbml0aWFsUG9zaXRpb259KX19LF9fcGxhbkF1dG9QbGF5OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QuYXV0b3BsYXkmJihjbGVhclRpbWVvdXQodC50aW1lciksdC50aW1lcj1zZXRUaW1lb3V0KHQubmV4dCxpc051bWJlcih0LmF1dG9wbGF5KT90LmF1dG9wbGF5OjVlMykpfSl9LF9fY2xlYW51cDpmdW5jdGlvbigpe3RoaXMuc3RvcEFuaW1hdGlvbigpLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKX0sX19oYW5kbGVBcnJvd0tleTpmdW5jdGlvbih0KXt2YXIgZT1nZXRFdmVudEtleSh0KTszNz09PWU/dGhpcy5wcmV2aW91cygpOjM5PT09ZSYmdGhpcy5uZXh0KCl9LF9fc2V0QXJyb3dLZXlzOmZ1bmN0aW9uKHQpe2RvY3VtZW50WyghMD09PXQ/XCJhZGRcIjpcInJlbW92ZVwiKStcIkV2ZW50TGlzdGVuZXJcIl0oXCJrZXlkb3duXCIsdGhpcy5fX2hhbmRsZUFycm93S2V5KX0sX19yZWdpc3RlclNsaWRlOmZ1bmN0aW9uKCl7dGhpcy5zbGlkZXNOdW1iZXIrK30sX191bnJlZ2lzdGVyU2xpZGU6ZnVuY3Rpb24oKXt0aGlzLnNsaWRlc051bWJlci0tfSxfX2dldFNjb3BlZFNsb3RzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoMCE9PXRoaXMuc2xpZGVzTnVtYmVyKXt2YXIgaT10aGlzLiRzY29wZWRTbG90cztyZXR1cm4gaT9PYmplY3Qua2V5cyhpKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RhcnRzV2l0aChcImNvbnRyb2wtXCIpfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpW3RdKGUuc2xvdFNjb3BlKX0pOnZvaWQgMH19LF9fZ2V0UXVpY2tOYXY6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigwIT09dGhpcy5zbGlkZXNOdW1iZXImJnRoaXMucXVpY2tOYXYpe3ZhciBpPXRoaXMuJHNjb3BlZFNsb3RzW1wicXVpY2stbmF2XCJdLHM9W107aWYoaSlmb3IodmFyIG49ZnVuY3Rpb24odCl7cy5wdXNoKGkoe3NsaWRlOnQsYmVmb3JlOnQ8ZS5zbGlkZSxjdXJyZW50OnQ9PT1lLnNsaWRlLGFmdGVyOnQ+ZS5zbGlkZSxjb2xvcjplLmNvbG9yLGdvVG9TbGlkZTpmdW5jdGlvbihpKXtlLmdvVG9TbGlkZShpfHx0KX19KSl9LG89MDtvPHRoaXMuc2xpZGVzTnVtYmVyO28rKyluKG8pO2Vsc2UgZm9yKHZhciByPWZ1bmN0aW9uKGkpe3MucHVzaCh0KFFCdG4se2tleTppLGNsYXNzOntpbmFjdGl2ZTppIT09ZS5zbGlkZX0scHJvcHM6e2ljb246ZS5jb21wdXRlZFF1aWNrTmF2SWNvbixyb3VuZDohMCxmbGF0OiEwLGRlbnNlOiEwLGNvbG9yOmUuY29sb3J9LG9uOntjbGljazpmdW5jdGlvbigpe2UuZ29Ub1NsaWRlKGkpfX19KSl9LGE9MDthPHRoaXMuc2xpZGVzTnVtYmVyO2ErKylyKGEpO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1xdWljay1uYXYgc2Nyb2xsIHRleHQtY2VudGVyXCIsY2xhc3M6W1widGV4dC1cIit0aGlzLmNvbG9yLFwiYWJzb2x1dGUtXCIrdGhpcy5xdWlja05hdlBvc2l0aW9uXX0scyl9fSxfX2dldFRodW1ibmFpbHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMudGh1bWJuYWlscy5tYXAoZnVuY3Rpb24oaSxzKXtpZihpKXJldHVybiB0KFwiZGl2XCIse29uOntjbGljazpmdW5jdGlvbigpe2UuZ29Ub1NsaWRlKHMpfX19LFt0KFwiaW1nXCIse2F0dHJzOntzcmM6aX0sY2xhc3M6e2FjdGl2ZTplLnNsaWRlPT09c319KV0pfSkscz1bdChRQnRuLHtzdGF0aWNDbGFzczpcInEtY2Fyb3VzZWwtdGh1bWJuYWlsLWJ0biBhYnNvbHV0ZVwiLHByb3BzOntpY29uOnRoaXMuY29tcHV0ZWRUaHVtYm5haWxJY29uLGZhYk1pbmk6ITAsZmxhdDohMCxjb2xvcjp0aGlzLmNvbG9yfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnZpZXdUaHVtYm5haWxzPSFlLnZpZXdUaHVtYm5haWxzfX19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC10aHVtYm5haWxzIHNjcm9sbCBhYnNvbHV0ZS1ib3R0b21cIixjbGFzczp7YWN0aXZlOnRoaXMudmlld1RodW1ibmFpbHN9fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBndXR0ZXIteHNcIixjbGFzczp0aGlzLnRodW1ibmFpbHNIb3Jpem9udGFsP1wibm8td3JhcFwiOlwianVzdGlmeS1jZW50ZXJcIn0saSldKV07cmV0dXJuIHRoaXMudmlld1RodW1ibmFpbHMmJnMudW5zaGlmdCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiYWJzb2x1dGUtZnVsbFwiLG9uOntjbGljazpmdW5jdGlvbigpe2Uudmlld1RodW1ibmFpbHM9ITF9fX0pKSxzfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbFwiLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZSxjbGFzczp7ZnVsbHNjcmVlbjp0aGlzLmluRnVsbHNjcmVlbn19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1pbm5lclwiLGRpcmVjdGl2ZXM6dGhpcy5ub1N3aXBlP251bGw6W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOntob3Jpem9udGFsOiEwLHByZXZlbnQ6ITAsc3RvcDohMH0sdmFsdWU6dGhpcy5fX3Bhbn1dfSxbdChcImRpdlwiLHtyZWY6XCJ0cmFja1wiLHN0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC10cmFja1wiLHN0eWxlOnRoaXMudHJhY2tQb3NpdGlvbixjbGFzczp7XCJpbmZpbml0ZS1sZWZ0XCI6dGhpcy5pbmZpbml0ZUxlZnQsXCJpbmZpbml0ZS1yaWdodFwiOnRoaXMuaW5maW5pdGVSaWdodH19LFt0aGlzLmluZmluaXRlUmlnaHQ/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2Fyb3VzZWwtc2xpZGVcIixzdHlsZTpcImZsZXg6IDAgMCAxMDAlXCJ9KTpudWxsLHRoaXMuJHNsb3RzLmRlZmF1bHQsdGhpcy5pbmZpbml0ZUxlZnQ/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2Fyb3VzZWwtc2xpZGVcIixzdHlsZTpcImZsZXg6IDAgMCAxMDAlXCJ9KTpudWxsXSldKSx0aGlzLmFycm93cz90KFFCdG4se3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1sZWZ0LWFycm93IGFic29sdXRlXCIscHJvcHM6e2NvbG9yOnRoaXMuY29sb3IsaWNvbjp0aGlzLmFycm93SWNvblswXSxmYWJNaW5pOiEwLGZsYXQ6ITB9LGRpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHZhbHVlOnRoaXMuY2FuR29Ub1ByZXZpb3VzfV0sb246e2NsaWNrOnRoaXMucHJldmlvdXN9fSk6bnVsbCx0aGlzLmFycm93cz90KFFCdG4se3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1yaWdodC1hcnJvdyBhYnNvbHV0ZVwiLHByb3BzOntjb2xvcjp0aGlzLmNvbG9yLGljb246dGhpcy5hcnJvd0ljb25bMV0sZmFiTWluaTohMCxmbGF0OiEwfSxkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTp0aGlzLmNhbkdvVG9OZXh0fV0sb246e2NsaWNrOnRoaXMubmV4dH19KTpudWxsLHRoaXMuX19nZXRRdWlja05hdih0KSx0aGlzLl9fZ2V0U2NvcGVkU2xvdHModCksdGhpcy50aHVtYm5haWxzLmxlbmd0aD90aGlzLl9fZ2V0VGh1bWJuYWlscyh0KTpudWxsLHRoaXMuJHNsb3RzLmNvbnRyb2xdKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fX3BsYW5BdXRvUGxheSgpLHRoaXMuaGFuZGxlQXJyb3dLZXlzJiZ0aGlzLl9fc2V0QXJyb3dLZXlzKCEwKSx0aGlzLl9fc3RvcFNsaWRlTnVtYmVyTm90aWZpZXI9dGhpcy4kd2F0Y2goXCJzbGlkZXNOdW1iZXJcIixmdW5jdGlvbihlKXt0LnZhbHVlPj1lJiZ0LiRlbWl0KFwiaW5wdXRcIixlLTEpfSx7aW1tZWRpYXRlOiEwfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9fY2xlYW51cCgpLHRoaXMuX19zdG9wU2xpZGVOdW1iZXJOb3RpZmllcigpLHRoaXMuaGFuZGxlQXJyb3dLZXlzJiZ0aGlzLl9fc2V0QXJyb3dLZXlzKCExKX19LFFDYXJvdXNlbFNsaWRlPXtuYW1lOlwiUUNhcm91c2VsU2xpZGVcIixpbmplY3Q6e2Nhcm91c2VsOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFDYXJvdXNlbFNsaWRlIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFDYXJvdXNlbFwiKX19fSxwcm9wczp7aW1nU3JjOlN0cmluZ30sY29tcHV0ZWQ6e2NvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5pbWdTcmMmJih0LmJhY2tncm91bmRJbWFnZT1cInVybChcIit0aGlzLmltZ1NyYytcIilcIix0LmJhY2tncm91bmRTaXplPVwiY292ZXJcIix0LmJhY2tncm91bmRQb3NpdGlvbj1cIjUwJVwiKSwhdGhpcy5jYXJvdXNlbC5pbkZ1bGxzY3JlZW4mJnRoaXMuY2Fyb3VzZWwuaGVpZ2h0JiYodC5tYXhIZWlnaHQ9dGhpcy5jYXJvdXNlbC5oZWlnaHQpLHR9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLXNsaWRlIHJlbGF0aXZlLXBvc2l0aW9uIHNjcm9sbFwiLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhcm91c2VsLl9fcmVnaXN0ZXJTbGlkZSgpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5jYXJvdXNlbC5fX3VucmVnaXN0ZXJTbGlkZSgpfX0sUUNhcm91c2VsQ29udHJvbD17bmFtZTpcIlFDYXJvdXNlbENvbnRyb2xcIixwcm9wczp7cG9zaXRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJib3R0b20tcmlnaHRcIn0sb2Zmc2V0Ont0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bMTgsMThdfX19LGNvbXB1dGVkOntjb21wdXRlZENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuXCJhYnNvbHV0ZS1cIit0aGlzLnBvc2l0aW9ufSxjb21wdXRlZFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue21hcmdpbjp0aGlzLm9mZnNldFsxXStcInB4IFwiK3RoaXMub2Zmc2V0WzBdK1wicHhcIn19fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLWNvbnRyb2wgYWJzb2x1dGVcIixzdHlsZTp0aGlzLmNvbXB1dGVkU3R5bGUsY2xhc3M6dGhpcy5jb21wdXRlZENsYXNzfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFDaGF0TWVzc2FnZT17bmFtZTpcIlFDaGF0TWVzc2FnZVwiLHByb3BzOntzZW50OkJvb2xlYW4sbGFiZWw6U3RyaW5nLGJnQ29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsbmFtZTpTdHJpbmcsYXZhdGFyOlN0cmluZyx0ZXh0OkFycmF5LHN0YW1wOlN0cmluZyxzaXplOlN0cmluZ30sY29tcHV0ZWQ6e3RleHRDbGFzczpmdW5jdGlvbigpe2lmKHRoaXMudGV4dENvbG9yKXJldHVyblwidGV4dC1cIit0aGlzLnRleHRDb2xvcn0sbWVzc2FnZUNsYXNzOmZ1bmN0aW9uKCl7aWYodGhpcy5iZ0NvbG9yKXJldHVyblwidGV4dC1cIit0aGlzLmJnQ29sb3J9LHNpemVDbGFzczpmdW5jdGlvbigpe2lmKHRoaXMuc2l6ZSlyZXR1cm5cImNvbC1cIit0aGlzLnNpemV9LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJxLW1lc3NhZ2Utc2VudFwiOnRoaXMuc2VudCxcInEtbWVzc2FnZS1yZWNlaXZlZFwiOiF0aGlzLnNlbnR9fX0sbWV0aG9kczp7X19nZXRUZXh0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMudGV4dC5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS10ZXh0XCIsY2xhc3M6ZS5tZXNzYWdlQ2xhc3N9LFt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS10ZXh0LWNvbnRlbnRcIixjbGFzczplLnRleHRDbGFzc30sW3QoXCJkaXZcIix7ZG9tUHJvcHM6e2lubmVySFRNTDppfX0pLGUuc3RhbXA/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1zdGFtcFwiLGRvbVByb3BzOntpbm5lckhUTUw6ZS5zdGFtcH19KTpudWxsXSldKX0pfSxfX2dldE1lc3NhZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW1lc3NhZ2UtdGV4dFwiLGNsYXNzOnRoaXMubWVzc2FnZUNsYXNzfSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLW1lc3NhZ2UtdGV4dC1jb250ZW50XCIsY2xhc3M6dGhpcy50ZXh0Q2xhc3N9LFt0aGlzLiRzbG90cy5kZWZhdWx0LHRoaXMuc3RhbXA/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1zdGFtcFwiLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5zdGFtcH19KTpudWxsXSldKX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZVwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sW3RoaXMubGFiZWw/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1sYWJlbCB0ZXh0LWNlbnRlclwiLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5sYWJlbH19KTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW1lc3NhZ2UtY29udGFpbmVyIHJvdyBpdGVtcy1lbmQgbm8td3JhcFwifSxbdGhpcy4kc2xvdHMuYXZhdGFyfHwodGhpcy5hdmF0YXI/dChcImltZ1wiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1hdmF0YXIgY29sLWF1dG9cIixhdHRyczp7c3JjOnRoaXMuYXZhdGFyfX0pOm51bGwpLHQoXCJkaXZcIix7Y2xhc3M6dGhpcy5zaXplQ2xhc3N9LFt0aGlzLm5hbWU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1uYW1lXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLm5hbWV9fSk6bnVsbCx0aGlzLnRleHQ/dGhpcy5fX2dldFRleHQodCk6bnVsbCx0aGlzLiRzbG90cy5kZWZhdWx0P3RoaXMuX19nZXRNZXNzYWdlKHQpOm51bGxdKV0pXSl9fTtmdW5jdGlvbiBnZXREaXJlY3Rpb24kMSh0KXt2YXIgZT17fTtyZXR1cm5bXCJsZWZ0XCIsXCJyaWdodFwiLFwidXBcIixcImRvd25cIixcImhvcml6b250YWxcIixcInZlcnRpY2FsXCJdLmZvckVhY2goZnVuY3Rpb24oaSl7dFtpXSYmKGVbaV09ITApfSksMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aD97bGVmdDohMCxyaWdodDohMCx1cDohMCxkb3duOiEwLGhvcml6b250YWw6ITAsdmVydGljYWw6ITB9OihlLmhvcml6b250YWwmJihlLmxlZnQ9ZS5yaWdodD0hMCksZS52ZXJ0aWNhbCYmKGUudXA9ZS5kb3duPSEwKSxlLmxlZnQmJmUucmlnaHQmJihlLmhvcml6b250YWw9ITApLGUudXAmJmUuZG93biYmKGUudmVydGljYWw9ITApLGUpfXZhciBUb3VjaFN3aXBlPXtuYW1lOlwidG91Y2gtc3dpcGVcIixiaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9IWUubW9kaWZpZXJzLm5vTW91c2Uscz17aGFuZGxlcjplLnZhbHVlLHRocmVzaG9sZDpwYXJzZUludChlLmFyZywxMCl8fDMwMCxkaXJlY3Rpb246Z2V0RGlyZWN0aW9uJDEoZS5tb2RpZmllcnMpLG1vdXNlU3RhcnQ6ZnVuY3Rpb24odCl7bGVmdENsaWNrKHQpJiYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHMubW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixzLm1vdXNlRW5kKSxzLnN0YXJ0KHQpKX0sbW91c2VFbmQ6ZnVuY3Rpb24odCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHMubW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixzLm1vdXNlRW5kKSxzLmVuZCh0KX0sc3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIGk9cG9zaXRpb24oZSk7cy5ldmVudD17eDppLmxlZnQseTppLnRvcCx0aW1lOihuZXcgRGF0ZSkuZ2V0VGltZSgpLGRldGVjdGVkOiExLGFib3J0OiExfSx0LmNsYXNzTGlzdC5hZGQoXCJxLXRvdWNoXCIpfSxtb3ZlOmZ1bmN0aW9uKHQpe2lmKCFzLmV2ZW50LmFib3J0KWlmKChuZXcgRGF0ZSkuZ2V0VGltZSgpLXMuZXZlbnQudGltZT5zLnRocmVzaG9sZClzLmV2ZW50LmFib3J0PSEwO2Vsc2V7aWYocy5ldmVudC5kZXRlY3RlZClyZXR1cm4gdC5zdG9wUHJvcGFnYXRpb24oKSx2b2lkIHQucHJldmVudERlZmF1bHQoKTt2YXIgZT1wb3NpdGlvbih0KSxpPWUubGVmdC1zLmV2ZW50Lngsbj1NYXRoLmFicyhpKSxvPWUudG9wLXMuZXZlbnQueSxyPU1hdGguYWJzKG8pO24hPT1yJiYocy5ldmVudC5kZXRlY3RlZD0hMCxzLmV2ZW50LmFib3J0PSEocy5kaXJlY3Rpb24udmVydGljYWwmJm48cnx8cy5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmbj5yfHxzLmRpcmVjdGlvbi51cCYmbjxyJiZvPDB8fHMuZGlyZWN0aW9uLmRvd24mJm48ciYmbz4wfHxzLmRpcmVjdGlvbi5sZWZ0JiZuPnImJmk8MHx8cy5kaXJlY3Rpb24ucmlnaHQmJm4+ciYmaT4wKSxzLm1vdmUodCkpfX0sZW5kOmZ1bmN0aW9uKGUpe2lmKHQuY2xhc3NMaXN0LnJlbW92ZShcInEtdG91Y2hcIiksIXMuZXZlbnQuYWJvcnQmJnMuZXZlbnQuZGV0ZWN0ZWQpe3ZhciBpPShuZXcgRGF0ZSkuZ2V0VGltZSgpLXMuZXZlbnQudGltZTtpZighKGk+cy50aHJlc2hvbGQpKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKTt2YXIgbixvPXBvc2l0aW9uKGUpLHI9by5sZWZ0LXMuZXZlbnQueCxhPU1hdGguYWJzKHIpLGw9by50b3Atcy5ldmVudC55LGM9TWF0aC5hYnMobCk7aWYoYT49Yyl7aWYoYTw1MClyZXR1cm47bj1yPDA/XCJsZWZ0XCI6XCJyaWdodFwifWVsc2V7aWYoYzw1MClyZXR1cm47bj1sPDA/XCJ1cFwiOlwiZG93blwifXMuZGlyZWN0aW9uW25dJiZzLmhhbmRsZXIoe2V2dDplLGRpcmVjdGlvbjpuLGR1cmF0aW9uOmksZGlzdGFuY2U6e3g6YSx5OmN9fSl9fX19O3QuX19xdG91Y2hzd2lwZT1zLGkmJnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHMubW91c2VTdGFydCksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHMuc3RhcnQpLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHMubW92ZSksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixzLmVuZCl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe2Uub2xkVmFsdWUhPT1lLnZhbHVlJiYodC5fX3F0b3VjaHN3aXBlLmhhbmRsZXI9ZS52YWx1ZSl9LHVuYmluZDpmdW5jdGlvbih0LGUpe3ZhciBpPXQuX19xdG91Y2hzd2lwZTtpJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsaS5tb3VzZVN0YXJ0KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsaS5zdGFydCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsaS5tb3ZlKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLGkuZW5kKSxkZWxldGUgdC5fX3F0b3VjaHN3aXBlKX19LENoZWNrYm94TWl4aW49e2RpcmVjdGl2ZXM6e1RvdWNoU3dpcGU6VG91Y2hTd2lwZX0scHJvcHM6e3ZhbDp7fSx0cnVlVmFsdWU6e2RlZmF1bHQ6ITB9LGZhbHNlVmFsdWU6e2RlZmF1bHQ6ITF9fSxjb21wdXRlZDp7aXNUcnVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWxJc0FycmF5P3RoaXMuaW5kZXg+LTE6dGhpcy52YWx1ZT09PXRoaXMudHJ1ZVZhbHVlfSxpc0ZhbHNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWxJc0FycmF5Py0xPT09dGhpcy5pbmRleDp0aGlzLnZhbHVlPT09dGhpcy5mYWxzZVZhbHVlfSxpbmRleDpmdW5jdGlvbigpe2lmKHRoaXMubW9kZWxJc0FycmF5KXJldHVybiB0aGlzLnZhbHVlLmluZGV4T2YodGhpcy52YWwpfSxtb2RlbElzQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKX19LG1ldGhvZHM6e3RvZ2dsZTpmdW5jdGlvbih0LGUpe3ZhciBpOyh2b2lkIDA9PT1lJiYoZT0hMCksdGhpcy5kaXNhYmxlfHx0aGlzLnJlYWRvbmx5KXx8KHQmJnN0b3BBbmRQcmV2ZW50KHQpLGUmJnRoaXMuJGVsLmJsdXIoKSx0aGlzLm1vZGVsSXNBcnJheT90aGlzLmlzVHJ1ZT8oaT10aGlzLnZhbHVlLnNsaWNlKCkpLnNwbGljZSh0aGlzLmluZGV4LDEpOmk9dGhpcy52YWx1ZS5jb25jYXQodGhpcy52YWwpOmk9dGhpcy5pc1RydWU/dGhpcy50b2dnbGVJbmRldGVybWluYXRlP3RoaXMuaW5kZXRlcm1pbmF0ZVZhbHVlOnRoaXMuZmFsc2VWYWx1ZTp0aGlzLmlzRmFsc2U/dGhpcy50cnVlVmFsdWU6dGhpcy5mYWxzZVZhbHVlLHRoaXMuX191cGRhdGUoaSkpfX19LE9wdGlvbk1peGluPXtwcm9wczp7dmFsdWU6e3JlcXVpcmVkOiEwfSxsYWJlbDpTdHJpbmcsbGVmdExhYmVsOkJvb2xlYW4sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LGtlZXBDb2xvcjpCb29sZWFuLGRhcms6Qm9vbGVhbixkaXNhYmxlOkJvb2xlYW4scmVhZG9ubHk6Qm9vbGVhbixub0ZvY3VzOkJvb2xlYW4sY2hlY2tlZEljb246U3RyaW5nLHVuY2hlY2tlZEljb246U3RyaW5nfSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVyblt0aGlzLl9fa2ViYWJUYWcse2Rpc2FibGVkOnRoaXMuZGlzYWJsZSxyZXZlcnNlOnRoaXMubGVmdExhYmVsLFwicS1mb2N1c2FibGVcIjp0aGlzLmZvY3VzYWJsZX1dfSxpbm5lckNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1RydWV8fHRoaXMuaXNJbmRldGVybWluYXRlP1tcImFjdGl2ZVwiLFwidGV4dC1cIit0aGlzLmNvbG9yXTpcInRleHQtXCIrKHRoaXMua2VlcENvbG9yP3RoaXMuY29sb3I6dGhpcy5kYXJrP1wibGlnaHRcIjpcImZhZGVkXCIpfSxmb2N1c2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub0ZvY3VzJiYhdGhpcy5kaXNhYmxlJiYhdGhpcy5yZWFkb25seX0sdGFiaW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb2N1c2FibGU/MDotMX19LG1ldGhvZHM6e19fdXBkYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLiRyZWZzLnJpcHBsZTtpJiYoaS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIil9LDEwKSksdGhpcy4kZW1pdChcImlucHV0XCIsdCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsdCl9KX0sX19oYW5kbGVLZXlEb3duOmZ1bmN0aW9uKHQpe1sxMywzMl0uaW5jbHVkZXMoZ2V0RXZlbnRLZXkodCkpJiZ0aGlzLnRvZ2dsZSh0LCExKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1vcHRpb24gY3Vyc29yLXBvaW50ZXIgbm8tb3V0bGluZSByb3cgaW5saW5lIG5vLXdyYXAgaXRlbXMtY2VudGVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt0YWJpbmRleDp0aGlzLnRhYmluZGV4fSxvbjp7Y2xpY2s6dGhpcy50b2dnbGUsZm9jdXM6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiZm9jdXNcIil9LGJsdXI6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiYmx1clwiKX0sa2V5ZG93bjp0aGlzLl9faGFuZGxlS2V5RG93bn0sZGlyZWN0aXZlczpcInEtdG9nZ2xlXCIhPT10aGlzLl9fa2ViYWJUYWd8fHRoaXMuZGlzYWJsZXx8dGhpcy5yZWFkb25seT9udWxsOlt7bmFtZTpcInRvdWNoLXN3aXBlXCIsbW9kaWZpZXJzOntob3Jpem9udGFsOiEwfSx2YWx1ZTp0aGlzLl9fc3dpcGV9XX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW9wdGlvbi1pbm5lciByZWxhdGl2ZS1wb3NpdGlvblwiLGNsYXNzOnRoaXMuaW5uZXJDbGFzc2VzfSxbdChcImlucHV0XCIse2F0dHJzOnt0eXBlOlwiY2hlY2tib3hcIn0sb246e2NoYW5nZTp0aGlzLnRvZ2dsZX19KSx0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3A/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZm9jdXMtaGVscGVyXCIsY2xhc3M6XCJxLXJhZGlvXCI9PT10aGlzLl9fa2ViYWJUYWc/XCJxLWZvY3VzLWhlbHBlci1yb3VuZFwiOlwicS1mb2N1cy1oZWxwZXItcm91bmRlZFwifSk6bnVsbCx0aGlzLl9fZ2V0Q29udGVudCh0KV0pLHRoaXMubGFiZWw/dChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLW9wdGlvbi1sYWJlbFwiLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5sYWJlbH19KTpudWxsLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX19LFFDaGVja2JveD17bmFtZTpcIlFDaGVja2JveFwiLG1peGluczpbQ2hlY2tib3hNaXhpbixPcHRpb25NaXhpbl0scHJvcHM6e3RvZ2dsZUluZGV0ZXJtaW5hdGU6Qm9vbGVhbixpbmRldGVybWluYXRlVmFsdWU6e2RlZmF1bHQ6bnVsbH0saW5kZXRlcm1pbmF0ZUljb246U3RyaW5nfSxjb21wdXRlZDp7aXNJbmRldGVybWluYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMudmFsdWV8fHRoaXMudmFsdWU9PT10aGlzLmluZGV0ZXJtaW5hdGVWYWx1ZX0sY2hlY2tlZFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNUcnVlP3t0cmFuc2l0aW9uOlwib3BhY2l0eSAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDBtcywgdHJhbnNmb3JtIDgwMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSAwbXNcIixvcGFjaXR5OjEsdHJhbnNmb3JtOlwic2NhbGUoMSlcIn06e3RyYW5zaXRpb246XCJvcGFjaXR5IDQ1MG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSAwbXMsIHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDQ1MG1zXCIsb3BhY2l0eTowLHRyYW5zZm9ybTpcInNjYWxlKDApXCJ9fSxpbmRldGVybWluYXRlU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZGV0ZXJtaW5hdGU/e3RyYW5zaXRpb246XCJvcGFjaXR5IDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgMG1zLCB0cmFuc2Zvcm0gODAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDBtc1wiLG9wYWNpdHk6MSx0cmFuc2Zvcm06XCJzY2FsZSgxKVwifTp7dHJhbnNpdGlvbjpcIm9wYWNpdHkgNDUwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDBtcywgdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgNDUwbXNcIixvcGFjaXR5OjAsdHJhbnNmb3JtOlwic2NhbGUoMClcIn19LHVuY2hlY2tlZFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNGYWxzZT97b3BhY2l0eToxfTp7dHJhbnNpdGlvbjpcIm9wYWNpdHkgNjUwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDE1MG1zXCIsb3BhY2l0eTowfX19LG1ldGhvZHM6e19fZ2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm5bdChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLWNoZWNrYm94LWljb24gY3Vyc29yLXBvaW50ZXJcIixwcm9wczp7bmFtZTp0aGlzLnVuY2hlY2tlZEljb258fHRoaXMuJHEuaWNvbi5jaGVja2JveC51bmNoZWNrZWQubWF0fSxzdHlsZTp0aGlzLnVuY2hlY2tlZFN0eWxlfSksdChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLWNoZWNrYm94LWljb24gY3Vyc29yLXBvaW50ZXIgYWJzb2x1dGUtZnVsbFwiLHByb3BzOntuYW1lOnRoaXMuaW5kZXRlcm1pbmF0ZUljb258fHRoaXMuJHEuaWNvbi5jaGVja2JveC5pbmRldGVybWluYXRlLm1hdH0sc3R5bGU6dGhpcy5pbmRldGVybWluYXRlU3R5bGV9KSx0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtY2hlY2tib3gtaWNvbiBjdXJzb3ItcG9pbnRlciBhYnNvbHV0ZS1mdWxsXCIscHJvcHM6e25hbWU6dGhpcy5jaGVja2VkSWNvbnx8dGhpcy4kcS5pY29uLmNoZWNrYm94LmNoZWNrZWQubWF0fSxzdHlsZTp0aGlzLmNoZWNrZWRTdHlsZX0pLHQoXCJkaXZcIix7cmVmOlwicmlwcGxlXCIsc3RhdGljQ2xhc3M6XCJxLXJhZGlhbC1yaXBwbGVcIn0pXX19LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX19rZWJhYlRhZz1cInEtY2hlY2tib3hcIn19LFFDaGlwPXtuYW1lOlwiUUNoaXBcIixwcm9wczp7c21hbGw6Qm9vbGVhbixkZW5zZTpCb29sZWFuLHRhZzpCb29sZWFuLHNxdWFyZTpCb29sZWFuLGZsb2F0aW5nOkJvb2xlYW4scG9pbnRpbmc6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ1cFwiLFwicmlnaHRcIixcImRvd25cIixcImxlZnRcIl0uaW5jbHVkZXModCl9fSxjb2xvcjpTdHJpbmcsdGV4dENvbG9yOlN0cmluZyxpY29uOlN0cmluZyxpY29uUmlnaHQ6U3RyaW5nLGF2YXRhcjpTdHJpbmcsY2xvc2FibGU6Qm9vbGVhbixkZXRhaWw6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHRoaXMucG9pbnRpbmcmJmUucHVzaChcInEtY2hpcC1wb2ludGluZy1cIit0aGlzLnBvaW50aW5nKSxbXCJ0YWdcIixcInNxdWFyZVwiLFwiZmxvYXRpbmdcIixcInBvaW50aW5nXCIsXCJzbWFsbFwiLFwiZGVuc2VcIl0uZm9yRWFjaChmdW5jdGlvbihpKXt0W2ldJiZlLnB1c2goXCJxLWNoaXAtXCIraSl9KSx0aGlzLmZsb2F0aW5nJiYoIXRoaXMuZGVuc2UmJmUucHVzaChcInEtY2hpcC1kZW5zZVwiKSwhdGhpcy5zcXVhcmUmJmUucHVzaChcInEtY2hpcC1zcXVhcmVcIikpLHRoaXMuY29sb3ImJihlLnB1c2goXCJiZy1cIit0aGlzLmNvbG9yKSwhdGhpcy50ZXh0Q29sb3ImJmUucHVzaChcInRleHQtd2hpdGVcIikpLHRoaXMudGV4dENvbG9yJiZlLnB1c2goXCJ0ZXh0LVwiK3RoaXMudGV4dENvbG9yKSxlfX0sbWV0aG9kczp7X19vbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQoXCJjbGlja1wiLHQpfSxfX29uTW91c2VEb3duOmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQoXCJmb2N1c1wiLHQpfSxfX2hhbmRsZUtleURvd246ZnVuY3Rpb24odCl7dGhpcy5jbG9zYWJsZSYmWzgsMTMsMzJdLmluY2x1ZGVzKGdldEV2ZW50S2V5KHQpKSYmKHN0b3BBbmRQcmV2ZW50KHQpLHRoaXMuJGVtaXQoXCJoaWRlXCIpKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jaGlwIHJvdyBuby13cmFwIGlubGluZSBpdGVtcy1jZW50ZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsb246e21vdXNlZG93bjp0aGlzLl9fb25Nb3VzZURvd24sdG91Y2hzdGFydDp0aGlzLl9fb25Nb3VzZURvd24sY2xpY2s6dGhpcy5fX29uQ2xpY2ssa2V5ZG93bjp0aGlzLl9faGFuZGxlS2V5RG93bn19LFt0aGlzLmljb258fHRoaXMuYXZhdGFyP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNoaXAtc2lkZSBxLWNoaXAtbGVmdCByb3cgZmxleC1jZW50ZXJcIixjbGFzczp7XCJxLWNoaXAtZGV0YWlsXCI6dGhpcy5kZXRhaWx9fSxbdGhpcy5pY29uP3QoUUljb24se3N0YXRpY0NsYXNzOlwicS1jaGlwLWljb25cIixwcm9wczp7bmFtZTp0aGlzLmljb259fSk6dGhpcy5hdmF0YXI/dChcImltZ1wiLHthdHRyczp7c3JjOnRoaXMuYXZhdGFyfX0pOm51bGxdKTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNoaXAtbWFpbiBlbGxpcHNpcyBxLXBvcHVwLS1za2lwXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpLHRoaXMuaWNvblJpZ2h0P3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMuaWNvblJpZ2h0fSxjbGFzczp0aGlzLmNsb3NhYmxlP1wib24tcmlnaHQgcS1jaGlwLWljb25cIjpcInEtY2hpcC1zaWRlIHEtY2hpcC1yaWdodFwifSk6bnVsbCx0aGlzLmNsb3NhYmxlP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNoaXAtc2lkZSBxLWNoaXAtY2xvc2UgcS1jaGlwLXJpZ2h0IHJvdyBmbGV4LWNlbnRlclwifSxbdChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmNoaXAuY2xvc2V9LHN0YXRpY0NsYXNzOlwiY3Vyc29yLXBvaW50ZXJcIixuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24odCl7dCYmdC5zdG9wUHJvcGFnYXRpb24oKSxlLiRlbWl0KFwiaGlkZVwiKX19fSldKTpudWxsXSl9fSxtYXJnaW5hbD17dHlwZTpBcnJheSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuXCJpY29uXCJpbiB0fSl9fSxGcmFtZU1peGluPXttaXhpbnM6W0FsaWduTWl4aW5dLHByb3BzOntwcmVmaXg6U3RyaW5nLHN1ZmZpeDpTdHJpbmcsc3RhY2tMYWJlbDpTdHJpbmcsZmxvYXRMYWJlbDpTdHJpbmcscGxhY2Vob2xkZXI6U3RyaW5nLGVycm9yOkJvb2xlYW4sd2FybmluZzpCb29sZWFuLGRpc2FibGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFuLGNsZWFyYWJsZTpCb29sZWFuLGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSxhbGlnbjp7ZGVmYXVsdDpcImxlZnRcIn0sZGFyazpCb29sZWFuLGJlZm9yZTptYXJnaW5hbCxhZnRlcjptYXJnaW5hbCxpbnZlcnRlZDpCb29sZWFuLGludmVydGVkTGlnaHQ6Qm9vbGVhbixoaWRlVW5kZXJsaW5lOkJvb2xlYW4sY2xlYXJWYWx1ZTp7fSxub1BhcmVudEZpZWxkOkJvb2xlYW59LGNvbXB1dGVkOntpbnB1dFBsYWNlaG9sZGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZmxvYXRMYWJlbCYmIXRoaXMuc3RhY2tMYWJlbHx8dGhpcy5sYWJlbElzQWJvdmUpcmV0dXJuIHRoaXMucGxhY2Vob2xkZXJ9LGlzSW52ZXJ0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZlcnRlZHx8dGhpcy5pbnZlcnRlZExpZ2h0fSxpc0ludmVydGVkTGlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0ludmVydGVkJiYodGhpcy5pbnZlcnRlZExpZ2h0JiYhdGhpcy5oYXNFcnJvcnx8dGhpcy5pbnZlcnRlZCYmdGhpcy5oYXNXYXJuaW5nKX0saXNTdGFuZGFyZDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzSW52ZXJ0ZWR9LGlzSGlkZVVuZGVybGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzU3RhbmRhcmQmJnRoaXMuaGlkZVVuZGVybGluZX0sbGFiZWxJc0Fib3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9jdXNlZHx8dGhpcy5sZW5ndGh8fHRoaXMuYWRkaXRpb25hbExlbmd0aHx8dGhpcy5zdGFja0xhYmVsfSxoYXNDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoPjB8fHRoaXMuYWRkaXRpb25hbExlbmd0aD4wfHx0aGlzLnBsYWNlaG9sZGVyfHwwPT09dGhpcy5wbGFjZWhvbGRlcn0sZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiYhdGhpcy5yZWFkb25seX0sY29tcHV0ZWRDbGVhclZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuY2xlYXJWYWx1ZT9udWxsOnRoaXMuY2xlYXJWYWx1ZX0saXNDbGVhcmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0YWJsZSYmdGhpcy5jbGVhcmFibGUmJnRoaXMuY29tcHV0ZWRDbGVhclZhbHVlIT09dGhpcy5tb2RlbH0saGFzRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4hISghdGhpcy5ub1BhcmVudEZpZWxkJiZ0aGlzLmZpZWxkJiZ0aGlzLmZpZWxkLmVycm9yfHx0aGlzLmVycm9yKX0saGFzV2FybmluZzpmdW5jdGlvbigpe3JldHVybiEodGhpcy5oYXNFcnJvcnx8ISghdGhpcy5ub1BhcmVudEZpZWxkJiZ0aGlzLmZpZWxkJiZ0aGlzLmZpZWxkLndhcm5pbmd8fHRoaXMud2FybmluZykpfSxmYWtlSW5wdXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdHVhbFZhbHVlfHwwPT09dGhpcy5hY3R1YWxWYWx1ZT90aGlzLmFjdHVhbFZhbHVlOnRoaXMucGxhY2Vob2xkZXJ8fDA9PT10aGlzLnBsYWNlaG9sZGVyP3RoaXMucGxhY2Vob2xkZXI6XCJcIn0sZmFrZUlucHV0Q2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYWN0dWFsVmFsdWV8fDA9PT10aGlzLmFjdHVhbFZhbHVlO3JldHVyblt0aGlzLmFsaWduQ2xhc3Mse2ludmlzaWJsZToodGhpcy5zdGFja0xhYmVsfHx0aGlzLmZsb2F0TGFiZWwpJiYhdGhpcy5sYWJlbElzQWJvdmUmJiF0LFwicS1pbnB1dC10YXJnZXQtcGxhY2Vob2xkZXJcIjohdCYmdGhpcy5pbnB1dFBsYWNlaG9sZGVyfV19fSxtZXRob2RzOntjbGVhcjpmdW5jdGlvbih0KXtpZih0aGlzLmVkaXRhYmxlKXt0JiZzdG9wQW5kUHJldmVudCh0KTt2YXIgZT10aGlzLmNvbXB1dGVkQ2xlYXJWYWx1ZTt0aGlzLl9fc2V0TW9kZWwmJnRoaXMuX19zZXRNb2RlbChlLCEwKSx0aGlzLiRlbWl0KFwiY2xlYXJcIixlKX19fX0sSW5wdXRNaXhpbj17cHJvcHM6e2F1dG9mb2N1czpbQm9vbGVhbixTdHJpbmddLG1heEhlaWdodDpOdW1iZXIsbG9hZGluZzpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2ZvY3VzZWQ6ITEsdGltZXI6bnVsbCxpc051bWJlckVycm9yOiExLGlzTmVnWmVybzohMX19LG1ldGhvZHM6e2ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlfHx0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCl9LGJsdXI6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLmlucHV0JiZ0aGlzLiRyZWZzLmlucHV0LmJsdXIoKX0sc2VsZWN0OmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5pbnB1dC5zZWxlY3QoKX0sX19vbkZvY3VzOmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmZvY3VzZWR8fCh0aGlzLmZvY3VzZWQ9ITAsdGhpcy4kcmVmcy5pbnB1dCYmdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpLHRoaXMuJGVtaXQoXCJmb2N1c1wiLHQpKX0sX19vbklucHV0Qmx1cjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9fb25CbHVyKHQpfSwyMDApfSxfX29uQmx1cjpmdW5jdGlvbih0LGUpe3RoaXMuZm9jdXNlZCYmKHRoaXMuZm9jdXNlZD0hMSx0aGlzLiRlbWl0KFwiYmx1clwiLHQpKSx0aGlzLl9fZW1pdChlKX0sX19lbWl0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLmlzTnVtYmVyJiZ0aGlzLmlzTnVtYmVyRXJyb3Iscz1pP3RoaXMuaXNOZWdaZXJvPy0wOm51bGw6dGhpcy5tb2RlbDt0aGlzLmlzTnVtYmVyJiYodGhpcy5tb2RlbD10aGlzLnZhbHVlKSxpJiZ0aGlzLiRlbWl0KFwiaW5wdXRcIixzKTt2YXIgbj1mdW5jdGlvbigpe2UuaXNOdW1iZXI/KHM9cGFyc2VGbG9hdChzKSxOdW1iZXIuaXNJbnRlZ2VyKGUuZGVjaW1hbHMpJiYocz1wYXJzZUZsb2F0KHMudG9GaXhlZChlLmRlY2ltYWxzKSkpLFN0cmluZygxL3MpIT09U3RyaW5nKDEvZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIixzKSk6SlNPTi5zdHJpbmdpZnkocykhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLHMpfTt0P24oKTp0aGlzLiRuZXh0VGljayhuKX0sX19vbktleWRvd246ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJihcInRleHRhcmVhXCI9PT10aGlzLnR5cGU/dC5zdG9wUHJvcGFnYXRpb24oKTp0aGlzLl9fZW1pdCgpKSx0aGlzLiRlbWl0KFwia2V5ZG93blwiLHQpfSxfX29uS2V5dXA6ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcImtleXVwXCIsdCl9LF9fb25DbGljazpmdW5jdGlvbih0KXt0aGlzLmZvY3VzKCksdGhpcy4kZW1pdChcImNsaWNrXCIsdCl9LF9fb25QYXN0ZTpmdW5jdGlvbih0KXt0aGlzLiRlbWl0KFwicGFzdGVcIix0KX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dmFyIGU9dC4kcmVmcy5pbnB1dDt0LmF1dG9mb2N1cyYmZSYmKGUuZm9jdXMoKSxcInNlbGVjdFwiPT09dC5hdXRvZm9jdXMmJmUuc2VsZWN0KCkpfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5mb2N1c2VkJiZ0aGlzLl9fb25CbHVyKHZvaWQgMCwhMCl9fSxQYXJlbnRGaWVsZE1peGluPXtpbmplY3Q6e2ZpZWxkOntmcm9tOlwiX19maWVsZFwiLGRlZmF1bHQ6bnVsbH19LHByb3BzOntub1BhcmVudEZpZWxkOkJvb2xlYW59LHdhdGNoOntub1BhcmVudEZpZWxkOmZ1bmN0aW9uKHQpe3RoaXMuZmllbGQmJnRoaXMuZmllbGRbdD9cIl9fcmVnaXN0ZXJJbnB1dFwiOlwiX191bnJlZ2lzdGVySW5wdXRcIl0odGhpcyl9fSxiZWZvcmVNb3VudDpmdW5jdGlvbigpeyF0aGlzLm5vUGFyZW50RmllbGQmJnRoaXMuZmllbGQmJnRoaXMuZmllbGQuX19yZWdpc3RlcklucHV0KHRoaXMpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7IXRoaXMubm9QYXJlbnRGaWVsZCYmdGhpcy5maWVsZCYmdGhpcy5maWVsZC5fX3VucmVnaXN0ZXJJbnB1dCh0aGlzKX19LFFJbnB1dEZyYW1lPXtuYW1lOlwiUUlucHV0RnJhbWVcIixtaXhpbnM6W0ZyYW1lTWl4aW4sUGFyZW50RmllbGRNaXhpbl0scHJvcHM6e2ZvY3VzZWQ6Qm9vbGVhbixsZW5ndGg6TnVtYmVyLGZvY3VzYWJsZTpCb29sZWFuLGFkZGl0aW9uYWxMZW5ndGg6Qm9vbGVhbn0sY29tcHV0ZWQ6e2hhc1N0YWNrTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdGhpcy5zdGFja0xhYmVsJiZ0aGlzLnN0YWNrTGFiZWwubGVuZ3RoPjB9LGhhc0xhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzU3RhY2tMYWJlbHx8XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuZmxvYXRMYWJlbCYmdGhpcy5mbG9hdExhYmVsLmxlbmd0aD4wfSxsYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc1N0YWNrTGFiZWw/dGhpcy5zdGFja0xhYmVsOnRoaXMuZmxvYXRMYWJlbH0sYWRkb25DbGFzczpmdW5jdGlvbigpe3JldHVybntcInEtaWYtYWRkb24tdmlzaWJsZVwiOiF0aGlzLmhhc0xhYmVsfHx0aGlzLmxhYmVsSXNBYm92ZX19LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1be1wicS1pZi1oYXMtbGFiZWxcIjp0aGlzLmxhYmVsLFwicS1pZi1mb2N1c2VkXCI6dGhpcy5mb2N1c2VkLFwicS1pZi1lcnJvclwiOnRoaXMuaGFzRXJyb3IsXCJxLWlmLXdhcm5pbmdcIjp0aGlzLmhhc1dhcm5pbmcsXCJxLWlmLWRpc2FibGVkXCI6dGhpcy5kaXNhYmxlLFwicS1pZi1yZWFkb25seVwiOnRoaXMucmVhZG9ubHksXCJxLWlmLWZvY3VzYWJsZVwiOnRoaXMuZm9jdXNhYmxlJiYhdGhpcy5kaXNhYmxlLFwicS1pZi1pbnZlcnRlZFwiOnRoaXMuaXNJbnZlcnRlZCxcInEtaWYtaW52ZXJ0ZWQtbGlnaHRcIjp0aGlzLmlzSW52ZXJ0ZWRMaWdodCxcInEtaWYtbGlnaHQtY29sb3JcIjp0aGlzLmxpZ2h0Q29sb3IsXCJxLWlmLWRhcmtcIjp0aGlzLmRhcmssXCJxLWlmLWhpZGUtdW5kZXJsaW5lXCI6dGhpcy5pc0hpZGVVbmRlcmxpbmUsXCJxLWlmLXN0YW5kYXJkXCI6dGhpcy5pc1N0YW5kYXJkLFwicS1pZi1oYXMtY29udGVudFwiOnRoaXMuaGFzQ29udGVudH1dLGU9dGhpcy5oYXNFcnJvcj9cIm5lZ2F0aXZlXCI6dGhpcy5oYXNXYXJuaW5nP1wid2FybmluZ1wiOnRoaXMuY29sb3I7cmV0dXJuIHRoaXMuaXNJbnZlcnRlZD8odC5wdXNoKFwiYmctXCIrZSksdC5wdXNoKFwidGV4dC1cIisodGhpcy5pc0ludmVydGVkTGlnaHQ/XCJibGFja1wiOlwid2hpdGVcIikpKTplJiZ0LnB1c2goXCJ0ZXh0LVwiK2UpLHR9fSxtZXRob2RzOntfX29uQ2xpY2s6ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcImNsaWNrXCIsdCl9LF9fb25Nb3VzZURvd246ZnVuY3Rpb24odCl7dmFyIGU9dGhpczshdGhpcy5kaXNhYmxlJiZ0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBlLiRlbWl0KFwiZm9jdXNcIix0KX0pfSxfX2FkZGl0aW9uYWxIaWRkZW46ZnVuY3Rpb24odCxlLGkscyl7cmV0dXJuIHZvaWQgMCE9PXQuY29uZGl0aW9uPyExPT09dC5jb25kaXRpb246dm9pZCAwIT09dC5jb250ZW50JiYhdC5jb250ZW50PT1zPjB8fHZvaWQgMCE9PXQuZXJyb3ImJiF0LmVycm9yPT09ZXx8dm9pZCAwIT09dC53YXJuaW5nJiYhdC53YXJuaW5nPT09aX0sX19iYUhhbmRsZXI6ZnVuY3Rpb24odCxlKXtlLmFsbG93UHJvcGFnYXRpb258fHQuc3RvcFByb3BhZ2F0aW9uKCksZS5oYW5kbGVyJiZlLmhhbmRsZXIodCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaWYgcm93IG5vLXdyYXAgcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3RhYmluZGV4OnRoaXMuZm9jdXNhYmxlJiYhdGhpcy5kaXNhYmxlPzA6LTF9LG9uOntjbGljazp0aGlzLl9fb25DbGlja319LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1iYXNlbGluZVwifSxcInxcIiksdGhpcy5iZWZvcmUmJnRoaXMuYmVmb3JlLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChRSWNvbix7a2V5OlwiYlwiK2kuaWNvbixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbCBxLWlmLWNvbnRyb2wtYmVmb3JlXCIsY2xhc3M6W2kuY2xhc3Mse2hpZGRlbjplLl9fYWRkaXRpb25hbEhpZGRlbihpLGUuaGFzRXJyb3IsZS5oYXNXYXJuaW5nLGUubGVuZ3RoKX1dLHByb3BzOntuYW1lOmkuaWNvbn0sbmF0aXZlT246e21vdXNlZG93bjplLl9fb25Nb3VzZURvd24sdG91Y2hzdGFydDplLl9fb25Nb3VzZURvd24sY2xpY2s6ZnVuY3Rpb24odCl7ZS5fX2JhSGFuZGxlcih0LGkpfX19KX0pfHx2b2lkIDAsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaWYtaW5uZXIgY29sIGNvbHVtbiBxLXBvcHVwLS1za2lwXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IG5vLXdyYXAgcmVsYXRpdmUtcG9zaXRpb25cIn0sW3RoaXMucHJlZml4JiZ0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtaWYtYWRkb24gcS1pZi1hZGRvbi1sZWZ0XCIsY2xhc3M6dGhpcy5hZGRvbkNsYXNzLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5wcmVmaXh9fSl8fHZvaWQgMCx0aGlzLmhhc0xhYmVsJiZ0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1sYWJlbFwiLGNsYXNzOntcInEtaWYtbGFiZWwtYWJvdmVcIjp0aGlzLmxhYmVsSXNBYm92ZX19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1sYWJlbC1pbm5lciBlbGxpcHNpc1wiLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5sYWJlbH19KV0pfHx2b2lkIDBdLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KS5jb25jYXQoW3RoaXMuc3VmZml4JiZ0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtaWYtYWRkb24gcS1pZi1hZGRvbi1yaWdodFwiLGNsYXNzOnRoaXMuYWRkb25DbGFzcyxkb21Qcm9wczp7aW5uZXJIVE1MOnRoaXMuc3VmZml4fX0pfHx2b2lkIDBdKSksdGhpcy5oYXNMYWJlbCYmdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaWYtbGFiZWwtc3BhY2VyXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLmxhYmVsfX0pfHx2b2lkIDBdKSx0aGlzLmFmdGVyJiZ0aGlzLmFmdGVyLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChRSWNvbix7a2V5OlwiYVwiK2kuaWNvbixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLGNsYXNzOltpLmNsYXNzLHtoaWRkZW46ZS5fX2FkZGl0aW9uYWxIaWRkZW4oaSxlLmhhc0Vycm9yLGUuaGFzV2FybmluZyxlLmxlbmd0aCl9XSxwcm9wczp7bmFtZTppLmljb259LG5hdGl2ZU9uOnttb3VzZWRvd246ZS5fX29uTW91c2VEb3duLHRvdWNoc3RhcnQ6ZS5fX29uTW91c2VEb3duLGNsaWNrOmZ1bmN0aW9uKHQpe2UuX19iYUhhbmRsZXIodCxpKX19fSl9KXx8dm9pZCAwXS5jb25jYXQodGhpcy4kc2xvdHMuYWZ0ZXIpKX19LFFDaGlwc0lucHV0PXtuYW1lOlwiUUNoaXBzSW5wdXRcIixtaXhpbnM6W0ZyYW1lTWl4aW4sSW5wdXRNaXhpbl0scHJvcHM6e3ZhbHVlOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfSxjaGlwc0NvbG9yOlN0cmluZyxjaGlwc0JnQ29sb3I6U3RyaW5nLHJlYWRvbmx5OkJvb2xlYW4sYWRkSWNvbjpTdHJpbmcsdXBwZXJDYXNlOkJvb2xlYW4sbG93ZXJDYXNlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybntpbnB1dDpcIlwiLG1vZGVsOnRoaXMudmFsdWUuc2xpY2UoKSx3YXRjaGVyOm51bGwsc2hhZG93Ont2YWw6dGhpcy5pbnB1dCxzZXQ6dGhpcy5hZGQsc2V0TmF2OmZ1bmN0aW9uKGUpe3QuaW5wdXQ9ZX0sbG9hZGluZzohMSxzZWxlY3Rpb25PcGVuOiExLHdhdGNoZWQ6MCxpc0VkaXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZWRpdGFibGV9LGlzRGFyazpmdW5jdGlvbigpe3JldHVybiB0LmRhcmt9LGhhc0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10LiRyZWZzLmlucHV0fSxyZWdpc3RlcjpmdW5jdGlvbigpe3Quc2hhZG93LndhdGNoZWQrPTEsdC5fX3dhdGNoZXJSZWdpc3RlcigpfSx1bnJlZ2lzdGVyOmZ1bmN0aW9uKCl7dC5zaGFkb3cud2F0Y2hlZD1NYXRoLm1heCgwLHQuc2hhZG93LndhdGNoZWQtMSksdC5fX3dhdGNoZXJVbnJlZ2lzdGVyKCl9LGdldEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHQuJHJlZnMuaW5wdXR9fX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXQuc2xpY2UoKX19LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57X19pbnB1dDp0aGlzLnNoYWRvd319LGNvbXB1dGVkOntsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbD90aGlzLm1vZGVsLmxlbmd0aDowfSxpc0xvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2FkaW5nfHx0aGlzLnNoYWRvdy53YXRjaGVkJiZ0aGlzLnNoYWRvdy5sb2FkaW5nfSxjb21wdXRlZEFkZEljb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZGRJY29ufHx0aGlzLiRxLmljb24uY2hpcHNJbnB1dC5hZGR9LGNvbXB1dGVkQ2hpcFRleHRDb2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaXBzQ29sb3I/dGhpcy5jaGlwc0NvbG9yOnRoaXMuaXNJbnZlcnRlZExpZ2h0P3RoaXMuaW52ZXJ0ZWRMaWdodD90aGlzLmNvbG9yOlwid2hpdGVcIjp0aGlzLmlzSW52ZXJ0ZWQ/dGhpcy5pbnZlcnRlZExpZ2h0P1wiZ3JleS0xMFwiOnRoaXMuY29sb3I6dGhpcy5kYXJrP3RoaXMuY29sb3I6XCJ3aGl0ZVwifSxjb21wdXRlZENoaXBCZ0NvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpcHNCZ0NvbG9yP3RoaXMuY2hpcHNCZ0NvbG9yOnRoaXMuaXNJbnZlcnRlZExpZ2h0P3RoaXMuaW52ZXJ0ZWRMaWdodD9cImdyZXktMTBcIjp0aGlzLmNvbG9yOnRoaXMuaXNJbnZlcnRlZD90aGlzLmludmVydGVkTGlnaHQ/dGhpcy5jb2xvcjpcIndoaXRlXCI6dGhpcy5kYXJrP1wid2hpdGVcIjp0aGlzLmNvbG9yfSxpbnB1dENsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5hbGlnbkNsYXNzXTtyZXR1cm4gdGhpcy51cHBlckNhc2UmJnQucHVzaChcInVwcGVyY2FzZVwiKSx0aGlzLmxvd2VyQ2FzZSYmdC5wdXNoKFwibG93ZXJjYXNlXCIpLHR9LGlzQ2xlYXJhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdGFibGUmJnRoaXMuY2xlYXJhYmxlJiYwIT09dGhpcy5tb2RlbC5sZW5ndGh9fSxtZXRob2RzOnthZGQ6ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCYmKHQ9dGhpcy5pbnB1dCksY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZm9jdXMoKSwhdGhpcy5pc0xvYWRpbmcmJnRoaXMuZWRpdGFibGUmJnQpe3ZhciBlPXRoaXMubG93ZXJDYXNlP3QudG9Mb3dlckNhc2UoKTp0aGlzLnVwcGVyQ2FzZT90LnRvVXBwZXJDYXNlKCk6dDt0aGlzLm1vZGVsLmluY2x1ZGVzKGUpP3RoaXMuJGVtaXQoXCJkdXBsaWNhdGVcIixlKToodGhpcy4kZW1pdChcImFkZFwiLHtpbmRleDp0aGlzLm1vZGVsLmxlbmd0aCx2YWw6ZX0pLHRoaXMubW9kZWwucHVzaChlKSx0aGlzLiRlbWl0KFwiaW5wdXRcIix0aGlzLm1vZGVsKSx0aGlzLmlucHV0PVwiXCIpfX0scmVtb3ZlOmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmZvY3VzKCksdGhpcy5lZGl0YWJsZSYmdD49MCYmdDx0aGlzLmxlbmd0aCYmKHRoaXMuJGVtaXQoXCJyZW1vdmVcIix7aW5kZXg6dCx2YWx1ZTp0aGlzLm1vZGVsLnNwbGljZSh0LDEpfSksdGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5tb2RlbCkpfSxjbGVhcjpmdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdCYmc3RvcEFuZFByZXZlbnQodCksdGhpcy5lZGl0YWJsZSYmKHRoaXMuJGVtaXQoXCJpbnB1dFwiLFtdKSx0aGlzLiRlbWl0KFwiY2xlYXJcIikpfSxfX2NsZWFyVGltZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dCh0LnRpbWVyKX0pfSxfX2hhbmRsZUtleURvd246ZnVuY3Rpb24odCl7c3dpdGNoKGdldEV2ZW50S2V5KHQpKXtjYXNlIDEzOmlmKHRoaXMuc2hhZG93LnNlbGVjdGlvbk9wZW4pcmV0dXJuO3JldHVybiBzdG9wQW5kUHJldmVudCh0KSx0aGlzLmFkZCgpO2Nhc2UgODpyZXR1cm4gdm9pZCghdGhpcy5pbnB1dC5sZW5ndGgmJnRoaXMubGVuZ3RoJiZ0aGlzLnJlbW92ZSh0aGlzLmxlbmd0aC0xKSk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5fX29uS2V5ZG93bih0KX19LF9fb25DbGljazpmdW5jdGlvbigpe3RoaXMuZm9jdXMoKX0sX193YXRjaGVyOmZ1bmN0aW9uKHQpe3RoaXMuc2hhZG93LndhdGNoZWQmJih0aGlzLnNoYWRvdy52YWw9dCl9LF9fd2F0Y2hlclJlZ2lzdGVyOmZ1bmN0aW9uKCl7dGhpcy53YXRjaGVyfHwodGhpcy53YXRjaGVyPXRoaXMuJHdhdGNoKFwiaW5wdXRcIix0aGlzLl9fd2F0Y2hlcikpfSxfX3dhdGNoZXJVbnJlZ2lzdGVyOmZ1bmN0aW9uKHQpeyF0aGlzLndhdGNoZXJ8fCF0JiZ0aGlzLnNoYWRvdy53YXRjaGVkfHwodGhpcy53YXRjaGVyKCksdGhpcy53YXRjaGVyPW51bGwsdGhpcy5zaGFkb3cuc2VsZWN0aW9uT3Blbj0hMSl9fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX3dhdGNoZXJVbnJlZ2lzdGVyKCEwKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoUUlucHV0RnJhbWUse3N0YXRpY0NsYXNzOlwicS1jaGlwcy1pbnB1dFwiLHByb3BzOntwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcsZGlzYWJsZTp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxpbnZlcnRlZDp0aGlzLmludmVydGVkLGludmVydGVkTGlnaHQ6dGhpcy5pbnZlcnRlZExpZ2h0LGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6dGhpcy5oaWRlVW5kZXJsaW5lLGJlZm9yZTp0aGlzLmJlZm9yZSxhZnRlcjp0aGlzLmFmdGVyLGNvbG9yOnRoaXMuY29sb3Isbm9QYXJlbnRGaWVsZDp0aGlzLm5vUGFyZW50RmllbGQsZm9jdXNlZDp0aGlzLmZvY3VzZWQsbGVuZ3RoOnRoaXMubGVuZ3RoLGFkZGl0aW9uYWxMZW5ndGg6dGhpcy5pbnB1dC5sZW5ndGg+MH0sb246e2NsaWNrOnRoaXMuX19vbkNsaWNrfX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcm93IGl0ZW1zLWNlbnRlciBxLWlucHV0LWNoaXBzXCJ9LHRoaXMubW9kZWwubWFwKGZ1bmN0aW9uKGkscyl7cmV0dXJuIHQoUUNoaXAse2tleTppK1wiI1wiK3MscHJvcHM6e3NtYWxsOiEwLGNsb3NhYmxlOmUuZWRpdGFibGUsY29sb3I6ZS5jb21wdXRlZENoaXBCZ0NvbG9yLHRleHRDb2xvcjplLmNvbXB1dGVkQ2hpcFRleHRDb2xvcn0sYXR0cnM6e3RhYmluZGV4OmUuZWRpdGFibGUmJmUuZm9jdXNlZD8wOi0xfSxvbjp7Ymx1cjplLl9fb25JbnB1dEJsdXIsZm9jdXM6ZS5fX2NsZWFyVGltZXIsaGlkZTpmdW5jdGlvbigpe2UucmVtb3ZlKHMpfX0sbmF0aXZlT246e2JsdXI6ZS5fX29uSW5wdXRCbHVyLGZvY3VzOmUuX19jbGVhclRpbWVyfX0saSl9KS5jb25jYXQoW3QoXCJpbnB1dFwiLHtyZWY6XCJpbnB1dFwiLHN0YXRpY0NsYXNzOlwiY29sIHEtaW5wdXQtdGFyZ2V0XCIsY2xhc3M6dGhpcy5pbnB1dENsYXNzZXMsZG9tUHJvcHM6e3ZhbHVlOnRoaXMuaW5wdXR9LGF0dHJzOk9iamVjdC5hc3NpZ24oe30sdGhpcy4kYXR0cnMse3BsYWNlaG9sZGVyOnRoaXMuaW5wdXRQbGFjZWhvbGRlcixkaXNhYmxlZDp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seX0pLG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLmlucHV0PXQudGFyZ2V0LnZhbHVlfSxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbklucHV0Qmx1cixrZXlkb3duOnRoaXMuX19oYW5kbGVLZXlEb3duLGtleXVwOnRoaXMuX19vbktleXVwfX0pXSkpLHRoaXMuaXNMb2FkaW5nP3RoaXMuJHNsb3RzLmxvYWRpbmc/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHNsb3Q6XCJhZnRlclwifSx0aGlzLiRzbG90cy5sb2FkaW5nKTp0KFFTcGlubmVyLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntzaXplOlwiMjRweFwifX0pOnRoaXMuZWRpdGFibGUmJnQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIsY2xhc3M6e2ludmlzaWJsZTowPT09dGhpcy5pbnB1dC5sZW5ndGh9LHByb3BzOntuYW1lOnRoaXMuY29tcHV0ZWRBZGRJY29ufSxuYXRpdmVPbjp7bW91c2Vkb3duOnRoaXMuX19jbGVhclRpbWVyLHRvdWNoc3RhcnQ6dGhpcy5fX2NsZWFyVGltZXIsY2xpY2s6ZnVuY3Rpb24oKXtlLmFkZCgpfX19KXx8dm9pZCAwLHRoaXMuaXNDbGVhcmFibGUmJnQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0W1wiY2xlYXJcIisodGhpcy5pc0ludmVydGVkP1wiSW52ZXJ0ZWRcIjpcIlwiKV19LG5hdGl2ZU9uOnttb3VzZWRvd246dGhpcy5fX2NsZWFyVGltZXIsdG91Y2hzdGFydDp0aGlzLl9fY2xlYXJUaW1lcixjbGljazp0aGlzLmNsZWFyfX0pfHx2b2lkIDBdLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0P3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhYnNvbHV0ZS1mdWxsIG5vLXBvaW50ZXItZXZlbnRzXCIsc2xvdDpcImFmdGVyXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpOnZvaWQgMCkpfX0sUUl0ZW1UaWxlPXtuYW1lOlwiUUl0ZW1UaWxlXCIscHJvcHM6e2ljb246U3RyaW5nLGxldHRlcjpCb29sZWFuLGludmVydGVkOkJvb2xlYW4saW1hZ2U6Qm9vbGVhbixhdmF0YXI6Qm9vbGVhbixzdGFtcDpCb29sZWFuLGxhYmVsOkJvb2xlYW4sc3VibGFiZWw6Qm9vbGVhbixsaW5lczpbTnVtYmVyLFN0cmluZ10sdGFnOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZGl2XCJ9LGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nfSxjb21wdXRlZDp7aGFzTGluZXM6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5sYWJlbHx8dGhpcy5zdWJsYWJlbCkmJnRoaXMubGluZXN9LHR5cGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybltcImljb25cIixcImxhYmVsXCIsXCJzdWJsYWJlbFwiLFwiaW1hZ2VcIixcImF2YXRhclwiLFwibGV0dGVyXCIsXCJzdGFtcFwiXS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5jb2xvciYmKHRoaXMuaW52ZXJ0ZWQ/dC5wdXNoKFwiYmctXCIrdGhpcy5jb2xvcik6dGhpcy50ZXh0Q29sb3J8fHQucHVzaChcInRleHQtXCIrdGhpcy5jb2xvcikpLHRoaXMudGV4dENvbG9yJiZ0LnB1c2goXCJ0ZXh0LVwiK3RoaXMudGV4dENvbG9yKSx0aGlzLnR5cGUmJnQucHVzaChcInEtaXRlbS1cIit0aGlzLnR5cGUpLHRoaXMuaW52ZXJ0ZWQmJih0aGlzLmljb258fHRoaXMubGV0dGVyKSYmKHQucHVzaChcInEtaXRlbS1pbnZlcnRlZFwiKSx0LnB1c2goXCJmbGV4XCIpLHQucHVzaChcImZsZXgtY2VudGVyXCIpKSwhdGhpcy5oYXNMaW5lc3x8XCIxXCIhPT10aGlzLmxpbmVzJiYxIT09dGhpcy5saW5lc3x8dC5wdXNoKFwiZWxsaXBzaXNcIiksdH0sc3R5bGU6ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0xpbmVzKXJldHVybiB0ZXh0U3R5bGUodGhpcy5saW5lcyl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9e2NsYXNzOnRoaXMuY2xhc3NlcyxzdHlsZTp0aGlzLnN0eWxlfTtpZih0aGlzLmljb24pe2lmKHRoaXMuaW52ZXJ0ZWQpcmV0dXJuIHQodGhpcy50YWcsZSxbdChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy5pY29ufX0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKTtlLnByb3BzPXtuYW1lOnRoaXMuaWNvbn19cmV0dXJuIHQodGhpcy5pY29uP1FJY29uOnRoaXMudGFnLGUsdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRU2xpZGVUcmFuc2l0aW9uPXtuYW1lOlwiUVNsaWRlVHJhbnNpdGlvblwiLHByb3BzOnthcHBlYXI6Qm9vbGVhbixkdXJhdGlvbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDozMDB9fSxtZXRob2RzOntfX2JlZ2luOmZ1bmN0aW9uKHQsZSxpKXt0LnN0eWxlLm92ZXJmbG93WT1cImhpZGRlblwiLHZvaWQgMCE9PWUmJih0LnN0eWxlLmhlaWdodD1lK1wicHhcIiksdC5zdHlsZS50cmFuc2l0aW9uPVwiaGVpZ2h0IFwiK3RoaXMuZHVyYXRpb24rXCJtcyBjdWJpYy1iZXppZXIoLjI1LCAuOCwgLjUwLCAxKVwiLHRoaXMuYW5pbWF0aW5nPSEwLHRoaXMuZG9uZT1pfSxfX2VuZDpmdW5jdGlvbih0LGUpe3Quc3R5bGUub3ZlcmZsb3dZPW51bGwsdC5zdHlsZS5oZWlnaHQ9bnVsbCx0LnN0eWxlLnRyYW5zaXRpb249bnVsbCx0aGlzLl9fY2xlYW51cCgpLGUhPT10aGlzLmxhc3RFdmVudCYmdGhpcy4kZW1pdChlKX0sX19jbGVhbnVwOmZ1bmN0aW9uKCl7dGhpcy5kb25lJiZ0aGlzLmRvbmUoKSx0aGlzLmRvbmU9bnVsbCx0aGlzLmFuaW1hdGluZz0hMSxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLHRoaXMuYW5pbUxpc3RlbmVyKSx0aGlzLmFuaW1MaXN0ZW5lcj1udWxsfX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW5nJiZ0aGlzLl9fY2xlYW51cCgpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcInRyYW5zaXRpb25cIix7cHJvcHM6e2NzczohMSxhcHBlYXI6dGhpcy5hcHBlYXJ9LG9uOntlbnRlcjpmdW5jdGlvbih0LGkpe3ZhciBzPTA7ZS5lbD10LCEwPT09ZS5hbmltYXRpbmc/KGUuX19jbGVhbnVwKCkscz10Lm9mZnNldEhlaWdodD09PXQuc2Nyb2xsSGVpZ2h0PzA6dm9pZCAwKTplLmxhc3RFdmVudD1cImhpZGVcIixlLl9fYmVnaW4odCxzLGkpLGUudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3Quc3R5bGUuaGVpZ2h0PXQuc2Nyb2xsSGVpZ2h0K1wicHhcIixlLmFuaW1MaXN0ZW5lcj1mdW5jdGlvbigpe2UuX19lbmQodCxcInNob3dcIil9LHQuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIixlLmFuaW1MaXN0ZW5lcil9LDEwMCl9LGxlYXZlOmZ1bmN0aW9uKHQsaSl7dmFyIHM7ZS5lbD10LCEwPT09ZS5hbmltYXRpbmc/ZS5fX2NsZWFudXAoKTooZS5sYXN0RXZlbnQ9XCJzaG93XCIscz10LnNjcm9sbEhlaWdodCksZS5fX2JlZ2luKHQscyxpKSxlLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnN0eWxlLmhlaWdodD0wLGUuYW5pbUxpc3RlbmVyPWZ1bmN0aW9uKCl7ZS5fX2VuZCh0LFwiaGlkZVwiKX0sdC5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLGUuYW5pbUxpc3RlbmVyKX0sMTAwKX19fSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LGV2ZW50TmFtZT1cInE6Y29sbGFwc2libGU6Y2xvc2VcIixRQ29sbGFwc2libGU9e25hbWU6XCJRQ29sbGFwc2libGVcIixtaXhpbnM6W01vZGVsVG9nZ2xlTWl4aW4sSXRlbU1peGluLHtwcm9wczpzdWJJdGVtUHJvcHN9XSxtb2RlbFRvZ2dsZTp7aGlzdG9yeTohMX0scHJvcHM6e2Rpc2FibGU6Qm9vbGVhbixwb3B1cDpCb29sZWFuLGluZGVudDpCb29sZWFuLGdyb3VwOlN0cmluZyxpY29uVG9nZ2xlOkJvb2xlYW4sY29sbGFwc2VJY29uOlN0cmluZyxvcGVuZWQ6Qm9vbGVhbixkdXJhdGlvbjpOdW1iZXIsaGVhZGVyU3R5bGU6W0FycmF5LFN0cmluZyxPYmplY3RdLGhlYWRlckNsYXNzOltBcnJheSxTdHJpbmcsT2JqZWN0XX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJxLWNvbGxhcHNpYmxlLW9wZW5lZFwiOnRoaXMuc2hvd2luZyxcInEtY29sbGFwc2libGUtY2xvc2VkXCI6IXRoaXMuc2hvd2luZyxcInEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkXCI6dGhpcy5wb3B1cCYmdGhpcy5zaG93aW5nLFwicS1jb2xsYXBzaWJsZS1wb3B1cC1jbG9zZWRcIjp0aGlzLnBvcHVwJiYhdGhpcy5zaG93aW5nLFwicS1jb2xsYXBzaWJsZS1jdXJzb3ItcG9pbnRlclwiOiF0aGlzLnNlcGFyYXRlVG9nZ2xlLFwicS1pdGVtLWRhcmtcIjp0aGlzLmRhcmssXCJxLWl0ZW0tc2VwYXJhdG9yXCI6dGhpcy5zZXBhcmF0b3IsXCJxLWl0ZW0taW5zZXQtc2VwYXJhdG9yXCI6dGhpcy5pbnNldFNlcGFyYXRvcixkaXNhYmxlZDp0aGlzLmRpc2FibGV9fSxzZXBhcmF0ZVRvZ2dsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmljb25Ub2dnbGV8fHZvaWQgMCE9PXRoaXMudG99fSx3YXRjaDp7c2hvd2luZzpmdW5jdGlvbih0KXt0JiZ0aGlzLmdyb3VwJiZ0aGlzLiRyb290LiRlbWl0KGV2ZW50TmFtZSx0aGlzKX19LG1ldGhvZHM6e19fdG9nZ2xlSXRlbTpmdW5jdGlvbigpe3RoaXMuc2VwYXJhdGVUb2dnbGV8fHRoaXMudG9nZ2xlKCl9LF9fdG9nZ2xlSWNvbjpmdW5jdGlvbih0KXt0aGlzLnNlcGFyYXRlVG9nZ2xlJiYodCYmc3RvcEFuZFByZXZlbnQodCksdGhpcy50b2dnbGUoKSl9LF9fZXZlbnRIYW5kbGVyOmZ1bmN0aW9uKHQpe3RoaXMuZ3JvdXAmJnRoaXMhPT10JiZ0Lmdyb3VwPT09dGhpcy5ncm91cCYmdGhpcy5oaWRlKCl9LF9fZ2V0VG9nZ2xlU2lkZTpmdW5jdGlvbih0LGUpe3JldHVyblt0KFFJdGVtVGlsZSx7c2xvdDplP1wicmlnaHRcIjp2b2lkIDAsc3RhdGljQ2xhc3M6XCJjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWdlbmVyaWMgcmVsYXRpdmUtcG9zaXRpb24gcS1jb2xsYXBzaWJsZS10b2dnbGUtaWNvblwiLGNsYXNzOntcInJvdGF0ZS0xODBcIjp0aGlzLnNob3dpbmcsaW52aXNpYmxlOnRoaXMuZGlzYWJsZX0sbmF0aXZlT246e2NsaWNrOnRoaXMuX190b2dnbGVJY29ufSxwcm9wczp7aWNvbjp0aGlzLmNvbGxhcHNlSWNvbnx8dGhpcy4kcS5pY29uLmNvbGxhcHNpYmxlLmljb259fSldfSxfX2dldEl0ZW1Qcm9wczpmdW5jdGlvbih0KXtyZXR1cm57cHJvcHM6dD97Y2ZnOnRoaXMuJHByb3BzfTp0aGlzLiRwcm9wcyxzdHlsZTp0aGlzLmhlYWRlclN0eWxlLGNsYXNzOnRoaXMuaGVhZGVyQ2xhc3MsbmF0aXZlT246e2NsaWNrOnRoaXMuX190b2dnbGVJdGVtfX19fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy4kcm9vdC4kb24oZXZlbnROYW1lLHRoaXMuX19ldmVudEhhbmRsZXIpLCh0aGlzLm9wZW5lZHx8dGhpcy52YWx1ZSkmJnRoaXMuc2hvdygpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy4kcm9vdC4kb2ZmKGV2ZW50TmFtZSx0aGlzLl9fZXZlbnRIYW5kbGVyKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KHRoaXMudGFnLHtzdGF0aWNDbGFzczpcInEtY29sbGFwc2libGUgcS1pdGVtLWRpdmlzaW9uIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sbGFwc2libGUtaW5uZXJcIn0sW3RoaXMuJHNsb3RzLmhlYWRlcj90KFFJdGVtLHRoaXMuX19nZXRJdGVtUHJvcHMoKSxbdGhpcy4kc2xvdHMuaGVhZGVyLHQoUUl0ZW1TaWRlLHtwcm9wczp7cmlnaHQ6ITB9LHN0YXRpY0NsYXNzOlwicmVsYXRpdmUtcG9zaXRpb25cIn0sdGhpcy5fX2dldFRvZ2dsZVNpZGUodCkpXSk6dChRSXRlbVdyYXBwZXIsdGhpcy5fX2dldEl0ZW1Qcm9wcyghMCksdGhpcy5fX2dldFRvZ2dsZVNpZGUodCwhMCkpLHQoUVNsaWRlVHJhbnNpdGlvbix7cHJvcHM6e2R1cmF0aW9uOnRoaXMuZHVyYXRpb259fSxbdChcImRpdlwiLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTp0aGlzLnNob3dpbmd9XX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbGxhcHNpYmxlLXN1Yi1pdGVtIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6e2luZGVudDp0aGlzLmluZGVudH19LHRoaXMuJHNsb3RzLmRlZmF1bHQpXSldKV0pXSl9fSxEaXNwbGF5TW9kZU1peGluPXtwcm9wczp7cG9wb3ZlcjpCb29sZWFuLG1vZGFsOkJvb2xlYW59LGNvbXB1dGVkOntpc1BvcG92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMucG9wb3Zlcnx8IXRoaXMubW9kYWwmJih0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3AmJiF0aGlzLiRxLnBsYXRmb3JtLndpdGhpbi5pZnJhbWUpfX19O2Z1bmN0aW9uIGdldFBlcmNlbnRhZ2UodCxlLGkpe3ZhciBzPWJldHdlZW4oKHBvc2l0aW9uKHQpLmxlZnQtZS5sZWZ0KS9lLndpZHRoLDAsMSk7cmV0dXJuIGk/MS1zOnN9ZnVuY3Rpb24gbm90RGl2aWRlcyh0LGUpe3ZhciBpPWU/cGFyc2VGbG9hdCh0LnRvRml4ZWQoZSkpOnQ7cmV0dXJuIGkhPT1wYXJzZUludChpLDEwKX1mdW5jdGlvbiBnZXRNb2RlbCh0LGUsaSxzLG4pe3ZhciBvPWUrdCooaS1lKSxyPShvLWUpJXM7cmV0dXJuIG8rPShNYXRoLmFicyhyKT49cy8yPyhyPDA/LTE6MSkqczowKS1yLG4mJihvPXBhcnNlRmxvYXQoby50b0ZpeGVkKG4pKSksYmV0d2VlbihvLGUsaSl9dmFyIFNsaWRlck1peGluPXtkaXJlY3RpdmVzOntUb3VjaFBhbjpUb3VjaFBhbn0scHJvcHM6e21pbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxtYXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NX0sc3RlcDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxkZWNpbWFsczpOdW1iZXIsc25hcDpCb29sZWFuLG1hcmtlcnM6Qm9vbGVhbixsYWJlbDpCb29sZWFuLGxhYmVsQWx3YXlzOkJvb2xlYW4sc3F1YXJlOkJvb2xlYW4sY29sb3I6U3RyaW5nLGZpbGxIYW5kbGVBbHdheXM6Qm9vbGVhbixlcnJvcjpCb29sZWFuLHdhcm5pbmc6Qm9vbGVhbixyZWFkb25seTpCb29sZWFuLGRpc2FibGU6Qm9vbGVhbn0sY29tcHV0ZWQ6e2VkaXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZGlzYWJsZSYmIXRoaXMucmVhZG9ubHl9LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD17ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlLHJlYWRvbmx5OnRoaXMucmVhZG9ubHksXCJsYWJlbC1hbHdheXNcIjp0aGlzLmxhYmVsQWx3YXlzLFwiaGFzLWVycm9yXCI6dGhpcy5lcnJvcixcImhhcy13YXJuaW5nXCI6dGhpcy53YXJuaW5nfTtyZXR1cm4gdGhpcy5lcnJvcnx8dGhpcy53YXJuaW5nfHwhdGhpcy5jb2xvcnx8KHRbXCJ0ZXh0LVwiK3RoaXMuY29sb3JdPSEwKSx0fSxtYXJrZXJzTGVuOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMubWF4LXRoaXMubWluKS90aGlzLnN0ZXArMX0sbGFiZWxDb2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yP1wibmVnYXRpdmVcIjp0aGlzLndhcm5pbmc/XCJ3YXJuaW5nXCI6dGhpcy5jb2xvcnx8XCJwcmltYXJ5XCJ9LGNvbXB1dGVkRGVjaW1hbHM6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5kZWNpbWFscz90aGlzLmRlY2ltYWxzfHwwOihTdHJpbmcodGhpcy5zdGVwKS50cmltKFwiMFwiKS5zcGxpdChcIi5cIilbMV18fFwiXCIpLmxlbmd0aH0sY29tcHV0ZWRTdGVwOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZGVjaW1hbHM/MS9NYXRoLnBvdygxMCx0aGlzLmRlY2ltYWxzfHwwKTp0aGlzLnN0ZXB9fSxtZXRob2RzOntfX3BhbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuaXNGaW5hbD90aGlzLmRyYWdnaW5nJiYodGhpcy5kcmFnVGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2UuZHJhZ2dpbmc9ITF9LDEwMCksdGhpcy5fX2VuZCh0LmV2dCksdGhpcy5fX3VwZGF0ZSghMCkpOnQuaXNGaXJzdD8oY2xlYXJUaW1lb3V0KHRoaXMuZHJhZ1RpbWVyKSx0aGlzLmRyYWdnaW5nPXRoaXMuX19nZXREcmFnZ2luZyh0LmV2dCkpOnRoaXMuZHJhZ2dpbmcmJih0aGlzLl9fbW92ZSh0LmV2dCksdGhpcy5fX3VwZGF0ZSgpKX0sX191cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpJiYodGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5tb2RlbCksdCYmdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeShlLm1vZGVsKSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsZS5tb2RlbCl9KSl9LF9fY2xpY2s6ZnVuY3Rpb24odCl7aWYoIXRoaXMuZHJhZ2dpbmcpe3ZhciBlPXRoaXMuX19nZXREcmFnZ2luZyh0KTtlJiYodGhpcy5fX2VuZCh0LGUpLHRoaXMuX191cGRhdGUoITApKX19LF9fZ2V0TWFya2VyczpmdW5jdGlvbih0KXtpZih0aGlzLm1hcmtlcnMpe2Zvcih2YXIgZT1bXSxpPTA7aTx0aGlzLm1hcmtlcnNMZW47aSsrKWUucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItbWFya1wiLGtleTpcIm1hcmtlclwiK2ksc3R5bGU6e2xlZnQ6MTAwKmkqdGhpcy5zdGVwLyh0aGlzLm1heC10aGlzLm1pbikrXCIlXCJ9fSkpO3JldHVybiBlfX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fdmFsaWRhdGVQcm9wcygpfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlciBub24tc2VsZWN0YWJsZVwiLGNsYXNzOnRoaXMuY2xhc3Nlcyxvbjp0aGlzLmVkaXRhYmxlP3tjbGljazp0aGlzLl9fY2xpY2t9Om51bGwsZGlyZWN0aXZlczp0aGlzLmVkaXRhYmxlP1t7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7aG9yaXpvbnRhbDohMCxwcmV2ZW50OiEwLHN0b3A6ITB9LHZhbHVlOnRoaXMuX19wYW59XTpudWxsfSxbdChcImRpdlwiLHtyZWY6XCJoYW5kbGVcIixzdGF0aWNDbGFzczpcInEtc2xpZGVyLWhhbmRsZS1jb250YWluZXJcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci10cmFja1wifSksdGhpcy5fX2dldE1hcmtlcnModCldLmNvbmNhdCh0aGlzLl9fZ2V0Q29udGVudCh0KSkpXSl9fSxRU2xpZGVyPXtuYW1lOlwiUVNsaWRlclwiLG1peGluczpbU2xpZGVyTWl4aW5dLHByb3BzOnt2YWx1ZTpOdW1iZXIsbGFiZWxWYWx1ZTpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9kZWw6dGhpcy52YWx1ZSxkcmFnZ2luZzohMSxjdXJyZW50UGVyY2VudGFnZToodGhpcy52YWx1ZS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX19LGNvbXB1dGVkOntwZXJjZW50YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcD8odGhpcy5tb2RlbC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSoxMDArXCIlXCI6MTAwKnRoaXMuY3VycmVudFBlcmNlbnRhZ2UrXCIlXCJ9LGRpc3BsYXlWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmxhYmVsVmFsdWU/dGhpcy5sYWJlbFZhbHVlOnRoaXMubW9kZWx9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5kcmFnZ2luZ3x8KHQ8dGhpcy5taW4/dGhpcy5tb2RlbD10aGlzLm1pbjp0PnRoaXMubWF4P3RoaXMubW9kZWw9dGhpcy5tYXg6dGhpcy5tb2RlbD10LHRoaXMuY3VycmVudFBlcmNlbnRhZ2U9KHRoaXMubW9kZWwtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikpfSxtaW46ZnVuY3Rpb24odCl7dGhpcy5tb2RlbDx0P3RoaXMubW9kZWw9dDp0aGlzLiRuZXh0VGljayh0aGlzLl9fdmFsaWRhdGVQcm9wcyl9LG1heDpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPnQ/dGhpcy5tb2RlbD10OnRoaXMuJG5leHRUaWNrKHRoaXMuX192YWxpZGF0ZVByb3BzKX0sc3RlcDpmdW5jdGlvbigpe3RoaXMuJG5leHRUaWNrKHRoaXMuX192YWxpZGF0ZVByb3BzKX19LG1ldGhvZHM6e19fZ2V0RHJhZ2dpbmc6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy4kcmVmcy5oYW5kbGU7cmV0dXJue2xlZnQ6ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LHdpZHRoOmUub2Zmc2V0V2lkdGh9fSxfX21vdmU6ZnVuY3Rpb24odCl7dmFyIGU9Z2V0UGVyY2VudGFnZSh0LHRoaXMuZHJhZ2dpbmcsdGhpcy4kcS5pMThuLnJ0bCk7dGhpcy5jdXJyZW50UGVyY2VudGFnZT1lLHRoaXMubW9kZWw9Z2V0TW9kZWwoZSx0aGlzLm1pbix0aGlzLm1heCx0aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKX0sX19lbmQ6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT10aGlzLmRyYWdnaW5nKTt2YXIgaT1nZXRQZXJjZW50YWdlKHQsZSx0aGlzLiRxLmkxOG4ucnRsKTt0aGlzLm1vZGVsPWdldE1vZGVsKGksdGhpcy5taW4sdGhpcy5tYXgsdGhpcy5zdGVwLHRoaXMuY29tcHV0ZWREZWNpbWFscyksdGhpcy5jdXJyZW50UGVyY2VudGFnZT0odGhpcy5tb2RlbC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX0sX19vbktleURvd246ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXlDb2RlO2lmKHRoaXMuZWRpdGFibGUmJlszNyw0MCwzOSwzOF0uaW5jbHVkZXMoZSkpe3N0b3BBbmRQcmV2ZW50KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWREZWNpbWFscyxzPXQuY3RybEtleT8xMCp0aGlzLmNvbXB1dGVkU3RlcDp0aGlzLmNvbXB1dGVkU3RlcCxuPVszNyw0MF0uaW5jbHVkZXMoZSk/LXM6cyxvPWk/cGFyc2VGbG9hdCgodGhpcy5tb2RlbCtuKS50b0ZpeGVkKGkpKTp0aGlzLm1vZGVsK247dGhpcy5tb2RlbD1iZXR3ZWVuKG8sdGhpcy5taW4sdGhpcy5tYXgpLHRoaXMuY3VycmVudFBlcmNlbnRhZ2U9KHRoaXMubW9kZWwtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbiksdGhpcy5fX3VwZGF0ZSgpfX0sX19vbktleVVwOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZTt0aGlzLmVkaXRhYmxlJiZbMzcsNDAsMzksMzhdLmluY2x1ZGVzKGUpJiZ0aGlzLl9fdXBkYXRlKCEwKX0sX192YWxpZGF0ZVByb3BzOmZ1bmN0aW9uKCl7dGhpcy5taW4+PXRoaXMubWF4P2NvbnNvbGUuZXJyb3IoXCJSYW5nZSBlcnJvcjogbWluID49IG1heFwiLHRoaXMuJGVsLHRoaXMubWluLHRoaXMubWF4KTpub3REaXZpZGVzKCh0aGlzLm1heC10aGlzLm1pbikvdGhpcy5zdGVwLHRoaXMuY29tcHV0ZWREZWNpbWFscykmJmNvbnNvbGUuZXJyb3IoXCJSYW5nZSBlcnJvcjogc3RlcCBtdXN0IGJlIGEgZGl2aXNvciBvZiBtYXggLSBtaW5cIix0aGlzLm1pbix0aGlzLm1heCx0aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKX0sX19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVyblt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItdHJhY2sgYWN0aXZlLXRyYWNrXCIsc3R5bGU6e3dpZHRoOnRoaXMucGVyY2VudGFnZX0sY2xhc3M6e1wibm8tdHJhbnNpdGlvblwiOnRoaXMuZHJhZ2dpbmcsXCJoYW5kbGUtYXQtbWluaW11bVwiOnRoaXMubW9kZWw9PT10aGlzLm1pbn19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItaGFuZGxlXCIsc3R5bGU6KGU9e30sZVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09dGhpcy5wZXJjZW50YWdlLGUuYm9yZGVyUmFkaXVzPXRoaXMuc3F1YXJlP1wiMFwiOlwiNTAlXCIsZSksY2xhc3M6e2RyYWdnaW5nOnRoaXMuZHJhZ2dpbmcsXCJoYW5kbGUtYXQtbWluaW11bVwiOiF0aGlzLmZpbGxIYW5kbGVBbHdheXMmJnRoaXMubW9kZWw9PT10aGlzLm1pbn0sYXR0cnM6e3RhYmluZGV4OnRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcD90aGlzLmVkaXRhYmxlPzA6LTE6dm9pZCAwfSxvbjp7a2V5ZG93bjp0aGlzLl9fb25LZXlEb3duLGtleXVwOnRoaXMuX19vbktleVVwfX0sW3RoaXMubGFiZWx8fHRoaXMubGFiZWxBbHdheXM/dChRQ2hpcCx7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci1sYWJlbCBuby1wb2ludGVyLWV2ZW50c1wiLGNsYXNzOntcImxhYmVsLWFsd2F5c1wiOnRoaXMubGFiZWxBbHdheXN9LHByb3BzOntwb2ludGluZzpcImRvd25cIixzcXVhcmU6ITAsZGVuc2U6ITAsY29sb3I6dGhpcy5sYWJlbENvbG9yfX0sW3RoaXMuZGlzcGxheVZhbHVlXSk6bnVsbCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItcmluZ1wifSldKV19fX07ZnVuY3Rpb24gdGhyb3R0bGUodCxlKXt2b2lkIDA9PT1lJiYoZT0yNTApO3ZhciBpLHM9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtdLG89YXJndW1lbnRzLmxlbmd0aDtvLS07KW5bb109YXJndW1lbnRzW29dO3JldHVybiBzP2k6KHM9ITAsaT10LmFwcGx5KHRoaXMsbiksc2V0VGltZW91dChmdW5jdGlvbigpe3M9ITF9LGUpLGkpfX1mdW5jdGlvbiBjbG9uZSh0KXt2YXIgZT1KU09OLnN0cmluZ2lmeSh0KTtpZihlKXJldHVybiBKU09OLnBhcnNlKGUpfXZhciBRQ29sb3JQaWNrZXI9e25hbWU6XCJRQ29sb3JQaWNrZXJcIixtaXhpbnM6W1BhcmVudEZpZWxkTWl4aW5dLGRpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7dmFsdWU6W1N0cmluZyxPYmplY3RdLGRlZmF1bHRWYWx1ZTp7dHlwZTpbU3RyaW5nLE9iamVjdF0sZGVmYXVsdDpudWxsfSxmb3JtYXRNb2RlbDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImF1dG9cIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wiYXV0b1wiLFwiaGV4XCIsXCJyZ2JcIixcImhleGFcIixcInJnYmFcIl0uaW5jbHVkZXModCl9fSxkaXNhYmxlOkJvb2xlYW4scmVhZG9ubHk6Qm9vbGVhbixkYXJrOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dmlldzp0aGlzLnZhbHVlJiZcInN0cmluZ1wiIT10eXBlb2YgdGhpcy52YWx1ZT9cInJnYlwiOlwiaGV4XCIsbW9kZWw6dGhpcy5fX3BhcnNlTW9kZWwodGhpcy52YWx1ZXx8dGhpcy5kZWZhdWx0VmFsdWUpfX0sd2F0Y2g6e3ZhbHVlOntoYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19wYXJzZU1vZGVsKHR8fHRoaXMuZGVmYXVsdFZhbHVlKTtlLmhleCE9PXRoaXMubW9kZWwuaGV4JiYodGhpcy5tb2RlbD1lKX0sZGVlcDohMH19LGNvbXB1dGVkOntmb3JjZUhleDpmdW5jdGlvbigpe3JldHVyblwiYXV0b1wiPT09dGhpcy5mb3JtYXRNb2RlbD9udWxsOnRoaXMuZm9ybWF0TW9kZWwuaW5kZXhPZihcImhleFwiKT4tMX0sZm9yY2VBbHBoYTpmdW5jdGlvbigpe3JldHVyblwiYXV0b1wiPT09dGhpcy5mb3JtYXRNb2RlbD9udWxsOnRoaXMuZm9ybWF0TW9kZWwuaW5kZXhPZihcImFcIik+LTF9LGlzSGV4OmZ1bmN0aW9uKCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMudmFsdWV9LGlzT3V0cHV0SGV4OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmZvcmNlSGV4P3RoaXMuZm9yY2VIZXg6dGhpcy5pc0hleH0sZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiYhdGhpcy5yZWFkb25seX0saGFzQWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuZm9yY2VBbHBoYT90aGlzLmZvcmNlQWxwaGE6dGhpcy5pc0hleD90aGlzLnZhbHVlLnRyaW0oKS5sZW5ndGg+Nzp0aGlzLnZhbHVlJiZ2b2lkIDAhPT10aGlzLnZhbHVlLmF9LHN3YXRjaENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJue2JhY2tncm91bmRDb2xvcjpcInJnYmEoXCIrdGhpcy5tb2RlbC5yK1wiLFwiK3RoaXMubW9kZWwuZytcIixcIit0aGlzLm1vZGVsLmIrXCIsXCIrKHZvaWQgMD09PXRoaXMubW9kZWwuYT8xMDA6dGhpcy5tb2RlbC5hKS8xMDArXCIpXCJ9fSxzYXR1cmF0aW9uU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57YmFja2dyb3VuZDpcImhzbChcIit0aGlzLm1vZGVsLmgrXCIsMTAwJSw1MCUpXCJ9fSxzYXR1cmF0aW9uUG9pbnRlclN0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuKHQ9e3RvcDoxMDEtdGhpcy5tb2RlbC52K1wiJVwifSlbdGhpcy4kcS5pMThuLnJ0bD9cInJpZ2h0XCI6XCJsZWZ0XCJdPXRoaXMubW9kZWwucytcIiVcIix0fSxpbnB1dHNBcnJheTpmdW5jdGlvbigpe3ZhciB0PVtcInJcIixcImdcIixcImJcIl07cmV0dXJuIHRoaXMuaGFzQWxwaGEmJnQucHVzaChcImFcIiksdH0sX19uZWVkc0JvcmRlcjpmdW5jdGlvbigpe3JldHVybiEwfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX19zYXR1cmF0aW9uQ2hhbmdlPXRocm90dGxlKHRoaXMuX19zYXR1cmF0aW9uQ2hhbmdlLDIwKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvclwiLGNsYXNzOntkaXNhYmxlZDp0aGlzLmRpc2FibGUsXCJxLWNvbG9yLWRhcmtcIjp0aGlzLmRhcmt9fSxbdGhpcy5fX2dldFNhdHVyYXRpb24odCksdGhpcy5fX2dldFNsaWRlcnModCksdGhpcy5fX2dldElucHV0cyh0KV0pfSxtZXRob2RzOntfX2dldFNhdHVyYXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7cmVmOlwic2F0dXJhdGlvblwiLHN0YXRpY0NsYXNzOlwicS1jb2xvci1zYXR1cmF0aW9uIG5vbi1zZWxlY3RhYmxlIHJlbGF0aXZlLXBvc2l0aW9uIG92ZXJmbG93LWhpZGRlbiBjdXJzb3ItcG9pbnRlclwiLHN0eWxlOnRoaXMuc2F0dXJhdGlvblN0eWxlLGNsYXNzOntyZWFkb25seTohdGhpcy5lZGl0YWJsZX0sb246dGhpcy5lZGl0YWJsZT97Y2xpY2s6dGhpcy5fX3NhdHVyYXRpb25DbGlja306bnVsbCxkaXJlY3RpdmVzOnRoaXMuZWRpdGFibGU/W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOnttaWdodFByZXZlbnQ6ITB9LHZhbHVlOnRoaXMuX19zYXR1cmF0aW9uUGFufV06bnVsbH0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLXNhdHVyYXRpb24td2hpdGUgYWJzb2x1dGUtZnVsbFwifSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3Itc2F0dXJhdGlvbi1ibGFjayBhYnNvbHV0ZS1mdWxsXCJ9KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiYWJzb2x1dGVcIixzdHlsZTp0aGlzLnNhdHVyYXRpb25Qb2ludGVyU3R5bGV9LFt2b2lkIDAhPT10aGlzLm1vZGVsLmhleD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvci1zYXR1cmF0aW9uLWNpcmNsZVwifSk6bnVsbF0pXSl9LF9fZ2V0U2xpZGVyczpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvci1zbGlkZXJzIHJvdyBpdGVtcy1jZW50ZXJcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLXN3YXRjaCBxLW10LXNtIHEtbWwtbWQgcS1tYi1zbSBub24tc2VsZWN0YWJsZSBvdmVyZmxvdy1oaWRkZW5cIn0sW3QoXCJkaXZcIix7c3R5bGU6dGhpcy5zd2F0Y2hDb2xvcixzdGF0aWNDbGFzczpcImZpdFwifSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtcGEtc21cIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLWh1ZSBub24tc2VsZWN0YWJsZVwifSxbdChRU2xpZGVyLHtwcm9wczp7dmFsdWU6dGhpcy5tb2RlbC5oLGNvbG9yOlwid2hpdGVcIixtaW46MCxtYXg6MzYwLGZpbGxIYW5kbGVBbHdheXM6ITAscmVhZG9ubHk6IXRoaXMuZWRpdGFibGV9LG9uOntpbnB1dDp0aGlzLl9fb25IdWVDaGFuZ2UsZHJhZ2VuZDpmdW5jdGlvbih0KXtyZXR1cm4gZS5fX29uSHVlQ2hhbmdlKHQsITApfX19KV0pLHRoaXMuaGFzQWxwaGE/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3ItYWxwaGEgbm9uLXNlbGVjdGFibGVcIn0sW3QoUVNsaWRlcix7cHJvcHM6e3ZhbHVlOnRoaXMubW9kZWwuYSxjb2xvcjpcIndoaXRlXCIsbWluOjAsbWF4OjEwMCxmaWxsSGFuZGxlQWx3YXlzOiEwLHJlYWRvbmx5OiF0aGlzLmVkaXRhYmxlfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUuX19vbk51bWVyaWNDaGFuZ2Uoe3RhcmdldDp7dmFsdWU6dH19LFwiYVwiLDEwMCl9LGRyYWdlbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUuX19vbk51bWVyaWNDaGFuZ2Uoe3RhcmdldDp7dmFsdWU6dH19LFwiYVwiLDEwMCwhMCl9fX0pXSk6bnVsbF0pXSl9LF9fZ2V0TnVtZXJpY0lucHV0czpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmlucHV0c0FycmF5Lm1hcChmdW5jdGlvbihpKXt2YXIgcz1cImFcIj09PWk/MTAwOjI1NTtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCBxLWNvbG9yLXBhZGRpbmdcIn0sW3QoXCJpbnB1dFwiLHthdHRyczp7dHlwZTpcIm51bWJlclwiLG1pbjowLG1heDpzLHJlYWRvbmx5OiFlLmVkaXRhYmxlLHRhYmluZGV4OmUuZWRpdGFibGU/MDotMX0sc3RhdGljQ2xhc3M6XCJmdWxsLXdpZHRoIHRleHQtY2VudGVyIHEtbm8taW5wdXQtc3Bpbm5lclwiLGRvbVByb3BzOnt2YWx1ZTp2b2lkIDA9PT1lLm1vZGVsLmhleD9cIlwiOk1hdGgucm91bmQoZS5tb2RlbFtpXSl9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gZS5fX29uTnVtZXJpY0NoYW5nZSh0LGkscyl9LGJsdXI6ZnVuY3Rpb24odCl7cmV0dXJuIGUuZWRpdGFibGUmJmUuX19vbk51bWVyaWNDaGFuZ2UodCxpLHMsITApfX19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvci1sYWJlbCB0ZXh0LWNlbnRlciB1cHBlcmNhc2VcIn0sW2ldKV0pfSl9LF9fZ2V0SW5wdXRzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLWlucHV0cyByb3cgaXRlbXMtY2VudGVyIHEtcHgtc20gcS1wYi1zbVwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCBxLW1yLXNtIHJvdyBuby13cmFwXCJ9LFwiaGV4XCI9PT10aGlzLnZpZXc/W3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2xcIn0sW3QoXCJpbnB1dFwiLHtkb21Qcm9wczp7dmFsdWU6dGhpcy5tb2RlbC5oZXh9LGF0dHJzOntyZWFkb25seTohdGhpcy5lZGl0YWJsZSx0YWJpbmRleDp0aGlzLmVkaXRhYmxlPzA6LTF9LG9uOntjaGFuZ2U6dGhpcy5fX29uSGV4Q2hhbmdlLGJsdXI6ZnVuY3Rpb24odCl7cmV0dXJuIGUuZWRpdGFibGUmJmUuX19vbkhleENoYW5nZSh0LCEwKX19LHN0YXRpY0NsYXNzOlwiZnVsbC13aWR0aCB0ZXh0LWNlbnRlciB1cHBlcmNhc2VcIn0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLWxhYmVsIHRleHQtY2VudGVyXCJ9LFtcIkhFWFwiKyh0aGlzLmhhc0FscGhhP1wiIC8gQVwiOlwiXCIpXSldKV06dGhpcy5fX2dldE51bWVyaWNJbnB1dHModCkpLHQoXCJkaXZcIixbdChRQnRuLHtwcm9wczp7ZmxhdDohMCxkaXNhYmxlOnRoaXMuZGlzYWJsZX0sb246e2NsaWNrOnRoaXMuX19uZXh0SW5wdXRWaWV3fSxzdGF0aWNDbGFzczpcInEtcGEtbm9uZVwifSxbdChcInN2Z1wiLHthdHRyczp7dmlld0JveDpcIjAgMCAyNCAyNFwifSxzdHlsZTp7d2lkdGg6XCIyNHB4XCIsaGVpZ2h0OlwiMjRweFwifX0sW3QoXCJwYXRoXCIse2F0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsZDpcIk0xMiwxOC4xN0w4LjgzLDE1TDcuNDIsMTYuNDFMMTIsMjFMMTYuNTksMTYuNDFMMTUuMTcsMTVNMTIsNS44M0wxNS4xNyw5TDE2LjU4LDcuNTlMMTIsM0w3LjQxLDcuNTlMOC44Myw5TDEyLDUuODNaXCJ9fSldKV0pXSldKX0sX19vblNhdHVyYXRpb25DaGFuZ2U6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXRoaXMuJHJlZnMuc2F0dXJhdGlvbjtpZihzKXt2YXIgbj1zLmNsaWVudFdpZHRoLG89cy5jbGllbnRIZWlnaHQscj1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9TWF0aC5taW4obixNYXRoLm1heCgwLHQtci5sZWZ0KSk7dGhpcy4kcS5pMThuLnJ0bCYmKGE9bi1hKTt2YXIgbD1NYXRoLm1pbihvLE1hdGgubWF4KDAsZS1yLnRvcCkpLGM9TWF0aC5yb3VuZCgxMDAqYS9uKSxoPU1hdGgucm91bmQoMTAwKk1hdGgubWF4KDAsTWF0aC5taW4oMSwtbC9vKzEpKSksdT1oc3ZUb1JnYih7aDp0aGlzLm1vZGVsLmgsczpjLHY6aCxhOnRoaXMuaGFzQWxwaGE/dGhpcy5tb2RlbC5hOnZvaWQgMH0pO3RoaXMubW9kZWwucz1jLHRoaXMubW9kZWwudj1oLHRoaXMuX191cGRhdGUodSxyZ2JUb0hleCh1KSxpKX19LF9fb25IdWVDaGFuZ2U6ZnVuY3Rpb24odCxlKXt2YXIgaT1oc3ZUb1JnYih7aDp0PU1hdGgucm91bmQodCksczp0aGlzLm1vZGVsLnMsdjp0aGlzLm1vZGVsLnYsYTp0aGlzLmhhc0FscGhhP3RoaXMubW9kZWwuYTp2b2lkIDB9KTt0aGlzLm1vZGVsLmg9dCx0aGlzLl9fdXBkYXRlKGkscmdiVG9IZXgoaSksZSl9LF9fb25OdW1lcmljQ2hhbmdlOmZ1bmN0aW9uKHQsZSxpLHMpe3ZhciBuPU51bWJlcih0LnRhcmdldC52YWx1ZSk7aWYoIWlzTmFOKG4pKWlmKChuPU1hdGguZmxvb3IobikpPDB8fG4+aSlzJiZ0aGlzLiRmb3JjZVVwZGF0ZSgpO2Vsc2V7dmFyIG89e3I6XCJyXCI9PT1lP246dGhpcy5tb2RlbC5yLGc6XCJnXCI9PT1lP246dGhpcy5tb2RlbC5nLGI6XCJiXCI9PT1lP246dGhpcy5tb2RlbC5iLGE6dGhpcy5oYXNBbHBoYT9cImFcIj09PWU/bjp0aGlzLm1vZGVsLmE6dm9pZCAwfTtpZihcImFcIiE9PWUpe3ZhciByPXJnYlRvSHN2KG8pO3RoaXMubW9kZWwuaD1yLmgsdGhpcy5tb2RlbC5zPXIucyx0aGlzLm1vZGVsLnY9ci52fXRoaXMuX191cGRhdGUobyxyZ2JUb0hleChvKSxzKX19LF9fb25IZXhDaGFuZ2U6ZnVuY3Rpb24odCxlKXt2YXIgaT10LnRhcmdldC52YWx1ZSxzPWkubGVuZ3RoLG49dGhpcy5oYXNBbHBoYT9bNSw5XTpbNCw3XTtpZihzPT09blswXXx8cz09PW5bMV0pe3ZhciBvPWhleFRvUmdiKGkpLHI9cmdiVG9Ic3Yobyk7dGhpcy5tb2RlbC5oPXIuaCx0aGlzLm1vZGVsLnM9ci5zLHRoaXMubW9kZWwudj1yLnYsdGhpcy5fX3VwZGF0ZShvLGksZSl9ZWxzZSBlJiZ0aGlzLiRmb3JjZVVwZGF0ZSgpfSxfX3VwZGF0ZTpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpcyxuPXRoaXMuaXNPdXRwdXRIZXg/ZTp0O3RoaXMubW9kZWwuaGV4PWUsdGhpcy5tb2RlbC5yPXQucix0aGlzLm1vZGVsLmc9dC5nLHRoaXMubW9kZWwuYj10LmIsdGhpcy5tb2RlbC5hPXRoaXMuaGFzQWxwaGE/dC5hOnZvaWQgMCx0aGlzLiRlbWl0KFwiaW5wdXRcIixuKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2kmJkpTT04uc3RyaW5naWZ5KG4pIT09SlNPTi5zdHJpbmdpZnkocy52YWx1ZSkmJnMuJGVtaXQoXCJjaGFuZ2VcIixuKX0pfSxfX25leHRJbnB1dFZpZXc6ZnVuY3Rpb24oKXt0aGlzLnZpZXc9XCJoZXhcIj09PXRoaXMudmlldz9cInJnYmFcIjpcImhleFwifSxfX3BhcnNlTW9kZWw6ZnVuY3Rpb24odCl7aWYobnVsbD09PXR8fHZvaWQgMD09PXQpcmV0dXJue2g6MCxzOjAsdjowLHI6MCxnOjAsYjowLGhleDp2b2lkIDAsYToxMDB9O3ZhciBlPVwic3RyaW5nXCI9PXR5cGVvZiB0P2hleFRvUmdiKHQudHJpbSgpKTpjbG9uZSh0KTtyZXR1cm4gdGhpcy5mb3JjZUFscGhhPT09KHZvaWQgMD09PWUuYSkmJihlLmE9dGhpcy5mb3JjZUFscGhhPzEwMDp2b2lkIDApLGUuaGV4PXJnYlRvSGV4KGUpLE9iamVjdC5hc3NpZ24oe2E6MTAwfSxlLHJnYlRvSHN2KGUpKX0sX19zYXR1cmF0aW9uUGFuOmZ1bmN0aW9uKHQpe3QuaXNGaW5hbD90aGlzLl9fZHJhZ1N0b3AodCk6dC5pc0ZpcnN0P3RoaXMuX19kcmFnU3RhcnQodCk6dGhpcy5fX2RyYWdNb3ZlKHQpfSxfX2RyYWdTdGFydDpmdW5jdGlvbih0KXtzdG9wQW5kUHJldmVudCh0LmV2dCksdGhpcy5zYXR1cmF0aW9uRHJhZ2dpbmc9ITAsdGhpcy5fX3NhdHVyYXRpb25DaGFuZ2UodCl9LF9fZHJhZ01vdmU6ZnVuY3Rpb24odCl7dGhpcy5zYXR1cmF0aW9uRHJhZ2dpbmcmJihzdG9wQW5kUHJldmVudCh0LmV2dCksdGhpcy5fX3NhdHVyYXRpb25DaGFuZ2UodCkpfSxfX2RyYWdTdG9wOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7c3RvcEFuZFByZXZlbnQodC5ldnQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnNhdHVyYXRpb25EcmFnZ2luZz0hMX0sMTAwKSx0aGlzLl9fb25TYXR1cmF0aW9uQ2hhbmdlKHQucG9zaXRpb24ubGVmdCx0LnBvc2l0aW9uLnRvcCwhMCl9LF9fc2F0dXJhdGlvbkNoYW5nZTpmdW5jdGlvbih0KXt0aGlzLl9fb25TYXR1cmF0aW9uQ2hhbmdlKHQucG9zaXRpb24ubGVmdCx0LnBvc2l0aW9uLnRvcCl9LF9fc2F0dXJhdGlvbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuc2F0dXJhdGlvbkRyYWdnaW5nfHx0aGlzLl9fb25TYXR1cmF0aW9uQ2hhbmdlKHQucGFnZVgtd2luZG93LnBhZ2VYT2Zmc2V0LHQucGFnZVktd2luZG93LnBhZ2VZT2Zmc2V0LCEwKX19fSxjb250ZW50Q3NzPXttYXhXaWR0aDpcIjk1dndcIixtYXhIZWlnaHQ6XCI5OHZoXCJ9LFFDb2xvcj17bmFtZTpcIlFDb2xvclwiLG1peGluczpbRnJhbWVNaXhpbixEaXNwbGF5TW9kZU1peGluXSxwcm9wczp7dmFsdWU6e3JlcXVpcmVkOiEwfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sZGVmYXVsdFZhbHVlOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0Om51bGx9LGZvcm1hdE1vZGVsOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYXV0b1wiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJhdXRvXCIsXCJoZXhcIixcInJnYlwiLFwiaGV4YVwiLFwicmdiYVwiXS5pbmNsdWRlcyh0KX19LGRpc3BsYXlWYWx1ZTpTdHJpbmcsb2tMYWJlbDpTdHJpbmcsY2FuY2VsTGFiZWw6U3RyaW5nfSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7IXRoaXMuZGlzYWJsZSYmdGhpcy5pc1BvcG92ZXImJih0aGlzLm1vZGVsPWNsb25lKHQpKX19LGRhdGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlzUG9wb3Zlcj97fTp7dHJhbnNpdGlvbjpcInEtbW9kYWxcIn07cmV0dXJuIHQuZm9jdXNlZD0hMSx0Lm1vZGVsPWNsb25lKHRoaXMudmFsdWV8fHRoaXMuZGVmYXVsdFZhbHVlKSx0fSxjb21wdXRlZDp7YWN0dWFsVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5VmFsdWU/dGhpcy5kaXNwbGF5VmFsdWU6dGhpcy52YWx1ZT9cInN0cmluZ1wiPT10eXBlb2YgdGhpcy52YWx1ZT90aGlzLnZhbHVlOlwicmdiXCIrKHZvaWQgMCE9PXRoaXMudmFsdWUuYT9cImFcIjpcIlwiKStcIihcIit0aGlzLnZhbHVlLnIrXCIsXCIrdGhpcy52YWx1ZS5nK1wiLFwiK3RoaXMudmFsdWUuYisodm9pZCAwIT09dGhpcy52YWx1ZS5hP1wiLFwiK3RoaXMudmFsdWUuYS8xMDA6XCJcIikrXCIpXCI6XCJcIn0sY29tcHV0ZWRDbGVhclZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuY2xlYXJWYWx1ZT90aGlzLmRlZmF1bHRWYWx1ZTp0aGlzLmNsZWFyVmFsdWV9LGlzQ2xlYXJhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdGFibGUmJnRoaXMuY2xlYXJhYmxlJiZKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXB1dGVkQ2xlYXJWYWx1ZSkhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnZhbHVlKX0sbW9kYWxCdG5Db2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbG9yfX0sbWV0aG9kczp7dG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5wb3B1cCYmdGhpc1t0aGlzLiRyZWZzLnBvcHVwLnNob3dpbmc/XCJoaWRlXCI6XCJzaG93XCJdKCl9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5kaXNhYmxlKXJldHVybiB0aGlzLl9fc2V0TW9kZWwodGhpcy52YWx1ZXx8dGhpcy5kZWZhdWx0VmFsdWUpLHRoaXMuJHJlZnMucG9wdXAuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wdXA/dGhpcy4kcmVmcy5wb3B1cC5oaWRlKCk6UHJvbWlzZS5yZXNvbHZlKCl9LF9faGFuZGxlS2V5RG93bjpmdW5jdGlvbih0KXtzd2l0Y2goZ2V0RXZlbnRLZXkodCkpe2Nhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gc3RvcEFuZFByZXZlbnQodCksdGhpcy5zaG93KCk7Y2FzZSA4OnRoaXMuaXNDbGVhcmFibGUmJnRoaXMuY2xlYXIoKX19LF9fb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZXx8dGhpcy5mb2N1c2VkfHwodGhpcy5tb2RlbD1jbG9uZSh0aGlzLnZhbHVlfHx0aGlzLmRlZmF1bHRWYWx1ZSksdGhpcy5mb2N1c2VkPSEwLHRoaXMuJGVtaXQoXCJmb2N1c1wiKSl9LF9fb25CbHVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5mb2N1c2VkJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlLiRyZWZzLnBvcHVwJiZlLiRyZWZzLnBvcHVwLnNob3dpbmcmJih0PT09ZG9jdW1lbnQuYm9keXx8ZS4kcmVmcy5wb3B1cC4kZWwuY29udGFpbnModCkpfHwoZS5fX29uSGlkZSgpLGUuaGlkZSgpKX0sMSl9LF9fb25IaWRlOmZ1bmN0aW9uKHQsZSl7KHR8fHRoaXMuaXNQb3BvdmVyKSYmdGhpcy5fX3VwZGF0ZSh0KSx0aGlzLmZvY3VzZWQmJihlP3RoaXMuJGVsLmZvY3VzKCk6KHRoaXMuJGVtaXQoXCJibHVyXCIpLHRoaXMuZm9jdXNlZD0hMSkpfSxfX3NldE1vZGVsOmZ1bmN0aW9uKHQsZSl7dGhpcy5tb2RlbD1jbG9uZSh0KSwoZXx8dGhpcy5pc1BvcG92ZXIpJiZ0aGlzLl9fdXBkYXRlKGUpfSxfX2hhc01vZGVsQ2hhbmdlZDpmdW5jdGlvbigpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpfSxfX3VwZGF0ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7ZS5fX2hhc01vZGVsQ2hhbmdlZCgpJiYoZS4kZW1pdChcImlucHV0XCIsZS5tb2RlbCksdCYmZS4kZW1pdChcImNoYW5nZVwiLGUubW9kZWwpKX0pfSxfX2dldFBpY2tlcjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMscz1bdChRQ29sb3JQaWNrZXIse3N0YXRpY0NsYXNzOlwibm8tYm9yZGVyXCIrKGU/XCIgZnVsbC13aWR0aFwiOlwiXCIpLHByb3BzOk9iamVjdC5hc3NpZ24oe30sdGhpcy4kYXR0cnMse3ZhbHVlOnRoaXMubW9kZWwsZGlzYWJsZTp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxmb3JtYXRNb2RlbDp0aGlzLmZvcm1hdE1vZGVsLGRhcms6dGhpcy5kYXJrLG5vUGFyZW50RmllbGQ6ITB9KSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX19zZXRNb2RlbCh0KX0pfX19KV07cmV0dXJuIGUmJnMucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYnV0dG9ucyBtb2RhbC1idXR0b25zLXRvcCByb3cgZnVsbC13aWR0aFwiLGNsYXNzOnRoaXMuZGFyaz9cImJnLWJsYWNrXCI6bnVsbH0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2xcIn0pLHQoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMubW9kYWxCdG5Db2xvcixmbGF0OiEwLGxhYmVsOnRoaXMuY2FuY2VsTGFiZWx8fHRoaXMuJHEuaTE4bi5sYWJlbC5jYW5jZWwsbm9SaXBwbGU6ITB9LG9uOntjbGljazpmdW5jdGlvbigpe2kuX19vbkhpZGUoITEsITApLGkuaGlkZSgpfX19KSx0aGlzLmVkaXRhYmxlP3QoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMubW9kYWxCdG5Db2xvcixmbGF0OiEwLGxhYmVsOnRoaXMub2tMYWJlbHx8dGhpcy4kcS5pMThuLmxhYmVsLnNldCxub1JpcHBsZTohMCxkaXNhYmxlOiF0aGlzLm1vZGVsfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtpLl9fb25IaWRlKCEwLCEwKSxpLmhpZGUoKX19fSk6bnVsbF0pKSxzfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoUUlucHV0RnJhbWUse3N0YXRpY0NsYXNzOlwicS1jb2xvci1pbnB1dFwiLHByb3BzOntwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcsZGlzYWJsZTp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxpbnZlcnRlZDp0aGlzLmludmVydGVkLGludmVydGVkTGlnaHQ6dGhpcy5pbnZlcnRlZExpZ2h0LGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6dGhpcy5oaWRlVW5kZXJsaW5lLGJlZm9yZTp0aGlzLmJlZm9yZSxhZnRlcjp0aGlzLmFmdGVyLGNvbG9yOnRoaXMuY29sb3Isbm9QYXJlbnRGaWVsZDp0aGlzLm5vUGFyZW50RmllbGQsZm9jdXNlZDp0aGlzLmZvY3VzZWR8fHRoaXMuJHJlZnMucG9wdXAmJnRoaXMuJHJlZnMucG9wdXAuc2hvd2luZyxmb2N1c2FibGU6ITAsbGVuZ3RoOnRoaXMuYWN0dWFsVmFsdWUubGVuZ3RofSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy50b2dnbGUsZm9jdXM6dGhpcy5fX29uRm9jdXMsYmx1cjp0aGlzLl9fb25CbHVyLGtleWRvd246dGhpcy5fX2hhbmRsZUtleURvd259fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBlbGxpcHNpc1wiLGNsYXNzOnRoaXMuZmFrZUlucHV0Q2xhc3Nlc30sW3RoaXMuZmFrZUlucHV0VmFsdWVdKSx0aGlzLmlzUG9wb3Zlcj90KFFQb3BvdmVyLHtyZWY6XCJwb3B1cFwiLHByb3BzOntjb3ZlcjohMCxrZWVwT25TY3JlZW46ITAsZGlzYWJsZTp0aGlzLmRpc2FibGUsYW5jaG9yQ2xpY2s6ITEsbWF4SGVpZ2h0OlwiMTAwdmhcIn0sc2xvdDpcImFmdGVyXCIsb246e3Nob3c6dGhpcy5fX29uRm9jdXMsaGlkZTpmdW5jdGlvbigpe3JldHVybiBlLl9fb25IaWRlKCEwLCEwKX19fSx0aGlzLl9fZ2V0UGlja2VyKHQpKTp0KFFNb2RhbCx7cmVmOlwicG9wdXBcIixzdGF0aWNDbGFzczpcIndpdGgtYmFja2Ryb3BcIixwcm9wczp7Y29udGVudENzczpjb250ZW50Q3NzLG1pbmltaXplZDohMCxwb3NpdGlvbjpudWxsLHRyYW5zaXRpb246dGhpcy50cmFuc2l0aW9ufSxvbjp7ZGlzbWlzczpmdW5jdGlvbigpe3JldHVybiBlLl9fb25IaWRlKCExLCEwKX19fSx0aGlzLl9fZ2V0UGlja2VyKHQsITApKSx0aGlzLmlzQ2xlYXJhYmxlP3QoUUljb24se3Nsb3Q6XCJhZnRlclwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFtcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5jbGVhcn0sc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIn0pOm51bGwsdChRSWNvbix7c2xvdDpcImFmdGVyXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0LmRyb3Bkb3dufSxzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwifSldKX19LFFDb250ZXh0TWVudT17bmFtZTpcIlFDb250ZXh0TWVudVwiLHByb3BzOntkaXNhYmxlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9iaWxlOnRoaXMuJHEucGxhdGZvcm0uaXMubW9iaWxlfX0sbWV0aG9kczp7aGlkZTpmdW5jdGlvbih0KXtpZih0aGlzLiRyZWZzLnBvcHVwKXJldHVybiB0aGlzLm1vYmlsZSYmdGhpcy50YXJnZXQuY2xhc3NMaXN0LnJlbW92ZShcIm5vbi1zZWxlY3RhYmxlXCIpLHRoaXMuJHJlZnMucG9wdXAuaGlkZSh0KX0sc2hvdzpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuZGlzYWJsZXx8KHRoaXMubW9iaWxlP3RoaXMuJHJlZnMucG9wdXAmJih0aGlzLmV2ZW50PXQsdGhpcy4kcmVmcy5wb3B1cC5zaG93KHQpKTp0JiYoc3RvcEFuZFByZXZlbnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UuJHJlZnMucG9wdXAmJihlLmV2ZW50PXQsZS4kcmVmcy5wb3B1cC5zaG93KHQpKX0sMTAwKSkpfSxfX2Rlc2t0b3BCb2R5SGlkZTpmdW5jdGlvbih0KXt0aGlzLiRlbC5jb250YWlucyh0LnRhcmdldCl8fHRoaXMuaGlkZSh0KX0sX19kZXNrdG9wT25TaG93OmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIix0aGlzLl9fZGVza3RvcEJvZHlIaWRlLCEwKSxkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuX19kZXNrdG9wQm9keUhpZGUsITApLHRoaXMuJGVtaXQoXCJzaG93XCIsdGhpcy5ldmVudCl9LF9fZGVza3RvcE9uSGlkZTpmdW5jdGlvbih0KXtkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLHRoaXMuX19kZXNrdG9wQm9keUhpZGUsITApLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5fX2Rlc2t0b3BCb2R5SGlkZSwhMCksdGhpcy4kZW1pdChcImhpZGVcIix0aGlzLmV2ZW50LHQpfSxfX21vYmlsZVRvdWNoU3RhcnRIYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fX21vYmlsZUNsZWFudXAoKSx0JiZ0LnRvdWNoZXMmJnQudG91Y2hlcy5sZW5ndGg+MXx8KHRoaXMudGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJub24tc2VsZWN0YWJsZVwiKSx0aGlzLnRvdWNoVGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3QmJnN0b3BBbmRQcmV2ZW50KHQpLGUuX19tb2JpbGVDbGVhbnVwKCksc2V0VGltZW91dChmdW5jdGlvbigpe2Uuc2hvdyh0KX0sMTApfSw2MDApKX0sX19tb2JpbGVDbGVhbnVwOmZ1bmN0aW9uKCl7dGhpcy50YXJnZXQuY2xhc3NMaXN0LnJlbW92ZShcIm5vbi1zZWxlY3RhYmxlXCIpLGNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZXIpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMubW9iaWxlP3QoUU1vZGFsLHtyZWY6XCJwb3B1cFwiLHByb3BzOnttaW5pbWl6ZWQ6ITB9LG9uOntzaG93OmZ1bmN0aW9uKCl7ZS4kZW1pdChcInNob3dcIixlLmV2ZW50KX0saGlkZTpmdW5jdGlvbih0KXtlLiRlbWl0KFwiaGlkZVwiLGUuZXZlbnQsdCl9fX0sdGhpcy4kc2xvdHMuZGVmYXVsdCk6dChRUG9wb3Zlcix7cmVmOlwicG9wdXBcIixwcm9wczp7YW5jaG9yQ2xpY2s6ITEsdG91Y2hQb3NpdGlvbjohMH0sb246e3Nob3c6dGhpcy5fX2Rlc2t0b3BPblNob3csaGlkZTp0aGlzLl9fZGVza3RvcE9uSGlkZX19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLm1vYmlsZT90aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QudGFyZ2V0PXQuJGVsLnBhcmVudE5vZGUsdC50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIix0Ll9fbW9iaWxlVG91Y2hTdGFydEhhbmRsZXIpLFtcInRvdWNoY2FuY2VsXCIsXCJ0b3VjaG1vdmVcIixcInRvdWNoZW5kXCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dC50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihlLHQuX19tb2JpbGVDbGVhbnVwKX0pfSk6KHRoaXMudGFyZ2V0PXRoaXMuJGVsLnBhcmVudE5vZGUsdGhpcy50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsdGhpcy5zaG93KSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubW9iaWxlPyh0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHRoaXMuX19tb2JpbGVUb3VjaFN0YXJ0SGFuZGxlciksW1widG91Y2hjYW5jZWxcIixcInRvdWNobW92ZVwiLFwidG91Y2hlbmRcIl0uZm9yRWFjaChmdW5jdGlvbihlKXt0LnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGUsdC5fX21vYmlsZUNsZWFudXApfSkpOnRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLHRoaXMuc2hvdyl9fSxtb2RlbFZhbGlkYXRvcj1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbD09PXR8fHZvaWQgMD09PXR8fFwibnVtYmVyXCI9PT1lfHxcInN0cmluZ1wiPT09ZXx8aXNEYXRlKHQpfSxpbmxpbmU9e3ZhbHVlOnt2YWxpZGF0b3I6bW9kZWxWYWxpZGF0b3IscmVxdWlyZWQ6ITB9LGRlZmF1bHRWYWx1ZTp7dHlwZTpbU3RyaW5nLE51bWJlcixEYXRlXSxkZWZhdWx0Om51bGx9LHR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJkYXRlXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImRhdGVcIixcInRpbWVcIixcImRhdGV0aW1lXCJdLmluY2x1ZGVzKHQpfX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LGRhcms6Qm9vbGVhbixtaW46e3ZhbGlkYXRvcjptb2RlbFZhbGlkYXRvcixkZWZhdWx0Om51bGx9LG1heDp7dmFsaWRhdG9yOm1vZGVsVmFsaWRhdG9yLGRlZmF1bHQ6bnVsbH0saGVhZGVyTGFiZWw6U3RyaW5nLGZpcnN0RGF5T2ZXZWVrOk51bWJlcixmb3JtYXRNb2RlbDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImF1dG9cIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wiYXV0b1wiLFwiZGF0ZVwiLFwibnVtYmVyXCIsXCJzdHJpbmdcIl0uaW5jbHVkZXModCl9fSxmb3JtYXQyNGg6e3R5cGU6W0Jvb2xlYW4sTnVtYmVyXSxkZWZhdWx0OjAsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVyblshMCwhMSwwXS5pbmNsdWRlcyh0KX19LGRlZmF1bHRWaWV3Ont0eXBlOlN0cmluZyx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wieWVhclwiLFwibW9udGhcIixcImRheVwiLFwiaG91clwiLFwibWludXRlXCJdLmluY2x1ZGVzKHQpfX0sbWluaW1hbDpCb29sZWFufSxpbnB1dD17Zm9ybWF0OlN0cmluZyxva0xhYmVsOlN0cmluZyxjYW5jZWxMYWJlbDpTdHJpbmcsZGlzcGxheVZhbHVlOlN0cmluZ30sTUlMTElTRUNPTkRTX0lOX0RBWT04NjRlNSxNSUxMSVNFQ09ORFNfSU5fSE9VUj0zNmU1LE1JTExJU0VDT05EU19JTl9NSU5VVEU9NmU0LHRva2VuPS9cXFsoKD86W15cXF1cXFxcXXxcXFxcXXxcXFxcKSopXFxdfGR7MSw0fXxNezEsNH18bXsxLDJ9fHd7MSwyfXxRb3xEb3xEezEsNH18WVkoPzpZWSk/fEh7MSwyfXxoezEsMn18c3sxLDJ9fFN7MSwzfXxaezEsMn18YXsxLDJ9fFtBUUV4WF0vZyxyZU15U1FMRGF0ZVRpbWVTdHI9L15bMC05XXs0fS1bMC05XXsyfS1bMC05XXsyfSBbMC05XXsyfTpbMC05XXsyfTpbMC05XXsyfSguWzAtOV17Nn0pPyQvO2Z1bmN0aW9uIGZvcm1hdFRpbWV6b25lKHQsZSl7dm9pZCAwPT09ZSYmKGU9XCJcIik7dmFyIGk9dD4wP1wiLVwiOlwiK1wiLHM9TWF0aC5hYnModCksbj1zJTYwO3JldHVybiBpK3BhZChNYXRoLmZsb29yKHMvNjApKStlK3BhZChuKX1mdW5jdGlvbiBzZXRNb250aCh0LGUpe3ZhciBpPW5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSxlLDAsMCwwLDAsMCkuZ2V0RGF0ZSgpO3Quc2V0TW9udGgoZS0xLE1hdGgubWluKGksdC5nZXREYXRlKCkpKX1mdW5jdGlvbiBidWlsZERhdGVWYWwodCl7cmV0dXJuIG5ldyBEYXRlKGlzU3RyaW5nKHQpJiZudWxsIT09cmVNeVNRTERhdGVUaW1lU3RyLmV4ZWModCk/dC5zdWJzdHJpbmcoMCwyMykucmVwbGFjZShcIiBcIixcIlRcIik6dCl9ZnVuY3Rpb24gZ2V0Q2hhbmdlKHQsZSxpKXt2YXIgcz1idWlsZERhdGVWYWwodCksbj1pPzE6LTE7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7aWYoXCJtb250aFwiIT09dCl7dmFyIGk9XCJ5ZWFyXCI9PT10P1wiRnVsbFllYXJcIjpjYXBpdGFsaXplKFwiZGF5c1wiPT09dD9cImRhdGVcIjp0KTtzW1wic2V0XCIraV0oc1tcImdldFwiK2ldKCkrbiplW3RdKX1lbHNlIHNldE1vbnRoKHMscy5nZXRNb250aCgpKzErbiplLm1vbnRoKX0pLHN9ZnVuY3Rpb24gaXNWYWxpZCh0KXtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm4hMDt2YXIgZT1EYXRlLnBhcnNlKHQpO3JldHVybiExPT09aXNOYU4oZSl9ZnVuY3Rpb24gYnVpbGREYXRlKHQsZSl7cmV0dXJuIGFkanVzdERhdGUobmV3IERhdGUsdCxlKX1mdW5jdGlvbiBnZXREYXlPZldlZWsodCl7dmFyIGU9YnVpbGREYXRlVmFsKHQpLmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gZ2V0V2Vla09mWWVhcih0KXt2YXIgZT1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKTtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNiklNyszKTt2YXIgaT1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksMCw0KTtpLnNldERhdGUoaS5nZXREYXRlKCktKGkuZ2V0RGF5KCkrNiklNyszKTt2YXIgcz1lLmdldFRpbWV6b25lT2Zmc2V0KCktaS5nZXRUaW1lem9uZU9mZnNldCgpO2Uuc2V0SG91cnMoZS5nZXRIb3VycygpLXMpO3ZhciBuPShlLWkpLyg3Kk1JTExJU0VDT05EU19JTl9EQVkpO3JldHVybiAxK01hdGguZmxvb3Iobil9ZnVuY3Rpb24gaXNCZXR3ZWVuRGF0ZXModCxlLGkscyl7dm9pZCAwPT09cyYmKHM9e30pO3ZhciBuPWJ1aWxkRGF0ZVZhbChlKS5nZXRUaW1lKCksbz1idWlsZERhdGVWYWwoaSkuZ2V0VGltZSgpLHI9YnVpbGREYXRlVmFsKHQpLmdldFRpbWUoKTtyZXR1cm4gcy5pbmNsdXNpdmVGcm9tJiZuLS0scy5pbmNsdXNpdmVUbyYmbysrLHI+biYmcjxvfWZ1bmN0aW9uIGFkZFRvRGF0ZSh0LGUpe3JldHVybiBnZXRDaGFuZ2UodCxlLCEwKX1mdW5jdGlvbiBzdWJ0cmFjdEZyb21EYXRlKHQsZSl7cmV0dXJuIGdldENoYW5nZSh0LGUsITEpfWZ1bmN0aW9uIGFkanVzdERhdGUodCxlLGkpe3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KSxuPVwic2V0XCIrKGk/XCJVVENcIjpcIlwiKTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtpZihcIm1vbnRoXCIhPT10KXt2YXIgaT1cInllYXJcIj09PXQ/XCJGdWxsWWVhclwiOnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtzW1wiXCIrbitpXShlW3RdKX1lbHNlIHNldE1vbnRoKHMsZS5tb250aCl9KSxzfWZ1bmN0aW9uIHN0YXJ0T2ZEYXRlKHQsZSl7dmFyIGk9YnVpbGREYXRlVmFsKHQpO3N3aXRjaChlKXtjYXNlXCJ5ZWFyXCI6aS5zZXRNb250aCgwKTtjYXNlXCJtb250aFwiOmkuc2V0RGF0ZSgxKTtjYXNlXCJkYXlcIjppLnNldEhvdXJzKDApO2Nhc2VcImhvdXJcIjppLnNldE1pbnV0ZXMoMCk7Y2FzZVwibWludXRlXCI6aS5zZXRTZWNvbmRzKDApO2Nhc2VcInNlY29uZFwiOmkuc2V0TWlsbGlzZWNvbmRzKDApfXJldHVybiBpfWZ1bmN0aW9uIGVuZE9mRGF0ZSh0LGUpe3ZhciBpPWJ1aWxkRGF0ZVZhbCh0KTtzd2l0Y2goZSl7Y2FzZVwieWVhclwiOmkuc2V0TW9udGgoMTEpO2Nhc2VcIm1vbnRoXCI6aS5zZXREYXRlKGRheXNJbk1vbnRoKHQpKTtjYXNlXCJkYXlcIjppLnNldEhvdXJzKDIzKTtjYXNlXCJob3VyXCI6aS5zZXRNaW51dGVzKDU5KTtjYXNlXCJtaW51dGVcIjppLnNldFNlY29uZHMoNTkpO2Nhc2VcInNlY29uZFwiOmkuc2V0TWlsbGlzZWNvbmRzKDU5KX1yZXR1cm4gaX1mdW5jdGlvbiBnZXRNYXhEYXRlKHQpe2Zvcih2YXIgZT1bXSxpPWFyZ3VtZW50cy5sZW5ndGgtMTtpLS0gPjA7KWVbaV09YXJndW1lbnRzW2krMV07dmFyIHM9YnVpbGREYXRlVmFsKHQpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7cz1NYXRoLm1heChzLGJ1aWxkRGF0ZVZhbCh0KSl9KSxzfWZ1bmN0aW9uIGdldE1pbkRhdGUodCl7Zm9yKHZhciBlPVtdLGk9YXJndW1lbnRzLmxlbmd0aC0xO2ktLSA+MDspZVtpXT1hcmd1bWVudHNbaSsxXTt2YXIgcz1idWlsZERhdGVWYWwodCk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih0KXtzPU1hdGgubWluKHMsYnVpbGREYXRlVmFsKHQpKX0pLHN9ZnVuY3Rpb24gZ2V0RGlmZih0LGUsaSl7cmV0dXJuKHQuZ2V0VGltZSgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpNSUxMSVNFQ09ORFNfSU5fTUlOVVRFLShlLmdldFRpbWUoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkqTUlMTElTRUNPTkRTX0lOX01JTlVURSkpL2l9ZnVuY3Rpb24gZ2V0RGF0ZURpZmYodCxlLGkpe3ZvaWQgMD09PWkmJihpPVwiZGF5c1wiKTt2YXIgcz1idWlsZERhdGVWYWwodCksbj1idWlsZERhdGVWYWwoZSk7c3dpdGNoKGkpe2Nhc2VcInllYXJzXCI6cmV0dXJuIHMuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCk7Y2FzZVwibW9udGhzXCI6cmV0dXJuIDEyKihzLmdldEZ1bGxZZWFyKCktbi5nZXRGdWxsWWVhcigpKStzLmdldE1vbnRoKCktbi5nZXRNb250aCgpO2Nhc2VcImRheXNcIjpyZXR1cm4gZ2V0RGlmZihzdGFydE9mRGF0ZShzLFwiZGF5XCIpLHN0YXJ0T2ZEYXRlKG4sXCJkYXlcIiksTUlMTElTRUNPTkRTX0lOX0RBWSk7Y2FzZVwiaG91cnNcIjpyZXR1cm4gZ2V0RGlmZihzdGFydE9mRGF0ZShzLFwiaG91clwiKSxzdGFydE9mRGF0ZShuLFwiaG91clwiKSxNSUxMSVNFQ09ORFNfSU5fSE9VUik7Y2FzZVwibWludXRlc1wiOnJldHVybiBnZXREaWZmKHN0YXJ0T2ZEYXRlKHMsXCJtaW51dGVcIiksc3RhcnRPZkRhdGUobixcIm1pbnV0ZVwiKSxNSUxMSVNFQ09ORFNfSU5fTUlOVVRFKTtjYXNlXCJzZWNvbmRzXCI6cmV0dXJuIGdldERpZmYoc3RhcnRPZkRhdGUocyxcInNlY29uZFwiKSxzdGFydE9mRGF0ZShuLFwic2Vjb25kXCIpLDFlMyl9fWZ1bmN0aW9uIGdldERheU9mWWVhcih0KXtyZXR1cm4gZ2V0RGF0ZURpZmYodCxzdGFydE9mRGF0ZSh0LFwieWVhclwiKSxcImRheXNcIikrMX1mdW5jdGlvbiBpbmZlckRhdGVGb3JtYXQodCl7cmV0dXJuIGlzRGF0ZSh0KT9cImRhdGVcIjpcIm51bWJlclwiPT10eXBlb2YgdD9cIm51bWJlclwiOlwic3RyaW5nXCJ9ZnVuY3Rpb24gY29udmVydERhdGVUb0Zvcm1hdCh0LGUsaSl7aWYodHx8MD09PXQpc3dpdGNoKGUpe2Nhc2VcImRhdGVcIjpyZXR1cm4gdDtjYXNlXCJudW1iZXJcIjpyZXR1cm4gdC5nZXRUaW1lKCk7ZGVmYXVsdDpyZXR1cm4gZm9ybWF0RGF0ZSh0LGkpfX1mdW5jdGlvbiBnZXREYXRlQmV0d2Vlbih0LGUsaSl7dmFyIHM9YnVpbGREYXRlVmFsKHQpO2lmKGUpe3ZhciBuPWJ1aWxkRGF0ZVZhbChlKTtpZihzPG4pcmV0dXJuIG59aWYoaSl7dmFyIG89YnVpbGREYXRlVmFsKGkpO2lmKHM+bylyZXR1cm4gb31yZXR1cm4gc31mdW5jdGlvbiBpc1NhbWVEYXRlKHQsZSxpKXt2YXIgcz1idWlsZERhdGVWYWwodCksbj1idWlsZERhdGVWYWwoZSk7aWYodm9pZCAwPT09aSlyZXR1cm4gcy5nZXRUaW1lKCk9PT1uLmdldFRpbWUoKTtzd2l0Y2goaSl7Y2FzZVwic2Vjb25kXCI6aWYocy5nZXRTZWNvbmRzKCkhPT1uLmdldFNlY29uZHMoKSlyZXR1cm4hMTtjYXNlXCJtaW51dGVcIjppZihzLmdldE1pbnV0ZXMoKSE9PW4uZ2V0TWludXRlcygpKXJldHVybiExO2Nhc2VcImhvdXJcIjppZihzLmdldEhvdXJzKCkhPT1uLmdldEhvdXJzKCkpcmV0dXJuITE7Y2FzZVwiZGF5XCI6aWYocy5nZXREYXRlKCkhPT1uLmdldERhdGUoKSlyZXR1cm4hMTtjYXNlXCJtb250aFwiOmlmKHMuZ2V0TW9udGgoKSE9PW4uZ2V0TW9udGgoKSlyZXR1cm4hMTtjYXNlXCJ5ZWFyXCI6aWYocy5nZXRGdWxsWWVhcigpIT09bi5nZXRGdWxsWWVhcigpKXJldHVybiExO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiZGF0ZSBpc1NhbWVEYXRlIHVua25vd24gdW5pdCBcIitpKX1yZXR1cm4hMH1mdW5jdGlvbiBkYXlzSW5Nb250aCh0KXtyZXR1cm4gbmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSsxLDApLmdldERhdGUoKX1mdW5jdGlvbiBnZXRPcmRpbmFsKHQpe2lmKHQ+PTExJiZ0PD0xMylyZXR1cm4gdCtcInRoXCI7c3dpdGNoKHQlMTApe2Nhc2UgMTpyZXR1cm4gdCtcInN0XCI7Y2FzZSAyOnJldHVybiB0K1wibmRcIjtjYXNlIDM6cmV0dXJuIHQrXCJyZFwifXJldHVybiB0K1widGhcIn12YXIgZm9ybWF0dGVyPXtZWTpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0RnVsbFllYXIoKSw0KS5zdWJzdHIoMil9LFlZWVk6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0LmdldEZ1bGxZZWFyKCksNCl9LE06ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKSsxfSxNTTpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0TW9udGgoKSsxKX0sTU1NOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSwoZS5tb250aE5hbWVzU2hvcnR8fGkxOG4ubGFuZy5kYXRlLm1vbnRoc1Nob3J0KVt0LmdldE1vbnRoKCldfSxNTU1NOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSwoZS5tb250aE5hbWVzfHxpMThuLmxhbmcuZGF0ZS5tb250aHMpW3QuZ2V0TW9udGgoKV19LFE6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbCgodC5nZXRNb250aCgpKzEpLzMpfSxRbzpmdW5jdGlvbih0KXtyZXR1cm4gZ2V0T3JkaW5hbCh0aGlzLlEodCkpfSxEOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKX0sRG86ZnVuY3Rpb24odCl7cmV0dXJuIGdldE9yZGluYWwodC5nZXREYXRlKCkpfSxERDpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0RGF0ZSgpKX0sREREOmZ1bmN0aW9uKHQpe3JldHVybiBnZXREYXlPZlllYXIodCl9LEREREQ6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZChnZXREYXlPZlllYXIodCksMyl9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCl9LGRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRkZGQodCkuc2xpY2UoMCwyKX0sZGRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSwoZS5kYXlOYW1lc1Nob3J0fHxpMThuLmxhbmcuZGF0ZS5kYXlzU2hvcnQpW3QuZ2V0RGF5KCldfSxkZGRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSwoZS5kYXlOYW1lc3x8aTE4bi5sYW5nLmRhdGUuZGF5cylbdC5nZXREYXkoKV19LEU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCl8fDd9LHc6ZnVuY3Rpb24odCl7cmV0dXJuIGdldFdlZWtPZlllYXIodCl9LHd3OmZ1bmN0aW9uKHQpe3JldHVybiBwYWQoZ2V0V2Vla09mWWVhcih0KSl9LEg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0sSEg6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0LmdldEhvdXJzKCkpfSxoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0SG91cnMoKTtyZXR1cm4gMD09PWU/MTI6ZT4xMj9lJTEyOmV9LGhoOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQodGhpcy5oKHQpKX0sbTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9LG1tOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQodC5nZXRNaW51dGVzKCkpfSxzOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX0sc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0LmdldFNlY29uZHMoKSl9LFM6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZmxvb3IodC5nZXRNaWxsaXNlY29uZHMoKS8xMDApfSxTUzpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKE1hdGguZmxvb3IodC5nZXRNaWxsaXNlY29uZHMoKS8xMCkpfSxTU1M6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0LmdldE1pbGxpc2Vjb25kcygpLDMpfSxBOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkgodCk8MTI/XCJBTVwiOlwiUE1cIn0sYTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5IKHQpPDEyP1wiYW1cIjpcInBtXCJ9LGFhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkgodCk8MTI/XCJhLm0uXCI6XCJwLm0uXCJ9LFo6ZnVuY3Rpb24odCl7cmV0dXJuIGZvcm1hdFRpbWV6b25lKHQuZ2V0VGltZXpvbmVPZmZzZXQoKSxcIjpcIil9LFpaOmZ1bmN0aW9uKHQpe3JldHVybiBmb3JtYXRUaW1lem9uZSh0LmdldFRpbWV6b25lT2Zmc2V0KCkpfSxYOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmZsb29yKHQuZ2V0VGltZSgpLzFlMyl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VGltZSgpfX07ZnVuY3Rpb24gZm9ybWF0RGF0ZSh0LGUsaSl7aWYodm9pZCAwPT09ZSYmKGU9XCJZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1pcIiksMD09PXR8fHQpe3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KTtyZXR1cm4gZS5yZXBsYWNlKHRva2VuLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW4gZm9ybWF0dGVyP2Zvcm1hdHRlclt0XShzLGkpOnZvaWQgMD09PWU/dDplLnNwbGl0KFwiXFxcXF1cIikuam9pbihcIl1cIil9KX19ZnVuY3Rpb24gbWF0Y2hGb3JtYXQodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwiXCIpLHQubWF0Y2godG9rZW4pfWZ1bmN0aW9uIGNsb25lJDEodCl7cmV0dXJuIGlzRGF0ZSh0KT9uZXcgRGF0ZSh0LmdldFRpbWUoKSk6dH12YXIgZGF0ZT17aXNWYWxpZDppc1ZhbGlkLGJ1aWxkRGF0ZTpidWlsZERhdGUsZ2V0RGF5T2ZXZWVrOmdldERheU9mV2VlayxnZXRXZWVrT2ZZZWFyOmdldFdlZWtPZlllYXIsaXNCZXR3ZWVuRGF0ZXM6aXNCZXR3ZWVuRGF0ZXMsYWRkVG9EYXRlOmFkZFRvRGF0ZSxzdWJ0cmFjdEZyb21EYXRlOnN1YnRyYWN0RnJvbURhdGUsYWRqdXN0RGF0ZTphZGp1c3REYXRlLHN0YXJ0T2ZEYXRlOnN0YXJ0T2ZEYXRlLGVuZE9mRGF0ZTplbmRPZkRhdGUsZ2V0TWF4RGF0ZTpnZXRNYXhEYXRlLGdldE1pbkRhdGU6Z2V0TWluRGF0ZSxnZXREYXRlRGlmZjpnZXREYXRlRGlmZixnZXREYXlPZlllYXI6Z2V0RGF5T2ZZZWFyLGluZmVyRGF0ZUZvcm1hdDppbmZlckRhdGVGb3JtYXQsY29udmVydERhdGVUb0Zvcm1hdDpjb252ZXJ0RGF0ZVRvRm9ybWF0LGdldERhdGVCZXR3ZWVuOmdldERhdGVCZXR3ZWVuLGlzU2FtZURhdGU6aXNTYW1lRGF0ZSxkYXlzSW5Nb250aDpkYXlzSW5Nb250aCxmb3JtYXR0ZXI6Zm9ybWF0dGVyLGZvcm1hdERhdGU6Zm9ybWF0RGF0ZSxtYXRjaEZvcm1hdDptYXRjaEZvcm1hdCxjbG9uZTpjbG9uZSQxfSxyZURhdGU9L15cXGR7NH1bXlxcZF1cXGR7Mn1bXlxcZF1cXGR7Mn0vLERhdGVNaXhpbj17cHJvcHM6aW5saW5lLGNvbXB1dGVkOntjb21wdXRlZFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuXCJkYXRlXCI9PT10aGlzLnR5cGUmJlwic3RyaW5nXCI9PT10aGlzLmZvcm1hdE1vZGVsJiZyZURhdGUudGVzdCh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLnNsaWNlKDAsMTApLnNwbGl0KC9bXlxcZF0vKS5qb2luKFwiL1wiKTp0aGlzLnZhbHVlfSxjb21wdXRlZERlZmF1bHRWYWx1ZTpmdW5jdGlvbigpe3JldHVyblwiZGF0ZVwiPT09dGhpcy50eXBlJiZcInN0cmluZ1wiPT09dGhpcy5mb3JtYXRNb2RlbCYmcmVEYXRlLnRlc3QodGhpcy5kZWZhdWx0VmFsdWUpP3RoaXMuZGVmYXVsdFZhbHVlLnNsaWNlKDAsMTApLnNwbGl0KC9bXlxcZF0rLykuam9pbihcIi9cIik6dGhpcy5kZWZhdWx0VmFsdWV9LGNvbXB1dGVkRGF0ZUZvcm1hdDpmdW5jdGlvbigpe2lmKFwiZGF0ZVwiPT09dGhpcy50eXBlJiZcInN0cmluZ1wiPT09dGhpcy5mb3JtYXRNb2RlbClyZXR1cm5cIllZWVkvTU0vREQgSEg6bW06c3NcIn0sbW9kZWw6e2dldDpmdW5jdGlvbigpe3JldHVybiBpc1ZhbGlkKHRoaXMuY29tcHV0ZWRWYWx1ZSk/bmV3IERhdGUodGhpcy5jb21wdXRlZFZhbHVlKTp0aGlzLmNvbXB1dGVkRGVmYXVsdFZhbHVlP25ldyBEYXRlKHRoaXMuY29tcHV0ZWREZWZhdWx0VmFsdWUpOnN0YXJ0T2ZEYXRlKG5ldyBEYXRlLFwiZGF5XCIpfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPWNvbnZlcnREYXRlVG9Gb3JtYXQoZ2V0RGF0ZUJldHdlZW4odCx0aGlzLnBtaW4sdGhpcy5wbWF4KSxcImF1dG9cIj09PXRoaXMuZm9ybWF0TW9kZWw/aW5mZXJEYXRlRm9ybWF0KHRoaXMudmFsdWUpOnRoaXMuZm9ybWF0TW9kZWwsdGhpcy5jb21wdXRlZERhdGVGb3JtYXQpO3RoaXMuJGVtaXQoXCJpbnB1dFwiLGkpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aXNTYW1lRGF0ZShpLGUudmFsdWUpfHxlLiRlbWl0KFwiY2hhbmdlXCIsaSl9KX19LHBtaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5taW4/bmV3IERhdGUodGhpcy5taW4pOm51bGx9LHBtYXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXg/bmV3IERhdGUodGhpcy5tYXgpOm51bGx9LHR5cGVIYXNEYXRlOmZ1bmN0aW9uKCl7cmV0dXJuXCJkYXRlXCI9PT10aGlzLnR5cGV8fFwiZGF0ZXRpbWVcIj09PXRoaXMudHlwZX0sdHlwZUhhc1RpbWU6ZnVuY3Rpb24oKXtyZXR1cm5cInRpbWVcIj09PXRoaXMudHlwZXx8XCJkYXRldGltZVwiPT09dGhpcy50eXBlfSx5ZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWwuZ2V0RnVsbFllYXIoKX0sbW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbC5nZXRNb250aCgpKzF9LGRheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsLmdldERhdGUoKX0sbWludXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWwuZ2V0TWludXRlcygpfSxjdXJyZW50WWVhcjpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX0seWVhckludGVydmFsOmZ1bmN0aW9uKCl7cmV0dXJue21pbjpudWxsIT09dGhpcy5wbWluP3RoaXMucG1pbi5nZXRGdWxsWWVhcigpOih0aGlzLnllYXJ8fHRoaXMuY3VycmVudFllYXIpLTgwLG1heDpudWxsIT09dGhpcy5wbWF4P3RoaXMucG1heC5nZXRGdWxsWWVhcigpOih0aGlzLnllYXJ8fHRoaXMuY3VycmVudFllYXIpKzgwfX0sbW9udGhJbnRlcnZhbDpmdW5jdGlvbigpe3JldHVybnttaW46dGhpcy5tb250aE1pbixtYXg6bnVsbCE9PXRoaXMucG1heCYmdGhpcy5wbWF4LmdldEZ1bGxZZWFyKCk9PT10aGlzLnllYXI/dGhpcy5wbWF4LmdldE1vbnRoKCk6MTF9fSxtb250aE1pbjpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5wbWluJiZ0aGlzLnBtaW4uZ2V0RnVsbFllYXIoKT09PXRoaXMueWVhcj90aGlzLnBtaW4uZ2V0TW9udGgoKTowfSxkYXlzSW5Nb250aDpmdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb2RlbC5nZXRNb250aCgpKzEsMCkuZ2V0RGF0ZSgpfSxlZGl0YWJsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmRpc2FibGUmJiF0aGlzLnJlYWRvbmx5fSxfX25lZWRzQm9yZGVyOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSxtZXRob2RzOnt0b2dnbGVBbVBtOmZ1bmN0aW9uKCl7aWYodGhpcy5lZGl0YWJsZSl7dmFyIHQ9dGhpcy5tb2RlbC5nZXRIb3VycygpLGU9dGhpcy5hbT8xMjotMTI7dGhpcy5tb2RlbD1uZXcgRGF0ZShuZXcgRGF0ZSh0aGlzLm1vZGVsKS5zZXRIb3Vycyh0K2UpKX19LF9fcGFyc2VUeXBlVmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm5cIm1vbnRoXCI9PT10P25vcm1hbGl6ZVRvSW50ZXJ2YWwoZSwxLDEyKTpcImRhdGVcIj09PXQ/bm9ybWFsaXplVG9JbnRlcnZhbChlLDEsdGhpcy5kYXlzSW5Nb250aCk6XCJ5ZWFyXCI9PT10P25vcm1hbGl6ZVRvSW50ZXJ2YWwoZSx0aGlzLnllYXJJbnRlcnZhbC5taW4sdGhpcy55ZWFySW50ZXJ2YWwubWF4KTpcImhvdXJcIj09PXQ/bm9ybWFsaXplVG9JbnRlcnZhbChlLDAsMjMpOlwibWludXRlXCI9PT10P25vcm1hbGl6ZVRvSW50ZXJ2YWwoZSwwLDU5KTp2b2lkIDB9fX07ZnVuY3Rpb24gY29udmVydFRvQW1QbSh0KXtyZXR1cm4gMD09PXQ/MTI6dD49MTM/dC0xMjp0fXZhciBRRGF0ZXRpbWVQaWNrZXI9e25hbWU6XCJRRGF0ZXRpbWVQaWNrZXJcIixtaXhpbnM6W0RhdGVNaXhpbixQYXJlbnRGaWVsZE1peGluLENhblJlbmRlck1peGluXSxwcm9wczp7ZGVmYXVsdFZhbHVlOltTdHJpbmcsTnVtYmVyLERhdGVdLGRpc2FibGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFufSxkaXJlY3RpdmVzOntSaXBwbGU6UmlwcGxlfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3ZpZXc6dGhpcy5fX2NhbGNWaWV3KHRoaXMuZGVmYXVsdFZpZXcpLGRyYWdnaW5nOiExLGNlbnRlckNsb2NrUG9zOjAsZmFrZVZhbHVlOnt5ZWFyOm51bGwsbW9udGg6bnVsbH19fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dHx8KHRoaXMudmlldz1bXCJkYXRlXCIsXCJkYXRldGltZVwiXS5pbmNsdWRlcyh0aGlzLnR5cGUpP1wiZGF5XCI6XCJob3VyXCIpfSx2aWV3OmZ1bmN0aW9uKCl7dGhpcy5fX3Njcm9sbFZpZXcoITApfSxtb2RlbDpmdW5jdGlvbigpe3RoaXMuZmFrZVZhbHVlLm1vbnRoIT09dGhpcy5tb250aCYmKHRoaXMuZmFrZVZhbHVlLm1vbnRoPXRoaXMubW9udGgsdGhpcy5fX3Njcm9sbFZpZXcoKSksdGhpcy5mYWtlVmFsdWUueWVhciE9PXRoaXMueWVhciYmKHRoaXMuZmFrZVZhbHVlLnllYXI9dGhpcy55ZWFyLHRoaXMuX19zY3JvbGxWaWV3KCkpfX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5kaXNhYmxlJiZ0LnB1c2goXCJkaXNhYmxlZFwiKSx0aGlzLnJlYWRvbmx5JiZ0LnB1c2goXCJyZWFkb25seVwiKSx0aGlzLmRhcmsmJnQucHVzaChcInEtZGF0ZXRpbWUtZGFya1wiKSx0aGlzLm1pbmltYWwmJnQucHVzaChcInEtZGF0ZXRpbWUtbWluaW1hbFwiKSx0aGlzLmNvbG9yJiZ0LnB1c2goXCJ0ZXh0LVwiK3RoaXMuY29sb3IpLHR9LGRhdGVBcnJvdzpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLiRxLmljb24uZGF0ZXRpbWUuYXJyb3dMZWZ0LHRoaXMuJHEuaWNvbi5kYXRldGltZS5hcnJvd1JpZ2h0XTtyZXR1cm4gdGhpcy4kcS5pMThuLnJ0bD90LnJldmVyc2UoKTp0fSxjb21wdXRlZEZvcm1hdDI0aDpmdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5mb3JtYXQyNGg/dGhpcy5mb3JtYXQyNGg6dGhpcy4kcS5pMThuLmRhdGUuZm9ybWF0MjRofSxjb21wdXRlZEZpcnN0RGF5T2ZXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZmlyc3REYXlPZldlZWs/dGhpcy5maXJzdERheU9mV2Vlazp0aGlzLiRxLmkxOG4uZGF0ZS5maXJzdERheU9mV2Vla30saGVhZGVyRGF5TmFtZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRxLmkxOG4uZGF0ZS5kYXlzU2hvcnQsZT10aGlzLmNvbXB1dGVkRmlyc3REYXlPZldlZWs7cmV0dXJuIGU+MD90LnNsaWNlKGUsNykuY29uY2F0KHQuc2xpY2UoMCxlKSk6dH0sZmFrZU1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMuZmFrZVllYXIsdGhpcy5mYWtlTW9udGgtMSwxKX0sZmFrZVllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mYWtlVmFsdWUueWVhcnx8dGhpcy55ZWFyfSxmYWtlTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mYWtlVmFsdWUubW9udGh8fHRoaXMubW9udGh9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMuZmFrZVllYXIsdGhpcy5mYWtlTW9udGgsMCkuZ2V0RGF0ZSgpfSxtb250aFN0cmluZzpmdW5jdGlvbigpe3JldHVyblwiXCIrdGhpcy4kcS5pMThuLmRhdGUubW9udGhzU2hvcnRbdGhpcy5tb250aC0xXX0sbW9udGhTdGFtcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRxLmkxOG4uZGF0ZS5tb250aHNbdGhpcy5mYWtlTW9udGgtMV0rXCIgXCIrdGhpcy5mYWtlWWVhcn0sd2Vla0RheVN0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWRlckxhYmVsfHx0aGlzLiRxLmkxOG4uZGF0ZS5kYXlzW3RoaXMubW9kZWwuZ2V0RGF5KCldfSxmaWxsZXJEYXlzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mYWtlTW9kZWwuZ2V0RGF5KCktdGhpcy5jb21wdXRlZEZpcnN0RGF5T2ZXZWVrO3JldHVybiB0PDAmJih0Kz03KSx0fSxiZWZvcmVNaW5EYXlzOmZ1bmN0aW9uKCl7aWYobnVsbD09PXRoaXMucG1pbilyZXR1cm4hMTt2YXIgdD10aGlzLnBtaW4uZ2V0RnVsbFllYXIoKSxlPXRoaXMucG1pbi5nZXRNb250aCgpKzE7cmV0dXJuIHQ9PT10aGlzLmZha2VZZWFyJiZlPT09dGhpcy5mYWtlTW9udGg/dGhpcy5wbWluLmdldERhdGUoKS0xOih0PnRoaXMuZmFrZVllYXJ8fHQ9PT10aGlzLmZha2VZZWFyJiZlPnRoaXMuZmFrZU1vbnRoKSYmdGhpcy5kYXlzSW5Nb250aH0sYWZ0ZXJNYXhEYXlzOmZ1bmN0aW9uKCl7aWYobnVsbD09PXRoaXMucG1heClyZXR1cm4hMTt2YXIgdD10aGlzLnBtYXguZ2V0RnVsbFllYXIoKSxlPXRoaXMucG1heC5nZXRNb250aCgpKzE7cmV0dXJuIHQ9PT10aGlzLmZha2VZZWFyJiZlPT09dGhpcy5mYWtlTW9udGg/dGhpcy5kYXlzSW5Nb250aC10aGlzLm1heERheToodDx0aGlzLmZha2VZZWFyfHx0PT09dGhpcy5mYWtlWWVhciYmZTx0aGlzLmZha2VNb250aCkmJnRoaXMuZGF5c0luTW9udGh9LG1heERheTpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5wbWF4P3RoaXMucG1heC5nZXREYXRlKCk6dGhpcy5kYXlzSW5Nb250aH0sZGF0ZUludGVydmFsOmZ1bmN0aW9uKCl7dmFyIHQ9bnVsbD09PXRoaXMucG1heHx8ITE9PT10aGlzLmFmdGVyTWF4RGF5cz8wOnRoaXMuYWZ0ZXJNYXhEYXlzO3JldHVybiB0aGlzLmJlZm9yZU1pbkRheXM+MHx8dD97bWluOnRoaXMuYmVmb3JlTWluRGF5cz4wP3RoaXMuYmVmb3JlTWluRGF5cysxOjEsbWF4OnRoaXMuZGF5c0luTW9udGgtdH06e21pbjoxLG1heDp0aGlzLmRheXNJbk1vbnRofX0saG91cjpmdW5jdGlvbigpe3ZhciB0PXRoaXMubW9kZWwuZ2V0SG91cnMoKTtyZXR1cm4gdGhpcy5jb21wdXRlZEZvcm1hdDI0aD90OmNvbnZlcnRUb0FtUG0odCl9LG1pbnV0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsLmdldE1pbnV0ZXMoKX0sYW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbC5nZXRIb3VycygpPD0xMX0sY2xvY2tQb2ludGVyU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD1cIm1pbnV0ZVwiPT09dGhpcy52aWV3LGU9dD82MDoxMixpPVtcInJvdGF0ZShcIisoTWF0aC5yb3VuZCgodD90aGlzLm1pbnV0ZTp0aGlzLmhvdXIpKigzNjAvZSkpLTE4MCkrXCJkZWcpXCJdO3JldHVybiB0fHwhdGhpcy5jb21wdXRlZEZvcm1hdDI0aHx8dGhpcy5ob3VyPjAmJnRoaXMuaG91cjwxM3x8aS5wdXNoKFwic2NhbGUoLjcsIC43KVwiKSx7dHJhbnNmb3JtOmkuam9pbihcIiBcIil9fSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIGlzVmFsaWQodGhpcy52YWx1ZSl9LHRvZGF5OmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IERhdGU7cmV0dXJuIGlzU2FtZURhdGUodCx0aGlzLmZha2VNb2RlbCxcIm1vbnRoXCIpP3QuZ2V0RGF0ZSgpOi0xfX0sbWV0aG9kczp7c2V0WWVhcjpmdW5jdGlvbih0LGUpe3RoaXMuZWRpdGFibGUmJihlfHwodGhpcy52aWV3PVwibW9udGhcIiksdGhpcy5tb2RlbD1uZXcgRGF0ZShuZXcgRGF0ZSh0aGlzLm1vZGVsKS5zZXRGdWxsWWVhcih0aGlzLl9fcGFyc2VUeXBlVmFsdWUoXCJ5ZWFyXCIsdCkpKSl9LHNldE1vbnRoOmZ1bmN0aW9uKHQsZSl7dGhpcy5lZGl0YWJsZSYmKGV8fCh0aGlzLnZpZXc9XCJkYXlcIiksdGhpcy5tb2RlbD1hZGp1c3REYXRlKHRoaXMubW9kZWwse21vbnRoOnR9KSl9LG1vdmVGYWtlTW9udGg6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mYWtlTW9udGgrKHQ+MD8xOi0xKSxpPXRoaXMuZmFrZVllYXI7aWYoZTwxPyhlPTEyLGktPTEpOmU+MTImJihlPTEsaSs9MSksbnVsbCE9PXRoaXMucG1pbiYmdD4wKXt2YXIgcz10aGlzLnBtaW4uZ2V0RnVsbFllYXIoKSxuPXRoaXMucG1pbi5nZXRNb250aCgpKzE7aTxzPyhpPXMsZT1uKTppPT09cyYmZTxuJiYoZT1uKX1pZihudWxsIT09dGhpcy5wbWF4JiZ0PDApe3ZhciBvPXRoaXMucG1heC5nZXRGdWxsWWVhcigpLHI9dGhpcy5wbWF4LmdldE1vbnRoKCkrMTtpPm8/KGk9byxlPXIpOmk9PT1vJiZlPnImJihlPXIpfXRoaXMuZmFrZVZhbHVlLnllYXI9aSx0aGlzLmZha2VWYWx1ZS5tb250aD1lfSxzZXREYXk6ZnVuY3Rpb24odCxlLGkscyl7aWYodGhpcy5lZGl0YWJsZSl7aWYoaSYmcyl7dmFyIG49YWRqdXN0RGF0ZSh0aGlzLm1vZGVsLHttb250aDpzfSk7bi5zZXRGdWxsWWVhcih0aGlzLl9fcGFyc2VUeXBlVmFsdWUoXCJ5ZWFyXCIsaSkpLG4uc2V0RGF0ZSh0aGlzLl9fcGFyc2VUeXBlVmFsdWUoXCJkYXRlXCIsdCkpLHRoaXMubW9kZWw9bn1lbHNlIHRoaXMubW9kZWw9bmV3IERhdGUobmV3IERhdGUodGhpcy5tb2RlbCkuc2V0RGF0ZSh0aGlzLl9fcGFyc2VUeXBlVmFsdWUoXCJkYXRlXCIsdCkpKTtlfHxcImRhdGVcIiE9PXRoaXMudHlwZT9lfHwodGhpcy52aWV3PVwiaG91clwiKToodGhpcy4kZW1pdChcImNhbkNsb3NlXCIpLHRoaXMubWluaW1hbCYmdGhpcy5zZXRWaWV3KHRoaXMuZGVmYXVsdFZpZXcpKX19LHNldEhvdXI6ZnVuY3Rpb24odCl7dGhpcy5lZGl0YWJsZSYmKHQ9dGhpcy5fX3BhcnNlVHlwZVZhbHVlKFwiaG91clwiLHQpLCF0aGlzLmNvbXB1dGVkRm9ybWF0MjRoJiZ0PDEyJiYhdGhpcy5hbSYmKHQrPTEyKSx0aGlzLm1vZGVsPW5ldyBEYXRlKG5ldyBEYXRlKHRoaXMubW9kZWwpLnNldEhvdXJzKHQpKSl9LHNldE1pbnV0ZTpmdW5jdGlvbih0KXt0aGlzLmVkaXRhYmxlJiYodGhpcy5tb2RlbD1uZXcgRGF0ZShuZXcgRGF0ZSh0aGlzLm1vZGVsKS5zZXRNaW51dGVzKHRoaXMuX19wYXJzZVR5cGVWYWx1ZShcIm1pbnV0ZVwiLHQpKSkpfSxzZXRWaWV3OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19jYWxjVmlldyh0KTt0aGlzLnZpZXchPT1lJiYodGhpcy52aWV3PWUpfSxfX2NhbGNWaWV3OmZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2VcInRpbWVcIjpyZXR1cm5bXCJob3VyXCIsXCJtaW51dGVcIl0uaW5jbHVkZXModCk/dDpcImhvdXJcIjtjYXNlXCJkYXRlXCI6cmV0dXJuW1wieWVhclwiLFwibW9udGhcIixcImRheVwiXS5pbmNsdWRlcyh0KT90OlwiZGF5XCI7ZGVmYXVsdDpyZXR1cm5bXCJ5ZWFyXCIsXCJtb250aFwiLFwiZGF5XCIsXCJob3VyXCIsXCJtaW51dGVcIl0uaW5jbHVkZXModCk/dDpcImRheVwifX0sX19wYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4odDwxMD9lfHxcIjBcIjpcIlwiKSt0fSxfX3Njcm9sbFZpZXc6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihcInllYXJcIj09PXRoaXMudmlld3x8XCJtb250aFwiPT09dGhpcy52aWV3KXt0JiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fX3Njcm9sbFZpZXcoKX0sMjAwKTt2YXIgaT10aGlzLiRyZWZzLnNlbGVjdG9yLHM9aT9pLnF1ZXJ5U2VsZWN0b3IoXCIucS1idG46bm90KC5hY3RpdmUpXCIpOm51bGwsbj1pP2kucXVlcnlTZWxlY3RvcihcIi5xLWJ0bi5hY3RpdmVcIik6bnVsbCxvPWk/aS5vZmZzZXRIZWlnaHQ6MDt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3ZhciB0PVwieWVhclwiPT09ZS52aWV3P2UueWVhci1lLnllYXJJbnRlcnZhbC5taW46ZS5tb250aC1lLm1vbnRoTWluLTE7byYmbiYmKGkuc2Nyb2xsVG9wPXQqKHM/cy5vZmZzZXRIZWlnaHQ6MCkrKG4ub2Zmc2V0SGVpZ2h0LW8pLzIpfSl9fSxfX2RyYWdTdGFydDpmdW5jdGlvbih0LGUpe3N0b3BBbmRQcmV2ZW50KHQpO3ZhciBpPXRoaXMuJHJlZnMuY2xvY2sscz1vZmZzZXQoaSk7dGhpcy5jZW50ZXJDbG9ja1Bvcz17dG9wOnMudG9wK2hlaWdodChpKS8yLGxlZnQ6cy5sZWZ0K3dpZHRoKGkpLzJ9LHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5fX3VwZGF0ZUNsb2NrKHQsZSl9LF9fZHJhZ01vdmU6ZnVuY3Rpb24odCl7dGhpcy5kcmFnZ2luZyYmKHN0b3BBbmRQcmV2ZW50KHQpLHRoaXMuX191cGRhdGVDbG9jayh0KSl9LF9fZHJhZ1N0b3A6ZnVuY3Rpb24odCxlKXtzdG9wQW5kUHJldmVudCh0KSx0aGlzLmRyYWdnaW5nPSExLHZvaWQgMCE9PXQmJnRoaXMuX191cGRhdGVDbG9jayh0LGUpLFwibWludXRlXCI9PT10aGlzLnZpZXc/KHRoaXMuJGVtaXQoXCJjYW5DbG9zZVwiKSx0aGlzLm1pbmltYWwmJnRoaXMuc2V0Vmlldyh0aGlzLmRlZmF1bHRWaWV3KSk6dGhpcy52aWV3PVwibWludXRlXCJ9LF9fdXBkYXRlQ2xvY2s6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1lKXJldHVybiB0aGlzW1wiaG91clwiPT09dGhpcy52aWV3P1wic2V0SG91clwiOlwic2V0TWludXRlXCJdKGUpO3ZhciBpPXBvc2l0aW9uKHQpLHM9TWF0aC5hYnMoaS50b3AtdGhpcy5jZW50ZXJDbG9ja1Bvcy50b3ApLG49TWF0aC5zcXJ0KE1hdGgucG93KE1hdGguYWJzKGkudG9wLXRoaXMuY2VudGVyQ2xvY2tQb3MudG9wKSwyKStNYXRoLnBvdyhNYXRoLmFicyhpLmxlZnQtdGhpcy5jZW50ZXJDbG9ja1Bvcy5sZWZ0KSwyKSksbz1NYXRoLmFzaW4ocy9uKSooMTgwL01hdGguUEkpO2lmKG89aS50b3A8dGhpcy5jZW50ZXJDbG9ja1Bvcy50b3A/dGhpcy5jZW50ZXJDbG9ja1Bvcy5sZWZ0PGkubGVmdD85MC1vOjI3MCtvOnRoaXMuY2VudGVyQ2xvY2tQb3MubGVmdDxpLmxlZnQ/bys5MDoyNzAtbyxcImhvdXJcIj09PXRoaXMudmlldyl7dmFyIHI9TWF0aC5yb3VuZChvLzMwKTt0aGlzLmNvbXB1dGVkRm9ybWF0MjRoJiYocj9uPDg1JiYocis9MTIpOnI9bjw4NT8wOjEyKSx0aGlzLnNldEhvdXIocil9ZWxzZSB0aGlzLnNldE1pbnV0ZShNYXRoLnJvdW5kKG8vNikpfSxfX3JlcGVhdFRpbWVvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDEwMCwzMDAtdCp0KjEwKX0sX19nZXRUb3BTZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bdGhpcy50eXBlSGFzRGF0ZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS13ZWVrZGF5c3RyaW5nXCJ9LFt0aGlzLndlZWtEYXlTdHJpbmddKTp2b2lkIDAsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbFwifSldO2lmKHRoaXMudHlwZUhhc0RhdGUpe3ZhciBzPVt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1kYXRlc3RyaW5nIHJvdyBqdXN0aWZ5LWNlbnRlciBpdGVtcy1lbmRcIn0sW3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1saW5rIHNtYWxsIGNvbC1hdXRvIGNvbC1tZC0xMlwiLGNsYXNzOnthY3RpdmU6XCJtb250aFwiPT09dGhpcy52aWV3fSxhdHRyczp7dGFiaW5kZXg6MH0sb246e2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9Z2V0RXZlbnRLZXkodCk7Mzg9PT1pfHwzOT09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0TW9udGgoZS5tb250aC0xLCEwKSk6NDA9PT1pfHwzNz09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0TW9udGgoZS5tb250aCsxLCEwKSk6MTMhPT1pJiYyMCE9PWl8fChlLnZpZXc9XCJtb250aFwiKX19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp0aGlzLmRpc2FibGU/e306e2NsaWNrOmZ1bmN0aW9uKCl7ZS52aWV3PVwibW9udGhcIn19fSxbdGhpcy5tb250aFN0cmluZ10pXSksdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmsgY29sLWF1dG8gY29sLW1kLTEyXCIsY2xhc3M6e2FjdGl2ZTpcImRheVwiPT09dGhpcy52aWV3fSxhdHRyczp7dGFiaW5kZXg6MH0sb246e2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9Z2V0RXZlbnRLZXkodCk7Mzc9PT1pfHwzOD09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0RGF5KGUuZGF5LSgzNz09PWk/MTo3KSwhMCkpOjM5PT09aXx8NDA9PT1pPyhzdG9wQW5kUHJldmVudCh0KSxlLnNldERheShlLmRheSsoMzk9PT1pPzE6NyksITApKToxMyE9PWkmJjIwIT09aXx8KGUudmlldz1cImRheVwiKX19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp0aGlzLmRpc2FibGU/e306e2NsaWNrOmZ1bmN0aW9uKCl7ZS52aWV3PVwiZGF5XCJ9fX0sW3RoaXMuZGF5XSldKSx0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtbGluayBzbWFsbCBjb2wtYXV0byBjb2wtbWQtMTJcIixjbGFzczp7YWN0aXZlOlwieWVhclwiPT09dGhpcy52aWV3fSxhdHRyczp7dGFiaW5kZXg6MH0sb246e2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9Z2V0RXZlbnRLZXkodCk7Mzg9PT1pfHwzOT09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0WWVhcihlLnllYXItMSwhMCkpOjQwPT09aXx8Mzc9PT1pPyhzdG9wQW5kUHJldmVudCh0KSxlLnNldFllYXIoZS55ZWFyKzEsITApKToxMyE9PWkmJjIwIT09aXx8KGUudmlldz1cInllYXJcIil9fX0sW3QoXCJzcGFuXCIse2F0dHJzOnt0YWJpbmRleDotMX0sb246dGhpcy5kaXNhYmxlP3t9OntjbGljazpmdW5jdGlvbigpe2Uudmlldz1cInllYXJcIn19fSxbdGhpcy55ZWFyXSldKV0pXTtpLnB1c2godChcImRpdlwiLHMpKX1pZih0aGlzLnR5cGVIYXNUaW1lKXt2YXIgbj0hdGhpcy5jb21wdXRlZEZvcm1hdDI0aCYmdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWFtcG0gY29sdW1uXCIsYXR0cnM6e3RhYmluZGV4OjB9LG9uOnRoaXMuX19hbVBtRXZlbnRzfSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmtcIixjbGFzczp7YWN0aXZlOnRoaXMuYW19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp7Y2xpY2s6dGhpcy50b2dnbGVBbVBtfX0sW1wiQU1cIl0pXSksdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmtcIixjbGFzczp7YWN0aXZlOiF0aGlzLmFtfX0sW3QoXCJzcGFuXCIse2F0dHJzOnt0YWJpbmRleDotMX0sb246e2NsaWNrOnRoaXMudG9nZ2xlQW1QbX19LFtcIlBNXCJdKV0pXSksbz1bdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJjb2wtYXV0b1wiLHN0eWxlOnt0ZXh0QWxpZ246XCJyaWdodFwifX0sW3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1saW5rXCIsc3R5bGU6e3RleHRBbGlnbjpcInJpZ2h0XCJ9LGNsYXNzOnthY3RpdmU6XCJob3VyXCI9PT10aGlzLnZpZXd9LGF0dHJzOnt0YWJpbmRleDowfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT1nZXRFdmVudEtleSh0KTs0MD09PWl8fDM3PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRIb3VyKGUuaG91ci0xLCEwKSk6Mzg9PT1pfHwzOT09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0SG91cihlLmhvdXIrMSwhMCkpOjEzIT09aSYmMjAhPT1pfHwoZS52aWV3PVwiaG91clwiKX19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp0aGlzLmRpc2FibGU/e306e2NsaWNrOmZ1bmN0aW9uKCl7ZS52aWV3PVwiaG91clwifX19LFt0aGlzLmNvbXB1dGVkRm9ybWF0MjRoP3RoaXMuX19wYWQodGhpcy5ob3VyKTp0aGlzLmhvdXJdKV0pXSksdChcInNwYW5cIix7c3R5bGU6XCJvcGFjaXR5OjAuNjtcIn0sW1wiOlwiXSksdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJjb2wtYXV0byByb3cgbm8td3JhcCBpdGVtcy1jZW50ZXJcIixzdHlsZTp7dGV4dEFsaWduOlwibGVmdFwifX0sW3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1saW5rXCIsc3R5bGU6e3RleHRBbGlnbjpcImxlZnRcIn0sY2xhc3M6e2FjdGl2ZTpcIm1pbnV0ZVwiPT09dGhpcy52aWV3fSxhdHRyczp7dGFiaW5kZXg6MH0sb246e2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9Z2V0RXZlbnRLZXkodCk7NDA9PT1pfHwzNz09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0TWludXRlKGUubWludXRlLTEsITApKTozOD09PWl8fDM5PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRNaW51dGUoZS5taW51dGUrMSwhMCkpOjEzIT09aSYmMjAhPT1pfHwoZS52aWV3PVwibWludXRlXCIpfX19LFt0KFwic3BhblwiLHthdHRyczp7dGFiaW5kZXg6LTF9LG9uOnRoaXMuZGlzYWJsZT97fTp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnZpZXc9XCJtaW51dGVcIn19fSxbdGhpcy5fX3BhZCh0aGlzLm1pbnV0ZSldKV0pLG5dKV07aS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLXRpbWUgcm93IHNjcm9sbCBmbGV4LWNlbnRlclwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtY2xvY2tzdHJpbmcgY29sIHJvdyBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydFwifSxvKV0pKX1yZXR1cm4gaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2xcIn0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1oZWFkZXIgY29sdW1uIG5vLXdyYXAgaXRlbXMtY2VudGVyXCJ9LGkpfSxfX2dldFllYXJWaWV3OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLGk9W3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wtZ3Jvd1wifSldLHM9ZnVuY3Rpb24ocyl7aS5wdXNoKHQoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWJ0biBuby1ib3JkZXItcmFkaXVzXCIsY2xhc3M6e2FjdGl2ZTpzPT09ZS55ZWFyfSxhdHRyczp7dGFiaW5kZXg6LTF9LHByb3BzOntmbGF0OiEwLGRpc2FibGU6IWUuZWRpdGFibGV9LG9uOntjbGljazpmdW5jdGlvbigpe2Uuc2V0WWVhcihzKX19fSxbc10pKX0sbj10aGlzLnllYXJJbnRlcnZhbC5taW47bjw9dGhpcy55ZWFySW50ZXJ2YWwubWF4O24rKylzKG4pO3JldHVybiBpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbC1ncm93XCJ9KSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtdmlldy15ZWFyIGZpdCBjb2x1bW4gbm8td3JhcFwifSxpKX0sX19nZXRNb250aFZpZXc6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsaT1bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbC1ncm93XCJ9KV0scz1mdW5jdGlvbihzKXtpLnB1c2godChRQnRuLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtYnRuIG5vLWJvcmRlci1yYWRpdXNcIixjbGFzczp7YWN0aXZlOnMrMT09PWUubW9udGh9LGF0dHJzOnt0YWJpbmRleDotMX0scHJvcHM6e2ZsYXQ6ITAsZGlzYWJsZTohZS5lZGl0YWJsZX0sb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5zZXRNb250aChzKzEpfX19LFtlLiRxLmkxOG4uZGF0ZS5tb250aHNbc11dKSl9LG49dGhpcy5tb250aEludGVydmFsLm1pbjtuPD10aGlzLm1vbnRoSW50ZXJ2YWwubWF4O24rKylzKG4pO3JldHVybiBpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbC1ncm93XCJ9KSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtdmlldy1tb250aCBmaXQgY29sdW1uIG5vLXdyYXBcIn0saSl9LF9fZ2V0RGF5VmlldzpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxpPVtdLHM9dGhpcy5mYWtlTW9udGg9PT10aGlzLm1vbnRoJiZ0aGlzLmZha2VZZWFyPT09dGhpcy55ZWFyP3RoaXMuZGF5Oi0xLG49MTtuPD10aGlzLmZpbGxlckRheXM7bisrKWkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1maWxsZXJkYXlcIn0pKTtpZih0aGlzLm1pbilmb3IodmFyIG89MTtvPD10aGlzLmJlZm9yZU1pbkRheXM7bysrKWkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciBqdXN0aWZ5LWNlbnRlciBkaXNhYmxlZFwiLGNsYXNzOntcInEtZGF0ZXRpbWUtZGF5LWFjdGl2ZVwiOmUuaXNWYWxpZCYmbz09PXN9fSxbdChcInNwYW5cIixbb10pXSkpO2Zvcih2YXIgcj10aGlzLmRhdGVJbnRlcnZhbCxhPXIubWluLGw9ci5tYXgsYz1mdW5jdGlvbihuKXtpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXIganVzdGlmeS1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIixjbGFzczpbZS5jb2xvciYmbj09PXM/XCJ0ZXh0LVwiK2UuY29sb3I6bnVsbCx7XCJxLWRhdGV0aW1lLWRheS1hY3RpdmVcIjplLmlzVmFsaWQmJm49PT1zLFwicS1kYXRldGltZS1kYXktdG9kYXlcIjpuPT09ZS50b2RheSxkaXNhYmxlZDohZS5lZGl0YWJsZX1dLG9uOntjbGljazpmdW5jdGlvbigpe2Uuc2V0RGF5KG4sITEsZS5mYWtlWWVhcixlLmZha2VNb250aCl9fX0sW3QoXCJzcGFuXCIsW25dKV0pKX0saD1hO2g8PWw7aCsrKWMoaCk7aWYodGhpcy5tYXgpZm9yKHZhciB1PTE7dTw9dGhpcy5hZnRlck1heERheXM7dSsrKWkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciBqdXN0aWZ5LWNlbnRlciBkaXNhYmxlZFwiLGNsYXNzOntcInEtZGF0ZXRpbWUtZGF5LWFjdGl2ZVwiOmUuaXNWYWxpZCYmdStlLm1heERheT09PXN9fSxbdChcInNwYW5cIixbdStlLm1heERheV0pXSkpO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS12aWV3LWRheVwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXJcIn0sW3QoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWFycm93XCIsYXR0cnM6e3RhYmluZGV4Oi0xfSxwcm9wczp7cm91bmQ6ITAsZGVuc2U6ITAsZmxhdDohMCxpY29uOnRoaXMuZGF0ZUFycm93WzBdLHJlcGVhdFRpbWVvdXQ6dGhpcy5fX3JlcGVhdFRpbWVvdXQsZGlzYWJsZTp0aGlzLmJlZm9yZU1pbkRheXM+MHx8dGhpcy5kaXNhYmxlfHx0aGlzLnJlYWRvbmx5fSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLm1vdmVGYWtlTW9udGgoLTEpfX19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtZGF0ZXRpbWUtbW9udGgtc3RhbXBcIn0sW3RoaXMubW9udGhTdGFtcF0pLHQoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWFycm93XCIsYXR0cnM6e3RhYmluZGV4Oi0xfSxwcm9wczp7cm91bmQ6ITAsZGVuc2U6ITAsZmxhdDohMCxpY29uOnRoaXMuZGF0ZUFycm93WzFdLHJlcGVhdFRpbWVvdXQ6dGhpcy5fX3JlcGVhdFRpbWVvdXQsZGlzYWJsZTp0aGlzLmFmdGVyTWF4RGF5cz4wfHx0aGlzLmRpc2FibGV8fHRoaXMucmVhZG9ubHl9LG9uOntjbGljazpmdW5jdGlvbigpe2UubW92ZUZha2VNb250aCgxKX19fSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS13ZWVrZGF5cyByb3cgbm8td3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydFwifSx0aGlzLmhlYWRlckRheU5hbWVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdChcImRpdlwiLFtlXSl9KSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtZGF5cyByb3cgd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBjb250ZW50LWNlbnRlclwifSxpKV0pfSxfX2dldENsb2NrVmlldzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W107aWYoXCJob3VyXCI9PT10aGlzLnZpZXcpe3ZhciBzLG4sbz1cIlwiO3RoaXMuY29tcHV0ZWRGb3JtYXQyNGg/KHM9MCxuPTI0LG89XCIgZm10MjRcIik6KHM9MSxuPTEzKTtmb3IodmFyIHI9ZnVuY3Rpb24ocyl7aS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uXCIrbyxjbGFzczpbXCJxLWRhdGV0aW1lLWNsb2NrLXBvcy1cIitzLHM9PT1lLmhvdXI/XCJhY3RpdmVcIjpcIlwiXSxvbjp7XCIhbW91c2Vkb3duXCI6ZnVuY3Rpb24odCl7cmV0dXJuIGUuX19kcmFnU3RhcnQodCxzKX0sXCIhbW91c2V1cFwiOmZ1bmN0aW9uKHQpe3JldHVybiBlLl9fZHJhZ1N0b3AodCxzKX19fSxbdChcInNwYW5cIixbc3x8XCIwMFwiXSldKSl9LGE9czthPG47YSsrKXIoYSl9ZWxzZSBmb3IodmFyIGw9MDtsPDEyO2wrKyl7dmFyIGM9NSpsO2kucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1jbG9jay1wb3NpdGlvblwiLGNsYXNzOltcInEtZGF0ZXRpbWUtY2xvY2stcG9zLVwiK2wsYz09PWUubWludXRlP1wiYWN0aXZlXCI6XCJcIl19LFt0KFwic3BhblwiLFtjXSldKSl9cmV0dXJuIHQoXCJkaXZcIix7cmVmOlwiY2xvY2tcIixrZXk6XCJjbG9ja1wiK3RoaXMudmlldyxzdGF0aWNDbGFzczpcImNvbHVtbiBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXIganVzdGlmeS1jZW50ZXJcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrIGN1cnNvci1wb2ludGVyXCIsb246e21vdXNlZG93bjp0aGlzLl9fZHJhZ1N0YXJ0LG1vdXNlbW92ZTp0aGlzLl9fZHJhZ01vdmUsbW91c2V1cDp0aGlzLl9fZHJhZ1N0b3AsdG91Y2hzdGFydDp0aGlzLl9fZHJhZ1N0YXJ0LHRvdWNobW92ZTp0aGlzLl9fZHJhZ01vdmUsdG91Y2hlbmQ6dGhpcy5fX2RyYWdTdG9wfX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrLWNpcmNsZSBmdWxsLXdpZHRoIGZ1bGwtaGVpZ2h0XCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1jbG9jay1jZW50ZXJcIn0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrLXBvaW50ZXJcIixzdHlsZTp0aGlzLmNsb2NrUG9pbnRlclN0eWxlfSxbdChcInNwYW5cIildKSxpXSldKV0pfSxfX2dldFZpZXdTZWN0aW9uOmZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLnZpZXcpe2Nhc2VcInllYXJcIjpyZXR1cm4gdGhpcy5fX2dldFllYXJWaWV3KHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIHRoaXMuX19nZXRNb250aFZpZXcodCk7Y2FzZVwiZGF5XCI6cmV0dXJuIHRoaXMuX19nZXREYXlWaWV3KHQpO2Nhc2VcImhvdXJcIjpjYXNlXCJtaW51dGVcIjpyZXR1cm4gdGhpcy5fX2dldENsb2NrVmlldyh0KX19fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9fYW1QbUV2ZW50cz17a2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaT1nZXRFdmVudEtleShlKTtbMTMsMzIsMzcsMzgsMzksNDBdLmluY2x1ZGVzKGkpJiYoc3RvcEFuZFByZXZlbnQoZSksdC50b2dnbGVBbVBtKCkpfX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fc2Nyb2xsVmlldyghMCl9LHJlbmRlcjpmdW5jdGlvbih0KXtpZih0aGlzLmNhblJlbmRlcilyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUgcm93XCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbIXRoaXMubWluaW1hbCYmdGhpcy5fX2dldFRvcFNlY3Rpb24odCl8fHZvaWQgMCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1jb250ZW50IHNjcm9sbFwifSxbdChcImRpdlwiLHtyZWY6XCJzZWxlY3RvclwiLHN0YXRpY0NsYXNzOlwicS1kYXRldGltZS1zZWxlY3RvciByb3cgaXRlbXMtY2VudGVyXCJ9LFt0KFwiZGl2XCIse2NsYXNzOlwiY29sXCJ9KSx0aGlzLl9fZ2V0Vmlld1NlY3Rpb24odCksdChcImRpdlwiLHtjbGFzczpcImNvbFwifSldKV0uY29uY2F0KHRoaXMuJHNsb3RzLmRlZmF1bHQpKV0pfX0sY29udGVudENzcyQxPXttYXhXaWR0aDpcIjk1dndcIixtYXhIZWlnaHQ6XCI5OHZoXCJ9LFFEYXRldGltZT17bmFtZTpcIlFEYXRldGltZVwiLG1peGluczpbRnJhbWVNaXhpbixEaXNwbGF5TW9kZU1peGluLENhblJlbmRlck1peGluXSxwcm9wczpPYmplY3QuYXNzaWduKHt9LGlucHV0LGlubGluZSksd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpeyF0aGlzLmRpc2FibGUmJnRoaXMuaXNQb3BvdmVyJiYodGhpcy5tb2RlbD1jbG9uZSQxKHQpKX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dHJhbnNpdGlvbjpudWxsLG1vZGVsOm51bGwsZm9jdXNlZDohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm1vZGVsPWNsb25lJDEodGhpcy5jb21wdXRlZFZhbHVlKSx0aGlzLmlzUG9wb3Zlcnx8KHRoaXMudHJhbnNpdGlvbj1cInEtbW9kYWxcIil9LGNvbXB1dGVkOntjb21wdXRlZEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvcm1hdD90aGlzLmZvcm1hdDpcImRhdGVcIj09PXRoaXMudHlwZT9cIllZWVkvTU0vRERcIjpcInRpbWVcIj09PXRoaXMudHlwZT9cIkhIOm1tXCI6XCJZWVlZL01NL0REIEhIOm1tOnNzXCJ9LGFjdHVhbFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheVZhbHVlP3RoaXMuZGlzcGxheVZhbHVlOmlzVmFsaWQodGhpcy52YWx1ZSkmJnRoaXMuY2FuUmVuZGVyP2Zvcm1hdERhdGUodGhpcy52YWx1ZSx0aGlzLmNvbXB1dGVkRm9ybWF0LHRoaXMuJHEuaTE4bi5kYXRlKTpcIlwifSxjb21wdXRlZFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGlzVmFsaWQodGhpcy52YWx1ZSk/dGhpcy52YWx1ZTp0aGlzLmRlZmF1bHRWYWx1ZX0sY29tcHV0ZWRDbGVhclZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuY2xlYXJWYWx1ZT90aGlzLmRlZmF1bHRWYWx1ZTp0aGlzLmNsZWFyVmFsdWV9LGlzQ2xlYXJhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdGFibGUmJnRoaXMuY2xlYXJhYmxlJiYhaXNTYW1lRGF0ZSh0aGlzLmNvbXB1dGVkQ2xlYXJWYWx1ZSx0aGlzLnZhbHVlKX0sbW9kYWxCdG5Db2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbG9yfX0sbWV0aG9kczp7dG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5wb3B1cCYmdGhpc1t0aGlzLiRyZWZzLnBvcHVwLnNob3dpbmc/XCJoaWRlXCI6XCJzaG93XCJdKCl9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5kaXNhYmxlKXJldHVybiB0aGlzLl9fc2V0TW9kZWwodGhpcy5jb21wdXRlZFZhbHVlKSx0aGlzLiRyZWZzLnBvcHVwLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLnBvcHVwP3RoaXMuJHJlZnMucG9wdXAuaGlkZSgpOlByb21pc2UucmVzb2x2ZSgpfSxfX2hhbmRsZUtleURvd246ZnVuY3Rpb24odCl7c3dpdGNoKGdldEV2ZW50S2V5KHQpKXtjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIHN0b3BBbmRQcmV2ZW50KHQpLHRoaXMuc2hvdygpO2Nhc2UgODp0aGlzLmlzQ2xlYXJhYmxlJiZ0aGlzLmNsZWFyKCl9fSxfX29uRm9jdXM6ZnVuY3Rpb24oKXtpZighdGhpcy5kaXNhYmxlJiYhdGhpcy5mb2N1c2VkKXt2YXIgdD10aGlzLiRyZWZzLnRhcmdldDt0JiZ0LnNldFZpZXcodGhpcy5kZWZhdWx0VmlldywhMCksdGhpcy5tb2RlbD1jbG9uZSQxKHRoaXMuY29tcHV0ZWRWYWx1ZSksdGhpcy5mb2N1c2VkPSEwLHRoaXMuJGVtaXQoXCJmb2N1c1wiKX19LF9fb25CbHVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5mb2N1c2VkJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlLiRyZWZzLnBvcHVwJiZlLiRyZWZzLnBvcHVwLnNob3dpbmcmJih0PT09ZG9jdW1lbnQuYm9keXx8ZS4kcmVmcy5wb3B1cC4kZWwuY29udGFpbnModCkpfHwoZS5fX29uSGlkZSgpLGUuaGlkZSgpKX0sMSl9LF9fb25IaWRlOmZ1bmN0aW9uKHQsZSl7KHR8fHRoaXMuaXNQb3BvdmVyKSYmdGhpcy5fX3VwZGF0ZSh0KSx0aGlzLmZvY3VzZWQmJihlP3RoaXMuJGVsLmZvY3VzKCk6KHRoaXMuJGVtaXQoXCJibHVyXCIpLHRoaXMuZm9jdXNlZD0hMSkpfSxfX3NldE1vZGVsOmZ1bmN0aW9uKHQsZSl7dGhpcy5tb2RlbD1jbG9uZSQxKHQpLChlfHx0aGlzLmlzUG9wb3ZlcikmJnRoaXMuX191cGRhdGUoZSl9LF9fdXBkYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpc1NhbWVEYXRlKGUubW9kZWwsZS52YWx1ZSl8fChlLiRlbWl0KFwiaW5wdXRcIixlLm1vZGVsKSx0JiZlLiRlbWl0KFwiY2hhbmdlXCIsZS5tb2RlbCkpfSl9LF9fc2Nyb2xsVmlldzpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHJlZnMudGFyZ2V0O3QmJnQuX19zY3JvbGxWaWV3KCl9LF9fZ2V0UGlja2VyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztyZXR1cm5bdChRRGF0ZXRpbWVQaWNrZXIse3JlZjpcInRhcmdldFwiLHN0YXRpY0NsYXNzOlwibm8tYm9yZGVyXCIsY2xhc3M6e1wiZGF0ZXRpbWUtaW9zLW1vZGFsXCI6ITF9LHByb3BzOnt0eXBlOnRoaXMudHlwZSxtaW46dGhpcy5taW4sbWF4OnRoaXMubWF4LGhlYWRlckxhYmVsOnRoaXMuaGVhZGVyTGFiZWwsbWluaW1hbDp0aGlzLm1pbmltYWwsZm9ybWF0TW9kZWw6dGhpcy5mb3JtYXRNb2RlbCxmb3JtYXQyNGg6dGhpcy5mb3JtYXQyNGgsZmlyc3REYXlPZldlZWs6dGhpcy5maXJzdERheU9mV2VlayxkZWZhdWx0Vmlldzp0aGlzLmRlZmF1bHRWaWV3LGNvbG9yOnRoaXMuaW52ZXJ0ZWRMaWdodD9cImdyZXktN1wiOnRoaXMuY29sb3IsZGFyazp0aGlzLmRhcmssdmFsdWU6dGhpcy5tb2RlbCxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LG5vUGFyZW50RmllbGQ6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gaS4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gaS5fX3NldE1vZGVsKHQpfSl9LGNhbkNsb3NlOmZ1bmN0aW9uKCl7aS5pc1BvcG92ZXImJmkuaGlkZSgpfX19LFtlP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJtb2RhbC1idXR0b25zIG1vZGFsLWJ1dHRvbnMtdG9wIHJvdyBmdWxsLXdpZHRoXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sXCJ9KSx0KFFCdG4se3Byb3BzOntjb2xvcjp0aGlzLm1vZGFsQnRuQ29sb3IsZmxhdDohMCxsYWJlbDp0aGlzLmNhbmNlbExhYmVsfHx0aGlzLiRxLmkxOG4ubGFiZWwuY2FuY2VsLG5vUmlwcGxlOiEwfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtpLl9fb25IaWRlKCExLCEwKSxpLmhpZGUoKX19fSksdGhpcy5lZGl0YWJsZT90KFFCdG4se3Byb3BzOntjb2xvcjp0aGlzLm1vZGFsQnRuQ29sb3IsZmxhdDohMCxsYWJlbDp0aGlzLm9rTGFiZWx8fHRoaXMuJHEuaTE4bi5sYWJlbC5zZXQsbm9SaXBwbGU6ITAsZGlzYWJsZTohdGhpcy5tb2RlbH0sb246e2NsaWNrOmZ1bmN0aW9uKCl7aS5fX29uSGlkZSghMCwhMCksaS5oaWRlKCl9fX0pOm51bGxdKTpudWxsXSldfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoUUlucHV0RnJhbWUse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1pbnB1dFwiLHByb3BzOntwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcsZGlzYWJsZTp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxpbnZlcnRlZDp0aGlzLmludmVydGVkLGludmVydGVkTGlnaHQ6dGhpcy5pbnZlcnRlZExpZ2h0LGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6dGhpcy5oaWRlVW5kZXJsaW5lLGJlZm9yZTp0aGlzLmJlZm9yZSxhZnRlcjp0aGlzLmFmdGVyLGNvbG9yOnRoaXMuY29sb3Isbm9QYXJlbnRGaWVsZDp0aGlzLm5vUGFyZW50RmllbGQsZm9jdXNlZDp0aGlzLmZvY3VzZWR8fHRoaXMuJHJlZnMucG9wdXAmJnRoaXMuJHJlZnMucG9wdXAuc2hvd2luZyxmb2N1c2FibGU6ITAsbGVuZ3RoOnRoaXMuYWN0dWFsVmFsdWUubGVuZ3RofSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy50b2dnbGUsZm9jdXM6dGhpcy5fX29uRm9jdXMsYmx1cjp0aGlzLl9fb25CbHVyLGtleWRvd246dGhpcy5fX2hhbmRsZUtleURvd259fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBlbGxpcHNpc1wiLGNsYXNzOnRoaXMuZmFrZUlucHV0Q2xhc3Nlc30sW3RoaXMuZmFrZUlucHV0VmFsdWVdKSx0aGlzLmlzUG9wb3Zlcj90KFFQb3BvdmVyLHtyZWY6XCJwb3B1cFwiLHByb3BzOntjb3ZlcjohMCxrZWVwT25TY3JlZW46ITAsZGlzYWJsZTp0aGlzLmRpc2FibGUsYW5jaG9yQ2xpY2s6ITEsbWF4SGVpZ2h0OlwiMTAwdmhcIn0sc2xvdDpcImFmdGVyXCIsb246e3Nob3c6ZnVuY3Rpb24odCl7ZS5fX29uRm9jdXModCksZS5fX3Njcm9sbFZpZXcoKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBlLl9fb25IaWRlKCEwLCEwKX19fSx0aGlzLl9fZ2V0UGlja2VyKHQpKTp0KFFNb2RhbCx7cmVmOlwicG9wdXBcIixzdGF0aWNDbGFzczpcIndpdGgtYmFja2Ryb3AgcS1kYXRldGltZS1tb2RhbFwiLHByb3BzOntjb250ZW50Q3NzOmNvbnRlbnRDc3MkMSxtaW5pbWl6ZWQ6ITAscG9zaXRpb246bnVsbCx0cmFuc2l0aW9uOnRoaXMudHJhbnNpdGlvbn0sb246e3Nob3c6dGhpcy5fX3Njcm9sbFZpZXcsZGlzbWlzczpmdW5jdGlvbigpe3JldHVybiBlLl9fb25IaWRlKCExLCEwKX19fSx0aGlzLl9fZ2V0UGlja2VyKHQsITApKSx0aGlzLmlzQ2xlYXJhYmxlP3QoUUljb24se3Nsb3Q6XCJhZnRlclwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFtcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5jbGVhcn0sc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIn0pOm51bGwsdChRSWNvbix7c2xvdDpcImFmdGVyXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0LmRyb3Bkb3dufSxzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwifSldKX19LGlucHV0VHlwZXM9W1widGV4dFwiLFwidGV4dGFyZWFcIixcImVtYWlsXCIsXCJzZWFyY2hcIixcInRlbFwiLFwiZmlsZVwiLFwibnVtYmVyXCIsXCJwYXNzd29yZFwiLFwidXJsXCIsXCJ0aW1lXCIsXCJkYXRlXCJdLFFSZXNpemVPYnNlcnZhYmxlPXtuYW1lOlwiUVJlc2l6ZU9ic2VydmFibGVcIixtaXhpbnM6W0NhblJlbmRlck1peGluXSxwcm9wczp7ZGVib3VuY2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTAwfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc09ic2VydmVyP3t9Ont1cmw6dGhpcy4kcS5wbGF0Zm9ybS5pcy5pZT9udWxsOlwiYWJvdXQ6YmxhbmtcIn19LG1ldGhvZHM6e29uUmVzaXplOmZ1bmN0aW9uKCl7aWYodGhpcy50aW1lcj1udWxsLHRoaXMuJGVsJiZ0aGlzLiRlbC5wYXJlbnROb2RlKXt2YXIgdD10aGlzLiRlbC5wYXJlbnROb2RlLGU9e3dpZHRoOnQub2Zmc2V0V2lkdGgsaGVpZ2h0OnQub2Zmc2V0SGVpZ2h0fTtlLndpZHRoPT09dGhpcy5zaXplLndpZHRoJiZlLmhlaWdodD09PXRoaXMuc2l6ZS5oZWlnaHR8fCh0aGlzLnNpemU9ZSx0aGlzLiRlbWl0KFwicmVzaXplXCIsdGhpcy5zaXplKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKHQpeyEwPT09dHx8MD09PXRoaXMuZGVib3VuY2U/dGhpcy5vblJlc2l6ZSgpOnRoaXMudGltZXJ8fCh0aGlzLnRpbWVyPXNldFRpbWVvdXQodGhpcy5vblJlc2l6ZSx0aGlzLmRlYm91bmNlKSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLmNhblJlbmRlciYmIXRoaXMuaGFzT2JzZXJ2ZXIpcmV0dXJuIHQoXCJvYmplY3RcIix7c3R5bGU6dGhpcy5zdHlsZSxhdHRyczp7dGFiaW5kZXg6LTEsdHlwZTpcInRleHQvaHRtbFwiLGRhdGE6dGhpcy51cmwsXCJhcmlhLWhpZGRlblwiOiEwfSxvbjp7bG9hZDpmdW5jdGlvbigpe2UuJGVsLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0Vmlldy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsZS50cmlnZ2VyLGxpc3Rlbk9wdHMucGFzc2l2ZSksZS50cmlnZ2VyKCEwKX19fSl9LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMuc2l6ZT17d2lkdGg6LTEsaGVpZ2h0Oi0xfSxpc1NTUnx8KHRoaXMuaGFzT2JzZXJ2ZXI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJlc2l6ZU9ic2VydmVyLHRoaXMuaGFzT2JzZXJ2ZXJ8fCh0aGlzLnN0eWxlPSh0aGlzLiRxLnBsYXRmb3JtLmlzLmllP1widmlzaWJpbGl0eTpoaWRkZW47XCI6XCJcIikrXCJkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDotMTtcIikpfSxtb3VudGVkOmZ1bmN0aW9uKCl7aWYodGhpcy5oYXNPYnNlcnZlcilyZXR1cm4gdGhpcy5vYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy50cmlnZ2VyKSx2b2lkIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLiRlbC5wYXJlbnROb2RlKTt0aGlzLnRyaWdnZXIoITApLHRoaXMuJHEucGxhdGZvcm0uaXMuaWUmJih0aGlzLnVybD1cImFib3V0OmJsYW5rXCIpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuaGFzT2JzZXJ2ZXI/dGhpcy4kZWwucGFyZW50Tm9kZSYmdGhpcy5vYnNlcnZlci51bm9ic2VydmUodGhpcy4kZWwucGFyZW50Tm9kZSk6dGhpcy4kZWwuY29udGVudERvY3VtZW50JiZ0aGlzLiRlbC5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMudHJpZ2dlcixsaXN0ZW5PcHRzLnBhc3NpdmUpfX0sUUlucHV0PXtuYW1lOlwiUUlucHV0XCIsbWl4aW5zOltGcmFtZU1peGluLElucHV0TWl4aW5dLHByb3BzOnt2YWx1ZTp7cmVxdWlyZWQ6ITB9LHR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJ0ZXh0XCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiBpbnB1dFR5cGVzLmluY2x1ZGVzKHQpfX0sYWxpZ246e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLmluY2x1ZGVzKHQpfX0sbm9QYXNzVG9nZ2xlOkJvb2xlYW4sbnVtZXJpY0tleWJvYXJkVG9nZ2xlOkJvb2xlYW4scmVhZG9ubHk6Qm9vbGVhbixkZWNpbWFsczpOdW1iZXIsc3RlcDpOdW1iZXIsdXBwZXJDYXNlOkJvb2xlYW4sbG93ZXJDYXNlOkJvb2xlYW4saW5pdGlhbFNob3dQYXNzd29yZDpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm57c2hvd1Bhc3M6dGhpcy5pbml0aWFsU2hvd1Bhc3N3b3JkLHNob3dOdW1iZXI6ITAsbW9kZWw6dGhpcy52YWx1ZSx3YXRjaGVyOm51bGwsYXV0b2ZpbGxlZDohMSxzaGFkb3c6e3ZhbDp0aGlzLm1vZGVsLHNldDp0aGlzLl9fc2V0LHNldE5hdjp0aGlzLl9fc2V0LGxvYWRpbmc6ITEsd2F0Y2hlZDowLGlzRWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdC5lZGl0YWJsZX0saXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGFya30saGFzRm9jdXM6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXQuJHJlZnMuaW5wdXR9LHJlZ2lzdGVyOmZ1bmN0aW9uKCl7dC5zaGFkb3cud2F0Y2hlZCs9MSx0Ll9fd2F0Y2hlclJlZ2lzdGVyKCl9LHVucmVnaXN0ZXI6ZnVuY3Rpb24oKXt0LnNoYWRvdy53YXRjaGVkPU1hdGgubWF4KDAsdC5zaGFkb3cud2F0Y2hlZC0xKSx0Ll9fd2F0Y2hlclVucmVnaXN0ZXIoKX0sZ2V0RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdC4kcmVmcy5pbnB1dH19fX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXBhcnNlRmxvYXQodGhpcy5tb2RlbCksaT1wYXJzZUZsb2F0KHQpOyghdGhpcy5pc051bWJlcnx8dGhpcy5pc051bWJlckVycm9yfHxpc05hTihlKXx8aXNOYU4oaSl8fGUhPT1pKSYmKHRoaXMubW9kZWw9dCksdGhpcy5pc051bWJlckVycm9yPSExLHRoaXMuaXNOZWdaZXJvPSExfSxpc1RleHRhcmVhOmZ1bmN0aW9uKHQpe3RoaXNbdD9cIl9fd2F0Y2hlclJlZ2lzdGVyXCI6XCJfX3dhdGNoZXJVbnJlZ2lzdGVyXCJdKCl9LFwiJGF0dHJzLnJvd3NcIjpmdW5jdGlvbigpe3RoaXMuaXNUZXh0YXJlYSYmdGhpcy5fX3VwZGF0ZUFyZWEoKX19LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57X19pbnB1dDp0aGlzLnNoYWRvd319LGNvbXB1dGVkOntpc051bWJlcjpmdW5jdGlvbigpe3JldHVyblwibnVtYmVyXCI9PT10aGlzLnR5cGV9LGlzUGFzc3dvcmQ6ZnVuY3Rpb24oKXtyZXR1cm5cInBhc3N3b3JkXCI9PT10aGlzLnR5cGV9LGlzVGV4dGFyZWE6ZnVuY3Rpb24oKXtyZXR1cm5cInRleHRhcmVhXCI9PT10aGlzLnR5cGV9LGlzTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRpbmd8fHRoaXMuc2hhZG93LndhdGNoZWQmJnRoaXMuc2hhZG93LmxvYWRpbmd9LGtleWJvYXJkVG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHEucGxhdGZvcm0uaXMubW9iaWxlJiZ0aGlzLmlzTnVtYmVyJiZ0aGlzLm51bWVyaWNLZXlib2FyZFRvZ2dsZX0saW5wdXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNQYXNzd29yZD90aGlzLnNob3dQYXNzJiZ0aGlzLmVkaXRhYmxlP1widGV4dFwiOlwicGFzc3dvcmRcIjp0aGlzLmlzTnVtYmVyP3RoaXMuc2hvd051bWJlcnx8IXRoaXMuZWRpdGFibGU/XCJudW1iZXJcIjpcInRleHRcIjp0aGlzLnR5cGV9LGlucHV0Q2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmFsaWduJiZ0LnB1c2goXCJ0ZXh0LVwiK3RoaXMuYWxpZ24pLHRoaXMuYXV0b2ZpbGxlZCYmdC5wdXNoKFwicS1pbnB1dC1hdXRvZmlsbFwiKSx0fSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMubW9kZWwmJnZvaWQgMCE9PXRoaXMubW9kZWw/KFwiXCIrdGhpcy5tb2RlbCkubGVuZ3RoOjB9LGNvbXB1dGVkQ2xlYXJWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLmNsZWFyVmFsdWU/dGhpcy5pc051bWJlcj9udWxsOlwiXCI6dGhpcy5jbGVhclZhbHVlfSxjb21wdXRlZFN0ZXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGVwfHwodGhpcy5kZWNpbWFscz9NYXRoLnBvdygxMCwtdGhpcy5kZWNpbWFscyk6XCJhbnlcIil9LGZyYW1lUHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm57cHJlZml4OnRoaXMucHJlZml4LHN1ZmZpeDp0aGlzLnN1ZmZpeCxzdGFja0xhYmVsOnRoaXMuc3RhY2tMYWJlbCxmbG9hdExhYmVsOnRoaXMuZmxvYXRMYWJlbCxwbGFjZWhvbGRlcjp0aGlzLnBsYWNlaG9sZGVyLGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcsZGlzYWJsZTp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxpbnZlcnRlZDp0aGlzLmludmVydGVkLGludmVydGVkTGlnaHQ6dGhpcy5pbnZlcnRlZExpZ2h0LGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6dGhpcy5oaWRlVW5kZXJsaW5lLGJlZm9yZTp0aGlzLmJlZm9yZSxhZnRlcjp0aGlzLmFmdGVyLGNvbG9yOnRoaXMuY29sb3Isbm9QYXJlbnRGaWVsZDp0aGlzLm5vUGFyZW50RmllbGQsZm9jdXNlZDp0aGlzLmZvY3VzZWQsbGVuZ3RoOnRoaXMuYXV0b2ZpbGxlZCt0aGlzLmxlbmd0aH19fSxtZXRob2RzOnt0b2dnbGVQYXNzOmZ1bmN0aW9uKCl7dGhpcy5zaG93UGFzcz0hdGhpcy5zaG93UGFzcyxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5mb2N1cygpfSx0b2dnbGVOdW1iZXI6ZnVuY3Rpb24oKXt0aGlzLnNob3dOdW1iZXI9IXRoaXMuc2hvd051bWJlcixjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5mb2N1cygpfSxfX2NsZWFyVGltZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dCh0LnRpbWVyKX0pfSxfX29uQW5pbWF0aW9uU3RhcnQ6ZnVuY3Rpb24odCl7aWYoMD09PXQuYW5pbWF0aW9uTmFtZS5pbmRleE9mKFwid2Via2l0LWF1dG9maWxsLVwiKSl7dmFyIGU9XCJ3ZWJraXQtYXV0b2ZpbGwtb25cIj09PXQuYW5pbWF0aW9uTmFtZTtpZihlIT09dGhpcy5hdXRvZmlsbGVkKXJldHVybiB0LnZhbHVlPXRoaXMuYXV0b2ZpbGxlZD1lLHQuZWw9dGhpcyx0aGlzLiRlbWl0KFwiYXV0b2ZpbGxcIix0KX19LF9fc2V0TW9kZWw6ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZm9jdXMoKSx0aGlzLl9fc2V0KHRoaXMuaXNOdW1iZXImJjA9PT10P3Q6dHx8KHRoaXMuaXNOdW1iZXI/bnVsbDpcIlwiKSwhMCl9LF9fc2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxzPXQmJnQudGFyZ2V0P3QudGFyZ2V0LnZhbHVlOnQ7aWYodGhpcy5pc051bWJlcil7dGhpcy5pc05lZ1plcm89MS9zPT0tMS8wO3ZhciBuPXRoaXMuaXNOZWdaZXJvPy0wOnM7aWYodGhpcy5tb2RlbD1zLHM9cGFyc2VGbG9hdChzKSxpc05hTihzKXx8dGhpcy5pc05lZ1plcm8pcmV0dXJuIHRoaXMuaXNOdW1iZXJFcnJvcj0hMCx2b2lkKGUmJih0aGlzLiRlbWl0KFwiaW5wdXRcIixuKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe1N0cmluZygxL24pIT09U3RyaW5nKDEvaS52YWx1ZSkmJmkuJGVtaXQoXCJjaGFuZ2VcIixuKX0pKSk7dGhpcy5pc051bWJlckVycm9yPSExLE51bWJlci5pc0ludGVnZXIodGhpcy5kZWNpbWFscykmJihzPXBhcnNlRmxvYXQocy50b0ZpeGVkKHRoaXMuZGVjaW1hbHMpKSl9ZWxzZSB0aGlzLmxvd2VyQ2FzZT9zPXMudG9Mb3dlckNhc2UoKTp0aGlzLnVwcGVyQ2FzZSYmKHM9cy50b1VwcGVyQ2FzZSgpKSx0aGlzLm1vZGVsPXM7dGhpcy4kZW1pdChcImlucHV0XCIscyksZSYmdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeShzKSE9PUpTT04uc3RyaW5naWZ5KGkudmFsdWUpJiZpLiRlbWl0KFwiY2hhbmdlXCIscyl9KX0sX191cGRhdGVBcmVhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kcmVmcy5zaGFkb3csZT10aGlzLiRyZWZzLmlucHV0O2lmKHQmJmUpe3ZhciBpPXQuc2Nyb2xsSGVpZ2h0LHM9YmV0d2VlbihpLHQub2Zmc2V0SGVpZ2h0LHRoaXMubWF4SGVpZ2h0fHxpKTtlLnN0eWxlLmhlaWdodD1zK1wicHhcIixlLnN0eWxlLm92ZXJmbG93WT10aGlzLm1heEhlaWdodCYmczxpP1wic2Nyb2xsXCI6XCJoaWRkZW5cIn19LF9fd2F0Y2hlcjpmdW5jdGlvbih0KXt0aGlzLmlzVGV4dGFyZWEmJnRoaXMuX191cGRhdGVBcmVhKCksdGhpcy5zaGFkb3cud2F0Y2hlZCYmKHRoaXMuc2hhZG93LnZhbD10KX0sX193YXRjaGVyUmVnaXN0ZXI6ZnVuY3Rpb24oKXt0aGlzLndhdGNoZXJ8fCh0aGlzLndhdGNoZXI9dGhpcy4kd2F0Y2goXCJtb2RlbFwiLHRoaXMuX193YXRjaGVyKSl9LF9fd2F0Y2hlclVucmVnaXN0ZXI6ZnVuY3Rpb24odCl7dGhpcy53YXRjaGVyJiYodHx8IXRoaXMuaXNUZXh0YXJlYSYmIXRoaXMuc2hhZG93LndhdGNoZWQpJiYodGhpcy53YXRjaGVyKCksdGhpcy53YXRjaGVyPW51bGwpfSxfX2dldFRleHRhcmVhOmZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5hc3NpZ24oe3Jvd3M6MX0sdGhpcy4kYXR0cnMpO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHJvdyByZWxhdGl2ZS1wb3NpdGlvblwifSxbdChRUmVzaXplT2JzZXJ2YWJsZSx7b246e3Jlc2l6ZTp0aGlzLl9fdXBkYXRlQXJlYX19KSx0KFwidGV4dGFyZWFcIix7cmVmOlwic2hhZG93XCIsc3RhdGljQ2xhc3M6XCJjb2wgcS1pbnB1dC10YXJnZXQgcS1pbnB1dC1zaGFkb3cgYWJzb2x1dGUtdG9wXCIsZG9tUHJvcHM6e3ZhbHVlOnRoaXMubW9kZWx9LGF0dHJzOmV9KSx0KFwidGV4dGFyZWFcIix7cmVmOlwiaW5wdXRcIixzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBxLWlucHV0LWFyZWFcIixhdHRyczpPYmplY3QuYXNzaWduKHt9LGUse3BsYWNlaG9sZGVyOnRoaXMuaW5wdXRQbGFjZWhvbGRlcixkaXNhYmxlZDp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seX0pLGRvbVByb3BzOnt2YWx1ZTp0aGlzLm1vZGVsfSxvbjp7aW5wdXQ6dGhpcy5fX3NldCxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbklucHV0Qmx1cixrZXlkb3duOnRoaXMuX19vbktleWRvd24sa2V5dXA6dGhpcy5fX29uS2V5dXAscGFzdGU6dGhpcy5fX29uUGFzdGV9fSldKX0sX19nZXRJbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdChcImlucHV0XCIse3JlZjpcImlucHV0XCIsc3RhdGljQ2xhc3M6XCJjb2wgcS1pbnB1dC10YXJnZXQgcS1uby1pbnB1dC1zcGlubmVyIGVsbGlwc2lzXCIsY2xhc3M6dGhpcy5pbnB1dENsYXNzZXMsYXR0cnM6T2JqZWN0LmFzc2lnbih7fSx0aGlzLiRhdHRycyx7dHlwZTp0aGlzLmlucHV0VHlwZSxwbGFjZWhvbGRlcjp0aGlzLmlucHV0UGxhY2Vob2xkZXIsZGlzYWJsZWQ6dGhpcy5kaXNhYmxlLHJlYWRvbmx5OnRoaXMucmVhZG9ubHksc3RlcDp0aGlzLmNvbXB1dGVkU3RlcH0pLGRvbVByb3BzOnt2YWx1ZTp0aGlzLm1vZGVsfSxvbjp7aW5wdXQ6dGhpcy5fX3NldCxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbklucHV0Qmx1cixrZXlkb3duOnRoaXMuX19vbktleWRvd24sa2V5dXA6dGhpcy5fX29uS2V5dXAscGFzdGU6dGhpcy5fX29uUGFzdGUsYW5pbWF0aW9uc3RhcnQ6dGhpcy5fX29uQW5pbWF0aW9uU3RhcnR9fSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5fX3VwZGF0ZUFyZWE9ZnJhbWVEZWJvdW5jZSh0aGlzLl9fdXBkYXRlQXJlYSksdGhpcy5pc1RleHRhcmVhJiYodGhpcy5fX3VwZGF0ZUFyZWEoKSx0aGlzLl9fd2F0Y2hlclJlZ2lzdGVyKCkpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX3dhdGNoZXJVbnJlZ2lzdGVyKCEwKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFFJbnB1dEZyYW1lLHtzdGF0aWNDbGFzczpcInEtaW5wdXRcIixwcm9wczp0aGlzLmZyYW1lUHJvcHMsb246e2NsaWNrOnRoaXMuX19vbkNsaWNrLGZvY3VzOnRoaXMuX19vbkZvY3VzLHBhc3RlOnRoaXMuX19vblBhc3RlfX0sW10uY29uY2F0KHRoaXMuJHNsb3RzLmJlZm9yZSkuY29uY2F0KFt0aGlzLmlzVGV4dGFyZWE/dGhpcy5fX2dldFRleHRhcmVhKHQpOnRoaXMuX19nZXRJbnB1dCh0KSwhdGhpcy5kaXNhYmxlJiZ0aGlzLmlzUGFzc3dvcmQmJiF0aGlzLm5vUGFzc1RvZ2dsZSYmKHRoaXMuaW5pdGlhbFNob3dQYXNzd29yZHx8dGhpcy5sZW5ndGgpJiZ0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFt0aGlzLnNob3dQYXNzP1wic2hvd1Bhc3NcIjpcImhpZGVQYXNzXCJdfSxuYXRpdmVPbjp7bW91c2Vkb3duOnRoaXMuX19jbGVhclRpbWVyLHRvdWNoc3RhcnQ6dGhpcy5fX2NsZWFyVGltZXIsY2xpY2s6dGhpcy50b2dnbGVQYXNzfX0pfHx2b2lkIDAsdGhpcy5lZGl0YWJsZSYmdGhpcy5rZXlib2FyZFRvZ2dsZSYmdChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uaW5wdXRbdGhpcy5zaG93TnVtYmVyP1wic2hvd051bWJlclwiOlwiaGlkZU51bWJlclwiXX0sbmF0aXZlT246e21vdXNlZG93bjp0aGlzLl9fY2xlYXJUaW1lcix0b3VjaHN0YXJ0OnRoaXMuX19jbGVhclRpbWVyLGNsaWNrOnRoaXMudG9nZ2xlTnVtYmVyfX0pfHx2b2lkIDAsdGhpcy5pc0NsZWFyYWJsZSYmdChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uaW5wdXRbXCJjbGVhclwiKyh0aGlzLmlzSW52ZXJ0ZWQ/XCJJbnZlcnRlZFwiOlwiXCIpXX0sbmF0aXZlT246e21vdXNlZG93bjp0aGlzLl9fY2xlYXJUaW1lcix0b3VjaHN0YXJ0OnRoaXMuX19jbGVhclRpbWVyLGNsaWNrOnRoaXMuY2xlYXJ9fSl8fHZvaWQgMCx0aGlzLmlzTG9hZGluZyYmKHRoaXMuJHNsb3RzLmxvYWRpbmc/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHNsb3Q6XCJhZnRlclwifSx0aGlzLiRzbG90cy5sb2FkaW5nKTp0KFFTcGlubmVyLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntzaXplOlwiMjRweFwifX0pKXx8dm9pZCAwXSkuY29uY2F0KHRoaXMuJHNsb3RzLmFmdGVyKS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiYWJzb2x1dGUtZnVsbCBuby1wb2ludGVyLWV2ZW50c1wiLHNsb3Q6XCJhZnRlclwifSx0aGlzLiRzbG90cy5kZWZhdWx0KTp2b2lkIDApKX19LFFSYWRpbz17bmFtZTpcIlFSYWRpb1wiLG1peGluczpbT3B0aW9uTWl4aW5dLHByb3BzOnt2YWw6e3JlcXVpcmVkOiEwfX0sY29tcHV0ZWQ6e2lzVHJ1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlPT09dGhpcy52YWx9fSxtZXRob2RzOnt0b2dnbGU6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0hMCksdGhpcy5kaXNhYmxlfHx0aGlzLnJlYWRvbmx5fHwodCYmc3RvcEFuZFByZXZlbnQodCksZSYmdGhpcy4kZWwuYmx1cigpLHRoaXMuaXNUcnVlfHx0aGlzLl9fdXBkYXRlKHRoaXMudmFsKSl9LF9fZ2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm5bdChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLXJhZGlvLXVuY2hlY2tlZCBjdXJzb3ItcG9pbnRlciBhYnNvbHV0ZS1mdWxsXCIscHJvcHM6e25hbWU6dGhpcy51bmNoZWNrZWRJY29ufHx0aGlzLiRxLmljb24ucmFkaW8udW5jaGVja2VkLm1hdH19KSx0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtcmFkaW8tY2hlY2tlZCBjdXJzb3ItcG9pbnRlciBhYnNvbHV0ZS1mdWxsXCIscHJvcHM6e25hbWU6dGhpcy5jaGVja2VkSWNvbnx8dGhpcy4kcS5pY29uLnJhZGlvLmNoZWNrZWQubWF0fX0pLHQoXCJkaXZcIix7cmVmOlwicmlwcGxlXCIsc3RhdGljQ2xhc3M6XCJxLXJhZGlhbC1yaXBwbGVcIn0pXX19LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX19rZWJhYlRhZz1cInEtcmFkaW9cIn19LFFUb2dnbGU9e25hbWU6XCJRVG9nZ2xlXCIsbWl4aW5zOltDaGVja2JveE1peGluLE9wdGlvbk1peGluXSxwcm9wczp7aWNvbjpTdHJpbmd9LGNvbXB1dGVkOntjdXJyZW50SWNvbjpmdW5jdGlvbigpe3JldHVybih0aGlzLmlzVHJ1ZT90aGlzLmNoZWNrZWRJY29uOnRoaXMudW5jaGVja2VkSWNvbil8fHRoaXMuaWNvbn0saWNvbkNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNUcnVlP1wid2hpdGVcIjpcImRhcmtcIn0sYmFzZUNsYXNzOmZ1bmN0aW9uKCl7fX0sbWV0aG9kczp7X19zd2lwZTpmdW5jdGlvbih0KXtcImxlZnRcIj09PXQuZGlyZWN0aW9uP3RoaXMuaXNUcnVlJiZ0aGlzLnRvZ2dsZSgpOlwicmlnaHRcIj09PXQuZGlyZWN0aW9uJiZ0aGlzLmlzRmFsc2UmJnRoaXMudG9nZ2xlKCl9LF9fZ2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm5bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9nZ2xlLWJhc2VcIixjbGFzczp0aGlzLmJhc2VDbGFzc30pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRvZ2dsZS1oYW5kbGUgcm93IGZsZXgtY2VudGVyXCJ9LFt0aGlzLmN1cnJlbnRJY29uP3QoUUljb24se3N0YXRpY0NsYXNzOlwicS10b2dnbGUtaWNvblwiLHByb3BzOntuYW1lOnRoaXMuY3VycmVudEljb24sY29sb3I6dGhpcy5pY29uQ29sb3J9fSk6bnVsbCx0KFwiZGl2XCIse3JlZjpcInJpcHBsZVwiLHN0YXRpY0NsYXNzOlwicS1yYWRpYWwtcmlwcGxlXCJ9KV0pXX19LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX19rZWJhYlRhZz1cInEtdG9nZ2xlXCJ9fSxjb21wb25lbnRzPXtyYWRpbzpRUmFkaW8sY2hlY2tib3g6UUNoZWNrYm94LHRvZ2dsZTpRVG9nZ2xlfSxRT3B0aW9uR3JvdXA9e25hbWU6XCJRT3B0aW9uR3JvdXBcIixtaXhpbnM6W1BhcmVudEZpZWxkTWl4aW5dLHByb3BzOnt2YWx1ZTp7cmVxdWlyZWQ6ITB9LHR5cGU6e2RlZmF1bHQ6XCJyYWRpb1wiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJyYWRpb1wiLFwiY2hlY2tib3hcIixcInRvZ2dsZVwiXS5pbmNsdWRlcyh0KX19LGNvbG9yOlN0cmluZyxrZWVwQ29sb3I6Qm9vbGVhbixkYXJrOkJvb2xlYW4sb3B0aW9uczp7dHlwZTpBcnJheSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuXCJ2YWx1ZVwiaW4gdCYmXCJsYWJlbFwiaW4gdH0pfX0sbGVmdExhYmVsOkJvb2xlYW4saW5saW5lOkJvb2xlYW4sZGlzYWJsZTpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW59LGNvbXB1dGVkOntjb21wb25lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29tcG9uZW50c1t0aGlzLnR5cGVdfSxtb2RlbDpmdW5jdGlvbigpe3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuc2xpY2UoKTp0aGlzLnZhbHVlfSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZT9cInJhZGlvXCI9PT10aGlzLnR5cGU/MTp0aGlzLnZhbHVlLmxlbmd0aDowfSxfX25lZWRzQm9yZGVyOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSxtZXRob2RzOntfX29uRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KFwiZm9jdXNcIil9LF9fb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdChcImJsdXJcIil9LF9fdXBkYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy4kZW1pdChcImlucHV0XCIsdCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsdCl9KX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD1BcnJheS5pc0FycmF5KHRoaXMudmFsdWUpO1wicmFkaW9cIj09PXRoaXMudHlwZT90JiZjb25zb2xlLmVycm9yKFwicS1vcHRpb24tZ3JvdXA6IG1vZGVsIHNob3VsZCBub3QgYmUgYXJyYXlcIik6dHx8Y29uc29sZS5lcnJvcihcInEtb3B0aW9uLWdyb3VwOiBtb2RlbCBzaG91bGQgYmUgYXJyYXkgaW4geW91ciBjYXNlXCIpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtb3B0aW9uLWdyb3VwIGdyb3VwXCIsY2xhc3M6e1wicS1vcHRpb24tZ3JvdXAtaW5saW5lLW9wdHNcIjp0aGlzLmlubGluZX19LHRoaXMub3B0aW9ucy5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIHQoXCJkaXZcIixbdChlLmNvbXBvbmVudCx7cHJvcHM6e3ZhbHVlOmUudmFsdWUsdmFsOmkudmFsdWUscmVhZG9ubHk6ZS5yZWFkb25seXx8aS5yZWFkb25seSxkaXNhYmxlOmUuZGlzYWJsZXx8aS5kaXNhYmxlLGxhYmVsOmkubGFiZWwsbGVmdExhYmVsOmUubGVmdExhYmVsfHxpLmxlZnRMYWJlbCxjb2xvcjppLmNvbG9yfHxlLmNvbG9yLGNoZWNrZWRJY29uOmkuY2hlY2tlZEljb24sdW5jaGVja2VkSWNvbjppLnVuY2hlY2tlZEljb24sZGFyazppLmRhcmt8fGUuZGFyayxrZWVwQ29sb3I6aS5rZWVwQ29sb3J8fGUua2VlcENvbG9yfSxvbjp7aW5wdXQ6ZS5fX3VwZGF0ZSxmb2N1czplLl9fb25Gb2N1cyxibHVyOmUuX19vbkJsdXJ9fSldKX0pKX19LFFEaWFsb2c9e25hbWU6XCJRRGlhbG9nXCIscHJvcHM6e3ZhbHVlOkJvb2xlYW4sdGl0bGU6U3RyaW5nLG1lc3NhZ2U6U3RyaW5nLHByb21wdDpPYmplY3Qsb3B0aW9uczpPYmplY3Qsb2s6e3R5cGU6W1N0cmluZyxPYmplY3QsQm9vbGVhbl0sZGVmYXVsdDohMH0sY2FuY2VsOltTdHJpbmcsT2JqZWN0LEJvb2xlYW5dLHN0YWNrQnV0dG9uczpCb29sZWFuLHByZXZlbnRDbG9zZTpCb29sZWFuLG5vQmFja2Ryb3BEaXNtaXNzOkJvb2xlYW4sbm9Fc2NEaXNtaXNzOkJvb2xlYW4sbm9SZWZvY3VzOkJvb2xlYW4scG9zaXRpb246U3RyaW5nLGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bXSxzPXRoaXMuJHNsb3RzLnRpdGxlfHx0aGlzLnRpdGxlLG49dGhpcy4kc2xvdHMubWVzc2FnZXx8dGhpcy5tZXNzYWdlO3JldHVybiBzJiZpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm1vZGFsLWhlYWRlclwifSxbc10pKSxuJiZpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm1vZGFsLWJvZHkgbW9kYWwtbWVzc2FnZSBtb2RhbC1zY3JvbGxcIn0sW25dKSksKHRoaXMuaGFzRm9ybXx8dGhpcy4kc2xvdHMuYm9keSkmJmkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYm9keSBtb2RhbC1zY3JvbGxcIn0sdGhpcy5oYXNGb3JtP3RoaXMucHJvbXB0P3RoaXMuX19nZXRQcm9tcHQodCk6dGhpcy5fX2dldE9wdGlvbnModCk6W3RoaXMuJHNsb3RzLmJvZHldKSksdGhpcy4kc2NvcGVkU2xvdHMuYnV0dG9ucz9pLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm1vZGFsLWJ1dHRvbnNcIixjbGFzczp0aGlzLmJ1dHRvbkNsYXNzfSxbdGhpcy4kc2NvcGVkU2xvdHMuYnV0dG9ucyh7b2s6dGhpcy5fX29uT2ssY2FuY2VsOnRoaXMuX19vbkNhbmNlbH0pXSkpOih0aGlzLm9rfHx0aGlzLmNhbmNlbCkmJmkucHVzaCh0aGlzLl9fZ2V0QnV0dG9ucyh0KSksdChRTW9kYWwse3JlZjpcIm1vZGFsXCIscHJvcHM6e3ZhbHVlOnRoaXMudmFsdWUsbWluaW1pemVkOiEwLG5vQmFja2Ryb3BEaXNtaXNzOnRoaXMubm9CYWNrZHJvcERpc21pc3N8fHRoaXMucHJldmVudENsb3NlLG5vRXNjRGlzbWlzczp0aGlzLm5vRXNjRGlzbWlzc3x8dGhpcy5wcmV2ZW50Q2xvc2Usbm9SZWZvY3VzOnRoaXMubm9SZWZvY3VzLHBvc2l0aW9uOnRoaXMucG9zaXRpb259LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLiRlbWl0KFwiaW5wdXRcIix0KX0sc2hvdzpmdW5jdGlvbigpe2lmKGUuJHEucGxhdGZvcm0uaXMuZGVza3RvcCl7dmFyIHQ7aWYoKGUucHJvbXB0fHxlLm9wdGlvbnMpJiYodD1lLnByb21wdD9lLiRyZWZzLm1vZGFsLiRlbC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIklOUFVUXCIpOmUuJHJlZnMubW9kYWwuJGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJxLW9wdGlvblwiKSkubGVuZ3RoKXJldHVybiB0WzBdLmZvY3VzKCksdm9pZCBlLiRlbWl0KFwic2hvd1wiKTsodD1lLiRyZWZzLm1vZGFsLiRlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicS1idG5cIikpLmxlbmd0aCYmdFt0Lmxlbmd0aC0xXS5mb2N1cygpLGUuJGVtaXQoXCJzaG93XCIpfWVsc2UgZS4kZW1pdChcInNob3dcIil9LGhpZGU6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiaGlkZVwiKX0sZGlzbWlzczpmdW5jdGlvbigpe2UuJGVtaXQoXCJjYW5jZWxcIil9LFwiZXNjYXBlLWtleVwiOmZ1bmN0aW9uKCl7ZS4kZW1pdChcImVzY2FwZS1rZXlcIil9fX0saSl9LGNvbXB1dGVkOntoYXNGb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvbXB0fHx0aGlzLm9wdGlvbnN9LG9rTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4hMD09PXRoaXMub2s/dGhpcy4kcS5pMThuLmxhYmVsLm9rOnRoaXMub2t9LGNhbmNlbExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuITA9PT10aGlzLmNhbmNlbD90aGlzLiRxLmkxOG4ubGFiZWwuY2FuY2VsOnRoaXMuY2FuY2VsfSxidXR0b25DbGFzczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YWNrQnV0dG9ucz9cImNvbHVtblwiOlwicm93XCJ9LG9rUHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHRoaXMub2spPT09dGhpcy5vaz9PYmplY3QuYXNzaWduKHtjb2xvcjp0aGlzLmNvbG9yLGxhYmVsOnRoaXMuJHEuaTE4bi5sYWJlbC5vayxub1JpcHBsZTohMH0sdGhpcy5vayk6e2NvbG9yOnRoaXMuY29sb3IsZmxhdDohMCxsYWJlbDp0aGlzLm9rTGFiZWwsbm9SaXBwbGU6ITB9fSxjYW5jZWxQcm9wczpmdW5jdGlvbigpe3JldHVybiBPYmplY3QodGhpcy5jYW5jZWwpPT09dGhpcy5jYW5jZWw/T2JqZWN0LmFzc2lnbih7Y29sb3I6dGhpcy5jb2xvcixsYWJlbDp0aGlzLiRxLmkxOG4ubGFiZWwuY2FuY2VsLG5vUmlwcGxlOiEwfSx0aGlzLmNhbmNlbCk6e2NvbG9yOnRoaXMuY29sb3IsZmxhdDohMCxsYWJlbDp0aGlzLmNhbmNlbExhYmVsLG5vUmlwcGxlOiEwfX19LG1ldGhvZHM6e3Nob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5tb2RhbC5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLiRyZWZzLm1vZGFsP3RoaXMuJHJlZnMubW9kYWwuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5oYXNGb3JtP2Nsb25lKHQuX19nZXREYXRhKCkpOnZvaWQgMH0pOlByb21pc2UucmVzb2x2ZSgpfSxfX2dldFByb21wdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVyblt0KFFJbnB1dCx7c3R5bGU6XCJtYXJnaW4tYm90dG9tOiAxMHB4XCIscHJvcHM6e3ZhbHVlOnRoaXMucHJvbXB0Lm1vZGVsLHR5cGU6dGhpcy5wcm9tcHQudHlwZXx8XCJ0ZXh0XCIsY29sb3I6dGhpcy5jb2xvcixub1Bhc3NUb2dnbGU6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLnByb21wdC5tb2RlbD10fSxrZXl1cDpmdW5jdGlvbih0KXsxMz09PWdldEV2ZW50S2V5KHQpJiZlLl9fb25PaygpfX19KV19LF9fZ2V0T3B0aW9uczpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVyblt0KFFPcHRpb25Hcm91cCx7cHJvcHM6e3ZhbHVlOnRoaXMub3B0aW9ucy5tb2RlbCx0eXBlOnRoaXMub3B0aW9ucy50eXBlLGNvbG9yOnRoaXMuY29sb3IsaW5saW5lOnRoaXMub3B0aW9ucy5pbmxpbmUsb3B0aW9uczp0aGlzLm9wdGlvbnMuaXRlbXN9LG9uOntjaGFuZ2U6ZnVuY3Rpb24odCl7ZS5vcHRpb25zLm1vZGVsPXR9fX0pXX0sX19nZXRCdXR0b25zOmZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB0aGlzLmNhbmNlbCYmZS5wdXNoKHQoUUJ0bix7cHJvcHM6dGhpcy5jYW5jZWxQcm9wcyxvbjp7Y2xpY2s6dGhpcy5fX29uQ2FuY2VsfX0pKSx0aGlzLm9rJiZlLnB1c2godChRQnRuLHtwcm9wczp0aGlzLm9rUHJvcHMsb246e2NsaWNrOnRoaXMuX19vbk9rfX0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYnV0dG9uc1wiLGNsYXNzOnRoaXMuYnV0dG9uQ2xhc3N9LGUpfSxfX29uT2s6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmhpZGUoKS50aGVuKGZ1bmN0aW9uKGUpe3QuJGVtaXQoXCJva1wiLGUpfSl9LF9fb25DYW5jZWw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmhpZGUoKS50aGVuKGZ1bmN0aW9uKCl7dC4kZW1pdChcImNhbmNlbFwiKX0pfSxfX2dldERhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9tcHQ/dGhpcy5wcm9tcHQubW9kZWw6dGhpcy5vcHRpb25zP3RoaXMub3B0aW9ucy5tb2RlbDp2b2lkIDB9fX07ZnVuY3Rpb24gZGVib3VuY2UodCxlLGkpe3ZhciBzO2Z1bmN0aW9uIG4oKXtmb3IodmFyIG49dGhpcyxvPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KW9bcl09YXJndW1lbnRzW3JdO2NsZWFyVGltZW91dChzKSxpJiYhcyYmdC5hcHBseSh0aGlzLG8pLHM9c2V0VGltZW91dChmdW5jdGlvbigpe3M9bnVsbCxpfHx0LmFwcGx5KG4sbyl9LGUpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0yNTApLG4uY2FuY2VsPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHMpfSxufXZhciBRVG9vbHRpcD17bmFtZTpcIlFUb29sdGlwXCIsbWl4aW5zOltNb2RlbFRvZ2dsZU1peGluLENhblJlbmRlck1peGluXSxwcm9wczp7YW5jaG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwidG9wIG1pZGRsZVwiLHZhbGlkYXRvcjpwb3NpdGlvblZhbGlkYXRvcn0sc2VsZjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImJvdHRvbSBtaWRkbGVcIix2YWxpZGF0b3I6cG9zaXRpb25WYWxpZGF0b3J9LG9mZnNldDp7dHlwZTpBcnJheSx2YWxpZGF0b3I6b2Zmc2V0VmFsaWRhdG9yfSxkZWxheTp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxtYXhIZWlnaHQ6U3RyaW5nLGRpc2FibGU6Qm9vbGVhbn0sd2F0Y2g6eyRyb3V0ZTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpfX0sY29tcHV0ZWQ6e2FuY2hvck9yaWdpbjpmdW5jdGlvbigpe3JldHVybiBwYXJzZVBvc2l0aW9uKHRoaXMuYW5jaG9yKX0sc2VsZk9yaWdpbjpmdW5jdGlvbigpe3JldHVybiBwYXJzZVBvc2l0aW9uKHRoaXMuc2VsZil9fSxtZXRob2RzOntfX3Nob3c6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCksdGhpcy5zY3JvbGxUYXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHRoaXMuYW5jaG9yRWwpLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLmhpZGUsbGlzdGVuT3B0cy5wYXNzaXZlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMuX19kZWJvdW5jZWRVcGRhdGVQb3NpdGlvbixsaXN0ZW5PcHRzLnBhc3NpdmUpLHRoaXMuJHEucGxhdGZvcm0uaXMubW9iaWxlJiZkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuaGlkZSwhMCksdGhpcy5fX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5zaG93UHJvbWlzZSYmdGhpcy5zaG93UHJvbWlzZVJlc29sdmUoKX0sX19oaWRlOmZ1bmN0aW9uKCl7dGhpcy5fX2NsZWFudXAoKSx0aGlzLmhpZGVQcm9taXNlJiZ0aGlzLmhpZGVQcm9taXNlUmVzb2x2ZSgpfSxfX2NsZWFudXA6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuaGlkZSxsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fX2RlYm91bmNlZFVwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy4kZWwucmVtb3ZlKCksdGhpcy4kcS5wbGF0Zm9ybS5pcy5tb2JpbGUmJmRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5oaWRlLCEwKX0sX191cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3NldFBvc2l0aW9uKHtlbDp0aGlzLiRlbCxhbmltYXRlOiEwLG9mZnNldDp0aGlzLm9mZnNldCxhbmNob3JFbDp0aGlzLmFuY2hvckVsLGFuY2hvck9yaWdpbjp0aGlzLmFuY2hvck9yaWdpbixzZWxmT3JpZ2luOnRoaXMuc2VsZk9yaWdpbixtYXhIZWlnaHQ6dGhpcy5tYXhIZWlnaHR9KX0sX19kZWxheVNob3c6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj1zZXRUaW1lb3V0KHRoaXMuc2hvdyx0aGlzLmRlbGF5KX0sX19kZWxheUhpZGU6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5oaWRlKCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7aWYodGhpcy5jYW5SZW5kZXIpcmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRvb2x0aXAgYW5pbWF0ZS1wb3B1cFwifSxbdChcImRpdlwiLHRoaXMuJHNsb3RzLmRlZmF1bHQpXSl9LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9fZGVib3VuY2VkVXBkYXRlUG9zaXRpb249ZGVib3VuY2UoZnVuY3Rpb24oKXt0Ll9fdXBkYXRlUG9zaXRpb24oKX0sNzApfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QuJGVsLm9mZnNldEhlaWdodCx0LmFuY2hvckVsPXQuJGVsLnBhcmVudE5vZGUsdC5hbmNob3JFbC5yZW1vdmVDaGlsZCh0LiRlbCksKHQuYW5jaG9yRWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1wb3B1cC0tc2tpcFwiKXx8dC5hbmNob3JFbC5jbGFzc0xpc3QuY29udGFpbnMoXCJuby1wb2ludGVyLWV2ZW50c1wiKSkmJih0LmFuY2hvckVsPXQuYW5jaG9yRWwucGFyZW50Tm9kZSksdC4kcS5wbGF0Zm9ybS5pcy5tb2JpbGU/dC5hbmNob3JFbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0LnNob3cpOih0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsdC5fX2RlbGF5U2hvdyksdC5hbmNob3JFbC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0Ll9fZGVsYXlTaG93KSx0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsdC5fX2RlbGF5SGlkZSksdC5hbmNob3JFbC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHQuX19kZWxheUhpZGUpKSx0LnZhbHVlJiZ0LnNob3coKX0pfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuc2hvd2luZyYmdGhpcy5fX2NsZWFudXAoKSx0aGlzLmFuY2hvckVsJiYodGhpcy4kcS5wbGF0Zm9ybS5pcy5tb2JpbGU/dGhpcy5hbmNob3JFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLnNob3cpOih0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsdGhpcy5fX2RlbGF5U2hvdyksdGhpcy5hbmNob3JFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0aGlzLl9fZGVsYXlTaG93KSx0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsdGhpcy5fX2RlbGF5SGlkZSksdGhpcy5hbmNob3JFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLHRoaXMuX19kZWxheUhpZGUpKSl9fTtmdW5jdGlvbiBydW4odCxlLGkpe2UuaGFuZGxlcj9lLmhhbmRsZXIodCxpLGkuY2FyZXQpOmkucnVuQ21kKGUuY21kLGUucGFyYW0pfWZ1bmN0aW9uIGdldEJ0bih0LGUsaSxzLG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgbz1ufHxcInRvZ2dsZVwiPT09aS50eXBlJiYoaS50b2dnbGVkP2kudG9nZ2xlZChlKTppLmNtZCYmZS5jYXJldC5pcyhpLmNtZCxpLnBhcmFtKSkscj1bXSxhPXtjbGljazpmdW5jdGlvbih0KXtzJiZzKCkscnVuKHQsaSxlKX19O2lmKGkudGlwJiZlLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3Ape3ZhciBsPWkua2V5P3QoXCJkaXZcIixbdChcInNtYWxsXCIsXCIoQ1RSTCArIFwiK1N0cmluZy5mcm9tQ2hhckNvZGUoaS5rZXkpK1wiKVwiKV0pOm51bGw7ci5wdXNoKHQoUVRvb2x0aXAse3Byb3BzOntkZWxheToxZTN9fSxbdChcImRpdlwiLHtkb21Qcm9wczp7aW5uZXJIVE1MOmkudGlwfX0pLGxdKSl9cmV0dXJuIHQoUUJ0bix7cHJvcHM6T2JqZWN0LmFzc2lnbih7fSxlLmJ1dHRvblByb3BzLHtpY29uOmkuaWNvbixjb2xvcjpvP2kudG9nZ2xlQ29sb3J8fGUudG9vbGJhclRvZ2dsZUNvbG9yOmkuY29sb3J8fGUudG9vbGJhckNvbG9yLHRleHRDb2xvcjpvJiYoZS50b29sYmFyRmxhdHx8ZS50b29sYmFyT3V0bGluZSk/bnVsbDppLnRleHRDb2xvcnx8ZS50b29sYmFyVGV4dENvbG9yLGxhYmVsOmkubGFiZWwsZGlzYWJsZTohIWkuZGlzYWJsZSYmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkuZGlzYWJsZXx8aS5kaXNhYmxlKGUpKX0pLG9uOmF9LHIpfWZ1bmN0aW9uIGdldERyb3Bkb3duKHQsZSxpKXt2YXIgcyxuLG89aS5sYWJlbCxyPWkuaWNvbixhPVwibm8taWNvbnNcIj09PWkubGlzdDtmdW5jdGlvbiBsKCl7aC5jb21wb25lbnRJbnN0YW5jZS5oaWRlKCl9XCJvbmx5LWljb25zXCI9PT1pLmxpc3Q/KG49aS5vcHRpb25zLm1hcChmdW5jdGlvbihpKXt2YXIgcz12b2lkIDA9PT1pLnR5cGUmJmUuY2FyZXQuaXMoaS5jbWQsaS5wYXJhbSk7cmV0dXJuIHMmJihvPWkudGlwLHI9aS5pY29uKSxnZXRCdG4odCxlLGksbCxzKX0pLHM9ZS50b29sYmFyQmFja2dyb3VuZENsYXNzLG49W3QoUUJ0bkdyb3VwLHtwcm9wczplLmJ1dHRvblByb3BzLHN0YXRpY0NsYXNzOlwicmVsYXRpdmUtcG9zaXRpb24gcS1lZGl0b3ItdG9vbGJhci1wYWRkaW5nXCIsc3R5bGU6e2JvcmRlclJhZGl1czpcIjBcIn19LG4pXSk6KG49aS5vcHRpb25zLm1hcChmdW5jdGlvbihpKXt2YXIgcz0hIWkuZGlzYWJsZSYmaS5kaXNhYmxlKGUpLG49dm9pZCAwPT09aS50eXBlJiZlLmNhcmV0LmlzKGkuY21kLGkucGFyYW0pO24mJihvPWkudGlwLHI9aS5pY29uKTt2YXIgYz1pLmh0bWxUaXA7cmV0dXJuIHQoUUl0ZW0se3Byb3BzOnthY3RpdmU6bixsaW5rOiFzfSxjbGFzczp7ZGlzYWJsZWQ6c30sbmF0aXZlT246e2NsaWNrOmZ1bmN0aW9uKHQpe3N8fChsKCksZS4kcmVmcy5jb250ZW50JiZlLiRyZWZzLmNvbnRlbnQuZm9jdXMoKSxlLmNhcmV0LnJlc3RvcmUoKSxydW4odCxpLGUpKX19fSxbYT9cIlwiOnQoUUl0ZW1TaWRlLHtwcm9wczp7aWNvbjppLmljb259fSksdChRSXRlbU1haW4se3Byb3BzOiFjJiZpLnRpcD97bGFiZWw6aS50aXB9Om51bGwsZG9tUHJvcHM6Yz97aW5uZXJIVE1MOmkuaHRtbFRpcH06bnVsbH0pXSl9KSxzPVtlLnRvb2xiYXJCYWNrZ3JvdW5kQ2xhc3MsZS50b29sYmFyVGV4dENvbG9yP1widGV4dC1cIitlLnRvb2xiYXJUZXh0Q29sb3I6XCJcIl0sbj1bdChRTGlzdCx7cHJvcHM6e3NlcGFyYXRvcjohMH19LFtuXSldKTt2YXIgYz1pLmhpZ2hsaWdodCYmbyE9PWkubGFiZWwsaD10KFFCdG5Ecm9wZG93bix7cHJvcHM6T2JqZWN0LmFzc2lnbih7fSxlLmJ1dHRvblByb3BzLHtub0NhcHM6ITAsbm9XcmFwOiEwLGNvbG9yOmM/ZS50b29sYmFyVG9nZ2xlQ29sb3I6ZS50b29sYmFyQ29sb3IsdGV4dENvbG9yOmMmJihlLnRvb2xiYXJGbGF0fHxlLnRvb2xiYXJPdXRsaW5lKT9udWxsOmUudG9vbGJhclRleHRDb2xvcixsYWJlbDppLmZpeGVkTGFiZWw/aS5sYWJlbDpvLGljb246aS5maXhlZEljb24/aS5pY29uOnIsY29udGVudENsYXNzOnN9KX0sbik7cmV0dXJuIGh9ZnVuY3Rpb24gZ2V0VG9vbGJhcih0LGUpe2lmKGUuY2FyZXQpcmV0dXJuIGUuYnV0dG9ucy5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIHQoUUJ0bkdyb3VwLHtwcm9wczplLmJ1dHRvblByb3BzLHN0YXRpY0NsYXNzOlwiaXRlbXMtY2VudGVyIHJlbGF0aXZlLXBvc2l0aW9uXCJ9LGkubWFwKGZ1bmN0aW9uKGkpe3JldHVyblwic2xvdFwiPT09aS50eXBlP2UuJHNsb3RzW2kuc2xvdF06XCJkcm9wZG93blwiPT09aS50eXBlP2dldERyb3Bkb3duKHQsZSxpKTpnZXRCdG4odCxlLGkpfSkpfSl9ZnVuY3Rpb24gZ2V0Rm9udHModCxlLGkscyl7dm9pZCAwPT09cyYmKHM9e30pO3ZhciBuPU9iamVjdC5rZXlzKHMpO2lmKDA9PT1uLmxlbmd0aClyZXR1cm57fTt2YXIgbz17ZGVmYXVsdF9mb250OntjbWQ6XCJmb250TmFtZVwiLHBhcmFtOnQsaWNvbjppLHRpcDplfX07cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1zW3RdO29bdF09e2NtZDpcImZvbnROYW1lXCIscGFyYW06ZSxpY29uOmksdGlwOmUsaHRtbFRpcDonPGZvbnQgZmFjZT1cIicrZSsnXCI+JytlK1wiPC9mb250PlwifX0pLG99ZnVuY3Rpb24gZ2V0TGlua0VkaXRvcih0LGUpe2lmKGUuY2FyZXQpe3ZhciBpPWUudG9vbGJhckNvbG9yfHxlLnRvb2xiYXJUZXh0Q29sb3Iscz1lLmVkaXRMaW5rVXJsLG49ZnVuY3Rpb24oKXtlLmNhcmV0LnJlc3RvcmUoKSxzIT09ZS5lZGl0TGlua1VybCYmZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjcmVhdGVMaW5rXCIsITEsXCJcIj09PXM/XCIgXCI6cyksZS5lZGl0TGlua1VybD1udWxsfTtyZXR1cm5bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbXgteHNcIixjbGFzczpcInRleHQtXCIraX0sW2UuJHEuaTE4bi5lZGl0b3IudXJsK1wiOiBcIl0pLHQoUUlucHV0LHtrZXk6XCJxZWR0X2J0bV9pbnB1dFwiLHN0YXRpY0NsYXNzOlwicS1tYS1ub25lIHEtcGEtbm9uZSBjb2wgcS1lZGl0b3ItaW5wdXRcIixwcm9wczp7dmFsdWU6cyxjb2xvcjppLGF1dG9mb2N1czohMCxoaWRlVW5kZXJsaW5lOiEwfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7cz10fSxrZXlkb3duOmZ1bmN0aW9uKHQpe3N3aXRjaChnZXRFdmVudEtleSh0KSl7Y2FzZSAxMzpyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLG4oKTtjYXNlIDI3OmUuY2FyZXQucmVzdG9yZSgpLCFlLmVkaXRMaW5rVXJsJiZkb2N1bWVudC5leGVjQ29tbWFuZChcInVubGlua1wiKSxlLmVkaXRMaW5rVXJsPW51bGx9fX19KSx0KFFCdG5Hcm91cCx7a2V5OlwicWVkdF9idG1fZ3JwXCIscHJvcHM6ZS5idXR0b25Qcm9wc30sW3QoUUJ0bix7a2V5OlwicWVkdF9idG1fcmVtXCIsYXR0cnM6e3RhYmluZGV4Oi0xfSxwcm9wczpPYmplY3QuYXNzaWduKHt9LGUuYnV0dG9uUHJvcHMse2xhYmVsOmUuJHEuaTE4bi5sYWJlbC5yZW1vdmUsbm9DYXBzOiEwfSksb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5jYXJldC5yZXN0b3JlKCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJ1bmxpbmtcIiksZS5lZGl0TGlua1VybD1udWxsfX19KSx0KFFCdG4se2tleTpcInFlZHRfYnRtX3VwZFwiLHByb3BzOk9iamVjdC5hc3NpZ24oe30sZS5idXR0b25Qcm9wcyx7bGFiZWw6ZS4kcS5pMThuLmxhYmVsLnVwZGF0ZSxub0NhcHM6ITB9KSxvbjp7Y2xpY2s6bn19KV0pXX19ZnVuY3Rpb24gZ2V0QmxvY2tFbGVtZW50KHQsZSl7aWYoZSYmdD09PWUpcmV0dXJuIG51bGw7dmFyIGk9KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlP3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpOnQuY3VycmVudFN0eWxlKS5kaXNwbGF5O3JldHVyblwiYmxvY2tcIj09PWl8fFwidGFibGVcIj09PWk/dDpnZXRCbG9ja0VsZW1lbnQodC5wYXJlbnROb2RlKX1mdW5jdGlvbiBpc0NoaWxkT2YodCxlKXtpZighdClyZXR1cm4hMTtmb3IoO3Q9dC5wYXJlbnROb2RlOyl7aWYodD09PWRvY3VtZW50LmJvZHkpcmV0dXJuITE7aWYodD09PWUpcmV0dXJuITB9cmV0dXJuITF9dmFyIHVybFJlZ2V4PS9eaHR0cHM/OlxcL1xcLy8sQ2FyZXQ9ZnVuY3Rpb24odCxlKXt0aGlzLmVsPXQsdGhpcy52bT1lfSxwcm90b3R5cGVBY2Nlc3NvcnM9e3NlbGVjdGlvbjp7Y29uZmlndXJhYmxlOiEwfSxoYXNTZWxlY3Rpb246e2NvbmZpZ3VyYWJsZTohMH0scmFuZ2U6e2NvbmZpZ3VyYWJsZTohMH0scGFyZW50Ontjb25maWd1cmFibGU6ITB9LGJsb2NrUGFyZW50Ontjb25maWd1cmFibGU6ITB9fTtwcm90b3R5cGVBY2Nlc3NvcnMuc2VsZWN0aW9uLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuZWwpe3ZhciB0PWRvY3VtZW50LmdldFNlbGVjdGlvbigpO3JldHVybiBpc0NoaWxkT2YodC5hbmNob3JOb2RlLHRoaXMuZWwpJiZpc0NoaWxkT2YodC5mb2N1c05vZGUsdGhpcy5lbCk/dDp2b2lkIDB9fSxwcm90b3R5cGVBY2Nlc3NvcnMuaGFzU2VsZWN0aW9uLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbj90aGlzLnNlbGVjdGlvbi50b1N0cmluZygpLmxlbmd0aD4wOm51bGx9LHByb3RvdHlwZUFjY2Vzc29ycy5yYW5nZS5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNlbGVjdGlvbjtpZih0KXJldHVybiB0LnJhbmdlQ291bnQ/dC5nZXRSYW5nZUF0KDApOm51bGx9LHByb3RvdHlwZUFjY2Vzc29ycy5wYXJlbnQuZ2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yYW5nZTtpZih0KXt2YXIgZT10LnN0YXJ0Q29udGFpbmVyO3JldHVybiBlLm5vZGVUeXBlPT09ZG9jdW1lbnQuRUxFTUVOVF9OT0RFP2U6ZS5wYXJlbnROb2RlfX0scHJvdG90eXBlQWNjZXNzb3JzLmJsb2NrUGFyZW50LmdldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50O2lmKHQpcmV0dXJuIGdldEJsb2NrRWxlbWVudCh0LHRoaXMuZWwpfSxDYXJldC5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD10aGlzLnJhbmdlKSx0aGlzLl9yYW5nZT10fSxDYXJldC5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD10aGlzLl9yYW5nZSk7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxpPWRvY3VtZW50LmdldFNlbGVjdGlvbigpO3Q/KGUuc2V0U3RhcnQodC5zdGFydENvbnRhaW5lcix0LnN0YXJ0T2Zmc2V0KSxlLnNldEVuZCh0LmVuZENvbnRhaW5lcix0LmVuZE9mZnNldCksaS5yZW1vdmVBbGxSYW5nZXMoKSxpLmFkZFJhbmdlKGUpKTooaS5zZWxlY3RBbGxDaGlsZHJlbih0aGlzLmVsKSxpLmNvbGxhcHNlVG9FbmQoKSl9LENhcmV0LnByb3RvdHlwZS5oYXNQYXJlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgaT1lP3RoaXMucGFyZW50OnRoaXMuYmxvY2tQYXJlbnQ7cmV0dXJuISFpJiZpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9LENhcmV0LnByb3RvdHlwZS5oYXNQYXJlbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFyZW50O3JldHVybiEhZSYmdC5pbmNsdWRlcyhlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpfSxDYXJldC5wcm90b3R5cGUuaXM9ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZVwiZm9ybWF0QmxvY2tcIjpyZXR1cm5cIkRJVlwiPT09ZSYmdGhpcy5wYXJlbnQ9PT10aGlzLmVsfHx0aGlzLmhhc1BhcmVudChlLFwiUFJFXCI9PT1lKTtjYXNlXCJsaW5rXCI6cmV0dXJuIHRoaXMuaGFzUGFyZW50KFwiQVwiLCEwKTtjYXNlXCJmb250U2l6ZVwiOnJldHVybiBkb2N1bWVudC5xdWVyeUNvbW1hbmRWYWx1ZSh0KT09PWU7Y2FzZVwiZm9udE5hbWVcIjp2YXIgaT1kb2N1bWVudC5xdWVyeUNvbW1hbmRWYWx1ZSh0KTtyZXR1cm4gaT09PSdcIicrZSsnXCInfHxpPT09ZTtjYXNlXCJmdWxsc2NyZWVuXCI6cmV0dXJuIHRoaXMudm0uaW5GdWxsc2NyZWVuO2Nhc2Ugdm9pZCAwOnJldHVybiExO2RlZmF1bHQ6dmFyIHM9ZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUodCk7cmV0dXJuIGU/cz09PWU6c319LENhcmV0LnByb3RvdHlwZS5nZXRQYXJlbnRBdHRyaWJ1dGU9ZnVuY3Rpb24odCl7aWYodGhpcy5wYXJlbnQpcmV0dXJuIHRoaXMucGFyZW50LmdldEF0dHJpYnV0ZSh0KX0sQ2FyZXQucHJvdG90eXBlLmNhbj1mdW5jdGlvbih0KXtpZihcIm91dGRlbnRcIj09PXQpcmV0dXJuIHRoaXMuaGFzUGFyZW50cyhbXCJibG9ja3F1b3RlXCIsXCJsaVwiXSk7aWYoXCJpbmRlbnRcIj09PXQpe3ZhciBlPSEhdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoXCJibG9ja3F1b3RlXCI9PT1lKXJldHVybiExO2lmKFwibGlcIj09PWUpe3ZhciBpPXRoaXMucGFyZW50LnByZXZpb3VzU2libGluZztyZXR1cm4gaSYmXCJsaVwiPT09aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfXJldHVybiExfX0sQ2FyZXQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKHQsZSxpKXtpZih2b2lkIDA9PT1pJiYoaT1mdW5jdGlvbigpe30pLFwiZm9ybWF0QmxvY2tcIj09PXQpW1wiQkxPQ0tRVU9URVwiLFwiSDFcIixcIkgyXCIsXCJIM1wiLFwiSDRcIixcIkg1XCIsXCJINlwiXS5pbmNsdWRlcyhlKSYmdGhpcy5pcyh0LGUpJiYodD1cIm91dGRlbnRcIixlPW51bGwpLFwiUFJFXCI9PT1lJiZ0aGlzLmlzKHQsXCJQUkVcIikmJihlPVwiUFwiKTtlbHNle2lmKFwicHJpbnRcIj09PXQpe2koKTt2YXIgcz13aW5kb3cub3BlbigpO3JldHVybiBzLmRvY3VtZW50LndyaXRlKFwiXFxuICAgICAgICA8IWRvY3R5cGUgaHRtbD5cXG4gICAgICAgIDxodG1sPlxcbiAgICAgICAgICA8aGVhZD5cXG4gICAgICAgICAgICA8dGl0bGU+UHJpbnQgLSBcIitkb2N1bWVudC50aXRsZStcIjwvdGl0bGU+XFxuICAgICAgICAgIDwvaGVhZD5cXG4gICAgICAgICAgPGJvZHk+XFxuICAgICAgICAgICAgPGRpdj5cIit0aGlzLmVsLmlubmVySFRNTCtcIjwvZGl2PlxcbiAgICAgICAgICA8L2JvZHk+XFxuICAgICAgICA8L2h0bWw+XFxuICAgICAgXCIpLHMucHJpbnQoKSx2b2lkIHMuY2xvc2UoKX1pZihcImxpbmtcIj09PXQpe3ZhciBuPXRoaXMuZ2V0UGFyZW50QXR0cmlidXRlKFwiaHJlZlwiKTtpZihuKXRoaXMudm0uZWRpdExpbmtVcmw9bjtlbHNle3ZhciBvPXRoaXMuc2VsZWN0V29yZCh0aGlzLnNlbGVjdGlvbikscj1vP28udG9TdHJpbmcoKTpcIlwiO2lmKCFyLmxlbmd0aClyZXR1cm47dGhpcy52bS5lZGl0TGlua1VybD11cmxSZWdleC50ZXN0KHIpP3I6XCJcIixkb2N1bWVudC5leGVjQ29tbWFuZChcImNyZWF0ZUxpbmtcIiwhMSxcIlwiPT09dGhpcy52bS5lZGl0TGlua1VybD9cIiBcIjp0aGlzLnZtLmVkaXRMaW5rVXJsKX1yZXR1cm4gdGhpcy5yYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5wYXJlbnQpLHZvaWQgdGhpcy5zYXZlKCl9aWYoXCJmdWxsc2NyZWVuXCI9PT10KXJldHVybiB0aGlzLnZtLnRvZ2dsZUZ1bGxzY3JlZW4oKSx2b2lkIGkoKX1kb2N1bWVudC5leGVjQ29tbWFuZCh0LCExLGUpLGkoKX0sQ2FyZXQucHJvdG90eXBlLnNlbGVjdFdvcmQ9ZnVuY3Rpb24odCl7aWYoIXQuaXNDb2xsYXBzZWQpcmV0dXJuIHQ7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtlLnNldFN0YXJ0KHQuYW5jaG9yTm9kZSx0LmFuY2hvck9mZnNldCksZS5zZXRFbmQodC5mb2N1c05vZGUsdC5mb2N1c09mZnNldCk7dmFyIGk9ZS5jb2xsYXBzZWQ/W1wiYmFja3dhcmRcIixcImZvcndhcmRcIl06W1wiZm9yd2FyZFwiLFwiYmFja3dhcmRcIl07ZS5kZXRhY2goKTt2YXIgcz10LmZvY3VzTm9kZSxuPXQuZm9jdXNPZmZzZXQ7cmV0dXJuIHQuY29sbGFwc2UodC5hbmNob3JOb2RlLHQuYW5jaG9yT2Zmc2V0KSx0Lm1vZGlmeShcIm1vdmVcIixpWzBdLFwiY2hhcmFjdGVyXCIpLHQubW9kaWZ5KFwibW92ZVwiLGlbMV0sXCJ3b3JkXCIpLHQuZXh0ZW5kKHMsbiksdC5tb2RpZnkoXCJleHRlbmRcIixpWzFdLFwiY2hhcmFjdGVyXCIpLHQubW9kaWZ5KFwiZXh0ZW5kXCIsaVswXSxcIndvcmRcIiksdH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FyZXQucHJvdG90eXBlLHByb3RvdHlwZUFjY2Vzc29ycyk7dmFyIHRvU3RyaW5nPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaGFzT3duPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksY2xhc3MydHlwZT17fTtmdW5jdGlvbiB0eXBlKHQpe3JldHVybiBudWxsPT09dD9TdHJpbmcodCk6Y2xhc3MydHlwZVt0b1N0cmluZy5jYWxsKHQpXXx8XCJvYmplY3RcIn1mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHQpe2lmKCF0fHxcIm9iamVjdFwiIT09dHlwZSh0KSlyZXR1cm4hMTtpZih0LmNvbnN0cnVjdG9yJiYhaGFzT3duLmNhbGwodCxcImNvbnN0cnVjdG9yXCIpJiYhaGFzT3duLmNhbGwodC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXCJpc1Byb3RvdHlwZU9mXCIpKXJldHVybiExO3ZhciBlO2ZvcihlIGluIHQpO3JldHVybiB2b2lkIDA9PT1lfHxoYXNPd24uY2FsbCh0LGUpfWZ1bmN0aW9uIGV4dGVuZCgpe3ZhciB0LGUsaSxzLG4sbyxyPWFyZ3VtZW50cyxhPWFyZ3VtZW50c1swXXx8e30sbD0xLGM9YXJndW1lbnRzLmxlbmd0aCxoPSExO2ZvcihcImJvb2xlYW5cIj09dHlwZW9mIGEmJihoPWEsYT1hcmd1bWVudHNbMV18fHt9LGw9MiksT2JqZWN0KGEpIT09YSYmXCJmdW5jdGlvblwiIT09dHlwZShhKSYmKGE9e30pLGM9PT1sJiYoYT10aGlzLGwtLSk7bDxjO2wrKylpZihudWxsIT09KHQ9cltsXSkpZm9yKGUgaW4gdClpPWFbZV0sYSE9PShzPXRbZV0pJiYoaCYmcyYmKGlzUGxhaW5PYmplY3Qocyl8fChuPVwiYXJyYXlcIj09PXR5cGUocykpKT8obj8obj0hMSxvPWkmJlwiYXJyYXlcIj09PXR5cGUoaSk/aTpbXSk6bz1pJiZpc1BsYWluT2JqZWN0KGkpP2k6e30sYVtlXT1leHRlbmQoaCxvLHMpKTp2b2lkIDAhPT1zJiYoYVtlXT1zKSk7cmV0dXJuIGF9XCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24odCl7Y2xhc3MydHlwZVtcIltvYmplY3QgXCIrdCtcIl1cIl09dC50b0xvd2VyQ2FzZSgpfSk7dmFyIFFFZGl0b3I9e25hbWU6XCJRRWRpdG9yXCIsbWl4aW5zOltGdWxsc2NyZWVuTWl4aW5dLHByb3BzOnt2YWx1ZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHJlYWRvbmx5OkJvb2xlYW4sZGlzYWJsZTpCb29sZWFuLG1pbkhlaWdodDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIjEwcmVtXCJ9LG1heEhlaWdodDpTdHJpbmcsaGVpZ2h0OlN0cmluZyxkZWZpbml0aW9uczpPYmplY3QsZm9udHM6T2JqZWN0LHRvb2xiYXI6e3R5cGU6QXJyYXksdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5sZW5ndGh8fHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSl9LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bW1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiLFwianVzdGlmeVwiXSxbXCJib2xkXCIsXCJpdGFsaWNcIixcInVuZGVybGluZVwiLFwic3RyaWtlXCJdLFtcInVuZG9cIixcInJlZG9cIl1dfX0sdG9vbGJhckNvbG9yOlN0cmluZyx0b29sYmFyVGV4dENvbG9yOlN0cmluZyx0b29sYmFyVG9nZ2xlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHRvb2xiYXJCZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImdyZXktM1wifSx0b29sYmFyRmxhdDpCb29sZWFuLHRvb2xiYXJPdXRsaW5lOkJvb2xlYW4sdG9vbGJhclB1c2g6Qm9vbGVhbix0b29sYmFyUm91bmRlZDpCb29sZWFuLGNvbnRlbnRTdHlsZTpPYmplY3QsY29udGVudENsYXNzOltPYmplY3QsQXJyYXksU3RyaW5nXX0sY29tcHV0ZWQ6e2VkaXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucmVhZG9ubHkmJiF0aGlzLmRpc2FibGV9LGhhc1Rvb2xiYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b29sYmFyJiZ0aGlzLnRvb2xiYXIubGVuZ3RoPjB9LHRvb2xiYXJCYWNrZ3JvdW5kQ2xhc3M6ZnVuY3Rpb24oKXtpZih0aGlzLnRvb2xiYXJCZylyZXR1cm5cImJnLVwiK3RoaXMudG9vbGJhckJnfSxidXR0b25Qcm9wczpmdW5jdGlvbigpe3JldHVybntvdXRsaW5lOnRoaXMudG9vbGJhck91dGxpbmUsZmxhdDp0aGlzLnRvb2xiYXJGbGF0LHB1c2g6dGhpcy50b29sYmFyUHVzaCxyb3VuZGVkOnRoaXMudG9vbGJhclJvdW5kZWQsZGVuc2U6ITAsY29sb3I6dGhpcy50b29sYmFyQ29sb3IsZGlzYWJsZTohdGhpcy5lZGl0YWJsZX19LGJ1dHRvbkRlZjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHEuaTE4bi5lZGl0b3IsZT10aGlzLiRxLmljb24uZWRpdG9yO3JldHVybntib2xkOntjbWQ6XCJib2xkXCIsaWNvbjplLmJvbGQsdGlwOnQuYm9sZCxrZXk6NjZ9LGl0YWxpYzp7Y21kOlwiaXRhbGljXCIsaWNvbjplLml0YWxpYyx0aXA6dC5pdGFsaWMsa2V5OjczfSxzdHJpa2U6e2NtZDpcInN0cmlrZVRocm91Z2hcIixpY29uOmUuc3RyaWtldGhyb3VnaCx0aXA6dC5zdHJpa2V0aHJvdWdoLGtleTo4M30sdW5kZXJsaW5lOntjbWQ6XCJ1bmRlcmxpbmVcIixpY29uOmUudW5kZXJsaW5lLHRpcDp0LnVuZGVybGluZSxrZXk6ODV9LHVub3JkZXJlZDp7Y21kOlwiaW5zZXJ0VW5vcmRlcmVkTGlzdFwiLGljb246ZS51bm9yZGVyZWRMaXN0LHRpcDp0LnVub3JkZXJlZExpc3R9LG9yZGVyZWQ6e2NtZDpcImluc2VydE9yZGVyZWRMaXN0XCIsaWNvbjplLm9yZGVyZWRMaXN0LHRpcDp0Lm9yZGVyZWRMaXN0fSxzdWJzY3JpcHQ6e2NtZDpcInN1YnNjcmlwdFwiLGljb246ZS5zdWJzY3JpcHQsdGlwOnQuc3Vic2NyaXB0LGh0bWxUaXA6XCJ4PHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+XCJ9LHN1cGVyc2NyaXB0OntjbWQ6XCJzdXBlcnNjcmlwdFwiLGljb246ZS5zdXBlcnNjcmlwdCx0aXA6dC5zdXBlcnNjcmlwdCxodG1sVGlwOlwieDxzdXBlcnNjcmlwdD4yPC9zdXBlcnNjcmlwdD5cIn0sbGluazp7Y21kOlwibGlua1wiLGljb246ZS5oeXBlcmxpbmssdGlwOnQuaHlwZXJsaW5rLGtleTo3Nn0sZnVsbHNjcmVlbjp7Y21kOlwiZnVsbHNjcmVlblwiLGljb246ZS50b2dnbGVGdWxsc2NyZWVuLHRpcDp0LnRvZ2dsZUZ1bGxzY3JlZW4sa2V5OjcwfSxxdW90ZTp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkJMT0NLUVVPVEVcIixpY29uOmUucXVvdGUsdGlwOnQucXVvdGUsa2V5OjgxfSxsZWZ0OntjbWQ6XCJqdXN0aWZ5TGVmdFwiLGljb246ZS5sZWZ0LHRpcDp0LmxlZnR9LGNlbnRlcjp7Y21kOlwianVzdGlmeUNlbnRlclwiLGljb246ZS5jZW50ZXIsdGlwOnQuY2VudGVyfSxyaWdodDp7Y21kOlwianVzdGlmeVJpZ2h0XCIsaWNvbjplLnJpZ2h0LHRpcDp0LnJpZ2h0fSxqdXN0aWZ5OntjbWQ6XCJqdXN0aWZ5RnVsbFwiLGljb246ZS5qdXN0aWZ5LHRpcDp0Lmp1c3RpZnl9LHByaW50Ont0eXBlOlwibm8tc3RhdGVcIixjbWQ6XCJwcmludFwiLGljb246ZS5wcmludCx0aXA6dC5wcmludCxrZXk6ODB9LG91dGRlbnQ6e3R5cGU6XCJuby1zdGF0ZVwiLGRpc2FibGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2FyZXQmJiF0LmNhcmV0LmNhbihcIm91dGRlbnRcIil9LGNtZDpcIm91dGRlbnRcIixpY29uOmUub3V0ZGVudCx0aXA6dC5vdXRkZW50fSxpbmRlbnQ6e3R5cGU6XCJuby1zdGF0ZVwiLGRpc2FibGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2FyZXQmJiF0LmNhcmV0LmNhbihcImluZGVudFwiKX0sY21kOlwiaW5kZW50XCIsaWNvbjplLmluZGVudCx0aXA6dC5pbmRlbnR9LHJlbW92ZUZvcm1hdDp7dHlwZTpcIm5vLXN0YXRlXCIsY21kOlwicmVtb3ZlRm9ybWF0XCIsaWNvbjplLnJlbW92ZUZvcm1hdCx0aXA6dC5yZW1vdmVGb3JtYXR9LGhyOnt0eXBlOlwibm8tc3RhdGVcIixjbWQ6XCJpbnNlcnRIb3Jpem9udGFsUnVsZVwiLGljb246ZS5ocix0aXA6dC5ocn0sdW5kbzp7dHlwZTpcIm5vLXN0YXRlXCIsY21kOlwidW5kb1wiLGljb246ZS51bmRvLHRpcDp0LnVuZG8sa2V5OjkwfSxyZWRvOnt0eXBlOlwibm8tc3RhdGVcIixjbWQ6XCJyZWRvXCIsaWNvbjplLnJlZG8sdGlwOnQucmVkbyxrZXk6ODl9LGgxOntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiSDFcIixpY29uOmUuaGVhZGVyLHRpcDp0LmhlYWRlcjEsaHRtbFRpcDonPGgxIGNsYXNzPVwicS1tYS1ub25lXCI+Jyt0LmhlYWRlcjErXCI8L2gxPlwifSxoMjp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkgyXCIsaWNvbjplLmhlYWRlcix0aXA6dC5oZWFkZXIyLGh0bWxUaXA6JzxoMiBjbGFzcz1cInEtbWEtbm9uZVwiPicrdC5oZWFkZXIyK1wiPC9oMj5cIn0saDM6e2NtZDpcImZvcm1hdEJsb2NrXCIscGFyYW06XCJIM1wiLGljb246ZS5oZWFkZXIsdGlwOnQuaGVhZGVyMyxodG1sVGlwOic8aDMgY2xhc3M9XCJxLW1hLW5vbmVcIj4nK3QuaGVhZGVyMytcIjwvaDM+XCJ9LGg0OntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiSDRcIixpY29uOmUuaGVhZGVyLHRpcDp0LmhlYWRlcjQsaHRtbFRpcDonPGg0IGNsYXNzPVwicS1tYS1ub25lXCI+Jyt0LmhlYWRlcjQrXCI8L2g0PlwifSxoNTp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkg1XCIsaWNvbjplLmhlYWRlcix0aXA6dC5oZWFkZXI1LGh0bWxUaXA6JzxoNSBjbGFzcz1cInEtbWEtbm9uZVwiPicrdC5oZWFkZXI1K1wiPC9oNT5cIn0saDY6e2NtZDpcImZvcm1hdEJsb2NrXCIscGFyYW06XCJINlwiLGljb246ZS5oZWFkZXIsdGlwOnQuaGVhZGVyNixodG1sVGlwOic8aDYgY2xhc3M9XCJxLW1hLW5vbmVcIj4nK3QuaGVhZGVyNitcIjwvaDY+XCJ9LHA6e2NtZDpcImZvcm1hdEJsb2NrXCIscGFyYW06XCJESVZcIixpY29uOmUuaGVhZGVyLHRpcDp0LnBhcmFncmFwaH0sY29kZTp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIlBSRVwiLGljb246ZS5jb2RlLHRpcDpcIjxjb2RlPlwiK3QuY29kZStcIjwvY29kZT5cIn0sXCJzaXplLTFcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjFcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplMSxodG1sVGlwOic8Zm9udCBzaXplPVwiMVwiPicrdC5zaXplMStcIjwvZm9udD5cIn0sXCJzaXplLTJcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjJcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplMixodG1sVGlwOic8Zm9udCBzaXplPVwiMlwiPicrdC5zaXplMitcIjwvZm9udD5cIn0sXCJzaXplLTNcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjNcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplMyxodG1sVGlwOic8Zm9udCBzaXplPVwiM1wiPicrdC5zaXplMytcIjwvZm9udD5cIn0sXCJzaXplLTRcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjRcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplNCxodG1sVGlwOic8Zm9udCBzaXplPVwiNFwiPicrdC5zaXplNCtcIjwvZm9udD5cIn0sXCJzaXplLTVcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjVcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplNSxodG1sVGlwOic8Zm9udCBzaXplPVwiNVwiPicrdC5zaXplNStcIjwvZm9udD5cIn0sXCJzaXplLTZcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjZcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplNixodG1sVGlwOic8Zm9udCBzaXplPVwiNlwiPicrdC5zaXplNitcIjwvZm9udD5cIn0sXCJzaXplLTdcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjdcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplNyxodG1sVGlwOic8Zm9udCBzaXplPVwiN1wiPicrdC5zaXplNytcIjwvZm9udD5cIn19fSxidXR0b25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuZGVmaW5pdGlvbnN8fHt9LGk9dGhpcy5kZWZpbml0aW9uc3x8dGhpcy5mb250cz9leHRlbmQoITAse30sdGhpcy5idXR0b25EZWYsZSxnZXRGb250cyh0aGlzLmRlZmF1bHRGb250LHRoaXMuJHEuaTE4bi5lZGl0b3IuZGVmYXVsdEZvbnQsdGhpcy4kcS5pY29uLmVkaXRvci5mb250LHRoaXMuZm9udHMpKTp0aGlzLmJ1dHRvbkRlZjtyZXR1cm4gdGhpcy50b29sYmFyLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gcy5tYXAoZnVuY3Rpb24ocyl7aWYocy5vcHRpb25zKXJldHVybnt0eXBlOlwiZHJvcGRvd25cIixpY29uOnMuaWNvbixsYWJlbDpzLmxhYmVsLGZpeGVkTGFiZWw6cy5maXhlZExhYmVsLGZpeGVkSWNvbjpzLmZpeGVkSWNvbixoaWdobGlnaHQ6cy5oaWdobGlnaHQsbGlzdDpzLmxpc3Qsb3B0aW9uczpzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpW3RdfSl9O3ZhciBuPWlbc107cmV0dXJuIG4/XCJuby1zdGF0ZVwiPT09bi50eXBlfHxlW3NdJiYodm9pZCAwPT09bi5jbWR8fHQuYnV0dG9uRGVmW24uY21kXSYmXCJuby1zdGF0ZVwiPT09dC5idXR0b25EZWZbbi5jbWRdLnR5cGUpP246ZXh0ZW5kKCEwLHt0eXBlOlwidG9nZ2xlXCJ9LG4pOnt0eXBlOlwic2xvdFwiLHNsb3Q6c319KX0pfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT1mdW5jdGlvbihlKXtlLmtleSYmKHRbZS5rZXldPXtjbWQ6ZS5jbWQscGFyYW06ZS5wYXJhbX0pfTtyZXR1cm4gdGhpcy5idXR0b25zLmZvckVhY2goZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qub3B0aW9ucz90Lm9wdGlvbnMuZm9yRWFjaChlKTplKHQpfSl9KSx0fSxpbm5lclN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5GdWxsc2NyZWVuP3RoaXMuY29udGVudFN0eWxlOlt7bWluSGVpZ2h0OnRoaXMubWluSGVpZ2h0LGhlaWdodDp0aGlzLmhlaWdodCxtYXhIZWlnaHQ6dGhpcy5tYXhIZWlnaHR9LHRoaXMuY29udGVudFN0eWxlXX0saW5uZXJDbGFzczpmdW5jdGlvbigpe3JldHVyblt0aGlzLmNvbnRlbnRDbGFzcyx7Y29sOnRoaXMuaW5GdWxsc2NyZWVuLFwib3ZlcmZsb3ctYXV0b1wiOnRoaXMuaW5GdWxsc2NyZWVufHx0aGlzLm1heEhlaWdodH1dfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntlZGl0V2F0Y2hlcjohMCxlZGl0TGlua1VybDpudWxsfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZWRpdFdhdGNoZXI/dGhpcy4kcmVmcy5jb250ZW50LmlubmVySFRNTD10OnRoaXMuZWRpdFdhdGNoZXI9ITB9fSxtZXRob2RzOntvbklucHV0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZWRpdFdhdGNoZXIpe3ZhciBlPXRoaXMuJHJlZnMuY29udGVudC5pbm5lckhUTUw7ZSE9PXRoaXMudmFsdWUmJih0aGlzLmVkaXRXYXRjaGVyPSExLHRoaXMuJGVtaXQoXCJpbnB1dFwiLGUpKX19LG9uS2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgZT1nZXRFdmVudEtleSh0KTtpZighdC5jdHJsS2V5KXJldHVybiB0aGlzLnJlZnJlc2hUb29sYmFyKCksdm9pZCh0aGlzLiRxLnBsYXRmb3JtLmlzLmllJiZ0aGlzLiRuZXh0VGljayh0aGlzLm9uSW5wdXQpKTt2YXIgaT10aGlzLmtleXNbZV07aWYodm9pZCAwIT09aSl7dmFyIHM9aS5jbWQsbj1pLnBhcmFtO3N0b3BBbmRQcmV2ZW50KHQpLHRoaXMucnVuQ21kKHMsbiwhMSksdGhpcy4kcS5wbGF0Zm9ybS5pcy5pZSYmdGhpcy4kbmV4dFRpY2sodGhpcy5vbklucHV0KX19LHJ1bkNtZDpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpczt2b2lkIDA9PT1pJiYoaT0hMCksdGhpcy5mb2N1cygpLHRoaXMuY2FyZXQuYXBwbHkodCxlLGZ1bmN0aW9uKCl7cy5mb2N1cygpLGkmJnMucmVmcmVzaFRvb2xiYXIoKX0pfSxyZWZyZXNoVG9vbGJhcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe3QuZWRpdExpbmtVcmw9bnVsbCx0LiRmb3JjZVVwZGF0ZSgpfSwxKX0sZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLmNvbnRlbnQuZm9jdXMoKX0sZ2V0Q29udGVudEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMuY29udGVudH19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXtpc1NTUnx8KGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvclwiLCExLFwiZGl2XCIpLHRoaXMuZGVmYXVsdEZvbnQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udEZhbWlseSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC4kcmVmcy5jb250ZW50JiYodC5jYXJldD1uZXcgQ2FyZXQodC4kcmVmcy5jb250ZW50LHQpLHQuJHJlZnMuY29udGVudC5pbm5lckhUTUw9dC52YWx1ZSksdC4kbmV4dFRpY2sodC5yZWZyZXNoVG9vbGJhcil9KX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlLGk9dGhpcztpZih0aGlzLmhhc1Rvb2xiYXIpe3ZhciBzPXtzdGF0aWNDbGFzczpcInEtZWRpdG9yLXRvb2xiYXIgcm93IG5vLXdyYXAgc2Nyb2xsLXhcIixjbGFzczpbe1wicS1lZGl0b3ItdG9vbGJhci1zZXBhcmF0b3JcIjohdGhpcy50b29sYmFyT3V0bGluZSYmIXRoaXMudG9vbGJhclB1c2h9LHRoaXMudG9vbGJhckJhY2tncm91bmRDbGFzc119OyhlPVtdKS5wdXNoKHQoXCJkaXZcIixleHRlbmQoe2tleTpcInFlZHRfdG9wXCJ9LHMpLFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IG5vLXdyYXAgcS1lZGl0b3ItdG9vbGJhci1wYWRkaW5nIGZpdCBpdGVtcy1jZW50ZXJcIn0sZ2V0VG9vbGJhcih0LHRoaXMpKV0pKSxudWxsIT09dGhpcy5lZGl0TGlua1VybCYmZS5wdXNoKHQoXCJkaXZcIixleHRlbmQoe2tleTpcInFlZHRfYnRtXCJ9LHMpLFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IG5vLXdyYXAgcS1lZGl0b3ItdG9vbGJhci1wYWRkaW5nIGZpdCBpdGVtcy1jZW50ZXJcIn0sZ2V0TGlua0VkaXRvcih0LHRoaXMpKV0pKSxlPXQoXCJkaXZcIixlKX1yZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZWRpdG9yXCIsc3R5bGU6e2hlaWdodDp0aGlzLmluRnVsbHNjcmVlbj9cIjEwMHZoXCI6bnVsbH0sY2xhc3M6e2Rpc2FibGVkOnRoaXMuZGlzYWJsZSxmdWxsc2NyZWVuOnRoaXMuaW5GdWxsc2NyZWVuLGNvbHVtbjp0aGlzLmluRnVsbHNjcmVlbn19LFtlLHQoXCJkaXZcIix7cmVmOlwiY29udGVudFwiLHN0YXRpY0NsYXNzOlwicS1lZGl0b3ItY29udGVudFwiLHN0eWxlOnRoaXMuaW5uZXJTdHlsZSxjbGFzczp0aGlzLmlubmVyQ2xhc3MsYXR0cnM6e2NvbnRlbnRlZGl0YWJsZTp0aGlzLmVkaXRhYmxlfSxkb21Qcm9wczppc1NTUj97aW5uZXJIVE1MOnRoaXMudmFsdWV9OnZvaWQgMCxvbjp7aW5wdXQ6dGhpcy5vbklucHV0LGtleWRvd246dGhpcy5vbktleWRvd24sY2xpY2s6dGhpcy5yZWZyZXNoVG9vbGJhcixibHVyOmZ1bmN0aW9uKCl7aS5jYXJldC5zYXZlKCl9fX0pXSl9fSxGYWJNaXhpbj17cHJvcHM6e291dGxpbmU6Qm9vbGVhbixwdXNoOkJvb2xlYW4sZmxhdDpCb29sZWFuLGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nLGdsb3NzeTpCb29sZWFufX0sUUZhYj17bmFtZTpcIlFGYWJcIixtaXhpbnM6W0ZhYk1peGluLE1vZGVsVG9nZ2xlTWl4aW5dLHByb3ZpZGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybntfX3FGYWJDbG9zZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5oaWRlKGUpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC4kcmVmcy50cmlnZ2VyJiZ0LiRyZWZzLnRyaWdnZXIuJGVsJiZ0LiRyZWZzLnRyaWdnZXIuJGVsLmZvY3VzKCksZX0pfX19LHByb3BzOntpY29uOlN0cmluZyxhY3RpdmVJY29uOlN0cmluZyxkaXJlY3Rpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJyaWdodFwifSxwZXJzaXN0ZW50OkJvb2xlYW59LHdhdGNoOnskcm91dGU6ZnVuY3Rpb24oKXshdGhpcy5wZXJzaXN0ZW50JiZ0aGlzLmhpZGUoKX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnZhbHVlJiZ0aGlzLnNob3coKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1mYWIgei1mYWIgcm93IGlubGluZSBqdXN0aWZ5LWNlbnRlclwiLGNsYXNzOntcInEtZmFiLW9wZW5lZFwiOnRoaXMuc2hvd2luZ319LFt0KFFCdG4se3JlZjpcInRyaWdnZXJcIixwcm9wczp7ZmFiOiEwLG91dGxpbmU6dGhpcy5vdXRsaW5lLHB1c2g6dGhpcy5wdXNoLGZsYXQ6dGhpcy5mbGF0LGNvbG9yOnRoaXMuY29sb3IsdGV4dENvbG9yOnRoaXMudGV4dENvbG9yLGdsb3NzeTp0aGlzLmdsb3NzeX0sb246e2NsaWNrOnRoaXMudG9nZ2xlfX0sW3RoaXMuJHNsb3RzLnRvb2x0aXAsdChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLWZhYi1pY29uIGFic29sdXRlLWZ1bGxcIixwcm9wczp7bmFtZTp0aGlzLmljb258fHRoaXMuJHEuaWNvbi5mYWIuaWNvbn19KSx0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtZmFiLWFjdGl2ZS1pY29uIGFic29sdXRlLWZ1bGxcIixwcm9wczp7bmFtZTp0aGlzLmFjdGl2ZUljb258fHRoaXMuJHEuaWNvbi5mYWIuYWN0aXZlSWNvbn19KV0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZhYi1hY3Rpb25zIGZsZXggbm8td3JhcCBpbmxpbmUgaXRlbXMtY2VudGVyXCIsY2xhc3M6XCJxLWZhYi1cIit0aGlzLmRpcmVjdGlvbn0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKX19LFFGYWJBY3Rpb249e25hbWU6XCJRRmFiQWN0aW9uXCIsbWl4aW5zOltGYWJNaXhpbl0scHJvcHM6e2ljb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0saW5qZWN0OntfX3FGYWJDbG9zZTp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRRmFiQWN0aW9uIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFGYWJcIil9fX0sbWV0aG9kczp7Y2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9fcUZhYkNsb3NlKCkudGhlbihmdW5jdGlvbigpe2UuJGVtaXQoXCJjbGlja1wiLHQpfSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoUUJ0bix7cHJvcHM6e2ZhYk1pbmk6ITAsb3V0bGluZTp0aGlzLm91dGxpbmUscHVzaDp0aGlzLnB1c2gsZmxhdDp0aGlzLmZsYXQsY29sb3I6dGhpcy5jb2xvcix0ZXh0Q29sb3I6dGhpcy50ZXh0Q29sb3IsZ2xvc3N5OnRoaXMuZ2xvc3N5LGljb246dGhpcy5pY29ufSxvbjp7Y2xpY2s6dGhpcy5jbGlja319LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUZpZWxkPXtuYW1lOlwiUUZpZWxkXCIsbWl4aW5zOltDYW5SZW5kZXJNaXhpbl0scHJvcHM6e2luc2V0Ont0eXBlOlN0cmluZyx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wiaWNvblwiLFwibGFiZWxcIixcImZ1bGxcIl0uaW5jbHVkZXModCl9fSxsYWJlbDpTdHJpbmcsY291bnQ6e3R5cGU6W051bWJlcixCb29sZWFuXSxkZWZhdWx0OiExfSxlcnJvcjpCb29sZWFuLGVycm9yTGFiZWw6U3RyaW5nLHdhcm5pbmc6Qm9vbGVhbix3YXJuaW5nTGFiZWw6U3RyaW5nLGhlbHBlcjpTdHJpbmcsaWNvbjpTdHJpbmcsaWNvbkNvbG9yOlN0cmluZyxkYXJrOkJvb2xlYW4sb3JpZW50YXRpb246e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ2ZXJ0aWNhbFwiLFwiaG9yaXpvbnRhbFwiXS5pbmNsdWRlcyh0KX19LGxhYmVsV2lkdGg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6NSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7dmFyIGU9cGFyc2VJbnQodCwxMCk7cmV0dXJuIGU+MCYmZTwxM319fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2lucHV0Ont9fX0sY29tcHV0ZWQ6e2hhc0Vycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXQuZXJyb3J8fHRoaXMuZXJyb3J9LGhhc1dhcm5pbmc6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNFcnJvciYmKHRoaXMuaW5wdXQud2FybmluZ3x8dGhpcy53YXJuaW5nKX0sY2hpbGRIYXNMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0LmZsb2F0TGFiZWx8fHRoaXMuaW5wdXQuc3RhY2tMYWJlbH0saXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXQuZGFya3x8dGhpcy5kYXJrfSxpbnNldEljb246ZnVuY3Rpb24oKXtyZXR1cm5bXCJpY29uXCIsXCJmdWxsXCJdLmluY2x1ZGVzKHRoaXMuaW5zZXQpfSxoYXNOb0lucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuUmVuZGVyJiYoIXRoaXMuaW5wdXQuJG9wdGlvbnN8fHRoaXMuaW5wdXQuX19uZWVkc0JvcmRlcil9LGNvdW50ZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmNvdW50KXt2YXIgdD10aGlzLmlucHV0Lmxlbmd0aHx8XCIwXCI7cmV0dXJuIE51bWJlci5pc0ludGVnZXIodGhpcy5jb3VudCk/dCtcIiAvIFwiK3RoaXMuY291bnQ6dH19LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJxLWZpZWxkLXJlc3BvbnNpdmVcIjohdGhpcy5pc1ZlcnRpY2FsJiYhdGhpcy5pc0hvcml6b250YWwsXCJxLWZpZWxkLXZlcnRpY2FsXCI6dGhpcy5pc1ZlcnRpY2FsLFwicS1maWVsZC1ob3Jpem9udGFsXCI6dGhpcy5pc0hvcml6b250YWwsXCJxLWZpZWxkLWZsb2F0aW5nXCI6dGhpcy5jaGlsZEhhc0xhYmVsLFwicS1maWVsZC1uby1sYWJlbFwiOiF0aGlzLmxhYmVsJiYhdGhpcy4kc2xvdHMubGFiZWwsXCJxLWZpZWxkLXdpdGgtZXJyb3JcIjp0aGlzLmhhc0Vycm9yLFwicS1maWVsZC13aXRoLXdhcm5pbmdcIjp0aGlzLmhhc1dhcm5pbmcsXCJxLWZpZWxkLWRhcmtcIjp0aGlzLmlzRGFyayxcInEtZmllbGQtbm8taW5wdXRcIjp0aGlzLmhhc05vSW5wdXR9fSxjb21wdXRlZExhYmVsV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VJbnQodGhpcy5sYWJlbFdpZHRoLDEwKX0saXNWZXJ0aWNhbDpmdW5jdGlvbigpe3JldHVyblwidmVydGljYWxcIj09PXRoaXMub3JpZW50YXRpb258fDEyPT09dGhpcy5jb21wdXRlZExhYmVsV2lkdGh9LGlzSG9yaXpvbnRhbDpmdW5jdGlvbigpe3JldHVyblwiaG9yaXpvbnRhbFwiPT09dGhpcy5vcmllbnRhdGlvbn0sbGFiZWxDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWZXJ0aWNhbD9cImNvbC0xMlwiOnRoaXMuaXNIb3Jpem9udGFsP1wiY29sLVwiK3RoaXMubGFiZWxXaWR0aDpcImNvbC14cy0xMiBjb2wtc20tXCIrdGhpcy5sYWJlbFdpZHRofSxpbnB1dENsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZlcnRpY2FsP1wiY29sLXhzLTEyXCI6dGhpcy5pc0hvcml6b250YWw/XCJjb2xcIjpcImNvbC14cy0xMiBjb2wtc21cIn0saWNvblByb3BzOmZ1bmN0aW9uKCl7dmFyIHQ9e25hbWU6dGhpcy5pY29ufTtyZXR1cm4hdGhpcy5pY29uQ29sb3J8fHRoaXMuaGFzRXJyb3J8fHRoaXMuaGFzV2FybmluZ3x8KHQuY29sb3I9dGhpcy5pY29uQ29sb3IpLHR9LGluc2V0SGFzTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm5bXCJsYWJlbFwiLFwiZnVsbFwiXS5pbmNsdWRlcyh0aGlzLmluc2V0KX19LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57X19maWVsZDp0aGlzfX0sbWV0aG9kczp7X19yZWdpc3RlcklucHV0OmZ1bmN0aW9uKHQpe3RoaXMuaW5wdXQ9dH0sX191bnJlZ2lzdGVySW5wdXQ6ZnVuY3Rpb24odCl7dCYmdCE9PXRoaXMuaW5wdXR8fCh0aGlzLmlucHV0PXt9KX0sX19nZXRCb3R0b21Db250ZW50OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0aGlzLmhhc0Vycm9yJiYoZT10aGlzLiRzbG90c1tcImVycm9yLWxhYmVsXCJdfHx0aGlzLmVycm9yTGFiZWwpP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWVycm9yIGNvbFwifSxlKTp0aGlzLmhhc1dhcm5pbmcmJihlPXRoaXMuJHNsb3RzW1wid2FybmluZy1sYWJlbFwiXXx8dGhpcy53YXJuaW5nTGFiZWwpP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLXdhcm5pbmcgY29sXCJ9LGUpOihlPXRoaXMuJHNsb3RzLmhlbHBlcnx8dGhpcy5oZWxwZXIpP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWhlbHBlciBjb2xcIn0sZSk6dChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCB0ZXh0LXRyYW5zcGFyZW50XCJ9LFtcInxcIl0pfSxfX2hhc0JvdHRvbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRzbG90c1tcImVycm9yLWxhYmVsXCJdfHx0aGlzLmVycm9yTGFiZWx8fHRoaXMuJHNsb3RzW1wid2FybmluZy1sYWJlbFwiXXx8dGhpcy53YXJuaW5nTGFiZWx8fHRoaXMuJHNsb3RzLmhlbHBlcnx8dGhpcy5oZWxwZXJ8fHRoaXMuY291bnR9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy4kc2xvdHMubGFiZWx8fHRoaXMubGFiZWw7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkIHJvdyBuby13cmFwIGl0ZW1zLXN0YXJ0XCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbdGhpcy5pY29uP3QoUUljb24se3Byb3BzOnRoaXMuaWNvblByb3BzLHN0YXRpY0NsYXNzOlwicS1maWVsZC1pY29uIHEtZmllbGQtbWFyZ2luXCJ9KTp0aGlzLmluc2V0SWNvbj90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1maWVsZC1pY29uXCJ9KTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgY29sXCJ9LFtlfHx0aGlzLmluc2V0SGFzTGFiZWw/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtbGFiZWwgcS1maWVsZC1tYXJnaW5cIixjbGFzczp0aGlzLmxhYmVsQ2xhc3Nlc30sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWxhYmVsLWlubmVyIHJvdyBpdGVtcy1jZW50ZXJcIn0sW3RoaXMuJHNsb3RzLmxhYmVsfHx0aGlzLmxhYmVsXSldKTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWNvbnRlbnRcIixjbGFzczp0aGlzLmlucHV0Q2xhc3Nlc30sW3RoaXMuJHNsb3RzLmRlZmF1bHQsdGhpcy5fX2hhc0JvdHRvbSgpP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWJvdHRvbSByb3cgbm8td3JhcFwifSxbdGhpcy5fX2dldEJvdHRvbUNvbnRlbnQodCksdGhpcy5jb3VudGVyP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWNvdW50ZXIgY29sLWF1dG9cIn0sW3RoaXMuY291bnRlcl0pOm51bGxdKTpudWxsXSldKV0pfX0sUUluZmluaXRlU2Nyb2xsPXtuYW1lOlwiUUluZmluaXRlU2Nyb2xsXCIscHJvcHM6e2hhbmRsZXI6e3R5cGU6RnVuY3Rpb24scmVxdWlyZWQ6ITB9LGlubGluZTpCb29sZWFuLG9mZnNldDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntpbmRleDowLGZldGNoaW5nOiExLHdvcmtpbmc6ITB9fSxtZXRob2RzOntwb2xsOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZmV0Y2hpbmcmJnRoaXMud29ya2luZyl7dmFyIHQ9aGVpZ2h0KHRoaXMuc2Nyb2xsQ29udGFpbmVyKSxlPW9mZnNldCh0aGlzLnNjcm9sbENvbnRhaW5lcikudG9wK3Q7b2Zmc2V0KHRoaXMuZWxlbWVudCkudG9wK2hlaWdodCh0aGlzLmVsZW1lbnQpLSh0aGlzLm9mZnNldHx8dCk8ZSYmdGhpcy5sb2FkTW9yZSgpfX0sbG9hZE1vcmU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzOyF0aGlzLmZldGNoaW5nJiZ0aGlzLndvcmtpbmcmJih0aGlzLmluZGV4KyssdGhpcy5mZXRjaGluZz0hMCx0aGlzLmhhbmRsZXIodGhpcy5pbmRleCxmdW5jdGlvbihlKXt0LmZldGNoaW5nPSExLGU/dC5zdG9wKCk6dC5lbGVtZW50LmNsb3Nlc3QoXCJib2R5XCIpJiZ0LnBvbGwoKX0pKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmluZGV4PTB9LHJlc3VtZTpmdW5jdGlvbigpeyEwIT09dGhpcy53b3JraW5nJiYodGhpcy53b3JraW5nPSEwLHRoaXMuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLnBvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKSksdGhpcy5pbW1lZGlhdGVQb2xsKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLndvcmtpbmc9ITEsdGhpcy5mZXRjaGluZz0hMSx0aGlzLnNjcm9sbENvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5wb2xsLGxpc3Rlbk9wdHMucGFzc2l2ZSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QuZWxlbWVudD10LiRyZWZzLmNvbnRlbnQsdC5zY3JvbGxDb250YWluZXI9dC5pbmxpbmU/dC4kZWw6Z2V0U2Nyb2xsVGFyZ2V0KHQuJGVsKSx0LnBvbGwoKSx0LmltbWVkaWF0ZVBvbGw9dC5wb2xsLHQucG9sbD1kZWJvdW5jZSh0LnBvbGwsNTApLCEwPT09dC53b3JraW5nJiZ0LnNjcm9sbENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdC5wb2xsLGxpc3Rlbk9wdHMucGFzc2l2ZSl9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLnBvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pbmZpbml0ZS1zY3JvbGxcIn0sW3QoXCJkaXZcIix7cmVmOlwiY29udGVudFwiLHN0YXRpY0NsYXNzOlwicS1pbmZpbml0ZS1zY3JvbGwtY29udGVudFwifSx0aGlzLiRzbG90cy5kZWZhdWx0KSx0aGlzLmZldGNoaW5nP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWluZmluaXRlLXNjcm9sbC1tZXNzYWdlXCJ9LHRoaXMuJHNsb3RzLm1lc3NhZ2UpOm51bGxdKX19LFFJbm5lckxvYWRpbmc9e25hbWU6XCJRSW5uZXJMb2FkaW5nXCIscHJvcHM6e2Rhcms6Qm9vbGVhbix2aXNpYmxlOkJvb2xlYW4sc2l6ZTp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDo0Mn0sY29sb3I6U3RyaW5nfSxyZW5kZXI6ZnVuY3Rpb24odCl7aWYodGhpcy52aXNpYmxlKXJldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pbm5lci1sb2FkaW5nIGFuaW1hdGUtZmFkZSBhYnNvbHV0ZS1mdWxsIGNvbHVtbiBmbGV4LWNlbnRlclwiLGNsYXNzOntkYXJrOnRoaXMuZGFya319LHRoaXMuJHNsb3RzLmRlZmF1bHR8fFt0KFFTcGlubmVyLHtwcm9wczp7c2l6ZTp0aGlzLnNpemUsY29sb3I6dGhpcy5jb2xvcn19KV0pfX0sUUp1bWJvdHJvbj17bmFtZTpcIlFKdW1ib3Ryb25cIixwcm9wczp7ZGFyazpCb29sZWFuLHRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRpdlwifSxpbWdTcmM6U3RyaW5nLGdyYWRpZW50OlN0cmluZ30sY29tcHV0ZWQ6e2dyYWRpZW50VHlwZTpmdW5jdGlvbigpe2lmKHRoaXMuZ3JhZGllbnQpcmV0dXJuIHRoaXMuZ3JhZGllbnQuaW5kZXhPZihcImNpcmNsZVwiKT4tMT9cInJhZGlhbFwiOlwibGluZWFyXCJ9LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbWdTcmM/e1wiYmFja2dyb3VuZC1pbWFnZVwiOlwidXJsKFwiK3RoaXMuaW1nU3JjK1wiKVwifTp0aGlzLmdyYWRpZW50VHlwZT97YmFja2dyb3VuZDp0aGlzLmdyYWRpZW50VHlwZStcIi1ncmFkaWVudChcIit0aGlzLmdyYWRpZW50K1wiKVwifTp2b2lkIDB9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQodGhpcy50YWcse3N0YXRpY0NsYXNzOlwicS1qdW1ib3Ryb25cIixzdHlsZTp0aGlzLmNvbXB1dGVkU3R5bGUsY2xhc3M6e1wicS1qdW1ib3Ryb24tZGFya1wiOnRoaXMuZGFya319LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUtub2I9e25hbWU6XCJRS25vYlwiLGRpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7dmFsdWU6TnVtYmVyLG1pbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxtYXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTAwfSxjb2xvcjpTdHJpbmcsdHJhY2tDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImdyZXktM1wifSxsaW5lV2lkdGg6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCI2cHhcIn0sc2l6ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIjEwMHB4XCJ9LHN0ZXA6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MX0sZGVjaW1hbHM6TnVtYmVyLGRpc2FibGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFufSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmRpc2FibGUmJnQucHVzaChcImRpc2FibGVkXCIpLHRoaXMucmVhZG9ubHl8fHQucHVzaChcImN1cnNvci1wb2ludGVyXCIpLHRoaXMuY29sb3ImJnQucHVzaChcInRleHQtXCIrdGhpcy5jb2xvciksdH0sc3ZnU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57XCJzdHJva2UtZGFzaGFycmF5XCI6XCIyOTUuMzFweCwgMjk1LjMxcHhcIixcInN0cm9rZS1kYXNob2Zmc2V0XCI6Mjk1LjMxKih0aGlzLiRxLmkxOG4ucnRsPy0xOjEpKigxLSh0aGlzLm1vZGVsLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pKStcInB4XCIsdHJhbnNpdGlvbjp0aGlzLmRyYWdnaW5nP1wiXCI6XCJzdHJva2UtZGFzaG9mZnNldCAwLjZzIGVhc2UgMHMsIHN0cm9rZSAwLjZzIGVhc2VcIn19LGVkaXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZGlzYWJsZSYmIXRoaXMucmVhZG9ubHl9LGNvbXB1dGVkRGVjaW1hbHM6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5kZWNpbWFscz90aGlzLmRlY2ltYWxzfHwwOihTdHJpbmcodGhpcy5zdGVwKS50cmltKFwiMFwiKS5zcGxpdChcIi5cIilbMV18fFwiXCIpLmxlbmd0aH0sY29tcHV0ZWRTdGVwOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZGVjaW1hbHM/MS9NYXRoLnBvdygxMCx0aGlzLmRlY2ltYWxzfHwwKTp0aGlzLnN0ZXB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vZGVsOnRoaXMudmFsdWUsZHJhZ2dpbmc6ITF9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0PHRoaXMubWluKXRoaXMubW9kZWw9dGhpcy5taW47ZWxzZXtpZighKHQ+dGhpcy5tYXgpKXt2YXIgaT10aGlzLmNvbXB1dGVkRGVjaW1hbHMmJlwibnVtYmVyXCI9PXR5cGVvZiB0P3BhcnNlRmxvYXQodC50b0ZpeGVkKHRoaXMuY29tcHV0ZWREZWNpbWFscykpOnQ7cmV0dXJuIHZvaWQoaSE9PXRoaXMubW9kZWwmJih0aGlzLm1vZGVsPWkpKX10aGlzLm1vZGVsPXRoaXMubWF4fXRoaXMuJGVtaXQoXCJpbnB1dFwiLHRoaXMubW9kZWwpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7ZS5tb2RlbCE9PWUudmFsdWUmJmUuJGVtaXQoXCJjaGFuZ2VcIixlLm1vZGVsKX0pfX0sbWV0aG9kczp7X19wYW46ZnVuY3Rpb24odCl7dGhpcy5lZGl0YWJsZSYmKHQuaXNGaW5hbD90aGlzLl9fZHJhZ1N0b3AodC5ldnQpOnQuaXNGaXJzdD90aGlzLl9fZHJhZ1N0YXJ0KHQuZXZ0KTp0aGlzLl9fZHJhZ01vdmUodC5ldnQpKX0sX19kcmFnU3RhcnQ6ZnVuY3Rpb24odCl7dGhpcy5lZGl0YWJsZSYmKHN0b3BBbmRQcmV2ZW50KHQpLHRoaXMuY2VudGVyUG9zaXRpb249dGhpcy5fX2dldENlbnRlcigpLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmRyYWdnaW5nPSEwLHRoaXMuX19vbklucHV0KHQpKX0sX19kcmFnTW92ZTpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nJiZ0aGlzLmVkaXRhYmxlJiYoc3RvcEFuZFByZXZlbnQodCksdGhpcy5fX29uSW5wdXQodCx0aGlzLmNlbnRlclBvc2l0aW9uKSl9LF9fZHJhZ1N0b3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmVkaXRhYmxlJiYoc3RvcEFuZFByZXZlbnQodCksdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5kcmFnZ2luZz0hMX0sMTAwKSx0aGlzLl9fb25JbnB1dCh0LHRoaXMuY2VudGVyUG9zaXRpb24sITApKX0sX19vbktleURvd246ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXlDb2RlO2lmKHRoaXMuZWRpdGFibGUmJlszNyw0MCwzOSwzOF0uaW5jbHVkZXMoZSkpe3N0b3BBbmRQcmV2ZW50KHQpO3ZhciBpPXQuY3RybEtleT8xMCp0aGlzLmNvbXB1dGVkU3RlcDp0aGlzLmNvbXB1dGVkU3RlcCxzPVszNyw0MF0uaW5jbHVkZXMoZSk/LWk6aTt0aGlzLl9fb25JbnB1dFZhbHVlKGJldHdlZW4odGhpcy5tb2RlbCtzLHRoaXMubWluLHRoaXMubWF4KSl9fSxfX29uS2V5VXA6ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXlDb2RlO3RoaXMuZWRpdGFibGUmJlszNyw0MCwzOSwzOF0uaW5jbHVkZXMoZSkmJnRoaXMuX19lbWl0Q2hhbmdlKCl9LF9fb25JbnB1dDpmdW5jdGlvbih0LGUsaSl7aWYodm9pZCAwPT09ZSYmKGU9dGhpcy5fX2dldENlbnRlcigpKSx0aGlzLmVkaXRhYmxlKXt2YXIgcz1wb3NpdGlvbih0KSxuPU1hdGguYWJzKHMudG9wLWUudG9wKSxvPU1hdGguc3FydChNYXRoLnBvdyhNYXRoLmFicyhzLnRvcC1lLnRvcCksMikrTWF0aC5wb3coTWF0aC5hYnMocy5sZWZ0LWUubGVmdCksMikpLHI9TWF0aC5hc2luKG4vbykqKDE4MC9NYXRoLlBJKTtyPXMudG9wPGUudG9wP2UubGVmdDxzLmxlZnQ/OTAtcjoyNzArcjplLmxlZnQ8cy5sZWZ0P3IrOTA6MjcwLXIsdGhpcy4kcS5pMThuLnJ0bCYmKHI9MzYwLXIpO3ZhciBhPXRoaXMubWluK3IvMzYwKih0aGlzLm1heC10aGlzLm1pbiksbD1hJXRoaXMuc3RlcCxjPWJldHdlZW4oYS1sKyhNYXRoLmFicyhsKT49dGhpcy5zdGVwLzI/KGw8MD8tMToxKSp0aGlzLnN0ZXA6MCksdGhpcy5taW4sdGhpcy5tYXgpO3RoaXMuX19vbklucHV0VmFsdWUoYyxpKX19LF9fb25JbnB1dFZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5jb21wdXRlZERlY2ltYWxzJiYodD1wYXJzZUZsb2F0KHQudG9GaXhlZCh0aGlzLmNvbXB1dGVkRGVjaW1hbHMpKSksdGhpcy5tb2RlbCE9PXQmJih0aGlzLm1vZGVsPXQpLHRoaXMuJGVtaXQoXCJkcmFnLXZhbHVlXCIsdCksdGhpcy52YWx1ZSE9PXQmJih0aGlzLiRlbWl0KFwiaW5wdXRcIix0KSxlJiZ0aGlzLl9fZW1pdENoYW5nZSh0KSl9LF9fZW1pdENoYW5nZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQmJih0PXRoaXMubW9kZWwpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7SlNPTi5zdHJpbmdpZnkodCkhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLHQpfSl9LF9fZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7dmFyIHQ9b2Zmc2V0KHRoaXMuJGVsKTtyZXR1cm57dG9wOnQudG9wK2hlaWdodCh0aGlzLiRlbCkvMixsZWZ0OnQubGVmdCt3aWR0aCh0aGlzLiRlbCkvMn19fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEta25vYiBub24tc2VsZWN0YWJsZVwiLGNsYXNzOnRoaXMuY2xhc3NlcyxzdHlsZTp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemV9fSxbdChcImRpdlwiLHtvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIWUuZHJhZ2dpbmcmJmUuX19vbklucHV0KHQsdm9pZCAwLCEwKX19LGRpcmVjdGl2ZXM6dGhpcy5lZGl0YWJsZT9be25hbWU6XCJ0b3VjaC1wYW5cIixtb2RpZmllcnM6e3ByZXZlbnQ6ITAsc3RvcDohMH0sdmFsdWU6dGhpcy5fX3Bhbn1dOm51bGx9LFt0KFwic3ZnXCIse2F0dHJzOnt2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0gNTAsNTAgbSAwLC00NyBhIDQ3LDQ3IDAgMSAxIDAsOTQgYSA0Nyw0NyAwIDEgMSAwLC05NFwiLFwiZmlsbC1vcGFjaXR5XCI6XCIwXCIsc3Ryb2tlOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2Utd2lkdGhcIjp0aGlzLmxpbmVXaWR0aH0sY2xhc3M6XCJ0ZXh0LVwiK3RoaXMudHJhY2tDb2xvcn0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTSA1MCw1MCBtIDAsLTQ3IGEgNDcsNDcgMCAxIDEgMCw5NCBhIDQ3LDQ3IDAgMSAxIDAsLTk0XCIsXCJmaWxsLW9wYWNpdHlcIjpcIjBcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZS1saW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlLXdpZHRoXCI6dGhpcy5saW5lV2lkdGh9LHN0eWxlOnRoaXMuc3ZnU3R5bGV9KV0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWtub2ItbGFiZWwgcm93IGZsZXgtY2VudGVyIGNvbnRlbnQtY2VudGVyXCIsYXR0cnM6e3RhYmluZGV4OnRoaXMuZWRpdGFibGU/MDotMX0sb246e2tleWRvd246dGhpcy5fX29uS2V5RG93bixrZXl1cDp0aGlzLl9fb25LZXlVcH19LHRoaXMuJHNsb3RzLmRlZmF1bHR8fFt0KFwic3BhblwiLFt0aGlzLm1vZGVsXSldKV0pXSl9fSxRU2Nyb2xsT2JzZXJ2YWJsZT17bmFtZTpcIlFTY3JvbGxPYnNlcnZhYmxlXCIscHJvcHM6e2RlYm91bmNlOk51bWJlcn0scmVuZGVyOmZ1bmN0aW9uKCl7fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3BvczowLGRpcjpcImRvd25cIixkaXJDaGFuZ2VkOiExLGRpckNoYW5nZVBvczowfX0sbWV0aG9kczp7Z2V0UG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm57cG9zaXRpb246dGhpcy5wb3MsZGlyZWN0aW9uOnRoaXMuZGlyLGRpcmVjdGlvbkNoYW5nZWQ6dGhpcy5kaXJDaGFuZ2VkLGluZmxleGlvblBvc2l0aW9uOnRoaXMuZGlyQ2hhbmdlUG9zfX0sdHJpZ2dlcjpmdW5jdGlvbih0KXshMD09PXR8fDA9PT10aGlzLmRlYm91bmNlP3RoaXMuZW1pdCgpOnRoaXMudGltZXJ8fCh0aGlzLnRpbWVyPXRoaXMuZGVib3VuY2U/c2V0VGltZW91dCh0aGlzLmVtaXQsdGhpcy5kZWJvdW5jZSk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuZW1pdCkpfSxlbWl0OmZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5tYXgoMCxnZXRTY3JvbGxQb3NpdGlvbih0aGlzLnRhcmdldCkpLGU9dC10aGlzLnBvczwwP1widXBcIjpcImRvd25cIjt0aGlzLmRpckNoYW5nZWQ9dGhpcy5kaXIhPT1lLHRoaXMuZGlyQ2hhbmdlZCYmKHRoaXMuZGlyPWUsdGhpcy5kaXJDaGFuZ2VQb3M9dGhpcy5wb3MpLHRoaXMudGltZXI9bnVsbCx0aGlzLnBvcz10LHRoaXMuJGVtaXQoXCJzY3JvbGxcIix0aGlzLmdldFBvc2l0aW9uKCkpfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMudGFyZ2V0PWdldFNjcm9sbFRhcmdldCh0aGlzLiRlbC5wYXJlbnROb2RlKSx0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy50cmlnZ2VyLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy50cmlnZ2VyKCEwKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKSx0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy50cmlnZ2VyLGxpc3Rlbk9wdHMucGFzc2l2ZSl9fSxRTGF5b3V0PXtuYW1lOlwiUUxheW91dFwiLHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57bGF5b3V0OnRoaXN9fSxwcm9wczp7Y29udGFpbmVyOkJvb2xlYW4sdmlldzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImhoaCBscHIgZmZmXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybi9eKGh8bCloKGh8cikgbHByIChmfGwpZihmfHIpJC8udGVzdCh0LnRvTG93ZXJDYXNlKCkpfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aGVpZ2h0Om9uU1NSPzA6d2luZG93LmlubmVySGVpZ2h0LHdpZHRoOm9uU1NSfHx0aGlzLmNvbnRhaW5lcj8wOndpbmRvdy5pbm5lcldpZHRoLGNvbnRhaW5lckhlaWdodDowLHNjcm9sbGJhcldpZHRoOm9uU1NSPzA6Z2V0U2Nyb2xsYmFyV2lkdGgoKSxoZWFkZXI6e3NpemU6MCxvZmZzZXQ6MCxzcGFjZTohMX0scmlnaHQ6e3NpemU6MzAwLG9mZnNldDowLHNwYWNlOiExfSxmb290ZXI6e3NpemU6MCxvZmZzZXQ6MCxzcGFjZTohMX0sbGVmdDp7c2l6ZTozMDAsb2Zmc2V0OjAsc3BhY2U6ITF9LHNjcm9sbDp7cG9zaXRpb246MCxkaXJlY3Rpb246XCJkb3duXCJ9fX0sY29tcHV0ZWQ6e3Jvd3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZpZXcudG9Mb3dlckNhc2UoKS5zcGxpdChcIiBcIik7cmV0dXJue3RvcDp0WzBdLnNwbGl0KFwiXCIpLG1pZGRsZTp0WzFdLnNwbGl0KFwiXCIpLGJvdHRvbTp0WzJdLnNwbGl0KFwiXCIpfX0sdGFyZ2V0U3R5bGU6ZnVuY3Rpb24oKXt2YXIgdDtpZigwIT09dGhpcy5zY3JvbGxiYXJXaWR0aClyZXR1cm4odD17fSlbdGhpcy4kcS5pMThuLnJ0bD9cImxlZnRcIjpcInJpZ2h0XCJdPXRoaXMuc2Nyb2xsYmFyV2lkdGgrXCJweFwiLHR9LHRhcmdldENoaWxkU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdDtpZigwIT09dGhpcy5zY3JvbGxiYXJXaWR0aClyZXR1cm4odD17fSlbdGhpcy4kcS5pMThuLnJ0bD9cInJpZ2h0XCI6XCJsZWZ0XCJdPTAsdFt0aGlzLiRxLmkxOG4ucnRsP1wibGVmdFwiOlwicmlnaHRcIl09XCItXCIrdGhpcy5zY3JvbGxiYXJXaWR0aCtcInB4XCIsdC53aWR0aD1cImNhbGMoMTAwJSArIFwiK3RoaXMuc2Nyb2xsYmFyV2lkdGgrXCJweClcIix0fX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuaW5zdGFuY2VzPXtoZWFkZXI6bnVsbCxyaWdodDpudWxsLGZvb3RlcjpudWxsLGxlZnQ6bnVsbH19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXRcIn0sW3QoUVNjcm9sbE9ic2VydmFibGUse29uOntzY3JvbGw6dGhpcy5fX29uUGFnZVNjcm9sbH19KSx0KFFSZXNpemVPYnNlcnZhYmxlLHtvbjp7cmVzaXplOnRoaXMuX19vblBhZ2VSZXNpemV9fSksdGhpcy4kc2xvdHMuZGVmYXVsdF0pO3JldHVybiB0aGlzLmNvbnRhaW5lcj90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtY29udGFpbmVyIHJlbGF0aXZlLXBvc2l0aW9uIG92ZXJmbG93LWhpZGRlblwifSxbdChRUmVzaXplT2JzZXJ2YWJsZSx7b246e3Jlc2l6ZTp0aGlzLl9fb25Db250YWluZXJSZXNpemV9fSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImFic29sdXRlLWZ1bGxcIixzdHlsZTp0aGlzLnRhcmdldFN0eWxlfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm92ZXJmbG93LWF1dG9cIixzdHlsZTp0aGlzLnRhcmdldENoaWxkU3R5bGV9LFtlXSldKV0pOmV9LG1ldGhvZHM6e19fYW5pbWF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy50aW1lcj9jbGVhclRpbWVvdXQodGhpcy50aW1lcik6ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwicS1sYXlvdXQtYW5pbWF0ZVwiKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJxLWxheW91dC1hbmltYXRlXCIpLHQudGltZXI9bnVsbH0sMTUwKX0sX19vblBhZ2VTY3JvbGw6ZnVuY3Rpb24odCl7dGhpcy5zY3JvbGw9dCx0aGlzLiRlbWl0KFwic2Nyb2xsXCIsdCl9LF9fb25QYWdlUmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaGVpZ2h0LGk9dC53aWR0aCxzPSExO3RoaXMuaGVpZ2h0IT09ZSYmKHM9ITAsdGhpcy5oZWlnaHQ9ZSx0aGlzLiRlbWl0KFwic2Nyb2xsSGVpZ2h0XCIsZSksdGhpcy5fX3VwZGF0ZVNjcm9sbGJhcldpZHRoKCkpLHRoaXMud2lkdGghPT1pJiYocz0hMCx0aGlzLndpZHRoPWkpLHMmJnRoaXMuJGVtaXQoXCJyZXNpemVcIix7aGVpZ2h0OmUsd2lkdGg6aX0pfSxfX29uQ29udGFpbmVyUmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaGVpZ2h0O3RoaXMuY29udGFpbmVySGVpZ2h0IT09ZSYmKHRoaXMuY29udGFpbmVySGVpZ2h0PWUsdGhpcy5fX3VwZGF0ZVNjcm9sbGJhcldpZHRoKCkpfSxfX3VwZGF0ZVNjcm9sbGJhcldpZHRoOmZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXIpe3ZhciB0PXRoaXMuaGVpZ2h0PnRoaXMuY29udGFpbmVySGVpZ2h0P2dldFNjcm9sbGJhcldpZHRoKCk6MDt0aGlzLnNjcm9sbGJhcldpZHRoIT09dCYmKHRoaXMuc2Nyb2xsYmFyV2lkdGg9dCl9fX19LGR1cmF0aW9uPTE1MCxRTGF5b3V0RHJhd2VyPXtuYW1lOlwiUUxheW91dERyYXdlclwiLGluamVjdDp7bGF5b3V0OntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFMYXlvdXREcmF3ZXIgbmVlZHMgdG8gYmUgY2hpbGQgb2YgUUxheW91dFwiKX19fSxtaXhpbnM6W01vZGVsVG9nZ2xlTWl4aW5dLGRpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7b3ZlcmxheTpCb29sZWFuLHNpZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJsZWZ0XCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImxlZnRcIixcInJpZ2h0XCJdLmluY2x1ZGVzKHQpfX0sd2lkdGg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MzAwfSxtaW5pOkJvb2xlYW4sbWluaVdpZHRoOnt0eXBlOk51bWJlcixkZWZhdWx0OjYwfSxicmVha3BvaW50Ont0eXBlOk51bWJlcixkZWZhdWx0Ojk5Mn0sYmVoYXZpb3I6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJkZWZhdWx0XCIsXCJkZXNrdG9wXCIsXCJtb2JpbGVcIl0uaW5jbHVkZXModCl9LGRlZmF1bHQ6XCJkZWZhdWx0XCJ9LHNob3dJZkFib3ZlOkJvb2xlYW4sY29udGVudFN0eWxlOk9iamVjdCxjb250ZW50Q2xhc3M6W1N0cmluZyxPYmplY3QsQXJyYXldLG5vSGlkZU9uUm91dGVDaGFuZ2U6Qm9vbGVhbixub1N3aXBlT3BlbjpCb29sZWFuLG5vU3dpcGVDbG9zZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaG93SWZBYm92ZXx8dm9pZCAwPT09dGhpcy52YWx1ZXx8dGhpcy52YWx1ZSxlPVwibW9iaWxlXCIhPT10aGlzLmJlaGF2aW9yJiZ0aGlzLmJyZWFrcG9pbnQ8dGhpcy5sYXlvdXQud2lkdGgmJiF0aGlzLm92ZXJsYXkmJnQ7cmV0dXJuIHZvaWQgMCE9PXRoaXMudmFsdWUmJnRoaXMudmFsdWUhPT1lJiZ0aGlzLiRlbWl0KFwiaW5wdXRcIixlKSx7c2hvd2luZzplLGJlbG93QnJlYWtwb2ludDpcIm1vYmlsZVwiPT09dGhpcy5iZWhhdmlvcnx8XCJkZXNrdG9wXCIhPT10aGlzLmJlaGF2aW9yJiZ0aGlzLmJyZWFrcG9pbnQ+PXRoaXMubGF5b3V0LndpZHRoLGxhcmdlU2NyZWVuU3RhdGU6dCxtb2JpbGVPcGVuZWQ6ITF9fSx3YXRjaDp7YmVsb3dCcmVha3BvaW50OmZ1bmN0aW9uKHQpe3RoaXMubW9iaWxlT3BlbmVkfHwodD8odGhpcy5vdmVybGF5fHwodGhpcy5sYXJnZVNjcmVlblN0YXRlPXRoaXMuc2hvd2luZyksdGhpcy5oaWRlKCExKSk6dGhpcy5vdmVybGF5fHx0aGlzW3RoaXMubGFyZ2VTY3JlZW5TdGF0ZT9cInNob3dcIjpcImhpZGVcIl0oITEpKX0sc2lkZTpmdW5jdGlvbih0LGUpe3RoaXMubGF5b3V0W2VdLnNwYWNlPSExLHRoaXMubGF5b3V0W2VdLm9mZnNldD0wfSxiZWhhdmlvcjpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlTG9jYWwoXCJiZWxvd0JyZWFrcG9pbnRcIixcIm1vYmlsZVwiPT09dHx8XCJkZXNrdG9wXCIhPT10JiZ0aGlzLmJyZWFrcG9pbnQ+PXRoaXMubGF5b3V0LndpZHRoKX0sYnJlYWtwb2ludDpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlTG9jYWwoXCJiZWxvd0JyZWFrcG9pbnRcIixcIm1vYmlsZVwiPT09dGhpcy5iZWhhdmlvcnx8XCJkZXNrdG9wXCIhPT10aGlzLmJlaGF2aW9yJiZ0Pj10aGlzLmxheW91dC53aWR0aCl9LFwibGF5b3V0LndpZHRoXCI6ZnVuY3Rpb24odCl7dGhpcy5fX3VwZGF0ZUxvY2FsKFwiYmVsb3dCcmVha3BvaW50XCIsXCJtb2JpbGVcIj09PXRoaXMuYmVoYXZpb3J8fFwiZGVza3RvcFwiIT09dGhpcy5iZWhhdmlvciYmdGhpcy5icmVha3BvaW50Pj10KX0sXCJsYXlvdXQuc2Nyb2xsYmFyV2lkdGhcIjpmdW5jdGlvbigpe3RoaXMuYXBwbHlQb3NpdGlvbih0aGlzLnNob3dpbmc/MDp2b2lkIDApfSxvZmZzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHQpfSxvbkxheW91dDpmdW5jdGlvbih0KXt0aGlzLiRlbWl0KFwib24tbGF5b3V0XCIsdCksdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsdCl9LCRyb3V0ZTpmdW5jdGlvbigpe3RoaXMubm9IaWRlT25Sb3V0ZUNoYW5nZXx8KHRoaXMubW9iaWxlT3BlbmVkfHx0aGlzLm9uU2NyZWVuT3ZlcmxheSkmJnRoaXMuaGlkZSgpfSxyaWdodFNpZGU6ZnVuY3Rpb24oKXt0aGlzLmFwcGx5UG9zaXRpb24oKX0sc2l6ZTpmdW5jdGlvbih0KXt0aGlzLmFwcGx5UG9zaXRpb24oKSx0aGlzLl9fdXBkYXRlKFwic2l6ZVwiLHQpfSxcIiRxLmkxOG4ucnRsXCI6ZnVuY3Rpb24oKXt0aGlzLmFwcGx5UG9zaXRpb24oKX0sbWluaTpmdW5jdGlvbigpe3RoaXMudmFsdWUmJnRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpfX0sY29tcHV0ZWQ6e3JpZ2h0U2lkZTpmdW5jdGlvbigpe3JldHVyblwicmlnaHRcIj09PXRoaXMuc2lkZX0sb2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc2hvd2luZ3x8dGhpcy5tb2JpbGVPcGVuZWR8fHRoaXMub3ZlcmxheT8wOnRoaXMuc2l6ZX0sc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTWluaT90aGlzLm1pbmlXaWR0aDp0aGlzLndpZHRofSxmaXhlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm92ZXJsYXl8fHRoaXMubGF5b3V0LnZpZXcuaW5kZXhPZih0aGlzLnJpZ2h0U2lkZT9cIlJcIjpcIkxcIik+LTF9LG9uTGF5b3V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hvd2luZyYmIXRoaXMubW9iaWxlVmlldyYmIXRoaXMub3ZlcmxheX0sb25TY3JlZW5PdmVybGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hvd2luZyYmIXRoaXMubW9iaWxlVmlldyYmdGhpcy5vdmVybGF5fSxiYWNrZHJvcENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue1wibm8tcG9pbnRlci1ldmVudHNcIjohdGhpcy5zaG93aW5nfHwhdGhpcy5tb2JpbGVWaWV3fX0sbW9iaWxlVmlldzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJlbG93QnJlYWtwb2ludHx8dGhpcy5tb2JpbGVPcGVuZWR9LGhlYWRlclNsb3Q6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5vdmVybGF5JiYodGhpcy5yaWdodFNpZGU/XCJyXCI9PT10aGlzLmxheW91dC5yb3dzLnRvcFsyXTpcImxcIj09PXRoaXMubGF5b3V0LnJvd3MudG9wWzBdKX0sZm9vdGVyU2xvdDpmdW5jdGlvbigpe3JldHVybiF0aGlzLm92ZXJsYXkmJih0aGlzLnJpZ2h0U2lkZT9cInJcIj09PXRoaXMubGF5b3V0LnJvd3MuYm90dG9tWzJdOlwibFwiPT09dGhpcy5sYXlvdXQucm93cy5ib3R0b21bMF0pfSxiZWxvd0NsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue2ZpeGVkOiEwLFwib24tdG9wXCI6ITAsXCJxLWxheW91dC1kcmF3ZXItZGVsaW1pdGVyXCI6dGhpcy5maXhlZCYmdGhpcy5zaG93aW5nLFwicS1sYXlvdXQtZHJhd2VyLW1vYmlsZVwiOiEwLFwidG9wLXBhZGRpbmdcIjohMH19LGFib3ZlQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm57Zml4ZWQ6dGhpcy5maXhlZHx8IXRoaXMub25MYXlvdXQsXCJxLWxheW91dC1kcmF3ZXItbWluaVwiOnRoaXMuaXNNaW5pLFwicS1sYXlvdXQtZHJhd2VyLW5vcm1hbFwiOiF0aGlzLmlzTWluaSxcInEtbGF5b3V0LWRyYXdlci1kZWxpbWl0ZXJcIjp0aGlzLmZpeGVkJiZ0aGlzLnNob3dpbmcsXCJ0b3AtcGFkZGluZ1wiOnRoaXMuaGVhZGVyU2xvdH19LGFib3ZlU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5sYXlvdXQuaGVhZGVyLnNwYWNlJiYhdGhpcy5oZWFkZXJTbG90JiYodGhpcy5maXhlZD90LnRvcD10aGlzLmxheW91dC5oZWFkZXIub2Zmc2V0K1wicHhcIjp0aGlzLmxheW91dC5oZWFkZXIuc3BhY2UmJih0LnRvcD10aGlzLmxheW91dC5oZWFkZXIuc2l6ZStcInB4XCIpKSx0aGlzLmxheW91dC5mb290ZXIuc3BhY2UmJiF0aGlzLmZvb3RlclNsb3QmJih0aGlzLmZpeGVkP3QuYm90dG9tPXRoaXMubGF5b3V0LmZvb3Rlci5vZmZzZXQrXCJweFwiOnRoaXMubGF5b3V0LmZvb3Rlci5zcGFjZSYmKHQuYm90dG9tPXRoaXMubGF5b3V0LmZvb3Rlci5zaXplK1wicHhcIikpLHR9LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5jb250ZW50U3R5bGUse3dpZHRoOnRoaXMuc2l6ZStcInB4XCJ9LHRoaXMubW9iaWxlVmlldz9cIlwiOnRoaXMuYWJvdmVTdHlsZV19LGNvbXB1dGVkQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5bXCJxLWxheW91dC1kcmF3ZXItXCIrdGhpcy5zaWRlLHRoaXMubGF5b3V0LmNvbnRhaW5lcj9cIm92ZXJmbG93LWF1dG9cIjpcInNjcm9sbFwiLHRoaXMuY29udGVudENsYXNzLHRoaXMubW9iaWxlVmlldz90aGlzLmJlbG93Q2xhc3M6dGhpcy5hYm92ZUNsYXNzXX0sc3RhdGVEaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy4kcS5pMThuLnJ0bD8tMToxKSoodGhpcy5yaWdodFNpZGU/MTotMSl9LGlzTWluaTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1pbmkmJiF0aGlzLm1vYmlsZVZpZXd9LG9uTmF0aXZlRXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5tb2JpbGVWaWV3KXJldHVybntcIiFjbGlja1wiOmZ1bmN0aW9uKGUpe3QuJGVtaXQoXCJjbGlja1wiLGUpfSxtb3VzZW92ZXI6ZnVuY3Rpb24oZSl7dC4kZW1pdChcIm1vdXNlb3ZlclwiLGUpfSxtb3VzZW91dDpmdW5jdGlvbihlKXt0LiRlbWl0KFwibW91c2VvdXRcIixlKX19fX0sbWV0aG9kczp7YXBwbHlQb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQ/dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0PWUuc2hvd2luZz8wOmUuc2l6ZSxlLmFwcGx5UG9zaXRpb24oZS5zdGF0ZURpcmVjdGlvbip0KX0pOnRoaXMuJHJlZnMuY29udGVudCYmKHRoaXMubGF5b3V0LmNvbnRhaW5lciYmdGhpcy5yaWdodFNpZGUmJih0aGlzLm1vYmlsZVZpZXd8fE1hdGguYWJzKHQpPT09dGhpcy5zaXplKSYmKHQrPXRoaXMuc3RhdGVEaXJlY3Rpb24qdGhpcy5sYXlvdXQuc2Nyb2xsYmFyV2lkdGgpLHRoaXMuJHJlZnMuY29udGVudC5zdHlsZS50cmFuc2Zvcm09XCJ0cmFuc2xhdGVYKFwiK3QrXCJweClcIil9LGFwcGx5QmFja2Ryb3A6ZnVuY3Rpb24odCl7dGhpcy4kcmVmcy5iYWNrZHJvcCYmKHRoaXMuJHJlZnMuYmFja2Ryb3Auc3R5bGUuYmFja2dyb3VuZENvbG9yPVwicmdiYSgwLDAsMCxcIisuNCp0K1wiKVwiKX0sX19zZXRTY3JvbGxhYmxlOmZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0LmNvbnRhaW5lcnx8ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3RbdD9cImFkZFwiOlwicmVtb3ZlXCJdKFwicS1ib2R5LWRyYXdlci10b2dnbGVcIil9LF9fb3BlbkJ5VG91Y2g6ZnVuY3Rpb24odCl7aWYodGhpcy5iZWxvd0JyZWFrcG9pbnQpe3ZhciBlPXRoaXMuc2l6ZSxpPWJldHdlZW4odC5kaXN0YW5jZS54LDAsZSk7aWYodC5pc0ZpbmFsKXt2YXIgcz10aGlzLiRyZWZzLmNvbnRlbnQsbj1pPj1NYXRoLm1pbig3NSxlKTtyZXR1cm4gcy5jbGFzc0xpc3QucmVtb3ZlKFwibm8tdHJhbnNpdGlvblwiKSx2b2lkKG4/dGhpcy5zaG93KCk6KHRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpLHRoaXMuYXBwbHlCYWNrZHJvcCgwKSx0aGlzLmFwcGx5UG9zaXRpb24odGhpcy5zdGF0ZURpcmVjdGlvbiplKSxzLmNsYXNzTGlzdC5yZW1vdmUoXCJxLWxheW91dC1kcmF3ZXItZGVsaW1pdGVyXCIpKSl9aWYodGhpcy5hcHBseVBvc2l0aW9uKCh0aGlzLiRxLmkxOG4ucnRsPyF0aGlzLnJpZ2h0U2lkZTp0aGlzLnJpZ2h0U2lkZSk/TWF0aC5tYXgoZS1pLDApOk1hdGgubWluKDAsaS1lKSksdGhpcy5hcHBseUJhY2tkcm9wKGJldHdlZW4oaS9lLDAsMSkpLHQuaXNGaXJzdCl7dmFyIG89dGhpcy4kcmVmcy5jb250ZW50O28uY2xhc3NMaXN0LmFkZChcIm5vLXRyYW5zaXRpb25cIiksby5jbGFzc0xpc3QuYWRkKFwicS1sYXlvdXQtZHJhd2VyLWRlbGltaXRlclwiKX19fSxfX2Nsb3NlQnlUb3VjaDpmdW5jdGlvbih0KXtpZih0aGlzLm1vYmlsZU9wZW5lZCl7dmFyIGU9dGhpcy5zaXplLGk9dC5kaXJlY3Rpb249PT10aGlzLnNpZGUscz0odGhpcy4kcS5pMThuLnJ0bD8haTppKT9iZXR3ZWVuKHQuZGlzdGFuY2UueCwwLGUpOjA7aWYodC5pc0ZpbmFsKXt2YXIgbj1NYXRoLmFicyhzKTxNYXRoLm1pbig3NSxlKTtyZXR1cm4gdGhpcy4kcmVmcy5jb250ZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJuby10cmFuc2l0aW9uXCIpLHZvaWQobj8odGhpcy5sYXlvdXQuX19hbmltYXRlKCksdGhpcy5hcHBseUJhY2tkcm9wKDEpLHRoaXMuYXBwbHlQb3NpdGlvbigwKSk6dGhpcy5oaWRlKCkpfXRoaXMuYXBwbHlQb3NpdGlvbih0aGlzLnN0YXRlRGlyZWN0aW9uKnMpLHRoaXMuYXBwbHlCYWNrZHJvcChiZXR3ZWVuKDEtcy9lLDAsMSkpLHQuaXNGaXJzdCYmdGhpcy4kcmVmcy5jb250ZW50LmNsYXNzTGlzdC5hZGQoXCJuby10cmFuc2l0aW9uXCIpfX0sX19zaG93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9ITApLHQmJnRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpLHRoaXMuYXBwbHlQb3NpdGlvbigwKTt2YXIgaT10aGlzLmxheW91dC5pbnN0YW5jZXNbdGhpcy5yaWdodFNpZGU/XCJsZWZ0XCI6XCJyaWdodFwiXTtpJiZpLm1vYmlsZU9wZW5lZCYmaS5oaWRlKCksdGhpcy5iZWxvd0JyZWFrcG9pbnQ/KHRoaXMubW9iaWxlT3BlbmVkPSEwLHRoaXMuYXBwbHlCYWNrZHJvcCgxKSx0aGlzLmxheW91dC5jb250YWluZXJ8fCh0aGlzLnByZXZlbnRlZFNjcm9sbD0hMCxwcmV2ZW50U2Nyb2xsKCEwKSkpOnRoaXMuX19zZXRTY3JvbGxhYmxlKCEwKSxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5zaG93UHJvbWlzZSYmKGUuc2hvd1Byb21pc2UudGhlbihmdW5jdGlvbigpe2UuX19zZXRTY3JvbGxhYmxlKCExKX0pLGUuc2hvd1Byb21pc2VSZXNvbHZlKCkpfSxkdXJhdGlvbil9LF9faGlkZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQmJih0PSEwKSx0JiZ0aGlzLmxheW91dC5fX2FuaW1hdGUoKSx0aGlzLm1vYmlsZU9wZW5lZCYmKHRoaXMubW9iaWxlT3BlbmVkPSExKSx0aGlzLmFwcGx5UG9zaXRpb24odGhpcy5zdGF0ZURpcmVjdGlvbip0aGlzLnNpemUpLHRoaXMuYXBwbHlCYWNrZHJvcCgwKSx0aGlzLl9fY2xlYW51cCgpLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmhpZGVQcm9taXNlJiZlLmhpZGVQcm9taXNlUmVzb2x2ZSgpfSxkdXJhdGlvbil9LF9fY2xlYW51cDpmdW5jdGlvbigpe3RoaXMucHJldmVudGVkU2Nyb2xsJiYodGhpcy5wcmV2ZW50ZWRTY3JvbGw9ITEscHJldmVudFNjcm9sbCghMSkpLHRoaXMuX19zZXRTY3JvbGxhYmxlKCExKX0sX191cGRhdGU6ZnVuY3Rpb24odCxlKXt0aGlzLmxheW91dFt0aGlzLnNpZGVdW3RdIT09ZSYmKHRoaXMubGF5b3V0W3RoaXMuc2lkZV1bdF09ZSl9LF9fdXBkYXRlTG9jYWw6ZnVuY3Rpb24odCxlKXt0aGlzW3RdIT09ZSYmKHRoaXNbdF09ZSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5sYXlvdXQuaW5zdGFuY2VzW3RoaXMuc2lkZV09dGhpcyx0aGlzLl9fdXBkYXRlKFwic2l6ZVwiLHRoaXMuc2l6ZSksdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsdGhpcy5vbkxheW91dCksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHRoaXMub2Zmc2V0KX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuYXBwbHlQb3NpdGlvbih0aGlzLnNob3dpbmc/MDp2b2lkIDApfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuc2hvd2luZyYmdGhpcy5fX2NsZWFudXAoKSx0aGlzLmxheW91dC5pbnN0YW5jZXNbdGhpcy5zaWRlXT09PXRoaXMmJih0aGlzLmxheW91dC5pbnN0YW5jZXNbdGhpcy5zaWRlXT1udWxsLHRoaXMuX191cGRhdGUoXCJzaXplXCIsMCksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLDApLHRoaXMuX191cGRhdGUoXCJzcGFjZVwiLCExKSl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZHJhd2VyLWNvbnRhaW5lclwifSxbdGhpcy5tb2JpbGVWaWV3JiYhdGhpcy5ub1N3aXBlT3Blbj90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtZHJhd2VyLW9wZW5lciBmaXhlZC1cIit0aGlzLnNpZGUsZGlyZWN0aXZlczpbe25hbWU6XCJ0b3VjaC1wYW5cIixtb2RpZmllcnM6e2hvcml6b250YWw6ITB9LHZhbHVlOnRoaXMuX19vcGVuQnlUb3VjaH1dfSk6bnVsbCx0KFwiZGl2XCIse3JlZjpcImJhY2tkcm9wXCIsc3RhdGljQ2xhc3M6XCJmdWxsc2NyZWVuIHEtbGF5b3V0LWJhY2tkcm9wIHEtbGF5b3V0LXRyYW5zaXRpb25cIixjbGFzczp0aGlzLmJhY2tkcm9wQ2xhc3Msb246e2NsaWNrOnRoaXMuaGlkZX0sZGlyZWN0aXZlczpbe25hbWU6XCJ0b3VjaC1wYW5cIixtb2RpZmllcnM6e2hvcml6b250YWw6ITB9LHZhbHVlOnRoaXMuX19jbG9zZUJ5VG91Y2h9XX0pXS5jb25jYXQoW3QoXCJhc2lkZVwiLHtyZWY6XCJjb250ZW50XCIsc3RhdGljQ2xhc3M6XCJxLWxheW91dC1kcmF3ZXIgcS1sYXlvdXQtdHJhbnNpdGlvblwiLGNsYXNzOnRoaXMuY29tcHV0ZWRDbGFzcyxzdHlsZTp0aGlzLmNvbXB1dGVkU3R5bGUsYXR0cnM6dGhpcy4kYXR0cnMsb246dGhpcy5vbk5hdGl2ZUV2ZW50cyxkaXJlY3RpdmVzOnRoaXMubW9iaWxlVmlldyYmIXRoaXMubm9Td2lwZUNsb3NlP1t7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7aG9yaXpvbnRhbDohMH0sdmFsdWU6dGhpcy5fX2Nsb3NlQnlUb3VjaH1dOm51bGx9LHRoaXMuaXNNaW5pJiZ0aGlzLiRzbG90cy5taW5pP1t0aGlzLiRzbG90cy5taW5pXTp0aGlzLiRzbG90cy5kZWZhdWx0KV0pKX19LFFXaW5kb3dSZXNpemVPYnNlcnZhYmxlPXtuYW1lOlwiUVdpbmRvd1Jlc2l6ZU9ic2VydmFibGVcIixwcm9wczp7ZGVib3VuY2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6ODB9fSxyZW5kZXI6ZnVuY3Rpb24oKXt9LG1ldGhvZHM6e3RyaWdnZXI6ZnVuY3Rpb24oKXswPT09dGhpcy5kZWJvdW5jZT90aGlzLmVtaXQoKTp0aGlzLnRpbWVyfHwodGhpcy50aW1lcj1zZXRUaW1lb3V0KHRoaXMuZW1pdCx0aGlzLmRlYm91bmNlKSl9LGVtaXQ6ZnVuY3Rpb24odCl7dGhpcy50aW1lcj1udWxsLHRoaXMuJGVtaXQoXCJyZXNpemVcIix7aGVpZ2h0OnQ/MDp3aW5kb3cuaW5uZXJIZWlnaHQsd2lkdGg6dD8wOndpbmRvdy5pbm5lcldpZHRofSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5lbWl0KG9uU1NSKX0sbW91bnRlZDpmdW5jdGlvbigpe2Zyb21TU1ImJnRoaXMuZW1pdCgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy50cmlnZ2VyLGxpc3Rlbk9wdHMucGFzc2l2ZSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLnRyaWdnZXIsbGlzdGVuT3B0cy5wYXNzaXZlKX19LFFMYXlvdXRGb290ZXI9e25hbWU6XCJRTGF5b3V0Rm9vdGVyXCIsbWl4aW5zOltDYW5SZW5kZXJNaXhpbl0saW5qZWN0OntsYXlvdXQ6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUUxheW91dEZvb3RlciBuZWVkcyB0byBiZSBjaGlsZCBvZiBRTGF5b3V0XCIpfX19LHByb3BzOnt2YWx1ZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LHJldmVhbDpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3NpemU6MCxyZXZlYWxlZDohMCx3aW5kb3dIZWlnaHQ6b25TU1J8fHRoaXMubGF5b3V0LmNvbnRhaW5lcj8wOndpbmRvdy5pbm5lckhlaWdodH19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0KSx0aGlzLl9fdXBkYXRlTG9jYWwoXCJyZXZlYWxlZFwiLCEwKSx0aGlzLmxheW91dC5fX2FuaW1hdGUoKX0sb2Zmc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGUoXCJvZmZzZXRcIix0KX0scmV2ZWFsOmZ1bmN0aW9uKHQpe3R8fHRoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsdGhpcy52YWx1ZSl9LHJldmVhbGVkOmZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpLHRoaXMuJGVtaXQoXCJyZXZlYWxcIix0KX0sXCJsYXlvdXQuc2Nyb2xsXCI6ZnVuY3Rpb24oKXt0aGlzLl9fdXBkYXRlUmV2ZWFsZWQoKX0sXCJsYXlvdXQuaGVpZ2h0XCI6ZnVuY3Rpb24oKXt0aGlzLl9fdXBkYXRlUmV2ZWFsZWQoKX0sc2l6ZTpmdW5jdGlvbigpe3RoaXMuX191cGRhdGVSZXZlYWxlZCgpfX0sY29tcHV0ZWQ6e2ZpeGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmV2ZWFsfHx0aGlzLmxheW91dC52aWV3LmluZGV4T2YoXCJGXCIpPi0xfHx0aGlzLmxheW91dC5jb250YWluZXJ9LGNvbnRhaW5lckhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dC5jb250YWluZXI/dGhpcy5sYXlvdXQuY29udGFpbmVySGVpZ2h0OnRoaXMud2luZG93SGVpZ2h0fSxvZmZzZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jYW5SZW5kZXJ8fCF0aGlzLnZhbHVlKXJldHVybiAwO2lmKHRoaXMuZml4ZWQpcmV0dXJuIHRoaXMucmV2ZWFsZWQ/dGhpcy5zaXplOjA7dmFyIHQ9dGhpcy5sYXlvdXQuc2Nyb2xsLnBvc2l0aW9uK3RoaXMuY29udGFpbmVySGVpZ2h0K3RoaXMuc2l6ZS10aGlzLmxheW91dC5oZWlnaHQ7cmV0dXJuIHQ+MD90OjB9LGNvbXB1dGVkQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm57XCJmaXhlZC1ib3R0b21cIjp0aGlzLmZpeGVkLFwiYWJzb2x1dGUtYm90dG9tXCI6IXRoaXMuZml4ZWQsaGlkZGVuOiF0aGlzLnZhbHVlJiYhdGhpcy5maXhlZCxcInEtbGF5b3V0LWZvb3Rlci1oaWRkZW5cIjohdGhpcy5jYW5SZW5kZXJ8fCF0aGlzLnZhbHVlfHx0aGlzLmZpeGVkJiYhdGhpcy5yZXZlYWxlZH19LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxheW91dC5yb3dzLmJvdHRvbSxlPXt9O3JldHVyblwibFwiPT09dFswXSYmdGhpcy5sYXlvdXQubGVmdC5zcGFjZSYmKGVbdGhpcy4kcS5pMThuLnJ0bD9cInJpZ2h0XCI6XCJsZWZ0XCJdPXRoaXMubGF5b3V0LmxlZnQuc2l6ZStcInB4XCIpLFwiclwiPT09dFsyXSYmdGhpcy5sYXlvdXQucmlnaHQuc3BhY2UmJihlW3RoaXMuJHEuaTE4bi5ydGw/XCJsZWZ0XCI6XCJyaWdodFwiXT10aGlzLmxheW91dC5yaWdodC5zaXplK1wicHhcIiksZX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImZvb3RlclwiLHtzdGF0aWNDbGFzczpcInEtbGF5b3V0LWZvb3RlciBxLWxheW91dC1tYXJnaW5hbCBxLWxheW91dC10cmFuc2l0aW9uXCIsY2xhc3M6dGhpcy5jb21wdXRlZENsYXNzLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZX0sW3QoUVJlc2l6ZU9ic2VydmFibGUse3Byb3BzOntkZWJvdW5jZTowfSxvbjp7cmVzaXplOnRoaXMuX19vblJlc2l6ZX19KSwhdGhpcy5sYXlvdXQuY29udGFpbmVyJiZ0KFFXaW5kb3dSZXNpemVPYnNlcnZhYmxlLHtwcm9wczp7ZGVib3VuY2U6MH0sb246e3Jlc2l6ZTp0aGlzLl9fb25XaW5kb3dSZXNpemV9fSl8fHZvaWQgMCx0aGlzLiRzbG90cy5kZWZhdWx0XSl9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmxheW91dC5pbnN0YW5jZXMuZm9vdGVyPXRoaXMsdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsdGhpcy52YWx1ZSksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHRoaXMub2Zmc2V0KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMubGF5b3V0Lmluc3RhbmNlcy5mb290ZXI9PT10aGlzJiYodGhpcy5sYXlvdXQuaW5zdGFuY2VzLmZvb3Rlcj1udWxsLHRoaXMuX191cGRhdGUoXCJzaXplXCIsMCksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLDApLHRoaXMuX191cGRhdGUoXCJzcGFjZVwiLCExKSl9LG1ldGhvZHM6e19fb25SZXNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQ7dGhpcy5fX3VwZGF0ZUxvY2FsKFwic2l6ZVwiLGUpLHRoaXMuX191cGRhdGUoXCJzaXplXCIsZSl9LF9fb25XaW5kb3dSZXNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQ7dGhpcy5fX3VwZGF0ZUxvY2FsKFwid2luZG93SGVpZ2h0XCIsZSl9LF9fdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXlvdXQuZm9vdGVyW3RdIT09ZSYmKHRoaXMubGF5b3V0LmZvb3Rlclt0XT1lKX0sX191cGRhdGVMb2NhbDpmdW5jdGlvbih0LGUpe3RoaXNbdF0hPT1lJiYodGhpc1t0XT1lKX0sX191cGRhdGVSZXZlYWxlZDpmdW5jdGlvbigpe2lmKHRoaXMucmV2ZWFsKXt2YXIgdD10aGlzLmxheW91dC5zY3JvbGwsZT10LmRpcmVjdGlvbixpPXQucG9zaXRpb24scz10LmluZmxleGlvblBvc2l0aW9uO3RoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsXCJ1cFwiPT09ZXx8aS1zPDEwMHx8dGhpcy5sYXlvdXQuaGVpZ2h0LXRoaXMuY29udGFpbmVySGVpZ2h0LWktdGhpcy5zaXplPDMwMCl9fX19LFFMYXlvdXRIZWFkZXI9e25hbWU6XCJRTGF5b3V0SGVhZGVyXCIsbWl4aW5zOltDYW5SZW5kZXJNaXhpbl0saW5qZWN0OntsYXlvdXQ6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUUxheW91dEhlYWRlciBuZWVkcyB0byBiZSBjaGlsZCBvZiBRTGF5b3V0XCIpfX19LHByb3BzOnt2YWx1ZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LHJldmVhbDpCb29sZWFuLHJldmVhbE9mZnNldDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoyNTB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3NpemU6MCxyZXZlYWxlZDohMH19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0KSx0aGlzLl9fdXBkYXRlTG9jYWwoXCJyZXZlYWxlZFwiLCEwKSx0aGlzLmxheW91dC5fX2FuaW1hdGUoKX0sb2Zmc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGUoXCJvZmZzZXRcIix0KX0scmV2ZWFsOmZ1bmN0aW9uKHQpe3R8fHRoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsdGhpcy52YWx1ZSl9LHJldmVhbGVkOmZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpLHRoaXMuJGVtaXQoXCJyZXZlYWxcIix0KX0sXCJsYXlvdXQuc2Nyb2xsXCI6ZnVuY3Rpb24odCl7dGhpcy5yZXZlYWwmJnRoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsXCJ1cFwiPT09dC5kaXJlY3Rpb258fHQucG9zaXRpb248PXRoaXMucmV2ZWFsT2Zmc2V0fHx0LnBvc2l0aW9uLXQuaW5mbGV4aW9uUG9zaXRpb248MTAwKX19LGNvbXB1dGVkOntmaXhlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJldmVhbHx8dGhpcy5sYXlvdXQudmlldy5pbmRleE9mKFwiSFwiKT4tMXx8dGhpcy5sYXlvdXQuY29udGFpbmVyfSxvZmZzZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jYW5SZW5kZXJ8fCF0aGlzLnZhbHVlKXJldHVybiAwO2lmKHRoaXMuZml4ZWQpcmV0dXJuIHRoaXMucmV2ZWFsZWQ/dGhpcy5zaXplOjA7dmFyIHQ9dGhpcy5zaXplLXRoaXMubGF5b3V0LnNjcm9sbC5wb3NpdGlvbjtyZXR1cm4gdD4wP3Q6MH0sY29tcHV0ZWRDbGFzczpmdW5jdGlvbigpe3JldHVybntcImZpeGVkLXRvcFwiOnRoaXMuZml4ZWQsXCJhYnNvbHV0ZS10b3BcIjohdGhpcy5maXhlZCxcInEtbGF5b3V0LWhlYWRlci1oaWRkZW5cIjohdGhpcy5jYW5SZW5kZXJ8fCF0aGlzLnZhbHVlfHx0aGlzLmZpeGVkJiYhdGhpcy5yZXZlYWxlZH19LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxheW91dC5yb3dzLnRvcCxlPXt9O3JldHVyblwibFwiPT09dFswXSYmdGhpcy5sYXlvdXQubGVmdC5zcGFjZSYmKGVbdGhpcy4kcS5pMThuLnJ0bD9cInJpZ2h0XCI6XCJsZWZ0XCJdPXRoaXMubGF5b3V0LmxlZnQuc2l6ZStcInB4XCIpLFwiclwiPT09dFsyXSYmdGhpcy5sYXlvdXQucmlnaHQuc3BhY2UmJihlW3RoaXMuJHEuaTE4bi5ydGw/XCJsZWZ0XCI6XCJyaWdodFwiXT10aGlzLmxheW91dC5yaWdodC5zaXplK1wicHhcIiksZX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImhlYWRlclwiLHtzdGF0aWNDbGFzczpcInEtbGF5b3V0LWhlYWRlciBxLWxheW91dC1tYXJnaW5hbCBxLWxheW91dC10cmFuc2l0aW9uXCIsY2xhc3M6dGhpcy5jb21wdXRlZENsYXNzLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZX0sW3QoUVJlc2l6ZU9ic2VydmFibGUse3Byb3BzOntkZWJvdW5jZTowfSxvbjp7cmVzaXplOnRoaXMuX19vblJlc2l6ZX19KSx0aGlzLiRzbG90cy5kZWZhdWx0XSl9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmxheW91dC5pbnN0YW5jZXMuaGVhZGVyPXRoaXMsdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsdGhpcy52YWx1ZSksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHRoaXMub2Zmc2V0KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMubGF5b3V0Lmluc3RhbmNlcy5oZWFkZXI9PT10aGlzJiYodGhpcy5sYXlvdXQuaW5zdGFuY2VzLmhlYWRlcj1udWxsLHRoaXMuX191cGRhdGUoXCJzaXplXCIsMCksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLDApLHRoaXMuX191cGRhdGUoXCJzcGFjZVwiLCExKSl9LG1ldGhvZHM6e19fb25SZXNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQ7dGhpcy5fX3VwZGF0ZUxvY2FsKFwic2l6ZVwiLGUpLHRoaXMuX191cGRhdGUoXCJzaXplXCIsZSl9LF9fdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXlvdXQuaGVhZGVyW3RdIT09ZSYmKHRoaXMubGF5b3V0LmhlYWRlclt0XT1lKX0sX191cGRhdGVMb2NhbDpmdW5jdGlvbih0LGUpe3RoaXNbdF0hPT1lJiYodGhpc1t0XT1lKX19fSxRUGFnZT17bmFtZTpcIlFQYWdlXCIsaW5qZWN0OntwYWdlQ29udGFpbmVyOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFQYWdlIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFQYWdlQ29udGFpbmVyXCIpfX0sbGF5b3V0Ont9fSxwcm9wczp7cGFkZGluZzpCb29sZWFuLHN0eWxlRm46RnVuY3Rpb259LGNvbXB1dGVkOntzdHlsZTpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmxheW91dC5oZWFkZXIuc3BhY2U/dGhpcy5sYXlvdXQuaGVhZGVyLnNpemU6MCkrKHRoaXMubGF5b3V0LmZvb3Rlci5zcGFjZT90aGlzLmxheW91dC5mb290ZXIuc2l6ZTowKTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLnN0eWxlRm4/dGhpcy5zdHlsZUZuKHQpOnttaW5IZWlnaHQ6dGhpcy5sYXlvdXQuY29udGFpbmVyP3RoaXMubGF5b3V0LmNvbnRhaW5lckhlaWdodC10K1wicHhcIjp0P1wiY2FsYygxMDB2aCAtIFwiK3QrXCJweClcIjpcIjEwMHZoXCJ9fSxjbGFzc2VzOmZ1bmN0aW9uKCl7aWYodGhpcy5wYWRkaW5nKXJldHVyblwibGF5b3V0LXBhZGRpbmdcIn19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcIm1haW5cIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dC1wYWdlXCIsc3R5bGU6dGhpcy5zdHlsZSxjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUVBhZ2VDb250YWluZXI9e25hbWU6XCJRUGFnZUNvbnRhaW5lclwiLGluamVjdDp7bGF5b3V0OntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFQYWdlQ29udGFpbmVyIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFMYXlvdXRcIil9fX0scHJvdmlkZTp7cGFnZUNvbnRhaW5lcjohMH0sY29tcHV0ZWQ6e3N0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRoaXMubGF5b3V0LmhlYWRlci5zcGFjZSYmKHQucGFkZGluZ1RvcD10aGlzLmxheW91dC5oZWFkZXIuc2l6ZStcInB4XCIpLHRoaXMubGF5b3V0LnJpZ2h0LnNwYWNlJiYodFtcInBhZGRpbmdcIisodGhpcy4kcS5pMThuLnJ0bD9cIkxlZnRcIjpcIlJpZ2h0XCIpXT10aGlzLmxheW91dC5yaWdodC5zaXplK1wicHhcIiksdGhpcy5sYXlvdXQuZm9vdGVyLnNwYWNlJiYodC5wYWRkaW5nQm90dG9tPXRoaXMubGF5b3V0LmZvb3Rlci5zaXplK1wicHhcIiksdGhpcy5sYXlvdXQubGVmdC5zcGFjZSYmKHRbXCJwYWRkaW5nXCIrKHRoaXMuJHEuaTE4bi5ydGw/XCJSaWdodFwiOlwiTGVmdFwiKV09dGhpcy5sYXlvdXQubGVmdC5zaXplK1wicHhcIiksdH19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbGF5b3V0LXBhZ2UtY29udGFpbmVyIHEtbGF5b3V0LXRyYW5zaXRpb25cIixzdHlsZTp0aGlzLnN0eWxlfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFQYWdlU3RpY2t5PXtuYW1lOlwiUVBhZ2VTdGlja3lcIixpbmplY3Q6e2xheW91dDp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRUGFnZVN0aWNreSBuZWVkcyB0byBiZSBjaGlsZCBvZiBRTGF5b3V0XCIpfX19LHByb3BzOntwb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImJvdHRvbS1yaWdodFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ0b3AtcmlnaHRcIixcInRvcC1sZWZ0XCIsXCJib3R0b20tcmlnaHRcIixcImJvdHRvbS1sZWZ0XCIsXCJ0b3BcIixcInJpZ2h0XCIsXCJib3R0b21cIixcImxlZnRcIl0uaW5jbHVkZXModCl9fSxvZmZzZXQ6e3R5cGU6QXJyYXksdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiAyPT09dC5sZW5ndGh9fSxleHBhbmQ6Qm9vbGVhbn0sY29tcHV0ZWQ6e2F0dGFjaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucG9zaXRpb247cmV0dXJue3RvcDp0LmluZGV4T2YoXCJ0b3BcIik+LTEscmlnaHQ6dC5pbmRleE9mKFwicmlnaHRcIik+LTEsYm90dG9tOnQuaW5kZXhPZihcImJvdHRvbVwiKT4tMSxsZWZ0OnQuaW5kZXhPZihcImxlZnRcIik+LTEsdmVydGljYWw6XCJ0b3BcIj09PXR8fFwiYm90dG9tXCI9PT10LGhvcml6b250YWw6XCJsZWZ0XCI9PT10fHxcInJpZ2h0XCI9PT10fX0sdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LmhlYWRlci5vZmZzZXR9LHJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LnJpZ2h0Lm9mZnNldH0sYm90dG9tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LmZvb3Rlci5vZmZzZXR9LGxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXQubGVmdC5vZmZzZXR9LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmF0dGFjaCxlPVtdLGk9dGhpcy4kcS5pMThuLnJ0bD8tMToxO3QudG9wJiZ0aGlzLnRvcD9lLnB1c2goXCJ0cmFuc2xhdGVZKFwiK3RoaXMudG9wK1wicHgpXCIpOnQuYm90dG9tJiZ0aGlzLmJvdHRvbSYmZS5wdXNoKFwidHJhbnNsYXRlWShcIistdGhpcy5ib3R0b20rXCJweClcIiksdC5sZWZ0JiZ0aGlzLmxlZnQ/ZS5wdXNoKFwidHJhbnNsYXRlWChcIitpKnRoaXMubGVmdCtcInB4KVwiKTp0LnJpZ2h0JiZ0aGlzLnJpZ2h0JiZlLnB1c2goXCJ0cmFuc2xhdGVYKFwiKy1pKnRoaXMucmlnaHQrXCJweClcIik7dmFyIHM9ZS5sZW5ndGg/e3RyYW5zZm9ybTplLmpvaW4oXCIgXCIpfTp7fTtyZXR1cm4gdGhpcy5vZmZzZXQmJihzLm1hcmdpbj10aGlzLm9mZnNldFsxXStcInB4IFwiK3RoaXMub2Zmc2V0WzBdK1wicHhcIiksdC52ZXJ0aWNhbD8odGhpcy5sZWZ0JiYoc1t0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09dGhpcy5sZWZ0K1wicHhcIiksdGhpcy5yaWdodCYmKHNbdGhpcy4kcS5pMThuLnJ0bD9cImxlZnRcIjpcInJpZ2h0XCJdPXRoaXMucmlnaHQrXCJweFwiKSk6dC5ob3Jpem9udGFsJiYodGhpcy50b3AmJihzLnRvcD10aGlzLnRvcCtcInB4XCIpLHRoaXMuYm90dG9tJiYocy5ib3R0b209dGhpcy5ib3R0b20rXCJweFwiKSksc30sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybltcImZpeGVkLVwiK3RoaXMucG9zaXRpb24sXCJxLXBhZ2Utc3RpY2t5LVwiKyh0aGlzLmV4cGFuZD9cImV4cGFuZFwiOlwic2hyaW5rXCIpXX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcGFnZS1zdGlja3kgcS1sYXlvdXQtdHJhbnNpdGlvbiByb3cgZmxleC1jZW50ZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsc3R5bGU6dGhpcy5jb21wdXRlZFN0eWxlfSx0aGlzLmV4cGFuZD90aGlzLiRzbG90cy5kZWZhdWx0Olt0KFwic3BhblwiLHRoaXMuJHNsb3RzLmRlZmF1bHQpXSl9fSxRTGlzdEhlYWRlcj17bmFtZTpcIlFMaXN0SGVhZGVyXCIscHJvcHM6e2luc2V0OkJvb2xlYW59LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbGlzdC1oZWFkZXJcIixjbGFzczp7XCJxLWxpc3QtaGVhZGVyLWluc2V0XCI6dGhpcy5pbnNldH19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUU1vZGFsTGF5b3V0PXtuYW1lOlwiUU1vZGFsTGF5b3V0XCIsaW5qZWN0OntfX3Ftb2RhbDp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRTW9kYWxMYXlvdXQgbmVlZHMgdG8gYmUgY2hpbGQgb2YgUU1vZGFsXCIpfX19LHByb3BzOntoZWFkZXJTdHlsZTpbU3RyaW5nLE9iamVjdCxBcnJheV0saGVhZGVyQ2xhc3M6W1N0cmluZyxPYmplY3QsQXJyYXldLGNvbnRlbnRTdHlsZTpbU3RyaW5nLE9iamVjdCxBcnJheV0sY29udGVudENsYXNzOltTdHJpbmcsT2JqZWN0LEFycmF5XSxmb290ZXJTdHlsZTpbU3RyaW5nLE9iamVjdCxBcnJheV0sZm9vdGVyQ2xhc3M6W1N0cmluZyxPYmplY3QsQXJyYXldfSx3YXRjaDp7X19xbW9kYWw6ZnVuY3Rpb24odCxlKXtlJiZlLnVucmVnaXN0ZXIodGhpcyksdCYmdC5yZWdpc3Rlcih0aGlzKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fcW1vZGFsJiZ0aGlzLl9fcW1vZGFsLnJlZ2lzdGVyKHRoaXMpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX3Ftb2RhbCYmdGhpcy5fX3Ftb2RhbC51bnJlZ2lzdGVyKHRoaXMpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuKHRoaXMuJHNsb3RzLmhlYWRlcnx8dGhpcy4kc2xvdHMubmF2aWdhdGlvbikmJmUucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtaGVhZGVyXCIsc3R5bGU6dGhpcy5oZWFkZXJTdHlsZSxjbGFzczp0aGlzLmhlYWRlckNsYXNzfSxbdGhpcy4kc2xvdHMuaGVhZGVyLHRoaXMuJHNsb3RzLm5hdmlnYXRpb25dKSksZS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW1vZGFsLWxheW91dC1jb250ZW50IGNvbCBzY3JvbGxcIixzdHlsZTp0aGlzLmNvbnRlbnRTdHlsZSxjbGFzczp0aGlzLmNvbnRlbnRDbGFzc30sdGhpcy4kc2xvdHMuZGVmYXVsdCkpLHRoaXMuJHNsb3RzLmZvb3RlciYmZS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dC1mb290ZXJcIixzdHlsZTp0aGlzLmZvb3RlclN0eWxlLGNsYXNzOnRoaXMuZm9vdGVyQ2xhc3N9LFt0aGlzLiRzbG90cy5mb290ZXIsbnVsbF0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tb2RhbC1sYXlvdXQgY29sIGNvbHVtbiBuby13cmFwXCJ9LGUpfX0sUU5vU3NyPXtuYW1lOlwiUU5vU3NyXCIsbWl4aW5zOltDYW5SZW5kZXJNaXhpbl0scHJvcHM6e3RhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRpdlwifSxwbGFjZWhvbGRlcjpTdHJpbmd9LHJlbmRlcjpmdW5jdGlvbih0KXtpZih0aGlzLmNhblJlbmRlcil7dmFyIGU9dGhpcy4kc2xvdHMuZGVmYXVsdDtyZXR1cm4gZSYmZS5sZW5ndGg+MT90KHRoaXMudGFnLGUpOmU/ZVswXTpudWxsfWlmKHRoaXMuJHNsb3RzLnBsYWNlaG9sZGVyKXt2YXIgaT10aGlzLiRzbG90cy5wbGFjZWhvbGRlcjtyZXR1cm4gaSYmaS5sZW5ndGg+MT90KHRoaXMudGFnLHtzdGF0aWNDbGFzczpcInEtbm8tc3NyLXBsYWNlaG9sZGVyXCJ9LGkpOmk/aVswXTpudWxsfWlmKHRoaXMucGxhY2Vob2xkZXIpcmV0dXJuIHQodGhpcy50YWcse3N0YXRpY0NsYXNzOlwicS1uby1zc3ItcGxhY2Vob2xkZXJcIn0sW3RoaXMucGxhY2Vob2xkZXJdKX19LFFQYWdpbmF0aW9uPXtuYW1lOlwiUVBhZ2luYXRpb25cIixwcm9wczp7dmFsdWU6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfSxtaW46e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MX0sbWF4Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHRleHRDb2xvcjpTdHJpbmcsc2l6ZTpTdHJpbmcsZGlzYWJsZTpCb29sZWFuLGlucHV0OkJvb2xlYW4sYm91bmRhcnlMaW5rczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6bnVsbH0sYm91bmRhcnlOdW1iZXJzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpudWxsfSxkaXJlY3Rpb25MaW5rczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6bnVsbH0sZWxsaXBzZXM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0Om51bGx9LG1heFBhZ2VzOnt0eXBlOk51bWJlcixkZWZhdWx0OjAsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiEodDwwKXx8KGNvbnNvbGUuZXJyb3IoXCJtYXhQYWdlcyBzaG91bGQgbm90IGJlIG5lZ2F0aXZlXCIpLCExKX19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue25ld1BhZ2U6bnVsbH19LHdhdGNoOnttaW46ZnVuY3Rpb24odCl7dGhpcy5tb2RlbD10aGlzLnZhbHVlfSxtYXg6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbD10aGlzLnZhbHVlfX0sY29tcHV0ZWQ6e21vZGVsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMuZGlzYWJsZSYmdCYmIWlzTmFOKHQpKXt2YXIgaT1iZXR3ZWVuKHBhcnNlSW50KHQsMTApLHRoaXMubWluLHRoaXMubWF4KTt0aGlzLiRlbWl0KFwiaW5wdXRcIixpKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KGkpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIixpKX0pfX19LGlucHV0UGxhY2Vob2xkZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbCtcIiAvIFwiK3RoaXMubWF4fSxfX2JvdW5kYXJ5TGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEJvb2wodGhpcy5ib3VuZGFyeUxpbmtzLHRoaXMuaW5wdXQpfSxfX2JvdW5kYXJ5TnVtYmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Qm9vbCh0aGlzLmJvdW5kYXJ5TnVtYmVycywhdGhpcy5pbnB1dCl9LF9fZGlyZWN0aW9uTGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEJvb2wodGhpcy5kaXJlY3Rpb25MaW5rcyx0aGlzLmlucHV0KX0sX19lbGxpcHNlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Qm9vbCh0aGlzLmVsbGlwc2VzLCF0aGlzLmlucHV0KX0saWNvbnM6ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy4kcS5pY29uLnBhZ2luYXRpb24uZmlyc3QsdGhpcy4kcS5pY29uLnBhZ2luYXRpb24ucHJldix0aGlzLiRxLmljb24ucGFnaW5hdGlvbi5uZXh0LHRoaXMuJHEuaWNvbi5wYWdpbmF0aW9uLmxhc3RdO3JldHVybiB0aGlzLiRxLmkxOG4ucnRsP3QucmV2ZXJzZSgpOnR9fSxtZXRob2RzOntzZXQ6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbD10fSxzZXRCeU9mZnNldDpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXRoaXMubW9kZWwrdH0sX191cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLm1vZGVsPXRoaXMubmV3UGFnZSx0aGlzLm5ld1BhZ2U9bnVsbH0sX19nZXRCb29sOmZ1bmN0aW9uKHQsZSl7cmV0dXJuWyEwLCExXS5pbmNsdWRlcyh0KT90OmV9LF9fZ2V0QnRuOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZS5wcm9wcz1PYmplY3QuYXNzaWduKHtjb2xvcjp0aGlzLmNvbG9yLGZsYXQ6ITAsc2l6ZTp0aGlzLnNpemV9LGkpLHQoUUJ0bixlKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W10scz1bXSxuPVtdO2lmKHRoaXMuX19ib3VuZGFyeUxpbmtzJiYoaS5wdXNoKHRoaXMuX19nZXRCdG4odCx7a2V5OlwiYmxzXCIsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KGUubWluKX19fSx7ZGlzYWJsZTp0aGlzLmRpc2FibGV8fHRoaXMudmFsdWU8PXRoaXMubWluLGljb246dGhpcy5pY29uc1swXX0pKSxzLnVuc2hpZnQodGhpcy5fX2dldEJ0bih0LHtrZXk6XCJibGVcIixvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoZS5tYXgpfX19LHtkaXNhYmxlOnRoaXMuZGlzYWJsZXx8dGhpcy52YWx1ZT49dGhpcy5tYXgsaWNvbjp0aGlzLmljb25zWzNdfSkpKSx0aGlzLl9fZGlyZWN0aW9uTGlua3MmJihpLnB1c2godGhpcy5fX2dldEJ0bih0LHtrZXk6XCJiZHBcIixvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXRCeU9mZnNldCgtMSl9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlfHx0aGlzLnZhbHVlPD10aGlzLm1pbixpY29uOnRoaXMuaWNvbnNbMV19KSkscy51bnNoaWZ0KHRoaXMuX19nZXRCdG4odCx7a2V5OlwiYmRuXCIsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0QnlPZmZzZXQoMSl9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlfHx0aGlzLnZhbHVlPj10aGlzLm1heCxpY29uOnRoaXMuaWNvbnNbMl19KSkpLHRoaXMuaW5wdXQpbi5wdXNoKHQoUUlucHV0LHtzdGF0aWNDbGFzczpcImlubGluZSBuby1wYWRkaW5nXCIsc3R5bGU6e3dpZHRoOnRoaXMuaW5wdXRQbGFjZWhvbGRlci5sZW5ndGgrXCJyZW1cIn0scHJvcHM6e3R5cGU6XCJudW1iZXJcIix2YWx1ZTp0aGlzLm5ld1BhZ2Usbm9OdW1iZXJUb2dnbGU6ITAsbWluOnRoaXMubWluLG1heDp0aGlzLm1heCxjb2xvcjp0aGlzLmNvbG9yLHBsYWNlaG9sZGVyOnRoaXMuaW5wdXRQbGFjZWhvbGRlcixkaXNhYmxlOnRoaXMuZGlzYWJsZSxoaWRlVW5kZXJsaW5lOiEwfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUubmV3UGFnZT10fSxrZXlkb3duOmZ1bmN0aW9uKHQpe3JldHVybiAxMz09PWdldEV2ZW50S2V5KHQpJiZlLl9fdXBkYXRlKCl9LGJsdXI6ZnVuY3Rpb24oKXtyZXR1cm4gZS5fX3VwZGF0ZSgpfX19KSk7ZWxzZXt2YXIgbz1NYXRoLm1heCh0aGlzLm1heFBhZ2VzLDErKHRoaXMuX19lbGxpcHNlcz8yOjApKyh0aGlzLl9fYm91bmRhcnlOdW1iZXJzPzI6MCkpLHI9dGhpcy5taW4sYT10aGlzLm1heCxsPSExLGM9ITEsaD0hMSx1PSExO3RoaXMubWF4UGFnZXMmJm88dGhpcy5tYXgtdGhpcy5taW4rMSYmKG89MSsyKk1hdGguZmxvb3Ioby8yKSxyPU1hdGgubWF4KHRoaXMubWluLE1hdGgubWluKHRoaXMubWF4LW8rMSx0aGlzLnZhbHVlLU1hdGguZmxvb3Ioby8yKSkpLGE9TWF0aC5taW4odGhpcy5tYXgscitvLTEpLHRoaXMuX19ib3VuZGFyeU51bWJlcnMmJihoPSEwLHIrPTEpLHRoaXMuX19lbGxpcHNlcyYmcj50aGlzLm1pbisodGhpcy5fX2JvdW5kYXJ5TnVtYmVycz8xOjApJiYobD0hMCxyKz0xKSx0aGlzLl9fYm91bmRhcnlOdW1iZXJzJiYodT0hMCxhLT0xKSx0aGlzLl9fZWxsaXBzZXMmJmE8dGhpcy5tYXgtKHRoaXMuX19ib3VuZGFyeU51bWJlcnM/MTowKSYmKGM9ITAsYS09MSkpO3ZhciBkPXttaW5XaWR0aDpNYXRoLm1heCgyLFN0cmluZyh0aGlzLm1heCkubGVuZ3RoKStcImVtXCJ9O2lmKGgpe3ZhciBwPXRoaXMubWluPT09dGhpcy52YWx1ZTtpLnB1c2godGhpcy5fX2dldEJ0bih0LHtrZXk6XCJibnNcIixzdHlsZTpkLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChlLm1pbil9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlLGZsYXQ6IXAsdGV4dENvbG9yOnA/dGhpcy50ZXh0Q29sb3I6bnVsbCxsYWJlbDp0aGlzLm1pbixub1JpcHBsZTohMH0pKX1pZih1KXt2YXIgZj10aGlzLm1heD09PXRoaXMudmFsdWU7cy51bnNoaWZ0KHRoaXMuX19nZXRCdG4odCx7a2V5OlwiYm5lXCIsc3R5bGU6ZCxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoZS5tYXgpfX19LHtkaXNhYmxlOnRoaXMuZGlzYWJsZSxmbGF0OiFmLHRleHRDb2xvcjpmP3RoaXMudGV4dENvbG9yOm51bGwsbGFiZWw6dGhpcy5tYXgsbm9SaXBwbGU6ITB9KSl9bCYmaS5wdXNoKHRoaXMuX19nZXRCdG4odCx7a2V5OlwiYmVzXCIsc3R5bGU6ZCxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoci0xKX19fSx7ZGlzYWJsZTp0aGlzLmRpc2FibGUsbGFiZWw6XCLigKZcIn0pKSxjJiZzLnVuc2hpZnQodGhpcy5fX2dldEJ0bih0LHtrZXk6XCJiZWVcIixzdHlsZTpkLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChhKzEpfX19LHtkaXNhYmxlOnRoaXMuZGlzYWJsZSxsYWJlbDpcIuKAplwifSkpO2Zvcih2YXIgbT1mdW5jdGlvbihpKXt2YXIgcz1pPT09ZS52YWx1ZTtuLnB1c2goZS5fX2dldEJ0bih0LHtrZXk6XCJicGdcIitpLHN0eWxlOmQsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KGkpfX19LHtkaXNhYmxlOmUuZGlzYWJsZSxmbGF0OiFzLHRleHRDb2xvcjpzP2UudGV4dENvbG9yOm51bGwsbGFiZWw6aSxub1JpcHBsZTohMH0pKX0sZz1yO2c8PWE7ZysrKW0oZyl9cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXBhZ2luYXRpb24gcm93IG5vLXdyYXAgaXRlbXMtY2VudGVyXCIsY2xhc3M6e2Rpc2FibGVkOnRoaXMuZGlzYWJsZX19LFtpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cganVzdGlmeS1jZW50ZXJcIn0sW25dKSxzXSl9fSxRUGFyYWxsYXg9e25hbWU6XCJRUGFyYWxsYXhcIixwcm9wczp7c3JjOlN0cmluZyxoZWlnaHQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NTAwfSxzcGVlZDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MCYmdDw9MX19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Njcm9sbGluZzohMX19LHdhdGNoOntoZWlnaHQ6ZnVuY3Rpb24oKXt0aGlzLl9fdXBkYXRlUG9zKCl9fSxtZXRob2RzOntfX29uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxUYXJnZXQmJih0aGlzLm1lZGlhSGVpZ2h0PXRoaXMubWVkaWEubmF0dXJhbEhlaWdodHx8aGVpZ2h0KHRoaXMubWVkaWEpLHRoaXMuX191cGRhdGVQb3MoKSl9LF9fdXBkYXRlUG9zOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLHM7aWYodGhpcy5zY3JvbGxUYXJnZXQ9PT13aW5kb3c/KHQ9MCxpPWU9d2luZG93LmlubmVySGVpZ2h0KTppPSh0PW9mZnNldCh0aGlzLnNjcm9sbFRhcmdldCkudG9wKSsoZT1oZWlnaHQodGhpcy5zY3JvbGxUYXJnZXQpKSwocz1vZmZzZXQodGhpcy4kZWwpLnRvcCkrdGhpcy5oZWlnaHQ+dCYmczxpKXt2YXIgbj0oaS1zKS8odGhpcy5oZWlnaHQrZSk7dGhpcy5fX3NldFBvcygodGhpcy5tZWRpYUhlaWdodC10aGlzLmhlaWdodCkqbip0aGlzLnNwZWVkKX19LF9fc2V0UG9zOmZ1bmN0aW9uKHQpe3RoaXMubWVkaWEuc3R5bGUudHJhbnNmb3JtPVwidHJhbnNsYXRlM0QoLTUwJSxcIit0K1wicHgsIDApXCJ9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXBhcmFsbGF4XCIsc3R5bGU6e2hlaWdodDp0aGlzLmhlaWdodCtcInB4XCJ9fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcGFyYWxsYXgtbWVkaWEgYWJzb2x1dGUtZnVsbFwifSxbdGhpcy4kc2xvdHMubWVkaWF8fHQoXCJpbWdcIix7cmVmOlwibWVkaWFcIixhdHRyczp7c3JjOnRoaXMuc3JjfX0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcGFyYWxsYXgtdGV4dCBhYnNvbHV0ZS1mdWxsIGNvbHVtbiBmbGV4LWNlbnRlciBuby1wb2ludGVyLWV2ZW50c1wifSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pfSxiZWZvcmVNb3VudDpmdW5jdGlvbigpe3RoaXMuX19zZXRQb3M9ZnJhbWVEZWJvdW5jZSh0aGlzLl9fc2V0UG9zKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0Lm1lZGlhPXQuJHNsb3RzLm1lZGlhP3QuJHNsb3RzLm1lZGlhWzBdLmVsbTp0LiRyZWZzLm1lZGlhLHQubWVkaWEub25sb2FkPXQubWVkaWEub25sb2Fkc3RhcnQ9dC5fX29uUmVzaXplLHQuc2Nyb2xsVGFyZ2V0PWdldFNjcm9sbFRhcmdldCh0LiRlbCksdC5yZXNpemVIYW5kbGVyPWRlYm91bmNlKHQuX19vblJlc2l6ZSw1MCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LnJlc2l6ZUhhbmRsZXIsbGlzdGVuT3B0cy5wYXNzaXZlKSx0LnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdC5fX3VwZGF0ZVBvcyxsaXN0ZW5PcHRzLnBhc3NpdmUpLHQuX19vblJlc2l6ZSgpfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMucmVzaXplSGFuZGxlcixsaXN0ZW5PcHRzLnBhc3NpdmUpLHRoaXMuc2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLl9fdXBkYXRlUG9zLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy5tZWRpYS5vbmxvYWQ9dGhpcy5tZWRpYS5vbmxvYWRzdGFydD1udWxsfX0sUVBvcHVwRWRpdD17bmFtZTpcIlFQb3B1cEVkaXRcIixwcm9wczp7dmFsdWU6e30scGVyc2lzdGVudDpCb29sZWFuLGtlZXBPblNjcmVlbjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LHRpdGxlOlN0cmluZyxidXR0b25zOkJvb2xlYW4sbGFiZWxTZXQ6U3RyaW5nLGxhYmVsQ2FuY2VsOlN0cmluZyxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdmFsaWRhdGU6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiEwfX0sZGlzYWJsZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2luaXRpYWxWYWx1ZTpcIlwifX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QuJHJlZnMucG9wb3Zlci5yZXBvc2l0aW9uKCl9KX19LG1ldGhvZHM6e2NhbmNlbDpmdW5jdGlvbigpe3RoaXMuX19oYXNDaGFuZ2VkKCkmJih0aGlzLiRlbWl0KFwiY2FuY2VsXCIsdGhpcy52YWx1ZSx0aGlzLmluaXRpYWxWYWx1ZSksdGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5pbml0aWFsVmFsdWUpKSx0aGlzLiRuZXh0VGljayh0aGlzLl9fY2xvc2UpfSxzZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9faGFzQ2hhbmdlZCgpKXtpZighdGhpcy52YWxpZGF0ZSh0aGlzLnZhbHVlKSlyZXR1cm47dGhpcy4kZW1pdChcInNhdmVcIix0aGlzLnZhbHVlLHRoaXMuaW5pdGlhbFZhbHVlKX10aGlzLl9fY2xvc2UoKX0sX19oYXNDaGFuZ2VkOmZ1bmN0aW9uKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpIT09SlNPTi5zdHJpbmdpZnkodGhpcy5pbml0aWFsVmFsdWUpfSxfX2Nsb3NlOmZ1bmN0aW9uKCl7dGhpcy52YWxpZGF0ZWQ9ITAsdGhpcy4kcmVmcy5wb3BvdmVyLmhpZGUoKX0sX19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJHNsb3RzLnRpdGxlfHx0aGlzLnRpdGxlO3JldHVybltlJiZ0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10aXRsZSBxLW10LXNtIHEtbWItc21cIn0sW2VdKXx8dm9pZCAwXS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCkuY29uY2F0KFt0aGlzLmJ1dHRvbnMmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cganVzdGlmeS1jZW50ZXIgbm8td3JhcCBxLW10LXNtXCJ9LFt0KFFCdG4se3Byb3BzOntmbGF0OiEwLGNvbG9yOnRoaXMuY29sb3IsbGFiZWw6dGhpcy5sYWJlbENhbmNlbHx8dGhpcy4kcS5pMThuLmxhYmVsLmNhbmNlbH0sb246e2NsaWNrOnRoaXMuY2FuY2VsfX0pLHQoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLW1sLXNtXCIscHJvcHM6e2ZsYXQ6ITAsY29sb3I6dGhpcy5jb2xvcixsYWJlbDp0aGlzLmxhYmVsU2V0fHx0aGlzLiRxLmkxOG4ubGFiZWwuc2V0fSxvbjp7Y2xpY2s6dGhpcy5zZXR9fSldKXx8dm9pZCAwXSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRUG9wb3Zlcix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWVkaXQgcS1weC1tZCBxLXB5LXNtXCIscmVmOlwicG9wb3ZlclwiLHByb3BzOntjb3ZlcjohMCxwZXJzaXN0ZW50OnRoaXMucGVyc2lzdGVudCxrZWVwT25TY3JlZW46dGhpcy5rZWVwT25TY3JlZW4sZGlzYWJsZTp0aGlzLmRpc2FibGV9LG9uOntzaG93OmZ1bmN0aW9uKCl7dmFyIHQ9ZS4kZWwucXVlcnlTZWxlY3RvcihcIi5xLWlucHV0LXRhcmdldDpub3QoLnEtaW5wdXQtc2hhZG93KVwiKXx8ZS4kZWwucXVlcnlTZWxlY3RvcihcImlucHV0XCIpfHxlLiRlbC5xdWVyeVNlbGVjdG9yKFwidGV4dGFyZWFcIik7dCYmdC5mb2N1cygpLGUuJGVtaXQoXCJzaG93XCIpLGUuaW5pdGlhbFZhbHVlPWNsb25lKGUudmFsdWUpLGUudmFsaWRhdGVkPSExfSxcImVzY2FwZS1rZXlcIjpmdW5jdGlvbigpe2UudmFsaWRhdGVkPSEwLGUuJGVtaXQoXCJjYW5jZWxcIixlLnZhbHVlLGUuaW5pdGlhbFZhbHVlKSxlLiRlbWl0KFwiaW5wdXRcIixlLmluaXRpYWxWYWx1ZSl9LGhpZGU6ZnVuY3Rpb24oKXtlLnZhbGlkYXRlZHx8KGUuX19oYXNDaGFuZ2VkKCkmJihlLnZhbGlkYXRlKGUudmFsdWUpP2UuJGVtaXQoXCJzYXZlXCIsZS52YWx1ZSxlLmluaXRpYWxWYWx1ZSk6KGUuJGVtaXQoXCJjYW5jZWxcIixlLnZhbHVlLGUuaW5pdGlhbFZhbHVlKSxlLiRlbWl0KFwiaW5wdXRcIixlLmluaXRpYWxWYWx1ZSkpKSxlLiRlbWl0KFwiaGlkZVwiKSl9fSxuYXRpdmVPbjp7a2V5ZG93bjpmdW5jdGlvbih0KXsxMz09PWdldEV2ZW50S2V5KHQpJiYoZS5idXR0b25zP2Uuc2V0KCk6ZS4kcmVmcy5wb3BvdmVyLmhpZGUoKSl9fX0sdGhpcy5fX2dldENvbnRlbnQodCkpfX07ZnVuY3Rpb24gd2lkdGgkMSh0KXtyZXR1cm57d2lkdGg6dCtcIiVcIn19dmFyIFFQcm9ncmVzcz17bmFtZTpcIlFQcm9ncmVzc1wiLHByb3BzOntwZXJjZW50YWdlOnt0eXBlOk51bWJlcixkZWZhdWx0OjB9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSxzdHJpcGU6Qm9vbGVhbixhbmltYXRlOkJvb2xlYW4saW5kZXRlcm1pbmF0ZTpCb29sZWFuLGJ1ZmZlcjpOdW1iZXIsaGVpZ2h0Ont0eXBlOlN0cmluZyxkZWZhdWx0OlwiNHB4XCJ9fSxjb21wdXRlZDp7bW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gYmV0d2Vlbih0aGlzLnBlcmNlbnRhZ2UsMCwxMDApfSxidWZmZXJNb2RlbDpmdW5jdGlvbigpe3JldHVybiBiZXR3ZWVuKHRoaXMuYnVmZmVyfHwwLDAsMTAwLXRoaXMubW9kZWwpfSxidWZmZXJTdHlsZTpmdW5jdGlvbigpe3JldHVybiB3aWR0aCQxKHRoaXMuYnVmZmVyTW9kZWwpfSx0cmFja1N0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHdpZHRoJDEodGhpcy5idWZmZXI/MTAwLXRoaXMuYnVmZmVyOjEwMCl9LGNvbXB1dGVkQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5cInRleHQtXCIrdGhpcy5jb2xvcn0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3JldHVybntoZWlnaHQ6dGhpcy5oZWlnaHR9fSxtb2RlbENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue2FuaW1hdGU6dGhpcy5hbmltYXRlLHN0cmlwZTp0aGlzLnN0cmlwZSxpbmRldGVybWluYXRlOnRoaXMuaW5kZXRlcm1pbmF0ZX19LG1vZGVsU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gd2lkdGgkMSh0aGlzLm1vZGVsKX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcHJvZ3Jlc3NcIixzdHlsZTp0aGlzLmNvbXB1dGVkU3R5bGUsY2xhc3M6dGhpcy5jb21wdXRlZENsYXNzfSxbdGhpcy5idWZmZXImJiF0aGlzLmluZGV0ZXJtaW5hdGU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcHJvZ3Jlc3MtYnVmZmVyXCIsc3R5bGU6dGhpcy5idWZmZXJTdHlsZX0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcHJvZ3Jlc3MtdHJhY2tcIixzdHlsZTp0aGlzLnRyYWNrU3R5bGV9KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wcm9ncmVzcy1tb2RlbFwiLHN0eWxlOnRoaXMubW9kZWxTdHlsZSxjbGFzczp0aGlzLm1vZGVsQ2xhc3N9KV0pfX0saGVpZ2h0JDE9LTY1LFFQdWxsVG9SZWZyZXNoPXtuYW1lOlwiUVB1bGxUb1JlZnJlc2hcIixkaXJlY3RpdmVzOntUb3VjaFBhbjpUb3VjaFBhbn0scHJvcHM6e2hhbmRsZXI6e3R5cGU6RnVuY3Rpb24scmVxdWlyZWQ6ITB9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSxkaXN0YW5jZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDozNX0scHVsbE1lc3NhZ2U6U3RyaW5nLHJlbGVhc2VNZXNzYWdlOlN0cmluZyxyZWZyZXNoTWVzc2FnZTpTdHJpbmcscmVmcmVzaEljb246U3RyaW5nLGlubGluZTpCb29sZWFuLGRpc2FibGU6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybntzdGF0ZTpcInB1bGxcIixwdWxsUG9zaXRpb246aGVpZ2h0JDEsYW5pbWF0aW5nOiExLHB1bGxpbmc6ITEsc2Nyb2xsaW5nOiExfX0sd2F0Y2g6e2lubGluZTpmdW5jdGlvbih0KXt0aGlzLnNldFNjcm9sbENvbnRhaW5lcih0KX19LGNvbXB1dGVkOnttZXNzYWdlOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuc3RhdGUpe2Nhc2VcInB1bGxlZFwiOnJldHVybiB0aGlzLnJlbGVhc2VNZXNzYWdlfHx0aGlzLiRxLmkxOG4ucHVsbFRvUmVmcmVzaC5yZWxlYXNlO2Nhc2VcInJlZnJlc2hpbmdcIjpyZXR1cm4gdGhpcy5yZWZyZXNoTWVzc2FnZXx8dGhpcy4kcS5pMThuLnB1bGxUb1JlZnJlc2gucmVmcmVzaDtjYXNlXCJwdWxsXCI6ZGVmYXVsdDpyZXR1cm4gdGhpcy5wdWxsTWVzc2FnZXx8dGhpcy4kcS5pMThuLnB1bGxUb1JlZnJlc2gucHVsbH19LHN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue3RyYW5zZm9ybTpcInRyYW5zbGF0ZVkoXCIrdGhpcy5wdWxsUG9zaXRpb24rXCJweClcIixtYXJnaW5Cb3R0b206aGVpZ2h0JDErXCJweFwifX0sbWVzc2FnZUNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuXCJ0ZXh0LVwiK3RoaXMuY29sb3J9fSxtZXRob2RzOntfX3B1bGw6ZnVuY3Rpb24odCl7aWYoIXRoaXMuZGlzYWJsZSl7aWYodC5pc0ZpbmFsKXJldHVybiB0aGlzLnNjcm9sbGluZz0hMSx0aGlzLnB1bGxpbmc9ITEsdm9pZChcInB1bGxlZFwiPT09dGhpcy5zdGF0ZT8odGhpcy5zdGF0ZT1cInJlZnJlc2hpbmdcIix0aGlzLl9fYW5pbWF0ZVRvKDApLHRoaXMudHJpZ2dlcigpKTpcInB1bGxcIj09PXRoaXMuc3RhdGUmJnRoaXMuX19hbmltYXRlVG8oaGVpZ2h0JDEpKTtpZih0aGlzLmFuaW1hdGluZ3x8dGhpcy5zY3JvbGxpbmd8fFwicmVmcmVzaGluZ1wiPT09dGhpcy5zdGF0ZSlyZXR1cm4hMDt2YXIgZT1nZXRTY3JvbGxQb3NpdGlvbih0aGlzLnNjcm9sbENvbnRhaW5lcik7aWYoMCE9PWV8fDA9PT1lJiZcImRvd25cIiE9PXQuZGlyZWN0aW9uKXJldHVybiB0aGlzLnNjcm9sbGluZz0hMCx0aGlzLnB1bGxpbmcmJih0aGlzLnB1bGxpbmc9ITEsdGhpcy5zdGF0ZT1cInB1bGxcIix0aGlzLl9fYW5pbWF0ZVRvKGhlaWdodCQxKSksITA7dC5ldnQucHJldmVudERlZmF1bHQoKSx0aGlzLnB1bGxpbmc9ITAsdGhpcy5wdWxsUG9zaXRpb249aGVpZ2h0JDErTWF0aC5tYXgoMCxNYXRoLnBvdyh0LmRpc3RhbmNlLnksLjg1KSksdGhpcy5zdGF0ZT10aGlzLnB1bGxQb3NpdGlvbj50aGlzLmRpc3RhbmNlP1wicHVsbGVkXCI6XCJwdWxsXCJ9fSxfX2FuaW1hdGVUbzpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpczshaSYmdGhpcy5hbmltYXRpb25JZCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRpbmcpLHRoaXMucHVsbFBvc2l0aW9uLT0odGhpcy5wdWxsUG9zaXRpb24tdCkvNyx0aGlzLnB1bGxQb3NpdGlvbi10PjE/dGhpcy5hbmltYXRpbmc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cy5fX2FuaW1hdGVUbyh0LGUsITApfSk6dGhpcy5hbmltYXRpbmc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cy5wdWxsUG9zaXRpb249dCxzLmFuaW1hdGluZz0hMSxlJiZlKCl9KX0sdHJpZ2dlcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5oYW5kbGVyKGZ1bmN0aW9uKCl7dC5fX2FuaW1hdGVUbyhoZWlnaHQkMSxmdW5jdGlvbigpe3Quc3RhdGU9XCJwdWxsXCJ9KX0pfSxzZXRTY3JvbGxDb250YWluZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2Uuc2Nyb2xsQ29udGFpbmVyPXQ/ZS4kZWwucGFyZW50Tm9kZTpnZXRTY3JvbGxUYXJnZXQoZS4kZWwpfSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5zZXRTY3JvbGxDb250YWluZXIodGhpcy5pbmxpbmUpfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJwdWxsLXRvLXJlZnJlc2ggb3ZlcmZsb3ctaGlkZGVuLXlcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJwdWxsLXRvLXJlZnJlc2gtY29udGFpbmVyXCIsc3R5bGU6dGhpcy5zdHlsZSxkaXJlY3RpdmVzOnRoaXMuZGlzYWJsZT9udWxsOlt7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7dmVydGljYWw6ITAsbWlnaHRQcmV2ZW50OiEwfSx2YWx1ZTp0aGlzLl9fcHVsbH1dfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInB1bGwtdG8tcmVmcmVzaC1tZXNzYWdlIHJvdyBmbGV4LWNlbnRlclwiLGNsYXNzOnRoaXMubWVzc2FnZUNsYXNzfSxbdChRSWNvbix7Y2xhc3M6e1wicm90YXRlLTE4MFwiOlwicHVsbGVkXCI9PT10aGlzLnN0YXRlfSxwcm9wczp7bmFtZTp0aGlzLiRxLmljb24ucHVsbFRvUmVmcmVzaC5hcnJvd30sZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIsdmFsdWU6XCJyZWZyZXNoaW5nXCIhPT10aGlzLnN0YXRlfV19KSx0KFFJY29uLHtzdGF0aWNDbGFzczpcImFuaW1hdGUtc3BpblwiLHByb3BzOntuYW1lOnRoaXMucmVmcmVzaEljb258fHRoaXMuJHEuaWNvbi5wdWxsVG9SZWZyZXNoLnJlZnJlc2h9LGRpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHZhbHVlOlwicmVmcmVzaGluZ1wiPT09dGhpcy5zdGF0ZX1dfSksXCIgXCIrdGhpcy5tZXNzYWdlXSksdGhpcy4kc2xvdHMuZGVmYXVsdF0pXSl9fSxkcmFnVHlwZT17TUlOOjAsUkFOR0U6MSxNQVg6Mn0sUVJhbmdlPXtuYW1lOlwiUVJhbmdlXCIsbWl4aW5zOltTbGlkZXJNaXhpbl0scHJvcHM6e3ZhbHVlOnt0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue21pbjowLG1heDowfX0sdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmhhc093blByb3BlcnR5KFwibWluXCIpJiZ0Lmhhc093blByb3BlcnR5KFwibWF4XCIpfX0sZHJhZ1JhbmdlOkJvb2xlYW4sZHJhZ09ubHlSYW5nZTpCb29sZWFuLGxlZnRMYWJlbENvbG9yOlN0cmluZyxsZWZ0TGFiZWxWYWx1ZTpTdHJpbmcscmlnaHRMYWJlbENvbG9yOlN0cmluZyxyaWdodExhYmVsVmFsdWU6U3RyaW5nfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vZGVsOk9iamVjdC5hc3NpZ24oe30sdGhpcy52YWx1ZSksZHJhZ2dpbmc6ITEsY3VycmVudE1pblBlcmNlbnRhZ2U6KHRoaXMudmFsdWUubWluLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pLGN1cnJlbnRNYXhQZXJjZW50YWdlOih0aGlzLnZhbHVlLm1heC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX19LGNvbXB1dGVkOntwZXJjZW50YWdlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcD8odGhpcy5tb2RlbC5taW4tdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbik6dGhpcy5jdXJyZW50TWluUGVyY2VudGFnZX0scGVyY2VudGFnZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNuYXA/KHRoaXMubW9kZWwubWF4LXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pOnRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2V9LGFjdGl2ZVRyYWNrV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gMTAwKih0aGlzLnBlcmNlbnRhZ2VNYXgtdGhpcy5wZXJjZW50YWdlTWluKStcIiVcIn0sbGVmdERpc3BsYXlWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmxlZnRMYWJlbFZhbHVlP3RoaXMubGVmdExhYmVsVmFsdWU6dGhpcy5tb2RlbC5taW59LHJpZ2h0RGlzcGxheVZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMucmlnaHRMYWJlbFZhbHVlP3RoaXMucmlnaHRMYWJlbFZhbHVlOnRoaXMubW9kZWwubWF4fSxsZWZ0VG9vbHRpcENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdExhYmVsQ29sb3J8fHRoaXMubGFiZWxDb2xvcn0scmlnaHRUb29sdGlwQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yaWdodExhYmVsQ29sb3J8fHRoaXMubGFiZWxDb2xvcn19LHdhdGNoOntcInZhbHVlLm1pblwiOmZ1bmN0aW9uKHQpe3RoaXMubW9kZWwubWluPXR9LFwidmFsdWUubWF4XCI6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbC5tYXg9dH0sXCJtb2RlbC5taW5cIjpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nfHwodD50aGlzLm1vZGVsLm1heCYmKHQ9dGhpcy5tb2RlbC5tYXgpLHRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2U9KHQtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikpfSxcIm1vZGVsLm1heFwiOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmd8fCh0PHRoaXMubW9kZWwubWluJiYodD10aGlzLm1vZGVsLm1pbiksdGhpcy5jdXJyZW50TWF4UGVyY2VudGFnZT0odC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSl9LG1pbjpmdW5jdGlvbih0KXt0aGlzLm1vZGVsLm1pbjx0JiZ0aGlzLl9fdXBkYXRlKHttaW46dH0pLHRoaXMubW9kZWwubWF4PHQmJnRoaXMuX191cGRhdGUoe21heDp0fSksdGhpcy4kbmV4dFRpY2sodGhpcy5fX3ZhbGlkYXRlUHJvcHMpfSxtYXg6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbC5taW4+dCYmdGhpcy5fX3VwZGF0ZSh7bWluOnR9KSx0aGlzLm1vZGVsLm1heD50JiZ0aGlzLl9fdXBkYXRlKHttYXg6dH0pLHRoaXMuJG5leHRUaWNrKHRoaXMuX192YWxpZGF0ZVByb3BzKX0sc3RlcDpmdW5jdGlvbigpe3RoaXMuJG5leHRUaWNrKHRoaXMuX192YWxpZGF0ZVByb3BzKX19LG1ldGhvZHM6e19fZ2V0RHJhZ2dpbmc6ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLiRyZWZzLmhhbmRsZSxzPWkub2Zmc2V0V2lkdGgsbj0odGhpcy5kcmFnT25seVJhbmdlPy0xOjEpKnRoaXMuJHJlZnMuaGFuZGxlTWluLm9mZnNldFdpZHRoLygyKnMpLG89e2xlZnQ6aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LHdpZHRoOnMsdmFsdWVNaW46dGhpcy5tb2RlbC5taW4sdmFsdWVNYXg6dGhpcy5tb2RlbC5tYXgscGVyY2VudGFnZU1pbjp0aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlLHBlcmNlbnRhZ2VNYXg6dGhpcy5jdXJyZW50TWF4UGVyY2VudGFnZX0scj1nZXRQZXJjZW50YWdlKHQsbyx0aGlzLiRxLmkxOG4ucnRsKTtyZXR1cm4gcjx0aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlK24/ZT1kcmFnVHlwZS5NSU46cjx0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlLW4/dGhpcy5kcmFnUmFuZ2V8fHRoaXMuZHJhZ09ubHlSYW5nZT8oZT1kcmFnVHlwZS5SQU5HRSxPYmplY3QuYXNzaWduKG8se29mZnNldFBlcmNlbnRhZ2U6cixvZmZzZXRNb2RlbDpnZXRNb2RlbChyLHRoaXMubWluLHRoaXMubWF4LHRoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpLHJhbmdlVmFsdWU6by52YWx1ZU1heC1vLnZhbHVlTWluLHJhbmdlUGVyY2VudGFnZTp0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlLXRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2V9KSk6ZT10aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlLXI8ci10aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlP2RyYWdUeXBlLk1BWDpkcmFnVHlwZS5NSU46ZT1kcmFnVHlwZS5NQVgsKCF0aGlzLmRyYWdPbmx5UmFuZ2V8fGU9PT1kcmFnVHlwZS5SQU5HRSkmJihvLnR5cGU9ZSxvKX0sX19tb3ZlOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9dGhpcy5kcmFnZ2luZyk7dmFyIGkscz1nZXRQZXJjZW50YWdlKHQsZSx0aGlzLiRxLmkxOG4ucnRsKSxuPWdldE1vZGVsKHMsdGhpcy5taW4sdGhpcy5tYXgsdGhpcy5zdGVwLHRoaXMuY29tcHV0ZWREZWNpbWFscyk7c3dpdGNoKGUudHlwZSl7Y2FzZSBkcmFnVHlwZS5NSU46aT1zPD1lLnBlcmNlbnRhZ2VNYXg/e21pblA6cyxtYXhQOmUucGVyY2VudGFnZU1heCxtaW46bixtYXg6ZS52YWx1ZU1heH06e21pblA6ZS5wZXJjZW50YWdlTWF4LG1heFA6cyxtaW46ZS52YWx1ZU1heCxtYXg6bn07YnJlYWs7Y2FzZSBkcmFnVHlwZS5NQVg6aT1zPj1lLnBlcmNlbnRhZ2VNaW4/e21pblA6ZS5wZXJjZW50YWdlTWluLG1heFA6cyxtaW46ZS52YWx1ZU1pbixtYXg6bn06e21pblA6cyxtYXhQOmUucGVyY2VudGFnZU1pbixtaW46bixtYXg6ZS52YWx1ZU1pbn07YnJlYWs7Y2FzZSBkcmFnVHlwZS5SQU5HRTp2YXIgbz1zLWUub2Zmc2V0UGVyY2VudGFnZSxyPWJldHdlZW4oZS5wZXJjZW50YWdlTWluK28sMCwxLWUucmFuZ2VQZXJjZW50YWdlKSxhPW4tZS5vZmZzZXRNb2RlbCxsPWJldHdlZW4oZS52YWx1ZU1pbithLHRoaXMubWluLHRoaXMubWF4LWUucmFuZ2VWYWx1ZSk7aT17bWluUDpyLG1heFA6citlLnJhbmdlUGVyY2VudGFnZSxtaW46cGFyc2VGbG9hdChsLnRvRml4ZWQodGhpcy5jb21wdXRlZERlY2ltYWxzKSksbWF4OnBhcnNlRmxvYXQoKGwrZS5yYW5nZVZhbHVlKS50b0ZpeGVkKHRoaXMuY29tcHV0ZWREZWNpbWFscykpfX10aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlPWkubWluUCx0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlPWkubWF4UCx0aGlzLm1vZGVsPXttaW46aS5taW4sbWF4OmkubWF4fX0sX19lbmQ6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT10aGlzLmRyYWdnaW5nKSx0aGlzLl9fbW92ZSh0LGUpLHRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2U9KHRoaXMubW9kZWwubWluLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pLHRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2U9KHRoaXMubW9kZWwubWF4LXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfSxfX29uS2V5RG93bjpmdW5jdGlvbih0LGUpe3ZhciBpPXQua2V5Q29kZTtpZih0aGlzLmVkaXRhYmxlJiZbMzcsNDAsMzksMzhdLmluY2x1ZGVzKGkpKXtzdG9wQW5kUHJldmVudCh0KTt2YXIgcz10aGlzLmNvbXB1dGVkRGVjaW1hbHMsbj10LmN0cmxLZXk/MTAqdGhpcy5jb21wdXRlZFN0ZXA6dGhpcy5jb21wdXRlZFN0ZXAsbz1bMzcsNDBdLmluY2x1ZGVzKGkpPy1uOm4scj1zP3BhcnNlRmxvYXQoKHRoaXMubW9kZWxbZV0rbykudG9GaXhlZChzKSk6dGhpcy5tb2RlbFtlXStvO3RoaXMubW9kZWxbZV09YmV0d2VlbihyLFwibWluXCI9PT1lP3RoaXMubWluOnRoaXMubW9kZWwubWluLFwibWF4XCI9PT1lP3RoaXMubWF4OnRoaXMubW9kZWwubWF4KSx0aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlPSh0aGlzLm1vZGVsLm1pbi10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSx0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlPSh0aGlzLm1vZGVsLm1heC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSx0aGlzLl9fdXBkYXRlKCl9fSxfX29uS2V5VXA6ZnVuY3Rpb24odCxlKXt2YXIgaT10LmtleUNvZGU7dGhpcy5lZGl0YWJsZSYmWzM3LDQwLDM5LDM4XS5pbmNsdWRlcyhpKSYmdGhpcy5fX3VwZGF0ZSghMCl9LF9fdmFsaWRhdGVQcm9wczpmdW5jdGlvbigpe3RoaXMubWluPj10aGlzLm1heD9jb25zb2xlLmVycm9yKFwiUmFuZ2UgZXJyb3I6IG1pbiA+PSBtYXhcIix0aGlzLiRlbCx0aGlzLm1pbix0aGlzLm1heCk6bm90RGl2aWRlcygodGhpcy5tYXgtdGhpcy5taW4pL3RoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpP2NvbnNvbGUuZXJyb3IoXCJSYW5nZSBlcnJvcjogc3RlcCBtdXN0IGJlIGEgZGl2aXNvciBvZiBtYXggLSBtaW5cIix0aGlzLm1pbix0aGlzLm1heCx0aGlzLnN0ZXApOm5vdERpdmlkZXMoKHRoaXMubW9kZWwubWluLXRoaXMubWluKS90aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKT9jb25zb2xlLmVycm9yKFwiUmFuZ2UgZXJyb3I6IHN0ZXAgbXVzdCBiZSBhIGRpdmlzb3Igb2YgaW5pdGlhbCB2YWx1ZS5taW4gLSBtaW5cIix0aGlzLm1vZGVsLm1pbix0aGlzLm1pbix0aGlzLnN0ZXApOm5vdERpdmlkZXMoKHRoaXMubW9kZWwubWF4LXRoaXMubWluKS90aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKSYmY29uc29sZS5lcnJvcihcIlJhbmdlIGVycm9yOiBzdGVwIG11c3QgYmUgYSBkaXZpc29yIG9mIGluaXRpYWwgdmFsdWUubWF4IC0gbWluXCIsdGhpcy5tb2RlbC5tYXgsdGhpcy5tYXgsdGhpcy5zdGVwKX0sX19nZXRIYW5kbGU6ZnVuY3Rpb24odCxlLGkscyxuLG8scil7dmFyIGEsbD10aGlzO3JldHVybiB0KFwiZGl2XCIse3JlZjpcImhhbmRsZVwiK2ksc3RhdGljQ2xhc3M6XCJxLXNsaWRlci1oYW5kbGUgcS1zbGlkZXItaGFuZGxlLVwiK2Usc3R5bGU6KGE9e30sYVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09MTAwKm4rXCIlXCIsYS5ib3JkZXJSYWRpdXM9dGhpcy5zcXVhcmU/XCIwXCI6XCI1MCVcIixhKSxjbGFzczpbcz9cImhhbmRsZS1hdC1taW5pbXVtXCI6bnVsbCx7ZHJhZ2dpbmc6dGhpcy5kcmFnZ2luZ31dLGF0dHJzOnt0YWJpbmRleDp0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3A/dGhpcy5lZGl0YWJsZT8wOi0xOnZvaWQgMH0sb246e2tleWRvd246ZnVuY3Rpb24odCl7cmV0dXJuIGwuX19vbktleURvd24odCxlKX0sa2V5dXA6ZnVuY3Rpb24odCl7cmV0dXJuIGwuX19vbktleVVwKHQsZSl9fX0sW3RoaXMubGFiZWx8fHRoaXMubGFiZWxBbHdheXM/dChRQ2hpcCx7cHJvcHM6e3BvaW50aW5nOlwiZG93blwiLHNxdWFyZTohMCxkZW5zZTohMCxjb2xvcjpvfSxzdGF0aWNDbGFzczpcInEtc2xpZGVyLWxhYmVsIG5vLXBvaW50ZXItZXZlbnRzXCIsY2xhc3M6e1wibGFiZWwtYWx3YXlzXCI6dGhpcy5sYWJlbEFsd2F5c319LFtyXSk6bnVsbCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItcmluZ1wifSldKX0sX19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVyblt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItdHJhY2sgYWN0aXZlLXRyYWNrXCIsc3R5bGU6KGU9e30sZVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09MTAwKnRoaXMucGVyY2VudGFnZU1pbitcIiVcIixlLndpZHRoPXRoaXMuYWN0aXZlVHJhY2tXaWR0aCxlKSxjbGFzczp7ZHJhZ2dpbmc6dGhpcy5kcmFnZ2luZyxcInRyYWNrLWRyYWdnYWJsZVwiOnRoaXMuZHJhZ1JhbmdlfHx0aGlzLmRyYWdPbmx5UmFuZ2V9fSksdGhpcy5fX2dldEhhbmRsZSh0LFwibWluXCIsXCJNaW5cIiwhdGhpcy5maWxsSGFuZGxlQWx3YXlzJiZ0aGlzLm1vZGVsLm1pbj09PXRoaXMubWluLHRoaXMucGVyY2VudGFnZU1pbix0aGlzLmxlZnRUb29sdGlwQ29sb3IsdGhpcy5sZWZ0RGlzcGxheVZhbHVlKSx0aGlzLl9fZ2V0SGFuZGxlKHQsXCJtYXhcIixcIk1heFwiLCExLHRoaXMucGVyY2VudGFnZU1heCx0aGlzLnJpZ2h0VG9vbHRpcENvbG9yLHRoaXMucmlnaHREaXNwbGF5VmFsdWUpXX19fSxRUmF0aW5nPXtuYW1lOlwiUVJhdGluZ1wiLHByb3BzOnt2YWx1ZTpOdW1iZXIsbWF4Ont0eXBlOk51bWJlcixkZWZhdWx0OjV9LGljb246U3RyaW5nLGNvbG9yOlN0cmluZyxzaXplOlN0cmluZyxyZWFkb25seTpCb29sZWFuLGRpc2FibGU6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybnttb3VzZU1vZGVsOjB9fSxjb21wdXRlZDp7bW9kZWw6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRlbWl0KFwiaW5wdXRcIix0KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIix0KX0pfX0sZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5yZWFkb25seSYmIXRoaXMuZGlzYWJsZX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmRpc2FibGUmJnQucHVzaChcImRpc2FibGVkXCIpLHRoaXMuZWRpdGFibGUmJnQucHVzaChcImVkaXRhYmxlXCIpLHRoaXMuY29sb3ImJnQucHVzaChcInRleHQtXCIrdGhpcy5jb2xvciksdH19LG1ldGhvZHM6e3NldDpmdW5jdGlvbih0KXtpZih0aGlzLmVkaXRhYmxlKXt2YXIgZT1iZXR3ZWVuKHBhcnNlSW50KHQsMTApLDEsdGhpcy5tYXgpO3RoaXMubW9kZWw9dGhpcy5tb2RlbD09PWU/MDplLHRoaXMubW91c2VNb2RlbD0wfX0sX19zZXRIb3ZlclZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZWRpdGFibGUmJih0aGlzLm1vdXNlTW9kZWw9dCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsaT1bXSxzPXRoaXMuZWRpdGFibGU/MDotMSxuPWZ1bmN0aW9uKG4pe2kucHVzaCh0KFwic3BhblwiLHtrZXk6bixyZWY6XCJydFwiK24sYXR0cnM6e3RhYmluZGV4OnN9LG9uOntrZXlkb3duOmZ1bmN0aW9uKHQpe3N3aXRjaChnZXRFdmVudEtleSh0KSl7Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBlLnNldChuKSxzdG9wQW5kUHJldmVudCh0KTtjYXNlIDM3OmNhc2UgNDA6cmV0dXJuIGUuJHJlZnNbXCJydFwiKyhuLTEpXSYmZS4kcmVmc1tcInJ0XCIrKG4tMSldLmZvY3VzKCksc3RvcEFuZFByZXZlbnQodCk7Y2FzZSAzOTpjYXNlIDM4OnJldHVybiBlLiRyZWZzW1wicnRcIisobisxKV0mJmUuJHJlZnNbXCJydFwiKyhuKzEpXS5mb2N1cygpLHN0b3BBbmRQcmV2ZW50KHQpfX19fSxbdChRSWNvbix7cHJvcHM6e25hbWU6ZS5pY29ufHxlLiRxLmljb24ucmF0aW5nLmljb259LGNsYXNzOnthY3RpdmU6IWUubW91c2VNb2RlbCYmZS5tb2RlbD49bnx8ZS5tb3VzZU1vZGVsJiZlLm1vdXNlTW9kZWw+PW4sZXhzZWxlY3RlZDplLm1vdXNlTW9kZWwmJmUubW9kZWw+PW4mJmUubW91c2VNb2RlbDxuLGhvdmVyZWQ6ZS5tb3VzZU1vZGVsPT09bn0sYXR0cnM6e3RhYmluZGV4Oi0xfSxuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQobil9LG1vdXNlb3ZlcjpmdW5jdGlvbigpe3JldHVybiBlLl9fc2V0SG92ZXJWYWx1ZShuKX0sbW91c2VvdXQ6ZnVuY3Rpb24oKXtlLm1vdXNlTW9kZWw9MH0sZm9jdXM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5fX3NldEhvdmVyVmFsdWUobil9LGJsdXI6ZnVuY3Rpb24oKXtlLm1vdXNlTW9kZWw9MH19fSldKSl9LG89MTtvPD10aGlzLm1heDtvKyspbihvKTtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcmF0aW5nIHJvdyBpbmxpbmUgaXRlbXMtY2VudGVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLHN0eWxlOnRoaXMuc2l6ZT9cImZvbnQtc2l6ZTogXCIrdGhpcy5zaXplOlwiXCJ9LGkpfX0sUVNjcm9sbEFyZWE9e25hbWU6XCJRU2Nyb2xsQXJlYVwiLGRpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7dGh1bWJTdHlsZTp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX0sY29udGVudFN0eWxlOnt0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue319fSxjb250ZW50QWN0aXZlU3R5bGU6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LGRlbGF5Ont0eXBlOk51bWJlcixkZWZhdWx0OjFlM319LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57YWN0aXZlOiExLGhvdmVyOiExLGNvbnRhaW5lckhlaWdodDowLHNjcm9sbFBvc2l0aW9uOjAsc2Nyb2xsSGVpZ2h0OjB9fSxjb21wdXRlZDp7dGh1bWJIaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxIZWlnaHQ8PXRoaXMuY29udGFpbmVySGVpZ2h0fHwhdGhpcy5hY3RpdmUmJiF0aGlzLmhvdmVyfSx0aHVtYkhlaWdodDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGJldHdlZW4odGhpcy5jb250YWluZXJIZWlnaHQqdGhpcy5jb250YWluZXJIZWlnaHQvdGhpcy5zY3JvbGxIZWlnaHQsNTAsdGhpcy5jb250YWluZXJIZWlnaHQpKX0sc3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNjcm9sbFBlcmNlbnRhZ2UqKHRoaXMuY29udGFpbmVySGVpZ2h0LXRoaXMudGh1bWJIZWlnaHQpO3JldHVybiBPYmplY3QuYXNzaWduKHt9LHRoaXMudGh1bWJTdHlsZSx7dG9wOnQrXCJweFwiLGhlaWdodDp0aGlzLnRodW1iSGVpZ2h0K1wicHhcIn0pfSxtYWluU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aHVtYkhpZGRlbj90aGlzLmNvbnRlbnRTdHlsZTp0aGlzLmNvbnRlbnRBY3RpdmVTdHlsZX0sc2Nyb2xsUGVyY2VudGFnZTpmdW5jdGlvbigpe3ZhciB0PWJldHdlZW4odGhpcy5zY3JvbGxQb3NpdGlvbi8odGhpcy5zY3JvbGxIZWlnaHQtdGhpcy5jb250YWluZXJIZWlnaHQpLDAsMSk7cmV0dXJuIE1hdGgucm91bmQoMWU0KnQpLzFlNH19LG1ldGhvZHM6e3NldFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSl7c2V0U2Nyb2xsUG9zaXRpb24odGhpcy4kcmVmcy50YXJnZXQsdCxlKX0sX191cGRhdGVDb250YWluZXI6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQ7dGhpcy5jb250YWluZXJIZWlnaHQhPT1lJiYodGhpcy5jb250YWluZXJIZWlnaHQ9ZSx0aGlzLl9fc2V0QWN0aXZlKCEwLCEwKSl9LF9fdXBkYXRlU2Nyb2xsOmZ1bmN0aW9uKHQpe3ZhciBlPXQucG9zaXRpb247dGhpcy5zY3JvbGxQb3NpdGlvbiE9PWUmJih0aGlzLnNjcm9sbFBvc2l0aW9uPWUsdGhpcy5fX3NldEFjdGl2ZSghMCwhMCkpfSxfX3VwZGF0ZVNjcm9sbEhlaWdodDpmdW5jdGlvbih0KXt2YXIgZT10LmhlaWdodDt0aGlzLnNjcm9sbEhlaWdodCE9PWUmJih0aGlzLnNjcm9sbEhlaWdodD1lLHRoaXMuX19zZXRBY3RpdmUoITAsITApKX0sX19wYW5UaHVtYjpmdW5jdGlvbih0KXt0LmlzRmlyc3QmJih0aGlzLnJlZlBvcz10aGlzLnNjcm9sbFBvc2l0aW9uLHRoaXMuX19zZXRBY3RpdmUoITAsITApLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcIm5vbi1zZWxlY3RhYmxlXCIpLGRvY3VtZW50LnNlbGVjdGlvbj9kb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTp3aW5kb3cuZ2V0U2VsZWN0aW9uJiZ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkpLHQuaXNGaW5hbCYmKHRoaXMuX19zZXRBY3RpdmUoITEpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcIm5vbi1zZWxlY3RhYmxlXCIpKTt2YXIgZT0odGhpcy5zY3JvbGxIZWlnaHQtdGhpcy5jb250YWluZXJIZWlnaHQpLyh0aGlzLmNvbnRhaW5lckhlaWdodC10aGlzLnRodW1iSGVpZ2h0KTt0aGlzLiRyZWZzLnRhcmdldC5zY3JvbGxUb3A9dGhpcy5yZWZQb3MrKFwiZG93blwiPT09dC5kaXJlY3Rpb24/MTotMSkqdC5kaXN0YW5jZS55KmV9LF9fcGFuQ29udGFpbmVyOmZ1bmN0aW9uKHQpe3QuaXNGaXJzdCYmKHRoaXMucmVmUG9zPXRoaXMuc2Nyb2xsUG9zaXRpb24sdGhpcy5fX3NldEFjdGl2ZSghMCwhMCkpLHQuaXNGaW5hbCYmdGhpcy5fX3NldEFjdGl2ZSghMSk7dmFyIGU9dGhpcy5yZWZQb3MrKFwiZG93blwiPT09dC5kaXJlY3Rpb24/LTE6MSkqdC5kaXN0YW5jZS55O3RoaXMuJHJlZnMudGFyZ2V0LnNjcm9sbFRvcD1lLGU+MCYmZSt0aGlzLmNvbnRhaW5lckhlaWdodDx0aGlzLnNjcm9sbEhlaWdodCYmdC5ldnQucHJldmVudERlZmF1bHQoKX0sX19tb3VzZVdoZWVsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJHJlZnMudGFyZ2V0O2Uuc2Nyb2xsVG9wKz1nZXRNb3VzZVdoZWVsRGlzdGFuY2UodCkueSxlLnNjcm9sbFRvcD4wJiZlLnNjcm9sbFRvcCt0aGlzLmNvbnRhaW5lckhlaWdodDx0aGlzLnNjcm9sbEhlaWdodCYmdC5wcmV2ZW50RGVmYXVsdCgpfSxfX3NldEFjdGl2ZTpmdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0IT09dGhpcy5hY3RpdmU/dD8odGhpcy5hY3RpdmU9ITAsZSYmdGhpcy5fX3N0YXJ0VGltZXIoKSk6dGhpcy5hY3RpdmU9ITE6dCYmdGhpcy50aW1lciYmdGhpcy5fX3N0YXJ0VGltZXIoKX0sX19zdGFydFRpbWVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmFjdGl2ZT0hMSx0LnRpbWVyPW51bGx9LHRoaXMuZGVsYXkpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zY3JvbGxhcmVhIHJlbGF0aXZlLXBvc2l0aW9uXCIsb246e21vdXNlZW50ZXI6ZnVuY3Rpb24oKXtlLmhvdmVyPSEwfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKCl7ZS5ob3Zlcj0hMX19fSxbdChcImRpdlwiLHtyZWY6XCJ0YXJnZXRcIixzdGF0aWNDbGFzczpcInNjcm9sbCByZWxhdGl2ZS1wb3NpdGlvbiBvdmVyZmxvdy1oaWRkZW4gZml0XCIsb246e3doZWVsOnRoaXMuX19tb3VzZVdoZWVsfSxkaXJlY3RpdmVzOlt7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7dmVydGljYWw6ITAsbm9Nb3VzZTohMCxtaWdodFByZXZlbnQ6ITB9LHZhbHVlOnRoaXMuX19wYW5Db250YWluZXJ9XX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhYnNvbHV0ZSBmdWxsLXdpZHRoXCIsc3R5bGU6dGhpcy5tYWluU3R5bGV9LFt0KFFSZXNpemVPYnNlcnZhYmxlLHtvbjp7cmVzaXplOnRoaXMuX191cGRhdGVTY3JvbGxIZWlnaHR9fSksdGhpcy4kc2xvdHMuZGVmYXVsdF0pLHQoUVNjcm9sbE9ic2VydmFibGUse29uOntzY3JvbGw6dGhpcy5fX3VwZGF0ZVNjcm9sbH19KV0pLHQoUVJlc2l6ZU9ic2VydmFibGUse29uOntyZXNpemU6dGhpcy5fX3VwZGF0ZUNvbnRhaW5lcn19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zY3JvbGxhcmVhLXRodW1iIGFic29sdXRlLXJpZ2h0XCIsc3R5bGU6dGhpcy5zdHlsZSxjbGFzczp7XCJpbnZpc2libGUtdGh1bWJcIjp0aGlzLnRodW1iSGlkZGVufSxkaXJlY3RpdmVzOlt7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7dmVydGljYWw6ITAscHJldmVudDohMH0sdmFsdWU6dGhpcy5fX3BhblRodW1ifV19KV0pOnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNjcm9sbC1hcmVhIHJlbGF0aXZlLXBvc2l0aW9uXCIsc3R5bGU6dGhpcy5jb250ZW50U3R5bGV9LFt0KFwiZGl2XCIse3JlZjpcInRhcmdldFwiLHN0YXRpY0NsYXNzOlwic2Nyb2xsIHJlbGF0aXZlLXBvc2l0aW9uIGZpdFwifSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pfX0sUVNlYXJjaD17bmFtZTpcIlFTZWFyY2hcIixtaXhpbnM6W0ZyYW1lTWl4aW4sSW5wdXRNaXhpbl0scHJvcHM6e3ZhbHVlOntyZXF1aXJlZDohMH0sdHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInNlYXJjaFwifSxkZWJvdW5jZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDozMDB9LGljb246U3RyaW5nLG5vSWNvbjpCb29sZWFuLHVwcGVyQ2FzZTpCb29sZWFuLGxvd2VyQ2FzZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vZGVsOnRoaXMudmFsdWUsY2hpbGREZWJvdW5jZTohMX19LHByb3ZpZGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9ZnVuY3Rpb24oZSl7dC5tb2RlbCE9PWUmJih0Lm1vZGVsPWUpfTtyZXR1cm57X19pbnB1dERlYm91bmNlOntzZXQ6ZSxzZXROYXY6ZSxzZXRDaGlsZERlYm91bmNlOmZ1bmN0aW9uKGUpe3QuY2hpbGREZWJvdW5jZT1lfX19fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbD10fSxtb2RlbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnZhbHVlIT09dCYmKHR8fDA9PT10fHwodGhpcy5tb2RlbD1cIm51bWJlclwiPT09dGhpcy50eXBlP251bGw6XCJcIiksdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS4kZW1pdChcImlucHV0XCIsZS5tb2RlbCl9LHRoaXMuZGVib3VuY2VWYWx1ZSkpfX0sY29tcHV0ZWQ6e2RlYm91bmNlVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZERlYm91bmNlPzA6dGhpcy5kZWJvdW5jZX0sY29tcHV0ZWRDbGVhclZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNOdW1iZXImJjA9PT10aGlzLmNsZWFyVmFsdWU/dGhpcy5jbGVhclZhbHVlOnRoaXMuY2xlYXJWYWx1ZXx8KFwibnVtYmVyXCI9PT10aGlzLnR5cGU/bnVsbDpcIlwiKX0sY29udHJvbEJlZm9yZTpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmJlZm9yZXx8W10pLnNsaWNlKCk7cmV0dXJuIHRoaXMubm9JY29ufHx0LnVuc2hpZnQoe2ljb246dGhpcy5pY29ufHx0aGlzLiRxLmljb24uc2VhcmNoLmljb24saGFuZGxlcjp0aGlzLmZvY3VzfSksdH0sY29udHJvbEFmdGVyOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMuYWZ0ZXJ8fFtdKS5zbGljZSgpO3JldHVybiB0aGlzLmlzQ2xlYXJhYmxlJiZ0LnB1c2goe2ljb246dGhpcy4kcS5pY29uLnNlYXJjaFtcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildLGhhbmRsZXI6dGhpcy5jbGVhcn0pLHR9fSxtZXRob2RzOntjbGVhcjpmdW5jdGlvbih0KXt0aGlzLiRyZWZzLmlucHV0LmNsZWFyKHQpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoUUlucHV0LHtyZWY6XCJpbnB1dFwiLHN0YXRpY0NsYXNzOlwicS1zZWFyY2hcIixwcm9wczp7dmFsdWU6dGhpcy5tb2RlbCx0eXBlOnRoaXMudHlwZSxhdXRvZm9jdXM6dGhpcy5hdXRvZm9jdXMscGxhY2Vob2xkZXI6dGhpcy5wbGFjZWhvbGRlcnx8dGhpcy4kcS5pMThuLmxhYmVsLnNlYXJjaCxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcsYWxpZ246dGhpcy5hbGlnbixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmbG9hdExhYmVsOnRoaXMuZmxvYXRMYWJlbCxzdGFja0xhYmVsOnRoaXMuc3RhY2tMYWJlbCxwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsY29sb3I6dGhpcy5jb2xvcixyb3dzOnRoaXMucm93cyxiZWZvcmU6dGhpcy5jb250cm9sQmVmb3JlLGFmdGVyOnRoaXMuY29udHJvbEFmdGVyLGNsZWFyVmFsdWU6dGhpcy5jbGVhclZhbHVlLHVwcGVyQ2FzZTp0aGlzLnVwcGVyQ2FzZSxsb3dlckNhc2U6dGhpcy5sb3dlckNhc2V9LGF0dHJzOnRoaXMuJGF0dHJzLG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLm1vZGVsPXR9LGZvY3VzOnRoaXMuX19vbkZvY3VzLGJsdXI6dGhpcy5fX29uQmx1cixrZXl1cDp0aGlzLl9fb25LZXl1cCxrZXlkb3duOnRoaXMuX19vbktleWRvd24sY2xpY2s6dGhpcy5fX29uQ2xpY2sscGFzdGU6dGhpcy5fX29uUGFzdGUsY2xlYXI6ZnVuY3Rpb24odCl7ZS4kZW1pdChcImNsZWFyXCIsdCksZS5fX2VtaXQoKX19fSx0aGlzLiRzbG90cy5kZWZhdWx0KX19O2Z1bmN0aW9uIGRlZmF1bHRGaWx0ZXJGbih0LGUpe3JldHVybiBlLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT4tMX12YXIgUVNlbGVjdD17bmFtZTpcIlFTZWxlY3RcIixtaXhpbnM6W0ZyYW1lTWl4aW4sS2V5Ym9hcmRTZWxlY3Rpb25NaXhpbl0scHJvcHM6e2ZpbHRlcjpbRnVuY3Rpb24sQm9vbGVhbl0sZmlsdGVyUGxhY2Vob2xkZXI6U3RyaW5nLHJhZGlvOkJvb2xlYW4scGxhY2Vob2xkZXI6U3RyaW5nLHNlcGFyYXRvcjpCb29sZWFuLHZhbHVlOntyZXF1aXJlZDohMH0sbXVsdGlwbGU6Qm9vbGVhbix0b2dnbGU6Qm9vbGVhbixjaGlwczpCb29sZWFuLG9wdGlvbnM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITAsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVyblwibGFiZWxcImluIHQmJlwidmFsdWVcImluIHR9KX19LGNoaXBzQ29sb3I6U3RyaW5nLGNoaXBzQmdDb2xvcjpTdHJpbmcsZGlzcGxheVZhbHVlOlN0cmluZyxwb3B1cE1heEhlaWdodDpTdHJpbmcscG9wdXBDb3Zlcjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vZGVsOnRoaXMubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5zbGljZSgpOnRoaXMudmFsdWUsdGVybXM6XCJcIixmb2N1c2VkOiExfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMubW9kZWw9dGhpcy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh0KT90LnNsaWNlKCk6dH0sdmlzaWJsZU9wdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl9fa2V5Ym9hcmRDYWxjSW5kZXgoKX19LGNvbXB1dGVkOntvcHRNb2RlbDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5tdWx0aXBsZSlyZXR1cm4gdGhpcy5tb2RlbC5sZW5ndGg+MD90aGlzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm1vZGVsLmluY2x1ZGVzKGUudmFsdWUpfSk6dGhpcy5vcHRpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4hMX0pfSx2aXNpYmxlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdCx7aW5kZXg6ZX0pfSk7aWYodGhpcy5maWx0ZXImJnRoaXMudGVybXMubGVuZ3RoKXt2YXIgaT10aGlzLnRlcm1zLnRvTG93ZXJDYXNlKCk7ZT1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5maWx0ZXJGbihpLGUpfSl9cmV0dXJuIGV9LGtleWJvYXJkTWF4SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aXNpYmxlT3B0aW9ucy5sZW5ndGgtMX0sZmlsdGVyRm46ZnVuY3Rpb24oKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIHRoaXMuZmlsdGVyP2RlZmF1bHRGaWx0ZXJGbjp0aGlzLmZpbHRlcn0sYWN0dWFsVmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuZGlzcGxheVZhbHVlKXJldHVybiB0aGlzLmRpc3BsYXlWYWx1ZTtpZighdGhpcy5tdWx0aXBsZSl7dmFyIGU9dGhpcy5vcHRpb25zLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWU9PT10Lm1vZGVsfSk7cmV0dXJuIGU/ZS5sYWJlbDpcIlwifXZhciBpPXRoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5sYWJlbH0pO3JldHVybiBpLmxlbmd0aD9pLmpvaW4oXCIsIFwiKTpcIlwifSxjb21wdXRlZENsZWFyVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5jbGVhclZhbHVlP3RoaXMubXVsdGlwbGU/W106bnVsbDp0aGlzLmNsZWFyVmFsdWV9LGlzQ2xlYXJhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdGFibGUmJnRoaXMuY2xlYXJhYmxlJiZKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXB1dGVkQ2xlYXJWYWx1ZSkhPT1KU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsKX0sc2VsZWN0ZWRPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLm11bHRpcGxlKXJldHVybiB0aGlzLmxlbmd0aD4wP3RoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQubW9kZWwuaW5jbHVkZXMoZS52YWx1ZSl9KTpbXX0saGFzQ2hpcHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWx0aXBsZSYmdGhpcy5jaGlwcyYmdGhpcy5sZW5ndGg+MH0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5tb2RlbC5sZW5ndGg6W251bGwsdm9pZCAwLFwiXCJdLmluY2x1ZGVzKHRoaXMubW9kZWwpPzA6MX0sYWRkaXRpb25hbExlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXlWYWx1ZSYmdGhpcy5kaXNwbGF5VmFsdWUubGVuZ3RoPjB9fSxtZXRob2RzOnt0b2dnbGVQb3B1cDpmdW5jdGlvbigpe3RoaXMuJHJlZnMucG9wb3ZlciYmdGhpc1t0aGlzLiRyZWZzLnBvcG92ZXIuc2hvd2luZz9cImhpZGVcIjpcInNob3dcIl0oKX0sc2hvdzpmdW5jdGlvbigpe2lmKHRoaXMuX19rZXlib2FyZENhbGNJbmRleCgpLHRoaXMuJHJlZnMucG9wb3ZlcilyZXR1cm4gdGhpcy4kcmVmcy5wb3BvdmVyLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLnBvcG92ZXI/dGhpcy4kcmVmcy5wb3BvdmVyLmhpZGUoKTpQcm9taXNlLnJlc29sdmUoKX0scmVwb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHJlZnMucG9wb3Zlcjt0JiZ0LnNob3dpbmcmJnRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIHQmJnQucmVwb3NpdGlvbigpfSl9LF9fa2V5Ym9hcmRDYWxjSW5kZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMua2V5Ym9hcmRJbmRleD0tMTt2YXIgZT10aGlzLm11bHRpcGxlP3RoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pOlt0aGlzLm1vZGVsXTt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3ZhciBpPXZvaWQgMD09PWU/LTE6TWF0aC5tYXgoLTEsdC52aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModC52YWx1ZSl9KSk7aT4tMSYmKHQua2V5Ym9hcmRNb3ZlRGlyZWN0aW9uPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmtleWJvYXJkTW92ZURpcmVjdGlvbj0hMX0sNTAwKSx0Ll9fa2V5Ym9hcmRTaG93KGkpKX0pfSxfX2tleWJvYXJkQ3VzdG9tS2V5SGFuZGxlOmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2UgMjc6dGhpcy4kcmVmcy5wb3BvdmVyLnNob3dpbmcmJnRoaXMuaGlkZSgpO2JyZWFrO2Nhc2UgMTM6Y2FzZSAzMjp0aGlzLiRyZWZzLnBvcG92ZXIuc2hvd2luZ3x8dGhpcy5zaG93KCl9fSxfX2tleWJvYXJkU2hvd1RyaWdnZXI6ZnVuY3Rpb24oKXt0aGlzLnNob3coKX0sX19rZXlib2FyZFNldFNlbGVjdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnZpc2libGVPcHRpb25zW3RdO3RoaXMubXVsdGlwbGU/dGhpcy5fX3RvZ2dsZU11bHRpcGxlKGUudmFsdWUsZS5kaXNhYmxlKTp0aGlzLl9fc2luZ2xlU2VsZWN0KGUudmFsdWUsZS5kaXNhYmxlKX0sX19rZXlib2FyZElzU2VsZWN0YWJsZUluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0Pi0xJiZ0PHRoaXMudmlzaWJsZU9wdGlvbnMubGVuZ3RoJiYhdGhpcy52aXNpYmxlT3B0aW9uc1t0XS5kaXNhYmxlfSxfX21vdXNlRW50ZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5rZXlib2FyZE1vdmVEaXJlY3Rpb258fCh0aGlzLmtleWJvYXJkSW5kZXg9ZSl9LF9fb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZXx8dGhpcy5mb2N1c2VkfHwodGhpcy5mb2N1c2VkPSEwLHRoaXMuJGVtaXQoXCJmb2N1c1wiKSl9LF9fb25TaG93OmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlfHwodGhpcy5fX29uRm9jdXMoKSx0aGlzLmZpbHRlciYmdGhpcy4kcmVmcy5maWx0ZXImJih0aGlzLiRyZWZzLmZpbHRlci5mb2N1cygpLHRoaXMucmVwb3NpdGlvbigpKSl9LF9fb25CbHVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5mb2N1c2VkJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlLiRyZWZzLnBvcG92ZXImJmUuJHJlZnMucG9wb3Zlci5zaG93aW5nJiYodD09PWRvY3VtZW50LmJvZHl8fGUuJHJlZnMucG9wb3Zlci4kZWwuY29udGFpbnModCkpfHwoZS5fX29uQ2xvc2UoKSxlLmhpZGUoKSl9LDEpfSxfX29uQ2xvc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KGUubW9kZWwpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIixlLm1vZGVsKX0pLHRoaXMudGVybXM9XCJcIix0aGlzLmZvY3VzZWQmJih0P3RoaXMuJHJlZnMuaW5wdXQmJnRoaXMuJHJlZnMuaW5wdXQuJGVsJiZ0aGlzLiRyZWZzLmlucHV0LiRlbC5mb2N1cygpOih0aGlzLmZvY3VzZWQ9ITEsdGhpcy4kZW1pdChcImJsdXJcIikpKX0sX19zaW5nbGVTZWxlY3Q6ZnVuY3Rpb24odCxlKXtlfHwodGhpcy5fX2VtaXQodCksdGhpcy5oaWRlKCkpfSxfX3RvZ2dsZU11bHRpcGxlOmZ1bmN0aW9uKHQsZSl7aWYoIWUpe3ZhciBpPXRoaXMubW9kZWwscz1pLmluZGV4T2YodCk7cz4tMT90aGlzLiRlbWl0KFwicmVtb3ZlXCIse2luZGV4OnMsdmFsdWU6aS5zcGxpY2UocywxKX0pOih0aGlzLiRlbWl0KFwiYWRkXCIse2luZGV4OmkubGVuZ3RoLHZhbHVlOnR9KSxpLnB1c2godCkpLHRoaXMuJGVtaXQoXCJpbnB1dFwiLGkpfX0sX19lbWl0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy4kZW1pdChcImlucHV0XCIsdCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsdCl9KX0sX19zZXRNb2RlbDpmdW5jdGlvbih0LGUpe3RoaXMubW9kZWw9dHx8KHRoaXMubXVsdGlwbGU/W106bnVsbCksdGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5tb2RlbCksIWUmJnRoaXMuJHJlZnMucG9wb3ZlciYmdGhpcy4kcmVmcy5wb3BvdmVyLnNob3dpbmd8fHRoaXMuX19vbkNsb3NlKGUpfSxfX2dldENoaXBUZXh0Q29sb3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2hpcHNDb2xvcj90aGlzLmNoaXBzQ29sb3I6dGhpcy5pc0ludmVydGVkTGlnaHQ/dGhpcy5pbnZlcnRlZExpZ2h0P3R8fHRoaXMuY29sb3I6XCJ3aGl0ZVwiOnRoaXMuaXNJbnZlcnRlZD90fHwodGhpcy5pbnZlcnRlZExpZ2h0P1wiZ3JleS0xMFwiOnRoaXMuY29sb3IpOnRoaXMuZGFyaz90fHx0aGlzLmNvbG9yOlwid2hpdGVcIn0sX19nZXRDaGlwQmdDb2xvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jaGlwc0JnQ29sb3I/dGhpcy5jaGlwc0JnQ29sb3I6dGhpcy5pc0ludmVydGVkTGlnaHQ/dGhpcy5pbnZlcnRlZExpZ2h0P1wiZ3JleS0xMFwiOnR8fHRoaXMuY29sb3I6dGhpcy5pc0ludmVydGVkP3RoaXMuaW52ZXJ0ZWRMaWdodD90aGlzLmNvbG9yOlwid2hpdGVcIjp0aGlzLmRhcms/XCJ3aGl0ZVwiOnR8fHRoaXMuY29sb3J9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPVtdO2lmKHRoaXMuaGFzQ2hpcHMpe3ZhciBzPXQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcm93IGl0ZW1zLWNlbnRlciBxLWlucHV0LWNoaXBzXCIsY2xhc3M6dGhpcy5hbGlnbkNsYXNzfSx0aGlzLnNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChRQ2hpcCx7a2V5OnMscHJvcHM6e3NtYWxsOiEwLGNsb3NhYmxlOmUuZWRpdGFibGUmJiFpLmRpc2FibGUsY29sb3I6ZS5fX2dldENoaXBCZ0NvbG9yKGkuY29sb3IpLHRleHRDb2xvcjplLl9fZ2V0Q2hpcFRleHRDb2xvcihpLmNvbG9yKSxpY29uOmkuaWNvbixpY29uUmlnaHQ6aS5yaWdodEljb24sYXZhdGFyOmkuYXZhdGFyfSxvbjp7aGlkZTpmdW5jdGlvbigpe2UuX190b2dnbGVNdWx0aXBsZShpLnZhbHVlLGUuZGlzYWJsZXx8aS5kaXNhYmxlKX19LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfX19LFt0KFwiZGl2XCIse2RvbVByb3BzOntpbm5lckhUTUw6aS5sYWJlbH19KV0pfSkpO2kucHVzaChzKX1lbHNle3ZhciBuPXQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcS1pbnB1dC10YXJnZXQgZWxsaXBzaXNcIixjbGFzczp0aGlzLmZha2VJbnB1dENsYXNzZXMsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLmZha2VJbnB1dFZhbHVlfX0pO2kucHVzaChuKX1yZXR1cm4gaS5wdXNoKHQoUVBvcG92ZXIse3JlZjpcInBvcG92ZXJcIixzdGF0aWNDbGFzczpcImNvbHVtbiBuby13cmFwXCIsY2xhc3M6dGhpcy5kYXJrP1wiYmctZGFya1wiOm51bGwscHJvcHM6e2NvdmVyOnRoaXMucG9wdXBDb3ZlcixrZWVwT25TY3JlZW46ITAsZGlzYWJsZTohdGhpcy5lZGl0YWJsZSxhbmNob3JDbGljazohMSxtYXhIZWlnaHQ6dGhpcy5wb3B1cE1heEhlaWdodH0sc2xvdDpcImFmdGVyXCIsb246e3Nob3c6dGhpcy5fX29uU2hvdyxoaWRlOmZ1bmN0aW9uKCl7ZS5fX29uQ2xvc2UoITApfX0sbmF0aXZlT246e2tleWRvd246dGhpcy5fX2tleWJvYXJkSGFuZGxlS2V5fX0sW3RoaXMuZmlsdGVyJiZ0KFFTZWFyY2gse3JlZjpcImZpbHRlclwiLHN0YXRpY0NsYXNzOlwiY29sLWF1dG9cIixzdHlsZTpcInBhZGRpbmc6IDEwcHg7XCIscHJvcHM6e3ZhbHVlOnRoaXMudGVybXMscGxhY2Vob2xkZXI6dGhpcy5maWx0ZXJQbGFjZWhvbGRlcnx8dGhpcy4kcS5pMThuLmxhYmVsLmZpbHRlcixkZWJvdW5jZToxMDAsY29sb3I6dGhpcy5jb2xvcixkYXJrOnRoaXMuZGFyayxub1BhcmVudEZpZWxkOiEwLG5vSWNvbjohMH0sb246e2lucHV0OmZ1bmN0aW9uKHQpe2UudGVybXM9dCxlLnJlcG9zaXRpb24oKX19fSl8fHZvaWQgMCx0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aCYmdChRTGlzdCx7c3RhdGljQ2xhc3M6XCJuby1ib3JkZXIgc2Nyb2xsXCIscHJvcHM6e3NlcGFyYXRvcjp0aGlzLnNlcGFyYXRvcixkYXJrOnRoaXMuZGFya319LHRoaXMudmlzaWJsZU9wdGlvbnMubWFwKGZ1bmN0aW9uKGkscyl7cmV0dXJuIHQoUUl0ZW1XcmFwcGVyLHtrZXk6cyxjbGFzczpbaS5kaXNhYmxlP1widGV4dC1mYWRlZFwiOlwiY3Vyc29yLXBvaW50ZXJcIixzPT09ZS5rZXlib2FyZEluZGV4P1wicS1zZWxlY3QtaGlnaGxpZ2h0XCI6XCJcIixpLmRpc2FibGU/XCJcIjpcImN1cnNvci1wb2ludGVyXCIsaS5jbGFzc05hbWV8fFwiXCJdLHByb3BzOntjZmc6aSxzbG90UmVwbGFjZTohMCxhY3RpdmU6ZS5tdWx0aXBsZT92b2lkIDA6ZS52YWx1ZT09PWkudmFsdWV9LG5hdGl2ZU9uOntcIiFjbGlja1wiOmZ1bmN0aW9uKCl7dmFyIHQ9ZS5tdWx0aXBsZT9cIl9fdG9nZ2xlTXVsdGlwbGVcIjpcIl9fc2luZ2xlU2VsZWN0XCI7ZVt0XShpLnZhbHVlLGkuZGlzYWJsZSl9LG1vdXNlZW50ZXI6ZnVuY3Rpb24odCl7IWkuZGlzYWJsZSYmZS5fX21vdXNlRW50ZXJIYW5kbGVyKHQscyl9fX0sW2UubXVsdGlwbGU/dChlLnRvZ2dsZT9RVG9nZ2xlOlFDaGVja2JveCx7c2xvdDplLnRvZ2dsZT9cInJpZ2h0XCI6XCJsZWZ0XCIscHJvcHM6e2tlZXBDb2xvcjohMCxjb2xvcjppLmNvbG9yfHxlLmNvbG9yLGRhcms6ZS5kYXJrLHZhbHVlOmUub3B0TW9kZWxbaS5pbmRleF0sZGlzYWJsZTppLmRpc2FibGUsbm9Gb2N1czohMH19KTplLnJhZGlvJiZ0KFFSYWRpbyx7c2xvdDpcImxlZnRcIixwcm9wczp7a2VlcENvbG9yOiEwLGNvbG9yOmkuY29sb3J8fGUuY29sb3IsZGFyazplLmRhcmssdmFsdWU6ZS52YWx1ZSx2YWw6aS52YWx1ZSxkaXNhYmxlOmkuZGlzYWJsZSxub0ZvY3VzOiEwfX0pfHx2b2lkIDBdKX0pKXx8dm9pZCAwXSkpLHRoaXMuaXNDbGVhcmFibGUmJmkucHVzaCh0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFtcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5jbGVhcn19KSksaS5wdXNoKHQoUUljb24sdGhpcy5yZWFkb25seT97c2xvdDpcImFmdGVyXCJ9OntzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dC5kcm9wZG93bn19KSksdChRSW5wdXRGcmFtZSx7cmVmOlwiaW5wdXRcIixzdGF0aWNDbGFzczpcInEtc2VsZWN0XCIscHJvcHM6e3ByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsc3RhY2tMYWJlbDp0aGlzLnN0YWNrTGFiZWwsZmxvYXRMYWJlbDp0aGlzLmZsb2F0TGFiZWwsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmb2N1c2VkOnRoaXMuZm9jdXNlZCxmb2N1c2FibGU6ITAsbGVuZ3RoOnRoaXMubGVuZ3RoLGFkZGl0aW9uYWxMZW5ndGg6dGhpcy5hZGRpdGlvbmFsTGVuZ3RofSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy50b2dnbGVQb3B1cCxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbkJsdXIsa2V5ZG93bjp0aGlzLl9fa2V5Ym9hcmRIYW5kbGVLZXl9fSxpKX19LFFTcGlubmVyQXVkaW89e25hbWU6XCJRU3Bpbm5lckF1ZGlvXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e2ZpbGw6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDU1IDgwXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4MClcIn19LFt0KFwicmVjdFwiLHthdHRyczp7d2lkdGg6XCIxMFwiLGhlaWdodDpcIjIwXCIscng6XCIzXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjBzXCIsZHVyOlwiNC4zc1wiLHZhbHVlczpcIjIwOzQ1OzU3OzgwOzY0OzMyOzY2OzQ1OzY0OzIzOzY2OzEzOzY0OzU2OzM0OzM0OzI7MjM7NzY7Nzk7MjBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInJlY3RcIix7YXR0cnM6e3g6XCIxNVwiLHdpZHRoOlwiMTBcIixoZWlnaHQ6XCI4MFwiLHJ4OlwiM1wifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwc1wiLGR1cjpcIjJzXCIsdmFsdWVzOlwiODA7NTU7MzM7NTs3NTsyMzs3MzszMzsxMjsxNDs2MDs4MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjMwXCIsd2lkdGg6XCIxMFwiLGhlaWdodDpcIjUwXCIscng6XCIzXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjBzXCIsZHVyOlwiMS40c1wiLHZhbHVlczpcIjUwOzM0Ozc4OzIzOzU2OzIzOzM0Ozc2OzgwOzU0OzIxOzUwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiNDVcIix3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMzBcIixyeDpcIjNcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGJlZ2luOlwiMHNcIixkdXI6XCIyc1wiLHZhbHVlczpcIjMwOzQ1OzEzOzgwOzU2OzcyOzQ1Ozc2OzM0OzIzOzY3OzMwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSldKX19LFFTcGlubmVyQmFsbD17bmFtZTpcIlFTcGlubmVyQmFsbFwiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntzdHJva2U6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDU3IDU3XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMSAxKVwiLFwic3Ryb2tlLXdpZHRoXCI6XCIyXCIsZmlsbDpcIm5vbmVcIixcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwifX0sW3QoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiNVwiLGN5OlwiNTBcIixyOlwiNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiY3lcIixiZWdpbjpcIjBzXCIsZHVyOlwiMi4yc1wiLHZhbHVlczpcIjUwOzU7NTA7NTBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiY3hcIixiZWdpbjpcIjBzXCIsZHVyOlwiMi4yc1wiLHZhbHVlczpcIjU7Mjc7NDk7NVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjI3XCIsY3k6XCI1XCIscjpcIjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImN5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjIuMnNcIixmcm9tOlwiNVwiLHRvOlwiNVwiLHZhbHVlczpcIjU7NTA7NTA7NVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJjeFwiLGJlZ2luOlwiMHNcIixkdXI6XCIyLjJzXCIsZnJvbTpcIjI3XCIsdG86XCIyN1wiLHZhbHVlczpcIjI3OzQ5OzU7MjdcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI0OVwiLGN5OlwiNTBcIixyOlwiNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiY3lcIixiZWdpbjpcIjBzXCIsZHVyOlwiMi4yc1wiLHZhbHVlczpcIjUwOzUwOzU7NTBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiY3hcIixmcm9tOlwiNDlcIix0bzpcIjQ5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjIuMnNcIix2YWx1ZXM6XCI0OTs1OzI3OzQ5XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSldKX19LFFTcGlubmVyQmFycz17bmFtZTpcIlFTcGlubmVyQmFyc1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMzUgMTQwXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt5OlwiMTBcIix3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTIwXCIscng6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjAuNXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjEyMDsxMTA7MTAwOzkwOzgwOzcwOzYwOzUwOzQwOzE0MDsxMjBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwieVwiLGJlZ2luOlwiMC41c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTA7MTU7MjA7MjU7MzA7MzU7NDA7NDU7NTA7MDsxMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjMwXCIseTpcIjEwXCIsd2lkdGg6XCIxNVwiLGhlaWdodDpcIjEyMFwiLHJ4OlwiNlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwLjI1c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTIwOzExMDsxMDA7OTA7ODA7NzA7NjA7NTA7NDA7MTQwOzEyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsYmVnaW46XCIwLjI1c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTA7MTU7MjA7MjU7MzA7MzU7NDA7NDU7NTA7MDsxMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjYwXCIsd2lkdGg6XCIxNVwiLGhlaWdodDpcIjE0MFwiLHJ4OlwiNlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTIwOzExMDsxMDA7OTA7ODA7NzA7NjA7NTA7NDA7MTQwOzEyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTA7MTU7MjA7MjU7MzA7MzU7NDA7NDU7NTA7MDsxMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjkwXCIseTpcIjEwXCIsd2lkdGg6XCIxNVwiLGhlaWdodDpcIjEyMFwiLHJ4OlwiNlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwLjI1c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTIwOzExMDsxMDA7OTA7ODA7NzA7NjA7NTA7NDA7MTQwOzEyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsYmVnaW46XCIwLjI1c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTA7MTU7MjA7MjU7MzA7MzU7NDA7NDU7NTA7MDsxMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjEyMFwiLHk6XCIxMFwiLHdpZHRoOlwiMTVcIixoZWlnaHQ6XCIxMjBcIixyeDpcIjZcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGJlZ2luOlwiMC41c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTIwOzExMDsxMDA7OTA7ODA7NzA7NjA7NTA7NDA7MTQwOzEyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsYmVnaW46XCIwLjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMDsxNTsyMDsyNTszMDszNTs0MDs0NTs1MDswOzEwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSl9fSxRU3Bpbm5lckNpcmNsZXM9e25hbWU6XCJRU3Bpbm5lckNpcmNsZXNcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7ZmlsbDpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTM1IDEzNVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk02Ny40NDcgNThjNS41MjMgMCAxMC00LjQ3NyAxMC0xMHMtNC40NzctMTAtMTAtMTAtMTAgNC40NzctMTAgMTAgNC40NzcgMTAgMTAgMTB6bTkuNDQ4IDkuNDQ3YzAgNS41MjMgNC40NzcgMTAgMTAgMTAgNS41MjIgMCAxMC00LjQ3NyAxMC0xMHMtNC40NzgtMTAtMTAtMTBjLTUuNTIzIDAtMTAgNC40NzctMTAgMTB6bS05LjQ0OCA5LjQ0OGMtNS41MjMgMC0xMCA0LjQ3Ny0xMCAxMCAwIDUuNTIyIDQuNDc3IDEwIDEwIDEwczEwLTQuNDc4IDEwLTEwYzAtNS41MjMtNC40NzctMTAtMTAtMTB6TTU4IDY3LjQ0N2MwLTUuNTIzLTQuNDc3LTEwLTEwLTEwcy0xMCA0LjQ3Ny0xMCAxMCA0LjQ3NyAxMCAxMCAxMCAxMC00LjQ3NyAxMC0xMHpcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCA2NyA2N1wiLHRvOlwiLTM2MCA2NyA2N1wiLGR1cjpcIjIuNXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTTI4LjE5IDQwLjMxYzYuNjI3IDAgMTItNS4zNzQgMTItMTIgMC02LjYyOC01LjM3My0xMi0xMi0xMi02LjYyOCAwLTEyIDUuMzcyLTEyIDEyIDAgNi42MjYgNS4zNzIgMTIgMTIgMTJ6bTMwLjcyLTE5LjgyNWM0LjY4NiA0LjY4NyAxMi4yODQgNC42ODcgMTYuOTcgMCA0LjY4Ni00LjY4NiA0LjY4Ni0xMi4yODQgMC0xNi45Ny00LjY4Ni00LjY4Ny0xMi4yODQtNC42ODctMTYuOTcgMC00LjY4NyA0LjY4Ni00LjY4NyAxMi4yODQgMCAxNi45N3ptMzUuNzQgNy43MDVjMCA2LjYyNyA1LjM3IDEyIDEyIDEyIDYuNjI2IDAgMTItNS4zNzMgMTItMTIgMC02LjYyOC01LjM3NC0xMi0xMi0xMi02LjYzIDAtMTIgNS4zNzItMTIgMTJ6bTE5LjgyMiAzMC43MmMtNC42ODYgNC42ODYtNC42ODYgMTIuMjg0IDAgMTYuOTcgNC42ODcgNC42ODYgMTIuMjg1IDQuNjg2IDE2Ljk3IDAgNC42ODctNC42ODYgNC42ODctMTIuMjg0IDAtMTYuOTctNC42ODUtNC42ODctMTIuMjgzLTQuNjg3LTE2Ljk3IDB6bS03LjcwNCAzNS43NGMtNi42MjcgMC0xMiA1LjM3LTEyIDEyIDAgNi42MjYgNS4zNzMgMTIgMTIgMTJzMTItNS4zNzQgMTItMTJjMC02LjYzLTUuMzczLTEyLTEyLTEyem0tMzAuNzIgMTkuODIyYy00LjY4Ni00LjY4Ni0xMi4yODQtNC42ODYtMTYuOTcgMC00LjY4NiA0LjY4Ny00LjY4NiAxMi4yODUgMCAxNi45NyA0LjY4NiA0LjY4NyAxMi4yODQgNC42ODcgMTYuOTcgMCA0LjY4Ny00LjY4NSA0LjY4Ny0xMi4yODMgMC0xNi45N3ptLTM1Ljc0LTcuNzA0YzAtNi42MjctNS4zNzItMTItMTItMTItNi42MjYgMC0xMiA1LjM3My0xMiAxMnM1LjM3NCAxMiAxMiAxMmM2LjYyOCAwIDEyLTUuMzczIDEyLTEyem0tMTkuODIzLTMwLjcyYzQuNjg3LTQuNjg2IDQuNjg3LTEyLjI4NCAwLTE2Ljk3LTQuNjg2LTQuNjg2LTEyLjI4NC00LjY4Ni0xNi45NyAwLTQuNjg3IDQuNjg2LTQuNjg3IDEyLjI4NCAwIDE2Ljk3IDQuNjg2IDQuNjg3IDEyLjI4NCA0LjY4NyAxNi45NyAwelwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDY3IDY3XCIsdG86XCIzNjAgNjcgNjdcIixkdXI6XCI4c1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKX19LFFTcGlubmVyQ29tbWVudD17bmFtZTpcIlFTcGlubmVyQ29tbWVudFwiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsdmlld0JveDpcIjAgMCAxMDAgMTAwXCIscHJlc2VydmVBc3BlY3RSYXRpbzpcInhNaWRZTWlkXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3g6XCIwXCIseTpcIjBcIix3aWR0aDpcIjEwMFwiLGhlaWdodDpcIjEwMFwiLGZpbGw6XCJub25lXCJ9fSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNNzgsMTlIMjJjLTYuNiwwLTEyLDUuNC0xMiwxMnYzMWMwLDYuNiw1LjQsMTIsMTIsMTJoMzcuMmMwLjQsMywxLjgsNS42LDMuNyw3LjZjMi40LDIuNSw1LjEsNC4xLDkuMSw0IGMtMS40LTIuMS0yLTcuMi0yLTEwLjNjMC0wLjQsMC0wLjgsMC0xLjNoOGM2LjYsMCwxMi01LjQsMTItMTJWMzFDOTAsMjQuNCw4NC42LDE5LDc4LDE5elwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19KSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjMwXCIsY3k6XCI0N1wiLHI6XCI1XCIsZmlsbDpcIiNmZmZcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcIm9wYWNpdHlcIixmcm9tOlwiMFwiLHRvOlwiMVwiLHZhbHVlczpcIjA7MTsxXCIsa2V5VGltZXM6XCIwOzAuMjsxXCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiNTBcIixjeTpcIjQ3XCIscjpcIjVcIixmaWxsOlwiI2ZmZlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwiLGZyb206XCIwXCIsdG86XCIxXCIsdmFsdWVzOlwiMDswOzE7MVwiLGtleVRpbWVzOlwiMDswLjI7MC40OzFcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI3MFwiLGN5OlwiNDdcIixyOlwiNVwiLGZpbGw6XCIjZmZmXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJvcGFjaXR5XCIsZnJvbTpcIjBcIix0bzpcIjFcIix2YWx1ZXM6XCIwOzA7MTsxXCIsa2V5VGltZXM6XCIwOzAuNDswLjY7MVwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pfX0sUVNwaW5uZXJDdWJlPXtuYW1lOlwiUVNwaW5uZXJDdWJlXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIn19LFt0KFwicmVjdFwiLHthdHRyczp7eDpcIjBcIix5OlwiMFwiLHdpZHRoOlwiMTAwXCIsaGVpZ2h0OlwiMTAwXCIsZmlsbDpcIm5vbmVcIn19KSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDI1IDI1KVwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt4OlwiLTIwXCIseTpcIi0yMFwiLHdpZHRoOlwiNDBcIixoZWlnaHQ6XCI0MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC45XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMS41XCIsdG86XCIxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsYmVnaW46XCIwc1wiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4yIDAuOCAwLjIgMC44XCIsa2V5VGltZXM6XCIwOzFcIn19KV0pXSksdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSg3NSAyNSlcIn19LFt0KFwicmVjdFwiLHthdHRyczp7eDpcIi0yMFwiLHk6XCItMjBcIix3aWR0aDpcIjQwXCIsaGVpZ2h0OlwiNDBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuOFwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInNjYWxlXCIsZnJvbTpcIjEuNVwiLHRvOlwiMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGJlZ2luOlwiMC4xc1wiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4yIDAuOCAwLjIgMC44XCIsa2V5VGltZXM6XCIwOzFcIn19KV0pXSksdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSgyNSA3NSlcIn19LFt0KFwicmVjdFwiLHtzdGF0aWNDbGFzczpcImN1YmVcIixhdHRyczp7eDpcIi0yMFwiLHk6XCItMjBcIix3aWR0aDpcIjQwXCIsaGVpZ2h0OlwiNDBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuN1wifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInNjYWxlXCIsZnJvbTpcIjEuNVwiLHRvOlwiMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGJlZ2luOlwiMC4zc1wiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4yIDAuOCAwLjIgMC44XCIsa2V5VGltZXM6XCIwOzFcIn19KV0pXSksdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSg3NSA3NSlcIn19LFt0KFwicmVjdFwiLHtzdGF0aWNDbGFzczpcImN1YmVcIixhdHRyczp7eDpcIi0yMFwiLHk6XCItMjBcIix3aWR0aDpcIjQwXCIsaGVpZ2h0OlwiNDBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuNlwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInNjYWxlXCIsZnJvbTpcIjEuNVwiLHRvOlwiMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGJlZ2luOlwiMC4yc1wiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4yIDAuOCAwLjIgMC44XCIsa2V5VGltZXM6XCIwOzFcIn19KV0pXSldKX19LFFTcGlubmVyRG90cz17bmFtZTpcIlFTcGlubmVyRG90c1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMjAgMzBcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIxNVwiLGN5OlwiMTVcIixyOlwiMTVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInJcIixmcm9tOlwiMTVcIix0bzpcIjE1XCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCIxNTs5OzE1XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGZyb206XCIxXCIsdG86XCIxXCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCIxOy41OzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI2MFwiLGN5OlwiMTVcIixyOlwiOVwiLFwiZmlsbC1vcGFjaXR5XCI6XCIuM1wifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGZyb206XCI5XCIsdG86XCI5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCI5OzE1OzlcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsZnJvbTpcIi41XCIsdG86XCIuNVwiLGJlZ2luOlwiMHNcIixkdXI6XCIwLjhzXCIsdmFsdWVzOlwiLjU7MTsuNVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjEwNVwiLGN5OlwiMTVcIixyOlwiMTVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInJcIixmcm9tOlwiMTVcIix0bzpcIjE1XCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCIxNTs5OzE1XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGZyb206XCIxXCIsdG86XCIxXCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCIxOy41OzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKX19LFFTcGlubmVyRmFjZWJvb2s9e25hbWU6XCJRU3Bpbm5lckZhY2Vib29rXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIn19LFt0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDIwIDUwKVwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt4OlwiLTEwXCIseTpcIi0zMFwiLHdpZHRoOlwiMjBcIixoZWlnaHQ6XCI2MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC42XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMlwiLHRvOlwiMVwiLGJlZ2luOlwiMHNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixkdXI6XCIxc1wiLGNhbGNNb2RlOlwic3BsaW5lXCIsa2V5U3BsaW5lczpcIjAuMSAwLjkgMC40IDFcIixrZXlUaW1lczpcIjA7MVwiLHZhbHVlczpcIjI7MVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDUwIDUwKVwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt4OlwiLTEwXCIseTpcIi0zMFwiLHdpZHRoOlwiMjBcIixoZWlnaHQ6XCI2MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC44XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMlwiLHRvOlwiMVwiLGJlZ2luOlwiMC4xc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4xIDAuOSAwLjQgMVwiLGtleVRpbWVzOlwiMDsxXCIsdmFsdWVzOlwiMjsxXCJ9fSldKV0pLHQoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoODAgNTApXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3g6XCItMTBcIix5OlwiLTMwXCIsd2lkdGg6XCIyMFwiLGhlaWdodDpcIjYwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLG9wYWNpdHk6XCIwLjlcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJzY2FsZVwiLGZyb206XCIyXCIsdG86XCIxXCIsYmVnaW46XCIwLjJzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjEgMC45IDAuNCAxXCIsa2V5VGltZXM6XCIwOzFcIix2YWx1ZXM6XCIyOzFcIn19KV0pXSldKX19LFFTcGlubmVyR2VhcnM9e25hbWU6XCJRU3Bpbm5lckdlYXJzXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKC0yMCwtMjApXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNNzkuOSw1Mi42QzgwLDUxLjgsODAsNTAuOSw4MCw1MHMwLTEuOC0wLjEtMi42bC01LjEtMC40Yy0wLjMtMi40LTAuOS00LjYtMS44LTYuN2w0LjItMi45Yy0wLjctMS42LTEuNi0zLjEtMi42LTQuNSBMNzAsMzVjLTEuNC0xLjktMy4xLTMuNS00LjktNC45bDIuMi00LjZjLTEuNC0xLTIuOS0xLjktNC41LTIuNkw1OS44LDI3Yy0yLjEtMC45LTQuNC0xLjUtNi43LTEuOGwtMC40LTUuMUM1MS44LDIwLDUwLjksMjAsNTAsMjAgcy0xLjgsMC0yLjYsMC4xbC0wLjQsNS4xYy0yLjQsMC4zLTQuNiwwLjktNi43LDEuOGwtMi45LTQuMWMtMS42LDAuNy0zLjEsMS42LTQuNSwyLjZsMi4xLDQuNmMtMS45LDEuNC0zLjUsMy4xLTUsNC45bC00LjUtMi4xIGMtMSwxLjQtMS45LDIuOS0yLjYsNC41bDQuMSwyLjljLTAuOSwyLjEtMS41LDQuNC0xLjgsNi44bC01LDAuNEMyMCw0OC4yLDIwLDQ5LjEsMjAsNTBzMCwxLjgsMC4xLDIuNmw1LDAuNCBjMC4zLDIuNCwwLjksNC43LDEuOCw2LjhsLTQuMSwyLjljMC43LDEuNiwxLjYsMy4xLDIuNiw0LjVsNC41LTIuMWMxLjQsMS45LDMuMSwzLjUsNSw0LjlsLTIuMSw0LjZjMS40LDEsMi45LDEuOSw0LjUsMi42bDIuOS00LjEgYzIuMSwwLjksNC40LDEuNSw2LjcsMS44bDAuNCw1LjFDNDguMiw4MCw0OS4xLDgwLDUwLDgwczEuOCwwLDIuNi0wLjFsMC40LTUuMWMyLjMtMC4zLDQuNi0wLjksNi43LTEuOGwyLjksNC4yIGMxLjYtMC43LDMuMS0xLjYsNC41LTIuNkw2NSw2OS45YzEuOS0xLjQsMy41LTMsNC45LTQuOWw0LjYsMi4yYzEtMS40LDEuOS0yLjksMi42LTQuNUw3Myw1OS44YzAuOS0yLjEsMS41LTQuNCwxLjgtNi43TDc5LjksNTIuNiB6IE01MCw2NWMtOC4zLDAtMTUtNi43LTE1LTE1YzAtOC4zLDYuNy0xNSwxNS0xNXMxNSw2LjcsMTUsMTVDNjUsNTguMyw1OC4zLDY1LDUwLDY1elwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiOTAgNTAgNTBcIix0bzpcIjAgNTAgNTBcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDIwLDIwKSByb3RhdGUoMTUgNTAgNTApXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNNzkuOSw1Mi42QzgwLDUxLjgsODAsNTAuOSw4MCw1MHMwLTEuOC0wLjEtMi42bC01LjEtMC40Yy0wLjMtMi40LTAuOS00LjYtMS44LTYuN2w0LjItMi45Yy0wLjctMS42LTEuNi0zLjEtMi42LTQuNSBMNzAsMzVjLTEuNC0xLjktMy4xLTMuNS00LjktNC45bDIuMi00LjZjLTEuNC0xLTIuOS0xLjktNC41LTIuNkw1OS44LDI3Yy0yLjEtMC45LTQuNC0xLjUtNi43LTEuOGwtMC40LTUuMUM1MS44LDIwLDUwLjksMjAsNTAsMjAgcy0xLjgsMC0yLjYsMC4xbC0wLjQsNS4xYy0yLjQsMC4zLTQuNiwwLjktNi43LDEuOGwtMi45LTQuMWMtMS42LDAuNy0zLjEsMS42LTQuNSwyLjZsMi4xLDQuNmMtMS45LDEuNC0zLjUsMy4xLTUsNC45bC00LjUtMi4xIGMtMSwxLjQtMS45LDIuOS0yLjYsNC41bDQuMSwyLjljLTAuOSwyLjEtMS41LDQuNC0xLjgsNi44bC01LDAuNEMyMCw0OC4yLDIwLDQ5LjEsMjAsNTBzMCwxLjgsMC4xLDIuNmw1LDAuNCBjMC4zLDIuNCwwLjksNC43LDEuOCw2LjhsLTQuMSwyLjljMC43LDEuNiwxLjYsMy4xLDIuNiw0LjVsNC41LTIuMWMxLjQsMS45LDMuMSwzLjUsNSw0LjlsLTIuMSw0LjZjMS40LDEsMi45LDEuOSw0LjUsMi42bDIuOS00LjEgYzIuMSwwLjksNC40LDEuNSw2LjcsMS44bDAuNCw1LjFDNDguMiw4MCw0OS4xLDgwLDUwLDgwczEuOCwwLDIuNi0wLjFsMC40LTUuMWMyLjMtMC4zLDQuNi0wLjksNi43LTEuOGwyLjksNC4yIGMxLjYtMC43LDMuMS0xLjYsNC41LTIuNkw2NSw2OS45YzEuOS0xLjQsMy41LTMsNC45LTQuOWw0LjYsMi4yYzEtMS40LDEuOS0yLjksMi42LTQuNUw3Myw1OS44YzAuOS0yLjEsMS41LTQuNCwxLjgtNi43TDc5LjksNTIuNiB6IE01MCw2NWMtOC4zLDAtMTUtNi43LTE1LTE1YzAtOC4zLDYuNy0xNSwxNS0xNXMxNSw2LjcsMTUsMTVDNjUsNTguMyw1OC4zLDY1LDUwLDY1elwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCA1MCA1MFwiLHRvOlwiOTAgNTAgNTBcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJHcmlkPXtuYW1lOlwiUVNwaW5uZXJHcmlkXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e2ZpbGw6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEwNSAxMDVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIxMi41XCIsY3k6XCIxMi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiMHNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjEyLjVcIixjeTpcIjUyLjVcIixyOlwiMTIuNVwiLFwiZmlsbC1vcGFjaXR5XCI6XCIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCIxMDBtc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiNTIuNVwiLGN5OlwiMTIuNVwiLHI6XCIxMi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjMwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI1Mi41XCIsY3k6XCI1Mi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiNjAwbXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjkyLjVcIixjeTpcIjEyLjVcIixyOlwiMTIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCI4MDBtc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiOTIuNVwiLGN5OlwiNTIuNVwiLHI6XCIxMi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjQwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIxMi41XCIsY3k6XCI5Mi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiNzAwbXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjUyLjVcIixjeTpcIjkyLjVcIixyOlwiMTIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCI1MDBtc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiOTIuNVwiLGN5OlwiOTIuNVwiLHI6XCIxMi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjIwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKX19LFFTcGlubmVySGVhcnRzPXtuYW1lOlwiUVNwaW5uZXJIZWFydHNcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7ZmlsbDpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTQwIDY0XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJwYXRoXCIse2F0dHJzOntkOlwiTTMwLjI2MiA1Ny4wMkw3LjE5NSA0MC43MjNjLTUuODQtMy45NzYtNy41Ni0xMi4wNi0zLjg0Mi0xOC4wNjMgMy43MTUtNiAxMS40NjctNy42NSAxNy4zMDYtMy42OGw0LjUyIDMuNzYgMi42LTUuMjc0YzMuNzE2LTYuMDAyIDExLjQ3LTcuNjUgMTcuMzA0LTMuNjggNS44NCAzLjk3IDcuNTYgMTIuMDU0IDMuODQyIDE4LjA2MkwzNC40OSA1Ni4xMThjLS44OTcgMS41MTItMi43OTMgMS45MTUtNC4yMjguOXpcIixcImZpbGwtb3BhY2l0eVwiOlwiLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiMHNcIixkdXI6XCIxLjRzXCIsdmFsdWVzOlwiMC41OzE7MC41XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTTEwNS41MTIgNTYuMTJsLTE0LjQ0LTI0LjI3MmMtMy43MTYtNi4wMDgtMS45OTYtMTQuMDkzIDMuODQzLTE4LjA2MiA1LjgzNS0zLjk3IDEzLjU4OC0yLjMyMiAxNy4zMDYgMy42OGwyLjYgNS4yNzQgNC41Mi0zLjc2YzUuODQtMy45NyAxMy41OTMtMi4zMiAxNy4zMDggMy42OCAzLjcxOCA2LjAwMyAxLjk5OCAxNC4wODgtMy44NDIgMTguMDY0TDEwOS43NCA1Ny4wMmMtMS40MzQgMS4wMTQtMy4zMy42MS00LjIyOC0uOXpcIixcImZpbGwtb3BhY2l0eVwiOlwiLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiMC43c1wiLGR1cjpcIjEuNHNcIix2YWx1ZXM6XCIwLjU7MTswLjVcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNNjcuNDA4IDU3LjgzNGwtMjMuMDEtMjQuOThjLTUuODY0LTYuMTUtNS44NjQtMTYuMTA4IDAtMjIuMjQ4IDUuODYtNi4xNCAxNS4zNy02LjE0IDIxLjIzNCAwTDcwIDE2LjE2OGw0LjM2OC01LjU2MmM1Ljg2My02LjE0IDE1LjM3NS02LjE0IDIxLjIzNSAwIDUuODYzIDYuMTQgNS44NjMgMTYuMDk4IDAgMjIuMjQ3bC0yMy4wMDcgMjQuOThjLTEuNDMgMS41NTYtMy43NTcgMS41NTYtNS4xODggMHpcIn19KV0pfX0sUVNwaW5uZXJIb3VyZ2xhc3M9e25hbWU6XCJRU3Bpbm5lckhvdXJnbGFzc1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIixbdChcInBhdGhcIix7c3RhdGljQ2xhc3M6XCJnbGFzc1wiLGF0dHJzOntmaWxsOlwibm9uZVwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlLXdpZHRoXCI6XCI1XCIsXCJzdHJva2UtbWl0ZXJsaW1pdFwiOlwiMTBcIixkOlwiTTU4LjQsNTEuN2MtMC45LTAuOS0xLjQtMi0xLjQtMi4zczAuNS0wLjQsMS40LTEuNCBDNzAuOCw0My44LDc5LjgsMzAuNSw4MCwxNS41SDcwSDMwSDIwYzAuMiwxNSw5LjIsMjguMSwyMS42LDMyLjNjMC45LDAuOSwxLjQsMS4yLDEuNCwxLjVzLTAuNSwxLjYtMS40LDIuNSBDMjkuMiw1Ni4xLDIwLjIsNjkuNSwyMCw4NS41aDEwaDQwaDEwQzc5LjgsNjkuNSw3MC44LDU1LjksNTguNCw1MS43elwifX0pLHQoXCJjbGlwUGF0aFwiLHthdHRyczp7aWQ6XCJ1aWwtaG91cmdsYXNzLWNsaXAxXCJ9fSxbdChcInJlY3RcIix7c3RhdGljQ2xhc3M6XCJjbGlwXCIsYXR0cnM6e3g6XCIxNVwiLHk6XCIyMFwiLHdpZHRoOlwiNzBcIixoZWlnaHQ6XCIyNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsZnJvbTpcIjI1XCIsdG86XCIwXCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIix2bGF1ZXM6XCIyNTswOzBcIixrZXlUaW1lczpcIjA7MC41OzFcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInlcIixmcm9tOlwiMjBcIix0bzpcIjQ1XCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIix2bGF1ZXM6XCIyMDs0NTs0NVwiLGtleVRpbWVzOlwiMDswLjU7MVwifX0pXSldKSx0KFwiY2xpcFBhdGhcIix7YXR0cnM6e2lkOlwidWlsLWhvdXJnbGFzcy1jbGlwMlwifX0sW3QoXCJyZWN0XCIse3N0YXRpY0NsYXNzOlwiY2xpcFwiLGF0dHJzOnt4OlwiMTVcIix5OlwiNTVcIix3aWR0aDpcIjcwXCIsaGVpZ2h0OlwiMjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGZyb206XCIwXCIsdG86XCIyNVwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsdmxhdWVzOlwiMDsyNTsyNVwiLGtleVRpbWVzOlwiMDswLjU7MVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwieVwiLGZyb206XCI4MFwiLHRvOlwiNTVcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLHZsYXVlczpcIjgwOzU1OzU1XCIsa2V5VGltZXM6XCIwOzAuNTsxXCJ9fSldKV0pLHQoXCJwYXRoXCIse3N0YXRpY0NsYXNzOlwic2FuZFwiLGF0dHJzOntkOlwiTTI5LDIzYzMuMSwxMS40LDExLjMsMTkuNSwyMSwxOS41UzY3LjksMzQuNCw3MSwyM0gyOXpcIixcImNsaXAtcGF0aFwiOlwidXJsKCN1aWwtaG91cmdsYXNzLWNsaXAxKVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19KSx0KFwicGF0aFwiLHtzdGF0aWNDbGFzczpcInNhbmRcIixhdHRyczp7ZDpcIk03MS42LDc4Yy0zLTExLjYtMTEuNS0yMC0yMS41LTIwcy0xOC41LDguNC0yMS41LDIwSDcxLjZ6XCIsXCJjbGlwLXBhdGhcIjpcInVybCgjdWlsLWhvdXJnbGFzcy1jbGlwMilcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9fSksdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgNTAgNTBcIix0bzpcIjE4MCA1MCA1MFwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMCA1MCA1MDswIDUwIDUwOzE4MCA1MCA1MFwiLGtleVRpbWVzOlwiMDswLjc7MVwifX0pXSldKX19LFFTcGlubmVySW5maW5pdHk9e25hbWU6XCJRU3Bpbm5lckluZmluaXR5XCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwifX0sW3QoXCJwYXRoXCIse2F0dHJzOntkOlwiTTI0LjMsMzBDMTEuNCwzMCw1LDQzLjMsNSw1MHM2LjQsMjAsMTkuMywyMGMxOS4zLDAsMzIuMS00MCw1MS40LTQwQzg4LjYsMzAsOTUsNDMuMyw5NSw1MHMtNi40LDIwLTE5LjMsMjBDNTYuNCw3MCw0My42LDMwLDI0LjMsMzB6XCIsZmlsbDpcIm5vbmVcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZS13aWR0aFwiOlwiOFwiLFwic3Ryb2tlLWRhc2hhcnJheVwiOlwiMTAuNjkxMjA1MzQyNjEwNjc4IDEwLjY5MTIwNTM0MjYxMDY3OFwiLFwic3Ryb2tlLWRhc2hvZmZzZXRcIjpcIjBcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1kYXNob2Zmc2V0XCIsZnJvbTpcIjBcIix0bzpcIjIxLjM4MjQxMDY4NTIyMTM1NVwiLGJlZ2luOlwiMFwiLGR1cjpcIjJzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsZmlsbDpcImZyZWV6ZVwifX0pXSldKX19LFFTcGlubmVyX2lvcz17bmFtZTpcIlFTcGlubmVySW9zXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIix2aWV3Qm94OlwiMCAwIDY0IDY0XCJ9fSxbdChcImdcIix7YXR0cnM6e1wic3Ryb2tlLXdpZHRoXCI6XCI0XCIsXCJzdHJva2UtbGluZWNhcFwiOlwicm91bmRcIn19LFt0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgxODApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiMTsuODU7Ljc7LjY1Oy41NTsuNDU7LjM1Oy4yNTsuMTU7LjE7MDsxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgyMTApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiMDsxOy44NTsuNzsuNjU7LjU1Oy40NTsuMzU7LjI1Oy4xNTsuMTswXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgyNDApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjE7MDsxOy44NTsuNzsuNjU7LjU1Oy40NTsuMzU7LjI1Oy4xNTsuMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoMjcwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIi4xNTsuMTswOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1XCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgzMDApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjI1Oy4xNTsuMTswOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjVcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDMzMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuMzU7LjI1Oy4xNTsuMTswOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuNDU7LjM1Oy4yNTsuMTU7LjE7MDsxOy44NTsuNzsuNjU7LjU1Oy40NVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoMzApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjU1Oy40NTsuMzU7LjI1Oy4xNTsuMTswOzE7Ljg1Oy43Oy42NTsuNTVcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDYwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIi42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzA7MTsuODU7Ljc7LjY1XCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSg5MClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuNzsuNjU7LjU1Oy40NTsuMzU7LjI1Oy4xNTsuMTswOzE7Ljg1Oy43XCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgxMjApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzA7MTsuODVcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDE1MClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIxOy44NTsuNzsuNjU7LjU1Oy40NTsuMzU7LjI1Oy4xNTsuMTswOzFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSldKX19LFFTcGlubmVyT3ZhbD17bmFtZTpcIlFTcGlubmVyT3ZhbFwiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntzdHJva2U6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDM4IDM4XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMSAxKVwiLFwic3Ryb2tlLXdpZHRoXCI6XCIyXCIsZmlsbDpcIm5vbmVcIixcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwifX0sW3QoXCJjaXJjbGVcIix7YXR0cnM6e1wic3Ryb2tlLW9wYWNpdHlcIjpcIi41XCIsY3g6XCIxOFwiLGN5OlwiMThcIixyOlwiMThcIn19KSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0zNiAxOGMwLTkuOTQtOC4wNi0xOC0xOC0xOFwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDE4IDE4XCIsdG86XCIzNjAgMTggMThcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJQaWU9e25hbWU6XCJRU3Bpbm5lclBpZVwiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMCA1MEE1MCA1MCAwIDAgMSA1MCAwTDUwIDUwTDAgNTBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuNVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDUwIDUwXCIsdG86XCIzNjAgNTAgNTBcIixkdXI6XCIwLjhzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk01MCAwQTUwIDUwIDAgMCAxIDEwMCA1MEw1MCA1MEw1MCAwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLG9wYWNpdHk6XCIwLjVcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCA1MCA1MFwiLHRvOlwiMzYwIDUwIDUwXCIsZHVyOlwiMS42c1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMTAwIDUwQTUwIDUwIDAgMCAxIDUwIDEwMEw1MCA1MEwxMDAgNTBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuNVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDUwIDUwXCIsdG86XCIzNjAgNTAgNTBcIixkdXI6XCIyLjRzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk01MCAxMDBBNTAgNTAgMCAwIDEgMCA1MEw1MCA1MEw1MCAxMDBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuNVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDUwIDUwXCIsdG86XCIzNjAgNTAgNTBcIixkdXI6XCIzLjJzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pfX0sUVNwaW5uZXJQdWZmPXtuYW1lOlwiUVNwaW5uZXJQdWZmXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3N0cm9rZTpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgNDQgNDRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIix7YXR0cnM6e2ZpbGw6XCJub25lXCIsXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixcInN0cm9rZS13aWR0aFwiOlwiMlwifX0sW3QoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMjJcIixjeTpcIjIyXCIscjpcIjFcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInJcIixiZWdpbjpcIjBzXCIsZHVyOlwiMS44c1wiLHZhbHVlczpcIjE7IDIwXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlUaW1lczpcIjA7IDFcIixrZXlTcGxpbmVzOlwiMC4xNjUsIDAuODQsIDAuNDQsIDFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjEuOHNcIix2YWx1ZXM6XCIxOyAwXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlUaW1lczpcIjA7IDFcIixrZXlTcGxpbmVzOlwiMC4zLCAwLjYxLCAwLjM1NSwgMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIyMlwiLGN5OlwiMjJcIixyOlwiMVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGJlZ2luOlwiLTAuOXNcIixkdXI6XCIxLjhzXCIsdmFsdWVzOlwiMTsgMjBcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVRpbWVzOlwiMDsgMVwiLGtleVNwbGluZXM6XCIwLjE2NSwgMC44NCwgMC40NCwgMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixiZWdpbjpcIi0wLjlzXCIsZHVyOlwiMS44c1wiLHZhbHVlczpcIjE7IDBcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVRpbWVzOlwiMDsgMVwiLGtleVNwbGluZXM6XCIwLjMsIDAuNjEsIDAuMzU1LCAxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pXSl9fSxRU3Bpbm5lclJhZGlvPXtuYW1lOlwiUVNwaW5uZXJSYWRpb1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInNjYWxlKDAuNTUpXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIzMFwiLGN5OlwiMTUwXCIscjpcIjMwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwiLGZyb206XCIwXCIsdG86XCIxXCIsZHVyOlwiMXNcIixiZWdpbjpcIjBcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixrZXlUaW1lczpcIjA7MC41OzFcIix2YWx1ZXM6XCIwOzE7MVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNOTAsMTUwaDMwYzAtNDkuNy00MC4zLTkwLTkwLTkwdjMwQzYzLjEsOTAsOTAsMTE2LjksOTAsMTUwelwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcIm9wYWNpdHlcIixmcm9tOlwiMFwiLHRvOlwiMVwiLGR1cjpcIjFzXCIsYmVnaW46XCIwLjFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixrZXlUaW1lczpcIjA7MC41OzFcIix2YWx1ZXM6XCIwOzE7MVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMTUwLDE1MGgzMEMxODAsNjcuMiwxMTIuOCwwLDMwLDB2MzBDOTYuMywzMCwxNTAsODMuNywxNTAsMTUwelwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcIm9wYWNpdHlcIixmcm9tOlwiMFwiLHRvOlwiMVwiLGR1cjpcIjFzXCIsYmVnaW46XCIwLjJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixrZXlUaW1lczpcIjA7MC41OzFcIix2YWx1ZXM6XCIwOzE7MVwifX0pXSldKV0pfX0sUVNwaW5uZXJSaW5ncz17bmFtZTpcIlFTcGlubmVyUmluZ3NcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7c3Ryb2tlOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCA0NSA0NVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZ1wiLHthdHRyczp7ZmlsbDpcIm5vbmVcIixcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgxIDEpXCIsXCJzdHJva2Utd2lkdGhcIjpcIjJcIn19LFt0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjIyXCIsY3k6XCIyMlwiLHI6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJyXCIsYmVnaW46XCIxLjVzXCIsZHVyOlwiM3NcIix2YWx1ZXM6XCI2OzIyXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsYmVnaW46XCIxLjVzXCIsZHVyOlwiM3NcIix2YWx1ZXM6XCIxOzBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLXdpZHRoXCIsYmVnaW46XCIxLjVzXCIsZHVyOlwiM3NcIix2YWx1ZXM6XCIyOzBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIyMlwiLGN5OlwiMjJcIixyOlwiNlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGJlZ2luOlwiM3NcIixkdXI6XCIzc1wiLHZhbHVlczpcIjY7MjJcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixiZWdpbjpcIjNzXCIsZHVyOlwiM3NcIix2YWx1ZXM6XCIxOzBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLXdpZHRoXCIsYmVnaW46XCIzc1wiLGR1cjpcIjNzXCIsdmFsdWVzOlwiMjswXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMjJcIixjeTpcIjIyXCIscjpcIjhcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInJcIixiZWdpbjpcIjBzXCIsZHVyOlwiMS41c1wiLHZhbHVlczpcIjY7MTsyOzM7NDs1OzZcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJUYWlsPXtuYW1lOlwiUVNwaW5uZXJUYWlsXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMzggMzhcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImRlZnNcIixbdChcImxpbmVhckdyYWRpZW50XCIse2F0dHJzOnt4MTpcIjguMDQyJVwiLHkxOlwiMCVcIix4MjpcIjY1LjY4MiVcIix5MjpcIjIzLjg2NSVcIixpZDpcImFcIn19LFt0KFwic3RvcFwiLHthdHRyczp7XCJzdG9wLWNvbG9yXCI6XCJjdXJyZW50Q29sb3JcIixcInN0b3Atb3BhY2l0eVwiOlwiMFwiLG9mZnNldDpcIjAlXCJ9fSksdChcInN0b3BcIix7YXR0cnM6e1wic3RvcC1jb2xvclwiOlwiY3VycmVudENvbG9yXCIsXCJzdG9wLW9wYWNpdHlcIjpcIi42MzFcIixvZmZzZXQ6XCI2My4xNDYlXCJ9fSksdChcInN0b3BcIix7YXR0cnM6e1wic3RvcC1jb2xvclwiOlwiY3VycmVudENvbG9yXCIsb2Zmc2V0OlwiMTAwJVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDEgMSlcIixmaWxsOlwibm9uZVwiLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMzYgMThjMC05Ljk0LTguMDYtMTgtMTgtMThcIixzdHJva2U6XCJ1cmwoI2EpXCIsXCJzdHJva2Utd2lkdGhcIjpcIjJcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCAxOCAxOFwiLHRvOlwiMzYwIDE4IDE4XCIsZHVyOlwiMC45c1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGN4OlwiMzZcIixjeTpcIjE4XCIscjpcIjFcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCAxOCAxOFwiLHRvOlwiMzYwIDE4IDE4XCIsZHVyOlwiMC45c1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sU3RlcFRhYj17bmFtZTpcIlFTdGVwVGFiXCIsZGlyZWN0aXZlczp7UmlwcGxlOlJpcHBsZX0scHJvcHM6W1widm1cIl0sY29tcHV0ZWQ6e2hhc05hdmlnYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy52bS5fX3N0ZXBwZXIubm9IZWFkZXJOYXZpZ2F0aW9ufSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJue1wic3RlcC1lcnJvclwiOnRoaXMudm0uZXJyb3IsXCJzdGVwLWFjdGl2ZVwiOnRoaXMudm0uYWN0aXZlLFwic3RlcC1kb25lXCI6dGhpcy52bS5kb25lLFwic3RlcC1uYXZpZ2F0aW9uXCI6dGhpcy52bS5kb25lJiZ0aGlzLmhhc05hdmlnYXRpb24sXCJzdGVwLXdhaXRpbmdcIjp0aGlzLnZtLndhaXRpbmcsXCJzdGVwLWRpc2FibGVkXCI6dGhpcy52bS5kaXNhYmxlLFwic3RlcC1jb2xvcmVkXCI6dGhpcy52bS5hY3RpdmV8fHRoaXMudm0uZG9uZSxcIml0ZW1zLWNlbnRlclwiOiF0aGlzLnZtLl9fc3RlcHBlci52ZXJ0aWNhbCxcIml0ZW1zLXN0YXJ0XCI6dGhpcy52bS5fX3N0ZXBwZXIudmVydGljYWwsXCJxLXN0ZXBwZXItZmlyc3RcIjp0aGlzLnZtLmZpcnN0LFwicS1zdGVwcGVyLWxhc3RcIjp0aGlzLnZtLmxhc3R9fX0sbWV0aG9kczp7X19zZWxlY3Q6ZnVuY3Rpb24oKXt0aGlzLmhhc05hdmlnYXRpb24mJnRoaXMudm0uc2VsZWN0KCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy52bS5zdGVwSWNvbj90KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLnZtLnN0ZXBJY29ufX0pOnQoXCJzcGFuXCIsW3RoaXMudm0uaW5uZXJPcmRlcisxXSk7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXN0ZXBwZXItdGFiIGNvbC1ncm93IGZsZXggbm8td3JhcCByZWxhdGl2ZS1wb3NpdGlvblwiLGNsYXNzOnRoaXMuY2xhc3Nlcyxvbjp7Y2xpY2s6dGhpcy5fX3NlbGVjdH0sZGlyZWN0aXZlczp0aGlzLmhhc05hdmlnYXRpb24/W3tuYW1lOlwicmlwcGxlXCIsdmFsdWU6dGhpcy52bS5kb25lfV06bnVsbH0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXN0ZXBwZXItZG90IHJvdyBmbGV4LWNlbnRlciBxLXN0ZXBwZXItbGluZSByZWxhdGl2ZS1wb3NpdGlvblwifSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJyb3cgZmxleC1jZW50ZXJcIn0sW2VdKV0pLHRoaXMudm0udGl0bGU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1sYWJlbCBxLXN0ZXBwZXItbGluZSByZWxhdGl2ZS1wb3NpdGlvblwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci10aXRsZVwifSxbdGhpcy52bS50aXRsZV0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXN0ZXBwZXItc3VidGl0bGVcIn0sW3RoaXMudm0uc3VidGl0bGVdKV0pOm51bGxdKX19LFFTdGVwPXtuYW1lOlwiUVN0ZXBcIixpbmplY3Q6e19fc3RlcHBlcjp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRU3RlcCBuZWVkcyB0byBiZSBjaGlsZCBvZiBRU3RlcHBlclwiKX19fSxwcm9wczp7bmFtZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiB1aWQoKX19LGRlZmF1bHQ6Qm9vbGVhbix0aXRsZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHN1YnRpdGxlOlN0cmluZyxpY29uOlN0cmluZyxvcmRlcjpbTnVtYmVyLFN0cmluZ10sZXJyb3I6Qm9vbGVhbixhY3RpdmVJY29uOlN0cmluZyxlcnJvckljb246U3RyaW5nLGRvbmVJY29uOlN0cmluZyxkaXNhYmxlOkJvb2xlYW59LHdhdGNoOntvcmRlcjpmdW5jdGlvbigpe3RoaXMuX19zdGVwcGVyLl9fc29ydFN0ZXBzKCl9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2lubmVyT3JkZXI6MCxmaXJzdDohMSxsYXN0OiExfX0sY29tcHV0ZWQ6e3N0ZXBJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3N0ZXBwZXI7cmV0dXJuIHRoaXMuYWN0aXZlP3RoaXMuYWN0aXZlSWNvbnx8dC5hY3RpdmVJY29ufHx0aGlzLiRxLmljb24uc3RlcHBlci5hY3RpdmU6dGhpcy5lcnJvcj90aGlzLmVycm9ySWNvbnx8dC5lcnJvckljb258fHRoaXMuJHEuaWNvbi5zdGVwcGVyLmVycm9yOnRoaXMuZG9uZSYmIXRoaXMuZGlzYWJsZT90aGlzLmRvbmVJY29ufHx0LmRvbmVJY29ufHx0aGlzLiRxLmljb24uc3RlcHBlci5kb25lOnRoaXMuaWNvbn0sYWN0dWFsT3JkZXI6ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VJbnQodGhpcy5vcmRlcnx8dGhpcy5pbm5lck9yZGVyLDEwKX0sYWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zdGVwcGVyLnN0ZXA9PT10aGlzLm5hbWV9LGRvbmU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiZ0aGlzLl9fc3RlcHBlci5jdXJyZW50T3JkZXI+dGhpcy5pbm5lck9yZGVyfSx3YWl0aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZGlzYWJsZSYmdGhpcy5fX3N0ZXBwZXIuY3VycmVudE9yZGVyPHRoaXMuaW5uZXJPcmRlcn0sc3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmFjdHVhbE9yZGVyO3JldHVybntcIi13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXBcIjp0LFwiLW1zLWZsZXgtb3JkZXJcIjp0LG9yZGVyOnR9fSxjbGFzc2VzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zdGVwcGVyLnZlcnRpY2FsKXt2YXIgdD1bXTtyZXR1cm4hdGhpcy5hY3RpdmUmJnQucHVzaChcImhpZGRlblwiKSxudWxsIT09dGhpcy5fX3N0ZXBwZXIuYW5pbWF0aW9uJiZ0LnB1c2godGhpcy5fX3N0ZXBwZXIuYW5pbWF0aW9uKSx0fX19LG1ldGhvZHM6e3NlbGVjdDpmdW5jdGlvbigpe3RoaXMuZG9uZSYmdGhpcy5fX3N0ZXBwZXIuZ29Ub1N0ZXAodGhpcy5uYW1lKX0sX19nZXRDb250YWluZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hY3RpdmU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1zdGVwLWNvbnRlbnRcIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLXN0ZXAtaW5uZXJcIn0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKTpudWxsO3JldHVybiB0aGlzLl9fc3RlcHBlci52ZXJ0aWNhbD90KFFTbGlkZVRyYW5zaXRpb24sW2VdKTplfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuX19zdGVwcGVyLl9fcmVnaXN0ZXJTdGVwKHRoaXMpLHRoaXMuZGVmYXVsdCYmdGhpcy5zZWxlY3QoKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX19zdGVwcGVyLl9fdW5yZWdpc3RlclN0ZXAodGhpcyl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1zdGVwXCIsc3R5bGU6dGhpcy5zdHlsZX0sW3RoaXMuX19zdGVwcGVyLnZlcnRpY2FsP3QoU3RlcFRhYix7cHJvcHM6e3ZtOnRoaXN9fSk6bnVsbCx0aGlzLl9fZ2V0Q29udGFpbmVyKHQpXSl9fSxRU3RlcHBlcj17bmFtZTpcIlFTdGVwcGVyXCIscHJvcHM6e3ZhbHVlOltOdW1iZXIsU3RyaW5nXSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdmVydGljYWw6Qm9vbGVhbixhbHRlcm5hdGl2ZUxhYmVsczpCb29sZWFuLG5vSGVhZGVyTmF2aWdhdGlvbjpCb29sZWFuLGNvbnRyYWN0YWJsZTpCb29sZWFuLGRvbmVJY29uOkJvb2xlYW4sYWN0aXZlSWNvbjpCb29sZWFuLGVycm9ySWNvbjpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2FuaW1hdGlvbjpudWxsLHN0ZXA6dGhpcy52YWx1ZXx8bnVsbCxzdGVwczpbXX19LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57X19zdGVwcGVyOnRoaXN9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5nb1RvU3RlcCh0KX0sc3RlcDpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnZlcnRpY2FsKXt2YXIgaT10aGlzLnN0ZXBzLmZpbmRJbmRleChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dH0pLHM9dGhpcy5zdGVwcy5maW5kSW5kZXgoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZT09PWV9KTt0aGlzLmFuaW1hdGlvbj1pPHM/XCJhbmltYXRlLWZhZGUtbGVmdFwiOmk+cz9cImFuaW1hdGUtZmFkZS1yaWdodFwiOm51bGx9fX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXCJxLXN0ZXBwZXItXCIrKHRoaXMudmVydGljYWw/XCJ2ZXJ0aWNhbFwiOlwiaG9yaXpvbnRhbFwiKSxcInRleHQtXCIrdGhpcy5jb2xvcl07cmV0dXJuIHRoaXMuY29udHJhY3RhYmxlJiZ0LnB1c2goXCJxLXN0ZXBwZXItY29udHJhY3RhYmxlXCIpLHR9LGhhc1N0ZXBzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RlcHMubGVuZ3RoPjB9LGN1cnJlbnRTdGVwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLmhhc1N0ZXBzKXJldHVybiB0aGlzLnN0ZXBzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09PXQuc3RlcH0pfSxjdXJyZW50T3JkZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnJlbnRTdGVwKXJldHVybiB0aGlzLmN1cnJlbnRTdGVwLmlubmVyT3JkZXJ9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0ZXBzLmxlbmd0aH19LG1ldGhvZHM6e2dvVG9TdGVwOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5zdGVwIT09dCYmdm9pZCAwIT09dCYmKHRoaXMuc3RlcD10LHRoaXMuJGVtaXQoXCJpbnB1dFwiLHQpLHRoaXMuJGVtaXQoXCJzdGVwXCIsdCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsdCl9KSl9LG5leHQ6ZnVuY3Rpb24oKXt0aGlzLl9fZ28oMSl9LHByZXZpb3VzOmZ1bmN0aW9uKCl7dGhpcy5fX2dvKC0xKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmhhc1N0ZXBzJiZ0aGlzLmdvVG9TdGVwKHRoaXMuc3RlcHNbMF0ubmFtZSl9LF9fZ286ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLmN1cnJlbnRPcmRlcjtpZih2b2lkIDA9PT1pKXtpZighdGhpcy5oYXNTdGVwcylyZXR1cm47ZT10aGlzLnN0ZXBzWzBdLm5hbWV9ZWxzZXtkb3tpKz10fXdoaWxlKGk+PTAmJmk8dGhpcy5sZW5ndGgtMSYmdGhpcy5zdGVwc1tpXS5kaXNhYmxlKTtpZihpPDB8fGk+dGhpcy5sZW5ndGgtMXx8dGhpcy5zdGVwc1tpXS5kaXNhYmxlKXJldHVybjtlPXRoaXMuc3RlcHNbaV0ubmFtZX10aGlzLmdvVG9TdGVwKGUpfSxfX3NvcnRTdGVwczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5zdGVwcy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYWN0dWFsT3JkZXItZS5hY3R1YWxPcmRlcn0pO3ZhciBlPXRoaXMuc3RlcHMubGVuZ3RoLTE7dGhpcy5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7dC5pbm5lck9yZGVyPWksdC5maXJzdD0wPT09aSx0Lmxhc3Q9aT09PWV9KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3Quc3RlcHMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5hY3RpdmV9KXx8dC5nb1RvU3RlcCh0LnN0ZXBzWzBdLm5hbWUpfSl9LF9fcmVnaXN0ZXJTdGVwOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0ZXBzLnB1c2godCksdGhpcy5fX3NvcnRTdGVwcygpLHRoaXN9LF9fdW5yZWdpc3RlclN0ZXA6ZnVuY3Rpb24odCl7dGhpcy5zdGVwcz10aGlzLnN0ZXBzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fc29ydFN0ZXBzPWZyYW1lRGVib3VuY2UodGhpcy5fX3NvcnRTdGVwcyl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlciBjb2x1bW4gb3ZlcmZsb3ctaGlkZGVuIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbdGhpcy52ZXJ0aWNhbD9udWxsOnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXN0ZXBwZXItaGVhZGVyIHJvdyBpdGVtcy1zdHJldGNoIGp1c3RpZnktYmV0d2VlbiBzaGFkb3ctMVwiLGNsYXNzOntcImFsdGVybmF0aXZlLWxhYmVsc1wiOnRoaXMuYWx0ZXJuYXRpdmVMYWJlbHN9fSx0aGlzLnN0ZXBzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdChTdGVwVGFiLHtrZXk6ZS5uYW1lLHByb3BzOnt2bTplfX0pfSkpLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX19LFFTdGVwcGVyTmF2aWdhdGlvbj17bmFtZTpcIlFTdGVwcGVyTmF2aWdhdGlvblwiLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1uYXYgb3JkZXItbGFzdCByb3cgaXRlbXMtY2VudGVyXCJ9LFt0aGlzLiRzbG90cy5sZWZ0LHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2xcIn0pLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX19LFRhYk1peGluPXtkaXJlY3RpdmVzOntSaXBwbGU6UmlwcGxlfSxwcm9wczp7bGFiZWw6U3RyaW5nLGljb246U3RyaW5nLGRpc2FibGU6Qm9vbGVhbixoaWRkZW46Qm9vbGVhbixoaWRlOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiXCJ9LG5hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdWlkKCl9fSxhbGVydDpCb29sZWFuLGNvdW50OltOdW1iZXIsU3RyaW5nXSxjb2xvcjpTdHJpbmcsdGFiaW5kZXg6TnVtYmVyfSxpbmplY3Q6e2RhdGE6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUVRhYi9RUm91dGVUYWIgY29tcG9uZW50cyBuZWVkIHRvIGJlIGNoaWxkIG9mIFFUYWJzXCIpfX0sc2VsZWN0VGFiOnt9fSx3YXRjaDp7YWN0aXZlOmZ1bmN0aW9uKHQpe3QmJnRoaXMuJGVtaXQoXCJzZWxlY3RcIix0aGlzLm5hbWUpfX0sY29tcHV0ZWQ6e2FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEudGFiTmFtZT09PXRoaXMubmFtZX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PXthY3RpdmU6dGhpcy5hY3RpdmUsaGlkZGVuOnRoaXMuaGlkZGVuLGRpc2FibGVkOnRoaXMuZGlzYWJsZSxcInEtdGFiLWZ1bGxcIjp0aGlzLmljb24mJnRoaXMubGFiZWwsXCJxLXRhYi1vbmx5LWxhYmVsXCI6IXRoaXMuaWNvbiYmdGhpcy5sYWJlbCxcImhpZGUtbm9uZVwiOiF0aGlzLmhpZGUsXCJoaWRlLWljb25cIjpcImljb25cIj09PXRoaXMuaGlkZSxcImhpZGUtbGFiZWxcIjpcImxhYmVsXCI9PT10aGlzLmhpZGV9LGU9dGhpcy5kYXRhLmludmVydGVkP3RoaXMuY29sb3J8fHRoaXMuZGF0YS50ZXh0Q29sb3J8fHRoaXMuZGF0YS5jb2xvcjp0aGlzLmNvbG9yO3JldHVybiBlJiYodFtcInRleHQtXCIrZV09ITApLHR9LGJhclN0eWxlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZlfHwhdGhpcy5kYXRhLmhpZ2hsaWdodClyZXR1cm5cImRpc3BsYXk6IG5vbmU7XCJ9LGNvbXB1dGVkVGFiSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlfHx0aGlzLmFjdGl2ZT8tMTp0aGlzLnRhYmluZGV4fHwwfX0sbWV0aG9kczp7X19nZXRUYWJNZXRhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvdW50P1t0KFFDaGlwLHtzdGF0aWNDbGFzczpcInEtdGFiLW1ldGFcIixwcm9wczp7ZmxvYXRpbmc6ITB9fSxbdGhpcy5jb3VudF0pXTp0aGlzLmFsZXJ0P1t0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItbWV0YSBxLWRvdFwifSldOnZvaWQgMH0sX19nZXRUYWJDb250ZW50OmZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB0aGlzLmljb24mJmUucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItaWNvbi1wYXJlbnQgcmVsYXRpdmUtcG9zaXRpb25cIn0sW3QoUUljb24se3N0YXRpY0NsYXNzOlwicS10YWItaWNvblwiLHByb3BzOntuYW1lOnRoaXMuaWNvbn19KSx0aGlzLl9fZ2V0VGFiTWV0YSh0KV0pKSx0aGlzLmxhYmVsJiZlLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFiLWxhYmVsLXBhcmVudCByZWxhdGl2ZS1wb3NpdGlvblwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFiLWxhYmVsXCJ9LFt0aGlzLmxhYmVsXSksdGhpcy5fX2dldFRhYk1ldGEodCldKSksKGU9ZS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCkpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFicy1iYXJcIixzdHlsZTp0aGlzLmJhclN0eWxlLGNsYXNzOnRoaXMuZGF0YS51bmRlcmxpbmVDbGFzc30pKSxlLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFiLWZvY3VzLWhlbHBlciBhYnNvbHV0ZS1mdWxsXCIsYXR0cnM6e3RhYmluZGV4OnRoaXMuY29tcHV0ZWRUYWJJbmRleH19KSksZX19fSxRUm91dGVUYWI9e25hbWU6XCJRUm91dGVUYWJcIixtaXhpbnM6W1RhYk1peGluLFJvdXRlckxpbmtNaXhpbl0saW5qZWN0OntzZWxlY3RUYWJSb3V0ZXI6e319LHdhdGNoOnskcm91dGU6ZnVuY3Rpb24oKXt0aGlzLmNoZWNrSWZTZWxlY3RlZCgpfX0sbWV0aG9kczp7c2VsZWN0OmZ1bmN0aW9uKCl7dGhpcy4kZW1pdChcImNsaWNrXCIsdGhpcy5uYW1lKSx0aGlzLmRpc2FibGV8fCh0aGlzLiRlbC5kaXNwYXRjaEV2ZW50KGV2dCksdGhpcy5zZWxlY3RUYWJSb3V0ZXIoe3ZhbHVlOnRoaXMubmFtZSxzZWxlY3RlZDohMH0pKX0sY2hlY2tJZlNlbGVjdGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2lmKHQuJGVsLmNsYXNzTGlzdC5jb250YWlucyhcInEtcm91dGVyLWxpbmstZXhhY3QtYWN0aXZlXCIpKXQuc2VsZWN0VGFiUm91dGVyKHt2YWx1ZTp0Lm5hbWUsc2VsZWN0YWJsZTohMCxleGFjdDohMH0pO2Vsc2UgaWYodC4kZWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1yb3V0ZXItbGluay1hY3RpdmVcIikpe3ZhciBlPXQuJHJvdXRlci5yZXNvbHZlKHQudG8sdm9pZCAwLHQuYXBwZW5kKTt0LnNlbGVjdFRhYlJvdXRlcih7dmFsdWU6dC5uYW1lLHNlbGVjdGFibGU6ITAscHJpb3JpdHk6ZS5ocmVmLmxlbmd0aH0pfWVsc2UgdC5hY3RpdmUmJnQuc2VsZWN0VGFiUm91dGVyKHt2YWx1ZTpudWxsfSl9KX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNoZWNrSWZTZWxlY3RlZCgpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcInJvdXRlci1saW5rXCIse3Byb3BzOnt0YWc6XCJhXCIsdG86dGhpcy50byxleGFjdDp0aGlzLmV4YWN0LGFwcGVuZDp0aGlzLmFwcGVuZCxyZXBsYWNlOnRoaXMucmVwbGFjZSxldmVudDpyb3V0ZXJMaW5rRXZlbnROYW1lLGFjdGl2ZUNsYXNzOlwicS1yb3V0ZXItbGluay1hY3RpdmVcIixleGFjdEFjdGl2ZUNsYXNzOlwicS1yb3V0ZXItbGluay1leGFjdC1hY3RpdmVcIn0sYXR0cnM6e3RhYmluZGV4Oi0xfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5zZWxlY3Qsa2V5dXA6ZnVuY3Rpb24odCl7cmV0dXJuIDEzPT09dC5rZXlDb2RlJiZlLnNlbGVjdCh0KX19LHN0YXRpY0NsYXNzOlwicS1saW5rIHEtdGFiIGNvbHVtbiBmbGV4LWNlbnRlciByZWxhdGl2ZS1wb3NpdGlvblwiLGNsYXNzOnRoaXMuY2xhc3NlcyxkaXJlY3RpdmVzOlt7bmFtZTpcInJpcHBsZVwifV19LHRoaXMuX19nZXRUYWJDb250ZW50KHQpKX19LFFUYWI9e25hbWU6XCJRVGFiXCIsbWl4aW5zOltUYWJNaXhpbl0scHJvcHM6e2RlZmF1bHQ6Qm9vbGVhbn0sbWV0aG9kczp7c2VsZWN0OmZ1bmN0aW9uKCl7dGhpcy4kZW1pdChcImNsaWNrXCIsdGhpcy5uYW1lKSx0aGlzLmRpc2FibGV8fHRoaXMuc2VsZWN0VGFiKHRoaXMubmFtZSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0JiYhdGhpcy5kaXNhYmxlJiZ0aGlzLnNlbGVjdCgpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFiIGNvbHVtbiBmbGV4LWNlbnRlciByZWxhdGl2ZS1wb3NpdGlvblwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7XCJkYXRhLXRhYi1uYW1lXCI6dGhpcy5uYW1lfSxvbjp7Y2xpY2s6dGhpcy5zZWxlY3Qsa2V5dXA6ZnVuY3Rpb24odCl7cmV0dXJuIDEzPT09dC5rZXlDb2RlJiZlLnNlbGVjdCh0KX19LGRpcmVjdGl2ZXM6W3tuYW1lOlwicmlwcGxlXCJ9XX0sdGhpcy5fX2dldFRhYkNvbnRlbnQodCkpfX0sUVRhYlBhbmU9e25hbWU6XCJRVGFiUGFuZVwiLGluamVjdDp7ZGF0YTp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRVGFiUGFuZSBuZWVkcyB0byBiZSBjaGlsZCBvZiBRVGFic1wiKX19fSxwcm9wczp7bmFtZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGtlZXBBbGl2ZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Nob3duOiExfX0sY29tcHV0ZWQ6e2FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEudGFiTmFtZT09PXRoaXMubmFtZX0sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybntoaWRkZW46IXRoaXMuYWN0aXZlLFwiYW5pbWF0ZS1mYWRlLWxlZnRcIjpcImxlZnRcIj09PXRoaXMuZGF0YS5kaXJlY3Rpb24sXCJhbmltYXRlLWZhZGUtcmlnaHRcIjpcInJpZ2h0XCI9PT10aGlzLmRhdGEuZGlyZWN0aW9ufX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItcGFuZVwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCk7aWYodGhpcy5rZWVwQWxpdmUpe2lmKCF0aGlzLnNob3duJiYhdGhpcy5hY3RpdmUpcmV0dXJuO3JldHVybiB0aGlzLnNob3duPSEwLGV9aWYodGhpcy5zaG93bj10aGlzLmFjdGl2ZSx0aGlzLmFjdGl2ZSlyZXR1cm4gZX19LHNjcm9sbE5hdmlnYXRpb25TcGVlZD01LGRlYm91bmNlRGVsYXk9NTA7ZnVuY3Rpb24gZ2V0VW5kZXJsaW5lQ2xhc3ModCl7aWYodClyZXR1cm5cInRleHQtXCIrdH12YXIgUVRhYnM9e25hbWU6XCJRVGFic1wiLHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57ZGF0YTp0aGlzLmRhdGEsc2VsZWN0VGFiOnRoaXMuc2VsZWN0VGFiLHNlbGVjdFRhYlJvdXRlcjp0aGlzLnNlbGVjdFRhYlJvdXRlcn19LGRpcmVjdGl2ZXM6e1RvdWNoU3dpcGU6VG91Y2hTd2lwZX0scHJvcHM6e3ZhbHVlOlN0cmluZyxhbGlnbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImxlZnRcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiLFwianVzdGlmeVwiXS5pbmNsdWRlcyh0KX19LHBvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwidG9wXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInRvcFwiLFwiYm90dG9tXCJdLmluY2x1ZGVzKHQpfX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHRleHRDb2xvcjpTdHJpbmcsaW52ZXJ0ZWQ6Qm9vbGVhbix0d29MaW5lczpCb29sZWFuLGdsb3NzeTpCb29sZWFuLGFuaW1hdGVkOkJvb2xlYW4sc3dpcGVhYmxlOkJvb2xlYW4scGFuZXNDb250YWluZXJDbGFzczpTdHJpbmcsdW5kZXJsaW5lQ29sb3I6U3RyaW5nfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnRFbDpudWxsLHBvc2Jhcjp7d2lkdGg6MCxsZWZ0OjB9LGRhdGE6e2hpZ2hsaWdodDohMCx0YWJOYW1lOnRoaXMudmFsdWV8fFwiXCIsY29sb3I6dGhpcy5jb2xvcix0ZXh0Q29sb3I6dGhpcy50ZXh0Q29sb3IsaW52ZXJ0ZWQ6dGhpcy5pbnZlcnRlZCx1bmRlcmxpbmVDbGFzczpnZXRVbmRlcmxpbmVDbGFzcyh0aGlzLnVuZGVybGluZUNvbG9yKSxkaXJlY3Rpb246bnVsbH19fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZWxlY3RUYWIodCl9LGNvbG9yOmZ1bmN0aW9uKHQpe3RoaXMuZGF0YS5jb2xvcj10fSx0ZXh0Q29sb3I6ZnVuY3Rpb24odCl7dGhpcy5kYXRhLnRleHRDb2xvcj10fSxpbnZlcnRlZDpmdW5jdGlvbih0KXt0aGlzLmRhdGEuaW52ZXJ0ZWQ9dH0sdW5kZXJsaW5lQ29sb3I6ZnVuY3Rpb24odCl7dGhpcy5kYXRhLnVuZGVybGluZUNsYXNzPWdldFVuZGVybGluZUNsYXNzKHQpfX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXCJxLXRhYnMtcG9zaXRpb24tXCIrdGhpcy5wb3NpdGlvbixcInEtdGFicy1cIisodGhpcy5pbnZlcnRlZD9cImludmVydGVkXCI6XCJub3JtYWxcIiksdGhpcy50d29MaW5lcz9cInEtdGFicy10d28tbGluZXNcIjpcIlwiXX0saW5uZXJDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W1wicS10YWJzLWFsaWduLVwiK3RoaXMuYWxpZ25dO3JldHVybiB0aGlzLmdsb3NzeSYmdC5wdXNoKFwiZ2xvc3N5XCIpLHRoaXMuaW52ZXJ0ZWQ/dC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fHRoaXMuY29sb3IpKToodC5wdXNoKFwiYmctXCIrdGhpcy5jb2xvciksdC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fFwid2hpdGVcIikpKSx0fSxwb3NiYXJDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuaW52ZXJ0ZWQmJnQucHVzaChcInRleHQtXCIrKHRoaXMudGV4dENvbG9yfHx0aGlzLmNvbG9yKSksdGhpcy5kYXRhLmhpZ2hsaWdodCYmdC5wdXNoKFwiaGlnaGxpZ2h0XCIpLHR9fSxtZXRob2RzOntnbzpmdW5jdGlvbih0KXt2YXIgZT0wO2lmKHRoaXMuZGF0YS50YWJOYW1lKXt2YXIgaT10aGlzLiRyZWZzLnNjcm9sbGVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXRhYi1uYW1lPVwiJyt0aGlzLmRhdGEudGFiTmFtZSsnXCJdJyk7aSYmKGU9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLiRyZWZzLnNjcm9sbGVyLmNoaWxkcmVuLGkpKX12YXIgcz10aGlzLiRyZWZzLnNjcm9sbGVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS10YWItbmFtZV1cIik7KGUrPXQpPi0xJiZlPHMubGVuZ3RoJiZ0aGlzLnNlbGVjdFRhYihzW2VdLmdldEF0dHJpYnV0ZShcImRhdGEtdGFiLW5hbWVcIikpfSxwcmV2aW91czpmdW5jdGlvbigpe3RoaXMuZ28oLTEpfSxuZXh0OmZ1bmN0aW9uKCl7dGhpcy5nbygxKX0sc2VsZWN0VGFiOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZGF0YS50YWJOYW1lIT09dCl7dGhpcy5kYXRhLnRhYk5hbWU9dDt2YXIgZT10aGlzLl9fZ2V0VGFiRWxCeU5hbWUodCk7aWYoZSlpZih0aGlzLl9fc2Nyb2xsVG9UYWIoZSksdGhpcy5jdXJyZW50RWw9ZSx0aGlzLm9sZEVsKXtpZih0aGlzLmFuaW1hdGVkKXt2YXIgaT10aGlzLiRyZWZzLnNjcm9sbGVyLmNoaWxkcmVuO3RoaXMuZGF0YS5kaXJlY3Rpb249QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChpLGUpPEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoaSx0aGlzLm9sZEVsKT9cImxlZnRcIjpcInJpZ2h0XCJ9dGhpcy5fX3JlcG9zaXRpb25CYXIoKX1lbHNlIHRoaXMub2xkRWw9ZTtlbHNlIHRoaXMub2xkRWw9bnVsbCx0aGlzLmRhdGEuZGlyZWN0aW9uPW51bGw7dGhpcy4kZW1pdChcImlucHV0XCIsdCx0aGlzLmRhdGEuZGlyZWN0aW9uKSx0aGlzLiRlbWl0KFwic2VsZWN0XCIsdCx0aGlzLmRhdGEuZGlyZWN0aW9uKX19LHNlbGVjdFRhYlJvdXRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dC52YWx1ZSxzPXQuc2VsZWN0YWJsZSxuPXQuZXhhY3Qsbz10LnNlbGVjdGVkLHI9dC5wcmlvcml0eSxhPSF0aGlzLmJ1ZmZlci5sZW5ndGgsbD1hPy0xOnRoaXMuYnVmZmVyLmZpbmRJbmRleChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZT09PWl9KTtpZihsPi0xKXt2YXIgYz10aGlzLmJ1ZmZlcltsXTtuJiYoYy5leGFjdD1uKSxzJiYoYy5zZWxlY3RhYmxlPXMpLG8mJihjLnNlbGVjdGVkPW8pLHImJihjLnByaW9yaXR5PXIpfWVsc2UgdGhpcy5idWZmZXIucHVzaCh0KTthJiYodGhpcy5idWZmZXJUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZS5idWZmZXIuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5leGFjdCYmdC5zZWxlY3RlZH0pfHxlLmJ1ZmZlci5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdGFibGUmJnQuc2VsZWN0ZWR9KXx8ZS5idWZmZXIuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5leGFjdH0pfHxlLmJ1ZmZlci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0YWJsZX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5wcmlvcml0eS10LnByaW9yaXR5fSlbMF18fGUuYnVmZmVyWzBdO2UuYnVmZmVyLmxlbmd0aD0wLGUuc2VsZWN0VGFiKHQudmFsdWUpfSwxMDApKX0sX19zd2lwZTpmdW5jdGlvbih0KXt0aGlzLmdvKFwibGVmdFwiPT09dC5kaXJlY3Rpb24/MTotMSl9LF9fcmVwb3NpdGlvbkJhcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO3ZhciBlPSExLGk9dGhpcy4kcmVmcy5wb3NiYXIscz10aGlzLmN1cnJlbnRFbDtpZighMSE9PXRoaXMuZGF0YS5oaWdobGlnaHQmJih0aGlzLmRhdGEuaGlnaGxpZ2h0PSExLGU9ITApLCFzKXJldHVybiB0aGlzLmZpbmFsUG9zYmFyPXt3aWR0aDowLGxlZnQ6MH0sdm9pZCB0aGlzLl9fc2V0UG9zaXRpb25CYXIoMCwwKTt2YXIgbj1pLnBhcmVudE5vZGUub2Zmc2V0TGVmdDtlJiZ0aGlzLm9sZEVsJiZ0aGlzLl9fc2V0UG9zaXRpb25CYXIodGhpcy5vbGRFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCx0aGlzLm9sZEVsLm9mZnNldExlZnQtbiksdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGU9cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxvPXMub2Zmc2V0TGVmdC1uO2kuY2xhc3NMaXN0LnJlbW92ZShcImNvbnRyYWN0XCIpLHQub2xkRWw9cyx0LmZpbmFsUG9zYmFyPXt3aWR0aDplLGxlZnQ6b30sdC5fX3NldFBvc2l0aW9uQmFyKHQucG9zYmFyLmxlZnQ8bz9vK2UtdC5wb3NiYXIubGVmdDp0LnBvc2Jhci5sZWZ0K3QucG9zYmFyLndpZHRoLW8sdC5wb3NiYXIubGVmdDxvP3QucG9zYmFyLmxlZnQ6byl9LDIwKX0sX19zZXRQb3NpdGlvbkJhcjpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PWUmJihlPTApLHRoaXMucG9zYmFyLndpZHRoIT09dHx8dGhpcy5wb3NiYXIubGVmdCE9PWUpe3RoaXMucG9zYmFyPXt3aWR0aDp0LGxlZnQ6ZX07dmFyIGk9dGhpcy4kcS5pMThuLnJ0bD9lK3Q6ZTt0aGlzLiRyZWZzLnBvc2Jhci5zdHlsZS50cmFuc2Zvcm09XCJ0cmFuc2xhdGVYKFwiK2krXCJweCkgc2NhbGVYKFwiK3QrXCIpXCJ9ZWxzZSB0aGlzLl9fdXBkYXRlUG9zYmFyVHJhbnNpdGlvbigpfSxfX3VwZGF0ZVBvc2JhclRyYW5zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLmZpbmFsUG9zYmFyLndpZHRoPT09dGhpcy5wb3NiYXIud2lkdGgmJnRoaXMuZmluYWxQb3NiYXIubGVmdD09PXRoaXMucG9zYmFyLmxlZnQpcmV0dXJuIHRoaXMucG9zYmFyPXt9LHZvaWQoITAhPT10aGlzLmRhdGEuaGlnaGxpZ2h0JiYodGhpcy5kYXRhLmhpZ2hsaWdodD0hMCkpO3RoaXMuJHJlZnMucG9zYmFyLmNsYXNzTGlzdC5hZGQoXCJjb250cmFjdFwiKSx0aGlzLl9fc2V0UG9zaXRpb25CYXIodGhpcy5maW5hbFBvc2Jhci53aWR0aCx0aGlzLmZpbmFsUG9zYmFyLmxlZnQpfSxfX3JlZHJhdzpmdW5jdGlvbigpe3RoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcCYmKHRoaXMuc2Nyb2xsZXJXaWR0aD13aWR0aCh0aGlzLiRyZWZzLnNjcm9sbGVyKSwwPT09dGhpcy5zY3JvbGxlcldpZHRoJiYwPT09dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxXaWR0aHx8KHRoaXMuc2Nyb2xsZXJXaWR0aCs1PHRoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsV2lkdGg/KHRoaXMuJHJlZnMudGFicy5jbGFzc0xpc3QuYWRkKFwic2Nyb2xsYWJsZVwiKSx0aGlzLnNjcm9sbGFibGU9ITAsdGhpcy5fX3VwZGF0ZVNjcm9sbEluZGljYXRvcigpKToodGhpcy4kcmVmcy50YWJzLmNsYXNzTGlzdC5yZW1vdmUoXCJzY3JvbGxhYmxlXCIpLHRoaXMuc2Nyb2xsYWJsZT0hMSkpKX0sX191cGRhdGVTY3JvbGxJbmRpY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3AmJnRoaXMuc2Nyb2xsYWJsZSl7dmFyIHQ9dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0K3dpZHRoKHRoaXMuJHJlZnMuc2Nyb2xsZXIpKzU+PXRoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsV2lkdGg/XCJhZGRcIjpcInJlbW92ZVwiO3RoaXMuJHJlZnMubGVmdFNjcm9sbC5jbGFzc0xpc3RbdGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0PD0wP1wiYWRkXCI6XCJyZW1vdmVcIl0oXCJkaXNhYmxlZFwiKSx0aGlzLiRyZWZzLnJpZ2h0U2Nyb2xsLmNsYXNzTGlzdFt0XShcImRpc2FibGVkXCIpfX0sX19nZXRUYWJFbEJ5TmFtZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiRjaGlsZHJlbi5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT10JiZlLiRlbCYmMT09PWUuJGVsLm5vZGVUeXBlfSk7aWYoZSlyZXR1cm4gZS4kZWx9LF9fZmluZFRhYkFuZFNjcm9sbDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2kuX19zY3JvbGxUb1RhYihpLl9fZ2V0VGFiRWxCeU5hbWUodCksZSl9LDQqZGVib3VuY2VEZWxheSl9LF9fc2Nyb2xsVG9UYWI6ZnVuY3Rpb24odCxlKXtpZih0JiZ0aGlzLnNjcm9sbGFibGUpe3ZhciBpPXRoaXMuJHJlZnMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49cy53aWR0aCxvPXMubGVmdC1pLmxlZnQ7bzwwP2U/dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0Kz1vOnRoaXMuX19hbmltU2Nyb2xsVG8odGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0K28pOihvKz1uLXRoaXMuJHJlZnMuc2Nyb2xsZXIub2Zmc2V0V2lkdGgpPjAmJihlP3RoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsTGVmdCs9bzp0aGlzLl9fYW5pbVNjcm9sbFRvKHRoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsTGVmdCtvKSl9fSxfX2FuaW1TY3JvbGxUbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX19zdG9wQW5pbVNjcm9sbCgpLHRoaXMuX19zY3JvbGxUb3dhcmRzKHQpLHRoaXMuc2Nyb2xsVGltZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtlLl9fc2Nyb2xsVG93YXJkcyh0KSYmZS5fX3N0b3BBbmltU2Nyb2xsKCl9LDUpfSxfX3Njcm9sbFRvU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9fYW5pbVNjcm9sbFRvKDApfSxfX3Njcm9sbFRvRW5kOmZ1bmN0aW9uKCl7dGhpcy5fX2FuaW1TY3JvbGxUbyg5OTk5KX0sX19zdG9wQW5pbVNjcm9sbDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGhpcy5zY3JvbGxUaW1lcil9LF9fc2Nyb2xsVG93YXJkczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQsaT10PGU/LTE6MSxzPSExO3JldHVybihlKz1pKnNjcm9sbE5hdmlnYXRpb25TcGVlZCk8MD8ocz0hMCxlPTApOigtMT09PWkmJmU8PXR8fDE9PT1pJiZlPj10KSYmKHM9ITAsZT10KSx0aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQ9ZSxzfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJzIGZsZXggbm8td3JhcCBvdmVyZmxvdy1oaWRkZW5cIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJzLWhlYWQgcm93XCIscmVmOlwidGFic1wiLGNsYXNzOnRoaXMuaW5uZXJDbGFzc2VzfSxbdChcImRpdlwiLHtyZWY6XCJzY3JvbGxlclwiLHN0YXRpY0NsYXNzOlwicS10YWJzLXNjcm9sbGVyIHJvdyBuby13cmFwXCJ9LFt0aGlzLiRzbG90cy50aXRsZSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicmVsYXRpdmUtcG9zaXRpb24gc2VsZi1zdHJldGNoIHEtdGFicy1nbG9iYWwtYmFyLWNvbnRhaW5lclwiLGNsYXNzOnRoaXMucG9zYmFyQ2xhc3Nlc30sW3QoXCJkaXZcIix7cmVmOlwicG9zYmFyXCIsc3RhdGljQ2xhc3M6XCJxLXRhYnMtYmFyIHEtdGFicy1nbG9iYWwtYmFyXCIsY2xhc3M6dGhpcy5kYXRhLnVuZGVybGluZUNsYXNzLG9uOnt0cmFuc2l0aW9uZW5kOnRoaXMuX191cGRhdGVQb3NiYXJUcmFuc2l0aW9ufX0pXSldKSx0KFwiZGl2XCIse3JlZjpcImxlZnRTY3JvbGxcIixzdGF0aWNDbGFzczpcInJvdyBmbGV4LWNlbnRlciBxLXRhYnMtbGVmdC1zY3JvbGxcIixvbjp7bW91c2Vkb3duOnRoaXMuX19zY3JvbGxUb1N0YXJ0LHRvdWNoc3RhcnQ6dGhpcy5fX3Njcm9sbFRvU3RhcnQsbW91c2V1cDp0aGlzLl9fc3RvcEFuaW1TY3JvbGwsbW91c2VsZWF2ZTp0aGlzLl9fc3RvcEFuaW1TY3JvbGwsdG91Y2hlbmQ6dGhpcy5fX3N0b3BBbmltU2Nyb2xsfX0sW3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMuJHEuaWNvbi50YWJzLmxlZnR9fSldKSx0KFwiZGl2XCIse3JlZjpcInJpZ2h0U2Nyb2xsXCIsc3RhdGljQ2xhc3M6XCJyb3cgZmxleC1jZW50ZXIgcS10YWJzLXJpZ2h0LXNjcm9sbFwiLG9uOnttb3VzZWRvd246dGhpcy5fX3Njcm9sbFRvRW5kLHRvdWNoc3RhcnQ6dGhpcy5fX3Njcm9sbFRvRW5kLG1vdXNldXA6dGhpcy5fX3N0b3BBbmltU2Nyb2xsLG1vdXNlbGVhdmU6dGhpcy5fX3N0b3BBbmltU2Nyb2xsLHRvdWNoZW5kOnRoaXMuX19zdG9wQW5pbVNjcm9sbH19LFt0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udGFicy5yaWdodH19KV0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFicy1wYW5lc1wiLGNsYXNzOnRoaXMucGFuZXNDb250YWluZXJDbGFzcyxkaXJlY3RpdmVzOnRoaXMuc3dpcGVhYmxlP1t7bmFtZTpcInRvdWNoLXN3aXBlXCIsdmFsdWU6dGhpcy5fX3N3aXBlfV06bnVsbH0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMudGltZXI9bnVsbCx0aGlzLnNjcm9sbFRpbWVyPW51bGwsdGhpcy5idWZmZXJUaW1lcj1udWxsLHRoaXMuYnVmZmVyPVtdLHRoaXMuc2Nyb2xsYWJsZT0hdGhpcy4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wLHRoaXMuX19yZWRyYXc9ZGVib3VuY2UodGhpcy5fX3JlZHJhdyxkZWJvdW5jZURlbGF5KSx0aGlzLl9fdXBkYXRlU2Nyb2xsSW5kaWNhdG9yPWRlYm91bmNlKHRoaXMuX191cGRhdGVTY3JvbGxJbmRpY2F0b3IsZGVib3VuY2VEZWxheSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC4kcmVmcy5zY3JvbGxlciYmKHQuJHJlZnMuc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHQuX191cGRhdGVTY3JvbGxJbmRpY2F0b3IsbGlzdGVuT3B0cy5wYXNzaXZlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQuX19yZWRyYXcsbGlzdGVuT3B0cy5wYXNzaXZlKSxcIlwiIT09dC5kYXRhLnRhYk5hbWUmJnQudmFsdWUmJnQuc2VsZWN0VGFiKHQudmFsdWUpLHQuX19yZWRyYXcoKSx0Ll9fZmluZFRhYkFuZFNjcm9sbCh0LmRhdGEudGFiTmFtZSwhMCkpfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksY2xlYXJUaW1lb3V0KHRoaXMuYnVmZmVyVGltZXIpLHRoaXMuX19zdG9wQW5pbVNjcm9sbCgpLHRoaXMuJHJlZnMuc2Nyb2xsZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuX191cGRhdGVTY3JvbGxJbmRpY2F0b3IsbGlzdGVuT3B0cy5wYXNzaXZlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMuX19yZWRyYXcsbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLl9fcmVkcmF3LmNhbmNlbCgpLHRoaXMuX191cGRhdGVTY3JvbGxJbmRpY2F0b3IuY2FuY2VsKCl9fSxUb3A9e2NvbXB1dGVkOnttYXJnaW5hbHNQcm9wczpmdW5jdGlvbigpe3JldHVybntwYWdpbmF0aW9uOnRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLHBhZ2VzTnVtYmVyOnRoaXMucGFnZXNOdW1iZXIsaXNGaXJzdFBhZ2U6dGhpcy5pc0ZpcnN0UGFnZSxpc0xhc3RQYWdlOnRoaXMuaXNMYXN0UGFnZSxwcmV2UGFnZTp0aGlzLnByZXZQYWdlLG5leHRQYWdlOnRoaXMubmV4dFBhZ2UsaW5GdWxsc2NyZWVuOnRoaXMuaW5GdWxsc2NyZWVuLHRvZ2dsZUZ1bGxzY3JlZW46dGhpcy50b2dnbGVGdWxsc2NyZWVufX19LG1ldGhvZHM6e2dldFRvcDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiRzY29wZWRTbG90cy50b3AsaT10aGlzLiRzY29wZWRTbG90c1tcInRvcC1sZWZ0XCJdLHM9dGhpcy4kc2NvcGVkU2xvdHNbXCJ0b3AtcmlnaHRcIl0sbj10aGlzLiRzY29wZWRTbG90c1tcInRvcC1zZWxlY3Rpb25cIl0sbz10aGlzLmhhc1NlbGVjdGlvbk1vZGUmJm4mJnRoaXMucm93c1NlbGVjdGVkTnVtYmVyPjAscj1cInEtdGFibGUtdG9wIHJlbGF0aXZlLXBvc2l0aW9uIHJvdyBpdGVtcy1jZW50ZXJcIixhPVtdO3JldHVybiBlP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6cn0sW2UodGhpcy5tYXJnaW5hbHNQcm9wcyldKToobz9hLnB1c2gobih0aGlzLm1hcmdpbmFsc1Byb3BzKSk6aT9hLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbaSh0aGlzLm1hcmdpbmFsc1Byb3BzKV0pKTp0aGlzLnRpdGxlJiZhLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtdGl0bGVcIn0sdGhpcy50aXRsZSldKSkscyYmKGEucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1zZXBhcmF0b3IgY29sXCJ9KSksYS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWNvbnRyb2xcIn0sW3ModGhpcy5tYXJnaW5hbHNQcm9wcyldKSkpLDAhPT1hLmxlbmd0aD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOnJ9LGEpOnZvaWQgMCl9fX0sUVRoPXtuYW1lOlwiUVRoXCIscHJvcHM6e3Byb3BzOk9iamVjdCxhdXRvV2lkdGg6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlLGk9dGhpcztpZighdGhpcy5wcm9wcylyZXR1cm4gdChcInRkXCIse2NsYXNzOntcInEtdGFibGUtY29sLWF1dG8td2lkdGhcIjp0aGlzLmF1dG9XaWR0aH19LHRoaXMuJHNsb3RzLmRlZmF1bHQpO3ZhciBzPXRoaXMuJHZub2RlLmtleSxuPVtdLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KTtpZihzKXtpZighKGU9dGhpcy5wcm9wcy5jb2xzTWFwW3NdKSlyZXR1cm59ZWxzZSBlPXRoaXMucHJvcHMuY29sO2Uuc29ydGFibGUmJm5bXCJyaWdodFwiPT09ZS5hbGlnbj9cInVuc2hpZnRcIjpcInB1c2hcIl0odChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLnRhYmxlLmFycm93VXB9LHN0YXRpY0NsYXNzOmUuX19pY29uQ2xhc3N9KSk7cmV0dXJuIHQoXCJ0aFwiLHtjbGFzczpbZS5fX3RoQ2xhc3Mse1wicS10YWJsZS1jb2wtYXV0by13aWR0aFwiOnRoaXMuYXV0b1dpZHRofV0sb246ZS5zb3J0YWJsZT97Y2xpY2s6ZnVuY3Rpb24oKXtpLnByb3BzLnNvcnQoZSl9fTpudWxsfSxuKX19LFRhYmxlSGVhZGVyPXttZXRob2RzOntnZXRUYWJsZUhlYWRlcjpmdW5jdGlvbih0KXt2YXIgZT1bdGhpcy5nZXRUYWJsZUhlYWRlclJvdyh0KV07cmV0dXJuIHRoaXMubG9hZGluZyYmZS5wdXNoKHQoXCJ0clwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtcHJvZ3Jlc3MgYW5pbWF0ZS1mYWRlXCJ9LFt0KFwidGRcIix7YXR0cnM6e2NvbHNwYW46XCIxMDAlXCJ9fSxbdChRUHJvZ3Jlc3Mse3Byb3BzOntjb2xvcjp0aGlzLmNvbG9yLGluZGV0ZXJtaW5hdGU6ITAsaGVpZ2h0OlwiMnB4XCJ9fSldKV0pKSx0KFwidGhlYWRcIixlKX0sZ2V0VGFibGVIZWFkZXJSb3c6ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLHM9dGhpcy4kc2NvcGVkU2xvdHMuaGVhZGVyLG49dGhpcy4kc2NvcGVkU2xvdHNbXCJoZWFkZXItY2VsbFwiXTtpZihzKXJldHVybiBzKHRoaXMuYWRkVGFibGVIZWFkZXJSb3dNZXRhKHtoZWFkZXI6ITAsY29sczp0aGlzLmNvbXB1dGVkQ29scyxzb3J0OnRoaXMuc29ydCxjb2xzTWFwOnRoaXMuY29tcHV0ZWRDb2xzTWFwfSkpO2U9bj9mdW5jdGlvbih0KXtyZXR1cm4gbih7Y29sOnQsY29sczppLmNvbXB1dGVkQ29scyxzb3J0Omkuc29ydCxjb2xzTWFwOmkuY29tcHV0ZWRDb2xzTWFwfSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0KFFUaCx7a2V5OmUubmFtZSxwcm9wczp7cHJvcHM6e2NvbDplLGNvbHM6aS5jb21wdXRlZENvbHMsc29ydDppLnNvcnQsY29sc01hcDppLmNvbXB1dGVkQ29sc01hcH19LHN0eWxlOmUuc3R5bGUsY2xhc3M6ZS5jbGFzc2VzfSxlLmxhYmVsKX07dmFyIG89dGhpcy5jb21wdXRlZENvbHMubWFwKGUpO3JldHVybiB0aGlzLnNpbmdsZVNlbGVjdGlvbiYmIXRoaXMuZ3JpZD9vLnVuc2hpZnQodChcInRoXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb2wtYXV0by13aWR0aFwifSxbXCIgXCJdKSk6dGhpcy5tdWx0aXBsZVNlbGVjdGlvbiYmby51bnNoaWZ0KHQoXCJ0aFwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29sLWF1dG8td2lkdGhcIn0sW3QoUUNoZWNrYm94LHtwcm9wczp7Y29sb3I6dGhpcy5jb2xvcix2YWx1ZTp0aGlzLnNvbWVSb3dzU2VsZWN0ZWQ/bnVsbDp0aGlzLmFsbFJvd3NTZWxlY3RlZCxkYXJrOnRoaXMuZGFya30sb246e2lucHV0OmZ1bmN0aW9uKHQpe2kuc29tZVJvd3NTZWxlY3RlZCYmKHQ9ITEpLGkuX191cGRhdGVTZWxlY3Rpb24oaS5jb21wdXRlZFJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0W2kucm93S2V5XX0pLGkuY29tcHV0ZWRSb3dzLHQpfX19KV0pKSx0KFwidHJcIixvKX0sYWRkVGFibGVIZWFkZXJSb3dNZXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMubXVsdGlwbGVTZWxlY3Rpb24mJihPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInNlbGVjdGVkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLnNvbWVSb3dzU2VsZWN0ZWQ/XCJzb21lXCI6ZS5hbGxSb3dzU2VsZWN0ZWR9LHNldDpmdW5jdGlvbih0KXtlLnNvbWVSb3dzU2VsZWN0ZWQmJih0PSExKSxlLl9fdXBkYXRlU2VsZWN0aW9uKGUuY29tcHV0ZWRSb3dzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFtlLnJvd0tleV19KSxlLmNvbXB1dGVkUm93cyx0KX19KSx0LnBhcnRpYWxTZWxlY3RlZD10aGlzLnNvbWVSb3dzU2VsZWN0ZWQsdC5tdWx0aXBsZVNlbGVjdD0hMCksdH19fSxUYWJsZUJvZHk9e21ldGhvZHM6e2dldFRhYmxlQm9keTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dGhpcy4kc2NvcGVkU2xvdHMuYm9keSxzPXRoaXMuJHNjb3BlZFNsb3RzW1wiYm9keS1jZWxsXCJdLG49dGhpcy4kc2NvcGVkU2xvdHNbXCJ0b3Atcm93XCJdLG89dGhpcy4kc2NvcGVkU2xvdHNbXCJib3R0b20tcm93XCJdLHI9W107cmV0dXJuIHI9aT90aGlzLmNvbXB1dGVkUm93cy5tYXAoZnVuY3Rpb24odCl7dmFyIHM9dFtlLnJvd0tleV0sbj1lLmlzUm93U2VsZWN0ZWQocyk7cmV0dXJuIGkoZS5hZGRCb2R5Um93TWV0YSh7a2V5OnMscm93OnQsY29sczplLmNvbXB1dGVkQ29scyxjb2xzTWFwOmUuY29tcHV0ZWRDb2xzTWFwLF9fdHJDbGFzczpuP1wic2VsZWN0ZWRcIjpcIlwifSkpfSk6dGhpcy5jb21wdXRlZFJvd3MubWFwKGZ1bmN0aW9uKGkpe3ZhciBuPWlbZS5yb3dLZXldLG89ZS5pc1Jvd1NlbGVjdGVkKG4pLHI9cz9lLmNvbXB1dGVkQ29scy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHMoZS5hZGRCb2R5Q2VsbE1ldGFEYXRhKHtyb3c6aSxjb2w6dH0pKX0pOmUuY29tcHV0ZWRDb2xzLm1hcChmdW5jdGlvbihzKXt2YXIgbj1lLiRzY29wZWRTbG90c1tcImJvZHktY2VsbC1cIitzLm5hbWVdO3JldHVybiBuP24oZS5hZGRCb2R5Q2VsbE1ldGFEYXRhKHtyb3c6aSxjb2w6c30pKTp0KFwidGRcIix7c3RhdGljQ2xhc3M6cy5fX3RkQ2xhc3Msc3R5bGU6cy5zdHlsZSxjbGFzczpzLmNsYXNzZXN9LGUuZ2V0Q2VsbFZhbHVlKHMsaSkpfSk7cmV0dXJuIGUuaGFzU2VsZWN0aW9uTW9kZSYmci51bnNoaWZ0KHQoXCJ0ZFwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29sLWF1dG8td2lkdGhcIn0sW3QoUUNoZWNrYm94LHtwcm9wczp7dmFsdWU6byxjb2xvcjplLmNvbG9yLGRhcms6ZS5kYXJrfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS5fX3VwZGF0ZVNlbGVjdGlvbihbbl0sW2ldLHQpfX19KV0pKSx0KFwidHJcIix7a2V5Om4sY2xhc3M6e3NlbGVjdGVkOm99fSxyKX0pLG4mJnIudW5zaGlmdChuKHtjb2xzOnRoaXMuY29tcHV0ZWRDb2xzfSkpLG8mJnIucHVzaChvKHtjb2xzOnRoaXMuY29tcHV0ZWRDb2xzfSkpLHQoXCJ0Ym9keVwiLHIpfSxhZGRCb2R5Um93TWV0YTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmhhc1NlbGVjdGlvbk1vZGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwic2VsZWN0ZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuaXNSb3dTZWxlY3RlZCh0LmtleSl9LHNldDpmdW5jdGlvbihpKXtlLl9fdXBkYXRlU2VsZWN0aW9uKFt0LmtleV0sW3Qucm93XSxpKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcImV4cGFuZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMD09PWUucm93c0V4cGFuZGVkW3Qua2V5XX0sc2V0OmZ1bmN0aW9uKGkpe2UuJHNldChlLnJvd3NFeHBhbmRlZCx0LmtleSxpKX19KSx0LmNvbHM9dC5jb2xzLm1hcChmdW5jdGlvbihpKXt2YXIgcz1PYmplY3QuYXNzaWduKHt9LGkpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocyxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLmdldENlbGxWYWx1ZShpLHQucm93KX19KSxzfSksdH0sYWRkQm9keUNlbGxNZXRhRGF0YTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLmdldENlbGxWYWx1ZSh0LmNvbCx0LnJvdyl9fSksdH0sZ2V0Q2VsbFZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdC5maWVsZD90LmZpZWxkKGUpOmVbdC5maWVsZF07cmV0dXJuIHQuZm9ybWF0P3QuZm9ybWF0KGkpOml9fX0sQm90dG9tPXtjb21wdXRlZDp7bmF2SWNvbjpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLiRxLmljb24udGFibGUucHJldlBhZ2UsdGhpcy4kcS5pY29uLnRhYmxlLm5leHRQYWdlXTtyZXR1cm4gdGhpcy4kcS5pMThuLnJ0bD90LnJldmVyc2UoKTp0fX0sbWV0aG9kczp7Z2V0Qm90dG9tOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLmhpZGVCb3R0b20pe2lmKHRoaXMubm90aGluZ1RvRGlzcGxheSl7dmFyIGU9dGhpcy5maWx0ZXI/dGhpcy5ub1Jlc3VsdHNMYWJlbHx8dGhpcy4kcS5pMThuLnRhYmxlLm5vUmVzdWx0czp0aGlzLmxvYWRpbmc/dGhpcy5sb2FkaW5nTGFiZWx8fHRoaXMuJHEuaTE4bi50YWJsZS5sb2FkaW5nOnRoaXMubm9EYXRhTGFiZWx8fHRoaXMuJHEuaTE4bi50YWJsZS5ub0RhdGE7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWJvdHRvbSByb3cgaXRlbXMtY2VudGVyIHEtdGFibGUtbm9kYXRhXCJ9LFt0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udGFibGUud2FybmluZ319KSxlXSl9dmFyIGk9dGhpcy4kc2NvcGVkU2xvdHMuYm90dG9tO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1ib3R0b20gcm93IGl0ZW1zLWNlbnRlclwiLGNsYXNzOmk/bnVsbDpcImp1c3RpZnktZW5kXCJ9LGk/W2kodGhpcy5tYXJnaW5hbHNQcm9wcyldOnRoaXMuZ2V0UGFnaW5hdGlvblJvdyh0KSl9fSxnZXRQYWdpbmF0aW9uUm93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5yb3dzUGVyUGFnZSxzPXRoaXMucGFnaW5hdGlvbkxhYmVsfHx0aGlzLiRxLmkxOG4udGFibGUucGFnaW5hdGlvbixuPXRoaXMuJHNjb3BlZFNsb3RzLnBhZ2luYXRpb247cmV0dXJuW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWNvbnRyb2xcIn0sW3QoXCJkaXZcIixbdGhpcy5oYXNTZWxlY3Rpb25Nb2RlJiZ0aGlzLnJvd3NTZWxlY3RlZE51bWJlcj4wPyh0aGlzLnNlbGVjdGVkUm93c0xhYmVsfHx0aGlzLiRxLmkxOG4udGFibGUuc2VsZWN0ZWRSZWNvcmRzKSh0aGlzLnJvd3NTZWxlY3RlZE51bWJlcik6XCJcIl0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtc2VwYXJhdG9yIGNvbFwifSksdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMubGVuZ3RoPjEmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWNvbnRyb2xcIn0sW3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1ib3R0b20taXRlbVwifSxbdGhpcy5yb3dzUGVyUGFnZUxhYmVsfHx0aGlzLiRxLmkxOG4udGFibGUucmVjb3Jkc1BlclBhZ2VdKSx0KFFTZWxlY3Qse3N0YXRpY0NsYXNzOlwiaW5saW5lIHEtdGFibGUtYm90dG9tLWl0ZW1cIixwcm9wczp7Y29sb3I6dGhpcy5jb2xvcix2YWx1ZTppLG9wdGlvbnM6dGhpcy5jb21wdXRlZFJvd3NQZXJQYWdlT3B0aW9ucyxkYXJrOnRoaXMuZGFyayxoaWRlVW5kZXJsaW5lOiEwfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS5zZXRQYWdpbmF0aW9uKHtwYWdlOjEscm93c1BlclBhZ2U6dH0pfX19KV0pfHx2b2lkIDAsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbbj9uKHRoaXMubWFyZ2luYWxzUHJvcHMpOlt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtYm90dG9tLWl0ZW1cIn0sW2k/cyh0aGlzLmZpcnN0Um93SW5kZXgrMSxNYXRoLm1pbih0aGlzLmxhc3RSb3dJbmRleCx0aGlzLmNvbXB1dGVkUm93c051bWJlciksdGhpcy5jb21wdXRlZFJvd3NOdW1iZXIpOnMoMSx0aGlzLmNvbXB1dGVkUm93c051bWJlcix0aGlzLmNvbXB1dGVkUm93c051bWJlcildKSx0KFFCdG4se3Byb3BzOntjb2xvcjp0aGlzLmNvbG9yLHJvdW5kOiEwLGljb246dGhpcy5uYXZJY29uWzBdLGRlbnNlOiEwLGZsYXQ6ITAsZGlzYWJsZTp0aGlzLmlzRmlyc3RQYWdlfSxvbjp7Y2xpY2s6dGhpcy5wcmV2UGFnZX19KSx0KFFCdG4se3Byb3BzOntjb2xvcjp0aGlzLmNvbG9yLHJvdW5kOiEwLGljb246dGhpcy5uYXZJY29uWzFdLGRlbnNlOiEwLGZsYXQ6ITAsZGlzYWJsZTp0aGlzLmlzTGFzdFBhZ2V9LG9uOntjbGljazp0aGlzLm5leHRQYWdlfX0pXV0pXX19fTtmdW5jdGlvbiBzb3J0RGF0ZSh0LGUpe3JldHVybiBuZXcgRGF0ZSh0KS1uZXcgRGF0ZShlKX12YXIgU29ydD17cHJvcHM6e3NvcnRNZXRob2Q6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpcy5jb2x1bW5zLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZT09PWV9KTtpZihudWxsPT09c3x8dm9pZCAwPT09cy5maWVsZClyZXR1cm4gdDt2YXIgbj1pPy0xOjEsbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzLmZpZWxkP2Z1bmN0aW9uKHQpe3JldHVybiBzLmZpZWxkKHQpfTpmdW5jdGlvbih0KXtyZXR1cm4gdFtzLmZpZWxkXX07cmV0dXJuIHQuc29ydChmdW5jdGlvbih0LGUpe3ZhciBpLHI9byh0KSxhPW8oZSk7cmV0dXJuIG51bGw9PT1yfHx2b2lkIDA9PT1yPy0xKm46bnVsbD09PWF8fHZvaWQgMD09PWE/MSpuOnMuc29ydD9zLnNvcnQocixhKSpuOmlzTnVtYmVyKHIpJiZpc051bWJlcihhKT8oci1hKSpuOmlzRGF0ZShyKSYmaXNEYXRlKGEpP3NvcnREYXRlKHIsYSkqbjpcImJvb2xlYW5cIj09dHlwZW9mIHImJlwiYm9vbGVhblwiPT10eXBlb2YgYT8odC1lKSpuOihyPShpPVtyLGFdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odCtcIlwiKS50b0xvd2VyQ2FzZSgpfSkpWzBdKTwoYT1pWzFdKT8tMSpuOnI9PT1hPzA6bn0pfX19LGNvbXB1dGVkOntjb2x1bW5Ub1NvcnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5zb3J0Qnk7aWYodClyZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09PXR9KXx8bnVsbH19LG1ldGhvZHM6e3NvcnQ6ZnVuY3Rpb24odCl7dD09PU9iamVjdCh0KSYmKHQ9dC5uYW1lKTt2YXIgZT10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbixpPWUuc29ydEJ5LHM9ZS5kZXNjZW5kaW5nO2khPT10PyhpPXQscz0hMSk6dGhpcy5iaW5hcnlTdGF0ZVNvcnQ/cz0hczpzP2k9bnVsbDpzPSEwLHRoaXMuc2V0UGFnaW5hdGlvbih7c29ydEJ5OmksZGVzY2VuZGluZzpzLHBhZ2U6MX0pfX19LEZpbHRlcj17cHJvcHM6e2ZpbHRlcjpbU3RyaW5nLE9iamVjdF0sZmlsdGVyTWV0aG9kOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6ZnVuY3Rpb24odCxlLGkscyl7dm9pZCAwPT09aSYmKGk9dGhpcy5jb21wdXRlZENvbHMpLHZvaWQgMD09PXMmJihzPXRoaXMuZ2V0Q2VsbFZhbHVlKTt2YXIgbj1lP2UudG9Mb3dlckNhc2UoKTpcIlwiO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gaS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybi0xIT09KHMoZSx0KStcIlwiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yobil9KX0pfX19LHdhdGNoOntmaWx0ZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5zZXRQYWdpbmF0aW9uKHtwYWdlOjF9LCEwKX0pfX19O2Z1bmN0aW9uIHNhbWVQYWdpbmF0aW9uKHQsZSl7Zm9yKHZhciBpIGluIGUpaWYoZVtpXSE9PXRbaV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZml4UGFnaW5hdGlvbih0KXtyZXR1cm4gdC5wYWdlPDEmJih0LnBhZ2U9MSksdm9pZCAwIT09dC5yb3dzUGVyUGFnZSYmdC5yb3dzUGVyUGFnZTwxJiYodC5yb3dzUGVyUGFnZT0wKSx0fXZhciBQYWdpbmF0aW9uPXtwcm9wczp7cGFnaW5hdGlvbjpPYmplY3Qscm93c1BlclBhZ2VPcHRpb25zOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bMyw1LDcsMTAsMTUsMjAsMjUsNTAsMF19fX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntpbm5lclBhZ2luYXRpb246e3NvcnRCeTpudWxsLGRlc2NlbmRpbmc6ITEscGFnZToxLHJvd3NQZXJQYWdlOjV9fX0sY29tcHV0ZWQ6e2NvbXB1dGVkUGFnaW5hdGlvbjpmdW5jdGlvbigpe3JldHVybiBmaXhQYWdpbmF0aW9uKE9iamVjdC5hc3NpZ24oe30sdGhpcy5pbm5lclBhZ2luYXRpb24sdGhpcy5wYWdpbmF0aW9uKSl9LGZpcnN0Um93SW5kZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbjtyZXR1cm4odC5wYWdlLTEpKnQucm93c1BlclBhZ2V9LGxhc3RSb3dJbmRleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uO3JldHVybiB0LnBhZ2UqdC5yb3dzUGVyUGFnZX0saXNGaXJzdFBhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnBhZ2V9LHBhZ2VzTnVtYmVyOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KDEsTWF0aC5jZWlsKHRoaXMuY29tcHV0ZWRSb3dzTnVtYmVyL3RoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnJvd3NQZXJQYWdlKSl9LGlzTGFzdFBhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGFzdFJvd0luZGV4fHx0aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5wYWdlPj10aGlzLnBhZ2VzTnVtYmVyfSxjb21wdXRlZFJvd3NQZXJQYWdlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucm93c1BlclBhZ2VPcHRpb25zLm1hcChmdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6MD09PWU/dC4kcS5pMThuLnRhYmxlLmFsbFJvd3M6XCJcIitlLHZhbHVlOmV9fSl9fSx3YXRjaDp7cGFnZXNOdW1iZXI6ZnVuY3Rpb24odCxlKXtpZih0IT09ZSl7dmFyIGk9dGhpcy5jb21wdXRlZFBhZ2luYXRpb24ucGFnZTt0JiYhaT90aGlzLnNldFBhZ2luYXRpb24oe3BhZ2U6MX0pOnQ8aSYmdGhpcy5zZXRQYWdpbmF0aW9uKHtwYWdlOnR9KX19fSxtZXRob2RzOntfX3NlbmRTZXJ2ZXJSZXF1ZXN0OmZ1bmN0aW9uKHQpe3RoaXMucmVxdWVzdFNlcnZlckludGVyYWN0aW9uKHtwYWdpbmF0aW9uOnQsZmlsdGVyOnRoaXMuZmlsdGVyfSl9LHNldFBhZ2luYXRpb246ZnVuY3Rpb24odCxlKXt2YXIgaT1maXhQYWdpbmF0aW9uKE9iamVjdC5hc3NpZ24oe30sdGhpcy5jb21wdXRlZFBhZ2luYXRpb24sdCkpO3NhbWVQYWdpbmF0aW9uKHRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLGkpP3RoaXMuaXNTZXJ2ZXJTaWRlJiZlJiZ0aGlzLl9fc2VuZFNlcnZlclJlcXVlc3QoaSk6dGhpcy5pc1NlcnZlclNpZGU/dGhpcy5fX3NlbmRTZXJ2ZXJSZXF1ZXN0KGkpOnRoaXMucGFnaW5hdGlvbj90aGlzLiRlbWl0KFwidXBkYXRlOnBhZ2luYXRpb25cIixpKTp0aGlzLmlubmVyUGFnaW5hdGlvbj1pfSxwcmV2UGFnZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnBhZ2U7dD4xJiZ0aGlzLnNldFBhZ2luYXRpb24oe3BhZ2U6dC0xfSl9LG5leHRQYWdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb21wdXRlZFBhZ2luYXRpb24sZT10LnBhZ2UsaT10LnJvd3NQZXJQYWdlO3RoaXMubGFzdFJvd0luZGV4PjAmJmUqaTx0aGlzLmNvbXB1dGVkUm93c051bWJlciYmdGhpcy5zZXRQYWdpbmF0aW9uKHtwYWdlOmUrMX0pfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuJGVtaXQoXCJ1cGRhdGU6cGFnaW5hdGlvblwiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5jb21wdXRlZFBhZ2luYXRpb24pKX19LFJvd1NlbGVjdGlvbj17cHJvcHM6e3NlbGVjdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIm5vbmVcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wic2luZ2xlXCIsXCJtdWx0aXBsZVwiLFwibm9uZVwiXS5pbmNsdWRlcyh0KX19LHNlbGVjdGVkOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxjb21wdXRlZDp7c2VsZWN0ZWRLZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXt9O3JldHVybiB0aGlzLnNlbGVjdGVkLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZVt0LnJvd0tleV19KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ITB9KSxlfSxoYXNTZWxlY3Rpb25Nb2RlOmZ1bmN0aW9uKCl7cmV0dXJuXCJub25lXCIhPT10aGlzLnNlbGVjdGlvbn0sc2luZ2xlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuXCJzaW5nbGVcIj09PXRoaXMuc2VsZWN0aW9ufSxtdWx0aXBsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVyblwibXVsdGlwbGVcIj09PXRoaXMuc2VsZWN0aW9ufSxhbGxSb3dzU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMubXVsdGlwbGVTZWxlY3Rpb24pcmV0dXJuIHRoaXMuY29tcHV0ZWRSb3dzLmxlbmd0aD4wJiZ0aGlzLmNvbXB1dGVkUm93cy5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4hMD09PXQuc2VsZWN0ZWRLZXlzW2VbdC5yb3dLZXldXX0pfSxzb21lUm93c1NlbGVjdGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLm11bHRpcGxlU2VsZWN0aW9uKXJldHVybiF0aGlzLmFsbFJvd3NTZWxlY3RlZCYmdGhpcy5jb21wdXRlZFJvd3Muc29tZShmdW5jdGlvbihlKXtyZXR1cm4hMD09PXQuc2VsZWN0ZWRLZXlzW2VbdC5yb3dLZXldXX0pfSxyb3dzU2VsZWN0ZWROdW1iZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZC5sZW5ndGh9fSxtZXRob2RzOntpc1Jvd1NlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09dGhpcy5zZWxlY3RlZEtleXNbdF19LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdChcInVwZGF0ZTpzZWxlY3RlZFwiLFtdKX0sX191cGRhdGVTZWxlY3Rpb246ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXRoaXM7dGhpcy5zaW5nbGVTZWxlY3Rpb24/dGhpcy4kZW1pdChcInVwZGF0ZTpzZWxlY3RlZFwiLGk/ZTpbXSk6dGhpcy4kZW1pdChcInVwZGF0ZTpzZWxlY3RlZFwiLGk/dGhpcy5zZWxlY3RlZC5jb25jYXQoZSk6dGhpcy5zZWxlY3RlZC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXQuaW5jbHVkZXMoZVtzLnJvd0tleV0pfSkpfX19LENvbHVtblNlbGVjdGlvbj17cHJvcHM6e3Zpc2libGVDb2x1bW5zOkFycmF5fSxjb21wdXRlZDp7Y29tcHV0ZWRDb2xzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLGk9ZS5zb3J0Qnkscz1lLmRlc2NlbmRpbmc7cmV0dXJuKHRoaXMudmlzaWJsZUNvbHVtbnM/dGhpcy5jb2x1bW5zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXF1aXJlZHx8dC52aXNpYmxlQ29sdW1ucy5pbmNsdWRlcyhlLm5hbWUpfSk6dGhpcy5jb2x1bW5zKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWxpZ249dC5hbGlnbnx8XCJyaWdodFwiLHQuX19pY29uQ2xhc3M9XCJxLXRhYmxlLXNvcnQtaWNvbiBxLXRhYmxlLXNvcnQtaWNvbi1cIit0LmFsaWduLHQuX190aENsYXNzPVwidGV4dC1cIit0LmFsaWduKyh0LnNvcnRhYmxlP1wiIHNvcnRhYmxlXCI6XCJcIikrKHQubmFtZT09PWk/XCIgc29ydGVkIFwiKyhzP1wic29ydC1kZXNjXCI6XCJcIik6XCJcIiksdC5fX3RkQ2xhc3M9XCJ0ZXh0LVwiK3QuYWxpZ24sdH0pfSxjb21wdXRlZENvbHNNYXA6ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5jb21wdXRlZENvbHMuZm9yRWFjaChmdW5jdGlvbihlKXt0W2UubmFtZV09ZX0pLHR9fX0sRXhwYW5kPXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Jvd3NFeHBhbmRlZDp7fX19fSxRVGFibGU9e25hbWU6XCJRVGFibGVcIixtaXhpbnM6W0Z1bGxzY3JlZW5NaXhpbixUb3AsVGFibGVIZWFkZXIsVGFibGVCb2R5LEJvdHRvbSxTb3J0LEZpbHRlcixQYWdpbmF0aW9uLFJvd1NlbGVjdGlvbixDb2x1bW5TZWxlY3Rpb24sRXhwYW5kXSxwcm9wczp7ZGF0YTp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuW119fSxyb3dLZXk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJpZFwifSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImdyZXktOFwifSxncmlkOkJvb2xlYW4sZGVuc2U6Qm9vbGVhbixjb2x1bW5zOkFycmF5LGxvYWRpbmc6Qm9vbGVhbix0aXRsZTpTdHJpbmcsaGlkZUhlYWRlcjpCb29sZWFuLGhpZGVCb3R0b206Qm9vbGVhbixkYXJrOkJvb2xlYW4sc2VwYXJhdG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiaG9yaXpvbnRhbFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJob3Jpem9udGFsXCIsXCJ2ZXJ0aWNhbFwiLFwiY2VsbFwiLFwibm9uZVwiXS5pbmNsdWRlcyh0KX19LGJpbmFyeVN0YXRlU29ydDpCb29sZWFuLG5vRGF0YUxhYmVsOlN0cmluZyxub1Jlc3VsdHNMYWJlbDpTdHJpbmcsbG9hZGluZ0xhYmVsOlN0cmluZyxzZWxlY3RlZFJvd3NMYWJlbDpGdW5jdGlvbixyb3dzUGVyUGFnZUxhYmVsOlN0cmluZyxwYWdpbmF0aW9uTGFiZWw6RnVuY3Rpb24sdGFibGVTdHlsZTp7dHlwZTpbU3RyaW5nLEFycmF5LE9iamVjdF0sZGVmYXVsdDpcIlwifSx0YWJsZUNsYXNzOnt0eXBlOltTdHJpbmcsQXJyYXksT2JqZWN0XSxkZWZhdWx0OlwiXCJ9fSxjb21wdXRlZDp7Y29tcHV0ZWREYXRhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKCkubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19pbmRleD1lLHR9KTtpZigwPT09dC5sZW5ndGgpcmV0dXJue3Jvd3NOdW1iZXI6MCxyb3dzOltdfTtpZih0aGlzLmlzU2VydmVyU2lkZSlyZXR1cm57cm93czp0fTt2YXIgZT10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbixpPWUuc29ydEJ5LHM9ZS5kZXNjZW5kaW5nLG49ZS5yb3dzUGVyUGFnZTt0aGlzLmZpbHRlciYmKHQ9dGhpcy5maWx0ZXJNZXRob2QodCx0aGlzLmZpbHRlcix0aGlzLmNvbXB1dGVkQ29scyx0aGlzLmdldENlbGxWYWx1ZSkpLHRoaXMuY29sdW1uVG9Tb3J0JiYodD10aGlzLnNvcnRNZXRob2QodCxpLHMpKTt2YXIgbz10Lmxlbmd0aDtyZXR1cm4gbiYmKHQ9dC5zbGljZSh0aGlzLmZpcnN0Um93SW5kZXgsdGhpcy5sYXN0Um93SW5kZXgpKSx7cm93c051bWJlcjpvLHJvd3M6dH19LGNvbXB1dGVkUm93czpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbXB1dGVkRGF0YS5yb3dzfSxjb21wdXRlZFJvd3NOdW1iZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1NlcnZlclNpZGU/dGhpcy5jb21wdXRlZFBhZ2luYXRpb24ucm93c051bWJlcnx8MDp0aGlzLmNvbXB1dGVkRGF0YS5yb3dzTnVtYmVyfSxub3RoaW5nVG9EaXNwbGF5OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmNvbXB1dGVkUm93cy5sZW5ndGh9LGlzU2VydmVyU2lkZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5yb3dzTnVtYmVyfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse2NsYXNzOntcInEtdGFibGUtZ3JpZFwiOnRoaXMuZ3JpZCxcInEtdGFibGUtY29udGFpbmVyXCI6ITAsXCJxLXRhYmxlLWRhcmtcIjp0aGlzLmRhcmssXCJxLXRhYmxlLWRlbnNlXCI6dGhpcy5kZW5zZSxmdWxsc2NyZWVuOnRoaXMuaW5GdWxsc2NyZWVuLHNjcm9sbDp0aGlzLmluRnVsbHNjcmVlbn19LFt0aGlzLmdldFRvcCh0KSx0aGlzLmdldEJvZHkodCksdGhpcy5nZXRCb3R0b20odCldKX0sbWV0aG9kczp7cmVxdWVzdFNlcnZlckludGVyYWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtlLiRlbWl0KFwicmVxdWVzdFwiLHtwYWdpbmF0aW9uOnQucGFnaW5hdGlvbnx8ZS5jb21wdXRlZFBhZ2luYXRpb24sZmlsdGVyOnQuZmlsdGVyfHxlLmZpbHRlcixnZXRDZWxsVmFsdWU6ZS5nZXRDZWxsVmFsdWV9KX0pfSxnZXRCb2R5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT0hdGhpcy5oaWRlSGVhZGVyO2lmKHRoaXMuZ3JpZCl7dmFyIHM9dGhpcy4kc2NvcGVkU2xvdHMuaXRlbTtpZih2b2lkIDAhPT1zKXJldHVybltpJiZ0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1taWRkbGUgc2Nyb2xsXCJ9LFt0KFwidGFibGVcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlXCIrKHRoaXMuZGFyaz9cIiBxLXRhYmxlLWRhcmtcIjpcIlwiKX0sW3RoaXMuZ2V0VGFibGVIZWFkZXIodCldKV0pfHxudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3dcIn0sdGhpcy5jb21wdXRlZFJvd3MubWFwKGZ1bmN0aW9uKHQpe3ZhciBpPXRbZS5yb3dLZXldLG49ZS5pc1Jvd1NlbGVjdGVkKGkpO3JldHVybiBzKGUuYWRkQm9keVJvd01ldGEoe2tleTppLHJvdzp0LGNvbHM6ZS5jb21wdXRlZENvbHMsY29sc01hcDplLmNvbXB1dGVkQ29sc01hcCxfX3RyQ2xhc3M6bj9cInNlbGVjdGVkXCI6XCJcIn0pKX0pKV19cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLW1pZGRsZSBzY3JvbGxcIixjbGFzczp0aGlzLnRhYmxlQ2xhc3Msc3R5bGU6dGhpcy50YWJsZVN0eWxlfSxbdChcInRhYmxlXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZSBxLXRhYmxlLVwiK3RoaXMuc2VwYXJhdG9yK1wiLXNlcGFyYXRvclwiKyh0aGlzLmRhcms/XCIgcS10YWJsZS1kYXJrXCI6XCJcIil9LFtpJiZ0aGlzLmdldFRhYmxlSGVhZGVyKHQpfHxudWxsLHRoaXMuZ2V0VGFibGVCb2R5KHQpXSldKX19fSxRVHI9e25hbWU6XCJRVHJcIixwcm9wczp7cHJvcHM6T2JqZWN0fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJ0clwiLCF0aGlzLnByb3BzfHx0aGlzLnByb3BzLmhlYWRlcj97fTp7Y2xhc3M6dGhpcy5wcm9wcy5fX3RyQ2xhc3N9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUVRkPXtuYW1lOlwiUVRkXCIscHJvcHM6e3Byb3BzOk9iamVjdCxhdXRvV2lkdGg6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnByb3BzKXJldHVybiB0KFwidGRcIix7Y2xhc3M6e1wicS10YWJsZS1jb2wtYXV0by13aWR0aFwiOnRoaXMuYXV0b1dpZHRofX0sdGhpcy4kc2xvdHMuZGVmYXVsdCk7dmFyIGUsaT10aGlzLiR2bm9kZS5rZXk7aWYoaSl7aWYoIShlPXRoaXMucHJvcHMuY29sc01hcFtpXSkpcmV0dXJufWVsc2UgZT10aGlzLnByb3BzLmNvbDtyZXR1cm4gdChcInRkXCIse2NsYXNzOltlLl9fdGRDbGFzcyx7XCJxLXRhYmxlLWNvbC1hdXRvLXdpZHRoXCI6dGhpcy5hdXRvV2lkdGh9XX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRVGFibGVDb2x1bW5zPXtuYW1lOlwiUVRhYmxlQ29sdW1uc1wiLHByb3BzOnt2YWx1ZTp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH0sbGFiZWw6U3RyaW5nLGNvbHVtbnM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LGNvbG9yOlN0cmluZyxkYXJrOkJvb2xlYW59LGNvbXB1dGVkOntjb21wdXRlZE9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5yZXF1aXJlZH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dmFsdWU6dC5uYW1lLGxhYmVsOnQubGFiZWx9fSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRU2VsZWN0LHtwcm9wczp7bXVsdGlwbGU6ITAsdG9nZ2xlOiEwLHZhbHVlOnRoaXMudmFsdWUsb3B0aW9uczp0aGlzLmNvbXB1dGVkT3B0aW9ucyxkaXNwbGF5VmFsdWU6dGhpcy5sYWJlbHx8dGhpcy4kcS5pMThuLnRhYmxlLmNvbHVtbnMsY29sb3I6dGhpcy5jb2xvcixkYXJrOnRoaXMuZGFyayxoaWRlVW5kZXJsaW5lOiEwfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS4kZW1pdChcImlucHV0XCIsdCl9LGNoYW5nZTpmdW5jdGlvbih0KXtlLiRlbWl0KFwiY2hhbmdlXCIsdCl9fX0pfX0sUVRpbWVsaW5lPXtuYW1lOlwiUVRpbWVsaW5lXCIscHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntfX3RpbWVsaW5lOnRoaXN9fSxwcm9wczp7Y29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHJlc3BvbnNpdmU6Qm9vbGVhbixub0hvdmVyOkJvb2xlYW4sZGFyazpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJ1bFwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmVcIixjbGFzczp7XCJxLXRpbWVsaW5lLWRhcmtcIjp0aGlzLmRhcmssXCJxLXRpbWVsaW5lLXJlc3BvbnNpdmVcIjp0aGlzLnJlc3BvbnNpdmUsXCJxLXRpbWVsaW5lLWhvdmVyXCI6IXRoaXMubm9Ib3Zlcn19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUVRpbWVsaW5lRW50cnk9e25hbWU6XCJRVGltZWxpbmVFbnRyeVwiLGluamVjdDp7X190aW1lbGluZTp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRVGltZWxpbmVFbnRyeSBuZWVkcyB0byBiZSBjaGlsZCBvZiBRVGltZWxpbmVcIil9fX0scHJvcHM6e2hlYWRpbmc6Qm9vbGVhbix0YWc6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJoM1wifSxzaWRlOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicmlnaHRcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wibGVmdFwiLFwicmlnaHRcIl0uaW5jbHVkZXModCl9fSxpY29uOlN0cmluZyxjb2xvcjpTdHJpbmcsdGl0bGU6U3RyaW5nLHN1YnRpdGxlOlN0cmluZ30sY29tcHV0ZWQ6e2NvbG9yQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5cInRleHQtXCIrKHRoaXMuY29sb3J8fHRoaXMuX190aW1lbGluZS5jb2xvcil9LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXCJxLXRpbWVsaW5lLWVudHJ5LVwiKyhcImxlZnRcIj09PXRoaXMuc2lkZT9cImxlZnRcIjpcInJpZ2h0XCIpLHRoaXMuaWNvbj9cInEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uXCI6XCJcIl19fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGVhZGluZz90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10aW1lbGluZS1oZWFkaW5nXCJ9LFt0KFwiZGl2XCIpLHQoXCJkaXZcIiksdCh0aGlzLnRhZyx7c3RhdGljQ2xhc3M6XCJxLXRpbWVsaW5lLWhlYWRpbmctdGl0bGVcIn0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKTp0KFwibGlcIix7c3RhdGljQ2xhc3M6XCJxLXRpbWVsaW5lLWVudHJ5XCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbdGhpcy4kc2xvdHMuc3VidGl0bGV8fHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRpbWVsaW5lLXN1YnRpdGxlXCJ9LFt0KFwic3BhblwiLHRoaXMuc3VidGl0bGUpXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtZG90XCIsY2xhc3M6dGhpcy5jb2xvckNsYXNzfSxbdGhpcy5pY29uP3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMuaWNvbn19KTpudWxsXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtY29udGVudFwifSwodGhpcy4kc2xvdHMudGl0bGV8fFt0KFwiaDZcIix7c3RhdGljQ2xhc3M6XCJxLXRpbWVsaW5lLXRpdGxlXCJ9LFt0aGlzLnRpdGxlXSldKS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCkpXSl9fSxRVG9vbGJhcj17bmFtZTpcIlFUb29sYmFyXCIscHJvcHM6e2NvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSx0ZXh0Q29sb3I6U3RyaW5nLGludmVydGVkOkJvb2xlYW4sZ2xvc3N5OkJvb2xlYW59LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W1wicS10b29sYmFyLVwiKyh0aGlzLmludmVydGVkP1wiaW52ZXJ0ZWRcIjpcIm5vcm1hbFwiKV07cmV0dXJuIHRoaXMuZ2xvc3N5JiZ0LnB1c2goXCJnbG9zc3lcIiksdGhpcy5pbnZlcnRlZD90LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8dGhpcy5jb2xvcikpOih0LnB1c2goXCJiZy1cIit0aGlzLmNvbG9yKSx0LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8XCJ3aGl0ZVwiKSkpLHR9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRvb2xiYXIgcm93IG5vLXdyYXAgaXRlbXMtY2VudGVyIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFUb29sYmFyVGl0bGU9e25hbWU6XCJRVG9vbGJhclRpdGxlXCIscHJvcHM6e3NocmluazpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRvb2xiYXItdGl0bGVcIixjbGFzczp0aGlzLnNocmluaz9cImNvbC1hdXRvXCI6bnVsbH0sW3RoaXMuJHNsb3RzLmRlZmF1bHQsdGhpcy4kc2xvdHMuc3VidGl0bGU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9vbGJhci1zdWJ0aXRsZVwifSx0aGlzLiRzbG90cy5zdWJ0aXRsZSk6bnVsbF0pfX0sUVRyZWU9e25hbWU6XCJRVHJlZVwiLGRpcmVjdGl2ZXM6e1JpcHBsZTpSaXBwbGV9LHByb3BzOntub2RlczpBcnJheSxub2RlS2V5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sbGFiZWxLZXk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJsYWJlbFwifSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImdyZXlcIn0sY29udHJvbENvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nLGRhcms6Qm9vbGVhbixpY29uOlN0cmluZyx0aWNrU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJub25lXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcIm5vbmVcIixcInN0cmljdFwiLFwibGVhZlwiLFwibGVhZi1maWx0ZXJlZFwiXS5pbmNsdWRlcyh0KX19LHRpY2tlZDpBcnJheSxleHBhbmRlZDpBcnJheSxzZWxlY3RlZDp7fSxkZWZhdWx0RXhwYW5kQWxsOkJvb2xlYW4sYWNjb3JkaW9uOkJvb2xlYW4sZmlsdGVyOlN0cmluZyxmaWx0ZXJNZXRob2Q6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmdW5jdGlvbih0LGUpe3ZhciBpPWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdFt0aGlzLmxhYmVsS2V5XSYmdFt0aGlzLmxhYmVsS2V5XS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoaSk+LTF9fSxkdXJhdGlvbjpOdW1iZXIsbm9Ob2Rlc0xhYmVsOlN0cmluZyxub1Jlc3VsdHNMYWJlbDpTdHJpbmd9LGNvbXB1dGVkOntoYXNSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub1JpcHBsZX0sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybltcInRleHQtXCIrdGhpcy5jb2xvcix7XCJxLXRyZWUtZGFya1wiOnRoaXMuZGFya31dfSxoYXNTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5zZWxlY3RlZH0sY29tcHV0ZWRJY29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8dGhpcy4kcS5pY29uLnRyZWUuaWNvbn0sY29tcHV0ZWRDb250cm9sQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sQ29sb3J8fHRoaXMuY29sb3J9LGNvbnRlbnRDbGFzczpmdW5jdGlvbigpe3JldHVyblwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fCh0aGlzLmRhcms/XCJ3aGl0ZVwiOlwiYmxhY2tcIikpfSxtZXRhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXt9LGk9ZnVuY3Rpb24ocyxuKXt2YXIgbz1zLnRpY2tTdHJhdGVneXx8KG4/bi50aWNrU3RyYXRlZ3k6dC50aWNrU3RyYXRlZ3kpLHI9c1t0Lm5vZGVLZXldLGE9cy5jaGlsZHJlbiYmcy5jaGlsZHJlbi5sZW5ndGg+MCxsPSFhLGM9IXMuZGlzYWJsZWQmJnQuaGFzU2VsZWN0aW9uJiYhMSE9PXMuc2VsZWN0YWJsZSxoPSFzLmRpc2FibGVkJiYhMSE9PXMuZXhwYW5kYWJsZSx1PVwibm9uZVwiIT09byxkPVwic3RyaWN0XCI9PT1vLHA9XCJsZWFmLWZpbHRlcmVkXCI9PT1vLGY9XCJsZWFmXCI9PT1vfHxcImxlYWYtZmlsdGVyZWRcIj09PW8sbT0hcy5kaXNhYmxlZCYmITEhPT1zLnRpY2thYmxlO2YmJm0mJm4mJiFuLnRpY2thYmxlJiYobT0hMSk7dmFyIGc9cy5sYXp5O2cmJnQubGF6eVtyXSYmKGc9dC5sYXp5W3JdKTt2YXIgdj17a2V5OnIscGFyZW50Om4saXNQYXJlbnQ6YSxpc0xlYWY6bCxsYXp5OmcsZGlzYWJsZWQ6cy5kaXNhYmxlZCxsaW5rOmN8fGgmJihhfHwhMD09PWcpLGNoaWxkcmVuOltdLG1hdGNoZXNGaWx0ZXI6IXQuZmlsdGVyfHx0LmZpbHRlck1ldGhvZChzLHQuZmlsdGVyKSxzZWxlY3RlZDpyPT09dC5zZWxlY3RlZCYmYyxzZWxlY3RhYmxlOmMsZXhwYW5kZWQ6ISFhJiZ0LmlubmVyRXhwYW5kZWQuaW5jbHVkZXMociksZXhwYW5kYWJsZTpoLG5vVGljazpzLm5vVGlja3x8IWQmJmcmJlwibG9hZGVkXCIhPT1nLHRpY2thYmxlOm0sdGlja1N0cmF0ZWd5Om8saGFzVGlja2luZzp1LHN0cmljdFRpY2tpbmc6ZCxsZWFmRmlsdGVyZWRUaWNraW5nOnAsbGVhZlRpY2tpbmc6Zix0aWNrZWQ6ZD90LmlubmVyVGlja2VkLmluY2x1ZGVzKHIpOiEhbCYmdC5pbm5lclRpY2tlZC5pbmNsdWRlcyhyKX07aWYoZVtyXT12LGEmJih2LmNoaWxkcmVuPXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQsdil9KSx0LmZpbHRlciYmKHYubWF0Y2hlc0ZpbHRlcnx8KHYubWF0Y2hlc0ZpbHRlcj12LmNoaWxkcmVuLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2hlc0ZpbHRlcn0pKSx2Lm1hdGNoZXNGaWx0ZXImJiF2Lm5vVGljayYmIXYuZGlzYWJsZWQmJnYudGlja2FibGUmJnAmJnYuY2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIXQubWF0Y2hlc0ZpbHRlcnx8dC5ub1RpY2t8fCF0LnRpY2thYmxlfSkmJih2LnRpY2thYmxlPSExKSksdi5tYXRjaGVzRmlsdGVyJiYodi5ub1RpY2t8fGR8fCF2LmNoaWxkcmVuLmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vVGlja30pfHwodi5ub1RpY2s9ITApLGYmJih2LnRpY2tlZD0hMSx2LmluZGV0ZXJtaW5hdGU9di5jaGlsZHJlbi5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluZGV0ZXJtaW5hdGV9KSwhdi5pbmRldGVybWluYXRlKSkpKXt2YXIgYj12LmNoaWxkcmVuLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBlLnRpY2tlZD90KzE6dH0sMCk7Yj09PXYuY2hpbGRyZW4ubGVuZ3RoP3YudGlja2VkPSEwOmI+MCYmKHYuaW5kZXRlcm1pbmF0ZT0hMCl9cmV0dXJuIHZ9O3JldHVybiB0aGlzLm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGkodCxudWxsKX0pLGV9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2xhenk6e30saW5uZXJUaWNrZWQ6dGhpcy50aWNrZWR8fFtdLGlubmVyRXhwYW5kZWQ6dGhpcy5leHBhbmRlZHx8W119fSx3YXRjaDp7dGlja2VkOmZ1bmN0aW9uKHQpe3RoaXMuaW5uZXJUaWNrZWQ9dH0sZXhwYW5kZWQ6ZnVuY3Rpb24odCl7dGhpcy5pbm5lckV4cGFuZGVkPXR9fSxtZXRob2RzOntnZXROb2RlQnlLZXk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPVtdLnJlZHVjZSxzPWZ1bmN0aW9uKG4sbyl7cmV0dXJuIG58fCFvP246QXJyYXkuaXNBcnJheShvKT9pLmNhbGwoT2JqZWN0KG8pLHMsbik6b1tlLm5vZGVLZXldPT09dD9vOm8uY2hpbGRyZW4/cyhudWxsLG8uY2hpbGRyZW4pOnZvaWQgMH07cmV0dXJuIHMobnVsbCx0aGlzLm5vZGVzKX0sZ2V0VGlja2VkTm9kZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmlubmVyVGlja2VkLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5nZXROb2RlQnlLZXkoZSl9KX0sZ2V0RXhwYW5kZWROb2RlczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaW5uZXJFeHBhbmRlZC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0Tm9kZUJ5S2V5KGUpfSl9LGlzRXhwYW5kZWQ6ZnVuY3Rpb24odCl7cmV0dXJuISghdHx8IXRoaXMubWV0YVt0XSkmJnRoaXMubWV0YVt0XS5leHBhbmRlZH0sY29sbGFwc2VBbGw6ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLmV4cGFuZGVkP3RoaXMuJGVtaXQoXCJ1cGRhdGU6ZXhwYW5kZWRcIixbXSk6dGhpcy5pbm5lckV4cGFuZGVkPVtdfSxleHBhbmRBbGw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5pbm5lckV4cGFuZGVkLGk9ZnVuY3Rpb24ocyl7cy5jaGlsZHJlbiYmcy5jaGlsZHJlbi5sZW5ndGg+MCYmITEhPT1zLmV4cGFuZGFibGUmJiEwIT09cy5kaXNhYmxlZCYmKGUucHVzaChzW3Qubm9kZUtleV0pLHMuY2hpbGRyZW4uZm9yRWFjaChpKSl9O3RoaXMubm9kZXMuZm9yRWFjaChpKSx2b2lkIDAhPT10aGlzLmV4cGFuZGVkP3RoaXMuJGVtaXQoXCJ1cGRhdGU6ZXhwYW5kZWRcIixlKTp0aGlzLmlubmVyRXhwYW5kZWQ9ZX0sc2V0RXhwYW5kZWQ6ZnVuY3Rpb24odCxlLGkscyl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1pJiYoaT10aGlzLmdldE5vZGVCeUtleSh0KSksdm9pZCAwPT09cyYmKHM9dGhpcy5tZXRhW3RdKSxzLmxhenkmJlwibG9hZGVkXCIhPT1zLmxhenkpe2lmKFwibG9hZGluZ1wiPT09cy5sYXp5KXJldHVybjt0aGlzLiRzZXQodGhpcy5sYXp5LHQsXCJsb2FkaW5nXCIpLHRoaXMuJGVtaXQoXCJsYXp5LWxvYWRcIix7bm9kZTppLGtleTp0LGRvbmU6ZnVuY3Rpb24oZSl7bi5sYXp5W3RdPVwibG9hZGVkXCIsZSYmKGkuY2hpbGRyZW49ZSksbi4kbmV4dFRpY2soZnVuY3Rpb24oKXt2YXIgZT1uLm1ldGFbdF07ZSYmZS5pc1BhcmVudCYmbi5fX3NldEV4cGFuZGVkKHQsITApfSl9LGZhaWw6ZnVuY3Rpb24oKXtuLiRkZWxldGUobi5sYXp5LHQpfX0pfWVsc2Ugcy5pc1BhcmVudCYmcy5leHBhbmRhYmxlJiZ0aGlzLl9fc2V0RXhwYW5kZWQodCxlKX0sX19zZXRFeHBhbmRlZDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMscz10aGlzLmlubmVyRXhwYW5kZWQsbj12b2lkIDAhPT10aGlzLmV4cGFuZGVkO2lmKG4mJihzPXMuc2xpY2UoKSksZSl7aWYodGhpcy5hY2NvcmRpb24mJnRoaXMubWV0YVt0XSl7dmFyIG89W107dGhpcy5tZXRhW3RdLnBhcmVudD90aGlzLm1ldGFbdF0ucGFyZW50LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5rZXkhPT10JiZlLmV4cGFuZGFibGUmJm8ucHVzaChlLmtleSl9KTp0aGlzLm5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHM9ZVtpLm5vZGVLZXldO3MhPT10JiZvLnB1c2gocyl9KSxvLmxlbmd0aD4wJiYocz1zLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hby5pbmNsdWRlcyh0KX0pKX1zPXMuY29uY2F0KFt0XSkuZmlsdGVyKGZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gaS5pbmRleE9mKHQpPT09ZX0pfWVsc2Ugcz1zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KTtuP3RoaXMuJGVtaXQoXCJ1cGRhdGU6ZXhwYW5kZWRcIixzKTp0aGlzLmlubmVyRXhwYW5kZWQ9c30saXNUaWNrZWQ6ZnVuY3Rpb24odCl7cmV0dXJuISghdHx8IXRoaXMubWV0YVt0XSkmJnRoaXMubWV0YVt0XS50aWNrZWR9LHNldFRpY2tlZDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuaW5uZXJUaWNrZWQscz12b2lkIDAhPT10aGlzLnRpY2tlZDtzJiYoaT1pLnNsaWNlKCkpLGk9ZT9pLmNvbmNhdCh0KS5maWx0ZXIoZnVuY3Rpb24odCxlLGkpe3JldHVybiBpLmluZGV4T2YodCk9PT1lfSk6aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXQuaW5jbHVkZXMoZSl9KSxzJiZ0aGlzLiRlbWl0KFwidXBkYXRlOnRpY2tlZFwiLGkpfSxfX2dldFNsb3RTY29wZTpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpcyxuPXt0cmVlOnRoaXMsbm9kZTp0LGtleTppLGNvbG9yOnRoaXMuY29sb3IsZGFyazp0aGlzLmRhcmt9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobixcImV4cGFuZGVkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLmV4cGFuZGVkfSxzZXQ6ZnVuY3Rpb24odCl7dCE9PWUuZXhwYW5kZWQmJnMuc2V0RXhwYW5kZWQoaSx0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixcInRpY2tlZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS50aWNrZWR9LHNldDpmdW5jdGlvbih0KXt0IT09ZS50aWNrZWQmJnMuc2V0VGlja2VkKFtpXSx0KX19KSxufSxfX2dldENoaWxkcmVuOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztyZXR1cm4odGhpcy5maWx0ZXI/ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGkubWV0YVt0W2kubm9kZUtleV1dLm1hdGNoZXNGaWx0ZXJ9KTplKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGkuX19nZXROb2RlKHQsZSl9KX0sX19nZXROb2RlTWVkaWE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5pY29uP3QoUUljb24se3N0YXRpY0NsYXNzOlwicS10cmVlLWljb24gcS1tci1zbVwiLHByb3BzOntuYW1lOmUuaWNvbixjb2xvcjplLmljb25Db2xvcn19KTplLmltZ3x8ZS5hdmF0YXI/dChcImltZ1wiLHtzdGF0aWNDbGFzczpcInEtdHJlZS1pbWcgcS1tci1zbVwiLGNsYXNzOnthdmF0YXI6ZS5hdmF0YXJ9LGF0dHJzOntzcmM6ZS5pbWd8fGUuYXZhdGFyfX0pOnZvaWQgMH0sX19nZXROb2RlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxzPWVbdGhpcy5ub2RlS2V5XSxuPXRoaXMubWV0YVtzXSxvPWUuaGVhZGVyJiZ0aGlzLiRzY29wZWRTbG90c1tcImhlYWRlci1cIitlLmhlYWRlcl18fHRoaXMuJHNjb3BlZFNsb3RzW1wiZGVmYXVsdC1oZWFkZXJcIl0scj1uLmlzUGFyZW50P3RoaXMuX19nZXRDaGlsZHJlbih0LGUuY2hpbGRyZW4pOltdLGE9ci5sZW5ndGg+MHx8bi5sYXp5JiZcImxvYWRlZFwiIT09bi5sYXp5LGw9ZS5ib2R5JiZ0aGlzLiRzY29wZWRTbG90c1tcImJvZHktXCIrZS5ib2R5XXx8dGhpcy4kc2NvcGVkU2xvdHNbXCJkZWZhdWx0LWJvZHlcIl0sYz1vfHxsP3RoaXMuX19nZXRTbG90U2NvcGUoZSxuLHMpOm51bGw7cmV0dXJuIGwmJihsPXQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRyZWUtbm9kZS1ib2R5IHJlbGF0aXZlLXBvc2l0aW9uXCJ9LFt0KFwiZGl2XCIse2NsYXNzOnRoaXMuY29udGVudENsYXNzfSxbbChjKV0pXSkpLHQoXCJkaXZcIix7a2V5OnMsc3RhdGljQ2xhc3M6XCJxLXRyZWUtbm9kZVwiLGNsYXNzOntcInEtdHJlZS1ub2RlLXBhcmVudFwiOmEsXCJxLXRyZWUtbm9kZS1jaGlsZFwiOiFhfX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRyZWUtbm9kZS1oZWFkZXIgcmVsYXRpdmUtcG9zaXRpb24gcm93IG5vLXdyYXAgaXRlbXMtY2VudGVyXCIsY2xhc3M6e1wicS10cmVlLW5vZGUtbGlua1wiOm4ubGluayxcInEtdHJlZS1ub2RlLXNlbGVjdGVkXCI6bi5zZWxlY3RlZCxkaXNhYmxlZDpuLmRpc2FibGVkfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtpLl9fb25DbGljayhlLG4pfX0sZGlyZWN0aXZlczpuLnNlbGVjdGFibGU/W3tuYW1lOlwicmlwcGxlXCJ9XTpudWxsfSxbXCJsb2FkaW5nXCI9PT1uLmxhenk/dChRU3Bpbm5lcix7c3RhdGljQ2xhc3M6XCJxLXRyZWUtbm9kZS1oZWFkZXItbWVkaWEgcS1tci14c1wiLHByb3BzOntjb2xvcjp0aGlzLmNvbXB1dGVkQ29udHJvbENvbG9yfX0pOmE/dChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLXRyZWUtYXJyb3cgcS1tci14cyB0cmFuc2l0aW9uLWdlbmVyaWNcIixjbGFzczp7XCJxLXRyZWUtYXJyb3ctcm90YXRlXCI6bi5leHBhbmRlZH0scHJvcHM6e25hbWU6dGhpcy5jb21wdXRlZEljb259LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbih0KXtpLl9fb25FeHBhbmRDbGljayhlLG4sdCl9fX0pOm51bGwsdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJyb3cgbm8td3JhcCBpdGVtcy1jZW50ZXJcIixjbGFzczp0aGlzLmNvbnRlbnRDbGFzc30sW24uaGFzVGlja2luZyYmIW4ubm9UaWNrP3QoUUNoZWNrYm94LHtzdGF0aWNDbGFzczpcInEtbXIteHNcIixwcm9wczp7dmFsdWU6bi5pbmRldGVybWluYXRlP251bGw6bi50aWNrZWQsY29sb3I6dGhpcy5jb21wdXRlZENvbnRyb2xDb2xvcixkYXJrOnRoaXMuZGFyayxrZWVwQ29sb3I6ITAsZGlzYWJsZTohbi50aWNrYWJsZX0sb246e2lucHV0OmZ1bmN0aW9uKHQpe2kuX19vblRpY2tlZENsaWNrKGUsbix0KX19fSk6bnVsbCxvP28oYyk6W3RoaXMuX19nZXROb2RlTWVkaWEodCxlKSx0KFwic3BhblwiLGVbdGhpcy5sYWJlbEtleV0pXV0pXSksYT90KFFTbGlkZVRyYW5zaXRpb24se3Byb3BzOntkdXJhdGlvbjp0aGlzLmR1cmF0aW9ufX0sW3QoXCJkaXZcIix7ZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIsdmFsdWU6bi5leHBhbmRlZH1dLHN0YXRpY0NsYXNzOlwicS10cmVlLW5vZGUtY29sbGFwc2libGVcIixjbGFzczpcInRleHQtXCIrdGhpcy5jb2xvcn0sW2wsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdHJlZS1jaGlsZHJlblwiLGNsYXNzOntkaXNhYmxlZDpuLmRpc2FibGVkfX0scildKV0pOmxdKX0sX19vbkNsaWNrOmZ1bmN0aW9uKHQsZSl7dGhpcy5oYXNTZWxlY3Rpb24/ZS5zZWxlY3RhYmxlJiZ0aGlzLiRlbWl0KFwidXBkYXRlOnNlbGVjdGVkXCIsZS5rZXkhPT10aGlzLnNlbGVjdGVkP2Uua2V5Om51bGwpOnRoaXMuX19vbkV4cGFuZENsaWNrKHQsZSksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5oYW5kbGVyJiZ0LmhhbmRsZXIodCl9LF9fb25FeHBhbmRDbGljazpmdW5jdGlvbih0LGUsaSl7dm9pZCAwIT09aSYmaS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnNldEV4cGFuZGVkKGUua2V5LCFlLmV4cGFuZGVkLHQsZSl9LF9fb25UaWNrZWRDbGljazpmdW5jdGlvbih0LGUsaSl7aWYoZS5pbmRldGVybWluYXRlJiZpJiYoaT0hMSksZS5zdHJpY3RUaWNraW5nKXRoaXMuc2V0VGlja2VkKFtlLmtleV0saSk7ZWxzZSBpZihlLmxlYWZUaWNraW5nKXt2YXIgcz1bXSxuPWZ1bmN0aW9uKHQpe3QuaXNQYXJlbnQ/KGl8fHQubm9UaWNrfHwhdC50aWNrYWJsZXx8cy5wdXNoKHQua2V5KSx0LmxlYWZUaWNraW5nJiZ0LmNoaWxkcmVuLmZvckVhY2gobikpOnQubm9UaWNrfHwhdC50aWNrYWJsZXx8dC5sZWFmRmlsdGVyZWRUaWNraW5nJiYhdC5tYXRjaGVzRmlsdGVyfHxzLnB1c2godC5rZXkpfTtuKGUpLHRoaXMuc2V0VGlja2VkKHMsaSl9fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19nZXRDaGlsZHJlbih0LHRoaXMubm9kZXMpO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10cmVlIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSwwPT09ZS5sZW5ndGg/dGhpcy5maWx0ZXI/dGhpcy5ub1Jlc3VsdHNMYWJlbHx8dGhpcy4kcS5pMThuLnRyZWUubm9SZXN1bHRzOnRoaXMubm9Ob2Rlc0xhYmVsfHx0aGlzLiRxLmkxOG4udHJlZS5ub05vZGVzOmUpfSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0RXhwYW5kQWxsJiZ0aGlzLmV4cGFuZEFsbCgpfX07ZnVuY3Rpb24gaW5pdEZpbGUodCl7dC5fX2RvbmVVcGxvYWRpbmc9ITEsdC5fX2ZhaWxlZD0hMSx0Ll9fdXBsb2FkZWQ9MCx0Ll9fcHJvZ3Jlc3M9MH12YXIgUVVwbG9hZGVyPXtuYW1lOlwiUVVwbG9hZGVyXCIsbWl4aW5zOltGcmFtZU1peGluXSxwcm9wczp7bmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImZpbGVcIn0saGVhZGVyczpPYmplY3QsdXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sdXJsRmFjdG9yeTp7dHlwZTpGdW5jdGlvbixyZXF1aXJlZDohMX0sdXBsb2FkRmFjdG9yeTpGdW5jdGlvbixhZGRpdGlvbmFsRmllbGRzOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LG5vQ29udGVudFR5cGU6Qm9vbGVhbixtZXRob2Q6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJQT1NUXCJ9LGZpbHRlcjpGdW5jdGlvbixleHRlbnNpb25zOlN0cmluZyxtdWx0aXBsZTpCb29sZWFuLGhpZGVVcGxvYWRCdXR0b246Qm9vbGVhbixoaWRlVXBsb2FkUHJvZ3Jlc3M6Qm9vbGVhbixub1RodW1ibmFpbHM6Qm9vbGVhbixhdXRvRXhwYW5kOkJvb2xlYW4sZXhwYW5kU3R5bGU6W0FycmF5LFN0cmluZyxPYmplY3RdLGV4cGFuZENsYXNzOltBcnJheSxTdHJpbmcsT2JqZWN0XSx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbixzZW5kUmF3Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cXVldWU6W10sZmlsZXM6W10sdXBsb2FkaW5nOiExLHVwbG9hZGVkU2l6ZTowLHRvdGFsU2l6ZTowLHhocnM6W10sZm9jdXNlZDohMSxkbmQ6ITEsZXhwYW5kZWQ6ITF9fSxjb21wdXRlZDp7cXVldWVMZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZS5sZW5ndGh9LGhhc0V4cGFuZGVkQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGVzLmxlbmd0aD4wfSxsYWJlbDpmdW5jdGlvbigpe3ZhciB0PWh1bWFuU3RvcmFnZVNpemUodGhpcy50b3RhbFNpemUpO3JldHVybiB0aGlzLnVwbG9hZGluZz90aGlzLnByb2dyZXNzLnRvRml4ZWQoMikrXCIlIChcIitodW1hblN0b3JhZ2VTaXplKHRoaXMudXBsb2FkZWRTaXplKStcIiAvIFwiK3QrXCIpXCI6dGhpcy5xdWV1ZUxlbmd0aCtcIiAoXCIrdCtcIilcIn0scHJvZ3Jlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b3RhbFNpemU/TWF0aC5taW4oOTkuOTksdGhpcy51cGxvYWRlZFNpemUvdGhpcy50b3RhbFNpemUqMTAwKTowfSxhZGREaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGV8fCF0aGlzLm11bHRpcGxlJiZ0aGlzLnF1ZXVlTGVuZ3RoPj0xfSxmaWxlc1N0eWxlOmZ1bmN0aW9uKCl7aWYodGhpcy5tYXhIZWlnaHQpcmV0dXJue21heEhlaWdodDp0aGlzLm1heEhlaWdodH19LGRuZENsYXNzOmZ1bmN0aW9uKCl7dmFyIHQ9W1widGV4dC1cIit0aGlzLmNvbG9yXTtyZXR1cm4gdGhpcy5pc0ludmVydGVkJiZ0LnB1c2goXCJpbnZlcnRlZFwiKSx0fSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJue1wicS11cGxvYWRlci1leHBhbmRlZFwiOnRoaXMuZXhwYW5kZWQsXCJxLXVwbG9hZGVyLWRhcmtcIjp0aGlzLmRhcmssXCJxLXVwbG9hZGVyLWZpbGVzLW5vLWJvcmRlclwiOnRoaXMuaXNJbnZlcnRlZHx8IXRoaXMuaGlkZVVuZGVybGluZX19LHByb2dyZXNzQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXJrP1wid2hpdGVcIjpcImdyZXlcIn0sY29tcHV0ZWRFeHRlbnNpb25zOmZ1bmN0aW9uKCl7aWYodGhpcy5leHRlbnNpb25zKXJldHVybiB0aGlzLmV4dGVuc2lvbnMuc3BsaXQoXCIsXCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odD10LnRyaW0oKSkuZW5kc1dpdGgoXCIvKlwiKSYmKHQ9dC5zbGljZSgwLHQubGVuZ3RoLTEpKSx0fSl9fSx3YXRjaDp7aGFzRXhwYW5kZWRDb250ZW50OmZ1bmN0aW9uKHQpeyExPT09dD90aGlzLmV4cGFuZGVkPSExOnRoaXMuYXV0b0V4cGFuZCYmKHRoaXMuZXhwYW5kZWQ9ITApfX0sbWV0aG9kczp7YWRkOmZ1bmN0aW9uKHQpe3QmJnRoaXMuX19hZGQobnVsbCx0KX0sX19vbkRyYWdPdmVyOmZ1bmN0aW9uKHQpe3N0b3BBbmRQcmV2ZW50KHQpLHRoaXMuZG5kPSEwfSxfX29uRHJhZ0xlYXZlOmZ1bmN0aW9uKHQpe3N0b3BBbmRQcmV2ZW50KHQpLHRoaXMuZG5kPSExfSxfX29uRHJvcDpmdW5jdGlvbih0KXtzdG9wQW5kUHJldmVudCh0KSx0aGlzLmRuZD0hMTt2YXIgZT10LmRhdGFUcmFuc2Zlci5maWxlczswIT09ZS5sZW5ndGgmJihlPXRoaXMubXVsdGlwbGU/ZTpbZVswXV0sdGhpcy5fX2FkZChudWxsLGUpKX0sX19maWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHQsZnVuY3Rpb24odCl7cmV0dXJuIGUuY29tcHV0ZWRFeHRlbnNpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQudHlwZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoZS50b1VwcGVyQ2FzZSgpKXx8dC5uYW1lLnRvVXBwZXJDYXNlKCkuZW5kc1dpdGgoZS50b1VwcGVyQ2FzZSgpKX0pfSl9LF9fYWRkOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztpZighdGhpcy5hZGREaXNhYmxlZCYmKGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZXx8dC50YXJnZXQuZmlsZXMpLCF0aGlzLmV4dGVuc2lvbnN8fDAhPT0oZT10aGlzLl9fZmlsdGVyKGUpKS5sZW5ndGgpKXt0aGlzLiRyZWZzLmZpbGUudmFsdWU9XCJcIjt2YXIgcz1bXTtlPWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFpLnF1ZXVlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQubmFtZT09PWUubmFtZX0pfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5maWx0ZXImJihlPXRoaXMuZmlsdGVyKGUpKSwoZT1lLm1hcChmdW5jdGlvbih0KXtpZihpbml0RmlsZSh0KSx0Ll9fc2l6ZT1odW1hblN0b3JhZ2VTaXplKHQuc2l6ZSksdC5fX3RpbWVzdGFtcD0obmV3IERhdGUpLmdldFRpbWUoKSxpLm5vVGh1bWJuYWlsc3x8IXQudHlwZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJJTUFHRVwiKSlpLnF1ZXVlLnB1c2godCk7ZWxzZXt2YXIgZT1uZXcgRmlsZVJlYWRlcixuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHMsbil7ZS5vbmxvYWQ9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IEltYWdlO24uc3JjPWUudGFyZ2V0LnJlc3VsdCx0Ll9faW1nPW4saS5xdWV1ZS5wdXNoKHQpLGkuX19jb21wdXRlVG90YWxTaXplKCkscyghMCl9LGUub25lcnJvcj1mdW5jdGlvbih0KXtuKHQpfX0pO2UucmVhZEFzRGF0YVVSTCh0KSxzLnB1c2gobil9cmV0dXJuIHR9KSkubGVuZ3RoPjAmJih0aGlzLmZpbGVzPXRoaXMuZmlsZXMuY29uY2F0KGUpLFByb21pc2UuYWxsKHMpLnRoZW4oZnVuY3Rpb24oKXtpLiRlbWl0KFwiYWRkXCIsZSl9KSx0aGlzLl9fY29tcHV0ZVRvdGFsU2l6ZSgpKX19LF9fY29tcHV0ZVRvdGFsU2l6ZTpmdW5jdGlvbigpe3RoaXMudG90YWxTaXplPXRoaXMucXVldWVMZW5ndGg/dGhpcy5xdWV1ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2l6ZX0pLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KTowfSxfX3JlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10Lm5hbWUsaT10Ll9fZG9uZVVwbG9hZGluZzt0aGlzLnVwbG9hZGluZyYmIWk/KHRoaXMuJGVtaXQoXCJyZW1vdmU6YWJvcnRcIix0LHQueGhyKSx0LnhociYmdC54aHIuYWJvcnQoKSx0aGlzLnVwbG9hZGVkU2l6ZS09dC5fX3VwbG9hZGVkKTp0aGlzLiRlbWl0KFwicmVtb3ZlOlwiKyhpP1wiZG9uZVwiOlwiY2FuY2VsXCIpLHQsdC54aHIpLGl8fCh0aGlzLnF1ZXVlPXRoaXMucXVldWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWUhPT1lfSkpLHQuX19yZW1vdmVkPSEwLHRoaXMuZmlsZXM9dGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZSE9PWV9KSx0aGlzLmZpbGVzLmxlbmd0aHx8KHRoaXMudXBsb2FkaW5nPSExKSx0aGlzLl9fY29tcHV0ZVRvdGFsU2l6ZSgpfSxfX3BpY2s6ZnVuY3Rpb24oKXshdGhpcy5hZGREaXNhYmxlZCYmdGhpcy4kcS5wbGF0Zm9ybS5pcy5tb3ppbGxhJiZ0aGlzLiRyZWZzLmZpbGUuY2xpY2soKX0sX19nZXRVcGxvYWRQcm9taXNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoaW5pdEZpbGUodCksdGhpcy51cGxvYWRGYWN0b3J5KXt2YXIgaT1mdW5jdGlvbihpKXt2YXIgcz1pKnQuc2l6ZTtlLnVwbG9hZGVkU2l6ZSs9cy10Ll9fdXBsb2FkZWQsdC5fX3VwbG9hZGVkPXMsdC5fX3Byb2dyZXNzPU1hdGgubWluKDk5LHBhcnNlSW50KDEwMCppLDEwKSksZS4kZm9yY2VVcGRhdGUoKX07cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHMsbil7ZS51cGxvYWRGYWN0b3J5KHQsaSkudGhlbihmdW5jdGlvbih0KXt0Ll9fZG9uZVVwbG9hZGluZz0hMCx0Ll9fcHJvZ3Jlc3M9MTAwLGUuJGVtaXQoXCJ1cGxvYWRlZFwiLHQpLGUuJGZvcmNlVXBkYXRlKCkscyh0KX0pLmNhdGNoKGZ1bmN0aW9uKGkpe3QuX19mYWlsZWQ9ITAsZS4kZW1pdChcImZhaWxcIix0KSxlLiRmb3JjZVVwZGF0ZSgpLG4oaSl9KX0pfXZhciBzPW5ldyBGb3JtRGF0YSxuPW5ldyBYTUxIdHRwUmVxdWVzdDt0cnl7dGhpcy5hZGRpdGlvbmFsRmllbGRzLmZvckVhY2goZnVuY3Rpb24odCl7cy5hcHBlbmQodC5uYW1lLHQudmFsdWUpfSksITAhPT10aGlzLm5vQ29udGVudFR5cGUmJnMuYXBwZW5kKFwiQ29udGVudC1UeXBlXCIsdC50eXBlfHxcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKSxzLmFwcGVuZCh0aGlzLm5hbWUsdCl9Y2F0Y2godCl7cmV0dXJufXJldHVybiB0Lnhocj1uLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7bi51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcihcInByb2dyZXNzXCIsZnVuY3Rpb24oaSl7aWYoIXQuX19yZW1vdmVkKXtpLnBlcmNlbnQ9aS50b3RhbD9pLmxvYWRlZC9pLnRvdGFsOjA7dmFyIHM9aS5wZXJjZW50KnQuc2l6ZTtlLnVwbG9hZGVkU2l6ZSs9cy10Ll9fdXBsb2FkZWQsdC5fX3VwbG9hZGVkPXMsdC5fX3Byb2dyZXNzPU1hdGgubWluKDk5LHBhcnNlSW50KDEwMCppLnBlcmNlbnQsMTApKX19LCExKSxuLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe24ucmVhZHlTdGF0ZTw0fHwobi5zdGF0dXMmJm4uc3RhdHVzPDQwMD8odC5fX2RvbmVVcGxvYWRpbmc9ITAsdC5fX3Byb2dyZXNzPTEwMCxlLiRlbWl0KFwidXBsb2FkZWRcIix0LG4pLGkodCkpOih0Ll9fZmFpbGVkPSEwLGUuJGVtaXQoXCJmYWlsXCIsdCxuKSxvKG4pKSl9LG4ub25lcnJvcj1mdW5jdGlvbigpe3QuX19mYWlsZWQ9ITAsZS4kZW1pdChcImZhaWxcIix0LG4pLG8obil9LChlLnVybEZhY3Rvcnk/ZS51cmxGYWN0b3J5KHQpOlByb21pc2UucmVzb2x2ZShlLnVybCkpLnRoZW4oZnVuY3Rpb24oaSl7bi5vcGVuKGUubWV0aG9kLGksITApLGUud2l0aENyZWRlbnRpYWxzJiYobi53aXRoQ3JlZGVudGlhbHM9ITApLGUuaGVhZGVycyYmT2JqZWN0LmtleXMoZS5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24uc2V0UmVxdWVzdEhlYWRlcih0LGUuaGVhZGVyc1t0XSl9KSxlLnhocnMucHVzaChuKSxlLnNlbmRSYXc/bi5zZW5kKHQpOm4uc2VuZChzKX0pfSl9LHBpY2s6ZnVuY3Rpb24oKXt0aGlzLmFkZERpc2FibGVkfHx0aGlzLiRyZWZzLmZpbGUuY2xpY2soKX0sdXBsb2FkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMucXVldWVMZW5ndGg7aWYoIXRoaXMuZGlzYWJsZSYmMCE9PWUpe3ZhciBpPTA7dGhpcy51cGxvYWRlZFNpemU9MCx0aGlzLnVwbG9hZGluZz0hMCx0aGlzLnhocnM9W10sdGhpcy4kZW1pdChcInN0YXJ0XCIpO3ZhciBzPWZ1bmN0aW9uKCl7KytpPT09ZSYmKHQudXBsb2FkaW5nPSExLHQueGhycz1bXSx0LnF1ZXVlPXQucXVldWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0Ll9fZG9uZVVwbG9hZGluZ30pLHQuX19jb21wdXRlVG90YWxTaXplKCksdC4kZW1pdChcImZpbmlzaFwiKSl9O3RoaXMucXVldWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9fZ2V0VXBsb2FkUHJvbWlzZShlKX0pLmZvckVhY2goZnVuY3Rpb24odCl7dC50aGVuKHMpLmNhdGNoKHMpfSl9fSxhYm9ydDpmdW5jdGlvbigpe3RoaXMueGhycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuYWJvcnQoKX0pLHRoaXMudXBsb2FkaW5nPSExLHRoaXMuJGVtaXQoXCJhYm9ydFwiKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmFib3J0KCksdGhpcy5maWxlcz1bXSx0aGlzLnF1ZXVlPVtdLHRoaXMuZXhwYW5kZWQ9ITEsdGhpcy5fX2NvbXB1dGVUb3RhbFNpemUoKSx0aGlzLiRlbWl0KFwicmVzZXRcIil9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPVt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtaW5wdXQtdGFyZ2V0IGVsbGlwc2lzXCIsY2xhc3M6dGhpcy5hbGlnbkNsYXNzfSxbdGhpcy5sYWJlbF0pXTtyZXR1cm4gdGhpcy51cGxvYWRpbmc/aS5wdXNoKHRoaXMuJHNsb3RzLmxvYWRpbmc/dChcImRpdlwiLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtZW5kIHNlbGYtY2VudGVyIHEtaWYtY29udHJvbFwifSx0aGlzLiRzbG90cy5sb2FkaW5nKTp0KFFTcGlubmVyLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtZW5kIHNlbGYtY2VudGVyXCIscHJvcHM6e3NpemU6XCIyNHB4XCJ9fSksdChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLWlmLWVuZCBzZWxmLWNlbnRlciBxLWlmLWNvbnRyb2xcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udXBsb2FkZXJbXCJjbGVhclwiKyh0aGlzLmlzSW52ZXJ0ZWQ/XCJJbnZlcnRlZFwiOlwiXCIpXX0sbmF0aXZlT246e2NsaWNrOnRoaXMuYWJvcnR9fSkpOihpLnB1c2godChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLXBpY2stYnV0dG9uIHNlbGYtY2VudGVyIHEtaWYtY29udHJvbCByZWxhdGl2ZS1wb3NpdGlvbiBvdmVyZmxvdy1oaWRkZW5cIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udXBsb2FkZXIuYWRkfSxhdHRyczp7ZGlzYWJsZWQ6dGhpcy5hZGREaXNhYmxlZH19LFt0KFwiaW5wdXRcIix7cmVmOlwiZmlsZVwiLHN0YXRpY0NsYXNzOlwicS11cGxvYWRlci1pbnB1dCBhYnNvbHV0ZS1mdWxsIGN1cnNvci1wb2ludGVyXCIsYXR0cnM6T2JqZWN0LmFzc2lnbih7dHlwZTpcImZpbGVcIixhY2NlcHQ6dGhpcy5leHRlbnNpb25zfSx0aGlzLm11bHRpcGxlP3ttdWx0aXBsZTohMH06e30pLG9uOntjaGFuZ2U6dGhpcy5fX2FkZH19KV0pKSx0aGlzLmhpZGVVcGxvYWRCdXR0b258fGkucHVzaCh0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbCBzZWxmLWNlbnRlclwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi51cGxvYWRlci51cGxvYWR9LGF0dHJzOntkaXNhYmxlZDowPT09dGhpcy5xdWV1ZUxlbmd0aH0sbmF0aXZlT246e2NsaWNrOnRoaXMudXBsb2FkfX0pKSksdGhpcy5oYXNFeHBhbmRlZENvbnRlbnQmJmkucHVzaCh0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbCBnZW5lcmljX3RyYW5zaXRpb24gc2VsZi1jZW50ZXJcIixjbGFzczp7XCJyb3RhdGUtMTgwXCI6dGhpcy5leHBhbmRlZH0scHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLnVwbG9hZGVyLmV4cGFuZH0sbmF0aXZlT246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5leHBhbmRlZD0hZS5leHBhbmRlZH19fSkpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzLG9uOntkcmFnb3Zlcjp0aGlzLl9fb25EcmFnT3Zlcn19LFt0KFFJbnB1dEZyYW1lLHtyZWY6XCJpbnB1dFwiLHByb3BzOntwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcscmVhZG9ubHk6dGhpcy5yZWFkb25seSxpbnZlcnRlZDp0aGlzLmludmVydGVkLGludmVydGVkTGlnaHQ6dGhpcy5pbnZlcnRlZExpZ2h0LGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6dGhpcy5oaWRlVW5kZXJsaW5lLGJlZm9yZTp0aGlzLmJlZm9yZSxhZnRlcjp0aGlzLmFmdGVyLGNvbG9yOnRoaXMuY29sb3IsYWxpZ246dGhpcy5hbGlnbixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxsZW5ndGg6dGhpcy5xdWV1ZUxlbmd0aCxhZGRpdGlvbmFsTGVuZ3RoOiEwfX0saSksdChRU2xpZGVUcmFuc2l0aW9uLFt0KFwiZGl2XCIse2NsYXNzOnRoaXMuZXhwYW5kQ2xhc3Msc3R5bGU6dGhpcy5leHBhbmRTdHlsZSxkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTp0aGlzLmV4cGFuZGVkfV19LFt0KFFMaXN0LHtzdGF0aWNDbGFzczpcInEtdXBsb2FkZXItZmlsZXMgcS1weS1ub25lIHNjcm9sbFwiLHN0eWxlOnRoaXMuZmlsZXNTdHlsZSxwcm9wczp7ZGFyazp0aGlzLmRhcmt9fSx0aGlzLmZpbGVzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChRSXRlbSx7a2V5OmkubmFtZStpLl9fdGltZXN0YW1wLHN0YXRpY0NsYXNzOlwicS11cGxvYWRlci1maWxlIHEtcGEteHNcIn0sWyFlLmhpZGVVcGxvYWRQcm9ncmVzcyYmdChRUHJvZ3Jlc3Mse3N0YXRpY0NsYXNzOlwicS11cGxvYWRlci1wcm9ncmVzcy1iZyBhYnNvbHV0ZS1mdWxsXCIscHJvcHM6e2NvbG9yOmkuX19mYWlsZWQ/XCJuZWdhdGl2ZVwiOmUucHJvZ3Jlc3NDb2xvcixwZXJjZW50YWdlOmkuX19wcm9ncmVzcyxoZWlnaHQ6XCIxMDAlXCJ9fSl8fHZvaWQgMCwhZS5oaWRlVXBsb2FkUHJvZ3Jlc3MmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLXByb2dyZXNzLXRleHQgYWJzb2x1dGVcIn0sW2kuX19wcm9ncmVzcytcIiVcIl0pfHx2b2lkIDAsdChRSXRlbVNpZGUse3Byb3BzOmkuX19pbWc/e2ltYWdlOmkuX19pbWcuc3JjfTp7aWNvbjplLiRxLmljb24udXBsb2FkZXIuZmlsZSxjb2xvcjplLmNvbG9yfX0pLHQoUUl0ZW1NYWluLHtwcm9wczp7bGFiZWw6aS5uYW1lLHN1YmxhYmVsOmkuX19zaXplfX0pLHQoUUl0ZW1TaWRlLHtwcm9wczp7cmlnaHQ6ITB9fSxbdChRSXRlbVRpbGUse3N0YXRpY0NsYXNzOlwiY3Vyc29yLXBvaW50ZXJcIixwcm9wczp7aWNvbjplLiRxLmljb24udXBsb2FkZXJbaS5fX2RvbmVVcGxvYWRpbmc/XCJkb25lXCI6XCJjbGVhclwiXSxjb2xvcjplLmNvbG9yfSxuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLl9fcmVtb3ZlKGkpfX19KV0pXSl9KSldKV0pLHRoaXMuZG5kJiZ0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS11cGxvYWRlci1kbmQgZmxleCByb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGFic29sdXRlLWZ1bGxcIixjbGFzczp0aGlzLmRuZENsYXNzLG9uOntkcmFnZW50ZXI6c3RvcEFuZFByZXZlbnQsZHJhZ292ZXI6c3RvcEFuZFByZXZlbnQsZHJhZ2xlYXZlOnRoaXMuX19vbkRyYWdMZWF2ZSxkcm9wOnRoaXMuX19vbkRyb3B9fSl8fHZvaWQgMF0pfX0sUVZpZGVvPXtuYW1lOlwiUVZpZGVvXCIscHJvcHM6e3NyYzp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxjb21wdXRlZDp7aWZyYW1lRGF0YTpmdW5jdGlvbigpe3JldHVybnthdHRyczp7c3JjOnRoaXMuc3JjLGZyYW1lYm9yZGVyOlwiMFwiLGFsbG93ZnVsbHNjcmVlbjohMH19fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS12aWRlb1wifSxbdChcImlmcmFtZVwiLHRoaXMuaWZyYW1lRGF0YSldKX19LGNvbXBvbmVudHMkMT1PYmplY3QuZnJlZXplKHtRQWN0aW9uU2hlZXQ6UUFjdGlvblNoZWV0LFFBamF4QmFyOlFBamF4QmFyLFFBbGVydDpRQWxlcnQsUUF1dG9jb21wbGV0ZTpRQXV0b2NvbXBsZXRlLFFCcmVhZGNydW1iczpRQnJlYWRjcnVtYnMsUUJyZWFkY3J1bWJzRWw6UUJyZWFkY3J1bWJzRWwsUUJ0bjpRQnRuLFFCdG5Hcm91cDpRQnRuR3JvdXAsUUJ0bkRyb3Bkb3duOlFCdG5Ecm9wZG93bixRQnRuVG9nZ2xlOlFCdG5Ub2dnbGUsUUNhcmQ6UUNhcmQsUUNhcmRUaXRsZTpRQ2FyZFRpdGxlLFFDYXJkTWFpbjpRQ2FyZE1haW4sUUNhcmRBY3Rpb25zOlFDYXJkQWN0aW9ucyxRQ2FyZE1lZGlhOlFDYXJkTWVkaWEsUUNhcmRTZXBhcmF0b3I6UUNhcmRTZXBhcmF0b3IsUUNhcm91c2VsOlFDYXJvdXNlbCxRQ2Fyb3VzZWxTbGlkZTpRQ2Fyb3VzZWxTbGlkZSxRQ2Fyb3VzZWxDb250cm9sOlFDYXJvdXNlbENvbnRyb2wsUUNoYXRNZXNzYWdlOlFDaGF0TWVzc2FnZSxRQ2hlY2tib3g6UUNoZWNrYm94LFFDaGlwOlFDaGlwLFFDaGlwc0lucHV0OlFDaGlwc0lucHV0LFFDb2xsYXBzaWJsZTpRQ29sbGFwc2libGUsUUNvbG9yOlFDb2xvcixRQ29sb3JQaWNrZXI6UUNvbG9yUGlja2VyLFFDb250ZXh0TWVudTpRQ29udGV4dE1lbnUsUURhdGV0aW1lOlFEYXRldGltZSxRRGF0ZXRpbWVQaWNrZXI6UURhdGV0aW1lUGlja2VyLFFEaWFsb2c6UURpYWxvZyxRRWRpdG9yOlFFZGl0b3IsUUZhYjpRRmFiLFFGYWJBY3Rpb246UUZhYkFjdGlvbixRRmllbGQ6UUZpZWxkLFFJY29uOlFJY29uLFFJbmZpbml0ZVNjcm9sbDpRSW5maW5pdGVTY3JvbGwsUUlubmVyTG9hZGluZzpRSW5uZXJMb2FkaW5nLFFJbnB1dDpRSW5wdXQsUUlucHV0RnJhbWU6UUlucHV0RnJhbWUsUUp1bWJvdHJvbjpRSnVtYm90cm9uLFFLbm9iOlFLbm9iLFFMYXlvdXQ6UUxheW91dCxRTGF5b3V0RHJhd2VyOlFMYXlvdXREcmF3ZXIsUUxheW91dEZvb3RlcjpRTGF5b3V0Rm9vdGVyLFFMYXlvdXRIZWFkZXI6UUxheW91dEhlYWRlcixRUGFnZTpRUGFnZSxRUGFnZUNvbnRhaW5lcjpRUGFnZUNvbnRhaW5lcixRUGFnZVN0aWNreTpRUGFnZVN0aWNreSxRSXRlbTpRSXRlbSxRSXRlbVNlcGFyYXRvcjpRSXRlbVNlcGFyYXRvcixRSXRlbU1haW46UUl0ZW1NYWluLFFJdGVtU2lkZTpRSXRlbVNpZGUsUUl0ZW1UaWxlOlFJdGVtVGlsZSxRSXRlbVdyYXBwZXI6UUl0ZW1XcmFwcGVyLFFMaXN0OlFMaXN0LFFMaXN0SGVhZGVyOlFMaXN0SGVhZGVyLFFNb2RhbDpRTW9kYWwsUU1vZGFsTGF5b3V0OlFNb2RhbExheW91dCxRTm9Tc3I6UU5vU3NyLFFSZXNpemVPYnNlcnZhYmxlOlFSZXNpemVPYnNlcnZhYmxlLFFTY3JvbGxPYnNlcnZhYmxlOlFTY3JvbGxPYnNlcnZhYmxlLFFXaW5kb3dSZXNpemVPYnNlcnZhYmxlOlFXaW5kb3dSZXNpemVPYnNlcnZhYmxlLFFPcHRpb25Hcm91cDpRT3B0aW9uR3JvdXAsUVBhZ2luYXRpb246UVBhZ2luYXRpb24sUVBhcmFsbGF4OlFQYXJhbGxheCxRUG9wb3ZlcjpRUG9wb3ZlcixRUG9wdXBFZGl0OlFQb3B1cEVkaXQsUVByb2dyZXNzOlFQcm9ncmVzcyxRUHVsbFRvUmVmcmVzaDpRUHVsbFRvUmVmcmVzaCxRUmFkaW86UVJhZGlvLFFSYW5nZTpRUmFuZ2UsUVJhdGluZzpRUmF0aW5nLFFTY3JvbGxBcmVhOlFTY3JvbGxBcmVhLFFTZWFyY2g6UVNlYXJjaCxRU2VsZWN0OlFTZWxlY3QsUVNsaWRlVHJhbnNpdGlvbjpRU2xpZGVUcmFuc2l0aW9uLFFTbGlkZXI6UVNsaWRlcixRU3Bpbm5lcjpRU3Bpbm5lcixRU3Bpbm5lckF1ZGlvOlFTcGlubmVyQXVkaW8sUVNwaW5uZXJCYWxsOlFTcGlubmVyQmFsbCxRU3Bpbm5lckJhcnM6UVNwaW5uZXJCYXJzLFFTcGlubmVyQ2lyY2xlczpRU3Bpbm5lckNpcmNsZXMsUVNwaW5uZXJDb21tZW50OlFTcGlubmVyQ29tbWVudCxRU3Bpbm5lckN1YmU6UVNwaW5uZXJDdWJlLFFTcGlubmVyRG90czpRU3Bpbm5lckRvdHMsUVNwaW5uZXJGYWNlYm9vazpRU3Bpbm5lckZhY2Vib29rLFFTcGlubmVyR2VhcnM6UVNwaW5uZXJHZWFycyxRU3Bpbm5lckdyaWQ6UVNwaW5uZXJHcmlkLFFTcGlubmVySGVhcnRzOlFTcGlubmVySGVhcnRzLFFTcGlubmVySG91cmdsYXNzOlFTcGlubmVySG91cmdsYXNzLFFTcGlubmVySW5maW5pdHk6UVNwaW5uZXJJbmZpbml0eSxRU3Bpbm5lcklvczpRU3Bpbm5lcl9pb3MsUVNwaW5uZXJNYXQ6RGVmYXVsdFNwaW5uZXIsUVNwaW5uZXJPdmFsOlFTcGlubmVyT3ZhbCxRU3Bpbm5lclBpZTpRU3Bpbm5lclBpZSxRU3Bpbm5lclB1ZmY6UVNwaW5uZXJQdWZmLFFTcGlubmVyUmFkaW86UVNwaW5uZXJSYWRpbyxRU3Bpbm5lclJpbmdzOlFTcGlubmVyUmluZ3MsUVNwaW5uZXJUYWlsOlFTcGlubmVyVGFpbCxRU3RlcDpRU3RlcCxRU3RlcHBlcjpRU3RlcHBlcixRU3RlcHBlck5hdmlnYXRpb246UVN0ZXBwZXJOYXZpZ2F0aW9uLFFSb3V0ZVRhYjpRUm91dGVUYWIsUVRhYjpRVGFiLFFUYWJQYW5lOlFUYWJQYW5lLFFUYWJzOlFUYWJzLFFUYWJsZTpRVGFibGUsUVRoOlFUaCxRVHI6UVRyLFFUZDpRVGQsUVRhYmxlQ29sdW1uczpRVGFibGVDb2x1bW5zLFFUaW1lbGluZTpRVGltZWxpbmUsUVRpbWVsaW5lRW50cnk6UVRpbWVsaW5lRW50cnksUVRvZ2dsZTpRVG9nZ2xlLFFUb29sYmFyOlFUb29sYmFyLFFUb29sYmFyVGl0bGU6UVRvb2xiYXJUaXRsZSxRVG9vbHRpcDpRVG9vbHRpcCxRVHJlZTpRVHJlZSxRVXBsb2FkZXI6UVVwbG9hZGVyLFFWaWRlbzpRVmlkZW99KTtmdW5jdGlvbiB1cGRhdGVCaW5kaW5nKHQsZSl7dmFyIGk9ZS52YWx1ZSxzPShlLm1vZGlmaWVycyx0Ll9fcWJhY2t0b3RvcCk7aWYoaSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGkpcmV0dXJuIHMub2Zmc2V0PWksdm9pZCBzLnVwZGF0ZSgpO2lmKGkmJk9iamVjdChpKSE9PWkpY29uc29sZS5lcnJvcihcInYtYmFjay10by10b3AgcmVxdWlyZXMgYW4gb2JqZWN0IHtvZmZzZXQsIGR1cmF0aW9ufSBhcyBwYXJhbWV0ZXJcIix0KTtlbHNle2lmKGkub2Zmc2V0KXtpZihcIm51bWJlclwiIT10eXBlb2YgaS5vZmZzZXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcInYtYmFjay10by10b3AgcmVxdWlyZXMgYSBudW1iZXIgYXMgb2Zmc2V0XCIsdCk7cy5vZmZzZXQ9aS5vZmZzZXR9aWYoaS5kdXJhdGlvbil7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGkuZHVyYXRpb24pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcInYtYmFjay10by10b3AgcmVxdWlyZXMgYSBudW1iZXIgYXMgZHVyYXRpb25cIix0KTtzLmR1cmF0aW9uPWkuZHVyYXRpb259cy51cGRhdGUoKX19ZWxzZSBzLnVwZGF0ZSgpfXZhciBiYWNrVG9Ub3A9e25hbWU6XCJiYWNrLXRvLXRvcFwiLGJpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9e29mZnNldDoyMDAsZHVyYXRpb246MzAwLHVwZGF0ZU5vdzpmdW5jdGlvbigpe3ZhciBpPWdldFNjcm9sbFBvc2l0aW9uKGUuc2Nyb2xsVGFyZ2V0KTw9ZS5vZmZzZXQ7aSE9PXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZGVuXCIpJiZ0LmNsYXNzTGlzdFtpP1wiYWRkXCI6XCJyZW1vdmVcIl0oXCJoaWRkZW5cIil9LGdvVG9Ub3A6ZnVuY3Rpb24oKXtzZXRTY3JvbGxQb3NpdGlvbihlLnNjcm9sbFRhcmdldCwwLGUuYW5pbWF0ZT9lLmR1cmF0aW9uOjApfSxnb1RvVG9wS2V5OmZ1bmN0aW9uKHQpezEzPT09dC5rZXlDb2RlJiZzZXRTY3JvbGxQb3NpdGlvbihlLnNjcm9sbFRhcmdldCwwLGUuYW5pbWF0ZT9lLmR1cmF0aW9uOjApfX07ZS51cGRhdGU9ZGVib3VuY2UoZS51cGRhdGVOb3csMjUpLHQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKSx0Ll9fcWJhY2t0b3RvcD1lfSxpbnNlcnRlZDpmdW5jdGlvbih0LGUpe3ZhciBpPXQuX19xYmFja3RvdG9wO2kuc2Nyb2xsVGFyZ2V0PWdldFNjcm9sbFRhcmdldCh0KSxpLmFuaW1hdGU9ZS5tb2RpZmllcnMuYW5pbWF0ZSx1cGRhdGVCaW5kaW5nKHQsZSksaS5zY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGkudXBkYXRlLGxpc3Rlbk9wdHMucGFzc2l2ZSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixpLnVwZGF0ZSxsaXN0ZW5PcHRzLnBhc3NpdmUpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaS5nb1RvVG9wKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGkuZ29Ub1RvcEtleSl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe0pTT04uc3RyaW5naWZ5KGUub2xkVmFsdWUpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSk/dXBkYXRlQmluZGluZyh0LGUpOnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0Ll9fcWJhY2t0b3RvcCYmdC5fX3FiYWNrdG90b3AudXBkYXRlTm93KCl9LDApfSx1bmJpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5fX3FiYWNrdG90b3A7ZSYmKGUuc2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixlLnVwZGF0ZSxsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsZS51cGRhdGUsbGlzdGVuT3B0cy5wYXNzaXZlKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGUuZ29Ub1RvcCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixlLmdvVG9Ub3BLZXkpLGRlbGV0ZSB0Ll9fcWJhY2t0b3RvcCl9fSxjbG9zZU92ZXJsYXk9e25hbWU6XCJjbG9zZS1vdmVybGF5XCIsYmluZDpmdW5jdGlvbih0LGUsaSl7dmFyIHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkuY29tcG9uZW50SW5zdGFuY2U7ZT1lLiRwYXJlbnQ7KXt2YXIgcz1lLiRvcHRpb25zLm5hbWU7aWYoXCJRUG9wb3ZlclwiPT09c3x8XCJRTW9kYWxcIj09PXMpe2UuaGlkZSh0KTticmVha319fSxuPWZ1bmN0aW9uKHQpezEzPT09dC5rZXlDb2RlJiZzKHQpfTt0Ll9fcWNsb3NlPXtoYW5kbGVyOnMsaGFuZGxlcktleTpufSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHMpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsbil9LHVuYmluZDpmdW5jdGlvbih0KXt2YXIgZT10Ll9fcWNsb3NlO2UmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGUuaGFuZGxlciksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixlLmhhbmRsZXJLZXkpLGRlbGV0ZSB0Ll9fcWNsb3NlKX19LGdvQmFjaz17bmFtZTpcImdvLWJhY2tcIixiaW5kOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz1lLnZhbHVlLG49ZS5tb2RpZmllcnMsbz17dmFsdWU6cyxwb3NpdGlvbjp3aW5kb3cuaGlzdG9yeS5sZW5ndGgtMSxzaW5nbGU6bi5zaW5nbGV9O1BsYXRmb3JtLmlzLmNvcmRvdmE/by5nb0JhY2s9ZnVuY3Rpb24oKXtpLmNvbnRleHQuJHJvdXRlci5nbyhvLnNpbmdsZT8tMTpvLnBvc2l0aW9uLXdpbmRvdy5oaXN0b3J5Lmxlbmd0aCl9Om8uZ29CYWNrPWZ1bmN0aW9uKCl7aS5jb250ZXh0LiRyb3V0ZXIucmVwbGFjZShvLnZhbHVlKX0sby5nb0JhY2tLZXk9ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJm8uZ29CYWNrKHQpfSx0Ll9fcWdvYmFjaz1vLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsby5nb0JhY2spLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsby5nb0JhY2tLZXkpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXtlLm9sZFZhbHVlIT09ZS52YWx1ZSYmKHQuX19xZ29iYWNrLnZhbHVlPWUudmFsdWUpfSx1bmJpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5fX3Fnb2JhY2s7ZSYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZS5nb0JhY2spLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZS5nb0JhY2tLZXkpLGRlbGV0ZSB0Ll9fcWdvYmFjayl9fTtmdW5jdGlvbiB1cGRhdGVCaW5kaW5nJDEodCxlKXt2YXIgaT10Ll9fcXNjcm9sbGZpcmU7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS52YWx1ZSlyZXR1cm4gaS5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGkuc2Nyb2xsKSx2b2lkIGNvbnNvbGUuZXJyb3IoXCJ2LXNjcm9sbC1maXJlIHJlcXVpcmVzIGEgZnVuY3Rpb24gYXMgcGFyYW1ldGVyXCIsdCk7aS5oYW5kbGVyPWUudmFsdWUsXCJmdW5jdGlvblwiIT10eXBlb2YgZS5vbGRWYWx1ZSYmKGkuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixpLnNjcm9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpLGkuc2Nyb2xsKCkpfXZhciBzY3JvbGxGaXJlPXtuYW1lOlwic2Nyb2xsLWZpcmVcIixiaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9e3Njcm9sbDpkZWJvdW5jZShmdW5jdGlvbigpe3ZhciBlLHM7aS5zY3JvbGxUYXJnZXQ9PT13aW5kb3c/KHM9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20sZT13aW5kb3cuaW5uZXJIZWlnaHQpOihzPW9mZnNldCh0KS50b3AraGVpZ2h0KHQpLGU9b2Zmc2V0KGkuc2Nyb2xsVGFyZ2V0KS50b3AraGVpZ2h0KGkuc2Nyb2xsVGFyZ2V0KSkscz4wJiZzPGUmJihpLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsaS5zY3JvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKSxpLmhhbmRsZXIodCkpfSwyNSl9O3QuX19xc2Nyb2xsZmlyZT1pfSxpbnNlcnRlZDpmdW5jdGlvbih0LGUpe3QuX19xc2Nyb2xsZmlyZS5zY3JvbGxUYXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHQpLHVwZGF0ZUJpbmRpbmckMSh0LGUpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXtlLnZhbHVlIT09ZS5vbGRWYWx1ZSYmdXBkYXRlQmluZGluZyQxKHQsZSl9LHVuYmluZDpmdW5jdGlvbih0KXt2YXIgZT10Ll9fcXNjcm9sbGZpcmU7ZSYmKGUuc2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixlLnNjcm9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpLGRlbGV0ZSB0Ll9fcXNjcm9sbGZpcmUpfX07ZnVuY3Rpb24gdXBkYXRlQmluZGluZyQyKHQsZSl7dmFyIGk9dC5fX3FzY3JvbGw7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS52YWx1ZSlyZXR1cm4gaS5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGkuc2Nyb2xsLGxpc3Rlbk9wdHMucGFzc2l2ZSksdm9pZCBjb25zb2xlLmVycm9yKFwidi1zY3JvbGwgcmVxdWlyZXMgYSBmdW5jdGlvbiBhcyBwYXJhbWV0ZXJcIix0KTtpLmhhbmRsZXI9ZS52YWx1ZSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLm9sZFZhbHVlJiZpLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsaS5zY3JvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKX12YXIgc2Nyb2xsJDE9e25hbWU6XCJzY3JvbGxcIixiaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9e3Njcm9sbDpmdW5jdGlvbigpe2kuaGFuZGxlcihnZXRTY3JvbGxQb3NpdGlvbihpLnNjcm9sbFRhcmdldCksZ2V0SG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uKGkuc2Nyb2xsVGFyZ2V0KSl9fTt0Ll9fcXNjcm9sbD1pfSxpbnNlcnRlZDpmdW5jdGlvbih0LGUpe3QuX19xc2Nyb2xsLnNjcm9sbFRhcmdldD1nZXRTY3JvbGxUYXJnZXQodCksdXBkYXRlQmluZGluZyQyKHQsZSl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe2Uub2xkVmFsdWUhPT1lLnZhbHVlJiZ1cGRhdGVCaW5kaW5nJDIodCxlKX0sdW5iaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX19xc2Nyb2xsO2UmJihlLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsZS5zY3JvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKSxkZWxldGUgdC5fX3FzY3JvbGwpfX07ZnVuY3Rpb24gdXBkYXRlQmluZGluZyQzKHQsZSl7dmFyIGk9dC5fX3F0b3VjaGhvbGQ7aS5kdXJhdGlvbj1wYXJzZUludChlLmFyZywxMCl8fDYwMCxlLm9sZFZhbHVlIT09ZS52YWx1ZSYmKGkuaGFuZGxlcj1lLnZhbHVlKX12YXIgdG91Y2hIb2xkPXtuYW1lOlwidG91Y2gtaG9sZFwiLGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT0hZS5tb2RpZmllcnMubm9Nb3VzZSxzPWUubW9kaWZpZXJzLnN0b3Asbj1lLm1vZGlmaWVycy5wcmV2ZW50LG89e21vdXNlU3RhcnQ6ZnVuY3Rpb24odCl7bGVmdENsaWNrKHQpJiYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLG8ubW91c2VBYm9ydCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixvLm1vdXNlQWJvcnQpLG8uc3RhcnQodCkpfSxtb3VzZUFib3J0OmZ1bmN0aW9uKHQpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixvLm1vdXNlQWJvcnQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsby5tb3VzZUFib3J0KSxvLmFib3J0KHQpfSxzdGFydDpmdW5jdGlvbih0KXt2YXIgZT0obmV3IERhdGUpLmdldFRpbWUoKTtzJiZ0LnN0b3BQcm9wYWdhdGlvbigpLG4mJnQucHJldmVudERlZmF1bHQoKSxvLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLG8ubW91c2VBYm9ydCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixvLm1vdXNlQWJvcnQpKSxvLmhhbmRsZXIoe2V2dDp0LHBvc2l0aW9uOnBvc2l0aW9uKHQpLGR1cmF0aW9uOihuZXcgRGF0ZSkuZ2V0VGltZSgpLWV9KX0sby5kdXJhdGlvbil9LGFib3J0OmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dChvLnRpbWVyKSxvLnRpbWVyPW51bGx9fTt0Ll9fcXRvdWNoaG9sZD1vLHVwZGF0ZUJpbmRpbmckMyh0LGUpLGkmJnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG8ubW91c2VTdGFydCksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLG8uc3RhcnQpLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLG8uYWJvcnQpLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsby5hYm9ydCl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe3VwZGF0ZUJpbmRpbmckMyh0LGUpfSx1bmJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10Ll9fcXRvdWNoaG9sZDtpJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGkuc3RhcnQpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsaS5hYm9ydCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsaS5hYm9ydCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsaS5tb3VzZVN0YXJ0KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsaS5tb3VzZUFib3J0KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLGkubW91c2VBYm9ydCksZGVsZXRlIHQuX19xdG91Y2hob2xkKX19LGRpcmVjdGl2ZXM9T2JqZWN0LmZyZWV6ZSh7QmFja1RvVG9wOmJhY2tUb1RvcCxDbG9zZU92ZXJsYXk6Y2xvc2VPdmVybGF5LEdvQmFjazpnb0JhY2ssUmlwcGxlOlJpcHBsZSxTY3JvbGxGaXJlOnNjcm9sbEZpcmUsU2Nyb2xsOnNjcm9sbCQxLFRvdWNoSG9sZDp0b3VjaEhvbGQsVG91Y2hQYW46VG91Y2hQYW4sVG91Y2hTd2lwZTpUb3VjaFN3aXBlfSk7ZnVuY3Rpb24gb2JqZWN0V2l0aG91dFByb3BlcnRpZXModCxlKXt2YXIgaT17fTtmb3IodmFyIHMgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxzKSYmLTE9PT1lLmluZGV4T2YocykmJihpW3NdPXRbc10pO3JldHVybiBpfWZ1bmN0aW9uIG1vZGFsRm4odCxlKXtyZXR1cm4gZnVuY3Rpb24oaSxzKXt2YXIgbj1pLmNsYXNzTmFtZSxvPW9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGksW1wiY2xhc3NOYW1lXCJdKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSxyKXtpZihpc1NTUilyZXR1cm4gaSgpO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTt2YXIgbD1mdW5jdGlvbih0KXtpKHQpLGguJGRlc3Ryb3koKX0sYz1mdW5jdGlvbih0KXtyKHR8fG5ldyBFcnJvciksaC4kZGVzdHJveSgpfSxoPW5ldyBlKHtlbDphLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cHJvcHM6b319LHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZSh0LHtyZWY6XCJtb2RhbFwiLHByb3BzOm8sY2xhc3M6bixvbjp7b2s6bCxjYW5jZWw6Y319KX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuJHJlZnMubW9kYWwuc2hvdygpfX0pO3MmJnMudGhlbihsLGMpfSl9fXZhciBtZXRhVmFsdWUsYWN0aW9uU2hlZXQ9e2luc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPXQuVnVlO3RoaXMuY3JlYXRlPWUuYWN0aW9uU2hlZXQ9bW9kYWxGbihRQWN0aW9uU2hlZXQsaSl9fTtmdW5jdGlvbiBnZXRQcm9wKCl7cmV0dXJuIFBsYXRmb3JtLmlzLndpbnBob25lP1wibXNhcHBsaWNhdGlvbi1uYXZidXR0b24tY29sb3JcIjpQbGF0Zm9ybS5pcy5zYWZhcmk/XCJhcHBsZS1tb2JpbGUtd2ViLWFwcC1zdGF0dXMtYmFyLXN0eWxlXCI6XCJ0aGVtZS1jb2xvclwifWZ1bmN0aW9uIGdldE1ldGFUYWcodCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJNRVRBXCIpO2Zvcih2YXIgaSBpbiBlKWlmKGVbaV0ubmFtZT09PXQpcmV0dXJuIGVbaV19ZnVuY3Rpb24gc2V0Q29sb3IodCl7dm9pZCAwPT09bWV0YVZhbHVlJiYobWV0YVZhbHVlPWdldFByb3AoKSk7dmFyIGU9Z2V0TWV0YVRhZyhtZXRhVmFsdWUpLGk9dm9pZCAwPT09ZTtpJiYoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibWV0YVwiKSkuc2V0QXR0cmlidXRlKFwibmFtZVwiLG1ldGFWYWx1ZSksZS5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsdCksaSYmZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlKX12YXIgYWRkcmVzc2JhckNvbG9yPXtpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXQuJHEsaT0odC5WdWUsdC5jZmcpO3RoaXMuc2V0PSFpc1NTUiYmUGxhdGZvcm0uaXMubW9iaWxlJiYoUGxhdGZvcm0uaXMuY29yZG92YXx8UGxhdGZvcm0uaXMud2lucGhvbmV8fFBsYXRmb3JtLmlzLnNhZmFyaXx8UGxhdGZvcm0uaXMud2Via2l0fHxQbGF0Zm9ybS5pcy52aXZhbGRpKT9mdW5jdGlvbih0KXt2YXIgZT10fHxnZXRCcmFuZChcInByaW1hcnlcIik7UGxhdGZvcm0uaXMuY29yZG92YSYmd2luZG93LlN0YXR1c0Jhcj93aW5kb3cuU3RhdHVzQmFyLmJhY2tncm91bmRDb2xvckJ5SGV4U3RyaW5nKGUpOnNldENvbG9yKGUpfTpmdW5jdGlvbigpe30sZS5hZGRyZXNzYmFyQ29sb3I9dGhpcyxpLmFkZHJlc3NiYXJDb2xvciYmdGhpcy5zZXQoaS5hZGRyZXNzYmFyQ29sb3IpfX0scHJlZml4ZXM9e30sYXBwRnVsbHNjcmVlbj17aXNDYXBhYmxlOiExLGlzQWN0aXZlOiExLHJlcXVlc3Q6ZnVuY3Rpb24odCl7dGhpcy5pc0NhcGFibGUmJiF0aGlzLmlzQWN0aXZlJiYodD10fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpW3ByZWZpeGVzLnJlcXVlc3RdKCl9LGV4aXQ6ZnVuY3Rpb24oKXt0aGlzLmlzQ2FwYWJsZSYmdGhpcy5pc0FjdGl2ZSYmZG9jdW1lbnRbcHJlZml4ZXMuZXhpdF0oKX0sdG9nZ2xlOmZ1bmN0aW9uKHQpe3RoaXMuaXNBY3RpdmU/dGhpcy5leGl0KCk6dGhpcy5yZXF1ZXN0KHQpfSxpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10LiRxLHM9dC5WdWU7aS5mdWxsc2NyZWVuPXRoaXMsaXNTU1J8fChwcmVmaXhlcy5yZXF1ZXN0PVtcInJlcXVlc3RGdWxsc2NyZWVuXCIsXCJtc1JlcXVlc3RGdWxsc2NyZWVuXCIsXCJtb3pSZXF1ZXN0RnVsbFNjcmVlblwiLFwid2Via2l0UmVxdWVzdEZ1bGxzY3JlZW5cIl0uZmluZChmdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W3RdfSksdGhpcy5pc0NhcGFibGU9dm9pZCAwIT09cHJlZml4ZXMucmVxdWVzdCx0aGlzLmlzQ2FwYWJsZSYmKHByZWZpeGVzLmV4aXQ9W1wiZXhpdEZ1bGxzY3JlZW5cIixcIm1zRXhpdEZ1bGxzY3JlZW5cIixcIm1vekNhbmNlbEZ1bGxTY3JlZW5cIixcIndlYmtpdEV4aXRGdWxsc2NyZWVuXCJdLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50W3RdfSksdGhpcy5pc0FjdGl2ZT0hIShkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50KSxbXCJvbmZ1bGxzY3JlZW5jaGFuZ2VcIixcIm9ubXNmdWxsc2NyZWVuY2hhbmdlXCIsXCJvbm1vemZ1bGxzY3JlZW5jaGFuZ2VcIixcIm9ud2Via2l0ZnVsbHNjcmVlbmNoYW5nZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RvY3VtZW50W3RdPWZ1bmN0aW9uKCl7ZS5pc0FjdGl2ZT0hZS5pc0FjdGl2ZX19KSxzLnV0aWwuZGVmaW5lUmVhY3RpdmUodGhpcyxcImlzQWN0aXZlXCIsdGhpcy5pc0FjdGl2ZSkpKX19LGFwcFZpc2liaWxpdHk9e2FwcFZpc2libGU6ITEsaW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dC4kcSxzPXQuVnVlO2lmKGlzU1NSKXRoaXMuYXBwVmlzaWJsZT1pLmFwcFZpc2libGU9ITA7ZWxzZXt2YXIgbixvO3ZvaWQgMCE9PWRvY3VtZW50LmhpZGRlbj8obj1cImhpZGRlblwiLG89XCJ2aXNpYmlsaXR5Y2hhbmdlXCIpOnZvaWQgMCE9PWRvY3VtZW50Lm1zSGlkZGVuPyhuPVwibXNIaWRkZW5cIixvPVwibXN2aXNpYmlsaXR5Y2hhbmdlXCIpOnZvaWQgMCE9PWRvY3VtZW50LndlYmtpdEhpZGRlbiYmKG49XCJ3ZWJraXRIaWRkZW5cIixvPVwid2Via2l0dmlzaWJpbGl0eWNoYW5nZVwiKTt2YXIgcj1mdW5jdGlvbigpe2UuYXBwVmlzaWJsZT1pLmFwcFZpc2libGU9IWRvY3VtZW50W25dfTtyKCksbyYmdm9pZCAwIT09ZG9jdW1lbnRbbl0mJihzLnV0aWwuZGVmaW5lUmVhY3RpdmUoaSxcImFwcFZpc2libGVcIix0aGlzLmFwcFZpc2libGUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIobyxyLCExKSl9fX07ZnVuY3Rpb24gZW5jb2RlKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCl9ZnVuY3Rpb24gZGVjb2RlKHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZnVuY3Rpb24gc3RyaW5naWZ5Q29va2llVmFsdWUodCl7cmV0dXJuIGVuY29kZSh0PT09T2JqZWN0KHQpP0pTT04uc3RyaW5naWZ5KHQpOlwiXCIrdCl9ZnVuY3Rpb24gcmVhZCh0KXtpZihcIlwiPT09dClyZXR1cm4gdDswPT09dC5pbmRleE9mKCdcIicpJiYodD10LnNsaWNlKDEsLTEpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpLnJlcGxhY2UoL1xcXFxcXFxcL2csXCJcXFxcXCIpKSx0PWRlY29kZSh0LnJlcGxhY2UoL1xcKy9nLFwiIFwiKSk7dHJ5e3Q9SlNPTi5wYXJzZSh0KX1jYXRjaCh0KXt9cmV0dXJuIHR9ZnVuY3Rpb24gc2V0KHQsZSxpLHMpe3ZhciBuLG87aWYodm9pZCAwPT09aSYmKGk9e30pLHZvaWQgMCE9PWkuZXhwaXJlcyl7aWYobz1wYXJzZUludChpLmV4cGlyZXMsMTApLGlzTmFOKG8pKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoXCJRdWFzYXIgY29va2llOiBleHBpcmVzIG5lZWRzIHRvIGJlIGEgbnVtYmVyXCIpOyhuPW5ldyBEYXRlKS5zZXRNaWxsaXNlY29uZHMobi5nZXRNaWxsaXNlY29uZHMoKSs4NjRlNSpvKX12YXIgcj1lbmNvZGUodCkrXCI9XCIrc3RyaW5naWZ5Q29va2llVmFsdWUoZSksYT1bcix2b2lkIDAhPT1uP1wiOyBFeHBpcmVzPVwiK24udG9VVENTdHJpbmcoKTpcIlwiLGkucGF0aD9cIjsgUGF0aD1cIitpLnBhdGg6XCJcIixpLmRvbWFpbj9cIjsgRG9tYWluPVwiK2kuZG9tYWluOlwiXCIsaS5odHRwT25seT9cIjsgSHR0cE9ubHlcIjpcIlwiLGkuc2VjdXJlP1wiOyBTZWN1cmVcIjpcIlwiXS5qb2luKFwiXCIpO2lmKHMpe3MucmVxLnFDb29raWVzP3MucmVxLnFDb29raWVzLnB1c2goYSk6cy5yZXEucUNvb2tpZXM9W2FdLHMucmVzLnNldEhlYWRlcihcIlNldC1Db29raWVcIixzLnJlcS5xQ29va2llcyk7dmFyIGw9cy5yZXEuaGVhZGVycy5jb29raWV8fFwiXCI7aWYodm9pZCAwIT09biYmbzwwKXt2YXIgYz1nZXQodCxzKTt2b2lkIDAhPT1jJiYobD1sLnJlcGxhY2UodCtcIj1cIitjK1wiOyBcIixcIlwiKS5yZXBsYWNlKFwiOyBcIit0K1wiPVwiK2MsXCJcIikucmVwbGFjZSh0K1wiPVwiK2MsXCJcIikpfWVsc2UgbD1sP3IrXCI7IFwiK2w6YTtzLnJlcS5oZWFkZXJzLmNvb2tpZT1sfWVsc2UgZG9jdW1lbnQuY29va2llPWF9ZnVuY3Rpb24gZ2V0KHQsZSl7Zm9yKHZhciBpLHMsbixvPXQ/dm9pZCAwOnt9LHI9ZT9lLnJlcS5oZWFkZXJzOmRvY3VtZW50LGE9ci5jb29raWU/ci5jb29raWUuc3BsaXQoXCI7IFwiKTpbXSxsPTAsYz1hLmxlbmd0aDtsPGM7bCsrKWlmKHM9ZGVjb2RlKChpPWFbbF0uc3BsaXQoXCI9XCIpKS5zaGlmdCgpKSxuPWkuam9pbihcIj1cIiksdCl7aWYodD09PXMpe289cmVhZChuKTticmVha319ZWxzZSBvW3NdPW47cmV0dXJuIG99ZnVuY3Rpb24gcmVtb3ZlKHQsZSxpKXtzZXQodCxcIlwiLE9iamVjdC5hc3NpZ24oe30sZSx7ZXhwaXJlczotMX0pLGkpfWZ1bmN0aW9uIGhhcyh0LGUpe3JldHVybiB2b2lkIDAhPT1nZXQodCxlKX1mdW5jdGlvbiBnZXRPYmplY3QodCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBlPXQuc3NyO3JldHVybntnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGdldCh0LGUpfSxzZXQ6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBzZXQodCxpLHMsZSl9LGhhczpmdW5jdGlvbih0KXtyZXR1cm4gaGFzKHQsZSl9LHJlbW92ZTpmdW5jdGlvbih0LGkpe3JldHVybiByZW1vdmUodCxpLGUpfSxhbGw6ZnVuY3Rpb24oKXtyZXR1cm4gZ2V0KG51bGwsZSl9fX12YXIgdm0sdGltZW91dCx1cGRhdGVJZCxzc3JUYWtlb3Zlcixjb29raWVzPXtwYXJzZVNTUjpmdW5jdGlvbih0KXtyZXR1cm4gdD9nZXRPYmplY3Qoe3Nzcjp0fSk6dGhpc30saW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9dC5xdWV1ZXM7aXNTU1I/aS5zZXJ2ZXIucHVzaChmdW5jdGlvbih0LGUpe3QuY29va2llcz1nZXRPYmplY3QoZSl9KTooT2JqZWN0LmFzc2lnbih0aGlzLGdldE9iamVjdCgpKSxlLmNvb2tpZXM9dGhpcyl9fSxkaWFsb2c9e2luc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPXQuVnVlO3RoaXMuY3JlYXRlPWUuZGlhbG9nPW1vZGFsRm4oUURpYWxvZyxpKX19LGxvYWRpbmdCYXI9e3N0YXJ0OmZ1bmN0aW9uKCl7fSxzdG9wOmZ1bmN0aW9uKCl7fSxpbmNyZW1lbnQ6ZnVuY3Rpb24oKXt9LGluc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPXQuVnVlLHM9dC5jZmc7aWYoaXNTU1IpZS5sb2FkaW5nQmFyPXRoaXM7ZWxzZXt2YXIgbj1lLmxvYWRpbmdCYXI9bmV3IGkoe3JlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChRQWpheEJhcix7cmVmOlwiYmFyXCIscHJvcHM6cy5sb2FkaW5nQmFyfSl9fSkuJG1vdW50KCkuJHJlZnMuYmFyO09iamVjdC5hc3NpZ24odGhpcyx7c3RhcnQ6bi5zdGFydCxzdG9wOm4uc3RvcCxpbmNyZW1lbnQ6bi5pbmNyZW1lbnR9KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUubG9hZGluZ0Jhci4kcGFyZW50LiRlbCl9fX0scHJvcHM9e30sZGVmYXVsdHM9e2RlbGF5OjAsbWVzc2FnZTohMSxzcGlubmVyU2l6ZTo4MCxzcGlubmVyQ29sb3I6XCJ3aGl0ZVwiLG1lc3NhZ2VDb2xvcjpcIndoaXRlXCIsc3Bpbm5lcjpRU3Bpbm5lcixjdXN0b21DbGFzczohMX0sc3RhdGljQ2xhc3M9XCJxLWxvYWRpbmcgYW5pbWF0ZS1mYWRlIGZ1bGxzY3JlZW4gY29sdW1uIGZsZXgtY2VudGVyIHotbWF4XCIsbG9hZGluZz17aXNBY3RpdmU6ITEsc2hvdzpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lzU1NSfHwoXCJzdHJpbmdcIj09dHlwZW9mKHByb3BzPU9iamVjdC5hc3NpZ24oe30sZGVmYXVsdHMsdCkpLmN1c3RvbUNsYXNzJiYocHJvcHMuY3VzdG9tQ2xhc3M9cHJvcHMuY3VzdG9tQ2xhc3MudHJpbSgpKSx0aGlzLmlzQWN0aXZlP3ZtJiZ2bS4kZm9yY2VVcGRhdGUoKToodGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGltZW91dD1udWxsO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJ3aXRoLWxvYWRpbmdcIiksdm09bmV3IGUuX19WdWUoe25hbWU6XCJRTG9hZGluZ1wiLGVsOnQscmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOnN0YXRpY0NsYXNzLGNsYXNzOnByb3BzLmN1c3RvbUNsYXNzfSxbdChwcm9wcy5zcGlubmVyLHtwcm9wczp7Y29sb3I6cHJvcHMuc3Bpbm5lckNvbG9yLHNpemU6cHJvcHMuc3Bpbm5lclNpemV9fSkscHJvcHMubWVzc2FnZT90KFwiZGl2XCIse2NsYXNzOlwidGV4dC1cIitwcm9wcy5tZXNzYWdlQ29sb3IsZG9tUHJvcHM6e2lubmVySFRNTDpwcm9wcy5tZXNzYWdlfX0pOm51bGxdKX19KX0scHJvcHMuZGVsYXkpLHRoaXMuaXNBY3RpdmU9ITApKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuaXNBY3RpdmUmJih0aW1lb3V0PyhjbGVhclRpbWVvdXQodGltZW91dCksdGltZW91dD1udWxsKToodm0uJGRlc3Ryb3koKSxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJ3aXRoLWxvYWRpbmdcIiksdm0uJGVsLnJlbW92ZSgpLHZtPW51bGwpLHRoaXMuaXNBY3RpdmU9ITEpfSxzZXREZWZhdWx0czpmdW5jdGlvbih0KXtPYmplY3QuYXNzaWduKGRlZmF1bHRzLHQpfSxfX1Z1ZTpudWxsLGluc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPXQuVnVlLHM9dC5jZmcubG9hZGluZztzJiZ0aGlzLnNldERlZmF1bHRzKHMpLGUubG9hZGluZz10aGlzLHRoaXMuX19WdWU9aX19O2Z1bmN0aW9uIG5vcm1hbGl6ZSh0KXt0LnRpdGxlJiYodC50aXRsZT10LnRpdGxlVGVtcGxhdGU/dC50aXRsZVRlbXBsYXRlKHQudGl0bGV8fFwiXCIpOnQudGl0bGUsZGVsZXRlIHQudGl0bGVUZW1wbGF0ZSksW1tcIm1ldGFcIixcImNvbnRlbnRcIl0sW1wibGlua1wiLFwiaHJlZlwiXV0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgaT10W2VbMF1dLHM9ZVsxXTtmb3IodmFyIG4gaW4gaSl7dmFyIG89aVtuXTtvLnRlbXBsYXRlJiYoMT09PU9iamVjdC5rZXlzKG8pLmxlbmd0aD9kZWxldGUgaVtuXToob1tzXT1vLnRlbXBsYXRlKG9bc118fFwiXCIpLGRlbGV0ZSBvLnRlbXBsYXRlKSl9fSl9ZnVuY3Rpb24gY2hhbmdlZCh0LGUpe2lmKE9iamVjdC5rZXlzKHQpLmxlbmd0aCE9PU9iamVjdC5rZXlzKGUpLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGkgaW4gdClpZih0W2ldIT09ZVtpXSlyZXR1cm4hMH1mdW5jdGlvbiBib2R5RmlsdGVyKHQpe3JldHVybiFbXCJjbGFzc1wiLFwic3R5bGVcIl0uaW5jbHVkZXModCl9ZnVuY3Rpb24gaHRtbEZpbHRlcih0KXtyZXR1cm4hW1wibGFuZ1wiLFwiZGlyXCJdLmluY2x1ZGVzKHQpfWZ1bmN0aW9uIGRpZmYodCxlKXt2YXIgaT17fSxzPXt9O3JldHVybiB0Pyh0LnRpdGxlIT09ZS50aXRsZSYmKGkudGl0bGU9ZS50aXRsZSksW1wibWV0YVwiLFwibGlua1wiLFwic2NyaXB0XCIsXCJodG1sQXR0clwiLFwiYm9keUF0dHJcIl0uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbz10W25dLHI9ZVtuXTtpZihzW25dPVtdLG8pe2Zvcih2YXIgYSBpbiBpW25dPXt9LG8pci5oYXNPd25Qcm9wZXJ0eShhKXx8c1tuXS5wdXNoKGEpO2Zvcih2YXIgbCBpbiByKW8uaGFzT3duUHJvcGVydHkobCk/Y2hhbmdlZChvW2xdLHJbbF0pJiYoc1tuXS5wdXNoKGwpLGlbbl1bbF09cltsXSk6aVtuXVtsXT1yW2xdfWVsc2UgaVtuXT1yfSkse2FkZDppLHJlbW92ZTpzfSk6e2FkZDplLHJlbW92ZTpzfX1mdW5jdGlvbiBhcHBseSh0KXt2YXIgZT10LmFkZCxpPXQucmVtb3ZlO2UudGl0bGUmJihkb2N1bWVudC50aXRsZT1lLnRpdGxlKSxPYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmKFtcIm1ldGFcIixcImxpbmtcIixcInNjcmlwdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdF0uZm9yRWFjaChmdW5jdGlvbihlKXtkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3IodCsnW2RhdGEtcW1ldGE9XCInK2UrJ1wiXScpLnJlbW92ZSgpfSl9KSxpLmh0bWxBdHRyLmZpbHRlcihodG1sRmlsdGVyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodCl9KSxpLmJvZHlBdHRyLmZpbHRlcihib2R5RmlsdGVyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RvY3VtZW50LmJvZHkucmVtb3ZlQXR0cmlidXRlKHQpfSkpLFtcIm1ldGFcIixcImxpbmtcIixcInNjcmlwdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPWVbdF07Zm9yKHZhciBzIGluIGkpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7Zm9yKHZhciBvIGluIGlbc10pXCJpbm5lckhUTUxcIiE9PW8mJm4uc2V0QXR0cmlidXRlKG8saVtzXVtvXSk7bi5zZXRBdHRyaWJ1dGUoXCJkYXRhLXFtZXRhXCIscyksXCJzY3JpcHRcIj09PXQmJihuLmlubmVySFRNTD1pW3NdLmlubmVySFRNTHx8XCJcIiksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuKX19KSxPYmplY3Qua2V5cyhlLmh0bWxBdHRyKS5maWx0ZXIoaHRtbEZpbHRlcikuZm9yRWFjaChmdW5jdGlvbih0KXtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKHQsZS5odG1sQXR0clt0XXx8XCJcIil9KSxPYmplY3Qua2V5cyhlLmJvZHlBdHRyKS5maWx0ZXIoYm9keUZpbHRlcikuZm9yRWFjaChmdW5jdGlvbih0KXtkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSh0LGUuYm9keUF0dHJbdF18fFwiXCIpfSl9ZnVuY3Rpb24gcGFyc2VNZXRhKHQsZSl7aWYoIXQuX2luYWN0aXZlKXt2YXIgaT10LiRvcHRpb25zLm1ldGE7aSYmKGV4dGVuZCghMCxlLHQuX19xTWV0YSksaS5zdG9wUHJvcGFnYXRpb24pfHx0LiRjaGlsZHJlbiYmdC4kY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtwYXJzZU1ldGEodCxlKX0pfX1mdW5jdGlvbiB1cGRhdGVDbGllbnQoKXtpZihzc3JUYWtlb3ZlcilyZXR1cm4gc3NyVGFrZW92ZXI9ITEsdGhpcy4kcm9vdC5fX2N1cnJlbnRNZXRhPXdpbmRvdy5fX1FfTUVUQV9fLHZvaWQgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKFwic2NyaXB0W2RhdGEtcW1ldGEtaW5pdF1cIikucmVtb3ZlKCk7dmFyIHQ9e3RpdGxlOlwiXCIsdGl0bGVUZW1wbGF0ZTpudWxsLG1ldGE6e30sbGluazp7fSxzY3JpcHQ6e30saHRtbEF0dHI6e30sYm9keUF0dHI6e319O3BhcnNlTWV0YSh0aGlzLiRyb290LHQpLG5vcm1hbGl6ZSh0KSxhcHBseShkaWZmKHRoaXMuJHJvb3QuX19jdXJyZW50TWV0YSx0KSksdGhpcy4kcm9vdC5fX2N1cnJlbnRNZXRhPXR9ZnVuY3Rpb24gZ2V0QXR0cih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9dFtlXTtyZXR1cm4gZSsodm9pZCAwIT09aT8nPVwiJytpKydcIic6XCJcIil9fWZ1bmN0aW9uIGdldEhlYWQodCl7dmFyIGU9XCJcIjtyZXR1cm4gdC50aXRsZSYmKGUrPVwiPHRpdGxlPlwiK3QudGl0bGUrXCI8L3RpdGxlPlwiKSxbXCJtZXRhXCIsXCJsaW5rXCIsXCJzY3JpcHRcIl0uZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcz10W2ldO2Zvcih2YXIgbiBpbiBzKXt2YXIgbz1PYmplY3Qua2V5cyhzW25dKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuXCJpbm5lckhUTUxcIiE9PXR9KS5tYXAoZ2V0QXR0cihzW25dKSk7ZSs9XCI8XCIraStcIiBcIitvLmpvaW4oXCIgXCIpKycgZGF0YS1xbWV0YT1cIicrbisnXCI+JyxcInNjcmlwdFwiPT09aSYmKGUrPShzW25dLmlubmVySFRNTHx8XCJcIikrXCI8XFwvc2NyaXB0PlwiKX19KSxlfWZ1bmN0aW9uIGdldFNlcnZlck1ldGEodCxlKXt2YXIgaT17dGl0bGU6XCJcIix0aXRsZVRlbXBsYXRlOm51bGwsbWV0YTp7fSxsaW5rOnt9LGh0bWxBdHRyOnt9LGJvZHlBdHRyOnt9LG5vc2NyaXB0Ont9fTtwYXJzZU1ldGEodCxpKSxub3JtYWxpemUoaSk7dmFyIHM9e1wiJSVRX0hUTUxfQVRUUlMlJVwiOk9iamVjdC5rZXlzKGkuaHRtbEF0dHIpLmZpbHRlcihodG1sRmlsdGVyKS5tYXAoZ2V0QXR0cihpLmh0bWxBdHRyKSkuam9pbihcIiBcIiksXCIlJVFfSEVBRF9UQUdTJSVcIjpnZXRIZWFkKGkpLFwiJSVRX0JPRFlfQVRUUlMlJVwiOk9iamVjdC5rZXlzKGkuYm9keUF0dHIpLmZpbHRlcihib2R5RmlsdGVyKS5tYXAoZ2V0QXR0cihpLmJvZHlBdHRyKSkuam9pbihcIiBcIiksXCIlJVFfQk9EWV9UQUdTJSVcIjpPYmplY3Qua2V5cyhpLm5vc2NyaXB0KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuJzxub3NjcmlwdCBkYXRhLXFtZXRhPVwiJyt0KydcIj4nK2kubm9zY3JpcHRbdF0rXCI8L25vc2NyaXB0PlwifSkuam9pbihcIlwiKStcIjxzY3JpcHQgZGF0YS1xbWV0YS1pbml0PndpbmRvdy5fX1FfTUVUQV9fPVwiKyhkZWxldGUgaS5ub3NjcmlwdCYmSlNPTi5zdHJpbmdpZnkoaSkpK1wiPFxcL3NjcmlwdD5cIn07cmV0dXJuIE9iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odCl7ZT1lLnJlcGxhY2UodCxzW3RdKX0pLGV9ZnVuY3Rpb24gYmVmb3JlQ3JlYXRlKCl7dGhpcy4kb3B0aW9ucy5tZXRhJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy4kb3B0aW9ucy5tZXRhPyh0aGlzLiRvcHRpb25zLmNvbXB1dGVkfHwodGhpcy4kb3B0aW9ucy5jb21wdXRlZD17fSksdGhpcy4kb3B0aW9ucy5jb21wdXRlZC5fX3FNZXRhPXRoaXMuJG9wdGlvbnMubWV0YSk6dGhpcy5fX3FNZXRhPXRoaXMuJG9wdGlvbnMubWV0YSl9ZnVuY3Rpb24gdHJpZ2dlck1ldGEoKXt0aGlzLiRvcHRpb25zLm1ldGEmJnRoaXMuX19xTWV0YVVwZGF0ZSgpfXZhciBtZXRhPXtpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXQucXVldWVzLGk9dC5WdWU7aXNTU1I/KGkucHJvdG90eXBlLiRnZXRNZXRhSFRNTD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGdldFNlcnZlck1ldGEodCxlKX19LGkubWl4aW4oe2JlZm9yZUNyZWF0ZTpiZWZvcmVDcmVhdGV9KSxlLnNlcnZlci5wdXNoKGZ1bmN0aW9uKHQsZSl7ZS5zc3IuUV9IVE1MX0FUVFJTKz1cIiAlJVFfSFRNTF9BVFRSUyUlXCIsT2JqZWN0LmFzc2lnbihlLnNzcix7UV9IRUFEX1RBR1M6XCIlJVFfSEVBRF9UQUdTJSVcIixRX0JPRFlfQVRUUlM6XCIlJVFfQk9EWV9BVFRSUyUlXCIsUV9CT0RZX1RBR1M6XCIlJVFfQk9EWV9UQUdTJSVcIn0pfSkpOihzc3JUYWtlb3Zlcj1mcm9tU1NSLGkubWl4aW4oe2JlZm9yZUNyZWF0ZTpiZWZvcmVDcmVhdGUsY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuJG9wdGlvbnMubWV0YSYmKHRoaXMuX19xTWV0YVVud2F0Y2g9dGhpcy4kd2F0Y2goXCJfX3FNZXRhXCIsdGhpcy5fX3FNZXRhVXBkYXRlKSl9LGFjdGl2YXRlZDp0cmlnZ2VyTWV0YSxkZWFjdGl2YXRlZDp0cmlnZ2VyTWV0YSxiZWZvcmVNb3VudDp0cmlnZ2VyTWV0YSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRvcHRpb25zLm1ldGEmJih0aGlzLl9fcU1ldGFVbndhdGNoKCksdGhpcy5fX3FNZXRhVXBkYXRlKCkpfSxtZXRob2RzOntfX3FNZXRhVXBkYXRlOmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHVwZGF0ZUlkKSx1cGRhdGVJZD1zZXRUaW1lb3V0KHVwZGF0ZUNsaWVudC5iaW5kKHRoaXMpLDUwKX19fSkpfX0sZGVmYXVsdHMkMT17fSxwb3NpdGlvbkxpc3Q9W1widG9wLWxlZnRcIixcInRvcC1yaWdodFwiLFwiYm90dG9tLWxlZnRcIixcImJvdHRvbS1yaWdodFwiLFwidG9wXCIsXCJib3R0b21cIixcImxlZnRcIixcInJpZ2h0XCIsXCJjZW50ZXJcIl07ZnVuY3Rpb24gaW5pdCh0KXt2YXIgZT10LlZ1ZSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSx0aGlzLl9fdm09bmV3IGUoe25hbWU6XCJRTm90aWZpY2F0aW9uc1wiLGRhdGE6e25vdGlmczp7Y2VudGVyOltdLGxlZnQ6W10scmlnaHQ6W10sdG9wOltdLFwidG9wLWxlZnRcIjpbXSxcInRvcC1yaWdodFwiOltdLGJvdHRvbTpbXSxcImJvdHRvbS1sZWZ0XCI6W10sXCJib3R0b20tcmlnaHRcIjpbXX19LG1ldGhvZHM6e2FkZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKFwiTm90aWZ5OiBwYXJhbWV0ZXIgcmVxdWlyZWRcIiksITE7dmFyIGk9T2JqZWN0LmFzc2lnbih7fSxkZWZhdWx0cyQxLFwic3RyaW5nXCI9PXR5cGVvZiB0P3ttZXNzYWdlOnR9OmNsb25lKHQpKTtpZihpLnBvc2l0aW9uKXtpZighcG9zaXRpb25MaXN0LmluY2x1ZGVzKGkucG9zaXRpb24pKXJldHVybiBjb25zb2xlLmVycm9yKFwiTm90aWZ5OiB3cm9uZyBwb3NpdGlvbjogXCIraS5wb3NpdGlvbiksITF9ZWxzZSBpLnBvc2l0aW9uPVwiYm90dG9tXCI7aWYoaS5fX3VpZD11aWQoKSx2b2lkIDA9PT1pLnRpbWVvdXQpaS50aW1lb3V0PTVlMztlbHNle3ZhciBzPXBhcnNlSW50KGkudGltZW91dCwxMCk7aWYoaXNOYU4ocyl8fHM8MClyZXR1cm4gY29uc29sZS5lcnJvcihcIk5vdGlmeTogd3JvbmcgdGltZW91dDogXCIraS50aW1lb3V0KSwhMTtpLnRpbWVvdXQ9c312YXIgbj1mdW5jdGlvbigpe2UucmVtb3ZlKGkpfTtpZih0LmFjdGlvbnMmJihpLmFjdGlvbnM9dC5hY3Rpb25zLm1hcChmdW5jdGlvbih0KXt2YXIgZT10LmhhbmRsZXIsaT1jbG9uZSh0KTtyZXR1cm4gaS5oYW5kbGVyPVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXtlKCksIXQubm9EaXNtaXNzJiZuKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIG4oKX0saX0pKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lm9uRGlzbWlzcyYmKGkub25EaXNtaXNzPXQub25EaXNtaXNzKSxpLmNsb3NlQnRuKXt2YXIgbz1be2Nsb3NlQnRuOiEwLGxhYmVsOmkuY2xvc2VCdG4saGFuZGxlcjpufV07aS5hY3Rpb25zPWkuYWN0aW9ucz9pLmFjdGlvbnMuY29uY2F0KG8pOm99aS50aW1lb3V0PjAmJihpLl9fdGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bigpfSxpLnRpbWVvdXQrMWUzKSk7dmFyIHI9aS5wb3NpdGlvbi5pbmRleE9mKFwidG9wXCIpPi0xP1widW5zaGlmdFwiOlwicHVzaFwiO3JldHVybiB0aGlzLm5vdGlmc1tpLnBvc2l0aW9uXVtyXShpKSxufSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5fX3RpbWVvdXQmJmNsZWFyVGltZW91dCh0Ll9fdGltZW91dCk7dmFyIGU9dGhpcy5ub3RpZnNbdC5wb3NpdGlvbl0uaW5kZXhPZih0KTtpZigtMSE9PWUpe3ZhciBpPXRoaXMuJHJlZnNbXCJub3RpZl9cIit0Ll9fdWlkXTtpZihpJiZpLiRlbCl7dmFyIHM9aS4kZWw7cy5zdHlsZS5sZWZ0PXMub2Zmc2V0TGVmdCtcInB4XCIscy5zdHlsZS53aWR0aD1nZXRDb21wdXRlZFN0eWxlKHMpLndpZHRofXRoaXMubm90aWZzW3QucG9zaXRpb25dLnNwbGljZShlLDEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQub25EaXNtaXNzJiZ0Lm9uRGlzbWlzcygpfX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1ub3RpZmljYXRpb25zXCJ9LHBvc2l0aW9uTGlzdC5tYXAoZnVuY3Rpb24oaSl7dmFyIHM9W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXS5pbmNsdWRlcyhpKT9cImNlbnRlclwiOmkuaW5kZXhPZihcInRvcFwiKT4tMT9cInRvcFwiOlwiYm90dG9tXCIsbj1pLmluZGV4T2YoXCJsZWZ0XCIpPi0xP1wic3RhcnRcIjppLmluZGV4T2YoXCJyaWdodFwiKT4tMT9cImVuZFwiOlwiY2VudGVyXCIsbz1bXCJsZWZ0XCIsXCJyaWdodFwiXS5pbmNsdWRlcyhpKT9cIml0ZW1zLVwiKyhcImxlZnRcIj09PWk/XCJzdGFydFwiOlwiZW5kXCIpK1wiIGp1c3RpZnktY2VudGVyXCI6XCJjZW50ZXJcIj09PWk/XCJmbGV4LWNlbnRlclwiOlwiaXRlbXMtXCIrbjtyZXR1cm4gdChcInRyYW5zaXRpb24tZ3JvdXBcIix7a2V5Omksc3RhdGljQ2xhc3M6XCJxLW5vdGlmaWNhdGlvbi1saXN0IHEtbm90aWZpY2F0aW9uLWxpc3QtXCIrcytcIiBmaXhlZCBjb2x1bW4gXCIrbyx0YWc6XCJkaXZcIixwcm9wczp7bmFtZTpcInEtbm90aWZpY2F0aW9uLVwiK2ksbW9kZTpcIm91dC1pblwifX0sZS5ub3RpZnNbaV0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0KFFBbGVydCx7cmVmOlwibm90aWZfXCIrZS5fX3VpZCxrZXk6ZS5fX3VpZCxzdGF0aWNDbGFzczpcInEtbm90aWZpY2F0aW9uXCIscHJvcHM6ZX0sW2UubWVzc2FnZV0pfSkpfSkpfX0pLHRoaXMuX192bS4kbW91bnQoaSl9dmFyIG5vdGlmeT17Y3JlYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBpc1NTUj9mdW5jdGlvbigpe306dGhpcy5fX3ZtLmFkZCh0KX0sc2V0RGVmYXVsdHM6ZnVuY3Rpb24odCl7T2JqZWN0LmFzc2lnbihkZWZhdWx0cyQxLHQpfSxpbnN0YWxsOmZ1bmN0aW9uKHQpe2lmKGlzU1NSKXJldHVybiB0LiRxLm5vdGlmeT1mdW5jdGlvbigpe30sdm9pZCh0LiRxLm5vdGlmeS5zZXREZWZhdWx0cz1mdW5jdGlvbigpe30pO2luaXQuY2FsbCh0aGlzLHQpLHQuY2ZnLm5vdGlmeSYmdGhpcy5zZXREZWZhdWx0cyh0LmNmZy5ub3RpZnkpLHQuJHEubm90aWZ5PXRoaXMuY3JlYXRlLmJpbmQodGhpcyksdC4kcS5ub3RpZnkuc2V0RGVmYXVsdHM9dGhpcy5zZXREZWZhdWx0c319LFNJWkVfTElTVD1bXCJzbVwiLFwibWRcIixcImxnXCIsXCJ4bFwiXSxzY3JlZW49e3dpZHRoOjAsc2l6ZXM6e3NtOjU3NixtZDo3NjgsbGc6OTkyLHhsOjEyMDB9LGx0OntzbTohMCxtZDohMCxsZzohMCx4bDohMH0sZ3Q6e30seHM6ITAsc2V0U2l6ZXM6ZnVuY3Rpb24oKXt9LHNldERlYm91bmNlOmZ1bmN0aW9uKCl7fSxpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10LiRxLHM9dC5xdWV1ZXMsbj10LlZ1ZTtpZihpc1NTUilpLnNjcmVlbj10aGlzO2Vsc2V7dmFyIG8scixhPWZ1bmN0aW9uKHQpe3ZhciBpPXdpbmRvdy5pbm5lcldpZHRoLHM9ZS5zaXplczt0JiZpPT09ZS53aWR0aHx8KGUud2lkdGg9aSxlLmd0LnhzPWk+PXMuc20sZS5ndC5zbT1pPj1zLm1kLGUuZ3QubWQ9aT49cy5sZyxlLmd0LmxnPWk+PXMueGwsZS5sdC5zbT1pPHMuc20sZS5sdC5tZD1pPHMubWQsZS5sdC5sZz1pPHMubGcsZS5sdC54bD1pPHMueGwsZS54cz1lLmx0LnNtLGUuc209ZS5ndC54cyYmZS5sdC5tZCxlLm1kPWUuZ3Quc20mJmUubHQubGcsZS5sZz1lLmd0Lm1kJiZlLmx0LnhsLGUueGw9aT5zLnhsKX0sbD17fTt0aGlzLnNldFNpemVzPWZ1bmN0aW9uKHQpe1NJWkVfTElTVC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV0mJihsW2VdPXRbZV0pfSl9LHRoaXMuc2V0RGVib3VuY2U9ZnVuY3Rpb24odCl7cj10fTt2YXIgYz1mdW5jdGlvbigpe3ZhciB0PWdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSk7dC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1xLXNpemUtc21cIikmJlNJWkVfTElTVC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2Uuc2l6ZXNbaV09cGFyc2VJbnQodC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1xLXNpemUtXCIraSksMTApfSksZS5zZXRTaXplcz1mdW5jdGlvbih0KXtTSVpFX0xJU1QuZm9yRWFjaChmdW5jdGlvbihpKXt0W2ldJiYoZS5zaXplc1tpXT10W2ldKX0pLGEoKX0sZS5zZXREZWJvdW5jZT1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe2EoITApfTtvJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLG8sbGlzdGVuT3B0cy5wYXNzaXZlKSxvPXQ+MD9kZWJvdW5jZShlLHQpOmUsd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixvLGxpc3Rlbk9wdHMucGFzc2l2ZSl9LGUuc2V0RGVib3VuY2Uocnx8MTAwKSxPYmplY3Qua2V5cyhsKS5sZW5ndGg+MD8oZS5zZXRTaXplcyhsKSxsPW51bGwpOmEoKX07ZnJvbVNTUj9zLnRha2VvdmVyLnB1c2goYyk6YygpLG4udXRpbC5kZWZpbmVSZWFjdGl2ZShpLFwic2NyZWVuXCIsdGhpcyl9fX07ZnVuY3Rpb24gZW5jb2RlJDEodCl7cmV0dXJuXCJbb2JqZWN0IERhdGVdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk/XCJfX3FfZGF0ZXxcIit0LnRvVVRDU3RyaW5nKCk6XCJbb2JqZWN0IFJlZ0V4cF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT9cIl9fcV9leHByfFwiK3Quc291cmNlOlwibnVtYmVyXCI9PXR5cGVvZiB0P1wiX19xX251bWJ8XCIrdDpcImJvb2xlYW5cIj09dHlwZW9mIHQ/XCJfX3FfYm9vbHxcIisodD9cIjFcIjpcIjBcIik6XCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJfX3Ffc3RybnxcIit0OlwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/XCJfX3Ffc3RybnxcIit0LnRvU3RyaW5nKCk6dD09PU9iamVjdCh0KT9cIl9fcV9vYmp0fFwiK0pTT04uc3RyaW5naWZ5KHQpOnR9ZnVuY3Rpb24gZGVjb2RlJDEodCl7dmFyIGUsaTtpZih0Lmxlbmd0aDw5KXJldHVybiB0O3N3aXRjaChlPXQuc3Vic3RyKDAsOCksaT10LnN1YnN0cmluZyg5KSxlKXtjYXNlXCJfX3FfZGF0ZVwiOnJldHVybiBuZXcgRGF0ZShpKTtjYXNlXCJfX3FfZXhwclwiOnJldHVybiBuZXcgUmVnRXhwKGkpO2Nhc2VcIl9fcV9udW1iXCI6cmV0dXJuIE51bWJlcihpKTtjYXNlXCJfX3FfYm9vbFwiOnJldHVybiBCb29sZWFuKFwiMVwiPT09aSk7Y2FzZVwiX19xX3N0cm5cIjpyZXR1cm5cIlwiK2k7Y2FzZVwiX19xX29ianRcIjpyZXR1cm4gSlNPTi5wYXJzZShpKTtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBnZXRFbXB0eVN0b3JhZ2UoKXt2YXIgdD1mdW5jdGlvbigpe307cmV0dXJue2hhczp0LGdldDp7bGVuZ3RoOnQsaXRlbTp0LGluZGV4OnQsYWxsOnR9LHNldDp0LHJlbW92ZTp0LGNsZWFyOnQsaXNFbXB0eTp0fX1mdW5jdGlvbiBnZXRTdG9yYWdlKHQpe3ZhciBlPXdpbmRvd1t0K1wiU3RvcmFnZVwiXSxpPWZ1bmN0aW9uKHQpe3ZhciBpPWUuZ2V0SXRlbSh0KTtyZXR1cm4gaT9kZWNvZGUkMShpKTpudWxsfTtyZXR1cm57aGFzOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09ZS5nZXRJdGVtKHQpfSxnZXQ6e2xlbmd0aDpmdW5jdGlvbigpe3JldHVybiBlLmxlbmd0aH0saXRlbTppLGluZGV4OmZ1bmN0aW9uKHQpe2lmKHQ8ZS5sZW5ndGgpcmV0dXJuIGkoZS5rZXkodCkpfSxhbGw6ZnVuY3Rpb24oKXtmb3IodmFyIHQscz17fSxuPWUubGVuZ3RoLG89MDtvPG47bysrKXNbdD1lLmtleShvKV09aSh0KTtyZXR1cm4gc319LHNldDpmdW5jdGlvbih0LGkpe2Uuc2V0SXRlbSh0LGVuY29kZSQxKGkpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe2UucmVtb3ZlSXRlbSh0KX0sY2xlYXI6ZnVuY3Rpb24oKXtlLmNsZWFyKCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PWUubGVuZ3RofX19dmFyIGxvY2FsU3RvcmFnZT17aW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9aXNTU1J8fCFoYXNXZWJTdG9yYWdlP2dldEVtcHR5U3RvcmFnZSgpOmdldFN0b3JhZ2UoXCJsb2NhbFwiKTtlLmxvY2FsU3RvcmFnZT1pLE9iamVjdC5hc3NpZ24odGhpcyxpKX19LHNlc3Npb25TdG9yYWdlPXtpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXQuJHEsaT1pc1NTUnx8IWhhc1dlYlN0b3JhZ2U/Z2V0RW1wdHlTdG9yYWdlKCk6Z2V0U3RvcmFnZShcInNlc3Npb25cIik7ZS5zZXNzaW9uU3RvcmFnZT1pLE9iamVjdC5hc3NpZ24odGhpcyxpKX19LHBsdWdpbnM9T2JqZWN0LmZyZWV6ZSh7QWN0aW9uU2hlZXQ6YWN0aW9uU2hlZXQsQWRkcmVzc2JhckNvbG9yOmFkZHJlc3NiYXJDb2xvcixBcHBGdWxsc2NyZWVuOmFwcEZ1bGxzY3JlZW4sQXBwVmlzaWJpbGl0eTphcHBWaXNpYmlsaXR5LENvb2tpZXM6Y29va2llcyxEaWFsb2c6ZGlhbG9nLExvYWRpbmdCYXI6bG9hZGluZ0JhcixMb2FkaW5nOmxvYWRpbmcsTWV0YTptZXRhLE5vdGlmeTpub3RpZnksUGxhdGZvcm06UGxhdGZvcm0sU2NyZWVuOnNjcmVlbixMb2NhbFN0b3JhZ2U6bG9jYWxTdG9yYWdlLFNlc3Npb25TdG9yYWdlOnNlc3Npb25TdG9yYWdlfSk7ZnVuY3Rpb24gb3BlblVybCh0LGUpe2lmKFBsYXRmb3JtLmlzLmNvcmRvdmEmJm5hdmlnYXRvciYmbmF2aWdhdG9yLmFwcClyZXR1cm4gbmF2aWdhdG9yLmFwcC5sb2FkVXJsKHQse29wZW5FeHRlcm5hbDohMH0pO3ZhciBpPXdpbmRvdy5vcGVuKHQsXCJfYmxhbmtcIik7aWYoaSlyZXR1cm4gaS5mb2N1cygpLGk7ZSYmZSgpfWZ1bmN0aW9uIG5vb3AoKXt9dmFyIGluZGV4X2VzbT1PYmplY3QuYXNzaWduKHt9LFZ1ZVBsdWdpbix7aW5zdGFsbDpmdW5jdGlvbih0LGUpe1Z1ZVBsdWdpbi5pbnN0YWxsKHQsT2JqZWN0LmFzc2lnbih7fSx7Y29tcG9uZW50czpjb21wb25lbnRzJDEsZGlyZWN0aXZlczpkaXJlY3RpdmVzLHBsdWdpbnM6cGx1Z2luc30sZSkpfX0pO2V4cG9ydCBkZWZhdWx0IGluZGV4X2VzbTtleHBvcnR7UUFjdGlvblNoZWV0LFFBamF4QmFyLFFBbGVydCxRQXV0b2NvbXBsZXRlLFFCcmVhZGNydW1icyxRQnJlYWRjcnVtYnNFbCxRQnRuLFFCdG5Hcm91cCxRQnRuRHJvcGRvd24sUUJ0blRvZ2dsZSxRQ2FyZCxRQ2FyZFRpdGxlLFFDYXJkTWFpbixRQ2FyZEFjdGlvbnMsUUNhcmRNZWRpYSxRQ2FyZFNlcGFyYXRvcixRQ2Fyb3VzZWwsUUNhcm91c2VsU2xpZGUsUUNhcm91c2VsQ29udHJvbCxRQ2hhdE1lc3NhZ2UsUUNoZWNrYm94LFFDaGlwLFFDaGlwc0lucHV0LFFDb2xsYXBzaWJsZSxRQ29sb3IsUUNvbG9yUGlja2VyLFFDb250ZXh0TWVudSxRRGF0ZXRpbWUsUURhdGV0aW1lUGlja2VyLFFEaWFsb2csUUVkaXRvcixRRmFiLFFGYWJBY3Rpb24sUUZpZWxkLFFJY29uLFFJbmZpbml0ZVNjcm9sbCxRSW5uZXJMb2FkaW5nLFFJbnB1dCxRSW5wdXRGcmFtZSxRSnVtYm90cm9uLFFLbm9iLFFMYXlvdXQsUUxheW91dERyYXdlcixRTGF5b3V0Rm9vdGVyLFFMYXlvdXRIZWFkZXIsUVBhZ2UsUVBhZ2VDb250YWluZXIsUVBhZ2VTdGlja3ksUUl0ZW0sUUl0ZW1TZXBhcmF0b3IsUUl0ZW1NYWluLFFJdGVtU2lkZSxRSXRlbVRpbGUsUUl0ZW1XcmFwcGVyLFFMaXN0LFFMaXN0SGVhZGVyLFFNb2RhbCxRTW9kYWxMYXlvdXQsUU5vU3NyLFFSZXNpemVPYnNlcnZhYmxlLFFTY3JvbGxPYnNlcnZhYmxlLFFXaW5kb3dSZXNpemVPYnNlcnZhYmxlLFFPcHRpb25Hcm91cCxRUGFnaW5hdGlvbixRUGFyYWxsYXgsUVBvcG92ZXIsUVBvcHVwRWRpdCxRUHJvZ3Jlc3MsUVB1bGxUb1JlZnJlc2gsUVJhZGlvLFFSYW5nZSxRUmF0aW5nLFFTY3JvbGxBcmVhLFFTZWFyY2gsUVNlbGVjdCxRU2xpZGVUcmFuc2l0aW9uLFFTbGlkZXIsUVNwaW5uZXIsUVNwaW5uZXJBdWRpbyxRU3Bpbm5lckJhbGwsUVNwaW5uZXJCYXJzLFFTcGlubmVyQ2lyY2xlcyxRU3Bpbm5lckNvbW1lbnQsUVNwaW5uZXJDdWJlLFFTcGlubmVyRG90cyxRU3Bpbm5lckZhY2Vib29rLFFTcGlubmVyR2VhcnMsUVNwaW5uZXJHcmlkLFFTcGlubmVySGVhcnRzLFFTcGlubmVySG91cmdsYXNzLFFTcGlubmVySW5maW5pdHksUVNwaW5uZXJfaW9zIGFzIFFTcGlubmVySW9zLERlZmF1bHRTcGlubmVyIGFzIFFTcGlubmVyTWF0LFFTcGlubmVyT3ZhbCxRU3Bpbm5lclBpZSxRU3Bpbm5lclB1ZmYsUVNwaW5uZXJSYWRpbyxRU3Bpbm5lclJpbmdzLFFTcGlubmVyVGFpbCxRU3RlcCxRU3RlcHBlcixRU3RlcHBlck5hdmlnYXRpb24sUVJvdXRlVGFiLFFUYWIsUVRhYlBhbmUsUVRhYnMsUVRhYmxlLFFUaCxRVHIsUVRkLFFUYWJsZUNvbHVtbnMsUVRpbWVsaW5lLFFUaW1lbGluZUVudHJ5LFFUb2dnbGUsUVRvb2xiYXIsUVRvb2xiYXJUaXRsZSxRVG9vbHRpcCxRVHJlZSxRVXBsb2FkZXIsUVZpZGVvLGJhY2tUb1RvcCBhcyBCYWNrVG9Ub3AsY2xvc2VPdmVybGF5IGFzIENsb3NlT3ZlcmxheSxnb0JhY2sgYXMgR29CYWNrLFJpcHBsZSxzY3JvbGxGaXJlIGFzIFNjcm9sbEZpcmUsc2Nyb2xsJDEgYXMgU2Nyb2xsLHRvdWNoSG9sZCBhcyBUb3VjaEhvbGQsVG91Y2hQYW4sVG91Y2hTd2lwZSxhY3Rpb25TaGVldCBhcyBBY3Rpb25TaGVldCxhZGRyZXNzYmFyQ29sb3IgYXMgQWRkcmVzc2JhckNvbG9yLGFwcEZ1bGxzY3JlZW4gYXMgQXBwRnVsbHNjcmVlbixhcHBWaXNpYmlsaXR5IGFzIEFwcFZpc2liaWxpdHksY29va2llcyBhcyBDb29raWVzLGRpYWxvZyBhcyBEaWFsb2csbG9hZGluZ0JhciBhcyBMb2FkaW5nQmFyLGxvYWRpbmcgYXMgTG9hZGluZyxtZXRhIGFzIE1ldGEsbm90aWZ5IGFzIE5vdGlmeSxQbGF0Zm9ybSxzY3JlZW4gYXMgU2NyZWVuLGxvY2FsU3RvcmFnZSBhcyBMb2NhbFN0b3JhZ2Usc2Vzc2lvblN0b3JhZ2UgYXMgU2Vzc2lvblN0b3JhZ2UsYW5pbWF0ZSxjbG9uZSxjb2xvcnMsZGF0ZSxkZWJvdW5jZSxkb20sZWFzaW5nLGV2ZW50LGV4dGVuZCxmaWx0ZXIsZm9ybWF0LGZyYW1lRGVib3VuY2Usbm9vcCxvcGVuVXJsIGFzIG9wZW5VUkwsc2Nyb2xsLHRocm90dGxlLHVpZH07IiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vcXVhc2FyLm1hdC5jc3NcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCI2M2JiNGQ2MFwiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9xdWFzYXIubWF0LmNzc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL3F1YXNhci5tYXQuY3NzXCIpO1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIoZnVuY3Rpb24gKGdsb2JhbCwgdW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICBpZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5leHRIYW5kbGUgPSAxOyAvLyBTcGVjIHNheXMgZ3JlYXRlciB0aGFuIHplcm9cbiAgICB2YXIgdGFza3NCeUhhbmRsZSA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICB2YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciByZWdpc3RlckltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYWxsYmFjaykge1xuICAgICAgLy8gQ2FsbGJhY2sgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24oXCJcIiArIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIENvcHkgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIGFuZCByZWdpc3RlciB0aGUgdGFza1xuICAgICAgdmFyIHRhc2sgPSB7IGNhbGxiYWNrOiBjYWxsYmFjaywgYXJnczogYXJncyB9O1xuICAgICAgdGFza3NCeUhhbmRsZVtuZXh0SGFuZGxlXSA9IHRhc2s7XG4gICAgICByZWdpc3RlckltbWVkaWF0ZShuZXh0SGFuZGxlKTtcbiAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuKHRhc2spIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdGFzay5jYWxsYmFjaztcbiAgICAgICAgdmFyIGFyZ3MgPSB0YXNrLmFyZ3M7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBydW4odGFzayk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcnVuSWZQcmVzZW50KGhhbmRsZSk7IH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gdHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMgOiBnbG9iYWwgOiBzZWxmKSk7XG4iLCJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcbiIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImFwcFwiIH0sXG4gICAgW1xuICAgICAgX3ZtLl9tKDApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImVtb2ppXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IF92bS5pbmRleCwgZW1vamk6IFwiOnNhbnRhOjpza2luLXRvbmUtMzpcIiwgc2l6ZTogMzIgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJlbW9qaVwiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBkYXRhOiBfdm0uaW5kZXgsIGVtb2ppOiBcInNhbnRhXCIsIHNldDogXCJ0d2l0dGVyXCIsIHNpemU6IDMyIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwiZW1vamlcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgZGF0YTogX3ZtLmluZGV4LCBlbW9qaTogX3ZtLnNhbnRhRW1vamlPYmplY3QsIHNpemU6IDMyIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSwgW1xuICAgICAgICBfYyhcImJ1dHRvblwiLCB7IG9uOiB7IGNsaWNrOiBfdm0udG9nZ2xlVmlzaWJsZSB9IH0sIFtcbiAgICAgICAgICBfdm0uX3YoXCJTaG93IC8gaGlkZSB0aGUgcGlja2VyXCIpXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnNtaWxlKSB9LFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0udG9nZ2xlVmlzaWJsZSB9XG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLl9sKFtcIm5hdGl2ZVwiLCBcImFwcGxlXCIsIFwiZ29vZ2xlXCIsIFwidHdpdHRlclwiLCBcImZhY2Vib29rXCJdLCBmdW5jdGlvbihcbiAgICAgICAgICAgIHNldFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IHNldCxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGRpc2FibGVkOiBfdm0uYWN0aXZlU2V0ID09IHNldCB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5hY3RpdmVTZXQgPSBzZXRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3Moc2V0KSArIFwiXFxuICAgICAgXCIpXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXNWaXNpYmxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInBpY2tlclwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5pbmRleCxcbiAgICAgICAgICAgICAgICAgIHNldDogX3ZtLmFjdGl2ZVNldCxcbiAgICAgICAgICAgICAgICAgIG5hdGl2ZTogX3ZtLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgIGVtb2ppOiBfdm0uZW1vamksXG4gICAgICAgICAgICAgICAgICBlbW9qaVRvb2x0aXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgZW1vamlTaXplOiAzMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgc2VsZWN0OiBfdm0uc2hvd0Vtb2ppIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSwgW192bS5fdihfdm0uX3MoX3ZtLmVtb2ppc091dHB1dCkpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9tKDEpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJoMlwiLCBbX3ZtLl92KFwiUURpYWxvZyBFeGFtcGxlXCIpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwicS1idG5cIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgbGFiZWw6IFwiT3BlbiBRRGlhbG9nXCIgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uZW1vamlQaWNrZXJEaWFsb2cgPSB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwicS1kaWFsb2dcIiwge1xuICAgICAgICBzY29wZWRTbG90czogX3ZtLl91KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYm9keVwiLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIF9jKFwicGlja2VyXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IF92bS5pbmRleCwgZW1vamlTaXplOiAyNCwgbmF0aXZlOiB0cnVlIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJveHk6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0pLFxuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIHZhbHVlOiBfdm0uZW1vamlQaWNrZXJEaWFsb2csXG4gICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgX3ZtLmVtb2ppUGlja2VyRGlhbG9nID0gJCR2XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcImVtb2ppUGlja2VyRGlhbG9nXCJcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImgyXCIsIFtfdm0uX3YoXCJDdXN0b20gRGlhbG9nIEV4YW1wbGVcIildKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmVtb2ppUGlja2VyQ3VzdG9tRGlhbG9nID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX3ZtLl92KFwiXFxuICAgICAgT3BlbiBDdXR0b20gRGlhbG9nXFxuICAgIFwiKV1cbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVtb2ppUGlja2VyQ3VzdG9tRGlhbG9nXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJwb3B1cFwiIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwicG9wdXAtYm94XCIsXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmVtb2ppUGlja2VyQ3VzdG9tRGlhbG9nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInBvcHVwLWNvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBvcHVwLWNsb3NlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmVtb2ppUGlja2VyQ3VzdG9tRGlhbG9nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiWFwiKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcImgyXCIsIFtfdm0uX3YoXCJcXG4gICAgICAgICAgRW1vamkgU2VsZWN0b3JcXG4gICAgICAgIFwiKV0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcInBpY2tlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZGF0YTogX3ZtLmluZGV4LCBlbW9qaVNpemU6IDI0LCBuYXRpdmU6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJoMlwiLCBbX3ZtLl92KFwiQ3VzdG9tIFNlYXJjaCBBbmQgUHJldmlldyBUZW1wbGF0ZXMgRXhhbXBsZVwiKV0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcIlBpY2tlclwiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBkYXRhOiBfdm0uaW5kZXgsIG5hdGl2ZTogdHJ1ZSB9LFxuICAgICAgICAgICAgc2NvcGVkU2xvdHM6IF92bS5fdShbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwic2VhcmNoVGVtcGxhdGVcIixcbiAgICAgICAgICAgICAgICBmbjogZnVuY3Rpb24oc2xvdFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogc2xvdFByb3BzLmkxOG4uc2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2xvdFByb3BzLm9uU2VhcmNoKCRldmVudC50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogXCJwcmV2aWV3VGVtcGxhdGVcIixcbiAgICAgICAgICAgICAgICBmbjogZnVuY3Rpb24oc2xvdFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlld1wiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1lbW9qaVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiRW1vamlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzbG90UHJvcHMuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiBzbG90UHJvcHMuZW1vamlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzbG90UHJvcHMuZW1vamlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcInBvaW50X3VwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmU6IHNsb3RQcm9wcy5lbW9qaVByb3BzLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraW46IHNsb3RQcm9wcy5lbW9qaVByb3BzLnNraW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IHNsb3RQcm9wcy5lbW9qaVByb3BzLnNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWRhdGFcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1uYW1lXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFByb3BzLmVtb2ppXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIn5cIiArIHNsb3RQcm9wcy5lbW9qaS5uYW1lICsgXCJ+XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiQ2hvb3NlLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lc1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFByb3BzLmVtb2ppID8gc2xvdFByb3BzLmVtb2ppLmNvbG9ucyA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJoMlwiLCBbX3ZtLl92KFwiRmlsdGVyZWQgcGlja2VyIGV4YW1wbGVcIildKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uZmxhZ3NWaXNpYmxlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImZsYWdzVmlzaWJsZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJyb3dcIlxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJQaWNrZXJcIiwge1xuICAgICAgICAgICAgcmVmOiBcImZsYWdzXCIsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBuYXRpdmU6IHRydWUsXG4gICAgICAgICAgICAgIGVtb2ppOiBcImZsYWctdGZcIixcbiAgICAgICAgICAgICAgZW1vamlTaXplOiAxOCxcbiAgICAgICAgICAgICAgZGF0YTogX3ZtLmluZGV4RmlsdGVyZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSwgW1xuICAgICAgICBfYyhcImJ1dHRvblwiLCB7IG9uOiB7IGNsaWNrOiBfdm0udG9nZ2xlRmxhZ3NWaXNpYmxlIH0gfSwgW1xuICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgIFNob3cgLyBoaWRlIHRoZSBmbGFncyBwaWNrZXIgKHdpdGggdi1zaG93KVxcbiAgICBcIilcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJoMlwiLCBbX3ZtLl92KFwiSTE4biBwaWNrZXIgZXhhbXBsZVwiKV0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcIlBpY2tlclwiLCB7XG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBlbW9qaTogXCJkZXBhcnRtZW50X3N0b3JlXCIsXG4gICAgICAgICAgICAgIGRhdGE6IF92bS5pbmRleEkxOG4sXG4gICAgICAgICAgICAgIGkxOG46IF92bS5pMThuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiaDJcIiwgW192bS5fdihcIkN1c3RvbSBvcmRlciBleGFtcGxlXCIpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW19jKFwiUGlja2VyXCIsIHsgYXR0cnM6IHsgZGF0YTogX3ZtLmluZGV4SW5jbHVkZSB9IH0pXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW1xuICBmdW5jdGlvbigpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sIFtcbiAgICAgIF9jKFwiaDFcIiwgW192bS5fdihcIkVtb2ppIE1hcnQgVnVlIPCfj6xcIildKVxuICAgIF0pXG4gIH0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHZhciBfdm0gPSB0aGlzXG4gICAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gICAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gICAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93LXNtYWxsXCIgfSwgW1xuICAgICAgX2MoXCJpZnJhbWVcIiwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHNyYzpcbiAgICAgICAgICAgIFwiaHR0cHM6Ly9naGJ0bnMuY29tL2dpdGh1Yi1idG4uaHRtbD91c2VyPXNlcmVicm92JnJlcG89ZW1vamktbWFydC12dWUmdHlwZT1zdGFyJmNvdW50PXRydWVcIixcbiAgICAgICAgICBmcmFtZUJvcmRlcjogXCIwXCIsXG4gICAgICAgICAgc2Nyb2xsaW5nOiBcIjBcIixcbiAgICAgICAgICB3aWR0aDogXCI5MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjIwcHhcIlxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF0pXG4gIH1cbl1cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0udmlldy5jYW5SZW5kZXJcbiAgICA/IF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtZW1vamlcIixcbiAgICAgICAgICBhdHRyczogeyB0aXRsZTogX3ZtLnZpZXcudGl0bGUsIFwiZGF0YS10aXRsZVwiOiBfdm0udGl0bGUgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgbW91c2VlbnRlcjogX3ZtLm9uTW91c2VFbnRlcixcbiAgICAgICAgICAgIG1vdXNlbGVhdmU6IF92bS5vbk1vdXNlTGVhdmUsXG4gICAgICAgICAgICBjbGljazogX3ZtLm9uQ2xpY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnZpZXcuY3NzQ2xhc3MsIHN0eWxlOiBfdm0udmlldy5jc3NTdHlsZSB9LCBbXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS52aWV3LmNvbnRlbnQpKVxuICAgICAgICAgIF0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydCBlbW9qaS1tYXJ0LXN0YXRpY1wiLCBzdHlsZTogX3ZtLmN1c3RvbVN0eWxlcyB9LFxuICAgIFtcbiAgICAgIF92bS5zaG93Q2F0ZWdvcmllc1xuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1iYXIgZW1vamktbWFydC1iYXItYW5jaG9yc1wiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiYW5jaG9yc1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgaTE4bjogX3ZtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgICAgICAgICBjb2xvcjogX3ZtLmNvbG9yLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllczogX3ZtLmNhdGVnb3JpZXMsXG4gICAgICAgICAgICAgICAgICBcImFjdGl2ZS1jYXRlZ29yeVwiOiBfdm0uYWN0aXZlQ2F0ZWdvcnlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ub25BbmNob3JDbGljayB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX3QoXG4gICAgICAgIFwic2VhcmNoVGVtcGxhdGVcIixcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5zaG93U2VhcmNoXG4gICAgICAgICAgICA/IF9jKFwic2VhcmNoXCIsIHtcbiAgICAgICAgICAgICAgICByZWY6IFwic2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgaTE4bjogX3ZtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgICAgICAgICBcImF1dG8tZm9jdXNcIjogX3ZtLmF1dG9Gb2N1cyxcbiAgICAgICAgICAgICAgICAgIFwib24tc2VhcmNoXCI6IF92bS5vblNlYXJjaFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgc2VhcmNoOiBfdm0ub25TZWFyY2ggfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICB7XG4gICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgaTE4bjogX3ZtLmkxOG4sXG4gICAgICAgICAgYXV0b0ZvY3VzOiBfdm0uYXV0b0ZvY3VzLFxuICAgICAgICAgIG9uU2VhcmNoOiBfdm0ub25TZWFyY2hcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJzY3JvbGxcIixcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXNjcm9sbFwiLFxuICAgICAgICAgIG9uOiB7IHNjcm9sbDogX3ZtLm9uU2Nyb2xsIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiY2F0ZWdvcnlcIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNlYXJjaEVtb2ppcyxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNlYXJjaEVtb2ppc1wiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBkYXRhOiBfdm0uZGF0YSxcbiAgICAgICAgICAgICAgaTE4bjogX3ZtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgICAgIGlkOiBcInNlYXJjaFwiLFxuICAgICAgICAgICAgICBuYW1lOiBcIlNlYXJjaFwiLFxuICAgICAgICAgICAgICBlbW9qaXM6IF92bS5zZWFyY2hFbW9qaXMsXG4gICAgICAgICAgICAgIFwiZW1vamktcHJvcHNcIjogX3ZtLmVtb2ppUHJvcHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5fbChfdm0uZmlsdGVyZWRDYXRlZ29yaWVzLCBmdW5jdGlvbihjYXRlZ29yeSwgaWR4KSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXCJjYXRlZ29yeVwiLCB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgIV92bS5zZWFyY2hFbW9qaXMgJiZcbiAgICAgICAgICAgICAgICAgICAgKF92bS5pbmZpbml0ZVNjcm9sbCB8fCBjYXRlZ29yeSA9PSBfdm0uYWN0aXZlQ2F0ZWdvcnkpLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgICAgICAgICAgICAgXCIhc2VhcmNoRW1vamlzICYmIChpbmZpbml0ZVNjcm9sbCB8fCBjYXRlZ29yeSA9PSBhY3RpdmVDYXRlZ29yeSlcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAga2V5OiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgcmVmOiBcImNhdGVnb3JpZXNfXCIgKyBpZHgsXG4gICAgICAgICAgICAgIHJlZkluRm9yOiB0cnVlLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgIGkxOG46IF92bS5tZXJnZWRJMThuLFxuICAgICAgICAgICAgICAgIGlkOiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiBjYXRlZ29yeS5uYW1lLFxuICAgICAgICAgICAgICAgIGVtb2ppczogY2F0ZWdvcnkuZW1vamlzLFxuICAgICAgICAgICAgICAgIFwiZW1vamktcHJvcHNcIjogX3ZtLmVtb2ppUHJvcHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fdChcbiAgICAgICAgXCJwcmV2aWV3VGVtcGxhdGVcIixcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5zaG93UHJldmlld1xuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1iYXIgZW1vamktbWFydC1iYXItcHJldmlld1wiIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJwcmV2aWV3XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBfdm0uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiBfdm0ucHJldmlld0Vtb2ppLFxuICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZS1lbW9qaVwiOiBfdm0uaWRsZUVtb2ppLFxuICAgICAgICAgICAgICAgICAgICAgIFwic2hvdy1za2luLXRvbmVzXCI6IF92bS5zaG93U2tpblRvbmVzLFxuICAgICAgICAgICAgICAgICAgICAgIFwiZW1vamktcHJvcHNcIjogX3ZtLmVtb2ppUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgXCJza2luLXByb3BzXCI6IF92bS5za2luUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgXCJvbi1za2luLWNoYW5nZVwiOiBfdm0ub25Ta2luQ2hhbmdlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgIHRpdGxlOiBfdm0udGl0bGUsXG4gICAgICAgICAgZW1vamk6IF92bS5wcmV2aWV3RW1vamksXG4gICAgICAgICAgaWRsZUVtb2ppOiBfdm0uaWRsZUVtb2ppLFxuICAgICAgICAgIHNob3dTa2luVG9uZXM6IF92bS5zaG93U2tpblRvbmVzLFxuICAgICAgICAgIGVtb2ppUHJvcHM6IF92bS5lbW9qaVByb3BzLFxuICAgICAgICAgIHNraW5Qcm9wczogX3ZtLnNraW5Qcm9wcyxcbiAgICAgICAgICBvblNraW5DaGFuZ2U6IF92bS5vblNraW5DaGFuZ2VcbiAgICAgICAgfVxuICAgICAgKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1hbmNob3JzXCIgfSxcbiAgICBfdm0uX2woX3ZtLmNhdGVnb3JpZXMsIGZ1bmN0aW9uKGNhdGVnb3J5KSB7XG4gICAgICByZXR1cm4gX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LWFuY2hvclwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LWFuY2hvci1zZWxlY3RlZFwiOiBjYXRlZ29yeS5pZCA9PSBfdm0uYWN0aXZlQ2F0ZWdvcnkuaWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBjb2xvcjogY2F0ZWdvcnkuaWQgPT0gX3ZtLmFjdGl2ZUNhdGVnb3J5LmlkID8gX3ZtLmNvbG9yIDogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXR0cnM6IHsgXCJkYXRhLXRpdGxlXCI6IF92bS5pMThuLmNhdGVnb3JpZXNbY2F0ZWdvcnkuaWRdIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS4kZW1pdChcImNsaWNrXCIsIGNhdGVnb3J5KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnN2Z3NbY2F0ZWdvcnkuaWRdKSB9IH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtYW5jaG9yLWJhclwiLFxuICAgICAgICAgICAgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yOiBfdm0uY29sb3IgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICB9KSxcbiAgICAwXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5pc1Zpc2libGUgJiYgKF92bS5pc1NlYXJjaCB8fCBfdm0uaGFzUmVzdWx0cylcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgIFwiZW1vamktbWFydC1jYXRlZ29yeVwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LW5vLXJlc3VsdHNcIjogIV92bS5oYXNSZXN1bHRzXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWNhdGVnb3J5LWxhYmVsXCIgfSwgW1xuICAgICAgICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5pMThuLmNhdGVnb3JpZXNbX3ZtLmlkXSkpXSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5fbChfdm0uZW1vamlPYmplY3RzLCBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgIHZhciBlbW9qaU9iamVjdCA9IHJlZi5lbW9qaU9iamVjdFxuICAgICAgICAgICAgdmFyIGVtb2ppVmlldyA9IHJlZi5lbW9qaVZpZXdcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIGVtb2ppVmlldy5jYW5SZW5kZXJcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtZW1vamlcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXRpdGxlXCI6IGVtb2ppT2JqZWN0LnNob3J0X25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZW1vamlWaWV3LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5lbW9qaVByb3BzLm9uRW50ZXIoZW1vamlWaWV3LmdldEVtb2ppKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5lbW9qaVByb3BzLm9uTGVhdmUoZW1vamlWaWV3LmdldEVtb2ppKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZW1vamlQcm9wcy5vbkNsaWNrKGVtb2ppVmlldy5nZXRFbW9qaSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBlbW9qaVZpZXcuY3NzQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBlbW9qaVZpZXcuY3NzU3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhlbW9qaVZpZXcuY29udGVudCkpXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0uaGFzUmVzdWx0c1xuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiZW1vamlcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiBcInNsZXV0aF9vcl9zcHlcIixcbiAgICAgICAgICAgICAgICAgICAgICBuYXRpdmU6IF92bS5lbW9qaVByb3BzLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICBza2luOiBfdm0uZW1vamlQcm9wcy5za2luLFxuICAgICAgICAgICAgICAgICAgICAgIHNldDogX3ZtLmVtb2ppUHJvcHMuc2V0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1uby1yZXN1bHRzLWxhYmVsXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5pMThuLm5vdGZvdW5kKSlcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXdcIiB9LFxuICAgIFtcbiAgICAgIF92bS5lbW9qaVxuICAgICAgICA/IFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1lbW9qaVwiIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcImVtb2ppXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBlbW9qaTogX3ZtLmVtb2ppLFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmU6IF92bS5lbW9qaVByb3BzLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgc2tpbjogX3ZtLmVtb2ppUHJvcHMuc2tpbixcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBfdm0uZW1vamlQcm9wcy5zZXRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWRhdGFcIiB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uZW1vamkubmFtZSkpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZXNcIiB9LFxuICAgICAgICAgICAgICAgIF92bS5fbChfdm0uZW1vamlTaG9ydE5hbWVzLCBmdW5jdGlvbihzaG9ydE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IHNob3J0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIjpcIiArIF92bS5fcyhzaG9ydE5hbWUpICsgXCI6XCIpXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbnNcIiB9LFxuICAgICAgICAgICAgICAgIF92bS5fbChfdm0uZW1vamlFbW90aWNvbnMsIGZ1bmN0aW9uKGVtb3RpY29uKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBlbW90aWNvbixcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb25cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhlbW90aWNvbikpXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdXG4gICAgICAgIDogW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCIgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwiZW1vamlcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGVtb2ppOiBfdm0uaWRsZUVtb2ppLFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmU6IF92bS5lbW9qaVByb3BzLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgc2tpbjogX3ZtLmVtb2ppUHJvcHMuc2tpbixcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBfdm0uZW1vamlQcm9wcy5zZXRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWRhdGFcIiB9LCBbXG4gICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtdGl0bGUtbGFiZWxcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLnNob3dTa2luVG9uZXNcbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1za2luc1wiIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwic2tpbnNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNraW46IF92bS5za2luUHJvcHMuc2tpbiB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uU2tpbkNoYW5nZSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICBdXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1zZWFyY2hcIiB9LCBbXG4gICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgdmFsdWU6IF92bS52YWx1ZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcInZhbHVlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7IHR5cGU6IFwidGV4dFwiLCBwbGFjZWhvbGRlcjogX3ZtLmkxOG4uc2VhcmNoIH0sXG4gICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnZhbHVlIH0sXG4gICAgICBvbjoge1xuICAgICAgICBpbnB1dDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCRldmVudC50YXJnZXQuY29tcG9zaW5nKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgX3ZtLnZhbHVlID0gJGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgY2xhc3M6IHtcbiAgICAgICAgXCJlbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJlbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMtb3BlbmVkXCI6IF92bS5vcGVuZWRcbiAgICAgIH1cbiAgICB9LFxuICAgIF92bS5fbCg2LCBmdW5jdGlvbihza2luVG9uZSkge1xuICAgICAgcmV0dXJuIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIGtleTogc2tpblRvbmUsXG4gICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgIFwiZW1vamktbWFydC1za2luLXN3YXRjaFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LXNraW4tc3dhdGNoLXNlbGVjdGVkXCI6IF92bS5za2luID09IHNraW5Ub25lXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcImVtb2ppLW1hcnQtc2tpbiBlbW9qaS1tYXJ0LXNraW4tdG9uZS1cIiArIHNraW5Ub25lLFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25DbGljayhza2luVG9uZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICB9KSxcbiAgICAwXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuIiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCI3MDQyYzc4YVwiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmbGFuZz1jc3MmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuICBNb2RpZmllZCBieSBFdmFuIFlvdSBAeXl4OTkwODAzXG4qL1xuXG5pbXBvcnQgbGlzdFRvU3R5bGVzIGZyb20gJy4vbGlzdFRvU3R5bGVzJ1xuXG52YXIgaGFzRG9jdW1lbnQgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG5cbmlmICh0eXBlb2YgREVCVUcgIT09ICd1bmRlZmluZWQnICYmIERFQlVHKSB7XG4gIGlmICghaGFzRG9jdW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3Z1ZS1zdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudC4gJyArXG4gICAgXCJVc2UgeyB0YXJnZXQ6ICdub2RlJyB9IGluIHlvdXIgV2VicGFjayBjb25maWcgdG8gaW5kaWNhdGUgYSBzZXJ2ZXItcmVuZGVyaW5nIGVudmlyb25tZW50LlwiXG4gICkgfVxufVxuXG4vKlxudHlwZSBTdHlsZU9iamVjdCA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgcGFydHM6IEFycmF5PFN0eWxlT2JqZWN0UGFydD5cbn1cblxudHlwZSBTdHlsZU9iamVjdFBhcnQgPSB7XG4gIGNzczogc3RyaW5nO1xuICBtZWRpYTogc3RyaW5nO1xuICBzb3VyY2VNYXA6ID9zdHJpbmdcbn1cbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHsvKlxuICBbaWQ6IG51bWJlcl06IHtcbiAgICBpZDogbnVtYmVyLFxuICAgIHJlZnM6IG51bWJlcixcbiAgICBwYXJ0czogQXJyYXk8KG9iaj86IFN0eWxlT2JqZWN0UGFydCkgPT4gdm9pZD5cbiAgfVxuKi99XG5cbnZhciBoZWFkID0gaGFzRG9jdW1lbnQgJiYgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSlcbnZhciBzaW5nbGV0b25FbGVtZW50ID0gbnVsbFxudmFyIHNpbmdsZXRvbkNvdW50ZXIgPSAwXG52YXIgaXNQcm9kdWN0aW9uID0gZmFsc2VcbnZhciBub29wID0gZnVuY3Rpb24gKCkge31cbnZhciBvcHRpb25zID0gbnVsbFxudmFyIHNzcklkS2V5ID0gJ2RhdGEtdnVlLXNzci1pZCdcblxuLy8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG4vLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG52YXIgaXNPbGRJRSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIC9tc2llIFs2LTldXFxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkU3R5bGVzQ2xpZW50IChwYXJlbnRJZCwgbGlzdCwgX2lzUHJvZHVjdGlvbiwgX29wdGlvbnMpIHtcbiAgaXNQcm9kdWN0aW9uID0gX2lzUHJvZHVjdGlvblxuXG4gIG9wdGlvbnMgPSBfb3B0aW9ucyB8fCB7fVxuXG4gIHZhciBzdHlsZXMgPSBsaXN0VG9TdHlsZXMocGFyZW50SWQsIGxpc3QpXG4gIGFkZFN0eWxlc1RvRG9tKHN0eWxlcylcblxuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlIChuZXdMaXN0KSB7XG4gICAgdmFyIG1heVJlbW92ZSA9IFtdXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gc3R5bGVzW2ldXG4gICAgICB2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXVxuICAgICAgZG9tU3R5bGUucmVmcy0tXG4gICAgICBtYXlSZW1vdmUucHVzaChkb21TdHlsZSlcbiAgICB9XG4gICAgaWYgKG5ld0xpc3QpIHtcbiAgICAgIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhwYXJlbnRJZCwgbmV3TGlzdClcbiAgICAgIGFkZFN0eWxlc1RvRG9tKHN0eWxlcylcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzID0gW11cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXVxuICAgICAgaWYgKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGRvbVN0eWxlLnBhcnRzW2pdKClcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMgLyogQXJyYXk8U3R5bGVPYmplY3Q+ICovKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBzdHlsZXNbaV1cbiAgICB2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXVxuICAgIGlmIChkb21TdHlsZSkge1xuICAgICAgZG9tU3R5bGUucmVmcysrXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pXG4gICAgICB9XG4gICAgICBmb3IgKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdKSlcbiAgICAgIH1cbiAgICAgIGlmIChkb21TdHlsZS5wYXJ0cy5sZW5ndGggPiBpdGVtLnBhcnRzLmxlbmd0aCkge1xuICAgICAgICBkb21TdHlsZS5wYXJ0cy5sZW5ndGggPSBpdGVtLnBhcnRzLmxlbmd0aFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFydHMgPSBbXVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSkpXG4gICAgICB9XG4gICAgICBzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHsgaWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0cyB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAoKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpXG4gIHN0eWxlRWxlbWVudC50eXBlID0gJ3RleHQvY3NzJ1xuICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudClcbiAgcmV0dXJuIHN0eWxlRWxlbWVudFxufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqIC8qIFN0eWxlT2JqZWN0UGFydCAqLykge1xuICB2YXIgdXBkYXRlLCByZW1vdmVcbiAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlWycgKyBzc3JJZEtleSArICd+PVwiJyArIG9iai5pZCArICdcIl0nKVxuXG4gIGlmIChzdHlsZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNQcm9kdWN0aW9uKSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBhbmQgaW4gcHJvZHVjdGlvbiBtb2RlLlxuICAgICAgLy8gc2ltcGx5IGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbm9vcFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBidXQgaW4gZGV2IG1vZGUuXG4gICAgICAvLyBmb3Igc29tZSByZWFzb24gQ2hyb21lIGNhbid0IGhhbmRsZSBzb3VyY2UgbWFwIGluIHNlcnZlci1yZW5kZXJlZFxuICAgICAgLy8gc3R5bGUgdGFncyAtIHNvdXJjZSBtYXBzIGluIDxzdHlsZT4gb25seSB3b3JrcyBpZiB0aGUgc3R5bGUgdGFnIGlzXG4gICAgICAvLyBjcmVhdGVkIGFuZCBpbnNlcnRlZCBkeW5hbWljYWxseS4gU28gd2UgcmVtb3ZlIHRoZSBzZXJ2ZXIgcmVuZGVyZWRcbiAgICAgIC8vIHN0eWxlcyBhbmQgaW5qZWN0IG5ldyBvbmVzLlxuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc09sZElFKSB7XG4gICAgLy8gdXNlIHNpbmdsZXRvbiBtb2RlIGZvciBJRTkuXG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKytcbiAgICBzdHlsZUVsZW1lbnQgPSBzaW5nbGV0b25FbGVtZW50IHx8IChzaW5nbGV0b25FbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KCkpXG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgZmFsc2UpXG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgdHJ1ZSlcbiAgfSBlbHNlIHtcbiAgICAvLyB1c2UgbXVsdGktc3R5bGUtdGFnIG1vZGUgaW4gYWxsIG90aGVyIGNhc2VzXG4gICAgc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KClcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50KVxuICAgIHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudClcbiAgICB9XG4gIH1cblxuICB1cGRhdGUob2JqKVxuXG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqIC8qIFN0eWxlT2JqZWN0UGFydCAqLykge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG4gICAgICAgICAgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcbiAgICAgICAgICBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iailcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnRcbiAgICByZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKVxuICB9XG59KSgpXG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlRWxlbWVudCwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG4gIHZhciBjc3MgPSByZW1vdmUgPyAnJyA6IG9iai5jc3NcblxuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcylcbiAgfSBlbHNlIHtcbiAgICB2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcylcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlRWxlbWVudC5jaGlsZE5vZGVzXG4gICAgaWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pXG4gICAgaWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY3NzTm9kZSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGVFbGVtZW50LCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3NcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwXG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnbWVkaWEnLCBtZWRpYSlcbiAgfVxuICBpZiAob3B0aW9ucy5zc3JJZCkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoc3NySWRLZXksIG9iai5pZClcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXApIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2RldnRvb2xzL2RvY3MvamF2YXNjcmlwdC1kZWJ1Z2dpbmdcbiAgICAvLyB0aGlzIG1ha2VzIHNvdXJjZSBtYXBzIGluc2lkZSBzdHlsZSB0YWdzIHdvcmsgcHJvcGVybHkgaW4gQ2hyb21lXG4gICAgY3NzICs9ICdcXG4vKiMgc291cmNlVVJMPScgKyBzb3VyY2VNYXAuc291cmNlc1swXSArICcgKi8nXG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcbiAgICBjc3MgKz0gJ1xcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsJyArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyAnICovJ1xuICB9XG5cbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzc1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKVxuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSlcbiAgfVxufVxuIiwiLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBsaXN0IGZvcm1hdCBwcm9kdWNlZCBieSBjc3MtbG9hZGVyIGludG8gc29tZXRoaW5nXG4gKiBlYXNpZXIgdG8gbWFuaXB1bGF0ZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChwYXJlbnRJZCwgbGlzdCkge1xuICB2YXIgc3R5bGVzID0gW11cbiAgdmFyIG5ld1N0eWxlcyA9IHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXVxuICAgIHZhciBpZCA9IGl0ZW1bMF1cbiAgICB2YXIgY3NzID0gaXRlbVsxXVxuICAgIHZhciBtZWRpYSA9IGl0ZW1bMl1cbiAgICB2YXIgc291cmNlTWFwID0gaXRlbVszXVxuICAgIHZhciBwYXJ0ID0ge1xuICAgICAgaWQ6IHBhcmVudElkICsgJzonICsgaSxcbiAgICAgIGNzczogY3NzLFxuICAgICAgbWVkaWE6IG1lZGlhLFxuICAgICAgc291cmNlTWFwOiBzb3VyY2VNYXBcbiAgICB9XG4gICAgaWYgKCFuZXdTdHlsZXNbaWRdKSB7XG4gICAgICBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0geyBpZDogaWQsIHBhcnRzOiBbcGFydF0gfSlcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpXG4gICAgfVxuICB9XG4gIHJldHVybiBzdHlsZXNcbn1cbiIsIi8qIVxuICogVnVlLmpzIHYyLjYuMTBcbiAqIChjKSAyMDE0LTIwMTkgRXZhbiBZb3VcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuLyogICovXG5cbnZhciBlbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuXG4vLyBUaGVzZSBoZWxwZXJzIHByb2R1Y2UgYmV0dGVyIFZNIGNvZGUgaW4gSlMgZW5naW5lcyBkdWUgdG8gdGhlaXJcbi8vIGV4cGxpY2l0bmVzcyBhbmQgZnVuY3Rpb24gaW5saW5pbmcuXG5mdW5jdGlvbiBpc1VuZGVmICh2KSB7XG4gIHJldHVybiB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0RlZiAodikge1xuICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNUcnVlICh2KSB7XG4gIHJldHVybiB2ID09PSB0cnVlXG59XG5cbmZ1bmN0aW9uIGlzRmFsc2UgKHYpIHtcbiAgcmV0dXJuIHYgPT09IGZhbHNlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgcHJpbWl0aXZlLlxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJ1xuICApXG59XG5cbi8qKlxuICogUXVpY2sgb2JqZWN0IGNoZWNrIC0gdGhpcyBpcyBwcmltYXJpbHkgdXNlZCB0byB0ZWxsXG4gKiBPYmplY3RzIGZyb20gcHJpbWl0aXZlIHZhbHVlcyB3aGVuIHdlIGtub3cgdGhlIHZhbHVlXG4gKiBpcyBhIEpTT04tY29tcGxpYW50IHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xufVxuXG4vKipcbiAqIEdldCB0aGUgcmF3IHR5cGUgc3RyaW5nIG9mIGEgdmFsdWUsIGUuZy4sIFtvYmplY3QgT2JqZWN0XS5cbiAqL1xudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHRvUmF3VHlwZSAodmFsdWUpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSlcbn1cblxuLyoqXG4gKiBTdHJpY3Qgb2JqZWN0IHR5cGUgY2hlY2suIE9ubHkgcmV0dXJucyB0cnVlXG4gKiBmb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nXG59XG5cbmZ1bmN0aW9uIGlzUmVnRXhwICh2KSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2KSA9PT0gJ1tvYmplY3QgUmVnRXhwXSdcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWwgaXMgYSB2YWxpZCBhcnJheSBpbmRleC5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEFycmF5SW5kZXggKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQoU3RyaW5nKHZhbCkpO1xuICByZXR1cm4gbiA+PSAwICYmIE1hdGguZmxvb3IobikgPT09IG4gJiYgaXNGaW5pdGUodmFsKVxufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UgKHZhbCkge1xuICByZXR1cm4gKFxuICAgIGlzRGVmKHZhbCkgJiZcbiAgICB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgdmFsLmNhdGNoID09PSAnZnVuY3Rpb24nXG4gIClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgdG8gYSBzdHJpbmcgdGhhdCBpcyBhY3R1YWxseSByZW5kZXJlZC5cbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcgKHZhbCkge1xuICByZXR1cm4gdmFsID09IG51bGxcbiAgICA/ICcnXG4gICAgOiBBcnJheS5pc0FycmF5KHZhbCkgfHwgKGlzUGxhaW5PYmplY3QodmFsKSAmJiB2YWwudG9TdHJpbmcgPT09IF90b1N0cmluZylcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCAyKVxuICAgICAgOiBTdHJpbmcodmFsKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gaW5wdXQgdmFsdWUgdG8gYSBudW1iZXIgZm9yIHBlcnNpc3RlbmNlLlxuICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybiBvcmlnaW5hbCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyICh2YWwpIHtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KHZhbCk7XG4gIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG5cbn1cblxuLyoqXG4gKiBNYWtlIGEgbWFwIGFuZCByZXR1cm4gYSBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYSBrZXlcbiAqIGlzIGluIHRoYXQgbWFwLlxuICovXG5mdW5jdGlvbiBtYWtlTWFwIChcbiAgc3RyLFxuICBleHBlY3RzTG93ZXJDYXNlXG4pIHtcbiAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIG1hcFtsaXN0W2ldXSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGV4cGVjdHNMb3dlckNhc2VcbiAgICA/IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWwudG9Mb3dlckNhc2UoKV07IH1cbiAgICA6IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWxdOyB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0YWcgaXMgYSBidWlsdC1pbiB0YWcuXG4gKi9cbnZhciBpc0J1aWx0SW5UYWcgPSBtYWtlTWFwKCdzbG90LGNvbXBvbmVudCcsIHRydWUpO1xuXG4vKipcbiAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZS5cbiAqL1xudmFyIGlzUmVzZXJ2ZWRBdHRyaWJ1dGUgPSBtYWtlTWFwKCdrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpcycpO1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpdGVtIGZyb20gYW4gYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZSAoYXJyLCBpdGVtKSB7XG4gIGlmIChhcnIubGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBhcnIuc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkuXG4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBoYXNPd24gKG9iaiwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNhY2hlZCB2ZXJzaW9uIG9mIGEgcHVyZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FjaGVkIChmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gKGZ1bmN0aW9uIGNhY2hlZEZuIChzdHIpIHtcbiAgICB2YXIgaGl0ID0gY2FjaGVbc3RyXTtcbiAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxuICovXG52YXIgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcbnZhciBjYW1lbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCBmdW5jdGlvbiAoXywgYykgeyByZXR1cm4gYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnOyB9KVxufSk7XG5cbi8qKlxuICogQ2FwaXRhbGl6ZSBhIHN0cmluZy5cbiAqL1xudmFyIGNhcGl0YWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpXG59KTtcblxuLyoqXG4gKiBIeXBoZW5hdGUgYSBjYW1lbENhc2Ugc3RyaW5nLlxuICovXG52YXIgaHlwaGVuYXRlUkUgPSAvXFxCKFtBLVpdKS9nO1xudmFyIGh5cGhlbmF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJy0kMScpLnRvTG93ZXJDYXNlKClcbn0pO1xuXG4vKipcbiAqIFNpbXBsZSBiaW5kIHBvbHlmaWxsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBpdCxcbiAqIGUuZy4sIFBoYW50b21KUyAxLnguIFRlY2huaWNhbGx5LCB3ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZVxuICogc2luY2UgbmF0aXZlIGJpbmQgaXMgbm93IHBlcmZvcm1hbnQgZW5vdWdoIGluIG1vc3QgYnJvd3NlcnMuXG4gKiBCdXQgcmVtb3ZpbmcgaXQgd291bGQgbWVhbiBicmVha2luZyBjb2RlIHRoYXQgd2FzIGFibGUgdG8gcnVuIGluXG4gKiBQaGFudG9tSlMgMS54LCBzbyB0aGlzIG11c3QgYmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gcG9seWZpbGxCaW5kIChmbiwgY3R4KSB7XG4gIGZ1bmN0aW9uIGJvdW5kRm4gKGEpIHtcbiAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIGxcbiAgICAgID8gbCA+IDFcbiAgICAgICAgPyBmbi5hcHBseShjdHgsIGFyZ3VtZW50cylcbiAgICAgICAgOiBmbi5jYWxsKGN0eCwgYSlcbiAgICAgIDogZm4uY2FsbChjdHgpXG4gIH1cblxuICBib3VuZEZuLl9sZW5ndGggPSBmbi5sZW5ndGg7XG4gIHJldHVybiBib3VuZEZuXG59XG5cbmZ1bmN0aW9uIG5hdGl2ZUJpbmQgKGZuLCBjdHgpIHtcbiAgcmV0dXJuIGZuLmJpbmQoY3R4KVxufVxuXG52YXIgYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gID8gbmF0aXZlQmluZFxuICA6IHBvbHlmaWxsQmluZDtcblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgcmVhbCBBcnJheS5cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSAobGlzdCwgc3RhcnQpIHtcbiAgc3RhcnQgPSBzdGFydCB8fCAwO1xuICB2YXIgaSA9IGxpc3QubGVuZ3RoIC0gc3RhcnQ7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0pIHtcbiAgICByZXRbaV0gPSBsaXN0W2kgKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG4vKipcbiAqIE1peCBwcm9wZXJ0aWVzIGludG8gdGFyZ2V0IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kICh0bywgX2Zyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIF9mcm9tKSB7XG4gICAgdG9ba2V5XSA9IF9mcm9tW2tleV07XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbi8qKlxuICogTWVyZ2UgYW4gQXJyYXkgb2YgT2JqZWN0cyBpbnRvIGEgc2luZ2xlIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gdG9PYmplY3QgKGFycikge1xuICB2YXIgcmVzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycltpXSkge1xuICAgICAgZXh0ZW5kKHJlcywgYXJyW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKipcbiAqIFBlcmZvcm0gbm8gb3BlcmF0aW9uLlxuICogU3R1YmJpbmcgYXJncyB0byBtYWtlIEZsb3cgaGFwcHkgd2l0aG91dCBsZWF2aW5nIHVzZWxlc3MgdHJhbnNwaWxlZCBjb2RlXG4gKiB3aXRoIC4uLnJlc3QgKGh0dHBzOi8vZmxvdy5vcmcvYmxvZy8yMDE3LzA1LzA3L1N0cmljdC1GdW5jdGlvbi1DYWxsLUFyaXR5LykuXG4gKi9cbmZ1bmN0aW9uIG5vb3AgKGEsIGIsIGMpIHt9XG5cbi8qKlxuICogQWx3YXlzIHJldHVybiBmYWxzZS5cbiAqL1xudmFyIG5vID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGZhbHNlOyB9O1xuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbi8qKlxuICogUmV0dXJuIHRoZSBzYW1lIHZhbHVlLlxuICovXG52YXIgaWRlbnRpdHkgPSBmdW5jdGlvbiAoXykgeyByZXR1cm4gXzsgfTtcblxuLyoqXG4gKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAqIGlmIHRoZXkgYXJlIHBsYWluIG9iamVjdHMsIGRvIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaGFwZT9cbiAqL1xuZnVuY3Rpb24gbG9vc2VFcXVhbCAoYSwgYikge1xuICBpZiAoYSA9PT0gYikgeyByZXR1cm4gdHJ1ZSB9XG4gIHZhciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcbiAgdmFyIGlzT2JqZWN0QiA9IGlzT2JqZWN0KGIpO1xuICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgIHRyeSB7XG4gICAgICB2YXIgaXNBcnJheUEgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgdmFyIGlzQXJyYXlCID0gQXJyYXkuaXNBcnJheShiKTtcbiAgICAgIGlmIChpc0FycmF5QSAmJiBpc0FycmF5Qikge1xuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChlLCBiW2ldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpXG4gICAgICB9IGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcbiAgICAgICAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICByZXR1cm4ga2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiYga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZmlyc3QgaW5kZXggYXQgd2hpY2ggYSBsb29zZWx5IGVxdWFsIHZhbHVlIGNhbiBiZVxuICogZm91bmQgaW4gdGhlIGFycmF5IChpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCwgdGhlIGFycmF5IG11c3RcbiAqIGNvbnRhaW4gYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHNoYXBlKSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gKi9cbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZiAoYXJyLCB2YWwpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobG9vc2VFcXVhbChhcnJbaV0sIHZhbCkpIHsgcmV0dXJuIGkgfVxuICB9XG4gIHJldHVybiAtMVxufVxuXG4vKipcbiAqIEVuc3VyZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IG9uY2UuXG4gKi9cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBTU1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XG5cbnZhciBBU1NFVF9UWVBFUyA9IFtcbiAgJ2NvbXBvbmVudCcsXG4gICdkaXJlY3RpdmUnLFxuICAnZmlsdGVyJ1xuXTtcblxudmFyIExJRkVDWUNMRV9IT09LUyA9IFtcbiAgJ2JlZm9yZUNyZWF0ZScsXG4gICdjcmVhdGVkJyxcbiAgJ2JlZm9yZU1vdW50JyxcbiAgJ21vdW50ZWQnLFxuICAnYmVmb3JlVXBkYXRlJyxcbiAgJ3VwZGF0ZWQnLFxuICAnYmVmb3JlRGVzdHJveScsXG4gICdkZXN0cm95ZWQnLFxuICAnYWN0aXZhdGVkJyxcbiAgJ2RlYWN0aXZhdGVkJyxcbiAgJ2Vycm9yQ2FwdHVyZWQnLFxuICAnc2VydmVyUHJlZmV0Y2gnXG5dO1xuXG4vKiAgKi9cblxuXG5cbnZhciBjb25maWcgPSAoe1xuICAvKipcbiAgICogT3B0aW9uIG1lcmdlIHN0cmF0ZWdpZXMgKHVzZWQgaW4gY29yZS91dGlsL29wdGlvbnMpXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHdhcm5pbmdzLlxuICAgKi9cbiAgc2lsZW50OiBmYWxzZSxcblxuICAvKipcbiAgICogU2hvdyBwcm9kdWN0aW9uIG1vZGUgdGlwIG1lc3NhZ2Ugb24gYm9vdD9cbiAgICovXG4gIHByb2R1Y3Rpb25UaXA6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAqL1xuICBkZXZ0b29sczogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvcmQgcGVyZlxuICAgKi9cbiAgcGVyZm9ybWFuY2U6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgKi9cbiAgZXJyb3JIYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBXYXJuIGhhbmRsZXIgZm9yIHdhdGNoZXIgd2FybnNcbiAgICovXG4gIHdhcm5IYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBJZ25vcmUgY2VydGFpbiBjdXN0b20gZWxlbWVudHNcbiAgICovXG4gIGlnbm9yZWRFbGVtZW50czogW10sXG5cbiAgLyoqXG4gICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAga2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHJlZ2lzdGVyZWQgYXMgYVxuICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkVGFnOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgYXMgYSBjb21wb25lbnRcbiAgICogcHJvcC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRBdHRyOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBpc1Vua25vd25FbGVtZW50OiBubyxcblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lc3BhY2Ugb2YgYW4gZWxlbWVudFxuICAgKi9cbiAgZ2V0VGFnTmFtZXNwYWNlOiBub29wLFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcmVhbCB0YWcgbmFtZSBmb3IgdGhlIHNwZWNpZmljIHBsYXRmb3JtLlxuICAgKi9cbiAgcGFyc2VQbGF0Zm9ybVRhZ05hbWU6IGlkZW50aXR5LFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgbXVzdCBiZSBib3VuZCB1c2luZyBwcm9wZXJ0eSwgZS5nLiB2YWx1ZVxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBtdXN0VXNlUHJvcDogbm8sXG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gdXBkYXRlcyBhc3luY2hyb25vdXNseS4gSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBWdWUgVGVzdCBVdGlsc1xuICAgKiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSByZWR1Y2UgcGVyZm9ybWFuY2UgaWYgc2V0IHRvIGZhbHNlLlxuICAgKi9cbiAgYXN5bmM6IHRydWUsXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICAqL1xuICBfbGlmZWN5Y2xlSG9va3M6IExJRkVDWUNMRV9IT09LU1xufSk7XG5cbi8qICAqL1xuXG4vKipcbiAqIHVuaWNvZGUgbGV0dGVycyB1c2VkIGZvciBwYXJzaW5nIGh0bWwgdGFncywgY29tcG9uZW50IG5hbWVzIGFuZCBwcm9wZXJ0eSBwYXRocy5cbiAqIHVzaW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNTMvc2VtYW50aWNzLXNjcmlwdGluZy5odG1sI3BvdGVudGlhbGN1c3RvbWVsZW1lbnRuYW1lXG4gKiBza2lwcGluZyBcXHUxMDAwMC1cXHVFRkZGRiBkdWUgdG8gaXQgZnJlZXppbmcgdXAgUGhhbnRvbUpTXG4gKi9cbnZhciB1bmljb2RlUmVnRXhwID0gL2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoICQgb3IgX1xuICovXG5mdW5jdGlvbiBpc1Jlc2VydmVkIChzdHIpIHtcbiAgdmFyIGMgPSAoc3RyICsgJycpLmNoYXJDb2RlQXQoMCk7XG4gIHJldHVybiBjID09PSAweDI0IHx8IGMgPT09IDB4NUZcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZGVmIChvYmosIGtleSwgdmFsLCBlbnVtZXJhYmxlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIHZhbHVlOiB2YWwsXG4gICAgZW51bWVyYWJsZTogISFlbnVtZXJhYmxlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBQYXJzZSBzaW1wbGUgcGF0aC5cbiAqL1xudmFyIGJhaWxSRSA9IG5ldyBSZWdFeHAoKFwiW15cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIi4kX1xcXFxkXVwiKSk7XG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgaWYgKGJhaWxSRS50ZXN0KHBhdGgpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghb2JqKSB7IHJldHVybiB9XG4gICAgICBvYmogPSBvYmpbc2VnbWVudHNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gb2JqXG4gIH1cbn1cblxuLyogICovXG5cbi8vIGNhbiB3ZSB1c2UgX19wcm90b19fP1xudmFyIGhhc1Byb3RvID0gJ19fcHJvdG9fXycgaW4ge307XG5cbi8vIEJyb3dzZXIgZW52aXJvbm1lbnQgc25pZmZpbmdcbnZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbnZhciBpbldlZXggPSB0eXBlb2YgV1hFbnZpcm9ubWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgISFXWEVudmlyb25tZW50LnBsYXRmb3JtO1xudmFyIHdlZXhQbGF0Zm9ybSA9IGluV2VleCAmJiBXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk7XG52YXIgVUEgPSBpbkJyb3dzZXIgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbnZhciBpc0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XG52YXIgaXNJRTkgPSBVQSAmJiBVQS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbnZhciBpc0VkZ2UgPSBVQSAmJiBVQS5pbmRleE9mKCdlZGdlLycpID4gMDtcbnZhciBpc0FuZHJvaWQgPSAoVUEgJiYgVUEuaW5kZXhPZignYW5kcm9pZCcpID4gMCkgfHwgKHdlZXhQbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKTtcbnZhciBpc0lPUyA9IChVQSAmJiAvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoVUEpKSB8fCAod2VleFBsYXRmb3JtID09PSAnaW9zJyk7XG52YXIgaXNDaHJvbWUgPSBVQSAmJiAvY2hyb21lXFwvXFxkKy8udGVzdChVQSkgJiYgIWlzRWRnZTtcbnZhciBpc1BoYW50b21KUyA9IFVBICYmIC9waGFudG9tanMvLnRlc3QoVUEpO1xudmFyIGlzRkYgPSBVQSAmJiBVQS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pO1xuXG4vLyBGaXJlZm94IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJvdG90eXBlLi4uXG52YXIgbmF0aXZlV2F0Y2ggPSAoe30pLndhdGNoO1xuXG52YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5pZiAoaW5Ccm93c2VyKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdHMgPSB7fTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCAoe1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbiAgfSBjYXRjaCAoZSkge31cbn1cblxuLy8gdGhpcyBuZWVkcyB0byBiZSBsYXp5LWV2YWxlZCBiZWNhdXNlIHZ1ZSBtYXkgYmUgcmVxdWlyZWQgYmVmb3JlXG4vLyB2dWUtc2VydmVyLXJlbmRlcmVyIGNhbiBzZXQgVlVFX0VOVlxudmFyIF9pc1NlcnZlcjtcbnZhciBpc1NlcnZlclJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFpbkJyb3dzZXIgJiYgIWluV2VleCAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZGV0ZWN0IHByZXNlbmNlIG9mIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgYW5kIGF2b2lkXG4gICAgICAvLyBXZWJwYWNrIHNoaW1taW5nIHRoZSBwcm9jZXNzXG4gICAgICBfaXNTZXJ2ZXIgPSBnbG9iYWxbJ3Byb2Nlc3MnXSAmJiBnbG9iYWxbJ3Byb2Nlc3MnXS5lbnYuVlVFX0VOViA9PT0gJ3NlcnZlcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gX2lzU2VydmVyXG59O1xuXG4vLyBkZXRlY3QgZGV2dG9vbHNcbnZhciBkZXZ0b29scyA9IGluQnJvd3NlciAmJiB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGlzTmF0aXZlIChDdG9yKSB7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKVxufVxuXG52YXIgaGFzU3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU3ltYm9sKSAmJlxuICB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUmVmbGVjdC5vd25LZXlzKTtcblxudmFyIF9TZXQ7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gLy8gJGZsb3ctZGlzYWJsZS1saW5lXG5pZiAodHlwZW9mIFNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU2V0KSkge1xuICAvLyB1c2UgbmF0aXZlIFNldCB3aGVuIGF2YWlsYWJsZS5cbiAgX1NldCA9IFNldDtcbn0gZWxzZSB7XG4gIC8vIGEgbm9uLXN0YW5kYXJkIFNldCBwb2x5ZmlsbCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBwcmltaXRpdmUga2V5cy5cbiAgX1NldCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNldCAoKSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuICAgIFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldFtrZXldID09PSB0cnVlXG4gICAgfTtcbiAgICBTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAoa2V5KSB7XG4gICAgICB0aGlzLnNldFtrZXldID0gdHJ1ZTtcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhciAoKSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfTtcblxuICAgIHJldHVybiBTZXQ7XG4gIH0oKSk7XG59XG5cbi8qICAqL1xuXG52YXIgd2FybiA9IG5vb3A7XG52YXIgdGlwID0gbm9vcDtcbnZhciBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gKG5vb3ApOyAvLyB3b3JrIGFyb3VuZCBmbG93IGNoZWNrXG52YXIgZm9ybWF0Q29tcG9uZW50TmFtZSA9IChub29wKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGhhc0NvbnNvbGUgPSB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBjbGFzc2lmeVJFID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICB2YXIgY2xhc3NpZnkgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHJcbiAgICAucmVwbGFjZShjbGFzc2lmeVJFLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KVxuICAgIC5yZXBsYWNlKC9bLV9dL2csICcnKTsgfTtcblxuICB3YXJuID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcbiAgICB2YXIgdHJhY2UgPSB2bSA/IGdlbmVyYXRlQ29tcG9uZW50VHJhY2Uodm0pIDogJyc7XG5cbiAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XG4gICAgICBjb25maWcud2FybkhhbmRsZXIuY2FsbChudWxsLCBtc2csIHZtLCB0cmFjZSk7XG4gICAgfSBlbHNlIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW1Z1ZSB3YXJuXTogXCIgKyBtc2cgKyB0cmFjZSkpO1xuICAgIH1cbiAgfTtcblxuICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIltWdWUgdGlwXTogXCIgKyBtc2cgKyAoXG4gICAgICAgIHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJ1xuICAgICAgKSk7XG4gICAgfVxuICB9O1xuXG4gIGZvcm1hdENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAodm0sIGluY2x1ZGVGaWxlKSB7XG4gICAgaWYgKHZtLiRyb290ID09PSB2bSkge1xuICAgICAgcmV0dXJuICc8Um9vdD4nXG4gICAgfVxuICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHZtID09PSAnZnVuY3Rpb24nICYmIHZtLmNpZCAhPSBudWxsXG4gICAgICA/IHZtLm9wdGlvbnNcbiAgICAgIDogdm0uX2lzVnVlXG4gICAgICAgID8gdm0uJG9wdGlvbnMgfHwgdm0uY29uc3RydWN0b3Iub3B0aW9uc1xuICAgICAgICA6IHZtO1xuICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lIHx8IG9wdGlvbnMuX2NvbXBvbmVudFRhZztcbiAgICB2YXIgZmlsZSA9IG9wdGlvbnMuX19maWxlO1xuICAgIGlmICghbmFtZSAmJiBmaWxlKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBmaWxlLm1hdGNoKC8oW14vXFxcXF0rKVxcLnZ1ZSQvKTtcbiAgICAgIG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKG5hbWUgPyAoXCI8XCIgKyAoY2xhc3NpZnkobmFtZSkpICsgXCI+XCIpIDogXCI8QW5vbnltb3VzPlwiKSArXG4gICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyAoXCIgYXQgXCIgKyBmaWxlKSA6ICcnKVxuICAgIClcbiAgfTtcblxuICB2YXIgcmVwZWF0ID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB3aGlsZSAobikge1xuICAgICAgaWYgKG4gJSAyID09PSAxKSB7IHJlcyArPSBzdHI7IH1cbiAgICAgIGlmIChuID4gMSkgeyBzdHIgKz0gc3RyOyB9XG4gICAgICBuID4+PSAxO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH07XG5cbiAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xuICAgIGlmICh2bS5faXNWdWUgJiYgdm0uJHBhcmVudCkge1xuICAgICAgdmFyIHRyZWUgPSBbXTtcbiAgICAgIHZhciBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgd2hpbGUgKHZtKSB7XG4gICAgICAgIGlmICh0cmVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbGFzdCA9IHRyZWVbdHJlZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdC5jb25zdHJ1Y3RvciA9PT0gdm0uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSsrO1xuICAgICAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXSA9IFtsYXN0LCBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2VdO1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJlZS5wdXNoKHZtKTtcbiAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuICdcXG5cXG5mb3VuZCBpblxcblxcbicgKyB0cmVlXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHZtLCBpKSB7IHJldHVybiAoXCJcIiArIChpID09PSAwID8gJy0tLT4gJyA6IHJlcGVhdCgnICcsIDUgKyBpICogMikpICsgKEFycmF5LmlzQXJyYXkodm0pXG4gICAgICAgICAgICA/ICgoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSkpICsgXCIuLi4gKFwiICsgKHZtWzFdKSArIFwiIHJlY3Vyc2l2ZSBjYWxscylcIilcbiAgICAgICAgICAgIDogZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpKTsgfSlcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXCJcXG5cXG4oZm91bmQgaW4gXCIgKyAoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpICsgXCIpXCIpXG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCA9IDA7XG5cbi8qKlxuICogQSBkZXAgaXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBoYXZlIG11bHRpcGxlXG4gKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxuICovXG52YXIgRGVwID0gZnVuY3Rpb24gRGVwICgpIHtcbiAgdGhpcy5pZCA9IHVpZCsrO1xuICB0aGlzLnN1YnMgPSBbXTtcbn07XG5cbkRlcC5wcm90b3R5cGUuYWRkU3ViID0gZnVuY3Rpb24gYWRkU3ViIChzdWIpIHtcbiAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gcmVtb3ZlU3ViIChzdWIpIHtcbiAgcmVtb3ZlKHRoaXMuc3Vicywgc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgaWYgKERlcC50YXJnZXQpIHtcbiAgICBEZXAudGFyZ2V0LmFkZERlcCh0aGlzKTtcbiAgfVxufTtcblxuRGVwLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkgKCkge1xuICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxuICB2YXIgc3VicyA9IHRoaXMuc3Vicy5zbGljZSgpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZmlnLmFzeW5jKSB7XG4gICAgLy8gc3VicyBhcmVuJ3Qgc29ydGVkIGluIHNjaGVkdWxlciBpZiBub3QgcnVubmluZyBhc3luY1xuICAgIC8vIHdlIG5lZWQgdG8gc29ydCB0aGVtIG5vdyB0byBtYWtlIHN1cmUgdGhleSBmaXJlIGluIGNvcnJlY3RcbiAgICAvLyBvcmRlclxuICAgIHN1YnMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuICB9XG4gIGZvciAodmFyIGkgPSAwLCBsID0gc3Vicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBzdWJzW2ldLnVwZGF0ZSgpO1xuICB9XG59O1xuXG4vLyBUaGUgY3VycmVudCB0YXJnZXQgd2F0Y2hlciBiZWluZyBldmFsdWF0ZWQuXG4vLyBUaGlzIGlzIGdsb2JhbGx5IHVuaXF1ZSBiZWNhdXNlIG9ubHkgb25lIHdhdGNoZXJcbi8vIGNhbiBiZSBldmFsdWF0ZWQgYXQgYSB0aW1lLlxuRGVwLnRhcmdldCA9IG51bGw7XG52YXIgdGFyZ2V0U3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gcHVzaFRhcmdldCAodGFyZ2V0KSB7XG4gIHRhcmdldFN0YWNrLnB1c2godGFyZ2V0KTtcbiAgRGVwLnRhcmdldCA9IHRhcmdldDtcbn1cblxuZnVuY3Rpb24gcG9wVGFyZ2V0ICgpIHtcbiAgdGFyZ2V0U3RhY2sucG9wKCk7XG4gIERlcC50YXJnZXQgPSB0YXJnZXRTdGFja1t0YXJnZXRTdGFjay5sZW5ndGggLSAxXTtcbn1cblxuLyogICovXG5cbnZhciBWTm9kZSA9IGZ1bmN0aW9uIFZOb2RlIChcbiAgdGFnLFxuICBkYXRhLFxuICBjaGlsZHJlbixcbiAgdGV4dCxcbiAgZWxtLFxuICBjb250ZXh0LFxuICBjb21wb25lbnRPcHRpb25zLFxuICBhc3luY0ZhY3Rvcnlcbikge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5kYXRhID0gZGF0YTtcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnRleHQgPSB0ZXh0O1xuICB0aGlzLmVsbSA9IGVsbTtcbiAgdGhpcy5ucyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5mbkNvbnRleHQgPSB1bmRlZmluZWQ7XG4gIHRoaXMuZm5PcHRpb25zID0gdW5kZWZpbmVkO1xuICB0aGlzLmZuU2NvcGVJZCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5rZXkgPSBkYXRhICYmIGRhdGEua2V5O1xuICB0aGlzLmNvbXBvbmVudE9wdGlvbnMgPSBjb21wb25lbnRPcHRpb25zO1xuICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5yYXcgPSBmYWxzZTtcbiAgdGhpcy5pc1N0YXRpYyA9IGZhbHNlO1xuICB0aGlzLmlzUm9vdEluc2VydCA9IHRydWU7XG4gIHRoaXMuaXNDb21tZW50ID0gZmFsc2U7XG4gIHRoaXMuaXNDbG9uZWQgPSBmYWxzZTtcbiAgdGhpcy5pc09uY2UgPSBmYWxzZTtcbiAgdGhpcy5hc3luY0ZhY3RvcnkgPSBhc3luY0ZhY3Rvcnk7XG4gIHRoaXMuYXN5bmNNZXRhID0gdW5kZWZpbmVkO1xuICB0aGlzLmlzQXN5bmNQbGFjZWhvbGRlciA9IGZhbHNlO1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgY2hpbGQ6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuLy8gREVQUkVDQVRFRDogYWxpYXMgZm9yIGNvbXBvbmVudEluc3RhbmNlIGZvciBiYWNrd2FyZHMgY29tcGF0LlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnByb3RvdHlwZUFjY2Vzc29ycy5jaGlsZC5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlXG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVk5vZGUucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxudmFyIGNyZWF0ZUVtcHR5Vk5vZGUgPSBmdW5jdGlvbiAodGV4dCkge1xuICBpZiAoIHRleHQgPT09IHZvaWQgMCApIHRleHQgPSAnJztcblxuICB2YXIgbm9kZSA9IG5ldyBWTm9kZSgpO1xuICBub2RlLnRleHQgPSB0ZXh0O1xuICBub2RlLmlzQ29tbWVudCA9IHRydWU7XG4gIHJldHVybiBub2RlXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVUZXh0Vk5vZGUgKHZhbCkge1xuICByZXR1cm4gbmV3IFZOb2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFN0cmluZyh2YWwpKVxufVxuXG4vLyBvcHRpbWl6ZWQgc2hhbGxvdyBjbG9uZVxuLy8gdXNlZCBmb3Igc3RhdGljIG5vZGVzIGFuZCBzbG90IG5vZGVzIGJlY2F1c2UgdGhleSBtYXkgYmUgcmV1c2VkIGFjcm9zc1xuLy8gbXVsdGlwbGUgcmVuZGVycywgY2xvbmluZyB0aGVtIGF2b2lkcyBlcnJvcnMgd2hlbiBET00gbWFuaXB1bGF0aW9ucyByZWx5XG4vLyBvbiB0aGVpciBlbG0gcmVmZXJlbmNlLlxuZnVuY3Rpb24gY2xvbmVWTm9kZSAodm5vZGUpIHtcbiAgdmFyIGNsb25lZCA9IG5ldyBWTm9kZShcbiAgICB2bm9kZS50YWcsXG4gICAgdm5vZGUuZGF0YSxcbiAgICAvLyAjNzk3NVxuICAgIC8vIGNsb25lIGNoaWxkcmVuIGFycmF5IHRvIGF2b2lkIG11dGF0aW5nIG9yaWdpbmFsIGluIGNhc2Ugb2YgY2xvbmluZ1xuICAgIC8vIGEgY2hpbGQuXG4gICAgdm5vZGUuY2hpbGRyZW4gJiYgdm5vZGUuY2hpbGRyZW4uc2xpY2UoKSxcbiAgICB2bm9kZS50ZXh0LFxuICAgIHZub2RlLmVsbSxcbiAgICB2bm9kZS5jb250ZXh0LFxuICAgIHZub2RlLmNvbXBvbmVudE9wdGlvbnMsXG4gICAgdm5vZGUuYXN5bmNGYWN0b3J5XG4gICk7XG4gIGNsb25lZC5ucyA9IHZub2RlLm5zO1xuICBjbG9uZWQuaXNTdGF0aWMgPSB2bm9kZS5pc1N0YXRpYztcbiAgY2xvbmVkLmtleSA9IHZub2RlLmtleTtcbiAgY2xvbmVkLmlzQ29tbWVudCA9IHZub2RlLmlzQ29tbWVudDtcbiAgY2xvbmVkLmZuQ29udGV4dCA9IHZub2RlLmZuQ29udGV4dDtcbiAgY2xvbmVkLmZuT3B0aW9ucyA9IHZub2RlLmZuT3B0aW9ucztcbiAgY2xvbmVkLmZuU2NvcGVJZCA9IHZub2RlLmZuU2NvcGVJZDtcbiAgY2xvbmVkLmFzeW5jTWV0YSA9IHZub2RlLmFzeW5jTWV0YTtcbiAgY2xvbmVkLmlzQ2xvbmVkID0gdHJ1ZTtcbiAgcmV0dXJuIGNsb25lZFxufVxuXG4vKlxuICogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoXG4gKiBkeW5hbWljYWxseSBhY2Nlc3NpbmcgbWV0aG9kcyBvbiBBcnJheSBwcm90b3R5cGVcbiAqL1xuXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBhcnJheU1ldGhvZHMgPSBPYmplY3QuY3JlYXRlKGFycmF5UHJvdG8pO1xuXG52YXIgbWV0aG9kc1RvUGF0Y2ggPSBbXG4gICdwdXNoJyxcbiAgJ3BvcCcsXG4gICdzaGlmdCcsXG4gICd1bnNoaWZ0JyxcbiAgJ3NwbGljZScsXG4gICdzb3J0JyxcbiAgJ3JldmVyc2UnXG5dO1xuXG4vKipcbiAqIEludGVyY2VwdCBtdXRhdGluZyBtZXRob2RzIGFuZCBlbWl0IGV2ZW50c1xuICovXG5tZXRob2RzVG9QYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgLy8gY2FjaGUgb3JpZ2luYWwgbWV0aG9kXG4gIHZhciBvcmlnaW5hbCA9IGFycmF5UHJvdG9bbWV0aG9kXTtcbiAgZGVmKGFycmF5TWV0aG9kcywgbWV0aG9kLCBmdW5jdGlvbiBtdXRhdG9yICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgdmFyIG9iID0gdGhpcy5fX29iX187XG4gICAgdmFyIGluc2VydGVkO1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdwdXNoJzpcbiAgICAgIGNhc2UgJ3Vuc2hpZnQnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3M7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzcGxpY2UnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3Muc2xpY2UoMik7XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIGlmIChpbnNlcnRlZCkgeyBvYi5vYnNlcnZlQXJyYXkoaW5zZXJ0ZWQpOyB9XG4gICAgLy8gbm90aWZ5IGNoYW5nZVxuICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH0pO1xufSk7XG5cbi8qICAqL1xuXG52YXIgYXJyYXlLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJyYXlNZXRob2RzKTtcblxuLyoqXG4gKiBJbiBzb21lIGNhc2VzIHdlIG1heSB3YW50IHRvIGRpc2FibGUgb2JzZXJ2YXRpb24gaW5zaWRlIGEgY29tcG9uZW50J3NcbiAqIHVwZGF0ZSBjb21wdXRhdGlvbi5cbiAqL1xudmFyIHNob3VsZE9ic2VydmUgPSB0cnVlO1xuXG5mdW5jdGlvbiB0b2dnbGVPYnNlcnZpbmcgKHZhbHVlKSB7XG4gIHNob3VsZE9ic2VydmUgPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBPYnNlcnZlciBjbGFzcyB0aGF0IGlzIGF0dGFjaGVkIHRvIGVhY2ggb2JzZXJ2ZWRcbiAqIG9iamVjdC4gT25jZSBhdHRhY2hlZCwgdGhlIG9ic2VydmVyIGNvbnZlcnRzIHRoZSB0YXJnZXRcbiAqIG9iamVjdCdzIHByb3BlcnR5IGtleXMgaW50byBnZXR0ZXIvc2V0dGVycyB0aGF0XG4gKiBjb2xsZWN0IGRlcGVuZGVuY2llcyBhbmQgZGlzcGF0Y2ggdXBkYXRlcy5cbiAqL1xudmFyIE9ic2VydmVyID0gZnVuY3Rpb24gT2JzZXJ2ZXIgKHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgdGhpcy5kZXAgPSBuZXcgRGVwKCk7XG4gIHRoaXMudm1Db3VudCA9IDA7XG4gIGRlZih2YWx1ZSwgJ19fb2JfXycsIHRoaXMpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAoaGFzUHJvdG8pIHtcbiAgICAgIHByb3RvQXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29weUF1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcywgYXJyYXlLZXlzKTtcbiAgICB9XG4gICAgdGhpcy5vYnNlcnZlQXJyYXkodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud2Fsayh2YWx1ZSk7XG4gIH1cbn07XG5cbi8qKlxuICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICogZ2V0dGVyL3NldHRlcnMuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuXG4gKiB2YWx1ZSB0eXBlIGlzIE9iamVjdC5cbiAqL1xuT2JzZXJ2ZXIucHJvdG90eXBlLndhbGsgPSBmdW5jdGlvbiB3YWxrIChvYmopIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMShvYmosIGtleXNbaV0pO1xuICB9XG59O1xuXG4vKipcbiAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gb2JzZXJ2ZUFycmF5IChpdGVtcykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9ic2VydmUoaXRlbXNbaV0pO1xuICB9XG59O1xuXG4vLyBoZWxwZXJzXG5cbi8qKlxuICogQXVnbWVudCBhIHRhcmdldCBPYmplY3Qgb3IgQXJyYXkgYnkgaW50ZXJjZXB0aW5nXG4gKiB0aGUgcHJvdG90eXBlIGNoYWluIHVzaW5nIF9fcHJvdG9fX1xuICovXG5mdW5jdGlvbiBwcm90b0F1Z21lbnQgKHRhcmdldCwgc3JjKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG4gIHRhcmdldC5fX3Byb3RvX18gPSBzcmM7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tcHJvdG8gKi9cbn1cblxuLyoqXG4gKiBBdWdtZW50IGEgdGFyZ2V0IE9iamVjdCBvciBBcnJheSBieSBkZWZpbmluZ1xuICogaGlkZGVuIHByb3BlcnRpZXMuXG4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBjb3B5QXVnbWVudCAodGFyZ2V0LCBzcmMsIGtleXMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGRlZih0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIGEgdmFsdWUsXG4gKiByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgaWYgc3VjY2Vzc2Z1bGx5IG9ic2VydmVkLFxuICogb3IgdGhlIGV4aXN0aW5nIG9ic2VydmVyIGlmIHRoZSB2YWx1ZSBhbHJlYWR5IGhhcyBvbmUuXG4gKi9cbmZ1bmN0aW9uIG9ic2VydmUgKHZhbHVlLCBhc1Jvb3REYXRhKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2I7XG4gIGlmIChoYXNPd24odmFsdWUsICdfX29iX18nKSAmJiB2YWx1ZS5fX29iX18gaW5zdGFuY2VvZiBPYnNlcnZlcikge1xuICAgIG9iID0gdmFsdWUuX19vYl9fO1xuICB9IGVsc2UgaWYgKFxuICAgIHNob3VsZE9ic2VydmUgJiZcbiAgICAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSAmJlxuICAgIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkgJiZcbiAgICBPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKSAmJlxuICAgICF2YWx1ZS5faXNWdWVcbiAgKSB7XG4gICAgb2IgPSBuZXcgT2JzZXJ2ZXIodmFsdWUpO1xuICB9XG4gIGlmIChhc1Jvb3REYXRhICYmIG9iKSB7XG4gICAgb2Iudm1Db3VudCsrO1xuICB9XG4gIHJldHVybiBvYlxufVxuXG4vKipcbiAqIERlZmluZSBhIHJlYWN0aXZlIHByb3BlcnR5IG9uIGFuIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZGVmaW5lUmVhY3RpdmUkJDEgKFxuICBvYmosXG4gIGtleSxcbiAgdmFsLFxuICBjdXN0b21TZXR0ZXIsXG4gIHNoYWxsb3dcbikge1xuICB2YXIgZGVwID0gbmV3IERlcCgpO1xuXG4gIHZhciBwcm9wZXJ0eSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpO1xuICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuY29uZmlndXJhYmxlID09PSBmYWxzZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gY2F0ZXIgZm9yIHByZS1kZWZpbmVkIGdldHRlci9zZXR0ZXJzXG4gIHZhciBnZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQ7XG4gIHZhciBzZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQ7XG4gIGlmICgoIWdldHRlciB8fCBzZXR0ZXIpICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICB2YWwgPSBvYmpba2V5XTtcbiAgfVxuXG4gIHZhciBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZSh2YWwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyICgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgIGlmIChjaGlsZE9iKSB7XG4gICAgICAgICAgY2hpbGRPYi5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBkZXBlbmRBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gcmVhY3RpdmVTZXR0ZXIgKG5ld1ZhbCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKG5ld1ZhbCA9PT0gdmFsdWUgfHwgKG5ld1ZhbCAhPT0gbmV3VmFsICYmIHZhbHVlICE9PSB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY3VzdG9tU2V0dGVyKSB7XG4gICAgICAgIGN1c3RvbVNldHRlcigpO1xuICAgICAgfVxuICAgICAgLy8gIzc5ODE6IGZvciBhY2Nlc3NvciBwcm9wZXJ0aWVzIHdpdGhvdXQgc2V0dGVyXG4gICAgICBpZiAoZ2V0dGVyICYmICFzZXR0ZXIpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgc2V0dGVyLmNhbGwob2JqLCBuZXdWYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gbmV3VmFsO1xuICAgICAgfVxuICAgICAgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUobmV3VmFsKTtcbiAgICAgIGRlcC5ub3RpZnkoKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdC4gQWRkcyB0aGUgbmV3IHByb3BlcnR5IGFuZFxuICogdHJpZ2dlcnMgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZiB0aGUgcHJvcGVydHkgZG9lc24ndFxuICogYWxyZWFkeSBleGlzdC5cbiAqL1xuZnVuY3Rpb24gc2V0ICh0YXJnZXQsIGtleSwgdmFsKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBzZXQgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5sZW5ndGggPSBNYXRoLm1heCh0YXJnZXQubGVuZ3RoLCBrZXkpO1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxLCB2YWwpO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoa2V5IGluIHRhcmdldCAmJiAhKGtleSBpbiBPYmplY3QucHJvdG90eXBlKSkge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBhZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICdhdCBydW50aW1lIC0gZGVjbGFyZSBpdCB1cGZyb250IGluIHRoZSBkYXRhIG9wdGlvbi4nXG4gICAgKTtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgaWYgKCFvYikge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBkZWZpbmVSZWFjdGl2ZSQkMShvYi52YWx1ZSwga2V5LCB2YWwpO1xuICBvYi5kZXAubm90aWZ5KCk7XG4gIHJldHVybiB2YWxcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2UgaWYgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiBkZWwgKHRhcmdldCwga2V5KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBkZWxldGUgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBkZWxldGluZyBwcm9wZXJ0aWVzIG9uIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJy0ganVzdCBzZXQgaXQgdG8gbnVsbC4nXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBkZWxldGUgdGFyZ2V0W2tleV07XG4gIGlmICghb2IpIHtcbiAgICByZXR1cm5cbiAgfVxuICBvYi5kZXAubm90aWZ5KCk7XG59XG5cbi8qKlxuICogQ29sbGVjdCBkZXBlbmRlbmNpZXMgb24gYXJyYXkgZWxlbWVudHMgd2hlbiB0aGUgYXJyYXkgaXMgdG91Y2hlZCwgc2luY2VcbiAqIHdlIGNhbm5vdCBpbnRlcmNlcHQgYXJyYXkgZWxlbWVudCBhY2Nlc3MgbGlrZSBwcm9wZXJ0eSBnZXR0ZXJzLlxuICovXG5mdW5jdGlvbiBkZXBlbmRBcnJheSAodmFsdWUpIHtcbiAgZm9yICh2YXIgZSA9ICh2b2lkIDApLCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGUgPSB2YWx1ZVtpXTtcbiAgICBlICYmIGUuX19vYl9fICYmIGUuX19vYl9fLmRlcC5kZXBlbmQoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlKSkge1xuICAgICAgZGVwZW5kQXJyYXkoZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAqIGhvdyB0byBtZXJnZSBhIHBhcmVudCBvcHRpb24gdmFsdWUgYW5kIGEgY2hpbGQgb3B0aW9uXG4gKiB2YWx1ZSBpbnRvIHRoZSBmaW5hbCB2YWx1ZS5cbiAqL1xudmFyIHN0cmF0cyA9IGNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG5cbi8qKlxuICogT3B0aW9ucyB3aXRoIHJlc3RyaWN0aW9uc1xuICovXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRhID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcbiAgICBpZiAoIXZtKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIm9wdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW5zdGFuY2UgXCIgK1xuICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFN0cmF0KHBhcmVudCwgY2hpbGQpXG4gIH07XG59XG5cbi8qKlxuICogSGVscGVyIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIHR3byBkYXRhIG9iamVjdHMgdG9nZXRoZXIuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YSAodG8sIGZyb20pIHtcbiAgaWYgKCFmcm9tKSB7IHJldHVybiB0byB9XG4gIHZhciBrZXksIHRvVmFsLCBmcm9tVmFsO1xuXG4gIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICA6IE9iamVjdC5rZXlzKGZyb20pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cbiAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgdG9WYWwgPSB0b1trZXldO1xuICAgIGZyb21WYWwgPSBmcm9tW2tleV07XG4gICAgaWYgKCFoYXNPd24odG8sIGtleSkpIHtcbiAgICAgIHNldCh0bywga2V5LCBmcm9tVmFsKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdG9WYWwgIT09IGZyb21WYWwgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICBpc1BsYWluT2JqZWN0KGZyb21WYWwpXG4gICAgKSB7XG4gICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBEYXRhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YU9yRm4gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bVxuKSB7XG4gIGlmICghdm0pIHtcbiAgICAvLyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgaWYgKCFwYXJlbnRWYWwpIHtcbiAgICAgIHJldHVybiBjaGlsZFZhbFxuICAgIH1cbiAgICAvLyB3aGVuIHBhcmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgLy8gd2UgbmVlZCB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgLy8gbWVyZ2VkIHJlc3VsdCBvZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgLy8gY2hlY2sgaWYgcGFyZW50VmFsIGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbiAoKSB7XG4gICAgICByZXR1cm4gbWVyZ2VEYXRhKFxuICAgICAgICB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbicgPyBjaGlsZFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogY2hpbGRWYWwsXG4gICAgICAgIHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbicgPyBwYXJlbnRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IHBhcmVudFZhbFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4gKCkge1xuICAgICAgLy8gaW5zdGFuY2UgbWVyZ2VcbiAgICAgIHZhciBpbnN0YW5jZURhdGEgPSB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBjaGlsZFZhbDtcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgIDogcGFyZW50VmFsO1xuICAgICAgaWYgKGluc3RhbmNlRGF0YSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdERhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIGlmIChjaGlsZFZhbCAmJiB0eXBlb2YgY2hpbGRWYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ1RoZSBcImRhdGFcIiBvcHRpb24gc2hvdWxkIGJlIGEgZnVuY3Rpb24gJyArXG4gICAgICAgICd0aGF0IHJldHVybnMgYSBwZXItaW5zdGFuY2UgdmFsdWUgaW4gY29tcG9uZW50ICcgK1xuICAgICAgICAnZGVmaW5pdGlvbnMuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbClcbiAgfVxuXG4gIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKVxufTtcblxuLyoqXG4gKiBIb29rcyBhbmQgcHJvcHMgYXJlIG1lcmdlZCBhcyBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSG9vayAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWxcbikge1xuICB2YXIgcmVzID0gY2hpbGRWYWxcbiAgICA/IHBhcmVudFZhbFxuICAgICAgPyBwYXJlbnRWYWwuY29uY2F0KGNoaWxkVmFsKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKVxuICAgICAgICA/IGNoaWxkVmFsXG4gICAgICAgIDogW2NoaWxkVmFsXVxuICAgIDogcGFyZW50VmFsO1xuICByZXR1cm4gcmVzXG4gICAgPyBkZWR1cGVIb29rcyhyZXMpXG4gICAgOiByZXNcbn1cblxuZnVuY3Rpb24gZGVkdXBlSG9va3MgKGhvb2tzKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZXMuaW5kZXhPZihob29rc1tpXSkgPT09IC0xKSB7XG4gICAgICByZXMucHVzaChob29rc1tpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuTElGRUNZQ0xFX0hPT0tTLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgc3RyYXRzW2hvb2tdID0gbWVyZ2VIb29rO1xufSk7XG5cbi8qKlxuICogQXNzZXRzXG4gKlxuICogV2hlbiBhIHZtIGlzIHByZXNlbnQgKGluc3RhbmNlIGNyZWF0aW9uKSwgd2UgbmVlZCB0byBkb1xuICogYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiBjb25zdHJ1Y3RvciBvcHRpb25zLCBpbnN0YW5jZVxuICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQXNzZXRzIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKHBhcmVudFZhbCB8fCBudWxsKTtcbiAgaWYgKGNoaWxkVmFsKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgICByZXR1cm4gZXh0ZW5kKHJlcywgY2hpbGRWYWwpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbkFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgc3RyYXRzW3R5cGUgKyAncyddID0gbWVyZ2VBc3NldHM7XG59KTtcblxuLyoqXG4gKiBXYXRjaGVycy5cbiAqXG4gKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAqL1xuc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgLy8gd29yayBhcm91bmQgRmlyZWZveCdzIE9iamVjdC5wcm90b3R5cGUud2F0Y2guLi5cbiAgaWYgKHBhcmVudFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgcGFyZW50VmFsID0gdW5kZWZpbmVkOyB9XG4gIGlmIChjaGlsZFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgY2hpbGRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2hpbGRWYWwpIHsgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgfVxuICBpZiAoIXBhcmVudFZhbCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICB2YXIgcmV0ID0ge307XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGZvciAodmFyIGtleSQxIGluIGNoaWxkVmFsKSB7XG4gICAgdmFyIHBhcmVudCA9IHJldFtrZXkkMV07XG4gICAgdmFyIGNoaWxkID0gY2hpbGRWYWxba2V5JDFdO1xuICAgIGlmIChwYXJlbnQgJiYgIUFycmF5LmlzQXJyYXkocGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gW3BhcmVudF07XG4gICAgfVxuICAgIHJldFtrZXkkMV0gPSBwYXJlbnRcbiAgICAgID8gcGFyZW50LmNvbmNhdChjaGlsZClcbiAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZCkgPyBjaGlsZCA6IFtjaGlsZF07XG4gIH1cbiAgcmV0dXJuIHJldFxufTtcblxuLyoqXG4gKiBPdGhlciBvYmplY3QgaGFzaGVzLlxuICovXG5zdHJhdHMucHJvcHMgPVxuc3RyYXRzLm1ldGhvZHMgPVxuc3RyYXRzLmluamVjdCA9XG5zdHJhdHMuY29tcHV0ZWQgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICBpZiAoY2hpbGRWYWwgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICBpZiAoY2hpbGRWYWwpIHsgZXh0ZW5kKHJldCwgY2hpbGRWYWwpOyB9XG4gIHJldHVybiByZXRcbn07XG5zdHJhdHMucHJvdmlkZSA9IG1lcmdlRGF0YU9yRm47XG5cbi8qKlxuICogRGVmYXVsdCBzdHJhdGVneS5cbiAqL1xudmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkXG4gICAgPyBwYXJlbnRWYWxcbiAgICA6IGNoaWxkVmFsXG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICovXG5mdW5jdGlvbiBjaGVja0NvbXBvbmVudHMgKG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMuY29tcG9uZW50cykge1xuICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcG9uZW50TmFtZSAobmFtZSkge1xuICBpZiAoIW5ldyBSZWdFeHAoKFwiXlthLXpBLVpdW1xcXFwtXFxcXC4wLTlfXCIgKyAodW5pY29kZVJlZ0V4cC5zb3VyY2UpICsgXCJdKiRcIikpLnRlc3QobmFtZSkpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ludmFsaWQgY29tcG9uZW50IG5hbWU6IFwiJyArIG5hbWUgKyAnXCIuIENvbXBvbmVudCBuYW1lcyAnICtcbiAgICAgICdzaG91bGQgY29uZm9ybSB0byB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lIGluIGh0bWw1IHNwZWNpZmljYXRpb24uJ1xuICAgICk7XG4gIH1cbiAgaWYgKGlzQnVpbHRJblRhZyhuYW1lKSB8fCBjb25maWcuaXNSZXNlcnZlZFRhZyhuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCAnICtcbiAgICAgICdpZDogJyArIG5hbWVcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogRW5zdXJlIGFsbCBwcm9wcyBvcHRpb24gc3ludGF4IGFyZSBub3JtYWxpemVkIGludG8gdGhlXG4gKiBPYmplY3QtYmFzZWQgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQcm9wcyAob3B0aW9ucywgdm0pIHtcbiAgdmFyIHByb3BzID0gb3B0aW9ucy5wcm9wcztcbiAgaWYgKCFwcm9wcykgeyByZXR1cm4gfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBpLCB2YWwsIG5hbWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmFtZSA9IGNhbWVsaXplKHZhbCk7XG4gICAgICAgIHJlc1tuYW1lXSA9IHsgdHlwZTogbnVsbCB9O1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oJ3Byb3BzIG11c3QgYmUgc3RyaW5ncyB3aGVuIHVzaW5nIGFycmF5IHN5bnRheC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhbCA9IHByb3BzW2tleV07XG4gICAgICBuYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICAgIHJlc1tuYW1lXSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IHZhbFxuICAgICAgICA6IHsgdHlwZTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcInByb3BzXFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKHByb3BzKSkgKyBcIi5cIixcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICBvcHRpb25zLnByb3BzID0gcmVzO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbGwgaW5qZWN0aW9ucyBpbnRvIE9iamVjdC1iYXNlZCBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0IChvcHRpb25zLCB2bSkge1xuICB2YXIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gIGlmICghaW5qZWN0KSB7IHJldHVybiB9XG4gIHZhciBub3JtYWxpemVkID0gb3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5qZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGluamVjdCkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICB2YXIgdmFsID0gaW5qZWN0W2tleV07XG4gICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgPyBleHRlbmQoeyBmcm9tOiBrZXkgfSwgdmFsKVxuICAgICAgICA6IHsgZnJvbTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZShpbmplY3QpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHJhdyBmdW5jdGlvbiBkaXJlY3RpdmVzIGludG8gb2JqZWN0IGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyAob3B0aW9ucykge1xuICB2YXIgZGlycyA9IG9wdGlvbnMuZGlyZWN0aXZlcztcbiAgaWYgKGRpcnMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGlycykge1xuICAgICAgdmFyIGRlZiQkMSA9IGRpcnNba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgZGVmJCQxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmJCQxLCB1cGRhdGU6IGRlZiQkMSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRPYmplY3RUeXBlIChuYW1lLCB2YWx1ZSwgdm0pIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiOiBleHBlY3RlZCBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUodmFsdWUpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWVyZ2UgdHdvIG9wdGlvbiBvYmplY3RzIGludG8gYSBuZXcgb25lLlxuICogQ29yZSB1dGlsaXR5IHVzZWQgaW4gYm90aCBpbnN0YW50aWF0aW9uIGFuZCBpbmhlcml0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPcHRpb25zIChcbiAgcGFyZW50LFxuICBjaGlsZCxcbiAgdm1cbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNoZWNrQ29tcG9uZW50cyhjaGlsZCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2hpbGQgPSBjaGlsZC5vcHRpb25zO1xuICB9XG5cbiAgbm9ybWFsaXplUHJvcHMoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplSW5qZWN0KGNoaWxkLCB2bSk7XG4gIG5vcm1hbGl6ZURpcmVjdGl2ZXMoY2hpbGQpO1xuXG4gIC8vIEFwcGx5IGV4dGVuZHMgYW5kIG1peGlucyBvbiB0aGUgY2hpbGQgb3B0aW9ucyxcbiAgLy8gYnV0IG9ubHkgaWYgaXQgaXMgYSByYXcgb3B0aW9ucyBvYmplY3QgdGhhdCBpc24ndFxuICAvLyB0aGUgcmVzdWx0IG9mIGFub3RoZXIgbWVyZ2VPcHRpb25zIGNhbGwuXG4gIC8vIE9ubHkgbWVyZ2VkIG9wdGlvbnMgaGFzIHRoZSBfYmFzZSBwcm9wZXJ0eS5cbiAgaWYgKCFjaGlsZC5fYmFzZSkge1xuICAgIGlmIChjaGlsZC5leHRlbmRzKSB7XG4gICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5leHRlbmRzLCB2bSk7XG4gICAgfVxuICAgIGlmIChjaGlsZC5taXhpbnMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5taXhpbnNbaV0sIHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHt9O1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICBtZXJnZUZpZWxkKGtleSk7XG4gIH1cbiAgZm9yIChrZXkgaW4gY2hpbGQpIHtcbiAgICBpZiAoIWhhc093bihwYXJlbnQsIGtleSkpIHtcbiAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbWVyZ2VGaWVsZCAoa2V5KSB7XG4gICAgdmFyIHN0cmF0ID0gc3RyYXRzW2tleV0gfHwgZGVmYXVsdFN0cmF0O1xuICAgIG9wdGlvbnNba2V5XSA9IHN0cmF0KHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSwga2V5KTtcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gYXNzZXQuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmVjYXVzZSBjaGlsZCBpbnN0YW5jZXMgbmVlZCBhY2Nlc3NcbiAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0IChcbiAgb3B0aW9ucyxcbiAgdHlwZSxcbiAgaWQsXG4gIHdhcm5NaXNzaW5nXG4pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gIC8vIGNoZWNrIGxvY2FsIHJlZ2lzdHJhdGlvbiB2YXJpYXRpb25zIGZpcnN0XG4gIGlmIChoYXNPd24oYXNzZXRzLCBpZCkpIHsgcmV0dXJuIGFzc2V0c1tpZF0gfVxuICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBjYW1lbGl6ZWRJZCkpIHsgcmV0dXJuIGFzc2V0c1tjYW1lbGl6ZWRJZF0gfVxuICB2YXIgUGFzY2FsQ2FzZUlkID0gY2FwaXRhbGl6ZShjYW1lbGl6ZWRJZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKSB7IHJldHVybiBhc3NldHNbUGFzY2FsQ2FzZUlkXSB9XG4gIC8vIGZhbGxiYWNrIHRvIHByb3RvdHlwZSBjaGFpblxuICB2YXIgcmVzID0gYXNzZXRzW2lkXSB8fCBhc3NldHNbY2FtZWxpemVkSWRdIHx8IGFzc2V0c1tQYXNjYWxDYXNlSWRdO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XG4gICAgd2FybihcbiAgICAgICdGYWlsZWQgdG8gcmVzb2x2ZSAnICsgdHlwZS5zbGljZSgwLCAtMSkgKyAnOiAnICsgaWQsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wIChcbiAga2V5LFxuICBwcm9wT3B0aW9ucyxcbiAgcHJvcHNEYXRhLFxuICB2bVxuKSB7XG4gIHZhciBwcm9wID0gcHJvcE9wdGlvbnNba2V5XTtcbiAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xuICB2YXIgdmFsdWUgPSBwcm9wc0RhdGFba2V5XTtcbiAgLy8gYm9vbGVhbiBjYXN0aW5nXG4gIHZhciBib29sZWFuSW5kZXggPSBnZXRUeXBlSW5kZXgoQm9vbGVhbiwgcHJvcC50eXBlKTtcbiAgaWYgKGJvb2xlYW5JbmRleCA+IC0xKSB7XG4gICAgaWYgKGFic2VudCAmJiAhaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IGh5cGhlbmF0ZShrZXkpKSB7XG4gICAgICAvLyBvbmx5IGNhc3QgZW1wdHkgc3RyaW5nIC8gc2FtZSBuYW1lIHRvIGJvb2xlYW4gaWZcbiAgICAgIC8vIGJvb2xlYW4gaGFzIGhpZ2hlciBwcmlvcml0eVxuICAgICAgdmFyIHN0cmluZ0luZGV4ID0gZ2V0VHlwZUluZGV4KFN0cmluZywgcHJvcC50eXBlKTtcbiAgICAgIGlmIChzdHJpbmdJbmRleCA8IDAgfHwgYm9vbGVhbkluZGV4IDwgc3RyaW5nSW5kZXgpIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBjaGVjayBkZWZhdWx0IHZhbHVlXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpO1xuICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgZnJlc2ggY29weSxcbiAgICAvLyBtYWtlIHN1cmUgdG8gb2JzZXJ2ZSBpdC5cbiAgICB2YXIgcHJldlNob3VsZE9ic2VydmUgPSBzaG91bGRPYnNlcnZlO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICBvYnNlcnZlKHZhbHVlKTtcbiAgICB0b2dnbGVPYnNlcnZpbmcocHJldlNob3VsZE9ic2VydmUpO1xuICB9XG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgLy8gc2tpcCB2YWxpZGF0aW9uIGZvciB3ZWV4IHJlY3ljbGUtbGlzdCBjaGlsZCBjb21wb25lbnQgcHJvcHNcbiAgICAhKGZhbHNlKVxuICApIHtcbiAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIHByb3AuXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BEZWZhdWx0VmFsdWUgKHZtLCBwcm9wLCBrZXkpIHtcbiAgLy8gbm8gZGVmYXVsdCwgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tZmFjdG9yeSBkZWZhdWx0cyBmb3IgT2JqZWN0ICYgQXJyYXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNPYmplY3QoZGVmKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9BcnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgLy8gcmV0dXJuIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2F0Y2hlciB0cmlnZ2VyXG4gIGlmICh2bSAmJiB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgfVxuICAvLyBjYWxsIGZhY3RvcnkgZnVuY3Rpb24gZm9yIG5vbi1GdW5jdGlvbiB0eXBlc1xuICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gIHJldHVybiB0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGdldFR5cGUocHJvcC50eXBlKSAhPT0gJ0Z1bmN0aW9uJ1xuICAgID8gZGVmLmNhbGwodm0pXG4gICAgOiBkZWZcbn1cblxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AgKFxuICBwcm9wLFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgdm0sXG4gIGFic2VudFxuKSB7XG4gIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgIHdhcm4oXG4gICAgICAnTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhcHJvcC5yZXF1aXJlZCkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICBpZiAodHlwZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xuICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0pO1xuICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGFzc2VydGVkVHlwZS5leHBlY3RlZFR5cGUgfHwgJycpO1xuICAgICAgdmFsaWQgPSBhc3NlcnRlZFR5cGUudmFsaWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF2YWxpZCkge1xuICAgIHdhcm4oXG4gICAgICBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciB2YWxpZGF0b3IgPSBwcm9wLnZhbGlkYXRvcjtcbiAgaWYgKHZhbGlkYXRvcikge1xuICAgIGlmICghdmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0ludmFsaWQgcHJvcDogY3VzdG9tIHZhbGlkYXRvciBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCInICsgbmFtZSArICdcIi4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHNpbXBsZUNoZWNrUkUgPSAvXihTdHJpbmd8TnVtYmVyfEJvb2xlYW58RnVuY3Rpb258U3ltYm9sKSQvO1xuXG5mdW5jdGlvbiBhc3NlcnRUeXBlICh2YWx1ZSwgdHlwZSkge1xuICB2YXIgdmFsaWQ7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICBpZiAoc2ltcGxlQ2hlY2tSRS50ZXN0KGV4cGVjdGVkVHlwZSkpIHtcbiAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICB2YWxpZCA9IHQgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXG4gICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ0FycmF5Jykge1xuICAgIHZhbGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlIChmbikge1xuICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnXG59XG5cbmZ1bmN0aW9uIGlzU2FtZVR5cGUgKGEsIGIpIHtcbiAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYilcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZUluZGV4ICh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgIHJldHVybiBpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXMsIHR5cGUpID8gMCA6IC0xXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzW2ldLCB0eXBlKSkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZSAobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgdmFyIG1lc3NhZ2UgPSBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiICsgbmFtZSArIFwiXFxcIi5cIiArXG4gICAgXCIgRXhwZWN0ZWQgXCIgKyAoZXhwZWN0ZWRUeXBlcy5tYXAoY2FwaXRhbGl6ZSkuam9pbignLCAnKSk7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGVzWzBdO1xuICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgdmFyIGV4cGVjdGVkVmFsdWUgPSBzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgcmVjZWl2ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSk7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgIGlzRXhwbGljYWJsZShleHBlY3RlZFR5cGUpICYmXG4gICAgICAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCIgd2l0aCB2YWx1ZSBcIiArIGV4cGVjdGVkVmFsdWU7XG4gIH1cbiAgbWVzc2FnZSArPSBcIiwgZ290IFwiICsgcmVjZWl2ZWRUeXBlICsgXCIgXCI7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSByZWNlaXZlZCB2YWx1ZVxuICBpZiAoaXNFeHBsaWNhYmxlKHJlY2VpdmVkVHlwZSkpIHtcbiAgICBtZXNzYWdlICs9IFwid2l0aCB2YWx1ZSBcIiArIHJlY2VpdmVkVmFsdWUgKyBcIi5cIjtcbiAgfVxuICByZXR1cm4gbWVzc2FnZVxufVxuXG5mdW5jdGlvbiBzdHlsZVZhbHVlICh2YWx1ZSwgdHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICByZXR1cm4gKFwiXFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIilcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xuICAgIHJldHVybiAoXCJcIiArIChOdW1iZXIodmFsdWUpKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiXCIgKyB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4cGxpY2FibGUgKHZhbHVlKSB7XG4gIHZhciBleHBsaWNpdFR5cGVzID0gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXTtcbiAgcmV0dXJuIGV4cGxpY2l0VHlwZXMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbTsgfSlcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuICgpIHtcbiAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICByZXR1cm4gYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiBlbGVtLnRvTG93ZXJDYXNlKCkgPT09ICdib29sZWFuJzsgfSlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIC8vIERlYWN0aXZhdGUgZGVwcyB0cmFja2luZyB3aGlsZSBwcm9jZXNzaW5nIGVycm9yIGhhbmRsZXIgdG8gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgcmVuZGVyaW5nLlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWV4L2lzc3Vlcy8xNTA1XG4gIHB1c2hUYXJnZXQoKTtcbiAgdHJ5IHtcbiAgICBpZiAodm0pIHtcbiAgICAgIHZhciBjdXIgPSB2bTtcbiAgICAgIHdoaWxlICgoY3VyID0gY3VyLiRwYXJlbnQpKSB7XG4gICAgICAgIHZhciBob29rcyA9IGN1ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO1xuICAgICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgY2FwdHVyZSA9IGhvb2tzW2ldLmNhbGwoY3VyLCBlcnIsIHZtLCBpbmZvKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7IHJldHVybiB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGUsIGN1ciwgJ2Vycm9yQ2FwdHVyZWQgaG9vaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwb3BUYXJnZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyAoXG4gIGhhbmRsZXIsXG4gIGNvbnRleHQsXG4gIGFyZ3MsXG4gIHZtLFxuICBpbmZvXG4pIHtcbiAgdmFyIHJlcztcbiAgdHJ5IHtcbiAgICByZXMgPSBhcmdzID8gaGFuZGxlci5hcHBseShjb250ZXh0LCBhcmdzKSA6IGhhbmRsZXIuY2FsbChjb250ZXh0KTtcbiAgICBpZiAocmVzICYmICFyZXMuX2lzVnVlICYmIGlzUHJvbWlzZShyZXMpICYmICFyZXMuX2hhbmRsZWQpIHtcbiAgICAgIHJlcy5jYXRjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8gKyBcIiAoUHJvbWlzZS9hc3luYylcIik7IH0pO1xuICAgICAgLy8gaXNzdWUgIzk1MTFcbiAgICAgIC8vIGF2b2lkIGNhdGNoIHRyaWdnZXJpbmcgbXVsdGlwbGUgdGltZXMgd2hlbiBuZXN0ZWQgY2FsbHNcbiAgICAgIHJlcy5faGFuZGxlZCA9IHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8pO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2xvYmFsSGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKGNvbmZpZy5lcnJvckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5lcnJvckhhbmRsZXIuY2FsbChudWxsLCBlcnIsIHZtLCBpbmZvKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGlmIHRoZSB1c2VyIGludGVudGlvbmFsbHkgdGhyb3dzIHRoZSBvcmlnaW5hbCBlcnJvciBpbiB0aGUgaGFuZGxlcixcbiAgICAgIC8vIGRvIG5vdCBsb2cgaXQgdHdpY2VcbiAgICAgIGlmIChlICE9PSBlcnIpIHtcbiAgICAgICAgbG9nRXJyb3IoZSwgbnVsbCwgJ2NvbmZpZy5lcnJvckhhbmRsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG59XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2FybigoXCJFcnJvciBpbiBcIiArIGluZm8gKyBcIjogXFxcIlwiICsgKGVyci50b1N0cmluZygpKSArIFwiXFxcIlwiKSwgdm0pO1xuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICgoaW5Ccm93c2VyIHx8IGluV2VleCkgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IGVyclxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgaXNVc2luZ01pY3JvVGFzayA9IGZhbHNlO1xuXG52YXIgY2FsbGJhY2tzID0gW107XG52YXIgcGVuZGluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbHVzaENhbGxiYWNrcyAoKSB7XG4gIHBlbmRpbmcgPSBmYWxzZTtcbiAgdmFyIGNvcGllcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcbiAgY2FsbGJhY2tzLmxlbmd0aCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29waWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29waWVzW2ldKCk7XG4gIH1cbn1cblxuLy8gSGVyZSB3ZSBoYXZlIGFzeW5jIGRlZmVycmluZyB3cmFwcGVycyB1c2luZyBtaWNyb3Rhc2tzLlxuLy8gSW4gMi41IHdlIHVzZWQgKG1hY3JvKSB0YXNrcyAoaW4gY29tYmluYXRpb24gd2l0aCBtaWNyb3Rhc2tzKS5cbi8vIEhvd2V2ZXIsIGl0IGhhcyBzdWJ0bGUgcHJvYmxlbXMgd2hlbiBzdGF0ZSBpcyBjaGFuZ2VkIHJpZ2h0IGJlZm9yZSByZXBhaW50XG4vLyAoZS5nLiAjNjgxMywgb3V0LWluIHRyYW5zaXRpb25zKS5cbi8vIEFsc28sIHVzaW5nIChtYWNybykgdGFza3MgaW4gZXZlbnQgaGFuZGxlciB3b3VsZCBjYXVzZSBzb21lIHdlaXJkIGJlaGF2aW9yc1xuLy8gdGhhdCBjYW5ub3QgYmUgY2lyY3VtdmVudGVkIChlLmcuICM3MTA5LCAjNzE1MywgIzc1NDYsICM3ODM0LCAjODEwOSkuXG4vLyBTbyB3ZSBub3cgdXNlIG1pY3JvdGFza3MgZXZlcnl3aGVyZSwgYWdhaW4uXG4vLyBBIG1ham9yIGRyYXdiYWNrIG9mIHRoaXMgdHJhZGVvZmYgaXMgdGhhdCB0aGVyZSBhcmUgc29tZSBzY2VuYXJpb3Ncbi8vIHdoZXJlIG1pY3JvdGFza3MgaGF2ZSB0b28gaGlnaCBhIHByaW9yaXR5IGFuZCBmaXJlIGluIGJldHdlZW4gc3VwcG9zZWRseVxuLy8gc2VxdWVudGlhbCBldmVudHMgKGUuZy4gIzQ1MjEsICM2NjkwLCB3aGljaCBoYXZlIHdvcmthcm91bmRzKVxuLy8gb3IgZXZlbiBiZXR3ZWVuIGJ1YmJsaW5nIG9mIHRoZSBzYW1lIGV2ZW50ICgjNjU2NikuXG52YXIgdGltZXJGdW5jO1xuXG4vLyBUaGUgbmV4dFRpY2sgYmVoYXZpb3IgbGV2ZXJhZ2VzIHRoZSBtaWNyb3Rhc2sgcXVldWUsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZFxuLy8gdmlhIGVpdGhlciBuYXRpdmUgUHJvbWlzZS50aGVuIG9yIE11dGF0aW9uT2JzZXJ2ZXIuXG4vLyBNdXRhdGlvbk9ic2VydmVyIGhhcyB3aWRlciBzdXBwb3J0LCBob3dldmVyIGl0IGlzIHNlcmlvdXNseSBidWdnZWQgaW5cbi8vIFVJV2ViVmlldyBpbiBpT1MgPj0gOS4zLjMgd2hlbiB0cmlnZ2VyZWQgaW4gdG91Y2ggZXZlbnQgaGFuZGxlcnMuIEl0XG4vLyBjb21wbGV0ZWx5IHN0b3BzIHdvcmtpbmcgYWZ0ZXIgdHJpZ2dlcmluZyBhIGZldyB0aW1lcy4uLiBzbywgaWYgbmF0aXZlXG4vLyBQcm9taXNlIGlzIGF2YWlsYWJsZSwgd2Ugd2lsbCB1c2UgaXQ6XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCwgJGZsb3ctZGlzYWJsZS1saW5lICovXG5pZiAodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb21pc2UpKSB7XG4gIHZhciBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwLnRoZW4oZmx1c2hDYWxsYmFja3MpO1xuICAgIC8vIEluIHByb2JsZW1hdGljIFVJV2ViVmlld3MsIFByb21pc2UudGhlbiBkb2Vzbid0IGNvbXBsZXRlbHkgYnJlYWssIGJ1dFxuICAgIC8vIGl0IGNhbiBnZXQgc3R1Y2sgaW4gYSB3ZWlyZCBzdGF0ZSB3aGVyZSBjYWxsYmFja3MgYXJlIHB1c2hlZCBpbnRvIHRoZVxuICAgIC8vIG1pY3JvdGFzayBxdWV1ZSBidXQgdGhlIHF1ZXVlIGlzbid0IGJlaW5nIGZsdXNoZWQsIHVudGlsIHRoZSBicm93c2VyXG4gICAgLy8gbmVlZHMgdG8gZG8gc29tZSBvdGhlciB3b3JrLCBlLmcuIGhhbmRsZSBhIHRpbWVyLiBUaGVyZWZvcmUgd2UgY2FuXG4gICAgLy8gXCJmb3JjZVwiIHRoZSBtaWNyb3Rhc2sgcXVldWUgdG8gYmUgZmx1c2hlZCBieSBhZGRpbmcgYW4gZW1wdHkgdGltZXIuXG4gICAgaWYgKGlzSU9TKSB7IHNldFRpbWVvdXQobm9vcCk7IH1cbiAgfTtcbiAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XG59IGVsc2UgaWYgKCFpc0lFICYmIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJyAmJiAoXG4gIGlzTmF0aXZlKE11dGF0aW9uT2JzZXJ2ZXIpIHx8XG4gIC8vIFBoYW50b21KUyBhbmQgaU9TIDcueFxuICBNdXRhdGlvbk9ic2VydmVyLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcl0nXG4pKSB7XG4gIC8vIFVzZSBNdXRhdGlvbk9ic2VydmVyIHdoZXJlIG5hdGl2ZSBQcm9taXNlIGlzIG5vdCBhdmFpbGFibGUsXG4gIC8vIGUuZy4gUGhhbnRvbUpTLCBpT1M3LCBBbmRyb2lkIDQuNFxuICAvLyAoIzY0NjYgTXV0YXRpb25PYnNlcnZlciBpcyB1bnJlbGlhYmxlIGluIElFMTEpXG4gIHZhciBjb3VudGVyID0gMTtcbiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2hDYWxsYmFja3MpO1xuICB2YXIgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoY291bnRlcikpO1xuICBvYnNlcnZlci5vYnNlcnZlKHRleHROb2RlLCB7XG4gICAgY2hhcmFjdGVyRGF0YTogdHJ1ZVxuICB9KTtcbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIGNvdW50ZXIgPSAoY291bnRlciArIDEpICUgMjtcbiAgICB0ZXh0Tm9kZS5kYXRhID0gU3RyaW5nKGNvdW50ZXIpO1xuICB9O1xuICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoc2V0SW1tZWRpYXRlKSkge1xuICAvLyBGYWxsYmFjayB0byBzZXRJbW1lZGlhdGUuXG4gIC8vIFRlY2hpbmljYWxseSBpdCBsZXZlcmFnZXMgdGhlIChtYWNybykgdGFzayBxdWV1ZSxcbiAgLy8gYnV0IGl0IGlzIHN0aWxsIGEgYmV0dGVyIGNob2ljZSB0aGFuIHNldFRpbWVvdXQuXG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJbW1lZGlhdGUoZmx1c2hDYWxsYmFja3MpO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gRmFsbGJhY2sgdG8gc2V0VGltZW91dC5cbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHNldFRpbWVvdXQoZmx1c2hDYWxsYmFja3MsIDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayAoY2IsIGN0eCkge1xuICB2YXIgX3Jlc29sdmU7XG4gIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNiLmNhbGwoY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZSwgY3R4LCAnbmV4dFRpY2snKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF9yZXNvbHZlKSB7XG4gICAgICBfcmVzb2x2ZShjdHgpO1xuICAgIH1cbiAgfSk7XG4gIGlmICghcGVuZGluZykge1xuICAgIHBlbmRpbmcgPSB0cnVlO1xuICAgIHRpbWVyRnVuYygpO1xuICB9XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBpZiAoIWNiICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pXG4gIH1cbn1cblxuLyogICovXG5cbi8qIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBQcm94eSAqL1xuXG52YXIgaW5pdFByb3h5O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgYWxsb3dlZEdsb2JhbHMgPSBtYWtlTWFwKFxuICAgICdJbmZpbml0eSx1bmRlZmluZWQsTmFOLGlzRmluaXRlLGlzTmFOLCcgK1xuICAgICdwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCwnICtcbiAgICAnTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLCcgK1xuICAgICdyZXF1aXJlJyAvLyBmb3IgV2VicGFjay9Ccm93c2VyaWZ5XG4gICk7XG5cbiAgdmFyIHdhcm5Ob25QcmVzZW50ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgb3IgbWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBvbiB0aGUgaW5zdGFuY2UgYnV0IFwiICtcbiAgICAgICdyZWZlcmVuY2VkIGR1cmluZyByZW5kZXIuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgcmVhY3RpdmUsICcgK1xuICAgICAgJ2VpdGhlciBpbiB0aGUgZGF0YSBvcHRpb24sIG9yIGZvciBjbGFzcy1iYXNlZCBjb21wb25lbnRzLCBieSAnICtcbiAgICAgICdpbml0aWFsaXppbmcgdGhlIHByb3BlcnR5LiAnICtcbiAgICAgICdTZWU6IGh0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL3JlYWN0aXZpdHkuaHRtbCNEZWNsYXJpbmctUmVhY3RpdmUtUHJvcGVydGllcy4nLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgd2FyblJlc2VydmVkUHJlZml4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIG11c3QgYmUgYWNjZXNzZWQgd2l0aCBcXFwiJGRhdGEuXCIgKyBrZXkgKyBcIlxcXCIgYmVjYXVzZSBcIiArXG4gICAgICAncHJvcGVydGllcyBzdGFydGluZyB3aXRoIFwiJFwiIG9yIFwiX1wiIGFyZSBub3QgcHJveGllZCBpbiB0aGUgVnVlIGluc3RhbmNlIHRvICcgK1xuICAgICAgJ3ByZXZlbnQgY29uZmxpY3RzIHdpdGggVnVlIGludGVybmFscycgK1xuICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvYXBpLyNkYXRhJyxcbiAgICAgIHRhcmdldFxuICAgICk7XG4gIH07XG5cbiAgdmFyIGhhc1Byb3h5ID1cbiAgICB0eXBlb2YgUHJveHkgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb3h5KTtcblxuICBpZiAoaGFzUHJveHkpIHtcbiAgICB2YXIgaXNCdWlsdEluTW9kaWZpZXIgPSBtYWtlTWFwKCdzdG9wLHByZXZlbnQsc2VsZixjdHJsLHNoaWZ0LGFsdCxtZXRhLGV4YWN0Jyk7XG4gICAgY29uZmlnLmtleUNvZGVzID0gbmV3IFByb3h5KGNvbmZpZy5rZXlDb2Rlcywge1xuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoaXNCdWlsdEluTW9kaWZpZXIoa2V5KSkge1xuICAgICAgICAgIHdhcm4oKFwiQXZvaWQgb3ZlcndyaXRpbmcgYnVpbHQtaW4gbW9kaWZpZXIgaW4gY29uZmlnLmtleUNvZGVzOiAuXCIgKyBrZXkpKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBoYXNIYW5kbGVyID0ge1xuICAgIGhhczogZnVuY3Rpb24gaGFzICh0YXJnZXQsIGtleSkge1xuICAgICAgdmFyIGhhcyA9IGtleSBpbiB0YXJnZXQ7XG4gICAgICB2YXIgaXNBbGxvd2VkID0gYWxsb3dlZEdsb2JhbHMoa2V5KSB8fFxuICAgICAgICAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5LmNoYXJBdCgwKSA9PT0gJ18nICYmICEoa2V5IGluIHRhcmdldC4kZGF0YSkpO1xuICAgICAgaWYgKCFoYXMgJiYgIWlzQWxsb3dlZCkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSkgeyB3YXJuUmVzZXJ2ZWRQcmVmaXgodGFyZ2V0LCBrZXkpOyB9XG4gICAgICAgIGVsc2UgeyB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXMgfHwgIWlzQWxsb3dlZFxuICAgIH1cbiAgfTtcblxuICB2YXIgZ2V0SGFuZGxlciA9IHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAodGFyZ2V0LCBrZXkpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiAhKGtleSBpbiB0YXJnZXQpKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKSB7IHdhcm5SZXNlcnZlZFByZWZpeCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhcmdldFtrZXldXG4gICAgfVxuICB9O1xuXG4gIGluaXRQcm94eSA9IGZ1bmN0aW9uIGluaXRQcm94eSAodm0pIHtcbiAgICBpZiAoaGFzUHJveHkpIHtcbiAgICAgIC8vIGRldGVybWluZSB3aGljaCBwcm94eSBoYW5kbGVyIHRvIHVzZVxuICAgICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICAgIHZhciBoYW5kbGVycyA9IG9wdGlvbnMucmVuZGVyICYmIG9wdGlvbnMucmVuZGVyLl93aXRoU3RyaXBwZWRcbiAgICAgICAgPyBnZXRIYW5kbGVyXG4gICAgICAgIDogaGFzSGFuZGxlcjtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IG5ldyBQcm94eSh2bSwgaGFuZGxlcnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgc2Vlbk9iamVjdHMgPSBuZXcgX1NldCgpO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFuIG9iamVjdCB0byBldm9rZSBhbGwgY29udmVydGVkXG4gKiBnZXR0ZXJzLCBzbyB0aGF0IGV2ZXJ5IG5lc3RlZCBwcm9wZXJ0eSBpbnNpZGUgdGhlIG9iamVjdFxuICogaXMgY29sbGVjdGVkIGFzIGEgXCJkZWVwXCIgZGVwZW5kZW5jeS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2UgKHZhbCkge1xuICBfdHJhdmVyc2UodmFsLCBzZWVuT2JqZWN0cyk7XG4gIHNlZW5PYmplY3RzLmNsZWFyKCk7XG59XG5cbmZ1bmN0aW9uIF90cmF2ZXJzZSAodmFsLCBzZWVuKSB7XG4gIHZhciBpLCBrZXlzO1xuICB2YXIgaXNBID0gQXJyYXkuaXNBcnJheSh2YWwpO1xuICBpZiAoKCFpc0EgJiYgIWlzT2JqZWN0KHZhbCkpIHx8IE9iamVjdC5pc0Zyb3plbih2YWwpIHx8IHZhbCBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHZhbC5fX29iX18pIHtcbiAgICB2YXIgZGVwSWQgPSB2YWwuX19vYl9fLmRlcC5pZDtcbiAgICBpZiAoc2Vlbi5oYXMoZGVwSWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2Vlbi5hZGQoZGVwSWQpO1xuICB9XG4gIGlmIChpc0EpIHtcbiAgICBpID0gdmFsLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7IF90cmF2ZXJzZSh2YWxbaV0sIHNlZW4pOyB9XG4gIH0gZWxzZSB7XG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgaSA9IGtleXMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtrZXlzW2ldXSwgc2Vlbik7IH1cbiAgfVxufVxuXG52YXIgbWFyaztcbnZhciBtZWFzdXJlO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcGVyZiA9IGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXG4gICAgcGVyZiAmJlxuICAgIHBlcmYubWFyayAmJlxuICAgIHBlcmYubWVhc3VyZSAmJlxuICAgIHBlcmYuY2xlYXJNYXJrcyAmJlxuICAgIHBlcmYuY2xlYXJNZWFzdXJlc1xuICApIHtcbiAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZi5tYXJrKHRhZyk7IH07XG4gICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICB9O1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgbmFtZSA9IG9uY2UkJDEgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgb25jZTogb25jZSQkMSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlciAoZm5zLCB2bSkge1xuICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMkMSwgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIilcbiAgICB9XG4gIH1cbiAgaW52b2tlci5mbnMgPSBmbnM7XG4gIHJldHVybiBpbnZva2VyXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyAoXG4gIG9uLFxuICBvbGRPbixcbiAgYWRkLFxuICByZW1vdmUkJDEsXG4gIGNyZWF0ZU9uY2VIYW5kbGVyLFxuICB2bVxuKSB7XG4gIHZhciBuYW1lLCBkZWYkJDEsIGN1ciwgb2xkLCBldmVudDtcbiAgZm9yIChuYW1lIGluIG9uKSB7XG4gICAgZGVmJCQxID0gY3VyID0gb25bbmFtZV07XG4gICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIgKyAoZXZlbnQubmFtZSkgKyBcIlxcXCI6IGdvdCBcIiArIFN0cmluZyhjdXIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkKSkge1xuICAgICAgaWYgKGlzVW5kZWYoY3VyLmZucykpIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVGbkludm9rZXIoY3VyLCB2bSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNUcnVlKGV2ZW50Lm9uY2UpKSB7XG4gICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlKTtcbiAgICAgIH1cbiAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUsIGV2ZW50LnBhc3NpdmUsIGV2ZW50LnBhcmFtcyk7XG4gICAgfSBlbHNlIGlmIChjdXIgIT09IG9sZCkge1xuICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgIG9uW25hbWVdID0gb2xkO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICBpZiAoaXNVbmRlZihvbltuYW1lXSkpIHtcbiAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICByZW1vdmUkJDEoZXZlbnQubmFtZSwgb2xkT25bbmFtZV0sIGV2ZW50LmNhcHR1cmUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9va0tleSwgaG9vaykge1xuICBpZiAoZGVmIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICBkZWYgPSBkZWYuZGF0YS5ob29rIHx8IChkZWYuZGF0YS5ob29rID0ge30pO1xuICB9XG4gIHZhciBpbnZva2VyO1xuICB2YXIgb2xkSG9vayA9IGRlZltob29rS2V5XTtcblxuICBmdW5jdGlvbiB3cmFwcGVkSG9vayAoKSB7XG4gICAgaG9vay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIC8vIGltcG9ydGFudDogcmVtb3ZlIG1lcmdlZCBob29rIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2VcbiAgICAvLyBhbmQgcHJldmVudCBtZW1vcnkgbGVha1xuICAgIHJlbW92ZShpbnZva2VyLmZucywgd3JhcHBlZEhvb2spO1xuICB9XG5cbiAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAvLyBubyBleGlzdGluZyBob29rXG4gICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbd3JhcHBlZEhvb2tdKTtcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob2xkSG9vay5mbnMpICYmIGlzVHJ1ZShvbGRIb29rLm1lcmdlZCkpIHtcbiAgICAgIC8vIGFscmVhZHkgYSBtZXJnZWQgaW52b2tlclxuICAgICAgaW52b2tlciA9IG9sZEhvb2s7XG4gICAgICBpbnZva2VyLmZucy5wdXNoKHdyYXBwZWRIb29rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbb2xkSG9vaywgd3JhcHBlZEhvb2tdKTtcbiAgICB9XG4gIH1cblxuICBpbnZva2VyLm1lcmdlZCA9IHRydWU7XG4gIGRlZltob29rS2V5XSA9IGludm9rZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIChcbiAgZGF0YSxcbiAgQ3RvcixcbiAgdGFnXG4pIHtcbiAgLy8gd2UgYXJlIG9ubHkgZXh0cmFjdGluZyByYXcgdmFsdWVzIGhlcmUuXG4gIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICB2YXIgcHJvcE9wdGlvbnMgPSBDdG9yLm9wdGlvbnMucHJvcHM7XG4gIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGF0dHJzID0gZGF0YS5hdHRycztcbiAgdmFyIHByb3BzID0gZGF0YS5wcm9wcztcbiAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHZhciBhbHRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBrZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXksXG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVkIGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVudClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChpc1VuZGVmKGMpIHx8IHR5cGVvZiBjID09PSAnYm9vbGVhbicpIHsgY29udGludWUgfVxuICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgIGxhc3QgPSByZXNbbGFzdEluZGV4XTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKTtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgKGNbMF0pLnRleHQpO1xuICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAvLyBlc3NlbnRpYWxseSBtZXJnZWQgd2hlbiByZW5kZXJlZCB0byBIVE1MIHN0cmluZ3NcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXG4gICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJpbmplY3Rpb24gYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlSW5qZWN0IChpbmplY3QsIHZtKSB7XG4gIGlmIChpbmplY3QpIHtcbiAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICA/IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpXG4gICAgICA6IE9iamVjdC5rZXlzKGluamVjdCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgLy8gIzY1NzQgaW4gY2FzZSB0aGUgaW5qZWN0IG9iamVjdCBpcyBvYnNlcnZlZC4uLlxuICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgdmFyIHByb3ZpZGVLZXkgPSBpbmplY3Rba2V5XS5mcm9tO1xuICAgICAgdmFyIHNvdXJjZSA9IHZtO1xuICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLl9wcm92aWRlZCAmJiBoYXNPd24oc291cmNlLl9wcm92aWRlZCwgcHJvdmlkZUtleSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHNvdXJjZS5fcHJvdmlkZWRbcHJvdmlkZUtleV07XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcbiAgICAgICAgICB2YXIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdHlwZW9mIHByb3ZpZGVEZWZhdWx0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHByb3ZpZGVEZWZhdWx0LmNhbGwodm0pXG4gICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKChcIkluamVjdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbi8qICAqL1xuXG5cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2xvdHMgKFxuICBjaGlsZHJlbixcbiAgY29udGV4dFxuKSB7XG4gIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgIHJldHVybiB7fVxuICB9XG4gIHZhciBzbG90cyA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciBkYXRhID0gY2hpbGQuZGF0YTtcbiAgICAvLyByZW1vdmUgc2xvdCBhdHRyaWJ1dGUgaWYgdGhlIG5vZGUgaXMgcmVzb2x2ZWQgYXMgYSBWdWUgc2xvdCBub2RlXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnNsb3QpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgfVxuICAgIC8vIG5hbWVkIHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVkIGluIHRoZVxuICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICBpZiAoKGNoaWxkLmNvbnRleHQgPT09IGNvbnRleHQgfHwgY2hpbGQuZm5Db250ZXh0ID09PSBjb250ZXh0KSAmJlxuICAgICAgZGF0YSAmJiBkYXRhLnNsb3QgIT0gbnVsbFxuICAgICkge1xuICAgICAgdmFyIG5hbWUgPSBkYXRhLnNsb3Q7XG4gICAgICB2YXIgc2xvdCA9IChzbG90c1tuYW1lXSB8fCAoc2xvdHNbbmFtZV0gPSBbXSkpO1xuICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hpbGQuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxuICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgZm9yICh2YXIgbmFtZSQxIGluIHNsb3RzKSB7XG4gICAgaWYgKHNsb3RzW25hbWUkMV0uZXZlcnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgICAgZGVsZXRlIHNsb3RzW25hbWUkMV07XG4gICAgfVxuICB9XG4gIHJldHVybiBzbG90c1xufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UgKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLmlzQ29tbWVudCAmJiAhbm9kZS5hc3luY0ZhY3RvcnkpIHx8IG5vZGUudGV4dCA9PT0gJyAnXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyAoXG4gIHNsb3RzLFxuICBub3JtYWxTbG90cyxcbiAgcHJldlNsb3RzXG4pIHtcbiAgdmFyIHJlcztcbiAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gIHZhciBpc1N0YWJsZSA9IHNsb3RzID8gISFzbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xuICB2YXIga2V5ID0gc2xvdHMgJiYgc2xvdHMuJGtleTtcbiAgaWYgKCFzbG90cykge1xuICAgIHJlcyA9IHt9O1xuICB9IGVsc2UgaWYgKHNsb3RzLl9ub3JtYWxpemVkKSB7XG4gICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgcmV0dXJuIHNsb3RzLl9ub3JtYWxpemVkXG4gIH0gZWxzZSBpZiAoXG4gICAgaXNTdGFibGUgJiZcbiAgICBwcmV2U2xvdHMgJiZcbiAgICBwcmV2U2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmXG4gICAga2V5ID09PSBwcmV2U2xvdHMuJGtleSAmJlxuICAgICFoYXNOb3JtYWxTbG90cyAmJlxuICAgICFwcmV2U2xvdHMuJGhhc05vcm1hbFxuICApIHtcbiAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXG4gICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXG4gICAgcmV0dXJuIHByZXZTbG90c1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSQxIGluIHNsb3RzKSB7XG4gICAgICBpZiAoc2xvdHNba2V5JDFdICYmIGtleSQxWzBdICE9PSAnJCcpIHtcbiAgICAgICAgcmVzW2tleSQxXSA9IG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSQxLCBzbG90c1trZXkkMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gIGZvciAodmFyIGtleSQyIGluIG5vcm1hbFNsb3RzKSB7XG4gICAgaWYgKCEoa2V5JDIgaW4gcmVzKSkge1xuICAgICAgcmVzW2tleSQyXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5JDIpO1xuICAgIH1cbiAgfVxuICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gIC8vIGFuZCB3aGVuIHRoYXQgaXMgcGFzc2VkIGRvd24gdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvclxuICBpZiAoc2xvdHMgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShzbG90cykpIHtcbiAgICAoc2xvdHMpLl9ub3JtYWxpemVkID0gcmVzO1xuICB9XG4gIGRlZihyZXMsICckc3RhYmxlJywgaXNTdGFibGUpO1xuICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gIGRlZihyZXMsICckaGFzTm9ybWFsJywgaGFzTm9ybWFsU2xvdHMpO1xuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcbiAgdmFyIG5vcm1hbGl6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgIHJlcyA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZXMpXG4gICAgICA/IFtyZXNdIC8vIHNpbmdsZSB2bm9kZVxuICAgICAgOiBub3JtYWxpemVDaGlsZHJlbihyZXMpO1xuICAgIHJldHVybiByZXMgJiYgKFxuICAgICAgcmVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgKHJlcy5sZW5ndGggPT09IDEgJiYgcmVzWzBdLmlzQ29tbWVudCkgLy8gIzk2NThcbiAgICApID8gdW5kZWZpbmVkXG4gICAgICA6IHJlc1xuICB9O1xuICAvLyB0aGlzIGlzIGEgc2xvdCB1c2luZyB0aGUgbmV3IHYtc2xvdCBzeW50YXggd2l0aG91dCBzY29wZS4gYWx0aG91Z2ggaXQgaXNcbiAgLy8gY29tcGlsZWQgYXMgYSBzY29wZWQgc2xvdCwgcmVuZGVyIGZuIHVzZXJzIHdvdWxkIGV4cGVjdCBpdCB0byBiZSBwcmVzZW50XG4gIC8vIG9uIHRoaXMuJHNsb3RzIGJlY2F1c2UgdGhlIHVzYWdlIGlzIHNlbWFudGljYWxseSBhIG5vcm1hbCBzbG90LlxuICBpZiAoZm4ucHJveHkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9ybWFsU2xvdHMsIGtleSwge1xuICAgICAgZ2V0OiBub3JtYWxpemVkLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbmZ1bmN0aW9uIHByb3h5Tm9ybWFsU2xvdChzbG90cywga2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbG90c1trZXldOyB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckxpc3QgKFxuICB2YWwsXG4gIHJlbmRlclxuKSB7XG4gIHZhciByZXQsIGksIGwsIGtleXMsIGtleTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtpXSwgaSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgaWYgKGhhc1N5bWJvbCAmJiB2YWxbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgcmV0ID0gW107XG4gICAgICB2YXIgaXRlcmF0b3IgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAgICAgcmV0LnB1c2gocmVuZGVyKHJlc3VsdC52YWx1ZSwgcmV0Lmxlbmd0aCkpO1xuICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2tleV0sIGtleSwgaSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNEZWYocmV0KSkge1xuICAgIHJldCA9IFtdO1xuICB9XG4gIChyZXQpLl9pc1ZMaXN0ID0gdHJ1ZTtcbiAgcmV0dXJuIHJldFxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIDxzbG90PlxuICovXG5mdW5jdGlvbiByZW5kZXJTbG90IChcbiAgbmFtZSxcbiAgZmFsbGJhY2ssXG4gIHByb3BzLFxuICBiaW5kT2JqZWN0XG4pIHtcbiAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICB2YXIgbm9kZXM7XG4gIGlmIChzY29wZWRTbG90Rm4pIHsgLy8gc2NvcGVkIHNsb3RcbiAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgIGlmIChiaW5kT2JqZWN0KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNPYmplY3QoYmluZE9iamVjdCkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnc2xvdCB2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCcsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiaW5kT2JqZWN0KSwgcHJvcHMpO1xuICAgIH1cbiAgICBub2RlcyA9IHNjb3BlZFNsb3RGbihwcm9wcykgfHwgZmFsbGJhY2s7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMgPSB0aGlzLiRzbG90c1tuYW1lXSB8fCBmYWxsYmFjaztcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSBwcm9wcyAmJiBwcm9wcy5zbG90O1xuICBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJywgeyBzbG90OiB0YXJnZXQgfSwgbm9kZXMpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGVzXG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIgKGlkKSB7XG4gIHJldHVybiByZXNvbHZlQXNzZXQodGhpcy4kb3B0aW9ucywgJ2ZpbHRlcnMnLCBpZCwgdHJ1ZSkgfHwgaWRlbnRpdHlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzS2V5Tm90TWF0Y2ggKGV4cGVjdCwgYWN0dWFsKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdCkpIHtcbiAgICByZXR1cm4gZXhwZWN0LmluZGV4T2YoYWN0dWFsKSA9PT0gLTFcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXhwZWN0ICE9PSBhY3R1YWxcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBjaGVja2luZyBrZXlDb2RlcyBmcm9tIGNvbmZpZy5cbiAqIGV4cG9zZWQgYXMgVnVlLnByb3RvdHlwZS5fa1xuICogcGFzc2luZyBpbiBldmVudEtleU5hbWUgYXMgbGFzdCBhcmd1bWVudCBzZXBhcmF0ZWx5IGZvciBiYWNrd2FyZHMgY29tcGF0XG4gKi9cbmZ1bmN0aW9uIGNoZWNrS2V5Q29kZXMgKFxuICBldmVudEtleUNvZGUsXG4gIGtleSxcbiAgYnVpbHRJbktleUNvZGUsXG4gIGV2ZW50S2V5TmFtZSxcbiAgYnVpbHRJbktleU5hbWVcbikge1xuICB2YXIgbWFwcGVkS2V5Q29kZSA9IGNvbmZpZy5rZXlDb2Rlc1trZXldIHx8IGJ1aWx0SW5LZXlDb2RlO1xuICBpZiAoYnVpbHRJbktleU5hbWUgJiYgZXZlbnRLZXlOYW1lICYmICFjb25maWcua2V5Q29kZXNba2V5XSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKGJ1aWx0SW5LZXlOYW1lLCBldmVudEtleU5hbWUpXG4gIH0gZWxzZSBpZiAobWFwcGVkS2V5Q29kZSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKG1hcHBlZEtleUNvZGUsIGV2ZW50S2V5Q29kZSlcbiAgfSBlbHNlIGlmIChldmVudEtleU5hbWUpIHtcbiAgICByZXR1cm4gaHlwaGVuYXRlKGV2ZW50S2V5TmFtZSkgIT09IGtleVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyAoXG4gIGRhdGEsXG4gIHRhZyxcbiAgdmFsdWUsXG4gIGFzUHJvcCxcbiAgaXNTeW5jXG4pIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFyIGhhc2g7XG4gICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAnY2xhc3MnIHx8XG4gICAgICAgICAga2V5ID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc2ggPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgaGFzaCA9IGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgIDogZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgaWYgKCEoY2FtZWxpemVkS2V5IGluIGhhc2gpICYmICEoaHlwaGVuYXRlZEtleSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0luRm9yXG4pIHtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgdGhpcy5fcmVuZGVyUHJveHksXG4gICAgbnVsbCxcbiAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgpLCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUsXG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIgKyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNPbmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAoa2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIG91cnMpIDogb3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRTbG90cyAoXG4gIGZucywgLy8gc2VlIGZsb3cvdm5vZGVcbiAgcmVzLFxuICAvLyB0aGUgZm9sbG93aW5nIGFyZSBhZGRlZCBpbiAyLjZcbiAgaGFzRHluYW1pY0tleXMsXG4gIGNvbnRlbnRIYXNoS2V5XG4pIHtcbiAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNsb3QgPSBmbnNbaV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2xvdCkpIHtcbiAgICAgIHJlc29sdmVTY29wZWRTbG90cyhzbG90LCByZXMsIGhhc0R5bmFtaWNLZXlzKTtcbiAgICB9IGVsc2UgaWYgKHNsb3QpIHtcbiAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgaWYgKHNsb3QucHJveHkpIHtcbiAgICAgICAgc2xvdC5mbi5wcm94eSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXNbc2xvdC5rZXldID0gc2xvdC5mbjtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbnRlbnRIYXNoS2V5KSB7XG4gICAgKHJlcykuJGtleSA9IGNvbnRlbnRIYXNoS2V5O1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGJpbmREeW5hbWljS2V5cyAoYmFzZU9iaiwgdmFsdWVzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5KSB7XG4gICAgICBiYXNlT2JqW3ZhbHVlc1tpXV0gPSB2YWx1ZXNbaSArIDFdO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgIT09ICcnICYmIGtleSAhPT0gbnVsbCkge1xuICAgICAgLy8gbnVsbCBpcyBhIHNwZWljYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICB3YXJuKFxuICAgICAgICAoXCJJbnZhbGlkIHZhbHVlIGZvciBkeW5hbWljIGRpcmVjdGl2ZSBhcmd1bWVudCAoZXhwZWN0ZWQgc3RyaW5nIG9yIG51bGwpOiBcIiArIGtleSksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiYXNlT2JqXG59XG5cbi8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuLy8gZW5zdXJlIG9ubHkgYXBwZW5kIHdoZW4gdmFsdWUgaXMgYWxyZWFkeSBzdHJpbmcsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNhc3Rcbi8vIHRvIHN0cmluZyBhbmQgY2F1c2UgdGhlIHR5cGUgY2hlY2sgdG8gbWlzcy5cbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllciAodmFsdWUsIHN5bWJvbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN5bWJvbCArIHZhbHVlIDogdmFsdWVcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluc3RhbGxSZW5kZXJIZWxwZXJzICh0YXJnZXQpIHtcbiAgdGFyZ2V0Ll9vID0gbWFya09uY2U7XG4gIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICB0YXJnZXQuX3MgPSB0b1N0cmluZztcbiAgdGFyZ2V0Ll9sID0gcmVuZGVyTGlzdDtcbiAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgdGFyZ2V0Ll9xID0gbG9vc2VFcXVhbDtcbiAgdGFyZ2V0Ll9pID0gbG9vc2VJbmRleE9mO1xuICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gIHRhcmdldC5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gIHRhcmdldC5fayA9IGNoZWNrS2V5Q29kZXM7XG4gIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgdGFyZ2V0Ll92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICB0YXJnZXQuX2UgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gIHRhcmdldC5fZyA9IGJpbmRPYmplY3RMaXN0ZW5lcnM7XG4gIHRhcmdldC5fZCA9IGJpbmREeW5hbWljS2V5cztcbiAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgKFxuICBkYXRhLFxuICBwcm9wcyxcbiAgY2hpbGRyZW4sXG4gIHBhcmVudCxcbiAgQ3RvclxuKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gIC8vIGdldHMgYSB1bmlxdWUgY29udGV4dCAtIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IG5hbWVkIHNsb3QgY2hlY2tcbiAgdmFyIGNvbnRleHRWbTtcbiAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICBjb250ZXh0Vm0gPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY29udGV4dCB2bSBwYXNzZWQgaW4gaXMgYSBmdW5jdGlvbmFsIGNvbnRleHQgYXMgd2VsbC5cbiAgICAvLyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGFibGUgdG8gZ2V0IGEgaG9sZCB0byB0aGVcbiAgICAvLyByZWFsIGNvbnRleHQgaW5zdGFuY2UuXG4gICAgY29udGV4dFZtID0gcGFyZW50O1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHBhcmVudCA9IHBhcmVudC5fb3JpZ2luYWw7XG4gIH1cbiAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcblxuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgdGhpcy5pbmplY3Rpb25zID0gcmVzb2x2ZUluamVjdChvcHRpb25zLmluamVjdCwgcGFyZW50KTtcbiAgdGhpcy5zbG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMkMS4kc2xvdHMpIHtcbiAgICAgIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBkYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB0aGlzJDEuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcyQxLiRzbG90c1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NvcGVkU2xvdHMnLCAoe1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuc2xvdHMoKSlcbiAgICB9XG4gIH0pKTtcblxuICAvLyBzdXBwb3J0IGZvciBjb21waWxlZCBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgIHRoaXMuJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy4kc2xvdHMpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuX3Njb3BlSWQpIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICBpZiAodm5vZGUgJiYgIUFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHZub2RlLmZuU2NvcGVJZCA9IG9wdGlvbnMuX3Njb3BlSWQ7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bm9kZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pOyB9O1xuICB9XG59XG5cbmluc3RhbGxSZW5kZXJIZWxwZXJzKEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0LnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQgKFxuICBDdG9yLFxuICBwcm9wc0RhdGEsXG4gIGRhdGEsXG4gIGNvbnRleHRWbSxcbiAgY2hpbGRyZW5cbikge1xuICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEucHJvcHMpOyB9XG4gIH1cblxuICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChcbiAgICBkYXRhLFxuICAgIHByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRleHRWbSxcbiAgICBDdG9yXG4gICk7XG5cbiAgdmFyIHZub2RlID0gb3B0aW9ucy5yZW5kZXIuY2FsbChudWxsLCByZW5kZXJDb250ZXh0Ll9jLCByZW5kZXJDb250ZXh0KTtcblxuICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dClcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgIHZhciB2bm9kZXMgPSBub3JtYWxpemVDaGlsZHJlbih2bm9kZSkgfHwgW107XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldID0gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZXNbaV0sIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQgKHZub2RlLCBkYXRhLCBjb250ZXh0Vm0sIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpIHtcbiAgLy8gIzc4MTcgY2xvbmUgbm9kZSBiZWZvcmUgc2V0dGluZyBmbkNvbnRleHQsIG90aGVyd2lzZSBpZiB0aGUgbm9kZSBpcyByZXVzZWRcbiAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gIC8vIHRoYXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIHRvIG1hdGNoLlxuICB2YXIgY2xvbmUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICBjbG9uZS5mbk9wdGlvbnMgPSBvcHRpb25zO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIChjbG9uZS5kZXZ0b29sc01ldGEgPSBjbG9uZS5kZXZ0b29sc01ldGEgfHwge30pLnJlbmRlckNvbnRleHQgPSByZW5kZXJDb250ZXh0O1xuICB9XG4gIGlmIChkYXRhLnNsb3QpIHtcbiAgICAoY2xvbmUuZGF0YSB8fCAoY2xvbmUuZGF0YSA9IHt9KSkuc2xvdCA9IGRhdGEuc2xvdDtcbiAgfVxuICByZXR1cm4gY2xvbmVcbn1cblxuZnVuY3Rpb24gbWVyZ2VQcm9wcyAodG8sIGZyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICB0b1tjYW1lbGl6ZShrZXkpXSA9IGZyb21ba2V5XTtcbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW5saW5lIGhvb2tzIHRvIGJlIGludm9rZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbnZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICBpbml0OiBmdW5jdGlvbiBpbml0ICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgaWYgKFxuICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICF2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQgJiZcbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlXG4gICAgKSB7XG4gICAgICAvLyBrZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcbiAgICAgIHZhciBtb3VudGVkTm9kZSA9IHZub2RlOyAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZShcbiAgICAgICAgdm5vZGUsXG4gICAgICAgIGFjdGl2ZUluc3RhbmNlXG4gICAgICApO1xuICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICB9XG4gIH0sXG5cbiAgcHJlcGF0Y2g6IGZ1bmN0aW9uIHByZXBhdGNoIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB1cGRhdGVDaGlsZENvbXBvbmVudChcbiAgICAgIGNoaWxkLFxuICAgICAgb3B0aW9ucy5wcm9wc0RhdGEsIC8vIHVwZGF0ZWQgcHJvcHNcbiAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xuICAgICAgdm5vZGUsIC8vIG5ldyBwYXJlbnQgdm5vZGVcbiAgICAgIG9wdGlvbnMuY2hpbGRyZW4gLy8gbmV3IGNoaWxkcmVuXG4gICAgKTtcbiAgfSxcblxuICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydCAodm5vZGUpIHtcbiAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICBjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGNhbGxIb29rKGNvbXBvbmVudEluc3RhbmNlLCAnbW91bnRlZCcpO1xuICAgIH1cbiAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgIGlmIChjb250ZXh0Ll9pc01vdW50ZWQpIHtcbiAgICAgICAgLy8gdnVlLXJvdXRlciMxMjEyXG4gICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgLy8gY2hhbmdlLCBzbyBkaXJlY3RseSB3YWxraW5nIHRoZSB0cmVlIGhlcmUgbWF5IGNhbGwgYWN0aXZhdGVkIGhvb2tzXG4gICAgICAgIC8vIG9uIGluY29ycmVjdCBjaGlsZHJlbi4gSW5zdGVhZCB3ZSBwdXNoIHRoZW0gaW50byBhIHF1ZXVlIHdoaWNoIHdpbGxcbiAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRjaCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3kgKHZub2RlKSB7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGlmICghdm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxudmFyIGhvb2tzVG9NZXJnZSA9IE9iamVjdC5rZXlzKGNvbXBvbmVudFZOb2RlSG9va3MpO1xuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQgKFxuICBDdG9yLFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgaWYgKGlzVW5kZWYoQ3RvcikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBiYXNlQ3RvciA9IGNvbnRleHQuJG9wdGlvbnMuX2Jhc2U7XG5cbiAgLy8gcGxhaW4gb3B0aW9ucyBvYmplY3Q6IHR1cm4gaXQgaW50byBhIGNvbnN0cnVjdG9yXG4gIGlmIChpc09iamVjdChDdG9yKSkge1xuICAgIEN0b3IgPSBiYXNlQ3Rvci5leHRlbmQoQ3Rvcik7XG4gIH1cblxuICAvLyBpZiBhdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGEgY29uc3RydWN0b3Igb3IgYW4gYXN5bmMgY29tcG9uZW50IGZhY3RvcnksXG4gIC8vIHJlamVjdC5cbiAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIgKyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGFzeW5jIGNvbXBvbmVudFxuICB2YXIgYXN5bmNGYWN0b3J5O1xuICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgbm9kZSBmb3IgYXN5bmMgY29tcG9uZW50LCB3aGljaCBpcyByZW5kZXJlZFxuICAgICAgLy8gYXMgYSBjb21tZW50IG5vZGUgYnV0IHByZXNlcnZlcyBhbGwgdGhlIHJhdyBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUuXG4gICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihcbiAgICAgICAgYXN5bmNGYWN0b3J5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdGFnXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3RvciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcblxuICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgIHRyYW5zZm9ybU1vZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gIH1cblxuICAvLyBleHRyYWN0IHByb3BzXG4gIHZhciBwcm9wc0RhdGEgPSBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZyk7XG5cbiAgLy8gZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKVxuICB9XG5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgLy8gY2hpbGQgY29tcG9uZW50IGxpc3RlbmVycyBpbnN0ZWFkIG9mIERPTSBsaXN0ZW5lcnNcbiAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gIC8vIHNvIGl0IGdldHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJlbnQgY29tcG9uZW50IHBhdGNoLlxuICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcblxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcblxuICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICBkYXRhID0ge307XG4gICAgaWYgKHNsb3QpIHtcbiAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKTtcblxuICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICB2YXIgbmFtZSA9IEN0b3Iub3B0aW9ucy5uYW1lIHx8IHRhZztcbiAgdmFyIHZub2RlID0gbmV3IFZOb2RlKFxuICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCxcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LFxuICAgIGFzeW5jRmFjdG9yeVxuICApO1xuXG4gIHJldHVybiB2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChcbiAgdm5vZGUsIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cgZG9lc24ndFxuICBwYXJlbnQgLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXG4pIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgcGFyZW50OiBwYXJlbnRcbiAgfTtcbiAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbnNcbiAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gaW5saW5lVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zO1xuICB9XG4gIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rc1RvTWVyZ2UubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgdmFyIHRvTWVyZ2UgPSBjb21wb25lbnRWTm9kZUhvb2tzW2tleV07XG4gICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgIGhvb2tzW2tleV0gPSBleGlzdGluZyA/IG1lcmdlSG9vayQxKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayQxIChmMSwgZjIpIHtcbiAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgIGYxKGEsIGIpO1xuICAgIGYyKGEsIGIpO1xuICB9O1xuICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gIHJldHVybiBtZXJnZWRcbn1cblxuLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50b1xuLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Nb2RlbCAob3B0aW9ucywgZGF0YSkge1xuICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICA7KGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShleGlzdGluZylcbiAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbnZhciBBTFdBWVNfTk9STUFMSVpFID0gMjtcblxuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlLFxuICBhbHdheXNOb3JtYWxpemVcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgY2hpbGRyZW4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICB9XG4gIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSlcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQgKFxuICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICBub3JtYWxpemF0aW9uVHlwZVxuKSB7XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoZGF0YSkuX19vYl9fKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIgKyAoSlNPTi5zdHJpbmdpZnkoZGF0YSkpICsgXCJcXG5cIiArXG4gICAgICAnQWx3YXlzIGNyZWF0ZSBmcmVzaCB2bm9kZSBkYXRhIG9iamVjdHMgaW4gZWFjaCByZW5kZXIhJyxcbiAgICAgIGNvbnRleHRcbiAgICApO1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyBvYmplY3Qgc3ludGF4IGluIHYtYmluZFxuICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICB0YWcgPSBkYXRhLmlzO1xuICB9XG4gIGlmICghdGFnKSB7XG4gICAgLy8gaW4gY2FzZSBvZiBjb21wb25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICBpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KVxuICApIHtcbiAgICB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgIHR5cGVvZiBjaGlsZHJlblswXSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cbiAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgdm5vZGUsIG5zO1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgQ3RvcjtcbiAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJiBpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVtZW50c1xuICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgdGFnLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXG4gICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH0gZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgaWYgKGlzRGVmKG5zKSkgeyBhcHBseU5TKHZub2RlLCBucyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHsgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7IH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlOUyAodm5vZGUsIG5zLCBmb3JjZSkge1xuICB2bm9kZS5ucyA9IG5zO1xuICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICBucyA9IHVuZGVmaW5lZDtcbiAgICBmb3JjZSA9IHRydWU7XG4gIH1cbiAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIChcbiAgICAgICAgaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zLCBmb3JjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIHJlZiAjNTMxOFxuLy8gbmVjZXNzYXJ5IHRvIGVuc3VyZSBwYXJlbnQgcmUtcmVuZGVyIHdoZW4gZGVlcCBiaW5kaW5ncyBsaWtlIDpzdHlsZSBhbmRcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG5mdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyAoZGF0YSkge1xuICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgfVxuICBpZiAoaXNPYmplY3QoZGF0YS5jbGFzcykpIHtcbiAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFJlbmRlciAodm0pIHtcbiAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICB2YXIgcGFyZW50Vm5vZGUgPSB2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcbiAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICB2bS4kc2NvcGVkU2xvdHMgPSBlbXB0eU9iamVjdDtcbiAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gIC8vIGFyZ3Mgb3JkZXI6IHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemVcbiAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAvLyBub3JtYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGZvciB0aGUgcHVibGljIHZlcnNpb24sIHVzZWQgaW5cbiAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuXG4gIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRhdHRycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0LCBudWxsLCB0cnVlKTtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICB9XG59XG5cbnZhciBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuXG5mdW5jdGlvbiByZW5kZXJNaXhpbiAoVnVlKSB7XG4gIC8vIGluc3RhbGwgcnVudGltZSBjb252ZW5pZW5jZSBoZWxwZXJzXG4gIGluc3RhbGxSZW5kZXJIZWxwZXJzKFZ1ZS5wcm90b3R5cGUpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIG5leHRUaWNrKGZuLCB0aGlzKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHZhciByZWYgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgcmVuZGVyID0gcmVmLnJlbmRlcjtcbiAgICB2YXIgX3BhcmVudFZub2RlID0gcmVmLl9wYXJlbnRWbm9kZTtcblxuICAgIGlmIChfcGFyZW50Vm5vZGUpIHtcbiAgICAgIHZtLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cyxcbiAgICAgICAgdm0uJHNsb3RzLFxuICAgICAgICB2bS4kc2NvcGVkU2xvdHNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAvLyByZW5kZXIgc2VsZlxuICAgIHZhciB2bm9kZTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIG1haW50YWluIGEgc3RhY2sgYmVjYXVlcyBhbGwgcmVuZGVyIGZucyBhcmUgY2FsbGVkXG4gICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gb25lIGFub3RoZXIuIE5lc3RlZCBjb21wb25lbnQncyByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHdoZW4gcGFyZW50IGNvbXBvbmVudCBpcyBwYXRjaGVkLlxuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gdm07XG4gICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlclwiKTtcbiAgICAgIC8vIHJldHVybiBlcnJvciByZW5kZXIgcmVzdWx0LFxuICAgICAgLy8gb3IgcHJldmlvdXMgdm5vZGUgdG8gcHJldmVudCByZW5kZXIgZXJyb3IgY2F1c2luZyBibGFuayBjb21wb25lbnRcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkgJiYgdm5vZGUubGVuZ3RoID09PSAxKSB7XG4gICAgICB2bm9kZSA9IHZub2RlWzBdO1xuICAgIH1cbiAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgaWYgKCEodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ011bHRpcGxlIHJvb3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSByZW5kZXIgZnVuY3Rpb24uIFJlbmRlciBmdW5jdGlvbiAnICtcbiAgICAgICAgICAnc2hvdWxkIHJldHVybiBhIHNpbmdsZSByb290IG5vZGUuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgfVxuICAgIC8vIHNldCBwYXJlbnRcbiAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgcmV0dXJuIHZub2RlXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnN1cmVDdG9yIChjb21wLCBiYXNlKSB7XG4gIGlmIChcbiAgICBjb21wLl9fZXNNb2R1bGUgfHxcbiAgICAoaGFzU3ltYm9sICYmIGNvbXBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpXG4gICkge1xuICAgIGNvbXAgPSBjb21wLmRlZmF1bHQ7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0KGNvbXApXG4gICAgPyBiYXNlLmV4dGVuZChjb21wKVxuICAgIDogY29tcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyIChcbiAgZmFjdG9yeSxcbiAgZGF0YSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHRhZ1xuKSB7XG4gIHZhciBub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICBub2RlLmFzeW5jRmFjdG9yeSA9IGZhY3Rvcnk7XG4gIG5vZGUuYXN5bmNNZXRhID0geyBkYXRhOiBkYXRhLCBjb250ZXh0OiBjb250ZXh0LCBjaGlsZHJlbjogY2hpbGRyZW4sIHRhZzogdGFnIH07XG4gIHJldHVybiBub2RlXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBc3luY0NvbXBvbmVudCAoXG4gIGZhY3RvcnksXG4gIGJhc2VDdG9yXG4pIHtcbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmVycm9yKSAmJiBpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXBcbiAgfVxuXG4gIGlmIChpc0RlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgIHJldHVybiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cblxuICB2YXIgb3duZXIgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XG4gIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgLy8gYWxyZWFkeSBwZW5kaW5nXG4gICAgZmFjdG9yeS5vd25lcnMucHVzaChvd25lcik7XG4gIH1cblxuICBpZiAoaXNUcnVlKGZhY3RvcnkubG9hZGluZykgJiYgaXNEZWYoZmFjdG9yeS5sb2FkaW5nQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICB9XG5cbiAgaWYgKG93bmVyICYmICFpc0RlZihmYWN0b3J5Lm93bmVycykpIHtcbiAgICB2YXIgb3duZXJzID0gZmFjdG9yeS5vd25lcnMgPSBbb3duZXJdO1xuICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICB2YXIgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICB2YXIgdGltZXJUaW1lb3V0ID0gbnVsbFxuXG4gICAgOyhvd25lcikuJG9uKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZShvd25lcnMsIG93bmVyKTsgfSk7XG5cbiAgICB2YXIgZm9yY2VSZW5kZXIgPSBmdW5jdGlvbiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG93bmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgKG93bmVyc1tpXSkuJGZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIGlmICh0aW1lckxvYWRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJMb2FkaW5nKTtcbiAgICAgICAgICB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lclRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJUaW1lb3V0KTtcbiAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzKSB7XG4gICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgZmFjdG9yeS5yZXNvbHZlZCA9IGVuc3VyZUN0b3IocmVzLCBiYXNlQ3Rvcik7XG4gICAgICAvLyBpbnZva2UgY2FsbGJhY2tzIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBzeW5jaHJvbm91cyByZXNvbHZlXG4gICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgIGlmICghc3luYykge1xuICAgICAgICBmb3JjZVJlbmRlcih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG93bmVycy5sZW5ndGggPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlamVjdCA9IG9uY2UoZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudDogXCIgKyAoU3RyaW5nKGZhY3RvcnkpKSArXG4gICAgICAgIChyZWFzb24gPyAoXCJcXG5SZWFzb246IFwiICsgcmVhc29uKSA6ICcnKVxuICAgICAgKTtcbiAgICAgIGlmIChpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XG4gICAgICAgIGZvcmNlUmVuZGVyKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlcyA9IGZhY3RvcnkocmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgIGlmIChpc09iamVjdChyZXMpKSB7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcbiAgICAgICAgLy8gKCkgPT4gUHJvbWlzZVxuICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKHJlcy5jb21wb25lbnQpKSB7XG4gICAgICAgIHJlcy5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChpc0RlZihyZXMuZXJyb3IpKSB7XG4gICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAgPSBlbnN1cmVDdG9yKHJlcy5lcnJvciwgYmFzZUN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5sb2FkaW5nKSkge1xuICAgICAgICAgIGZhY3RvcnkubG9hZGluZ0NvbXAgPSBlbnN1cmVDdG9yKHJlcy5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgaWYgKHJlcy5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9yeS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVzLmRlbGF5IHx8IDIwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy50aW1lb3V0KSkge1xuICAgICAgICAgIHRpbWVyVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGltZXJUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICAgICAgICAgICA/IChcInRpbWVvdXQgKFwiICsgKHJlcy50aW1lb3V0KSArIFwibXMpXCIpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZXMudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzeW5jID0gZmFsc2U7XG4gICAgLy8gcmV0dXJuIGluIGNhc2UgcmVzb2x2ZWQgc3luY2hyb25vdXNseVxuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdcbiAgICAgID8gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICAgICAgOiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzQXN5bmNQbGFjZWhvbGRlciAobm9kZSkge1xuICByZXR1cm4gbm9kZS5pc0NvbW1lbnQgJiYgbm9kZS5hc3luY0ZhY3Rvcnlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQgKGNoaWxkcmVuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xuICAgICAgICByZXR1cm4gY1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFdmVudHMgKHZtKSB7XG4gIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2bS5faGFzSG9va0V2ZW50ID0gZmFsc2U7XG4gIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICB2YXIgbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgaWYgKGxpc3RlbmVycykge1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0O1xuXG5mdW5jdGlvbiBhZGQgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9uKGV2ZW50LCBmbik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSQxIChldmVudCwgZm4pIHtcbiAgdGFyZ2V0LiRvZmYoZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT25jZUhhbmRsZXIgKGV2ZW50LCBmbikge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldDtcbiAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICB2YXIgcmVzID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzIChcbiAgdm0sXG4gIGxpc3RlbmVycyxcbiAgb2xkTGlzdGVuZXJzXG4pIHtcbiAgdGFyZ2V0ID0gdm07XG4gIHVwZGF0ZUxpc3RlbmVycyhsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyB8fCB7fSwgYWRkLCByZW1vdmUkMSwgY3JlYXRlT25jZUhhbmRsZXIsIHZtKTtcbiAgdGFyZ2V0ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBldmVudHNNaXhpbiAoVnVlKSB7XG4gIHZhciBob29rUkUgPSAvXmhvb2s6LztcbiAgVnVlLnByb3RvdHlwZS4kb24gPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZtLiRvbihldmVudFtpXSwgZm4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAodm0uX2V2ZW50c1tldmVudF0gfHwgKHZtLl9ldmVudHNbZXZlbnRdID0gW10pKS5wdXNoKGZuKTtcbiAgICAgIC8vIG9wdGltaXplIGhvb2s6ZXZlbnQgY29zdCBieSB1c2luZyBhIGJvb2xlYW4gZmxhZyBtYXJrZWQgYXQgcmVnaXN0cmF0aW9uXG4gICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcbiAgICAgIGlmIChob29rUkUudGVzdChldmVudCkpIHtcbiAgICAgICAgdm0uX2hhc0hvb2tFdmVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBmdW5jdGlvbiBvbiAoKSB7XG4gICAgICB2bS4kb2ZmKGV2ZW50LCBvbik7XG4gICAgICBmbi5hcHBseSh2bSwgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgb24uZm4gPSBmbjtcbiAgICB2bS4kb24oZXZlbnQsIG9uKTtcbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRvZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhbGxcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSQxID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSQxIDwgbDsgaSQxKyspIHtcbiAgICAgICAgdm0uJG9mZihldmVudFtpJDFdLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKCFjYnMpIHtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICBpZiAoIWZuKSB7XG4gICAgICB2bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgaGFuZGxlclxuICAgIHZhciBjYjtcbiAgICB2YXIgaSA9IGNicy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY2IgPSBjYnNbaV07XG4gICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGxvd2VyQ2FzZUV2ZW50ID0gZXZlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgdm0uX2V2ZW50c1tsb3dlckNhc2VFdmVudF0pIHtcbiAgICAgICAgdGlwKFxuICAgICAgICAgIFwiRXZlbnQgXFxcIlwiICsgbG93ZXJDYXNlRXZlbnQgKyBcIlxcXCIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgXCIgK1xuICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIiBidXQgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIFwiICtcbiAgICAgICAgICBcInYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBcIiArXG4gICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIgKyAoaHlwaGVuYXRlKGV2ZW50KSkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBldmVudCArIFwiXFxcIi5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKGNicykge1xuICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgPyB0b0FycmF5KGNicykgOiBjYnM7XG4gICAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBpbmZvID0gXCJldmVudCBoYW5kbGVyIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNic1tpXSwgdm0sIGFyZ3MsIHZtLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzZXRBY3RpdmVJbnN0YW5jZSh2bSkge1xuICB2YXIgcHJldkFjdGl2ZUluc3RhbmNlID0gYWN0aXZlSW5zdGFuY2U7XG4gIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgYWN0aXZlSW5zdGFuY2UgPSBwcmV2QWN0aXZlSW5zdGFuY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdExpZmVjeWNsZSAodm0pIHtcbiAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcblxuICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWFic3RyYWN0IHBhcmVudFxuICB2YXIgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICB3aGlsZSAocGFyZW50LiRvcHRpb25zLmFic3RyYWN0ICYmIHBhcmVudC4kcGFyZW50KSB7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICB9XG4gICAgcGFyZW50LiRjaGlsZHJlbi5wdXNoKHZtKTtcbiAgfVxuXG4gIHZtLiRwYXJlbnQgPSBwYXJlbnQ7XG4gIHZtLiRyb290ID0gcGFyZW50ID8gcGFyZW50LiRyb290IDogdm07XG5cbiAgdm0uJGNoaWxkcmVuID0gW107XG4gIHZtLiRyZWZzID0ge307XG5cbiAgdm0uX3dhdGNoZXIgPSBudWxsO1xuICB2bS5faW5hY3RpdmUgPSBudWxsO1xuICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgdm0uX2lzTW91bnRlZCA9IGZhbHNlO1xuICB2bS5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGlmZWN5Y2xlTWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHByZXZFbCA9IHZtLiRlbDtcbiAgICB2YXIgcHJldlZub2RlID0gdm0uX3Zub2RlO1xuICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh2bSk7XG4gICAgdm0uX3Zub2RlID0gdm5vZGU7XG4gICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgLy8gYmFzZWQgb24gdGhlIHJlbmRlcmluZyBiYWNrZW5kIHVzZWQuXG4gICAgaWYgKCFwcmV2Vm5vZGUpIHtcbiAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18odm0uJGVsLCB2bm9kZSwgaHlkcmF0aW5nLCBmYWxzZSAvKiByZW1vdmVPbmx5ICovKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlc1xuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAocHJldkVsKSB7XG4gICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgfVxuICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICBpZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgdm0uJHBhcmVudC4kZWwgPSB2bS4kZWw7XG4gICAgfVxuICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlRGVzdHJveScpO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHJlbW92ZShwYXJlbnQuJGNoaWxkcmVuLCB2bSk7XG4gICAgfVxuICAgIC8vIHRlYXJkb3duIHdhdGNoZXJzXG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgICB2YXIgaSA9IHZtLl93YXRjaGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgZnJvbSBkYXRhIG9iXG4gICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xuICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICB9XG4gICAgLy8gY2FsbCB0aGUgbGFzdCBob29rLi4uXG4gICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICB2bS5fX3BhdGNoX18odm0uX3Zub2RlLCBudWxsKTtcbiAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgY2FsbEhvb2sodm0sICdkZXN0cm95ZWQnKTtcbiAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxuICAgIHZtLiRvZmYoKTtcbiAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIC8vIHJlbGVhc2UgY2lyY3VsYXIgcmVmZXJlbmNlICgjNjc1OSlcbiAgICBpZiAodm0uJHZub2RlKSB7XG4gICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50IChcbiAgdm0sXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICB2bS4kZWwgPSBlbDtcbiAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgIHZtLiRvcHRpb25zLmVsIHx8IGVsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICdyZW5kZXIgZnVuY3Rpb25zLCBvciB1c2UgdGhlIGNvbXBpbGVyLWluY2x1ZGVkIGJ1aWxkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxIb29rKHZtLCAnYmVmb3JlTW91bnQnKTtcblxuICB2YXIgdXBkYXRlQ29tcG9uZW50O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbmFtZSA9IHZtLl9uYW1lO1xuICAgICAgdmFyIGlkID0gdm0uX3VpZDtcbiAgICAgIHZhciBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyBpZDtcbiAgICAgIHZhciBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArIGlkO1xuXG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIHZhciB2bm9kZSA9IHZtLl9yZW5kZXIoKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG5cbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgdm0uX3VwZGF0ZSh2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRlcigpLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH1cblxuICAvLyB3ZSBzZXQgdGhpcyB0byB2bS5fd2F0Y2hlciBpbnNpZGUgdGhlIHdhdGNoZXIncyBjb25zdHJ1Y3RvclxuICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAvLyBjb21wb25lbnQncyBtb3VudGVkIGhvb2spLCB3aGljaCByZWxpZXMgb24gdm0uX3dhdGNoZXIgYmVpbmcgYWxyZWFkeSBkZWZpbmVkXG4gIG5ldyBXYXRjaGVyKHZtLCB1cGRhdGVDb21wb25lbnQsIG5vb3AsIHtcbiAgICBiZWZvcmU6IGZ1bmN0aW9uIGJlZm9yZSAoKSB7XG4gICAgICBpZiAodm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlVXBkYXRlJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB0cnVlIC8qIGlzUmVuZGVyV2F0Y2hlciAqLyk7XG4gIGh5ZHJhdGluZyA9IGZhbHNlO1xuXG4gIC8vIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UsIGNhbGwgbW91bnRlZCBvbiBzZWxmXG4gIC8vIG1vdW50ZWQgaXMgY2FsbGVkIGZvciByZW5kZXItY3JlYXRlZCBjaGlsZCBjb21wb25lbnRzIGluIGl0cyBpbnNlcnRlZCBob29rXG4gIGlmICh2bS4kdm5vZGUgPT0gbnVsbCkge1xuICAgIHZtLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIGNhbGxIb29rKHZtLCAnbW91bnRlZCcpO1xuICB9XG4gIHJldHVybiB2bVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDaGlsZENvbXBvbmVudCAoXG4gIHZtLFxuICBwcm9wc0RhdGEsXG4gIGxpc3RlbmVycyxcbiAgcGFyZW50Vm5vZGUsXG4gIHJlbmRlckNoaWxkcmVuXG4pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLlxuXG4gIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBkeW5hbWljIHNjb3BlZFNsb3RzIChoYW5kLXdyaXR0ZW4gb3IgY29tcGlsZWQgYnV0IHdpdGhcbiAgLy8gZHluYW1pYyBzbG90IG5hbWVzKS4gU3RhdGljIHNjb3BlZCBzbG90cyBjb21waWxlZCBmcm9tIHRlbXBsYXRlIGhhcyB0aGVcbiAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICB2YXIgbmV3U2NvcGVkU2xvdHMgPSBwYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzO1xuICB2YXIgb2xkU2NvcGVkU2xvdHMgPSB2bS4kc2NvcGVkU2xvdHM7XG4gIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKFxuICAgIChuZXdTY29wZWRTbG90cyAmJiAhbmV3U2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAob2xkU2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmICFvbGRTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgIChuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSAhPT0gbmV3U2NvcGVkU2xvdHMuJGtleSlcbiAgKTtcblxuICAvLyBBbnkgc3RhdGljIHNsb3QgY2hpbGRyZW4gZnJvbSB0aGUgcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHBhcmVudCdzXG4gIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAvLyB1cGRhdGUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSAhIShcbiAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8ICAvLyBoYXMgb2xkIHN0YXRpYyBzbG90c1xuICAgIGhhc0R5bmFtaWNTY29wZWRTbG90XG4gICk7XG5cbiAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG5cbiAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgfVxuICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuZXJzIGhhc2hcbiAgLy8gdGhlc2UgYXJlIGFsc28gcmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4gIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gIHZtLiRhdHRycyA9IHBhcmVudFZub2RlLmRhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZtLiRsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG5cbiAgLy8gdXBkYXRlIHByb3BzXG4gIGlmIChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICB2YXIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgdmFyIHByb3BPcHRpb25zID0gdm0uJG9wdGlvbnMucHJvcHM7IC8vIHd0ZiBmbG93P1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICB9XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIC8vIGtlZXAgYSBjb3B5IG9mIHJhdyBwcm9wc0RhdGFcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gIH1cblxuICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgdmFyIG9sZExpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuXG4gIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gIGlmIChuZWVkc0ZvcmNlVXBkYXRlKSB7XG4gICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICB2bS4kZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkluYWN0aXZlVHJlZSAodm0pIHtcbiAgd2hpbGUgKHZtICYmICh2bSA9IHZtLiRwYXJlbnQpKSB7XG4gICAgaWYgKHZtLl9pbmFjdGl2ZSkgeyByZXR1cm4gdHJ1ZSB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHZtLl9kaXJlY3RJbmFjdGl2ZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2bS5faW5hY3RpdmUgfHwgdm0uX2luYWN0aXZlID09PSBudWxsKSB7XG4gICAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdhY3RpdmF0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgaWYgKCF2bS5faW5hY3RpdmUpIHtcbiAgICB2bS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdkZWFjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rICh2bSwgaG9vaykge1xuICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgbGlmZWN5Y2xlIGhvb2tzXG4gIHB1c2hUYXJnZXQoKTtcbiAgdmFyIGhhbmRsZXJzID0gdm0uJG9wdGlvbnNbaG9va107XG4gIHZhciBpbmZvID0gaG9vayArIFwiIGhvb2tcIjtcbiAgaWYgKGhhbmRsZXJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXJzW2ldLCB2bSwgbnVsbCwgdm0sIGluZm8pO1xuICAgIH1cbiAgfVxuICBpZiAodm0uX2hhc0hvb2tFdmVudCkge1xuICAgIHZtLiRlbWl0KCdob29rOicgKyBob29rKTtcbiAgfVxuICBwb3BUYXJnZXQoKTtcbn1cblxuLyogICovXG5cbnZhciBNQVhfVVBEQVRFX0NPVU5UID0gMTAwO1xuXG52YXIgcXVldWUgPSBbXTtcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xudmFyIGhhcyA9IHt9O1xudmFyIGNpcmN1bGFyID0ge307XG52YXIgd2FpdGluZyA9IGZhbHNlO1xudmFyIGZsdXNoaW5nID0gZmFsc2U7XG52YXIgaW5kZXggPSAwO1xuXG4vKipcbiAqIFJlc2V0IHRoZSBzY2hlZHVsZXIncyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSAoKSB7XG4gIGluZGV4ID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgaGFzID0ge307XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2lyY3VsYXIgPSB7fTtcbiAgfVxuICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cblxuLy8gQXN5bmMgZWRnZSBjYXNlICM2NTY2IHJlcXVpcmVzIHNhdmluZyB0aGUgdGltZXN0YW1wIHdoZW4gZXZlbnQgbGlzdGVuZXJzIGFyZVxuLy8gYXR0YWNoZWQuIEhvd2V2ZXIsIGNhbGxpbmcgcGVyZm9ybWFuY2Uubm93KCkgaGFzIGEgcGVyZiBvdmVyaGVhZCBlc3BlY2lhbGx5XG4vLyBpZiB0aGUgcGFnZSBoYXMgdGhvdXNhbmRzIG9mIGV2ZW50IGxpc3RlbmVycy4gSW5zdGVhZCwgd2UgdGFrZSBhIHRpbWVzdGFtcFxuLy8gZXZlcnkgdGltZSB0aGUgc2NoZWR1bGVyIGZsdXNoZXMgYW5kIHVzZSB0aGF0IGZvciBhbGwgZXZlbnQgbGlzdGVuZXJzXG4vLyBhdHRhY2hlZCBkdXJpbmcgdGhhdCBmbHVzaC5cbnZhciBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSAwO1xuXG4vLyBBc3luYyBlZGdlIGNhc2UgZml4IHJlcXVpcmVzIHN0b3JpbmcgYW4gZXZlbnQgbGlzdGVuZXIncyBhdHRhY2ggdGltZXN0YW1wLlxudmFyIGdldE5vdyA9IERhdGUubm93O1xuXG4vLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuLy8gdGltZXN0YW1wIGNhbiBlaXRoZXIgYmUgaGktcmVzIChyZWxhdGl2ZSB0byBwYWdlIGxvYWQpIG9yIGxvdy1yZXNcbi8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxuLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuLy8gQWxsIElFIHZlcnNpb25zIHVzZSBsb3ctcmVzIGV2ZW50IHRpbWVzdGFtcHMsIGFuZCBoYXZlIHByb2JsZW1hdGljIGNsb2NrXG4vLyBpbXBsZW1lbnRhdGlvbnMgKCM5NjMyKVxuaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICB2YXIgcGVyZm9ybWFuY2UgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIGlmIChcbiAgICBwZXJmb3JtYW5jZSAmJlxuICAgIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicgJiZcbiAgICBnZXROb3coKSA+IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpLnRpbWVTdGFtcFxuICApIHtcbiAgICAvLyBpZiB0aGUgZXZlbnQgdGltZXN0YW1wLCBhbHRob3VnaCBldmFsdWF0ZWQgQUZURVIgdGhlIERhdGUubm93KCksIGlzXG4gICAgLy8gc21hbGxlciB0aGFuIGl0LCBpdCBtZWFucyB0aGUgZXZlbnQgaXMgdXNpbmcgYSBoaS1yZXMgdGltZXN0YW1wLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGktcmVzIHZlcnNpb24gZm9yIGV2ZW50IGxpc3RlbmVyIHRpbWVzdGFtcHMgYXNcbiAgICAvLyB3ZWxsLlxuICAgIGdldE5vdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpOyB9O1xuICB9XG59XG5cbi8qKlxuICogRmx1c2ggYm90aCBxdWV1ZXMgYW5kIHJ1biB0aGUgd2F0Y2hlcnMuXG4gKi9cbmZ1bmN0aW9uIGZsdXNoU2NoZWR1bGVyUXVldWUgKCkge1xuICBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSBnZXROb3coKTtcbiAgZmx1c2hpbmcgPSB0cnVlO1xuICB2YXIgd2F0Y2hlciwgaWQ7XG5cbiAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0OlxuICAvLyAxLiBDb21wb25lbnRzIGFyZSB1cGRhdGVkIGZyb20gcGFyZW50IHRvIGNoaWxkLiAoYmVjYXVzZSBwYXJlbnQgaXMgYWx3YXlzXG4gIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgLy8gMi4gQSBjb21wb25lbnQncyB1c2VyIHdhdGNoZXJzIGFyZSBydW4gYmVmb3JlIGl0cyByZW5kZXIgd2F0Y2hlciAoYmVjYXVzZVxuICAvLyAgICB1c2VyIHdhdGNoZXJzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgcmVuZGVyIHdhdGNoZXIpXG4gIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gIC8vICAgIGl0cyB3YXRjaGVycyBjYW4gYmUgc2tpcHBlZC5cbiAgcXVldWUuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuXG4gIC8vIGRvIG5vdCBjYWNoZSBsZW5ndGggYmVjYXVzZSBtb3JlIHdhdGNoZXJzIG1pZ2h0IGJlIHB1c2hlZFxuICAvLyBhcyB3ZSBydW4gZXhpc3Rpbmcgd2F0Y2hlcnNcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcXVldWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgd2F0Y2hlciA9IHF1ZXVlW2luZGV4XTtcbiAgICBpZiAod2F0Y2hlci5iZWZvcmUpIHtcbiAgICAgIHdhdGNoZXIuYmVmb3JlKCk7XG4gICAgfVxuICAgIGlkID0gd2F0Y2hlci5pZDtcbiAgICBoYXNbaWRdID0gbnVsbDtcbiAgICB3YXRjaGVyLnJ1bigpO1xuICAgIC8vIGluIGRldiBidWlsZCwgY2hlY2sgYW5kIHN0b3AgY2lyY3VsYXIgdXBkYXRlcy5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBoYXNbaWRdICE9IG51bGwpIHtcbiAgICAgIGNpcmN1bGFyW2lkXSA9IChjaXJjdWxhcltpZF0gfHwgMCkgKyAxO1xuICAgICAgaWYgKGNpcmN1bGFyW2lkXSA+IE1BWF9VUERBVEVfQ09VTlQpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnWW91IG1heSBoYXZlIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wICcgKyAoXG4gICAgICAgICAgICB3YXRjaGVyLnVzZXJcbiAgICAgICAgICAgICAgPyAoXCJpbiB3YXRjaGVyIHdpdGggZXhwcmVzc2lvbiBcXFwiXCIgKyAod2F0Y2hlci5leHByZXNzaW9uKSArIFwiXFxcIlwiKVxuICAgICAgICAgICAgICA6IFwiaW4gYSBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9uLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3YXRjaGVyLnZtXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8ga2VlcCBjb3BpZXMgb2YgcG9zdCBxdWV1ZXMgYmVmb3JlIHJlc2V0dGluZyBzdGF0ZVxuICB2YXIgYWN0aXZhdGVkUXVldWUgPSBhY3RpdmF0ZWRDaGlsZHJlbi5zbGljZSgpO1xuICB2YXIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcblxuICByZXNldFNjaGVkdWxlclN0YXRlKCk7XG5cbiAgLy8gY2FsbCBjb21wb25lbnQgdXBkYXRlZCBhbmQgYWN0aXZhdGVkIGhvb2tzXG4gIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XG4gIGNhbGxVcGRhdGVkSG9va3ModXBkYXRlZFF1ZXVlKTtcblxuICAvLyBkZXZ0b29sIGhvb2tcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChkZXZ0b29scyAmJiBjb25maWcuZGV2dG9vbHMpIHtcbiAgICBkZXZ0b29scy5lbWl0KCdmbHVzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxVcGRhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIHZhciBpID0gcXVldWUubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIHdhdGNoZXIgPSBxdWV1ZVtpXTtcbiAgICB2YXIgdm0gPSB3YXRjaGVyLnZtO1xuICAgIGlmICh2bS5fd2F0Y2hlciA9PT0gd2F0Y2hlciAmJiB2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGNhbGxIb29rKHZtLCAndXBkYXRlZCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQgKHZtKSB7XG4gIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuXG5mdW5jdGlvbiBjYWxsQWN0aXZhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQocXVldWVbaV0sIHRydWUgLyogdHJ1ZSAqLyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdXNoIGEgd2F0Y2hlciBpbnRvIHRoZSB3YXRjaGVyIHF1ZXVlLlxuICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gKiBwdXNoZWQgd2hlbiB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVXYXRjaGVyICh3YXRjaGVyKSB7XG4gIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gIGlmIChoYXNbaWRdID09IG51bGwpIHtcbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbHJlYWR5IGZsdXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAvLyBpZiBhbHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkgPiBpbmRleCAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgICAgcXVldWUuc3BsaWNlKGkgKyAxLCAwLCB3YXRjaGVyKTtcbiAgICB9XG4gICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgaWYgKCF3YWl0aW5nKSB7XG4gICAgICB3YWl0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xuICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5cblxudmFyIHVpZCQyID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlvbiBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zLFxuICBpc1JlbmRlcldhdGNoZXJcbikge1xuICB0aGlzLnZtID0gdm07XG4gIGlmIChpc1JlbmRlcldhdGNoZXIpIHtcbiAgICB2bS5fd2F0Y2hlciA9IHRoaXM7XG4gIH1cbiAgdm0uX3dhdGNoZXJzLnB1c2godGhpcyk7XG4gIC8vIG9wdGlvbnNcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlcDtcbiAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICB9XG4gIHRoaXMuY2IgPSBjYjtcbiAgdGhpcy5pZCA9ICsrdWlkJDI7IC8vIHVpZCBmb3IgYmF0Y2hpbmdcbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICB0aGlzLmRlcHMgPSBbXTtcbiAgdGhpcy5uZXdEZXBzID0gW107XG4gIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLmV4cHJlc3Npb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgPyBleHBPckZuLnRvU3RyaW5nKClcbiAgICA6ICcnO1xuICAvLyBwYXJzZSBleHByZXNzaW9uIGZvciBnZXR0ZXJcbiAgaWYgKHR5cGVvZiBleHBPckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZ2V0dGVyID0gcGFyc2VQYXRoKGV4cE9yRm4pO1xuICAgIGlmICghdGhpcy5nZXR0ZXIpIHtcbiAgICAgIHRoaXMuZ2V0dGVyID0gbm9vcDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiICsgZXhwT3JGbiArIFwiXFxcIiBcIiArXG4gICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5XG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHRoaXMuZ2V0KCk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgcHVzaFRhcmdldCh0aGlzKTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgdm0gPSB0aGlzLnZtO1xuICB0cnkge1xuICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gXCJ0b3VjaFwiIGV2ZXJ5IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXG4gICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICB0aGlzLmNsZWFudXBEZXBzKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59O1xuXG4vKipcbiAqIEFkZCBhIGRlcGVuZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gIHZhciBpZCA9IGRlcC5pZDtcbiAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICB0aGlzLm5ld0RlcHMucHVzaChkZXApO1xuICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4gdXAgZm9yIGRlcGVuZGVuY3kgY29sbGVjdGlvbi5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiBjbGVhbnVwRGVwcyAoKSB7XG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBkZXAgPSB0aGlzLmRlcHNbaV07XG4gICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoZGVwLmlkKSkge1xuICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbiAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICB0aGlzLmRlcElkcyA9IHRoaXMubmV3RGVwSWRzO1xuICB0aGlzLm5ld0RlcElkcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgdG1wID0gdGhpcy5kZXBzO1xuICB0aGlzLmRlcHMgPSB0aGlzLm5ld0RlcHM7XG4gIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRoaXMubGF6eSkge1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgIHRoaXMucnVuKCk7XG4gIH0gZWxzZSB7XG4gICAgcXVldWVXYXRjaGVyKHRoaXMpO1xuICB9XG59O1xuXG4vKipcbiAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgLy8gRGVlcCB3YXRjaGVycyBhbmQgd2F0Y2hlcnMgb24gT2JqZWN0L0FycmF5cyBzaG91bGQgZmlyZSBldmVuXG4gICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICBpc09iamVjdCh2YWx1ZSkgfHxcbiAgICAgIHRoaXMuZGVlcFxuICAgICkge1xuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHRoaXMudm0sIChcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAqIFRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgbGF6eSB3YXRjaGVycy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZSAoKSB7XG4gIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB0aGlzLmRlcHNbaV0uZGVwZW5kKCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlIHNlbGYgZnJvbSBhbGwgZGVwZW5kZW5jaWVzJyBzdWJzY3JpYmVyIGxpc3QuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gdGVhcmRvd24gKCkge1xuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHZtJ3Mgd2F0Y2hlciBsaXN0XG4gICAgLy8gdGhpcyBpcyBhIHNvbWV3aGF0IGV4cGVuc2l2ZSBvcGVyYXRpb24gc28gd2Ugc2tpcCBpdFxuICAgIC8vIGlmIHRoZSB2bSBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgaWYgKCF0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZW1vdmUodGhpcy52bS5fd2F0Y2hlcnMsIHRoaXMpO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBub29wLFxuICBzZXQ6IG5vb3Bcbn07XG5cbmZ1bmN0aW9uIHByb3h5ICh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4gICAgcmV0dXJuIHRoaXNbc291cmNlS2V5XVtrZXldXG4gIH07XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgdGhpc1tzb3VyY2VLZXldW2tleV0gPSB2YWw7XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gaW5pdFN0YXRlICh2bSkge1xuICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgaWYgKG9wdHMucHJvcHMpIHsgaW5pdFByb3BzKHZtLCBvcHRzLnByb3BzKTsgfVxuICBpZiAob3B0cy5tZXRob2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gIGlmIChvcHRzLmRhdGEpIHtcbiAgICBpbml0RGF0YSh2bSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2ZSh2bS5fZGF0YSA9IHt9LCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xuICB9XG4gIGlmIChvcHRzLmNvbXB1dGVkKSB7IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgaWYgKG9wdHMud2F0Y2ggJiYgb3B0cy53YXRjaCAhPT0gbmF0aXZlV2F0Y2gpIHtcbiAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyAodm0sIHByb3BzT3B0aW9ucykge1xuICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICB2YXIgcHJvcHMgPSB2bS5fcHJvcHMgPSB7fTtcbiAgLy8gY2FjaGUgcHJvcCBrZXlzIHNvIHRoYXQgZnV0dXJlIHByb3BzIHVwZGF0ZXMgY2FuIGl0ZXJhdGUgdXNpbmcgQXJyYXlcbiAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXG4gIHZhciBrZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzID0gW107XG4gIHZhciBpc1Jvb3QgPSAhdm0uJHBhcmVudDtcbiAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gIGlmICghaXNSb290KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgfVxuICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgIGtleXMucHVzaChrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChpc1Jlc2VydmVkQXR0cmlidXRlKGh5cGhlbmF0ZWRLZXkpIHx8XG4gICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiXFxcIlwiICsgaHlwaGVuYXRlZEtleSArIFwiXFxcIiBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgY29tcG9uZW50IHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWZpbmVSZWFjdGl2ZSQkMShwcm9wcywga2V5LCB2YWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWlzUm9vdCAmJiAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50KSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRoZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHBhcmVudCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJJbnN0ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3MgXCIgK1xuICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSBsb29wKCBrZXkgKTtcbiAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICBkYXRhID0gdm0uX2RhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICA6IGRhdGEgfHwge307XG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGRhdGEgPSB7fTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAnZGF0YSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBhbiBvYmplY3Q6XFxuJyArXG4gICAgICAnaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvY29tcG9uZW50cy5odG1sI2RhdGEtTXVzdC1CZS1hLUZ1bmN0aW9uJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyBhIHByb3AuIFwiICtcbiAgICAgICAgXCJVc2UgcHJvcCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwga2V5KTtcbiAgICB9XG4gIH1cbiAgLy8gb2JzZXJ2ZSBkYXRhXG4gIG9ic2VydmUoZGF0YSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YSAoZGF0YSwgdm0pIHtcbiAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGRhdGEgZ2V0dGVyc1xuICBwdXNoVGFyZ2V0KCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRhdGEuY2FsbCh2bSwgdm0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJkYXRhKClcIik7XG4gICAgcmV0dXJuIHt9XG4gIH0gZmluYWxseSB7XG4gICAgcG9wVGFyZ2V0KCk7XG4gIH1cbn1cblxudmFyIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnMgPSB7IGxhenk6IHRydWUgfTtcblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkICh2bSwgY29tcHV0ZWQpIHtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciB3YXRjaGVycyA9IHZtLl9jb21wdXRlZFdhdGNoZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gY29tcHV0ZWQgcHJvcGVydGllcyBhcmUganVzdCBnZXR0ZXJzIGR1cmluZyBTU1JcbiAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICB2YXIgdXNlckRlZiA9IGNvbXB1dGVkW2tleV07XG4gICAgdmFyIGdldHRlciA9IHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGdldHRlciA9PSBudWxsKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJHZXR0ZXIgaXMgbWlzc2luZyBmb3IgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1NTUikge1xuICAgICAgLy8gY3JlYXRlIGludGVybmFsIHdhdGNoZXIgZm9yIHRoZSBjb21wdXRlZCBwcm9wZXJ0eS5cbiAgICAgIHdhdGNoZXJzW2tleV0gPSBuZXcgV2F0Y2hlcihcbiAgICAgICAgdm0sXG4gICAgICAgIGdldHRlciB8fCBub29wLFxuICAgICAgICBub29wLFxuICAgICAgICBjb21wdXRlZFdhdGNoZXJPcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcbiAgICAvLyBjb21wb25lbnQgcHJvdG90eXBlLiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGNvbXB1dGVkIHByb3BlcnRpZXMgZGVmaW5lZFxuICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICBkZWZpbmVDb21wdXRlZCh2bSwga2V5LCB1c2VyRGVmKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChrZXkgaW4gdm0uJGRhdGEpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBkYXRhLlwiKSwgdm0pO1xuICAgICAgfSBlbHNlIGlmICh2bS4kb3B0aW9ucy5wcm9wcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIHByb3AuXCIpLCB2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUNvbXB1dGVkIChcbiAgdGFyZ2V0LFxuICBrZXksXG4gIHVzZXJEZWZcbikge1xuICB2YXIgc2hvdWxkQ2FjaGUgPSAhaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcbiAgaWYgKHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHNob3VsZENhY2hlXG4gICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gbm9vcDtcbiAgfSBlbHNlIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gdXNlckRlZi5nZXRcbiAgICAgID8gc2hvdWxkQ2FjaGUgJiYgdXNlckRlZi5jYWNoZSAhPT0gZmFsc2VcbiAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmLmdldClcbiAgICAgIDogbm9vcDtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gdXNlckRlZi5zZXQgfHwgbm9vcDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJDb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIgKGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgIHZhciB3YXRjaGVyID0gdGhpcy5fY29tcHV0ZWRXYXRjaGVycyAmJiB0aGlzLl9jb21wdXRlZFdhdGNoZXJzW2tleV07XG4gICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVHZXR0ZXJJbnZva2VyKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhpcywgdGhpcylcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TWV0aG9kcyAodm0sIG1ldGhvZHMpIHtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBtZXRob2RzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIiArICh0eXBlb2YgbWV0aG9kc1trZXldKSArIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiICtcbiAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiICtcbiAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm1ba2V5XSA9IHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicgPyBub29wIDogYmluZChtZXRob2RzW2tleV0sIHZtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGhhbmRsZXIsXG4gIG9wdGlvbnNcbikge1xuICBpZiAoaXNQbGFpbk9iamVjdChoYW5kbGVyKSkge1xuICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgfVxuICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIHN0YXRlTWl4aW4gKFZ1ZSkge1xuICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gIC8vIHRoZSBvYmplY3QgaGVyZS5cbiAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gIHZhciBwcm9wc0RlZiA9IHt9O1xuICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcm9wcyB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGRhdGFEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIHJlcGxhY2luZyBpbnN0YW5jZSByb290ICRkYXRhLiAnICtcbiAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXCIkcHJvcHMgaXMgcmVhZG9ubHkuXCIsIHRoaXMpO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRwcm9wcycsIHByb3BzRGVmKTtcblxuICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcblxuICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChcbiAgICBleHBPckZuLFxuICAgIGNiLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYi5jYWxsKHZtLCB3YXRjaGVyLnZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCB2bSwgKFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbiAoKSB7XG4gICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCQzID0gMDtcblxuZnVuY3Rpb24gaW5pdE1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhIHVpZFxuICAgIHZtLl91aWQgPSB1aWQkMysrO1xuXG4gICAgdmFyIHN0YXJ0VGFnLCBlbmRUYWc7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArICh2bS5fdWlkKTtcbiAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91aWQpO1xuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuXG4gICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLFxuICAgICAgICBvcHRpb25zIHx8IHt9LFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW5pdFByb3h5KHZtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgfVxuICAgIC8vIGV4cG9zZSByZWFsIHNlbGZcbiAgICB2bS5fc2VsZiA9IHZtO1xuICAgIGluaXRMaWZlY3ljbGUodm0pO1xuICAgIGluaXRFdmVudHModm0pO1xuICAgIGluaXRSZW5kZXIodm0pO1xuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlQ3JlYXRlJyk7XG4gICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcbiAgICBpbml0U3RhdGUodm0pO1xuICAgIGluaXRQcm92aWRlKHZtKTsgLy8gcmVzb2x2ZSBwcm92aWRlIGFmdGVyIGRhdGEvcHJvcHNcbiAgICBjYWxsSG9vayh2bSwgJ2NyZWF0ZWQnKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICB2bS5fbmFtZSA9IGZvcm1hdENvbXBvbmVudE5hbWUodm0sIGZhbHNlKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgKHZtLl9uYW1lKSArIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgIH1cblxuICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCAodm0sIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucyk7XG4gIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGR5bmFtaWMgZW51bWVyYXRpb24uXG4gIHZhciBwYXJlbnRWbm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlO1xuICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBvcHRzLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuXG4gIHZhciB2bm9kZUNvbXBvbmVudE9wdGlvbnMgPSBwYXJlbnRWbm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBvcHRzLnByb3BzRGF0YSA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGE7XG4gIG9wdHMuX3BhcmVudExpc3RlbmVycyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5saXN0ZW5lcnM7XG4gIG9wdHMuX3JlbmRlckNoaWxkcmVuID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmNoaWxkcmVuO1xuICBvcHRzLl9jb21wb25lbnRUYWcgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMudGFnO1xuXG4gIGlmIChvcHRpb25zLnJlbmRlcikge1xuICAgIG9wdHMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XG4gICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zIChDdG9yKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICBpZiAoQ3Rvci5zdXBlcikge1xuICAgIHZhciBzdXBlck9wdGlvbnMgPSByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3Iuc3VwZXIpO1xuICAgIHZhciBjYWNoZWRTdXBlck9wdGlvbnMgPSBDdG9yLnN1cGVyT3B0aW9ucztcbiAgICBpZiAoc3VwZXJPcHRpb25zICE9PSBjYWNoZWRTdXBlck9wdGlvbnMpIHtcbiAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxuICAgICAgLy8gbmVlZCB0byByZXNvbHZlIG5ldyBvcHRpb25zLlxuICAgICAgQ3Rvci5zdXBlck9wdGlvbnMgPSBzdXBlck9wdGlvbnM7XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXG4gICAgICB2YXIgbW9kaWZpZWRPcHRpb25zID0gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyhDdG9yKTtcbiAgICAgIC8vIHVwZGF0ZSBiYXNlIGV4dGVuZCBvcHRpb25zXG4gICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XG4gICAgICAgIGV4dGVuZChDdG9yLmV4dGVuZE9wdGlvbnMsIG1vZGlmaWVkT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHN1cGVyT3B0aW9ucywgQ3Rvci5leHRlbmRPcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5jb21wb25lbnRzW29wdGlvbnMubmFtZV0gPSBDdG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTW9kaWZpZWRPcHRpb25zIChDdG9yKSB7XG4gIHZhciBtb2RpZmllZDtcbiAgdmFyIGxhdGVzdCA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHNlYWxlZCA9IEN0b3Iuc2VhbGVkT3B0aW9ucztcbiAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xuICAgIGlmIChsYXRlc3Rba2V5XSAhPT0gc2VhbGVkW2tleV0pIHtcbiAgICAgIGlmICghbW9kaWZpZWQpIHsgbW9kaWZpZWQgPSB7fTsgfVxuICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbW9kaWZpZWRcbn1cblxuZnVuY3Rpb24gVnVlIChvcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgISh0aGlzIGluc3RhbmNlb2YgVnVlKVxuICApIHtcbiAgICB3YXJuKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XG4gIH1cbiAgdGhpcy5faW5pdChvcHRpb25zKTtcbn1cblxuaW5pdE1peGluKFZ1ZSk7XG5zdGF0ZU1peGluKFZ1ZSk7XG5ldmVudHNNaXhpbihWdWUpO1xubGlmZWN5Y2xlTWl4aW4oVnVlKTtcbnJlbmRlck1peGluKFZ1ZSk7XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0VXNlIChWdWUpIHtcbiAgVnVlLnVzZSA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICB2YXIgaW5zdGFsbGVkUGx1Z2lucyA9ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zIHx8ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zID0gW10pKTtcbiAgICBpZiAoaW5zdGFsbGVkUGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPiAtMSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaW5zdGFsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmluc3RhbGwuYXBwbHkocGx1Z2luLCBhcmdzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG4gICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgcmV0dXJuIHRoaXNcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRNaXhpbiQxIChWdWUpIHtcbiAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgdGhpcy5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgbWl4aW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0RXh0ZW5kIChWdWUpIHtcbiAgLyoqXG4gICAqIEVhY2ggaW5zdGFuY2UgY29uc3RydWN0b3IsIGluY2x1ZGluZyBWdWUsIGhhcyBhIHVuaXF1ZVxuICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAqIGNvbnN0cnVjdG9yc1wiIGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlIGFuZCBjYWNoZSB0aGVtLlxuICAgKi9cbiAgVnVlLmNpZCA9IDA7XG4gIHZhciBjaWQgPSAxO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgKi9cbiAgVnVlLmV4dGVuZCA9IGZ1bmN0aW9uIChleHRlbmRPcHRpb25zKSB7XG4gICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgdmFyIFN1cGVyID0gdGhpcztcbiAgICB2YXIgU3VwZXJJZCA9IFN1cGVyLmNpZDtcbiAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgIGlmIChjYWNoZWRDdG9yc1tTdXBlcklkXSkge1xuICAgICAgcmV0dXJuIGNhY2hlZEN0b3JzW1N1cGVySWRdXG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBleHRlbmRPcHRpb25zLm5hbWUgfHwgU3VwZXIub3B0aW9ucy5uYW1lO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUpIHtcbiAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgU3ViID0gZnVuY3Rpb24gVnVlQ29tcG9uZW50IChvcHRpb25zKSB7XG4gICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xuICAgIH07XG4gICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViO1xuICAgIFN1Yi5jaWQgPSBjaWQrKztcbiAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgIFN1cGVyLm9wdGlvbnMsXG4gICAgICBleHRlbmRPcHRpb25zXG4gICAgKTtcbiAgICBTdWJbJ3N1cGVyJ10gPSBTdXBlcjtcblxuICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgLy8gdGhlIFZ1ZSBpbnN0YW5jZXMgYXQgZXh0ZW5zaW9uIHRpbWUsIG9uIHRoZSBleHRlbmRlZCBwcm90b3R5cGUuIFRoaXNcbiAgICAvLyBhdm9pZHMgT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxzIGZvciBlYWNoIGluc3RhbmNlIGNyZWF0ZWQuXG4gICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICBpbml0UHJvcHMkMShTdWIpO1xuICAgIH1cbiAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgIGluaXRDb21wdXRlZCQxKFN1Yik7XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgU3ViLmV4dGVuZCA9IFN1cGVyLmV4dGVuZDtcbiAgICBTdWIubWl4aW4gPSBTdXBlci5taXhpbjtcbiAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuXG4gICAgLy8gY3JlYXRlIGFzc2V0IHJlZ2lzdGVycywgc28gZXh0ZW5kZWQgY2xhc3Nlc1xuICAgIC8vIGNhbiBoYXZlIHRoZWlyIHByaXZhdGUgYXNzZXRzIHRvby5cbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBTdWJbdHlwZV0gPSBTdXBlclt0eXBlXTtcbiAgICB9KTtcbiAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIFN1Yi5vcHRpb25zLmNvbXBvbmVudHNbbmFtZV0gPSBTdWI7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgc3VwZXIgb3B0aW9ucyBhdCBleHRlbnNpb24gdGltZS5cbiAgICAvLyBsYXRlciBhdCBpbnN0YW50aWF0aW9uIHdlIGNhbiBjaGVjayBpZiBTdXBlcidzIG9wdGlvbnMgaGF2ZVxuICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICBTdWIuc3VwZXJPcHRpb25zID0gU3VwZXIub3B0aW9ucztcbiAgICBTdWIuZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnM7XG4gICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcblxuICAgIC8vIGNhY2hlIGNvbnN0cnVjdG9yXG4gICAgY2FjaGVkQ3RvcnNbU3VwZXJJZF0gPSBTdWI7XG4gICAgcmV0dXJuIFN1YlxuICB9O1xufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMkMSAoQ29tcCkge1xuICB2YXIgcHJvcHMgPSBDb21wLm9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRDb21wdXRlZCQxIChDb21wKSB7XG4gIHZhciBjb21wdXRlZCA9IENvbXAub3B0aW9ucy5jb21wdXRlZDtcbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRBc3NldFJlZ2lzdGVycyAoVnVlKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAqL1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlW3R5cGVdID0gZnVuY3Rpb24gKFxuICAgICAgaWQsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKSB7XG4gICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICByZXR1cm4gb3B0cyAmJiAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZylcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGUgKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gIHZhciBrZXlzID0ga2VlcEFsaXZlSW5zdGFuY2Uua2V5cztcbiAgdmFyIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgdmFyIGNhY2hlZE5vZGUgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWROb2RlKSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeSAoXG4gIGNhY2hlLFxuICBrZXksXG4gIGtleXMsXG4gIGN1cnJlbnRcbikge1xuICB2YXIgY2FjaGVkJCQxID0gY2FjaGVba2V5XTtcbiAgaWYgKGNhY2hlZCQkMSAmJiAoIWN1cnJlbnQgfHwgY2FjaGVkJCQxLnRhZyAhPT0gY3VycmVudC50YWcpKSB7XG4gICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gIH1cbiAgY2FjaGVba2V5XSA9IG51bGw7XG4gIHJlbW92ZShrZXlzLCBrZXkpO1xufVxuXG52YXIgcGF0dGVyblR5cGVzID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XG5cbnZhciBLZWVwQWxpdmUgPSB7XG4gIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQgKCkge1xuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMua2V5cyA9IFtdO1xuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLiR3YXRjaCgnaW5jbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgICB0aGlzLiR3YXRjaCgnZXhjbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gIW1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKCkge1xuICAgIHZhciBzbG90ID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgIHZhciBjb21wb25lbnRPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgLy8gY2hlY2sgcGF0dGVyblxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICB2YXIgaW5jbHVkZSA9IHJlZi5pbmNsdWRlO1xuICAgICAgdmFyIGV4Y2x1ZGUgPSByZWYuZXhjbHVkZTtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm90IGluY2x1ZGVkXG4gICAgICAgIChpbmNsdWRlICYmICghbmFtZSB8fCAhbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSkpIHx8XG4gICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgIChleGNsdWRlICYmIG5hbWUgJiYgbWF0Y2hlcyhleGNsdWRlLCBuYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiQxID0gdGhpcztcbiAgICAgIHZhciBjYWNoZSA9IHJlZiQxLmNhY2hlO1xuICAgICAgdmFyIGtleXMgPSByZWYkMS5rZXlzO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgIC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgIC8vIHNvIGNpZCBhbG9uZSBpcyBub3QgZW5vdWdoICgjMzI2OSlcbiAgICAgICAgPyBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICsgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gKFwiOjpcIiArIChjb21wb25lbnRPcHRpb25zLnRhZykpIDogJycpXG4gICAgICAgIDogdm5vZGUua2V5O1xuICAgICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgIHJlbW92ZShrZXlzLCBrZXkpO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlW2tleV0gPSB2bm9kZTtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICBpZiAodGhpcy5tYXggJiYga2V5cy5sZW5ndGggPiBwYXJzZUludCh0aGlzLm1heCkpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZSB8fCAoc2xvdCAmJiBzbG90WzBdKVxuICB9XG59O1xuXG52YXIgYnVpbHRJbkNvbXBvbmVudHMgPSB7XG4gIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSSAoVnVlKSB7XG4gIC8vIGNvbmZpZ1xuICB2YXIgY29uZmlnRGVmID0ge307XG4gIGNvbmZpZ0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWc7IH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uZmlnRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdEbyBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxkcyBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcblxuICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgLy8gTk9URTogdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgLSBhdm9pZCByZWx5aW5nIG9uXG4gIC8vIHRoZW0gdW5sZXNzIHlvdSBhcmUgYXdhcmUgb2YgdGhlIHJpc2suXG4gIFZ1ZS51dGlsID0ge1xuICAgIHdhcm46IHdhcm4sXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgZGVmaW5lUmVhY3RpdmU6IGRlZmluZVJlYWN0aXZlJCQxXG4gIH07XG5cbiAgVnVlLnNldCA9IHNldDtcbiAgVnVlLmRlbGV0ZSA9IGRlbDtcbiAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XG5cbiAgLy8gMi42IGV4cGxpY2l0IG9ic2VydmFibGUgQVBJXG4gIFZ1ZS5vYnNlcnZhYmxlID0gZnVuY3Rpb24gKG9iaikge1xuICAgIG9ic2VydmUob2JqKTtcbiAgICByZXR1cm4gb2JqXG4gIH07XG5cbiAgVnVlLm9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlLm9wdGlvbnNbdHlwZSArICdzJ10gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gIC8vIGNvbXBvbmVudHMgd2l0aCBpbiBXZWV4J3MgbXVsdGktaW5zdGFuY2Ugc2NlbmFyaW9zLlxuICBWdWUub3B0aW9ucy5fYmFzZSA9IFZ1ZTtcblxuICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuXG4gIGluaXRVc2UoVnVlKTtcbiAgaW5pdE1peGluJDEoVnVlKTtcbiAgaW5pdEV4dGVuZChWdWUpO1xuICBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKTtcbn1cblxuaW5pdEdsb2JhbEFQSShWdWUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgZ2V0OiBpc1NlcnZlclJlbmRlcmluZ1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0XG4gIH1cbn0pO1xuXG4vLyBleHBvc2UgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgZm9yIHNzciBydW50aW1lIGhlbHBlciBpbnN0YWxsYXRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCcsIHtcbiAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG59KTtcblxuVnVlLnZlcnNpb24gPSAnMi42LjEwJztcblxuLyogICovXG5cbi8vIHRoZXNlIGFyZSByZXNlcnZlZCBmb3Igd2ViIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgY29tcGlsZWQgYXdheVxuLy8gZHVyaW5nIHRlbXBsYXRlIGNvbXBpbGF0aW9uXG52YXIgaXNSZXNlcnZlZEF0dHIgPSBtYWtlTWFwKCdzdHlsZSxjbGFzcycpO1xuXG4vLyBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHVzaW5nIHByb3BzIGZvciBiaW5kaW5nXG52YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzJyk7XG52YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRyKSB7XG4gIHJldHVybiAoXG4gICAgKGF0dHIgPT09ICd2YWx1ZScgJiYgYWNjZXB0VmFsdWUodGFnKSkgJiYgdHlwZSAhPT0gJ2J1dHRvbicgfHxcbiAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAnaW5wdXQnKSB8fFxuICAgIChhdHRyID09PSAnbXV0ZWQnICYmIHRhZyA9PT0gJ3ZpZGVvJylcbiAgKVxufTtcblxudmFyIGlzRW51bWVyYXRlZEF0dHIgPSBtYWtlTWFwKCdjb250ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2snKTtcblxudmFyIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSA9IG1ha2VNYXAoJ2V2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHknKTtcblxudmFyIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUgPT09ICdmYWxzZSdcbiAgICA/ICdmYWxzZSdcbiAgICAvLyBhbGxvdyBhcmJpdHJhcnkgc3RyaW5nIHZhbHVlIGZvciBjb250ZW50ZWRpdGFibGVcbiAgICA6IGtleSA9PT0gJ2NvbnRlbnRlZGl0YWJsZScgJiYgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlKHZhbHVlKVxuICAgICAgPyB2YWx1ZVxuICAgICAgOiAndHJ1ZSdcbn07XG5cbnZhciBpc0Jvb2xlYW5BdHRyID0gbWFrZU1hcChcbiAgJ2FsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsJyArXG4gICdkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsJyArXG4gICdlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLCcgK1xuICAnbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSwnICtcbiAgJ3JlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsJyArXG4gICd0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlJ1xuKTtcblxudmFyIHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG5cbnZhciBpc1hsaW5rID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJ1xufTtcblxudmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBpc1hsaW5rKG5hbWUpID8gbmFtZS5zbGljZSg2LCBuYW1lLmxlbmd0aCkgOiAnJ1xufTtcblxudmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09IGZhbHNlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2VuQ2xhc3NGb3JWbm9kZSAodm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gIHdoaWxlIChpc0RlZihjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoY2hpbGROb2RlLmRhdGEsIGRhdGEpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoaXNEZWYocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGRhdGEsIHBhcmVudE5vZGUuZGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZW5kZXJDbGFzcyhkYXRhLnN0YXRpY0NsYXNzLCBkYXRhLmNsYXNzKVxufVxuXG5mdW5jdGlvbiBtZXJnZUNsYXNzRGF0YSAoY2hpbGQsIHBhcmVudCkge1xuICByZXR1cm4ge1xuICAgIHN0YXRpY0NsYXNzOiBjb25jYXQoY2hpbGQuc3RhdGljQ2xhc3MsIHBhcmVudC5zdGF0aWNDbGFzcyksXG4gICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKVxuICAgICAgPyBbY2hpbGQuY2xhc3MsIHBhcmVudC5jbGFzc11cbiAgICAgIDogcGFyZW50LmNsYXNzXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ2xhc3MgKFxuICBzdGF0aWNDbGFzcyxcbiAgZHluYW1pY0NsYXNzXG4pIHtcbiAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgcmV0dXJuIGNvbmNhdChzdGF0aWNDbGFzcywgc3RyaW5naWZ5Q2xhc3MoZHluYW1pY0NsYXNzKSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gY29uY2F0IChhLCBiKSB7XG4gIHJldHVybiBhID8gYiA/IChhICsgJyAnICsgYikgOiBhIDogKGIgfHwgJycpXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXkodmFsdWUpXG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlPYmplY3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXkgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIHN0cmluZ2lmaWVkO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChpc0RlZihzdHJpbmdpZmllZCA9IHN0cmluZ2lmeUNsYXNzKHZhbHVlW2ldKSkgJiYgc3RyaW5naWZpZWQgIT09ICcnKSB7XG4gICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgIHJlcyArPSBzdHJpbmdpZmllZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIG5hbWVzcGFjZU1hcCA9IHtcbiAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICBtYXRoOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCdcbn07XG5cbnZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKFxuICAnaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsJyArXG4gICdhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sJyArXG4gICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgJ2EsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSwnICtcbiAgJ3Msc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLCcgK1xuICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICdjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0ciwnICtcbiAgJ2J1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sJyArXG4gICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAnZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LCcgK1xuICAnY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCdcbik7XG5cbi8vIHRoaXMgbWFwIGlzIGludGVudGlvbmFsbHkgc2VsZWN0aXZlLCBvbmx5IGNvdmVyaW5nIFNWRyBlbGVtZW50cyB0aGF0IG1heVxuLy8gY29udGFpbiBjaGlsZCBlbGVtZW50cy5cbnZhciBpc1NWRyA9IG1ha2VNYXAoXG4gICdzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsJyArXG4gICdmb3JlaWduT2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybiwnICtcbiAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLFxuICB0cnVlXG4pO1xuXG52YXIgaXNSZXNlcnZlZFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgcmV0dXJuIGlzSFRNTFRhZyh0YWcpIHx8IGlzU1ZHKHRhZylcbn07XG5cbmZ1bmN0aW9uIGdldFRhZ05hbWVzcGFjZSAodGFnKSB7XG4gIGlmIChpc1NWRyh0YWcpKSB7XG4gICAgcmV0dXJuICdzdmcnXG4gIH1cbiAgLy8gYmFzaWMgc3VwcG9ydCBmb3IgTWF0aE1MXG4gIC8vIG5vdGUgaXQgZG9lc24ndCBzdXBwb3J0IG90aGVyIE1hdGhNTCBlbGVtZW50cyBiZWluZyBjb21wb25lbnQgcm9vdHNcbiAgaWYgKHRhZyA9PT0gJ21hdGgnKSB7XG4gICAgcmV0dXJuICdtYXRoJ1xuICB9XG59XG5cbnZhciB1bmtub3duRWxlbWVudENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQgKHRhZykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChpc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB0YWcgPSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gIT0gbnVsbCkge1xuICAgIHJldHVybiB1bmtub3duRWxlbWVudENhY2hlW3RhZ11cbiAgfVxuICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gIGlmICh0YWcuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODIxMDM2NC8xMDcwMjQ0XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAoXG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxVbmtub3duRWxlbWVudCB8fFxuICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MRWxlbWVudFxuICAgICkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAvSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGVsLnRvU3RyaW5nKCkpKVxuICB9XG59XG5cbnZhciBpc1RleHRJbnB1dFR5cGUgPSBtYWtlTWFwKCd0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCcpO1xuXG4vKiAgKi9cblxuLyoqXG4gKiBRdWVyeSBhbiBlbGVtZW50IHNlbGVjdG9yIGlmIGl0J3Mgbm90IGFuIGVsZW1lbnQgYWxyZWFkeS5cbiAqL1xuZnVuY3Rpb24gcXVlcnkgKGVsKSB7XG4gIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHNlbGVjdGVkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCk7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEgKHRhZ05hbWUsIHZub2RlKSB7XG4gIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZWxtXG4gIH1cbiAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgaWYgKHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS5hdHRycyAmJiB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbG0uc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xuICB9XG4gIHJldHVybiBlbG1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSwgdGFnTmFtZSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS5wYXJlbnROb2RlXG59XG5cbmZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gIHJldHVybiBub2RlLm5leHRTaWJsaW5nXG59XG5cbmZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZVxufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwgdGV4dCkge1xuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cblxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZSAobm9kZSwgc2NvcGVJZCkge1xuICBub2RlLnNldEF0dHJpYnV0ZShzY29wZUlkLCAnJyk7XG59XG5cbnZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50JDEsXG4gIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gIGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcbiAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICB0YWdOYW1lOiB0YWdOYW1lLFxuICBzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4gICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyUmVmICh2bm9kZSwgaXNSZW1vdmFsKSB7XG4gIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgaWYgKCFpc0RlZihrZXkpKSB7IHJldHVybiB9XG5cbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgdmFyIHJlZiA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgdmFyIHJlZnMgPSB2bS4kcmVmcztcbiAgaWYgKGlzUmVtb3ZhbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgIHJlbW92ZShyZWZzW2tleV0sIHJlZik7XG4gICAgfSBlbHNlIGlmIChyZWZzW2tleV0gPT09IHJlZikge1xuICAgICAgcmVmc1trZXldID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodm5vZGUuZGF0YS5yZWZJbkZvcikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgICAgcmVmc1trZXldID0gW3JlZl07XG4gICAgICB9IGVsc2UgaWYgKHJlZnNba2V5XS5pbmRleE9mKHJlZikgPCAwKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICByZWZzW2tleV0ucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWZzW2tleV0gPSByZWY7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XG4gKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICpcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICovXG5cbnZhciBlbXB0eU5vZGUgPSBuZXcgVk5vZGUoJycsIHt9LCBbXSk7XG5cbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuXG5mdW5jdGlvbiBzYW1lVm5vZGUgKGEsIGIpIHtcbiAgcmV0dXJuIChcbiAgICBhLmtleSA9PT0gYi5rZXkgJiYgKFxuICAgICAgKFxuICAgICAgICBhLnRhZyA9PT0gYi50YWcgJiZcbiAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgIGlzRGVmKGEuZGF0YSkgPT09IGlzRGVmKGIuZGF0YSkgJiZcbiAgICAgICAgc2FtZUlucHV0VHlwZShhLCBiKVxuICAgICAgKSB8fCAoXG4gICAgICAgIGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiZcbiAgICAgICAgYS5hc3luY0ZhY3RvcnkgPT09IGIuYXN5bmNGYWN0b3J5ICYmXG4gICAgICAgIGlzVW5kZWYoYi5hc3luY0ZhY3RvcnkuZXJyb3IpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHNhbWVJbnB1dFR5cGUgKGEsIGIpIHtcbiAgaWYgKGEudGFnICE9PSAnaW5wdXQnKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGk7XG4gIHZhciB0eXBlQSA9IGlzRGVmKGkgPSBhLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHZhciB0eXBlQiA9IGlzRGVmKGkgPSBiLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHJldHVybiB0eXBlQSA9PT0gdHlwZUIgfHwgaXNUZXh0SW5wdXRUeXBlKHR5cGVBKSAmJiBpc1RleHRJbnB1dFR5cGUodHlwZUIpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4IChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICB2YXIgaSwga2V5O1xuICB2YXIgbWFwID0ge307XG4gIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAga2V5ID0gY2hpbGRyZW5baV0ua2V5O1xuICAgIGlmIChpc0RlZihrZXkpKSB7IG1hcFtrZXldID0gaTsgfVxuICB9XG4gIHJldHVybiBtYXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbiAoYmFja2VuZCkge1xuICB2YXIgaSwgajtcbiAgdmFyIGNicyA9IHt9O1xuXG4gIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzO1xuICB2YXIgbm9kZU9wcyA9IGJhY2tlbmQubm9kZU9wcztcblxuICBmb3IgKGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyArK2kpIHtcbiAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChpc0RlZihtb2R1bGVzW2pdW2hvb2tzW2ldXSkpIHtcbiAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbXB0eU5vZGVBdCAoZWxtKSB7XG4gICAgcmV0dXJuIG5ldyBWTm9kZShub2RlT3BzLnRhZ05hbWUoZWxtKS50b0xvd2VyQ2FzZSgpLCB7fSwgW10sIHVuZGVmaW5lZCwgZWxtKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUm1DYiAoY2hpbGRFbG0sIGxpc3RlbmVycykge1xuICAgIGZ1bmN0aW9uIHJlbW92ZSQkMSAoKSB7XG4gICAgICBpZiAoLS1yZW1vdmUkJDEubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgIHJlbW92ZU5vZGUoY2hpbGRFbG0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZW1vdmUkJDEubGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHJldHVybiByZW1vdmUkJDFcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU5vZGUgKGVsKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGVPcHMucGFyZW50Tm9kZShlbCk7XG4gICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgIG5vZGVPcHMucmVtb3ZlQ2hpbGQocGFyZW50LCBlbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCQkMSAodm5vZGUsIGluVlByZSkge1xuICAgIHJldHVybiAoXG4gICAgICAhaW5WUHJlICYmXG4gICAgICAhdm5vZGUubnMgJiZcbiAgICAgICEoXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMuc29tZShmdW5jdGlvbiAoaWdub3JlKSB7XG4gICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgID8gaWdub3JlLnRlc3Qodm5vZGUudGFnKVxuICAgICAgICAgICAgOiBpZ25vcmUgPT09IHZub2RlLnRhZ1xuICAgICAgICB9KVxuICAgICAgKSAmJlxuICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodm5vZGUudGFnKVxuICAgIClcbiAgfVxuXG4gIHZhciBjcmVhdGluZ0VsbUluVlByZSA9IDA7XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxtIChcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgcGFyZW50RWxtLFxuICAgIHJlZkVsbSxcbiAgICBuZXN0ZWQsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleFxuICApIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gVGhpcyB2bm9kZSB3YXMgdXNlZCBpbiBhIHByZXZpb3VzIHJlbmRlciFcbiAgICAgIC8vIG5vdyBpdCdzIHVzZWQgYXMgYSBuZXcgbm9kZSwgb3ZlcndyaXRpbmcgaXRzIGVsbSB3b3VsZCBjYXVzZVxuICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxuICAgICAgLy8gcmVmZXJlbmNlIG5vZGUuIEluc3RlYWQsIHdlIGNsb25lIHRoZSBub2RlIG9uLWRlbWFuZCBiZWZvcmUgY3JlYXRpbmdcbiAgICAgIC8vIGFzc29jaWF0ZWQgRE9NIGVsZW1lbnQgZm9yIGl0LlxuICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIH1cblxuICAgIHZub2RlLmlzUm9vdEluc2VydCA9ICFuZXN0ZWQ7IC8vIGZvciB0cmFuc2l0aW9uIGVudGVyIGNoZWNrXG4gICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW5rbm93bkVsZW1lbnQkJDEodm5vZGUsIGNyZWF0aW5nRWxtSW5WUHJlKSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnVW5rbm93biBjdXN0b20gZWxlbWVudDogPCcgKyB0YWcgKyAnPiAtIGRpZCB5b3UgJyArXG4gICAgICAgICAgICAncmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBjb3JyZWN0bHk/IEZvciByZWN1cnNpdmUgY29tcG9uZW50cywgJyArXG4gICAgICAgICAgICAnbWFrZSBzdXJlIHRvIHByb3ZpZGUgdGhlIFwibmFtZVwiIG9wdGlvbi4nLFxuICAgICAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdm5vZGUuZWxtID0gdm5vZGUubnNcbiAgICAgICAgPyBub2RlT3BzLmNyZWF0ZUVsZW1lbnROUyh2bm9kZS5ucywgdGFnKVxuICAgICAgICA6IG5vZGVPcHMuY3JlYXRlRWxlbWVudCh0YWcsIHZub2RlKTtcbiAgICAgIHNldFNjb3BlKHZub2RlKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICB7XG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICB2YXIgaXNSZWFjdGl2YXRlZCA9IGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpLmtlZXBBbGl2ZTtcbiAgICAgIGlmIChpc0RlZihpID0gaS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkge1xuICAgICAgICBpKHZub2RlLCBmYWxzZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgfVxuICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21wb25lbnRcbiAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50IGFsc28gaGFzIHNldCB0aGUgcGxhY2Vob2xkZXIgdm5vZGUncyBlbG0uXG4gICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxuICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtcbiAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRDb21wb25lbnQgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSkge1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgIGlmIChpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cbiAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZva2UgdGhlIGluc2VydCBob29rXG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaTtcbiAgICAvLyBoYWNrIGZvciAjNDMzOTogYSByZWFjdGl2YXRlZCBjb21wb25lbnQgd2l0aCBpbm5lciB0cmFuc2l0aW9uXG4gICAgLy8gZG9lcyBub3QgdHJpZ2dlciBiZWNhdXNlIHRoZSBpbm5lciBub2RlJ3MgY3JlYXRlZCBob29rcyBhcmUgbm90IGNhbGxlZFxuICAgIC8vIGFnYWluLiBJdCdzIG5vdCBpZGVhbCB0byBpbnZvbHZlIG1vZHVsZS1zcGVjaWZpYyBsb2dpYyBpbiBoZXJlIGJ1dFxuICAgIC8vIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gaXQuXG4gICAgdmFyIGlubmVyTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoaXNEZWYoaSA9IGlubmVyTm9kZS5kYXRhKSAmJiBpc0RlZihpID0gaS50cmFuc2l0aW9uKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmFjdGl2YXRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2JzLmFjdGl2YXRlW2ldKGVtcHR5Tm9kZSwgaW5uZXJOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaChpbm5lck5vZGUpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB1bmxpa2UgYSBuZXdseSBjcmVhdGVkIGNvbXBvbmVudCxcbiAgICAvLyBhIHJlYWN0aXZhdGVkIGtlZXAtYWxpdmUgY29tcG9uZW50IGRvZXNuJ3QgaW5zZXJ0IGl0c2VsZlxuICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydCAocGFyZW50LCBlbG0sIHJlZiQkMSkge1xuICAgIGlmIChpc0RlZihwYXJlbnQpKSB7XG4gICAgICBpZiAoaXNEZWYocmVmJCQxKSkge1xuICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZiQkMSkgPT09IHBhcmVudCkge1xuICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxtLCByZWYkJDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHBhcmVudCwgZWxtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbiAodm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbik7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNyZWF0ZUVsbShjaGlsZHJlbltpXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUHJpbWl0aXZlKHZub2RlLnRleHQpKSB7XG4gICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHZub2RlLmVsbSwgbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcodm5vZGUudGV4dCkpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1BhdGNoYWJsZSAodm5vZGUpIHtcbiAgICB3aGlsZSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIH1cbiAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlQ3JlYXRlSG9va3MgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgaSA9IHZub2RlLmRhdGEuaG9vazsgLy8gUmV1c2UgdmFyaWFibGVcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIGlmIChpc0RlZihpLmNyZWF0ZSkpIHsgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpLmluc2VydCkpIHsgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHNjb3BlIGlkIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIENTUy5cbiAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHNwZWNpYWwgY2FzZSB0byBhdm9pZCB0aGUgb3ZlcmhlYWRcbiAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRjaGluZyBwcm9jZXNzLlxuICBmdW5jdGlvbiBzZXRTY29wZSAodm5vZGUpIHtcbiAgICB2YXIgaTtcbiAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmZuU2NvcGVJZCkpIHtcbiAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYW5jZXN0b3IgPSB2bm9kZTtcbiAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICBpZiAoaXNEZWYoaSA9IGFuY2VzdG9yLmNvbnRleHQpICYmIGlzRGVmKGkgPSBpLiRvcHRpb25zLl9zY29wZUlkKSkge1xuICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICB9XG4gICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmb3Igc2xvdCBjb250ZW50IHRoZXkgc2hvdWxkIGFsc28gZ2V0IHRoZSBzY29wZUlkIGZyb20gdGhlIGhvc3QgaW5zdGFuY2UuXG4gICAgaWYgKGlzRGVmKGkgPSBhY3RpdmVJbnN0YW5jZSkgJiZcbiAgICAgIGkgIT09IHZub2RlLmNvbnRleHQgJiZcbiAgICAgIGkgIT09IHZub2RlLmZuQ29udGV4dCAmJlxuICAgICAgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpXG4gICAgKSB7XG4gICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhZGRWbm9kZXMgKHBhcmVudEVsbSwgcmVmRWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIGNyZWF0ZUVsbSh2bm9kZXNbc3RhcnRJZHhdLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBmYWxzZSwgdm5vZGVzLCBzdGFydElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRGVzdHJveUhvb2sgKHZub2RlKSB7XG4gICAgdmFyIGksIGo7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLmRlc3Ryb3kpKSB7IGkodm5vZGUpOyB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpIHsgY2JzLmRlc3Ryb3lbaV0odm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc0RlZihpID0gdm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaW52b2tlRGVzdHJveUhvb2sodm5vZGUuY2hpbGRyZW5bal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVZub2RlcyAocGFyZW50RWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgpIHtcbiAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICB2YXIgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAoaXNEZWYoY2gudGFnKSkge1xuICAgICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soY2gpO1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKGNoKTtcbiAgICAgICAgfSBlbHNlIHsgLy8gVGV4dCBub2RlXG4gICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayAodm5vZGUsIHJtKSB7XG4gICAgaWYgKGlzRGVmKHJtKSB8fCBpc0RlZih2bm9kZS5kYXRhKSkge1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gY2JzLnJlbW92ZS5sZW5ndGggKyAxO1xuICAgICAgaWYgKGlzRGVmKHJtKSkge1xuICAgICAgICAvLyB3ZSBoYXZlIGEgcmVjdXJzaXZlbHkgcGFzc2VkIGRvd24gcm0gY2FsbGJhY2tcbiAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxpc3RlbmVycyBjb3VudFxuICAgICAgICBybS5saXN0ZW5lcnMgKz0gbGlzdGVuZXJzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGlyZWN0bHkgcmVtb3ZpbmdcbiAgICAgICAgcm0gPSBjcmVhdGVSbUNiKHZub2RlLmVsbSwgbGlzdGVuZXJzKTtcbiAgICAgIH1cbiAgICAgIC8vIHJlY3Vyc2l2ZWx5IGludm9rZSBob29rcyBvbiBjaGlsZCBjb21wb25lbnQgcm9vdCBub2RlXG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpc0RlZihpID0gaS5fdm5vZGUpICYmIGlzRGVmKGkuZGF0YSkpIHtcbiAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhpLCBybSk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBjYnMucmVtb3ZlW2ldKHZub2RlLCBybSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucmVtb3ZlKSkge1xuICAgICAgICBpKHZub2RlLCBybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVOb2RlKHZub2RlLmVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4gKHBhcmVudEVsbSwgb2xkQ2gsIG5ld0NoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcbiAgICB2YXIgb2xkU3RhcnRJZHggPSAwO1xuICAgIHZhciBuZXdTdGFydElkeCA9IDA7XG4gICAgdmFyIG9sZEVuZElkeCA9IG9sZENoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFswXTtcbiAgICB2YXIgb2xkRW5kVm5vZGUgPSBvbGRDaFtvbGRFbmRJZHhdO1xuICAgIHZhciBuZXdFbmRJZHggPSBuZXdDaC5sZW5ndGggLSAxO1xuICAgIHZhciBuZXdTdGFydFZub2RlID0gbmV3Q2hbMF07XG4gICAgdmFyIG5ld0VuZFZub2RlID0gbmV3Q2hbbmV3RW5kSWR4XTtcbiAgICB2YXIgb2xkS2V5VG9JZHgsIGlkeEluT2xkLCB2bm9kZVRvTW92ZSwgcmVmRWxtO1xuXG4gICAgLy8gcmVtb3ZlT25seSBpcyBhIHNwZWNpYWwgZmxhZyB1c2VkIG9ubHkgYnkgPHRyYW5zaXRpb24tZ3JvdXA+XG4gICAgLy8gdG8gZW5zdXJlIHJlbW92ZWQgZWxlbWVudHMgc3RheSBpbiBjb3JyZWN0IHJlbGF0aXZlIHBvc2l0aW9uc1xuICAgIC8vIGR1cmluZyBsZWF2aW5nIHRyYW5zaXRpb25zXG4gICAgdmFyIGNhbk1vdmUgPSAhcmVtb3ZlT25seTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjaGVja0R1cGxpY2F0ZUtleXMobmV3Q2gpO1xuICAgIH1cblxuICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICBpZiAoaXNVbmRlZihvbGRTdGFydFZub2RlKSkge1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07IC8vIFZub2RlIGhhcyBiZWVuIG1vdmVkIGxlZnRcbiAgICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9kZSkpIHtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSkpIHsgLy8gVm5vZGUgbW92ZWQgcmlnaHRcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBub2RlT3BzLm5leHRTaWJsaW5nKG9sZEVuZFZub2RlLmVsbSkpO1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIGxlZnRcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkRW5kVm5vZGUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNVbmRlZihvbGRLZXlUb0lkeCkpIHsgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7IH1cbiAgICAgICAgaWR4SW5PbGQgPSBpc0RlZihuZXdTdGFydFZub2RlLmtleSlcbiAgICAgICAgICA/IG9sZEtleVRvSWR4W25ld1N0YXJ0Vm5vZGUua2V5XVxuICAgICAgICAgIDogZmluZElkeEluT2xkKG5ld1N0YXJ0Vm5vZGUsIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICAgICAgaWYgKGlzVW5kZWYoaWR4SW5PbGQpKSB7IC8vIE5ldyBlbGVtZW50XG4gICAgICAgICAgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgZmFsc2UsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm5vZGVUb01vdmUgPSBvbGRDaFtpZHhJbk9sZF07XG4gICAgICAgICAgaWYgKHNhbWVWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGNoVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgIG9sZENoW2lkeEluT2xkXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCB2bm9kZVRvTW92ZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2FtZSBrZXkgYnV0IGRpZmZlcmVudCBlbGVtZW50LiB0cmVhdCBhcyBuZXcgZWxlbWVudFxuICAgICAgICAgICAgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgZmFsc2UsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9sZFN0YXJ0SWR4ID4gb2xkRW5kSWR4KSB7XG4gICAgICByZWZFbG0gPSBpc1VuZGVmKG5ld0NoW25ld0VuZElkeCArIDFdKSA/IG51bGwgOiBuZXdDaFtuZXdFbmRJZHggKyAxXS5lbG07XG4gICAgICBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIG5ld0NoLCBuZXdTdGFydElkeCwgbmV3RW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgIH0gZWxzZSBpZiAobmV3U3RhcnRJZHggPiBuZXdFbmRJZHgpIHtcbiAgICAgIHJlbW92ZVZub2RlcyhwYXJlbnRFbG0sIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0R1cGxpY2F0ZUtleXMgKGNoaWxkcmVuKSB7XG4gICAgdmFyIHNlZW5LZXlzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZub2RlID0gY2hpbGRyZW5baV07XG4gICAgICB2YXIga2V5ID0gdm5vZGUua2V5O1xuICAgICAgaWYgKGlzRGVmKGtleSkpIHtcbiAgICAgICAgaWYgKHNlZW5LZXlzW2tleV0pIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgKFwiRHVwbGljYXRlIGtleXMgZGV0ZWN0ZWQ6ICdcIiArIGtleSArIFwiJy4gVGhpcyBtYXkgY2F1c2UgYW4gdXBkYXRlIGVycm9yLlwiKSxcbiAgICAgICAgICAgIHZub2RlLmNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZW5LZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZElkeEluT2xkIChub2RlLCBvbGRDaCwgc3RhcnQsIGVuZCkge1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IG9sZENoW2ldO1xuICAgICAgaWYgKGlzRGVmKGMpICYmIHNhbWVWbm9kZShub2RlLCBjKSkgeyByZXR1cm4gaSB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hWbm9kZSAoXG4gICAgb2xkVm5vZGUsXG4gICAgdm5vZGUsXG4gICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgIG93bmVyQXJyYXksXG4gICAgaW5kZXgsXG4gICAgcmVtb3ZlT25seVxuICApIHtcbiAgICBpZiAob2xkVm5vZGUgPT09IHZub2RlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gY2xvbmUgcmV1c2VkIHZub2RlXG4gICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgfVxuXG4gICAgdmFyIGVsbSA9IHZub2RlLmVsbSA9IG9sZFZub2RlLmVsbTtcblxuICAgIGlmIChpc1RydWUob2xkVm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyKSkge1xuICAgICAgaWYgKGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgaHlkcmF0ZShvbGRWbm9kZS5lbG0sIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHJldXNlIGVsZW1lbnQgZm9yIHN0YXRpYyB0cmVlcy5cbiAgICAvLyBub3RlIHdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgdm5vZGUgaXMgY2xvbmVkIC1cbiAgICAvLyBpZiB0aGUgbmV3IG5vZGUgaXMgbm90IGNsb25lZCBpdCBtZWFucyB0aGUgcmVuZGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW5cbiAgICAvLyByZXNldCBieSB0aGUgaG90LXJlbG9hZC1hcGkgYW5kIHdlIG5lZWQgdG8gZG8gYSBwcm9wZXIgcmUtcmVuZGVyLlxuICAgIGlmIChpc1RydWUodm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICBpc1RydWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICB2bm9kZS5rZXkgPT09IG9sZFZub2RlLmtleSAmJlxuICAgICAgKGlzVHJ1ZSh2bm9kZS5pc0Nsb25lZCkgfHwgaXNUcnVlKHZub2RlLmlzT25jZSkpXG4gICAgKSB7XG4gICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGk7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wcmVwYXRjaCkpIHtcbiAgICAgIGkob2xkVm5vZGUsIHZub2RlKTtcbiAgICB9XG5cbiAgICB2YXIgb2xkQ2ggPSBvbGRWbm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgY2ggPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7ICsraSkgeyBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS51cGRhdGUpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgICBpZiAoaXNVbmRlZih2bm9kZS50ZXh0KSkge1xuICAgICAgaWYgKGlzRGVmKG9sZENoKSAmJiBpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKG9sZENoICE9PSBjaCkgeyB1cGRhdGVDaGlsZHJlbihlbG0sIG9sZENoLCBjaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KTsgfVxuICAgICAgfSBlbHNlIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMoY2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkgeyBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpOyB9XG4gICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRDaCkpIHtcbiAgICAgICAgcmVtb3ZlVm5vZGVzKGVsbSwgb2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkge1xuICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2xkVm5vZGUudGV4dCAhPT0gdm5vZGUudGV4dCkge1xuICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sIHZub2RlLnRleHQpO1xuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wb3N0cGF0Y2gpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sgKHZub2RlLCBxdWV1ZSwgaW5pdGlhbCkge1xuICAgIC8vIGRlbGF5IGluc2VydCBob29rcyBmb3IgY29tcG9uZW50IHJvb3Qgbm9kZXMsIGludm9rZSB0aGVtIGFmdGVyIHRoZVxuICAgIC8vIGVsZW1lbnQgaXMgcmVhbGx5IGluc2VydGVkXG4gICAgaWYgKGlzVHJ1ZShpbml0aWFsKSAmJiBpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICB2bm9kZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gcXVldWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcXVldWVbaV0uZGF0YS5ob29rLmluc2VydChxdWV1ZVtpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAvLyBsaXN0IG9mIG1vZHVsZXMgdGhhdCBjYW4gc2tpcCBjcmVhdGUgaG9vayBkdXJpbmcgaHlkcmF0aW9uIGJlY2F1c2UgdGhleVxuICAvLyBhcmUgYWxyZWFkeSByZW5kZXJlZCBvbiB0aGUgY2xpZW50IG9yIGhhcyBubyBuZWVkIGZvciBpbml0aWFsaXphdGlvblxuICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgLy8gZGVlcCB1cGRhdGVzICgjNzA2MykuXG4gIHZhciBpc1JlbmRlcmVkTW9kdWxlID0gbWFrZU1hcCgnYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Jyk7XG5cbiAgLy8gTm90ZTogdGhpcyBpcyBhIGJyb3dzZXItb25seSBmdW5jdGlvbiBzbyB3ZSBjYW4gYXNzdW1lIGVsbXMgYXJlIERPTSBub2Rlcy5cbiAgZnVuY3Rpb24gaHlkcmF0ZSAoZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpblZQcmUgPSBpblZQcmUgfHwgKGRhdGEgJiYgZGF0YS5wcmUpO1xuICAgIHZub2RlLmVsbSA9IGVsbTtcblxuICAgIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSAmJiBpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkpKSB7XG4gICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gYXNzZXJ0IG5vZGUgbWF0Y2hcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFhc3NlcnROb2RlTWF0Y2goZWxtLCB2bm9kZSwgaW5WUHJlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuaW5pdCkpIHsgaSh2bm9kZSwgdHJ1ZSAvKiBoeWRyYXRpbmcgKi8pOyB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICAvLyBjaGlsZCBjb21wb25lbnQuIGl0IHNob3VsZCBoYXZlIGh5ZHJhdGVkIGl0cyBvd24gdHJlZS5cbiAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgLy8gZW1wdHkgZWxlbWVudCwgYWxsb3cgY2xpZW50IHRvIHBpY2sgdXAgYW5kIHBvcHVsYXRlIGNoaWxkcmVuXG4gICAgICAgIGlmICghZWxtLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB2LWh0bWwgYW5kIGRvbVByb3BzOiBpbm5lckhUTUxcbiAgICAgICAgICBpZiAoaXNEZWYoaSA9IGRhdGEpICYmIGlzRGVmKGkgPSBpLmRvbVByb3BzKSAmJiBpc0RlZihpID0gaS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgICBpZiAoaSAhPT0gZWxtLmlubmVySFRNTCkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2NsaWVudCBpbm5lckhUTUw6ICcsIGVsbS5pbm5lckhUTUwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRlIGFuZCBjb21wYXJlIGNoaWxkcmVuIGxpc3RzXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW5NYXRjaCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gZWxtLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgICAgIGlmICghY2hpbGROb2RlIHx8ICFoeWRyYXRlKGNoaWxkTm9kZSwgY2hpbGRyZW5baSQxXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY2hpbGROb2RlIGlzIG5vdCBudWxsLCBpdCBtZWFucyB0aGUgYWN0dWFsIGNoaWxkTm9kZXMgbGlzdCBpc1xuICAgICAgICAgICAgLy8gbG9uZ2VyIHRoYW4gdGhlIHZpcnR1YWwgY2hpbGRyZW4gbGlzdC5cbiAgICAgICAgICAgIGlmICghY2hpbGRyZW5NYXRjaCB8fCBjaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWlzbWF0Y2hpbmcgY2hpbGROb2RlcyB2cy4gVk5vZGVzOiAnLCBlbG0uY2hpbGROb2RlcywgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIHZhciBmdWxsSW52b2tlID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAgICAgICAgIGZ1bGxJbnZva2UgPSB0cnVlO1xuICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZ1bGxJbnZva2UgJiYgZGF0YVsnY2xhc3MnXSkge1xuICAgICAgICAgIC8vIGVuc3VyZSBjb2xsZWN0aW5nIGRlcHMgZm9yIGRlZXAgY2xhc3MgYmluZGluZ3MgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICAgICAgdHJhdmVyc2UoZGF0YVsnY2xhc3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnROb2RlTWF0Y2ggKG5vZGUsIHZub2RlLCBpblZQcmUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUudGFnKSkge1xuICAgICAgcmV0dXJuIHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHwgKFxuICAgICAgICAhaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgaW5WUHJlKSAmJlxuICAgICAgICB2bm9kZS50YWcudG9Mb3dlckNhc2UoKSA9PT0gKG5vZGUudGFnTmFtZSAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkVm5vZGUpKSB7IGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTsgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuXG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1JlYWxFbGVtZW50ID0gaXNEZWYob2xkVm5vZGUubm9kZVR5cGUpO1xuICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgIC8vIHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBudWxsLCBudWxsLCByZW1vdmVPbmx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1JlYWxFbGVtZW50KSB7XG4gICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgIC8vIGEgc3VjY2Vzc2Z1bCBoeWRyYXRpb24uXG4gICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAgICAgIGlmIChoeWRyYXRlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xuICAgICAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICdUaGUgY2xpZW50LXNpZGUgcmVuZGVyZWQgdmlydHVhbCBET00gdHJlZSBpcyBub3QgbWF0Y2hpbmcgJyArXG4gICAgICAgICAgICAgICAgJ3NlcnZlci1yZW5kZXJlZCBjb250ZW50LiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgaW5jb3JyZWN0ICcgK1xuICAgICAgICAgICAgICAgICdIVE1MIG1hcmt1cCwgZm9yIGV4YW1wbGUgbmVzdGluZyBibG9jay1sZXZlbCBlbGVtZW50cyBpbnNpZGUgJyArXG4gICAgICAgICAgICAgICAgJzxwPiwgb3IgbWlzc2luZyA8dGJvZHk+LiBCYWlsaW5nIGh5ZHJhdGlvbiBhbmQgcGVyZm9ybWluZyAnICtcbiAgICAgICAgICAgICAgICAnZnVsbCBjbGllbnQtc2lkZSByZW5kZXIuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlaXRoZXIgbm90IHNlcnZlci1yZW5kZXJlZCwgb3IgaHlkcmF0aW9uIGZhaWxlZC5cbiAgICAgICAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbm9kZSBhbmQgcmVwbGFjZSBpdFxuICAgICAgICAgIG9sZFZub2RlID0gZW1wdHlOb2RlQXQob2xkVm5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVwbGFjaW5nIGV4aXN0aW5nIGVsZW1lbnRcbiAgICAgICAgdmFyIG9sZEVsbSA9IG9sZFZub2RlLmVsbTtcbiAgICAgICAgdmFyIHBhcmVudEVsbSA9IG5vZGVPcHMucGFyZW50Tm9kZShvbGRFbG0pO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgbm9kZVxuICAgICAgICBjcmVhdGVFbG0oXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgICAgICAgIC8vIGV4dHJlbWVseSByYXJlIGVkZ2UgY2FzZTogZG8gbm90IGluc2VydCBpZiBvbGQgZWxlbWVudCBpcyBpbiBhXG4gICAgICAgICAgLy8gbGVhdmluZyB0cmFuc2l0aW9uLiBPbmx5IGhhcHBlbnMgd2hlbiBjb21iaW5pbmcgdHJhbnNpdGlvbiArXG4gICAgICAgICAgLy8ga2VlcC1hbGl2ZSArIEhPQ3MuICgjNDU5MClcbiAgICAgICAgICBvbGRFbG0uX2xlYXZlQ2IgPyBudWxsIDogcGFyZW50RWxtLFxuICAgICAgICAgIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBwYXJlbnQgcGxhY2Vob2xkZXIgbm9kZSBlbGVtZW50LCByZWN1cnNpdmVseVxuICAgICAgICBpZiAoaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlLnBhcmVudDtcbiAgICAgICAgICB2YXIgcGF0Y2hhYmxlID0gaXNQYXRjaGFibGUodm5vZGUpO1xuICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBjYnMuZGVzdHJveVtpXShhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3Rvci5lbG0gPSB2bm9kZS5lbG07XG4gICAgICAgICAgICBpZiAocGF0Y2hhYmxlKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICAgICAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIGFuY2VzdG9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyAjNjUxM1xuICAgICAgICAgICAgICAvLyBpbnZva2UgaW5zZXJ0IGhvb2tzIHRoYXQgbWF5IGhhdmUgYmVlbiBtZXJnZWQgYnkgY3JlYXRlIGhvb2tzLlxuICAgICAgICAgICAgICAvLyBlLmcuIGZvciBkaXJlY3RpdmVzIHRoYXQgdXNlcyB0aGUgXCJpbnNlcnRlZFwiIGhvb2suXG4gICAgICAgICAgICAgIHZhciBpbnNlcnQgPSBhbmNlc3Rvci5kYXRhLmhvb2suaW5zZXJ0O1xuICAgICAgICAgICAgICBpZiAoaW5zZXJ0Lm1lcmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGF0IGluZGV4IDEgdG8gYXZvaWQgcmUtaW52b2tpbmcgY29tcG9uZW50IG1vdW50ZWQgaG9va1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkkMiA9IDE7IGkkMiA8IGluc2VydC5mbnMubGVuZ3RoOyBpJDIrKykge1xuICAgICAgICAgICAgICAgICAgaW5zZXJ0LmZuc1tpJDJdKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWdpc3RlclJlZihhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZXN0cm95IG9sZCBub2RlXG4gICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0pKSB7XG4gICAgICAgICAgcmVtb3ZlVm5vZGVzKHBhcmVudEVsbSwgW29sZFZub2RlXSwgMCwgMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgaXNJbml0aWFsUGF0Y2gpO1xuICAgIHJldHVybiB2bm9kZS5lbG1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIGRpcmVjdGl2ZXMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgdXBkYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICBkZXN0cm95OiBmdW5jdGlvbiB1bmJpbmREaXJlY3RpdmVzICh2bm9kZSkge1xuICAgIHVwZGF0ZURpcmVjdGl2ZXModm5vZGUsIGVtcHR5Tm9kZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZURpcmVjdGl2ZXMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzIHx8IHZub2RlLmRhdGEuZGlyZWN0aXZlcykge1xuICAgIF91cGRhdGUob2xkVm5vZGUsIHZub2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfdXBkYXRlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGlzQ3JlYXRlID0gb2xkVm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgdmFyIGlzRGVzdHJveSA9IHZub2RlID09PSBlbXB0eU5vZGU7XG4gIHZhciBvbGREaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyQxKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcywgb2xkVm5vZGUuY29udGV4dCk7XG4gIHZhciBuZXdEaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyQxKHZub2RlLmRhdGEuZGlyZWN0aXZlcywgdm5vZGUuY29udGV4dCk7XG5cbiAgdmFyIGRpcnNXaXRoSW5zZXJ0ID0gW107XG4gIHZhciBkaXJzV2l0aFBvc3RwYXRjaCA9IFtdO1xuXG4gIHZhciBrZXksIG9sZERpciwgZGlyO1xuICBmb3IgKGtleSBpbiBuZXdEaXJzKSB7XG4gICAgb2xkRGlyID0gb2xkRGlyc1trZXldO1xuICAgIGRpciA9IG5ld0RpcnNba2V5XTtcbiAgICBpZiAoIW9sZERpcikge1xuICAgICAgLy8gbmV3IGRpcmVjdGl2ZSwgYmluZFxuICAgICAgY2FsbEhvb2skMShkaXIsICdiaW5kJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuaW5zZXJ0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhJbnNlcnQucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleGlzdGluZyBkaXJlY3RpdmUsIHVwZGF0ZVxuICAgICAgZGlyLm9sZFZhbHVlID0gb2xkRGlyLnZhbHVlO1xuICAgICAgZGlyLm9sZEFyZyA9IG9sZERpci5hcmc7XG4gICAgICBjYWxsSG9vayQxKGRpciwgJ3VwZGF0ZScsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmNvbXBvbmVudFVwZGF0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhQb3N0cGF0Y2gucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aEluc2VydC5sZW5ndGgpIHtcbiAgICB2YXIgY2FsbEluc2VydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhJbnNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aEluc2VydFtpXSwgJ2luc2VydGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChpc0NyZWF0ZSkge1xuICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBjYWxsSW5zZXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbEluc2VydCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGgpIHtcbiAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aFBvc3RwYXRjaFtpXSwgJ2NvbXBvbmVudFVwZGF0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFpc0NyZWF0ZSkge1xuICAgIGZvciAoa2V5IGluIG9sZERpcnMpIHtcbiAgICAgIGlmICghbmV3RGlyc1trZXldKSB7XG4gICAgICAgIC8vIG5vIGxvbmdlciBwcmVzZW50LCB1bmJpbmRcbiAgICAgICAgY2FsbEhvb2skMShvbGREaXJzW2tleV0sICd1bmJpbmQnLCBvbGRWbm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBlbXB0eU1vZGlmaWVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSAoXG4gIGRpcnMsXG4gIHZtXG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghZGlycykge1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHJldHVybiByZXNcbiAgfVxuICB2YXIgaSwgZGlyO1xuICBmb3IgKGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgIGRpciA9IGRpcnNbaV07XG4gICAgaWYgKCFkaXIubW9kaWZpZXJzKSB7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGRpci5tb2RpZmllcnMgPSBlbXB0eU1vZGlmaWVycztcbiAgICB9XG4gICAgcmVzW2dldFJhd0Rpck5hbWUoZGlyKV0gPSBkaXI7XG4gICAgZGlyLmRlZiA9IHJlc29sdmVBc3NldCh2bS4kb3B0aW9ucywgJ2RpcmVjdGl2ZXMnLCBkaXIubmFtZSwgdHJ1ZSk7XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2V0UmF3RGlyTmFtZSAoZGlyKSB7XG4gIHJldHVybiBkaXIucmF3TmFtZSB8fCAoKGRpci5uYW1lKSArIFwiLlwiICsgKE9iamVjdC5rZXlzKGRpci5tb2RpZmllcnMgfHwge30pLmpvaW4oJy4nKSkpXG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rJDEgKGRpciwgaG9vaywgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpIHtcbiAgdmFyIGZuID0gZGlyLmRlZiAmJiBkaXIuZGVmW2hvb2tdO1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgZm4odm5vZGUuZWxtLCBkaXIsIHZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bm9kZS5jb250ZXh0LCAoXCJkaXJlY3RpdmUgXCIgKyAoZGlyLm5hbWUpICsgXCIgXCIgKyBob29rICsgXCIgaG9va1wiKSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBiYXNlTW9kdWxlcyA9IFtcbiAgcmVmLFxuICBkaXJlY3RpdmVzXG5dO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlQXR0cnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgb3B0cyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIGlmIChpc0RlZihvcHRzKSAmJiBvcHRzLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnMgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5hdHRycykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmF0dHJzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1ciwgb2xkO1xuICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkQXR0cnMgPSBvbGRWbm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICB2YXIgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgaWYgKGlzRGVmKGF0dHJzLl9fb2JfXykpIHtcbiAgICBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGF0dHJzKTtcbiAgfVxuXG4gIGZvciAoa2V5IGluIGF0dHJzKSB7XG4gICAgY3VyID0gYXR0cnNba2V5XTtcbiAgICBvbGQgPSBvbGRBdHRyc1trZXldO1xuICAgIGlmIChvbGQgIT09IGN1cikge1xuICAgICAgc2V0QXR0cihlbG0sIGtleSwgY3VyKTtcbiAgICB9XG4gIH1cbiAgLy8gIzQzOTE6IGluIElFOSwgc2V0dGluZyB0eXBlIGNhbiByZXNldCB2YWx1ZSBmb3IgaW5wdXRbdHlwZT1yYWRpb11cbiAgLy8gIzY2NjY6IElFL0VkZ2UgZm9yY2VzIHByb2dyZXNzIHZhbHVlIGRvd24gdG8gMSBiZWZvcmUgc2V0dGluZyBhIG1heFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKChpc0lFIHx8IGlzRWRnZSkgJiYgYXR0cnMudmFsdWUgIT09IG9sZEF0dHJzLnZhbHVlKSB7XG4gICAgc2V0QXR0cihlbG0sICd2YWx1ZScsIGF0dHJzLnZhbHVlKTtcbiAgfVxuICBmb3IgKGtleSBpbiBvbGRBdHRycykge1xuICAgIGlmIChpc1VuZGVmKGF0dHJzW2tleV0pKSB7XG4gICAgICBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRBdHRyIChlbCwga2V5LCB2YWx1ZSkge1xuICBpZiAoZWwudGFnTmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5BdHRyKGtleSkpIHtcbiAgICAvLyBzZXQgYXR0cmlidXRlIGZvciBibGFuayB2YWx1ZVxuICAgIC8vIGUuZy4gPG9wdGlvbiBkaXNhYmxlZD5TZWxlY3Qgb25lPC9vcHRpb24+XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGVjaG5pY2FsbHkgYWxsb3dmdWxsc2NyZWVuIGlzIGEgYm9vbGVhbiBhdHRyaWJ1dGUgZm9yIDxpZnJhbWU+LFxuICAgICAgLy8gYnV0IEZsYXNoIGV4cGVjdHMgYSB2YWx1ZSBvZiBcInRydWVcIiB3aGVuIHVzZWQgb24gPGVtYmVkPiB0YWdcbiAgICAgIHZhbHVlID0ga2V5ID09PSAnYWxsb3dmdWxsc2NyZWVuJyAmJiBlbC50YWdOYW1lID09PSAnRU1CRUQnXG4gICAgICAgID8gJ3RydWUnXG4gICAgICAgIDoga2V5O1xuICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBjb252ZXJ0RW51bWVyYXRlZFZhbHVlKGtleSwgdmFsdWUpKTtcbiAgfSBlbHNlIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmlidXRlTlMoeGxpbmtOUywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlU2V0QXR0ciAoZWwsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gIzcxMzg6IElFMTAgJiAxMSBmaXJlcyBpbnB1dCBldmVudCB3aGVuIHNldHRpbmcgcGxhY2Vob2xkZXIgb25cbiAgICAvLyA8dGV4dGFyZWE+Li4uIGJsb2NrIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhbmQgcmVtb3ZlIHRoZSBibG9ja2VyXG4gICAgLy8gaW1tZWRpYXRlbHkuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKFxuICAgICAgaXNJRSAmJiAhaXNJRTkgJiZcbiAgICAgIGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgJiZcbiAgICAgIGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiB2YWx1ZSAhPT0gJycgJiYgIWVsLl9faWVwaFxuICAgICkge1xuICAgICAgdmFyIGJsb2NrZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXIpO1xuICAgICAgfTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcik7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGVsLl9faWVwaCA9IHRydWU7IC8qIElFIHBsYWNlaG9sZGVyIHBhdGNoZWQgKi9cbiAgICB9XG4gICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICB9XG59XG5cbnZhciBhdHRycyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVBdHRycyxcbiAgdXBkYXRlOiB1cGRhdGVBdHRyc1xufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcbiAgaWYgKFxuICAgIGlzVW5kZWYoZGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICBpc1VuZGVmKGRhdGEuY2xhc3MpICYmIChcbiAgICAgIGlzVW5kZWYob2xkRGF0YSkgfHwgKFxuICAgICAgICBpc1VuZGVmKG9sZERhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5jbGFzcylcbiAgICAgIClcbiAgICApXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNscyA9IGdlbkNsYXNzRm9yVm5vZGUodm5vZGUpO1xuXG4gIC8vIGhhbmRsZSB0cmFuc2l0aW9uIGNsYXNzZXNcbiAgdmFyIHRyYW5zaXRpb25DbGFzcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcztcbiAgaWYgKGlzRGVmKHRyYW5zaXRpb25DbGFzcykpIHtcbiAgICBjbHMgPSBjb25jYXQoY2xzLCBzdHJpbmdpZnlDbGFzcyh0cmFuc2l0aW9uQ2xhc3MpKTtcbiAgfVxuXG4gIC8vIHNldCB0aGUgY2xhc3NcbiAgaWYgKGNscyAhPT0gZWwuX3ByZXZDbGFzcykge1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjbHMpO1xuICAgIGVsLl9wcmV2Q2xhc3MgPSBjbHM7XG4gIH1cbn1cblxudmFyIGtsYXNzID0ge1xuICBjcmVhdGU6IHVwZGF0ZUNsYXNzLFxuICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG59O1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW4gc29tZSBjYXNlcywgdGhlIGV2ZW50IHVzZWQgaGFzIHRvIGJlIGRldGVybWluZWQgYXQgcnVudGltZVxuLy8gc28gd2UgdXNlZCBzb21lIHJlc2VydmVkIHRva2VucyBkdXJpbmcgY29tcGlsZS5cbnZhciBSQU5HRV9UT0tFTiA9ICdfX3InO1xudmFyIENIRUNLQk9YX1JBRElPX1RPS0VOID0gJ19fYyc7XG5cbi8qICAqL1xuXG4vLyBub3JtYWxpemUgdi1tb2RlbCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXG4vLyBpdCdzIGltcG9ydGFudCB0byBwbGFjZSB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGluIHRoZSBhcnJheSBiZWNhdXNlXG4vLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4vLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzIChvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcbiAgICAvLyBJRSBpbnB1dFt0eXBlPXJhbmdlXSBvbmx5IHN1cHBvcnRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgdmFyIGV2ZW50ID0gaXNJRSA/ICdjaGFuZ2UnIDogJ2lucHV0JztcbiAgICBvbltldmVudF0gPSBbXS5jb25jYXQob25bUkFOR0VfVE9LRU5dLCBvbltldmVudF0gfHwgW10pO1xuICAgIGRlbGV0ZSBvbltSQU5HRV9UT0tFTl07XG4gIH1cbiAgLy8gVGhpcyB3YXMgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBmaXggIzQ1MjEgYnV0IG5vIGxvbmdlciBuZWNlc3NhcnlcbiAgLy8gYWZ0ZXIgMi41LiBLZWVwaW5nIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0IHdpdGggZ2VuZXJhdGVkIGNvZGUgZnJvbSA8IDIuNFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSkpIHtcbiAgICBvbi5jaGFuZ2UgPSBbXS5jb25jYXQob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dLCBvbi5jaGFuZ2UgfHwgW10pO1xuICAgIGRlbGV0ZSBvbltDSEVDS0JPWF9SQURJT19UT0tFTl07XG4gIH1cbn1cblxudmFyIHRhcmdldCQxO1xuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciQxIChldmVudCwgaGFuZGxlciwgY2FwdHVyZSkge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldCQxOyAvLyBzYXZlIGN1cnJlbnQgdGFyZ2V0IGVsZW1lbnQgaW4gY2xvc3VyZVxuICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgIHZhciByZXMgPSBoYW5kbGVyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgcmVtb3ZlJDIoZXZlbnQsIG9uY2VIYW5kbGVyLCBjYXB0dXJlLCBfdGFyZ2V0KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gIzk0NDY6IEZpcmVmb3ggPD0gNTMgKGluIHBhcnRpY3VsYXIsIEVTUiA1MikgaGFzIGluY29ycmVjdCBFdmVudC50aW1lU3RhbXBcbi8vIGltcGxlbWVudGF0aW9uIGFuZCBkb2VzIG5vdCBmaXJlIG1pY3JvdGFza3MgaW4gYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbiwgc29cbi8vIHNhZmUgdG8gZXhjbHVkZS5cbnZhciB1c2VNaWNyb3Rhc2tGaXggPSBpc1VzaW5nTWljcm9UYXNrICYmICEoaXNGRiAmJiBOdW1iZXIoaXNGRlsxXSkgPD0gNTMpO1xuXG5mdW5jdGlvbiBhZGQkMSAoXG4gIG5hbWUsXG4gIGhhbmRsZXIsXG4gIGNhcHR1cmUsXG4gIHBhc3NpdmVcbikge1xuICAvLyBhc3luYyBlZGdlIGNhc2UgIzY1NjY6IGlubmVyIGNsaWNrIGV2ZW50IHRyaWdnZXJzIHBhdGNoLCBldmVudCBoYW5kbGVyXG4gIC8vIGF0dGFjaGVkIHRvIG91dGVyIGVsZW1lbnQgZHVyaW5nIHBhdGNoLCBhbmQgdHJpZ2dlcmVkIGFnYWluLiBUaGlzXG4gIC8vIGhhcHBlbnMgYmVjYXVzZSBicm93c2VycyBmaXJlIG1pY3JvdGFzayB0aWNrcyBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLlxuICAvLyB0aGUgc29sdXRpb24gaXMgc2ltcGxlOiB3ZSBzYXZlIHRoZSB0aW1lc3RhbXAgd2hlbiBhIGhhbmRsZXIgaXMgYXR0YWNoZWQsXG4gIC8vIGFuZCB0aGUgaGFuZGxlciB3b3VsZCBvbmx5IGZpcmUgaWYgdGhlIGV2ZW50IHBhc3NlZCB0byBpdCB3YXMgZmlyZWRcbiAgLy8gQUZURVIgaXQgd2FzIGF0dGFjaGVkLlxuICBpZiAodXNlTWljcm90YXNrRml4KSB7XG4gICAgdmFyIGF0dGFjaGVkVGltZXN0YW1wID0gY3VycmVudEZsdXNoVGltZXN0YW1wO1xuICAgIHZhciBvcmlnaW5hbCA9IGhhbmRsZXI7XG4gICAgaGFuZGxlciA9IG9yaWdpbmFsLl93cmFwcGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm8gYnViYmxpbmcsIHNob3VsZCBhbHdheXMgZmlyZS5cbiAgICAgICAgLy8gdGhpcyBpcyBqdXN0IGEgc2FmZXR5IG5ldCBpbiBjYXNlIGV2ZW50LnRpbWVTdGFtcCBpcyB1bnJlbGlhYmxlIGluXG4gICAgICAgIC8vIGNlcnRhaW4gd2VpcmQgZW52aXJvbm1lbnRzLi4uXG4gICAgICAgIGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgLy8gZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgaGFuZGxlciBhdHRhY2htZW50XG4gICAgICAgIGUudGltZVN0YW1wID49IGF0dGFjaGVkVGltZXN0YW1wIHx8XG4gICAgICAgIC8vIGJhaWwgZm9yIGVudmlyb25tZW50cyB0aGF0IGhhdmUgYnVnZ3kgZXZlbnQudGltZVN0YW1wIGltcGxlbWVudGF0aW9uc1xuICAgICAgICAvLyAjOTQ2MiBpT1MgOSBidWc6IGV2ZW50LnRpbWVTdGFtcCBpcyAwIGFmdGVyIGhpc3RvcnkucHVzaFN0YXRlXG4gICAgICAgIC8vICM5NjgxIFF0V2ViRW5naW5lIGV2ZW50LnRpbWVTdGFtcCBpcyBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICBlLnRpbWVTdGFtcCA8PSAwIHx8XG4gICAgICAgIC8vICM5NDQ4IGJhaWwgaWYgZXZlbnQgaXMgZmlyZWQgaW4gYW5vdGhlciBkb2N1bWVudCBpbiBhIG11bHRpLXBhZ2VcbiAgICAgICAgLy8gZWxlY3Ryb24vbncuanMgYXBwLCBzaW5jZSBldmVudC50aW1lU3RhbXAgd2lsbCBiZSB1c2luZyBhIGRpZmZlcmVudFxuICAgICAgICAvLyBzdGFydGluZyByZWZlcmVuY2VcbiAgICAgICAgZS50YXJnZXQub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgdGFyZ2V0JDEuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIsXG4gICAgc3VwcG9ydHNQYXNzaXZlXG4gICAgICA/IHsgY2FwdHVyZTogY2FwdHVyZSwgcGFzc2l2ZTogcGFzc2l2ZSB9XG4gICAgICA6IGNhcHR1cmVcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDIgKFxuICBuYW1lLFxuICBoYW5kbGVyLFxuICBjYXB0dXJlLFxuICBfdGFyZ2V0XG4pIHtcbiAgKF90YXJnZXQgfHwgdGFyZ2V0JDEpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgbmFtZSxcbiAgICBoYW5kbGVyLl93cmFwcGVyIHx8IGhhbmRsZXIsXG4gICAgY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVET01MaXN0ZW5lcnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLm9uKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEub24pKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG9uID0gdm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdGFyZ2V0JDEgPSB2bm9kZS5lbG07XG4gIG5vcm1hbGl6ZUV2ZW50cyhvbik7XG4gIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCQxLCByZW1vdmUkMiwgY3JlYXRlT25jZUhhbmRsZXIkMSwgdm5vZGUuY29udGV4dCk7XG4gIHRhcmdldCQxID0gdW5kZWZpbmVkO1xufVxuXG52YXIgZXZlbnRzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTUxpc3RlbmVycyxcbiAgdXBkYXRlOiB1cGRhdGVET01MaXN0ZW5lcnNcbn07XG5cbi8qICAqL1xuXG52YXIgc3ZnQ29udGFpbmVyO1xuXG5mdW5jdGlvbiB1cGRhdGVET01Qcm9wcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEuZG9tUHJvcHMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5kb21Qcm9wcykpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIga2V5LCBjdXI7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRQcm9wcyA9IG9sZFZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gIHZhciBwcm9wcyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYocHJvcHMuX19vYl9fKSkge1xuICAgIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyA9IGV4dGVuZCh7fSwgcHJvcHMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICBpZiAoIShrZXkgaW4gcHJvcHMpKSB7XG4gICAgICBlbG1ba2V5XSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoa2V5IGluIHByb3BzKSB7XG4gICAgY3VyID0gcHJvcHNba2V5XTtcbiAgICAvLyBpZ25vcmUgY2hpbGRyZW4gaWYgdGhlIG5vZGUgaGFzIHRleHRDb250ZW50IG9yIGlubmVySFRNTCxcbiAgICAvLyBhcyB0aGVzZSB3aWxsIHRocm93IGF3YXkgZXhpc3RpbmcgRE9NIG5vZGVzIGFuZCBjYXVzZSByZW1vdmFsIGVycm9yc1xuICAgIC8vIG9uIHN1YnNlcXVlbnQgcGF0Y2hlcyAoIzMzNjApXG4gICAgaWYgKGtleSA9PT0gJ3RleHRDb250ZW50JyB8fCBrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBpZiAodm5vZGUuY2hpbGRyZW4pIHsgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoID0gMDsgfVxuICAgICAgaWYgKGN1ciA9PT0gb2xkUHJvcHNba2V5XSkgeyBjb250aW51ZSB9XG4gICAgICAvLyAjNjYwMSB3b3JrIGFyb3VuZCBDaHJvbWUgdmVyc2lvbiA8PSA1NSBidWcgd2hlcmUgc2luZ2xlIHRleHROb2RlXG4gICAgICAvLyByZXBsYWNlZCBieSBpbm5lckhUTUwvdGV4dENvbnRlbnQgcmV0YWlucyBpdHMgcGFyZW50Tm9kZSBwcm9wZXJ0eVxuICAgICAgaWYgKGVsbS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICd2YWx1ZScgJiYgZWxtLnRhZ05hbWUgIT09ICdQUk9HUkVTUycpIHtcbiAgICAgIC8vIHN0b3JlIHZhbHVlIGFzIF92YWx1ZSBhcyB3ZWxsIHNpbmNlXG4gICAgICAvLyBub24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIHN0cmluZ2lmaWVkXG4gICAgICBlbG0uX3ZhbHVlID0gY3VyO1xuICAgICAgLy8gYXZvaWQgcmVzZXR0aW5nIGN1cnNvciBwb3NpdGlvbiB3aGVuIHZhbHVlIGlzIHRoZSBzYW1lXG4gICAgICB2YXIgc3RyQ3VyID0gaXNVbmRlZihjdXIpID8gJycgOiBTdHJpbmcoY3VyKTtcbiAgICAgIGlmIChzaG91bGRVcGRhdGVWYWx1ZShlbG0sIHN0ckN1cikpIHtcbiAgICAgICAgZWxtLnZhbHVlID0gc3RyQ3VyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJyAmJiBpc1NWRyhlbG0udGFnTmFtZSkgJiYgaXNVbmRlZihlbG0uaW5uZXJIVE1MKSkge1xuICAgICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGlubmVySFRNTCBmb3IgU1ZHIGVsZW1lbnRzXG4gICAgICBzdmdDb250YWluZXIgPSBzdmdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBzdmdDb250YWluZXIuaW5uZXJIVE1MID0gXCI8c3ZnPlwiICsgY3VyICsgXCI8L3N2Zz5cIjtcbiAgICAgIHZhciBzdmcgPSBzdmdDb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgIHdoaWxlIChlbG0uZmlyc3RDaGlsZCkge1xuICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHN2Zy5maXJzdENoaWxkKSB7XG4gICAgICAgIGVsbS5hcHBlbmRDaGlsZChzdmcuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIHNraXAgdGhlIHVwZGF0ZSBpZiBvbGQgYW5kIG5ldyBWRE9NIHN0YXRlIGlzIHRoZSBzYW1lLlxuICAgICAgLy8gYHZhbHVlYCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYmVjYXVzZSB0aGUgRE9NIHZhbHVlIG1heSBiZSB0ZW1wb3JhcmlseVxuICAgICAgLy8gb3V0IG9mIHN5bmMgd2l0aCBWRE9NIHN0YXRlIGR1ZSB0byBmb2N1cywgY29tcG9zaXRpb24gYW5kIG1vZGlmaWVycy5cbiAgICAgIC8vIFRoaXMgICM0NTIxIGJ5IHNraXBwaW5nIHRoZSB1bm5lY2VzYXJyeSBgY2hlY2tlZGAgdXBkYXRlLlxuICAgICAgY3VyICE9PSBvbGRQcm9wc1trZXldXG4gICAgKSB7XG4gICAgICAvLyBzb21lIHByb3BlcnR5IHVwZGF0ZXMgY2FuIHRocm93XG4gICAgICAvLyBlLmcuIGB2YWx1ZWAgb24gPHByb2dyZXNzPiB3LyBub24tZmluaXRlIHZhbHVlXG4gICAgICB0cnkge1xuICAgICAgICBlbG1ba2V5XSA9IGN1cjtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG59XG5cbi8vIGNoZWNrIHBsYXRmb3Jtcy93ZWIvdXRpbC9hdHRycy5qcyBhY2NlcHRWYWx1ZVxuXG5cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVZhbHVlIChlbG0sIGNoZWNrVmFsKSB7XG4gIHJldHVybiAoIWVsbS5jb21wb3NpbmcgJiYgKFxuICAgIGVsbS50YWdOYW1lID09PSAnT1BUSU9OJyB8fFxuICAgIGlzTm90SW5Gb2N1c0FuZERpcnR5KGVsbSwgY2hlY2tWYWwpIHx8XG4gICAgaXNEaXJ0eVdpdGhNb2RpZmllcnMoZWxtLCBjaGVja1ZhbClcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNOb3RJbkZvY3VzQW5kRGlydHkgKGVsbSwgY2hlY2tWYWwpIHtcbiAgLy8gcmV0dXJuIHRydWUgd2hlbiB0ZXh0Ym94ICgubnVtYmVyIGFuZCAudHJpbSkgbG9zZXMgZm9jdXMgYW5kIGl0cyB2YWx1ZSBpc1xuICAvLyBub3QgZXF1YWwgdG8gdGhlIHVwZGF0ZWQgdmFsdWVcbiAgdmFyIG5vdEluRm9jdXMgPSB0cnVlO1xuICAvLyAjNjE1N1xuICAvLyB3b3JrIGFyb3VuZCBJRSBidWcgd2hlbiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbiBhbiBpZnJhbWVcbiAgdHJ5IHsgbm90SW5Gb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVsbTsgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIG5vdEluRm9jdXMgJiYgZWxtLnZhbHVlICE9PSBjaGVja1ZhbFxufVxuXG5mdW5jdGlvbiBpc0RpcnR5V2l0aE1vZGlmaWVycyAoZWxtLCBuZXdWYWwpIHtcbiAgdmFyIHZhbHVlID0gZWxtLnZhbHVlO1xuICB2YXIgbW9kaWZpZXJzID0gZWxtLl92TW9kaWZpZXJzOyAvLyBpbmplY3RlZCBieSB2LW1vZGVsIHJ1bnRpbWVcbiAgaWYgKGlzRGVmKG1vZGlmaWVycykpIHtcbiAgICBpZiAobW9kaWZpZXJzLm51bWJlcikge1xuICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKSAhPT0gdG9OdW1iZXIobmV3VmFsKVxuICAgIH1cbiAgICBpZiAobW9kaWZpZXJzLnRyaW0pIHtcbiAgICAgIHJldHVybiB2YWx1ZS50cmltKCkgIT09IG5ld1ZhbC50cmltKClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlICE9PSBuZXdWYWxcbn1cblxudmFyIGRvbVByb3BzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTVByb3BzLFxuICB1cGRhdGU6IHVwZGF0ZURPTVByb3BzXG59O1xuXG4vKiAgKi9cblxudmFyIHBhcnNlU3R5bGVUZXh0ID0gY2FjaGVkKGZ1bmN0aW9uIChjc3NUZXh0KSB7XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGxpc3REZWxpbWl0ZXIgPSAvOyg/IVteKF0qXFwpKS9nO1xuICB2YXIgcHJvcGVydHlEZWxpbWl0ZXIgPSAvOiguKykvO1xuICBjc3NUZXh0LnNwbGl0KGxpc3REZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdmFyIHRtcCA9IGl0ZW0uc3BsaXQocHJvcGVydHlEZWxpbWl0ZXIpO1xuICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJlc1t0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vLyBtZXJnZSBzdGF0aWMgYW5kIGR5bmFtaWMgc3R5bGUgZGF0YSBvbiB0aGUgc2FtZSB2bm9kZVxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVEYXRhIChkYXRhKSB7XG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyhkYXRhLnN0eWxlKTtcbiAgLy8gc3RhdGljIHN0eWxlIGlzIHByZS1wcm9jZXNzZWQgaW50byBhbiBvYmplY3QgZHVyaW5nIGNvbXBpbGF0aW9uXG4gIC8vIGFuZCBpcyBhbHdheXMgYSBmcmVzaCBvYmplY3QsIHNvIGl0J3Mgc2FmZSB0byBtZXJnZSBpbnRvIGl0XG4gIHJldHVybiBkYXRhLnN0YXRpY1N0eWxlXG4gICAgPyBleHRlbmQoZGF0YS5zdGF0aWNTdHlsZSwgc3R5bGUpXG4gICAgOiBzdHlsZVxufVxuXG4vLyBub3JtYWxpemUgcG9zc2libGUgYXJyYXkgLyBzdHJpbmcgdmFsdWVzIGludG8gT2JqZWN0XG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZUJpbmRpbmcgKGJpbmRpbmdTdHlsZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShiaW5kaW5nU3R5bGUpKSB7XG4gICAgcmV0dXJuIHRvT2JqZWN0KGJpbmRpbmdTdHlsZSlcbiAgfVxuICBpZiAodHlwZW9mIGJpbmRpbmdTdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGFyc2VTdHlsZVRleHQoYmluZGluZ1N0eWxlKVxuICB9XG4gIHJldHVybiBiaW5kaW5nU3R5bGVcbn1cblxuLyoqXG4gKiBwYXJlbnQgY29tcG9uZW50IHN0eWxlIHNob3VsZCBiZSBhZnRlciBjaGlsZCdzXG4gKiBzbyB0aGF0IHBhcmVudCBjb21wb25lbnQncyBzdHlsZSBjb3VsZCBvdmVycmlkZSBpdFxuICovXG5mdW5jdGlvbiBnZXRTdHlsZSAodm5vZGUsIGNoZWNrQ2hpbGQpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgc3R5bGVEYXRhO1xuXG4gIGlmIChjaGVja0NoaWxkKSB7XG4gICAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUuZGF0YSAmJlxuICAgICAgICAoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKGNoaWxkTm9kZS5kYXRhKSlcbiAgICAgICkge1xuICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICgoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKHZub2RlLmRhdGEpKSkge1xuICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gIH1cblxuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB3aGlsZSAoKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudCkpIHtcbiAgICBpZiAocGFyZW50Tm9kZS5kYXRhICYmIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEocGFyZW50Tm9kZS5kYXRhKSkpIHtcbiAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbnZhciBjc3NWYXJSRSA9IC9eLS0vO1xudmFyIGltcG9ydGFudFJFID0gL1xccyohaW1wb3J0YW50JC87XG52YXIgc2V0UHJvcCA9IGZ1bmN0aW9uIChlbCwgbmFtZSwgdmFsKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoY3NzVmFyUkUudGVzdChuYW1lKSkge1xuICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbCk7XG4gIH0gZWxzZSBpZiAoaW1wb3J0YW50UkUudGVzdCh2YWwpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoaHlwaGVuYXRlKG5hbWUpLCB2YWwucmVwbGFjZShpbXBvcnRhbnRSRSwgJycpLCAnaW1wb3J0YW50Jyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIC8vIFN1cHBvcnQgdmFsdWVzIGFycmF5IGNyZWF0ZWQgYnkgYXV0b3ByZWZpeGVyLCBlLmcuXG4gICAgICAvLyB7ZGlzcGxheTogW1wiLXdlYmtpdC1ib3hcIiwgXCItbXMtZmxleGJveFwiLCBcImZsZXhcIl19XG4gICAgICAvLyBTZXQgdGhlbSBvbmUgYnkgb25lLCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBvbmx5IHNldCB0aG9zZSBpdCBjYW4gcmVjb2duaXplXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbFtpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHZlbmRvck5hbWVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XG5cbnZhciBlbXB0eVN0eWxlO1xudmFyIG5vcm1hbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAocHJvcCkge1xuICBlbXB0eVN0eWxlID0gZW1wdHlTdHlsZSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTtcbiAgcHJvcCA9IGNhbWVsaXplKHByb3ApO1xuICBpZiAocHJvcCAhPT0gJ2ZpbHRlcicgJiYgKHByb3AgaW4gZW1wdHlTdHlsZSkpIHtcbiAgICByZXR1cm4gcHJvcFxuICB9XG4gIHZhciBjYXBOYW1lID0gcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmVuZG9yTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbmFtZSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcbiAgICBpZiAobmFtZSBpbiBlbXB0eVN0eWxlKSB7XG4gICAgICByZXR1cm4gbmFtZVxuICAgIH1cbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG5cbiAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxuICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihvbGREYXRhLnN0eWxlKVxuICApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjdXIsIG5hbWU7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFN0YXRpY1N0eWxlID0gb2xkRGF0YS5zdGF0aWNTdHlsZTtcbiAgdmFyIG9sZFN0eWxlQmluZGluZyA9IG9sZERhdGEubm9ybWFsaXplZFN0eWxlIHx8IG9sZERhdGEuc3R5bGUgfHwge307XG5cbiAgLy8gaWYgc3RhdGljIHN0eWxlIGV4aXN0cywgc3R5bGViaW5kaW5nIGFscmVhZHkgbWVyZ2VkIGludG8gaXQgd2hlbiBkb2luZyBub3JtYWxpemVTdHlsZURhdGFcbiAgdmFyIG9sZFN0eWxlID0gb2xkU3RhdGljU3R5bGUgfHwgb2xkU3R5bGVCaW5kaW5nO1xuXG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyh2bm9kZS5kYXRhLnN0eWxlKSB8fCB7fTtcblxuICAvLyBzdG9yZSBub3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXG4gIC8vIG1ha2Ugc3VyZSB0byBjbG9uZSBpdCBpZiBpdCdzIHJlYWN0aXZlLCBzaW5jZSB0aGUgdXNlciBsaWtlbHkgd2FudHNcbiAgLy8gdG8gbXV0YXRlIGl0LlxuICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRTdHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXylcbiAgICA/IGV4dGVuZCh7fSwgc3R5bGUpXG4gICAgOiBzdHlsZTtcblxuICB2YXIgbmV3U3R5bGUgPSBnZXRTdHlsZSh2bm9kZSwgdHJ1ZSk7XG5cbiAgZm9yIChuYW1lIGluIG9sZFN0eWxlKSB7XG4gICAgaWYgKGlzVW5kZWYobmV3U3R5bGVbbmFtZV0pKSB7XG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCAnJyk7XG4gICAgfVxuICB9XG4gIGZvciAobmFtZSBpbiBuZXdTdHlsZSkge1xuICAgIGN1ciA9IG5ld1N0eWxlW25hbWVdO1xuICAgIGlmIChjdXIgIT09IG9sZFN0eWxlW25hbWVdKSB7XG4gICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgc2V0UHJvcChlbCwgbmFtZSwgY3VyID09IG51bGwgPyAnJyA6IGN1cik7XG4gICAgfVxuICB9XG59XG5cbnZhciBzdHlsZSA9IHtcbiAgY3JlYXRlOiB1cGRhdGVTdHlsZSxcbiAgdXBkYXRlOiB1cGRhdGVTdHlsZVxufTtcblxuLyogICovXG5cbnZhciB3aGl0ZXNwYWNlUkUgPSAvXFxzKy87XG5cbi8qKlxuICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gYWRkQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiO1xuICAgIGlmIChjdXIuaW5kZXhPZignICcgKyBjbHMgKyAnICcpIDwgMCkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIChjdXIgKyBjbHMpLnRyaW0oKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgIH1cbiAgICBpZiAoIWVsLmNsYXNzTGlzdC5sZW5ndGgpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAgICB2YXIgdGFyID0gJyAnICsgY2xzICsgJyAnO1xuICAgIHdoaWxlIChjdXIuaW5kZXhPZih0YXIpID49IDApIHtcbiAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICB9XG4gICAgY3VyID0gY3VyLnRyaW0oKTtcbiAgICBpZiAoY3VyKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY3VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpb24gKGRlZiQkMSkge1xuICBpZiAoIWRlZiQkMSkge1xuICAgIHJldHVyblxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgZGVmJCQxID09PSAnb2JqZWN0Jykge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBpZiAoZGVmJCQxLmNzcyAhPT0gZmFsc2UpIHtcbiAgICAgIGV4dGVuZChyZXMsIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZiQkMS5uYW1lIHx8ICd2JykpO1xuICAgIH1cbiAgICBleHRlbmQocmVzLCBkZWYkJDEpO1xuICAgIHJldHVybiByZXNcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmJCQxID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBhdXRvQ3NzVHJhbnNpdGlvbihkZWYkJDEpXG4gIH1cbn1cblxudmFyIGF1dG9Dc3NUcmFuc2l0aW9uID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB7XG4gICAgZW50ZXJDbGFzczogKG5hbWUgKyBcIi1lbnRlclwiKSxcbiAgICBlbnRlclRvQ2xhc3M6IChuYW1lICsgXCItZW50ZXItdG9cIiksXG4gICAgZW50ZXJBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1lbnRlci1hY3RpdmVcIiksXG4gICAgbGVhdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZVwiKSxcbiAgICBsZWF2ZVRvQ2xhc3M6IChuYW1lICsgXCItbGVhdmUtdG9cIiksXG4gICAgbGVhdmVBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZS1hY3RpdmVcIilcbiAgfVxufSk7XG5cbnZhciBoYXNUcmFuc2l0aW9uID0gaW5Ccm93c2VyICYmICFpc0lFOTtcbnZhciBUUkFOU0lUSU9OID0gJ3RyYW5zaXRpb24nO1xudmFyIEFOSU1BVElPTiA9ICdhbmltYXRpb24nO1xuXG4vLyBUcmFuc2l0aW9uIHByb3BlcnR5L2V2ZW50IHNuaWZmaW5nXG52YXIgdHJhbnNpdGlvblByb3AgPSAndHJhbnNpdGlvbic7XG52YXIgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3RyYW5zaXRpb25lbmQnO1xudmFyIGFuaW1hdGlvblByb3AgPSAnYW5pbWF0aW9uJztcbnZhciBhbmltYXRpb25FbmRFdmVudCA9ICdhbmltYXRpb25lbmQnO1xuaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh3aW5kb3cub250cmFuc2l0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICB3aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgdHJhbnNpdGlvblByb3AgPSAnV2Via2l0VHJhbnNpdGlvbic7XG4gICAgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICB9XG4gIGlmICh3aW5kb3cub25hbmltYXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgIHdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGFuaW1hdGlvblByb3AgPSAnV2Via2l0QW5pbWF0aW9uJztcbiAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xuICB9XG59XG5cbi8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxudmFyIHJhZiA9IGluQnJvd3NlclxuICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXG4gICAgOiBzZXRUaW1lb3V0XG4gIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKGZuKSB7IHJldHVybiBmbigpOyB9O1xuXG5mdW5jdGlvbiBuZXh0RnJhbWUgKGZuKSB7XG4gIHJhZihmdW5jdGlvbiAoKSB7XG4gICAgcmFmKGZuKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFRyYW5zaXRpb25DbGFzcyAoZWwsIGNscykge1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXMgfHwgKGVsLl90cmFuc2l0aW9uQ2xhc3NlcyA9IFtdKTtcbiAgaWYgKHRyYW5zaXRpb25DbGFzc2VzLmluZGV4T2YoY2xzKSA8IDApIHtcbiAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5wdXNoKGNscyk7XG4gICAgYWRkQ2xhc3MoZWwsIGNscyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICByZW1vdmUoZWwuX3RyYW5zaXRpb25DbGFzc2VzLCBjbHMpO1xuICB9XG4gIHJlbW92ZUNsYXNzKGVsLCBjbHMpO1xufVxuXG5mdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMgKFxuICBlbCxcbiAgZXhwZWN0ZWRUeXBlLFxuICBjYlxuKSB7XG4gIHZhciByZWYgPSBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKTtcbiAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgdmFyIHRpbWVvdXQgPSByZWYudGltZW91dDtcbiAgdmFyIHByb3BDb3VudCA9IHJlZi5wcm9wQ291bnQ7XG4gIGlmICghdHlwZSkgeyByZXR1cm4gY2IoKSB9XG4gIHZhciBldmVudCA9IHR5cGUgPT09IFRSQU5TSVRJT04gPyB0cmFuc2l0aW9uRW5kRXZlbnQgOiBhbmltYXRpb25FbmRFdmVudDtcbiAgdmFyIGVuZGVkID0gMDtcbiAgdmFyIGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG4gICAgY2IoKTtcbiAgfTtcbiAgdmFyIG9uRW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZS50YXJnZXQgPT09IGVsKSB7XG4gICAgICBpZiAoKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcbiAgICAgICAgZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcbiAgICAgIGVuZCgpO1xuICAgIH1cbiAgfSwgdGltZW91dCArIDEpO1xuICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG59XG5cbnZhciB0cmFuc2Zvcm1SRSA9IC9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87XG5cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25JbmZvIChlbCwgZXhwZWN0ZWRUeXBlKSB7XG4gIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIC8vIEpTRE9NIG1heSByZXR1cm4gdW5kZWZpbmVkIGZvciB0cmFuc2l0aW9uIHByb3BlcnRpZXNcbiAgdmFyIHRyYW5zaXRpb25EZWxheXMgPSAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0RlbGF5J10gfHwgJycpLnNwbGl0KCcsICcpO1xuICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XG4gIHZhciBhbmltYXRpb25EZWxheXMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciBhbmltYXRpb25EdXJhdGlvbnMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XG5cbiAgdmFyIHR5cGU7XG4gIHZhciB0aW1lb3V0ID0gMDtcbiAgdmFyIHByb3BDb3VudCA9IDA7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZXhwZWN0ZWRUeXBlID09PSBUUkFOU0lUSU9OKSB7XG4gICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IFRSQU5TSVRJT047XG4gICAgICB0aW1lb3V0ID0gdHJhbnNpdGlvblRpbWVvdXQ7XG4gICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBBTklNQVRJT04pIHtcbiAgICBpZiAoYW5pbWF0aW9uVGltZW91dCA+IDApIHtcbiAgICAgIHR5cGUgPSBBTklNQVRJT047XG4gICAgICB0aW1lb3V0ID0gYW5pbWF0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgdHlwZSA9IHRpbWVvdXQgPiAwXG4gICAgICA/IHRyYW5zaXRpb25UaW1lb3V0ID4gYW5pbWF0aW9uVGltZW91dFxuICAgICAgICA/IFRSQU5TSVRJT05cbiAgICAgICAgOiBBTklNQVRJT05cbiAgICAgIDogbnVsbDtcbiAgICBwcm9wQ291bnQgPSB0eXBlXG4gICAgICA/IHR5cGUgPT09IFRSQU5TSVRJT05cbiAgICAgICAgPyB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgICA6IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgIDogMDtcbiAgfVxuICB2YXIgaGFzVHJhbnNmb3JtID1cbiAgICB0eXBlID09PSBUUkFOU0lUSU9OICYmXG4gICAgdHJhbnNmb3JtUkUudGVzdChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnUHJvcGVydHknXSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogdHlwZSxcbiAgICB0aW1lb3V0OiB0aW1lb3V0LFxuICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgIGhhc1RyYW5zZm9ybTogaGFzVHJhbnNmb3JtXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGltZW91dCAoZGVsYXlzLCBkdXJhdGlvbnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgd2hpbGUgKGRlbGF5cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgZGVsYXlzID0gZGVsYXlzLmNvbmNhdChkZWxheXMpO1xuICB9XG5cbiAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGR1cmF0aW9ucy5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICByZXR1cm4gdG9NcyhkKSArIHRvTXMoZGVsYXlzW2ldKVxuICB9KSlcbn1cblxuLy8gT2xkIHZlcnNpb25zIG9mIENocm9taXVtIChiZWxvdyA2MS4wLjMxNjMuMTAwKSBmb3JtYXRzIGZsb2F0aW5nIHBvaW50ZXIgbnVtYmVyc1xuLy8gaW4gYSBsb2NhbGUtZGVwZW5kZW50IHdheSwgdXNpbmcgYSBjb21tYSBpbnN0ZWFkIG9mIGEgZG90LlxuLy8gSWYgY29tbWEgaXMgbm90IHJlcGxhY2VkIHdpdGggYSBkb3QsIHRoZSBpbnB1dCB3aWxsIGJlIHJvdW5kZWQgZG93biAoaS5lLiBhY3Rpbmdcbi8vIGFzIGEgZmxvb3IgZnVuY3Rpb24pIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvcnNcbmZ1bmN0aW9uIHRvTXMgKHMpIHtcbiAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKCcsJywgJy4nKSkgKiAxMDAwXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnRlciAodm5vZGUsIHRvZ2dsZURpc3BsYXkpIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuXG4gIC8vIGNhbGwgbGVhdmUgY2FsbGJhY2sgbm93XG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICBlbC5fbGVhdmVDYi5jYW5jZWxsZWQgPSB0cnVlO1xuICAgIGVsLl9sZWF2ZUNiKCk7XG4gIH1cblxuICB2YXIgZGF0YSA9IHJlc29sdmVUcmFuc2l0aW9uKHZub2RlLmRhdGEudHJhbnNpdGlvbik7XG4gIGlmIChpc1VuZGVmKGRhdGEpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgdmFyIGVudGVyQ2xhc3MgPSBkYXRhLmVudGVyQ2xhc3M7XG4gIHZhciBlbnRlclRvQ2xhc3MgPSBkYXRhLmVudGVyVG9DbGFzcztcbiAgdmFyIGVudGVyQWN0aXZlQ2xhc3MgPSBkYXRhLmVudGVyQWN0aXZlQ2xhc3M7XG4gIHZhciBhcHBlYXJDbGFzcyA9IGRhdGEuYXBwZWFyQ2xhc3M7XG4gIHZhciBhcHBlYXJUb0NsYXNzID0gZGF0YS5hcHBlYXJUb0NsYXNzO1xuICB2YXIgYXBwZWFyQWN0aXZlQ2xhc3MgPSBkYXRhLmFwcGVhckFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlRW50ZXIgPSBkYXRhLmJlZm9yZUVudGVyO1xuICB2YXIgZW50ZXIgPSBkYXRhLmVudGVyO1xuICB2YXIgYWZ0ZXJFbnRlciA9IGRhdGEuYWZ0ZXJFbnRlcjtcbiAgdmFyIGVudGVyQ2FuY2VsbGVkID0gZGF0YS5lbnRlckNhbmNlbGxlZDtcbiAgdmFyIGJlZm9yZUFwcGVhciA9IGRhdGEuYmVmb3JlQXBwZWFyO1xuICB2YXIgYXBwZWFyID0gZGF0YS5hcHBlYXI7XG4gIHZhciBhZnRlckFwcGVhciA9IGRhdGEuYWZ0ZXJBcHBlYXI7XG4gIHZhciBhcHBlYXJDYW5jZWxsZWQgPSBkYXRhLmFwcGVhckNhbmNlbGxlZDtcbiAgdmFyIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICAvLyBhY3RpdmVJbnN0YW5jZSB3aWxsIGFsd2F5cyBiZSB0aGUgPHRyYW5zaXRpb24+IGNvbXBvbmVudCBtYW5hZ2luZyB0aGlzXG4gIC8vIHRyYW5zaXRpb24uIE9uZSBlZGdlIGNhc2UgdG8gY2hlY2sgaXMgd2hlbiB0aGUgPHRyYW5zaXRpb24+IGlzIHBsYWNlZFxuICAvLyBhcyB0aGUgcm9vdCBub2RlIG9mIGEgY2hpbGQgY29tcG9uZW50LiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBjaGVja1xuICAvLyA8dHJhbnNpdGlvbj4ncyBwYXJlbnQgZm9yIGFwcGVhciBjaGVjay5cbiAgdmFyIGNvbnRleHQgPSBhY3RpdmVJbnN0YW5jZTtcbiAgdmFyIHRyYW5zaXRpb25Ob2RlID0gYWN0aXZlSW5zdGFuY2UuJHZub2RlO1xuICB3aGlsZSAodHJhbnNpdGlvbk5vZGUgJiYgdHJhbnNpdGlvbk5vZGUucGFyZW50KSB7XG4gICAgY29udGV4dCA9IHRyYW5zaXRpb25Ob2RlLmNvbnRleHQ7XG4gICAgdHJhbnNpdGlvbk5vZGUgPSB0cmFuc2l0aW9uTm9kZS5wYXJlbnQ7XG4gIH1cblxuICB2YXIgaXNBcHBlYXIgPSAhY29udGV4dC5faXNNb3VudGVkIHx8ICF2bm9kZS5pc1Jvb3RJbnNlcnQ7XG5cbiAgaWYgKGlzQXBwZWFyICYmICFhcHBlYXIgJiYgYXBwZWFyICE9PSAnJykge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIHN0YXJ0Q2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJDbGFzc1xuICAgID8gYXBwZWFyQ2xhc3NcbiAgICA6IGVudGVyQ2xhc3M7XG4gIHZhciBhY3RpdmVDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgPyBhcHBlYXJBY3RpdmVDbGFzc1xuICAgIDogZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIHRvQ2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJUb0NsYXNzXG4gICAgPyBhcHBlYXJUb0NsYXNzXG4gICAgOiBlbnRlclRvQ2xhc3M7XG5cbiAgdmFyIGJlZm9yZUVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYmVmb3JlQXBwZWFyIHx8IGJlZm9yZUVudGVyKVxuICAgIDogYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKHR5cGVvZiBhcHBlYXIgPT09ICdmdW5jdGlvbicgPyBhcHBlYXIgOiBlbnRlcilcbiAgICA6IGVudGVyO1xuICB2YXIgYWZ0ZXJFbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKGFmdGVyQXBwZWFyIHx8IGFmdGVyRW50ZXIpXG4gICAgOiBhZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWRIb29rID0gaXNBcHBlYXJcbiAgICA/IChhcHBlYXJDYW5jZWxsZWQgfHwgZW50ZXJDYW5jZWxsZWQpXG4gICAgOiBlbnRlckNhbmNlbGxlZDtcblxuICB2YXIgZXhwbGljaXRFbnRlckR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmVudGVyXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZXhwbGljaXRFbnRlckR1cmF0aW9uICE9IG51bGwpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiwgJ2VudGVyJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG5cbiAgdmFyIGNiID0gZWwuX2VudGVyQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgfVxuICAgICAgZW50ZXJDYW5jZWxsZWRIb29rICYmIGVudGVyQ2FuY2VsbGVkSG9vayhlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyRW50ZXJIb29rICYmIGFmdGVyRW50ZXJIb29rKGVsKTtcbiAgICB9XG4gICAgZWwuX2VudGVyQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoIXZub2RlLmRhdGEuc2hvdykge1xuICAgIC8vIHJlbW92ZSBwZW5kaW5nIGxlYXZlIGVsZW1lbnQgb24gZW50ZXIgYnkgaW5qZWN0aW5nIGFuIGluc2VydCBob29rXG4gICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICAgIHZhciBwZW5kaW5nTm9kZSA9IHBhcmVudCAmJiBwYXJlbnQuX3BlbmRpbmcgJiYgcGFyZW50Ll9wZW5kaW5nW3Zub2RlLmtleV07XG4gICAgICBpZiAocGVuZGluZ05vZGUgJiZcbiAgICAgICAgcGVuZGluZ05vZGUudGFnID09PSB2bm9kZS50YWcgJiZcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiXG4gICAgICApIHtcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiKCk7XG4gICAgICB9XG4gICAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzdGFydCBlbnRlciB0cmFuc2l0aW9uXG4gIGJlZm9yZUVudGVySG9vayAmJiBiZWZvcmVFbnRlckhvb2soZWwpO1xuICBpZiAoZXhwZWN0c0NTUykge1xuICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbikpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0RW50ZXJEdXJhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHZub2RlLmRhdGEuc2hvdykge1xuICAgIHRvZ2dsZURpc3BsYXkgJiYgdG9nZ2xlRGlzcGxheSgpO1xuICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgfVxuXG4gIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgIGNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVhdmUgKHZub2RlLCBybSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBlbnRlciBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSkge1xuICAgIGVsLl9lbnRlckNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2VudGVyQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gcm0oKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjc3MgPSBkYXRhLmNzcztcbiAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gIHZhciBsZWF2ZUNsYXNzID0gZGF0YS5sZWF2ZUNsYXNzO1xuICB2YXIgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3M7XG4gIHZhciBsZWF2ZUFjdGl2ZUNsYXNzID0gZGF0YS5sZWF2ZUFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlTGVhdmUgPSBkYXRhLmJlZm9yZUxlYXZlO1xuICB2YXIgbGVhdmUgPSBkYXRhLmxlYXZlO1xuICB2YXIgYWZ0ZXJMZWF2ZSA9IGRhdGEuYWZ0ZXJMZWF2ZTtcbiAgdmFyIGxlYXZlQ2FuY2VsbGVkID0gZGF0YS5sZWF2ZUNhbmNlbGxlZDtcbiAgdmFyIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmU7XG4gIHZhciBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGxlYXZlKTtcblxuICB2YXIgZXhwbGljaXRMZWF2ZUR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmxlYXZlXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNEZWYoZXhwbGljaXRMZWF2ZUR1cmF0aW9uKSkge1xuICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uLCAnbGVhdmUnLCB2bm9kZSk7XG4gIH1cblxuICB2YXIgY2IgPSBlbC5fbGVhdmVDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUuX3BlbmRpbmcpIHtcbiAgICAgIGVsLnBhcmVudE5vZGUuX3BlbmRpbmdbdm5vZGUua2V5XSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgfVxuICAgICAgbGVhdmVDYW5jZWxsZWQgJiYgbGVhdmVDYW5jZWxsZWQoZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBybSgpO1xuICAgICAgYWZ0ZXJMZWF2ZSAmJiBhZnRlckxlYXZlKGVsKTtcbiAgICB9XG4gICAgZWwuX2xlYXZlQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoZGVsYXlMZWF2ZSkge1xuICAgIGRlbGF5TGVhdmUocGVyZm9ybUxlYXZlKTtcbiAgfSBlbHNlIHtcbiAgICBwZXJmb3JtTGVhdmUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcmZvcm1MZWF2ZSAoKSB7XG4gICAgLy8gdGhlIGRlbGF5ZWQgbGVhdmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGxlZFxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICAvLyByZWNvcmQgbGVhdmluZyBlbGVtZW50XG4gICAgaWYgKCF2bm9kZS5kYXRhLnNob3cgJiYgZWwucGFyZW50Tm9kZSkge1xuICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgPSB7fSkpWyh2bm9kZS5rZXkpXSA9IHZub2RlO1xuICAgIH1cbiAgICBiZWZvcmVMZWF2ZSAmJiBiZWZvcmVMZWF2ZShlbCk7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgaWYgKCFjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgICAgaWYgKCF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRMZWF2ZUR1cmF0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxlYXZlICYmIGxlYXZlKGVsLCBjYik7XG4gICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICBjYigpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBvbmx5IHVzZWQgaW4gZGV2IG1vZGVcbmZ1bmN0aW9uIGNoZWNrRHVyYXRpb24gKHZhbCwgbmFtZSwgdm5vZGUpIHtcbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIFwiICtcbiAgICAgIFwiZ290IFwiICsgKEpTT04uc3RyaW5naWZ5KHZhbCkpICsgXCIuXCIsXG4gICAgICB2bm9kZS5jb250ZXh0XG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc05hTih2YWwpKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIE5hTiAtIFwiICtcbiAgICAgICd0aGUgZHVyYXRpb24gZXhwcmVzc2lvbiBtaWdodCBiZSBpbmNvcnJlY3QuJyxcbiAgICAgIHZub2RlLmNvbnRleHRcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbiAodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHRyYW5zaXRpb24gaG9vaydzIGFyZ3VtZW50IGxlbmd0aC4gVGhlIGhvb2sgbWF5IGJlOlxuICogLSBhIG1lcmdlZCBob29rIChpbnZva2VyKSB3aXRoIHRoZSBvcmlnaW5hbCBpbiAuZm5zXG4gKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAqIC0gYSBwbGFpbiBmdW5jdGlvbiAoLmxlbmd0aClcbiAqL1xuZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aCAoZm4pIHtcbiAgaWYgKGlzVW5kZWYoZm4pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdmFyIGludm9rZXJGbnMgPSBmbi5mbnM7XG4gIGlmIChpc0RlZihpbnZva2VyRm5zKSkge1xuICAgIC8vIGludm9rZXJcbiAgICByZXR1cm4gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChcbiAgICAgIEFycmF5LmlzQXJyYXkoaW52b2tlckZucylcbiAgICAgICAgPyBpbnZva2VyRm5zWzBdXG4gICAgICAgIDogaW52b2tlckZuc1xuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKGZuLl9sZW5ndGggfHwgZm4ubGVuZ3RoKSA+IDFcbiAgfVxufVxuXG5mdW5jdGlvbiBfZW50ZXIgKF8sIHZub2RlKSB7XG4gIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICBlbnRlcih2bm9kZSk7XG4gIH1cbn1cblxudmFyIHRyYW5zaXRpb24gPSBpbkJyb3dzZXIgPyB7XG4gIGNyZWF0ZTogX2VudGVyLFxuICBhY3RpdmF0ZTogX2VudGVyLFxuICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSQkMSAodm5vZGUsIHJtKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgICBsZWF2ZSh2bm9kZSwgcm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBybSgpO1xuICAgIH1cbiAgfVxufSA6IHt9O1xuXG52YXIgcGxhdGZvcm1Nb2R1bGVzID0gW1xuICBhdHRycyxcbiAga2xhc3MsXG4gIGV2ZW50cyxcbiAgZG9tUHJvcHMsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uXG5dO1xuXG4vKiAgKi9cblxuLy8gdGhlIGRpcmVjdGl2ZSBtb2R1bGUgc2hvdWxkIGJlIGFwcGxpZWQgbGFzdCwgYWZ0ZXIgYWxsXG4vLyBidWlsdC1pbiBtb2R1bGVzIGhhdmUgYmVlbiBhcHBsaWVkLlxudmFyIG1vZHVsZXMgPSBwbGF0Zm9ybU1vZHVsZXMuY29uY2F0KGJhc2VNb2R1bGVzKTtcblxudmFyIHBhdGNoID0gY3JlYXRlUGF0Y2hGdW5jdGlvbih7IG5vZGVPcHM6IG5vZGVPcHMsIG1vZHVsZXM6IG1vZHVsZXMgfSk7XG5cbi8qKlxuICogTm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IGxpa2UgYXR0YWNoaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIEVsZW1lbnRzLlxuICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKGlzSUU5KSB7XG4gIC8vIGh0dHA6Ly93d3cubWF0dHM0MTEuY29tL3Bvc3QvaW50ZXJuZXQtZXhwbG9yZXItOS1vbmlucHV0L1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoZWwgJiYgZWwudm1vZGVsKSB7XG4gICAgICB0cmlnZ2VyKGVsLCAnaW5wdXQnKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgZGlyZWN0aXZlID0ge1xuICBpbnNlcnRlZDogZnVuY3Rpb24gaW5zZXJ0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHtcbiAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgLy8gIzY5MDNcbiAgICAgIGlmIChvbGRWbm9kZS5lbG0gJiYgIW9sZFZub2RlLmVsbS5fdk9wdGlvbnMpIHtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyZWN0aXZlLmNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICB9XG4gICAgICBlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09ICd0ZXh0YXJlYScgfHwgaXNUZXh0SW5wdXRUeXBlKGVsLnR5cGUpKSB7XG4gICAgICBlbC5fdk1vZGlmaWVycyA9IGJpbmRpbmcubW9kaWZpZXJzO1xuICAgICAgaWYgKCFiaW5kaW5nLm1vZGlmaWVycy5sYXp5KSB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBvbkNvbXBvc2l0aW9uU3RhcnQpO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAvLyBTYWZhcmkgPCAxMC4yICYgVUlXZWJWaWV3IGRvZXNuJ3QgZmlyZSBjb21wb3NpdGlvbmVuZCB3aGVuXG4gICAgICAgIC8vIHN3aXRjaGluZyBmb2N1cyBiZWZvcmUgY29uZmlybWluZyBjb21wb3NpdGlvbiBjaG9pY2VcbiAgICAgICAgLy8gdGhpcyBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzb21lIGJyb3dzZXJzIGUuZy4gaU9TIENocm9tZVxuICAgICAgICAvLyBmaXJlcyBcImNoYW5nZVwiIGluc3RlYWQgb2YgXCJpbnB1dFwiIG9uIGF1dG9jb21wbGV0ZS5cbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXNJRTkpIHtcbiAgICAgICAgICBlbC52bW9kZWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIGNvbXBvbmVudFVwZGF0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAvLyBpbiBjYXNlIHRoZSBvcHRpb25zIHJlbmRlcmVkIGJ5IHYtZm9yIGhhdmUgY2hhbmdlZCxcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgdmFsdWUgaXMgb3V0LW9mLXN5bmMgd2l0aCB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAgICAgIC8vIGRldGVjdCBzdWNoIGNhc2VzIGFuZCBmaWx0ZXIgb3V0IHZhbHVlcyB0aGF0IG5vIGxvbmdlciBoYXMgYSBtYXRjaGluZ1xuICAgICAgLy8gb3B0aW9uIGluIHRoZSBET00uXG4gICAgICB2YXIgcHJldk9wdGlvbnMgPSBlbC5fdk9wdGlvbnM7XG4gICAgICB2YXIgY3VyT3B0aW9ucyA9IGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKTtcbiAgICAgIGlmIChjdXJPcHRpb25zLnNvbWUoZnVuY3Rpb24gKG8sIGkpIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHByZXZPcHRpb25zW2ldKTsgfSkpIHtcbiAgICAgICAgLy8gdHJpZ2dlciBjaGFuZ2UgZXZlbnQgaWZcbiAgICAgICAgLy8gbm8gbWF0Y2hpbmcgb3B0aW9uIGZvdW5kIGZvciBhdCBsZWFzdCBvbmUgdmFsdWVcbiAgICAgICAgdmFyIG5lZWRSZXNldCA9IGVsLm11bHRpcGxlXG4gICAgICAgICAgPyBiaW5kaW5nLnZhbHVlLnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGhhc05vTWF0Y2hpbmdPcHRpb24odiwgY3VyT3B0aW9ucyk7IH0pXG4gICAgICAgICAgOiBiaW5kaW5nLnZhbHVlICE9PSBiaW5kaW5nLm9sZFZhbHVlICYmIGhhc05vTWF0Y2hpbmdPcHRpb24oYmluZGluZy52YWx1ZSwgY3VyT3B0aW9ucyk7XG4gICAgICAgIGlmIChuZWVkUmVzZXQpIHtcbiAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtcbiAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzSUUgfHwgaXNFZGdlKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWN0dWFsbHlTZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gIHZhciB2YWx1ZSA9IGJpbmRpbmcudmFsdWU7XG4gIHZhciBpc011bHRpcGxlID0gZWwubXVsdGlwbGU7XG4gIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiPHNlbGVjdCBtdWx0aXBsZSB2LW1vZGVsPVxcXCJcIiArIChiaW5kaW5nLmV4cHJlc3Npb24pICsgXCJcXFwiPiBcIiArXG4gICAgICBcImV4cGVjdHMgYW4gQXJyYXkgdmFsdWUgZm9yIGl0cyBiaW5kaW5nLCBidXQgZ290IFwiICsgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpKSxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2VsZWN0ZWQsIG9wdGlvbjtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbC5vcHRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9wdGlvbiA9IGVsLm9wdGlvbnNbaV07XG4gICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgIHNlbGVjdGVkID0gbG9vc2VJbmRleE9mKHZhbHVlLCBnZXRWYWx1ZShvcHRpb24pKSA+IC0xO1xuICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsb29zZUVxdWFsKGdldFZhbHVlKG9wdGlvbiksIHZhbHVlKSkge1xuICAgICAgICBpZiAoZWwuc2VsZWN0ZWRJbmRleCAhPT0gaSkge1xuICAgICAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICBlbC5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzTm9NYXRjaGluZ09wdGlvbiAodmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZXZlcnkoZnVuY3Rpb24gKG8pIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHZhbHVlKTsgfSlcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUgKG9wdGlvbikge1xuICByZXR1cm4gJ192YWx1ZScgaW4gb3B0aW9uXG4gICAgPyBvcHRpb24uX3ZhbHVlXG4gICAgOiBvcHRpb24udmFsdWVcbn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0IChlKSB7XG4gIGUudGFyZ2V0LmNvbXBvc2luZyA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQgKGUpIHtcbiAgLy8gcHJldmVudCB0cmlnZ2VyaW5nIGFuIGlucHV0IGV2ZW50IGZvciBubyByZWFzb25cbiAgaWYgKCFlLnRhcmdldC5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgZS50YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gIHRyaWdnZXIoZS50YXJnZXQsICdpbnB1dCcpO1xufVxuXG5mdW5jdGlvbiB0cmlnZ2VyIChlbCwgdHlwZSkge1xuICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJyk7XG4gIGUuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xufVxuXG4vKiAgKi9cblxuLy8gcmVjdXJzaXZlbHkgc2VhcmNoIGZvciBwb3NzaWJsZSB0cmFuc2l0aW9uIGRlZmluZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgcm9vdFxuZnVuY3Rpb24gbG9jYXRlTm9kZSAodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmICghdm5vZGUuZGF0YSB8fCAhdm5vZGUuZGF0YS50cmFuc2l0aW9uKVxuICAgID8gbG9jYXRlTm9kZSh2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpXG4gICAgOiB2bm9kZVxufVxuXG52YXIgc2hvdyA9IHtcbiAgYmluZDogZnVuY3Rpb24gYmluZCAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSByZWYudmFsdWU7XG5cbiAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgIHZhciB0cmFuc2l0aW9uJCQxID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgdmFyIG9yaWdpbmFsRGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA9XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXk7XG4gICAgaWYgKHZhbHVlICYmIHRyYW5zaXRpb24kJDEpIHtcbiAgICAgIHZub2RlLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IG9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUgKGVsLCByZWYsIHZub2RlKSB7XG4gICAgdmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuICAgIHZhciBvbGRWYWx1ZSA9IHJlZi5vbGRWYWx1ZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdmFsdWUgPT09ICFvbGRWYWx1ZSkgeyByZXR1cm4gfVxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICBpZiAodHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVhdmUodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gZWwuX192T3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZCAoXG4gICAgZWwsXG4gICAgYmluZGluZyxcbiAgICB2bm9kZSxcbiAgICBvbGRWbm9kZSxcbiAgICBpc0Rlc3Ryb3lcbiAgKSB7XG4gICAgaWYgKCFpc0Rlc3Ryb3kpIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcGxhdGZvcm1EaXJlY3RpdmVzID0ge1xuICBtb2RlbDogZGlyZWN0aXZlLFxuICBzaG93OiBzaG93XG59O1xuXG4vKiAgKi9cblxudmFyIHRyYW5zaXRpb25Qcm9wcyA9IHtcbiAgbmFtZTogU3RyaW5nLFxuICBhcHBlYXI6IEJvb2xlYW4sXG4gIGNzczogQm9vbGVhbixcbiAgbW9kZTogU3RyaW5nLFxuICB0eXBlOiBTdHJpbmcsXG4gIGVudGVyQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVDbGFzczogU3RyaW5nLFxuICBlbnRlclRvQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVUb0NsYXNzOiBTdHJpbmcsXG4gIGVudGVyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVBY3RpdmVDbGFzczogU3RyaW5nLFxuICBhcHBlYXJDbGFzczogU3RyaW5nLFxuICBhcHBlYXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBhcHBlYXJUb0NsYXNzOiBTdHJpbmcsXG4gIGR1cmF0aW9uOiBbTnVtYmVyLCBTdHJpbmcsIE9iamVjdF1cbn07XG5cbi8vIGluIGNhc2UgdGhlIGNoaWxkIGlzIGFsc28gYW4gYWJzdHJhY3QgY29tcG9uZW50LCBlLmcuIDxrZWVwLWFsaXZlPlxuLy8gd2Ugd2FudCB0byByZWN1cnNpdmVseSByZXRyaWV2ZSB0aGUgcmVhbCBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWRcbmZ1bmN0aW9uIGdldFJlYWxDaGlsZCAodm5vZGUpIHtcbiAgdmFyIGNvbXBPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgaWYgKGNvbXBPcHRpb25zICYmIGNvbXBPcHRpb25zLkN0b3Iub3B0aW9ucy5hYnN0cmFjdCkge1xuICAgIHJldHVybiBnZXRSZWFsQ2hpbGQoZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChjb21wT3B0aW9ucy5jaGlsZHJlbikpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdFRyYW5zaXRpb25EYXRhIChjb21wKSB7XG4gIHZhciBkYXRhID0ge307XG4gIHZhciBvcHRpb25zID0gY29tcC4kb3B0aW9ucztcbiAgLy8gcHJvcHNcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMucHJvcHNEYXRhKSB7XG4gICAgZGF0YVtrZXldID0gY29tcFtrZXldO1xuICB9XG4gIC8vIGV2ZW50cy5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMgYW5kIHBhc3MgdGhlbSBkaXJlY3RseSB0byB0aGUgdHJhbnNpdGlvbiBtZXRob2RzXG4gIHZhciBsaXN0ZW5lcnMgPSBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIGZvciAodmFyIGtleSQxIGluIGxpc3RlbmVycykge1xuICAgIGRhdGFbY2FtZWxpemUoa2V5JDEpXSA9IGxpc3RlbmVyc1trZXkkMV07XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuZnVuY3Rpb24gcGxhY2Vob2xkZXIgKGgsIHJhd0NoaWxkKSB7XG4gIGlmICgvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHJhd0NoaWxkLnRhZykpIHtcbiAgICByZXR1cm4gaCgna2VlcC1hbGl2ZScsIHtcbiAgICAgIHByb3BzOiByYXdDaGlsZC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzUGFyZW50VHJhbnNpdGlvbiAodm5vZGUpIHtcbiAgd2hpbGUgKCh2bm9kZSA9IHZub2RlLnBhcmVudCkpIHtcbiAgICBpZiAodm5vZGUuZGF0YS50cmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1NhbWVDaGlsZCAoY2hpbGQsIG9sZENoaWxkKSB7XG4gIHJldHVybiBvbGRDaGlsZC5rZXkgPT09IGNoaWxkLmtleSAmJiBvbGRDaGlsZC50YWcgPT09IGNoaWxkLnRhZ1xufVxuXG52YXIgaXNOb3RUZXh0Tm9kZSA9IGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRhZyB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYyk7IH07XG5cbnZhciBpc1ZTaG93RGlyZWN0aXZlID0gZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQubmFtZSA9PT0gJ3Nob3cnOyB9O1xuXG52YXIgVHJhbnNpdGlvbiA9IHtcbiAgbmFtZTogJ3RyYW5zaXRpb24nLFxuICBwcm9wczogdHJhbnNpdGlvblByb3BzLFxuICBhYnN0cmFjdDogdHJ1ZSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHRleHQgbm9kZXMgKHBvc3NpYmxlIHdoaXRlc3BhY2VzKVxuICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGlzTm90VGV4dE5vZGUpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3YXJuIG11bHRpcGxlIGVsZW1lbnRzXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgd2FybihcbiAgICAgICAgJzx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQuIFVzZSAnICtcbiAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJyxcbiAgICAgICAgdGhpcy4kcGFyZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciBtb2RlID0gdGhpcy5tb2RlO1xuXG4gICAgLy8gd2FybiBpbnZhbGlkIG1vZGVcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgbW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJ1xuICAgICkge1xuICAgICAgd2FybihcbiAgICAgICAgJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHJhd0NoaWxkID0gY2hpbGRyZW5bMF07XG5cbiAgICAvLyBpZiB0aGlzIGlzIGEgY29tcG9uZW50IHJvb3Qgbm9kZSBhbmQgdGhlIGNvbXBvbmVudCdzXG4gICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgaWYgKGhhc1BhcmVudFRyYW5zaXRpb24odGhpcy4kdm5vZGUpKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0cmFuc2l0aW9uIGRhdGEgdG8gY2hpbGRcbiAgICAvLyB1c2UgZ2V0UmVhbENoaWxkKCkgdG8gaWdub3JlIGFic3RyYWN0IGNvbXBvbmVudHMgZS5nLiBrZWVwLWFsaXZlXG4gICAgdmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGVhdmluZykge1xuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgIH1cblxuICAgIC8vIGVuc3VyZSBhIGtleSB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgdm5vZGUgdHlwZSBhbmQgdG8gdGhpcyB0cmFuc2l0aW9uXG4gICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xuICAgIC8vIGR1cmluZyBlbnRlcmluZy5cbiAgICB2YXIgaWQgPSBcIl9fdHJhbnNpdGlvbi1cIiArICh0aGlzLl91aWQpICsgXCItXCI7XG4gICAgY2hpbGQua2V5ID0gY2hpbGQua2V5ID09IG51bGxcbiAgICAgID8gY2hpbGQuaXNDb21tZW50XG4gICAgICAgID8gaWQgKyAnY29tbWVudCdcbiAgICAgICAgOiBpZCArIGNoaWxkLnRhZ1xuICAgICAgOiBpc1ByaW1pdGl2ZShjaGlsZC5rZXkpXG4gICAgICAgID8gKFN0cmluZyhjaGlsZC5rZXkpLmluZGV4T2YoaWQpID09PSAwID8gY2hpbGQua2V5IDogaWQgKyBjaGlsZC5rZXkpXG4gICAgICAgIDogY2hpbGQua2V5O1xuXG4gICAgdmFyIGRhdGEgPSAoY2hpbGQuZGF0YSB8fCAoY2hpbGQuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcbiAgICB2YXIgb2xkUmF3Q2hpbGQgPSB0aGlzLl92bm9kZTtcbiAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuXG4gICAgLy8gbWFyayB2LXNob3dcbiAgICAvLyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIG1vZHVsZSBjYW4gaGFuZCBvdmVyIHRoZSBjb250cm9sIHRvIHRoZSBkaXJlY3RpdmVcbiAgICBpZiAoY2hpbGQuZGF0YS5kaXJlY3RpdmVzICYmIGNoaWxkLmRhdGEuZGlyZWN0aXZlcy5zb21lKGlzVlNob3dEaXJlY3RpdmUpKSB7XG4gICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9sZENoaWxkICYmXG4gICAgICBvbGRDaGlsZC5kYXRhICYmXG4gICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgIWlzQXN5bmNQbGFjZWhvbGRlcihvbGRDaGlsZCkgJiZcbiAgICAgIC8vICM2Njg3IGNvbXBvbmVudCByb290IGlzIGEgY29tbWVudCBub2RlXG4gICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmIG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcbiAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgIHZhciBvbGREYXRhID0gb2xkQ2hpbGQuZGF0YS50cmFuc2l0aW9uID0gZXh0ZW5kKHt9LCBkYXRhKTtcbiAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBkYXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcbiAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMkMS5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMkMS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xkUmF3Q2hpbGRcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsYXllZExlYXZlO1xuICAgICAgICB2YXIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkgeyBkZWxheWVkTGVhdmUoKTsgfTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnZGVsYXlMZWF2ZScsIGZ1bmN0aW9uIChsZWF2ZSkgeyBkZWxheWVkTGVhdmUgPSBsZWF2ZTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhd0NoaWxkXG4gIH1cbn07XG5cbi8qICAqL1xuXG52YXIgcHJvcHMgPSBleHRlbmQoe1xuICB0YWc6IFN0cmluZyxcbiAgbW92ZUNsYXNzOiBTdHJpbmdcbn0sIHRyYW5zaXRpb25Qcm9wcyk7XG5cbmRlbGV0ZSBwcm9wcy5tb2RlO1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0ge1xuICBwcm9wczogcHJvcHMsXG5cbiAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB1cGRhdGUgPSB0aGlzLl91cGRhdGU7XG4gICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh0aGlzJDEpO1xuICAgICAgLy8gZm9yY2UgcmVtb3ZpbmcgcGFzc1xuICAgICAgdGhpcyQxLl9fcGF0Y2hfXyhcbiAgICAgICAgdGhpcyQxLl92bm9kZSxcbiAgICAgICAgdGhpcyQxLmtlcHQsXG4gICAgICAgIGZhbHNlLCAvLyBoeWRyYXRpbmdcbiAgICAgICAgdHJ1ZSAvLyByZW1vdmVPbmx5ICghaW1wb3J0YW50LCBhdm9pZHMgdW5uZWNlc3NhcnkgbW92ZXMpXG4gICAgICApO1xuICAgICAgdGhpcyQxLl92bm9kZSA9IHRoaXMkMS5rZXB0O1xuICAgICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgICB1cGRhdGUuY2FsbCh0aGlzJDEsIHZub2RlLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3NwYW4nO1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdmFyIHRyYW5zaXRpb25EYXRhID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSByYXdDaGlsZHJlbltpXTtcbiAgICAgIGlmIChjLnRhZykge1xuICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goYyk7XG4gICAgICAgICAgbWFwW2Mua2V5XSA9IGNcbiAgICAgICAgICA7KGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHZhciBvcHRzID0gYy5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgIHZhciBuYW1lID0gb3B0cyA/IChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnIHx8ICcnKSA6IGMudGFnO1xuICAgICAgICAgIHdhcm4oKFwiPHRyYW5zaXRpb24tZ3JvdXA+IGNoaWxkcmVuIG11c3QgYmUga2V5ZWQ6IDxcIiArIG5hbWUgKyBcIj5cIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgdmFyIGtlcHQgPSBbXTtcbiAgICAgIHZhciByZW1vdmVkID0gW107XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwcmV2Q2hpbGRyZW4ubGVuZ3RoOyBpJDErKykge1xuICAgICAgICB2YXIgYyQxID0gcHJldkNoaWxkcmVuW2kkMV07XG4gICAgICAgIGMkMS5kYXRhLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgYyQxLmRhdGEucG9zID0gYyQxLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKG1hcFtjJDEua2V5XSkge1xuICAgICAgICAgIGtlcHQucHVzaChjJDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZWQucHVzaChjJDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmtlcHQgPSBoKHRhZywgbnVsbCwga2VwdCk7XG4gICAgICB0aGlzLnJlbW92ZWQgPSByZW1vdmVkO1xuICAgIH1cblxuICAgIHJldHVybiBoKHRhZywgbnVsbCwgY2hpbGRyZW4pXG4gIH0sXG5cbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCAoKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRyZW47XG4gICAgdmFyIG1vdmVDbGFzcyA9IHRoaXMubW92ZUNsYXNzIHx8ICgodGhpcy5uYW1lIHx8ICd2JykgKyAnLW1vdmUnKTtcbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8gdGhyZWUgbG9vcHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXG4gICAgLy8gaW4gZWFjaCBpdGVyYXRpb24gLSB3aGljaCBoZWxwcyBwcmV2ZW50IGxheW91dCB0aHJhc2hpbmcuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChjYWxsUGVuZGluZ0Nicyk7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChyZWNvcmRQb3NpdGlvbik7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChhcHBseVRyYW5zbGF0aW9uKTtcblxuICAgIC8vIGZvcmNlIHJlZmxvdyB0byBwdXQgZXZlcnl0aGluZyBpbiBwb3NpdGlvblxuICAgIC8vIGFzc2lnbiB0byB0aGlzIHRvIGF2b2lkIGJlaW5nIHJlbW92ZWQgaW4gdHJlZS1zaGFraW5nXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdGhpcy5fcmVmbG93ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoYy5kYXRhLm1vdmVkKSB7XG4gICAgICAgIHZhciBlbCA9IGMuZWxtO1xuICAgICAgICB2YXIgcyA9IGVsLnN0eWxlO1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcnO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgZWwuX21vdmVDYiA9IGZ1bmN0aW9uIGNiIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IGVsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFlIHx8IC90cmFuc2Zvcm0kLy50ZXN0KGUucHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kRXZlbnQsIGNiKTtcbiAgICAgICAgICAgIGVsLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc01vdmU6IGZ1bmN0aW9uIGhhc01vdmUgKGVsLCBtb3ZlQ2xhc3MpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFoYXNUcmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodGhpcy5faGFzTW92ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZVxuICAgICAgfVxuICAgICAgLy8gRGV0ZWN0IHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIHRoZSBtb3ZlIGNsYXNzIGFwcGxpZWQgaGFzXG4gICAgICAvLyBDU1MgdHJhbnNpdGlvbnMuIFNpbmNlIHRoZSBlbGVtZW50IG1heSBiZSBpbnNpZGUgYW4gZW50ZXJpbmdcbiAgICAgIC8vIHRyYW5zaXRpb24gYXQgdGhpcyB2ZXJ5IG1vbWVudCwgd2UgbWFrZSBhIGNsb25lIG9mIGl0IGFuZCByZW1vdmVcbiAgICAgIC8vIGFsbCBvdGhlciB0cmFuc2l0aW9uIGNsYXNzZXMgYXBwbGllZCB0byBlbnN1cmUgb25seSB0aGUgbW92ZSBjbGFzc1xuICAgICAgLy8gaXMgYXBwbGllZC5cbiAgICAgIHZhciBjbG9uZSA9IGVsLmNsb25lTm9kZSgpO1xuICAgICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgICBlbC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7IHJlbW92ZUNsYXNzKGNsb25lLCBjbHMpOyB9KTtcbiAgICAgIH1cbiAgICAgIGFkZENsYXNzKGNsb25lLCBtb3ZlQ2xhc3MpO1xuICAgICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuJGVsLmFwcGVuZENoaWxkKGNsb25lKTtcbiAgICAgIHZhciBpbmZvID0gZ2V0VHJhbnNpdGlvbkluZm8oY2xvbmUpO1xuICAgICAgdGhpcy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgcmV0dXJuICh0aGlzLl9oYXNNb3ZlID0gaW5mby5oYXNUcmFuc2Zvcm0pXG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBjYWxsUGVuZGluZ0NicyAoYykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9tb3ZlQ2IpIHtcbiAgICBjLmVsbS5fbW92ZUNiKCk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjLmVsbS5fZW50ZXJDYikge1xuICAgIGMuZWxtLl9lbnRlckNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24gKGMpIHtcbiAgYy5kYXRhLm5ld1BvcyA9IGMuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdW5jdGlvbiBhcHBseVRyYW5zbGF0aW9uIChjKSB7XG4gIHZhciBvbGRQb3MgPSBjLmRhdGEucG9zO1xuICB2YXIgbmV3UG9zID0gYy5kYXRhLm5ld1BvcztcbiAgdmFyIGR4ID0gb2xkUG9zLmxlZnQgLSBuZXdQb3MubGVmdDtcbiAgdmFyIGR5ID0gb2xkUG9zLnRvcCAtIG5ld1Bvcy50b3A7XG4gIGlmIChkeCB8fCBkeSkge1xuICAgIGMuZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgdmFyIHMgPSBjLmVsbS5zdHlsZTtcbiAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIgKyBkeCArIFwicHgsXCIgKyBkeSArIFwicHgpXCI7XG4gICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICB9XG59XG5cbnZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gIFRyYW5zaXRpb246IFRyYW5zaXRpb24sXG4gIFRyYW5zaXRpb25Hcm91cDogVHJhbnNpdGlvbkdyb3VwXG59O1xuXG4vKiAgKi9cblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBzcGVjaWZpYyB1dGlsc1xuVnVlLmNvbmZpZy5tdXN0VXNlUHJvcCA9IG11c3RVc2VQcm9wO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkVGFnID0gaXNSZXNlcnZlZFRhZztcblZ1ZS5jb25maWcuaXNSZXNlcnZlZEF0dHIgPSBpc1Jlc2VydmVkQXR0cjtcblZ1ZS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlID0gZ2V0VGFnTmFtZXNwYWNlO1xuVnVlLmNvbmZpZy5pc1Vua25vd25FbGVtZW50ID0gaXNVbmtub3duRWxlbWVudDtcblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBydW50aW1lIGRpcmVjdGl2ZXMgJiBjb21wb25lbnRzXG5leHRlbmQoVnVlLm9wdGlvbnMuZGlyZWN0aXZlcywgcGxhdGZvcm1EaXJlY3RpdmVzKTtcbmV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBwbGF0Zm9ybUNvbXBvbmVudHMpO1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHBhdGNoIGZ1bmN0aW9uXG5WdWUucHJvdG90eXBlLl9fcGF0Y2hfXyA9IGluQnJvd3NlciA/IHBhdGNoIDogbm9vcDtcblxuLy8gcHVibGljIG1vdW50IG1ldGhvZFxuVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICBlbCA9IGVsICYmIGluQnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG1vdW50Q29tcG9uZW50KHRoaXMsIGVsLCBoeWRyYXRpbmcpXG59O1xuXG4vLyBkZXZ0b29scyBnbG9iYWwgaG9va1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpbkJyb3dzZXIpIHtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgaWYgKGRldnRvb2xzKSB7XG4gICAgICAgIGRldnRvb2xzLmVtaXQoJ2luaXQnLCBWdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgICAgJ0Rvd25sb2FkIHRoZSBWdWUgRGV2dG9vbHMgZXh0ZW5zaW9uIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOlxcbicgK1xuICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWRldnRvb2xzJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgY29uZmlnLnByb2R1Y3Rpb25UaXAgIT09IGZhbHNlICYmXG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICApIHtcbiAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFxuICAgICAgICBcIllvdSBhcmUgcnVubmluZyBWdWUgaW4gZGV2ZWxvcG1lbnQgbW9kZS5cXG5cIiArXG4gICAgICAgIFwiTWFrZSBzdXJlIHRvIHR1cm4gb24gcHJvZHVjdGlvbiBtb2RlIHdoZW4gZGVwbG95aW5nIGZvciBwcm9kdWN0aW9uLlxcblwiICtcbiAgICAgICAgXCJTZWUgbW9yZSB0aXBzIGF0IGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2RlcGxveW1lbnQuaHRtbFwiXG4gICAgICApO1xuICAgIH1cbiAgfSwgMCk7XG59XG5cbi8qICAqL1xuXG5leHBvcnQgZGVmYXVsdCBWdWU7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0Vtb2ppLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MzRhZDk0NiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9FbW9qaS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0Vtb2ppLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzUzNGFkOTQ2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzUzNGFkOTQ2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9FbW9qaS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTM0YWQ5NDYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNTM0YWQ5NDYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL0Vtb2ppLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9FbW9qaS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9FbW9qaS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRW1vamkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUzNGFkOTQ2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQxNmU5MDg0JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL1BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdkMTZlOTA4NCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdkMTZlOTA4NCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMTZlOTA4NCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdkMTZlOTA4NCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvUGlja2VyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vUGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQxNmU5MDg0JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hbmNob3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MTE4ODEwNCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9hbmNob3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYW5jaG9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc1MTE4ODEwNCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc1MTE4ODEwNCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vYW5jaG9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTExODgxMDQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNTExODgxMDQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYW5jaG9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYW5jaG9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTExODgxMDQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NhdGVnb3J5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNzZjZGEwZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NhdGVnb3J5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzM3NmNkYTBlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzM3NmNkYTBlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc2Y2RhMGUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMzc2Y2RhMGUnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL2NhdGVnb3J5LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2F0ZWdvcnkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM3NmNkYTBlJlwiIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBBbmNob3JzIH0gZnJvbSAnLi9hbmNob3JzLnZ1ZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2F0ZWdvcnkgfSBmcm9tICcuL2NhdGVnb3J5LnZ1ZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHJldmlldyB9IGZyb20gJy4vcHJldmlldy52dWUnXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gJy4vc2VhcmNoLnZ1ZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2tpbnMgfSBmcm9tICcuL3NraW5zLnZ1ZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW1vamkgfSBmcm9tICcuL0Vtb2ppLnZ1ZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGlja2VyIH0gZnJvbSAnLi9QaWNrZXIudnVlJ1xuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNTA1NmMzMCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHJldmlldy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCczNTA1NmMzMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCczNTA1NmMzMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHJldmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzUwNTZjMzAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMzUwNTZjMzAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL3ByZXZpZXcudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3ByZXZpZXcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJldmlldy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJldmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzUwNTZjMzAmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3NlYXJjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGFkNDFiYjgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc2VhcmNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc2VhcmNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzRhZDQxYmI4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzRhZDQxYmI4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRhZDQxYmI4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzRhZDQxYmI4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvY29tcG9uZW50cy9zZWFyY2gudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NlYXJjaC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NlYXJjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGFkNDFiYjgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3NraW5zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYzYxNDg5NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NraW5zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzFjNjE0ODk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzFjNjE0ODk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9za2lucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWM2MTQ4OTQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWM2MTQ4OTQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL3NraW5zLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2tpbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFjNjE0ODk0JlwiIiwiaW1wb3J0IHN0b3JlIGZyb20gJy4vdXRpbHMvc3RvcmUnXG5pbXBvcnQgeyB1bmNvbXByZXNzIH0gZnJvbSAnLi91dGlscy9kYXRhJ1xuaW1wb3J0IGZyZXF1ZW50bHkgZnJvbSAnLi91dGlscy9mcmVxdWVudGx5J1xuXG5leHBvcnQge1xuICBQaWNrZXIsXG4gIEVtb2ppLFxuICBBbmNob3JzLFxuICBQcmV2aWV3LFxuICBTZWFyY2gsXG4gIENhdGVnb3J5LFxuICBTa2lucyxcbn0gZnJvbSAnLi9jb21wb25lbnRzJ1xuXG5leHBvcnQgeyBFbW9qaUluZGV4LCBFbW9qaVZpZXcsIEVtb2ppRGF0YSwgc2FuaXRpemUgfSBmcm9tICcuL3V0aWxzL2Vtb2ppLWRhdGEnXG5leHBvcnQgeyB1bmNvbXByZXNzLCBzdG9yZSwgZnJlcXVlbnRseSB9XG4iLCJjb25zdCBfU3RyaW5nID0gU3RyaW5nXG5cbmV4cG9ydCBkZWZhdWx0IF9TdHJpbmcuZnJvbUNvZGVQb2ludCB8fFxuICBmdW5jdGlvbiBzdHJpbmdGcm9tQ29kZVBvaW50KCkge1xuICAgIHZhciBNQVhfU0laRSA9IDB4NDAwMFxuICAgIHZhciBjb2RlVW5pdHMgPSBbXVxuICAgIHZhciBoaWdoU3Vycm9nYXRlXG4gICAgdmFyIGxvd1N1cnJvZ2F0ZVxuICAgIHZhciBpbmRleCA9IC0xXG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIHZhciByZXN1bHQgPSAnJ1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pXG4gICAgICBpZiAoXG4gICAgICAgICFpc0Zpbml0ZShjb2RlUG9pbnQpIHx8IC8vIGBOYU5gLCBgK0luZmluaXR5YCwgb3IgYC1JbmZpbml0eWBcbiAgICAgICAgY29kZVBvaW50IDwgMCB8fCAvLyBub3QgYSB2YWxpZCBVbmljb2RlIGNvZGUgcG9pbnRcbiAgICAgICAgY29kZVBvaW50ID4gMHgxMGZmZmYgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG4gICAgICAgIE1hdGguZmxvb3IoY29kZVBvaW50KSAhPSBjb2RlUG9pbnQgLy8gbm90IGFuIGludGVnZXJcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQ6ICcgKyBjb2RlUG9pbnQpXG4gICAgICB9XG4gICAgICBpZiAoY29kZVBvaW50IDw9IDB4ZmZmZikge1xuICAgICAgICAvLyBCTVAgY29kZSBwb2ludFxuICAgICAgICBjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW4gc3Vycm9nYXRlIGhhbHZlc1xuICAgICAgICAvLyBodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuICAgICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgICBoaWdoU3Vycm9nYXRlID0gKGNvZGVQb2ludCA+PiAxMCkgKyAweGQ4MDBcbiAgICAgICAgbG93U3Vycm9nYXRlID0gKGNvZGVQb2ludCAlIDB4NDAwKSArIDB4ZGMwMFxuICAgICAgICBjb2RlVW5pdHMucHVzaChoaWdoU3Vycm9nYXRlLCBsb3dTdXJyb2dhdGUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggKyAxID09PSBsZW5ndGggfHwgY29kZVVuaXRzLmxlbmd0aCA+IE1BWF9TSVpFKSB7XG4gICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cylcbiAgICAgICAgY29kZVVuaXRzLmxlbmd0aCA9IDBcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG4iLCJjb25zdCBTVkdzID0ge1xuICBhY3Rpdml0eTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEyIDBDNS4zNzMgMCAwIDUuMzcyIDAgMTJjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMiA2LjYyOCAwIDEyLTUuMzczIDEyLTEyIDAtNi42MjgtNS4zNzItMTItMTItMTJtOS45NDkgMTFIMTcuMDVjLjIyNC0yLjUyNyAxLjIzMi00Ljc3MyAxLjk2OC02LjExM0E5Ljk2NiA5Ljk2NiAwIDAgMSAyMS45NDkgMTFNMTMgMTFWMi4wNTFhOS45NDUgOS45NDUgMCAwIDEgNC40MzIgMS41NjRjLS44NTggMS40OTEtMi4xNTYgNC4yMi0yLjM5MiA3LjM4NUgxM3ptLTIgMEg4Ljk2MWMtLjIzOC0zLjE2NS0xLjUzNi01Ljg5NC0yLjM5My03LjM4NUE5Ljk1IDkuOTUgMCAwIDEgMTEgMi4wNTFWMTF6bTAgMnY4Ljk0OWE5LjkzNyA5LjkzNyAwIDAgMS00LjQzMi0xLjU2NGMuODU3LTEuNDkyIDIuMTU1LTQuMjIxIDIuMzkzLTcuMzg1SDExem00LjA0IDBjLjIzNiAzLjE2NCAxLjUzNCA1Ljg5MyAyLjM5MiA3LjM4NUE5LjkyIDkuOTIgMCAwIDEgMTMgMjEuOTQ5VjEzaDIuMDR6TTQuOTgyIDQuODg3QzUuNzE4IDYuMjI3IDYuNzI2IDguNDczIDYuOTUxIDExaC00LjlhOS45NzcgOS45NzcgMCAwIDEgMi45MzEtNi4xMTNNMi4wNTEgMTNoNC45Yy0uMjI2IDIuNTI3LTEuMjMzIDQuNzcxLTEuOTY5IDYuMTEzQTkuOTcyIDkuOTcyIDAgMCAxIDIuMDUxIDEzbTE2Ljk2NyA2LjExM2MtLjczNS0xLjM0Mi0xLjc0NC0zLjU4Ni0xLjk2OC02LjExM2g0Ljg5OWE5Ljk2MSA5Ljk2MSAwIDAgMS0yLjkzMSA2LjExM1wiLz48L3N2Zz5gLFxuXG4gIGN1c3RvbTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMi4wMDAwMDAsIDEuMDAwMDAwKVwiPjxyZWN0IGlkPVwiUmVjdGFuZ2xlXCIgeD1cIjhcIiB5PVwiMFwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjIxXCIgcng9XCIxLjVcIj48L3JlY3Q+PHJlY3QgaWQ9XCJSZWN0YW5nbGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoOS44NDMsIDEwLjU0OSkgcm90YXRlKDYwKSB0cmFuc2xhdGUoLTkuODQzLCAtMTAuNTQ5KSBcIiB4PVwiOC4zNDNcIiB5PVwiMC4wNDlcIiB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIyMVwiIHJ4PVwiMS41XCI+PC9yZWN0PjxyZWN0IGlkPVwiUmVjdGFuZ2xlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDkuODQzLCAxMC41NDkpIHJvdGF0ZSgtNjApIHRyYW5zbGF0ZSgtOS44NDMsIC0xMC41NDkpIFwiIHg9XCI4LjM0M1wiIHk9XCIwLjA0OVwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjIxXCIgcng9XCIxLjVcIj48L3JlY3Q+PC9nPjwvc3ZnPmAsXG5cbiAgZmxhZ3M6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0wIDBsNi4wODQgMjRIOEwxLjkxNiAwek0yMSA1aC00bC0xLTRINGwzIDEyaDNsMSA0aDEzTDIxIDV6TTYuNTYzIDNoNy44NzVsMiA4SDguNTYzbC0yLTh6bTguODMyIDEwbC0yLjg1NiAxLjkwNEwxMi4wNjMgMTNoMy4zMzJ6TTE5IDEzbC0xLjUtNmgxLjkzOGwyIDhIMTZsMy0yelwiLz48L3N2Zz5gLFxuXG4gIGZvb2RzOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTcgNC45NzhjLTEuODM4IDAtMi44NzYuMzk2LTMuNjguOTM0LjUxMy0xLjE3MiAxLjc2OC0yLjkzNCA0LjY4LTIuOTM0YTEgMSAwIDAgMCAwLTJjLTIuOTIxIDAtNC42MjkgMS4zNjUtNS41NDcgMi41MTItLjA2NC4wNzgtLjExOS4xNjItLjE4LjI0NEMxMS43MyAxLjgzOCAxMC43OTguMDIzIDkuMjA3LjAyMyA4LjU3OS4wMjIgNy44NS4zMDYgNyAuOTc4IDUuMDI3IDIuNTQgNS4zMjkgMy45MDIgNi40OTIgNC45OTkgMy42MDkgNS4yMjIgMCA3LjM1MiAwIDEyLjk2OWMwIDQuNTgyIDQuOTYxIDExLjAwOSA5IDExLjAwOSAxLjk3NSAwIDIuMzcxLS40ODYgMy0xIC42MjkuNTE0IDEuMDI1IDEgMyAxIDQuMDM5IDAgOS02LjQxOCA5LTExIDAtNS45NTMtNC4wNTUtOC03LThNOC4yNDIgMi41NDZjLjY0MS0uNTA4Ljk0My0uNTIzLjk2NS0uNTIzLjQyNi4xNjkuOTc1IDEuNDA1IDEuMzU3IDMuMDU1LTEuNTI3LS42MjktMi43NDEtMS4zNTItMi45OC0xLjg0Ni4wNTktLjExMi4yNDEtLjM1Ni42NTgtLjY4Nk0xNSAyMS45NzhjLTEuMDggMC0xLjIxLS4xMDktMS41NTktLjQwMmwtLjE3Ni0uMTQ2Yy0uMzY3LS4zMDItLjgxNi0uNDUyLTEuMjY2LS40NTJzLS44OTguMTUtMS4yNjYuNDUybC0uMTc2LjE0NmMtLjM0Ny4yOTItLjQ3Ny40MDItMS41NTcuNDAyLTIuODEzIDAtNy01LjM4OS03LTkuMDA5IDAtNS44MjMgNC40ODgtNS45OTEgNS01Ljk5MSAxLjkzOSAwIDIuNDg0LjQ3MSAzLjM4NyAxLjI1MWwuMzIzLjI3NmExLjk5NSAxLjk5NSAwIDAgMCAyLjU4IDBsLjMyMy0uMjc2Yy45MDItLjc4IDEuNDQ3LTEuMjUxIDMuMzg3LTEuMjUxLjUxMiAwIDUgLjE2OCA1IDYgMCAzLjYxNy00LjE4NyA5LTcgOVwiLz48L3N2Zz5gLFxuXG4gIG5hdHVyZTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE1LjUgOGExLjUgMS41IDAgMSAwIC4wMDEgMy4wMDFBMS41IDEuNSAwIDAgMCAxNS41IDhNOC41IDhhMS41IDEuNSAwIDEgMCAuMDAxIDMuMDAxQTEuNSAxLjUgMCAwIDAgOC41IDhcIi8+PHBhdGggZD1cIk0xOC45MzMgMGgtLjAyN2MtLjk3IDAtMi4xMzguNzg3LTMuMDE4IDEuNDk3LTEuMjc0LS4zNzQtMi42MTItLjUxLTMuODg3LS41MS0xLjI4NSAwLTIuNjE2LjEzMy0zLjg3NC41MTdDNy4yNDUuNzkgNi4wNjkgMCA1LjA5MyAwaC0uMDI3QzMuMzUyIDAgLjA3IDIuNjcuMDAyIDcuMDI2Yy0uMDM5IDIuNDc5LjI3NiA0LjIzOCAxLjA0IDUuMDEzLjI1NC4yNTguODgyLjY3NyAxLjI5NS44ODIuMTkxIDMuMTc3LjkyMiA1LjIzOCAyLjUzNiA2LjM4Ljg5Ny42MzcgMi4xODcuOTQ5IDMuMiAxLjEwMkM4LjA0IDIwLjYgOCAyMC43OTUgOCAyMWMwIDEuNzczIDIuMzUgMyA0IDMgMS42NDggMCA0LTEuMjI3IDQtMyAwLS4yMDEtLjAzOC0uMzkzLS4wNzItLjU4NiAyLjU3My0uMzg1IDUuNDM1LTEuODc3IDUuOTI1LTcuNTg3LjM5Ni0uMjIuODg3LS41NjggMS4xMDQtLjc4OC43NjMtLjc3NCAxLjA3OS0yLjUzNCAxLjA0LTUuMDEzQzIzLjkyOSAyLjY3IDIwLjY0NiAwIDE4LjkzMyAwTTMuMjIzIDkuMTM1Yy0uMjM3LjI4MS0uODM3IDEuMTU1LS44ODQgMS4yMzgtLjE1LS40MS0uMzY4LTEuMzQ5LS4zMzctMy4yOTEuMDUxLTMuMjgxIDIuNDc4LTQuOTcyIDMuMDkxLTUuMDMxLjI1Ni4wMTUuNzMxLjI3IDEuMjY1LjY0Ni0xLjExIDEuMTcxLTIuMjc1IDIuOTE1LTIuMzUyIDUuMTI1LS4xMzMuNTQ2LS4zOTguODU4LS43ODMgMS4zMTNNMTIgMjJjLS45MDEgMC0xLjk1NC0uNjkzLTItMSAwLS42NTQuNDc1LTEuMjM2IDEtMS42MDJWMjBhMSAxIDAgMSAwIDIgMHYtLjYwMmMuNTI0LjM2NSAxIC45NDcgMSAxLjYwMi0uMDQ2LjMwNy0xLjA5OSAxLTIgMW0zLTMuNDh2LjAyYTQuNzUyIDQuNzUyIDAgMCAwLTEuMjYyLTEuMDJjMS4wOTItLjUxNiAyLjIzOS0xLjMzNCAyLjIzOS0yLjIxNyAwLTEuODQyLTEuNzgxLTIuMTk1LTMuOTc3LTIuMTk1LTIuMTk2IDAtMy45NzguMzU0LTMuOTc4IDIuMTk1IDAgLjg4MyAxLjE0OCAxLjcwMSAyLjIzOCAyLjIxN0E0LjggNC44IDAgMCAwIDkgMTguNTM5di0uMDI1Yy0xLS4wNzYtMi4xODItLjI4MS0yLjk3My0uODQyLTEuMzAxLS45Mi0xLjgzOC0zLjA0NS0xLjg1My02LjQ3OGwuMDIzLS4wNDFjLjQ5Ni0uODI2IDEuNDktMS40NSAxLjgwNC0zLjEwMiAwLTIuMDQ3IDEuMzU3LTMuNjMxIDIuMzYyLTQuNTIyQzkuMzcgMy4xNzggMTAuNTU1IDMgMTEuOTQ4IDNjMS40NDcgMCAyLjY4NS4xOTIgMy43MzMuNTcgMSAuOSAyLjMxNiAyLjQ2NSAyLjMxNiA0LjQ4LjMxMyAxLjY1MSAxLjMwNyAyLjI3NSAxLjgwMyAzLjEwMi4wMzUuMDU4LjA2OC4xMTcuMTAyLjE3OC0uMDU5IDUuOTY3LTEuOTQ5IDcuMDEtNC45MDIgNy4xOW02LjYyOC04LjIwMmMtLjAzNy0uMDY1LS4wNzQtLjEzLS4xMTMtLjE5NWE3LjU4NyA3LjU4NyAwIDAgMC0uNzM5LS45ODdjLS4zODUtLjQ1NS0uNjQ4LS43NjgtLjc4Mi0xLjMxMy0uMDc2LTIuMjA5LTEuMjQxLTMuOTU0LTIuMzUzLTUuMTI0LjUzMS0uMzc2IDEuMDA0LS42MyAxLjI2MS0uNjQ3LjYzNi4wNzEgMy4wNDQgMS43NjQgMy4wOTYgNS4wMzEuMDI3IDEuODEtLjM0NyAzLjIxOC0uMzcgMy4yMzVcIi8+PC9zdmc+YCxcblxuICBvYmplY3RzOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTIgMGE5IDkgMCAwIDAtNSAxNi40ODJWMjFzMi4wMzUgMyA1IDMgNS0zIDUtM3YtNC41MThBOSA5IDAgMCAwIDEyIDB6bTAgMmMzLjg2IDAgNyAzLjE0MSA3IDdzLTMuMTQgNy03IDctNy0zLjE0MS03LTcgMy4xNC03IDctN3pNOSAxNy40NzdjLjk0LjMzMiAxLjk0Ni41MjMgMyAuNTIzczIuMDYtLjE5IDMtLjUyM3YuODM0Yy0uOTEuNDM2LTEuOTI1LjY4OS0zIC42ODlhNi45MjQgNi45MjQgMCAwIDEtMy0uNjl2LS44MzN6bS4yMzYgMy4wN0E4Ljg1NCA4Ljg1NCAwIDAgMCAxMiAyMWMuOTY1IDAgMS44ODgtLjE2NyAyLjc1OC0uNDUxQzE0LjE1NSAyMS4xNzMgMTMuMTUzIDIyIDEyIDIyYy0xLjEwMiAwLTIuMTE3LS43ODktMi43NjQtMS40NTN6XCIvPjxwYXRoIGQ9XCJNMTQuNzQ1IDEyLjQ0OWgtLjAwNGMtLjg1Mi0uMDI0LTEuMTg4LS44NTgtMS41NzctMS44MjQtLjQyMS0xLjA2MS0uNzAzLTEuNTYxLTEuMTgyLTEuNTY2aC0uMDA5Yy0uNDgxIDAtLjc4My40OTctMS4yMzUgMS41MzctLjQzNi45ODItLjgwMSAxLjgxMS0xLjYzNiAxLjc5MWwtLjI3Ni0uMDQzYy0uNTY1LS4xNzEtLjg1My0uNjkxLTEuMjg0LTEuNzk0LS4xMjUtLjMxMy0uMjAyLS42MzItLjI3LS45MTMtLjA1MS0uMjEzLS4xMjctLjUzLS4xOTUtLjYzNEM3LjA2NyA5LjAwNCA3LjAzOSA5IDYuOTkgOUExIDEgMCAwIDEgNyA3aC4wMWMxLjY2Mi4wMTcgMi4wMTUgMS4zNzMgMi4xOTggMi4xMzQuNDg2LS45ODEgMS4zMDQtMi4wNTggMi43OTctMi4wNzUgMS41MzEuMDE4IDIuMjggMS4xNTMgMi43MzEgMi4xNDFsLjAwMi0uMDA4QzE0Ljk0NCA4LjQyNCAxNS4zMjcgNyAxNi45NzkgN2guMDMyQTEgMSAwIDEgMSAxNyA5aC0uMDExYy0uMTQ5LjA3Ni0uMjU2LjQ3NC0uMzE5LjcwOWE2LjQ4NCA2LjQ4NCAwIDAgMS0uMzExLjk1MWMtLjQyOS45NzMtLjc5IDEuNzg5LTEuNjE0IDEuNzg5XCIvPjwvc3ZnPmAsXG5cbiAgc21pbGV5czogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEyIDBDNS4zNzMgMCAwIDUuMzczIDAgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTJTMTguNjI3IDAgMTIgMG0wIDIyQzYuNDg2IDIyIDIgMTcuNTE0IDIgMTJTNi40ODYgMiAxMiAyczEwIDQuNDg2IDEwIDEwLTQuNDg2IDEwLTEwIDEwXCIvPjxwYXRoIGQ9XCJNOCA3YTIgMiAwIDEgMC0uMDAxIDMuOTk5QTIgMiAwIDAgMCA4IDdNMTYgN2EyIDIgMCAxIDAtLjAwMSAzLjk5OUEyIDIgMCAwIDAgMTYgN00xNS4yMzIgMTVjLS42OTMgMS4xOTUtMS44NyAyLTMuMzQ5IDItMS40NzcgMC0yLjY1NS0uODA1LTMuMzQ3LTJIMTVtMy0ySDZhNiA2IDAgMSAwIDEyIDBcIi8+PC9zdmc+YCxcblxuICBwZW9wbGU6IGA8c3ZnIHhtbG5zOnN2Zz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRcIiB3aWR0aD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPiA8cGF0aCBpZD1cInBhdGgzODE0XCIgZD1cIm0gMy4zNTkxMDg5LDIxLjE3NzI2IGMgMC4xNzIwMzYsMC4wOTM4NSA0LjI2NTk5NCwyLjI5ODM3IDguODE0NDQ1MSwyLjI5ODM3IDQuOTI3NzY3LDAgOC42NzA4OTQsLTIuMjExODgzIDguODI3ODIsLTIuMzA2MDE5IDAuMTEzMDc5LC0wLjA2Nzg1IDAuMTgyMjY4LC0wLjE5MDA1MSAwLjE4MjI2NywtMC4zMjE5MjMgMCwtMy4wMzExOSAtMC45Mjk0OTQsLTUuODA0OTM2IC0yLjYxNzE5NiwtNy44MTA3MTIgLTEuMTgwNjAzLC0xLjQwMzEzNCAtMi42NjE5MTgsLTIuMzU5NTE2IC00LjI5NTY5OSwtMi43OTk3OTEgNC42OTkxMTgsLTIuMjM2MjU4IDMuMTAyMzA2LC05LjI4NjE3MTYyIC0yLjA5NzE5MSwtOS4yODYxNzE2MiAtNS4xOTk0OTc4LDAgLTYuNzk2MzEwMyw3LjA0OTkxMzYyIC0yLjA5NzE5Miw5LjI4NjE3MTYyIC0xLjYzMzc4MjEsMC40NDAyNzUgLTMuMTE1MDk3MSwxLjM5Njc5OCAtNC4yOTU2OTkxLDIuNzk5NzkxIC0xLjY4NzcwMywyLjAwNTc3NiAtMi42MTcxOTYsNC43Nzk1MjIgLTIuNjE3MTk2LDcuODEwNzEyIDEuMmUtNiwwLjEzNzM3OCAwLjA3NTAzOSwwLjI2Mzc4NSAwLjE5NTY0MSwwLjMyOTU3MiB6IE0gOC4wNDM5MzE5LDUuODMwODc4MyBDIDguMDQzOTMwOSwyLjE1MTUyMSAxMi40OTIxMDcsMC4zMDk1NTgxMSAxNS4wOTM0OTEsMi45MTA5NDExIDE3LjY5NDg3NCw1LjUxMjMyNDEgMTUuODUyOTExLDkuOTYwNTAwNiAxMi4xNzM1NTQsOS45NjA1IDkuODkzODk5MSw5Ljk1NzkxMzUgOC4wNDY1MTg2LDguMTEwNTMzMiA4LjA0MzkzMTksNS44MzA4NzgzIFogbSAtMS42ODg3ODIsNy42ODk0OTc3IGMgMS41MjQ1MzUsLTEuODExNDQ5IDMuNTkwNjYwMSwtMi44MDkwMzUgNS44MTg0MDQxLC0yLjgwOTAzNSAyLjIyNzc0NCwwIDQuMjkzODY5LDAuOTk3NTg2IDUuODE4NDA0LDIuODA5MDM1IDEuNTMzNjM5LDEuODIyNTcxIDIuMzk1OTMyLDQuMzM5ODU4IDIuNDM5MTUyLDcuMTA4MzAxIC0wLjgwMzM1MiwwLjQzNDg3NyAtNC4xNDE2MzYsMi4wOTYxMTIgLTguMjU3NTU2LDIuMDk2MTEyIC0zLjgwNjI5MjEsMCAtNy4zOTEwODYxLC0xLjY3MTA0MyAtOC4yNTczNjgxLC0yLjEwNDk4MSAwLjA0NTA1LC0yLjc2NTAxNyAwLjkwNjk2OCwtNS4yNzg3ODUgMi40Mzg5NjQsLTcuMDk5NDMyIHpcIiAvPiA8cGF0aCBpZD1cInBhdGgzODE2XCIgZD1cIk0gMTIuMTczODI4IDAuMzg4NjcxODggQyA5LjMxOTg1MTMgMC4zODg2NzE4NyA3LjM3NzA5ODggMi4zNjcyMjg1IDYuODY1MjM0NCA0LjYzMDg1OTQgQyA2LjQyMTg2MDggNi41OTE2MDE1IDcuMTE1MzU2MiA4Ljc2NzYxMTcgOC45NjQ4NDM4IDEwLjEyNjk1MyBDIDcuNjE0MTI0OSAxMC42NzczNzYgNi4zNTUwNTExIDExLjQ4MDk0NCA1LjM0OTYwOTQgMTIuNjc1NzgxIEMgMy41NjI5MzE3IDE0Ljc5OTE4NSAyLjYwMTU2MjUgMTcuNzAxNDc1IDIuNjAxNTYyNSAyMC44NDc2NTYgQyAyLjYwMTU2NTQgMjEuMTg5ODYxIDIuNzg5NDI3NiAyMS41MDgwMDIgMy4wODk4NDM4IDIxLjY3MTg3NSBDIDMuMzA0NDA2OCAyMS43ODg5MjUgNy40NDM2MjM5IDI0LjAzOTA2MiAxMi4xNzM4MjggMjQuMDM5MDYyIEMgMTcuMjY5OTE4IDI0LjAzOTA2MiAyMS4wODM1NjggMjEuNzc2Nzg2IDIxLjI5MTAxNiAyMS42NTIzNDQgQyAyMS41NzI4MSAyMS40ODMyNjYgMjEuNzQ2MDk3IDIxLjE3NjI4MiAyMS43NDYwOTQgMjAuODQ3NjU2IEMgMjEuNzQ2MDk0IDE3LjcwMTQ3NSAyMC43ODI3NyAxNC43OTkxODUgMTguOTk2MDk0IDEyLjY3NTc4MSBDIDE3Ljk5MDQ1NSAxMS40ODA1OTEgMTYuNzMzODE4IDEwLjY3NTM2MiAxNS4zODI4MTIgMTAuMTI1IEMgMTcuMjMxMTMyIDguNzY1NTU1MiAxNy45MjU2NzUgNi41OTEwNzAxIDE3LjQ4MjQyMiA0LjYzMDg1OTQgQyAxNi45NzA1NTcgMi4zNjcyMjg1IDE1LjAyNzgwNSAwLjM4ODY3MTg4IDEyLjE3MzgyOCAwLjM4ODY3MTg4IHogTSAxMi43OTI5NjkgMi4zMDA3ODEyIEMgMTMuNDY2MjUzIDIuNDE2MTc5MiAxNC4xMjUxMTMgMi43MzgzOTQxIDE0LjY5NTMxMiAzLjMwODU5MzggQyAxNS44MzU3MTIgNC40NDg5OTMxIDE1Ljk4NTYwNCA1Ljk0NzM1NDkgMTUuNDY4NzUgNy4xOTUzMTI1IEMgMTQuOTUxODk2IDguNDQzMjcwMSAxMy43ODY4MjggOS4zOTg0Mzc4IDEyLjE3MzgyOCA5LjM5ODQzNzUgQyAxMC4xOTc3MTkgOS4zOTYxOTU0IDguNjA3NzExIDcuODA2MTg3IDguNjA1NDY4OCA1LjgzMDA3ODEgQyA4LjYwNTQ2ODMgNC4yMTcwNzg1IDkuNTYwNjM2MiAzLjA1MjAxMDIgMTAuODA4NTk0IDIuNTM1MTU2MiBDIDExLjQzMjU3MyAyLjI3NjcyOTMgMTIuMTE5Njg1IDIuMTg1MzgzMyAxMi43OTI5NjkgMi4zMDA3ODEyIHogTSAxMi4xNzM4MjggMTEuMjczNDM4IEMgMTQuMjMzNjQ3IDExLjI3MzQzOCAxNi4xMzM2NzQgMTIuMTg1MDg0IDE3LjU2MjUgMTMuODgyODEyIEMgMTguOTMwNjkgMTUuNTA4NzY1IDE5LjY5ODM0NyAxNy43NzY5NjkgMTkuODA4NTk0IDIwLjI4MzIwMyBDIDE4LjgwNzM5NSAyMC44MDAyMzUgMTUuODg2MTU3IDIyLjE2MjEwOSAxMi4xNzM4MjggMjIuMTYyMTA5IEMgOC43NjE0NjMyIDIyLjE2MjEwOSA1LjYyNDU3NTQgMjAuNzg3MDY5IDQuNTM5MDYyNSAyMC4yNjU2MjUgQyA0LjY1MjU4OTYgMTcuNzY2NzE3IDUuNDIwMzMxNSAxNS41MDQ3OTEgNi43ODUxNTYyIDEzLjg4MjgxMiBDIDguMjEzOTgyNyAxMi4xODUwODQgMTAuMTE0MDEgMTEuMjczNDM4IDEyLjE3MzgyOCAxMS4yNzM0MzggeiBcIiAvPiA8L3N2Zz5gLFxuXG4gIHBsYWNlczogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTYuNSAxMkM1LjEyMiAxMiA0IDEzLjEyMSA0IDE0LjVTNS4xMjIgMTcgNi41IDE3IDkgMTUuODc5IDkgMTQuNSA3Ljg3OCAxMiA2LjUgMTJtMCAzYy0uMjc1IDAtLjUtLjIyNS0uNS0uNXMuMjI1LS41LjUtLjUuNS4yMjUuNS41LS4yMjUuNS0uNS41TTE3LjUgMTJjLTEuMzc4IDAtMi41IDEuMTIxLTIuNSAyLjVzMS4xMjIgMi41IDIuNSAyLjUgMi41LTEuMTIxIDIuNS0yLjUtMS4xMjItMi41LTIuNS0yLjVtMCAzYy0uMjc1IDAtLjUtLjIyNS0uNS0uNXMuMjI1LS41LjUtLjUuNS4yMjUuNS41LS4yMjUuNS0uNS41XCIvPjxwYXRoIGQ9XCJNMjIuNDgyIDkuNDk0bC0xLjAzOS0uMzQ2TDIxLjQgOWguNmMuNTUyIDAgMS0uNDM5IDEtLjk5MiAwLS4wMDYtLjAwMy0uMDA4LS4wMDMtLjAwOEgyM2MwLTEtLjg4OS0yLTEuOTg0LTJoLS42NDJsLS43MzEtMS43MTdDMTkuMjYyIDMuMDEyIDE4LjA5MSAyIDE2Ljc2NCAySDcuMjM2QzUuOTA5IDIgNC43MzggMy4wMTIgNC4zNTcgNC4yODNMMy42MjYgNmgtLjY0MkMxLjg4OSA2IDEgNyAxIDhoLjAwM1MxIDguMDAyIDEgOC4wMDhDMSA4LjU2MSAxLjQ0OCA5IDIgOWguNmwtLjA0My4xNDgtMS4wMzkuMzQ2YTIuMDAxIDIuMDAxIDAgMCAwLTEuMzU5IDIuMDk3bC43NTEgNy41MDhhMSAxIDAgMCAwIC45OTQuOTAxSDN2MWMwIDEuMTAzLjg5NiAyIDIgMmgyYzEuMTA0IDAgMi0uODk3IDItMnYtMWg2djFjMCAxLjEwMy44OTYgMiAyIDJoMmMxLjEwNCAwIDItLjg5NyAyLTJ2LTFoMS4wOTZhLjk5OS45OTkgMCAwIDAgLjk5NC0uOTAxbC43NTEtNy41MDhhMi4wMDEgMi4wMDEgMCAwIDAtMS4zNTktMi4wOTdNNi4yNzMgNC44NTdDNi40MDIgNC40MyA2Ljc4OCA0IDcuMjM2IDRoOS41MjdjLjQ0OCAwIC44MzQuNDMuOTYzLjg1N0wxOS4zMTMgOUg0LjY4OGwxLjU4NS00LjE0M3pNNyAyMUg1di0xaDJ2MXptMTIgMGgtMnYtMWgydjF6bTIuMTg5LTNIMi44MTFsLS42NjItNi42MDdMMyAxMWgxOGwuODUyLjM5M0wyMS4xODkgMTh6XCIvPjwvc3ZnPmAsXG5cbiAgcmVjZW50OiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTMgNGgtMmwtLjAwMSA3SDl2MmgydjJoMnYtMmg0di0yaC00elwiLz48cGF0aCBkPVwiTTEyIDBDNS4zNzMgMCAwIDUuMzczIDAgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTJTMTguNjI3IDAgMTIgMG0wIDIyQzYuNDg2IDIyIDIgMTcuNTE0IDIgMTJTNi40ODYgMiAxMiAyczEwIDQuNDg2IDEwIDEwLTQuNDg2IDEwLTEwIDEwXCIvPjwvc3ZnPmAsXG5cbiAgc3ltYm9sczogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTAgMGgxMXYySDB6TTQgMTFoM1Y2aDRWNEgwdjJoNHpNMTUuNSAxN2MxLjM4MSAwIDIuNS0xLjExNiAyLjUtMi40OTNzLTEuMTE5LTIuNDkzLTIuNS0yLjQ5M1MxMyAxMy4xMyAxMyAxNC41MDcgMTQuMTE5IDE3IDE1LjUgMTdtMC0yLjk4NmMuMjc2IDAgLjUuMjIyLjUuNDkzIDAgLjI3Mi0uMjI0LjQ5My0uNS40OTNzLS41LS4yMjEtLjUtLjQ5My4yMjQtLjQ5My41LS40OTNNMjEuNSAxOS4wMTRjLTEuMzgxIDAtMi41IDEuMTE2LTIuNSAyLjQ5M1MyMC4xMTkgMjQgMjEuNSAyNHMyLjUtMS4xMTYgMi41LTIuNDkzLTEuMTE5LTIuNDkzLTIuNS0yLjQ5M20wIDIuOTg2YS40OTcuNDk3IDAgMCAxLS41LS40OTNjMC0uMjcxLjIyNC0uNDkzLjUtLjQ5M3MuNS4yMjIuNS40OTNhLjQ5Ny40OTcgMCAwIDEtLjUuNDkzTTIyIDEzbC05IDkgMS41MTMgMS41IDguOTktOS4wMDl6TTE3IDExYzIuMjA5IDAgNC0xLjExOSA0LTIuNVYycy45ODUtLjE2MSAxLjQ5OC45NDlDMjMuMDEgNC4wNTUgMjMgNiAyMyA2czEtMS4xMTkgMS0zLjEzNUMyNC0uMDIgMjEgMCAyMSAwaC0ydjYuMzQ3QTUuODUzIDUuODUzIDAgMCAwIDE3IDZjLTIuMjA5IDAtNCAxLjExOS00IDIuNXMxLjc5MSAyLjUgNCAyLjVNMTAuMjk3IDIwLjQ4MmwtMS40NzUtMS41ODVhNDcuNTQgNDcuNTQgMCAwIDEtMS40NDIgMS4xMjljLS4zMDctLjI4OC0uOTg5LTEuMDE2LTIuMDQ1LTIuMTgzLjkwMi0uODM2IDEuNDc5LTEuNDY2IDEuNzI5LTEuODkycy4zNzYtLjg3MS4zNzYtMS4zMzZjMC0uNTkyLS4yNzMtMS4xNzgtLjgxOC0xLjc1OS0uNTQ2LS41ODEtMS4zMjktLjg3MS0yLjM0OS0uODcxLTEuMDA4IDAtMS43OS4yOTMtMi4zNDQuODc5LS41NTYuNTg3LS44MzIgMS4xODEtLjgzMiAxLjc4NCAwIC44MTMuNDE5IDEuNzQ4IDEuMjU2IDIuODA1LS44NDcuNjE0LTEuNDQ0IDEuMjA4LTEuNzk0IDEuNzg0YTMuNDY1IDMuNDY1IDAgMCAwLS41MjMgMS44MzNjMCAuODU3LjMwOCAxLjU2LjkyNCAyLjEwNy42MTYuNTQ5IDEuNDIzLjgyMyAyLjQyLjgyMyAxLjE3MyAwIDIuNDQ0LS4zNzkgMy44MTMtMS4xMzdMOC4yMzUgMjRoMi44MTlsLTIuMDktMi4zODMgMS4zMzMtMS4xMzV6bS02LjczNi02LjM4OWExLjAyIDEuMDIgMCAwIDEgLjczLS4yODZjLjMxIDAgLjU1OS4wODUuNzQ3LjI1NGEuODQ5Ljg0OSAwIDAgMSAuMjgzLjY1OWMwIC41MTgtLjQxOSAxLjExMi0xLjI1NyAxLjc4NC0uNTM2LS42NTEtLjgwNS0xLjIzMS0uODA1LTEuNzQyYS45MDEuOTAxIDAgMCAxIC4zMDItLjY2OU0zLjc0IDIyYy0uNDI3IDAtLjc3OC0uMTE2LTEuMDU3LS4zNDktLjI3OS0uMjMyLS40MTgtLjQ4Ny0uNDE4LS43NjYgMC0uNTk0LjUwOS0xLjI4OCAxLjUyNy0yLjA4My45NjggMS4xMzQgMS43MTcgMS45NDYgMi4yNDggMi40MzgtLjkyMS41MDctMS42ODYuNzYtMi4zLjc2XCIvPjwvc3ZnPmAsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNWR3NcbiIsImNvbnN0IG1hcHBpbmcgPSB7XG4gIG5hbWU6ICdhJyxcbiAgdW5pZmllZDogJ2InLFxuICBub25fcXVhbGlmaWVkOiAnYycsXG4gIGhhc19pbWdfYXBwbGU6ICdkJyxcbiAgaGFzX2ltZ19nb29nbGU6ICdlJyxcbiAgaGFzX2ltZ190d2l0dGVyOiAnZicsXG4gIGhhc19pbWdfZmFjZWJvb2s6ICdoJyxcbiAga2V5d29yZHM6ICdqJyxcbiAgc2hlZXQ6ICdrJyxcbiAgZW1vdGljb25zOiAnbCcsXG4gIHRleHQ6ICdtJyxcbiAgc2hvcnRfbmFtZXM6ICduJyxcbiAgYWRkZWRfaW46ICdvJyxcbn1cblxuY29uc3QgYnVpbGRTZWFyY2ggPSAoZW1vamkpID0+IHtcbiAgY29uc3Qgc2VhcmNoID0gW11cblxuICB2YXIgYWRkVG9TZWFyY2ggPSAoc3RyaW5ncywgc3BsaXQpID0+IHtcbiAgICBpZiAoIXN0cmluZ3MpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIDsoQXJyYXkuaXNBcnJheShzdHJpbmdzKSA/IHN0cmluZ3MgOiBbc3RyaW5nc10pLmZvckVhY2goKHN0cmluZykgPT4ge1xuICAgICAgOyhzcGxpdCA/IHN0cmluZy5zcGxpdCgvWy18X3xcXHNdKy8pIDogW3N0cmluZ10pLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgcyA9IHMudG9Mb3dlckNhc2UoKVxuXG4gICAgICAgIGlmIChzZWFyY2guaW5kZXhPZihzKSA9PSAtMSkge1xuICAgICAgICAgIHNlYXJjaC5wdXNoKHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGFkZFRvU2VhcmNoKGVtb2ppLnNob3J0X25hbWVzLCB0cnVlKVxuICBhZGRUb1NlYXJjaChlbW9qaS5uYW1lLCB0cnVlKVxuICBhZGRUb1NlYXJjaChlbW9qaS5rZXl3b3JkcywgZmFsc2UpXG4gIGFkZFRvU2VhcmNoKGVtb2ppLmVtb3RpY29ucywgZmFsc2UpXG5cbiAgcmV0dXJuIHNlYXJjaC5qb2luKCcsJylcbn1cblxuY29uc3QgY29tcHJlc3MgPSAoZW1vamkpID0+IHtcbiAgZW1vamkuc2hvcnRfbmFtZXMgPSBlbW9qaS5zaG9ydF9uYW1lcy5maWx0ZXIoKHNob3J0X25hbWUpID0+IHtcbiAgICByZXR1cm4gc2hvcnRfbmFtZSAhPT0gZW1vamkuc2hvcnRfbmFtZVxuICB9KVxuICBkZWxldGUgZW1vamkuc2hvcnRfbmFtZVxuXG4gIGVtb2ppLnNoZWV0ID0gW2Vtb2ppLnNoZWV0X3gsIGVtb2ppLnNoZWV0X3ldXG4gIGRlbGV0ZSBlbW9qaS5zaGVldF94XG4gIGRlbGV0ZSBlbW9qaS5zaGVldF95XG5cbiAgZW1vamkuYWRkZWRfaW4gPSBwYXJzZUludChlbW9qaS5hZGRlZF9pbilcbiAgaWYgKGVtb2ppLmFkZGVkX2luID09PSA2KSB7XG4gICAgZGVsZXRlIGVtb2ppLmFkZGVkX2luXG4gIH1cblxuICBmb3IgKGxldCBrZXkgaW4gbWFwcGluZykge1xuICAgIGVtb2ppW21hcHBpbmdba2V5XV0gPSBlbW9qaVtrZXldXG4gICAgZGVsZXRlIGVtb2ppW2tleV1cbiAgfVxuXG4gIGZvciAobGV0IGtleSBpbiBlbW9qaSkge1xuICAgIGxldCB2YWx1ZSA9IGVtb2ppW2tleV1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiAhdmFsdWUubGVuZ3RoKSB7XG4gICAgICBkZWxldGUgZW1vamlba2V5XVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhdmFsdWUubGVuZ3RoKSB7XG4gICAgICBkZWxldGUgZW1vamlba2V5XVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIGRlbGV0ZSBlbW9qaVtrZXldXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZXBGcmVlemUob2JqZWN0KSB7XG4gIC8vIFJldHJpZXZlIHRoZSBwcm9wZXJ0eSBuYW1lcyBkZWZpbmVkIG9uIG9iamVjdFxuICB2YXIgcHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KVxuXG4gIC8vIEZyZWV6ZSBwcm9wZXJ0aWVzIGJlZm9yZSBmcmVlemluZyBzZWxmXG4gIGZvciAobGV0IG5hbWUgb2YgcHJvcE5hbWVzKSB7XG4gICAgbGV0IHZhbHVlID0gb2JqZWN0W25hbWVdXG4gICAgb2JqZWN0W25hbWVdID1cbiAgICAgIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyBkZWVwRnJlZXplKHZhbHVlKSA6IHZhbHVlXG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUob2JqZWN0KVxufVxuXG5jb25zdCB1bmNvbXByZXNzID0gKGRhdGEpID0+IHtcbiAgaWYgKCFkYXRhLmNvbXByZXNzZWQpIHtcbiAgICByZXR1cm4gZGF0YVxuICB9XG4gIGRhdGEuY29tcHJlc3NlZCA9IGZhbHNlXG5cbiAgZm9yIChsZXQgaWQgaW4gZGF0YS5lbW9qaXMpIHtcbiAgICBsZXQgZW1vamkgPSBkYXRhLmVtb2ppc1tpZF1cblxuICAgIGZvciAobGV0IGtleSBpbiBtYXBwaW5nKSB7XG4gICAgICBlbW9qaVtrZXldID0gZW1vamlbbWFwcGluZ1trZXldXVxuICAgICAgZGVsZXRlIGVtb2ppW21hcHBpbmdba2V5XV1cbiAgICB9XG5cbiAgICBpZiAoIWVtb2ppLnNob3J0X25hbWVzKSBlbW9qaS5zaG9ydF9uYW1lcyA9IFtdXG4gICAgZW1vamkuc2hvcnRfbmFtZXMudW5zaGlmdChpZClcblxuICAgIGVtb2ppLnNoZWV0X3ggPSBlbW9qaS5zaGVldFswXVxuICAgIGVtb2ppLnNoZWV0X3kgPSBlbW9qaS5zaGVldFsxXVxuICAgIGRlbGV0ZSBlbW9qaS5zaGVldFxuXG4gICAgaWYgKCFlbW9qaS50ZXh0KSBlbW9qaS50ZXh0ID0gJydcblxuICAgIGlmICghZW1vamkuYWRkZWRfaW4pIGVtb2ppLmFkZGVkX2luID0gNlxuICAgIGVtb2ppLmFkZGVkX2luID0gZW1vamkuYWRkZWRfaW4udG9GaXhlZCgxKVxuXG4gICAgZW1vamkuc2VhcmNoID0gYnVpbGRTZWFyY2goZW1vamkpXG4gIH1cbiAgZGF0YSA9IGRlZXBGcmVlemUoZGF0YSlcbiAgcmV0dXJuIGRhdGFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IGJ1aWxkU2VhcmNoLCBjb21wcmVzcywgdW5jb21wcmVzcyB9XG4iLCJpbXBvcnQgeyBpbnRlcnNlY3QsIHVuaWZpZWRUb05hdGl2ZSB9IGZyb20gJy4vaW5kZXgnXG5pbXBvcnQgeyB1bmNvbXByZXNzLCBidWlsZFNlYXJjaCB9IGZyb20gJy4vZGF0YSdcbmltcG9ydCBmcmVxdWVudGx5IGZyb20gJy4vZnJlcXVlbnRseSdcblxuY29uc3QgU0hFRVRfQ09MVU1OUyA9IDU3XG5jb25zdCBDT0xPTlNfUkVHRVggPSAvXig/OlxcOihbXlxcOl0rKVxcOikoPzpcXDpza2luLXRvbmUtKFxcZClcXDopPyQvXG4vLyBTa2luIHRvbmVzXG5jb25zdCBTS0lOUyA9IFsnMUYzRkEnLCAnMUYzRkInLCAnMUYzRkMnLCAnMUYzRkQnLCAnMUYzRkUnLCAnMUYzRkYnXVxuXG4vKipcbiAqIEVtb2ppIGRhdGEgc3RydWN0dXJlOlxuICoge1xuICogICAgXCJjb21wcmVzc2VkXCI6IGZhbHNlLFxuICogICAgXCJhbGlhc2VzXCI6IHtcbiAqICAgICAgY29sbGlzaW9uOiBcImJvb21cIlxuICogICAgICBjb29raW5nOiBcImZyaWVkX2VnZ1wiXG4gKiAgICAgIGVudmVsb3BlOiBcImVtYWlsXCJcbiAqICAgICAgZmFjZV93aXRoX2Zpbmdlcl9jb3ZlcmluZ19jbG9zZWRfbGlwczogXCJzaHVzaGluZ19mYWNlXCJcbiAqICAgICAgLi4uXG4gKiAgICB9LFxuICogICAgXCJjYXRlZ29yaWVzXCI6IFsge1xuICogICAgICBpZDogXCJwZW9wbGVcIixcbiAqICAgICAgbmFtZTogXCJTbWlsZXlzICYgRW1vdGlvblwiLFxuICogICAgICBlbW9qaXM6IFsgXCJncmlubmluZ1wiLCBcImdyaW5cIiwgXCJqb3lcIiwgLi4uIF1cbiAqICAgIH0sIHtcbiAqICAgICAgaWQ6IFwibmF0dXJlXCIsXG4gKiAgICAgIG5hbWU6IFwiQW5pbWFscyAmIE5hdHVyZVwiLFxuICogICAgICBlbW9qaXM6IFsgXCJtb25rZXlfZmFjZVwiLCBcIm1vbmV5XCIsIFwiZ29yaWxsYVwiLCAuLi4gXVxuICogICAgfSxcbiAqICAgIC4uLlxuICogICAgXSxcbiAqICAgIFwiZW1vamlzXCI6IFtcbiAqICAgICAgc21pbGV5OiB7XG4gKiAgICAgICAgYWRkZWRfaW46IFwiNi4wXCIsXG4gKiAgICAgICAgZW1vdGljb25zOiBbXCI9KVwiLCBcIj0tKVwiXSxcbiAqICAgICAgICBoYXNfaW1nX2FwcGxlOiB0cnVlLFxuICogICAgICAgIGhhc19pbWdfZmFjZWJvb2s6IHRydWUsXG4gKiAgICAgICAgaGFzX2ltZ19nb29nbGU6IHRydWUsXG4gKiAgICAgICAgaGFzX2ltZ190d2l0dGVyOiB0cnVlLFxuICogICAgICAgIGtleXdvcmRzOiBbXCJmYWNlXCIsIFwiaGFwcHlcIiwgXCJqb3lcIiwgXCJoYWhhXCIsIFwiOkRcIiwgXCI6KVwiLCBcInNtaWxlXCIsIFwiZnVubnlcIl0sXG4gKiAgICAgICAgbmFtZTogXCJTbWlsaW5nIEZhY2Ugd2l0aCBPcGVuIE1vdXRoXCIsXG4gKiAgICAgICAgbm9uX3F1YWxpZmllZDogdW5kZWZpbmVkLFxuICogICAgICAgIHNlYXJjaDogXCJzbWlsZXksc21pbGluZyxmYWNlLHdpdGgsb3Blbixtb3V0aCxoYXBweSxqb3ksaGFoYSw6ZCw6KSxzbWlsZSxmdW5ueSw9KSw9LSlcIixcbiAqICAgICAgICBzaGVldF94OiAzMCxcbiAqICAgICAgICBzaGVldF95OiAyNyxcbiAqICAgICAgICBzaG9ydF9uYW1lczogW1wic21pbGV5XCJdLFxuICogICAgICAgIHRleHQ6IFwiOilcIixcbiAqICAgICAgICB1bmlmaWVkOiBcIjFGNjAzXCIsXG4gKiAgICAgIH0sIHtcbiAqICAgICAgKzE6IHsgICAgLy8gZW1vamkgd2l0aCBza2luX3ZhcmlhdGlvbnNcbiAqICAgICAgICAgIC4uLiwgLy8gYWxsIHRoZSByZWd1bGFyIGZpZWxkcyBhcmUgcHJlc2VudFxuICogICAgICAgICAgbmFtZTogXCJUaHVtYnMgVXAgU2lnblwiLFxuICogICAgICAgICAgc2hvcnRfbmFtZXM6ICgyKSBbXCIrMVwiLCBcInRodW1ic3VwXCJdLFxuICogICAgICAgICAgc2tpbl92YXJpYXRpb25zOiB7XG4gKiAgICAgICAgICAgIDFGM0ZCOiAgICAgICAgICAgICAvLyBlYWNoIHZhcmlhdGlvbiBoYXMgYWRkaXRpb25hbCBzZXQgb2YgZmllbGRzOlxuICogICAgICAgICAgICAgIGFkZGVkX2luOiBcIjguMFwiLFxuICogICAgICAgICAgICAgIGhhc19pbWdfYXBwbGU6IHRydWUsXG4gKiAgICAgICAgICAgICAgaGFzX2ltZ19mYWNlYm9vazogdHJ1ZSxcbiAqICAgICAgICAgICAgICBoYXNfaW1nX2dvb2dsZTogdHJ1ZSxcbiAqICAgICAgICAgICAgICBoYXNfaW1nX3R3aXR0ZXI6IHRydWUsXG4gKiAgICAgICAgICAgICAgaW1hZ2U6IFwiMWY0NGQtMWYzZmIucG5nXCIsXG4gKiAgICAgICAgICAgICAgbm9uX3F1YWxpZmllZDogbnVsbCxcbiAqICAgICAgICAgICAgICBzaGVldF94OiAxNCxcbiAqICAgICAgICAgICAgICBzaGVldF95OiA1MCxcbiAqICAgICAgICAgICAgICB1bmlmaWVkOiBcIjFGNDRELTFGM0ZCXCIsXG4gKiAgICAgICAgICAgIDFGM0ZCOiB74oCmfSxcbiAqICAgICAgICAgICAgMUYzRkM6IHvigKZ9LFxuICogICAgICAgICAgICAxRjNGRDoge+KApn0sXG4gKiAgICAgICAgICAgIDFGM0ZFOiB74oCmfSxcbiAqICAgICAgICAgICAgMUYzRkY6IHvigKZ9XG4gKiAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAuLi5cbiAqICAgICAgfSxcbiAqICAgICAgYTogeyAgLy8gZW1vamkgd2l0aCBub25fcXVhbGlmaWVkIGZpZWxkIHNldFxuICogICAgICAgIGFkZGVkX2luOiBcIjYuMFwiLFxuICogICAgICAgIGVtb3RpY29uczogdW5kZWZpbmVkLFxuICogICAgICAgIGhhc19pbWdfYXBwbGU6IHRydWUsXG4gKiAgICAgICAgLi4uXG4gKiAgICAgICAgbm9uX3F1YWxpZmllZDogXCIxRjE3MFwiLFxuICogICAgICAgIHVuaWZpZWQ6IFwiMUYxNzAtRkUwRlwiLFxuICogICAgIH0sXG4gKiAgICAgLi4uXG4gKiAgIF1cbiAqIH1cbiAqL1xuXG4vKipcbiAqIFdyYXBzIHJhdyBqYXNvbiBlbW9qaSBkYXRhLCBzZXJ2ZXMgYXMgZGF0YSBzb3VyY2UgZm9yXG4gKiBlbW9qaSBwaWNrZXIgY29tcG9uZW50cy5cbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgIGltcG9ydCBkYXRhIGZyb20gJy4uL2RhdGEvYWxsLmpzb24nXG4gKiAgIGxldCBpbmRleCA9IG5ldyBFbW9qaUluZGV4KGRhdGEpXG4gKlxuICovXG5leHBvcnQgY2xhc3MgRW1vamlJbmRleCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgLSBSYXcganNvbiBkYXRhLCBzZWUgdGhlIHN0cnVjdHVyZSBhYm92ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMsIGFzIGFuIG9iamVjdDpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZW1vamlzVG9TaG93RmlsdGVyIC0gb3B0aW9uYWwsIGZ1bmN0aW9uIHRvIGZpbHRlciBvdXRcbiAgICogICBzb21lIGVtb2ppcywgZnVuY3Rpb24oZW1vamkpIHsgcmV0dXJuIHRydWV8ZmFsc2UgfVxuICAgKiAgIHdoZXJlIGBlbW9qaWAgaXMgYW4gcmF3IGVtb2ppIG9iamVjdCwgc2VlIGRhdGEuZW1vamlzIGFib3ZlLlxuICAgKiBAcGFyYW0ge0FycmF5fSBpbmNsdWRlIC0gb3B0aW9uYWwsIGEgbGlzdCBvZiBjYXRlZ29yeSBpZHMgdG8gaW5jbHVkZS5cbiAgICogQHBhcmFtIHtBcnJheX0gZXhjbHVkZSAtIG9wdGlvbmFsLCBhIGxpc3Qgb2YgY2F0ZWdvcnkgaWRzIHRvIGV4Y2x1ZGUuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGN1c3RvbSAtIG9wdGlvbmFsLCBhIGxpc3QgY3VzdG9tIGVtb2ppcywgZWFjaCBlbW9qaSBpc1xuICAgKiAgIGFuIG9iamVjdCwgc2VlIGRhdGEuZW1vamlzIGFib3ZlIGZvciBleGFtcGxlcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGRhdGEsXG4gICAge1xuICAgICAgZW1vamlzVG9TaG93RmlsdGVyLFxuICAgICAgaW5jbHVkZSxcbiAgICAgIGV4Y2x1ZGUsXG4gICAgICBjdXN0b20sXG4gICAgICByZWNlbnQsXG4gICAgICByZWNlbnRMZW5ndGggPSAyMCxcbiAgICB9ID0ge30sXG4gICkge1xuICAgIHRoaXMuX2RhdGEgPSB1bmNvbXByZXNzKGRhdGEpXG4gICAgLy8gQ2FsbGJhY2sgdG8gZXhjbHVkZSBzcGVjaWZpYyBlbW9qaXNcbiAgICB0aGlzLl9lbW9qaXNGaWx0ZXIgPSBlbW9qaXNUb1Nob3dGaWx0ZXIgfHwgbnVsbFxuICAgIC8vIENhdGVnb3JpZXMgdG8gaW5jbHVkZSAvIGV4Y2x1ZGVcbiAgICB0aGlzLl9pbmNsdWRlID0gaW5jbHVkZSB8fCBudWxsXG4gICAgdGhpcy5fZXhjbHVkZSA9IGV4Y2x1ZGUgfHwgbnVsbFxuICAgIC8vIEN1c3RvbSBlbW9qaXNcbiAgICB0aGlzLl9jdXN0b20gPSBjdXN0b20gfHwgW11cbiAgICAvLyBSZWNlbnQgZW1vamlzXG4gICAgLy8gVE9ETzogbWFrZSBwYXJhbWV0ZXIgY29uZmlndXJhYmxlXG4gICAgdGhpcy5fcmVjZW50ID0gcmVjZW50IHx8IGZyZXF1ZW50bHkuZ2V0KHJlY2VudExlbmd0aClcblxuICAgIHRoaXMuX2Vtb2ppcyA9IHt9XG4gICAgdGhpcy5fbmF0aXZlRW1vamlzID0ge31cbiAgICB0aGlzLl9lbW90aWNvbnMgPSB7fVxuXG4gICAgdGhpcy5fY2F0ZWdvcmllcyA9IFtdXG4gICAgdGhpcy5fcmVjZW50Q2F0ZWdvcnkgPSB7IGlkOiAncmVjZW50JywgbmFtZTogJ1JlY2VudCcsIGVtb2ppczogW10gfVxuICAgIHRoaXMuX2N1c3RvbUNhdGVnb3J5ID0geyBpZDogJ2N1c3RvbScsIG5hbWU6ICdDdXN0b20nLCBlbW9qaXM6IFtdIH1cbiAgICB0aGlzLl9zZWFyY2hJbmRleCA9IHt9XG4gICAgdGhpcy5idWlsZEluZGV4KClcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpXG4gIH1cblxuICBidWlsZEluZGV4KCkge1xuICAgIGxldCBhbGxDYXRlZ29yaWVzID0gdGhpcy5fZGF0YS5jYXRlZ29yaWVzXG5cbiAgICBpZiAodGhpcy5faW5jbHVkZSkge1xuICAgICAgLy8gUmVtb3ZlIGNhdGVnb3JpZXMgdGhhdCBhcmUgbm90IGluIHRoZSBpbmNsdWRlIGxpc3QuXG4gICAgICBhbGxDYXRlZ29yaWVzID0gYWxsQ2F0ZWdvcmllcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luY2x1ZGUuaW5jbHVkZXMoaXRlbS5pZClcbiAgICAgIH0pXG4gICAgICAvLyBTb3J0IGNhdGVnb3JpZXMgYWNjb3JkaW5nIHRvIHRoZSBpbmNsdWRlIGxpc3QuXG4gICAgICBhbGxDYXRlZ29yaWVzID0gYWxsQ2F0ZWdvcmllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4QSA9IHRoaXMuX2luY2x1ZGUuaW5kZXhPZihhLmlkKVxuICAgICAgICBjb25zdCBpbmRleEIgPSB0aGlzLl9pbmNsdWRlLmluZGV4T2YoYi5pZClcbiAgICAgICAgaWYgKGluZGV4QSA8IGluZGV4Qikge1xuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleEEgPiBpbmRleEIpIHtcbiAgICAgICAgICByZXR1cm4gMVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFsbENhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnlEYXRhKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNDYXRlZ29yeU5lZWRlZChjYXRlZ29yeURhdGEuaWQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbGV0IGNhdGVnb3J5ID0ge1xuICAgICAgICBpZDogY2F0ZWdvcnlEYXRhLmlkLFxuICAgICAgICBuYW1lOiBjYXRlZ29yeURhdGEubmFtZSxcbiAgICAgICAgZW1vamlzOiBbXSxcbiAgICAgIH1cbiAgICAgIGNhdGVnb3J5RGF0YS5lbW9qaXMuZm9yRWFjaCgoZW1vamlJZCkgPT4ge1xuICAgICAgICBsZXQgZW1vamkgPSB0aGlzLmFkZEVtb2ppKGVtb2ppSWQpXG4gICAgICAgIGlmIChlbW9qaSkge1xuICAgICAgICAgIGNhdGVnb3J5LmVtb2ppcy5wdXNoKGVtb2ppKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGNhdGVnb3J5LmVtb2ppcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5pc0NhdGVnb3J5TmVlZGVkKCdjdXN0b20nKSkge1xuICAgICAgaWYgKHRoaXMuX2N1c3RvbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGN1c3RvbUVtb2ppIG9mIHRoaXMuX2N1c3RvbSkge1xuICAgICAgICAgIHRoaXMuYWRkQ3VzdG9tRW1vamkoY3VzdG9tRW1vamkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXN0b21DYXRlZ29yeS5lbW9qaXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2NhdGVnb3JpZXMucHVzaCh0aGlzLl9jdXN0b21DYXRlZ29yeSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0NhdGVnb3J5TmVlZGVkKCdyZWNlbnQnKSkge1xuICAgICAgaWYgKHRoaXMuX3JlY2VudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fcmVjZW50Lm1hcCgoaWQpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBjdXN0b21FbW9qaSBvZiB0aGlzLl9jdXN0b21DYXRlZ29yeS5lbW9qaXMpIHtcbiAgICAgICAgICAgIGlmIChjdXN0b21FbW9qaS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcmVjZW50Q2F0ZWdvcnkuZW1vamlzLnB1c2goY3VzdG9tRW1vamkpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5oYXNFbW9qaShpZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlY2VudENhdGVnb3J5LmVtb2ppcy5wdXNoKHRoaXMuZW1vamkoaWQpKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIEFkZCByZWNlbnQgY2F0ZWdvcnkgdG8gdGhlIHRvcFxuICAgICAgaWYgKHRoaXMuX3JlY2VudENhdGVnb3J5LmVtb2ppcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllcy51bnNoaWZ0KHRoaXMuX3JlY2VudENhdGVnb3J5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBlbW9qaSBmcm9tIHRoZSBzdHJpbmdcbiAgICovXG4gIGZpbmRFbW9qaShlbW9qaSwgc2tpbikge1xuICAgIC8vIDEuIFBhcnNlIGFzIDplbW9qaV9uYW1lOnNraW4tdG9uZS14eDpcbiAgICBsZXQgbWF0Y2hlcyA9IGVtb2ppLm1hdGNoKENPTE9OU19SRUdFWClcblxuICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICBlbW9qaSA9IG1hdGNoZXNbMV1cbiAgICAgIGlmIChtYXRjaGVzWzJdKSB7XG4gICAgICAgIHNraW4gPSBwYXJzZUludChtYXRjaGVzWzJdLCAxMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVtb2ppIGlzIGFuIGFsaWFzXG4gICAgaWYgKHRoaXMuX2RhdGEuYWxpYXNlcy5oYXNPd25Qcm9wZXJ0eShlbW9qaSkpIHtcbiAgICAgIGVtb2ppID0gdGhpcy5fZGF0YS5hbGlhc2VzW2Vtb2ppXVxuICAgIH1cblxuICAgIC8vIDMuIENoZWNrIGlmIHdlIGhhdmUgdGhlIHNwZWNpZmllZCBlbW9qaVxuICAgIGlmICh0aGlzLl9lbW9qaXMuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgICBsZXQgZW1vamlPYmplY3QgPSB0aGlzLl9lbW9qaXNbZW1vamldXG4gICAgICBpZiAoc2tpbikge1xuICAgICAgICByZXR1cm4gZW1vamlPYmplY3QuZ2V0U2tpbihza2luKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtb2ppT2JqZWN0XG4gICAgfVxuXG4gICAgLy8gNC4gQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgc3BlY2lmaWVkIG5hdGl2ZSBlbW9qaVxuICAgIGlmICh0aGlzLl9uYXRpdmVFbW9qaXMuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbmF0aXZlRW1vamlzW2Vtb2ppXVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcmllc1xuICB9XG5cbiAgZW1vamkoZW1vamlJZCkge1xuICAgIGlmICh0aGlzLl9kYXRhLmFsaWFzZXMuaGFzT3duUHJvcGVydHkoZW1vamlJZCkpIHtcbiAgICAgIGVtb2ppSWQgPSB0aGlzLl9kYXRhLmFsaWFzZXNbZW1vamlJZF1cbiAgICB9XG4gICAgbGV0IGVtb2ppID0gdGhpcy5fZW1vamlzW2Vtb2ppSWRdXG4gICAgaWYgKCFlbW9qaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgZW1vamkgYnkgaWQ6ICcgKyBlbW9qaUlkKVxuICAgIH1cbiAgICByZXR1cm4gZW1vamlcbiAgfVxuXG4gIGZpcnN0RW1vamkoKSB7XG4gICAgbGV0IGVtb2ppID0gdGhpcy5fZW1vamlzW09iamVjdC5rZXlzKHRoaXMuX2Vtb2ppcylbMF1dXG4gICAgaWYgKCFlbW9qaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGdldCBmaXJzdCBlbW9qaScpXG4gICAgfVxuICAgIHJldHVybiBlbW9qaVxuICB9XG5cbiAgaGFzRW1vamkoZW1vamlJZCkge1xuICAgIGlmICh0aGlzLl9kYXRhLmFsaWFzZXMuaGFzT3duUHJvcGVydHkoZW1vamlJZCkpIHtcbiAgICAgIGVtb2ppSWQgPSB0aGlzLl9kYXRhLmFsaWFzZXNbZW1vamlJZF1cbiAgICB9XG4gICAgaWYgKHRoaXMuX2Vtb2ppc1tlbW9qaUlkXSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBuYXRpdmVFbW9qaSh1bmljb2RlRW1vamkpIHtcbiAgICBpZiAodGhpcy5fbmF0aXZlRW1vamlzLmhhc093blByb3BlcnR5KHVuaWNvZGVFbW9qaSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9uYXRpdmVFbW9qaXNbdW5pY29kZUVtb2ppXVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgc2VhcmNoKHZhbHVlLCBtYXhSZXN1bHRzKSB7XG4gICAgbWF4UmVzdWx0cyB8fCAobWF4UmVzdWx0cyA9IDc1KVxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBpZiAodmFsdWUgPT0gJy0nIHx8IHZhbHVlID09ICctMScpIHtcbiAgICAgIHJldHVybiBbdGhpcy5lbW9qaSgnLTEnKV1cbiAgICB9XG5cbiAgICBsZXQgdmFsdWVzID0gdmFsdWUudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1xcc3wsfFxcLXxfXSsvKVxuICAgIGxldCBhbGxSZXN1bHRzID0gW11cblxuICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMikge1xuICAgICAgdmFsdWVzID0gW3ZhbHVlc1swXSwgdmFsdWVzWzFdXVxuICAgIH1cblxuICAgIGFsbFJlc3VsdHMgPSB2YWx1ZXNcbiAgICAgIC5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIFN0YXJ0IHNlYXJjaGluIGluIHRoZSBnbG9iYWwgbGlzdCBvZiBlbW9qaXNcbiAgICAgICAgbGV0IGVtb2ppcyA9IHRoaXMuX2Vtb2ppc1xuICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gdGhpcy5fc2VhcmNoSW5kZXhcbiAgICAgICAgbGV0IGxlbmd0aCA9IDBcblxuICAgICAgICBmb3IgKGxldCBjaGFySW5kZXggPSAwOyBjaGFySW5kZXggPCB2YWx1ZS5sZW5ndGg7IGNoYXJJbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgY2hhciA9IHZhbHVlW2NoYXJJbmRleF1cbiAgICAgICAgICBsZW5ndGgrK1xuXG4gICAgICAgICAgY3VycmVudEluZGV4W2NoYXJdIHx8IChjdXJyZW50SW5kZXhbY2hhcl0gPSB7fSlcbiAgICAgICAgICBjdXJyZW50SW5kZXggPSBjdXJyZW50SW5kZXhbY2hhcl1cblxuICAgICAgICAgIGlmICghY3VycmVudEluZGV4LnJlc3VsdHMpIHtcbiAgICAgICAgICAgIGxldCBzY29yZXMgPSB7fVxuICAgICAgICAgICAgY3VycmVudEluZGV4LnJlc3VsdHMgPSBbXVxuICAgICAgICAgICAgY3VycmVudEluZGV4LmVtb2ppcyA9IHt9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGVtb2ppSWQgaW4gZW1vamlzKSB7XG4gICAgICAgICAgICAgIGxldCBlbW9qaSA9IGVtb2ppc1tlbW9qaUlkXVxuICAgICAgICAgICAgICAvLyBzZWFyY2ggaXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIHdpdGggd29yZHMsIHJlbGF0ZWRcbiAgICAgICAgICAgICAgLy8gdG8gdGhlIGVtb2ppLCBmb3IgZXhhbXBsZTpcbiAgICAgICAgICAgICAgLy8gc2VhcmNoOiBcInNtaWxleSxzbWlsaW5nLGZhY2Usam95LGhhaGEsOmQsOiksc21pbGUsZnVubnksPSksPS0pXCIsXG4gICAgICAgICAgICAgIGxldCBzZWFyY2ggPSBlbW9qaS5fZGF0YS5zZWFyY2hcbiAgICAgICAgICAgICAgbGV0IHN1YiA9IHZhbHVlLnN1YnN0cigwLCBsZW5ndGgpXG4gICAgICAgICAgICAgIGxldCBzdWJJbmRleCA9IHNlYXJjaC5pbmRleE9mKHN1YilcbiAgICAgICAgICAgICAgaWYgKHN1YkluZGV4ICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjb3JlID0gc3ViSW5kZXggKyAxXG4gICAgICAgICAgICAgICAgaWYgKHN1YiA9PSBlbW9qaUlkKSBzY29yZSA9IDBcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleC5yZXN1bHRzLnB1c2goZW1vamkpXG4gICAgICAgICAgICAgICAgY3VycmVudEluZGV4LmVtb2ppc1tlbW9qaUlkXSA9IGVtb2ppXG5cbiAgICAgICAgICAgICAgICBzY29yZXNbZW1vamlJZF0gPSBzY29yZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50SW5kZXgucmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBhU2NvcmUgPSBzY29yZXNbYS5pZF0sXG4gICAgICAgICAgICAgICAgYlNjb3JlID0gc2NvcmVzW2IuaWRdXG4gICAgICAgICAgICAgIHJldHVybiBhU2NvcmUgLSBiU2NvcmVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY29udGludWUgc2VhcmNoIGluIHRoZSByZWR1Y2VkIHNldCBvZiBlbW9qaXNcbiAgICAgICAgICBlbW9qaXMgPSBjdXJyZW50SW5kZXguZW1vamlzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleC5yZXN1bHRzXG4gICAgICAgIC8vIFRoZSBcImZpbHRlclwiIGNhbGwgcmVtb3ZlcyB1bmRlZmluZWQgdmFsdWVzIGZyb20gYWxsUmVzdWx0c1xuICAgICAgICAvLyBhcnJheSwgZm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgXCJ0ZXN0IFwiICh3aXRoIHRyYWlsaW5nIHNwYWNlKSxcbiAgICAgICAgLy8gd2Ugd2lsbCBnZXQgXCJbQXJyYXksIHVuZGVmaW5lZF1cIiBmb3IgYWxsUmVzdWx0cyBhbmQgYWZ0ZXJcbiAgICAgICAgLy8gdGhlIFwiZmlsdGVyXCIgY2FsbCBpdCB3aWxsIHR1cm4gaW50byBcIltBcnJheV1cIlxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGEpID0+IGEpXG5cbiAgICB2YXIgcmVzdWx0cyA9IG51bGxcbiAgICBpZiAoYWxsUmVzdWx0cy5sZW5ndGggPiAxKSB7XG4gICAgICByZXN1bHRzID0gaW50ZXJzZWN0LmFwcGx5KG51bGwsIGFsbFJlc3VsdHMpXG4gICAgfSBlbHNlIGlmIChhbGxSZXN1bHRzLmxlbmd0aCkge1xuICAgICAgcmVzdWx0cyA9IGFsbFJlc3VsdHNbMF1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IFtdXG4gICAgfVxuICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gbWF4UmVzdWx0cykge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc2xpY2UoMCwgbWF4UmVzdWx0cylcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfVxuXG4gIGFkZEN1c3RvbUVtb2ppKGN1c3RvbUVtb2ppKSB7XG4gICAgbGV0IGVtb2ppRGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGN1c3RvbUVtb2ppLCB7XG4gICAgICBpZDogY3VzdG9tRW1vamkuc2hvcnRfbmFtZXNbMF0sXG4gICAgICBjdXN0b206IHRydWUsXG4gICAgfSlcbiAgICBpZiAoIWVtb2ppRGF0YS5zZWFyY2gpIHtcbiAgICAgIGVtb2ppRGF0YS5zZWFyY2ggPSBidWlsZFNlYXJjaChlbW9qaURhdGEpXG4gICAgfVxuICAgIGxldCBlbW9qaSA9IG5ldyBFbW9qaURhdGEoZW1vamlEYXRhKVxuICAgIHRoaXMuX2Vtb2ppc1tlbW9qaS5pZF0gPSBlbW9qaVxuICAgIHRoaXMuX2N1c3RvbUNhdGVnb3J5LmVtb2ppcy5wdXNoKGVtb2ppKVxuICAgIHJldHVybiBlbW9qaVxuICB9XG5cbiAgYWRkRW1vamkoZW1vamlJZCkge1xuICAgIC8vIFdlIGV4cGVjdCB0aGUgY29ycmVjdCBlbW9qaSBpZCB0aGF0IGlzIHByZXNlbnQgaW4gdGhlIGVtb2ppcyBkYXRhLlxuICAgIGxldCBkYXRhID0gdGhpcy5fZGF0YS5lbW9qaXNbZW1vamlJZF1cblxuICAgIGlmICghdGhpcy5pc0Vtb2ppTmVlZGVkKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBsZXQgZW1vamkgPSBuZXcgRW1vamlEYXRhKGRhdGEpXG4gICAgdGhpcy5fZW1vamlzW2Vtb2ppSWRdID0gZW1vamlcbiAgICBpZiAoZW1vamkubmF0aXZlKSB7XG4gICAgICB0aGlzLl9uYXRpdmVFbW9qaXNbZW1vamkubmF0aXZlXSA9IGVtb2ppXG4gICAgfVxuICAgIGlmIChlbW9qaS5fc2tpbnMpIHtcbiAgICAgIGZvciAobGV0IGlkeCBpbiBlbW9qaS5fc2tpbnMpIHtcbiAgICAgICAgbGV0IHNraW4gPSBlbW9qaS5fc2tpbnNbaWR4XVxuICAgICAgICBpZiAoc2tpbi5uYXRpdmUpIHtcbiAgICAgICAgICB0aGlzLl9uYXRpdmVFbW9qaXNbc2tpbi5uYXRpdmVdID0gc2tpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVtb2ppLmVtb3RpY29ucykge1xuICAgICAgZW1vamkuZW1vdGljb25zLmZvckVhY2goKGVtb3RpY29uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9lbW90aWNvbnNbZW1vdGljb25dKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW1vdGljb25zW2Vtb3RpY29uXSA9IGVtb2ppSWRcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBlbW9qaVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHdlIG5lZWQgdG8gaW5jbHVkZSBnaXZlbiBjYXRlZ29yeS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhdGVnb3J5X2lkIC0gVGhlIGNhdGVnb3J5IGlkLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSAtIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZW1vamkuXG4gICAqL1xuICBpc0NhdGVnb3J5TmVlZGVkKGNhdGVnb3J5X2lkKSB7XG4gICAgbGV0IGlzSW5jbHVkZWQgPVxuICAgICAgdGhpcy5faW5jbHVkZSAmJiB0aGlzLl9pbmNsdWRlLmxlbmd0aFxuICAgICAgICA/IHRoaXMuX2luY2x1ZGUuaW5kZXhPZihjYXRlZ29yeV9pZCkgPiAtMVxuICAgICAgICA6IHRydWVcbiAgICBsZXQgaXNFeGNsdWRlZCA9XG4gICAgICB0aGlzLl9leGNsdWRlICYmIHRoaXMuX2V4Y2x1ZGUubGVuZ3RoXG4gICAgICAgID8gdGhpcy5fZXhjbHVkZS5pbmRleE9mKGNhdGVnb3J5X2lkKSA+IC0xXG4gICAgICAgIDogZmFsc2VcbiAgICBpZiAoIWlzSW5jbHVkZWQgfHwgaXNFeGNsdWRlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgd2UgbmVlZCB0byBpbmNsdWRlIGdpdmVuIGVtb2ppLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZW1vamkgLSBUaGUgcmF3IGVtb2ppIG9iamVjdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGVtb2ppLlxuICAgKi9cbiAgaXNFbW9qaU5lZWRlZChlbW9qaSkge1xuICAgIGlmICh0aGlzLl9lbW9qaXNGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbW9qaXNGaWx0ZXIoZW1vamkpXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVtb2ppRGF0YSB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0aGlzLl9kYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSlcbiAgICB0aGlzLl9za2lucyA9IG51bGxcbiAgICBpZiAodGhpcy5fZGF0YS5za2luX3ZhcmlhdGlvbnMpIHtcbiAgICAgIHRoaXMuX3NraW5zID0gW11cbiAgICAgIGZvciAodmFyIHNraW5JZHggaW4gU0tJTlMpIHtcbiAgICAgICAgbGV0IHNraW5LZXkgPSBTS0lOU1tza2luSWR4XVxuICAgICAgICBsZXQgdmFyaWF0aW9uRGF0YSA9IHRoaXMuX2RhdGEuc2tpbl92YXJpYXRpb25zW3NraW5LZXldXG4gICAgICAgIGxldCBza2luRGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEpXG4gICAgICAgIGZvciAobGV0IGsgaW4gdmFyaWF0aW9uRGF0YSkge1xuICAgICAgICAgIHNraW5EYXRhW2tdID0gdmFyaWF0aW9uRGF0YVtrXVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBza2luRGF0YS5za2luX3ZhcmlhdGlvbnNcbiAgICAgICAgc2tpbkRhdGFbJ3NraW5fdG9uZSddID0gcGFyc2VJbnQoc2tpbklkeCkgKyAxXG4gICAgICAgIHRoaXMuX3NraW5zLnB1c2gobmV3IEVtb2ppRGF0YShza2luRGF0YSkpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3Nhbml0aXplZCA9IHNhbml0aXplKHRoaXMuX2RhdGEpXG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMuX3Nhbml0aXplZCkge1xuICAgICAgdGhpc1trZXldID0gdGhpcy5fc2FuaXRpemVkW2tleV1cbiAgICB9XG4gICAgdGhpcy5zaG9ydF9uYW1lcyA9IHRoaXMuX2RhdGEuc2hvcnRfbmFtZXNcbiAgICB0aGlzLnNob3J0X25hbWUgPSB0aGlzLl9kYXRhLnNob3J0X25hbWVzWzBdXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKVxuICB9XG5cbiAgZ2V0U2tpbihza2luSWR4KSB7XG4gICAgaWYgKHNraW5JZHggJiYgc2tpbklkeCAhPSAnbmF0aXZlJyAmJiB0aGlzLl9za2lucykge1xuICAgICAgcmV0dXJuIHRoaXMuX3NraW5zW3NraW5JZHggLSAxXVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0UG9zaXRpb24oKSB7XG4gICAgbGV0IG11bHRpcGx5ID0gMTAwIC8gU0hFRVRfQ09MVU1OUyxcbiAgICAgIHggPSBNYXRoLnJvdW5kKG11bHRpcGx5ICogdGhpcy5fZGF0YS5zaGVldF94ICogMTAwKSAvIDEwMCxcbiAgICAgIHkgPSBNYXRoLnJvdW5kKG11bHRpcGx5ICogdGhpcy5fZGF0YS5zaGVldF95ICogMTAwKSAvIDEwMFxuICAgIHJldHVybiBgJHt4fSUgJHt5fSVgXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVtb2ppVmlldyB7XG4gIC8qKlxuICAgKiBlbW9qaSAtIEVtb2ppIHRvIGRpc3BsYXlcbiAgICogc2V0IC0gc3RyaW5nLCBlbW9qaSBzZXQgbmFtZVxuICAgKiBuYXRpdmUgLSBib29sZWFuLCB3aGV0aGVyIHRvIHJlbmRlciBuYXRpdmUgZW1vamlcbiAgICogZmFsbGJhY2sgLSBmYWxsYmFjayBmdW5jdGlvbiB0byByZW5kZXIgbWlzc2luZyBlbW9qaSwgb3B0aW9uYWxcbiAgICogZW1vamlUb29sdGlwIC0gd2V0aGVyIHdlIG5lZWQgdG8gc2hvdyB0aGUgZW1vamkgdG9vbHRpcCwgb3B0aW9uYWxcbiAgICogZW1vamlTaXplIC0gZW1vamkgc2l6ZSBpbiBwaXhlbHMsIG9wdGlvbmFsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbW9qaSwgc2tpbiwgc2V0LCBuYXRpdmUsIGZhbGxiYWNrLCBlbW9qaVRvb2x0aXAsIGVtb2ppU2l6ZSkge1xuICAgIHRoaXMuX2Vtb2ppID0gZW1vamlcbiAgICB0aGlzLl9uYXRpdmUgPSBuYXRpdmVcbiAgICB0aGlzLl9za2luID0gc2tpblxuICAgIHRoaXMuX3NldCA9IHNldFxuICAgIHRoaXMuX2ZhbGxiYWNrID0gZmFsbGJhY2tcblxuICAgIHRoaXMuY2FuUmVuZGVyID0gdGhpcy5fY2FuUmVuZGVyKClcbiAgICB0aGlzLmNzc0NsYXNzID0gdGhpcy5fY3NzQ2xhc3MoKVxuICAgIHRoaXMuY3NzU3R5bGUgPSB0aGlzLl9jc3NTdHlsZShlbW9qaVNpemUpXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5fY29udGVudCgpXG4gICAgdGhpcy50aXRsZSA9IGVtb2ppVG9vbHRpcCA9PT0gdHJ1ZSA/IGVtb2ppLnNob3J0X25hbWUgOiBudWxsXG5cbiAgICBPYmplY3QuZnJlZXplKHRoaXMpXG4gIH1cblxuICBnZXRFbW9qaSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW1vamkuZ2V0U2tpbih0aGlzLl9za2luKVxuICB9XG5cbiAgX2NhblJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5faXNDdXN0b20oKSB8fCB0aGlzLl9pc05hdGl2ZSgpIHx8IHRoaXMuX2hhc0Vtb2ppKCkgfHwgdGhpcy5fZmFsbGJhY2tcbiAgICApXG4gIH1cblxuICBfY3NzQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFsnZW1vamktc2V0LScgKyB0aGlzLl9zZXQsICdlbW9qaS10eXBlLScgKyB0aGlzLl9lbW9qaVR5cGUoKV1cbiAgfVxuXG4gIF9jc3NTdHlsZShlbW9qaVNpemUpIHtcbiAgICBsZXQgY3NzU3R5bGUgPSB7fVxuICAgIGlmICh0aGlzLl9pc0N1c3RvbSgpKSB7XG4gICAgICBjc3NTdHlsZSA9IHtcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiAndXJsKCcgKyB0aGlzLmdldEVtb2ppKCkuX2RhdGEuaW1hZ2VVcmwgKyAnKScsXG4gICAgICAgIGJhY2tncm91bmRTaXplOiAnMTAwJScsXG4gICAgICAgIHdpZHRoOiBlbW9qaVNpemUgKyAncHgnLFxuICAgICAgICBoZWlnaHQ6IGVtb2ppU2l6ZSArICdweCcsXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9oYXNFbW9qaSgpICYmICF0aGlzLl9pc05hdGl2ZSgpKSB7XG4gICAgICBjc3NTdHlsZSA9IHtcbiAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiB0aGlzLmdldEVtb2ppKCkuZ2V0UG9zaXRpb24oKSxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVtb2ppU2l6ZSkge1xuICAgICAgaWYgKHRoaXMuX2lzTmF0aXZlKCkpIHtcbiAgICAgICAgLy8gU2V0IGZvbnQtc2l6ZSBmb3IgbmF0aXZlIGVtb2ppLlxuICAgICAgICBjc3NTdHlsZSA9IE9iamVjdC5hc3NpZ24oY3NzU3R5bGUsIHtcbiAgICAgICAgICAvLyBmb250LXNpemUgaXMgdXNlZCBmb3IgbmF0aXZlIGVtb2ppIHdoaWNoIHdlIG5lZWRcbiAgICAgICAgICAvLyB0byBzY2FsZSB3aXRoIDAuOCBmYWN0b3IgdG8gaGF2ZSB0aGVtIGxvb2sgYXBwcm94aW1hdGVseVxuICAgICAgICAgIC8vIHRoZSBzYW1lIHNpemUgYXMgaW1hZ2UtYmFzZWQgZW1vamwuXG4gICAgICAgICAgZm9udFNpemU6IE1hdGgucm91bmQoZW1vamlTaXplICogMC44ICogMTApIC8gMTAgKyAncHgnLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2V0IHdpZHRoL2hlaWdodCBmb3IgaW1hZ2UgZW1vamkuXG4gICAgICAgIGNzc1N0eWxlID0gT2JqZWN0LmFzc2lnbihjc3NTdHlsZSwge1xuICAgICAgICAgIHdpZHRoOiBlbW9qaVNpemUgKyAncHgnLFxuICAgICAgICAgIGhlaWdodDogZW1vamlTaXplICsgJ3B4JyxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNzc1N0eWxlXG4gIH1cblxuICBfY29udGVudCgpIHtcbiAgICBpZiAodGhpcy5faXNDdXN0b20oKSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0aGlzLl9pc05hdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRFbW9qaSgpLm5hdGl2ZVxuICAgIH1cbiAgICBpZiAodGhpcy5faGFzRW1vamkoKSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mYWxsYmFjayA/IHRoaXMuX2ZhbGxiYWNrKHRoaXMuZ2V0RW1vamkoKSkgOiBudWxsXG4gIH1cblxuICBfaXNOYXRpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdGl2ZVxuICB9XG5cbiAgX2lzQ3VzdG9tKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVtb2ppKCkuY3VzdG9tXG4gIH1cblxuICBfaGFzRW1vamkoKSB7XG4gICAgaWYgKCF0aGlzLmdldEVtb2ppKCkuX2RhdGEpIHtcbiAgICAgIC8vIFJldHVybiBmYWxzZSBpZiB3ZSBoYXZlIG5vIGRhdGEuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgY29uc3QgaGFzSW1hZ2UgPSB0aGlzLmdldEVtb2ppKCkuX2RhdGFbJ2hhc19pbWdfJyArIHRoaXMuX3NldF1cbiAgICBpZiAoaGFzSW1hZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gaGFzX2ltZ194eHggaW4gdGhlIGRhdGEsIHdlIGFyZSB3b3JraW5nIHdpdGhcbiAgICAgIC8vIHNwZWNpZmljIGRhdGEgZmlsZSwgbGlrZSBmYWNlYm9vay5qc29uLCBzbyB3ZSBhc3N1bWUgYWxsXG4gICAgICAvLyBlbW9qaXMgYXJlIGF2YWlsYWJsZSAodGhlIDpzZXQgc2V0dGluZyBmb3IgcGlja2VyIHNob3VsZFxuICAgICAgLy8gbWF0Y2ggdGhlIGRhdGEgZmlsZSkuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIHdlIGFyZSB1c2luZyBhbGwuanNvbiBhbmQgY2FuIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudFxuICAgIC8vIHNldHMgLSBpbiB0aGlzIGNhc2UgdGhlIGBoYXNfaW1nX3tzZXRfbmFtZX1gIGlzIGEgYm9vbGVhbiB0aGF0XG4gICAgLy8gaW5kaWNhdGVzIGlmIHRoZXJlIGlzIHN1Y2ggaW1hZ2Ugb3Igbm90IGZvciBhIGdpdmVuIHNldC5cbiAgICByZXR1cm4gaGFzSW1hZ2VcbiAgfVxuXG4gIF9lbW9qaVR5cGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzQ3VzdG9tKCkpIHtcbiAgICAgIHJldHVybiAnY3VzdG9tJ1xuICAgIH1cbiAgICBpZiAodGhpcy5faXNOYXRpdmUoKSkge1xuICAgICAgcmV0dXJuICduYXRpdmUnXG4gICAgfVxuICAgIGlmICh0aGlzLl9oYXNFbW9qaSgpKSB7XG4gICAgICByZXR1cm4gJ2ltYWdlJ1xuICAgIH1cbiAgICByZXR1cm4gJ2ZhbGxiYWNrJ1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZShlbW9qaSkge1xuICB2YXIge1xuICAgICAgbmFtZSxcbiAgICAgIHNob3J0X25hbWVzLFxuICAgICAgc2tpbl90b25lLFxuICAgICAgc2tpbl92YXJpYXRpb25zLFxuICAgICAgZW1vdGljb25zLFxuICAgICAgdW5pZmllZCxcbiAgICAgIGN1c3RvbSxcbiAgICAgIGltYWdlVXJsLFxuICAgIH0gPSBlbW9qaSxcbiAgICBpZCA9IGVtb2ppLmlkIHx8IHNob3J0X25hbWVzWzBdLFxuICAgIGNvbG9ucyA9IGA6JHtpZH06YFxuXG4gIGlmIChjdXN0b20pIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBuYW1lLFxuICAgICAgY29sb25zLFxuICAgICAgZW1vdGljb25zLFxuICAgICAgY3VzdG9tLFxuICAgICAgaW1hZ2VVcmwsXG4gICAgfVxuICB9XG5cbiAgaWYgKHNraW5fdG9uZSkge1xuICAgIGNvbG9ucyArPSBgOnNraW4tdG9uZS0ke3NraW5fdG9uZX06YFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICBuYW1lLFxuICAgIGNvbG9ucyxcbiAgICBlbW90aWNvbnMsXG4gICAgdW5pZmllZDogdW5pZmllZC50b0xvd2VyQ2FzZSgpLFxuICAgIHNraW46IHNraW5fdG9uZSB8fCAoc2tpbl92YXJpYXRpb25zID8gMSA6IG51bGwpLFxuICAgIG5hdGl2ZTogdW5pZmllZFRvTmF0aXZlKHVuaWZpZWQpLFxuICB9XG59XG4iLCJpbXBvcnQgc3RvcmUgZnJvbSAnLi9zdG9yZSdcblxuY29uc3QgREVGQVVMVFMgPSBbXG4gICcrMScsXG4gICdncmlubmluZycsXG4gICdraXNzaW5nX2hlYXJ0JyxcbiAgJ2hlYXJ0X2V5ZXMnLFxuICAnbGF1Z2hpbmcnLFxuICAnc3R1Y2tfb3V0X3Rvbmd1ZV93aW5raW5nX2V5ZScsXG4gICdzd2VhdF9zbWlsZScsXG4gICdqb3knLFxuICAnc2NyZWFtJyxcbiAgJ2Rpc2FwcG9pbnRlZCcsXG4gICd1bmFtdXNlZCcsXG4gICd3ZWFyeScsXG4gICdzb2InLFxuICAnc3VuZ2xhc3NlcycsXG4gICdoZWFydCcsXG4gICdwb29wJyxcbl1cblxubGV0IGZyZXF1ZW50bHksIGluaXRpYWxpemVkXG5sZXQgZGVmYXVsdHMgPSB7fVxuXG5mdW5jdGlvbiBpbml0KCkge1xuICBpbml0aWFsaXplZCA9IHRydWVcbiAgZnJlcXVlbnRseSA9IHN0b3JlLmdldCgnZnJlcXVlbnRseScpXG59XG5cbmZ1bmN0aW9uIGFkZChlbW9qaSkge1xuICBpZiAoIWluaXRpYWxpemVkKSBpbml0KClcbiAgdmFyIHsgaWQgfSA9IGVtb2ppXG5cbiAgZnJlcXVlbnRseSB8fCAoZnJlcXVlbnRseSA9IGRlZmF1bHRzKVxuICBmcmVxdWVudGx5W2lkXSB8fCAoZnJlcXVlbnRseVtpZF0gPSAwKVxuICBmcmVxdWVudGx5W2lkXSArPSAxXG5cbiAgc3RvcmUuc2V0KCdsYXN0JywgaWQpXG4gIHN0b3JlLnNldCgnZnJlcXVlbnRseScsIGZyZXF1ZW50bHkpXG59XG5cbmZ1bmN0aW9uIGdldChtYXhOdW1iZXIpIHtcbiAgaWYgKCFpbml0aWFsaXplZCkgaW5pdCgpXG4gIGlmICghZnJlcXVlbnRseSkge1xuICAgIGRlZmF1bHRzID0ge31cblxuICAgIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgICBsZXQgZGVmYXVsdExlbmd0aCA9IE1hdGgubWluKG1heE51bWJlciwgREVGQVVMVFMubGVuZ3RoKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVmYXVsdExlbmd0aDsgaSsrKSB7XG4gICAgICBkZWZhdWx0c1tERUZBVUxUU1tpXV0gPSBkZWZhdWx0TGVuZ3RoIC0gaVxuICAgICAgcmVzdWx0LnB1c2goREVGQVVMVFNbaV0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgY29uc3QgcXVhbnRpdHkgPSBtYXhOdW1iZXJcbiAgY29uc3QgZnJlcXVlbnRseUtleXMgPSBbXVxuXG4gIGZvciAobGV0IGtleSBpbiBmcmVxdWVudGx5KSB7XG4gICAgaWYgKGZyZXF1ZW50bHkuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgZnJlcXVlbnRseUtleXMucHVzaChrZXkpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc29ydGVkID0gZnJlcXVlbnRseUtleXNcbiAgICAuc29ydCgoYSwgYikgPT4gZnJlcXVlbnRseVthXSAtIGZyZXF1ZW50bHlbYl0pXG4gICAgLnJldmVyc2UoKVxuICBjb25zdCBzbGljZWQgPSBzb3J0ZWQuc2xpY2UoMCwgcXVhbnRpdHkpXG5cbiAgY29uc3QgbGFzdCA9IHN0b3JlLmdldCgnbGFzdCcpXG5cbiAgaWYgKGxhc3QgJiYgc2xpY2VkLmluZGV4T2YobGFzdCkgPT0gLTEpIHtcbiAgICBzbGljZWQucG9wKClcbiAgICBzbGljZWQucHVzaChsYXN0KVxuICB9XG5cbiAgcmV0dXJuIHNsaWNlZFxufVxuXG5leHBvcnQgZGVmYXVsdCB7IGFkZCwgZ2V0IH1cbiIsImltcG9ydCBzdHJpbmdGcm9tQ29kZVBvaW50IGZyb20gJy4uL3BvbHlmaWxscy9zdHJpbmdGcm9tQ29kZVBvaW50J1xuXG5mdW5jdGlvbiB1bmlmaWVkVG9OYXRpdmUodW5pZmllZCkge1xuICB2YXIgdW5pY29kZXMgPSB1bmlmaWVkLnNwbGl0KCctJyksXG4gICAgY29kZVBvaW50cyA9IHVuaWNvZGVzLm1hcCgodSkgPT4gYDB4JHt1fWApXG5cbiAgcmV0dXJuIHN0cmluZ0Zyb21Db2RlUG9pbnQuYXBwbHkobnVsbCwgY29kZVBvaW50cylcbn1cblxuZnVuY3Rpb24gdW5pcShhcnIpIHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgIGlmIChhY2MuaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcbiAgICAgIGFjYy5wdXNoKGl0ZW0pXG4gICAgfVxuICAgIHJldHVybiBhY2NcbiAgfSwgW10pXG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdChhLCBiKSB7XG4gIGNvbnN0IHVuaXFBID0gdW5pcShhKVxuICBjb25zdCB1bmlxQiA9IHVuaXEoYilcblxuICByZXR1cm4gdW5pcUEuZmlsdGVyKChpdGVtKSA9PiB1bmlxQi5pbmRleE9mKGl0ZW0pID49IDApXG59XG5cbmZ1bmN0aW9uIGRlZXBNZXJnZShhLCBiKSB7XG4gIHZhciBvID0ge31cblxuICBmb3IgKGxldCBrZXkgaW4gYSkge1xuICAgIGxldCBvcmlnaW5hbFZhbHVlID0gYVtrZXldLFxuICAgICAgdmFsdWUgPSBvcmlnaW5hbFZhbHVlXG5cbiAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICB2YWx1ZSA9IGJba2V5XVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YWx1ZSA9IGRlZXBNZXJnZShvcmlnaW5hbFZhbHVlLCB2YWx1ZSlcbiAgICB9XG5cbiAgICBvW2tleV0gPSB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIG9cbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NvbmljZG9lL21lYXN1cmUtc2Nyb2xsYmFyXG5mdW5jdGlvbiBtZWFzdXJlU2Nyb2xsYmFyKCkge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09ICd1bmRlZmluZWQnKSByZXR1cm4gMFxuICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuXG4gIGRpdi5zdHlsZS53aWR0aCA9ICcxMDBweCdcbiAgZGl2LnN0eWxlLmhlaWdodCA9ICcxMDBweCdcbiAgZGl2LnN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCdcbiAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xuICBkaXYuc3R5bGUudG9wID0gJy05OTk5cHgnXG5cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpXG4gIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gZGl2Lm9mZnNldFdpZHRoIC0gZGl2LmNsaWVudFdpZHRoXG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KVxuXG4gIHJldHVybiBzY3JvbGxiYXJXaWR0aFxufVxuXG5leHBvcnQgeyB1bmlxLCBpbnRlcnNlY3QsIGRlZXBNZXJnZSwgdW5pZmllZFRvTmF0aXZlLCBtZWFzdXJlU2Nyb2xsYmFyIH1cbiIsImNvbnN0IEVtb2ppUHJvcHMgPSB7XG4gIG5hdGl2ZToge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHRvb2x0aXA6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBmYWxsYmFjazoge1xuICAgIHR5cGU6IEZ1bmN0aW9uLFxuICB9LFxuICBza2luOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDEsXG4gIH0sXG4gIHNldDoge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICBkZWZhdWx0OiAnYXBwbGUnLFxuICB9LFxuICBlbW9qaToge1xuICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG4gIHNpemU6IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgZGVmYXVsdDogbnVsbCxcbiAgfSxcbn1cblxuY29uc3QgUGlja2VyUHJvcHMgPSB7XG4gIHBlckxpbmU6IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgZGVmYXVsdDogOSxcbiAgfSxcbiAgbWF4U2VhcmNoUmVzdWx0czoge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiA3NSxcbiAgfSxcbiAgZW1vamlTaXplOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDI0LFxuICB9LFxuICB0aXRsZToge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICBkZWZhdWx0OiAnRW1vamkgTWFydOKEoicsXG4gIH0sXG4gIGVtb2ppOiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGRlZmF1bHQ6ICdkZXBhcnRtZW50X3N0b3JlJyxcbiAgfSxcbiAgY29sb3I6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZGVmYXVsdDogJyNhZTY1YzUnLFxuICB9LFxuICBzZXQ6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZGVmYXVsdDogJ2FwcGxlJyxcbiAgfSxcbiAgc2tpbjoge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiBudWxsLFxuICB9LFxuICBkZWZhdWx0U2tpbjoge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiAxLFxuICB9LFxuICBuYXRpdmU6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBlbW9qaVRvb2x0aXA6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBhdXRvRm9jdXM6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBpMThuOiB7XG4gICAgdHlwZTogT2JqZWN0LFxuICAgIGRlZmF1bHQoKSB7XG4gICAgICByZXR1cm4ge31cbiAgICB9LFxuICB9LFxuICBzaG93UHJldmlldzoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgc2hvd1NlYXJjaDoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgc2hvd0NhdGVnb3JpZXM6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHNob3dTa2luVG9uZXM6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGluZmluaXRlU2Nyb2xsOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBwaWNrZXJTdHlsZXM6IHtcbiAgICB0eXBlOiBPYmplY3QsXG4gICAgZGVmYXVsdCgpIHtcbiAgICAgIHJldHVybiB7fVxuICAgIH0sXG4gIH0sXG59XG5cbmV4cG9ydCB7IEVtb2ppUHJvcHMsIFBpY2tlclByb3BzIH1cbiIsInZhciBOQU1FU1BBQ0UgPSAnZW1vamktbWFydCdcblxuY29uc3QgX0pTT04gPSBKU09OXG5cbnZhciBpc0xvY2FsU3RvcmFnZVN1cHBvcnRlZCA9XG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICdsb2NhbFN0b3JhZ2UnIGluIHdpbmRvd1xuXG5sZXQgZ2V0dGVyXG5sZXQgc2V0dGVyXG5cbmZ1bmN0aW9uIHNldEhhbmRsZXJzKGhhbmRsZXJzKSB7XG4gIGhhbmRsZXJzIHx8IChoYW5kbGVycyA9IHt9KVxuXG4gIGdldHRlciA9IGhhbmRsZXJzLmdldHRlclxuICBzZXR0ZXIgPSBoYW5kbGVycy5zZXR0ZXJcbn1cblxuZnVuY3Rpb24gc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSkge1xuICBOQU1FU1BBQ0UgPSBuYW1lc3BhY2Vcbn1cblxuZnVuY3Rpb24gdXBkYXRlKHN0YXRlKSB7XG4gIGZvciAobGV0IGtleSBpbiBzdGF0ZSkge1xuICAgIGxldCB2YWx1ZSA9IHN0YXRlW2tleV1cbiAgICBzZXQoa2V5LCB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICBpZiAoc2V0dGVyKSB7XG4gICAgc2V0dGVyKGtleSwgdmFsdWUpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCFpc0xvY2FsU3RvcmFnZVN1cHBvcnRlZCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2VbYCR7TkFNRVNQQUNFfS4ke2tleX1gXSA9IF9KU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldChrZXkpIHtcbiAgaWYgKGdldHRlcikge1xuICAgIHJldHVybiBnZXR0ZXIoa2V5KVxuICB9IGVsc2Uge1xuICAgIGlmICghaXNMb2NhbFN0b3JhZ2VTdXBwb3J0ZWQpIHJldHVyblxuICAgIHRyeSB7XG4gICAgICB2YXIgdmFsdWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlW2Ake05BTUVTUEFDRX0uJHtrZXl9YF1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IHVwZGF0ZSwgc2V0LCBnZXQsIHNldE5hbWVzcGFjZSwgc2V0SGFuZGxlcnMgfVxuIiwiLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHA6Ly9teS5vcGVyYS5jb20vZW1vbGxlci9ibG9nLzIwMTEvMTIvMjAvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1lci1hbmltYXRpbmdcblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHBvbHlmaWxsIGJ5IEVyaWsgTcO2bGxlci4gZml4ZXMgZnJvbSBQYXVsIElyaXNoIGFuZCBUaW5vIFppamRlbFxuXG4vLyBNSVQgbGljZW5zZVxuXG52YXIgaXNXaW5kb3dBdmFpbGFibGUgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuXG5pc1dpbmRvd0F2YWlsYWJsZSAmJlxuICAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxhc3RUaW1lID0gMFxuICAgIHZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXVxuXG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID1cbiAgICAgICAgd2luZG93W3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ11cbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9XG4gICAgICAgIHdpbmRvd1t2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgd2luZG93W3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ11cbiAgICB9XG5cbiAgICBpZiAoIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpXG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oY2FsbGJhY2ssIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIGN1cnJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgICAgdmFyIHRpbWVUb0NhbGwgPSBNYXRoLm1heCgwLCAxNiAtIChjdXJyVGltZSAtIGxhc3RUaW1lKSlcbiAgICAgICAgdmFyIGlkID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY2FsbGJhY2soY3VyclRpbWUgKyB0aW1lVG9DYWxsKVxuICAgICAgICB9LCB0aW1lVG9DYWxsKVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VyclRpbWUgKyB0aW1lVG9DYWxsXG4gICAgICAgIHJldHVybiBpZFxuICAgICAgfVxuXG4gICAgaWYgKCF3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUpXG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpXG4gICAgICB9XG4gIH0pKClcbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9FbW9qaU1hcnQvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0Vtb2ppTWFydC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9jc3MvZW1vamktbWFydC5jc3M/YzlmYiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9kb2NzL2FwcC52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzdlZTAiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzRjYTMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlP2NlNjciLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhvdXRIb2xlcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvZG9jcy9hcHAudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9FbW9qaS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL1BpY2tlci52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9jYXRlZ29yeS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL3ByZXZpZXcudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9zZWFyY2gudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9za2lucy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oYXMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19odG1sLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1wcm90by5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmljdC1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1jb250ZXh0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy13cy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9jc3MvZW1vamktbWFydC5jc3MiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3F1YXNhci1mcmFtZXdvcmsvZGlzdC91bWQvcXVhc2FyLm1hdC5jc3MiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzg3M2QiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3F1YXNhci1mcmFtZXdvcmsvZGlzdC9xdWFzYXIubWF0LmVzbS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvcXVhc2FyLWZyYW1ld29yay9kaXN0L3VtZC9xdWFzYXIubWF0LmNzcz8xZTJhIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL2RvY3MvYXBwLnZ1ZT85M2MwIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL0Vtb2ppLnZ1ZT8wNTQ1Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL1BpY2tlci52dWU/YzNkNyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9hbmNob3JzLnZ1ZT8zNGRhIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL2NhdGVnb3J5LnZ1ZT80MjRhIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3ByZXZpZXcudnVlP2Y3MTgiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2VhcmNoLnZ1ZT8yZDJiIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NraW5zLnZ1ZT9jMzQ5Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlP2E5NjgiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvbGlzdFRvU3R5bGVzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUucnVudGltZS5lc20uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Lyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9FbW9qaS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvRW1vamkudnVlP2MyMWIiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvRW1vamkudnVlPzk0YWQiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvUGlja2VyLnZ1ZSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9QaWNrZXIudnVlPzJkZDciLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvUGlja2VyLnZ1ZT9mMGYyIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlP2QxYTUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvYW5jaG9ycy52dWU/MWI5OCIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9jYXRlZ29yeS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvY2F0ZWdvcnkudnVlPzNlMzUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvY2F0ZWdvcnkudnVlPzczYjUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvcHJldmlldy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvcHJldmlldy52dWU/NWVkMyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9wcmV2aWV3LnZ1ZT9lMzU5Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NlYXJjaC52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2VhcmNoLnZ1ZT9mNTJkIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NlYXJjaC52dWU/ZTU4NiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9za2lucy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2tpbnMudnVlPzhiZWIiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2tpbnMudnVlPzk5NWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2luZGV4LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9wb2x5ZmlsbHMvc3RyaW5nRnJvbUNvZGVQb2ludC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvc3Zncy9pbmRleC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZGF0YS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZW1vamktZGF0YS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZnJlcXVlbnRseS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL3V0aWxzL3NoYXJlZC1wcm9wcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvc3RvcmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL3ZlbmRvci9yYWYtcG9seWZpbGwuanMiXSwibmFtZXMiOlsiVnVlIiwidXNlIiwiUXVhc2FyIiwiZWwiLCJyZW5kZXIiLCJoIiwiQXBwIiwiX1N0cmluZyIsIlN0cmluZyIsImZyb21Db2RlUG9pbnQiLCJzdHJpbmdGcm9tQ29kZVBvaW50IiwiTUFYX1NJWkUiLCJjb2RlVW5pdHMiLCJoaWdoU3Vycm9nYXRlIiwibG93U3Vycm9nYXRlIiwiaW5kZXgiLCJsZW5ndGgiLCJhcmd1bWVudHMiLCJyZXN1bHQiLCJjb2RlUG9pbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIk1hdGgiLCJmbG9vciIsIlJhbmdlRXJyb3IiLCJwdXNoIiwiZnJvbUNoYXJDb2RlIiwiYXBwbHkiLCJTVkdzIiwiYWN0aXZpdHkiLCJjdXN0b20iLCJmbGFncyIsImZvb2RzIiwibmF0dXJlIiwib2JqZWN0cyIsInNtaWxleXMiLCJwZW9wbGUiLCJwbGFjZXMiLCJyZWNlbnQiLCJzeW1ib2xzIiwibWFwcGluZyIsIm5hbWUiLCJ1bmlmaWVkIiwibm9uX3F1YWxpZmllZCIsImhhc19pbWdfYXBwbGUiLCJoYXNfaW1nX2dvb2dsZSIsImhhc19pbWdfdHdpdHRlciIsImhhc19pbWdfZmFjZWJvb2siLCJrZXl3b3JkcyIsInNoZWV0IiwiZW1vdGljb25zIiwidGV4dCIsInNob3J0X25hbWVzIiwiYWRkZWRfaW4iLCJidWlsZFNlYXJjaCIsImVtb2ppIiwic2VhcmNoIiwiYWRkVG9TZWFyY2giLCJzdHJpbmdzIiwic3BsaXQiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic3RyaW5nIiwicyIsInRvTG93ZXJDYXNlIiwiaW5kZXhPZiIsImpvaW4iLCJkZWVwRnJlZXplIiwib2JqZWN0IiwicHJvcE5hbWVzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInZhbHVlIiwiZnJlZXplIiwidW5jb21wcmVzcyIsImRhdGEiLCJjb21wcmVzc2VkIiwiaWQiLCJlbW9qaXMiLCJrZXkiLCJ1bnNoaWZ0Iiwic2hlZXRfeCIsInNoZWV0X3kiLCJ0b0ZpeGVkIiwiU0hFRVRfQ09MVU1OUyIsIkNPTE9OU19SRUdFWCIsIlNLSU5TIiwiRW1vamlJbmRleCIsImVtb2ppc1RvU2hvd0ZpbHRlciIsImluY2x1ZGUiLCJleGNsdWRlIiwicmVjZW50TGVuZ3RoIiwiX2RhdGEiLCJfZW1vamlzRmlsdGVyIiwiX2luY2x1ZGUiLCJfZXhjbHVkZSIsIl9jdXN0b20iLCJfcmVjZW50IiwiZnJlcXVlbnRseSIsImdldCIsIl9lbW9qaXMiLCJfbmF0aXZlRW1vamlzIiwiX2Vtb3RpY29ucyIsIl9jYXRlZ29yaWVzIiwiX3JlY2VudENhdGVnb3J5IiwiX2N1c3RvbUNhdGVnb3J5IiwiX3NlYXJjaEluZGV4IiwiYnVpbGRJbmRleCIsImFsbENhdGVnb3JpZXMiLCJjYXRlZ29yaWVzIiwiZmlsdGVyIiwiaXRlbSIsImluY2x1ZGVzIiwic29ydCIsImEiLCJiIiwiaW5kZXhBIiwiaW5kZXhCIiwiY2F0ZWdvcnlEYXRhIiwiaXNDYXRlZ29yeU5lZWRlZCIsImNhdGVnb3J5IiwiZW1vamlJZCIsImFkZEVtb2ppIiwiY3VzdG9tRW1vamkiLCJhZGRDdXN0b21FbW9qaSIsIm1hcCIsImhhc0Vtb2ppIiwic2tpbiIsIm1hdGNoZXMiLCJtYXRjaCIsInBhcnNlSW50IiwiYWxpYXNlcyIsImhhc093blByb3BlcnR5IiwiZW1vamlPYmplY3QiLCJnZXRTa2luIiwiRXJyb3IiLCJrZXlzIiwidW5pY29kZUVtb2ppIiwibWF4UmVzdWx0cyIsInZhbHVlcyIsImFsbFJlc3VsdHMiLCJjdXJyZW50SW5kZXgiLCJjaGFySW5kZXgiLCJjaGFyIiwicmVzdWx0cyIsInNjb3JlcyIsInN1YiIsInN1YnN0ciIsInN1YkluZGV4Iiwic2NvcmUiLCJhU2NvcmUiLCJiU2NvcmUiLCJpbnRlcnNlY3QiLCJzbGljZSIsImVtb2ppRGF0YSIsImFzc2lnbiIsIkVtb2ppRGF0YSIsImlzRW1vamlOZWVkZWQiLCJuYXRpdmUiLCJfc2tpbnMiLCJpZHgiLCJlbW90aWNvbiIsImNhdGVnb3J5X2lkIiwiaXNJbmNsdWRlZCIsImlzRXhjbHVkZWQiLCJza2luX3ZhcmlhdGlvbnMiLCJza2luSWR4Iiwic2tpbktleSIsInZhcmlhdGlvbkRhdGEiLCJza2luRGF0YSIsImsiLCJfc2FuaXRpemVkIiwic2FuaXRpemUiLCJzaG9ydF9uYW1lIiwibXVsdGlwbHkiLCJ4Iiwicm91bmQiLCJ5IiwiRW1vamlWaWV3Iiwic2V0IiwiZmFsbGJhY2siLCJlbW9qaVRvb2x0aXAiLCJlbW9qaVNpemUiLCJfZW1vamkiLCJfbmF0aXZlIiwiX3NraW4iLCJfc2V0IiwiX2ZhbGxiYWNrIiwiY2FuUmVuZGVyIiwiX2NhblJlbmRlciIsImNzc0NsYXNzIiwiX2Nzc0NsYXNzIiwiY3NzU3R5bGUiLCJfY3NzU3R5bGUiLCJjb250ZW50IiwiX2NvbnRlbnQiLCJ0aXRsZSIsIl9pc0N1c3RvbSIsIl9pc05hdGl2ZSIsIl9oYXNFbW9qaSIsIl9lbW9qaVR5cGUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJnZXRFbW9qaSIsImltYWdlVXJsIiwiYmFja2dyb3VuZFNpemUiLCJ3aWR0aCIsImhlaWdodCIsImJhY2tncm91bmRQb3NpdGlvbiIsImdldFBvc2l0aW9uIiwiZm9udFNpemUiLCJoYXNJbWFnZSIsInVuZGVmaW5lZCIsInNraW5fdG9uZSIsImNvbG9ucyIsInVuaWZpZWRUb05hdGl2ZSIsIkRFRkFVTFRTIiwiaW5pdGlhbGl6ZWQiLCJkZWZhdWx0cyIsImluaXQiLCJzdG9yZSIsImFkZCIsIm1heE51bWJlciIsImRlZmF1bHRMZW5ndGgiLCJtaW4iLCJpIiwicXVhbnRpdHkiLCJmcmVxdWVudGx5S2V5cyIsInNvcnRlZCIsInJldmVyc2UiLCJzbGljZWQiLCJsYXN0IiwicG9wIiwidW5pY29kZXMiLCJjb2RlUG9pbnRzIiwidSIsInVuaXEiLCJhcnIiLCJyZWR1Y2UiLCJhY2MiLCJ1bmlxQSIsInVuaXFCIiwiZGVlcE1lcmdlIiwibyIsIm9yaWdpbmFsVmFsdWUiLCJtZWFzdXJlU2Nyb2xsYmFyIiwiZG9jdW1lbnQiLCJkaXYiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJvdmVyZmxvdyIsInBvc2l0aW9uIiwidG9wIiwiYm9keSIsImFwcGVuZENoaWxkIiwic2Nyb2xsYmFyV2lkdGgiLCJvZmZzZXRXaWR0aCIsImNsaWVudFdpZHRoIiwicmVtb3ZlQ2hpbGQiLCJFbW9qaVByb3BzIiwidHlwZSIsIkJvb2xlYW4iLCJkZWZhdWx0IiwidG9vbHRpcCIsIkZ1bmN0aW9uIiwicmVxdWlyZWQiLCJzaXplIiwiUGlja2VyUHJvcHMiLCJwZXJMaW5lIiwibWF4U2VhcmNoUmVzdWx0cyIsImNvbG9yIiwiZGVmYXVsdFNraW4iLCJhdXRvRm9jdXMiLCJpMThuIiwic2hvd1ByZXZpZXciLCJzaG93U2VhcmNoIiwic2hvd0NhdGVnb3JpZXMiLCJzaG93U2tpblRvbmVzIiwiaW5maW5pdGVTY3JvbGwiLCJwaWNrZXJTdHlsZXMiLCJOQU1FU1BBQ0UiLCJfSlNPTiIsIkpTT04iLCJpc0xvY2FsU3RvcmFnZVN1cHBvcnRlZCIsIndpbmRvdyIsImdldHRlciIsInNldHRlciIsInNldEhhbmRsZXJzIiwiaGFuZGxlcnMiLCJzZXROYW1lc3BhY2UiLCJuYW1lc3BhY2UiLCJ1cGRhdGUiLCJzdGF0ZSIsImxvY2FsU3RvcmFnZSIsInN0cmluZ2lmeSIsImUiLCJwYXJzZSIsImlzV2luZG93QXZhaWxhYmxlIiwibGFzdFRpbWUiLCJ2ZW5kb3JzIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJjYWxsYmFjayIsImVsZW1lbnQiLCJjdXJyVGltZSIsIkRhdGUiLCJnZXRUaW1lIiwidGltZVRvQ2FsbCIsIm1heCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFD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QThCLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsY0FBYyw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGNBQWMsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxlQUFlLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcscUJBQXFCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHdCQUF3Qiw4QkFBOEIsR0FBRyx3QkFBd0IsOEJBQThCLEdBQUcsd0JBQXdCLDhCQUE4QixHQUFHLHdCQUF3Qiw4QkFBOEIsR0FBRyx3QkFBd0IsOEJBQThCLEdBQUcsY0FBYyw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLG1CQUFtQiwyQkFBMkIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLGVBQWUsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLG1CQUFtQiw4QkFBOEIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLG1CQUFtQiw4QkFBOEIsR0FBRyxxQkFBcUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsd0JBQXdCLDhCQUE4QixHQUFHLHdCQUF3Qiw4QkFBOEIsR0FBRyx3QkFBd0IsOEJBQThCLEdBQUcsd0JBQXdCLDhCQUE4QixHQUFHLHdCQUF3Qiw4QkFBOEIsR0FBRyxlQUFlLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsY0FBYyw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiwyQkFBMkIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiwyQkFBMkIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLG1CQUFtQiw4QkFBOEIsR0FBRyxxQkFBcUIsOEJBQThCLEdBQUcscUJBQXFCLDhCQUE4QixHQUFHLHFCQUFxQiw4QkFBOEIsR0FBRyxxQkFBcUIsOEJBQThCLEdBQUcscUJBQXFCLDhCQUE4QixHQUFHLHFCQUFxQiw4QkFBOEIsR0FBRyxxQkFBcUIsOEJBQThCLEdBQUcscUJBQXFCLDhCQUE4QixHQUFHLHFCQUFxQiw4QkFBOEIsR0FBRyxzQkFBc0IsOEJBQThCLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLHNCQUFzQiw4QkFBOEIsR0FBRyxzQkFBc0IsOEJBQThCLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLFdBQVcsbUNBQW1DLEdBQUcsYUFBYSxtQ0FBbUMsR0FBRyxhQUFhLG1DQUFtQyxHQUFHLGFBQWEsbUNBQW1DLEdBQUcsYUFBYSxtQ0FBbUMsR0FBRyxhQUFhLG1DQUFtQyxHQUFHLGFBQWEsbUNBQW1DLEdBQUcsYUFBYSxtQ0FBbUMsR0FBRyxhQUFhLG1DQUFtQyxHQUFHLGFBQWEsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLFlBQVksbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixnQ0FBZ0MsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsWUFBWSxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsa0JBQWtCLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcsWUFBWSxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsWUFBWSxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsYUFBYSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLFlBQVksbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsZ0NBQWdDLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxhQUFhLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLGFBQWEsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFt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R0FBRyxZQUFZLG9CQUFvQixHQUFHLHVCQUF1QixxQkFBcUIsR0FBRyx1QkFBdUIsc0JBQXNCLEdBQUcsdUJBQXVCLG9CQUFvQixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyxZQUFZLHFCQUFxQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRyxZQUFZLG9CQUFvQixHQUFHLHVCQUF1QixxQkFBcUIsR0FBRyx1QkFBdUIsc0JBQXNCLEdBQUcsdUJBQXVCLG9CQUFvQixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyxZQUFZLHVCQUF1QixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyx1QkFBdUIsd0JBQXdCLEdBQUcsdUJBQXVCLHNCQUFzQixHQUFHLHVCQUF1Qix5QkFBeUIsR0FBRyxZQUFZLHNCQUFzQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRyxZQUFZLHVCQUF1QixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyx1QkFBdUIsd0JBQXdCLEdBQUcsdUJBQXVCLHNCQUFzQixHQUFHLHVCQUF1Qix5QkFBeUIsR0FBRyxZQUFZLHNCQUFzQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRyxZQUFZLHVCQUF1QixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyx1QkFBdUIsd0JBQXdCLEdBQUcsdUJBQXVCLHNCQUFzQixHQUFHLHVCQUF1Qix5QkFBeUIsR0FBRyxZQUFZLHNCQUFzQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRywyQkFBMkIsc0JBQXNCLEdBQUcsMkJBQTJCLHVCQUF1QixHQUFHLGNBQWMscUJBQXFCLHVCQUF1QixH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QUFDQSxvREFBb0QsY0FBYzs7QUFFbEU7QUFDQTs7Ozs7Ozs7Ozs7O0FDM0VBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7Ozs7Ozs7QUN2THRDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsS0FBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsT0FBTztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFx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QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUVRO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFtQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsS0FBcUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxxQ0FBcUMsZ0VBQWdFO0FBQ3JHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCw0QkFBNEIsK0JBQStCO0FBQzNELDRCQUE0QiwrQkFBK0I7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQyxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyx1RkFBdUY7QUFDNUY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEM7QUFDMUMsaUJBQWlCLHlCQUF5QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsU0FBUztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjs7QUFFMUIsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIscUJBQXFCO0FBQ3hDO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHlCQUF5QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix5QkFBeUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiwwQkFBMEI7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLG9CQUFvQixFQUFFOztBQUVwRDtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxLQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUlBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsS0FBcUM7QUFDekQ7QUFDQSxNQUFNLFNBQUU7QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUMscUJBQXFCLCtCQUErQjtBQUNwRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QjtBQUNBLHNCQUFzQixpQ0FBaUM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxNQUFNLEVBRU47QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssVUFBVSxJQUFxQztBQUNwRDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixvQkFBb0I7QUFDekM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLDhCQUE4QjtBQUM5QixNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0EsS0FBSyxNQUFNLEVBRU47QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixlQUFlO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxZQUFZLEtBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsMkJBQTJCLEVBQUU7QUFDdkUsS0FBSztBQUNMO0FBQ0EsMENBQTBDLDRCQUE0QixFQUFFO0FBQ3hFLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZUFBZTtBQUM5QyxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMkJBQTJCO0FBQ3RELGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyw2Q0FBNkMsRUFBRTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix3QkFBd0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELDRCQUE0QixFQUFFO0FBQ2xGLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELCtCQUErQixFQUFFO0FBQ3JGLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsYUFBYTs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxLQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxxQ0FBcUM7O0FBRXRFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1Q0FBdUMsRUFBRTtBQUNwRjtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsMkNBQTJDLEVBQUU7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLDhCQUE4QixFQUFFO0FBQ3JFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDLHVDQUF1Qzs7QUFFekUscUNBQXFDLDBCQUEwQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q3dPLGdCQUFZLENBQUN4TyxFQUFELENBQVo7QUFDRCxHQUZEO0FBR0gsQ0E1QkQsRUFERixDIiwiZmlsZSI6ImJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkVtb2ppTWFydFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJFbW9qaU1hcnRcIl0gPSBmYWN0b3J5KCk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vZG9jcy9pbmRleC5qc1wiKTtcbiIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZW1vamktbWFydC5jc3NcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiNmYwZTBmOGNcIiwgY29udGVudCwgZmFsc2UsIHt9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9lbW9qaS1tYXJ0LmNzc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZW1vamktbWFydC5jc3NcIik7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZmJjNzM1YiZzY29wZWQ9dHJ1ZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL2FwcC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00ZmJjNzM1YiZzY29wZWQ9dHJ1ZSZsYW5nPWNzcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNGZiYzczNWJcIixcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvc2ViL3dlYi9lbW9qaS1tYXJ0LXZ1ZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGZiYzczNWInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGZiYzczNWInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FwcC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNGZiYzczNWInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImRvY3MvYXBwLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmbGFuZz1jc3MmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmbGFuZz1jc3MmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZmJjNzM1YiZzY29wZWQ9dHJ1ZSZcIiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IEFwcCBmcm9tICcuL2FwcCdcblxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9xdWFzYXJmcmFtZXdvcmsvcXVhc2FyL2lzc3Vlcy8xNTc2XG4vLyBmb3IgdGhlIGluZm9ybWF0aW9uIGFib3V0IFF1YXNhciBpbnRlZ3JhdGlvbiBpbnRvIGV4aXN0aW5nIGFwcC5cbmltcG9ydCAncXVhc2FyLWZyYW1ld29yay9kaXN0L3VtZC9xdWFzYXIubWF0LmNzcydcbmltcG9ydCBRdWFzYXIgZnJvbSAncXVhc2FyLWZyYW1ld29yay9kaXN0L3F1YXNhci5tYXQuZXNtJ1xuVnVlLnVzZShRdWFzYXIpXG5cbm5ldyBWdWUoe1xuXHRlbDogJyNhcHAnLFxuXHRyZW5kZXI6IChoKSA9PiBoKEFwcCksXG59KVxuIiwiZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycjJbaV0gPSBhcnJbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheTsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQ7IiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4vZGVmaW5lUHJvcGVydHlcIik7XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgdmFyIG93bktleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvd25LZXlzID0gb3duS2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIG93bktleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0U3ByZWFkOyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheTsiLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJhcHBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8aDE+RW1vamkgTWFydCBWdWUg8J+PrDwvaDE+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGVtb2ppIDpkYXRhPVwiaW5kZXhcIiBlbW9qaT1cIjpzYW50YTo6c2tpbi10b25lLTM6XCIgOnNpemU9XCIzMlwiIC8+XG4gICAgICA8ZW1vamkgOmRhdGE9XCJpbmRleFwiIGVtb2ppPVwic2FudGFcIiBzZXQ9XCJ0d2l0dGVyXCIgOnNpemU9XCIzMlwiIC8+XG4gICAgICA8ZW1vamkgOmRhdGE9XCJpbmRleFwiIDplbW9qaT1cInNhbnRhRW1vamlPYmplY3RcIiA6c2l6ZT1cIjMyXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxidXR0b24gQGNsaWNrPVwidG9nZ2xlVmlzaWJsZVwiPlNob3cgLyBoaWRlIHRoZSBwaWNrZXI8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gQGNsaWNrPVwidG9nZ2xlVmlzaWJsZVwiIHYtaHRtbD1cInNtaWxlXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8dGVtcGxhdGVcbiAgICAgICAgdi1mb3I9XCJzZXQgaW4gWyduYXRpdmUnLCAnYXBwbGUnLCAnZ29vZ2xlJywgJ3R3aXR0ZXInLCAnZmFjZWJvb2snXVwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICA6a2V5PVwic2V0XCJcbiAgICAgICAgICBAY2xpY2s9XCJhY3RpdmVTZXQgPSBzZXRcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImFjdGl2ZVNldCA9PSBzZXRcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgc2V0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgdi1pZj1cImlzVmlzaWJsZVwiIGNsYXNzPVwicm93XCI+XG4gICAgICA8cGlja2VyXG4gICAgICAgIDpkYXRhPVwiaW5kZXhcIlxuICAgICAgICA6c2V0PVwiYWN0aXZlU2V0XCJcbiAgICAgICAgOm5hdGl2ZT1cIm5hdGl2ZVwiXG4gICAgICAgIDplbW9qaT1cImVtb2ppXCJcbiAgICAgICAgOmVtb2ppVG9vbHRpcD1cInRydWVcIlxuICAgICAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgICAgIDplbW9qaVNpemU9XCIzMFwiXG4gICAgICAgIEBzZWxlY3Q9XCJzaG93RW1vamlcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj57eyBlbW9qaXNPdXRwdXQgfX08L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3ctc21hbGxcIj5cbiAgICAgIDxpZnJhbWVcbiAgICAgICAgc3JjPVwiaHR0cHM6Ly9naGJ0bnMuY29tL2dpdGh1Yi1idG4uaHRtbD91c2VyPXNlcmVicm92JnJlcG89ZW1vamktbWFydC12dWUmdHlwZT1zdGFyJmNvdW50PXRydWVcIlxuICAgICAgICBmcmFtZUJvcmRlcj1cIjBcIlxuICAgICAgICBzY3JvbGxpbmc9XCIwXCJcbiAgICAgICAgd2lkdGg9XCI5MHB4XCJcbiAgICAgICAgaGVpZ2h0PVwiMjBweFwiXG4gICAgICA+PC9pZnJhbWU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+PC9kaXY+XG4gICAgPGgyPlFEaWFsb2cgRXhhbXBsZTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPHEtYnRuIGxhYmVsPVwiT3BlbiBRRGlhbG9nXCIgQGNsaWNrPVwiZW1vamlQaWNrZXJEaWFsb2cgPSB0cnVlXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxxLWRpYWxvZyB2LW1vZGVsPVwiZW1vamlQaWNrZXJEaWFsb2dcIj5cbiAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6Ym9keSBzdHlsZT1cImhlaWdodDo0NTBweFwiPlxuICAgICAgICA8cGlja2VyIDpkYXRhPVwiaW5kZXhcIiA6ZW1vamlTaXplPVwiMjRcIiA6bmF0aXZlPVwidHJ1ZVwiPjwvcGlja2VyPlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L3EtZGlhbG9nPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjwvZGl2PlxuICAgIDxoMj5DdXN0b20gRGlhbG9nIEV4YW1wbGU8L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxidXR0b24gQGNsaWNrPVwiZW1vamlQaWNrZXJDdXN0b21EaWFsb2cgPSB0cnVlXCI+XG4gICAgICAgIE9wZW4gQ3V0dG9tIERpYWxvZ1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXBcIiB2LWlmPVwiZW1vamlQaWNrZXJDdXN0b21EaWFsb2dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ib3hcIiBAY2xpY2s9XCJlbW9qaVBpY2tlckN1c3RvbURpYWxvZyA9IGZhbHNlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCIgQGNsaWNrPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNsb3NlXCI+XG4gICAgICAgICAgICA8YSBAY2xpY2s9XCJlbW9qaVBpY2tlckN1c3RvbURpYWxvZyA9IGZhbHNlXCI+WDwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8aDI+XG4gICAgICAgICAgICBFbW9qaSBTZWxlY3RvclxuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPHBpY2tlciA6ZGF0YT1cImluZGV4XCIgOmVtb2ppU2l6ZT1cIjI0XCIgOm5hdGl2ZT1cInRydWVcIj48L3BpY2tlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48L2Rpdj5cbiAgICA8aDI+Q3VzdG9tIFNlYXJjaCBBbmQgUHJldmlldyBUZW1wbGF0ZXMgRXhhbXBsZTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPFBpY2tlciA6ZGF0YT1cImluZGV4XCIgOm5hdGl2ZT1cInRydWVcIj5cbiAgICAgICAgPHRlbXBsYXRlIHNsb3Q9XCJzZWFyY2hUZW1wbGF0ZVwiIHNsb3Qtc2NvcGU9XCJzbG90UHJvcHNcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIDpwbGFjZWhvbGRlcj1cInNsb3RQcm9wcy5pMThuLnNlYXJjaFwiXG4gICAgICAgICAgICB2LW9uOmlucHV0PVwic2xvdFByb3BzLm9uU2VhcmNoKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgc2xvdD1cInByZXZpZXdUZW1wbGF0ZVwiIHNsb3Qtc2NvcGU9XCJzbG90UHJvcHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCI+XG4gICAgICAgICAgICAgIDxFbW9qaVxuICAgICAgICAgICAgICAgIDpkYXRhPVwic2xvdFByb3BzLmRhdGFcIlxuICAgICAgICAgICAgICAgIDplbW9qaT1cInNsb3RQcm9wcy5lbW9qaSA/IHNsb3RQcm9wcy5lbW9qaSA6ICdwb2ludF91cCdcIlxuICAgICAgICAgICAgICAgIDpuYXRpdmU9XCJzbG90UHJvcHMuZW1vamlQcm9wcy5uYXRpdmVcIlxuICAgICAgICAgICAgICAgIDpza2luPVwic2xvdFByb3BzLmVtb2ppUHJvcHMuc2tpblwiXG4gICAgICAgICAgICAgICAgOnNldD1cInNsb3RQcm9wcy5lbW9qaVByb3BzLnNldFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgc2xvdFByb3BzLmVtb2ppXG4gICAgICAgICAgICAgICAgICAgID8gJ34nICsgc2xvdFByb3BzLmVtb2ppLm5hbWUgKyAnfidcbiAgICAgICAgICAgICAgICAgICAgOiAnQ2hvb3NlLi4uJ1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZXNcIj5cbiAgICAgICAgICAgICAgICB7eyBzbG90UHJvcHMuZW1vamkgPyBzbG90UHJvcHMuZW1vamkuY29sb25zIDogJycgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDwvUGlja2VyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjwvZGl2PlxuICAgIDxoMj5GaWx0ZXJlZCBwaWNrZXIgZXhhbXBsZTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiIHYtc2hvdz1cImZsYWdzVmlzaWJsZVwiPlxuICAgICAgPFBpY2tlclxuICAgICAgICA6bmF0aXZlPVwidHJ1ZVwiXG4gICAgICAgIGVtb2ppPVwiZmxhZy10ZlwiXG4gICAgICAgIDplbW9qaVNpemU9XCIxOFwiXG4gICAgICAgIDpkYXRhPVwiaW5kZXhGaWx0ZXJlZFwiXG4gICAgICAgIHJlZj1cImZsYWdzXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ0b2dnbGVGbGFnc1Zpc2libGVcIj5cbiAgICAgICAgU2hvdyAvIGhpZGUgdGhlIGZsYWdzIHBpY2tlciAod2l0aCB2LXNob3cpXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48L2Rpdj5cbiAgICA8aDI+STE4biBwaWNrZXIgZXhhbXBsZTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPFBpY2tlciBlbW9qaT1cImRlcGFydG1lbnRfc3RvcmVcIiA6ZGF0YT1cImluZGV4STE4blwiIDppMThuPVwiaTE4blwiIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+PC9kaXY+XG4gICAgPGgyPkN1c3RvbSBvcmRlciBleGFtcGxlPC9oMj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8UGlja2VyIDpkYXRhPVwiaW5kZXhJbmNsdWRlXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IGRhdGEgZnJvbSAnLi4vZGF0YS9hbGwuanNvbidcbmltcG9ydCB7IFBpY2tlciwgRW1vamksIEVtb2ppSW5kZXggfSBmcm9tICcuLi9zcmMnXG5pbXBvcnQgJy4uL2Nzcy9lbW9qaS1tYXJ0LmNzcydcblxuaW1wb3J0IHsgUUJ0biwgUURpYWxvZyB9IGZyb20gJ3F1YXNhci1mcmFtZXdvcmsvZGlzdC9xdWFzYXIubWF0LmVzbSdcblxuY29uc3QgQ1VTVE9NX0VNT0pJUyA9IFtcbiAge1xuICAgIG5hbWU6ICdQYXJ0eSBQYXJyb3QnLFxuICAgIHNob3J0X25hbWVzOiBbJ3BhcnJvdCddLFxuICAgIGtleXdvcmRzOiBbJ3BhcnR5J10sXG4gICAgaW1hZ2VVcmw6ICcuL2ltYWdlcy9wYXJyb3QuZ2lmJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdPY3RvY2F0JyxcbiAgICBzaG9ydF9uYW1lczogWydvY3RvY2F0J10sXG4gICAga2V5d29yZHM6IFsnZ2l0aHViJ10sXG4gICAgaW1hZ2VVcmw6ICdodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2ltYWdlcy9pY29ucy9lbW9qaS9vY3RvY2F0LnBuZycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnU3F1aXJyZWwnLFxuICAgIHNob3J0X25hbWVzOiBbJ3NoaXBpdCcsICdzcXVpcnJlbCddLFxuICAgIGtleXdvcmRzOiBbJ2dpdGh1YiddLFxuICAgIGltYWdlVXJsOiAnaHR0cHM6Ly9naXRodWIuZ2l0aHViYXNzZXRzLmNvbS9pbWFnZXMvaWNvbnMvZW1vamkvc2hpcGl0LnBuZycsXG4gIH0sXG5dXG5cbmxldCBpbmRleCA9IG5ldyBFbW9qaUluZGV4KGRhdGEsIHtcbiAgY3VzdG9tOiBDVVNUT01fRU1PSklTLFxufSlcblxubGV0IGluZGV4RmlsdGVyZWQgPSBuZXcgRW1vamlJbmRleChkYXRhLCB7XG4gIGN1c3RvbTogQ1VTVE9NX0VNT0pJUyxcbiAgZW1vamlzVG9TaG93RmlsdGVyOiAoZW1vamkpID0+IHtcbiAgICByZXR1cm4gZW1vamkuc2hvcnRfbmFtZXNbMF0ubWF0Y2goL15mbGFnLiovKSAhPT0gbnVsbFxuICB9LFxufSlcblxuY29uc3QgaTE4biA9IHtcbiAgY2F0ZWdvcmllczoge1xuICAgIHNlYXJjaDogJ+aQnOe0oue7k+aenCcsXG4gICAgcmVjZW50OiAn57uP5bi45L2/55SoJyxcbiAgICBzbWlsZXlzOiAn5b+D5oOFJyxcbiAgICBwZW9wbGU6ICfkurrniaknLFxuICAgIG5hdHVyZTogJ+WKqOeJqSAmIOWkp+iHqueEticsXG4gICAgZm9vZHM6ICfpo5/niakgJiDppa7mlpknLFxuICAgIGFjdGl2aXR5OiAn5rS75YqoJyxcbiAgICBwbGFjZXM6ICfml4XooYwgJiDlnLDmoIcnLFxuICAgIG9iamVjdHM6ICfniankvZMnLFxuICAgIHN5bWJvbHM6ICfnrKblj7cnLFxuICAgIGZsYWdzOiAn5Zu95peXJyxcbiAgICBjdXN0b206ICfoh6rlrprkuYknLFxuICB9LFxufVxuXG5jb25zdCBpbmRleEkxOG4gPSBuZXcgRW1vamlJbmRleChkYXRhLCB7XG4gIGV4Y2x1ZGU6IFtcbiAgICAnZmxhZ3MnLFxuICAgICdzeW1ib2xzJyxcbiAgICAnb2JqZWN0cycsXG4gICAgJ2FjdGl2aXR5JyxcbiAgICAnZm9vZHMnLFxuICAgICdwZW9wbGUnLFxuICAgICdwbGFjZXMnLFxuICBdLFxufSlcblxuY29uc3QgaW5kZXhJbmNsdWRlID0gbmV3IEVtb2ppSW5kZXgoZGF0YSwge1xuICBpbmNsdWRlOiBbJ25hdHVyZScsICdzbWlsZXlzJywgJ3JlY2VudCddLFxufSlcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBpbmRleEZpbHRlcmVkOiBpbmRleEZpbHRlcmVkLFxuICAgICAgaW5kZXhJbmNsdWRlOiBpbmRleEluY2x1ZGUsXG4gICAgICBpbmRleEkxOG46IGluZGV4STE4bixcbiAgICAgIGkxOG46IGkxOG4sXG4gICAgICBhY3RpdmVTZXQ6ICduYXRpdmUnLFxuICAgICAgZW1vamk6ICdwb2ludF91cCcsXG4gICAgICB0aXRsZTogJ1BpY2sgeW91ciBlbW9qaeKApicsXG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBlbW9qaVBpY2tlckRpYWxvZzogZmFsc2UsXG4gICAgICBlbW9qaVBpY2tlckN1c3RvbURpYWxvZzogZmFsc2UsXG4gICAgICBlbW9qaXNPdXRwdXQ6ICcnLFxuICAgICAgZmxhZ3NWaXNpYmxlOiB0cnVlLFxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBuYXRpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVTZXQgPT0gJ25hdGl2ZSdcbiAgICB9LFxuICAgIHNtaWxlKCkge1xuICAgICAgLy8gU3RhdGljIGVtb2ppIGV4YW1wbGVcbiAgICAgIGxldCBlbW9qaSA9IGluZGV4LmZpbmRFbW9qaSgnOnNtaWxlOicpXG4gICAgICAvLyBOb3RlLCB0aGF0IHBvc2l0aW9uIGluIHRoZSBlbW9qaSBzaGVldCBpcyBjYWxjdWxhdGVkIGJ5XG4gICAgICAvLyBgZW1vamlgIG9iamVjdFxuICAgICAgbGV0IHN0eWxlID0gYGJhY2tncm91bmQtcG9zaXRpb246ICR7ZW1vamkuZ2V0UG9zaXRpb24oKX07IGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL3VucGtnLmNvbS9lbW9qaS1kYXRhc291cmNlLXR3aXR0ZXJANi4wLjEvaW1nL3R3aXR0ZXIvc2hlZXRzLTI1Ni82NC5wbmcpOyB3aWR0aDogMjRweDsgaGVpZ2h0OiAyNHB4OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJhY2tncm91bmQtc2l6ZTogNTcwMCVgXG4gICAgICByZXR1cm4gYDxkaXYgY2xhc3M9J2Vtb2ppJyBzdHlsZT1cIiR7c3R5bGV9XCI+PC9kaXY+YFxuICAgIH0sXG4gICAgc2FudGFFbW9qaU9iamVjdCgpIHtcbiAgICAgIHJldHVybiBpbmRleC5maW5kRW1vamkoJzpzYW50YTonKVxuICAgIH0sXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB0b2dnbGVWaXNpYmxlKCkge1xuICAgICAgdGhpcy5pc1Zpc2libGUgPSAhdGhpcy5pc1Zpc2libGVcbiAgICB9LFxuICAgIHRvZ2dsZUZsYWdzVmlzaWJsZSgpIHtcbiAgICAgIHRoaXMuZmxhZ3NWaXNpYmxlID0gIXRoaXMuZmxhZ3NWaXNpYmxlXG4gICAgICBpZiAoIXRoaXMuZmxhZ3NWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMuJHJlZnMuZmxhZ3Mub25BbmNob3JDbGljayh0aGlzLiRyZWZzLmZsYWdzLmNhdGVnb3JpZXNbMF0pXG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93RW1vamkoZW1vamkpIHtcbiAgICAgIHRoaXMuZW1vamlzT3V0cHV0ID0gdGhpcy5lbW9qaXNPdXRwdXQgKyBlbW9qaS5uYXRpdmVcbiAgICB9LFxuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgUGlja2VyLFxuICAgIEVtb2ppLFxuICAgIFFCdG4sXG4gICAgUURpYWxvZyxcbiAgfSxcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuYnV0dG9uICsgYnV0dG9uIHtcbiAgbWFyZ2luLWxlZnQ6IDAuNWVtO1xufVxuYnV0dG9uIHtcbiAgcGFkZGluZzogMC40ZW0gMC42ZW07XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBvdXRsaW5lOiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmJ1dHRvbltkaXNhYmxlZF0ge1xuICBib3JkZXItY29sb3I6ICNhZTY1YzU7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLm1vZGFsIHtcbiAgY29sb3I6IHJlZDtcbn1cblxuLyoqXG4gKiBTZWUgaHR0cHM6Ly92dWUtbG9hZGVyLnZ1ZWpzLm9yZy9ndWlkZS9zY29wZWQtY3NzLmh0bWwjZGVlcC1zZWxlY3RvcnNcbiAqIHRoZSBgPj4+YCBhbGxvd3MgdG8gYXBwbHkgc2NvcGVkIGNzcyB0byBjaGlsZCBlbGVtZW50IHRoYXQgaXMgZ2VuZXJhdGVkXG4gKiBkeW5hbWljYWxseVxuKiovXG4ubW9kYWwgPj4+IC5tb2RhbC1zY3JvbGwge1xuICBjb2xvcjogcmVkO1xuICBtYXgtaGVpZ2h0OiBub25lO1xufVxuLm1vZGFsIC5tb2RhbC1ib2R5IHtcbiAgbWF4LWhlaWdodDogbm9uZTtcbn1cblxuaDEge1xuICBmb250LWZhbWlseTogQ291cmllcjtcbiAgZm9udC1zaXplOiAycmVtO1xufVxuXG5oMiB7XG4gIGZvbnQtZmFtaWx5OiBDb3VyaWVyO1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIG1hcmdpbi10b3A6IDJyZW07XG59XG5cbi5hcHAgLnJvdyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ucm93ICsgLnJvdyB7XG4gIG1hcmdpbi10b3A6IDJlbTtcbn1cblxuLnJvdy1zbWFsbCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn1cblxuLmVtb2ppLW1hcnQge1xuICBtYXJnaW46IDAgYXV0bztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmVtb2ppLW1hcnQtdGl0bGUtbGFiZWwge1xuICBmb250LXNpemU6IDIxcHg7XG59XG5cbi5wb3B1cCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwdmg7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgei1pbmRleDogMjAwO1xuICBiYWNrZ3JvdW5kOiByZWJlY2NhcHVycGxlO1xuICBvcGFjaXR5OiA5NSU7XG59XG4ucG9wdXAtYm94IHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmctdG9wOiAxMjBweDtcbiAgcGFkZGluZy1ib3R0b206IDgwcHg7XG59XG4ucG9wdXAtY29udGVudCB7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBib3gtc2hhZG93OiAwcHggMjRweCA1NHB4IHJnYmEoMjAsIDI4LCA0OSwgMC4xNCk7XG4gIGJvcmRlci1yYWRpdXM6IDE4cHg7XG4gIHBhZGRpbmc6IDZweCA2cHggOXB4IDZweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA0NjJweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4ucG9wdXAtY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMjBweDtcbiAgcmlnaHQ6IDMwcHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxzcGFuXG4gICAgdi1pZj1cInZpZXcuY2FuUmVuZGVyXCJcbiAgICA6dGl0bGU9XCJ2aWV3LnRpdGxlXCJcbiAgICA6ZGF0YS10aXRsZT1cInRpdGxlXCJcbiAgICBjbGFzcz1cImVtb2ppLW1hcnQtZW1vamlcIlxuICAgIEBtb3VzZWVudGVyPVwib25Nb3VzZUVudGVyXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uTW91c2VMZWF2ZVwiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gID5cbiAgICA8c3BhbiA6Y2xhc3M9XCJ2aWV3LmNzc0NsYXNzXCIgOnN0eWxlPVwidmlldy5jc3NTdHlsZVwiPnt7XG4gICAgICB2aWV3LmNvbnRlbnRcbiAgICB9fTwvc3Bhbj5cbiAgPC9zcGFuPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IEVtb2ppUHJvcHMgfSBmcm9tICcuLi91dGlscy9zaGFyZWQtcHJvcHMnXG5pbXBvcnQgeyBFbW9qaVZpZXcgfSBmcm9tICcuLi91dGlscy9lbW9qaS1kYXRhJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgLi4uRW1vamlQcm9wcyxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gbmV3IEVtb2ppVmlldyhcbiAgICAgICAgdGhpcy5lbW9qaU9iamVjdCxcbiAgICAgICAgdGhpcy5za2luLFxuICAgICAgICB0aGlzLnNldCxcbiAgICAgICAgdGhpcy5uYXRpdmUsXG4gICAgICAgIHRoaXMuZmFsbGJhY2ssXG4gICAgICAgIHRoaXMudG9vbHRpcCxcbiAgICAgICAgdGhpcy5zaXplLFxuICAgICAgKVxuICAgIH0sXG4gICAgc2FuaXRpemVkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtb2ppT2JqZWN0Ll9zYW5pdGl6ZWRcbiAgICB9LFxuICAgIHRpdGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcCA/IHRoaXMuZW1vamlPYmplY3Quc2hvcnRfbmFtZSA6IG51bGxcbiAgICB9LFxuICAgIGVtb2ppT2JqZWN0KCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtb2ppID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmluZEVtb2ppKHRoaXMuZW1vamkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5lbW9qaVxuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZWQoKSB7fSxcbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLiRlbWl0KCdjbGljaycsIHRoaXMuZW1vamlPYmplY3QpXG4gICAgfSxcbiAgICBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdtb3VzZWVudGVyJywgdGhpcy5lbW9qaU9iamVjdClcbiAgICB9LFxuICAgIG9uTW91c2VMZWF2ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ21vdXNlbGVhdmUnLCB0aGlzLmVtb2ppT2JqZWN0KVxuICAgIH0sXG4gIH0sXG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQgZW1vamktbWFydC1zdGF0aWNcIiA6c3R5bGU9XCJjdXN0b21TdHlsZXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1iYXIgZW1vamktbWFydC1iYXItYW5jaG9yc1wiIHYtaWY9XCJzaG93Q2F0ZWdvcmllc1wiPlxuICAgICAgPGFuY2hvcnNcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmNvbG9yPVwiY29sb3JcIlxuICAgICAgICA6Y2F0ZWdvcmllcz1cImNhdGVnb3JpZXNcIlxuICAgICAgICA6YWN0aXZlLWNhdGVnb3J5PVwiYWN0aXZlQ2F0ZWdvcnlcIlxuICAgICAgICBAY2xpY2s9XCJvbkFuY2hvckNsaWNrXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8c2xvdFxuICAgICAgbmFtZT1cInNlYXJjaFRlbXBsYXRlXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6aTE4bj1cImkxOG5cIlxuICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgOm9uLXNlYXJjaD1cIm9uU2VhcmNoXCJcbiAgICA+XG4gICAgICA8c2VhcmNoXG4gICAgICAgIHYtaWY9XCJzaG93U2VhcmNoXCJcbiAgICAgICAgcmVmPVwic2VhcmNoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgICA6b24tc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgICBAc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L3Nsb3Q+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1zY3JvbGxcIiByZWY9XCJzY3JvbGxcIiBAc2Nyb2xsPVwib25TY3JvbGxcIj5cbiAgICAgIDxjYXRlZ29yeVxuICAgICAgICB2LXNob3c9XCJzZWFyY2hFbW9qaXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6aTE4bj1cIm1lcmdlZEkxOG5cIlxuICAgICAgICBpZD1cInNlYXJjaFwiXG4gICAgICAgIG5hbWU9XCJTZWFyY2hcIlxuICAgICAgICA6ZW1vamlzPVwic2VhcmNoRW1vamlzXCJcbiAgICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICAvPlxuICAgICAgPGNhdGVnb3J5XG4gICAgICAgIHYtZm9yPVwiKGNhdGVnb3J5LCBpZHgpIGluIGZpbHRlcmVkQ2F0ZWdvcmllc1wiXG4gICAgICAgIHYtc2hvdz1cIiFzZWFyY2hFbW9qaXMgJiYgKGluZmluaXRlU2Nyb2xsIHx8IGNhdGVnb3J5ID09IGFjdGl2ZUNhdGVnb3J5KVwiXG4gICAgICAgIDpyZWY9XCInY2F0ZWdvcmllc18nICsgaWR4XCJcbiAgICAgICAgOmtleT1cImNhdGVnb3J5LmlkXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmlkPVwiY2F0ZWdvcnkuaWRcIlxuICAgICAgICA6bmFtZT1cImNhdGVnb3J5Lm5hbWVcIlxuICAgICAgICA6ZW1vamlzPVwiY2F0ZWdvcnkuZW1vamlzXCJcbiAgICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPHNsb3RcbiAgICAgIG5hbWU9XCJwcmV2aWV3VGVtcGxhdGVcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICAgIDplbW9qaT1cInByZXZpZXdFbW9qaVwiXG4gICAgICA6aWRsZS1lbW9qaT1cImlkbGVFbW9qaVwiXG4gICAgICA6c2hvdy1za2luLXRvbmVzPVwic2hvd1NraW5Ub25lc1wiXG4gICAgICA6ZW1vamktcHJvcHM9XCJlbW9qaVByb3BzXCJcbiAgICAgIDpza2luLXByb3BzPVwic2tpblByb3BzXCJcbiAgICAgIDpvbi1za2luLWNoYW5nZT1cIm9uU2tpbkNoYW5nZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtYmFyIGVtb2ppLW1hcnQtYmFyLXByZXZpZXdcIiB2LWlmPVwic2hvd1ByZXZpZXdcIj5cbiAgICAgICAgPHByZXZpZXdcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICAgICAgICA6ZW1vamk9XCJwcmV2aWV3RW1vamlcIlxuICAgICAgICAgIDppZGxlLWVtb2ppPVwiaWRsZUVtb2ppXCJcbiAgICAgICAgICA6c2hvdy1za2luLXRvbmVzPVwic2hvd1NraW5Ub25lc1wiXG4gICAgICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICAgICAgOnNraW4tcHJvcHM9XCJza2luUHJvcHNcIlxuICAgICAgICAgIDpvbi1za2luLWNoYW5nZT1cIm9uU2tpbkNoYW5nZVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Nsb3Q+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCAnLi4vdmVuZG9yL3JhZi1wb2x5ZmlsbCdcbmltcG9ydCBzdG9yZSBmcm9tICcuLi91dGlscy9zdG9yZSdcbmltcG9ydCBmcmVxdWVudGx5IGZyb20gJy4uL3V0aWxzL2ZyZXF1ZW50bHknXG5pbXBvcnQgeyBkZWVwTWVyZ2UsIG1lYXN1cmVTY3JvbGxiYXIgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IFBpY2tlclByb3BzIH0gZnJvbSAnLi4vdXRpbHMvc2hhcmVkLXByb3BzJ1xuaW1wb3J0IEFuY2hvcnMgZnJvbSAnLi9hbmNob3JzLnZ1ZSdcbmltcG9ydCBDYXRlZ29yeSBmcm9tICcuL2NhdGVnb3J5LnZ1ZSdcbmltcG9ydCBQcmV2aWV3IGZyb20gJy4vcHJldmlldy52dWUnXG5pbXBvcnQgU2VhcmNoIGZyb20gJy4vc2VhcmNoLnZ1ZSdcblxuY29uc3QgSTE4TiA9IHtcbiAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgbm90Zm91bmQ6ICdObyBFbW9qaSBGb3VuZCcsXG4gIGNhdGVnb3JpZXM6IHtcbiAgICBzZWFyY2g6ICdTZWFyY2ggUmVzdWx0cycsXG4gICAgcmVjZW50OiAnRnJlcXVlbnRseSBVc2VkJyxcbiAgICBzbWlsZXlzOiAnU21pbGV5cyAmIEVtb3Rpb24nLFxuICAgIHBlb3BsZTogJ1Blb3BsZSAmIEJvZHknLFxuICAgIG5hdHVyZTogJ0FuaW1hbHMgJiBOYXR1cmUnLFxuICAgIGZvb2RzOiAnRm9vZCAmIERyaW5rJyxcbiAgICBhY3Rpdml0eTogJ0FjdGl2aXR5JyxcbiAgICBwbGFjZXM6ICdUcmF2ZWwgJiBQbGFjZXMnLFxuICAgIG9iamVjdHM6ICdPYmplY3RzJyxcbiAgICBzeW1ib2xzOiAnU3ltYm9scycsXG4gICAgZmxhZ3M6ICdGbGFncycsXG4gICAgY3VzdG9tOiAnQ3VzdG9tJyxcbiAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIC4uLlBpY2tlclByb3BzLFxuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZVNraW46IHRoaXMuc2tpbiB8fCBzdG9yZS5nZXQoJ3NraW4nKSB8fCB0aGlzLmRlZmF1bHRTa2luLFxuICAgICAgYWN0aXZlQ2F0ZWdvcnk6IG51bGwsXG4gICAgICBwcmV2aWV3RW1vamk6IG51bGwsXG4gICAgICBzZWFyY2hFbW9qaXM6IG51bGwsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGN1c3RvbVN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiB0aGlzLmNhbGN1bGF0ZVdpZHRoICsgJ3B4JyxcbiAgICAgICAgLi4udGhpcy5waWNrZXJTdHlsZXMsXG4gICAgICB9XG4gICAgfSxcbiAgICBlbW9qaVByb3BzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmF0aXZlOiB0aGlzLm5hdGl2ZSxcbiAgICAgICAgc2tpbjogdGhpcy5hY3RpdmVTa2luLFxuICAgICAgICBzZXQ6IHRoaXMuc2V0LFxuICAgICAgICBlbW9qaVRvb2x0aXA6IHRoaXMuZW1vamlUb29sdGlwLFxuICAgICAgICBlbW9qaVNpemU6IHRoaXMuZW1vamlTaXplLFxuICAgICAgICBvbkVudGVyOiB0aGlzLm9uRW1vamlFbnRlci5iaW5kKHRoaXMpLFxuICAgICAgICBvbkxlYXZlOiB0aGlzLm9uRW1vamlMZWF2ZS5iaW5kKHRoaXMpLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLm9uRW1vamlDbGljay5iaW5kKHRoaXMpLFxuICAgICAgfVxuICAgIH0sXG4gICAgc2tpblByb3BzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2tpbjogdGhpcy5hY3RpdmVTa2luLFxuICAgICAgfVxuICAgIH0sXG4gICAgY2FsY3VsYXRlV2lkdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wZXJMaW5lICogKHRoaXMuZW1vamlTaXplICsgMTIpICsgMTIgKyAyICsgbWVhc3VyZVNjcm9sbGJhcigpXG4gICAgfSxcbiAgICBmaWx0ZXJlZENhdGVnb3JpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzLmZpbHRlcigoY2F0ZWdvcnkpID0+IHtcbiAgICAgICAgbGV0IGhhc0Vtb2ppcyA9IGNhdGVnb3J5LmVtb2ppcy5sZW5ndGggPiAwXG4gICAgICAgIHJldHVybiBoYXNFbW9qaXNcbiAgICAgIH0pXG4gICAgfSxcbiAgICBtZXJnZWRJMThuKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcmVlemUoZGVlcE1lcmdlKEkxOE4sIHRoaXMuaTE4bikpXG4gICAgfSxcbiAgICBpZGxlRW1vamkoKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmVtb2ppKHRoaXMuZW1vamkpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0RlZmF1bHQgcHJldmlldyBlbW9qaSBgJyArXG4gICAgICAgICAgICB0aGlzLmVtb2ppICtcbiAgICAgICAgICAgICdgIGlzIG5vdCBhdmFpbGFibGUsIGNoZWNrIHRoZSBQaWNrZXIgYGVtb2ppYCBwcm9wZXJ0eScsXG4gICAgICAgIClcbiAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmZpcnN0RW1vamkoKVxuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jYXRlZ29yaWVzID0gW11cbiAgICB0aGlzLmNhdGVnb3JpZXMucHVzaCguLi50aGlzLmRhdGEuY2F0ZWdvcmllcygpKVxuICAgIHRoaXMuY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcy5maWx0ZXIoKGNhdGVnb3J5KSA9PiB7XG4gICAgICByZXR1cm4gY2F0ZWdvcnkuZW1vamlzLmxlbmd0aCA+IDBcbiAgICB9KVxuXG4gICAgdGhpcy5jYXRlZ29yaWVzWzBdLmZpcnN0ID0gdHJ1ZVxuICAgIE9iamVjdC5mcmVlemUodGhpcy5jYXRlZ29yaWVzKVxuICAgIHRoaXMuYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNbMF1cbiAgICB0aGlzLnNraXBTY3JvbGxVcGRhdGUgPSBmYWxzZVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgb25TY3JvbGwoKSB7XG4gICAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCAmJiAhdGhpcy53YWl0aW5nRm9yUGFpbnQpIHtcbiAgICAgICAgdGhpcy53YWl0aW5nRm9yUGFpbnQgPSB0cnVlXG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5vblNjcm9sbFBhaW50LmJpbmQodGhpcykpXG4gICAgICB9XG4gICAgfSxcbiAgICBvblNjcm9sbFBhaW50KCkge1xuICAgICAgdGhpcy53YWl0aW5nRm9yUGFpbnQgPSBmYWxzZVxuICAgICAgbGV0IHNjcm9sbFRvcCA9IHRoaXMuJHJlZnMuc2Nyb2xsLnNjcm9sbFRvcFxuICAgICAgbGV0IGFjdGl2ZUNhdGVnb3J5ID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXNbMF1cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGxldCBjYXRlZ29yeSA9IHRoaXMuZmlsdGVyZWRDYXRlZ29yaWVzW2ldXG4gICAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmdldENhdGVnb3J5Q29tcG9uZW50KGkpXG4gICAgICAgIC8vIFRoZSBgLTUwYCBvZmZzZXQgc3dpdGNoZXMgYWN0aXZlIGNhdGVnb3J5IChzZWxlY3RlZCBpbiB0aGVcbiAgICAgICAgLy8gYW5jaG9ycyBiYXIpIGEgYml0IGVhcmlsZXIsIGJlZm9yZSBpdCBhY3R1YWxseSByZWFjaGVzIHRoZSB0b3AuXG4gICAgICAgIGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LiRlbC5vZmZzZXRUb3AgLSA1MCA+IHNjcm9sbFRvcCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgYWN0aXZlQ2F0ZWdvcnkgPSBjYXRlZ29yeVxuICAgICAgfVxuICAgICAgdGhpcy5hY3RpdmVDYXRlZ29yeSA9IGFjdGl2ZUNhdGVnb3J5XG4gICAgfSxcbiAgICBvbkFuY2hvckNsaWNrKGNhdGVnb3J5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hFbW9qaXMpIHtcbiAgICAgICAgLy8gTm8gY2F0ZWdvcmllcyBhcmUgc2hvd24gd2hlbiBzZWFyY2ggaXMgYWN0aXZlLlxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGxldCBpID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXMuaW5kZXhPZihjYXRlZ29yeSlcbiAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmdldENhdGVnb3J5Q29tcG9uZW50KGkpXG4gICAgICBsZXQgc2Nyb2xsVG9Db21wb25lbnQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBsZXQgdG9wID0gY29tcG9uZW50LiRlbC5vZmZzZXRUb3BcbiAgICAgICAgICBpZiAoY2F0ZWdvcnkuZmlyc3QpIHtcbiAgICAgICAgICAgIHRvcCA9IDBcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4kcmVmcy5zY3JvbGwuc2Nyb2xsVG9wID0gdG9wXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgIHNjcm9sbFRvQ29tcG9uZW50KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllc1tpXVxuICAgICAgfVxuICAgIH0sXG4gICAgb25TZWFyY2godmFsdWUpIHtcbiAgICAgIGxldCBlbW9qaXMgPSB0aGlzLmRhdGEuc2VhcmNoKHZhbHVlLCB0aGlzLm1heFNlYXJjaFJlc3VsdHMpXG4gICAgICB0aGlzLnNlYXJjaEVtb2ppcyA9IGVtb2ppc1xuICAgIH0sXG4gICAgb25FbW9qaUVudGVyKGVtb2ppKSB7XG4gICAgICB0aGlzLnByZXZpZXdFbW9qaSA9IGVtb2ppXG4gICAgfSxcbiAgICBvbkVtb2ppTGVhdmUoZW1vamkpIHtcbiAgICAgIHRoaXMucHJldmlld0Vtb2ppID0gbnVsbFxuICAgIH0sXG4gICAgb25FbW9qaUNsaWNrKGVtb2ppKSB7XG4gICAgICB0aGlzLiRlbWl0KCdzZWxlY3QnLCBlbW9qaSlcbiAgICAgIGZyZXF1ZW50bHkuYWRkKGVtb2ppKVxuICAgIH0sXG4gICAgb25Ta2luQ2hhbmdlKHNraW4pIHtcbiAgICAgIHRoaXMuYWN0aXZlU2tpbiA9IHNraW5cbiAgICAgIHN0b3JlLnVwZGF0ZSh7IHNraW4gfSlcblxuICAgICAgdGhpcy4kZW1pdCgnc2tpbi1jaGFuZ2UnLCBza2luKVxuICAgIH0sXG4gICAgZ2V0Q2F0ZWdvcnlDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLiRyZWZzWydjYXRlZ29yaWVzXycgKyBpbmRleF1cbiAgICAgIGlmIChjb21wb25lbnQgJiYgJzAnIGluIGNvbXBvbmVudCkge1xuICAgICAgICAvLyBWdWUgMiBoYXMgJHJlZnMgdW5kZXIgdi1mb3IgYXMgYW4gYXJyYXkuXG4gICAgICAgIHJldHVybiBjb21wb25lbnRbJzAnXVxuICAgICAgfVxuICAgICAgLy8gVnVlIDMgZG9lcyBub3Qgc3VwcG9ydCAkcmVmcyBhcyBhcnJheS5cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICB9LFxuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgQW5jaG9ycyxcbiAgICBDYXRlZ29yeSxcbiAgICBQcmV2aWV3LFxuICAgIFNlYXJjaCxcbiAgfSxcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuXG48ZGl2IGNsYXNzPVwiZW1vamktbWFydC1hbmNob3JzXCI+XG4gIDxzcGFuXG4gICAgdi1mb3I9XCJjYXRlZ29yeSBpbiBjYXRlZ29yaWVzXCJcbiAgICA6a2V5PVwiY2F0ZWdvcnkuaWRcIlxuICAgIDpjbGFzcz1cInsgJ2Vtb2ppLW1hcnQtYW5jaG9yJzogdHJ1ZSwgJ2Vtb2ppLW1hcnQtYW5jaG9yLXNlbGVjdGVkJzogY2F0ZWdvcnkuaWQgPT0gYWN0aXZlQ2F0ZWdvcnkuaWQgfVwiXG4gICAgOnN0eWxlPVwieyAnY29sb3InOiAoY2F0ZWdvcnkuaWQgPT0gYWN0aXZlQ2F0ZWdvcnkuaWQgPyBjb2xvciA6ICcnKSB9XCJcbiAgICA6ZGF0YS10aXRsZT1cImkxOG4uY2F0ZWdvcmllc1tjYXRlZ29yeS5pZF1cIlxuICAgIEBjbGljaz1cIiRlbWl0KCdjbGljaycsIGNhdGVnb3J5KVwiPlxuICAgIDxkaXYgdi1odG1sPVwic3Znc1tjYXRlZ29yeS5pZF1cIi8+XG4gICAgPHNwYW4gY2xhc3M9XCJlbW9qaS1tYXJ0LWFuY2hvci1iYXJcIiA6c3R5bGU9XCJ7IGJhY2tncm91bmRDb2xvcjogY29sb3IgfVwiPjwvc3Bhbj5cbiAgPC9zcGFuPlxuPC9kaXY+XG5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBzdmdzIGZyb20gJy4uL3N2Z3MnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBpMThuOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0sXG4gICAgY2F0ZWdvcmllczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgYWN0aXZlQ2F0ZWdvcnk6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLnN2Z3MgPSBzdmdzXG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG5cbjxkaXYgOmNsYXNzPVwieyAnZW1vamktbWFydC1jYXRlZ29yeSc6IHRydWUsICdlbW9qaS1tYXJ0LW5vLXJlc3VsdHMnOiAhaGFzUmVzdWx0cyB9XCIgdi1pZj1cImlzVmlzaWJsZSAmJiAoaXNTZWFyY2ggfHwgaGFzUmVzdWx0cylcIj5cbiAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtY2F0ZWdvcnktbGFiZWxcIj5cbiAgICA8c3Bhbj57eyBpMThuLmNhdGVnb3JpZXNbaWRdIH19PC9zcGFuPlxuICA8L2Rpdj5cblxuICA8dGVtcGxhdGUgdi1mb3I9XCJ7IGVtb2ppT2JqZWN0LCBlbW9qaVZpZXd9IGluIGVtb2ppT2JqZWN0c1wiPlxuICAgIDxzcGFuXG4gICAgICB2LWlmPVwiZW1vamlWaWV3LmNhblJlbmRlclwiXG4gICAgICA6ZGF0YS10aXRsZT1cImVtb2ppT2JqZWN0LnNob3J0X25hbWVcIlxuICAgICAgOnRpdGxlPVwiZW1vamlWaWV3LnRpdGxlXCJcbiAgICAgIGNsYXNzPVwiZW1vamktbWFydC1lbW9qaVwiXG4gICAgICBAbW91c2VlbnRlcj1cImVtb2ppUHJvcHMub25FbnRlcihlbW9qaVZpZXcuZ2V0RW1vamkoKSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJlbW9qaVByb3BzLm9uTGVhdmUoZW1vamlWaWV3LmdldEVtb2ppKCkpXCJcbiAgICAgIEBjbGljaz1cImVtb2ppUHJvcHMub25DbGljayhlbW9qaVZpZXcuZ2V0RW1vamkoKSlcIj5cbiAgICAgIDxzcGFuICA6Y2xhc3M9XCJlbW9qaVZpZXcuY3NzQ2xhc3NcIiA6c3R5bGU9XCJlbW9qaVZpZXcuY3NzU3R5bGVcIj57e2Vtb2ppVmlldy5jb250ZW50fX08L3NwYW4+XG4gICAgPC9zcGFuPlxuICA8L3RlbXBsYXRlPlxuXG4gIDxkaXYgdi1pZj1cIiFoYXNSZXN1bHRzXCI+XG4gICAgPGVtb2ppXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgZW1vamk9XCJzbGV1dGhfb3Jfc3B5XCJcbiAgICAgIDpuYXRpdmU9XCJlbW9qaVByb3BzLm5hdGl2ZVwiXG4gICAgICA6c2tpbj1cImVtb2ppUHJvcHMuc2tpblwiXG4gICAgICA6c2V0PVwiZW1vamlQcm9wcy5zZXRcIlxuICAgIC8+XG4gICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtbm8tcmVzdWx0cy1sYWJlbFwiPnt7IGkxOG4ubm90Zm91bmQgfX08L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IHsgRW1vamlWaWV3IH0gZnJvbSAnLi4vdXRpbHMvZW1vamktZGF0YSdcbmltcG9ydCBFbW9qaSBmcm9tICcuL0Vtb2ppLnZ1ZSdcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgZGF0YToge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGkxOG46IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBpZDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBlbW9qaXM6IHtcbiAgICAgIHR5cGU6IEFycmF5XG4gICAgfSxcbiAgICBlbW9qaVByb3BzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBpc1Zpc2libGUoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmVtb2ppc1xuICAgIH0sXG4gICAgaXNTZWFyY2goKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYW1lID09ICdTZWFyY2gnXG4gICAgfSxcbiAgICBoYXNSZXN1bHRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW1vamlzLmxlbmd0aCA+IDBcbiAgICB9LFxuICAgIGVtb2ppT2JqZWN0cygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtb2ppcy5tYXAoKGVtb2ppKSA9PiB7XG4gICAgICAgICAgbGV0IGVtb2ppT2JqZWN0ID0gZW1vamlcbiAgICAgICAgICBsZXQgZW1vamlWaWV3ID0gbmV3IEVtb2ppVmlldyhcbiAgICAgICAgICAgIGVtb2ppLFxuICAgICAgICAgICAgdGhpcy5lbW9qaVByb3BzLnNraW4sXG4gICAgICAgICAgICB0aGlzLmVtb2ppUHJvcHMuc2V0LFxuICAgICAgICAgICAgdGhpcy5lbW9qaVByb3BzLm5hdGl2ZSxcbiAgICAgICAgICAgIHRoaXMuZW1vamlQcm9wcy5mYWxsYmFjayxcbiAgICAgICAgICAgIHRoaXMuZW1vamlQcm9wcy5lbW9qaVRvb2x0aXAsXG4gICAgICAgICAgICB0aGlzLmVtb2ppUHJvcHMuZW1vamlTaXplLFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm4geyBlbW9qaU9iamVjdCwgZW1vamlWaWV3IH1cbiAgICAgIH0pXG4gICAgfVxuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgRW1vamlcbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlld1wiPlxuICA8dGVtcGxhdGUgdi1pZj1cImVtb2ppXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCI+XG4gICAgICAgIDxlbW9qaVxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOmVtb2ppPVwiZW1vamlcIlxuICAgICAgICAgIDpuYXRpdmU9XCJlbW9qaVByb3BzLm5hdGl2ZVwiXG4gICAgICAgICAgOnNraW49XCJlbW9qaVByb3BzLnNraW5cIlxuICAgICAgICAgIDpzZXQ9XCJlbW9qaVByb3BzLnNldFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1kYXRhXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctbmFtZVwiPnt7IGVtb2ppLm5hbWUgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWVzXCI+XG4gICAgICAgICAgPHNwYW4gdi1mb3I9XCJzaG9ydE5hbWUgaW4gZW1vamlTaG9ydE5hbWVzXCIgOmtleT1cInNob3J0TmFtZVwiIGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZVwiPjp7eyBzaG9ydE5hbWUgfX06PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbnNcIj5cbiAgICAgICAgICA8c3BhbiB2LWZvcj1cImVtb3RpY29uIGluIGVtb2ppRW1vdGljb25zXCIgOmtleT1cImVtb3RpY29uXCIgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb25cIj57eyBlbW90aWNvbiB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgPC90ZW1wbGF0ZT5cblxuICA8dGVtcGxhdGUgdi1lbHNlPlxuICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vamlcIj5cbiAgICAgIDxlbW9qaVxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6ZW1vamk9XCJpZGxlRW1vamlcIlxuICAgICAgICA6bmF0aXZlPVwiZW1vamlQcm9wcy5uYXRpdmVcIlxuICAgICAgICA6c2tpbj1cImVtb2ppUHJvcHMuc2tpblwiXG4gICAgICAgIDpzZXQ9XCJlbW9qaVByb3BzLnNldFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1kYXRhXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImVtb2ppLW1hcnQtdGl0bGUtbGFiZWxcIj57eyB0aXRsZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgdi1pZj1cInNob3dTa2luVG9uZXNcIiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1za2luc1wiPlxuICAgICAgPHNraW5zIDpza2luPVwic2tpblByb3BzLnNraW5cIiBAY2hhbmdlPVwib25Ta2luQ2hhbmdlKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICA8L3RlbXBsYXRlPlxuPC9kaXY+XG5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBFbW9qaSBmcm9tICcuL0Vtb2ppLnZ1ZSdcbmltcG9ydCBTa2lucyBmcm9tICcuL3NraW5zLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0aXRsZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGVtb2ppOiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdXG4gICAgfSxcbiAgICBpZGxlRW1vamk6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgc2hvd1NraW5Ub25lczoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGVtb2ppUHJvcHM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBza2luUHJvcHM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBvblNraW5DaGFuZ2U6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZW1vamlEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuZW1vamkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1vamlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgICAgfVxuICAgIH0sXG4gICAgZW1vamlTaG9ydE5hbWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW1vamlEYXRhLnNob3J0X25hbWVzXG4gICAgfSxcbiAgICBlbW9qaUVtb3RpY29ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtb2ppRGF0YS5lbW90aWNvbnNcbiAgICB9XG4gIH0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbW9qaSxcbiAgICBTa2luc1xuICB9XG59XG5cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1zZWFyY2hcIj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiA6cGxhY2Vob2xkZXI9XCJpMThuLnNlYXJjaFwiIHYtbW9kZWw9XCJ2YWx1ZVwiPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgaTE4bjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGF1dG9Gb2N1czoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBvblNlYXJjaDoge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6ICcnXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGVtb2ppSW5kZXgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIHZhbHVlKCkge1xuICAgICAgdGhpcy4kZW1pdCgnc2VhcmNoJywgdGhpcy52YWx1ZSlcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAnJ1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICBsZXQgJGlucHV0ID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuXG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICAkaW5wdXQuZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cblxuPGRpdiA6Y2xhc3M9XCJ7ICdlbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMnOiB0cnVlLCAnZW1vamktbWFydC1za2luLXN3YXRjaGVzLW9wZW5lZCc6IG9wZW5lZCB9XCI+XG4gIDxzcGFuIHYtZm9yPVwic2tpblRvbmUgaW4gNlwiIDprZXk9XCJza2luVG9uZVwiIDpjbGFzcz1cInsgJ2Vtb2ppLW1hcnQtc2tpbi1zd2F0Y2gnOiB0cnVlLCAnZW1vamktbWFydC1za2luLXN3YXRjaC1zZWxlY3RlZCc6IHNraW4gPT0gc2tpblRvbmUgfVwiPlxuICAgIDxzcGFuIDpjbGFzcz1cIidlbW9qaS1tYXJ0LXNraW4gZW1vamktbWFydC1za2luLXRvbmUtJyArIHNraW5Ub25lXCIgQGNsaWNrPVwib25DbGljayhza2luVG9uZSlcIj48L3NwYW4+XG4gIDwvc3Bhbj5cbjwvZGl2PlxuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgc2tpbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrKHNraW5Ub25lKSB7XG4gICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgaWYgKHNraW5Ub25lICE9IHRoaXMuc2tpbikge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHNraW5Ub25lKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3BlbmVkID0gIXRoaXMub3BlbmVkXG4gICAgfVxuICB9XG59XG5cbjwvc2NyaXB0PlxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi41JyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwidmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIHJlID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW0tFWV0ocmUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICEnLy4vJ1tLRVldKHJlKTtcbiAgICB9IGNhdGNoIChmKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xuXG52YXIgU1BFQ0lFUyA9IHdrcygnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMiAmJiByZXN1bHRbMF0gPT09ICdhJyAmJiByZXN1bHRbMV0gPT09ICdiJztcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MID8gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgfVxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUykgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgZm5zID0gZXhlYyhcbiAgICAgIGRlZmluZWQsXG4gICAgICBTWU1CT0wsXG4gICAgICAnJ1tLRVldLFxuICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHZhciBzdHJmbiA9IGZuc1swXTtcbiAgICB2YXIgcnhmbiA9IGZuc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyZm4pO1xuICAgIGhpZGUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikgaWYgKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpIFRba2V5XSA9IFNba2V5XTtcbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuL19zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRzZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbic7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFELmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgdmFyIElTX09QID0gaXQgPT09IE9iamVjdFByb3RvO1xuICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXQgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJykuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7IGE6IFMgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7XG4gICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgIHZhciBpID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgJHJlcGxhY2VyID0gcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmVtb2ppLW1hcnQsXFxuLmVtb2ppLW1hcnQgKiB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgbGluZS1oZWlnaHQ6IDEuMTU7XFxufVxcblxcbi5lbW9qaS1tYXJ0IHtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIHNhbnMtc2VyaWY7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICAvKiBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7ICovXFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgaGVpZ2h0OiA0MjBweDtcXG4gIGNvbG9yOiAjMjIyNDI3O1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2Q5ZDlkOTtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWVtb2ppIHtcXG4gIHBhZGRpbmc6IDZweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogMDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtZW1vamkgc3BhbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctZW1vamkgLmVtb2ppLW1hcnQtZW1vamkgc3BhbiB7XFxuICB3aWR0aDogMzhweDtcXG4gIGhlaWdodDogMzhweDtcXG4gIGZvbnQtc2l6ZTogMzJweDtcXG59XFxuXFxuLmVtb2ppLXR5cGUtbmF0aXZlIHtcXG4gIGZvbnQtZmFtaWx5OiBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIiwgXFxcIlNlZ29lIFVJXFxcIiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlR3ZW1vamkgTW96aWxsYVxcXCIsIFxcXCJOb3RvIENvbG9yIEVtb2ppXFxcIiwgXFxcIkVtb2ppT25lIENvbG9yXFxcIiwgXFxcIkFuZHJvaWQgRW1vamlcXFwiO1xcbiAgd29yZC1icmVhazoga2VlcC1hbGw7XFxufVxcblxcbi5lbW9qaS10eXBlLWltYWdlIHtcXG4gIC8qIEVtb2ppIHNoZWV0IGhhcyA1NiBjb2x1bW5zLCBzZWUgYWxzbyB1dGlscy9lbW9qaS1kYXRhLmpzLCBTSEVFVF9DT0xVTU5TIHZhcmlhYmxlICovXFxuICAvKiBIZXJlIHdlIHVzZSAoNTYrMSkgKiAxMDAlIHRvIGF2b2lkIHZpc2libGUgZWRnZXMgb2YgbmVhcmJ5IGljb25zIHdoZW4gc2NhbGluZyBmb3IgZGlmZmVyZW50XFxuICAgKiBzY3JlZW4gc2l6ZXMgKi9cXG4gIGJhY2tncm91bmQtc2l6ZTogNTcwMCU7XFxufVxcbi5lbW9qaS10eXBlLWltYWdlLmVtb2ppLXNldC1hcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImh0dHBzOi8vdW5wa2cuY29tL2Vtb2ppLWRhdGFzb3VyY2UtYXBwbGVANi4wLjEvaW1nL2FwcGxlL3NoZWV0cy0yNTYvNjQucG5nXFxcIik7XFxufVxcbi5lbW9qaS10eXBlLWltYWdlLmVtb2ppLXNldC1mYWNlYm9vayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImh0dHBzOi8vdW5wa2cuY29tL2Vtb2ppLWRhdGFzb3VyY2UtZmFjZWJvb2tANi4wLjEvaW1nL2ZhY2Vib29rL3NoZWV0cy0yNTYvNjQucG5nXFxcIik7XFxufVxcbi5lbW9qaS10eXBlLWltYWdlLmVtb2ppLXNldC1nb29nbGUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJodHRwczovL3VucGtnLmNvbS9lbW9qaS1kYXRhc291cmNlLWdvb2dsZUA2LjAuMS9pbWcvZ29vZ2xlL3NoZWV0cy0yNTYvNjQucG5nXFxcIik7XFxufVxcbi5lbW9qaS10eXBlLWltYWdlLmVtb2ppLXNldC10d2l0dGVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiaHR0cHM6Ly91bnBrZy5jb20vZW1vamktZGF0YXNvdXJjZS10d2l0dGVyQDYuMC4xL2ltZy90d2l0dGVyL3NoZWV0cy0yNTYvNjQucG5nXFxcIik7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWJhciB7XFxuICBib3JkZXI6IDAgc29saWQgI2Q5ZDlkOTtcXG59XFxuLmVtb2ppLW1hcnQtYmFyOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDFweDtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XFxufVxcbi5lbW9qaS1tYXJ0LWJhcjpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3Atd2lkdGg6IDFweDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNjcm9sbCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxuICAtbXMtZmxleDogMTtcXG4gICAgICBmbGV4OiAxO1xcbiAgcGFkZGluZzogMCA2cHggNnB4IDZweDtcXG4gIHotaW5kZXg6IDA7IC8qIEZpeCBmb3IgcmVuZGVyaW5nIHN0aWNreSBwb3NpdGlvbmVkIGNhdGVnb3J5IGxhYmVscyBvbiBDaHJvbWUgKi9cXG4gIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07IC8qIGF2b2lkcyBcXFwicmVwYWludHMgb24gc2Nyb2xsXFxcIiBpbiBtb2JpbGUgQ2hyb21lICovXFxuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWFuY2hvcnMge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcGFkZGluZzogMCA2cHg7XFxuICBjb2xvcjogIzg1ODU4NTtcXG4gIGxpbmUtaGVpZ2h0OiAwO1xcbn1cXG5cXG4uZW1vamktbWFydC1hbmNob3Ige1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgZmxleDogMSAxIGF1dG87XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxMnB4IDRweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0cmFuc2l0aW9uOiBjb2xvciAuMXMgZWFzZS1vdXQ7XFxufVxcbi5lbW9qaS1tYXJ0LWFuY2hvcjpob3ZlcixcXG4uZW1vamktbWFydC1hbmNob3Itc2VsZWN0ZWQge1xcbiAgY29sb3I6ICM0NjQ2NDY7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWFuY2hvci1zZWxlY3RlZCAuZW1vamktbWFydC1hbmNob3ItYmFyIHtcXG4gIGJvdHRvbTogMDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtYW5jaG9yLWJhciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IC0zcHg7IGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTsgaGVpZ2h0OiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDY0NjQ2O1xcbn1cXG5cXG4uZW1vamktbWFydC1hbmNob3JzIGkge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDIycHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWFuY2hvcnMgc3ZnIHtcXG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcXG4gIG1heC1oZWlnaHQ6IDE4cHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0IC5zY3JvbGxlciB7XFxuICBoZWlnaHQ6IDI1MHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLW1zLWZsZXg6IDE7XFxuICAgICAgZmxleDogMTtcXG4gIHBhZGRpbmc6IDAgNnB4IDZweCA2cHg7XFxuICB6LWluZGV4OiAwOyAvKiBGaXggZm9yIHJlbmRlcmluZyBzdGlja3kgcG9zaXRpb25lZCBjYXRlZ29yeSBsYWJlbHMgb24gQ2hyb21lICovXFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOyAvKiBhdm9pZHMgXFxcInJlcGFpbnRzIG9uIHNjcm9sbFxcXCIgaW4gbW9iaWxlIENocm9tZSAqL1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbn1cXG5cXG4uZW1vamktbWFydC1zZWFyY2gge1xcbiAgbWFyZ2luLXRvcDogNnB4O1xcbiAgcGFkZGluZzogMCA2cHg7XFxufVxcbi5lbW9qaS1tYXJ0LXNlYXJjaCBpbnB1dCB7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogLjJlbSAuNmVtO1xcbiAgYm9yZGVyLXJhZGl1czogMjVweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkOWQ5ZDk7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uZW1vamktbWFydC1zZWFyY2gtcmVzdWx0cyB7XFxuICBoZWlnaHQ6IDI1MHB4O1xcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcbn1cXG5cXG4uZW1vamktbWFydC1jYXRlZ29yeSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWNhdGVnb3J5IC5lbW9qaS1tYXJ0LWVtb2ppIHNwYW4ge1xcbiAgei1pbmRleDogMTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtY2F0ZWdvcnkgLmVtb2ppLW1hcnQtZW1vamk6aG92ZXI6YmVmb3JlIHtcXG4gIHotaW5kZXg6IDA7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDsgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0O1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIG9wYWNpdHk6IDA7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWNhdGVnb3J5IC5lbW9qaS1tYXJ0LWVtb2ppOmhvdmVyOmJlZm9yZSB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uZW1vamktbWFydC1jYXRlZ29yeS1sYWJlbCB7XFxuICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XFxuICBwb3NpdGlvbjogc3RpY2t5O1xcbiAgdG9wOiAwO1xcbn1cXG4uZW1vamktbWFydC1zdGF0aWMgLmVtb2ppLW1hcnQtY2F0ZWdvcnktbGFiZWwge1xcbiAgei1pbmRleDogMjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC8qIHBvc2l0aW9uOiBzdGlja3k7ICovXFxuICAvKiBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7ICovXFxufVxcblxcbi5lbW9qaS1tYXJ0LWNhdGVnb3J5LWxhYmVsIHNwYW4ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBwYWRkaW5nOiA1cHggNnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjk1KTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtZW1vamkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAwO1xcbn1cXG5cXG4uZW1vamktbWFydC1uby1yZXN1bHRzIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHBhZGRpbmctdG9wOiA3MHB4O1xcbiAgY29sb3I6ICM4NTg1ODU7XFxufVxcbi5lbW9qaS1tYXJ0LW5vLXJlc3VsdHMgLmVtb2ppLW1hcnQtY2F0ZWdvcnktbGFiZWwge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLmVtb2ppLW1hcnQtbm8tcmVzdWx0cyAuZW1vamktbWFydC1uby1yZXN1bHRzLWxhYmVsIHtcXG4gIG1hcmdpbi10b3A6IC4yZW07XFxufVxcbi5lbW9qaS1tYXJ0LW5vLXJlc3VsdHMgLmVtb2ppLW1hcnQtZW1vamk6aG92ZXI6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IG5vbmU7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiA3MHB4O1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LWVtb2ppLFxcbi5lbW9qaS1tYXJ0LXByZXZpZXctZGF0YSxcXG4uZW1vamktbWFydC1wcmV2aWV3LXNraW5zIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctZW1vamkge1xcbiAgbGVmdDogMTJweDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtcHJldmlldy1kYXRhIHtcXG4gIGxlZnQ6IDY4cHg7IHJpZ2h0OiAxMnB4O1xcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LXNraW5zIHtcXG4gIHJpZ2h0OiAzMHB4O1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctbmFtZSB7XFxuICBmb250LXNpemU6IDE0cHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiAjODg4O1xcbn1cXG4uZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZSArIC5lbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lLFxcbi5lbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lICsgLmVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbixcXG4uZW1vamktbWFydC1wcmV2aWV3LWVtb3RpY29uICsgLmVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbiB7XFxuICBtYXJnaW4tbGVmdDogLjVlbTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbiB7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogI2JiYjtcXG59XFxuXFxuLmVtb2ppLW1hcnQtdGl0bGUgc3BhbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG5cXG4uZW1vamktbWFydC10aXRsZSAuZW1vamktbWFydC1lbW9qaSB7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4uZW1vamktbWFydC10aXRsZS1sYWJlbCB7XFxuICBjb2xvcjogIzk5OUE5QztcXG4gIGZvbnQtc2l6ZTogMjFweDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMge1xcbiAgZm9udC1zaXplOiAwO1xcbiAgcGFkZGluZzogMnB4IDA7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZDlkOWQ5O1xcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMtb3BlbmVkIC5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoIHtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgcGFkZGluZzogMCAycHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMtb3BlbmVkIC5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoLXNlbGVjdGVkOmFmdGVyIHtcXG4gIG9wYWNpdHk6IC43NTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtc2tpbi1zd2F0Y2gge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogd2lkdGgsIHBhZGRpbmc7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAuMTI1cztcXG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtc2tpbi1zd2F0Y2g6bnRoLWNoaWxkKDEpIHsgdHJhbnNpdGlvbi1kZWxheTogMHMgfVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCgyKSB7IHRyYW5zaXRpb24tZGVsYXk6IC4wM3MgfVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCgzKSB7IHRyYW5zaXRpb24tZGVsYXk6IC4wNnMgfVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCg0KSB7IHRyYW5zaXRpb24tZGVsYXk6IC4wOXMgfVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCg1KSB7IHRyYW5zaXRpb24tZGVsYXk6IC4xMnMgfVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCg2KSB7IHRyYW5zaXRpb24tZGVsYXk6IC4xNXMgfVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoLXNlbGVjdGVkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgcGFkZGluZzogMCAycHg7XFxufVxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoLXNlbGVjdGVkOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7IGxlZnQ6IDUwJTtcXG4gIHdpZHRoOiA0cHg7IGhlaWdodDogNHB4O1xcbiAgbWFyZ2luOiAtMnB4IDAgMCAtMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4ycyBlYXNlLW91dDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtc2tpbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMTAwJTsgcGFkZGluZy10b3A6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDEycHg7XFxuICBib3JkZXItcmFkaXVzOiAxMDAlO1xcbn1cXG5cXG4uZW1vamktbWFydC1za2luLXRvbmUtMSB7IGJhY2tncm91bmQtY29sb3I6ICNmZmM5M2EgfVxcbi5lbW9qaS1tYXJ0LXNraW4tdG9uZS0yIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZhZGNiYyB9XFxuLmVtb2ppLW1hcnQtc2tpbi10b25lLTMgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBiYjk1IH1cXG4uZW1vamktbWFydC1za2luLXRvbmUtNCB7IGJhY2tncm91bmQtY29sb3I6ICNiZjhmNjggfVxcbi5lbW9qaS1tYXJ0LXNraW4tdG9uZS01IHsgYmFja2dyb3VuZC1jb2xvcjogIzliNjQzZCB9XFxuLmVtb2ppLW1hcnQtc2tpbi10b25lLTYgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjNTk0NTM5IH1cXG5cXG5cXG4vKiB2dWUtdmlydHVhbC1zY3JvbGxlci9kaXN0L3Z1ZS12aXJ0dWFsLXNjcm9sbGVyLmNzcyAqL1xcbi5lbW9qaS1tYXJ0IC52dWUtcmVjeWNsZS1zY3JvbGxlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5lbW9qaS1tYXJ0IC52dWUtcmVjeWNsZS1zY3JvbGxlci5kaXJlY3Rpb24tdmVydGljYWw6bm90KC5wYWdlLW1vZGUpIHtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcbi5lbW9qaS1tYXJ0IC52dWUtcmVjeWNsZS1zY3JvbGxlci5kaXJlY3Rpb24taG9yaXpvbnRhbDpub3QoLnBhZ2UtbW9kZSkge1xcbiAgb3ZlcmZsb3cteDogYXV0bztcXG59XFxuLmVtb2ppLW1hcnQgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLmRpcmVjdGlvbi1ob3Jpem9udGFsIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmVtb2ppLW1hcnQgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyX19zbG90IHtcXG4gIC1tcy1mbGV4OiBhdXRvIDAgMHB4O1xcbiAgICAgIGZsZXg6IGF1dG8gMCAwO1xcbn1cXG4uZW1vamktbWFydCAudnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0td3JhcHBlciB7XFxuICAtbXMtZmxleDogMTtcXG4gICAgICBmbGV4OiAxO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5lbW9qaS1tYXJ0IC52dWUtcmVjeWNsZS1zY3JvbGxlci5yZWFkeSAudnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0tdmlldyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcXG59XFxuLmVtb2ppLW1hcnQgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLmRpcmVjdGlvbi12ZXJ0aWNhbCAudnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0td3JhcHBlciB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLmVtb2ppLW1hcnQgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLmRpcmVjdGlvbi1ob3Jpem9udGFsIC52dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS13cmFwcGVyIHtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLmVtb2ppLW1hcnQgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLnJlYWR5LmRpcmVjdGlvbi12ZXJ0aWNhbFxcbiAgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyX19pdGVtLXZpZXcge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi5lbW9qaS1tYXJ0IC52dWUtcmVjeWNsZS1zY3JvbGxlci5yZWFkeS5kaXJlY3Rpb24taG9yaXpvbnRhbFxcbiAgLnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyX19pdGVtLXZpZXcge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4uZW1vamktbWFydCAucmVzaXplLW9ic2VydmVyW2RhdGEtdi1iMzI5ZWU0Y10ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IC0xO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLmVtb2ppLW1hcnQgLnJlc2l6ZS1vYnNlcnZlcltkYXRhLXYtYjMyOWVlNGNdIG9iamVjdCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHotaW5kZXg6IC0xO1xcbn1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLypcXG4gKiBRdWFzYXIgRnJhbWV3b3JrIHYwLjE3LjIwXFxuICogKGMpIDIwMTYtcHJlc2VudCBSYXp2YW4gU3RvZW5lc2N1XFxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxcbiAqL1xcbiosXFxuKjpiZWZvcmUsXFxuKjphZnRlciB7XFxuICBib3gtc2l6aW5nOiBpbmhlcml0O1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIC1tb3otdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbmh0bWwsXFxuYm9keSxcXG4jcS1hcHAge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXJlY3Rpb246IGx0cjtcXG59XFxuaHRtbCxcXG5ib2R5IHtcXG4gIG1hcmdpbjogMDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbmlucHV0W3R5cGU9J3RleHQnXSxcXG5pbnB1dFt0eXBlPSdlbWFpbCddLFxcbmlucHV0W3R5cGU9J3NlYXJjaCddLFxcbmlucHV0W3R5cGU9J3Bhc3N3b3JkJ10ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lIC8qIG1vYmlsZSBmaXJlZm94IHRvbyEgKi87XFxufVxcbmFydGljbGUsXFxuYXNpZGUsXFxuZGV0YWlscyxcXG5maWdjYXB0aW9uLFxcbmZpZ3VyZSxcXG5mb290ZXIsXFxuaGVhZGVyLFxcbm1haW4sXFxubWVudSxcXG5uYXYsXFxuc2VjdGlvbixcXG5zdW1tYXJ5IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5hdWRpbzpub3QoW2NvbnRyb2xzXSkge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGhlaWdodDogMDtcXG59XFxuYWJiclt0aXRsZV0ge1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG59XFxuZGZuIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcXG59XFxuaW1nIHtcXG4gIGJvcmRlci1zdHlsZTogbm9uZTtcXG59XFxuc3ZnOm5vdCg6cm9vdCkge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuY29kZSxcXG5rYmQsXFxucHJlLFxcbnNhbXAge1xcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlO1xcbiAgZm9udC1zaXplOiAxZW07XFxufVxcbmhyIHtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgaGVpZ2h0OiAwO1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxufVxcbmJ1dHRvbixcXG5pbnB1dCxcXG5zZWxlY3QsXFxudGV4dGFyZWEge1xcbiAgZm9udDogaW5oZXJpdDtcXG4gIG1hcmdpbjogMDtcXG59XFxub3B0Z3JvdXAge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbmJ1dHRvbixcXG5pbnB1dCxcXG5zZWxlY3Qge1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxufVxcbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcXG5pbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7XFxuICBib3JkZXI6IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5idXR0b246LW1vei1mb2N1c3JpbmcsXFxuaW5wdXQ6LW1vei1mb2N1c3Jpbmcge1xcbiAgb3V0bGluZTogMXB4IGRvdHRlZCBCdXR0b25UZXh0O1xcbn1cXG50ZXh0YXJlYSB7XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuaW5wdXRbdHlwZT0nc2VhcmNoJ10ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxufVxcbmlucHV0W3R5cGU9J3NlYXJjaCddOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxcbmlucHV0W3R5cGU9J3NlYXJjaCddOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuLnEtaWNvbiB7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB3b3JkLXdyYXA6IG5vcm1hbDtcXG4gIGRpcmVjdGlvbjogbHRyO1xcbn1cXG4ucS1pY29uLFxcbi5tYXRlcmlhbC1pY29ucyB7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY3Vyc29yOiBpbmhlcml0O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS1hY3Rpb25zaGVldC10aXRsZSB7XFxuICBtaW4taGVpZ2h0OiA1NnB4O1xcbiAgcGFkZGluZzogMCAxNnB4O1xcbiAgY29sb3I6ICM3Nzc7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1mYWRlZCk7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWJvZHkge1xcbiAgbWF4LWhlaWdodDogNTAwcHg7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWdyaWQge1xcbiAgcGFkZGluZzogOHB4IDE2cHg7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWdyaWQgLnEtaXRlbS1zZXBhcmF0b3ItY29tcG9uZW50IHtcXG4gIG1hcmdpbjogMjRweCAwO1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW0ge1xcbiAgcGFkZGluZzogOHB4IDE2cHg7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3M7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWdyaWQtaXRlbTpob3ZlcixcXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW06Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogI2QwZDBkMDtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWdyaWQtaXRlbSBpLFxcbi5xLWFjdGlvbnNoZWV0LWdyaWQtaXRlbSBpbWcge1xcbiAgZm9udC1zaXplOiA0OHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW0gLmF2YXRhciB7XFxuICB3aWR0aDogNDhweDtcXG4gIGhlaWdodDogNDhweDtcXG59XFxuLnEtYWN0aW9uc2hlZXQtZ3JpZC1pdGVtIHNwYW4ge1xcbiAgY29sb3I6ICM3Nzc7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1mYWRlZCk7XFxufVxcbi5xLWxvYWRpbmctYmFyIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHotaW5kZXg6IDk5OTg7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSwgb3BhY2l0eSAwLjVzO1xcbn1cXG4ucS1sb2FkaW5nLWJhci50b3Age1xcbiAgbGVmdDogMCAvKiBydGw6aWdub3JlICovO1xcbiAgcmlnaHQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ucS1sb2FkaW5nLWJhci5ib3R0b20ge1xcbiAgbGVmdDogMCAvKiBydGw6aWdub3JlICovO1xcbiAgcmlnaHQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG4gIGJvdHRvbTogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ucS1sb2FkaW5nLWJhci5yaWdodCB7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICByaWdodDogMDtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnEtbG9hZGluZy1iYXIubGVmdCB7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucS1hbGVydCB7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4ucS1hbGVydCAuYXZhdGFyIHtcXG4gIHdpZHRoOiAzMnB4O1xcbiAgaGVpZ2h0OiAzMnB4O1xcbn1cXG4ucS1hbGVydC1zaWRlLFxcbi5xLWFsZXJ0LWNvbnRlbnQge1xcbiAgcGFkZGluZzogMTJweDtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XFxufVxcbi5xLWFsZXJ0LXNpZGUge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbn1cXG4ucS1hbGVydC1hY3Rpb25zIHtcXG4gIHBhZGRpbmc6IDEycHggMTJweCAxMnB4IDA7XFxufVxcbi5xLWFsZXJ0LWRldGFpbCB7XFxuICBmb250LXNpemU6IDEycHg7XFxufVxcbi5xLWJyZWFkY3J1bWJzIC5xLWljb24sXFxuLnEtYnJlYWRjcnVtYnMgLnEtYnJlYWRjcnVtYnMtc2VwYXJhdG9yIHtcXG4gIGZvbnQtc2l6ZTogMTUwJTtcXG59XFxuLnEtYnJlYWRjcnVtYnMtbGFzdCBhIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5bZGlyPXJ0bF0gLnEtYnJlYWRjcnVtYnMtc2VwYXJhdG9yIC5xLWljb24ge1xcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWJ0biB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm9yZGVyOiAwO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHBhZGRpbmc6IDRweCAxNnB4O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIHRyYW5zaXRpb246IDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC41LCAxKTtcXG4gIG1pbi1oZWlnaHQ6IDIuNTcyZW07XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbn1cXG5idXR0b24ucS1idG4ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XFxufVxcbmEucS1idG4ge1xcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxufVxcbi5xLWJ0biAucS1pY29uLFxcbi5xLWJ0biAucS1zcGlubmVyIHtcXG4gIGZvbnQtc2l6ZTogMS40ZW07XFxufVxcbi5xLWJ0biAucS1idG4taW5uZXIge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzO1xcbn1cXG4ucS1idG4gLnEtYnRuLWlubmVyLS1oaWRkZW4ge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtYnRuIC5xLWJ0bi1pbm5lcjpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxufVxcbi5xLWJ0bi5kaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAwLjcgIWltcG9ydGFudDtcXG59XFxuLnEtYnRuOm5vdCguZGlzYWJsZWQpOm5vdCgucS1idG4tZmxhdCk6bm90KC5xLWJ0bi1vdXRsaW5lKTpub3QoLnEtYnRuLXB1c2gpOmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICB6LWluZGV4OiAtMTtcXG4gIHRyYW5zaXRpb246IDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC41LCAxKTtcXG59XFxuLnEtYnRuOm5vdCguZGlzYWJsZWQpOm5vdCgucS1idG4tZmxhdCk6bm90KC5xLWJ0bi1vdXRsaW5lKTpub3QoLnEtYnRuLXB1c2gpOmFjdGl2ZTpiZWZvcmUsXFxuLnEtYnRuOm5vdCguZGlzYWJsZWQpOm5vdCgucS1idG4tZmxhdCk6bm90KC5xLWJ0bi1vdXRsaW5lKTpub3QoLnEtYnRuLXB1c2gpLmFjdGl2ZTpiZWZvcmUge1xcbiAgYm94LXNoYWRvdzogMCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwwLjIpLCAwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1idG4tcHJvZ3Jlc3Mge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMjUpO1xcbn1cXG4ucS1idG4tcHJvZ3Jlc3MucS1idG4tZGFyay1wcm9ncmVzcyB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMik7XFxufVxcbi5xLWJ0bi1uby11cHBlcmNhc2Uge1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxufVxcbi5xLWJ0bi1yZWN0YW5nbGUge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbn1cXG4ucS1idG4tb3V0bGluZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG4ucS1idG4tcHVzaCB7XFxuICBib3JkZXItcmFkaXVzOiA3cHg7XFxuICBib3JkZXItYm90dG9tOiAzcHggc29saWQgcmdiYSgwLDAsMCwwLjE1KTtcXG59XFxuLnEtYnRuLXB1c2g6YWN0aXZlOm5vdCguZGlzYWJsZWQpLFxcbi5xLWJ0bi1wdXNoLmFjdGl2ZTpub3QoLmRpc2FibGVkKSB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuLnEtYnRuLXB1c2ggLnEtZm9jdXMtaGVscGVyLFxcbi5xLWJ0bi1wdXNoIC5xLXJpcHBsZS1jb250YWluZXIge1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgYm90dG9tOiAtM3B4O1xcbn1cXG4ucS1idG4tcm91bmRlZCB7XFxuICBib3JkZXItcmFkaXVzOiAyOHB4O1xcbn1cXG4ucS1idG4tcm91bmQge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgcGFkZGluZzogMDtcXG4gIG1pbi1oZWlnaHQ6IDA7XFxuICBoZWlnaHQ6IDNlbTtcXG4gIHdpZHRoOiAzZW07XFxufVxcbi5xLWJ0bi1mbGF0LFxcbi5xLWJ0bi1vdXRsaW5lIHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi5xLWJ0bi1kZW5zZSB7XFxuICBwYWRkaW5nOiAwLjI4NWVtO1xcbiAgbWluLWhlaWdodDogMmVtO1xcbn1cXG4ucS1idG4tZGVuc2UucS1idG4tcm91bmQge1xcbiAgcGFkZGluZzogMDtcXG4gIGhlaWdodDogMi40ZW07XFxuICB3aWR0aDogMi40ZW07XFxufVxcbi5xLWJ0bi1kZW5zZSAub24tbGVmdCB7XFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcXG59XFxuLnEtYnRuLWRlbnNlIC5vbi1yaWdodCB7XFxuICBtYXJnaW4tbGVmdDogNnB4O1xcbn1cXG4ucS1idG4tZmFiIC5xLWljb24sXFxuLnEtYnRuLWZhYi1taW5pIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbn1cXG4ucS1idG4tZmFiIHtcXG4gIGhlaWdodDogNTZweDtcXG4gIHdpZHRoOiA1NnB4O1xcbn1cXG4ucS1idG4tZmFiLW1pbmkge1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgd2lkdGg6IDQwcHg7XFxufVxcbi5xLXRyYW5zaXRpb24tLWZhZGUtbGVhdmUtYWN0aXZlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLnEtdHJhbnNpdGlvbi0tZmFkZS1lbnRlci1hY3RpdmUsXFxuLnEtdHJhbnNpdGlvbi0tZmFkZS1sZWF2ZS1hY3RpdmUge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2Utb3V0O1xcbn1cXG4ucS10cmFuc2l0aW9uLS1mYWRlLWVudGVyLFxcbi5xLXRyYW5zaXRpb24tLWZhZGUtbGVhdmUsXFxuLnEtdHJhbnNpdGlvbi0tZmFkZS1sZWF2ZS10byB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1idG4tZHJvcGRvd24tc3BsaXQgLnEtYnRuLWRyb3Bkb3duLWFycm93IHtcXG4gIHBhZGRpbmc6IDAgNHB4O1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMyk7XFxufVxcbi5xLWJ0bi1ncm91cCB7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5xLWJ0bi1ncm91cCA+IC5xLWJ0bi1pdGVtIHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi5xLWJ0bi1ncm91cCA+IC5xLWJ0bi1ncm91cCA+IC5xLWJ0bjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBpbmhlcml0O1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogaW5oZXJpdDtcXG59XFxuLnEtYnRuLWdyb3VwID4gLnEtYnRuLWdyb3VwID4gLnEtYnRuOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGluaGVyaXQ7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogaW5oZXJpdDtcXG59XFxuLnEtYnRuLWdyb3VwID4gLnEtYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpID4gLnEtYnRuOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci1sZWZ0OiAwO1xcbn1cXG4ucS1idG4tZ3JvdXAgPiAucS1idG4tZ3JvdXA6bm90KDpsYXN0LWNoaWxkKSA+IC5xLWJ0bjpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1yaWdodDogMDtcXG59XFxuLnEtYnRuLWdyb3VwID4gLnEtYnRuLWl0ZW06bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG4ucS1idG4tZ3JvdXAgPiAucS1idG4taXRlbSArIC5xLWJ0bi1pdGVtIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG4ucS1idG4tZ3JvdXAtcHVzaCB7XFxuICBib3JkZXItcmFkaXVzOiA3cHg7XFxufVxcbi5xLWJ0bi1ncm91cC1wdXNoID4gLnEtYnRuLXB1c2ggLnEtYnRuLWlubmVyIHtcXG4gIHRyYW5zaXRpb246IDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC41LCAxKTtcXG59XFxuLnEtYnRuLWdyb3VwLXB1c2ggPiAucS1idG4tcHVzaDphY3RpdmU6bm90KC5kaXNhYmxlZCksXFxuLnEtYnRuLWdyb3VwLXB1c2ggPiAucS1idG4tcHVzaC5hY3RpdmU6bm90KC5kaXNhYmxlZCkge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgwLDAsMCwwLjE1KTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG59XFxuLnEtYnRuLWdyb3VwLXB1c2ggPiAucS1idG4tcHVzaDphY3RpdmU6bm90KC5kaXNhYmxlZCkgLnEtYnRuLWlubmVyLFxcbi5xLWJ0bi1ncm91cC1wdXNoID4gLnEtYnRuLXB1c2guYWN0aXZlOm5vdCguZGlzYWJsZWQpIC5xLWJ0bi1pbm5lciB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTtcXG59XFxuLnEtYnRuLWdyb3VwLXJvdW5kZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMjhweDtcXG59XFxuLnEtYnRuLWdyb3VwLWZsYXQsXFxuLnEtYnRuLWdyb3VwLW91dGxpbmUge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLnEtYnRuLWdyb3VwLW91dGxpbmUgPiAucS1idG4taXRlbSArIC5xLWJ0bi1pdGVtIHtcXG4gIGJvcmRlci1sZWZ0OiAwO1xcbn1cXG4ucS1idG4tZ3JvdXAtb3V0bGluZSA+IC5xLWJ0bi1pdGVtOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgYm9yZGVyLXJpZ2h0OiAwO1xcbn1cXG4ucS1jYXJkIHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcXG59XFxuLnEtY2FyZCA+IGRpdjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBpbmhlcml0O1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGluaGVyaXQ7XFxufVxcbi5xLWNhcmQgPiBkaXY6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiBpbmhlcml0O1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IGluaGVyaXQ7XFxufVxcbi5xLWNhcmQgPiAucS1saXN0IHtcXG4gIGJvcmRlcjogMDtcXG59XFxuLnEtY2FyZC1zZXBhcmF0b3Ige1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbiAgaGVpZ2h0OiAxcHg7XFxufVxcbi5xLWNhcmQtc2VwYXJhdG9yLmluc2V0IHtcXG4gIG1hcmdpbjogMCAxNnB4O1xcbn1cXG4ucS1jYXJkLWNvbnRhaW5lciB7XFxuICBwYWRkaW5nOiAxNnB4O1xcbn1cXG4ucS1jYXJkLXRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IDJyZW07XFxufVxcbi5xLWNhcmQtdGl0bGU6ZW1wdHkge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtY2FyZC1zdWJ0aXRsZSxcXG4ucS1jYXJkLXRpdGxlLWV4dHJhIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuNCk7XFxufVxcbi5xLWNhcmQtc3VidGl0bGUgLnEtaWNvbixcXG4ucS1jYXJkLXRpdGxlLWV4dHJhIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbn1cXG4ucS1jYXJkLW1haW4ge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG4ucS1jYXJkLXByaW1hcnkgKyAucS1jYXJkLW1haW4ge1xcbiAgcGFkZGluZy10b3A6IDA7XFxufVxcbi5xLWNhcmQtYWN0aW9ucyB7XFxuICBwYWRkaW5nOiA4cHg7XFxufVxcbi5xLWNhcmQtYWN0aW9ucyAucS1idG4ge1xcbiAgcGFkZGluZzogMCA4cHg7XFxufVxcbi5xLWNhcmQtYWN0aW9ucy1ob3JpeiAucS1idG46bm90KDpsYXN0LWNoaWxkKSB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnEtY2FyZC1hY3Rpb25zLXZlcnQgLnEtYnRuICsgLnEtYnRuIHtcXG4gIG1hcmdpbi10b3A6IDRweDtcXG59XFxuLnEtY2FyZC1tZWRpYSB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucS1jYXJkLW1lZGlhID4gaW1nIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBib3JkZXI6IDA7XFxufVxcbi5xLWNhcmQtbWVkaWEtb3ZlcmxheSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40Nyk7XFxufVxcbi5xLWNhcmQtbWVkaWEtb3ZlcmxheSAucS1jYXJkLXN1YnRpdGxlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1jYXJkLWRhcmsgLnEtY2FyZC1zZXBhcmF0b3Ige1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjIpO1xcbn1cXG4ucS1jYXJkLWRhcmsgLnEtY2FyZC1zdWJ0aXRsZSxcXG4ucS1jYXJkLWRhcmsgLnEtY2FyZC10aXRsZS1leHRyYSB7XFxuICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjYpO1xcbn1cXG4ucS1jYXJvdXNlbCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucS1jYXJvdXNlbC1pbm5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5xLWNhcm91c2VsLXNsaWRlIHtcXG4gIC1tcy1mbGV4OiAwIDAgMTAwJTtcXG4gICAgICBmbGV4OiAwIDAgMTAwJTtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDE4cHg7XFxufVxcbi5xLWNhcm91c2VsLXRyYWNrIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IDA7XFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucS1jYXJvdXNlbC10cmFjay5pbmZpbml0ZS1sZWZ0ID4gZGl2Om50aC1sYXN0LWNoaWxkKDIpIHtcXG4gIC1tcy1mbGV4LW9yZGVyOiAtMTAwMDtcXG4gICAgICBvcmRlcjogLTEwMDA7XFxuICBtYXJnaW4tbGVmdDogLTEwMCU7XFxufVxcbi5xLWNhcm91c2VsLXRyYWNrLmluZmluaXRlLXJpZ2h0ID4gZGl2Om50aC1jaGlsZCgyKSB7XFxuICAtbXMtZmxleC1vcmRlcjogMTAwMDtcXG4gICAgICBvcmRlcjogMTAwMDtcXG59XFxuLnEtY2Fyb3VzZWwtbGVmdC1hcnJvdyxcXG4ucS1jYXJvdXNlbC1yaWdodC1hcnJvdyB7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4zKTtcXG59XFxuLnEtY2Fyb3VzZWwtbGVmdC1hcnJvdyB7XFxuICBsZWZ0OiA1cHg7XFxufVxcbi5xLWNhcm91c2VsLXJpZ2h0LWFycm93IHtcXG4gIHJpZ2h0OiA1cHg7XFxufVxcbi5xLWNhcm91c2VsLXF1aWNrLW5hdiB7XFxuICBwYWRkaW5nOiAycHggMDtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4zKTtcXG59XFxuLnEtY2Fyb3VzZWwtcXVpY2stbmF2IC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWNhcm91c2VsLXF1aWNrLW5hdiAucS1idG4uaW5hY3RpdmUge1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG4ucS1jYXJvdXNlbC1xdWljay1uYXYgLnEtYnRuLmluYWN0aXZlIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWNhcm91c2VsLXRodW1ibmFpbHMge1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwNSUpO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBtYXgtaGVpZ2h0OiA2MCU7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIGJhY2tncm91bmQ6ICMwMDA7XFxuICBwYWRkaW5nOiAwLjVyZW07XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBib3gtc2hhZG93OiAwIC0zcHggNnB4IHJnYmEoMCwwLDAsMC4xNiksIDAgLTVweCA2cHggcmdiYSgwLDAsMCwwLjIzKTtcXG59XFxuLnEtY2Fyb3VzZWwtdGh1bWJuYWlscy5hY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbn1cXG4ucS1jYXJvdXNlbC10aHVtYm5haWxzIGltZyB7XFxuICBoZWlnaHQ6IGF1dG87XFxuICB3aWR0aDogMTAwJTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgb3BhY2l0eTogMC41O1xcbiAgd2lsbC1jaGFuZ2U6IG9wYWNpdHk7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3M7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xcbn1cXG4ucS1jYXJvdXNlbC10aHVtYm5haWxzID4gZGl2ID4gZGl2IHtcXG4gIC1tcy1mbGV4OiAwIDAgMTA4cHg7XFxuICAgICAgZmxleDogMCAwIDEwOHB4O1xcbn1cXG4ucS1jYXJvdXNlbC10aHVtYm5haWxzID4gZGl2ID4gZGl2LmFjdGl2ZSBpbWcsXFxuLnEtY2Fyb3VzZWwtdGh1bWJuYWlscyA+IGRpdiA+IGRpdiBpbWcuYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDE7XFxuICBib3JkZXItY29sb3I6ICNmZmY7XFxufVxcbi5xLWNhcm91c2VsLXRodW1ibmFpbC1idG4ge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjMpO1xcbiAgdG9wOiA1cHg7XFxuICByaWdodDogNXB4O1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtY2Fyb3VzZWwtdGh1bWJuYWlscyBpbWc6aG92ZXIge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtbWVzc2FnZS1uYW1lLFxcbi5xLW1lc3NhZ2Utc3RhbXAsXFxuLnEtbWVzc2FnZS1sYWJlbCB7XFxuICBmb250LXNpemU6IHNtYWxsO1xcbn1cXG4ucS1tZXNzYWdlLWxhYmVsIHtcXG4gIG1hcmdpbjogMjRweCAwO1xcbn1cXG4ucS1tZXNzYWdlLXN0YW1wIHtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbiAgb3BhY2l0eTogMC42O1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtbWVzc2FnZS1hdmF0YXIge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgd2lkdGg6IDQ4cHg7XFxuICBoZWlnaHQ6IDQ4cHg7XFxufVxcbi5xLW1lc3NhZ2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4ucS1tZXNzYWdlOmZpcnN0LWNoaWxkIC5xLW1lc3NhZ2UtbGFiZWwge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLnEtbWVzc2FnZS1yZWNlaXZlZCAucS1tZXNzYWdlLWF2YXRhciB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnEtbWVzc2FnZS1yZWNlaXZlZCAucS1tZXNzYWdlLXRleHQge1xcbiAgY29sb3I6ICM4MWM3ODQ7XFxuICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDNweCAwO1xcbn1cXG4ucS1tZXNzYWdlLXJlY2VpdmVkIC5xLW1lc3NhZ2UtdGV4dDpsYXN0LWNoaWxkOmJlZm9yZSB7XFxuICByaWdodDogMTAwJTtcXG4gIGJvcmRlci1yaWdodDogMCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1sZWZ0OiA4cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItYm90dG9tOiA4cHggc29saWQgY3VycmVudENvbG9yO1xcbn1cXG4ucS1tZXNzYWdlLXJlY2VpdmVkIC5xLW1lc3NhZ2UtdGV4dC1jb250ZW50IHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1tZXNzYWdlLXNlbnQgLnEtbWVzc2FnZS1uYW1lIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG4ucS1tZXNzYWdlLXNlbnQgLnEtbWVzc2FnZS1hdmF0YXIge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnEtbWVzc2FnZS1zZW50IC5xLW1lc3NhZ2UtY29udGFpbmVyIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcbi5xLW1lc3NhZ2Utc2VudCAucS1tZXNzYWdlLXRleHQge1xcbiAgY29sb3I6ICNlMGUwZTA7XFxuICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDAgM3B4O1xcbn1cXG4ucS1tZXNzYWdlLXNlbnQgLnEtbWVzc2FnZS10ZXh0Omxhc3QtY2hpbGQ6YmVmb3JlIHtcXG4gIGxlZnQ6IDEwMCU7XFxuICBib3JkZXItbGVmdDogMCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtbWVzc2FnZS1zZW50IC5xLW1lc3NhZ2UtdGV4dC1jb250ZW50IHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1tZXNzYWdlLXRleHQge1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgcGFkZGluZzogOHB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuMjtcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbn1cXG4ucS1tZXNzYWdlLXRleHQgKyAucS1tZXNzYWdlLXRleHQge1xcbiAgbWFyZ2luLXRvcDogM3B4O1xcbn1cXG4ucS1tZXNzYWdlLXRleHQ6bGFzdC1jaGlsZCB7XFxuICBtaW4taGVpZ2h0OiA0OHB4O1xcbn1cXG4ucS1tZXNzYWdlLXRleHQ6bGFzdC1jaGlsZCAucS1tZXNzYWdlLXN0YW1wIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG4ucS1tZXNzYWdlLXRleHQ6bGFzdC1jaGlsZDpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG59XFxuLnEtY2hlY2tib3gtaWNvbiB7XFxuICBoZWlnaHQ6IDIxcHg7XFxuICB3aWR0aDogMjFweDtcXG4gIGZvbnQtc2l6ZTogMjFweDtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLWNoaXAge1xcbiAgbWluLWhlaWdodDogMzJweDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDAgMTJweDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGJvcmRlcjogI2UwZTBlMDtcXG4gIGJvcmRlci1yYWRpdXM6IDJyZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgY29sb3I6ICMwMDA7XFxuICBiYWNrZ3JvdW5kOiAjZWVlO1xcbn1cXG4ucS1jaGlwOmZvY3VzIC5xLWNoaXAtY2xvc2Uge1xcbiAgb3BhY2l0eTogMC44O1xcbn1cXG4ucS1jaGlwIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxufVxcbi5xLWNoaXAtbWFpbiB7XFxuICBsaW5lLWhlaWdodDogaW5pdGlhbDtcXG4gIC1tcy1mbGV4OiAxIDEgYXV0bztcXG4gICAgICBmbGV4OiAxIDEgYXV0bztcXG59XFxuLnEtY2hpcC1zaWRlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGhlaWdodDogMzJweDtcXG4gIHdpZHRoOiAzMnB4O1xcbiAgbWluLXdpZHRoOiAzMnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtY2hpcC1zaWRlIGltZyB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnEtY2hpcC1sZWZ0IHtcXG4gIG1hcmdpbi1sZWZ0OiAtMTJweDtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG4ucS1jaGlwLXJpZ2h0IHtcXG4gIG1hcmdpbi1sZWZ0OiAycHg7XFxuICBtYXJnaW4tcmlnaHQ6IC0xMnB4O1xcbn1cXG4ucS1jaGlwLXNxdWFyZSB7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxufVxcbi5xLWNoaXAtZmxvYXRpbmcge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtMC4zZW07XFxuICByaWdodDogLTAuM2VtO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICB6LWluZGV4OiAxO1xcbn1cXG4ucS1jaGlwLXRhZyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nLWxlZnQ6IDEuN3JlbTtcXG59XFxuLnEtY2hpcC10YWc6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDAuNXJlbTtcXG4gIG1hcmdpbi10b3A6IC0wLjI1cmVtO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIHdpZHRoOiAwLjVyZW07XFxuICBoZWlnaHQ6IDAuNXJlbTtcXG4gIGJveC1zaGFkb3c6IDAgLTFweCAxcHggMCByZ2JhKDAsMCwwLDAuMyk7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcbi5xLWNoaXAtcG9pbnRpbmcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMDtcXG59XFxuLnEtY2hpcC1wb2ludGluZzpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICB6LWluZGV4OiAtMTtcXG4gIGJhY2tncm91bmQ6IGluaGVyaXQ7XFxuICB3aWR0aDogMTZweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLnEtY2hpcC1wb2ludGluZy11cCB7XFxuICBtYXJnaW4tdG9wOiAwLjhyZW07XFxufVxcbi5xLWNoaXAtcG9pbnRpbmctdXA6YmVmb3JlIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC0yMiUpIHJvdGF0ZSg0NWRlZyk7XFxufVxcbi5xLWNoaXAtcG9pbnRpbmctZG93biB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjhyZW07XFxufVxcbi5xLWNoaXAtcG9pbnRpbmctZG93bjpiZWZvcmUge1xcbiAgcmlnaHQ6IGF1dG87XFxuICB0b3A6IDEwMCU7XFxuICBsZWZ0OiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNzglKSByb3RhdGUoNDVkZWcpO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLXJpZ2h0IHtcXG4gIG1hcmdpbi1yaWdodDogMC44cmVtO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLXJpZ2h0OmJlZm9yZSB7XFxuICB0b3A6IDUwJTtcXG4gIHJpZ2h0OiAycHg7XFxuICBib3R0b206IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDMzJSkgdHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoNDVkZWcpO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLWxlZnQge1xcbiAgbWFyZ2luLWxlZnQ6IDAuOHJlbTtcXG59XFxuLnEtY2hpcC1wb2ludGluZy1sZWZ0OmJlZm9yZSB7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDJweDtcXG4gIGJvdHRvbTogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zMyUpIHRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKDQ1ZGVnKTtcXG59XFxuLnEtY2hpcC1kZXRhaWwge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbiAgb3BhY2l0eTogMC44O1xcbiAgcGFkZGluZzogMCA1cHg7XFxuICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuLnEtY2hpcC1zbWFsbCB7XFxuICBtaW4taGVpZ2h0OiAyNnB4O1xcbn1cXG4ucS1jaGlwLXNtYWxsIC5xLWNoaXAtbWFpbiB7XFxuICBwYWRkaW5nOiA0cHggMXB4O1xcbiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7XFxufVxcbi5xLWNoaXAtc21hbGwgLnEtY2hpcC1zaWRlIHtcXG4gIGhlaWdodDogMjZweDtcXG4gIHdpZHRoOiAyNnB4O1xcbiAgbWluLXdpZHRoOiAyNnB4O1xcbn1cXG4ucS1jaGlwLXNtYWxsIC5xLWNoaXAtaWNvbiB7XFxuICBmb250LXNpemU6IDE2cHg7XFxufVxcbi5xLWNoaXAtZGVuc2Uge1xcbiAgbWluLWhlaWdodDogMXB4O1xcbiAgcGFkZGluZzogMCAzcHg7XFxuICBmb250LXNpemU6IDEycHg7XFxufVxcbi5xLWNoaXAtZGVuc2UucS1jaGlwLXRhZyB7XFxuICBwYWRkaW5nLWxlZnQ6IDEuM3JlbTtcXG59XFxuLnEtY2hpcC1kZW5zZS5xLWNoaXAtcG9pbnRpbmc6YmVmb3JlIHtcXG4gIHdpZHRoOiA5cHg7XFxuICBoZWlnaHQ6IDlweDtcXG59XFxuLnEtY2hpcC1kZW5zZSAucS1jaGlwLW1haW4ge1xcbiAgcGFkZGluZzogMXB4O1xcbn1cXG4ucS1jaGlwLWRlbnNlIC5xLWNoaXAtc2lkZSB7XFxuICBoZWlnaHQ6IDE4cHg7XFxuICB3aWR0aDogMThweDtcXG4gIG1pbi13aWR0aDogMTZweDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG59XFxuLnEtY2hpcC1kZW5zZSAucS1jaGlwLWxlZnQge1xcbiAgbWFyZ2luLWxlZnQ6IC0zcHg7XFxuICBtYXJnaW4tcmlnaHQ6IDJweDtcXG59XFxuLnEtY2hpcC1kZW5zZSAucS1jaGlwLXJpZ2h0IHtcXG4gIG1hcmdpbi1sZWZ0OiAycHg7XFxuICBtYXJnaW4tcmlnaHQ6IC0ycHg7XFxufVxcbi5xLWNoaXAtZGVuc2UgLnEtaWNvbiB7XFxuICBmb250LXNpemU6IDE2cHg7XFxufVxcbi5xLWlucHV0LWNoaXBzIHtcXG4gIG1hcmdpbi10b3A6IC0xcHg7XFxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xcbn1cXG4ucS1pbnB1dC1jaGlwcyAucS1jaGlwIHtcXG4gIG1hcmdpbjogMXB4O1xcbn1cXG4ucS1pbnB1dC1jaGlwcyBpbnB1dC5xLWlucHV0LXRhcmdldCB7XFxuICBtaW4td2lkdGg6IDcwcHggIWltcG9ydGFudDtcXG59XFxuLnEtY29sbGFwc2libGUtc3ViLWl0ZW0ge1xcbiAgcGFkZGluZzogOHB4IDE2cHg7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXN1Yi1pdGVtLmluZGVudCB7XFxuICBwYWRkaW5nLWxlZnQ6IDQ4cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1zdWItaXRlbSAucS1jYXJkIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcbi5xLWNvbGxhcHNpYmxlLnJvdXRlci1saW5rLWFjdGl2ZSA+IC5xLWl0ZW0ge1xcbiAgYmFja2dyb3VuZDogcmdiYSgxODksMTg5LDE4OSwwLjQpO1xcbn1cXG4ucS1jb2xsYXBzaWJsZSB7XFxuICB0cmFuc2l0aW9uOiBwYWRkaW5nIDAuNXM7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXBvcHVwLWNsb3NlZCB7XFxuICBwYWRkaW5nOiAwIDE1cHg7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXBvcHVwLWNsb3NlZCAucS1jb2xsYXBzaWJsZS1pbm5lciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1wb3B1cC1jbG9zZWQgKyAucS1jb2xsYXBzaWJsZS1wb3B1cC1jbG9zZWQgLnEtY29sbGFwc2libGUtaW5uZXIge1xcbiAgYm9yZGVyLXRvcDogMDtcXG59XFxuLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkIHtcXG4gIHBhZGRpbmc6IDE1cHggMDtcXG59XFxuLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkIC5xLWNvbGxhcHNpYmxlLWlubmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1wb3B1cC1vcGVuZWQgKyAucS1jb2xsYXBzaWJsZS1wb3B1cC1vcGVuZWQsXFxuLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkOmZpcnN0LWNoaWxkIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1wb3B1cC1vcGVuZWQ6bGFzdC1jaGlsZCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMDtcXG59XFxuLnEtY29sbGFwc2libGUtY3Vyc29yLXBvaW50ZXIgPiAucS1jb2xsYXBzaWJsZS1pbm5lciA+IC5xLWl0ZW0ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS10b2dnbGUtaWNvbiB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB3aWR0aDogMWVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4ucS1jb2xvciB7XFxuICBtYXgtd2lkdGg6IDEwMHZ3O1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG59XFxuLnEtY29sb3Itc2F0dXJhdGlvbiB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTIzcHg7XFxufVxcbi5xLWNvbG9yLXNhdHVyYXRpb24td2hpdGUge1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjZmZmLCByZ2JhKDI1NSwyNTUsMjU1LDApKTtcXG59XFxuLnEtY29sb3Itc2F0dXJhdGlvbi1ibGFjayB7XFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCAjMDAwLCByZ2JhKDAsMCwwLDApKTtcXG59XFxuLnEtY29sb3Itc2F0dXJhdGlvbi1jaXJjbGUge1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxLjVweCAjZmZmLCBpbnNldCAwIDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMyksIDAgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40KTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01cHgsIC01cHgpO1xcbn1cXG4ucS1jb2xvci1zd2F0Y2gsXFxuLnEtY29sb3ItYWxwaGEgLnEtc2xpZGVyLXRyYWNrIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQ0FZQUFBREVENzZMQUFBQUgwbEVRVlFvVTJOa1lHQXdaa0FGWjVHNWpQUlJnT1lFVkRlQjNFQmpCUUJPWndUVnVnSUd5QUFBQUFCSlJVNUVya0pnZ2c9PVxcXCIpICFpbXBvcnRhbnQ7XFxufVxcbi5xLWNvbG9yLXN3YXRjaCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMzJweDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4ucS1jb2xvci1odWUgLnEtc2xpZGVyLXRyYWNrIHtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2YwMCAwJSwgI2ZmMCAxNyUsICMwZjAgMzMlLCAjMGZmIDUwJSwgIzAwZiA2NyUsICNmMGYgODMlLCAjZjAwIDEwMCUpO1xcbiAgb3BhY2l0eTogMTtcXG4gIGhlaWdodDogOHB4O1xcbn1cXG4ucS1jb2xvci1odWUgLnEtc2xpZGVyLXRyYWNrLmFjdGl2ZS10cmFjayB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1jb2xvci1hbHBoYSAucS1zbGlkZXItdHJhY2sge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIG9wYWNpdHk6IDE7XFxuICBoZWlnaHQ6IDhweDtcXG59XFxuLnEtY29sb3ItYWxwaGEgLnEtc2xpZGVyLXRyYWNrOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDI1NSwyNTUsMjU1LDApLCAjNzU3NTc1KTtcXG59XFxuLnEtY29sb3ItYWxwaGEgLnEtc2xpZGVyLXRyYWNrLmFjdGl2ZS10cmFjayB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1jb2xvci1zbGlkZXJzIHtcXG4gIGhlaWdodDogNTZweDtcXG59XFxuLnEtY29sb3Itc2xpZGVycyAucS1zbGlkZXIge1xcbiAgaGVpZ2h0OiAyMHB4O1xcbn1cXG4ucS1jb2xvci1zbGlkZXJzIC5xLXNsaWRlci1oYW5kbGUge1xcbiAgYm94LXNoYWRvdzogMCAxcHggNHB4IDAgcmdiYSgwLDAsMCwwLjM3KTtcXG59XFxuLnEtY29sb3Itc2xpZGVycyAucS1zbGlkZXItcmluZyB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1jb2xvci1pbnB1dHMge1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgY29sb3I6ICM3NTc1NzU7XFxufVxcbi5xLWNvbG9yLWlucHV0cyBpbnB1dCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgb3V0bGluZTogMDtcXG59XFxuLnEtY29sb3ItcGFkZGluZyB7XFxuICBwYWRkaW5nOiAwIDJweDtcXG59XFxuLnEtY29sb3ItbGFiZWwge1xcbiAgcGFkZGluZy10b3A6IDRweDtcXG59XFxuLnEtY29sb3ItZGFyayB7XFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzQyNDI0MjtcXG59XFxuLnEtY29sb3ItZGFyayBpbnB1dCB7XFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgY29sb3I6ICNiZGJkYmQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1saWdodCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjNDI0MjQyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcS1jb2xvci1kYXJrKTtcXG59XFxuLnEtY29sb3ItZGFyayAucS1jb2xvci1pbnB1dHMge1xcbiAgY29sb3I6ICNiZGJkYmQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1saWdodCk7XFxufVxcbi5xLWNvbG9yLWRhcmsgLnEtY29sb3Itc3dhdGNoIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICM0MjQyNDI7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1xLWNvbG9yLWRhcmspO1xcbn1cXG4ucS1kYXRldGltZS1pbnB1dCB7XFxuICBtaW4td2lkdGg6IDcwcHg7XFxufVxcbi5xLWRhdGV0aW1lLWNvbnRyb2xzIHtcXG4gIHBhZGRpbmc6IDAgMTBweCA4cHg7XFxufVxcbi5xLWRhdGV0aW1lIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBsaW5lLWhlaWdodDogaW5pdGlhbDtcXG59XFxuLnEtZGF0ZXRpbWUgLm1vZGFsLWJ1dHRvbnMge1xcbiAgcGFkZGluZy10b3A6IDhweDtcXG59XFxuLnEtZGF0ZXRpbWU6bm90KC5uby1ib3JkZXIpOm5vdCgucS1kYXRldGltZS1kYXJrKSAucS1kYXRldGltZS1jb250ZW50IHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XFxufVxcbi5xLWRhdGV0aW1lOm5vdCgubm8tYm9yZGVyKS5xLWRhdGV0aW1lLWRhcmsge1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzQyNDI0MjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXEtY29sb3ItZGFyayk7XFxufVxcbi5xLWRhdGV0aW1lLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWhlYWRlciA+IGRpdiB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ubW9kYWwtY29udGVudCA+IC5xLWRhdGV0aW1lID4gLnEtZGF0ZXRpbWUtaGVhZGVyLFxcbi5xLXBvcG92ZXIgPiAucS1kYXRldGltZSA+IC5xLWRhdGV0aW1lLWhlYWRlciB7XFxuICBtaW4td2lkdGg6IDE3NXB4O1xcbn1cXG4ucS1kYXRldGltZS13ZWVrZGF5c3RyaW5nIHtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbiAgcGFkZGluZzogNXB4IDA7XFxufVxcbi5xLWRhdGV0aW1lLXRpbWUge1xcbiAgcGFkZGluZzogMTBweCAwO1xcbiAgd2lsbC1jaGFuZ2U6IHNjcm9sbC1wb3NpdGlvbjtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG4ucS1kYXRldGltZS1hbXBtIHtcXG4gIGZvbnQtc2l6ZTogMC45cmVtO1xcbiAgcGFkZGluZzogNXB4O1xcbn1cXG4ucS1kYXRldGltZS1kYXRlc3RyaW5nIHtcXG4gIHBhZGRpbmc6IDEwcHggMDtcXG59XFxuLnEtZGF0ZXRpbWUtZGF0ZXN0cmluZyAucS1kYXRldGltZS1saW5rIHtcXG4gIGZvbnQtc2l6ZTogMi43cmVtO1xcbn1cXG4ucS1kYXRldGltZS1kYXRlc3RyaW5nIC5xLWRhdGV0aW1lLWxpbmsgc3BhbiB7XFxuICBwYWRkaW5nOiAwIDVweDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ucS1kYXRldGltZS1kYXRlc3RyaW5nIC5xLWRhdGV0aW1lLWxpbmsuc21hbGwge1xcbiAgbWFyZ2luOiAwIDVweDtcXG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xcbn1cXG4ucS1kYXRldGltZS1kYXRlc3RyaW5nIC5xLWRhdGV0aW1lLWxpbmsuc21hbGwgc3BhbiB7XFxuICBwYWRkaW5nOiA1cHg7XFxufVxcbi5xLWRhdGV0aW1lLWxpbmsge1xcbiAgb3BhY2l0eTogMC42O1xcbn1cXG4ucS1kYXRldGltZS1saW5rID4gc3BhbiB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4ucS1kYXRldGltZS1saW5rLmFjdGl2ZSB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1kYXRldGltZS1jbG9ja3N0cmluZyB7XFxuICBtaW4td2lkdGg6IDIxMHB4O1xcbiAgZm9udC1zaXplOiAyLjdyZW07XFxuICBkaXJlY3Rpb246IGx0ciAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1zZWxlY3RvciB7XFxuICBtaW4td2lkdGg6IDI5MHB4O1xcbiAgaGVpZ2h0OiAzMTBweDtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG4ucS1kYXRldGltZS12aWV3LWRheSB7XFxuICB3aWR0aDogMjUwcHg7XFxuICBoZWlnaHQ6IDI4NXB4O1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWRhdGV0aW1lLXZpZXcteWVhciA+IC5xLWJ0bjpub3QoLmFjdGl2ZSksXFxuLnEtZGF0ZXRpbWUtdmlldy1tb250aCA+IC5xLWJ0bjpub3QoLmFjdGl2ZSkge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWRhdGV0aW1lLW1vbnRoLXN0YW1wIHtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG59XFxuLnEtZGF0ZXRpbWUtd2Vla2RheXMge1xcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xcbn1cXG4ucS1kYXRldGltZS13ZWVrZGF5cyBkaXYge1xcbiAgb3BhY2l0eTogMC42O1xcbiAgd2lkdGg6IDM1cHg7XFxuICBoZWlnaHQ6IDM1cHg7XFxuICBsaW5lLWhlaWdodDogMzVweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBtaW4td2lkdGg6IDA7XFxuICBtaW4taGVpZ2h0OiAwO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxufVxcbi5xLWRhdGV0aW1lLWRheXMgZGl2IHtcXG4gIG1hcmdpbjogMXB4O1xcbiAgbGluZS1oZWlnaHQ6IDMzcHg7XFxuICB3aWR0aDogMzNweDtcXG4gIGhlaWdodDogMzNweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuLnEtZGF0ZXRpbWUtZGF5cyBkaXYucS1kYXRldGltZS1kYXktYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtZGF0ZXRpbWUtZGF5cyBkaXYucS1kYXRldGltZS1kYXktYWN0aXZlID4gc3BhbiB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtZGF0ZXRpbWUtZGF5cyBkaXYucS1kYXRldGltZS1kYXktdG9kYXkge1xcbiAgY29sb3I6IGN1cnJlbnRDb2xvcjtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtZGF0ZXRpbWUtZGF5cyBkaXY6bm90KC5xLWRhdGV0aW1lLWZpbGxlcmRheSk6bm90KC5kaXNhYmxlZCk6bm90KC5xLWRhdGV0aW1lLWRheS1hY3RpdmUpOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6ICNlMGUwZTA7XFxufVxcbi5xLWRhdGV0aW1lLWJ0biB7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbn1cXG4ucS1kYXRldGltZS1idG4uYWN0aXZlIHtcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcbiAgcGFkZGluZy10b3A6IDFyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2sge1xcbiAgd2lkdGg6IDI1MHB4O1xcbiAgaGVpZ2h0OiAyNTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6ICNlMGUwZTA7XFxuICBwYWRkaW5nOiAyNHB4O1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1jaXJjbGUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYW5pbWF0aW9uOiBxLXBvcCAwLjVzIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLWNlbnRlciB7XFxuICBoZWlnaHQ6IDZweDtcXG4gIHdpZHRoOiA2cHg7XFxuICB0b3A6IDA7XFxuICBtYXJnaW46IGF1dG87XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBtaW4taGVpZ2h0OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb2ludGVyIHtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDUwJTtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlciAvKiBydGw6aWdub3JlICovO1xcbiAgbWluLWhlaWdodDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9pbnRlciBzcGFuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHdpZHRoOiA4cHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJvdHRvbTogLThweDtcXG4gIGxlZnQ6IDA7XFxuICBtaW4td2lkdGg6IDA7XFxuICBtaW4taGVpZ2h0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWFycm93IHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIHtcXG4gIGJhY2tncm91bmQ6ICM0MjQyNDI7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1xLWNvbG9yLWRhcmspO1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLWFycm93IHtcXG4gIGNvbG9yOiAjYmRiZGJkO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbGlnaHQpO1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLWhlYWRlcixcXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLWNsb2NrIHtcXG4gIGJhY2tncm91bmQ6ICM2MTYxNjE7XFxufVxcbi5xLWRhdGV0aW1lLWRhcmsgLnEtZGF0ZXRpbWUtdmlldy1kYXkge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLWRhdGV0aW1lLWRhcmsgLnEtZGF0ZXRpbWUtdmlldy15ZWFyID4gLnEtYnRuOm5vdCguYWN0aXZlKSxcXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLXZpZXctbW9udGggPiAucS1idG46bm90KC5hY3RpdmUpIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLWRheXMgZGl2LnEtZGF0ZXRpbWUtZGF5LWFjdGl2ZSA+IHNwYW4sXFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1kYXlzIGRpdjpub3QoLnEtZGF0ZXRpbWUtZmlsbGVyZGF5KTpub3QoLmRpc2FibGVkKTpub3QoLnEtZGF0ZXRpbWUtZGF5LWFjdGl2ZSk6aG92ZXIge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbmJvZHkuZGVza3RvcCAucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbjpub3QoLmFjdGl2ZSk6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogI2Y1ZjVmNSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbjpub3QoLmFjdGl2ZSk6aG92ZXIge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG1pbi1oZWlnaHQ6IDMycHg7XFxuICB3aWR0aDogMzJweDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIC8qIHJ0bDppZ25vcmUgKi87XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uOm5vdCguYWN0aXZlKSB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbjpub3QoLmFjdGl2ZSkge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uLmFjdGl2ZSA+IHNwYW4ge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0wIHtcXG4gIHRvcDogMCU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEge1xcbiAgdG9wOiA2LjclO1xcbiAgbGVmdDogNzUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0yIHtcXG4gIHRvcDogMjUlO1xcbiAgbGVmdDogOTMuMyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTMge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAxMDAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy00IHtcXG4gIHRvcDogNzUlO1xcbiAgbGVmdDogOTMuMyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTUge1xcbiAgdG9wOiA5My4zJTtcXG4gIGxlZnQ6IDc1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtNiB7XFxuICB0b3A6IDEwMCU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTcge1xcbiAgdG9wOiA5My4zJTtcXG4gIGxlZnQ6IDI1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtOCB7XFxuICB0b3A6IDc1JTtcXG4gIGxlZnQ6IDYuNyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTkge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAwJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTAge1xcbiAgdG9wOiAyNSU7XFxuICBsZWZ0OiA2LjclIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xMSB7XFxuICB0b3A6IDYuNyU7XFxuICBsZWZ0OiAyNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEyIHtcXG4gIHRvcDogMCU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEuZm10MjQge1xcbiAgdG9wOiA2LjclO1xcbiAgbGVmdDogNzUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0yLmZtdDI0IHtcXG4gIHRvcDogMjUlO1xcbiAgbGVmdDogOTMuMyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTMuZm10MjQge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAxMDAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy00LmZtdDI0IHtcXG4gIHRvcDogNzUlO1xcbiAgbGVmdDogOTMuMyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTUuZm10MjQge1xcbiAgdG9wOiA5My4zJTtcXG4gIGxlZnQ6IDc1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtNi5mbXQyNCB7XFxuICB0b3A6IDEwMCU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTcuZm10MjQge1xcbiAgdG9wOiA5My4zJTtcXG4gIGxlZnQ6IDI1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtOC5mbXQyNCB7XFxuICB0b3A6IDc1JTtcXG4gIGxlZnQ6IDYuNyUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTkuZm10MjQge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAwJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTAuZm10MjQge1xcbiAgdG9wOiAyNSU7XFxuICBsZWZ0OiA2LjclIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xMS5mbXQyNCB7XFxuICB0b3A6IDYuNyU7XFxuICBsZWZ0OiAyNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEyLmZtdDI0IHtcXG4gIHRvcDogMCU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEzLmZtdDI0IHtcXG4gIHRvcDogMTkuNjklO1xcbiAgbGVmdDogNjcuNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTE0LmZtdDI0IHtcXG4gIHRvcDogMzIuNSU7XFxuICBsZWZ0OiA4MC4zMSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTE1LmZtdDI0IHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogODUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xNi5mbXQyNCB7XFxuICB0b3A6IDY3LjUlO1xcbiAgbGVmdDogODAuMzElIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xNy5mbXQyNCB7XFxuICB0b3A6IDgwLjMxJTtcXG4gIGxlZnQ6IDY3LjUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xOC5mbXQyNCB7XFxuICB0b3A6IDg1JTtcXG4gIGxlZnQ6IDUwJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTkuZm10MjQge1xcbiAgdG9wOiA4MC4zMSU7XFxuICBsZWZ0OiAzMi41JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMjAuZm10MjQge1xcbiAgdG9wOiA2Ny41JTtcXG4gIGxlZnQ6IDE5LjY5JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMjEuZm10MjQge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAxNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTIyLmZtdDI0IHtcXG4gIHRvcDogMzIuNSU7XFxuICBsZWZ0OiAxOS42OSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTIzLmZtdDI0IHtcXG4gIHRvcDogMTkuNjklO1xcbiAgbGVmdDogMzIuNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTAuZm10MjQge1xcbiAgdG9wOiAxNSU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtcmFuZ2Uucm93IC5xLWRhdGV0aW1lLXJhbmdlLWxlZnQge1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuLnEtZGF0ZXRpbWUtcmFuZ2Uucm93IC5xLWRhdGV0aW1lLXJhbmdlLXJpZ2h0IHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG4ucS1kYXRldGltZS1yYW5nZS5jb2x1bW4gPiBkaXYgKyBkaXYge1xcbiAgbWFyZ2luLXRvcDogMTBweDtcXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICAucS1kYXRldGltZSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAucS1kYXRldGltZS1oZWFkZXIge1xcbiAgICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDEgYXV0bztcXG4gIH1cXG4gIC5xLWRhdGV0aW1lLWNvbnRlbnQge1xcbiAgICAtbXMtZmxleDogMiAyIGF1dG87XFxuICAgICAgICBmbGV4OiAyIDIgYXV0bztcXG4gIH1cXG59XFxuLnEtZG90IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTJweDtcXG4gIHJpZ2h0OiAtMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZDogI2Y0NDMzNjtcXG4gIG9wYWNpdHk6IDAuODtcXG59XFxuLnEtZWRpdG9yIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XFxufVxcbi5xLWVkaXRvci5kaXNhYmxlZCB7XFxuICBib3JkZXItc3R5bGU6IGRhc2hlZDtcXG59XFxuLnEtZWRpdG9yLmZ1bGxzY3JlZW4ge1xcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5xLWVkaXRvci1jb250ZW50IHtcXG4gIG91dGxpbmU6IDA7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgbWluLWhlaWdodDogMTBlbTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxufVxcbi5xLWVkaXRvci1jb250ZW50IGhyIHtcXG4gIGJvcmRlcjogMDtcXG4gIG91dGxpbmU6IDA7XFxuICBtYXJnaW46IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgYmFja2dyb3VuZDogI2NjYztcXG59XFxuLnEtZWRpdG9yLXRvb2xiYXItcGFkZGluZyB7XFxuICBwYWRkaW5nOiA0cHg7XFxufVxcbi5xLWVkaXRvci10b29sYmFyIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xcbiAgYmFja2dyb3VuZDogI2UwZTBlMDtcXG4gIG1pbi1oZWlnaHQ6IDM3cHg7XFxufVxcbi5xLWVkaXRvci10b29sYmFyIC5xLWJ0bi1ncm91cCB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4ucS1lZGl0b3ItdG9vbGJhciAucS1idG4tZ3JvdXAgKyAucS1idG4tZ3JvdXAge1xcbiAgbWFyZ2luLWxlZnQ6IDVweDtcXG59XFxuLnEtZWRpdG9yLXRvb2xiYXItc2VwYXJhdG9yIC5xLWJ0bi1ncm91cCArIC5xLWJ0bi1ncm91cCB7XFxuICBwYWRkaW5nLWxlZnQ6IDVweDtcXG59XFxuLnEtZWRpdG9yLXRvb2xiYXItc2VwYXJhdG9yIC5xLWJ0bi1ncm91cCArIC5xLWJ0bi1ncm91cDpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDFweDtcXG4gIGJhY2tncm91bmQ6ICNjY2M7XFxufVxcbi5xLWVkaXRvci1pbnB1dCBpbnB1dCB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuLnEtZmFiIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi56LWZhYiB7XFxuICB6LWluZGV4OiA5OTA7XFxufVxcbi5xLWZhYi1vcGVuZWQgLnEtZmFiLWFjdGlvbnMge1xcbiAgb3BhY2l0eTogMTtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDEpIHNjYWxlWSgxKSB0cmFuc2xhdGVYKDApIHRyYW5zbGF0ZVkoMCk7XFxuICBwb2ludGVyLWV2ZW50czogYWxsO1xcbn1cXG4ucS1mYWItb3BlbmVkIC5xLWZhYi1pY29uIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMTgwZGVnKTtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLWZhYi1vcGVuZWQgLnEtZmFiLWFjdGl2ZS1pY29uIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMGRlZyk7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1mYWItaWNvbixcXG4ucS1mYWItYWN0aXZlLWljb24ge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzLCB0cmFuc2Zvcm0gMC40cztcXG59XFxuLnEtZmFiLWljb24ge1xcbiAgb3BhY2l0eTogMTtcXG4gIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMGRlZyk7XFxufVxcbi5xLWZhYi1hY3RpdmUtaWNvbiB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUzZCgwLCAwLCAxLCAtMTgwZGVnKTtcXG59XFxuLnEtZmFiLWFjdGlvbnMge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW47XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnEtZmFiLWFjdGlvbnMgLnEtYnRuIHtcXG4gIG1hcmdpbjogNXB4O1xcbn1cXG4ucS1mYWItcmlnaHQge1xcbiAgdHJhbnNmb3JtOiBzY2FsZVgoMC40KSBzY2FsZVkoMC40KSB0cmFuc2xhdGVYKC0xMDAlKTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDEyMCU7XFxufVxcbi5xLWZhYi1sZWZ0IHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDAuNCkgc2NhbGVZKDAuNCkgdHJhbnNsYXRlWCgxMDAlKTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHJpZ2h0OiAxMjAlO1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcXG59XFxuLnEtZmFiLXVwIHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDAuNCkgc2NhbGVZKDAuNCkgdHJhbnNsYXRlWSgxMDAlKTtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBib3R0b206IDEyMCU7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxufVxcbi5xLWZhYi1kb3duIHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDAuNCkgc2NhbGVZKDAuNCkgdHJhbnNsYXRlWSgtMTAwJSk7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB0b3A6IDEyMCU7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxufVxcbi5xLWZpZWxkLWljb24ge1xcbiAgd2lkdGg6IDI4cHg7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBtaW4td2lkdGg6IDI4cHg7XFxuICBmb250LXNpemU6IDI4cHg7XFxuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XFxuICBjb2xvcjogIzk3OTc5NztcXG59XFxuLnEtZmllbGQtbGFiZWwge1xcbiAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgY29sb3I6ICM5Nzk3OTc7XFxufVxcbi5xLWZpZWxkLWxhYmVsLWlubmVyIHtcXG4gIG1pbi1oZWlnaHQ6IDI4cHg7XFxufVxcbi5xLWZpZWxkLWxhYmVsLWhpbnQge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XFxufVxcbi5xLWZpZWxkLWJvdHRvbSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBwYWRkaW5nLXRvcDogOHB4O1xcbiAgY29sb3I6ICM5Nzk3OTc7XFxufVxcbi5xLWZpZWxkLW5vLWlucHV0IC5xLWZpZWxkLWJvdHRvbSB7XFxuICBtYXJnaW4tdG9wOiA4cHg7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtZmllbGQtY291bnRlciB7XFxuICBjb2xvcjogIzk3OTc5NztcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbn1cXG4ucS1maWVsZC1kYXJrIC5xLWZpZWxkLWxhYmVsLFxcbi5xLWZpZWxkLWRhcmsgLnEtZmllbGQtaWNvbixcXG4ucS1maWVsZC1kYXJrIC5xLWZpZWxkLWNvdW50ZXIsXFxuLnEtZmllbGQtZGFyayAucS1maWVsZC1ib3R0b20ge1xcbiAgY29sb3I6ICNhN2E3YTc7XFxufVxcbi5xLWZpZWxkLWRhcmsgLnEtZmllbGQtbm8taW5wdXQgLnEtZmllbGQtYm90dG9tIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjOTc5Nzk3O1xcbn1cXG4ucS1maWVsZC13aXRoLWVycm9yIC5xLWZpZWxkLWljb24sXFxuLnEtZmllbGQtd2l0aC1lcnJvciAucS1maWVsZC1sYWJlbCxcXG4ucS1maWVsZC13aXRoLWVycm9yIC5xLWZpZWxkLWJvdHRvbSB7XFxuICBjb2xvcjogI2RiMjgyODtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLW5lZ2F0aXZlKTtcXG59XFxuLnEtZmllbGQtd2l0aC1lcnJvciAucS1maWVsZC1uby1pbnB1dCAucS1maWVsZC1ib3R0b20ge1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkYjI4Mjg7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSk7XFxufVxcbi5xLWZpZWxkLXdpdGgtd2FybmluZyAucS1maWVsZC1pY29uLFxcbi5xLWZpZWxkLXdpdGgtd2FybmluZyAucS1maWVsZC1sYWJlbCxcXG4ucS1maWVsZC13aXRoLXdhcm5pbmcgLnEtZmllbGQtYm90dG9tIHtcXG4gIGNvbG9yOiAjZjJjMDM3O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3Itd2FybmluZyk7XFxufVxcbi5xLWZpZWxkLXdpdGgtd2FybmluZyAucS1maWVsZC1uby1pbnB1dCAucS1maWVsZC1ib3R0b20ge1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNmMmMwMzc7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcS1jb2xvci13YXJuaW5nKTtcXG59XFxuLnEtZmllbGQtbWFyZ2luIHtcXG4gIG1hcmdpbi10b3A6IDVweDtcXG59XFxuLnEtZmllbGQtZmxvYXRpbmcgLnEtZmllbGQtbWFyZ2luIHtcXG4gIG1hcmdpbi10b3A6IDIzcHg7XFxufVxcbi5xLWZpZWxkLW5vLWlucHV0IC5xLWZpZWxkLW1hcmdpbiB7XFxuICBtYXJnaW4tdG9wOiAzcHg7XFxufVxcbi5xLWZpZWxkLWNvbnRlbnQgLnEtaWYucS1pZi1oYXMtbGFiZWw6bm90KC5xLWlmLXN0YW5kYXJkKSB7XFxuICBtYXJnaW4tdG9wOiA5cHg7XFxufVxcbi5xLWZpZWxkLWNvbnRlbnQgLnEtaWYtc3RhbmRhcmQ6bm90KC5xLWlmLWhhcy1sYWJlbCkge1xcbiAgcGFkZGluZy10b3A6IDZweDtcXG59XFxuLnEtZmllbGQtY29udGVudCAucS1vcHRpb24tZ3JvdXAge1xcbiAgcGFkZGluZy10b3A6IDA7XFxufVxcbi5xLWZpZWxkLW5vLWlucHV0IC5xLWZpZWxkLWNvbnRlbnQge1xcbiAgcGFkZGluZy10b3A6IDZweDtcXG59XFxuLnEtZmllbGQtdmVydGljYWw6bm90KC5xLWZpZWxkLW5vLWxhYmVsKSAucS1maWVsZC1tYXJnaW4ge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLnEtZmllbGQtdmVydGljYWw6bm90KC5xLWZpZWxkLW5vLWxhYmVsKSAucS1pZi1zdGFuZGFyZDpub3QoLnEtaWYtaGFzLWxhYmVsKSB7XFxuICBwYWRkaW5nLXRvcDogMDtcXG59XFxuLnEtZmllbGQtdmVydGljYWw6bm90KC5xLWZpZWxkLW5vLWxhYmVsKSAucS1pZi5xLWlmLWhhcy1sYWJlbDpub3QoLnEtaWYtc3RhbmRhcmQpIHtcXG4gIG1hcmdpbi10b3A6IDBweDtcXG59XFxuLnEtZmllbGQtdmVydGljYWwucS1maWVsZC1uby1sYWJlbCAucS1maWVsZC1sYWJlbCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHtcXG4gIC5xLWZpZWxkLXJlc3BvbnNpdmU6bm90KC5xLWZpZWxkLW5vLWxhYmVsKSAucS1maWVsZC1tYXJnaW4ge1xcbiAgICBtYXJnaW4tdG9wOiAwO1xcbiAgfVxcbiAgLnEtZmllbGQtcmVzcG9uc2l2ZTpub3QoLnEtZmllbGQtbm8tbGFiZWwpIC5xLWlmLXN0YW5kYXJkOm5vdCgucS1pZi1oYXMtbGFiZWwpIHtcXG4gICAgcGFkZGluZy10b3A6IDA7XFxuICB9XFxuICAucS1maWVsZC1yZXNwb25zaXZlOm5vdCgucS1maWVsZC1uby1sYWJlbCkgLnEtaWYucS1pZi1oYXMtbGFiZWw6bm90KC5xLWlmLXN0YW5kYXJkKSB7XFxuICAgIG1hcmdpbi10b3A6IDBweDtcXG4gIH1cXG4gIC5xLWZpZWxkLXJlc3BvbnNpdmUucS1maWVsZC1uby1sYWJlbCAucS1maWVsZC1sYWJlbCB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxuICB9XFxufVxcbi5xLWlubmVyLWxvYWRpbmcge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjYpO1xcbn1cXG4ucS1pbm5lci1sb2FkaW5nLmRhcmsge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjQpO1xcbn1cXG4ucS1pZixcXG4ucS1pZjpiZWZvcmUsXFxuLnEtaWYtbGFiZWwsXFxuLnEtaWYtYWRkb24sXFxuLnEtZmllbGQtaWNvbixcXG4ucS1maWVsZC1sYWJlbCxcXG4ucS1pZi1jb250cm9sLFxcbi5xLWZpZWxkLWJvdHRvbSB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC40NXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpLCBkaXNwbGF5IDBzIDBzO1xcbn1cXG4ucS1pZi5xLWlmLWhpZGUtdW5kZXJsaW5lOmJlZm9yZSxcXG4ucS1pZi5xLWlmLWludmVydGVkOmJlZm9yZSxcXG4ucS1pZi5xLWlmLWhpZGUtdW5kZXJsaW5lOmFmdGVyLFxcbi5xLWlmLnEtaWYtaW52ZXJ0ZWQ6YWZ0ZXIge1xcbiAgY29udGVudDogbm9uZTtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA4cHg7XFxufVxcbi5xLWlmLWludmVydGVkIC5xLWlmLWlubmVyIHtcXG4gIG1hcmdpbi10b3A6IDdweDtcXG4gIG1hcmdpbi1ib3R0b206IDdweDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQucS1pZi1oYXMtbGFiZWwgLnEtaWYtaW5uZXIge1xcbiAgbWFyZ2luLXRvcDogMjVweDtcXG59XFxuLnEtaWY6YmVmb3JlLFxcbi5xLWlmOmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvcmRlcjogMXB4IGhpZGRlbiBjdXJyZW50Q29sb3I7XFxuICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb250ZW50OiAnJztcXG59XFxuLnEtaWY6YmVmb3JlIHtcXG4gIGNvbG9yOiAjYmRiZGJkO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbGlnaHQpO1xcbn1cXG4ucS1pZjphZnRlciB7XFxuICBib3JkZXItd2lkdGg6IDA7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyIDA7XFxuICB0cmFuc2Zvcm06IHNjYWxlWCgwKTtcXG59XFxuLnEtaWY6bm90KC5xLWlmLWRpc2FibGVkKTpub3QoLnEtaWYtZXJyb3IpOm5vdCgucS1pZi13YXJuaW5nKTpob3ZlcjpiZWZvcmUsXFxuLnEtaWYucS1pZi1yZWFkb25seTpub3QoLnEtaWYtZXJyb3IpOm5vdCgucS1pZi13YXJuaW5nKTphZnRlciB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnEtaWYtZGFyay5xLWlmOm5vdCgucS1pZi1kaXNhYmxlZCk6bm90KC5xLWlmLWVycm9yKTpub3QoLnEtaWYtd2FybmluZyk6aG92ZXI6YmVmb3JlLFxcbi5xLWlmLWRhcmsucS1pZi5xLWlmLXJlYWRvbmx5Om5vdCgucS1pZi1lcnJvcik6bm90KC5xLWlmLXdhcm5pbmcpOmFmdGVyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1pZi1mb2N1c2VkOmFmdGVyIHtcXG4gIGJvcmRlci13aWR0aDogMnB4O1xcbiAgdHJhbnNmb3JtOiBzY2FsZVgoMSk7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40NXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpLCBib3JkZXItbGVmdC13aWR0aCAwcyAwLjQ1cywgYm9yZGVyLXJpZ2h0LXdpZHRoIDBzIDAuNDVzO1xcbn1cXG4ucS1pZiB7XFxuICBvdXRsaW5lOiAwO1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbn1cXG4ucS1pZiAucS1pZi1pbm5lciB7XFxuICBtaW4taGVpZ2h0OiAyNHB4O1xcbn1cXG4ucS1pZi1zdGFuZGFyZCB7XFxuICBwYWRkaW5nLXRvcDogN3B4O1xcbiAgcGFkZGluZy1ib3R0b206IDdweDtcXG59XFxuLnEtaWYtc3RhbmRhcmQucS1pZi1oYXMtbGFiZWwge1xcbiAgcGFkZGluZy10b3A6IDI1cHg7XFxufVxcbi5xLWlmLWhpZGUtdW5kZXJsaW5lIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxufVxcbi5xLWlmLWhpZGUtdW5kZXJsaW5lLnEtaWYtaGFzLWxhYmVsIHtcXG4gIHBhZGRpbmctdG9wOiAxOHB4O1xcbn1cXG4ucS1pZi1zdGFuZGFyZCAucS1pZi1sYWJlbCxcXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1sYWJlbCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGxlZnQ7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcXG59XFxuLnEtaWYtc3RhbmRhcmQgLnEtaWYtbGFiZWwucS1pZi1sYWJlbC1hYm92ZSxcXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1sYWJlbC5xLWlmLWxhYmVsLWFib3ZlIHtcXG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0xMDAlKTtcXG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1xcbn1cXG4ucS1pZi1pbnZlcnRlZCB7XFxuICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjIpLCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtbGFiZWwge1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjFweCk7XFxufVxcbi5xLWlmLWludmVydGVkIC5xLWlmLWxhYmVsLnEtaWYtbGFiZWwtYWJvdmUge1xcbiAgdG9wOiA0cHg7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMTI1JSk7XFxufVxcbi5xLWlmLWludmVydGVkIC5xLWlucHV0LXRhcmdldCB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuLnEtaWYtZm9jdXNlZDpub3QoLnEtaWYtcmVhZG9ubHkpIC5xLWlmLWxhYmVsLFxcbi5xLWlmLWZvY3VzZWQ6bm90KC5xLWlmLXJlYWRvbmx5KSAucS1pZi1hZGRvbixcXG4ucS1pZi1mb2N1c2VkOm5vdCgucS1pZi1yZWFkb25seSkgLnEtaWYtY29udHJvbCB7XFxuICBjb2xvcjogY3VycmVudENvbG9yO1xcbn1cXG4ucS1pZi13YXJuaW5nOmJlZm9yZSxcXG4ucS1pZi13YXJuaW5nOmFmdGVyLFxcbi5xLWlmLXdhcm5pbmc6bm90KC5xLWlmLWludmVydGVkKSAucS1pZi1sYWJlbCB7XFxuICBjb2xvcjogI2YyYzAzNztcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXdhcm5pbmcpO1xcbn1cXG4ucS1pZi13YXJuaW5nOmhvdmVyOmJlZm9yZSB7XFxuICBjb2xvcjogI2Y4ZGQ5MztcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXdhcm5pbmctbCk7XFxufVxcbi5xLWlmLWVycm9yOmJlZm9yZSxcXG4ucS1pZi1lcnJvcjphZnRlcixcXG4ucS1pZi1lcnJvcjpub3QoLnEtaWYtaW52ZXJ0ZWQpIC5xLWlmLWxhYmVsIHtcXG4gIGNvbG9yOiAjZGIyODI4O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbmVnYXRpdmUpO1xcbn1cXG4ucS1pZi1lcnJvcjpob3ZlcjpiZWZvcmUge1xcbiAgY29sb3I6ICNlYzhiOGI7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZS1sKTtcXG59XFxuLnEtaWYtZGlzYWJsZWQge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gIG9wYWNpdHk6IDAuNjtcXG59XFxuLnEtaWYtZGlzYWJsZWQgLnEtaWYtbGFiZWwsXFxuLnEtaWYtZGlzYWJsZWQgLnEtaWYtY29udHJvbCxcXG4ucS1pZi1kaXNhYmxlZCAucS1pbnB1dC10YXJnZXQsXFxuLnEtaWYtZGlzYWJsZWQgLnEtY2hpcCB7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG4ucS1pZi1kYXJrOm5vdCgucS1pZi1pbnZlcnRlZC1saWdodCkgLnEtaW5wdXQtdGFyZ2V0Om5vdCgucS1pbnB1dC10YXJnZXQtcGxhY2Vob2xkZXIpIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1pZi1mb2N1c2FibGUge1xcbiAgb3V0bGluZTogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtaWYtbGFiZWwsXFxuLnEtaW5wdXQtdGFyZ2V0LFxcbi5xLWlucHV0LXRhcmdldC1wbGFjZWhvbGRlciB7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG59XFxuLnEtaWYtY29udHJvbCB7XFxuICBmb250LXNpemU6IDI0cHg7XFxuICB3aWR0aDogMjRweDtcXG4gIGhlaWdodDogMjRweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtaWYtY29udHJvbCArIC5xLWlmLWNvbnRyb2wsXFxuLnEtaWYtY29udHJvbCArIC5xLWlmLWlubmVyLFxcbi5xLWlmLWlubmVyICsgLnEtaWYtY29udHJvbCB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG4ucS1pZi1jb250cm9sOmhvdmVyIHtcXG4gIG9wYWNpdHk6IDAuNztcXG59XFxuLnEtaWYtYmFzZWxpbmUge1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxuICB3aWR0aDogMDtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuLnEtaWYtbGFiZWwtaW5uZXIsXFxuLnEtaWYtbGFiZWwtc3BhY2VyLFxcbi5xLWlmLWJhc2VsaW5lIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuLnEtaWYtbGFiZWwtc3BhY2VyIHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIGhlaWdodDogMCAhaW1wb3J0YW50O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuLnEtaWYtbGFiZWwge1xcbiAgY3Vyc29yOiB0ZXh0O1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtaWYtbGFiZWwsXFxuLnEtaWYtYWRkb24sXFxuLnEtaWYtY29udHJvbCB7XFxuICBjb2xvcjogIzk3OTc5NztcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbn1cXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1sYWJlbCxcXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1hZGRvbixcXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1jb250cm9sIHtcXG4gIGNvbG9yOiAjZGRkO1xcbn1cXG4ucS1pZi1pbnZlcnRlZC1saWdodCAucS1pZi1sYWJlbCxcXG4ucS1pZi1pbnZlcnRlZC1saWdodCAucS1pZi1hZGRvbixcXG4ucS1pZi1pbnZlcnRlZC1saWdodCAucS1pZi1jb250cm9sIHtcXG4gIGNvbG9yOiAjNjU2NTY1O1xcbn1cXG4ucS1pZi1hZGRvbiB7XFxuICBvcGFjaXR5OiAwO1xcbiAgY3Vyc29yOiBpbmhlcml0O1xcbn1cXG4ucS1pZi1hZGRvbjpub3QoLnEtaWYtYWRkb24tdmlzaWJsZSkge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtaWYtYWRkb24tbGVmdCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxcHg7XFxufVxcbi5xLWlmLWFkZG9uLXJpZ2h0IHtcXG4gIHBhZGRpbmctbGVmdDogMXB4O1xcbn1cXG4ucS1pZi1hZGRvbi12aXNpYmxlIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5xLWlucHV0LXRhcmdldCxcXG4ucS1pbnB1dC1zaGFkb3cge1xcbiAgYm9yZGVyOiAwO1xcbiAgb3V0bGluZTogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgcmVzaXplOiBub25lO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWlucHV0LXRhcmdldDotd2Via2l0LWF1dG9maWxsIHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHdlYmtpdC1hdXRvZmlsbC1vbjtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDtcXG59XFxuLnEtaW5wdXQtdGFyZ2V0LnEtaW5wdXQtYXV0b2ZpbGw6bm90KDotd2Via2l0LWF1dG9maWxsKSB7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiB3ZWJraXQtYXV0b2ZpbGwtb2ZmO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xcbn1cXG4ucS1pbnB1dC10YXJnZXQ6Oi1tcy1jbGVhcixcXG4ucS1pbnB1dC10YXJnZXQ6Oi1tcy1yZXZlYWwge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbn1cXG4ucS1pbnB1dC10YXJnZXQ6aW52YWxpZCB7XFxuICBib3gtc2hhZG93OiBpbmhlcml0O1xcbn1cXG4ucS1pbnB1dC10YXJnZXQ6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICd8JztcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgd2lkdGg6IDA7XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbmlucHV0LnEtaW5wdXQtdGFyZ2V0IHtcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBvdXRsaW5lOiAwO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbn1cXG4ucS1pZiAucS1pbnB1dC10YXJnZXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICM5Nzk3OTcgIWltcG9ydGFudDtcXG59XFxuLnEtaWYgLnEtaW5wdXQtdGFyZ2V0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmIC5xLWlucHV0LXRhcmdldDo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZiAucS1pbnB1dC10YXJnZXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmLWRhcmsgLnEtaW5wdXQtdGFyZ2V0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmLWRhcmsgLnEtaW5wdXQtdGFyZ2V0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmLWRhcmsgLnEtaW5wdXQtdGFyZ2V0OjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmLWRhcmsgLnEtaW5wdXQtdGFyZ2V0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1pbnZlcnRlZDpub3QoLnEtaWYtaW52ZXJ0ZWQtbGlnaHQpIC5xLWlucHV0LXRhcmdldC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogI2RkZCAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1pbnZlcnRlZDpub3QoLnEtaWYtaW52ZXJ0ZWQtbGlnaHQpIC5xLWlucHV0LXRhcmdldDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogI2RkZCAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1pbnZlcnRlZDpub3QoLnEtaWYtaW52ZXJ0ZWQtbGlnaHQpIC5xLWlucHV0LXRhcmdldDo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogI2RkZCAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1pbnZlcnRlZDpub3QoLnEtaWYtaW52ZXJ0ZWQtbGlnaHQpIC5xLWlucHV0LXRhcmdldDotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICNkZGQgIWltcG9ydGFudDtcXG59XFxuLnEtaW5wdXQtc2hhZG93IHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGhlaWdodDogYXV0bztcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxufVxcbi5xLWp1bWJvdHJvbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nOiAycmVtIDFyZW07XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XFxufVxcbi5xLWp1bWJvdHJvbi1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc1NzU3NTtcXG59XFxuLnEtanVtYm90cm9uLWRhcmsgaHIucS1ociB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMzYpO1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5xLWp1bWJvdHJvbiB7XFxuICAgIHBhZGRpbmc6IDRyZW0gMnJlbTtcXG4gIH1cXG59XFxuLnEta25vYixcXG4ucS1rbm9iID4gZGl2IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuLnEta25vYiA+IGRpdiB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnEta25vYi1sYWJlbCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbn1cXG4ucS1rbm9iLWxhYmVsIGkge1xcbiAgZm9udC1zaXplOiAxMzAlO1xcbn1cXG4ucS1sYXlvdXQge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtaW4taGVpZ2h0OiAxMDB2aDtcXG59XFxuLnEtbGF5b3V0LWNvbnRhaW5lciAucS1sYXlvdXQge1xcbiAgbWluLWhlaWdodDogMTAwJTtcXG59XFxuLnEtbGF5b3V0LWNvbnRhaW5lciA+IGRpdiB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbn1cXG4ucS1sYXlvdXQtY29udGFpbmVyID4gZGl2ID4gZGl2IHtcXG4gIG1pbi1oZWlnaHQ6IDA7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucS1sYXlvdXQtaGVhZGVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDhweCByZ2JhKDAsMCwwLDAuMiksIDAgM3B4IDRweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAzcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1sYXlvdXQtaGVhZGVyLWhpZGRlbiB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTExMCUpO1xcbn1cXG4ucS1sYXlvdXQtZm9vdGVyIHtcXG4gIGJveC1zaGFkb3c6IDAgLTFweCA4cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0zcHggNHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTNweCAzcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1sYXlvdXQtZm9vdGVyLWhpZGRlbiB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTEwJSk7XFxufVxcbi5xLWxheW91dC1kcmF3ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIHotaW5kZXg6IDEwMDA7XFxufVxcbi5xLWxheW91dC1kcmF3ZXIub24tdG9wIHtcXG4gIHotaW5kZXg6IDMwMDA7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItZGVsaW1pdGVyIHtcXG4gIGJveC1zaGFkb3c6IDAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsMC4yKSwgMCA1cHggOHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMXB4IDE0cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1sZWZ0IHtcXG4gIGxlZnQ6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLXJpZ2h0IHtcXG4gIHJpZ2h0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xcbn1cXG4ucS1sYXlvdXQsXFxuLnEtbGF5b3V0LWhlYWRlcixcXG4ucS1sYXlvdXQtZm9vdGVyLFxcbi5xLWxheW91dC1wYWdlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnEtbGF5b3V0LWhlYWRlcixcXG4ucS1sYXlvdXQtZm9vdGVyIHtcXG4gIHotaW5kZXg6IDIwMDA7XFxufVxcbi5xLWxheW91dC1iYWNrZHJvcCB7XFxuICB6LWluZGV4OiAyOTk5ICFpbXBvcnRhbnQ7XFxuICB3aWxsLWNoYW5nZTogYmFja2dyb3VuZC1jb2xvcjtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1taW5pIHtcXG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWl0ZW0sXFxuLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWl0ZW0tc2lkZSB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1taW5pLWRyYXdlci1oaWRlLFxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1jb2xsYXBzaWJsZS1pbm5lciA+IGRpdjpsYXN0LW9mLXR5cGUsXFxuLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWxpc3QtaGVhZGVyLFxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1pdGVtLW1haW4sXFxuLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWl0ZW0tc2lkZS1yaWdodCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLW5vcm1hbCAucS1taW5pLWRyYXdlci1vbmx5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItbW9iaWxlIC5xLW1pbmktZHJhd2VyLW9ubHksXFxuLnEtbGF5b3V0LWRyYXdlci1tb2JpbGUgLnEtbWluaS1kcmF3ZXItaGlkZSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLW9wZW5lciB7XFxuICB6LWluZGV4OiAyMDAxO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDE1cHg7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG4ucS1wYWdlLXN0aWNreS1zaHJpbmsge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLXBhZ2Utc3RpY2t5LXNocmluayA+IHNwYW4ge1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxufVxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXBhZGRpbmcgLnEtbGF5b3V0IC5xLWxheW91dC1oZWFkZXIgPiAucS10b29sYmFyOm50aC1jaGlsZCgyKSxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci1wYWRkaW5nIC5xLWxheW91dCAucS1sYXlvdXQtaGVhZGVyID4gLnEtdGFiczpudGgtY2hpbGQoMikgLnEtdGFicy1oZWFkLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXBhZGRpbmcgLnEtbGF5b3V0IC5xLWxheW91dC1kcmF3ZXIudG9wLXBhZGRpbmcsXFxuYm9keS5xLWlvcy1zdGF0dXNiYXItcGFkZGluZyAubW9kYWw6bm90KC5taW5pbWl6ZWQpIC5xLWxheW91dC1oZWFkZXIgPiAucS10b29sYmFyOm50aC1jaGlsZCgxKSB7XFxuICBwYWRkaW5nLXRvcDogMjBweDtcXG4gIG1pbi1oZWlnaHQ6IDcwcHg7XFxufVxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbGF5b3V0IC5xLWxheW91dC1oZWFkZXIgPiAucS10b29sYmFyOm50aC1jaGlsZCgyKSxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtaGVhZGVyID4gLnEtdGFiczpudGgtY2hpbGQoMikgLnEtdGFicy1oZWFkLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbGF5b3V0IC5xLWxheW91dC1kcmF3ZXIudG9wLXBhZGRpbmcsXFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAubW9kYWw6bm90KC5taW5pbWl6ZWQpIC5xLWxheW91dC1oZWFkZXIgPiAucS10b29sYmFyOm50aC1jaGlsZCgxKSB7XFxuICBwYWRkaW5nLXRvcDogZW52KHNhZmUtYXJlYS1pbnNldC10b3ApO1xcbn1cXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtZm9vdGVyID4gLnEtdG9vbGJhcjpsYXN0LWNoaWxkLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbGF5b3V0IC5xLWxheW91dC1mb290ZXIgPiAucS10YWJzOmxhc3QtY2hpbGQgLnEtdGFicy1oZWFkLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbGF5b3V0IC5xLWxheW91dC1kcmF3ZXIudG9wLXBhZGRpbmcsXFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAubW9kYWw6bm90KC5taW5pbWl6ZWQpIC5xLWxheW91dC1mb290ZXIgPiAucS10b29sYmFyOmxhc3QtY2hpbGQge1xcbiAgcGFkZGluZy1ib3R0b206IGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcXG4gIG1pbi1oZWlnaHQ6IDcwcHg7XFxufVxcbi5xLWxheW91dC1hbmltYXRlIC5xLWxheW91dC10cmFuc2l0aW9uIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjEycyBlYXNlLWluICFpbXBvcnRhbnQ7XFxufVxcbi5xLWJvZHktZHJhd2VyLXRvZ2dsZSB7XFxuICBvdmVyZmxvdy14OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICAubGF5b3V0LXBhZGRpbmcge1xcbiAgICBwYWRkaW5nOiAxLjVyZW0gMC41cmVtO1xcbiAgfVxcbiAgLmxheW91dC1wYWRkaW5nLmhvcml6b250YWwge1xcbiAgICBwYWRkaW5nOiAwIDAuNXJlbTtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcXG4gIC5sYXlvdXQtcGFkZGluZyB7XFxuICAgIHBhZGRpbmc6IDEuNXJlbSAycmVtO1xcbiAgICBtYXJnaW46IGF1dG87XFxuICB9XFxuICAubGF5b3V0LXBhZGRpbmcuaG9yaXpvbnRhbCB7XFxuICAgIHBhZGRpbmc6IDAgMnJlbTtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XFxuICAubGF5b3V0LXBhZGRpbmcge1xcbiAgICBwYWRkaW5nOiAyLjVyZW0gM3JlbTtcXG4gICAgbWFyZ2luOiBhdXRvO1xcbiAgfVxcbiAgLmxheW91dC1wYWRkaW5nLmhvcml6b250YWwge1xcbiAgICBwYWRkaW5nOiAwIDNyZW07XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5sYXlvdXQtcGFkZGluZyB7XFxuICAgIHBhZGRpbmc6IDNyZW0gNHJlbTtcXG4gICAgbWFyZ2luOiBhdXRvO1xcbiAgfVxcbiAgLmxheW91dC1wYWRkaW5nLmhvcml6b250YWwge1xcbiAgICBwYWRkaW5nOiAwIDRyZW07XFxuICB9XFxufVxcbi5xLWl0ZW0tc3RhbXAge1xcbiAgZm9udC1zaXplOiAwLjhyZW07XFxuICBsaW5lLWhlaWdodDogMC44cmVtO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG1hcmdpbjogMC4zcmVtIDA7XFxufVxcbi5xLWl0ZW0tc2lkZSB7XFxuICBjb2xvcjogIzczNzM3MztcXG4gIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgICBmbGV4OiAwIDAgYXV0bztcXG4gIG1pbi13aWR0aDogMzhweDtcXG59XFxuLnEtaXRlbS1zaWRlLXJpZ2h0IHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG4ucS1pdGVtLWF2YXRhcixcXG4ucS1pdGVtLWF2YXRhciBpbWcge1xcbiAgd2lkdGg6IDM4cHg7XFxuICBoZWlnaHQ6IDM4cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcbi5xLWl0ZW0tbGV0dGVyLFxcbi5xLWl0ZW0taWNvbiB7XFxuICBmb250LXNpemU6IDI0cHg7XFxufVxcbi5xLWl0ZW0taW52ZXJ0ZWQge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kOiAjNzM3MzczO1xcbiAgaGVpZ2h0OiAzOHB4O1xcbiAgd2lkdGg6IDM4cHg7XFxufVxcbi5xLWl0ZW0taW52ZXJ0ZWQsXFxuLnEtaXRlbS1pbnZlcnRlZCAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG59XFxuLnEtaXRlbS1tYWluIHtcXG4gIC1tcy1mbGV4OiAxIDEgYXV0bztcXG4gICAgICBmbGV4OiAxIDEgYXV0bztcXG4gIG1pbi13aWR0aDogMDtcXG59XFxuLnEtaXRlbS1tYWluLWluc2V0IHtcXG4gIG1hcmdpbi1sZWZ0OiA0OHB4O1xcbn1cXG4ucS1pdGVtLWxhYmVsIHtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxufVxcbi5xLWl0ZW0tbGFiZWwgPiBzcGFuIHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbn1cXG4ucS1pdGVtLXN1YmxhYmVsIHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbiAgZm9udC1zaXplOiA5MCU7XFxuICBtYXJnaW4tdG9wOiAwLjJyZW07XFxufVxcbi5xLWl0ZW0tc3VibGFiZWwgPiBzcGFuIHtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcbi5xLWl0ZW0tc2VjdGlvbiArIC5xLWl0ZW0tc2VjdGlvbiB7XFxuICBtYXJnaW4tbGVmdDogMTBweDtcXG59XFxuLnEtaXRlbSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBmb250LXNpemU6IDFyZW07XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgcGFkZGluZzogOHB4IDE2cHg7XFxuICBtaW4taGVpZ2h0OiA0MHB4O1xcbn1cXG4ucS1pdGVtLmFjdGl2ZSxcXG4ucS1pdGVtLnJvdXRlci1saW5rLWFjdGl2ZSxcXG4ucS1pdGVtOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMTg5LDE4OSwxODksMC40KTtcXG59XFxuLnEtaXRlbTpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4ucS1pdGVtLWltYWdlIHtcXG4gIG1pbi13aWR0aDogMTE0cHg7XFxuICBtYXgtd2lkdGg6IDExNHB4O1xcbiAgbWF4LWhlaWdodDogMTE0cHg7XFxufVxcbi5xLWxpc3QtbXVsdGlsaW5lID4gLnEtaXRlbSxcXG4ucS1pdGVtLW11bHRpbGluZSB7XFxuICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XFxuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxufVxcbi5xLWxpc3QtbGluayA+IC5xLWl0ZW0sXFxuLnEtaXRlbS1saW5rIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtbGlzdC1oaWdobGlnaHQgPiAucS1pdGVtOmhvdmVyLFxcbi5xLWl0ZW0taGlnaGxpZ2h0OmhvdmVyLFxcbi5xLWxpc3QtbGluayA+IC5xLWl0ZW06aG92ZXIsXFxuLnEtaXRlbS1saW5rOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMTg5LDE4OSwxODksMC41KTtcXG59XFxuLnEtbGlzdC1zZXBhcmF0b3IgPiAucS1pdGVtLWRpdmlzaW9uICsgLnEtaXRlbS1kaXZpc2lvbixcXG4ucS1pdGVtLWRpdmlzaW9uICsgLnEtaXRlbS1zZXBhcmF0b3Ige1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlMGUwZTA7XFxufVxcbi5xLWxpc3QtaW5zZXQtc2VwYXJhdG9yID4gLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0tZGl2aXNpb246YWZ0ZXIsXFxuLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0taW5zZXQtc2VwYXJhdG9yOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBsZWZ0OiA2NHB4O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBiYWNrZ3JvdW5kOiAjZTBlMGUwO1xcbn1cXG4ucS1saXN0LWRlbnNlID4gLnEtaXRlbSxcXG4ucS1pdGVtLWRlbnNlIHtcXG4gIHBhZGRpbmc6IDNweCAxNnB4O1xcbiAgbWluLWhlaWdodDogOHB4O1xcbn1cXG4ucS1saXN0LXNwYXJzZSA+IC5xLWl0ZW0sXFxuLnEtaXRlbS1zcGFyc2Uge1xcbiAgcGFkZGluZzogMjIuNHB4IDE2cHg7XFxuICBtaW4taGVpZ2h0OiA1NnB4O1xcbn1cXG4ucS1saXN0LXN0cmlwZWQgPiAucS1pdGVtOm50aC1jaGlsZChldmVuKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE4OSwxODksMTg5LDAuNjUpO1xcbn1cXG4ucS1saXN0LXN0cmlwZWQtb2RkID4gLnEtaXRlbTpudGgtY2hpbGQob2RkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE4OSwxODksMTg5LDAuNjUpO1xcbn1cXG4ucS1saXN0IHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XFxuICBwYWRkaW5nOiA4cHggMDtcXG59XFxuLnEtaXRlbS1zZXBhcmF0b3ItY29tcG9uZW50IHtcXG4gIG1hcmdpbjogOHB4IDA7XFxuICBoZWlnaHQ6IDFweDtcXG4gIGJvcmRlcjogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7XFxufVxcbi5xLWl0ZW0tc2VwYXJhdG9yLWNvbXBvbmVudDpsYXN0LWNoaWxkIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLWl0ZW0tc2VwYXJhdG9yLWNvbXBvbmVudCArIC5xLWxpc3QtaGVhZGVyIHtcXG4gIG1hcmdpbi10b3A6IC04cHg7XFxufVxcbi5xLWl0ZW0tc2VwYXJhdG9yLWluc2V0LWNvbXBvbmVudCB7XFxuICBtYXJnaW4tbGVmdDogNjRweDtcXG59XFxuLnEtbGlzdC1oZWFkZXIge1xcbiAgY29sb3I6ICM3NTc1NzU7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XFxuICBtaW4taGVpZ2h0OiA0OHB4O1xcbiAgcGFkZGluZzogMTVweCAxNnB4O1xcbn1cXG4ucS1saXN0LWhlYWRlci1pbnNldCB7XFxuICBwYWRkaW5nLWxlZnQ6IDY0cHg7XFxufVxcbi5xLWxpc3QtZGFyayAucS1pdGVtLXNpZGUsXFxuLnEtaXRlbS1kYXJrIC5xLWl0ZW0tc2lkZSB7XFxuICBjb2xvcjogI2JiYjtcXG59XFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0taW52ZXJ0ZWQsXFxuLnEtaXRlbS1kYXJrIC5xLWl0ZW0taW52ZXJ0ZWQge1xcbiAgY29sb3I6ICMwMDA7XFxuICBiYWNrZ3JvdW5kOiAjYmJiO1xcbn1cXG4ucS1saXN0LWRhcmsgLnEtaXRlbS1sYWJlbCA+IHNwYW4sXFxuLnEtaXRlbS1kYXJrIC5xLWl0ZW0tbGFiZWwgPiBzcGFuLFxcbi5xLWxpc3QtZGFyayAucS1pdGVtLXN1YmxhYmVsLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLXN1YmxhYmVsIHtcXG4gIGNvbG9yOiAjYmRiZGJkO1xcbn1cXG4ucS1saXN0LWRhcmsgLnEtaXRlbSxcXG4ucS1pdGVtLWRhcmsgLnEtaXRlbSB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0uYWN0aXZlLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLmFjdGl2ZSxcXG4ucS1saXN0LWRhcmsgLnEtaXRlbS5yb3V0ZXItbGluay1hY3RpdmUsXFxuLnEtaXRlbS1kYXJrIC5xLWl0ZW0ucm91dGVyLWxpbmstYWN0aXZlLFxcbi5xLWxpc3QtZGFyayAucS1pdGVtOmZvY3VzLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMTE3LDExNywxMTcsMC4yKTtcXG59XFxuLnEtbGlzdC1kYXJrIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4zMik7XFxufVxcbi5xLWxpc3QtZGFyay5xLWxpc3Qtc2VwYXJhdG9yID4gLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0tZGl2aXNpb24sXFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0tZGl2aXNpb24gKyAucS1pdGVtLXNlcGFyYXRvciB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjMyKTtcXG59XFxuLnEtbGlzdC1kYXJrLnEtbGlzdC1pbnNldC1zZXBhcmF0b3IgPiAucS1pdGVtLWRpdmlzaW9uICsgLnEtaXRlbS1kaXZpc2lvbjphZnRlcixcXG4ucS1saXN0LWRhcmsgLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0taW5zZXQtc2VwYXJhdG9yOmFmdGVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4zMik7XFxufVxcbi5xLWxpc3QtZGFyay5xLWxpc3Qtc3RyaXBlZCA+IC5xLWl0ZW06bnRoLWNoaWxkKGV2ZW4pIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTE3LDExNywxMTcsMC40NSk7XFxufVxcbi5xLWxpc3QtZGFyay5xLWxpc3Qtc3RyaXBlZC1vZGQgPiAucS1pdGVtOm50aC1jaGlsZChvZGQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTE3LDExNywxMTcsMC40NSk7XFxufVxcbi5xLWxpc3QtZGFyayAucS1pdGVtLXNlcGFyYXRvci1jb21wb25lbnQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjMyKTtcXG59XFxuLnEtbGlzdC1kYXJrIC5xLWxpc3QtaGVhZGVyIHtcXG4gIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNjQpO1xcbn1cXG4ucS1saXN0LWRhcmsucS1saXN0LWhpZ2hsaWdodCA+IC5xLWl0ZW06aG92ZXIsXFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0taGlnaGxpZ2h0OmhvdmVyLFxcbi5xLWxpc3QtZGFyay5xLWxpc3QtbGluayA+IC5xLWl0ZW06aG92ZXIsXFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0tbGluazpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDExNywxMTcsMTE3LDAuMyk7XFxufVxcbmJvZHkud2l0aC1sb2FkaW5nIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLWxvYWRpbmcge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjQpO1xcbn1cXG4ucS1sb2FkaW5nID4gZGl2IHtcXG4gIG1hcmdpbjogNDBweCAyMHB4IDA7XFxuICBtYXgtd2lkdGg6IDQ1MHB4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdGV4dC1zaGFkb3c6IDAgMCA3cHggIzAwMDtcXG59XFxuLm1vZGFsLWJhY2tkcm9wIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40KTtcXG59XFxuLm1vZGFsLm1heGltaXplZCAubW9kYWwtYmFja2Ryb3Age1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLm1vZGFsLWNvbnRlbnQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIHdpbGwtY2hhbmdlOiBzY3JvbGwtcG9zaXRpb247XFxuICBtaW4td2lkdGg6IDI4MHB4O1xcbiAgbWF4LWhlaWdodDogODB2aDtcXG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgb3V0bGluZTogMDtcXG59XFxuLm1vZGFsIHtcXG4gIHotaW5kZXg6IDUwMDA7XFxufVxcbi5tb2RhbC5taW5pbWl6ZWQgLm1vZGFsLWNvbnRlbnQge1xcbiAgbWF4LXdpZHRoOiA4MHZ3O1xcbiAgbWF4LWhlaWdodDogODB2aDtcXG59XFxuLm1vZGFsLm1heGltaXplZCAubW9kYWwtY29udGVudCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIG1heC1oZWlnaHQ6IDEwMCU7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG4ubW9kYWwubWF4aW1pemVkIC5tb2RhbC1jb250ZW50IC5xLWxheW91dC1jb250YWluZXIge1xcbiAgbWluLWhlaWdodDogMTAwdmggIWltcG9ydGFudDtcXG59XFxuLnEtbW9kYWwtZW50ZXIsXFxuLnEtbW9kYWwtbGVhdmUtYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLm1vZGFsOm5vdCgubWF4aW1pemVkKS5xLW1vZGFsLWVudGVyIC5tb2RhbC1jb250ZW50IHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xcbiAgfVxcbiAgLm1vZGFsOm5vdCgubWF4aW1pemVkKS5xLW1vZGFsLWxlYXZlLWFjdGl2ZSAubW9kYWwtY29udGVudCB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMC44KTtcXG4gIH1cXG4gIC5tb2RhbC5tYXhpbWl6ZWQucS1tb2RhbC1lbnRlciAubW9kYWwtY29udGVudCxcXG4gIC5tb2RhbC5tYXhpbWl6ZWQucS1tb2RhbC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzAlKTtcXG4gIH1cXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICAucS1yZXNwb25zaXZlLW1vZGFsIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIH1cXG4gIC5tb2RhbDpub3QoLm1pbmltaXplZCkgLm1vZGFsLWNvbnRlbnQge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XFxuICAgIGJvcmRlci1yYWRpdXM6IDA7XFxuICB9XFxuICAubW9kYWw6bm90KC5taW5pbWl6ZWQpIC5tb2RhbC1jb250ZW50IC5xLWxheW91dC1jb250YWluZXIge1xcbiAgICBtaW4taGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1vZGFsOm5vdCgubWluaW1pemVkKS5xLW1vZGFsLWVudGVyIC5tb2RhbC1jb250ZW50LFxcbiAgLm1vZGFsOm5vdCgubWluaW1pemVkKS5xLW1vZGFsLWxlYXZlLWFjdGl2ZSAubW9kYWwtY29udGVudCB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgzMCUpO1xcbiAgfVxcbiAgLm1vZGFsLm1pbmltaXplZC5xLW1vZGFsLWVudGVyIC5tb2RhbC1jb250ZW50IHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xcbiAgfVxcbiAgLm1vZGFsLm1pbmltaXplZC5xLW1vZGFsLWxlYXZlLWFjdGl2ZSAubW9kYWwtY29udGVudCB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMC44KTtcXG4gIH1cXG59XFxuLnEtbWF4aW1pemVkLW1vZGFsIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5tb2RhbCxcXG4ubW9kYWwtY29udGVudCB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcXG59XFxuLm1vZGFsLWhlYWRlciB7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgcGFkZGluZzogMjRweCAyNHB4IDEwcHggMjRweDtcXG4gIGZvbnQtc2l6ZTogMS42cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG59XFxuLm1vZGFsLWJvZHkge1xcbiAgcGFkZGluZzogMTBweCAyNHB4O1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41KTtcXG59XFxuLnNtYWxsLW1vZGFsLXNjcm9sbCxcXG4ubW9kYWwtc2Nyb2xsLFxcbi5iaWctbW9kYWwtc2Nyb2xsIHtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgd2lsbC1jaGFuZ2U6IHNjcm9sbC1wb3NpdGlvbjtcXG59XFxuLnNtYWxsLW1vZGFsLXNjcm9sbCB7XFxuICBtYXgtaGVpZ2h0OiAxNTZweDtcXG59XFxuLm1vZGFsLXNjcm9sbCB7XFxuICBtYXgtaGVpZ2h0OiAyNDBweDtcXG59XFxuLmJpZy1tb2RhbC1zY3JvbGwge1xcbiAgbWF4LWhlaWdodDogNDgwcHg7XFxufVxcbi5tb2RhbC1idXR0b25zIHtcXG4gIHBhZGRpbmc6IDIycHggOHB4IDhweDtcXG4gIC1tcy1mbGV4LXBhY2s6IGVuZDtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgY29sb3I6ICMwMjdiZTM7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1wcmltYXJ5KTtcXG59XFxuLm1vZGFsLWJ1dHRvbnMucm93IC5xLWJ0biArIC5xLWJ0biB7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG4ubW9kYWwtYnV0dG9ucy5jb2x1bW4ge1xcbiAgLW1zLWZsZXgtYWxpZ246IGVuZDtcXG4gICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcbi5tb2RhbC1idXR0b25zLmNvbHVtbiAucS1idG4gKyAucS1idG4ge1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbn1cXG4ucS1tb2RhbC1ib3R0b20tZW50ZXIsXFxuLnEtbW9kYWwtYm90dG9tLWxlYXZlLWFjdGl2ZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1tb2RhbC1ib3R0b20tZW50ZXIgLm1vZGFsLWNvbnRlbnQsXFxuLnEtbW9kYWwtYm90dG9tLWxlYXZlLWFjdGl2ZSAubW9kYWwtY29udGVudCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzAlKTtcXG59XFxuLnEtbW9kYWwtdG9wLWVudGVyLFxcbi5xLW1vZGFsLXRvcC1sZWF2ZS1hY3RpdmUge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtbW9kYWwtdG9wLWVudGVyIC5tb2RhbC1jb250ZW50LFxcbi5xLW1vZGFsLXRvcC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zMCUpO1xcbn1cXG4ucS1tb2RhbC1yaWdodC1lbnRlcixcXG4ucS1tb2RhbC1yaWdodC1sZWF2ZS1hY3RpdmUge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtbW9kYWwtcmlnaHQtZW50ZXIgLm1vZGFsLWNvbnRlbnQsXFxuLnEtbW9kYWwtcmlnaHQtbGVhdmUtYWN0aXZlIC5tb2RhbC1jb250ZW50IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgzMCUpO1xcbn1cXG4ucS1tb2RhbC1sZWZ0LWVudGVyLFxcbi5xLW1vZGFsLWxlZnQtbGVhdmUtYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLW1vZGFsLWxlZnQtZW50ZXIgLm1vZGFsLWNvbnRlbnQsXFxuLnEtbW9kYWwtbGVmdC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zMCUpO1xcbn1cXG4ucS1ub3RpZmljYXRpb25zID4gZGl2IHtcXG4gIHotaW5kZXg6IDk1MDA7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi1saXN0IHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnEtbm90aWZpY2F0aW9uLWxpc3QtY2VudGVyIHtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG59XFxuLnEtbm90aWZpY2F0aW9uLWxpc3QtdG9wIHtcXG4gIHRvcDogMDtcXG59XFxuLnEtbm90aWZpY2F0aW9uLWxpc3QtYm90dG9tIHtcXG4gIGJvdHRvbTogMDtcXG59XFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAucS1ub3RpZmljYXRpb24tbGlzdC1jZW50ZXIsXFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAucS1ub3RpZmljYXRpb24tbGlzdC10b3Age1xcbiAgdG9wOiBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCk7XFxufVxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbm90aWZpY2F0aW9uLWxpc3QtY2VudGVyLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbm90aWZpY2F0aW9uLWxpc3QtYm90dG9tIHtcXG4gIGJvdHRvbTogZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO1xcbn1cXG4ucS1ub3RpZmljYXRpb24ge1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbjogMTBweCAxMHB4IDA7XFxuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAxcztcXG4gIHotaW5kZXg6IDk1MDA7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi10b3AtbGVmdC1lbnRlcixcXG4ucS1ub3RpZmljYXRpb24tdG9wLWxlZnQtbGVhdmUtdG8sXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1lbnRlcixcXG4ucS1ub3RpZmljYXRpb24tdG9wLWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi10b3AtcmlnaHQtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1yaWdodC1sZWF2ZS10byB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MHB4KTtcXG4gIHotaW5kZXg6IDk0OTk7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi1sZWZ0LWVudGVyLFxcbi5xLW5vdGlmaWNhdGlvbi1sZWZ0LWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi1jZW50ZXItZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLWNlbnRlci1sZWF2ZS10byxcXG4ucS1ub3RpZmljYXRpb24tcmlnaHQtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLXJpZ2h0LWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tbGVmdC1lbnRlcixcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlZnQtbGVhdmUtdG8sXFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1lbnRlcixcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tcmlnaHQtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1yaWdodC1sZWF2ZS10byB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwcHgpO1xcbiAgei1pbmRleDogOTQ5OTtcXG59XFxuLnEtbm90aWZpY2F0aW9uLXRvcC1sZWZ0LWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tdG9wLWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tdG9wLXJpZ2h0LWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tbGVmdC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLWNlbnRlci1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLXJpZ2h0LWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlZnQtbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tcmlnaHQtbGVhdmUtYWN0aXZlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDk0OTk7XFxuICBtYXJnaW4tbGVmdDogMDtcXG4gIG1hcmdpbi1yaWdodDogMDtcXG59XFxuLnEtbm90aWZpY2F0aW9uLXRvcC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLWNlbnRlci1sZWF2ZS1hY3RpdmUge1xcbiAgdG9wOiAwO1xcbn1cXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlZnQtbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tcmlnaHQtbGVhdmUtYWN0aXZlIHtcXG4gIGJvdHRvbTogMDtcXG59XFxuLnEtb3B0aW9uLWlubmVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGxpbmUtaGVpZ2h0OiAwO1xcbn1cXG4ucS1vcHRpb24taW5uZXIgKyAucS1vcHRpb24tbGFiZWwge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnEtb3B0aW9uIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5xLW9wdGlvbiBpbnB1dCB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5xLW9wdGlvbi5yZXZlcnNlIC5xLW9wdGlvbi1pbm5lciArIC5xLW9wdGlvbi1sYWJlbCB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG4ucS1vcHRpb24tZ3JvdXAtaW5saW5lLW9wdHMgPiBkaXYge1xcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxufVxcbi5xLW9wdGlvbi1ncm91cCB7XFxuICBtYXJnaW46IC01cHg7XFxuICBwYWRkaW5nOiA1cHggMDtcXG59XFxuLnEtcGFnaW5hdGlvbiBpbnB1dCB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5xLXBhZ2luYXRpb24gLnEtYnRuIHtcXG4gIHBhZGRpbmc6IDAgNXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5xLXBhZ2luYXRpb24gLnEtYnRuLmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjNzc3O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItZmFkZWQpO1xcbn1cXG4ucS1wYXJhbGxheCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbn1cXG4ucS1wYXJhbGxheC1tZWRpYSA+IGltZyxcXG4ucS1wYXJhbGxheC1tZWRpYSA+IHZpZGVvIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwJTtcXG4gIGJvdHRvbTogMDtcXG4gIG1pbi13aWR0aDogMTAwJTtcXG4gIG1pbi1oZWlnaHQ6IDEwMCU7XFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xcbn1cXG4ucS1wYXJhbGxheC10ZXh0IHtcXG4gIHRleHQtc2hhZG93OiAwIDAgNXB4ICNmZmY7XFxufVxcbi5xLXBvcG92ZXIge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgei1pbmRleDogODAwMDtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICBtYXgtd2lkdGg6IDEwMHZ3O1xcbiAgb3V0bGluZTogMDtcXG59XFxuLnEtcG9wb3ZlciA+IC5xLWxpc3Q6b25seS1jaGlsZCB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcbmJvZHkgZGl2IC5xLXBvcG92ZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtcHJvZ3Jlc3Mge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiA1cHg7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtcHJvZ3Jlc3MtbW9kZWwuYW5pbWF0ZSB7XFxuICBhbmltYXRpb246IHEtcHJvZ3Jlc3Mtc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsOm5vdCguaW5kZXRlcm1pbmF0ZSkge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBsaW5lYXI7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsLmluZGV0ZXJtaW5hdGU6YmVmb3JlLFxcbi5xLXByb2dyZXNzLW1vZGVsLmluZGV0ZXJtaW5hdGU6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHdpbGwtY2hhbmdlOiBsZWZ0LCByaWdodDtcXG59XFxuLnEtcHJvZ3Jlc3MtbW9kZWwuaW5kZXRlcm1pbmF0ZTpiZWZvcmUge1xcbiAgYW5pbWF0aW9uOiBxLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUgMi4xcyBjdWJpYy1iZXppZXIoMC42NSwgMC44MTUsIDAuNzM1LCAwLjM5NSkgaW5maW5pdGU7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsLmluZGV0ZXJtaW5hdGU6YWZ0ZXIge1xcbiAgYW5pbWF0aW9uOiBxLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtc2hvcnQgMi4xcyBjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQsIDAuNDQsIDEpIGluZmluaXRlO1xcbiAgYW5pbWF0aW9uLWRlbGF5OiAxLjE1cztcXG59XFxuLnEtcHJvZ3Jlc3MtbW9kZWwuc3RyaXBlLFxcbi5xLXByb2dyZXNzLW1vZGVsLnN0cmlwZTpiZWZvcmUsXFxuLnEtcHJvZ3Jlc3MtbW9kZWwuc3RyaXBlOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDQwcHggNDBweCAhaW1wb3J0YW50O1xcbn1cXG4ucS1wcm9ncmVzcy10cmFjayB7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBsaW5lYXI7XFxufVxcbi5xLXByb2dyZXNzLWJ1ZmZlciB7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG4gIGhlaWdodDogNHB4O1xcbiAgcmlnaHQ6IDA7XFxuICB0cmFuc2l0aW9uOiB3aWR0aCAwLjNzIGxpbmVhcjtcXG4gIC13ZWJraXQtbWFzazogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lqOCtDanh6ZG1jZ2QybGtkR2c5SWpFeUlpQm9aV2xuYUhROUlqUWlJSFpwWlhkUWIzSjBQU0l3SURBZ01USWdOQ0lnZG1WeWMybHZiajBpTVM0eElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaVBnb2dJRHhsYkd4cGNITmxJR040UFNJeUlpQmplVDBpTWlJZ2NuZzlJaklpSUhKNVBTSXlJajRLSUNBZ0lEeGhibWx0WVhSbElHRjBkSEpwWW5WMFpVNWhiV1U5SW1ONElpQm1jbTl0UFNJeUlpQjBiejBpTFRFd0lpQmtkWEk5SWpBdU5uTWlJSEpsY0dWaGRFTnZkVzUwUFNKcGJtUmxabWx1YVhSbElpQXZQZ29nSUR3dlpXeHNhWEJ6WlQ0S0lDQThaV3hzYVhCelpTQmplRDBpTVRRaUlHTjVQU0l5SWlCeWVEMGlNaUlnY25rOUlqSWlJR05zWVhOelBTSnNiMkZrWlhJaVBnb2dJQ0FnUEdGdWFXMWhkR1VnWVhSMGNtbGlkWFJsVG1GdFpUMGlZM2dpSUdaeWIyMDlJakUwSWlCMGJ6MGlNaUlnWkhWeVBTSXdMalp6SWlCeVpYQmxZWFJEYjNWdWREMGlhVzVrWldacGJtbDBaU0lnTHo0S0lDQThMMlZzYkdsd2MyVStDand2YzNablBnbz1cXFwiKTtcXG4gICAgICAgICAgbWFzazogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lqOCtDanh6ZG1jZ2QybGtkR2c5SWpFeUlpQm9aV2xuYUhROUlqUWlJSFpwWlhkUWIzSjBQU0l3SURBZ01USWdOQ0lnZG1WeWMybHZiajBpTVM0eElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaVBnb2dJRHhsYkd4cGNITmxJR040UFNJeUlpQmplVDBpTWlJZ2NuZzlJaklpSUhKNVBTSXlJajRLSUNBZ0lEeGhibWx0WVhSbElHRjBkSEpwWW5WMFpVNWhiV1U5SW1ONElpQm1jbTl0UFNJeUlpQjBiejBpTFRFd0lpQmtkWEk5SWpBdU5uTWlJSEpsY0dWaGRFTnZkVzUwUFNKcGJtUmxabWx1YVhSbElpQXZQZ29nSUR3dlpXeHNhWEJ6WlQ0S0lDQThaV3hzYVhCelpTQmplRDBpTVRRaUlHTjVQU0l5SWlCeWVEMGlNaUlnY25rOUlqSWlJR05zWVhOelBTSnNiMkZrWlhJaVBnb2dJQ0FnUEdGdWFXMWhkR1VnWVhSMGNtbGlkWFJsVG1GdFpUMGlZM2dpSUdaeWIyMDlJakUwSWlCMGJ6MGlNaUlnWkhWeVBTSXdMalp6SWlCeVpYQmxZWFJEYjNWdWREMGlhVzVrWldacGJtbDBaU0lnTHo0S0lDQThMMlZzYkdsd2MyVStDand2YzNablBnbz1cXFwiKTtcXG59XFxuLnEtcHJvZ3Jlc3MtdHJhY2ssXFxuLnEtcHJvZ3Jlc3MtYnVmZmVyIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG4gIG9wYWNpdHk6IDAuMjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLnB1bGwtdG8tcmVmcmVzaCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5wdWxsLXRvLXJlZnJlc2gtbWVzc2FnZSB7XFxuICBoZWlnaHQ6IDY1cHg7XFxuICBmb250LXNpemU6IDFyZW07XFxufVxcbi5wdWxsLXRvLXJlZnJlc2gtbWVzc2FnZSAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXG4gIG1hcmdpbi1yaWdodDogMTVweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzO1xcbn1cXG4ucS1yYWRpby11bmNoZWNrZWQsXFxuLnEtcmFkaW8tY2hlY2tlZCxcXG4ucS1yYWRpbyAucS1vcHRpb24taW5uZXIge1xcbiAgaGVpZ2h0OiAyMXB4O1xcbiAgd2lkdGg6IDIxcHg7XFxuICBtaW4td2lkdGg6IDIxcHg7XFxuICBmb250LXNpemU6IDIxcHg7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40NXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtcmFkaW8tdW5jaGVja2VkIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5xLXJhZGlvLWNoZWNrZWQge1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJSAwO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXG59XFxuLnEtcmFkaW8gLnEtb3B0aW9uLWlubmVyLmFjdGl2ZSAucS1yYWRpby11bmNoZWNrZWQge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtcmFkaW8gLnEtb3B0aW9uLWlubmVyLmFjdGl2ZSAucS1yYWRpby1jaGVja2VkIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxufVxcbi5xLXJhdGluZyB7XFxuICBjb2xvcjogI2ZmZWIzYjtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5xLXJhdGluZyBzcGFuIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgZGlzcGxheTogaW5oZXJpdDtcXG59XFxuLnEtcmF0aW5nIGkge1xcbiAgY29sb3I6IGN1cnJlbnRDb2xvcjtcXG4gIHRleHQtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjEyKSwgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yNCk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBvcGFjaXR5OiAwLjQ7XFxuICBwb2ludGVyLWV2ZW50czogYWxsO1xcbn1cXG4ucS1yYXRpbmcgaS5ob3ZlcmVkIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMS4zKTtcXG59XFxuLnEtcmF0aW5nIGkuZXhzZWxlY3RlZCB7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcbi5xLXJhdGluZyBpLmFjdGl2ZSB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1yYXRpbmcgaSArIGkge1xcbiAgbWFyZ2luLWxlZnQ6IDAuM3JlbTtcXG59XFxuLnEtcmF0aW5nLmVkaXRhYmxlIGkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucS1yYXRpbmc6bm90KC5lZGl0YWJsZSkgc3BhbixcXG4ucS1yYXRpbmcgaSB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4ucS1zY3JvbGxhcmVhLXRodW1iIHtcXG4gIGJhY2tncm91bmQ6ICMwMDA7XFxuICB3aWR0aDogMTBweDtcXG4gIHJpZ2h0OiAwO1xcbiAgb3BhY2l0eTogMC4yO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xcbn1cXG4ucS1zY3JvbGxhcmVhLXRodW1iLmludmlzaWJsZS10aHVtYiB7XFxuICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XFxufVxcbi5xLXNjcm9sbGFyZWEtdGh1bWI6aG92ZXIge1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG4ucS1zY3JvbGxhcmVhLXRodW1iOmFjdGl2ZSB7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLXRvb2xiYXIgLnEtc2VhcmNoIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4yNSk7XFxufVxcbi5xLXNsaWRlci10cmFjayxcXG4ucS1zbGlkZXItbWFyayB7XFxuICBvcGFjaXR5OiAwLjQ7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXNsaWRlci10cmFjayB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICBoZWlnaHQ6IDJweDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ucS1zbGlkZXItdHJhY2s6bm90KC5kcmFnZ2luZykge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcXG59XFxuLnEtc2xpZGVyLXRyYWNrLmFjdGl2ZS10cmFjayB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1zbGlkZXItdHJhY2sudHJhY2stZHJhZ2dhYmxlLmRyYWdnaW5nIHtcXG4gIGhlaWdodDogNHB4O1xcbiAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuM3MgZWFzZTtcXG59XFxuLnEtc2xpZGVyLXRyYWNrLmhhbmRsZS1hdC1taW5pbXVtIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbn1cXG4ucS1zbGlkZXItbWFyayB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGhlaWdodDogMTBweDtcXG4gIHdpZHRoOiAycHg7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKTtcXG59XFxuLnEtc2xpZGVyLWhhbmRsZS1jb250YWluZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbWFyZ2luLWxlZnQ6IDZweDtcXG4gIG1hcmdpbi1yaWdodDogNnB4O1xcbn1cXG4ucS1zbGlkZXItbGFiZWwge1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogNnB4O1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKDApIHNjYWxlKDApO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XFxuICBwYWRkaW5nOiAycHggNHB4O1xcbn1cXG4ucS1zbGlkZXItbGFiZWwubGFiZWwtYWx3YXlzIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtMTM5JSkgc2NhbGUoMSk7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC01MCUsIC01MCUsIDApO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcXG4gIHdpZHRoOiAxMnB4O1xcbiAgaGVpZ2h0OiAxMnB4O1xcbiAgb3V0bGluZTogMDtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc2xpZGVyLWhhbmRsZSAucS1jaGlwIHtcXG4gIG1heC13aWR0aDogdW5zZXQ7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUuZHJhZ2dpbmcge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtNTAlLCAtNTAlLCAwKSBzY2FsZSgxLjMpO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2UsIHRyYW5zZm9ybSAwLjNzIGVhc2U7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUuZHJhZ2dpbmcgLnEtc2xpZGVyLWxhYmVsIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtMTM5JSkgc2NhbGUoMSk7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUuaGFuZGxlLWF0LW1pbmltdW0ge1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG59XFxuLnEtc2xpZGVyLWhhbmRsZS5oYW5kbGUtYXQtbWluaW11bTphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc2xpZGVyLXJpbmcge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtNTAlO1xcbiAgbGVmdDogLTUwJTtcXG4gIHdpZHRoOiAyMDAlO1xcbiAgaGVpZ2h0OiAyMDAlO1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1zbGlkZXI6bm90KC5kaXNhYmxlZCk6bm90KC5yZWFkb25seSkgLnEtc2xpZGVyLWhhbmRsZS5kcmFnZ2luZyAucS1zbGlkZXItcmluZyxcXG4ucS1zbGlkZXI6bm90KC5kaXNhYmxlZCk6bm90KC5yZWFkb25seSkgLnEtc2xpZGVyLWhhbmRsZTpmb2N1cyAucS1zbGlkZXItcmluZyxcXG5ib2R5LmRlc2t0b3AgLnEtc2xpZGVyOm5vdCguZGlzYWJsZWQpOm5vdCgucmVhZG9ubHkpOmhvdmVyIC5xLXNsaWRlci1yaW5nIHtcXG4gIG9wYWNpdHk6IDAuNDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxufVxcbi5xLXNsaWRlci5kaXNhYmxlZCAucS1zbGlkZXItaGFuZGxlIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICNmZmY7XFxufVxcbi5xLXNsaWRlci5kaXNhYmxlZCAucS1zbGlkZXItaGFuZGxlLmhhbmRsZS1hdC1taW5pbXVtIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc2xpZGVyIHtcXG4gIGhlaWdodDogMjhweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgY29sb3I6ICMwMjdiZTM7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1wcmltYXJ5KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtc2xpZGVyLmxhYmVsLWFsd2F5cyxcXG4ucS1zbGlkZXIud2l0aC1wYWRkaW5nIHtcXG4gIHBhZGRpbmc6IDM2cHggMCA4cHg7XFxuICBoZWlnaHQ6IDY0cHg7XFxufVxcbi5xLXNsaWRlci5oYXMtZXJyb3Ige1xcbiAgY29sb3I6ICNkYjI4Mjg7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSk7XFxufVxcbi5xLXNsaWRlci5oYXMtd2FybmluZyB7XFxuICBjb2xvcjogI2YyYzAzNztcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXdhcm5pbmcpO1xcbn1cXG4ucS1zcGlubmVyIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5xLXNwaW5uZXItbWF0IHtcXG4gIGFuaW1hdGlvbjogcS1zcGluIDJzIGxpbmVhciBpbmZpbml0ZSAvKiBydGw6aWdub3JlICovO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlciAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1zcGlubmVyLW1hdCAucGF0aCB7XFxuICBzdHJva2UtZGFzaGFycmF5OiAxLCAyMDA7XFxuICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gIHN0cm9rZS1saW5lY2FwOiByb3VuZDtcXG4gIGFuaW1hdGlvbjogcS1tYXQtZGFzaCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLXN0ZXBwZXIge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5xLXN0ZXBwZXItdGl0bGUge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG4ucS1zdGVwcGVyLXN1YnRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIG9wYWNpdHk6IDAuNztcXG59XFxuLnEtc3RlcHBlci1kb3Qge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICB3aWR0aDogMjRweDtcXG4gIGhlaWdodDogMjRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc3RlcHBlci1kb3Qgc3BhbiB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtc3RlcHBlci10YWIge1xcbiAgcGFkZGluZzogMjRweDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIHRyYW5zaXRpb246IGNvbG9yIDAuMjhzLCBiYWNrZ3JvdW5kIDAuMjhzO1xcbn1cXG4ucS1zdGVwcGVyLXRhYi5zdGVwLXdhaXRpbmcge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtd2FpdGluZyAucS1zdGVwcGVyLWRvdCB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjQyKTtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1uYXZpZ2F0aW9uIHtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtY29sb3Ige1xcbiAgY29sb3I6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1hY3RpdmUgLnEtc3RlcHBlci10aXRsZSB7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1kaXNhYmxlZCB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjQyKTtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1lcnJvciB7XFxuICBjb2xvcjogI2RiMjgyODtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLW5lZ2F0aXZlKTtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1lcnJvciAucS1zdGVwcGVyLWRvdCB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC1lcnJvciAucS1zdGVwcGVyLWRvdCBzcGFuIHtcXG4gIGNvbG9yOiAjZGIyODI4O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbmVnYXRpdmUpO1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlciB7XFxuICBtaW4taGVpZ2h0OiA3MnB4O1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlcjpub3QoLmFsdGVybmF0aXZlLWxhYmVscykgLnEtc3RlcHBlci10YWIge1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlcjpub3QoLmFsdGVybmF0aXZlLWxhYmVscykgLnEtc3RlcHBlci1kb3Q6YWZ0ZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXIuYWx0ZXJuYXRpdmUtbGFiZWxzIHtcXG4gIG1pbi1oZWlnaHQ6IDEwNHB4O1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlci5hbHRlcm5hdGl2ZS1sYWJlbHMgLnEtc3RlcHBlci10YWIge1xcbiAgcGFkZGluZzogMjRweCAzMnB4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlci5hbHRlcm5hdGl2ZS1sYWJlbHMgLnEtc3RlcHBlci1kb3Qge1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlci5hbHRlcm5hdGl2ZS1sYWJlbHMgLnEtc3RlcHBlci1sYWJlbCB7XFxuICBtYXJnaW4tdG9wOiA4cHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5xLXN0ZXBwZXItaGVhZGVyLmFsdGVybmF0aXZlLWxhYmVscyAucS1zdGVwcGVyLWxhYmVsOmJlZm9yZSxcXG4ucS1zdGVwcGVyLWhlYWRlci5hbHRlcm5hdGl2ZS1sYWJlbHMgLnEtc3RlcHBlci1sYWJlbDphZnRlciB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1zdGVwcGVyLXN0ZXAtY29udGVudCB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci10YWIge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1maXJzdCAucS1zdGVwcGVyLWRvdDpiZWZvcmUsXFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1sYXN0IC5xLXN0ZXBwZXItbGFiZWw6YWZ0ZXIsXFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1sYXN0IC5xLXN0ZXBwZXItZG90OmFmdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItbGluZTpiZWZvcmUsXFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1saW5lOmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgaGVpZ2h0OiAxcHg7XFxuICB3aWR0aDogMTAwdnc7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLWxhYmVsOmFmdGVyLFxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItZG90OmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgbGVmdDogMTAwJTtcXG4gIG1hcmdpbi1sZWZ0OiA4cHg7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItZG90OmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIHJpZ2h0OiAxMDAlO1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItbmF2IHtcXG4gIG1hcmdpbjogMCAxNnB4IDhweDtcXG59XFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1zdGVwIC5xLXN0ZXBwZXItbmF2IHtcXG4gIG1hcmdpbjogMTZweCAwIDA7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItc3RlcCAucS1zdGVwcGVyLW5hdiA+IGRpdi5jb2wge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci1zdGVwLWNvbnRlbnQgPiAucS1zdGVwcGVyLXN0ZXAtaW5uZXIge1xcbiAgcGFkZGluZzogMjRweDtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCB7XFxuICBwYWRkaW5nOiA4cHggMCAxOHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1uYXYge1xcbiAgbWFyZ2luLXRvcDogMTZweDtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItbmF2ID4gZGl2LmNvbCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXN0ZXAtY29udGVudCA+IC5xLXN0ZXBwZXItc3RlcC1pbm5lciB7XFxuICBwYWRkaW5nOiAwIDI0cHggMjRweCA0OHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIge1xcbiAgcGFkZGluZzogMTJweCAxNnB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIgLnEtc3RlcHBlci1kb3Q6YmVmb3JlLFxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYiAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwJTtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItc3RlcCA+IC5xLXN0ZXBwZXItdGFiIC5xLXN0ZXBwZXItZG90OmJlZm9yZSB7XFxuICBib3R0b206IDEwMCU7XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYiAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICB0b3A6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiA4cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYiAucS1zdGVwcGVyLWxhYmVsIHtcXG4gIHBhZGRpbmctdG9wOiA0cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYiAucS1zdGVwcGVyLWxhYmVsIC5xLXN0ZXBwZXItdGl0bGUge1xcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYi5xLXN0ZXBwZXItZmlyc3QgLnEtc3RlcHBlci1kb3Q6YmVmb3JlLFxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYi5xLXN0ZXBwZXItbGFzdCAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtc3RlcHBlci10YWIuc3RlcC1uYXZpZ2F0aW9uOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLnEtc3RlcHBlci1ob3Jpem9udGFsLnEtc3RlcHBlci1jb250cmFjdGFibGUgPiAucS1zdGVwcGVyLWhlYWRlciB7XFxuICAgIG1pbi1oZWlnaHQ6IDcycHg7XFxuICB9XFxuICAucS1zdGVwcGVyLWhvcml6b250YWwucS1zdGVwcGVyLWNvbnRyYWN0YWJsZSA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItdGFiIHtcXG4gICAgcGFkZGluZzogMjRweCAwO1xcbiAgfVxcbiAgLnEtc3RlcHBlci1ob3Jpem9udGFsLnEtc3RlcHBlci1jb250cmFjdGFibGUgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLXRhYjpub3QoOmxhc3QtY2hpbGQpIC5xLXN0ZXBwZXItZG90OmFmdGVyIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5xLXN0ZXBwZXItaG9yaXpvbnRhbC5xLXN0ZXBwZXItY29udHJhY3RhYmxlID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1kb3Qge1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuICAucS1zdGVwcGVyLWhvcml6b250YWwucS1zdGVwcGVyLWNvbnRyYWN0YWJsZSA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItbGFiZWwge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG4ucS10YWJzIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuLnEtbGF5b3V0LW1hcmdpbmFsIC5xLXRhYnMge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG59XFxuLnEtdGFicy1zY3JvbGxlciB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucS10YWItcGFuZSB7XFxuICBwYWRkaW5nOiAxMnB4O1xcbn1cXG4ucS10YWJzLXBhbmVzOmVtcHR5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXRhYnMtbm9ybWFsIC5xLXRhYi1pY29uLFxcbi5xLXRhYnMtbm9ybWFsIC5xLXRhYi1sYWJlbCB7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcbi5xLXRhYiB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzLCBiYWNrZ3JvdW5kIDAuM3M7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBhZGRpbmc6IDhweCAxMHB4O1xcbiAgbWluLWhlaWdodDogNDhweDtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxufVxcbi5xLXRhYiAucS10YWItaWNvbi1wYXJlbnQgKyAucS10YWItbGFiZWwtcGFyZW50IHtcXG4gIG1hcmdpbi10b3A6IDRweDtcXG59XFxuLnEtdGFiIC5xLWNoaXAge1xcbiAgdG9wOiAtOHB4O1xcbiAgcmlnaHQ6IC0xMHB4O1xcbiAgbGVmdDogYXV0bztcXG4gIG1pbi1oZWlnaHQ6IGF1dG87XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjQ0LDY3LDU0LDAuNzUpO1xcbn1cXG4ucS10YWIuYWN0aXZlIC5xLXRhYi1pY29uLFxcbi5xLXRhYi5hY3RpdmUgLnEtdGFiLWxhYmVsIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5xLXRhYi1sYWJlbCB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5xLXRhYi1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMjdweDtcXG59XFxuLnEtdGFiLWZvY3VzLWhlbHBlciB7XFxuICB6LWluZGV4OiAtMTtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5xLXRhYi1mb2N1cy1oZWxwZXI6Zm9jdXMge1xcbiAgei1pbmRleDogdW5zZXQ7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxuICBvcGFjaXR5OiAwLjE7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLnEtdGFiLmhpZGUtaWNvbiAucS10YWItaWNvbi1wYXJlbnQsXFxuICAucS10YWIuaGlkZS1sYWJlbCAucS10YWItbGFiZWwtcGFyZW50IHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnEtdGFiLmhpZGUtaWNvbiAucS10YWItbGFiZWwge1xcbiAgICBtYXJnaW4tdG9wOiAwO1xcbiAgfVxcbiAgLnEtdGFiLWZ1bGwuaGlkZS1ub25lIC5xLXRhYi1sYWJlbC1wYXJlbnQgLnEtdGFiLW1ldGEge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5xLXRhYi1mdWxsIC5xLXRhYi1sYWJlbC1wYXJlbnQgLnEtdGFiLW1ldGEge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcXG4gIC5xLXRhYnMtaGVhZDpub3QoLnNjcm9sbGFibGUpIC5xLXRhYnMtc2Nyb2xsZXIsXFxuICAucS10YWJzLWhlYWQ6bm90KC5zY3JvbGxhYmxlKSAucS10YWIge1xcbiAgICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDEgYXV0bztcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAucS10YWIge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDI1cHg7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDI1cHg7XFxuICB9XFxuICAucS1sYXlvdXQtbWFyZ2luYWwgLnEtdGFicy1oZWFkOm5vdCguc2Nyb2xsYWJsZSkge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEycHg7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEycHg7XFxuICB9XFxufVxcbi5xLXRhYnMtaGVhZCB7XFxuICBtaW4taGVpZ2h0OiA0OHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGZvbnQtc2l6ZTogMC45NXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjE4cyBlYXNlLWluLCBib3gtc2hhZG93IDAuMThzIGVhc2UtaW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5xLXRhYnMtaGVhZDpub3QoLnNjcm9sbGFibGUpIC5xLXRhYnMtbGVmdC1zY3JvbGwsXFxuLnEtdGFicy1oZWFkOm5vdCguc2Nyb2xsYWJsZSkgLnEtdGFicy1yaWdodC1zY3JvbGwge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4ucS10YWJzLWxlZnQtc2Nyb2xsLFxcbi5xLXRhYnMtcmlnaHQtc2Nyb2xsIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdG9wOiAwO1xcbn1cXG4ucS10YWJzLWxlZnQtc2Nyb2xsIC5xLWljb24sXFxuLnEtdGFicy1yaWdodC1zY3JvbGwgLnEtaWNvbiB7XFxuICB0ZXh0LXNoYWRvdzogMCAwIDEwcHggIzAwMDtcXG4gIGZvbnQtc2l6ZTogMzIuNHB4O1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG4ucS10YWJzLWxlZnQtc2Nyb2xsLmRpc2FibGVkLFxcbi5xLXRhYnMtcmlnaHQtc2Nyb2xsLmRpc2FibGVkIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXRhYnM6aG92ZXIgLnEtdGFicy1sZWZ0LXNjcm9sbCAucS1pY29uLFxcbi5xLXRhYnM6aG92ZXIgLnEtdGFicy1yaWdodC1zY3JvbGwgLnEtaWNvbiB7XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbn1cXG4ucS10YWJzLWxlZnQtc2Nyb2xsIHtcXG4gIGxlZnQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtdGFicy1yaWdodC1zY3JvbGwge1xcbiAgcmlnaHQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtdGFicy1hbGlnbi1qdXN0aWZ5IC5xLXRhYnMtc2Nyb2xsZXIsXFxuLnEtdGFicy1hbGlnbi1qdXN0aWZ5IC5xLXRhYiB7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgZmxleDogMSAxIGF1dG87XFxufVxcbi5xLXRhYnMtYWxpZ24tY2VudGVyIHtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuLnEtdGFicy1hbGlnbi1yaWdodCB7XFxuICAtbXMtZmxleC1wYWNrOiBlbmQ7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuLnEtdGFicy1iYXIge1xcbiAgYm9yZGVyOiAycHggc29saWQgY3VycmVudENvbG9yO1xcbiAgYm9yZGVyLXdpZHRoOiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgaGVpZ2h0OiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbn1cXG4ucS10YWJzLWdsb2JhbC1iYXIge1xcbiAgd2lkdGg6IDFweDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzO1xcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpO1xcbn1cXG4ucS10YWJzLWdsb2JhbC1iYXIuY29udHJhY3Qge1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xOHM7XFxuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7XFxufVxcbi5xLXRhYnMtZ2xvYmFsLWJhci1jb250YWluZXIuaGlnaGxpZ2h0ID4gLnEtdGFicy1nbG9iYWwtYmFyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXRhYnMtdHdvLWxpbmVzIC5xLXRhYiB7XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xcbn1cXG4ucS10YWJzLXR3by1saW5lcyAucS10YWIgLnEtdGFiLWxhYmVsIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcXG59XFxuLnEtdGFicy1wb3NpdGlvbi10b3AgPiAucS10YWJzLWhlYWQgLnEtdGFicy1iYXIge1xcbiAgYm90dG9tOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMnB4O1xcbn1cXG4ucS10YWJzLXBvc2l0aW9uLWJvdHRvbSA+IC5xLXRhYnMtaGVhZCAucS10YWJzLWJhciB7XFxuICB0b3A6IDA7XFxuICBib3JkZXItdG9wLXdpZHRoOiAycHg7XFxufVxcbi5xLXRhYnMtcG9zaXRpb24tYm90dG9tID4gLnEtdGFicy1wYW5lcyB7XFxuICAtbXMtZmxleC1vcmRlcjogLTE7XFxuICAgICAgb3JkZXI6IC0xO1xcbn1cXG4ucS10YWJzLWludmVydGVkIC5xLXRhYnMtaGVhZCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbn1cXG4ucS10YWJzLWludmVydGVkLnEtdGFicy1wb3NpdGlvbi10b3AgPiAucS10YWJzLXBhbmVzIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMSk7XFxufVxcbi5xLXRhYnMtaW52ZXJ0ZWQucS10YWJzLXBvc2l0aW9uLXRvcCA+IC5xLXRhYi1wYW5lIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcbi5xLXRhYnMtaW52ZXJ0ZWQucS10YWJzLXBvc2l0aW9uLWJvdHRvbSA+IC5xLXRhYnMtcGFuZXMge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xKTtcXG59XFxuLnEtdGFicy1pbnZlcnRlZC5xLXRhYnMtcG9zaXRpb24tYm90dG9tID4gLnEtdGFiLXBhbmUge1xcbiAgYm9yZGVyLWJvdHRvbTogMDtcXG59XFxuYm9keS5tb2JpbGUgLnEtdGFicy1zY3JvbGxlciB7XFxuICBvdmVyZmxvdy15OiBoaWRkZW47XFxuICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgd2lsbC1jaGFuZ2U6IHNjcm9sbC1wb3NpdGlvbjtcXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG59XFxuYm9keS5kZXNrdG9wIC5xLXRhYjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgb3BhY2l0eTogMC4xO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtdGFiOmhvdmVyOmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG59XFxuLnEtdGFibGUtY29udGFpbmVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucS10YWJsZS1jb250YWluZXIuZnVsbHNjcmVlbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcbn1cXG4ucS10YWJsZS10b3Age1xcbiAgbWluLWhlaWdodDogNjRweDtcXG4gIHBhZGRpbmc6IDhweCAyNHB4O1xcbn1cXG4ucS10YWJsZS10b3A6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICBvcGFjaXR5OiAwLjI7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxufVxcbi5xLXRhYmxlLXRvcCAucS10YWJsZS1jb250cm9sIHtcXG4gIG1pbi1oZWlnaHQ6IDM2cHg7XFxuICBwYWRkaW5nOiA4cHggMDtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgZmxleC13cmFwOiB3cmFwO1xcbn1cXG4ucS10YWJsZS10aXRsZSB7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBsZXR0ZXItc3BhY2luZzogMC4wMDVlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcbi5xLXRhYmxlLXNlcGFyYXRvciB7XFxuICBtaW4td2lkdGg6IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ucS10YWJsZS1ub2RhdGEgLnEtaWNvbiB7XFxuICBmb250LXNpemU6IDIwMCU7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbn1cXG4ucS10YWJsZS1wcm9ncmVzcyB7XFxuICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcXG59XFxuLnEtdGFibGUtcHJvZ3Jlc3MgdGQge1xcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcbi5xLXRhYmxlLXByb2dyZXNzIC5xLXByb2dyZXNzIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGhlaWdodDogMnB4O1xcbiAgYm90dG9tOiAwO1xcbn1cXG4ucS10YWJsZS1taWRkbGUge1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbn1cXG4ucS10YWJsZS1ib3R0b20ge1xcbiAgbWluLWhlaWdodDogNDhweDtcXG4gIHBhZGRpbmc6IDRweCAxNHB4IDRweCAyNHB4O1xcbn1cXG4ucS10YWJsZS1ib3R0b20sXFxuLnEtdGFibGUtYm90dG9tIC5xLWlmIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG59XFxuLnEtdGFibGUtYm90dG9tIC5xLXRhYmxlLWNvbnRyb2wge1xcbiAgbWluLWhlaWdodDogMjRweDtcXG59XFxuLnEtdGFibGUtY29udHJvbCB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5xLXRhYmxlLXNvcnQtaWNvbiB7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxuICB3aWxsLWNoYW5nZTogb3BhY2l0eSwgdHJhbnNmb3JtO1xcbiAgb3BhY2l0eTogMDtcXG4gIGZvbnQtc2l6ZTogMTIwJTtcXG59XFxuLnEtdGFibGUtc29ydC1pY29uLWxlZnQsXFxuLnEtdGFibGUtc29ydC1pY29uLWNlbnRlciB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG4ucS10YWJsZS1zb3J0LWljb24tcmlnaHQge1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxufVxcbi5xLXRhYmxlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG4gIGJvcmRlci1zcGFjaW5nOiAwO1xcbn1cXG4ucS10YWJsZSB0aGVhZCB0ciB7XFxuICBoZWlnaHQ6IDU2cHg7XFxufVxcbi5xLXRhYmxlIHRoIHtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBmb250LXNpemU6IDEycHg7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG4ucS10YWJsZSB0aC5zb3J0YWJsZSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLXRhYmxlIHRoLnNvcnRhYmxlOmhvdmVyIC5xLXRhYmxlLXNvcnQtaWNvbiB7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLXRhYmxlIHRoLnNvcnRlZCAucS10YWJsZS1zb3J0LWljb24ge1xcbiAgb3BhY2l0eTogMSAhaW1wb3J0YW50O1xcbn1cXG4ucS10YWJsZSB0aC5zb3J0LWRlc2MgLnEtdGFibGUtc29ydC1pY29uIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcbi5xLXRhYmxlIHRib2R5IHRyIHtcXG4gIHRyYW5zaXRpb246IDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC41LCAxKTtcXG4gIHdpbGwtY2hhbmdlOiBiYWNrZ3JvdW5kO1xcbn1cXG4ucS10YWJsZSB0aCxcXG4ucS10YWJsZSB0ZCB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgcGFkZGluZzogN3B4IDI0cHg7XFxufVxcbi5xLXRhYmxlIHRoZWFkLFxcbi5xLXRhYmxlIHRkLFxcbi5xLXRhYmxlIHRoIHtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICBib3JkZXItd2lkdGg6IDA7XFxufVxcbi5xLXRhYmxlIHRib2R5IHRkIHtcXG4gIGhlaWdodDogNDhweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXNpemU6IDEzcHg7XFxufVxcbi5xLXRhYmxlLWNvbC1hdXRvLXdpZHRoIHtcXG4gIHdpZHRoOiAxcHg7XFxufVxcbi5xLXRhYmxlLWJvdHRvbS1pdGVtIHtcXG4gIG1hcmdpbi1yaWdodDogMjRweDtcXG59XFxuLnEtdGFibGUtZ3JpZCB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4ucS10YWJsZS1ncmlkIC5xLXRhYmxlLWJvdHRvbSB7XFxuICBib3JkZXItdG9wOiAwO1xcbn1cXG4ucS10YWJsZS1ncmlkIC5xLXRhYmxlIHtcXG4gIGhlaWdodDogMnB4O1xcbn1cXG4ucS10YWJsZS1ncmlkIC5xLXRhYmxlIHRoZWFkIHtcXG4gIGJvcmRlcjogMDtcXG59XFxuLnEtdGFibGUtaG9yaXpvbnRhbC1zZXBhcmF0b3IgdGhlYWQsXFxuLnEtdGFibGUtaG9yaXpvbnRhbC1zZXBhcmF0b3IgdGJvZHkgdGQge1xcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4IDA7XFxufVxcbi5xLXRhYmxlLXZlcnRpY2FsLXNlcGFyYXRvciB0aGVhZCB7XFxuICBib3JkZXItd2lkdGg6IDAgMCAxcHggMDtcXG59XFxuLnEtdGFibGUtdmVydGljYWwtc2VwYXJhdG9yIHRkIHtcXG4gIGJvcmRlci13aWR0aDogMCAwIDAgMXB4O1xcbn1cXG4ucS10YWJsZS12ZXJ0aWNhbC1zZXBhcmF0b3IgdGQ6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLWxlZnQ6IDA7XFxufVxcbi5xLXRhYmxlLWNlbGwtc2VwYXJhdG9yIHRkIHtcXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbn1cXG4ucS10YWJsZS1jZWxsLXNlcGFyYXRvciB0ZDpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItbGVmdDogMDtcXG59XFxuLnEtdGFibGUtY2VsbC1zZXBhcmF0b3IgdGQ6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItcmlnaHQ6IDA7XFxufVxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlLXRvcCB7XFxuICBtaW4taGVpZ2h0OiA0OHB4O1xcbn1cXG4ucS10YWJsZS1kZW5zZSAucS10YWJsZS10b3AsXFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUtYm90dG9tIHtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbiAgcGFkZGluZy1yaWdodDogOHB4O1xcbn1cXG4ucS10YWJsZS1kZW5zZSAucS10YWJsZS1ib3R0b20ge1xcbiAgbWluLWhlaWdodDogNDJweDtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUtc29ydC1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMTEwJTtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUgdGgsXFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUgdGQge1xcbiAgcGFkZGluZzogNHB4IDhweDtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUgdGhlYWQgdHIge1xcbiAgaGVpZ2h0OiA0MHB4O1xcbn1cXG4ucS10YWJsZS1kZW5zZSAucS10YWJsZSB0Ym9keSB0ZCB7XFxuICBoZWlnaHQ6IDI4cHg7XFxufVxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlLWJvdHRvbS1pdGVtIHtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIC5xLXRhYmxlLXRvcCB7XFxuICAgIG1pbi1oZWlnaHQ6IDQ4cHg7XFxuICB9XFxuICAucS10YWJsZS10b3AsXFxuICAucS10YWJsZS1ib3R0b20ge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDhweDtcXG4gICAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgfVxcbiAgLnEtdGFibGUtYm90dG9tIHtcXG4gICAgbWluLWhlaWdodDogNDJweDtcXG4gIH1cXG4gIC5xLXRhYmxlLXNvcnQtaWNvbiB7XFxuICAgIGZvbnQtc2l6ZTogMTEwJTtcXG4gIH1cXG4gIC5xLXRhYmxlIHRoLFxcbiAgLnEtdGFibGUgdGQge1xcbiAgICBwYWRkaW5nOiA0cHggOHB4O1xcbiAgfVxcbiAgLnEtdGFibGUgdGhlYWQgdHIge1xcbiAgICBoZWlnaHQ6IDQwcHg7XFxuICB9XFxuICAucS10YWJsZSB0Ym9keSB0ZCB7XFxuICAgIGhlaWdodDogMjhweDtcXG4gIH1cXG4gIC5xLXRhYmxlLWJvdHRvbS1pdGVtIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxuICB9XFxufVxcbi5xLXRhYmxlLWJvdHRvbSB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjU0KTtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS10YWJsZSB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjg3KTtcXG59XFxuLnEtdGFibGUgdGhlYWQsXFxuLnEtdGFibGUgdHIsXFxuLnEtdGFibGUgdGgsXFxuLnEtdGFibGUgdGQge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS10YWJsZSB0aCB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjU0KTtcXG59XFxuLnEtdGFibGUgdGguc29ydGFibGU6aG92ZXIsXFxuLnEtdGFibGUgdGguc29ydGVkIHtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuODcpO1xcbn1cXG4ucS10YWJsZSB0Ym9keSB0ci5zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDYpO1xcbn1cXG4ucS10YWJsZSB0Ym9keSB0cjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDMpO1xcbn1cXG4ucS10YWJsZS1kYXJrIHtcXG4gIGNvbG9yOiAjZWVlO1xcbn1cXG4ucS10YWJsZS1kYXJrIC5xLXRhYmxlLWJvdHRvbSxcXG4ucS10YWJsZS1kYXJrIC5xLXRhYmxlLXRvcCB7XFxuICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjY0KTtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpO1xcbn1cXG4ucS10YWJsZS1kYXJrIHRoZWFkLFxcbi5xLXRhYmxlLWRhcmsgdHIsXFxuLnEtdGFibGUtZGFyayB0aCxcXG4ucS10YWJsZS1kYXJrIHRkIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjEyKTtcXG59XFxuLnEtdGFibGUtZGFyayB0aCB7XFxuICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjY0KTtcXG59XFxuLnEtdGFibGUtZGFyayB0aC5zb3J0YWJsZTpob3ZlcixcXG4ucS10YWJsZS1kYXJrIHRoLnNvcnRlZCB7XFxuICBjb2xvcjogI2VlZTtcXG59XFxuLnEtdGFibGUtZGFyayB0Ym9keSB0ci5zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMik7XFxufVxcbi5xLXRhYmxlLWRhcmsgdGJvZHkgdHI6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjEpO1xcbn1cXG4ucS10aW1lbGluZSB7XFxuICBwYWRkaW5nOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbn1cXG4ucS10aW1lbGluZSBoNiB7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG59XFxuLnEtdGltZWxpbmUtdGl0bGUge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxufVxcbi5xLXRpbWVsaW5lLXN1YnRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIG9wYWNpdHk6IDAuNDtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuICBsZXR0ZXItc3BhY2luZzogMXB4O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG59XFxuLnEtdGltZWxpbmUtZG90IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTVweDtcXG59XFxuLnEtdGltZWxpbmUtZG90OmJlZm9yZSxcXG4ucS10aW1lbGluZS1kb3Q6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLnEtdGltZWxpbmUtZG90OmJlZm9yZSB7XFxuICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XFxuICBoZWlnaHQ6IDE1cHg7XFxuICB3aWR0aDogMTVweDtcXG4gIHRvcDogNHB4O1xcbiAgbGVmdDogMDtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zcyBlYXNlLWluLW91dCwgYm9yZGVyIDAuM3MgZWFzZS1pbi1vdXQ7XFxufVxcbi5xLXRpbWVsaW5lLWRvdDphZnRlciB7XFxuICB3aWR0aDogM3B4O1xcbiAgb3BhY2l0eTogMC40O1xcbiAgdG9wOiAyNHB4O1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogNnB4O1xcbn1cXG4ucS10aW1lbGluZS1lbnRyeS13aXRoLWljb24gLnEtdGltZWxpbmUtZG90IHtcXG4gIHdpZHRoOiAzMXB4O1xcbiAgbGVmdDogLThweDtcXG59XFxuLnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uIC5xLXRpbWVsaW5lLWRvdDpiZWZvcmUge1xcbiAgaGVpZ2h0OiAzMXB4O1xcbiAgd2lkdGg6IDMxcHg7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5LXdpdGgtaWNvbiAucS10aW1lbGluZS1kb3Q6YWZ0ZXIge1xcbiAgdG9wOiA0MXB4O1xcbiAgbGVmdDogMTRweDtcXG59XFxuLnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uIC5xLXRpbWVsaW5lLXN1YnRpdGxlIHtcXG4gIHBhZGRpbmctdG9wOiA4cHg7XFxufVxcbi5xLXRpbWVsaW5lLWRvdCAucS1pY29uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgaGVpZ2h0OiAzOHB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzIGVhc2UtaW4tb3V0O1xcbn1cXG4ucS10aW1lbGluZS1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS10aW1lbGluZS1kYXJrIC5xLXRpbWVsaW5lLXN1YnRpdGxlIHtcXG4gIG9wYWNpdHk6IDAuNztcXG59XFxuLnEtdGltZWxpbmUtZW50cnkge1xcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbGluZS1oZWlnaHQ6IDIycHg7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5Omxhc3QtY2hpbGQge1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5Omxhc3QtY2hpbGQgLnEtdGltZWxpbmUtZG90OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IG5vbmU7XFxufVxcbi5xLXRpbWVsaW5lLWhvdmVyIC5xLXRpbWVsaW5lLWVudHJ5OmhvdmVyIC5xLXRpbWVsaW5lLWRvdDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDNweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXRpbWVsaW5lLWhvdmVyIC5xLXRpbWVsaW5lLWVudHJ5LnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uOmhvdmVyIC5xLXRpbWVsaW5lLWRvdCAucS1pY29uIHtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXRpbWVsaW5lLWNvbnRlbnQge1xcbiAgcGFkZGluZy1ib3R0b206IDI0cHg7XFxufVxcbi5xLXRpbWVsaW5lLWhlYWRpbmcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucS10aW1lbGluZS1oZWFkaW5nOmZpcnN0LWNoaWxkIC5xLXRpbWVsaW5lLWhlYWRpbmctdGl0bGUge1xcbiAgcGFkZGluZy10b3A6IDA7XFxufVxcbi5xLXRpbWVsaW5lLWhlYWRpbmc6bGFzdC1jaGlsZCAucS10aW1lbGluZS1oZWFkaW5nLXRpdGxlIHtcXG4gIHBhZGRpbmctYm90dG9tOiAwO1xcbn1cXG4ucS10aW1lbGluZS1oZWFkaW5nLXRpdGxlIHtcXG4gIHBhZGRpbmc6IDMycHggMDtcXG4gIG1hcmdpbjogMDtcXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtaGVhZGluZyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdztcXG4gICAgZm9udC1zaXplOiAyMDAlO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1oZWFkaW5nID4gZGl2IHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtaGVhZGluZy10aXRsZSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtNTBweDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUge1xcbiAgICBkaXNwbGF5OiB0YWJsZTtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnkge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XFxuICAgIHBhZGRpbmc6IDA7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLXN1YnRpdGxlLFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1kb3QsXFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWNvbnRlbnQge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1zdWJ0aXRsZSB7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xcbiAgICB3aWR0aDogMzUlO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1kb3Qge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWNvbnRlbnQge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5LXdpdGgtaWNvbiAucS10aW1lbGluZS1jb250ZW50IHtcXG4gICAgcGFkZGluZy10b3A6IDhweDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtc3VidGl0bGUge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtaGVhZGluZy10aXRsZSB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5LFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1zdWJ0aXRsZSxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZG90LFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1jb250ZW50IHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgcGFkZGluZzogMDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZG90IHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBsZWZ0OiA1MCU7XFxuICAgIG1hcmdpbi1sZWZ0OiAtNy4xNXB4O1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeS13aXRoLWljb24gLnEtdGltZWxpbmUtZG90IHtcXG4gICAgbGVmdDogNTAlO1xcbiAgICBtYXJnaW4tbGVmdDogLTE1cHg7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLXN1YnRpdGxlLFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1jb250ZW50IHtcXG4gICAgd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktbGVmdCAucS10aW1lbGluZS1jb250ZW50LFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeS1yaWdodCAucS10aW1lbGluZS1zdWJ0aXRsZSB7XFxuICAgIGZsb2F0OiBsZWZ0O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktbGVmdCAucS10aW1lbGluZS1zdWJ0aXRsZSxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktcmlnaHQgLnEtdGltZWxpbmUtY29udGVudCB7XFxuICAgIGZsb2F0OiByaWdodDtcXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcXG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeS13aXRoLWljb24gLnEtdGltZWxpbmUtY29udGVudCB7XFxuICAgIHBhZGRpbmctdG9wOiA4cHg7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5IHtcXG4gICAgcGFkZGluZy1ib3R0b206IDI0cHg7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxufVxcbi5xLXRvZ2dsZS1iYXNlIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjQ1cyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTJweDtcXG4gIGJvcmRlci1yYWRpdXM6IDMwcHg7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLXRvZ2dsZS1oYW5kbGUge1xcbiAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcXG4gIHRyYW5zaXRpb246IGFsbCA0NTBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XFxuICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjIpLCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMjFweDtcXG4gIGhlaWdodDogMjFweDtcXG4gIGxpbmUtaGVpZ2h0OiAyMXB4O1xcbn1cXG4ucS10b2dnbGUgLnEtb3B0aW9uLWlubmVyIHtcXG4gIGhlaWdodDogMjFweDtcXG4gIHdpZHRoOiA0MHB4O1xcbiAgbWluLXdpZHRoOiA0MHB4O1xcbiAgcGFkZGluZzogNXB4IDA7XFxufVxcbi5xLXRvZ2dsZSAucS1vcHRpb24taW5uZXIuYWN0aXZlIC5xLXRvZ2dsZS1oYW5kbGUge1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgbGVmdDogMTlweDtcXG59XFxuLnEtdG9nZ2xlIC5xLW9wdGlvbi1pbm5lci5hY3RpdmUgLnEtdG9nZ2xlLWljb24ge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLXRvb2xiYXIge1xcbiAgcGFkZGluZzogNHB4IDEycHg7XFxuICBtaW4taGVpZ2h0OiA1MHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ucS10b29sYmFyLWludmVydGVkIHtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxufVxcbi5xLXRvb2xiYXItdGl0bGUge1xcbiAgLW1zLWZsZXg6IDEgMSAwJTtcXG4gICAgICBmbGV4OiAxIDEgMCU7XFxuICBtaW4td2lkdGg6IDFweDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBwYWRkaW5nOiAwIDEycHg7XFxufVxcbi5xLXRvb2xiYXItc3VidGl0bGUge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgb3BhY2l0eTogMC43O1xcbn1cXG4ucS10b29sYmFyLXRpdGxlLFxcbi5xLXRvb2xiYXItc3VidGl0bGUge1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtdG9vbHRpcCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogI2ZhZmFmYTtcXG4gIGJhY2tncm91bmQ6ICM3NDc0NzQ7XFxuICB6LWluZGV4OiA5MDAwO1xcbiAgcGFkZGluZzogMTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnEtdHJlZS1ub2RlIHtcXG4gIG1hcmdpbjogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmc6IDAgMCAzcHggMjJweDtcXG59XFxuLnEtdHJlZS1ub2RlOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtM3B4O1xcbiAgYm90dG9tOiAwO1xcbiAgd2lkdGg6IDFweDtcXG4gIHJpZ2h0OiBhdXRvO1xcbiAgbGVmdDogLTEzcHg7XFxuICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtdHJlZS1ub2RlOmxhc3QtY2hpbGQ6YWZ0ZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtdHJlZS1ub2RlLWhlYWRlcjpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC0zcHg7XFxuICBib3R0b206IDUwJTtcXG4gIHdpZHRoOiAzNXB4O1xcbiAgbGVmdDogLTM1cHg7XFxuICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXRyZWUtY2hpbGRyZW4ge1xcbiAgcGFkZGluZy1sZWZ0OiAyNXB4O1xcbn1cXG4ucS10cmVlLWNoaWxkcmVuLmRpc2FibGVkIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4ucS10cmVlLW5vZGUtYm9keSB7XFxuICBwYWRkaW5nOiA1cHggMCA4cHggNXB4O1xcbn1cXG4ucS10cmVlLW5vZGUtcGFyZW50IHtcXG4gIHBhZGRpbmctbGVmdDogMnB4O1xcbn1cXG4ucS10cmVlLW5vZGUtcGFyZW50ID4gLnEtdHJlZS1ub2RlLWhlYWRlcjpiZWZvcmUge1xcbiAgd2lkdGg6IDE1cHg7XFxuICBsZWZ0OiAtMTVweDtcXG59XFxuLnEtdHJlZS1ub2RlLXBhcmVudCA+IC5xLXRyZWUtbm9kZS1jb2xsYXBzaWJsZSA+IC5xLXRyZWUtbm9kZS1ib2R5IHtcXG4gIHBhZGRpbmc6IDVweCAwIDhweCAyN3B4O1xcbn1cXG4ucS10cmVlLW5vZGUtcGFyZW50ID4gLnEtdHJlZS1ub2RlLWNvbGxhcHNpYmxlID4gLnEtdHJlZS1ub2RlLWJvZHk6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgcmlnaHQ6IGF1dG87XFxuICBsZWZ0OiAxMnB4O1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxuICBib3R0b206IDUwcHg7XFxufVxcbi5xLXRyZWUtbm9kZS1saW5rIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtdHJlZS1ub2RlLXNlbGVjdGVkIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xNSk7XFxufVxcbi5xLXRyZWUtZGFyayAucS10cmVlLW5vZGUtc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjQpO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtdHJlZS1ub2RlLWxpbms6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtdHJlZS1kYXJrIC5xLXRyZWUtbm9kZS1saW5rOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4zKTtcXG59XFxuLnEtdHJlZS1ub2RlLWhlYWRlciB7XFxuICBwYWRkaW5nOiA0cHg7XFxuICBtYXJnaW4tdG9wOiAzcHg7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxufVxcbi5xLXRyZWUtbm9kZS1oZWFkZXIuZGlzYWJsZWQge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLXRyZWUtaWNvbiB7XFxuICBmb250LXNpemU6IDEuNWVtO1xcbn1cXG4ucS10cmVlLWltZyB7XFxuICBoZWlnaHQ6IDNlbTtcXG59XFxuLnEtdHJlZS1pbWcuYXZhdGFyIHtcXG4gIHdpZHRoOiAyZW07XFxuICBoZWlnaHQ6IDJlbTtcXG59XFxuLnEtdHJlZS1hcnJvdyB7XFxuICBmb250LXNpemU6IDFyZW07XFxuICB3aWR0aDogMXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG59XFxuLnEtdHJlZS1hcnJvdy1yb3RhdGUge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xcbn1cXG5bZGlyPXJ0bF0gLnEtdHJlZS1hcnJvdyB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbltkaXI9cnRsXSAucS10cmVlLWFycm93LXJvdGF0ZSB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtdHJlZSA+IC5xLXRyZWUtbm9kZSB7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4ucS10cmVlID4gLnEtdHJlZS1ub2RlOmFmdGVyLFxcbi5xLXRyZWUgPiAucS10cmVlLW5vZGUgPiAucS10cmVlLW5vZGUtaGVhZGVyOmJlZm9yZSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS10cmVlID4gLnEtdHJlZS1ub2RlLWNoaWxkID4gLnEtdHJlZS1ub2RlLWhlYWRlciB7XFxuICBwYWRkaW5nLWxlZnQ6IDI0cHg7XFxufVxcbi5xLXVwbG9hZGVyLWV4cGFuZGVkIC5xLWlmIHtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuLnEtdXBsb2FkZXItaW5wdXQge1xcbiAgb3BhY2l0eTogMDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZm9udC1zaXplOiAwO1xcbn1cXG4ucS11cGxvYWRlci1waWNrLWJ1dHRvbltkaXNhYmxlZF0gLnEtdXBsb2FkZXItaW5wdXQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtdXBsb2FkZXItZmlsZXMge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIG1heC1oZWlnaHQ6IDUwMHB4O1xcbn1cXG4ucS11cGxvYWRlci1maWxlcy1uby1ib3JkZXIgLnEtdXBsb2FkZXItZmlsZXMge1xcbiAgYm9yZGVyLXRvcDogMCAhaW1wb3J0YW50O1xcbn1cXG4ucS11cGxvYWRlci1maWxlOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XFxufVxcbi5xLXVwbG9hZGVyLXByb2dyZXNzLWJnLFxcbi5xLXVwbG9hZGVyLXByb2dyZXNzLXRleHQge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLXVwbG9hZGVyLXByb2dyZXNzLWJnIHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG9wYWNpdHk6IDAuMjtcXG59XFxuLnEtdXBsb2FkZXItcHJvZ3Jlc3MtdGV4dCB7XFxuICBmb250LXNpemU6IDQwcHg7XFxuICBvcGFjaXR5OiAwLjE7XFxuICByaWdodDogNDRweDtcXG4gIGJvdHRvbTogMDtcXG59XFxuLnEtdXBsb2FkZXItZG5kIHtcXG4gIG91dGxpbmU6IDJweCBkYXNoZWQgY3VycmVudENvbG9yO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC02cHg7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuNik7XFxufVxcbi5xLXVwbG9hZGVyLWRuZC5pbnZlcnRlZCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMyk7XFxufVxcbi5xLXVwbG9hZGVyLWRhcmsgLnEtdXBsb2FkZXItZmlsZXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjYTdhN2E3O1xcbn1cXG4ucS11cGxvYWRlci1kYXJrIC5xLXVwbG9hZGVyLWJnIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS11cGxvYWRlci1kYXJrIC5xLXVwbG9hZGVyLXByb2dyZXNzLXRleHQge1xcbiAgb3BhY2l0eTogMC4yO1xcbn1cXG4ucS11cGxvYWRlci1kYXJrIC5xLXVwbG9hZGVyLWZpbGU6bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQyNDI0MjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1xLWNvbG9yLWRhcmspO1xcbn1cXG5pbWcucmVzcG9uc2l2ZSB7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbmltZy5hdmF0YXIge1xcbiAgd2lkdGg6IDUwcHg7XFxuICBoZWlnaHQ6IDUwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjIpLCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5xLXZpZGVvIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbn1cXG4ucS12aWRlbyBpZnJhbWUsXFxuLnEtdmlkZW8gb2JqZWN0LFxcbi5xLXZpZGVvIGVtYmVkIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG46cm9vdCB7XFxuICAtLXEtY29sb3ItcHJpbWFyeTogIzAyN2JlMztcXG4gIC0tcS1jb2xvci1zZWNvbmRhcnk6ICMyNmE2OWE7XFxuICAtLXEtY29sb3ItdGVydGlhcnk6ICM1NTU7XFxuICAtLXEtY29sb3ItcG9zaXRpdmU6ICMyMWJhNDU7XFxuICAtLXEtY29sb3ItbmVnYXRpdmU6ICNkYjI4Mjg7XFxuICAtLXEtY29sb3ItbmVnYXRpdmUtbDogI2VjOGI4YjtcXG4gIC0tcS1jb2xvci1pbmZvOiAjMzFjY2VjO1xcbiAgLS1xLWNvbG9yLXdhcm5pbmc6ICNmMmMwMzc7XFxuICAtLXEtY29sb3Itd2FybmluZy1sOiAjZjhkZDkzO1xcbiAgLS1xLWNvbG9yLWxpZ2h0OiAjYmRiZGJkO1xcbiAgLS1xLWNvbG9yLWxpZ2h0LWQ6ICNhYWE7XFxuICAtLXEtY29sb3ItZmFkZWQ6ICM3Nzc7XFxuICAtLXEtY29sb3ItZGFyazogIzQyNDI0MjtcXG59XFxuLnRleHQtcHJpbWFyeSB7XFxuICBjb2xvcjogIzAyN2JlMyAhaW1wb3J0YW50O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItcHJpbWFyeSkgIWltcG9ydGFudDtcXG59XFxuLmJnLXByaW1hcnkge1xcbiAgYmFja2dyb3VuZDogIzAyN2JlMyAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1wcmltYXJ5KSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICMyNmE2OWEgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXNlY29uZGFyeSkgIWltcG9ydGFudDtcXG59XFxuLmJnLXNlY29uZGFyeSB7XFxuICBiYWNrZ3JvdW5kOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1xLWNvbG9yLXNlY29uZGFyeSkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVydGlhcnkge1xcbiAgY29sb3I6ICM1NTUgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXRlcnRpYXJ5KSAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVydGlhcnkge1xcbiAgYmFja2dyb3VuZDogIzU1NSAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci10ZXJ0aWFyeSkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZmFkZWQge1xcbiAgY29sb3I6ICM3NzcgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWZhZGVkKSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZmFkZWQge1xcbiAgYmFja2dyb3VuZDogIzc3NyAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1mYWRlZCkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcG9zaXRpdmUge1xcbiAgY29sb3I6ICMyMWJhNDUgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXBvc2l0aXZlKSAhaW1wb3J0YW50O1xcbn1cXG4uYmctcG9zaXRpdmUge1xcbiAgYmFja2dyb3VuZDogIzIxYmE0NSAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1wb3NpdGl2ZSkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbmVnYXRpdmUge1xcbiAgY29sb3I6ICNkYjI4MjggIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLW5lZ2F0aXZlKSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbmVnYXRpdmUge1xcbiAgYmFja2dyb3VuZDogI2RiMjgyOCAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5mbyB7XFxuICBjb2xvcjogIzMxY2NlYyAhaW1wb3J0YW50O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItaW5mbykgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZm8ge1xcbiAgYmFja2dyb3VuZDogIzMxY2NlYyAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1pbmZvKSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC13YXJuaW5nIHtcXG4gIGNvbG9yOiAjZjJjMDM3ICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci13YXJuaW5nKSAhaW1wb3J0YW50O1xcbn1cXG4uYmctd2FybmluZyB7XFxuICBiYWNrZ3JvdW5kOiAjZjJjMDM3ICFpbXBvcnRhbnQ7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1xLWNvbG9yLXdhcm5pbmcpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXdoaXRlIHtcXG4gIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy13aGl0ZSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsYWNrIHtcXG4gIGNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibGFjayB7XFxuICBiYWNrZ3JvdW5kOiAjMDAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0IHtcXG4gIGNvbG9yOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1saWdodCkgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0IHtcXG4gIGJhY2tncm91bmQ6ICNiZGJkYmQgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItbGlnaHQpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRhcmsge1xcbiAgY29sb3I6ICM0MjQyNDIgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWRhcmspICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kYXJrIHtcXG4gIGJhY2tncm91bmQ6ICM0MjQyNDIgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItZGFyaykgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdHJhbnNwYXJlbnQge1xcbiAgY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10cmFuc3BhcmVudCB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1yZWQge1xcbiAgY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTEge1xcbiAgY29sb3I6ICNmZmViZWUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTIge1xcbiAgY29sb3I6ICNmZmNkZDIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTMge1xcbiAgY29sb3I6ICNlZjlhOWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTQge1xcbiAgY29sb3I6ICNlNTczNzMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTUge1xcbiAgY29sb3I6ICNlZjUzNTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTYge1xcbiAgY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTcge1xcbiAgY29sb3I6ICNlNTM5MzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTgge1xcbiAgY29sb3I6ICNkMzJmMmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTkge1xcbiAgY29sb3I6ICNjNjI4MjggIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTEwIHtcXG4gIGNvbG9yOiAjYjcxYzFjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0xMSB7XFxuICBjb2xvcjogI2ZmOGE4MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1yZWQtMTIge1xcbiAgY29sb3I6ICNmZjUyNTIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTEzIHtcXG4gIGNvbG9yOiAjZmYxNzQ0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0xNCB7XFxuICBjb2xvcjogI2Q1MDAwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rIHtcXG4gIGNvbG9yOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMSB7XFxuICBjb2xvcjogI2ZjZTRlYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTIge1xcbiAgY29sb3I6ICNmOGJiZDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay0zIHtcXG4gIGNvbG9yOiAjZjQ4ZmIxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstNCB7XFxuICBjb2xvcjogI2YwNjI5MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTUge1xcbiAgY29sb3I6ICNlYzQwN2EgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay02IHtcXG4gIGNvbG9yOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstNyB7XFxuICBjb2xvcjogI2Q4MWI2MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTgge1xcbiAgY29sb3I6ICNjMjE4NWIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay05IHtcXG4gIGNvbG9yOiAjYWQxNDU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMTAge1xcbiAgY29sb3I6ICM4ODBlNGYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay0xMSB7XFxuICBjb2xvcjogI2ZmODBhYiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTEyIHtcXG4gIGNvbG9yOiAjZmY0MDgxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMTMge1xcbiAgY29sb3I6ICNmNTAwNTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay0xNCB7XFxuICBjb2xvcjogI2M1MTE2MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1wdXJwbGUge1xcbiAgY29sb3I6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTEge1xcbiAgY29sb3I6ICNmM2U1ZjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTIge1xcbiAgY29sb3I6ICNlMWJlZTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTMge1xcbiAgY29sb3I6ICNjZTkzZDggIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTQge1xcbiAgY29sb3I6ICNiYTY4YzggIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTUge1xcbiAgY29sb3I6ICNhYjQ3YmMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTYge1xcbiAgY29sb3I6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTcge1xcbiAgY29sb3I6ICM4ZTI0YWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTgge1xcbiAgY29sb3I6ICM3YjFmYTIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTkge1xcbiAgY29sb3I6ICM2YTFiOWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTEwIHtcXG4gIGNvbG9yOiAjNGExNDhjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0xMSB7XFxuICBjb2xvcjogI2VhODBmYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1wdXJwbGUtMTIge1xcbiAgY29sb3I6ICNlMDQwZmIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTEzIHtcXG4gIGNvbG9yOiAjZDUwMGY5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0xNCB7XFxuICBjb2xvcjogI2EwZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZSB7XFxuICBjb2xvcjogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xIHtcXG4gIGNvbG9yOiAjZWRlN2Y2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTIge1xcbiAgY29sb3I6ICNkMWM0ZTkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMyB7XFxuICBjb2xvcjogI2IzOWRkYiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS00IHtcXG4gIGNvbG9yOiAjOTU3NWNkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTUge1xcbiAgY29sb3I6ICM3ZTU3YzIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtNiB7XFxuICBjb2xvcjogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS03IHtcXG4gIGNvbG9yOiAjNWUzNWIxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTgge1xcbiAgY29sb3I6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtOSB7XFxuICBjb2xvcjogIzQ1MjdhMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xMCB7XFxuICBjb2xvcjogIzMxMWI5MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xMSB7XFxuICBjb2xvcjogI2IzODhmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xMiB7XFxuICBjb2xvcjogIzdjNGRmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xMyB7XFxuICBjb2xvcjogIzY1MWZmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0xNCB7XFxuICBjb2xvcjogIzYyMDBlYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1pbmRpZ28ge1xcbiAgY29sb3I6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTEge1xcbiAgY29sb3I6ICNlOGVhZjYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTIge1xcbiAgY29sb3I6ICNjNWNhZTkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTMge1xcbiAgY29sb3I6ICM5ZmE4ZGEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTQge1xcbiAgY29sb3I6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTUge1xcbiAgY29sb3I6ICM1YzZiYzAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTYge1xcbiAgY29sb3I6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTcge1xcbiAgY29sb3I6ICMzOTQ5YWIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTgge1xcbiAgY29sb3I6ICMzMDNmOWYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTkge1xcbiAgY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTEwIHtcXG4gIGNvbG9yOiAjMWEyMzdlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0xMSB7XFxuICBjb2xvcjogIzhjOWVmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1pbmRpZ28tMTIge1xcbiAgY29sb3I6ICM1MzZkZmUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTEzIHtcXG4gIGNvbG9yOiAjM2Q1YWZlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0xNCB7XFxuICBjb2xvcjogIzMwNGZmZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlIHtcXG4gIGNvbG9yOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMSB7XFxuICBjb2xvcjogI2UzZjJmZCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTIge1xcbiAgY29sb3I6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS0zIHtcXG4gIGNvbG9yOiAjOTBjYWY5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtNCB7XFxuICBjb2xvcjogIzY0YjVmNiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTUge1xcbiAgY29sb3I6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS02IHtcXG4gIGNvbG9yOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtNyB7XFxuICBjb2xvcjogIzFlODhlNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTgge1xcbiAgY29sb3I6ICMxOTc2ZDIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS05IHtcXG4gIGNvbG9yOiAjMTU2NWMwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMTAge1xcbiAgY29sb3I6ICMwZDQ3YTEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS0xMSB7XFxuICBjb2xvcjogIzgyYjFmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTEyIHtcXG4gIGNvbG9yOiAjNDQ4YWZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMTMge1xcbiAgY29sb3I6ICMyOTc5ZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS0xNCB7XFxuICBjb2xvcjogIzI5NjJmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlIHtcXG4gIGNvbG9yOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMSB7XFxuICBjb2xvcjogI2UxZjVmZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTIge1xcbiAgY29sb3I6ICNiM2U1ZmMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS0zIHtcXG4gIGNvbG9yOiAjODFkNGZhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtNCB7XFxuICBjb2xvcjogIzRmYzNmNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTUge1xcbiAgY29sb3I6ICMyOWI2ZjYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS02IHtcXG4gIGNvbG9yOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtNyB7XFxuICBjb2xvcjogIzAzOWJlNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTgge1xcbiAgY29sb3I6ICMwMjg4ZDEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS05IHtcXG4gIGNvbG9yOiAjMDI3N2JkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMTAge1xcbiAgY29sb3I6ICMwMTU3OWIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS0xMSB7XFxuICBjb2xvcjogIzgwZDhmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTEyIHtcXG4gIGNvbG9yOiAjNDBjNGZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMTMge1xcbiAgY29sb3I6ICMwMGIwZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS0xNCB7XFxuICBjb2xvcjogIzAwOTFlYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuIHtcXG4gIGNvbG9yOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMSB7XFxuICBjb2xvcjogI2UwZjdmYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTIge1xcbiAgY29sb3I6ICNiMmViZjIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi0zIHtcXG4gIGNvbG9yOiAjODBkZWVhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tNCB7XFxuICBjb2xvcjogIzRkZDBlMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTUge1xcbiAgY29sb3I6ICMyNmM2ZGEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi02IHtcXG4gIGNvbG9yOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tNyB7XFxuICBjb2xvcjogIzAwYWNjMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTgge1xcbiAgY29sb3I6ICMwMDk3YTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi05IHtcXG4gIGNvbG9yOiAjMDA4MzhmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMTAge1xcbiAgY29sb3I6ICMwMDYwNjQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi0xMSB7XFxuICBjb2xvcjogIzg0ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTEyIHtcXG4gIGNvbG9yOiAjMThmZmZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMTMge1xcbiAgY29sb3I6ICMwMGU1ZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi0xNCB7XFxuICBjb2xvcjogIzAwYjhkNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsIHtcXG4gIGNvbG9yOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMSB7XFxuICBjb2xvcjogI2UwZjJmMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTIge1xcbiAgY29sb3I6ICNiMmRmZGIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC0zIHtcXG4gIGNvbG9yOiAjODBjYmM0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtNCB7XFxuICBjb2xvcjogIzRkYjZhYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTUge1xcbiAgY29sb3I6ICMyNmE2OWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC02IHtcXG4gIGNvbG9yOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtNyB7XFxuICBjb2xvcjogIzAwODk3YiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTgge1xcbiAgY29sb3I6ICMwMDc5NmIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC05IHtcXG4gIGNvbG9yOiAjMDA2OTVjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMTAge1xcbiAgY29sb3I6ICMwMDRkNDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC0xMSB7XFxuICBjb2xvcjogI2E3ZmZlYiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTEyIHtcXG4gIGNvbG9yOiAjNjRmZmRhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMTMge1xcbiAgY29sb3I6ICMxZGU5YjYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC0xNCB7XFxuICBjb2xvcjogIzAwYmZhNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbiB7XFxuICBjb2xvcjogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xIHtcXG4gIGNvbG9yOiAjZThmNWU5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTIge1xcbiAgY29sb3I6ICNjOGU2YzkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMyB7XFxuICBjb2xvcjogI2E1ZDZhNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi00IHtcXG4gIGNvbG9yOiAjODFjNzg0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTUge1xcbiAgY29sb3I6ICM2NmJiNmEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tNiB7XFxuICBjb2xvcjogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi03IHtcXG4gIGNvbG9yOiAjNDNhMDQ3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTgge1xcbiAgY29sb3I6ICMzODhlM2MgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tOSB7XFxuICBjb2xvcjogIzJlN2QzMiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xMCB7XFxuICBjb2xvcjogIzFiNWUyMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xMSB7XFxuICBjb2xvcjogI2I5ZjZjYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xMiB7XFxuICBjb2xvcjogIzY5ZjBhZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xMyB7XFxuICBjb2xvcjogIzAwZTY3NiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0xNCB7XFxuICBjb2xvcjogIzAwYzg1MyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbiB7XFxuICBjb2xvcjogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xIHtcXG4gIGNvbG9yOiAjZjFmOGU5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTIge1xcbiAgY29sb3I6ICNkY2VkYzggIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMyB7XFxuICBjb2xvcjogI2M1ZTFhNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi00IHtcXG4gIGNvbG9yOiAjYWVkNTgxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTUge1xcbiAgY29sb3I6ICM5Y2NjNjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tNiB7XFxuICBjb2xvcjogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi03IHtcXG4gIGNvbG9yOiAjN2NiMzQyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTgge1xcbiAgY29sb3I6ICM2ODlmMzggIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tOSB7XFxuICBjb2xvcjogIzU1OGIyZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xMCB7XFxuICBjb2xvcjogIzMzNjkxZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xMSB7XFxuICBjb2xvcjogI2NjZmY5MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xMiB7XFxuICBjb2xvcjogI2IyZmY1OSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xMyB7XFxuICBjb2xvcjogIzc2ZmYwMyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0xNCB7XFxuICBjb2xvcjogIzY0ZGQxNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lIHtcXG4gIGNvbG9yOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMSB7XFxuICBjb2xvcjogI2Y5ZmJlNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTIge1xcbiAgY29sb3I6ICNmMGY0YzMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS0zIHtcXG4gIGNvbG9yOiAjZTZlZTljICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtNCB7XFxuICBjb2xvcjogI2RjZTc3NSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTUge1xcbiAgY29sb3I6ICNkNGUxNTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS02IHtcXG4gIGNvbG9yOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtNyB7XFxuICBjb2xvcjogI2MwY2EzMyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTgge1xcbiAgY29sb3I6ICNhZmI0MmIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS05IHtcXG4gIGNvbG9yOiAjOWU5ZDI0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMTAge1xcbiAgY29sb3I6ICM4Mjc3MTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS0xMSB7XFxuICBjb2xvcjogI2Y0ZmY4MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTEyIHtcXG4gIGNvbG9yOiAjZWVmZjQxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMTMge1xcbiAgY29sb3I6ICNjNmZmMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS0xNCB7XFxuICBjb2xvcjogI2FlZWEwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC15ZWxsb3cge1xcbiAgY29sb3I6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTEge1xcbiAgY29sb3I6ICNmZmZkZTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTIge1xcbiAgY29sb3I6ICNmZmY5YzQgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTMge1xcbiAgY29sb3I6ICNmZmY1OWQgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTQge1xcbiAgY29sb3I6ICNmZmYxNzYgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTUge1xcbiAgY29sb3I6ICNmZmVlNTggIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTYge1xcbiAgY29sb3I6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTcge1xcbiAgY29sb3I6ICNmZGQ4MzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTgge1xcbiAgY29sb3I6ICNmYmMwMmQgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTkge1xcbiAgY29sb3I6ICNmOWE4MjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTEwIHtcXG4gIGNvbG9yOiAjZjU3ZjE3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0xMSB7XFxuICBjb2xvcjogI2ZmZmY4ZCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC15ZWxsb3ctMTIge1xcbiAgY29sb3I6ICNmZjAgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTEzIHtcXG4gIGNvbG9yOiAjZmZlYTAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0xNCB7XFxuICBjb2xvcjogI2ZmZDYwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlciB7XFxuICBjb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xIHtcXG4gIGNvbG9yOiAjZmZmOGUxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTIge1xcbiAgY29sb3I6ICNmZmVjYjMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMyB7XFxuICBjb2xvcjogI2ZmZTA4MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci00IHtcXG4gIGNvbG9yOiAjZmZkNTRmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTUge1xcbiAgY29sb3I6ICNmZmNhMjggIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItNiB7XFxuICBjb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci03IHtcXG4gIGNvbG9yOiAjZmZiMzAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTgge1xcbiAgY29sb3I6ICNmZmEwMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItOSB7XFxuICBjb2xvcjogI2ZmOGYwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xMCB7XFxuICBjb2xvcjogI2ZmNmYwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xMSB7XFxuICBjb2xvcjogI2ZmZTU3ZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xMiB7XFxuICBjb2xvcjogI2ZmZDc0MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xMyB7XFxuICBjb2xvcjogI2ZmYzQwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0xNCB7XFxuICBjb2xvcjogI2ZmYWIwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1vcmFuZ2Uge1xcbiAgY29sb3I6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTEge1xcbiAgY29sb3I6ICNmZmYzZTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTIge1xcbiAgY29sb3I6ICNmZmUwYjIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTMge1xcbiAgY29sb3I6ICNmZmNjODAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTQge1xcbiAgY29sb3I6ICNmZmI3NGQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTUge1xcbiAgY29sb3I6ICNmZmE3MjYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTYge1xcbiAgY29sb3I6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTcge1xcbiAgY29sb3I6ICNmYjhjMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTgge1xcbiAgY29sb3I6ICNmNTdjMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTkge1xcbiAgY29sb3I6ICNlZjZjMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTEwIHtcXG4gIGNvbG9yOiAjZTY1MTAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0xMSB7XFxuICBjb2xvcjogI2ZmZDE4MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1vcmFuZ2UtMTIge1xcbiAgY29sb3I6ICNmZmFiNDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTEzIHtcXG4gIGNvbG9yOiAjZmY5MTAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0xNCB7XFxuICBjb2xvcjogI2ZmNmQwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZSB7XFxuICBjb2xvcjogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xIHtcXG4gIGNvbG9yOiAjZmJlOWU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTIge1xcbiAgY29sb3I6ICNmZmNjYmMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMyB7XFxuICBjb2xvcjogI2ZmYWI5MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS00IHtcXG4gIGNvbG9yOiAjZmY4YTY1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTUge1xcbiAgY29sb3I6ICNmZjcwNDMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtNiB7XFxuICBjb2xvcjogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS03IHtcXG4gIGNvbG9yOiAjZjQ1MTFlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTgge1xcbiAgY29sb3I6ICNlNjRhMTkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtOSB7XFxuICBjb2xvcjogI2Q4NDMxNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xMCB7XFxuICBjb2xvcjogI2JmMzYwYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xMSB7XFxuICBjb2xvcjogI2ZmOWU4MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xMiB7XFxuICBjb2xvcjogI2ZmNmU0MCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xMyB7XFxuICBjb2xvcjogI2ZmM2QwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0xNCB7XFxuICBjb2xvcjogI2RkMmMwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93biB7XFxuICBjb2xvcjogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xIHtcXG4gIGNvbG9yOiAjZWZlYmU5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTIge1xcbiAgY29sb3I6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMyB7XFxuICBjb2xvcjogI2JjYWFhNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi00IHtcXG4gIGNvbG9yOiAjYTE4ODdmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTUge1xcbiAgY29sb3I6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tNiB7XFxuICBjb2xvcjogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi03IHtcXG4gIGNvbG9yOiAjNmQ0YzQxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTgge1xcbiAgY29sb3I6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tOSB7XFxuICBjb2xvcjogIzRlMzQyZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xMCB7XFxuICBjb2xvcjogIzNlMjcyMyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xMSB7XFxuICBjb2xvcjogI2Q3Y2NjOCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xMiB7XFxuICBjb2xvcjogI2JjYWFhNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xMyB7XFxuICBjb2xvcjogIzhkNmU2MyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0xNCB7XFxuICBjb2xvcjogIzVkNDAzNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5IHtcXG4gIGNvbG9yOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMSB7XFxuICBjb2xvcjogI2ZhZmFmYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTIge1xcbiAgY29sb3I6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS0zIHtcXG4gIGNvbG9yOiAjZWVlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktNCB7XFxuICBjb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTUge1xcbiAgY29sb3I6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS02IHtcXG4gIGNvbG9yOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktNyB7XFxuICBjb2xvcjogIzc1NzU3NSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTgge1xcbiAgY29sb3I6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS05IHtcXG4gIGNvbG9yOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMTAge1xcbiAgY29sb3I6ICMyMTIxMjEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS0xMSB7XFxuICBjb2xvcjogI2Y1ZjVmNSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTEyIHtcXG4gIGNvbG9yOiAjZWVlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMTMge1xcbiAgY29sb3I6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS0xNCB7XFxuICBjb2xvcjogIzYxNjE2MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLWdyZXkge1xcbiAgY29sb3I6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTEge1xcbiAgY29sb3I6ICNlY2VmZjEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTIge1xcbiAgY29sb3I6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTMge1xcbiAgY29sb3I6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTQge1xcbiAgY29sb3I6ICM5MGE0YWUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTUge1xcbiAgY29sb3I6ICM3ODkwOWMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTYge1xcbiAgY29sb3I6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTcge1xcbiAgY29sb3I6ICM1NDZlN2EgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTgge1xcbiAgY29sb3I6ICM0NTVhNjQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTkge1xcbiAgY29sb3I6ICMzNzQ3NGYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTEwIHtcXG4gIGNvbG9yOiAjMjYzMjM4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0xMSB7XFxuICBjb2xvcjogI2NmZDhkYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLWdyZXktMTIge1xcbiAgY29sb3I6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTEzIHtcXG4gIGNvbG9yOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0xNCB7XFxuICBjb2xvcjogIzQ1NWE2NCAhaW1wb3J0YW50O1xcbn1cXG4uYmctcmVkIHtcXG4gIGJhY2tncm91bmQ6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0xIHtcXG4gIGJhY2tncm91bmQ6ICNmZmViZWUgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0yIHtcXG4gIGJhY2tncm91bmQ6ICNmZmNkZDIgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0zIHtcXG4gIGJhY2tncm91bmQ6ICNlZjlhOWEgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC00IHtcXG4gIGJhY2tncm91bmQ6ICNlNTczNzMgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC01IHtcXG4gIGJhY2tncm91bmQ6ICNlZjUzNTAgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC02IHtcXG4gIGJhY2tncm91bmQ6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC03IHtcXG4gIGJhY2tncm91bmQ6ICNlNTM5MzUgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC04IHtcXG4gIGJhY2tncm91bmQ6ICNkMzJmMmYgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC05IHtcXG4gIGJhY2tncm91bmQ6ICNjNjI4MjggIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjYjcxYzFjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmOGE4MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctcmVkLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNmZjUyNTIgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjZmYxNzQ0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMTQge1xcbiAgYmFja2dyb3VuZDogI2Q1MDAwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluayB7XFxuICBiYWNrZ3JvdW5kOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTEge1xcbiAgYmFja2dyb3VuZDogI2ZjZTRlYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay0yIHtcXG4gIGJhY2tncm91bmQ6ICNmOGJiZDAgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstMyB7XFxuICBiYWNrZ3JvdW5kOiAjZjQ4ZmIxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTQge1xcbiAgYmFja2dyb3VuZDogI2YwNjI5MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay01IHtcXG4gIGJhY2tncm91bmQ6ICNlYzQwN2EgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstNiB7XFxuICBiYWNrZ3JvdW5kOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTcge1xcbiAgYmFja2dyb3VuZDogI2Q4MWI2MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay04IHtcXG4gIGJhY2tncm91bmQ6ICNjMjE4NWIgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstOSB7XFxuICBiYWNrZ3JvdW5kOiAjYWQxNDU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTEwIHtcXG4gIGJhY2tncm91bmQ6ICM4ODBlNGYgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmODBhYiAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmY0MDgxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTEzIHtcXG4gIGJhY2tncm91bmQ6ICNmNTAwNTcgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstMTQge1xcbiAgYmFja2dyb3VuZDogI2M1MTE2MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctcHVycGxlIHtcXG4gIGJhY2tncm91bmQ6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0xIHtcXG4gIGJhY2tncm91bmQ6ICNmM2U1ZjUgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNlMWJlZTcgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0zIHtcXG4gIGJhY2tncm91bmQ6ICNjZTkzZDggIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS00IHtcXG4gIGJhY2tncm91bmQ6ICNiYTY4YzggIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS01IHtcXG4gIGJhY2tncm91bmQ6ICNhYjQ3YmMgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS02IHtcXG4gIGJhY2tncm91bmQ6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS03IHtcXG4gIGJhY2tncm91bmQ6ICM4ZTI0YWEgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS04IHtcXG4gIGJhY2tncm91bmQ6ICM3YjFmYTIgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS05IHtcXG4gIGJhY2tncm91bmQ6ICM2YTFiOWEgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjNGExNDhjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMTEge1xcbiAgYmFja2dyb3VuZDogI2VhODBmYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcHVycGxlLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNlMDQwZmIgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjZDUwMGY5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMTQge1xcbiAgYmFja2dyb3VuZDogI2EwZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUge1xcbiAgYmFja2dyb3VuZDogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMSB7XFxuICBiYWNrZ3JvdW5kOiAjZWRlN2Y2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNkMWM0ZTkgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTMge1xcbiAgYmFja2dyb3VuZDogI2IzOWRkYiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtNCB7XFxuICBiYWNrZ3JvdW5kOiAjOTU3NWNkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS01IHtcXG4gIGJhY2tncm91bmQ6ICM3ZTU3YzIgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTYge1xcbiAgYmFja2dyb3VuZDogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtNyB7XFxuICBiYWNrZ3JvdW5kOiAjNWUzNWIxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS04IHtcXG4gIGJhY2tncm91bmQ6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTkge1xcbiAgYmFja2dyb3VuZDogIzQ1MjdhMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMTAge1xcbiAgYmFja2dyb3VuZDogIzMxMWI5MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMTEge1xcbiAgYmFja2dyb3VuZDogI2IzODhmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMTIge1xcbiAgYmFja2dyb3VuZDogIzdjNGRmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMTMge1xcbiAgYmFja2dyb3VuZDogIzY1MWZmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMTQge1xcbiAgYmFja2dyb3VuZDogIzYyMDBlYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctaW5kaWdvIHtcXG4gIGJhY2tncm91bmQ6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0xIHtcXG4gIGJhY2tncm91bmQ6ICNlOGVhZjYgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0yIHtcXG4gIGJhY2tncm91bmQ6ICNjNWNhZTkgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0zIHtcXG4gIGJhY2tncm91bmQ6ICM5ZmE4ZGEgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby00IHtcXG4gIGJhY2tncm91bmQ6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby01IHtcXG4gIGJhY2tncm91bmQ6ICM1YzZiYzAgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby02IHtcXG4gIGJhY2tncm91bmQ6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby03IHtcXG4gIGJhY2tncm91bmQ6ICMzOTQ5YWIgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby04IHtcXG4gIGJhY2tncm91bmQ6ICMzMDNmOWYgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby05IHtcXG4gIGJhY2tncm91bmQ6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMWEyMzdlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMTEge1xcbiAgYmFja2dyb3VuZDogIzhjOWVmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctaW5kaWdvLTEyIHtcXG4gIGJhY2tncm91bmQ6ICM1MzZkZmUgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjM2Q1YWZlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMTQge1xcbiAgYmFja2dyb3VuZDogIzMwNGZmZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZSB7XFxuICBiYWNrZ3JvdW5kOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTEge1xcbiAgYmFja2dyb3VuZDogI2UzZjJmZCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtMyB7XFxuICBiYWNrZ3JvdW5kOiAjOTBjYWY5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTQge1xcbiAgYmFja2dyb3VuZDogIzY0YjVmNiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS01IHtcXG4gIGJhY2tncm91bmQ6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtNiB7XFxuICBiYWNrZ3JvdW5kOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTcge1xcbiAgYmFja2dyb3VuZDogIzFlODhlNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS04IHtcXG4gIGJhY2tncm91bmQ6ICMxOTc2ZDIgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtOSB7XFxuICBiYWNrZ3JvdW5kOiAjMTU2NWMwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMwZDQ3YTEgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtMTEge1xcbiAgYmFja2dyb3VuZDogIzgyYjFmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjNDQ4YWZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTEzIHtcXG4gIGJhY2tncm91bmQ6ICMyOTc5ZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtMTQge1xcbiAgYmFja2dyb3VuZDogIzI5NjJmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZSB7XFxuICBiYWNrZ3JvdW5kOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTEge1xcbiAgYmFja2dyb3VuZDogI2UxZjVmZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNiM2U1ZmMgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtMyB7XFxuICBiYWNrZ3JvdW5kOiAjODFkNGZhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTQge1xcbiAgYmFja2dyb3VuZDogIzRmYzNmNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS01IHtcXG4gIGJhY2tncm91bmQ6ICMyOWI2ZjYgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtNiB7XFxuICBiYWNrZ3JvdW5kOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTcge1xcbiAgYmFja2dyb3VuZDogIzAzOWJlNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS04IHtcXG4gIGJhY2tncm91bmQ6ICMwMjg4ZDEgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtOSB7XFxuICBiYWNrZ3JvdW5kOiAjMDI3N2JkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMwMTU3OWIgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtMTEge1xcbiAgYmFja2dyb3VuZDogIzgwZDhmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjNDBjNGZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTEzIHtcXG4gIGJhY2tncm91bmQ6ICMwMGIwZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtMTQge1xcbiAgYmFja2dyb3VuZDogIzAwOTFlYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbiB7XFxuICBiYWNrZ3JvdW5kOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTEge1xcbiAgYmFja2dyb3VuZDogI2UwZjdmYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi0yIHtcXG4gIGJhY2tncm91bmQ6ICNiMmViZjIgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tMyB7XFxuICBiYWNrZ3JvdW5kOiAjODBkZWVhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTQge1xcbiAgYmFja2dyb3VuZDogIzRkZDBlMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi01IHtcXG4gIGJhY2tncm91bmQ6ICMyNmM2ZGEgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tNiB7XFxuICBiYWNrZ3JvdW5kOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTcge1xcbiAgYmFja2dyb3VuZDogIzAwYWNjMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi04IHtcXG4gIGJhY2tncm91bmQ6ICMwMDk3YTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tOSB7XFxuICBiYWNrZ3JvdW5kOiAjMDA4MzhmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMwMDYwNjQgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tMTEge1xcbiAgYmFja2dyb3VuZDogIzg0ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjMThmZmZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTEzIHtcXG4gIGJhY2tncm91bmQ6ICMwMGU1ZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tMTQge1xcbiAgYmFja2dyb3VuZDogIzAwYjhkNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTEge1xcbiAgYmFja2dyb3VuZDogI2UwZjJmMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC0yIHtcXG4gIGJhY2tncm91bmQ6ICNiMmRmZGIgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtMyB7XFxuICBiYWNrZ3JvdW5kOiAjODBjYmM0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTQge1xcbiAgYmFja2dyb3VuZDogIzRkYjZhYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC01IHtcXG4gIGJhY2tncm91bmQ6ICMyNmE2OWEgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtNiB7XFxuICBiYWNrZ3JvdW5kOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTcge1xcbiAgYmFja2dyb3VuZDogIzAwODk3YiAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC04IHtcXG4gIGJhY2tncm91bmQ6ICMwMDc5NmIgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtOSB7XFxuICBiYWNrZ3JvdW5kOiAjMDA2OTVjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMwMDRkNDAgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtMTEge1xcbiAgYmFja2dyb3VuZDogI2E3ZmZlYiAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjNjRmZmRhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTEzIHtcXG4gIGJhY2tncm91bmQ6ICMxZGU5YjYgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtMTQge1xcbiAgYmFja2dyb3VuZDogIzAwYmZhNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4ge1xcbiAgYmFja2dyb3VuZDogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMSB7XFxuICBiYWNrZ3JvdW5kOiAjZThmNWU5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi0yIHtcXG4gIGJhY2tncm91bmQ6ICNjOGU2YzkgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTMge1xcbiAgYmFja2dyb3VuZDogI2E1ZDZhNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tNCB7XFxuICBiYWNrZ3JvdW5kOiAjODFjNzg0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi01IHtcXG4gIGJhY2tncm91bmQ6ICM2NmJiNmEgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTYge1xcbiAgYmFja2dyb3VuZDogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tNyB7XFxuICBiYWNrZ3JvdW5kOiAjNDNhMDQ3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi04IHtcXG4gIGJhY2tncm91bmQ6ICMzODhlM2MgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTkge1xcbiAgYmFja2dyb3VuZDogIzJlN2QzMiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMTAge1xcbiAgYmFja2dyb3VuZDogIzFiNWUyMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMTEge1xcbiAgYmFja2dyb3VuZDogI2I5ZjZjYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMTIge1xcbiAgYmFja2dyb3VuZDogIzY5ZjBhZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMTMge1xcbiAgYmFja2dyb3VuZDogIzAwZTY3NiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMTQge1xcbiAgYmFja2dyb3VuZDogIzAwYzg1MyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4ge1xcbiAgYmFja2dyb3VuZDogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMSB7XFxuICBiYWNrZ3JvdW5kOiAjZjFmOGU5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi0yIHtcXG4gIGJhY2tncm91bmQ6ICNkY2VkYzggIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTMge1xcbiAgYmFja2dyb3VuZDogI2M1ZTFhNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tNCB7XFxuICBiYWNrZ3JvdW5kOiAjYWVkNTgxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi01IHtcXG4gIGJhY2tncm91bmQ6ICM5Y2NjNjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTYge1xcbiAgYmFja2dyb3VuZDogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tNyB7XFxuICBiYWNrZ3JvdW5kOiAjN2NiMzQyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi04IHtcXG4gIGJhY2tncm91bmQ6ICM2ODlmMzggIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTkge1xcbiAgYmFja2dyb3VuZDogIzU1OGIyZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMTAge1xcbiAgYmFja2dyb3VuZDogIzMzNjkxZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMTEge1xcbiAgYmFja2dyb3VuZDogI2NjZmY5MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMTIge1xcbiAgYmFja2dyb3VuZDogI2IyZmY1OSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMTMge1xcbiAgYmFja2dyb3VuZDogIzc2ZmYwMyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMTQge1xcbiAgYmFja2dyb3VuZDogIzY0ZGQxNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZSB7XFxuICBiYWNrZ3JvdW5kOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTEge1xcbiAgYmFja2dyb3VuZDogI2Y5ZmJlNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNmMGY0YzMgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtMyB7XFxuICBiYWNrZ3JvdW5kOiAjZTZlZTljICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTQge1xcbiAgYmFja2dyb3VuZDogI2RjZTc3NSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS01IHtcXG4gIGJhY2tncm91bmQ6ICNkNGUxNTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtNiB7XFxuICBiYWNrZ3JvdW5kOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTcge1xcbiAgYmFja2dyb3VuZDogI2MwY2EzMyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS04IHtcXG4gIGJhY2tncm91bmQ6ICNhZmI0MmIgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtOSB7XFxuICBiYWNrZ3JvdW5kOiAjOWU5ZDI0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTEwIHtcXG4gIGJhY2tncm91bmQ6ICM4Mjc3MTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtMTEge1xcbiAgYmFja2dyb3VuZDogI2Y0ZmY4MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZWVmZjQxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTEzIHtcXG4gIGJhY2tncm91bmQ6ICNjNmZmMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtMTQge1xcbiAgYmFja2dyb3VuZDogI2FlZWEwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmcteWVsbG93IHtcXG4gIGJhY2tncm91bmQ6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0xIHtcXG4gIGJhY2tncm91bmQ6ICNmZmZkZTcgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0yIHtcXG4gIGJhY2tncm91bmQ6ICNmZmY5YzQgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0zIHtcXG4gIGJhY2tncm91bmQ6ICNmZmY1OWQgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy00IHtcXG4gIGJhY2tncm91bmQ6ICNmZmYxNzYgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy01IHtcXG4gIGJhY2tncm91bmQ6ICNmZmVlNTggIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy02IHtcXG4gIGJhY2tncm91bmQ6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy03IHtcXG4gIGJhY2tncm91bmQ6ICNmZGQ4MzUgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy04IHtcXG4gIGJhY2tncm91bmQ6ICNmYmMwMmQgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy05IHtcXG4gIGJhY2tncm91bmQ6ICNmOWE4MjUgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjZjU3ZjE3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmZmY4ZCAhaW1wb3J0YW50O1xcbn1cXG4uYmcteWVsbG93LTEyIHtcXG4gIGJhY2tncm91bmQ6ICNmZjAgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlYTAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMTQge1xcbiAgYmFja2dyb3VuZDogI2ZmZDYwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXIge1xcbiAgYmFja2dyb3VuZDogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmOGUxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci0yIHtcXG4gIGJhY2tncm91bmQ6ICNmZmVjYjMgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTMge1xcbiAgYmFja2dyb3VuZDogI2ZmZTA4MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItNCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZkNTRmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci01IHtcXG4gIGJhY2tncm91bmQ6ICNmZmNhMjggIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTYge1xcbiAgYmFja2dyb3VuZDogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItNyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZiMzAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci04IHtcXG4gIGJhY2tncm91bmQ6ICNmZmEwMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTkge1xcbiAgYmFja2dyb3VuZDogI2ZmOGYwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMTAge1xcbiAgYmFja2dyb3VuZDogI2ZmNmYwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmZTU3ZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMTIge1xcbiAgYmFja2dyb3VuZDogI2ZmZDc0MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMTMge1xcbiAgYmFja2dyb3VuZDogI2ZmYzQwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMTQge1xcbiAgYmFja2dyb3VuZDogI2ZmYWIwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctb3JhbmdlIHtcXG4gIGJhY2tncm91bmQ6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0xIHtcXG4gIGJhY2tncm91bmQ6ICNmZmYzZTAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNmZmUwYjIgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0zIHtcXG4gIGJhY2tncm91bmQ6ICNmZmNjODAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS00IHtcXG4gIGJhY2tncm91bmQ6ICNmZmI3NGQgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS01IHtcXG4gIGJhY2tncm91bmQ6ICNmZmE3MjYgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS02IHtcXG4gIGJhY2tncm91bmQ6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS03IHtcXG4gIGJhY2tncm91bmQ6ICNmYjhjMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS04IHtcXG4gIGJhY2tncm91bmQ6ICNmNTdjMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS05IHtcXG4gIGJhY2tncm91bmQ6ICNlZjZjMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjZTY1MTAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmZDE4MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctb3JhbmdlLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNmZmFiNDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjZmY5MTAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMTQge1xcbiAgYmFja2dyb3VuZDogI2ZmNmQwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2Uge1xcbiAgYmFja2dyb3VuZDogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMSB7XFxuICBiYWNrZ3JvdW5kOiAjZmJlOWU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS0yIHtcXG4gIGJhY2tncm91bmQ6ICNmZmNjYmMgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTMge1xcbiAgYmFja2dyb3VuZDogI2ZmYWI5MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtNCB7XFxuICBiYWNrZ3JvdW5kOiAjZmY4YTY1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS01IHtcXG4gIGJhY2tncm91bmQ6ICNmZjcwNDMgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTYge1xcbiAgYmFja2dyb3VuZDogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtNyB7XFxuICBiYWNrZ3JvdW5kOiAjZjQ1MTFlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS04IHtcXG4gIGJhY2tncm91bmQ6ICNlNjRhMTkgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTkge1xcbiAgYmFja2dyb3VuZDogI2Q4NDMxNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMTAge1xcbiAgYmFja2dyb3VuZDogI2JmMzYwYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMTEge1xcbiAgYmFja2dyb3VuZDogI2ZmOWU4MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMTIge1xcbiAgYmFja2dyb3VuZDogI2ZmNmU0MCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMTMge1xcbiAgYmFja2dyb3VuZDogI2ZmM2QwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMTQge1xcbiAgYmFja2dyb3VuZDogI2RkMmMwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24ge1xcbiAgYmFja2dyb3VuZDogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMSB7XFxuICBiYWNrZ3JvdW5kOiAjZWZlYmU5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi0yIHtcXG4gIGJhY2tncm91bmQ6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTMge1xcbiAgYmFja2dyb3VuZDogI2JjYWFhNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tNCB7XFxuICBiYWNrZ3JvdW5kOiAjYTE4ODdmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi01IHtcXG4gIGJhY2tncm91bmQ6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTYge1xcbiAgYmFja2dyb3VuZDogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tNyB7XFxuICBiYWNrZ3JvdW5kOiAjNmQ0YzQxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi04IHtcXG4gIGJhY2tncm91bmQ6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTkge1xcbiAgYmFja2dyb3VuZDogIzRlMzQyZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMTAge1xcbiAgYmFja2dyb3VuZDogIzNlMjcyMyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMTEge1xcbiAgYmFja2dyb3VuZDogI2Q3Y2NjOCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMTIge1xcbiAgYmFja2dyb3VuZDogI2JjYWFhNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMTMge1xcbiAgYmFja2dyb3VuZDogIzhkNmU2MyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMTQge1xcbiAgYmFja2dyb3VuZDogIzVkNDAzNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleSB7XFxuICBiYWNrZ3JvdW5kOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTEge1xcbiAgYmFja2dyb3VuZDogI2ZhZmFmYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS0yIHtcXG4gIGJhY2tncm91bmQ6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktMyB7XFxuICBiYWNrZ3JvdW5kOiAjZWVlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTQge1xcbiAgYmFja2dyb3VuZDogI2UwZTBlMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS01IHtcXG4gIGJhY2tncm91bmQ6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktNiB7XFxuICBiYWNrZ3JvdW5kOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTcge1xcbiAgYmFja2dyb3VuZDogIzc1NzU3NSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS04IHtcXG4gIGJhY2tncm91bmQ6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktOSB7XFxuICBiYWNrZ3JvdW5kOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTEwIHtcXG4gIGJhY2tncm91bmQ6ICMyMTIxMjEgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktMTEge1xcbiAgYmFja2dyb3VuZDogI2Y1ZjVmNSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZWVlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTEzIHtcXG4gIGJhY2tncm91bmQ6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktMTQge1xcbiAgYmFja2dyb3VuZDogIzYxNjE2MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS1ncmV5IHtcXG4gIGJhY2tncm91bmQ6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0xIHtcXG4gIGJhY2tncm91bmQ6ICNlY2VmZjEgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0yIHtcXG4gIGJhY2tncm91bmQ6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0zIHtcXG4gIGJhY2tncm91bmQ6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS00IHtcXG4gIGJhY2tncm91bmQ6ICM5MGE0YWUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS01IHtcXG4gIGJhY2tncm91bmQ6ICM3ODkwOWMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS02IHtcXG4gIGJhY2tncm91bmQ6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS03IHtcXG4gIGJhY2tncm91bmQ6ICM1NDZlN2EgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS04IHtcXG4gIGJhY2tncm91bmQ6ICM0NTVhNjQgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS05IHtcXG4gIGJhY2tncm91bmQ6ICMzNzQ3NGYgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMjYzMjM4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMTEge1xcbiAgYmFja2dyb3VuZDogI2NmZDhkYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS1ncmV5LTEyIHtcXG4gIGJhY2tncm91bmQ6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMTQge1xcbiAgYmFja2dyb3VuZDogIzQ1NWE2NCAhaW1wb3J0YW50O1xcbn1cXG4uc2hhZG93LXRyYW5zaXRpb24ge1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpICFpbXBvcnRhbnQ7XFxufVxcbi5zaGFkb3ctMSB7XFxuICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjIpLCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xIHtcXG4gIGJveC1zaGFkb3c6IDAgLTFweCAzcHggcmdiYSgwLDAsMCwwLjIpLCAwIC0xcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTJweCAxcHggLTFweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTIge1xcbiAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMiB7XFxuICBib3gtc2hhZG93OiAwIC0xcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0zcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0zIHtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDhweCByZ2JhKDAsMCwwLDAuMiksIDAgM3B4IDRweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAzcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTMge1xcbiAgYm94LXNoYWRvdzogMCAtMXB4IDhweCByZ2JhKDAsMCwwLDAuMiksIDAgLTNweCA0cHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtM3B4IDNweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctNCB7XFxuICBib3gtc2hhZG93OiAwIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLDAuMiksIDAgNHB4IDVweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDFweCAxMHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtNCB7XFxuICBib3gtc2hhZG93OiAwIC0ycHggNHB4IC0xcHggcmdiYSgwLDAsMCwwLjIpLCAwIC00cHggNXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTFweCAxMHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctNSB7XFxuICBib3gtc2hhZG93OiAwIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLDAuMiksIDAgNXB4IDhweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDFweCAxNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtNSB7XFxuICBib3gtc2hhZG93OiAwIC0zcHggNXB4IC0xcHggcmdiYSgwLDAsMCwwLjIpLCAwIC01cHggOHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTFweCAxNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctNiB7XFxuICBib3gtc2hhZG93OiAwIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLDAuMiksIDAgNnB4IDEwcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAxcHggMThweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTYge1xcbiAgYm94LXNoYWRvdzogMCAtM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtNnB4IDEwcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtMXB4IDE4cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy03IHtcXG4gIGJveC1zaGFkb3c6IDAgNHB4IDVweCAtMnB4IHJnYmEoMCwwLDAsMC4yKSwgMCA3cHggMTBweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAycHggMTZweCAxcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC03IHtcXG4gIGJveC1zaGFkb3c6IDAgLTRweCA1cHggLTJweCByZ2JhKDAsMCwwLDAuMiksIDAgLTdweCAxMHB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0ycHggMTZweCAxcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy04IHtcXG4gIGJveC1zaGFkb3c6IDAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC04IHtcXG4gIGJveC1zaGFkb3c6IDAgLTVweCA1cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgLThweCAxMHB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0zcHggMTRweCAycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy05IHtcXG4gIGJveC1zaGFkb3c6IDAgNXB4IDZweCAtM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCA5cHggMTJweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMTZweCAycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC05IHtcXG4gIGJveC1zaGFkb3c6IDAgLTVweCA2cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgLTlweCAxMnB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0zcHggMTZweCAycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xMCB7XFxuICBib3gtc2hhZG93OiAwIDZweCA2cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDRweCAxOHB4IDNweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTEwIHtcXG4gIGJveC1zaGFkb3c6IDAgLTZweCA2cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgLTEwcHggMTRweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNHB4IDE4cHggM3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTEge1xcbiAgYm94LXNoYWRvdzogMCA2cHggN3B4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIDExcHggMTVweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCA0cHggMjBweCAzcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xMSB7XFxuICBib3gtc2hhZG93OiAwIC02cHggN3B4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0xMXB4IDE1cHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTRweCAyMHB4IDNweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTEyIHtcXG4gIGJveC1zaGFkb3c6IDAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNXB4IDIycHggNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTIge1xcbiAgYm94LXNoYWRvdzogMCAtN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC01cHggMjJweCA0cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xMyB7XFxuICBib3gtc2hhZG93OiAwIDdweCA4cHggLTRweCByZ2JhKDAsMCwwLDAuMiksIDAgMTNweCAxOXB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDVweCAyNHB4IDRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTEzIHtcXG4gIGJveC1zaGFkb3c6IDAgLTdweCA4cHggLTRweCByZ2JhKDAsMCwwLDAuMiksIDAgLTEzcHggMTlweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNXB4IDI0cHggNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTQge1xcbiAgYm94LXNoYWRvdzogMCA3cHggOXB4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIDE0cHggMjFweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA1cHggMjZweCA0cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xNCB7XFxuICBib3gtc2hhZG93OiAwIC03cHggOXB4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0xNHB4IDIxcHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTVweCAyNnB4IDRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTE1IHtcXG4gIGJveC1zaGFkb3c6IDAgOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxNXB4IDIycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNnB4IDI4cHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTUge1xcbiAgYm94LXNoYWRvdzogMCAtOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC02cHggMjhweCA1cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xNiB7XFxuICBib3gtc2hhZG93OiAwIDhweCAxMHB4IC01cHggcmdiYSgwLDAsMCwwLjIpLCAwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA2cHggMzBweCA1cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xNiB7XFxuICBib3gtc2hhZG93OiAwIC04cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTZweCAyNHB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC02cHggMzBweCA1cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xNyB7XFxuICBib3gtc2hhZG93OiAwIDhweCAxMXB4IC01cHggcmdiYSgwLDAsMCwwLjIpLCAwIDE3cHggMjZweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA2cHggMzJweCA1cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xNyB7XFxuICBib3gtc2hhZG93OiAwIC04cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTdweCAyNnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC02cHggMzJweCA1cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xOCB7XFxuICBib3gtc2hhZG93OiAwIDlweCAxMXB4IC01cHggcmdiYSgwLDAsMCwwLjIpLCAwIDE4cHggMjhweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA3cHggMzRweCA2cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xOCB7XFxuICBib3gtc2hhZG93OiAwIC05cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMThweCAyOHB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC03cHggMzRweCA2cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xOSB7XFxuICBib3gtc2hhZG93OiAwIDlweCAxMnB4IC02cHggcmdiYSgwLDAsMCwwLjIpLCAwIDE5cHggMjlweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA3cHggMzZweCA2cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xOSB7XFxuICBib3gtc2hhZG93OiAwIC05cHggMTJweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTlweCAyOXB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC03cHggMzZweCA2cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0yMCB7XFxuICBib3gtc2hhZG93OiAwIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAyMHB4IDMxcHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgOHB4IDM4cHggN3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMjAge1xcbiAgYm94LXNoYWRvdzogMCAtMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0yMHB4IDMxcHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgLThweCAzOHB4IDdweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTIxIHtcXG4gIGJveC1zaGFkb3c6IDAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwwLjIpLCAwIDIxcHggMzNweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCA4cHggNDBweCA3cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0yMSB7XFxuICBib3gtc2hhZG93OiAwIC0xMHB4IDEzcHggLTZweCByZ2JhKDAsMCwwLDAuMiksIDAgLTIxcHggMzNweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtOHB4IDQwcHggN3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMjIge1xcbiAgYm94LXNoYWRvdzogMCAxMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLDAuMiksIDAgMjJweCAzNXB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDhweCA0MnB4IDdweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTIyIHtcXG4gIGJveC1zaGFkb3c6IDAgLTEwcHggMTRweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMjJweCAzNXB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC04cHggNDJweCA3cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0yMyB7XFxuICBib3gtc2hhZG93OiAwIDExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAyM3B4IDM2cHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgOXB4IDQ0cHggOHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMjMge1xcbiAgYm94LXNoYWRvdzogMCAtMTFweCAxNHB4IC03cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0yM3B4IDM2cHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTlweCA0NHB4IDhweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTI0IHtcXG4gIGJveC1zaGFkb3c6IDAgMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwwLjIpLCAwIDI0cHggMzhweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCA5cHggNDZweCA4cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0yNCB7XFxuICBib3gtc2hhZG93OiAwIC0xMXB4IDE1cHggLTdweCByZ2JhKDAsMCwwLDAuMiksIDAgLTI0cHggMzhweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtOXB4IDQ2cHggOHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5uby1zaGFkb3csXFxuLnNoYWRvdy0wIHtcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmluc2V0LXNoYWRvdyB7XFxuICBib3gtc2hhZG93OiAwIDdweCA5cHggLTdweCByZ2JhKDAsMCwwLDAuNykgaW5zZXQgIWltcG9ydGFudDtcXG59XFxuLnotbWFyZ2luYWxzIHtcXG4gIHotaW5kZXg6IDIwMDA7XFxufVxcbi56LW5vdGlmeSB7XFxuICB6LWluZGV4OiA5NTAwO1xcbn1cXG4uei1mdWxsc2NyZWVuIHtcXG4gIHotaW5kZXg6IDYwMDA7XFxufVxcbi56LWluaGVyaXQge1xcbiAgei1pbmRleDogaW5oZXJpdCAhaW1wb3J0YW50O1xcbn1cXG4ucm93LFxcbi5jb2x1bW4sXFxuLmZsZXgge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XFxufVxcbi5yb3cuaW5saW5lLFxcbi5jb2x1bW4uaW5saW5lLFxcbi5mbGV4LmlubGluZSB7XFxuICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG59XFxuLnJvdy5yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcbi5jb2x1bW4ge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG4uY29sdW1uLnJldmVyc2Uge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcXG59XFxuLndyYXAge1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XFxufVxcbi5uby13cmFwIHtcXG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcXG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG59XFxuLnJldmVyc2Utd3JhcCB7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XFxuICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XFxufVxcbi5vcmRlci1maXJzdCB7XFxuICAtbXMtZmxleC1vcmRlcjogLTEwMDAwO1xcbiAgICAgIG9yZGVyOiAtMTAwMDA7XFxufVxcbi5vcmRlci1sYXN0IHtcXG4gIC1tcy1mbGV4LW9yZGVyOiAxMDAwMDtcXG4gICAgICBvcmRlcjogMTAwMDA7XFxufVxcbi5vcmRlci1ub25lIHtcXG4gIC1tcy1mbGV4LW9yZGVyOiAwO1xcbiAgICAgIG9yZGVyOiAwO1xcbn1cXG4uanVzdGlmeS1zdGFydCB7XFxuICAtbXMtZmxleC1wYWNrOiBzdGFydDtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcbi5qdXN0aWZ5LWVuZCB7XFxuICAtbXMtZmxleC1wYWNrOiBlbmQ7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuLmp1c3RpZnktY2VudGVyLFxcbi5mbGV4LWNlbnRlciB7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5qdXN0aWZ5LWJldHdlZW4ge1xcbiAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi5qdXN0aWZ5LWFyb3VuZCB7XFxuICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbn1cXG4uaXRlbXMtc3RhcnQge1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG4uaXRlbXMtZW5kIHtcXG4gIC1tcy1mbGV4LWFsaWduOiBlbmQ7XFxuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbn1cXG4uaXRlbXMtY2VudGVyLFxcbi5mbGV4LWNlbnRlciB7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5pdGVtcy1iYXNlbGluZSB7XFxuICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmU7XFxuICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xcbn1cXG4uaXRlbXMtc3RyZXRjaCB7XFxuICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaDtcXG4gICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcXG59XFxuLmNvbnRlbnQtc3RhcnQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDtcXG4gICAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbn1cXG4uY29udGVudC1lbmQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7XFxuICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7XFxufVxcbi5jb250ZW50LWNlbnRlciB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjtcXG4gICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5jb250ZW50LXN0cmV0Y2gge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdHJldGNoO1xcbiAgICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7XFxufVxcbi5jb250ZW50LWJldHdlZW4ge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5O1xcbiAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi5jb250ZW50LWFyb3VuZCB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7XFxuICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kO1xcbn1cXG4uc2VsZi1zdGFydCB7XFxuICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdGFydDtcXG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xcbn1cXG4uc2VsZi1lbmQge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogZW5kO1xcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xcbn1cXG4uc2VsZi1jZW50ZXIge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyO1xcbiAgICAgIC1tcy1ncmlkLXJvdy1hbGlnbjogY2VudGVyO1xcbiAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcXG59XFxuLnNlbGYtYmFzZWxpbmUge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYmFzZWxpbmU7XFxuICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7XFxufVxcbi5zZWxmLXN0cmV0Y2gge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RyZXRjaDtcXG4gICAgICAtbXMtZ3JpZC1yb3ctYWxpZ246IHN0cmV0Y2g7XFxuICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcXG59XFxuLmd1dHRlci14LW5vbmUsXFxuLmd1dHRlci1ub25lIHtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG4uZ3V0dGVyLXgtbm9uZSA+IGRpdixcXG4uZ3V0dGVyLW5vbmUgPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG4uZ3V0dGVyLXktbm9uZSxcXG4uZ3V0dGVyLW5vbmUge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLmd1dHRlci15LW5vbmUgPiBkaXYsXFxuLmd1dHRlci1ub25lID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4uZ3V0dGVyLXgteHMsXFxuLmd1dHRlci14cyB7XFxuICBtYXJnaW4tbGVmdDogLThweDtcXG59XFxuLmd1dHRlci14LXhzID4gZGl2LFxcbi5ndXR0ZXIteHMgPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XFxufVxcbi5ndXR0ZXIteS14cyxcXG4uZ3V0dGVyLXhzIHtcXG4gIG1hcmdpbi10b3A6IC04cHg7XFxufVxcbi5ndXR0ZXIteS14cyA+IGRpdixcXG4uZ3V0dGVyLXhzID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiA4cHg7XFxufVxcbi5ndXR0ZXIteC1zbSxcXG4uZ3V0dGVyLXNtIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG59XFxuLmd1dHRlci14LXNtID4gZGl2LFxcbi5ndXR0ZXItc20gPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xcbn1cXG4uZ3V0dGVyLXktc20sXFxuLmd1dHRlci1zbSB7XFxuICBtYXJnaW4tdG9wOiAtMTZweDtcXG59XFxuLmd1dHRlci15LXNtID4gZGl2LFxcbi5ndXR0ZXItc20gPiBkaXYge1xcbiAgcGFkZGluZy10b3A6IDE2cHg7XFxufVxcbi5ndXR0ZXIteC1tZCxcXG4uZ3V0dGVyLW1kIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMzJweDtcXG59XFxuLmd1dHRlci14LW1kID4gZGl2LFxcbi5ndXR0ZXItbWQgPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiAzMnB4O1xcbn1cXG4uZ3V0dGVyLXktbWQsXFxuLmd1dHRlci1tZCB7XFxuICBtYXJnaW4tdG9wOiAtMzJweDtcXG59XFxuLmd1dHRlci15LW1kID4gZGl2LFxcbi5ndXR0ZXItbWQgPiBkaXYge1xcbiAgcGFkZGluZy10b3A6IDMycHg7XFxufVxcbi5ndXR0ZXIteC1sZyxcXG4uZ3V0dGVyLWxnIHtcXG4gIG1hcmdpbi1sZWZ0OiAtNDhweDtcXG59XFxuLmd1dHRlci14LWxnID4gZGl2LFxcbi5ndXR0ZXItbGcgPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiA0OHB4O1xcbn1cXG4uZ3V0dGVyLXktbGcsXFxuLmd1dHRlci1sZyB7XFxuICBtYXJnaW4tdG9wOiAtNDhweDtcXG59XFxuLmd1dHRlci15LWxnID4gZGl2LFxcbi5ndXR0ZXItbGcgPiBkaXYge1xcbiAgcGFkZGluZy10b3A6IDQ4cHg7XFxufVxcbi5ndXR0ZXIteC14bCxcXG4uZ3V0dGVyLXhsIHtcXG4gIG1hcmdpbi1sZWZ0OiAtNjRweDtcXG59XFxuLmd1dHRlci14LXhsID4gZGl2LFxcbi5ndXR0ZXIteGwgPiBkaXYge1xcbiAgcGFkZGluZy1sZWZ0OiA2NHB4O1xcbn1cXG4uZ3V0dGVyLXkteGwsXFxuLmd1dHRlci14bCB7XFxuICBtYXJnaW4tdG9wOiAtNjRweDtcXG59XFxuLmd1dHRlci15LXhsID4gZGl2LFxcbi5ndXR0ZXIteGwgPiBkaXYge1xcbiAgcGFkZGluZy10b3A6IDY0cHg7XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAwKSB7XFxuICAucm93ID4gLmNvbCxcXG4gIC5yb3cgPiAuY29sLXhzLFxcbiAgLnJvdyA+IC5jb2wtYXV0byxcXG4gIC5yb3cgPiAuY29sLXhzLWF1dG8sXFxuICAucm93ID4gLmNvbC1ncm93LFxcbiAgLnJvdyA+IC5jb2wteHMtZ3JvdyxcXG4gIC5yb3cgPiAuY29sLTAsXFxuICAucm93ID4gLmNvbC14cy0wLFxcbiAgLnJvdyA+IC5jb2wtMSxcXG4gIC5yb3cgPiAuY29sLXhzLTEsXFxuICAucm93ID4gLmNvbC0yLFxcbiAgLnJvdyA+IC5jb2wteHMtMixcXG4gIC5yb3cgPiAuY29sLTMsXFxuICAucm93ID4gLmNvbC14cy0zLFxcbiAgLnJvdyA+IC5jb2wtNCxcXG4gIC5yb3cgPiAuY29sLXhzLTQsXFxuICAucm93ID4gLmNvbC01LFxcbiAgLnJvdyA+IC5jb2wteHMtNSxcXG4gIC5yb3cgPiAuY29sLTYsXFxuICAucm93ID4gLmNvbC14cy02LFxcbiAgLnJvdyA+IC5jb2wtNyxcXG4gIC5yb3cgPiAuY29sLXhzLTcsXFxuICAucm93ID4gLmNvbC04LFxcbiAgLnJvdyA+IC5jb2wteHMtOCxcXG4gIC5yb3cgPiAuY29sLTksXFxuICAucm93ID4gLmNvbC14cy05LFxcbiAgLnJvdyA+IC5jb2wtMTAsXFxuICAucm93ID4gLmNvbC14cy0xMCxcXG4gIC5yb3cgPiAuY29sLTExLFxcbiAgLnJvdyA+IC5jb2wteHMtMTEsXFxuICAucm93ID4gLmNvbC0xMixcXG4gIC5yb3cgPiAuY29sLXhzLTEyLFxcbiAgLmZsZXggPiAuY29sLFxcbiAgLmZsZXggPiAuY29sLXhzLFxcbiAgLmZsZXggPiAuY29sLWF1dG8sXFxuICAuZmxleCA+IC5jb2wteHMtYXV0byxcXG4gIC5mbGV4ID4gLmNvbC1ncm93LFxcbiAgLmZsZXggPiAuY29sLXhzLWdyb3csXFxuICAuZmxleCA+IC5jb2wtMCxcXG4gIC5mbGV4ID4gLmNvbC14cy0wLFxcbiAgLmZsZXggPiAuY29sLTEsXFxuICAuZmxleCA+IC5jb2wteHMtMSxcXG4gIC5mbGV4ID4gLmNvbC0yLFxcbiAgLmZsZXggPiAuY29sLXhzLTIsXFxuICAuZmxleCA+IC5jb2wtMyxcXG4gIC5mbGV4ID4gLmNvbC14cy0zLFxcbiAgLmZsZXggPiAuY29sLTQsXFxuICAuZmxleCA+IC5jb2wteHMtNCxcXG4gIC5mbGV4ID4gLmNvbC01LFxcbiAgLmZsZXggPiAuY29sLXhzLTUsXFxuICAuZmxleCA+IC5jb2wtNixcXG4gIC5mbGV4ID4gLmNvbC14cy02LFxcbiAgLmZsZXggPiAuY29sLTcsXFxuICAuZmxleCA+IC5jb2wteHMtNyxcXG4gIC5mbGV4ID4gLmNvbC04LFxcbiAgLmZsZXggPiAuY29sLXhzLTgsXFxuICAuZmxleCA+IC5jb2wtOSxcXG4gIC5mbGV4ID4gLmNvbC14cy05LFxcbiAgLmZsZXggPiAuY29sLTEwLFxcbiAgLmZsZXggPiAuY29sLXhzLTEwLFxcbiAgLmZsZXggPiAuY29sLTExLFxcbiAgLmZsZXggPiAuY29sLXhzLTExLFxcbiAgLmZsZXggPiAuY29sLTEyLFxcbiAgLmZsZXggPiAuY29sLXhzLTEyIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1pbi13aWR0aDogMDtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wsXFxuICAuY29sdW1uID4gLmNvbC14cyxcXG4gIC5jb2x1bW4gPiAuY29sLWF1dG8sXFxuICAuY29sdW1uID4gLmNvbC14cy1hdXRvLFxcbiAgLmNvbHVtbiA+IC5jb2wtZ3JvdyxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLWdyb3csXFxuICAuY29sdW1uID4gLmNvbC0wLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMCxcXG4gIC5jb2x1bW4gPiAuY29sLTEsXFxuICAuY29sdW1uID4gLmNvbC14cy0xLFxcbiAgLmNvbHVtbiA+IC5jb2wtMixcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTIsXFxuICAuY29sdW1uID4gLmNvbC0zLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMyxcXG4gIC5jb2x1bW4gPiAuY29sLTQsXFxuICAuY29sdW1uID4gLmNvbC14cy00LFxcbiAgLmNvbHVtbiA+IC5jb2wtNSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTUsXFxuICAuY29sdW1uID4gLmNvbC02LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtNixcXG4gIC5jb2x1bW4gPiAuY29sLTcsXFxuICAuY29sdW1uID4gLmNvbC14cy03LFxcbiAgLmNvbHVtbiA+IC5jb2wtOCxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTgsXFxuICAuY29sdW1uID4gLmNvbC05LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtOSxcXG4gIC5jb2x1bW4gPiAuY29sLTEwLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMTAsXFxuICAuY29sdW1uID4gLmNvbC0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTExLFxcbiAgLmNvbHVtbiA+IC5jb2wtMTIsXFxuICAuY29sdW1uID4gLmNvbC14cy0xMixcXG4gIC5mbGV4ID4gLmNvbCxcXG4gIC5mbGV4ID4gLmNvbC14cyxcXG4gIC5mbGV4ID4gLmNvbC1hdXRvLFxcbiAgLmZsZXggPiAuY29sLXhzLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC14cy1ncm93LFxcbiAgLmZsZXggPiAuY29sLTAsXFxuICAuZmxleCA+IC5jb2wteHMtMCxcXG4gIC5mbGV4ID4gLmNvbC0xLFxcbiAgLmZsZXggPiAuY29sLXhzLTEsXFxuICAuZmxleCA+IC5jb2wtMixcXG4gIC5mbGV4ID4gLmNvbC14cy0yLFxcbiAgLmZsZXggPiAuY29sLTMsXFxuICAuZmxleCA+IC5jb2wteHMtMyxcXG4gIC5mbGV4ID4gLmNvbC00LFxcbiAgLmZsZXggPiAuY29sLXhzLTQsXFxuICAuZmxleCA+IC5jb2wtNSxcXG4gIC5mbGV4ID4gLmNvbC14cy01LFxcbiAgLmZsZXggPiAuY29sLTYsXFxuICAuZmxleCA+IC5jb2wteHMtNixcXG4gIC5mbGV4ID4gLmNvbC03LFxcbiAgLmZsZXggPiAuY29sLXhzLTcsXFxuICAuZmxleCA+IC5jb2wtOCxcXG4gIC5mbGV4ID4gLmNvbC14cy04LFxcbiAgLmZsZXggPiAuY29sLTksXFxuICAuZmxleCA+IC5jb2wteHMtOSxcXG4gIC5mbGV4ID4gLmNvbC0xMCxcXG4gIC5mbGV4ID4gLmNvbC14cy0xMCxcXG4gIC5mbGV4ID4gLmNvbC0xMSxcXG4gIC5mbGV4ID4gLmNvbC14cy0xMSxcXG4gIC5mbGV4ID4gLmNvbC0xMixcXG4gIC5mbGV4ID4gLmNvbC14cy0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgbWluLWhlaWdodDogMDtcXG4gICAgbWF4LWhlaWdodDogMTAwJTtcXG4gIH1cXG4gIC5jb2wsXFxuICAuY29sLXhzIHtcXG4gICAgLW1zLWZsZXg6IDEwMDAwIDEgMCU7XFxuICAgICAgICBmbGV4OiAxMDAwMCAxIDAlO1xcbiAgfVxcbiAgLmNvbC1hdXRvLFxcbiAgLmNvbC14cy1hdXRvLFxcbiAgLmNvbC0wLFxcbiAgLmNvbC14cy0wLFxcbiAgLmNvbC0xLFxcbiAgLmNvbC14cy0xLFxcbiAgLmNvbC0yLFxcbiAgLmNvbC14cy0yLFxcbiAgLmNvbC0zLFxcbiAgLmNvbC14cy0zLFxcbiAgLmNvbC00LFxcbiAgLmNvbC14cy00LFxcbiAgLmNvbC01LFxcbiAgLmNvbC14cy01LFxcbiAgLmNvbC02LFxcbiAgLmNvbC14cy02LFxcbiAgLmNvbC03LFxcbiAgLmNvbC14cy03LFxcbiAgLmNvbC04LFxcbiAgLmNvbC14cy04LFxcbiAgLmNvbC05LFxcbiAgLmNvbC14cy05LFxcbiAgLmNvbC0xMCxcXG4gIC5jb2wteHMtMTAsXFxuICAuY29sLTExLFxcbiAgLmNvbC14cy0xMSxcXG4gIC5jb2wtMTIsXFxuICAuY29sLXhzLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMCAwIGF1dG87XFxuICB9XFxuICAuY29sLWdyb3csXFxuICAuY29sLXhzLWdyb3cge1xcbiAgICAtbXMtZmxleDogMSAwIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDAgYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTAsXFxuICAucm93ID4gLmNvbC14cy0wIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC0wLFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTAsXFxuICAuY29sdW1uID4gLmNvbC14cy0wIHtcXG4gICAgaGVpZ2h0OiAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC0xLFxcbiAgLnJvdyA+IC5jb2wteHMtMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC0xLFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtMSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTEge1xcbiAgICBoZWlnaHQ6IDguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtMixcXG4gIC5yb3cgPiAuY29sLXhzLTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxNi42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTIsXFxuICAucm93ID4gLm9mZnNldC14cy0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtMixcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTIge1xcbiAgICBoZWlnaHQ6IDE2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTMsXFxuICAucm93ID4gLmNvbC14cy0zIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMjUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMyxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtMyxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTMge1xcbiAgICBoZWlnaHQ6IDI1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC00LFxcbiAgLnJvdyA+IC5jb2wteHMtNCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtNCxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC00LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtNCB7XFxuICAgIGhlaWdodDogMzMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtNSxcXG4gIC5yb3cgPiAuY29sLXhzLTUge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA0MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTUsXFxuICAucm93ID4gLm9mZnNldC14cy01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtNSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTUge1xcbiAgICBoZWlnaHQ6IDQxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTYsXFxuICAucm93ID4gLmNvbC14cy02IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtNixcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtNixcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTYge1xcbiAgICBoZWlnaHQ6IDUwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC03LFxcbiAgLnJvdyA+IC5jb2wteHMtNyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtNyxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC03LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtNyB7XFxuICAgIGhlaWdodDogNTguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtOCxcXG4gIC5yb3cgPiAuY29sLXhzLTgge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTgsXFxuICAucm93ID4gLm9mZnNldC14cy04IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtOCxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTgge1xcbiAgICBoZWlnaHQ6IDY2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTksXFxuICAucm93ID4gLmNvbC14cy05IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNzUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtOSxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtOSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTkge1xcbiAgICBoZWlnaHQ6IDc1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC0xMCxcXG4gIC5yb3cgPiAuY29sLXhzLTEwIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogODMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC0xMCxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtMTAsXFxuICAuY29sdW1uID4gLmNvbC14cy0xMCB7XFxuICAgIGhlaWdodDogODMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtMTEsXFxuICAucm93ID4gLmNvbC14cy0xMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDkxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMTEsXFxuICAucm93ID4gLm9mZnNldC14cy0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTExLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMTEge1xcbiAgICBoZWlnaHQ6IDkxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTEyLFxcbiAgLnJvdyA+IC5jb2wteHMtMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMTIsXFxuICAucm93ID4gLm9mZnNldC14cy0xMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtMTIsXFxuICAuY29sdW1uID4gLmNvbC14cy0xMiB7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLnJvdyA+IC5jb2wtc20sXFxuICAucm93ID4gLmNvbC1zbS1hdXRvLFxcbiAgLnJvdyA+IC5jb2wtc20tZ3JvdyxcXG4gIC5yb3cgPiAuY29sLXNtLTAsXFxuICAucm93ID4gLmNvbC1zbS0xLFxcbiAgLnJvdyA+IC5jb2wtc20tMixcXG4gIC5yb3cgPiAuY29sLXNtLTMsXFxuICAucm93ID4gLmNvbC1zbS00LFxcbiAgLnJvdyA+IC5jb2wtc20tNSxcXG4gIC5yb3cgPiAuY29sLXNtLTYsXFxuICAucm93ID4gLmNvbC1zbS03LFxcbiAgLnJvdyA+IC5jb2wtc20tOCxcXG4gIC5yb3cgPiAuY29sLXNtLTksXFxuICAucm93ID4gLmNvbC1zbS0xMCxcXG4gIC5yb3cgPiAuY29sLXNtLTExLFxcbiAgLnJvdyA+IC5jb2wtc20tMTIsXFxuICAuZmxleCA+IC5jb2wtc20sXFxuICAuZmxleCA+IC5jb2wtc20tYXV0byxcXG4gIC5mbGV4ID4gLmNvbC1zbS1ncm93LFxcbiAgLmZsZXggPiAuY29sLXNtLTAsXFxuICAuZmxleCA+IC5jb2wtc20tMSxcXG4gIC5mbGV4ID4gLmNvbC1zbS0yLFxcbiAgLmZsZXggPiAuY29sLXNtLTMsXFxuICAuZmxleCA+IC5jb2wtc20tNCxcXG4gIC5mbGV4ID4gLmNvbC1zbS01LFxcbiAgLmZsZXggPiAuY29sLXNtLTYsXFxuICAuZmxleCA+IC5jb2wtc20tNyxcXG4gIC5mbGV4ID4gLmNvbC1zbS04LFxcbiAgLmZsZXggPiAuY29sLXNtLTksXFxuICAuZmxleCA+IC5jb2wtc20tMTAsXFxuICAuZmxleCA+IC5jb2wtc20tMTEsXFxuICAuZmxleCA+IC5jb2wtc20tMTIge1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgbWluLXdpZHRoOiAwO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbSxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLWF1dG8sXFxuICAuY29sdW1uID4gLmNvbC1zbS1ncm93LFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMCxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTEsXFxuICAuY29sdW1uID4gLmNvbC1zbS0yLFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMyxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTQsXFxuICAuY29sdW1uID4gLmNvbC1zbS01LFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNixcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTcsXFxuICAuY29sdW1uID4gLmNvbC1zbS04LFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tOSxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTEwLFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMTEsXFxuICAuY29sdW1uID4gLmNvbC1zbS0xMixcXG4gIC5mbGV4ID4gLmNvbC1zbSxcXG4gIC5mbGV4ID4gLmNvbC1zbS1hdXRvLFxcbiAgLmZsZXggPiAuY29sLXNtLWdyb3csXFxuICAuZmxleCA+IC5jb2wtc20tMCxcXG4gIC5mbGV4ID4gLmNvbC1zbS0xLFxcbiAgLmZsZXggPiAuY29sLXNtLTIsXFxuICAuZmxleCA+IC5jb2wtc20tMyxcXG4gIC5mbGV4ID4gLmNvbC1zbS00LFxcbiAgLmZsZXggPiAuY29sLXNtLTUsXFxuICAuZmxleCA+IC5jb2wtc20tNixcXG4gIC5mbGV4ID4gLmNvbC1zbS03LFxcbiAgLmZsZXggPiAuY29sLXNtLTgsXFxuICAuZmxleCA+IC5jb2wtc20tOSxcXG4gIC5mbGV4ID4gLmNvbC1zbS0xMCxcXG4gIC5mbGV4ID4gLmNvbC1zbS0xMSxcXG4gIC5mbGV4ID4gLmNvbC1zbS0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgbWluLWhlaWdodDogMDtcXG4gICAgbWF4LWhlaWdodDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtc20ge1xcbiAgICAtbXMtZmxleDogMTAwMDAgMSAwJTtcXG4gICAgICAgIGZsZXg6IDEwMDAwIDEgMCU7XFxuICB9XFxuICAuY29sLXNtLWF1dG8sXFxuICAuY29sLXNtLTAsXFxuICAuY29sLXNtLTEsXFxuICAuY29sLXNtLTIsXFxuICAuY29sLXNtLTMsXFxuICAuY29sLXNtLTQsXFxuICAuY29sLXNtLTUsXFxuICAuY29sLXNtLTYsXFxuICAuY29sLXNtLTcsXFxuICAuY29sLXNtLTgsXFxuICAuY29sLXNtLTksXFxuICAuY29sLXNtLTEwLFxcbiAgLmNvbC1zbS0xMSxcXG4gIC5jb2wtc20tMTIge1xcbiAgICAtbXMtZmxleDogMCAwIGF1dG87XFxuICAgICAgICBmbGV4OiAwIDAgYXV0bztcXG4gIH1cXG4gIC5jb2wtc20tZ3JvdyB7XFxuICAgIC1tcy1mbGV4OiAxIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDEgMCBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTAge1xcbiAgICBoZWlnaHQ6IDAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMSB7XFxuICAgIGhlaWdodDogOC4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS0yIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMiB7XFxuICAgIGhlaWdodDogMTYuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tMyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMyB7XFxuICAgIGhlaWdodDogMjUlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTQge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS00IHtcXG4gICAgaGVpZ2h0OiAzMy4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS01IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNDEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNSB7XFxuICAgIGhlaWdodDogNDEuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tNiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNiB7XFxuICAgIGhlaWdodDogNTAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTcge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS03IHtcXG4gICAgaGVpZ2h0OiA1OC4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS04IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNjYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS04IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tOCB7XFxuICAgIGhlaWdodDogNjYuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tOSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tOSB7XFxuICAgIGhlaWdodDogNzUlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTEwIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogODMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS0xMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTEwIHtcXG4gICAgaGVpZ2h0OiA4My4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS0xMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDkxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS0xMSB7XFxuICAgIGhlaWdodDogOTEuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTEyIHtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAucm93ID4gLmNvbC1tZCxcXG4gIC5yb3cgPiAuY29sLW1kLWF1dG8sXFxuICAucm93ID4gLmNvbC1tZC1ncm93LFxcbiAgLnJvdyA+IC5jb2wtbWQtMCxcXG4gIC5yb3cgPiAuY29sLW1kLTEsXFxuICAucm93ID4gLmNvbC1tZC0yLFxcbiAgLnJvdyA+IC5jb2wtbWQtMyxcXG4gIC5yb3cgPiAuY29sLW1kLTQsXFxuICAucm93ID4gLmNvbC1tZC01LFxcbiAgLnJvdyA+IC5jb2wtbWQtNixcXG4gIC5yb3cgPiAuY29sLW1kLTcsXFxuICAucm93ID4gLmNvbC1tZC04LFxcbiAgLnJvdyA+IC5jb2wtbWQtOSxcXG4gIC5yb3cgPiAuY29sLW1kLTEwLFxcbiAgLnJvdyA+IC5jb2wtbWQtMTEsXFxuICAucm93ID4gLmNvbC1tZC0xMixcXG4gIC5mbGV4ID4gLmNvbC1tZCxcXG4gIC5mbGV4ID4gLmNvbC1tZC1hdXRvLFxcbiAgLmZsZXggPiAuY29sLW1kLWdyb3csXFxuICAuZmxleCA+IC5jb2wtbWQtMCxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xLFxcbiAgLmZsZXggPiAuY29sLW1kLTIsXFxuICAuZmxleCA+IC5jb2wtbWQtMyxcXG4gIC5mbGV4ID4gLmNvbC1tZC00LFxcbiAgLmZsZXggPiAuY29sLW1kLTUsXFxuICAuZmxleCA+IC5jb2wtbWQtNixcXG4gIC5mbGV4ID4gLmNvbC1tZC03LFxcbiAgLmZsZXggPiAuY29sLW1kLTgsXFxuICAuZmxleCA+IC5jb2wtbWQtOSxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMCxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMSxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMiB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtaW4td2lkdGg6IDA7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtYXV0byxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLWdyb3csXFxuICAuY29sdW1uID4gLmNvbC1tZC0wLFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMSxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTIsXFxuICAuY29sdW1uID4gLmNvbC1tZC0zLFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtNCxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTUsXFxuICAuY29sdW1uID4gLmNvbC1tZC02LFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtNyxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTgsXFxuICAuY29sdW1uID4gLmNvbC1tZC05LFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMTAsXFxuICAuY29sdW1uID4gLmNvbC1tZC0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTEyLFxcbiAgLmZsZXggPiAuY29sLW1kLFxcbiAgLmZsZXggPiAuY29sLW1kLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtbWQtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC1tZC0wLFxcbiAgLmZsZXggPiAuY29sLW1kLTEsXFxuICAuZmxleCA+IC5jb2wtbWQtMixcXG4gIC5mbGV4ID4gLmNvbC1tZC0zLFxcbiAgLmZsZXggPiAuY29sLW1kLTQsXFxuICAuZmxleCA+IC5jb2wtbWQtNSxcXG4gIC5mbGV4ID4gLmNvbC1tZC02LFxcbiAgLmZsZXggPiAuY29sLW1kLTcsXFxuICAuZmxleCA+IC5jb2wtbWQtOCxcXG4gIC5mbGV4ID4gLmNvbC1tZC05LFxcbiAgLmZsZXggPiAuY29sLW1kLTEwLFxcbiAgLmZsZXggPiAuY29sLW1kLTExLFxcbiAgLmZsZXggPiAuY29sLW1kLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1tZCB7XFxuICAgIC1tcy1mbGV4OiAxMDAwMCAxIDAlO1xcbiAgICAgICAgZmxleDogMTAwMDAgMSAwJTtcXG4gIH1cXG4gIC5jb2wtbWQtYXV0byxcXG4gIC5jb2wtbWQtMCxcXG4gIC5jb2wtbWQtMSxcXG4gIC5jb2wtbWQtMixcXG4gIC5jb2wtbWQtMyxcXG4gIC5jb2wtbWQtNCxcXG4gIC5jb2wtbWQtNSxcXG4gIC5jb2wtbWQtNixcXG4gIC5jb2wtbWQtNyxcXG4gIC5jb2wtbWQtOCxcXG4gIC5jb2wtbWQtOSxcXG4gIC5jb2wtbWQtMTAsXFxuICAuY29sLW1kLTExLFxcbiAgLmNvbC1tZC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgfVxcbiAgLmNvbC1tZC1ncm93IHtcXG4gICAgLW1zLWZsZXg6IDEgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMSAwIGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC0wIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMCB7XFxuICAgIGhlaWdodDogMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC0xIHtcXG4gICAgaGVpZ2h0OiA4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxNi42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC0yIHtcXG4gICAgaGVpZ2h0OiAxNi42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC0zIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMjUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC0zIHtcXG4gICAgaGVpZ2h0OiAyNSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtNCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTQge1xcbiAgICBoZWlnaHQ6IDMzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTUge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA0MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC01IHtcXG4gICAgaGVpZ2h0OiA0MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC02IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC02IHtcXG4gICAgaGVpZ2h0OiA1MCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtNyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTcge1xcbiAgICBoZWlnaHQ6IDU4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTgge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC04IHtcXG4gICAgaGVpZ2h0OiA2Ni42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC05IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNzUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC05IHtcXG4gICAgaGVpZ2h0OiA3NSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtMTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4My4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMTAge1xcbiAgICBoZWlnaHQ6IDgzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTExIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOTEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTExIHtcXG4gICAgaGVpZ2h0OiA5MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0xMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMTIge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5yb3cgPiAuY29sLWxnLFxcbiAgLnJvdyA+IC5jb2wtbGctYXV0byxcXG4gIC5yb3cgPiAuY29sLWxnLWdyb3csXFxuICAucm93ID4gLmNvbC1sZy0wLFxcbiAgLnJvdyA+IC5jb2wtbGctMSxcXG4gIC5yb3cgPiAuY29sLWxnLTIsXFxuICAucm93ID4gLmNvbC1sZy0zLFxcbiAgLnJvdyA+IC5jb2wtbGctNCxcXG4gIC5yb3cgPiAuY29sLWxnLTUsXFxuICAucm93ID4gLmNvbC1sZy02LFxcbiAgLnJvdyA+IC5jb2wtbGctNyxcXG4gIC5yb3cgPiAuY29sLWxnLTgsXFxuICAucm93ID4gLmNvbC1sZy05LFxcbiAgLnJvdyA+IC5jb2wtbGctMTAsXFxuICAucm93ID4gLmNvbC1sZy0xMSxcXG4gIC5yb3cgPiAuY29sLWxnLTEyLFxcbiAgLmZsZXggPiAuY29sLWxnLFxcbiAgLmZsZXggPiAuY29sLWxnLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtbGctZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC1sZy0wLFxcbiAgLmZsZXggPiAuY29sLWxnLTEsXFxuICAuZmxleCA+IC5jb2wtbGctMixcXG4gIC5mbGV4ID4gLmNvbC1sZy0zLFxcbiAgLmZsZXggPiAuY29sLWxnLTQsXFxuICAuZmxleCA+IC5jb2wtbGctNSxcXG4gIC5mbGV4ID4gLmNvbC1sZy02LFxcbiAgLmZsZXggPiAuY29sLWxnLTcsXFxuICAuZmxleCA+IC5jb2wtbGctOCxcXG4gIC5mbGV4ID4gLmNvbC1sZy05LFxcbiAgLmZsZXggPiAuY29sLWxnLTEwLFxcbiAgLmZsZXggPiAuY29sLWxnLTExLFxcbiAgLmZsZXggPiAuY29sLWxnLTEyIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1pbi13aWR0aDogMDtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGcsXFxuICAuY29sdW1uID4gLmNvbC1sZy1hdXRvLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctZ3JvdyxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTAsXFxuICAuY29sdW1uID4gLmNvbC1sZy0xLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMixcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTMsXFxuICAuY29sdW1uID4gLmNvbC1sZy00LFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctNSxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTYsXFxuICAuY29sdW1uID4gLmNvbC1sZy03LFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctOCxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTksXFxuICAuY29sdW1uID4gLmNvbC1sZy0xMCxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTExLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMTIsXFxuICAuZmxleCA+IC5jb2wtbGcsXFxuICAuZmxleCA+IC5jb2wtbGctYXV0byxcXG4gIC5mbGV4ID4gLmNvbC1sZy1ncm93LFxcbiAgLmZsZXggPiAuY29sLWxnLTAsXFxuICAuZmxleCA+IC5jb2wtbGctMSxcXG4gIC5mbGV4ID4gLmNvbC1sZy0yLFxcbiAgLmZsZXggPiAuY29sLWxnLTMsXFxuICAuZmxleCA+IC5jb2wtbGctNCxcXG4gIC5mbGV4ID4gLmNvbC1sZy01LFxcbiAgLmZsZXggPiAuY29sLWxnLTYsXFxuICAuZmxleCA+IC5jb2wtbGctNyxcXG4gIC5mbGV4ID4gLmNvbC1sZy04LFxcbiAgLmZsZXggPiAuY29sLWxnLTksXFxuICAuZmxleCA+IC5jb2wtbGctMTAsXFxuICAuZmxleCA+IC5jb2wtbGctMTEsXFxuICAuZmxleCA+IC5jb2wtbGctMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIG1pbi1oZWlnaHQ6IDA7XFxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XFxuICB9XFxuICAuY29sLWxnIHtcXG4gICAgLW1zLWZsZXg6IDEwMDAwIDEgMCU7XFxuICAgICAgICBmbGV4OiAxMDAwMCAxIDAlO1xcbiAgfVxcbiAgLmNvbC1sZy1hdXRvLFxcbiAgLmNvbC1sZy0wLFxcbiAgLmNvbC1sZy0xLFxcbiAgLmNvbC1sZy0yLFxcbiAgLmNvbC1sZy0zLFxcbiAgLmNvbC1sZy00LFxcbiAgLmNvbC1sZy01LFxcbiAgLmNvbC1sZy02LFxcbiAgLmNvbC1sZy03LFxcbiAgLmNvbC1sZy04LFxcbiAgLmNvbC1sZy05LFxcbiAgLmNvbC1sZy0xMCxcXG4gIC5jb2wtbGctMTEsXFxuICAuY29sLWxnLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMCAwIGF1dG87XFxuICB9XFxuICAuY29sLWxnLWdyb3cge1xcbiAgICAtbXMtZmxleDogMSAwIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDAgYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0wIHtcXG4gICAgaGVpZ2h0OiAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy0xIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTEge1xcbiAgICBoZWlnaHQ6IDguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDE2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTIge1xcbiAgICBoZWlnaHQ6IDE2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTMge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAyNSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTMge1xcbiAgICBoZWlnaHQ6IDI1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy00IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMzMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctNCB7XFxuICAgIGhlaWdodDogMzMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctNSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDQxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTUge1xcbiAgICBoZWlnaHQ6IDQxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTYge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1MCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTYge1xcbiAgICBoZWlnaHQ6IDUwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy03IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctNyB7XFxuICAgIGhlaWdodDogNTguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctOCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDY2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTgge1xcbiAgICBoZWlnaHQ6IDY2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTkge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA3NSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTkge1xcbiAgICBoZWlnaHQ6IDc1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy0xMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0xMCB7XFxuICAgIGhlaWdodDogODMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctMTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA5MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMTEge1xcbiAgICBoZWlnaHQ6IDkxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTEyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0xMiB7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5yb3cgPiAuY29sLXhsLFxcbiAgLnJvdyA+IC5jb2wteGwtYXV0byxcXG4gIC5yb3cgPiAuY29sLXhsLWdyb3csXFxuICAucm93ID4gLmNvbC14bC0wLFxcbiAgLnJvdyA+IC5jb2wteGwtMSxcXG4gIC5yb3cgPiAuY29sLXhsLTIsXFxuICAucm93ID4gLmNvbC14bC0zLFxcbiAgLnJvdyA+IC5jb2wteGwtNCxcXG4gIC5yb3cgPiAuY29sLXhsLTUsXFxuICAucm93ID4gLmNvbC14bC02LFxcbiAgLnJvdyA+IC5jb2wteGwtNyxcXG4gIC5yb3cgPiAuY29sLXhsLTgsXFxuICAucm93ID4gLmNvbC14bC05LFxcbiAgLnJvdyA+IC5jb2wteGwtMTAsXFxuICAucm93ID4gLmNvbC14bC0xMSxcXG4gIC5yb3cgPiAuY29sLXhsLTEyLFxcbiAgLmZsZXggPiAuY29sLXhsLFxcbiAgLmZsZXggPiAuY29sLXhsLWF1dG8sXFxuICAuZmxleCA+IC5jb2wteGwtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC14bC0wLFxcbiAgLmZsZXggPiAuY29sLXhsLTEsXFxuICAuZmxleCA+IC5jb2wteGwtMixcXG4gIC5mbGV4ID4gLmNvbC14bC0zLFxcbiAgLmZsZXggPiAuY29sLXhsLTQsXFxuICAuZmxleCA+IC5jb2wteGwtNSxcXG4gIC5mbGV4ID4gLmNvbC14bC02LFxcbiAgLmZsZXggPiAuY29sLXhsLTcsXFxuICAuZmxleCA+IC5jb2wteGwtOCxcXG4gIC5mbGV4ID4gLmNvbC14bC05LFxcbiAgLmZsZXggPiAuY29sLXhsLTEwLFxcbiAgLmZsZXggPiAuY29sLXhsLTExLFxcbiAgLmZsZXggPiAuY29sLXhsLTEyIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1pbi13aWR0aDogMDtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwsXFxuICAuY29sdW1uID4gLmNvbC14bC1hdXRvLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtZ3JvdyxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTAsXFxuICAuY29sdW1uID4gLmNvbC14bC0xLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMixcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTMsXFxuICAuY29sdW1uID4gLmNvbC14bC00LFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtNSxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTYsXFxuICAuY29sdW1uID4gLmNvbC14bC03LFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtOCxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTksXFxuICAuY29sdW1uID4gLmNvbC14bC0xMCxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTExLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMTIsXFxuICAuZmxleCA+IC5jb2wteGwsXFxuICAuZmxleCA+IC5jb2wteGwtYXV0byxcXG4gIC5mbGV4ID4gLmNvbC14bC1ncm93LFxcbiAgLmZsZXggPiAuY29sLXhsLTAsXFxuICAuZmxleCA+IC5jb2wteGwtMSxcXG4gIC5mbGV4ID4gLmNvbC14bC0yLFxcbiAgLmZsZXggPiAuY29sLXhsLTMsXFxuICAuZmxleCA+IC5jb2wteGwtNCxcXG4gIC5mbGV4ID4gLmNvbC14bC01LFxcbiAgLmZsZXggPiAuY29sLXhsLTYsXFxuICAuZmxleCA+IC5jb2wteGwtNyxcXG4gIC5mbGV4ID4gLmNvbC14bC04LFxcbiAgLmZsZXggPiAuY29sLXhsLTksXFxuICAuZmxleCA+IC5jb2wteGwtMTAsXFxuICAuZmxleCA+IC5jb2wteGwtMTEsXFxuICAuZmxleCA+IC5jb2wteGwtMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIG1pbi1oZWlnaHQ6IDA7XFxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XFxuICB9XFxuICAuY29sLXhsIHtcXG4gICAgLW1zLWZsZXg6IDEwMDAwIDEgMCU7XFxuICAgICAgICBmbGV4OiAxMDAwMCAxIDAlO1xcbiAgfVxcbiAgLmNvbC14bC1hdXRvLFxcbiAgLmNvbC14bC0wLFxcbiAgLmNvbC14bC0xLFxcbiAgLmNvbC14bC0yLFxcbiAgLmNvbC14bC0zLFxcbiAgLmNvbC14bC00LFxcbiAgLmNvbC14bC01LFxcbiAgLmNvbC14bC02LFxcbiAgLmNvbC14bC03LFxcbiAgLmNvbC14bC04LFxcbiAgLmNvbC14bC05LFxcbiAgLmNvbC14bC0xMCxcXG4gIC5jb2wteGwtMTEsXFxuICAuY29sLXhsLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMCAwIGF1dG87XFxuICB9XFxuICAuY29sLXhsLWdyb3cge1xcbiAgICAtbXMtZmxleDogMSAwIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDAgYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0wIHtcXG4gICAgaGVpZ2h0OiAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC0xIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTEge1xcbiAgICBoZWlnaHQ6IDguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDE2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTIge1xcbiAgICBoZWlnaHQ6IDE2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTMge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAyNSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTMge1xcbiAgICBoZWlnaHQ6IDI1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC00IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMzMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtNCB7XFxuICAgIGhlaWdodDogMzMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtNSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDQxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTUge1xcbiAgICBoZWlnaHQ6IDQxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTYge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1MCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTYge1xcbiAgICBoZWlnaHQ6IDUwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC03IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtNyB7XFxuICAgIGhlaWdodDogNTguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtOCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDY2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTgge1xcbiAgICBoZWlnaHQ6IDY2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTkge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA3NSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTkge1xcbiAgICBoZWlnaHQ6IDc1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC0xMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0xMCB7XFxuICAgIGhlaWdodDogODMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtMTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA5MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMTEge1xcbiAgICBoZWlnaHQ6IDkxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTEyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0xMiB7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxufVxcbi5iYWNrZHJvcCB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMHZ3O1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjI4cyBlYXNlLWluO1xcbn1cXG4uYmFja2Ryb3AuYWN0aXZlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjMpO1xcbn1cXG4ucm91bmQtYm9yZGVycyB7XFxuICBib3JkZXItcmFkaXVzOiAzcHggIWltcG9ydGFudDtcXG59XFxuLmdlbmVyaWMtbWFyZ2luLFxcbi5ncm91cCA+ICoge1xcbiAgbWFyZ2luOiA1cHg7XFxufVxcbi5uby10cmFuc2l0aW9uIHtcXG4gIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLnRyYW5zaXRpb24tMCB7XFxuICB0cmFuc2l0aW9uOiAwcyAhaW1wb3J0YW50O1xcbn1cXG4uZ2xvc3N5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LDI1NSwyNTUsMC4zKSwgcmdiYSgyNTUsMjU1LDI1NSwwKSA1MCUsIHJnYmEoMCwwLDAsMC4xMikgNTElLCByZ2JhKDAsMCwwLDAuMDQpKSAhaW1wb3J0YW50O1xcbn1cXG4ucS1wbGFjZWhvbGRlcjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIG9wYWNpdHk6IDAuNTtcXG59XFxuLnEtcGxhY2Vob2xkZXI6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIG9wYWNpdHk6IDAuNTtcXG59XFxuLnEtYm9keS1mdWxsc2NyZWVuLW1peGluLFxcbi5xLWJvZHktcHJldmVudC1zY3JvbGwge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbn1cXG4ucS1uby1pbnB1dC1zcGlubmVyIHtcXG4gIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkICFpbXBvcnRhbnQ7XFxufVxcbi5xLW5vLWlucHV0LXNwaW5uZXI6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXFxuLnEtbm8taW5wdXQtc3Bpbm5lcjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICBtYXJnaW46IDA7XFxufVxcbmEucS1saW5rIHtcXG4gIG91dGxpbmU6IDA7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuLnEtc2VsZWN0LWhpZ2hsaWdodCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDE4OSwxODksMTg5LDAuNSkgIWltcG9ydGFudDtcXG59XFxuLmhpZ2hsaWdodC1hbmQtZmFkZSB7XFxuICBhbmltYXRpb246IHEtaGlnaGxpZ2h0IDJzIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi50cmFuc2l0aW9uLWdlbmVyaWMge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XFxufVxcbi5hbmltYXRlLXNwaW4sXFxuLmFuaW1hdGUtc3Bpbi1yZXZlcnNlIHtcXG4gIGFuaW1hdGlvbjogcS1zcGluIDJzIGluZmluaXRlIGxpbmVhciAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1zcGluLXJldmVyc2Uge1xcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTtcXG59XFxuLmFuaW1hdGUtYmxpbmsge1xcbiAgYW5pbWF0aW9uOiBxLWJsaW5rIDFzIHN0ZXBzKDUsIHN0YXJ0KSBpbmZpbml0ZSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1wb3Age1xcbiAgYW5pbWF0aW9uOiBxLXBvcCAwLjJzIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5hbmltYXRlLXNjYWxlIHtcXG4gIGFuaW1hdGlvbjogcS1zY2FsZSAwLjJzIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5hbmltYXRlLWZhZGUge1xcbiAgYW5pbWF0aW9uOiBxLWZhZGUgMC4ycyAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1ib3VuY2Uge1xcbiAgYW5pbWF0aW9uOiBxLWJvdW5jZSAycyBpbmZpbml0ZSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1zaGFrZSB7XFxuICBhbmltYXRpb246IHEtc2hha2UgMC4xNXM7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtcXG59XFxuLmFuaW1hdGUtcG9wdXAtdXAsXFxuLmFuaW1hdGUtcG9wdXAtZG93biB7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XFxufVxcbi5hbmltYXRlLXBvcHVwLXVwID4gKixcXG4uYW5pbWF0ZS1wb3B1cC1kb3duID4gKiB7XFxuICBhbmltYXRpb246IHEtZmFkZSAwLjgycyBjdWJpYy1iZXppZXIoMC43ODUsIDAuMTM1LCAwLjE1LCAwLjg2KTtcXG59XFxuLmFuaW1hdGUtcG9wdXAtZG93biB7XFxuICBhbmltYXRpb246IHEtcG9wdXAtZG93biAwLjM2cyAvKiBydGw6aWdub3JlICovO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3AgMHB4IC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5hbmltYXRlLXBvcHVwLXVwIHtcXG4gIGFuaW1hdGlvbjogcS1wb3B1cC11cCAwLjM2cyAvKiBydGw6aWdub3JlICovO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBib3R0b20gMHB4IC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5hbmltYXRlLWZhZGUtbGVmdCB7XFxuICBhbmltYXRpb246IHEtZmFkZSAwLjM2cyBjdWJpYy1iZXppZXIoMC43ODUsIDAuMTM1LCAwLjE1LCAwLjg2KSwgcS1zbGlkZS1sZWZ0IDAuMzZzIGVhc2U7XFxufVxcbi5hbmltYXRlLWZhZGUtcmlnaHQge1xcbiAgYW5pbWF0aW9uOiBxLWZhZGUgMC4zNnMgY3ViaWMtYmV6aWVyKDAuNzg1LCAwLjEzNSwgMC4xNSwgMC44NiksIHEtc2xpZGUtcmlnaHQgMC4zNnMgZWFzZTtcXG59XFxuLmFuaW1hdGVkIHtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7XFxuICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xcbn1cXG4uYW5pbWF0ZWQuaW5maW5pdGUge1xcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XFxufVxcbi5hbmltYXRlZC5oaW5nZSB7XFxuICBhbmltYXRpb24tZHVyYXRpb246IDJzO1xcbn1cXG4uYW5pbWF0ZWQuZmxpcE91dFgsXFxuLmFuaW1hdGVkLmZsaXBPdXRZLFxcbi5hbmltYXRlZC5ib3VuY2VJbixcXG4uYW5pbWF0ZWQuYm91bmNlT3V0IHtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogMC43NXM7XFxufVxcbi5ub24tc2VsZWN0YWJsZSB7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lICFpbXBvcnRhbnQ7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lICFpbXBvcnRhbnQ7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lICFpbXBvcnRhbnQ7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5zY3JvbGwge1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxufVxcbi5zY3JvbGwsXFxuLnNjcm9sbC14LFxcbi5zY3JvbGwteSB7XFxuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxuICB3aWxsLWNoYW5nZTogc2Nyb2xsLXBvc2l0aW9uO1xcbn1cXG4uc2Nyb2xsLXgge1xcbiAgb3ZlcmZsb3cteDogYXV0bztcXG59XFxuLnNjcm9sbC15IHtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcbi5uby1zY3JvbGwge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbn1cXG4ubm8tcG9pbnRlci1ldmVudHMge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmFsbC1wb2ludGVyLWV2ZW50cyB7XFxuICBwb2ludGVyLWV2ZW50czogYWxsICFpbXBvcnRhbnQ7XFxufVxcbi5jdXJzb3ItcG9pbnRlciB7XFxuICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDtcXG59XFxuLmN1cnNvci1ub3QtYWxsb3dlZCB7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkICFpbXBvcnRhbnQ7XFxufVxcbi5jdXJzb3ItaW5oZXJpdCB7XFxuICBjdXJzb3I6IGluaGVyaXQgIWltcG9ydGFudDtcXG59XFxuLnJvdGF0ZS00NSB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnJvdGF0ZS05MCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnJvdGF0ZS0xMzUge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucm90YXRlLTE4MCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5yb3RhdGUtMjA1IHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDIwNWRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnJvdGF0ZS0yNzAge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucm90YXRlLTMxNSB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgzMTVkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5mbGlwLWhvcml6b250YWwge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XFxufVxcbi5mbGlwLXZlcnRpY2FsIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xcbn1cXG4uZmxvYXQtbGVmdCB7XFxuICBmbG9hdDogbGVmdDtcXG59XFxuLmZsb2F0LXJpZ2h0IHtcXG4gIGZsb2F0OiByaWdodDtcXG59XFxuLnJlbGF0aXZlLXBvc2l0aW9uIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmZpeGVkLFxcbi5mdWxsc2NyZWVuLFxcbi5maXhlZC1jZW50ZXIsXFxuLmZpeGVkLWJvdHRvbSxcXG4uZml4ZWQtbGVmdCxcXG4uZml4ZWQtcmlnaHQsXFxuLmZpeGVkLXRvcCxcXG4uZml4ZWQtdG9wLWxlZnQsXFxuLmZpeGVkLXRvcC1yaWdodCxcXG4uZml4ZWQtYm90dG9tLWxlZnQsXFxuLmZpeGVkLWJvdHRvbS1yaWdodCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxufVxcbi5hYnNvbHV0ZSxcXG4uYWJzb2x1dGUtZnVsbCxcXG4uYWJzb2x1dGUtY2VudGVyLFxcbi5hYnNvbHV0ZS1ib3R0b20sXFxuLmFic29sdXRlLWxlZnQsXFxuLmFic29sdXRlLXJpZ2h0LFxcbi5hYnNvbHV0ZS10b3AsXFxuLmFic29sdXRlLXRvcC1sZWZ0LFxcbi5hYnNvbHV0ZS10b3AtcmlnaHQsXFxuLmFic29sdXRlLWJvdHRvbS1sZWZ0LFxcbi5hYnNvbHV0ZS1ib3R0b20tcmlnaHQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbn1cXG4uZml4ZWQtdG9wLFxcbi5hYnNvbHV0ZS10b3Age1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbn1cXG4uZml4ZWQtcmlnaHQsXFxuLmFic29sdXRlLXJpZ2h0IHtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbn1cXG4uZml4ZWQtYm90dG9tLFxcbi5hYnNvbHV0ZS1ib3R0b20ge1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbn1cXG4uZml4ZWQtbGVmdCxcXG4uYWJzb2x1dGUtbGVmdCB7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbn1cXG4uZml4ZWQtdG9wLWxlZnQsXFxuLmFic29sdXRlLXRvcC1sZWZ0IHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxufVxcbi5maXhlZC10b3AtcmlnaHQsXFxuLmFic29sdXRlLXRvcC1yaWdodCB7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG59XFxuLmZpeGVkLWJvdHRvbS1sZWZ0LFxcbi5hYnNvbHV0ZS1ib3R0b20tbGVmdCB7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbn1cXG4uZml4ZWQtYm90dG9tLXJpZ2h0LFxcbi5hYnNvbHV0ZS1ib3R0b20tcmlnaHQge1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxufVxcbi5mdWxsc2NyZWVuIHtcXG4gIHotaW5kZXg6IDYwMDA7XFxuICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XFxuICBtYXgtd2lkdGg6IDEwMHZ3O1xcbiAgbWF4LWhlaWdodDogMTAwdmg7XFxufVxcbi5hYnNvbHV0ZS1mdWxsLFxcbi5mdWxsc2NyZWVuIHtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG59XFxuLmZpeGVkLWNlbnRlcixcXG4uYWJzb2x1dGUtY2VudGVyIHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxufVxcbi52ZXJ0aWNhbC10b3Age1xcbiAgdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50O1xcbn1cXG4udmVydGljYWwtbWlkZGxlIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUgIWltcG9ydGFudDtcXG59XFxuLnZlcnRpY2FsLWJvdHRvbSB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tICFpbXBvcnRhbnQ7XFxufVxcbi5vbi1sZWZ0IHtcXG4gIG1hcmdpbi1yaWdodDogMTJweDtcXG59XFxuLm9uLXJpZ2h0IHtcXG4gIG1hcmdpbi1sZWZ0OiAxMnB4O1xcbn1cXG4ucS1yaXBwbGUtY29udGFpbmVyIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB6LWluZGV4OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLXJpcHBsZS1hbmltYXRpb24ge1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMCAvKiBydGw6aWdub3JlICovO1xcbiAgb3BhY2l0eTogMDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgdHJhbnNpdGlvbjogMC4zcyB0cmFuc2Zvcm0gY3ViaWMtYmV6aWVyKDAuMiwgMC40LCAwLjQsIDAuOSksIDAuM3Mgb3BhY2l0eSBjdWJpYy1iZXppZXIoMC4yLCAwLjQsIDAuNCwgMC4xKTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm0sIG9wYWNpdHk7XFxufVxcbi5xLXJpcHBsZS1hbmltYXRpb24tZW50ZXIge1xcbiAgdHJhbnNpdGlvbjogbm9uZTtcXG59XFxuLnEtcmlwcGxlLWFuaW1hdGlvbi12aXNpYmxlIHtcXG4gIG9wYWNpdHk6IDAuMTU7XFxufVxcbi5xLXJhZGlhbC1yaXBwbGUge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtNTAlO1xcbiAgbGVmdDogLTUwJTtcXG4gIHdpZHRoOiAyMDAlO1xcbiAgaGVpZ2h0OiAyMDAlO1xcbn1cXG4ucS1yYWRpYWwtcmlwcGxlOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCBjdXJyZW50Q29sb3IgMTAlLCB0cmFuc3BhcmVudCAxMC4wMSUpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IDUwJTtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMTAsIDEwKTtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cywgb3BhY2l0eSAxcztcXG59XFxuLnEtcmFkaWFsLXJpcHBsZS5hY3RpdmU6YWZ0ZXIge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKTtcXG4gIG9wYWNpdHk6IDAuNDtcXG4gIHRyYW5zaXRpb246IDBzO1xcbn1cXG46cm9vdCB7XFxuICAtLXEtc2l6ZS14czogMDtcXG4gIC0tcS1zaXplLXNtOiA1NzZweDtcXG4gIC0tcS1zaXplLW1kOiA3NjhweDtcXG4gIC0tcS1zaXplLWxnOiA5OTJweDtcXG4gIC0tcS1zaXplLXhsOiAxMjAwcHg7XFxufVxcbi5maXQge1xcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcXG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG4uZnVsbC1oZWlnaHQge1xcbiAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XFxufVxcbi5mdWxsLXdpZHRoIHtcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxuICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcbi53aW5kb3ctaGVpZ2h0IHtcXG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcXG4gIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIGhlaWdodDogMTAwdmggIWltcG9ydGFudDtcXG59XFxuLndpbmRvdy13aWR0aCB7XFxuICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB3aWR0aDogMTAwdncgIWltcG9ydGFudDtcXG59XFxuLmJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxufVxcbi5pbmxpbmUtYmxvY2sge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XFxufVxcbi5xLXBhLW5vbmUge1xcbiAgcGFkZGluZzogMCAwO1xcbn1cXG4ucS1wbC1ub25lLFxcbi5xLXB4LW5vbmUge1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG4ucS1wci1ub25lLFxcbi5xLXB4LW5vbmUge1xcbiAgcGFkZGluZy1yaWdodDogMDtcXG59XFxuLnEtcHQtbm9uZSxcXG4ucS1weS1ub25lIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4ucS1wYi1ub25lLFxcbi5xLXB5LW5vbmUge1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxufVxcbi5xLW1hLW5vbmUge1xcbiAgbWFyZ2luOiAwIDA7XFxufVxcbi5xLW1sLW5vbmUsXFxuLnEtbXgtbm9uZSB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuLnEtbXItbm9uZSxcXG4ucS1teC1ub25lIHtcXG4gIG1hcmdpbi1yaWdodDogMDtcXG59XFxuLnEtbXQtbm9uZSxcXG4ucS1teS1ub25lIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi5xLW1iLW5vbmUsXFxuLnEtbXktbm9uZSB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG4ucS1wYS14cyB7XFxuICBwYWRkaW5nOiA0cHggNHB4O1xcbn1cXG4ucS1wbC14cyxcXG4ucS1weC14cyB7XFxuICBwYWRkaW5nLWxlZnQ6IDRweDtcXG59XFxuLnEtcHIteHMsXFxuLnEtcHgteHMge1xcbiAgcGFkZGluZy1yaWdodDogNHB4O1xcbn1cXG4ucS1wdC14cyxcXG4ucS1weS14cyB7XFxuICBwYWRkaW5nLXRvcDogNHB4O1xcbn1cXG4ucS1wYi14cyxcXG4ucS1weS14cyB7XFxuICBwYWRkaW5nLWJvdHRvbTogNHB4O1xcbn1cXG4ucS1tYS14cyB7XFxuICBtYXJnaW46IDRweCA0cHg7XFxufVxcbi5xLW1sLXhzLFxcbi5xLW14LXhzIHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxufVxcbi5xLW1yLXhzLFxcbi5xLW14LXhzIHtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG4ucS1tdC14cyxcXG4ucS1teS14cyB7XFxuICBtYXJnaW4tdG9wOiA0cHg7XFxufVxcbi5xLW1iLXhzLFxcbi5xLW15LXhzIHtcXG4gIG1hcmdpbi1ib3R0b206IDRweDtcXG59XFxuLnEtcGEtc20ge1xcbiAgcGFkZGluZzogOHB4IDhweDtcXG59XFxuLnEtcGwtc20sXFxuLnEtcHgtc20ge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XFxufVxcbi5xLXByLXNtLFxcbi5xLXB4LXNtIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcXG59XFxuLnEtcHQtc20sXFxuLnEtcHktc20ge1xcbiAgcGFkZGluZy10b3A6IDhweDtcXG59XFxuLnEtcGItc20sXFxuLnEtcHktc20ge1xcbiAgcGFkZGluZy1ib3R0b206IDhweDtcXG59XFxuLnEtbWEtc20ge1xcbiAgbWFyZ2luOiA4cHggOHB4O1xcbn1cXG4ucS1tbC1zbSxcXG4ucS1teC1zbSB7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG4ucS1tci1zbSxcXG4ucS1teC1zbSB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnEtbXQtc20sXFxuLnEtbXktc20ge1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbn1cXG4ucS1tYi1zbSxcXG4ucS1teS1zbSB7XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XFxufVxcbi5xLXBhLW1kIHtcXG4gIHBhZGRpbmc6IDE2cHggMTZweDtcXG59XFxuLnEtcGwtbWQsXFxuLnEtcHgtbWQge1xcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xcbn1cXG4ucS1wci1tZCxcXG4ucS1weC1tZCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNnB4O1xcbn1cXG4ucS1wdC1tZCxcXG4ucS1weS1tZCB7XFxuICBwYWRkaW5nLXRvcDogMTZweDtcXG59XFxuLnEtcGItbWQsXFxuLnEtcHktbWQge1xcbiAgcGFkZGluZy1ib3R0b206IDE2cHg7XFxufVxcbi5xLW1hLW1kIHtcXG4gIG1hcmdpbjogMTZweCAxNnB4O1xcbn1cXG4ucS1tbC1tZCxcXG4ucS1teC1tZCB7XFxuICBtYXJnaW4tbGVmdDogMTZweDtcXG59XFxuLnEtbXItbWQsXFxuLnEtbXgtbWQge1xcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xcbn1cXG4ucS1tdC1tZCxcXG4ucS1teS1tZCB7XFxuICBtYXJnaW4tdG9wOiAxNnB4O1xcbn1cXG4ucS1tYi1tZCxcXG4ucS1teS1tZCB7XFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbn1cXG4ucS1wYS1sZyB7XFxuICBwYWRkaW5nOiAyNHB4IDI0cHg7XFxufVxcbi5xLXBsLWxnLFxcbi5xLXB4LWxnIHtcXG4gIHBhZGRpbmctbGVmdDogMjRweDtcXG59XFxuLnEtcHItbGcsXFxuLnEtcHgtbGcge1xcbiAgcGFkZGluZy1yaWdodDogMjRweDtcXG59XFxuLnEtcHQtbGcsXFxuLnEtcHktbGcge1xcbiAgcGFkZGluZy10b3A6IDI0cHg7XFxufVxcbi5xLXBiLWxnLFxcbi5xLXB5LWxnIHtcXG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xcbn1cXG4ucS1tYS1sZyB7XFxuICBtYXJnaW46IDI0cHggMjRweDtcXG59XFxuLnEtbWwtbGcsXFxuLnEtbXgtbGcge1xcbiAgbWFyZ2luLWxlZnQ6IDI0cHg7XFxufVxcbi5xLW1yLWxnLFxcbi5xLW14LWxnIHtcXG4gIG1hcmdpbi1yaWdodDogMjRweDtcXG59XFxuLnEtbXQtbGcsXFxuLnEtbXktbGcge1xcbiAgbWFyZ2luLXRvcDogMjRweDtcXG59XFxuLnEtbWItbGcsXFxuLnEtbXktbGcge1xcbiAgbWFyZ2luLWJvdHRvbTogMjRweDtcXG59XFxuLnEtcGEteGwge1xcbiAgcGFkZGluZzogNDhweCA0OHB4O1xcbn1cXG4ucS1wbC14bCxcXG4ucS1weC14bCB7XFxuICBwYWRkaW5nLWxlZnQ6IDQ4cHg7XFxufVxcbi5xLXByLXhsLFxcbi5xLXB4LXhsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDQ4cHg7XFxufVxcbi5xLXB0LXhsLFxcbi5xLXB5LXhsIHtcXG4gIHBhZGRpbmctdG9wOiA0OHB4O1xcbn1cXG4ucS1wYi14bCxcXG4ucS1weS14bCB7XFxuICBwYWRkaW5nLWJvdHRvbTogNDhweDtcXG59XFxuLnEtbWEteGwge1xcbiAgbWFyZ2luOiA0OHB4IDQ4cHg7XFxufVxcbi5xLW1sLXhsLFxcbi5xLW14LXhsIHtcXG4gIG1hcmdpbi1sZWZ0OiA0OHB4O1xcbn1cXG4ucS1tci14bCxcXG4ucS1teC14bCB7XFxuICBtYXJnaW4tcmlnaHQ6IDQ4cHg7XFxufVxcbi5xLW10LXhsLFxcbi5xLW15LXhsIHtcXG4gIG1hcmdpbi10b3A6IDQ4cHg7XFxufVxcbi5xLW1iLXhsLFxcbi5xLW15LXhsIHtcXG4gIG1hcmdpbi1ib3R0b206IDQ4cHg7XFxufVxcbi5xLW1sLWF1dG8sXFxuLnEtbXgtYXV0byB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuLnEtbXItYXV0byxcXG4ucS1teC1hdXRvIHtcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuLnEtbXktZm9ybSB7XFxuICBtYXJnaW4tdG9wOiAxNnB4O1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4ucS10b3VjaCB7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgdXNlci1kcmFnOiBub25lO1xcbiAgLWtodG1sLXVzZXItZHJhZzogbm9uZTtcXG4gIC13ZWJraXQtdXNlci1kcmFnOiBub25lO1xcbn1cXG4ucS10b3VjaC14IHtcXG4gIC1tcy10b3VjaC1hY3Rpb246IHBhbi14O1xcbiAgICAgIHRvdWNoLWFjdGlvbjogcGFuLXg7XFxufVxcbi5xLXRvdWNoLXkge1xcbiAgLW1zLXRvdWNoLWFjdGlvbjogcGFuLXk7XFxuICAgICAgdG91Y2gtYWN0aW9uOiBwYW4teTtcXG59XFxuYm9keSB7XFxuICBtaW4td2lkdGg6IDEwMHB4O1xcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCAnLWFwcGxlLXN5c3RlbScsICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XFxuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcXG4gIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBjb2xvcjogIzBjMGMwYztcXG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xcbn1cXG5oMSB7XFxuICBmb250LXNpemU6IDExMnB4O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjEyO1xcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoMSB7XFxuICAgIGZvbnQtc2l6ZTogNjcuMnB4O1xcbiAgfVxcbn1cXG5oMiB7XFxuICBmb250LXNpemU6IDU2cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMzU7XFxuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIGgyIHtcXG4gICAgZm9udC1zaXplOiAzMy42cHg7XFxuICB9XFxufVxcbmgzIHtcXG4gIGZvbnQtc2l6ZTogNDVweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogNDhweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoMyB7XFxuICAgIGZvbnQtc2l6ZTogMjdweDtcXG4gIH1cXG59XFxuaDQge1xcbiAgZm9udC1zaXplOiAzNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIGg0IHtcXG4gICAgZm9udC1zaXplOiAyMC40cHg7XFxuICB9XFxufVxcbmg1IHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoNSB7XFxuICAgIGZvbnQtc2l6ZTogMTQuMzk5OTk5OTk5OTk5OTk5cHg7XFxuICB9XFxufVxcbmg2IHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBsaW5lLWhlaWdodDogMS4xMjtcXG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoNiB7XFxuICAgIGZvbnQtc2l6ZTogMTJweDtcXG4gIH1cXG59XFxuLnEtZGlzcGxheS00LW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC41NDtcXG59XFxuLnEtZGlzcGxheS00IHtcXG4gIGZvbnQtc2l6ZTogMTEycHg7XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMTI7XFxuICBsZXR0ZXItc3BhY2luZzogLTAuMDRlbTtcXG59XFxuLnEtZGlzcGxheS0zLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC41NDtcXG59XFxuLnEtZGlzcGxheS0zIHtcXG4gIGZvbnQtc2l6ZTogNTZweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS4zNTtcXG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xcbn1cXG4ucS1kaXNwbGF5LTItb3BhY2l0eSB7XFxuICBvcGFjaXR5OiAwLjU0O1xcbn1cXG4ucS1kaXNwbGF5LTIge1xcbiAgZm9udC1zaXplOiA0NXB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiA0OHB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG59XFxuLnEtZGlzcGxheS0xLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC41NDtcXG59XFxuLnEtZGlzcGxheS0xIHtcXG4gIGZvbnQtc2l6ZTogMzRweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogNDBweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbi5xLWhlYWRsaW5lLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC44NztcXG59XFxuLnEtaGVhZGxpbmUge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG59XFxuLnEtdGl0bGUtb3BhY2l0eSB7XFxuICBvcGFjaXR5OiAwLjg3O1xcbn1cXG4ucS10aXRsZSB7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMTI7XFxuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xcbn1cXG4ucS1zdWJoZWFkaW5nLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC44NztcXG59XFxuLnEtc3ViaGVhZGluZyB7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4ucS1ib2R5LTItb3BhY2l0eSB7XFxuICBvcGFjaXR5OiAwLjg3O1xcbn1cXG4ucS1ib2R5LTIge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG59XFxuLnEtYm9keS0xLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC44NztcXG59XFxuLnEtYm9keS0xIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcbi5xLWNhcHRpb24tb3BhY2l0eSB7XFxuICBvcGFjaXR5OiAwLjU0O1xcbn1cXG4ucS1jYXB0aW9uIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcbnAge1xcbiAgbWFyZ2luOiAwIDAgMTZweDtcXG59XFxuLmNhcHRpb24ge1xcbiAgY29sb3I6ICM0MjQyNDI7XFxuICBsZXR0ZXItc3BhY2luZzogMDtcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgcGFkZGluZzogMDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxufVxcbi51cHBlcmNhc2Uge1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuLmxvd2VyY2FzZSB7XFxuICB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlO1xcbn1cXG4uY2FwaXRhbGl6ZSB7XFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcXG59XFxuLnRleHQtY2VudGVyIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLnRleHQtbGVmdCB7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4udGV4dC1yaWdodCB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLnRleHQtanVzdGlmeSB7XFxuICB0ZXh0LWFsaWduOiBqdXN0aWZ5O1xcbiAgLXdlYmtpdC1oeXBoZW5zOiBhdXRvO1xcbiAgICAgIC1tcy1oeXBoZW5zOiBhdXRvO1xcbiAgICAgICAgICBoeXBoZW5zOiBhdXRvO1xcbn1cXG4udGV4dC1pdGFsaWMge1xcbiAgZm9udC1zdHlsZTogaXRhbGljO1xcbn1cXG4udGV4dC1ib2xkIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4udGV4dC1uby13cmFwIHtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcbi50ZXh0LXdlaWdodC10aGluIHtcXG4gIGZvbnQtd2VpZ2h0OiAxMDA7XFxufVxcbi50ZXh0LXdlaWdodC1saWdodCB7XFxuICBmb250LXdlaWdodDogMzAwO1xcbn1cXG4udGV4dC13ZWlnaHQtcmVndWxhciB7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4udGV4dC13ZWlnaHQtbWVkaXVtIHtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcbi50ZXh0LXdlaWdodC1ib2xkIHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcbi50ZXh0LXdlaWdodC1ib2xkZXIge1xcbiAgZm9udC13ZWlnaHQ6IDkwMDtcXG59XFxuc21hbGwge1xcbiAgZm9udC1zaXplOiA4MCU7XFxufVxcbmJpZyB7XFxuICBmb250LXNpemU6IDE3MCU7XFxufVxcbnN1YiB7XFxuICBib3R0b206IC0wLjI1ZW07XFxufVxcbnN1cCB7XFxuICB0b3A6IC0wLjVlbTtcXG59XFxuYmxvY2txdW90ZSB7XFxuICBwYWRkaW5nOiA4cHggMTZweDtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzAyN2JlMztcXG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tcS1jb2xvci1wcmltYXJ5KTtcXG59XFxuYmxvY2txdW90ZS50ZXh0LXJpZ2h0IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCAjMDI3YmUzO1xcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdmFyKC0tcS1jb2xvci1wcmltYXJ5KTtcXG4gIGJvcmRlci1sZWZ0OiAwO1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbmJsb2NrcXVvdGUgc21hbGwge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBsaW5lLWhlaWdodDogMS40O1xcbiAgY29sb3I6ICM3Nzc7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1mYWRlZCk7XFxufVxcbmJsb2NrcXVvdGUgc21hbGw6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICdcXFxcMjAxNCAgIFxcXFxBMCc7XFxufVxcbi5xdW90ZSB7XFxuICBwYWRkaW5nOiAxMHB4IDIwcHg7XFxuICBtYXJnaW46IDAgMCAyMHB4O1xcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMDI3YmUzO1xcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB2YXIoLS1xLWNvbG9yLXByaW1hcnkpO1xcbn1cXG4ucXVvdGUudGV4dC1yaWdodCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgIzAyN2JlMztcXG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHZhcigtLXEtY29sb3ItcHJpbWFyeSk7XFxuICBib3JkZXItbGVmdDogMDtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG5kdCB7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuZGQge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcbmR0LFxcbmRkIHtcXG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XFxufVxcbmRsIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xcbn1cXG5kbC5ob3Jpem9udGFsIGR0IHtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgd2lkdGg6IDI1JTtcXG4gIGNsZWFyOiBsZWZ0O1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5kbC5ob3Jpem9udGFsIGRkIHtcXG4gIG1hcmdpbi1sZWZ0OiAzMCU7XFxufVxcbmhyLnEtaHIsXFxuaHIucS1oci1kYXJrIHtcXG4gIGhlaWdodDogMXB4O1xcbiAgbWluLWhlaWdodDogMXB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBib3JkZXI6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbmhyLnEtaHItZGFyayB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMzYpO1xcbn1cXG4ubm8tbWFyZ2luIHtcXG4gIG1hcmdpbjogMCAhaW1wb3J0YW50O1xcbn1cXG4ubm8tcGFkZGluZyB7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5uby1ib3JkZXIge1xcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5uby1ib3JkZXItcmFkaXVzIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG59XFxuLm5vLWJveC1zaGFkb3cge1xcbiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4ubm8tb3V0bGluZSB7XFxuICBvdXRsaW5lOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5lbGxpcHNpcyB7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4uZWxsaXBzaXMtMi1saW5lcyxcXG4uZWxsaXBzaXMtMy1saW5lcyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxufVxcbi5lbGxpcHNpcy0yLWxpbmVzIHtcXG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcXG59XFxuLmVsbGlwc2lzLTMtbGluZXMge1xcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xcbn1cXG4ucmVhZG9ubHkge1xcbiAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XFxufVxcbi5kaXNhYmxlZCxcXG5bZGlzYWJsZWRdLFxcbi5kaXNhYmxlZCAqLFxcbltkaXNhYmxlZF0gKiB7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkICFpbXBvcnRhbnQ7XFxufVxcbi5kaXNhYmxlZCxcXG5bZGlzYWJsZWRdIHtcXG4gIG9wYWNpdHk6IDAuNiAhaW1wb3J0YW50O1xcbn1cXG4uaGlkZGVuIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmludmlzaWJsZSB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuLnRyYW5zcGFyZW50IHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcbi5vdmVyZmxvdy1hdXRvIHtcXG4gIG92ZXJmbG93OiBhdXRvICFpbXBvcnRhbnQ7XFxufVxcbi5vdmVyZmxvdy1oaWRkZW4ge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbn1cXG4ub3ZlcmZsb3ctaGlkZGVuLXkge1xcbiAgb3ZlcmZsb3cteTogaGlkZGVuICFpbXBvcnRhbnQ7XFxufVxcbi5kaW1tZWQ6YWZ0ZXIsXFxuLmxpZ2h0LWRpbW1lZDphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG59XFxuLmRpbW1lZDphZnRlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuNCkgIWltcG9ydGFudDtcXG59XFxuLmxpZ2h0LWRpbW1lZDphZnRlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuNikgIWltcG9ydGFudDtcXG59XFxuLnotdG9wIHtcXG4gIHotaW5kZXg6IDcwMDAgIWltcG9ydGFudDtcXG59XFxuLnotbWF4IHtcXG4gIHotaW5kZXg6IDk5OTggIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLmRlc2t0b3ApIC5kZXNrdG9wLW9ubHksXFxuYm9keS5kZXNrdG9wIC5kZXNrdG9wLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCgubW9iaWxlKSAubW9iaWxlLW9ubHksXFxuYm9keS5tb2JpbGUgLm1vYmlsZS1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLmNvcmRvdmEpIC5jb3Jkb3ZhLW9ubHksXFxuYm9keS5jb3Jkb3ZhIC5jb3Jkb3ZhLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCguZWxlY3Ryb24pIC5lbGVjdHJvbi1vbmx5LFxcbmJvZHkuZWxlY3Ryb24gLmVsZWN0cm9uLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCguaW9zKSAuaW9zLW9ubHksXFxuYm9keS5pb3MgLmlvcy1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLm1hdCkgLm1hdC1vbmx5LFxcbmJvZHkubWF0IC5tYXQtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC50b3VjaCkgLnRvdWNoLW9ubHksXFxuYm9keS50b3VjaCAudG91Y2gtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC53aXRoaW4taWZyYW1lKSAud2l0aGluLWlmcmFtZS1vbmx5LFxcbmJvZHkud2l0aGluLWlmcmFtZSAud2l0aGluLWlmcmFtZS1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLnBsYXRmb3JtLWlvcykgLnBsYXRmb3JtLWlvcy1vbmx5LFxcbmJvZHkucGxhdGZvcm0taW9zIC5wbGF0Zm9ybS1pb3MtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC5wbGF0Zm9ybS1hbmRyb2lkKSAucGxhdGZvcm0tYW5kcm9pZC1vbmx5LFxcbmJvZHkucGxhdGZvcm0tYW5kcm9pZCAucGxhdGZvcm0tYW5kcm9pZC1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuQG1lZGlhIGFsbCBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xcbiAgLm9yaWVudGF0aW9uLWxhbmRzY2FwZSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIGFsbCBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcXG4gIC5vcmllbnRhdGlvbi1wb3J0cmFpdCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIHNjcmVlbiB7XFxuICAucHJpbnQtb25seSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIHByaW50IHtcXG4gIC5wcmludC1oaWRlIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHtcXG4gIC54cy1oaWRlLFxcbiAgLmd0LXhzLFxcbiAgLnNtLFxcbiAgLmd0LXNtLFxcbiAgLm1kLFxcbiAgLmd0LW1kLFxcbiAgLmxnLFxcbiAgLmd0LWxnLFxcbiAgLnhsIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLnNtLWhpZGUsXFxuICAueHMsXFxuICAubHQtc20sXFxuICAuZ3Qtc20sXFxuICAubWQsXFxuICAuZ3QtbWQsXFxuICAubGcsXFxuICAuZ3QtbGcsXFxuICAueGwge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XFxuICAubWQtaGlkZSxcXG4gIC54cyxcXG4gIC5sdC1zbSxcXG4gIC5zbSxcXG4gIC5sdC1tZCxcXG4gIC5ndC1tZCxcXG4gIC5sZyxcXG4gIC5ndC1sZyxcXG4gIC54bCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XFxuICAubGctaGlkZSxcXG4gIC54cyxcXG4gIC5sdC1zbSxcXG4gIC5zbSxcXG4gIC5sdC1tZCxcXG4gIC5tZCxcXG4gIC5sdC1sZyxcXG4gIC5ndC1sZyxcXG4gIC54bCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLnhsLWhpZGUsXFxuICAueHMsXFxuICAubHQtc20sXFxuICAuc20sXFxuICAubHQtbWQsXFxuICAubWQsXFxuICAubHQtbGcsXFxuICAubGcsXFxuICAubHQteGwge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbi5xLWZvY3VzLWhlbHBlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwIC8qIHJ0bDppZ25vcmUgKi87XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIG9wYWNpdHk6IDAuMTU7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC41LCAxKTtcXG59XFxuLnEtZm9jdXMtaGVscGVyLXJvdW5kZWQge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbn1cXG4ucS1mb2N1cy1oZWxwZXItcm91bmQge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtZm9jdXNhYmxlOmZvY3VzIC5xLWZvY3VzLWhlbHBlcixcXG5ib2R5LmRlc2t0b3AgLnEtaG92ZXJhYmxlOmhvdmVyIC5xLWZvY3VzLWhlbHBlciB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbmJvZHkuaW9zIC5xLWhvdmVyYWJsZTphY3RpdmUgLnEtZm9jdXMtaGVscGVyIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpIHtcXG4gIC5xLWlmID4gLnEtaWYtaW5uZXIge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICB9XFxuICAucS1pZiA+IC5xLWlmLWlubmVyID4gZGl2ID4gLnEtaW5wdXQtdGFyZ2V0IHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLnEtaWYgPiAucS1pZi1pbm5lciA+IGRpdiA+IGlucHV0LnEtaW5wdXQtdGFyZ2V0IHtcXG4gICAgbWluLXdpZHRoOiAzcmVtO1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMCUgIWltcG9ydGFudDtcXG4gICAgICAgIGZsZXgtYmFzaXM6IDAlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucS1pbnB1dC10YXJnZXQ6YmVmb3JlIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICB9XFxuICAucS1pZi1sYWJlbC1zcGFjZXIge1xcbiAgICB3aWR0aDogMDtcXG4gIH1cXG4gIC5xLWVkaXRvci10b29sYmFyIC5xLWJ0bi1ncm91cC5yb3cuaW5saW5lIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB9XFxuICAucS10b29sYmFyLFxcbiAgLnEtYWN0aW9uc2hlZXQtdGl0bGUsXFxuICAucS1maWVsZC1sYWJlbC1pbm5lciB7XFxuICAgIGhlaWdodDogMHB4O1xcbiAgfVxcbiAgLnEtY2Fyb3VzZWwtc2xpZGUge1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAucm93ID4gLmNvbC5xLWFsZXJ0LWNvbnRlbnQge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICB9XFxuICAucS1zbGlkZXItaGFuZGxlID4gLnEtY2hpcC5pbmxpbmUucm93IHtcXG4gICAgZGlzcGxheTogdGFibGU7XFxuICB9XFxuICBhLnEtYnRuOm5vdCgucS1idG4tcm91bmQpIHtcXG4gICAgaGVpZ2h0OiAwcHg7XFxuICB9XFxuICAucS1idG4gLnEtYnRuLWlubmVyIHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLnEtYnRuOmFjdGl2ZSAucS1idG4taW5uZXIsXFxuICAucS1idG4uYWN0aXZlIC5xLWJ0bi1pbm5lciB7XFxuICAgIG1hcmdpbjogLTFweCAxcHggMXB4IC0xcHg7XFxuICB9XFxuICAucS1idG46YWN0aXZlLnEtYnRuLXB1c2ggLnEtYnRuLWlubmVyLFxcbiAgLnEtYnRuLmFjdGl2ZS5xLWJ0bi1wdXNoIC5xLWJ0bi1pbm5lciB7XFxuICAgIG1hcmdpbjogMXB4IDFweCAtMXB4IC0xcHg7XFxuICB9XFxuICAucS1idG46YWN0aXZlLnEtYnRuLXB1c2guZGlzYWJsZWQgLnEtYnRuLWlubmVyLFxcbiAgLnEtYnRuLmFjdGl2ZS5xLWJ0bi1wdXNoLmRpc2FibGVkIC5xLWJ0bi1pbm5lciB7XFxuICAgIG1hcmdpbjogLTFweCAxcHggMXB4IC0xcHg7XFxuICB9XFxuICAucS1idG4tZ3JvdXAgPiAucS1idG4ucS1idG4tcHVzaDpub3QoLmRpc2FibGVkKTphY3RpdmUgLnEtYnRuLWlubmVyLFxcbiAgLnEtYnRuLWdyb3VwID4gLnEtYnRuLnEtYnRuLXB1c2g6bm90KC5kaXNhYmxlZCkuYWN0aXZlIC5xLWJ0bi1pbm5lciB7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG4gIC5xLWNoaXA6bm90KC5xLWNoaXAtc21hbGwpOm5vdCgucS1jaGlwLWRlbnNlKSAucS1jaGlwLW1haW4ge1xcbiAgICBsaW5lLWhlaWdodDogMzJweDtcXG4gIH1cXG4gIC5xLWJ0biAucS1jaGlwIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgfVxcbiAgLnEtdGFiIC5xLWNoaXAgLnEtY2hpcC1tYWluIHtcXG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcXG4gIH1cXG4gIC5xLWZhYi1hY3Rpb25zLnEtZmFiLWxlZnQsXFxuICAucS1mYWItYWN0aW9ucy5xLWZhYi1yaWdodCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgfVxcbiAgLnEtaXRlbS1tYWluIHtcXG4gICAgbWluLXdpZHRoOiAxcHg7XFxuICB9XFxuICAucS1sYXlvdXQtZHJhd2VyLW1pbmkgLnEtaXRlbSB7XFxuICAgIHBhZGRpbmctbGVmdDogMDtcXG4gICAgcGFkZGluZy1yaWdodDogMDtcXG4gIH1cXG4gIC5xLW1vZGFsLWxheW91dCB7XFxuICAgIG1pbi1oZWlnaHQ6IDgwdmggIWltcG9ydGFudDtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIH1cXG59XFxuQHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOiBhdXRvKSB7XFxuICAucS1pZiA+IC5xLWlmLWlubmVyIHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgfVxcbiAgLnEtaWYgPiAucS1pZi1pbm5lciA+IGRpdiA+IC5xLWlucHV0LXRhcmdldCB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gIH1cXG4gIC5xLWlmID4gLnEtaWYtaW5uZXIgPiBkaXYgPiBpbnB1dC5xLWlucHV0LXRhcmdldCB7XFxuICAgIG1pbi13aWR0aDogM3JlbTtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDAlICFpbXBvcnRhbnQ7XFxuICAgICAgICBmbGV4LWJhc2lzOiAwJSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnEtaW5wdXQtdGFyZ2V0OmJlZm9yZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgfVxcbiAgLnEtaWYtbGFiZWwtc3BhY2VyIHtcXG4gICAgd2lkdGg6IDA7XFxuICB9XFxuICAucS1lZGl0b3ItdG9vbGJhciAucS1idG4tZ3JvdXAucm93LmlubGluZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgfVxcbiAgLnEtdG9vbGJhcixcXG4gIC5xLWFjdGlvbnNoZWV0LXRpdGxlLFxcbiAgLnEtZmllbGQtbGFiZWwtaW5uZXIge1xcbiAgICBoZWlnaHQ6IDBweDtcXG4gIH1cXG4gIC5xLWNhcm91c2VsLXNsaWRlIHtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wucS1hbGVydC1jb250ZW50IHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLnEtc2xpZGVyLWhhbmRsZSA+IC5xLWNoaXAuaW5saW5lLnJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlO1xcbiAgfVxcbiAgYS5xLWJ0bjpub3QoLnEtYnRuLXJvdW5kKSB7XFxuICAgIGhlaWdodDogMHB4O1xcbiAgfVxcbiAgLnEtYnRuIC5xLWJ0bi1pbm5lciB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gIH1cXG4gIC5xLWJ0bjphY3RpdmUgLnEtYnRuLWlubmVyLFxcbiAgLnEtYnRuLmFjdGl2ZSAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IC0xcHggMXB4IDFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuOmFjdGl2ZS5xLWJ0bi1wdXNoIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi5hY3RpdmUucS1idG4tcHVzaCAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IDFweCAxcHggLTFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuOmFjdGl2ZS5xLWJ0bi1wdXNoLmRpc2FibGVkIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi5hY3RpdmUucS1idG4tcHVzaC5kaXNhYmxlZCAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IC0xcHggMXB4IDFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuLWdyb3VwID4gLnEtYnRuLnEtYnRuLXB1c2g6bm90KC5kaXNhYmxlZCk6YWN0aXZlIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi1ncm91cCA+IC5xLWJ0bi5xLWJ0bi1wdXNoOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuICAucS1jaGlwOm5vdCgucS1jaGlwLXNtYWxsKTpub3QoLnEtY2hpcC1kZW5zZSkgLnEtY2hpcC1tYWluIHtcXG4gICAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICB9XFxuICAucS1idG4gLnEtY2hpcCB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIH1cXG4gIC5xLXRhYiAucS1jaGlwIC5xLWNoaXAtbWFpbiB7XFxuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XFxuICB9XFxuICAucS1mYWItYWN0aW9ucy5xLWZhYi1sZWZ0LFxcbiAgLnEtZmFiLWFjdGlvbnMucS1mYWItcmlnaHQge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIH1cXG4gIC5xLWl0ZW0tbWFpbiB7XFxuICAgIG1pbi13aWR0aDogMXB4O1xcbiAgfVxcbiAgLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWl0ZW0ge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDA7XFxuICB9XFxuICAucS1tb2RhbC1sYXlvdXQge1xcbiAgICBtaW4taGVpZ2h0OiA4MHZoICFpbXBvcnRhbnQ7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgd2Via2l0LWF1dG9maWxsLW9uIHtcXG4gIHRvIHtcXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICAgIGNvbG9yOiAjZmY5ODAwO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHdlYmtpdC1hdXRvZmlsbC1vZmYge1xcbiAgdG8ge1xcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUge1xcbiAgMCUge1xcbiAgICBsZWZ0OiAtMzUlO1xcbiAgICByaWdodDogMTAwJTtcXG4gIH1cXG4gIDYwJSB7XFxuICAgIGxlZnQ6IDEwMCU7XFxuICAgIHJpZ2h0OiAtOTAlO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIGxlZnQ6IDEwMCU7XFxuICAgIHJpZ2h0OiAtOTAlO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1zaG9ydCB7XFxuICAwJSB7XFxuICAgIGxlZnQ6IC0yMDAlO1xcbiAgICByaWdodDogMTAwJTtcXG4gIH1cXG4gIDYwJSB7XFxuICAgIGxlZnQ6IDEwNyU7XFxuICAgIHJpZ2h0OiAtOCU7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgbGVmdDogMTA3JTtcXG4gICAgcmlnaHQ6IC04JTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXByb2dyZXNzLXN0cmlwZXMge1xcbiAgZnJvbSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDQwcHggMDtcXG4gIH1cXG4gIHRvIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtbWF0LWRhc2gge1xcbiAgMCUge1xcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxLCAyMDA7XFxuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgc3Ryb2tlLWRhc2hhcnJheTogODksIDIwMDtcXG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0zNXB4O1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDg5LCAyMDA7XFxuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTI0cHg7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1oaWdobGlnaHQge1xcbiAgMCUge1xcbiAgICBiYWNrZ3JvdW5kOiAjY2RkYzM5O1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtcm90YXRlIHtcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMCkgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG4gIDI1JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbiAgfVxcbiAgNzUlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLWJsaW5rIHtcXG4gIHRvIHtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtc3BpbiB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxuICB9XFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKSAvKiBydGw6aWdub3JlICovO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtcG9wIHtcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjcpO1xcbiAgfVxcbiAgNzAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA3KTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtZmFkZSB7XFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXNjYWxlIHtcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjcpO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1ib3VuY2Uge1xcbiAgMCUsIDIwJSwgNTAlLCA4MCUsIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxuICB9XFxuICA0MCUge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTMwcHgpO1xcbiAgfVxcbiAgNjAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNXB4KTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXNoYWtlIHtcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMik7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXBvcHVwLWRvd24ge1xcbiAgMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpIHNjYWxlWSgwLjMpO1xcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIH1cXG4gIDMwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1wb3B1cC11cCB7XFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KSBzY2FsZVkoMC4zKTtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICB9XFxuICAzMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtc2xpZGUtbGVmdCB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNzAlKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXNsaWRlLXJpZ2h0IHtcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDcwJSk7XFxuICB9XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiXFxuYnV0dG9uICsgYnV0dG9uW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgbWFyZ2luLWxlZnQ6IDAuNWVtO1xcbn1cXG5idXR0b25bZGF0YS12LTRmYmM3MzViXSB7XFxuICBwYWRkaW5nOiAwLjRlbSAwLjZlbTtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBvdXRsaW5lOiAwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5idXR0b25bZGlzYWJsZWRdW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgYm9yZGVyLWNvbG9yOiAjYWU2NWM1O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG4ubW9kYWxbZGF0YS12LTRmYmM3MzViXSB7XFxuICBjb2xvcjogcmVkO1xcbn1cXG5cXG4vKipcXG4gKiBTZWUgaHR0cHM6Ly92dWUtbG9hZGVyLnZ1ZWpzLm9yZy9ndWlkZS9zY29wZWQtY3NzLmh0bWwjZGVlcC1zZWxlY3RvcnNcXG4gKiB0aGUgYD4+PmAgYWxsb3dzIHRvIGFwcGx5IHNjb3BlZCBjc3MgdG8gY2hpbGQgZWxlbWVudCB0aGF0IGlzIGdlbmVyYXRlZFxcbiAqIGR5bmFtaWNhbGx5XFxuKiovXFxuLm1vZGFsW2RhdGEtdi00ZmJjNzM1Yl0gLm1vZGFsLXNjcm9sbCB7XFxuICBjb2xvcjogcmVkO1xcbiAgbWF4LWhlaWdodDogbm9uZTtcXG59XFxuLm1vZGFsIC5tb2RhbC1ib2R5W2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgbWF4LWhlaWdodDogbm9uZTtcXG59XFxuaDFbZGF0YS12LTRmYmM3MzViXSB7XFxuICBmb250LWZhbWlseTogQ291cmllcjtcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXG59XFxuaDJbZGF0YS12LTRmYmM3MzViXSB7XFxuICBmb250LWZhbWlseTogQ291cmllcjtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIG1hcmdpbi10b3A6IDJyZW07XFxufVxcbi5hcHAgLnJvd1tkYXRhLXYtNGZiYzczNWJdIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG4ucm93ICsgLnJvd1tkYXRhLXYtNGZiYzczNWJdIHtcXG4gIG1hcmdpbi10b3A6IDJlbTtcXG59XFxuLnJvdy1zbWFsbFtkYXRhLXYtNGZiYzczNWJdIHtcXG4gIG1hcmdpbi10b3A6IDFlbTtcXG59XFxuLmVtb2ppLW1hcnRbZGF0YS12LTRmYmM3MzViXSB7XFxuICBtYXJnaW46IDAgYXV0bztcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcbi5lbW9qaS1tYXJ0LXRpdGxlLWxhYmVsW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgZm9udC1zaXplOiAyMXB4O1xcbn1cXG4ucG9wdXBbZGF0YS12LTRmYmM3MzViXSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwdmg7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogMjAwO1xcbiAgYmFja2dyb3VuZDogcmViZWNjYXB1cnBsZTtcXG4gIG9wYWNpdHk6IDk1JTtcXG59XFxuLnBvcHVwLWJveFtkYXRhLXYtNGZiYzczNWJdIHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nLXRvcDogMTIwcHg7XFxuICBwYWRkaW5nLWJvdHRvbTogODBweDtcXG59XFxuLnBvcHVwLWNvbnRlbnRbZGF0YS12LTRmYmM3MzViXSB7XFxuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcXG4gIGJveC1zaGFkb3c6IDBweCAyNHB4IDU0cHggcmdiYSgyMCwgMjgsIDQ5LCAwLjE0KTtcXG4gIGJvcmRlci1yYWRpdXM6IDE4cHg7XFxuICBwYWRkaW5nOiA2cHggNnB4IDlweCA2cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1heC13aWR0aDogNDYycHg7XFxuICBtYXJnaW46IDAgYXV0bztcXG59XFxuLnBvcHVwLWNsb3NlW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAyMHB4O1xcbiAgcmlnaHQ6IDMwcHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih1c2VTb3VyY2VNYXApIHtcblx0dmFyIGxpc3QgPSBbXTtcblxuXHQvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cdGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXHRcdFx0aWYoaXRlbVsyXSkge1xuXHRcdFx0XHRyZXR1cm4gXCJAbWVkaWEgXCIgKyBpdGVtWzJdICsgXCJ7XCIgKyBjb250ZW50ICsgXCJ9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHRcdH1cblx0XHR9KS5qb2luKFwiXCIpO1xuXHR9O1xuXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcblx0XHRpZih0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIilcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxuXHRcdFx0XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG5cdFx0fVxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gbW9kdWxlc1tpXTtcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxuXHRcdFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG5cdFx0XHRcdGlmKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gXCIoXCIgKyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIpXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7XG5cdHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblx0aWYgKCFjc3NNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdH1cblxuXHRpZiAodXNlU291cmNlTWFwICYmIHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIHNvdXJjZU1hcHBpbmcgPSB0b0NvbW1lbnQoY3NzTWFwcGluZyk7XG5cdFx0dmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0XHRcdHJldHVybiAnLyojIHNvdXJjZVVSTD0nICsgY3NzTWFwcGluZy5zb3VyY2VSb290ICsgc291cmNlICsgJyAqLydcblx0XHR9KTtcblxuXHRcdHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuXHR9XG5cblx0cmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn1cblxuLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuZnVuY3Rpb24gdG9Db21tZW50KHNvdXJjZU1hcCkge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblx0dmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSk7XG5cdHZhciBkYXRhID0gJ3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCcgKyBiYXNlNjQ7XG5cblx0cmV0dXJuICcvKiMgJyArIGRhdGEgKyAnICovJztcbn1cbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiFcbiAqIFF1YXNhciBGcmFtZXdvcmsgdjAuMTcuMjBcbiAqIChjKSAyMDE2LXByZXNlbnQgUmF6dmFuIFN0b2VuZXNjdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG52YXIgd2ViU3RvcmFnZSxpc1NTUj1cInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93LGZyb21TU1I9ITEsb25TU1I9aXNTU1I7ZnVuY3Rpb24gZ2V0TWF0Y2godCxlKXt2YXIgaT0vKGVkZ2UpXFwvKFtcXHcuXSspLy5leGVjKHQpfHwvKG9wcilbXFwvXShbXFx3Ll0rKS8uZXhlYyh0KXx8Lyh2aXZhbGRpKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKGNocm9tZSlbXFwvXShbXFx3Ll0rKS8uZXhlYyh0KXx8LyhpZW1vYmlsZSlbXFwvXShbXFx3Ll0rKS8uZXhlYyh0KXx8Lyh2ZXJzaW9uKShhcHBsZXdlYmtpdClbXFwvXShbXFx3Ll0rKS4qKHNhZmFyaSlbXFwvXShbXFx3Ll0rKS8uZXhlYyh0KXx8Lyh3ZWJraXQpW1xcL10oW1xcdy5dKykuKih2ZXJzaW9uKVtcXC9dKFtcXHcuXSspLiooc2FmYXJpKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKHdlYmtpdClbXFwvXShbXFx3Ll0rKS8uZXhlYyh0KXx8LyhvcGVyYSkoPzouKnZlcnNpb258KVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKG1zaWUpIChbXFx3Ll0rKS8uZXhlYyh0KXx8dC5pbmRleE9mKFwidHJpZGVudFwiKT49MCYmLyhydikoPzo6fCApKFtcXHcuXSspLy5leGVjKHQpfHx0LmluZGV4T2YoXCJjb21wYXRpYmxlXCIpPDAmJi8obW96aWxsYSkoPzouKj8gcnY6KFtcXHcuXSspfCkvLmV4ZWModCl8fFtdO3JldHVybnticm93c2VyOmlbNV18fGlbM118fGlbMV18fFwiXCIsdmVyc2lvbjppWzJdfHxpWzRdfHxcIjBcIix2ZXJzaW9uTnVtYmVyOmlbNF18fGlbMl18fFwiMFwiLHBsYXRmb3JtOmVbMF18fFwiXCJ9fWZ1bmN0aW9uIGdldFBsYXRmb3JtTWF0Y2godCl7cmV0dXJuLyhpcGFkKS8uZXhlYyh0KXx8LyhpcG9kKS8uZXhlYyh0KXx8Lyh3aW5kb3dzIHBob25lKS8uZXhlYyh0KXx8LyhpcGhvbmUpLy5leGVjKHQpfHwvKGtpbmRsZSkvLmV4ZWModCl8fC8oc2lsaykvLmV4ZWModCl8fC8oYW5kcm9pZCkvLmV4ZWModCl8fC8od2luKS8uZXhlYyh0KXx8LyhtYWMpLy5leGVjKHQpfHwvKGxpbnV4KS8uZXhlYyh0KXx8Lyhjcm9zKS8uZXhlYyh0KXx8LyhwbGF5Ym9vaykvLmV4ZWModCl8fC8oYmIpLy5leGVjKHQpfHwvKGJsYWNrYmVycnkpLy5leGVjKHQpfHxbXX1mdW5jdGlvbiBnZXRQbGF0Zm9ybSh0KXt2YXIgZT1nZXRNYXRjaCh0PSh0fHxuYXZpZ2F0b3IudXNlckFnZW50fHxuYXZpZ2F0b3IudmVuZG9yfHx3aW5kb3cub3BlcmEpLnRvTG93ZXJDYXNlKCksZ2V0UGxhdGZvcm1NYXRjaCh0KSksaT17fTtyZXR1cm4gZS5icm93c2VyJiYoaVtlLmJyb3dzZXJdPSEwLGkudmVyc2lvbj1lLnZlcnNpb24saS52ZXJzaW9uTnVtYmVyPXBhcnNlSW50KGUudmVyc2lvbk51bWJlciwxMCkpLGUucGxhdGZvcm0mJihpW2UucGxhdGZvcm1dPSEwKSwoaS5hbmRyb2lkfHxpLmJifHxpLmJsYWNrYmVycnl8fGkuaXBhZHx8aS5pcGhvbmV8fGkuaXBvZHx8aS5raW5kbGV8fGkucGxheWJvb2t8fGkuc2lsa3x8aVtcIndpbmRvd3MgcGhvbmVcIl0pJiYoaS5tb2JpbGU9ITApLChpLmlwb2R8fGkuaXBhZHx8aS5pcGhvbmUpJiYoaS5pb3M9ITApLGlbXCJ3aW5kb3dzIHBob25lXCJdJiYoaS53aW5waG9uZT0hMCxkZWxldGUgaVtcIndpbmRvd3MgcGhvbmVcIl0pLChpLmNyb3N8fGkubWFjfHxpLmxpbnV4fHxpLndpbikmJihpLmRlc2t0b3A9ITApLChpLmNocm9tZXx8aS5vcHJ8fGkuc2FmYXJpfHxpLnZpdmFsZGkpJiYoaS53ZWJraXQ9ITApLChpLnJ2fHxpLmllbW9iaWxlKSYmKGUuYnJvd3Nlcj1cImllXCIsaS5pZT0hMCksaS5lZGdlJiYoZS5icm93c2VyPVwiZWRnZVwiLGkuZWRnZT0hMCksKGkuc2FmYXJpJiZpLmJsYWNrYmVycnl8fGkuYmIpJiYoZS5icm93c2VyPVwiYmxhY2tiZXJyeVwiLGkuYmxhY2tiZXJyeT0hMCksaS5zYWZhcmkmJmkucGxheWJvb2smJihlLmJyb3dzZXI9XCJwbGF5Ym9va1wiLGkucGxheWJvb2s9ITApLGkub3ByJiYoZS5icm93c2VyPVwib3BlcmFcIixpLm9wZXJhPSEwKSxpLnNhZmFyaSYmaS5hbmRyb2lkJiYoZS5icm93c2VyPVwiYW5kcm9pZFwiLGkuYW5kcm9pZD0hMCksaS5zYWZhcmkmJmkua2luZGxlJiYoZS5icm93c2VyPVwia2luZGxlXCIsaS5raW5kbGU9ITApLGkuc2FmYXJpJiZpLnNpbGsmJihlLmJyb3dzZXI9XCJzaWxrXCIsaS5zaWxrPSEwKSxpLnZpdmFsZGkmJihlLmJyb3dzZXI9XCJ2aXZhbGRpXCIsaS52aXZhbGRpPSEwKSxpLm5hbWU9ZS5icm93c2VyLGkucGxhdGZvcm09ZS5wbGF0Zm9ybSxpc1NTUnx8KHdpbmRvdy5wcm9jZXNzJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucyYmd2luZG93LnByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24/aS5lbGVjdHJvbj0hMDowPT09ZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKFwiY2hyb21lLWV4dGVuc2lvbjovL1wiKT9pLmNocm9tZUV4dD0hMDood2luZG93Ll9jb3Jkb3ZhTmF0aXZlfHx3aW5kb3cuY29yZG92YSkmJihpLmNvcmRvdmE9ITApLChmcm9tU1NSPXZvaWQgMD09PWkuY29yZG92YSYmdm9pZCAwPT09aS5lbGVjdHJvbiYmISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtc2VydmVyLXJlbmRlcmVkXVwiKSkmJihvblNTUj0hMCkpLGl9ZnVuY3Rpb24gaGFzV2ViU3RvcmFnZSgpe2lmKHZvaWQgMCE9PXdlYlN0b3JhZ2UpcmV0dXJuIHdlYlN0b3JhZ2U7dHJ5e2lmKHdpbmRvdy5sb2NhbFN0b3JhZ2UpcmV0dXJuIHdlYlN0b3JhZ2U9ITAsITB9Y2F0Y2godCl7fXJldHVybiB3ZWJTdG9yYWdlPSExLCExfWZ1bmN0aW9uIGdldENsaWVudFByb3BlcnRpZXMoKXtyZXR1cm57aGFzOnt0b3VjaDohIShcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXx8d2luZG93Lm5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzPjAsd2ViU3RvcmFnZTpoYXNXZWJTdG9yYWdlKCl9LHdpdGhpbjp7aWZyYW1lOndpbmRvdy5zZWxmIT09d2luZG93LnRvcH19fXZhciBQbGF0Zm9ybT17aGFzOnt0b3VjaDohMSx3ZWJTdG9yYWdlOiExfSx3aXRoaW46e2lmcmFtZTohMX0scGFyc2VTU1I6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/e2lzOmdldFBsYXRmb3JtKHQucmVxLmhlYWRlcnNbXCJ1c2VyLWFnZW50XCJdKSxoYXM6dGhpcy5oYXMsd2l0aGluOnRoaXMud2l0aGlufTpPYmplY3QuYXNzaWduKHt9LHtpczpnZXRQbGF0Zm9ybSgpfSxnZXRDbGllbnRQcm9wZXJ0aWVzKCkpfSxpbnN0YWxsOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzO2lzU1NSP2Uuc2VydmVyLnB1c2goZnVuY3Rpb24odCxlKXt0LnBsYXRmb3JtPXMucGFyc2VTU1IoZS5zc3IpfSk6KHRoaXMuaXM9Z2V0UGxhdGZvcm0oKSxmcm9tU1NSPyhlLnRha2VvdmVyLnB1c2goZnVuY3Rpb24odCl7b25TU1I9ZnJvbVNTUj0hMSxPYmplY3QuYXNzaWduKHQucGxhdGZvcm0sZ2V0Q2xpZW50UHJvcGVydGllcygpKX0pLGkudXRpbC5kZWZpbmVSZWFjdGl2ZSh0LFwicGxhdGZvcm1cIix0aGlzKSk6KE9iamVjdC5hc3NpZ24odGhpcyxnZXRDbGllbnRQcm9wZXJ0aWVzKCkpLHQucGxhdGZvcm09dGhpcykpfX07ZnVuY3Rpb24gYXNzaWduKHQsZSl7dmFyIGk9YXJndW1lbnRzO2lmKHZvaWQgMD09PXR8fG51bGw9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCBmaXJzdCBhcmd1bWVudCB0byBvYmplY3RcIik7Zm9yKHZhciBzPU9iamVjdCh0KSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIG89aVtuXTtpZih2b2lkIDAhPT1vJiZudWxsIT09bylmb3IodmFyIHI9T2JqZWN0LmtleXMoT2JqZWN0KG8pKSxhPTAsbD1yLmxlbmd0aDthPGw7YSsrKXt2YXIgYz1yW2FdLGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLGMpO3ZvaWQgMCE9PWgmJmguZW51bWVyYWJsZSYmKHNbY109b1tjXSl9fXJldHVybiBzfU9iamVjdC5hc3NpZ258fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QsXCJhc3NpZ25cIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6YXNzaWdufSksTnVtYmVyLmlzSW50ZWdlcnx8KE51bWJlci5pc0ludGVnZXI9ZnVuY3Rpb24odCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQmJmlzRmluaXRlKHQpJiZNYXRoLmZsb29yKHQpPT09dH0pLEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc3x8KEFycmF5LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUpe3ZhciBpPU9iamVjdCh0aGlzKSxzPXBhcnNlSW50KGkubGVuZ3RoLDEwKXx8MDtpZigwPT09cylyZXR1cm4hMTt2YXIgbixvLHI9cGFyc2VJbnQoZSwxMCl8fDA7Zm9yKHI+PTA/bj1yOihuPXMrcik8MCYmKG49MCk7bjxzOyl7aWYodD09PShvPWlbbl0pfHx0IT10JiZvIT1vKXJldHVybiEwO24rK31yZXR1cm4hMX0pLFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aHx8KFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aD1mdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDAsdGhpcy5zdWJzdHIoZSx0Lmxlbmd0aCk9PT10fSksU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aHx8KFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGg9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnRvU3RyaW5nKCk7KFwibnVtYmVyXCIhPXR5cGVvZiBlfHwhaXNGaW5pdGUoZSl8fE1hdGguZmxvb3IoZSkhPT1lfHxlPmkubGVuZ3RoKSYmKGU9aS5sZW5ndGgpLGUtPXQubGVuZ3RoO3ZhciBzPWkuaW5kZXhPZih0LGUpO3JldHVybi0xIT09cyYmcz09PWV9KSxpc1NTUnx8KFwiZnVuY3Rpb25cIiE9dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMmJihFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzPUVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS5tb3pNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSh0aGlzLmRvY3VtZW50fHx0aGlzLm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwodCksaT0wO2VbaV0mJmVbaV0hPT10aGlzOykrK2k7cmV0dXJuIEJvb2xlYW4oZVtpXSl9KSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5jbG9zZXN0JiYoRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcztlJiYxPT09ZS5ub2RlVHlwZTspe2lmKGUubWF0Y2hlcyh0KSlyZXR1cm4gZTtlPWUucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH0pLFtFbGVtZW50LnByb3RvdHlwZSxDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZSxEb2N1bWVudFR5cGUucHJvdG90eXBlXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuaGFzT3duUHJvcGVydHkoXCJyZW1vdmVcIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicmVtb3ZlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpfX0pfSkpLEFycmF5LnByb3RvdHlwZS5maW5kfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLFwiZmluZFwiLHt2YWx1ZTpmdW5jdGlvbih0KXtpZihudWxsPT10aGlzKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheS5wcm90b3R5cGUuZmluZCBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWRcIik7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwicHJlZGljYXRlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtmb3IodmFyIGUsaT1PYmplY3QodGhpcykscz1pLmxlbmd0aD4+PjAsbj1hcmd1bWVudHNbMV0sbz0wO288cztvKyspaWYoZT1pW29dLHQuY2FsbChuLGUsbyxpKSlyZXR1cm4gZX19KTt2YXIgdmVyc2lvbj1cIjAuMTcuMjBcIixIaXN0b3J5PXtfX2hpc3Rvcnk6W10sYWRkOmZ1bmN0aW9uKCl7fSxyZW1vdmU6ZnVuY3Rpb24oKXt9LGluc3RhbGw6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO2lmKCFpc1NTUiYmdC5wbGF0Zm9ybS5pcy5jb3Jkb3ZhKXt0aGlzLmFkZD1mdW5jdGlvbih0KXtpLl9faGlzdG9yeS5wdXNoKHQpfSx0aGlzLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT1pLl9faGlzdG9yeS5pbmRleE9mKHQpO2U+PTAmJmkuX19oaXN0b3J5LnNwbGljZShlLDEpfTt2YXIgcz12b2lkIDA9PT1lLmNvcmRvdmF8fCExIT09ZS5jb3Jkb3ZhLmJhY2tCdXR0b25FeGl0O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJkZXZpY2VyZWFkeVwiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImJhY2tidXR0b25cIixmdW5jdGlvbigpe2kuX19oaXN0b3J5Lmxlbmd0aD9pLl9faGlzdG9yeS5wb3AoKS5oYW5kbGVyKCk6cyYmXCIjL1wiPT09d2luZG93LmxvY2F0aW9uLmhhc2g/bmF2aWdhdG9yLmFwcC5leGl0QXBwKCk6d2luZG93Lmhpc3RvcnkuYmFjaygpfSwhMSl9KX19fSxsYW5nRW49e2xhbmc6XCJlbi11c1wiLGxhYmVsOntjbGVhcjpcIkNsZWFyXCIsb2s6XCJPS1wiLGNhbmNlbDpcIkNhbmNlbFwiLGNsb3NlOlwiQ2xvc2VcIixzZXQ6XCJTZXRcIixzZWxlY3Q6XCJTZWxlY3RcIixyZXNldDpcIlJlc2V0XCIscmVtb3ZlOlwiUmVtb3ZlXCIsdXBkYXRlOlwiVXBkYXRlXCIsY3JlYXRlOlwiQ3JlYXRlXCIsc2VhcmNoOlwiU2VhcmNoXCIsZmlsdGVyOlwiRmlsdGVyXCIscmVmcmVzaDpcIlJlZnJlc2hcIn0sZGF0ZTp7ZGF5czpcIlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5XCIuc3BsaXQoXCJfXCIpLGRheXNTaG9ydDpcIlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdFwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksZmlyc3REYXlPZldlZWs6MCxmb3JtYXQyNGg6ITF9LHB1bGxUb1JlZnJlc2g6e3B1bGw6XCJQdWxsIGRvd24gdG8gcmVmcmVzaFwiLHJlbGVhc2U6XCJSZWxlYXNlIHRvIHJlZnJlc2hcIixyZWZyZXNoOlwiUmVmcmVzaGluZy4uLlwifSx0YWJsZTp7bm9EYXRhOlwiTm8gZGF0YSBhdmFpbGFibGVcIixub1Jlc3VsdHM6XCJObyBtYXRjaGluZyByZWNvcmRzIGZvdW5kXCIsbG9hZGluZzpcIkxvYWRpbmcuLi5cIixzZWxlY3RlZFJlY29yZHM6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P1wiMSByZWNvcmQgc2VsZWN0ZWQuXCI6KDA9PT10P1wiTm9cIjp0KStcIiByZWNvcmRzIHNlbGVjdGVkLlwifSxyZWNvcmRzUGVyUGFnZTpcIlJlY29yZHMgcGVyIHBhZ2U6XCIsYWxsUm93czpcIkFsbFwiLHBhZ2luYXRpb246ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0K1wiLVwiK2UrXCIgb2YgXCIraX0sY29sdW1uczpcIkNvbHVtbnNcIn0sZWRpdG9yOnt1cmw6XCJVUkxcIixib2xkOlwiQm9sZFwiLGl0YWxpYzpcIkl0YWxpY1wiLHN0cmlrZXRocm91Z2g6XCJTdHJpa2V0aHJvdWdoXCIsdW5kZXJsaW5lOlwiVW5kZXJsaW5lXCIsdW5vcmRlcmVkTGlzdDpcIlVub3JkZXJlZCBMaXN0XCIsb3JkZXJlZExpc3Q6XCJPcmRlcmVkIExpc3RcIixzdWJzY3JpcHQ6XCJTdWJzY3JpcHRcIixzdXBlcnNjcmlwdDpcIlN1cGVyc2NyaXB0XCIsaHlwZXJsaW5rOlwiSHlwZXJsaW5rXCIsdG9nZ2xlRnVsbHNjcmVlbjpcIlRvZ2dsZSBGdWxsc2NyZWVuXCIscXVvdGU6XCJRdW90ZVwiLGxlZnQ6XCJMZWZ0IGFsaWduXCIsY2VudGVyOlwiQ2VudGVyIGFsaWduXCIscmlnaHQ6XCJSaWdodCBhbGlnblwiLGp1c3RpZnk6XCJKdXN0aWZ5IGFsaWduXCIscHJpbnQ6XCJQcmludFwiLG91dGRlbnQ6XCJEZWNyZWFzZSBpbmRlbnRhdGlvblwiLGluZGVudDpcIkluY3JlYXNlIGluZGVudGF0aW9uXCIscmVtb3ZlRm9ybWF0OlwiUmVtb3ZlIGZvcm1hdHRpbmdcIixmb3JtYXR0aW5nOlwiRm9ybWF0dGluZ1wiLGZvbnRTaXplOlwiRm9udCBTaXplXCIsYWxpZ246XCJBbGlnblwiLGhyOlwiSW5zZXJ0IEhvcml6b250YWwgUnVsZVwiLHVuZG86XCJVbmRvXCIscmVkbzpcIlJlZG9cIixoZWFkZXIxOlwiSGVhZGVyIDFcIixoZWFkZXIyOlwiSGVhZGVyIDJcIixoZWFkZXIzOlwiSGVhZGVyIDNcIixoZWFkZXI0OlwiSGVhZGVyIDRcIixoZWFkZXI1OlwiSGVhZGVyIDVcIixoZWFkZXI2OlwiSGVhZGVyIDZcIixwYXJhZ3JhcGg6XCJQYXJhZ3JhcGhcIixjb2RlOlwiQ29kZVwiLHNpemUxOlwiVmVyeSBzbWFsbFwiLHNpemUyOlwiQSBiaXQgc21hbGxcIixzaXplMzpcIk5vcm1hbFwiLHNpemU0OlwiTWVkaXVtLWxhcmdlXCIsc2l6ZTU6XCJCaWdcIixzaXplNjpcIlZlcnkgYmlnXCIsc2l6ZTc6XCJNYXhpbXVtXCIsZGVmYXVsdEZvbnQ6XCJEZWZhdWx0IEZvbnRcIn0sdHJlZTp7bm9Ob2RlczpcIk5vIG5vZGVzIGF2YWlsYWJsZVwiLG5vUmVzdWx0czpcIk5vIG1hdGNoaW5nIG5vZGVzIGZvdW5kXCJ9fSxpMThuPXtpbnN0YWxsOmZ1bmN0aW9uKHQsZSxpLHMpe3ZhciBuPXRoaXM7aXNTU1ImJmUuc2VydmVyLnB1c2goZnVuY3Rpb24odCxlKXt2YXIgaT17bGFuZzp0LmkxOG4ubGFuZyxkaXI6dC5pMThuLnJ0bD9cInJ0bFwiOlwibHRyXCJ9LHM9ZS5zc3Iuc2V0SHRtbEF0dHJzO1wiZnVuY3Rpb25cIj09dHlwZW9mIHM/cyhpKTplLnNzci5RX0hUTUxfQVRUUlM9T2JqZWN0LmtleXMoaSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0K1wiPVwiK2lbdF19KS5qb2luKFwiIFwiKX0pLHRoaXMuc2V0PWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPWxhbmdFbiksZS5zZXQ9bi5zZXQsZS5nZXRMb2NhbGU9bi5nZXRMb2NhbGUsZS5ydGw9ZS5ydGx8fCExLCFpc1NTUil7dmFyIHM9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Muc2V0QXR0cmlidXRlKFwiZGlyXCIsZS5ydGw/XCJydGxcIjpcImx0clwiKSxzLnNldEF0dHJpYnV0ZShcImxhbmdcIixlLmxhbmcpfWlzU1NSfHx0LmkxOG4/dC5pMThuPWU6aS51dGlsLmRlZmluZVJlYWN0aXZlKHQsXCJpMThuXCIsZSksbi5uYW1lPWUubGFuZyxuLmxhbmc9ZX0sdGhpcy5zZXQocyl9LGdldExvY2FsZTpmdW5jdGlvbigpe2lmKCFpc1NTUil7dmFyIHQ9bmF2aWdhdG9yLmxhbmd1YWdlfHxuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHxuYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlfHxuYXZpZ2F0b3IudXNlckxhbmd1YWdlfHxuYXZpZ2F0b3Iuc3lzdGVtTGFuZ3VhZ2U7cmV0dXJuIHQ/dC50b0xvd2VyQ2FzZSgpOnZvaWQgMH19fTtmdW5jdGlvbiByZ2JUb0hleCh0KXt2YXIgZT10LnIsaT10Lmcscz10LmIsbj10LmEsbz12b2lkIDAhPT1uO2lmKGU9TWF0aC5yb3VuZChlKSxpPU1hdGgucm91bmQoaSkscz1NYXRoLnJvdW5kKHMpLGU+MjU1fHxpPjI1NXx8cz4yNTV8fG8mJm4+MTAwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCAzIG51bWJlcnMgYmVsb3cgMjU2IChhbmQgb3B0aW9uYWxseSBvbmUgYmVsb3cgMTAwKVwiKTtyZXR1cm4gbj1vPygyNTZ8TWF0aC5yb3VuZCgyNTUqbi8xMDApKS50b1N0cmluZygxNikuc2xpY2UoMSk6XCJcIixcIiNcIisoc3xpPDw4fGU8PDE2fDE8PDI0KS50b1N0cmluZygxNikuc2xpY2UoMSkrbn1mdW5jdGlvbiBoZXhUb1JnYih0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmdcIik7Mz09PSh0PXQucmVwbGFjZSgvXiMvLFwiXCIpKS5sZW5ndGg/dD10WzBdK3RbMF0rdFsxXSt0WzFdK3RbMl0rdFsyXTo0PT09dC5sZW5ndGgmJih0PXRbMF0rdFswXSt0WzFdK3RbMV0rdFsyXSt0WzJdK3RbM10rdFszXSk7dmFyIGU9cGFyc2VJbnQodCwxNik7cmV0dXJuIHQubGVuZ3RoPjY/e3I6ZT4+MjQmMjU1LGc6ZT4+MTYmMjU1LGI6ZT4+OCYyNTUsYTpNYXRoLnJvdW5kKCgyNTUmZSkvMi41NSl9OntyOmU+PjE2LGc6ZT4+OCYyNTUsYjoyNTUmZX19ZnVuY3Rpb24gaHN2VG9SZ2IodCl7dmFyIGUsaSxzLG4sbyxyLGEsbCxjPXQuaCxoPXQucyx1PXQudixkPXQuYTtzd2l0Y2gocj0odS89MTAwKSooMS0oaC89MTAwKSksYT11KigxLShvPTYqKGMvPTM2MCktKG49TWF0aC5mbG9vcig2KmMpKSkqaCksbD11KigxLSgxLW8pKmgpLG4lNil7Y2FzZSAwOmU9dSxpPWwscz1yO2JyZWFrO2Nhc2UgMTplPWEsaT11LHM9cjticmVhaztjYXNlIDI6ZT1yLGk9dSxzPWw7YnJlYWs7Y2FzZSAzOmU9cixpPWEscz11O2JyZWFrO2Nhc2UgNDplPWwsaT1yLHM9dTticmVhaztjYXNlIDU6ZT11LGk9cixzPWF9cmV0dXJue3I6TWF0aC5yb3VuZCgyNTUqZSksZzpNYXRoLnJvdW5kKDI1NSppKSxiOk1hdGgucm91bmQoMjU1KnMpLGE6ZH19ZnVuY3Rpb24gcmdiVG9Ic3YodCl7dmFyIGUsaT10LnIscz10Lmcsbj10LmIsbz10LmEscj1NYXRoLm1heChpLHMsbiksYT1NYXRoLm1pbihpLHMsbiksbD1yLWEsYz0wPT09cj8wOmwvcixoPXIvMjU1O3N3aXRjaChyKXtjYXNlIGE6ZT0wO2JyZWFrO2Nhc2UgaTplPXMtbitsKihzPG4/NjowKSxlLz02Kmw7YnJlYWs7Y2FzZSBzOmU9bi1pKzIqbCxlLz02Kmw7YnJlYWs7Y2FzZSBuOmU9aS1zKzQqbCxlLz02Kmx9cmV0dXJue2g6TWF0aC5yb3VuZCgzNjAqZSksczpNYXRoLnJvdW5kKDEwMCpjKSx2Ok1hdGgucm91bmQoMTAwKmgpLGE6b319dmFyIHJlUkdCQT0vXlxccypyZ2IoYSk/XFxzKlxcKChcXHMqKFxcZCspXFxzKixcXHMqPyl7Mn0oXFxkKylcXHMqLD9cXHMqKFswMV0/XFwuP1xcZCo/KT9cXHMqXFwpXFxzKiQvO2Z1bmN0aW9uIHRleHRUb1JnYih0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmdcIik7dmFyIGU9cmVSR0JBLmV4ZWModCk7aWYoZSl7dmFyIGk9e3I6TWF0aC5tYXgoMjU1LHBhcnNlSW50KGVbMl0sMTApKSxnOk1hdGgubWF4KDI1NSxwYXJzZUludChlWzNdLDEwKSksYjpNYXRoLm1heCgyNTUscGFyc2VJbnQoZVs0XSwxMCkpfTtyZXR1cm4gZVsxXSYmKGkuYT1NYXRoLm1heCgxLHBhcnNlRmxvYXQoZVs1XSkpKSxpfXJldHVybiBoZXhUb1JnYih0KX1mdW5jdGlvbiBsaWdodGVuKHQsZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgc3RyaW5nIGFzIGNvbG9yXCIpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIG51bWVyaWMgcGVyY2VudFwiKTt2YXIgaT10ZXh0VG9SZ2IodCkscz1lPDA/MDoyNTUsbj1NYXRoLmFicyhlKS8xMDAsbz1pLnIscj1pLmcsYT1pLmI7cmV0dXJuXCIjXCIrKDE2Nzc3MjE2KzY1NTM2KihNYXRoLnJvdW5kKChzLW8pKm4pK28pKzI1NiooTWF0aC5yb3VuZCgocy1yKSpuKStyKSsoTWF0aC5yb3VuZCgocy1hKSpuKSthKSkudG9TdHJpbmcoMTYpLnNsaWNlKDEpfWZ1bmN0aW9uIGx1bWlub3NpdHkodCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQmJighdHx8dm9pZCAwPT09dC5yKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYSB7ciwgZywgYn0gb2JqZWN0IGFzIGNvbG9yXCIpO3ZhciBlPVwic3RyaW5nXCI9PXR5cGVvZiB0P3RleHRUb1JnYih0KTp0LGk9ZS5yLzI1NSxzPWUuZy8yNTUsbj1lLmIvMjU1O3JldHVybi4yMTI2KihpPD0uMDM5Mjg/aS8xMi45MjpNYXRoLnBvdygoaSsuMDU1KS8xLjA1NSwyLjQpKSsuNzE1Miooczw9LjAzOTI4P3MvMTIuOTI6TWF0aC5wb3coKHMrLjA1NSkvMS4wNTUsMi40KSkrLjA3MjIqKG48PS4wMzkyOD9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCkpfWZ1bmN0aW9uIHNldEJyYW5kKHQsZSxpKXtpZih2b2lkIDA9PT1pJiYoaT1kb2N1bWVudC5ib2R5KSxcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmcgYXMgY29sb3JcIik7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgc3RyaW5nIGFzIHZhbHVlXCIpO2lmKCEoaSBpbnN0YW5jZW9mIEVsZW1lbnQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIERPTSBlbGVtZW50XCIpO3N3aXRjaChpLnN0eWxlLnNldFByb3BlcnR5KFwiLS1xLWNvbG9yLVwiK3QsZSksdCl7Y2FzZVwibmVnYXRpdmVcIjpjYXNlXCJ3YXJuaW5nXCI6aS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcS1jb2xvci1cIit0K1wiLWxcIixsaWdodGVuKGUsNDYpKTticmVhaztjYXNlXCJsaWdodFwiOmkuc3R5bGUuc2V0UHJvcGVydHkoXCItLXEtY29sb3ItXCIrdCtcIi1kXCIsbGlnaHRlbihlLC0xMCkpfX1mdW5jdGlvbiBnZXRCcmFuZCh0LGUpe2lmKHZvaWQgMD09PWUmJihlPWRvY3VtZW50LmJvZHkpLFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIHN0cmluZyBhcyBjb2xvclwiKTtpZighKGUgaW5zdGFuY2VvZiBFbGVtZW50KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBET00gZWxlbWVudFwiKTtyZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlKS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1xLWNvbG9yLVwiK3QpLnRyaW0oKXx8bnVsbH12YXIgY29sb3JzPXtyZ2JUb0hleDpyZ2JUb0hleCxoZXhUb1JnYjpoZXhUb1JnYixoc3ZUb1JnYjpoc3ZUb1JnYixyZ2JUb0hzdjpyZ2JUb0hzdix0ZXh0VG9SZ2I6dGV4dFRvUmdiLGxpZ2h0ZW46bGlnaHRlbixsdW1pbm9zaXR5Omx1bWlub3NpdHksc2V0QnJhbmQ6c2V0QnJhbmQsZ2V0QnJhbmQ6Z2V0QnJhbmR9O2Z1bmN0aW9uIGdldEJvZHlDbGFzc2VzKHQsZSl7dmFyIGk9dC5pcyxzPXQuaGFzLG49dC53aXRoaW4sbz1bXCJtYXRcIixpLmRlc2t0b3A/XCJkZXNrdG9wXCI6XCJtb2JpbGVcIixzLnRvdWNoP1widG91Y2hcIjpcIm5vLXRvdWNoXCIsXCJwbGF0Zm9ybS1cIisoaS5pb3M/XCJpb3NcIjpcIm1hdFwiKV07aWYoaS5jb3Jkb3ZhJiYoby5wdXNoKFwiY29yZG92YVwiKSxpLmlvcyYmKHZvaWQgMD09PWUuY29yZG92YXx8ITEhPT1lLmNvcmRvdmEuaW9zU3RhdHVzQmFyUGFkZGluZykpKXt2YXIgcj13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSxhPXdpbmRvdy5zY3JlZW4ud2lkdGgqcixsPXdpbmRvdy5zY3JlZW4uaGVpZ2h0KnI7MTEyNT09PWEmJjI0MzY9PT1sJiZvLnB1c2goXCJxLWlvcy1zdGF0dXNiYXIteFwiKSwxMTI1PT09YSYmMjAwMT09PWx8fG8ucHVzaChcInEtaW9zLXN0YXR1c2Jhci1wYWRkaW5nXCIpfXJldHVybiBuLmlmcmFtZSYmby5wdXNoKFwid2l0aGluLWlmcmFtZVwiKSxpLmVsZWN0cm9uJiZvLnB1c2goXCJlbGVjdHJvblwiKSxvfWZ1bmN0aW9uIGJvZHlJbml0KHQsZSl7dmFyIGk9Z2V0Qm9keUNsYXNzZXModCxlKTt0LmlzLmllJiYxMT09PXQuaXMudmVyc2lvbk51bWJlcj9pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCh0KX0pOmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZC5hcHBseShkb2N1bWVudC5ib2R5LmNsYXNzTGlzdCxpKSx0LmlzLmlvcyYmZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGZ1bmN0aW9uKCl7fSl9ZnVuY3Rpb24gc2V0Q29sb3JzKHQpe2Zvcih2YXIgZSBpbiB0KXNldEJyYW5kKGUsdFtlXSl9dmFyIEJvZHk9e2luc3RhbGw6ZnVuY3Rpb24odCxlLGkpe2lzU1NSP2Uuc2VydmVyLnB1c2goZnVuY3Rpb24odCxlKXt2YXIgcz1nZXRCb2R5Q2xhc3Nlcyh0LnBsYXRmb3JtLGkpLG49ZS5zc3Iuc2V0Qm9keUNsYXNzZXM7XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uKHMpOmUuc3NyLlFfQk9EWV9DTEFTU0VTPXMuam9pbihcIiBcIil9KTooaS5icmFuZCYmc2V0Q29sb3JzKGkuYnJhbmQpLGJvZHlJbml0KHQucGxhdGZvcm0saSkpfX0sbWF0ZXJpYWxJY29ucz17bmFtZTpcIm1hdGVyaWFsLWljb25zXCIsdHlwZTp7cG9zaXRpdmU6XCJjaGVja19jaXJjbGVcIixuZWdhdGl2ZTpcIndhcm5pbmdcIixpbmZvOlwiaW5mb1wiLHdhcm5pbmc6XCJwcmlvcml0eV9oaWdoXCJ9LGFycm93Ont1cDpcImFycm93X3Vwd2FyZFwiLHJpZ2h0OlwiYXJyb3dfZm9yd2FyZFwiLGRvd246XCJhcnJvd19kb3dud2FyZFwiLGxlZnQ6XCJhcnJvd19iYWNrXCJ9LGNoZXZyb246e2xlZnQ6XCJjaGV2cm9uX2xlZnRcIixyaWdodDpcImNoZXZyb25fcmlnaHRcIn0scHVsbFRvUmVmcmVzaDp7YXJyb3c6XCJhcnJvd19kb3dud2FyZFwiLHJlZnJlc2g6XCJyZWZyZXNoXCJ9LHNlYXJjaDp7aWNvbjpcInNlYXJjaFwiLGNsZWFyOlwiY2FuY2VsXCIsY2xlYXJJbnZlcnRlZDpcImNsZWFyXCJ9LGNhcm91c2VsOntsZWZ0OlwiY2hldnJvbl9sZWZ0XCIscmlnaHQ6XCJjaGV2cm9uX3JpZ2h0XCIscXVpY2tOYXY6XCJsZW5zXCIsdGh1bWJuYWlsczpcInZpZXdfY2Fyb3VzZWxcIn0sY2hlY2tib3g6e2NoZWNrZWQ6e2lvczpcImNoZWNrX2NpcmNsZVwiLG1hdDpcImNoZWNrX2JveFwifSx1bmNoZWNrZWQ6e2lvczpcInJhZGlvX2J1dHRvbl91bmNoZWNrZWRcIixtYXQ6XCJjaGVja19ib3hfb3V0bGluZV9ibGFua1wifSxpbmRldGVybWluYXRlOntpb3M6XCJyZW1vdmVfY2lyY2xlX291dGxpbmVcIixtYXQ6XCJpbmRldGVybWluYXRlX2NoZWNrX2JveFwifX0sY2hpcDp7Y2xvc2U6XCJjYW5jZWxcIn0sY2hpcHNJbnB1dDp7YWRkOlwic2VuZFwifSxjb2xsYXBzaWJsZTp7aWNvbjpcImFycm93X2Ryb3BfZG93blwifSxkYXRldGltZTp7YXJyb3dMZWZ0OlwiY2hldnJvbl9sZWZ0XCIsYXJyb3dSaWdodDpcImNoZXZyb25fcmlnaHRcIn0sZWRpdG9yOntib2xkOlwiZm9ybWF0X2JvbGRcIixpdGFsaWM6XCJmb3JtYXRfaXRhbGljXCIsc3RyaWtldGhyb3VnaDpcInN0cmlrZXRocm91Z2hfc1wiLHVuZGVybGluZTpcImZvcm1hdF91bmRlcmxpbmVkXCIsdW5vcmRlcmVkTGlzdDpcImZvcm1hdF9saXN0X2J1bGxldGVkXCIsb3JkZXJlZExpc3Q6XCJmb3JtYXRfbGlzdF9udW1iZXJlZFwiLHN1YnNjcmlwdDpcInZlcnRpY2FsX2FsaWduX2JvdHRvbVwiLHN1cGVyc2NyaXB0OlwidmVydGljYWxfYWxpZ25fdG9wXCIsaHlwZXJsaW5rOlwibGlua1wiLHRvZ2dsZUZ1bGxzY3JlZW46XCJmdWxsc2NyZWVuXCIscXVvdGU6XCJmb3JtYXRfcXVvdGVcIixsZWZ0OlwiZm9ybWF0X2FsaWduX2xlZnRcIixjZW50ZXI6XCJmb3JtYXRfYWxpZ25fY2VudGVyXCIscmlnaHQ6XCJmb3JtYXRfYWxpZ25fcmlnaHRcIixqdXN0aWZ5OlwiZm9ybWF0X2FsaWduX2p1c3RpZnlcIixwcmludDpcInByaW50XCIsb3V0ZGVudDpcImZvcm1hdF9pbmRlbnRfZGVjcmVhc2VcIixpbmRlbnQ6XCJmb3JtYXRfaW5kZW50X2luY3JlYXNlXCIscmVtb3ZlRm9ybWF0OlwiZm9ybWF0X2NsZWFyXCIsZm9ybWF0dGluZzpcInRleHRfZm9ybWF0XCIsZm9udFNpemU6XCJmb3JtYXRfc2l6ZVwiLGFsaWduOlwiZm9ybWF0X2FsaWduX2xlZnRcIixocjpcInJlbW92ZVwiLHVuZG86XCJ1bmRvXCIscmVkbzpcInJlZG9cIixoZWFkZXI6XCJmb3JtYXRfc2l6ZVwiLGNvZGU6XCJjb2RlXCIsc2l6ZTpcImZvcm1hdF9zaXplXCIsZm9udDpcImZvbnRfZG93bmxvYWRcIn0sZmFiOntpY29uOlwiYWRkXCIsYWN0aXZlSWNvbjpcImNsb3NlXCJ9LGlucHV0OntzaG93UGFzczpcInZpc2liaWxpdHlcIixoaWRlUGFzczpcInZpc2liaWxpdHlfb2ZmXCIsc2hvd051bWJlcjpcImtleWJvYXJkXCIsaGlkZU51bWJlcjpcImtleWJvYXJkX2hpZGVcIixjbGVhcjpcImNhbmNlbFwiLGNsZWFySW52ZXJ0ZWQ6XCJjbGVhclwiLGRyb3Bkb3duOlwiYXJyb3dfZHJvcF9kb3duXCJ9LHBhZ2luYXRpb246e2ZpcnN0OlwiZmlyc3RfcGFnZVwiLHByZXY6XCJrZXlib2FyZF9hcnJvd19sZWZ0XCIsbmV4dDpcImtleWJvYXJkX2Fycm93X3JpZ2h0XCIsbGFzdDpcImxhc3RfcGFnZVwifSxyYWRpbzp7Y2hlY2tlZDp7aW9zOlwiY2hlY2tcIixtYXQ6XCJyYWRpb19idXR0b25fY2hlY2tlZFwifSx1bmNoZWNrZWQ6e2lvczpcIlwiLG1hdDpcInJhZGlvX2J1dHRvbl91bmNoZWNrZWRcIn19LHJhdGluZzp7aWNvbjpcImdyYWRlXCJ9LHN0ZXBwZXI6e2RvbmU6XCJjaGVja1wiLGFjdGl2ZTpcImVkaXRcIixlcnJvcjpcIndhcm5pbmdcIn0sdGFiczp7bGVmdDpcImNoZXZyb25fbGVmdFwiLHJpZ2h0OlwiY2hldnJvbl9yaWdodFwifSx0YWJsZTp7YXJyb3dVcDpcImFycm93X3Vwd2FyZFwiLHdhcm5pbmc6XCJ3YXJuaW5nXCIscHJldlBhZ2U6XCJjaGV2cm9uX2xlZnRcIixuZXh0UGFnZTpcImNoZXZyb25fcmlnaHRcIn0sdHJlZTp7aWNvbjpcInBsYXlfYXJyb3dcIn0sdXBsb2FkZXI6e2RvbmU6XCJkb25lXCIsY2xlYXI6XCJjYW5jZWxcIixjbGVhckludmVydGVkOlwiY2xlYXJcIixhZGQ6XCJhZGRcIix1cGxvYWQ6XCJjbG91ZF91cGxvYWRcIixleHBhbmQ6XCJrZXlib2FyZF9hcnJvd19kb3duXCIsZmlsZTpcImluc2VydF9kcml2ZV9maWxlXCJ9fSxJY29ucz17X19pbnN0YWxsZWQ6ITEsaW5zdGFsbDpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpczt0aGlzLnNldD1mdW5jdGlvbihpKXt2b2lkIDA9PT1pJiYoaT1tYXRlcmlhbEljb25zKSxpLnNldD1zLnNldCxpc1NTUnx8dC5pY29uP3QuaWNvbj1pOmUudXRpbC5kZWZpbmVSZWFjdGl2ZSh0LFwiaWNvblwiLGkpLHMubmFtZT1pLm5hbWUscy5kZWY9aX0sdGhpcy5zZXQoaSl9fSxxdWV1ZXM9e3NlcnZlcjpbXSx0YWtlb3ZlcjpbXX0sJHE9e3ZlcnNpb246dmVyc2lvbix0aGVtZTpcIm1hdFwifTtmdW5jdGlvbiBpbnN0YWxsKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9e30pLCF0aGlzLl9faW5zdGFsbGVkKXt0aGlzLl9faW5zdGFsbGVkPSEwO3ZhciBpPWUuY29uZmlnfHx7fTtpZihQbGF0Zm9ybS5pbnN0YWxsKCRxLHF1ZXVlcyx0KSxCb2R5Lmluc3RhbGwoJHEscXVldWVzLGkpLEhpc3RvcnkuaW5zdGFsbCgkcSxpKSxpMThuLmluc3RhbGwoJHEscXVldWVzLHQsZS5pMThuKSxJY29ucy5pbnN0YWxsKCRxLHQsZS5pY29uU2V0KSxpc1NTUj90Lm1peGluKHtiZWZvcmVDcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLiRxPXRoaXMuJHJvb3QuJG9wdGlvbnMuJHF9fSk6dC5wcm90b3R5cGUuJHE9JHEsZS5jb21wb25lbnRzJiZPYmplY3Qua2V5cyhlLmNvbXBvbmVudHMpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9ZS5jb21wb25lbnRzW2ldO3ZvaWQgMD09PXMubmFtZXx8dm9pZCAwPT09cy5yZW5kZXImJnZvaWQgMD09PXMubWl4aW5zfHx0LmNvbXBvbmVudChzLm5hbWUscyl9KSxlLmRpcmVjdGl2ZXMmJk9iamVjdC5rZXlzKGUuZGlyZWN0aXZlcykuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcz1lLmRpcmVjdGl2ZXNbaV07dm9pZCAwIT09cy5uYW1lJiZ2b2lkIDAhPT1zLnVuYmluZCYmdC5kaXJlY3RpdmUocy5uYW1lLHMpfSksZS5wbHVnaW5zKXt2YXIgcz17JHE6JHEscXVldWVzOnF1ZXVlcyxWdWU6dCxjZmc6aX07T2JqZWN0LmtleXMoZS5wbHVnaW5zKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPWUucGx1Z2luc1t0XTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmluc3RhbGwmJmkhPT1QbGF0Zm9ybSYmaS5pbnN0YWxsKHMpfSl9fX12YXIgbWl4aW49e21vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3F1ZXVlcy50YWtlb3Zlci5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UodC4kcSl9KX19O2Z1bmN0aW9uIHNzclVwZGF0ZSh0KXtpZih0LnNzcil7dmFyIGU9T2JqZWN0LmFzc2lnbih7fSwkcSk7T2JqZWN0LmFzc2lnbih0LnNzcix7UV9IRUFEX1RBR1M6XCJcIixRX0JPRFlfQVRUUlM6XCJcIixRX0JPRFlfVEFHUzpcIlwifSkscXVldWVzLnNlcnZlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2koZSx0KX0pLHQuYXBwLiRxPWV9ZWxzZXt2YXIgaT10LmFwcC5taXhpbnN8fFtdO2kuaW5jbHVkZXMobWl4aW4pfHwodC5hcHAubWl4aW5zPWkuY29uY2F0KG1peGluKSl9fXZhciB0aGVtZT1cIm1hdFwiLFZ1ZVBsdWdpbj17dmVyc2lvbjp2ZXJzaW9uLGluc3RhbGw6aW5zdGFsbCxpMThuOmkxOG4saWNvbnM6SWNvbnMsdGhlbWU6dGhlbWUsc3NyVXBkYXRlOnNzclVwZGF0ZX0saGFuZGxlcnM9W10sRXNjYXBlS2V5PXtfX2luc3RhbGxlZDohMSxfX2luc3RhbGw6ZnVuY3Rpb24oKXt0aGlzLl9faW5zdGFsbGVkPSEwLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixmdW5jdGlvbih0KXswIT09aGFuZGxlcnMubGVuZ3RoJiYoMjchPT10LndoaWNoJiYyNyE9PXQua2V5Q29kZXx8aGFuZGxlcnNbaGFuZGxlcnMubGVuZ3RoLTFdKCkpfSl9LHJlZ2lzdGVyOmZ1bmN0aW9uKHQpe1BsYXRmb3JtLmlzLmRlc2t0b3AmJih0aGlzLl9faW5zdGFsbGVkfHx0aGlzLl9faW5zdGFsbCgpLGhhbmRsZXJzLnB1c2godCkpfSxwb3A6ZnVuY3Rpb24oKXtQbGF0Zm9ybS5pcy5kZXNrdG9wJiZoYW5kbGVycy5wb3AoKX19LE1vZGVsVG9nZ2xlTWl4aW49e3Byb3BzOnt2YWx1ZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Nob3dpbmc6ITF9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmRpc2FibGUmJnQ/dGhpcy4kZW1pdChcImlucHV0XCIsITEpOnRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7ZS52YWx1ZSE9PWUuc2hvd2luZyYmZVt0P1wic2hvd1wiOlwiaGlkZVwiXSgpfSl9fSxtZXRob2RzOnt0b2dnbGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbdGhpcy5zaG93aW5nP1wiaGlkZVwiOlwic2hvd1wiXSh0KX0sc2hvdzpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmRpc2FibGV8fHRoaXMuc2hvd2luZz90aGlzLnNob3dQcm9taXNlfHxQcm9taXNlLnJlc29sdmUodCk6KHRoaXMuaGlkZVByb21pc2UmJnRoaXMuaGlkZVByb21pc2VSZWplY3QoKSx0aGlzLnNob3dpbmc9ITAsITE9PT10aGlzLnZhbHVlJiZ0aGlzLiRlbWl0KFwiaW5wdXRcIiwhMCksKHZvaWQgMD09PXRoaXMuJG9wdGlvbnMubW9kZWxUb2dnbGV8fHRoaXMuJG9wdGlvbnMubW9kZWxUb2dnbGUuaGlzdG9yeSkmJih0aGlzLl9faGlzdG9yeUVudHJ5PXtoYW5kbGVyOnRoaXMuaGlkZX0sSGlzdG9yeS5hZGQodGhpcy5fX2hpc3RvcnlFbnRyeSkpLHRoaXMuX19zaG93Pyh0aGlzLnNob3dQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGkscyl7ZS5zaG93UHJvbWlzZVJlc29sdmU9ZnVuY3Rpb24oKXtlLnNob3dQcm9taXNlPW51bGwsZS4kZW1pdChcInNob3dcIix0KSxpKHQpfSxlLnNob3dQcm9taXNlUmVqZWN0PWZ1bmN0aW9uKCl7ZS5zaG93UHJvbWlzZS5jYXRjaChmdW5jdGlvbigpe30pLGUuc2hvd1Byb21pc2U9bnVsbCxzKG51bGwpfX0pLHRoaXMuX19zaG93KHQpLHRoaXMuc2hvd1Byb21pc2V8fFByb21pc2UucmVzb2x2ZSh0KSk6KHRoaXMuJGVtaXQoXCJzaG93XCIsdCksUHJvbWlzZS5yZXNvbHZlKHQpKSl9LGhpZGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5kaXNhYmxlfHwhdGhpcy5zaG93aW5nP3RoaXMuaGlkZVByb21pc2V8fFByb21pc2UucmVzb2x2ZSh0KToodGhpcy5zaG93UHJvbWlzZSYmdGhpcy5zaG93UHJvbWlzZVJlamVjdCgpLHRoaXMuc2hvd2luZz0hMSwhMD09PXRoaXMudmFsdWUmJnRoaXMuJGVtaXQoXCJpbnB1dFwiLCExKSx0aGlzLl9fcmVtb3ZlSGlzdG9yeSgpLHRoaXMuX19oaWRlPyh0aGlzLmhpZGVQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGkscyl7ZS5oaWRlUHJvbWlzZVJlc29sdmU9ZnVuY3Rpb24oKXtlLmhpZGVQcm9taXNlPW51bGwsZS4kZW1pdChcImhpZGVcIix0KSxpKCl9LGUuaGlkZVByb21pc2VSZWplY3Q9ZnVuY3Rpb24oKXtlLmhpZGVQcm9taXNlLmNhdGNoKGZ1bmN0aW9uKCl7fSksZS5oaWRlUHJvbWlzZT1udWxsLHMobnVsbCl9fSksdGhpcy5fX2hpZGUodCksdGhpcy5oaWRlUHJvbWlzZXx8UHJvbWlzZS5yZXNvbHZlKHQpKToodGhpcy4kZW1pdChcImhpZGVcIix0KSxQcm9taXNlLnJlc29sdmUoKSkpfSxfX3JlbW92ZUhpc3Rvcnk6ZnVuY3Rpb24oKXt0aGlzLl9faGlzdG9yeUVudHJ5JiYoSGlzdG9yeS5yZW1vdmUodGhpcy5fX2hpc3RvcnlFbnRyeSksdGhpcy5fX2hpc3RvcnlFbnRyeT1udWxsKX19LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnNob3dpbmcmJih0aGlzLnNob3dQcm9taXNlJiZ0aGlzLnNob3dQcm9taXNlUmVqZWN0KCksdGhpcy5oaWRlUHJvbWlzZSYmdGhpcy5oaWRlUHJvbWlzZVJlamVjdCgpLHRoaXMuX19yZW1vdmVIaXN0b3J5KCkpfX0sbGlzdGVuT3B0cz17fTtmdW5jdGlvbiBsZWZ0Q2xpY2sodCl7cmV0dXJuIDA9PT10LmJ1dHRvbn1mdW5jdGlvbiBtaWRkbGVDbGljayh0KXtyZXR1cm4gMT09PXQuYnV0dG9ufWZ1bmN0aW9uIHJpZ2h0Q2xpY2sodCl7cmV0dXJuIDI9PT10LmJ1dHRvbn1mdW5jdGlvbiBnZXRFdmVudEtleSh0KXtyZXR1cm4gdC53aGljaHx8dC5rZXlDb2RlfWZ1bmN0aW9uIHBvc2l0aW9uKHQpe3ZhciBlLGk7aWYodC50b3VjaGVzJiZ0LnRvdWNoZXNbMF0/dD10LnRvdWNoZXNbMF06dC5jaGFuZ2VkVG91Y2hlcyYmdC5jaGFuZ2VkVG91Y2hlc1swXSYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksdC5jbGllbnRYfHx0LmNsaWVudFkpZT10LmNsaWVudFgsaT10LmNsaWVudFk7ZWxzZSBpZih0LnBhZ2VYfHx0LnBhZ2VZKWU9dC5wYWdlWC1kb2N1bWVudC5ib2R5LnNjcm9sbExlZnQtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsaT10LnBhZ2VZLWRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7ZWxzZXt2YXIgcz10YXJnZXRFbGVtZW50KHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2U9KHMucmlnaHQtcy5sZWZ0KS8yK3MubGVmdCxpPShzLmJvdHRvbS1zLnRvcCkvMitzLnRvcH1yZXR1cm57dG9wOmksbGVmdDplfX1mdW5jdGlvbiB0YXJnZXRFbGVtZW50KHQpe3ZhciBlO3JldHVybiB0LnRhcmdldD9lPXQudGFyZ2V0OnQuc3JjRWxlbWVudCYmKGU9dC5zcmNFbGVtZW50KSwzPT09ZS5ub2RlVHlwZSYmKGU9ZS5wYXJlbnROb2RlKSxlfWZ1bmN0aW9uIGdldEV2ZW50UGF0aCh0KXtpZih0LnBhdGgpcmV0dXJuIHQucGF0aDtpZih0LmNvbXBvc2VkUGF0aClyZXR1cm4gdC5jb21wb3NlZFBhdGgoKTtmb3IodmFyIGU9W10saT10LnRhcmdldDtpOyl7aWYoZS5wdXNoKGkpLFwiSFRNTFwiPT09aS50YWdOYW1lKXJldHVybiBlLnB1c2goZG9jdW1lbnQpLGUucHVzaCh3aW5kb3cpLGU7aT1pLnBhcmVudEVsZW1lbnR9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsaXN0ZW5PcHRzLFwicGFzc2l2ZVwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ7dHJ5e3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7dD17cGFzc2l2ZTohMH19fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJxdGVzdFwiLG51bGwsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJxdGVzdFwiLG51bGwsZSl9Y2F0Y2godCl7fXJldHVybiBsaXN0ZW5PcHRzLnBhc3NpdmU9dCx0fSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYXNzaXZlXCIse3ZhbHVlOnR9KX19KTt2YXIgTElORV9IRUlHSFQ9NDAsUEFHRV9IRUlHSFQ9ODAwO2Z1bmN0aW9uIGdldE1vdXNlV2hlZWxEaXN0YW5jZSh0KXt2YXIgZSxpPXQuZGVsdGFYLHM9dC5kZWx0YVk7aWYoKGl8fHMpJiZ0LmRlbHRhTW9kZSl7dmFyIG49MT09PXQuZGVsdGFNb2RlP0xJTkVfSEVJR0hUOlBBR0VfSEVJR0hUO2kqPW4scyo9bn1yZXR1cm4gdC5zaGlmdEtleSYmIWkmJihzPShlPVtpLHNdKVswXSxpPWVbMV0pLHt4OmkseTpzfX1mdW5jdGlvbiBzdG9wQW5kUHJldmVudCh0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKX12YXIgZXZlbnQ9e2xpc3Rlbk9wdHM6bGlzdGVuT3B0cyxsZWZ0Q2xpY2s6bGVmdENsaWNrLG1pZGRsZUNsaWNrOm1pZGRsZUNsaWNrLHJpZ2h0Q2xpY2s6cmlnaHRDbGljayxnZXRFdmVudEtleTpnZXRFdmVudEtleSxwb3NpdGlvbjpwb3NpdGlvbix0YXJnZXRFbGVtZW50OnRhcmdldEVsZW1lbnQsZ2V0RXZlbnRQYXRoOmdldEV2ZW50UGF0aCxnZXRNb3VzZVdoZWVsRGlzdGFuY2U6Z2V0TW91c2VXaGVlbERpc3RhbmNlLHN0b3BBbmRQcmV2ZW50OnN0b3BBbmRQcmV2ZW50fTtmdW5jdGlvbiBvZmZzZXQodCl7aWYoIXR8fHQ9PT13aW5kb3cpcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOmUudG9wLGxlZnQ6ZS5sZWZ0fX1mdW5jdGlvbiBzdHlsZSh0LGUpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIGhlaWdodCh0KXtyZXR1cm4gdD09PXdpbmRvdz93aW5kb3cuaW5uZXJIZWlnaHQ6cGFyc2VGbG9hdChzdHlsZSh0LFwiaGVpZ2h0XCIpKX1mdW5jdGlvbiB3aWR0aCh0KXtyZXR1cm4gdD09PXdpbmRvdz93aW5kb3cuaW5uZXJXaWR0aDpwYXJzZUZsb2F0KHN0eWxlKHQsXCJ3aWR0aFwiKSl9ZnVuY3Rpb24gY3NzKHQsZSl7dmFyIGk9dC5zdHlsZTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdF09ZVt0XX0pfWZ1bmN0aW9uIHJlYWR5KHQpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpcmV0dXJuXCJsb2FkaW5nXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlP3QoKTp2b2lkIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsdCwhMSl9dmFyIHByZWZpeD1bXCItd2Via2l0LVwiLFwiLW1vei1cIixcIi1tcy1cIixcIi1vLVwiXTtmdW5jdGlvbiBjc3NUcmFuc2Zvcm0odCl7dmFyIGU9e3RyYW5zZm9ybTp0fTtyZXR1cm4gcHJlZml4LmZvckVhY2goZnVuY3Rpb24oaSl7ZVtpK1widHJhbnNmb3JtXCJdPXR9KSxlfXZhciBzaXplLGRvbT17b2Zmc2V0Om9mZnNldCxzdHlsZTpzdHlsZSxoZWlnaHQ6aGVpZ2h0LHdpZHRoOndpZHRoLGNzczpjc3MscmVhZHk6cmVhZHksY3NzVHJhbnNmb3JtOmNzc1RyYW5zZm9ybX07ZnVuY3Rpb24gZ2V0U2Nyb2xsVGFyZ2V0KHQpe3JldHVybiB0LmNsb3Nlc3QoXCIuc2Nyb2xsLC5zY3JvbGwteSwub3ZlcmZsb3ctYXV0b1wiKXx8d2luZG93fWZ1bmN0aW9uIGdldFNjcm9sbEhlaWdodCh0KXtyZXR1cm4odD09PXdpbmRvdz9kb2N1bWVudC5ib2R5OnQpLnNjcm9sbEhlaWdodH1mdW5jdGlvbiBnZXRTY3JvbGxQb3NpdGlvbih0KXtyZXR1cm4gdD09PXdpbmRvdz93aW5kb3cucGFnZVlPZmZzZXR8fHdpbmRvdy5zY3JvbGxZfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcHx8MDp0LnNjcm9sbFRvcH1mdW5jdGlvbiBnZXRIb3Jpem9udGFsU2Nyb2xsUG9zaXRpb24odCl7cmV0dXJuIHQ9PT13aW5kb3c/d2luZG93LnBhZ2VYT2Zmc2V0fHx3aW5kb3cuc2Nyb2xsWHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0fHwwOnQuc2Nyb2xsTGVmdH1mdW5jdGlvbiBhbmltU2Nyb2xsVG8odCxlLGkpe3ZhciBzPWdldFNjcm9sbFBvc2l0aW9uKHQpO2k8PTA/cyE9PWUmJnNldFNjcm9sbCh0LGUpOnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3ZhciBuPXMrKGUtcykvTWF0aC5tYXgoMTYsaSkqMTY7c2V0U2Nyb2xsKHQsbiksbiE9PWUmJmFuaW1TY3JvbGxUbyh0LGUsaS0xNil9KX1mdW5jdGlvbiBzZXRTY3JvbGwodCxlKXtpZih0PT09d2luZG93KXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wPWUsdm9pZChkb2N1bWVudC5ib2R5LnNjcm9sbFRvcD1lKTt0LnNjcm9sbFRvcD1lfWZ1bmN0aW9uIHNldFNjcm9sbFBvc2l0aW9uKHQsZSxpKXtpP2FuaW1TY3JvbGxUbyh0LGUsaSk6c2V0U2Nyb2xsKHQsZSl9ZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyV2lkdGgoKXtpZih2b2lkIDAhPT1zaXplKXJldHVybiBzaXplO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtjc3ModCx7d2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMjAwcHhcIn0pLGNzcyhlLHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOlwiMHB4XCIsbGVmdDpcIjBweFwiLHZpc2liaWxpdHk6XCJoaWRkZW5cIix3aWR0aDpcIjIwMHB4XCIsaGVpZ2h0OlwiMTUwcHhcIixvdmVyZmxvdzpcImhpZGRlblwifSksZS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO3ZhciBpPXQub2Zmc2V0V2lkdGg7ZS5zdHlsZS5vdmVyZmxvdz1cInNjcm9sbFwiO3ZhciBzPXQub2Zmc2V0V2lkdGg7cmV0dXJuIGk9PT1zJiYocz1lLmNsaWVudFdpZHRoKSxlLnJlbW92ZSgpLHNpemU9aS1zfWZ1bmN0aW9uIGhhc1Njcm9sbGJhcih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMCksISghdHx8dC5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKSYmKGU/dC5zY3JvbGxIZWlnaHQ+dC5jbGllbnRIZWlnaHQmJih0LmNsYXNzTGlzdC5jb250YWlucyhcInNjcm9sbFwiKXx8dC5jbGFzc0xpc3QuY29udGFpbnMoXCJvdmVyZmxvdy1hdXRvXCIpfHxbXCJhdXRvXCIsXCJzY3JvbGxcIl0uaW5jbHVkZXMod2luZG93LmdldENvbXB1dGVkU3R5bGUodClbXCJvdmVyZmxvdy15XCJdKSk6dC5zY3JvbGxXaWR0aD50LmNsaWVudFdpZHRoJiYodC5jbGFzc0xpc3QuY29udGFpbnMoXCJzY3JvbGxcIil8fHQuY2xhc3NMaXN0LmNvbnRhaW5zKFwib3ZlcmZsb3ctYXV0b1wiKXx8W1wiYXV0b1wiLFwic2Nyb2xsXCJdLmluY2x1ZGVzKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW1wib3ZlcmZsb3cteFwiXSkpKX12YXIgc2Nyb2xsPXtnZXRTY3JvbGxUYXJnZXQ6Z2V0U2Nyb2xsVGFyZ2V0LGdldFNjcm9sbEhlaWdodDpnZXRTY3JvbGxIZWlnaHQsZ2V0U2Nyb2xsUG9zaXRpb246Z2V0U2Nyb2xsUG9zaXRpb24sYW5pbVNjcm9sbFRvOmFuaW1TY3JvbGxUbyxzZXRTY3JvbGxQb3NpdGlvbjpzZXRTY3JvbGxQb3NpdGlvbixnZXRTY3JvbGxiYXJXaWR0aDpnZXRTY3JvbGxiYXJXaWR0aCxoYXNTY3JvbGxiYXI6aGFzU2Nyb2xsYmFyfSxyZWdpc3RlcmVkPTA7ZnVuY3Rpb24gb25XaGVlbCh0KXtzaG91bGRQcmV2ZW50U2Nyb2xsKHQpJiZzdG9wQW5kUHJldmVudCh0KX1mdW5jdGlvbiBzaG91bGRQcmV2ZW50U2Nyb2xsKHQpe2lmKHQudGFyZ2V0PT09ZG9jdW1lbnQuYm9keXx8dC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1sYXlvdXQtYmFja2Ryb3BcIikpcmV0dXJuITA7Zm9yKHZhciBlPWdldEV2ZW50UGF0aCh0KSxpPXQuc2hpZnRLZXkmJiF0LmRlbHRhWCxzPSFpJiZNYXRoLmFicyh0LmRlbHRhWCk8PU1hdGguYWJzKHQuZGVsdGFZKSxuPWl8fHM/dC5kZWx0YVk6dC5kZWx0YVgsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcj1lW29dO2lmKGhhc1Njcm9sbGJhcihyLHMpKXJldHVybiBzP248MCYmMD09PXIuc2Nyb2xsVG9wfHxuPjAmJnIuc2Nyb2xsVG9wK3IuY2xpZW50SGVpZ2h0PT09ci5zY3JvbGxIZWlnaHQ6bjwwJiYwPT09ci5zY3JvbGxMZWZ0fHxuPjAmJnIuc2Nyb2xsTGVmdCtyLmNsaWVudFdpZHRoPT09ci5zY3JvbGxXaWR0aH1yZXR1cm4hMH1mdW5jdGlvbiBwcmV2ZW50U2Nyb2xsKHQpe2lmKCEoKHJlZ2lzdGVyZWQrPXQ/MTotMSk+MSkpe3ZhciBlPXQ/XCJhZGRcIjpcInJlbW92ZVwiO1BsYXRmb3JtLmlzLm1vYmlsZT9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdFtlXShcInEtYm9keS1wcmV2ZW50LXNjcm9sbFwiKTpQbGF0Zm9ybS5pcy5kZXNrdG9wJiZ3aW5kb3dbZStcIkV2ZW50TGlzdGVuZXJcIl0oXCJ3aGVlbFwiLG9uV2hlZWwpfX12YXIgcG9zaXRpb25zPXt0b3A6XCJpdGVtcy1zdGFydCBqdXN0aWZ5LWNlbnRlciB3aXRoLWJhY2tkcm9wXCIsYm90dG9tOlwiaXRlbXMtZW5kIGp1c3RpZnktY2VudGVyIHdpdGgtYmFja2Ryb3BcIixyaWdodDpcIml0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCB3aXRoLWJhY2tkcm9wXCIsbGVmdDpcIml0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IHdpdGgtYmFja2Ryb3BcIn0scG9zaXRpb25DU1M9e21heEhlaWdodDpcIjgwdmhcIixoZWlnaHQ6XCJhdXRvXCJ9O2Z1bmN0aW9uIGFkZGl0aW9uYWxDU1ModCl7dmFyIGU9e307cmV0dXJuW1wibGVmdFwiLFwicmlnaHRcIl0uaW5jbHVkZXModCkmJihlLm1heFdpZHRoPVwiOTB2d1wiKSxbXCJsZWZ0XCIsXCJ0b3BcIl0uaW5jbHVkZXModCkmJihlLmJvcmRlclRvcExlZnRSYWRpdXM9MCksW1wicmlnaHRcIixcInRvcFwiXS5pbmNsdWRlcyh0KSYmKGUuYm9yZGVyVG9wUmlnaHRSYWRpdXM9MCksW1wibGVmdFwiLFwiYm90dG9tXCJdLmluY2x1ZGVzKHQpJiYoZS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzPTApLFtcInJpZ2h0XCIsXCJib3R0b21cIl0uaW5jbHVkZXModCkmJihlLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzPTApLGV9dmFyIG1vZGFscz17cmVzcG9uc2l2ZTowLG1heGltaXplZDowfSxRTW9kYWw9e25hbWU6XCJRTW9kYWxcIixtaXhpbnM6W01vZGVsVG9nZ2xlTWl4aW5dLHByb3ZpZGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybntfX3Ftb2RhbDp7cmVnaXN0ZXI6ZnVuY3Rpb24oZSl7dC5sYXlvdXQhPT1lJiYodC5sYXlvdXQ9ZSl9LHVucmVnaXN0ZXI6ZnVuY3Rpb24oZSl7dC5sYXlvdXQ9PT1lJiYodC5sYXlvdXQ9bnVsbCl9fX19LHByb3BzOntwb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIlwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5cIlwiPT09dHx8W1widG9wXCIsXCJib3R0b21cIixcImxlZnRcIixcInJpZ2h0XCJdLmluY2x1ZGVzKHQpfX0sdHJhbnNpdGlvbjpTdHJpbmcsZW50ZXJDbGFzczpTdHJpbmcsbGVhdmVDbGFzczpTdHJpbmcscG9zaXRpb25DbGFzc2VzOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZmxleC1jZW50ZXJcIn0sY29udGVudENsYXNzZXM6W09iamVjdCxBcnJheSxTdHJpbmddLGNvbnRlbnRDc3M6W09iamVjdCxBcnJheSxTdHJpbmddLG5vQmFja2Ryb3BEaXNtaXNzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sbm9Fc2NEaXNtaXNzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sbm9Sb3V0ZURpc21pc3M6Qm9vbGVhbixub1JlZm9jdXM6Qm9vbGVhbixtaW5pbWl6ZWQ6Qm9vbGVhbixtYXhpbWl6ZWQ6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybntsYXlvdXQ6bnVsbH19LHdhdGNoOnskcm91dGU6ZnVuY3Rpb24oKXt0aGlzLm5vUm91dGVEaXNtaXNzfHx0aGlzLmhpZGUoKX0sbWF4aW1pemVkOmZ1bmN0aW9uKHQsZSl7dGhpcy5fX3JlZ2lzdGVyKCExLGUpLHRoaXMuX19yZWdpc3RlcighMCx0KX0sbWluaW1pemVkOmZ1bmN0aW9uKHQsZSl7dGhpcy5fX3JlZ2lzdGVyKCExLHRoaXMubWF4aW1pemVkLGUpLHRoaXMuX19yZWdpc3RlcighMCx0aGlzLm1heGltaXplZCx0KX19LGNvbXB1dGVkOnttb2RhbENsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBvc2l0aW9uP3Bvc2l0aW9uc1t0aGlzLnBvc2l0aW9uXTp0aGlzLnBvc2l0aW9uQ2xhc3NlcztyZXR1cm4gdGhpcy5tYXhpbWl6ZWQ/W1wibWF4aW1pemVkXCIsdF06dGhpcy5taW5pbWl6ZWQ/W1wibWluaW1pemVkXCIsdF06dH0sY29udGVudENsYXNzZXNDYWxjOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0P1t0aGlzLmNvbnRlbnRDbGFzc2VzLFwiY29sdW1uIG5vLXdyYXBcIl06dGhpcy5jb250ZW50Q2xhc3Nlc30sdHJhbnNpdGlvblByb3BzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24/e25hbWU6XCJxLW1vZGFsLVwiK3RoaXMucG9zaXRpb259OnRoaXMuZW50ZXJDbGFzc3x8dGhpcy5sZWF2ZUNsYXNzP3tlbnRlckFjdGl2ZUNsYXNzOnRoaXMuZW50ZXJDbGFzcyxsZWF2ZUFjdGl2ZUNsYXNzOnRoaXMubGVhdmVDbGFzc306e25hbWU6dGhpcy50cmFuc2l0aW9ufHxcInEtbW9kYWxcIn19LG1vZGFsQ3NzOmZ1bmN0aW9uKCl7aWYodGhpcy5wb3NpdGlvbil7dmFyIHQ9QXJyYXkuaXNBcnJheSh0aGlzLmNvbnRlbnRDc3MpP3RoaXMuY29udGVudENzczpbdGhpcy5jb250ZW50Q3NzXTtyZXR1cm4gdC51bnNoaWZ0KE9iamVjdC5hc3NpZ24oe30scG9zaXRpb25DU1MsYWRkaXRpb25hbENTUyh0aGlzLnBvc2l0aW9uKSkpLHR9cmV0dXJuIHRoaXMuY29udGVudENzc319LG1ldGhvZHM6e19fZGlzbWlzczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5ub0JhY2tkcm9wRGlzbWlzcz90aGlzLl9fc2hha2UoKTp0aGlzLmhpZGUoKS50aGVuKGZ1bmN0aW9uKCl7dC4kZW1pdChcImRpc21pc3NcIil9KX0sX19zaG93OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLm5vUmVmb2N1c3x8KHRoaXMuX19yZWZvY3VzVGFyZ2V0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy4kZWwpLHRoaXMuX19yZWdpc3RlcighMCkscHJldmVudFNjcm9sbCghMCksRXNjYXBlS2V5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7dC5ub0VzY0Rpc21pc3M/dC5fX3NoYWtlKCk6KHQuJGVtaXQoXCJlc2NhcGUta2V5XCIpLHQuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXt0LiRlbWl0KFwiZGlzbWlzc1wiKX0pKX0pO3ZhciBlPXRoaXMuJHJlZnMuY29udGVudDt0aGlzLiRxLnBsYXRmb3JtLmlzLmlvcyYmZS5jbGljaygpLGUuc2Nyb2xsVG9wPTAsW1wibW9kYWwtc2Nyb2xsXCIsXCJsYXlvdXQtdmlld1wiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1tdLnNsaWNlLmNhbGwoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHQpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2Nyb2xsVG9wPTB9KX0pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGUmJmUuZm9jdXMoKX0pfSxfX2hpZGU6ZnVuY3Rpb24oKXt0aGlzLl9fY2xlYW51cCgpLCF0aGlzLm5vUmVmb2N1cyYmdGhpcy5fX3JlZm9jdXNUYXJnZXQmJih0aGlzLl9fcmVmb2N1c1RhcmdldC5mb2N1cygpLCF0aGlzLl9fcmVmb2N1c1RhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJxLWlmXCIpJiZ0aGlzLl9fcmVmb2N1c1RhcmdldC5ibHVyKCkpfSxfX2NsZWFudXA6ZnVuY3Rpb24oKXtFc2NhcGVLZXkucG9wKCkscHJldmVudFNjcm9sbCghMSksdGhpcy5fX3JlZ2lzdGVyKCExKX0sX19zdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX0sX19yZWdpc3RlcjpmdW5jdGlvbih0LGUsaSl7dm9pZCAwPT09ZSYmKGU9dGhpcy5tYXhpbWl6ZWQpLHZvaWQgMD09PWkmJihpPXRoaXMubWluaW1pemVkKTt2YXIgcz10P3thY3Rpb246XCJhZGRcIixzdGVwOjF9OnthY3Rpb246XCJyZW1vdmVcIixzdGVwOi0xfTtpZihlKXtpZihtb2RhbHMubWF4aW1pemVkKz1zLnN0ZXAsIXQmJm1vZGFscy5tYXhpbWl6ZWQ+MClyZXR1cm47ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Rbcy5hY3Rpb25dKFwicS1tYXhpbWl6ZWQtbW9kYWxcIil9ZWxzZSBpZighaSl7aWYobW9kYWxzLnJlc3BvbnNpdmUrPXMuc3RlcCwhdCYmbW9kYWxzLnJlc3BvbnNpdmU+MClyZXR1cm47ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Rbcy5hY3Rpb25dKFwicS1yZXNwb25zaXZlLW1vZGFsXCIpfX0sX19zaGFrZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kZWwuY2xhc3NMaXN0LnJlbW92ZShcImFuaW1hdGUtc2hha2VcIiksdGhpcy4kZWwuY2xhc3NMaXN0LmFkZChcImFuaW1hdGUtc2hha2VcIiksY2xlYXJUaW1lb3V0KHRoaXMuc2hha2VUaW1lb3V0KSx0aGlzLnNoYWtlVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC4kZWwuY2xhc3NMaXN0LnJlbW92ZShcImFuaW1hdGUtc2hha2VcIil9LDE1MCl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy52YWx1ZSYmdGhpcy5zaG93KCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5zaGFrZVRpbWVvdXQpLHRoaXMuJGVsLnJlbW92ZSgpLHRoaXMuc2hvd2luZyYmdGhpcy5fX2NsZWFudXAoKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJ0cmFuc2l0aW9uXCIse3Byb3BzOnRoaXMudHJhbnNpdGlvblByb3BzLG9uOnthZnRlckVudGVyOmZ1bmN0aW9uKCl7ZS5zaG93UHJvbWlzZSYmZS5zaG93UHJvbWlzZVJlc29sdmUoKX0sZW50ZXJDYW5jZWxsZWQ6ZnVuY3Rpb24oKXtlLnNob3dQcm9taXNlJiZlLnNob3dQcm9taXNlUmVqZWN0KCksZS4kZWwucmVtb3ZlKCl9LGFmdGVyTGVhdmU6ZnVuY3Rpb24oKXtlLmhpZGVQcm9taXNlJiZlLmhpZGVQcm9taXNlUmVzb2x2ZSgpLGUuJGVsLnJlbW92ZSgpfSxsZWF2ZUNhbmNlbGxlZDpmdW5jdGlvbigpe2UuaGlkZVByb21pc2UmJmUuaGlkZVByb21pc2VSZWplY3QoKX19fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm1vZGFsIGZ1bGxzY3JlZW4gcm93XCIsY2xhc3M6dGhpcy5tb2RhbENsYXNzZXMsZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIsdmFsdWU6dGhpcy5zaG93aW5nfV19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYmFja2Ryb3AgYWJzb2x1dGUtZnVsbFwiLG9uOntjbGljazp0aGlzLl9fZGlzbWlzc319KSx0KFwiZGl2XCIse3JlZjpcImNvbnRlbnRcIixzdGF0aWNDbGFzczpcIm1vZGFsLWNvbnRlbnRcIixzdHlsZTp0aGlzLm1vZGFsQ3NzLGNsYXNzOnRoaXMuY29udGVudENsYXNzZXNDYWxjLGF0dHJzOnt0YWJpbmRleDotMX0sb246e2NsaWNrOnRoaXMuX19zdG9wUHJvcGFnYXRpb24sdG91Y2hzdGFydDp0aGlzLl9fc3RvcFByb3BhZ2F0aW9ufX0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKV0pfX0scHJlZml4JDE9XCJtZFwiLFFJY29uPXtuYW1lOlwiUUljb25cIixwcm9wczp7bmFtZTpTdHJpbmcsY29sb3I6U3RyaW5nLHNpemU6U3RyaW5nfSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5uYW1lO3JldHVybiBlPyh0PS9eZmFbc3xyfGx8Yl17MCwxfSAvLnRlc3QoZSl8fGUuc3RhcnRzV2l0aChcImljb24tXCIpP2U6ZS5zdGFydHNXaXRoKFwiYnQtXCIpP1wiYnQgXCIrZTplLnN0YXJ0c1dpdGgoXCJldmEtXCIpP1wiZXZhIFwiK2U6L15pb24tKG1kfGlvc3xsb2dvKS8udGVzdChlKT9cImlvbmljb25zIFwiK2U6ZS5zdGFydHNXaXRoKFwiaW9uLVwiKT9cImlvbmljb25zIGlvbi1cIitwcmVmaXgkMStlLnN1YnN0cigzKTplLnN0YXJ0c1dpdGgoXCJtZGktXCIpP1wibWRpIFwiK2U6XCJtYXRlcmlhbC1pY29uc1wiLHRoaXMuY29sb3I/dCtcIiB0ZXh0LVwiK3RoaXMuY29sb3I6dCk6XCJcIn0sY29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzZXMuc3RhcnRzV2l0aChcIm1hdGVyaWFsLWljb25zXCIpP3RoaXMubmFtZS5yZXBsYWNlKC8gL2csXCJfXCIpOlwiIFwifSxzdHlsZTpmdW5jdGlvbigpe2lmKHRoaXMuc2l6ZSlyZXR1cm57Zm9udFNpemU6dGhpcy5zaXplfX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImlcIix7c3RhdGljQ2xhc3M6XCJxLWljb25cIixjbGFzczp0aGlzLmNsYXNzZXMsc3R5bGU6dGhpcy5zdHlsZSxhdHRyczp7XCJhcmlhLWhpZGRlblwiOiEwfX0sW3RoaXMuY29udGVudCx0aGlzLiRzbG90cy5kZWZhdWx0XSl9fSxRTGlzdD17bmFtZTpcIlFMaXN0XCIscHJvcHM6e25vQm9yZGVyOkJvb2xlYW4sZGFyazpCb29sZWFuLGRlbnNlOkJvb2xlYW4sc3BhcnNlOkJvb2xlYW4sc3RyaXBlZDpCb29sZWFuLHN0cmlwZWRPZGQ6Qm9vbGVhbixzZXBhcmF0b3I6Qm9vbGVhbixpbnNldFNlcGFyYXRvcjpCb29sZWFuLG11bHRpbGluZTpCb29sZWFuLGhpZ2hsaWdodDpCb29sZWFuLGxpbms6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJuby1ib3JkZXJcIjp0aGlzLm5vQm9yZGVyLFwicS1saXN0LWRhcmtcIjp0aGlzLmRhcmssXCJxLWxpc3QtZGVuc2VcIjp0aGlzLmRlbnNlLFwicS1saXN0LXNwYXJzZVwiOnRoaXMuc3BhcnNlLFwicS1saXN0LXN0cmlwZWRcIjp0aGlzLnN0cmlwZWQsXCJxLWxpc3Qtc3RyaXBlZC1vZGRcIjp0aGlzLnN0cmlwZWRPZGQsXCJxLWxpc3Qtc2VwYXJhdG9yXCI6dGhpcy5zZXBhcmF0b3IsXCJxLWxpc3QtaW5zZXQtc2VwYXJhdG9yXCI6dGhpcy5pbnNldFNlcGFyYXRvcixcInEtbGlzdC1tdWx0aWxpbmVcIjp0aGlzLm11bHRpbGluZSxcInEtbGlzdC1oaWdobGlnaHRcIjp0aGlzLmhpZ2hsaWdodCxcInEtbGlzdC1saW5rXCI6dGhpcy5saW5rfX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbGlzdFwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxyb3V0ZXJMaW5rRXZlbnROYW1lPVwicXJvdXRlcmxpbmtjbGlja1wiLGV2dD1udWxsO2lmKCFpc1NTUil0cnl7ZXZ0PW5ldyBFdmVudChyb3V0ZXJMaW5rRXZlbnROYW1lKX1jYXRjaCh0KXsoZXZ0PWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIikpLmluaXRFdmVudChyb3V0ZXJMaW5rRXZlbnROYW1lLCEwLCExKX12YXIgcm91dGVyTGlua1Byb3BzPXt0bzpbU3RyaW5nLE9iamVjdF0sZXhhY3Q6Qm9vbGVhbixhcHBlbmQ6Qm9vbGVhbixyZXBsYWNlOkJvb2xlYW4sZXZlbnQ6W1N0cmluZyxBcnJheV0sYWN0aXZlQ2xhc3M6U3RyaW5nLGV4YWN0QWN0aXZlQ2xhc3M6U3RyaW5nfSxSb3V0ZXJMaW5rTWl4aW49e3Byb3BzOnJvdXRlckxpbmtQcm9wcyxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3JvdXRlckxpbmtFdmVudE5hbWU6cm91dGVyTGlua0V2ZW50TmFtZX19fTtmdW5jdGlvbiB0ZXh0U3R5bGUodCl7cmV0dXJuIHZvaWQgMD09PXR8fHQ8Mj97fTp7b3ZlcmZsb3c6XCJoaWRkZW5cIixkaXNwbGF5OlwiLXdlYmtpdC1ib3hcIixcIi13ZWJraXQtYm94LW9yaWVudFwiOlwidmVydGljYWxcIixcIi13ZWJraXQtbGluZS1jbGFtcFwiOnR9fXZhciBzdWJJdGVtUHJvcHM9e2ljb246U3RyaW5nLHJpZ2h0SWNvbjpTdHJpbmcsaW1hZ2U6U3RyaW5nLHJpZ2h0SW1hZ2U6U3RyaW5nLGF2YXRhcjpTdHJpbmcscmlnaHRBdmF0YXI6U3RyaW5nLGxldHRlcjpTdHJpbmcscmlnaHRMZXR0ZXI6U3RyaW5nLGxhYmVsOlN0cmluZyxzdWJsYWJlbDpTdHJpbmcsbGFiZWxMaW5lczpbU3RyaW5nLE51bWJlcl0sc3VibGFiZWxMaW5lczpbU3RyaW5nLE51bWJlcl19LEl0ZW1NaXhpbj17bWl4aW5zOlt7cHJvcHM6cm91dGVyTGlua1Byb3BzfV0scHJvcHM6e2Rhcms6Qm9vbGVhbixsaW5rOkJvb2xlYW4sZGVuc2U6Qm9vbGVhbixzcGFyc2U6Qm9vbGVhbixzZXBhcmF0b3I6Qm9vbGVhbixpbnNldFNlcGFyYXRvcjpCb29sZWFuLG11bHRpbGluZTpCb29sZWFuLGhpZ2hsaWdodDpCb29sZWFuLHRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRpdlwifX0sY29tcHV0ZWQ6e2l0ZW1DbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJue1wicS1pdGVtXCI6ITAsXCJxLWl0ZW0tZGl2aXNpb25cIjohMCxcInJlbGF0aXZlLXBvc2l0aW9uXCI6ITAsXCJxLWl0ZW0tZGFya1wiOnRoaXMuZGFyayxcInEtaXRlbS1kZW5zZVwiOnRoaXMuZGVuc2UsXCJxLWl0ZW0tc3BhcnNlXCI6dGhpcy5zcGFyc2UsXCJxLWl0ZW0tc2VwYXJhdG9yXCI6dGhpcy5zZXBhcmF0b3IsXCJxLWl0ZW0taW5zZXQtc2VwYXJhdG9yXCI6dGhpcy5pbnNldFNlcGFyYXRvcixcInEtaXRlbS1tdWx0aWxpbmVcIjp0aGlzLm11bHRpbGluZSxcInEtaXRlbS1oaWdobGlnaHRcIjp0aGlzLmhpZ2hsaWdodCxcInEtaXRlbS1saW5rXCI6dGhpcy50b3x8dGhpcy5saW5rfX19fSxRSXRlbT17bmFtZTpcIlFJdGVtXCIsbWl4aW5zOltJdGVtTWl4aW5dLHByb3BzOnthY3RpdmU6Qm9vbGVhbixsaW5rOkJvb2xlYW59LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMCE9PXRoaXMudG8/XCJxLWxpbmtcIjp7YWN0aXZlOnRoaXMuYWN0aXZlfSx0aGlzLml0ZW1DbGFzc2VzXX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy50bz90KFwicm91dGVyLWxpbmtcIix7cHJvcHM6T2JqZWN0LmFzc2lnbih7fSx0aGlzLiRwcm9wcyx7dGFnOlwiYVwifSksY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KTp0KHRoaXMudGFnLHtjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUl0ZW1TaWRlPXtuYW1lOlwiUUl0ZW1TaWRlXCIscHJvcHM6e3JpZ2h0OkJvb2xlYW4saWNvbjpTdHJpbmcsbGV0dGVyOnt0eXBlOlN0cmluZyx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aH19LGludmVydGVkOkJvb2xlYW4sYXZhdGFyOlN0cmluZyxpbWFnZTpTdHJpbmcsc3RhbXA6U3RyaW5nLGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nfSxjb21wdXRlZDp7dHlwZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuW1wiaWNvblwiLFwiaW1hZ2VcIixcImF2YXRhclwiLFwibGV0dGVyXCIsXCJzdGFtcFwiXS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXCJxLWl0ZW0tc2lkZS1cIisodGhpcy5yaWdodD9cInJpZ2h0XCI6XCJsZWZ0XCIpXTtyZXR1cm4hdGhpcy5jb2xvcnx8dGhpcy5pY29ufHx0aGlzLmxldHRlcnx8dC5wdXNoKFwidGV4dC1cIit0aGlzLmNvbG9yKSx0fSx0eXBlQ2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtcInEtaXRlbS1cIit0aGlzLnR5cGVdO3JldHVybiB0aGlzLmNvbG9yJiYodGhpcy5pbnZlcnRlZCYmKHRoaXMuaWNvbnx8dGhpcy5sZXR0ZXIpP3QucHVzaChcImJnLVwiK3RoaXMuY29sb3IpOnRoaXMudGV4dENvbG9yfHx0LnB1c2goXCJ0ZXh0LVwiK3RoaXMuY29sb3IpKSx0aGlzLnRleHRDb2xvciYmdC5wdXNoKFwidGV4dC1cIit0aGlzLnRleHRDb2xvciksdGhpcy5pbnZlcnRlZCYmKHRoaXMuaWNvbnx8dGhpcy5sZXR0ZXIpJiYodC5wdXNoKFwicS1pdGVtLWludmVydGVkXCIpLHQucHVzaChcImZsZXhcIiksdC5wdXNoKFwiZmxleC1jZW50ZXJcIikpLHR9LGltYWdlUGF0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmltYWdlfHx0aGlzLmF2YXRhcn19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gdGhpcy50eXBlJiYodGhpcy5pY29uPyhlPXQoUUljb24se2NsYXNzOnRoaXMuaW52ZXJ0ZWQ/bnVsbDp0aGlzLnR5cGVDbGFzc2VzLHByb3BzOntuYW1lOnRoaXMuaWNvbn19KSx0aGlzLmludmVydGVkJiYoZT10KFwiZGl2XCIse2NsYXNzOnRoaXMudHlwZUNsYXNzZXN9LFtlXSkpKTplPXRoaXMuaW1hZ2VQYXRoP3QoXCJpbWdcIix7Y2xhc3M6dGhpcy50eXBlQ2xhc3NlcyxhdHRyczp7c3JjOnRoaXMuaW1hZ2VQYXRofX0pOnQoXCJkaXZcIix7Y2xhc3M6dGhpcy50eXBlQ2xhc3Nlc30sW3RoaXMuc3RhbXB8fHRoaXMubGV0dGVyXSkpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWl0ZW0tc2lkZSBxLWl0ZW0tc2VjdGlvblwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sW2UsdGhpcy4kc2xvdHMuZGVmYXVsdF0pfX07ZnVuY3Rpb24gdGV4dCh0LGUsaSxzKXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaXRlbS1cIitlKygxPT09KHM9cGFyc2VJbnQocywxMCkpP1wiIGVsbGlwc2lzXCI6XCJcIiksc3R5bGU6dGV4dFN0eWxlKHMpLGRvbVByb3BzOntpbm5lckhUTUw6aX19KX12YXIgUUl0ZW1NYWluPXtuYW1lOlwiUUl0ZW1NYWluXCIscHJvcHM6e2xhYmVsOlN0cmluZyxsYWJlbExpbmVzOltTdHJpbmcsTnVtYmVyXSxzdWJsYWJlbDpTdHJpbmcsc3VibGFiZWxMaW5lczpbU3RyaW5nLE51bWJlcl0saW5zZXQ6Qm9vbGVhbix0YWc6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJkaXZcIn19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCh0aGlzLnRhZyx7c3RhdGljQ2xhc3M6XCJxLWl0ZW0tbWFpbiBxLWl0ZW0tc2VjdGlvblwiLGNsYXNzOntcInEtaXRlbS1tYWluLWluc2V0XCI6dGhpcy5pbnNldH19LFt0aGlzLmxhYmVsP3RleHQodCxcImxhYmVsXCIsdGhpcy5sYWJlbCx0aGlzLmxhYmVsTGluZXMpOm51bGwsdGhpcy5zdWJsYWJlbD90ZXh0KHQsXCJzdWJsYWJlbFwiLHRoaXMuc3VibGFiZWwsdGhpcy5zdWJsYWJlbExpbmVzKTpudWxsLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX19LFFJdGVtU2VwYXJhdG9yPXtuYW1lOlwiUUl0ZW1TZXBhcmF0b3JcIixwcm9wczp7aW5zZXQ6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pdGVtLXNlcGFyYXRvci1jb21wb25lbnRcIixjbGFzczp7XCJxLWl0ZW0tc2VwYXJhdG9yLWluc2V0LWNvbXBvbmVudFwiOnRoaXMuaW5zZXR9fSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFBY3Rpb25TaGVldD17bmFtZTpcIlFBY3Rpb25TaGVldFwiLHByb3BzOnt2YWx1ZTpCb29sZWFuLHRpdGxlOlN0cmluZyxncmlkOkJvb2xlYW4sYWN0aW9uczpBcnJheSxkaXNtaXNzTGFiZWw6U3RyaW5nfSxjb21wdXRlZDp7Y29udGVudENzczpmdW5jdGlvbigpe319LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W10scz10aGlzLiRzbG90cy50aXRsZXx8dGhpcy50aXRsZTtyZXR1cm4gcyYmaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWFjdGlvbnNoZWV0LXRpdGxlIGNvbHVtbiBqdXN0aWZ5LWNlbnRlclwifSxbc10pKSxpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWN0aW9uc2hlZXQtYm9keSBzY3JvbGxcIn0sdGhpcy5hY3Rpb25zP1t0aGlzLmdyaWQ/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWN0aW9uc2hlZXQtZ3JpZCByb3cgd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCJ9LHRoaXMuX19nZXRBY3Rpb25zKHQpKTp0KFFMaXN0LHtzdGF0aWNDbGFzczpcIm5vLWJvcmRlclwiLHByb3BzOntsaW5rOiEwfX0sdGhpcy5fX2dldEFjdGlvbnModCkpXTp0aGlzLiRzbG90cy5kZWZhdWx0KSksdChRTW9kYWwse3JlZjpcIm1vZGFsXCIscHJvcHM6e3ZhbHVlOnRoaXMudmFsdWUscG9zaXRpb246XCJib3R0b21cIixjb250ZW50Q3NzOnRoaXMuY29udGVudENzc30sb246e2lucHV0OmZ1bmN0aW9uKHQpe2UuJGVtaXQoXCJpbnB1dFwiLHQpfSxzaG93OmZ1bmN0aW9uKCl7ZS4kZW1pdChcInNob3dcIil9LGhpZGU6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiaGlkZVwiKX0sZGlzbWlzczpmdW5jdGlvbigpe2UuJGVtaXQoXCJjYW5jZWxcIil9LFwiZXNjYXBlLWtleVwiOmZ1bmN0aW9uKCl7ZS4kZW1pdChcImVzY2FwZS1rZXlcIil9fX0saSl9LG1ldGhvZHM6e3Nob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5tb2RhbC5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5tb2RhbD90aGlzLiRyZWZzLm1vZGFsLmhpZGUoKTpQcm9taXNlLnJlc29sdmUoKX0sX19nZXRBY3Rpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuYWN0aW9ucy5tYXAoZnVuY3Rpb24oaSl7dmFyIHM7cmV0dXJuIGkubGFiZWw/dChlLmdyaWQ/XCJkaXZcIjpRSXRlbSwoKHM9e3N0YXRpY0NsYXNzOmUuZ3JpZD9cInEtYWN0aW9uc2hlZXQtZ3JpZC1pdGVtIGN1cnNvci1wb2ludGVyIHJlbGF0aXZlLXBvc2l0aW9uIGNvbHVtbiBpbmxpbmUgZmxleC1jZW50ZXJcIjpudWxsLGNsYXNzOmkuY2xhc3NlcyxhdHRyczp7dGFiaW5kZXg6MH19KVtlLmdyaWQ/XCJvblwiOlwibmF0aXZlT25cIl09e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19vbk9rKGkpfSxrZXl1cDpmdW5jdGlvbih0KXsxMz09PWdldEV2ZW50S2V5KHQpJiZlLl9fb25PayhpKX19LHMpLGUuZ3JpZD9baS5pY29uP3QoUUljb24se3Byb3BzOntuYW1lOmkuaWNvbixjb2xvcjppLmNvbG9yfX0pOm51bGwsaS5hdmF0YXI/dChcImltZ1wiLHtkb21Qcm9wczp7c3JjOmkuYXZhdGFyfSxzdGF0aWNDbGFzczpcImF2YXRhclwifSk6bnVsbCx0KFwic3BhblwiLFtpLmxhYmVsXSldOlt0KFFJdGVtU2lkZSx7cHJvcHM6e2ljb246aS5pY29uLGNvbG9yOmkuY29sb3IsYXZhdGFyOmkuYXZhdGFyfX0pLHQoUUl0ZW1NYWluLHtwcm9wczp7aW5zZXQ6ITAsbGFiZWw6aS5sYWJlbH19KV0pOnQoUUl0ZW1TZXBhcmF0b3Ise3N0YXRpY0NsYXNzOlwiY29sLTEyXCJ9KX0pfSxfX29uT2s6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmhpZGUoKS50aGVuKGZ1bmN0aW9uKCl7XCJmdW5jdGlvblwiPT10eXBlb2YgdC5oYW5kbGVyJiZ0LmhhbmRsZXIoKSxlLiRlbWl0KFwib2tcIix0KX0pfSxfX29uQ2FuY2VsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmhpZGUoKS50aGVuKGZ1bmN0aW9uKCl7dC4kZW1pdChcImNhbmNlbFwiKX0pfSxfX29uS2V5Q2FuY2VsOmZ1bmN0aW9uKHQpezEzPT09Z2V0RXZlbnRLZXkodCkmJnRoaXMuX19vbkNhbmNlbCgpfX19LHVuaXRzPVtcIkJcIixcImtCXCIsXCJNQlwiLFwiR0JcIixcIlRCXCIsXCJQQlwiXTtmdW5jdGlvbiBodW1hblN0b3JhZ2VTaXplKHQpe2Zvcih2YXIgZT0wO3BhcnNlSW50KHQsMTApPj0xMDI0JiZlPHVuaXRzLmxlbmd0aC0xOyl0Lz0xMDI0LCsrZTtyZXR1cm4gdC50b0ZpeGVkKDEpK1wiIFwiK3VuaXRzW2VdfWZ1bmN0aW9uIGNhcGl0YWxpemUodCl7cmV0dXJuIHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKX1mdW5jdGlvbiBiZXR3ZWVuKHQsZSxpKXtyZXR1cm4gaTw9ZT9lOk1hdGgubWluKGksTWF0aC5tYXgoZSx0KSl9ZnVuY3Rpb24gbm9ybWFsaXplVG9JbnRlcnZhbCh0LGUsaSl7aWYoaTw9ZSlyZXR1cm4gZTt2YXIgcz1pLWUrMSxuPWUrKHQtZSklcztyZXR1cm4gbjxlJiYobj1zK24pLDA9PT1uPzA6bn1mdW5jdGlvbiBwYWQodCxlLGkpe3ZvaWQgMD09PWUmJihlPTIpLHZvaWQgMD09PWkmJihpPVwiMFwiKTt2YXIgcz1cIlwiK3Q7cmV0dXJuIHMubGVuZ3RoPj1lP3M6bmV3IEFycmF5KGUtcy5sZW5ndGgrMSkuam9pbihpKStzfXZhciBmb3JtYXQ9e2h1bWFuU3RvcmFnZVNpemU6aHVtYW5TdG9yYWdlU2l6ZSxjYXBpdGFsaXplOmNhcGl0YWxpemUsYmV0d2VlbjpiZXR3ZWVuLG5vcm1hbGl6ZVRvSW50ZXJ2YWw6bm9ybWFsaXplVG9JbnRlcnZhbCxwYWQ6cGFkfSx4aHI9aXNTU1I/bnVsbDpYTUxIdHRwUmVxdWVzdCxzZW5kPWlzU1NSP251bGw6eGhyLnByb3RvdHlwZS5zZW5kLHN0YWNrPXtzdGFydDpbXSxzdG9wOltdfSxoaWdoamFja0NvdW50PTA7ZnVuY3Rpb24gdHJhbnNsYXRlKHQpe3ZhciBlPXQucCxpPXQucG9zLHM9dC5hY3RpdmUsbj10Lmhvcml6LG89dC5yZXZlcnNlLHI9dC5kaXIsYT0xLGw9MTtyZXR1cm4gbj8obyYmKGE9LTEpLFwiYm90dG9tXCI9PT1pJiYobD0tMSkse3RyYW5zZm9ybTpcInRyYW5zbGF0ZTNkKFwiK2EqKGUtMTAwKStcIiUsXCIrKHM/MDotMjAwKmwpK1wiJSwwKVwifSk6KG8mJihsPS0xKSxcInJpZ2h0XCI9PT1pJiYoYT0tMSkse3RyYW5zZm9ybTpcInRyYW5zbGF0ZTNkKFwiKyhzPzA6ciphKi0yMDApK1wiJSxcIitsKihlLTEwMCkrXCIlLDApXCJ9KX1mdW5jdGlvbiBpbmModCxlKXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgZSYmKGU9dDwyNT8zKk1hdGgucmFuZG9tKCkrMzp0PDY1PzMqTWF0aC5yYW5kb20oKTp0PDg1PzIqTWF0aC5yYW5kb20oKTp0PDk5Py42OjApLGJldHdlZW4odCtlLDAsMTAwKX1mdW5jdGlvbiBoaWdoamFja0FqYXgodCxlKXtmdW5jdGlvbiBpKCl7c3RhY2suc3RvcC5tYXAoZnVuY3Rpb24odCl7dCgpfSl9c3RhY2suc3RhcnQucHVzaCh0KSxzdGFjay5zdG9wLnB1c2goZSksKytoaWdoamFja0NvdW50PjF8fCh4aHIucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLHM9YXJndW1lbnRzLmxlbmd0aDtzLS07KWVbc109YXJndW1lbnRzW3NdO3N0YWNrLnN0YXJ0Lm1hcChmdW5jdGlvbih0KXt0KCl9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGksITEpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIixmdW5jdGlvbigpezQ9PT10LnJlYWR5U3RhdGUmJmkoKX0sITEpLHNlbmQuYXBwbHkodGhpcyxlKX0pfWZ1bmN0aW9uIHJlc3RvcmVBamF4KHQsZSl7c3RhY2suc3RhcnQ9c3RhY2suc3RhcnQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pLHN0YWNrLnN0b3A9c3RhY2suc3RvcC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSksKGhpZ2hqYWNrQ291bnQ9TWF0aC5tYXgoMCxoaWdoamFja0NvdW50LTEpKXx8KHhoci5wcm90b3R5cGUuc2VuZD1zZW5kKX12YXIgUUFqYXhCYXI9e25hbWU6XCJRQWpheEJhclwiLHByb3BzOntwb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInRvcFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ0b3BcIixcInJpZ2h0XCIsXCJib3R0b21cIixcImxlZnRcIl0uaW5jbHVkZXModCl9fSxzaXplOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiMnB4XCJ9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicmVkXCJ9LHNraXBIaWphY2s6Qm9vbGVhbixyZXZlcnNlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Y2FsbHM6MCxwcm9ncmVzczowLG9uU2NyZWVuOiExLGFuaW1hdGU6ITB9fSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVyblt0aGlzLnBvc2l0aW9uLFwiYmctXCIrdGhpcy5jb2xvcix0aGlzLmFuaW1hdGU/XCJcIjpcIm5vLXRyYW5zaXRpb25cIl19LHN0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vblNjcmVlbixlPXRyYW5zbGF0ZSh7cDp0aGlzLnByb2dyZXNzLHBvczp0aGlzLnBvc2l0aW9uLGFjdGl2ZTp0LGhvcml6OnRoaXMuaG9yaXpvbnRhbCxyZXZlcnNlOnRoaXMuJHEuaTE4bi5ydGwmJltcInRvcFwiLFwiYm90dG9tXCJdLmluY2x1ZGVzKHRoaXMucG9zaXRpb24pPyF0aGlzLnJldmVyc2U6dGhpcy5yZXZlcnNlLGRpcjp0aGlzLiRxLmkxOG4ucnRsPy0xOjF9KTtyZXR1cm4gZVt0aGlzLnNpemVQcm9wXT10aGlzLnNpemUsZS5vcGFjaXR5PXQ/MTowLGV9LGhvcml6b250YWw6ZnVuY3Rpb24oKXtyZXR1cm5cInRvcFwiPT09dGhpcy5wb3NpdGlvbnx8XCJib3R0b21cIj09PXRoaXMucG9zaXRpb259LHNpemVQcm9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD9cImhlaWdodFwiOlwid2lkdGhcIn19LG1ldGhvZHM6e3N0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9MzAwKSx0aGlzLmNhbGxzKyssdGhpcy5jYWxscz4xfHwoY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuJGVtaXQoXCJzdGFydFwiKSx0aGlzLm9uU2NyZWVufHwodGhpcy5wcm9ncmVzcz0wLHRoaXMub25TY3JlZW49ITAsdGhpcy5hbmltYXRlPSExLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2UuYW5pbWF0ZT0hMCxlLl9fd29yayh0KX0sMTAwKSkpfSxpbmNyZW1lbnQ6ZnVuY3Rpb24odCl7dGhpcy5jYWxscz4wJiYodGhpcy5wcm9ncmVzcz1pbmModGhpcy5wcm9ncmVzcyx0KSl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuY2FsbHM9TWF0aC5tYXgoMCx0aGlzLmNhbGxzLTEpLCEodGhpcy5jYWxscz4wKSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuJGVtaXQoXCJzdG9wXCIpO3ZhciBlPWZ1bmN0aW9uKCl7dC5hbmltYXRlPSEwLHQucHJvZ3Jlc3M9MTAwLHQudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3Qub25TY3JlZW49ITF9LDFlMyl9OzA9PT10aGlzLnByb2dyZXNzP3RoaXMudGltZXI9c2V0VGltZW91dChlLDEpOmUoKX19LF9fd29yazpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMucHJvZ3Jlc3M8MTAwJiYodGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5pbmNyZW1lbnQoKSxlLl9fd29yayh0KX0sdCkpfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuc2tpcEhpamFja3x8KHRoaXMuaGlqYWNrZWQ9ITAsaGlnaGphY2tBamF4KHRoaXMuc3RhcnQsdGhpcy5zdG9wKSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5oaWphY2tlZCYmcmVzdG9yZUFqYXgodGhpcy5zdGFydCx0aGlzLnN0b3ApfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxvYWRpbmctYmFyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLHN0eWxlOnRoaXMuc3R5bGV9KX19O2Z1bmN0aW9uIHNob3dSaXBwbGUodCxlLGkpe3ZhciBzPWkuc3RvcCxuPWkuY2VudGVyO3MmJnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIG8scixhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpLGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIiksYz1lLmNsaWVudFdpZHRoPmUuY2xpZW50SGVpZ2h0P2UuY2xpZW50V2lkdGg6ZS5jbGllbnRIZWlnaHQsaD0obj9jOjIqYykrXCJweFwiLHU9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihhLmFwcGVuZENoaWxkKGwpLGEuY2xhc3NOYW1lPVwicS1yaXBwbGUtY29udGFpbmVyXCIsbC5jbGFzc05hbWU9XCJxLXJpcHBsZS1hbmltYXRpb25cIixsLnN0eWxlLndpZHRoPWgsbC5zdHlsZS5oZWlnaHQ9aCxlLmFwcGVuZENoaWxkKGEpLG4pbz1yPTA7ZWxzZXt2YXIgZD1wb3NpdGlvbih0KTtvPWQubGVmdC11LmxlZnQtYyxyPWQudG9wLXUudG9wLWN9bC5jbGFzc0xpc3QuYWRkKFwicS1yaXBwbGUtYW5pbWF0aW9uLWVudGVyXCIpLGwuY2xhc3NMaXN0LmFkZChcInEtcmlwcGxlLWFuaW1hdGlvbi12aXNpYmxlXCIpLGwuc3R5bGUudHJhbnNmb3JtPVwidHJhbnNsYXRlKFwiK28rXCJweCwgXCIrcitcInB4KSBzY2FsZTNkKDAsIDAsIDApXCIsc2V0VGltZW91dChmdW5jdGlvbigpe2wuY2xhc3NMaXN0LnJlbW92ZShcInEtcmlwcGxlLWFuaW1hdGlvbi1lbnRlclwiKSxsLnN0eWxlLnRyYW5zZm9ybT1cInRyYW5zbGF0ZShcIitvK1wicHgsIFwiK3IrXCJweCkgc2NhbGUzZCgxLCAxLCAxKVwiLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtsLmNsYXNzTGlzdC5yZW1vdmUoXCJxLXJpcHBsZS1hbmltYXRpb24tdmlzaWJsZVwiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5yZW1vdmUoKX0sMzAwKX0sMzAwKX0sMTApfWZ1bmN0aW9uIHNob3VsZEFib3J0KHQpe3QubWF0O3JldHVybiB0LmlvcyYmITB9dmFyIFJpcHBsZT17bmFtZTpcInJpcHBsZVwiLGluc2VydGVkOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS52YWx1ZSxzPWUubW9kaWZpZXJzO2lmKCFzaG91bGRBYm9ydChzKSl7dmFyIG49e2VuYWJsZWQ6ITEhPT1pLG1vZGlmaWVyczp7c3RvcDpzLnN0b3AsY2VudGVyOnMuY2VudGVyfSxjbGljazpmdW5jdGlvbihlKXtuLmVuYWJsZWQmJi0xIT09ZS5kZXRhaWwmJnNob3dSaXBwbGUoZSx0LG4ubW9kaWZpZXJzKX0sa2V5dXA6ZnVuY3Rpb24oZSl7bi5lbmFibGVkJiYxMz09PWUua2V5Q29kZSYmc2hvd1JpcHBsZShlLHQsbi5tb2RpZmllcnMpfX07dC5fX3FyaXBwbGU9bix0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLG4uY2xpY2ssITEpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsbi5rZXl1cCwhMSl9fSx1cGRhdGU6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLnZhbHVlLHM9ZS5tb2RpZmllcnMsbj1zLnN0b3Asbz1zLmNlbnRlcixyPXQuX19xcmlwcGxlO3ImJihyLmVuYWJsZWQ9ITEhPT1pLHIubW9kaWZpZXJzPXtzdG9wOm4sY2VudGVyOm99KX0sdW5iaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5tb2RpZmllcnMscz10Ll9fcXJpcHBsZTtzJiYhc2hvdWxkQWJvcnQoaSkmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHMuY2xpY2ssITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIscy5rZXl1cCwhMSksZGVsZXRlIHQuX19xcmlwcGxlKX19LGFsaWduTWFwPXtsZWZ0Olwic3RhcnRcIixjZW50ZXI6XCJjZW50ZXJcIixyaWdodDpcImVuZFwiLGJldHdlZW46XCJiZXR3ZWVuXCIsYXJvdW5kOlwiYXJvdW5kXCJ9LGFsaWduVmFsdWVzPU9iamVjdC5rZXlzKGFsaWduTWFwKSxBbGlnbk1peGluPXtwcm9wczp7YWxpZ246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJjZW50ZXJcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIGFsaWduVmFsdWVzLmluY2x1ZGVzKHQpfX19LGNvbXB1dGVkOnthbGlnbkNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuXCJqdXN0aWZ5LVwiK2FsaWduTWFwW3RoaXMuYWxpZ25dfX19LHNpemVzPXt4czo4LHNtOjEwLG1kOjE0LGxnOjIwLHhsOjI0LGZvcm06MTQuNzc3LFwiZm9ybS1sYWJlbFwiOjIxLjc3NyxcImZvcm0taGlkZS11bmRlcmxpbmVcIjo5LjMzMyxcImZvcm0tbGFiZWwtaGlkZS11bmRlcmxpbmVcIjoxNi4zMzN9LEJ0bk1peGluPXttaXhpbnM6W0FsaWduTWl4aW5dLGRpcmVjdGl2ZXM6e1JpcHBsZTpSaXBwbGV9LHByb3BzOnt0eXBlOlN0cmluZyxsb2FkaW5nOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpudWxsfSxkaXNhYmxlOkJvb2xlYW4sbGFiZWw6W051bWJlcixTdHJpbmddLG5vQ2FwczpCb29sZWFuLG5vV3JhcDpCb29sZWFuLGljb246U3RyaW5nLGljb25SaWdodDpTdHJpbmcscm91bmQ6Qm9vbGVhbixvdXRsaW5lOkJvb2xlYW4sZmxhdDpCb29sZWFuLHJvdW5kZWQ6Qm9vbGVhbixwdXNoOkJvb2xlYW4sc2l6ZTpTdHJpbmcsZmFiOkJvb2xlYW4sZmFiTWluaTpCb29sZWFuLGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nLGdsb3NzeTpCb29sZWFuLGRlbnNlOkJvb2xlYW4sbm9SaXBwbGU6Qm9vbGVhbix0YWJpbmRleDpOdW1iZXIsdG86W09iamVjdCxTdHJpbmddLHJlcGxhY2U6Qm9vbGVhbn0sY29tcHV0ZWQ6e3N0eWxlOmZ1bmN0aW9uKCl7aWYodGhpcy5zaXplJiYhdGhpcy5mYWImJiF0aGlzLmZhYk1pbmkpcmV0dXJue2ZvbnRTaXplOnRoaXMuc2l6ZSBpbiBzaXplcz9zaXplc1t0aGlzLnNpemVdK1wicHhcIjp0aGlzLnNpemV9fSxpc1JlY3RhbmdsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzUm91bmR9LGlzUm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3VuZHx8dGhpcy5mYWJ8fHRoaXMuZmFiTWluaX0sc2hhcGU6ZnVuY3Rpb24oKXtyZXR1cm5cInEtYnRuLVwiKyh0aGlzLmlzUm91bmQ/XCJyb3VuZFwiOlwicmVjdGFuZ2xlXCIpfSxpc0Rpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZXx8dGhpcy5sb2FkaW5nfSxoYXNSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub1JpcHBsZSYmIXRoaXMuaXNEaXNhYmxlZH0sY29tcHV0ZWRUYWJJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRGlzYWJsZWQ/LTE6dGhpcy50YWJpbmRleHx8MH0saXNMaW5rOmZ1bmN0aW9uKCl7cmV0dXJuXCJhXCI9PT10aGlzLnR5cGV8fHZvaWQgMCE9PXRoaXMudG99LGF0dHJzOmZ1bmN0aW9uKCl7dmFyIHQ9e3RhYmluZGV4OnRoaXMuY29tcHV0ZWRUYWJJbmRleH07cmV0dXJuXCJhXCIhPT10aGlzLnR5cGUmJih0LnR5cGU9dGhpcy50eXBlfHxcImJ1dHRvblwiKSx2b2lkIDAhPT10aGlzLnRvJiYodC5ocmVmPXRoaXMuJHJvdXRlci5yZXNvbHZlKHRoaXMudG8pLmhyZWYpLHR9LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5zaGFwZV07cmV0dXJuIHRoaXMuZmFiP3QucHVzaChcInEtYnRuLWZhYlwiKTp0aGlzLmZhYk1pbmkmJnQucHVzaChcInEtYnRuLWZhYi1taW5pXCIpLHRoaXMuZmxhdD90LnB1c2goXCJxLWJ0bi1mbGF0XCIpOnRoaXMub3V0bGluZT90LnB1c2goXCJxLWJ0bi1vdXRsaW5lXCIpOnRoaXMucHVzaCYmdC5wdXNoKFwicS1idG4tcHVzaFwiKSx0aGlzLmlzRGlzYWJsZWQ/dC5wdXNoKFwiZGlzYWJsZWRcIik6KHQucHVzaChcInEtZm9jdXNhYmxlIHEtaG92ZXJhYmxlXCIpLHRoaXMuYWN0aXZlJiZ0LnB1c2goXCJhY3RpdmVcIikpLHRoaXMuY29sb3I/dGhpcy5mbGF0fHx0aGlzLm91dGxpbmU/dC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fHRoaXMuY29sb3IpKToodC5wdXNoKFwiYmctXCIrdGhpcy5jb2xvciksdC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fFwid2hpdGVcIikpKTp0aGlzLnRleHRDb2xvciYmdC5wdXNoKFwidGV4dC1cIit0aGlzLnRleHRDb2xvciksdC5wdXNoKHtcInEtYnRuLW5vLXVwcGVyY2FzZVwiOnRoaXMubm9DYXBzLFwicS1idG4tcm91bmRlZFwiOnRoaXMucm91bmRlZCxcInEtYnRuLWRlbnNlXCI6dGhpcy5kZW5zZSxnbG9zc3k6dGhpcy5nbG9zc3l9KSx0fSxpbm5lckNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5hbGlnbkNsYXNzXTtyZXR1cm4hMD09PXRoaXMubm9XcmFwJiZ0LnB1c2goXCJuby13cmFwXCIsXCJ0ZXh0LW5vLXdyYXBcIiksITA9PT10aGlzLnJlcGVhdGluZyYmdC5wdXNoKFwibm9uLXNlbGVjdGFibGVcIiksITA9PT10aGlzLmxvYWRpbmcmJnQucHVzaChcInEtYnRuLWlubmVyLS1oaWRkZW5cIiksdH19fSxtaXhpbiQxPXtwcm9wczp7Y29sb3I6U3RyaW5nLHNpemU6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6XCIxZW1cIn19LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7aWYodGhpcy5jb2xvcilyZXR1cm5cInRleHQtXCIrdGhpcy5jb2xvcn19fSxEZWZhdWx0U3Bpbm5lcj17bmFtZTpcIlFTcGlubmVyTWF0XCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXIgcS1zcGlubmVyLW1hdFwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjI1IDI1IDUwIDUwXCJ9fSxbdChcImNpcmNsZVwiLHtzdGF0aWNDbGFzczpcInBhdGhcIixhdHRyczp7Y3g6XCI1MFwiLGN5OlwiNTBcIixyOlwiMjBcIixmaWxsOlwibm9uZVwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlLXdpZHRoXCI6XCIzXCIsXCJzdHJva2UtbWl0ZXJsaW1pdFwiOlwiMTBcIn19KV0pfX0sUVNwaW5uZXI9e21peGluczpbRGVmYXVsdFNwaW5uZXJdLG5hbWU6XCJRU3Bpbm5lclwifSxRQnRuPXtuYW1lOlwiUUJ0blwiLG1peGluczpbQnRuTWl4aW5dLHByb3BzOntwZXJjZW50YWdlOk51bWJlcixkYXJrUGVyY2VudGFnZTpCb29sZWFuLHdhaXRGb3JSaXBwbGU6Qm9vbGVhbixyZXBlYXRUaW1lb3V0OltOdW1iZXIsRnVuY3Rpb25dfSxjb21wdXRlZDp7aGFzUGVyY2VudGFnZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLnBlcmNlbnRhZ2V9LHdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIGJldHdlZW4odGhpcy5wZXJjZW50YWdlLDAsMTAwKStcIiVcIn0sZXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pc0Rpc2FibGVkfHwhdGhpcy5yZXBlYXRUaW1lb3V0P3tjbGljazp0aGlzLmNsaWNrLGtleWRvd246dGhpcy5fX29uS2V5RG93bixrZXl1cDp0aGlzLl9fb25LZXlVcH06e21vdXNlZG93bjp0aGlzLl9fc3RhcnRSZXBlYXQsdG91Y2hzdGFydDp0aGlzLl9fc3RhcnRSZXBlYXQsa2V5ZG93bjpmdW5jdGlvbihlKXt0Ll9fb25LZXlEb3duKGUsITApfSxtb3VzZXVwOnRoaXMuX19lbmRSZXBlYXQsdG91Y2hlbmQ6dGhpcy5fX2VuZFJlcGVhdCxrZXl1cDpmdW5jdGlvbihlKXt0Ll9fb25LZXlVcChlLCEwKX0sbW91c2VsZWF2ZTp0aGlzLl9fYWJvcnRSZXBlYXQsdG91Y2htb3ZlOnRoaXMuX19hYm9ydFJlcGVhdCxibHVyOnRoaXMuX19hYm9ydFJlcGVhdH19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3JlcGVhdGluZzohMSxhY3RpdmU6ITF9fSxtZXRob2RzOntjbGljazpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX19jbGVhbnVwKCksdm9pZCAwPT09dGhpcy50byYmIXRoaXMuaXNEaXNhYmxlZHx8KHQmJnN0b3BBbmRQcmV2ZW50KHQpLCF0aGlzLmlzRGlzYWJsZWQpKWlmKHQmJi0xIT09dC5kZXRhaWwmJlwic3VibWl0XCI9PT10aGlzLnR5cGUpe3N0b3BBbmRQcmV2ZW50KHQpO3ZhciBpPW5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIixPYmplY3QuYXNzaWduKHt9LHQse2RldGFpbDotMX0pKTt0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS4kZWwmJmUuJGVsLmRpc3BhdGNoRXZlbnQoaSl9LDIwMCl9ZWxzZXt2YXIgcz1mdW5jdGlvbigpe2UuJHJvdXRlcltlLnJlcGxhY2U/XCJyZXBsYWNlXCI6XCJwdXNoXCJdKGUudG8pfSxuPWZ1bmN0aW9uKCl7ZS5pc0Rpc2FibGVkfHwoZS4kZW1pdChcImNsaWNrXCIsdCxzKSx2b2lkIDAhPT1lLnRvJiYhMSE9PXQubmF2aWdhdGUmJnMoKSl9O3RoaXMud2FpdEZvclJpcHBsZSYmdGhpcy5oYXNSaXBwbGU/dGhpcy50aW1lcj1zZXRUaW1lb3V0KG4sMzAwKTpuKCl9fSxfX2NsZWFudXA6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lcil9LF9fb25LZXlEb3duOmZ1bmN0aW9uKHQsZSl7dGhpcy5pc0Rpc2FibGVkfHwxMyE9PXQua2V5Q29kZXx8KHRoaXMuYWN0aXZlPSEwLGU/dGhpcy5fX3N0YXJ0UmVwZWF0KHQpOnN0b3BBbmRQcmV2ZW50KHQpKX0sX19vbktleVVwOmZ1bmN0aW9uKHQsZSl7dGhpcy5hY3RpdmUmJih0aGlzLmFjdGl2ZT0hMSx0aGlzLmlzRGlzYWJsZWR8fDEzIT09dC5rZXlDb2RlfHx0aGlzW2U/XCJfX2VuZFJlcGVhdFwiOlwiY2xpY2tcIl0odCkpfSxfX3N0YXJ0UmVwZWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMucmVwZWF0aW5nKXt2YXIgaT1mdW5jdGlvbigpe2UudGltZXI9c2V0VGltZW91dChzLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVwZWF0VGltZW91dD9lLnJlcGVhdFRpbWVvdXQoZS5yZXBlYXRDb3VudCk6ZS5yZXBlYXRUaW1lb3V0KX0scz1mdW5jdGlvbigpe2UuaXNEaXNhYmxlZHx8KGUucmVwZWF0Q291bnQrPTEsdC5yZXBlYXRDb3VudD1lLnJlcGVhdENvdW50LGUuJGVtaXQoXCJjbGlja1wiLHQpLGkoKSl9O3RoaXMucmVwZWF0Q291bnQ9MCx0aGlzLnJlcGVhdGluZz0hMCxpKCl9fSxfX2Fib3J0UmVwZWF0OmZ1bmN0aW9uKCl7dGhpcy5yZXBlYXRpbmc9ITEsdGhpcy5fX2NsZWFudXAoKX0sX19lbmRSZXBlYXQ6ZnVuY3Rpb24odCl7dGhpcy5yZXBlYXRpbmcmJih0aGlzLnJlcGVhdGluZz0hMSx0aGlzLnJlcGVhdENvdW50P3RoaXMucmVwZWF0Q291bnQ9MDoodC5kZXRhaWx8fHQua2V5Q29kZSkmJih0LnJlcGVhdENvdW50PTAsdGhpcy4kZW1pdChcImNsaWNrXCIsdCkpLHRoaXMuX19jbGVhbnVwKCkpfX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX19jbGVhbnVwKCl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT1bXS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCk7cmV0dXJuIHZvaWQgMCE9PXRoaXMubGFiZWwmJiEwPT09dGhpcy5pc1JlY3RhbmdsZSYmZS51bnNoaWZ0KHQoXCJkaXZcIixbdGhpcy5sYWJlbF0pKSx2b2lkIDAhPT10aGlzLmljb24mJmUudW5zaGlmdCh0KFFJY29uLHtjbGFzczp7XCJvbi1sZWZ0XCI6dm9pZCAwIT09dGhpcy5sYWJlbCYmITA9PT10aGlzLmlzUmVjdGFuZ2xlfSxwcm9wczp7bmFtZTp0aGlzLmljb259fSkpLHZvaWQgMCE9PXRoaXMuaWNvblJpZ2h0JiYhMT09PXRoaXMuaXNSb3VuZCYmZS5wdXNoKHQoUUljb24se3N0YXRpY0NsYXNzOlwib24tcmlnaHRcIixwcm9wczp7bmFtZTp0aGlzLmljb25SaWdodH19KSksdCh0aGlzLmlzTGluaz9cImFcIjpcImJ1dHRvblwiLHtzdGF0aWNDbGFzczpcInEtYnRuIGlubGluZSByZWxhdGl2ZS1wb3NpdGlvbiBxLWJ0bi1pdGVtIG5vbi1zZWxlY3RhYmxlXCIsY2xhc3M6dGhpcy5jbGFzc2VzLHN0eWxlOnRoaXMuc3R5bGUsYXR0cnM6dGhpcy5hdHRycyxvbjp0aGlzLmV2ZW50cyxkaXJlY3RpdmVzOnRoaXMuaGFzUmlwcGxlP1t7bmFtZTpcInJpcHBsZVwiLHZhbHVlOiEwLG1vZGlmaWVyczp7Y2VudGVyOnRoaXMuaXNSb3VuZH19XTpudWxsfSxbdGhpcy4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZvY3VzLWhlbHBlclwifSk6bnVsbCx0aGlzLmxvYWRpbmcmJnRoaXMuaGFzUGVyY2VudGFnZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1idG4tcHJvZ3Jlc3MgYWJzb2x1dGUtZnVsbFwiLGNsYXNzOntcInEtYnRuLWRhcmstcHJvZ3Jlc3NcIjp0aGlzLmRhcmtQZXJjZW50YWdlfSxzdHlsZTp7d2lkdGg6dGhpcy53aWR0aH19KTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWJ0bi1pbm5lciByb3cgY29sIGl0ZW1zLWNlbnRlciBxLXBvcHVwLS1za2lwXCIsY2xhc3M6dGhpcy5pbm5lckNsYXNzZXN9LGUpLG51bGwhPT10aGlzLmxvYWRpbmc/dChcInRyYW5zaXRpb25cIix7cHJvcHM6e25hbWU6XCJxLXRyYW5zaXRpb24tLWZhZGVcIn19LCEwPT09dGhpcy5sb2FkaW5nP1t0KFwiZGl2XCIse2tleTpcImxvYWRpbmdcIixzdGF0aWNDbGFzczpcImFic29sdXRlLWZ1bGwgZmxleCBmbGV4LWNlbnRlclwifSx2b2lkIDAhPT10aGlzLiRzbG90cy5sb2FkaW5nP3RoaXMuJHNsb3RzLmxvYWRpbmc6W3QoUVNwaW5uZXIpXSldOnZvaWQgMCk6bnVsbF0pfX0sUUFsZXJ0PXtuYW1lOlwiUUFsZXJ0XCIscHJvcHM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJwb3NpdGl2ZVwiLFwibmVnYXRpdmVcIixcIndhcm5pbmdcIixcImluZm9cIl0uaW5jbHVkZXModCl9fSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIm5lZ2F0aXZlXCJ9LHRleHRDb2xvcjpTdHJpbmcsbWVzc2FnZTpTdHJpbmcsZGV0YWlsOlN0cmluZyxpY29uOlN0cmluZyxhdmF0YXI6U3RyaW5nLGFjdGlvbnM6QXJyYXl9LGNvbXB1dGVkOntjb21wdXRlZEljb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29uP3RoaXMuaWNvbjp0aGlzLiRxLmljb24udHlwZVt0aGlzLnR5cGV8fHRoaXMuY29sb3JdfSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuXCJiZy1cIisodGhpcy50eXBlfHx0aGlzLmNvbG9yKStcIiB0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8XCJ3aGl0ZVwiKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W10scz10aGlzLiRzbG90cy5kZXRhaWx8fHRoaXMuZGV0YWlsO3JldHVybiB0aGlzLmF2YXRhcj9pLnB1c2godChcImltZ1wiLHtzdGF0aWNDbGFzczpcImF2YXRhclwiLGF0dHJzOntzcmM6dGhpcy5hdmF0YXJ9fSkpOih0aGlzLmljb258fHRoaXMudHlwZSkmJmkucHVzaCh0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLmNvbXB1dGVkSWNvbn19KSksdChcImRpdlwiLFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hbGVydCByb3cgbm8td3JhcCBzaGFkb3ctMlwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sW2kubGVuZ3RoP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWFsZXJ0LXNpZGUgY29sLWF1dG8gcm93IGZsZXgtY2VudGVyXCJ9LGkpOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWxlcnQtY29udGVudCBjb2wgc2VsZi1jZW50ZXJcIn0sW3QoXCJkaXZcIix0aGlzLiRzbG90cy5kZWZhdWx0fHx0aGlzLm1lc3NhZ2UpLHM/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWxlcnQtZGV0YWlsXCJ9LFtzXSk6bnVsbF0pLHRoaXMuYWN0aW9ucyYmdGhpcy5hY3Rpb25zLmxlbmd0aD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hbGVydC1hY3Rpb25zIGNvbC1hdXRvIGd1dHRlci14cyBjb2x1bW4gZmxleC1jZW50ZXJcIn0sdGhpcy5hY3Rpb25zLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImZ1bGwtd2lkdGhcIn0sW3QoUUJ0bix7c3RhdGljQ2xhc3M6XCJmdWxsLXdpZHRoXCIscHJvcHM6e2ZsYXQ6ITAsZGVuc2U6ITAsYWxpZ246XCJsZWZ0XCIsaWNvbjppLmljb24sbGFiZWw6ITA9PT1pLmNsb3NlQnRuP1wic3RyaW5nXCI9PXR5cGVvZiBpLmxhYmVsP2kubGFiZWw6ZS4kcS5pMThuLmxhYmVsLmNsb3NlOmkubGFiZWx9LG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZXIoKX19fSldKX0pKTpudWxsXSldKX19O2Z1bmN0aW9uIGZpbHRlcih0LGUpe3ZhciBpPWUuZmllbGQscz1lLmxpc3Qsbj10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybihcIlwiK3RbaV0pLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuKX0pfWZ1bmN0aW9uIHM0KCl7cmV0dXJuIE1hdGguZmxvb3IoNjU1MzYqKDErTWF0aC5yYW5kb20oKSkpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSl9ZnVuY3Rpb24gdWlkKCl7cmV0dXJuIHM0KCkrczQoKStcIi1cIitzNCgpK1wiLVwiK3M0KCkrXCItXCIrczQoKStcIi1cIitzNCgpK3M0KCkrczQoKX1mdW5jdGlvbiBnZXRBbmNob3JQb3NpdGlvbih0LGUpe3ZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1pLnRvcCxuPWkubGVmdCxvPWkucmlnaHQscj1pLmJvdHRvbSxhPXt0b3A6cyxsZWZ0Om4sd2lkdGg6dC5vZmZzZXRXaWR0aCxoZWlnaHQ6dC5vZmZzZXRIZWlnaHR9O3JldHVybiBlJiYoYS50b3AtPWVbMV0sYS5sZWZ0LT1lWzBdLHImJihyKz1lWzFdKSxvJiYobys9ZVswXSksYS53aWR0aCs9ZVswXSxhLmhlaWdodCs9ZVsxXSksYS5yaWdodD1vfHxhLmxlZnQrYS53aWR0aCxhLmJvdHRvbT1yfHxhLnRvcCthLmhlaWdodCxhLm1pZGRsZT1hLmxlZnQrKGEucmlnaHQtYS5sZWZ0KS8yLGEuY2VudGVyPWEudG9wKyhhLmJvdHRvbS1hLnRvcCkvMixhfWZ1bmN0aW9uIGdldFRhcmdldFBvc2l0aW9uKHQpe3JldHVybnt0b3A6MCxjZW50ZXI6dC5vZmZzZXRIZWlnaHQvMixib3R0b206dC5vZmZzZXRIZWlnaHQsbGVmdDowLG1pZGRsZTp0Lm9mZnNldFdpZHRoLzIscmlnaHQ6dC5vZmZzZXRXaWR0aH19ZnVuY3Rpb24gcmVwb3NpdGlvbklmTmVlZGVkKHQsZSxpLHMsbixvKXt2YXIgcj1nZXRTY3JvbGxiYXJXaWR0aCgpLGE9d2luZG93LmlubmVySGVpZ2h0LGw9d2luZG93LmlubmVyV2lkdGg7aWYoYS09cixsLT1yLG4udG9wPDB8fG4udG9wK2UuYm90dG9tPmEpaWYoXCJjZW50ZXJcIj09PWkudmVydGljYWwpbi50b3A9dFtpLnZlcnRpY2FsXT5hLzI/YS1lLmJvdHRvbTowLG4ubWF4SGVpZ2h0PU1hdGgubWluKGUuYm90dG9tLGEpO2Vsc2UgaWYodFtpLnZlcnRpY2FsXT5hLzIpe3ZhciBjPU1hdGgubWluKGEsXCJjZW50ZXJcIj09PXMudmVydGljYWw/dC5jZW50ZXI6cy52ZXJ0aWNhbD09PWkudmVydGljYWw/dC5ib3R0b206dC50b3ApO24ubWF4SGVpZ2h0PU1hdGgubWluKGUuYm90dG9tLGMpLG4udG9wPU1hdGgubWF4KDAsYy1uLm1heEhlaWdodCl9ZWxzZSBuLnRvcD1cImNlbnRlclwiPT09cy52ZXJ0aWNhbD90LmNlbnRlcjpzLnZlcnRpY2FsPT09aS52ZXJ0aWNhbD90LnRvcDp0LmJvdHRvbSxuLm1heEhlaWdodD1NYXRoLm1pbihlLmJvdHRvbSxhLW4udG9wKTtpZihuLmxlZnQ8MHx8bi5sZWZ0K2UucmlnaHQ+bClpZihuLm1heFdpZHRoPU1hdGgubWluKGUucmlnaHQsbCksXCJtaWRkbGVcIj09PWkuaG9yaXpvbnRhbCluLmxlZnQ9dFtpLmhvcml6b250YWxdPmwvMj9sLWUucmlnaHQ6MDtlbHNlIGlmKG8pbi5sZWZ0PW4ubGVmdDwwPzA6bC1lLnJpZ2h0O2Vsc2UgaWYodFtpLmhvcml6b250YWxdPmwvMil7dmFyIGg9TWF0aC5taW4obCxcIm1pZGRsZVwiPT09cy5ob3Jpem9udGFsP3QuY2VudGVyOnMuaG9yaXpvbnRhbD09PWkuaG9yaXpvbnRhbD90LnJpZ2h0OnQubGVmdCk7bi5tYXhXaWR0aD1NYXRoLm1pbihlLnJpZ2h0LGgpLG4ubGVmdD1NYXRoLm1heCgwLGgtbi5tYXhXaWR0aCl9ZWxzZSBuLmxlZnQ9XCJtaWRkbGVcIj09PXMuaG9yaXpvbnRhbD90LmNlbnRlcjpzLmhvcml6b250YWw9PT1pLmhvcml6b250YWw/dC5sZWZ0OnQucmlnaHQsbi5tYXhXaWR0aD1NYXRoLm1pbihlLnJpZ2h0LGwtbi5sZWZ0KTtyZXR1cm4gbn1mdW5jdGlvbiBzZXRQb3NpdGlvbih0KXt2YXIgZSxpPXQuZWwscz10LmFuaW1hdGUsbj10LmFuY2hvckVsLG89dC5hbmNob3JPcmlnaW4scj10LnNlbGZPcmlnaW4sYT10Lm1heEhlaWdodCxsPXQuZXZlbnQsYz10LmFuY2hvckNsaWNrLGg9dC50b3VjaFBvc2l0aW9uLHU9dC5vZmZzZXQsZD10LnRvdWNoT2Zmc2V0LHA9dC5jb3ZlcjtpZihpLnN0eWxlLm1heEhlaWdodD1hfHxcIjY1dmhcIixpLnN0eWxlLm1heFdpZHRoPVwiMTAwdndcIiwhbHx8YyYmIWgpaWYoZCl7dmFyIGY9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxtPWYudG9wLGc9Zi5sZWZ0LHY9bStkLnRvcCxiPWcrZC5sZWZ0O2U9e3RvcDp2LGxlZnQ6Yix3aWR0aDoxLGhlaWdodDoxLHJpZ2h0OmIrMSxjZW50ZXI6dixtaWRkbGU6Yixib3R0b206disxfX1lbHNlIGU9Z2V0QW5jaG9yUG9zaXRpb24obix1KTtlbHNle3ZhciBfPXBvc2l0aW9uKGwpLHk9Xy50b3Asdz1fLmxlZnQ7ZT17dG9wOnksbGVmdDp3LHdpZHRoOjEsaGVpZ2h0OjEscmlnaHQ6dysxLGNlbnRlcjp5LG1pZGRsZTp3LGJvdHRvbTp5KzF9fXZhciBDPWdldFRhcmdldFBvc2l0aW9uKGkpLHg9e3RvcDplW28udmVydGljYWxdLUNbci52ZXJ0aWNhbF0sbGVmdDplW28uaG9yaXpvbnRhbF0tQ1tyLmhvcml6b250YWxdfTtpZih4PXJlcG9zaXRpb25JZk5lZWRlZChlLEMscixvLHgscCksaS5zdHlsZS50b3A9TWF0aC5tYXgoMCx4LnRvcCkrXCJweFwiLGkuc3R5bGUubGVmdD1NYXRoLm1heCgwLHgubGVmdCkrXCJweFwiLHgubWF4SGVpZ2h0JiYoaS5zdHlsZS5tYXhIZWlnaHQ9eC5tYXhIZWlnaHQrXCJweFwiKSx4Lm1heFdpZHRoJiYoaS5zdHlsZS5tYXhXaWR0aD14Lm1heFdpZHRoK1wicHhcIikscyl7dmFyIFM9eC50b3A8ZS50b3A/W1widXBcIixcImRvd25cIl06W1wiZG93blwiLFwidXBcIl07aS5jbGFzc0xpc3QuYWRkKFwiYW5pbWF0ZS1wb3B1cC1cIitTWzBdKSxpLmNsYXNzTGlzdC5yZW1vdmUoXCJhbmltYXRlLXBvcHVwLVwiK1NbMV0pfX1mdW5jdGlvbiBwb3NpdGlvblZhbGlkYXRvcih0KXt2YXIgZT10LnNwbGl0KFwiIFwiKTtyZXR1cm4gMj09PWUubGVuZ3RoJiYoW1widG9wXCIsXCJjZW50ZXJcIixcImJvdHRvbVwiXS5pbmNsdWRlcyhlWzBdKT8hIVtcImxlZnRcIixcIm1pZGRsZVwiLFwicmlnaHRcIl0uaW5jbHVkZXMoZVsxXSl8fChjb25zb2xlLmVycm9yKFwiQW5jaG9yL1NlbGYgcG9zaXRpb24gbXVzdCBlbmQgd2l0aCBvbmUgb2YgbGVmdC9taWRkbGUvcmlnaHRcIiksITEpOihjb25zb2xlLmVycm9yKFwiQW5jaG9yL1NlbGYgcG9zaXRpb24gbXVzdCBzdGFydCB3aXRoIG9uZSBvZiB0b3AvY2VudGVyL2JvdHRvbVwiKSwhMSkpfWZ1bmN0aW9uIG9mZnNldFZhbGlkYXRvcih0KXtyZXR1cm4hdHx8Mj09PXQubGVuZ3RoJiYoXCJudW1iZXJcIj09dHlwZW9mIHRbMF0mJlwibnVtYmVyXCI9PXR5cGVvZiB0WzFdKX1mdW5jdGlvbiBwYXJzZVBvc2l0aW9uKHQpe3ZhciBlPXQuc3BsaXQoXCIgXCIpO3JldHVybnt2ZXJ0aWNhbDplWzBdLGhvcml6b250YWw6ZVsxXX19ZnVuY3Rpb24gZnJhbWVEZWJvdW5jZSh0KXt2YXIgZSxpPSExO2Z1bmN0aW9uIHMoKXtmb3IodmFyIHM9dGhpcyxuPVtdLG89YXJndW1lbnRzLmxlbmd0aDtvLS07KW5bb109YXJndW1lbnRzW29dO2l8fChpPSEwLGU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dC5hcHBseShzLG4pLGk9ITF9KSl9cmV0dXJuIHMuY2FuY2VsPWZ1bmN0aW9uKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGUpLGk9ITF9LHN9dmFyIENhblJlbmRlck1peGluPXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2NhblJlbmRlcjohb25TU1J9fSxtb3VudGVkOmZ1bmN0aW9uKCl7ITE9PT10aGlzLmNhblJlbmRlciYmKHRoaXMuY2FuUmVuZGVyPSEwKX19LFFQb3BvdmVyPXtuYW1lOlwiUVBvcG92ZXJcIixtaXhpbnM6W01vZGVsVG9nZ2xlTWl4aW4sQ2FuUmVuZGVyTWl4aW5dLHByb3BzOnthbmNob3I6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpwb3NpdGlvblZhbGlkYXRvcn0sc2VsZjp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOnBvc2l0aW9uVmFsaWRhdG9yfSxmaXQ6Qm9vbGVhbixjb3ZlcjpCb29sZWFuLHBlcnNpc3RlbnQ6Qm9vbGVhbixrZWVwT25TY3JlZW46Qm9vbGVhbixtYXhIZWlnaHQ6U3RyaW5nLHRvdWNoUG9zaXRpb246Qm9vbGVhbixhbmNob3JDbGljazp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LG9mZnNldDp7dHlwZTpBcnJheSx2YWxpZGF0b3I6b2Zmc2V0VmFsaWRhdG9yfSxub0ZvY3VzOkJvb2xlYW4sbm9SZWZvY3VzOkJvb2xlYW4sZGlzYWJsZTpCb29sZWFufSx3YXRjaDp7JHJvdXRlOmZ1bmN0aW9uKCl7dGhpcy5oaWRlKCl9fSxjb21wdXRlZDp7aG9yaXpTaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHEuaTE4bi5ydGw/XCJyaWdodFwiOlwibGVmdFwifSxhbmNob3JPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VQb3NpdGlvbih0aGlzLmNvdmVyP1widG9wIFwiK3RoaXMuaG9yaXpTaWRlOnRoaXMuYW5jaG9yfHxcImJvdHRvbSBcIit0aGlzLmhvcml6U2lkZSl9LHNlbGZPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VQb3NpdGlvbih0aGlzLnNlbGZ8fFwidG9wIFwiK3RoaXMuaG9yaXpTaWRlKX19LHJlbmRlcjpmdW5jdGlvbih0KXtpZih0aGlzLmNhblJlbmRlcilyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcG9wb3ZlciBzY3JvbGxcIixyZWY6XCJjb250ZW50XCIsYXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX19fSx0aGlzLiRzbG90cy5kZWZhdWx0KX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fX3VwZGF0ZVBvc2l0aW9uPWZyYW1lRGVib3VuY2UoZnVuY3Rpb24oZSxpLHMpe3JldHVybiB0LnJlcG9zaXRpb24oaSxzKX0pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5hbmNob3JFbD10LiRlbC5wYXJlbnROb2RlLHQuYW5jaG9yRWwucmVtb3ZlQ2hpbGQodC4kZWwpLCh0LmFuY2hvckVsLmNsYXNzTGlzdC5jb250YWlucyhcInEtcG9wdXAtLXNraXBcIil8fHQuYW5jaG9yRWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwibm8tcG9pbnRlci1ldmVudHNcIikpJiYodC5hbmNob3JFbD10LmFuY2hvckVsLnBhcmVudE5vZGUpLHQuYW5jaG9yQ2xpY2smJih0LmFuY2hvckVsLmNsYXNzTGlzdC5hZGQoXCJjdXJzb3ItcG9pbnRlclwiKSx0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHQudG9nZ2xlKSx0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLHQuX190b2dnbGVLZXkpKX0pLHRoaXMudmFsdWUmJnRoaXMuc2hvdygpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5zaG93aW5nJiZ0aGlzLl9fY2xlYW51cCgpLHRoaXMuYW5jaG9yQ2xpY2smJnRoaXMuYW5jaG9yRWwmJih0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMudG9nZ2xlKSx0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLHRoaXMuX190b2dnbGVLZXkpKX0sbWV0aG9kczp7X19zaG93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5ub1JlZm9jdXN8fCh0aGlzLl9fcmVmb2N1c1RhcmdldD10aGlzLmFuY2hvckNsaWNrJiZ0aGlzLmFuY2hvckVsfHxkb2N1bWVudC5hY3RpdmVFbGVtZW50KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuJGVsKSxFc2NhcGVLZXkucmVnaXN0ZXIoZnVuY3Rpb24oKXtlLiRlbWl0KFwiZXNjYXBlLWtleVwiKSxlLmhpZGUoKX0pLHRoaXMuc2Nyb2xsVGFyZ2V0PWdldFNjcm9sbFRhcmdldCh0aGlzLmFuY2hvckVsKSx0aGlzLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5fX3VwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy5zY3JvbGxUYXJnZXQhPT13aW5kb3cmJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5fX3VwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLl9fdXBkYXRlUG9zaXRpb24sbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLl9fdXBkYXRlUG9zaXRpb24oMCx0LCEwKSxjbGVhclRpbWVvdXQodGhpcy50aW1lciksIXRoaXMubm9Gb2N1cyYmdGhpcy4kcmVmcy5jb250ZW50JiZ0aGlzLiRyZWZzLmNvbnRlbnQuZm9jdXMoKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixlLl9fYm9keUhpZGUsITApLGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixlLl9fYm9keUhpZGUsITApLGUuc2hvd1Byb21pc2UmJmUuc2hvd1Byb21pc2VSZXNvbHZlKCl9LDApfSxfX3RvZ2dsZUtleTpmdW5jdGlvbih0KXsxMz09PXQua2V5Q29kZSYmdGhpcy50b2dnbGUodCl9LF9fYm9keUhpZGU6ZnVuY3Rpb24odCl7dGhpcy5wZXJzaXN0ZW50fHx0JiZ0LnRhcmdldCYmKHRoaXMuJGVsLmNvbnRhaW5zKHQudGFyZ2V0KXx8dGhpcy5hbmNob3JFbC5jb250YWlucyh0LnRhcmdldCkpfHx0aGlzLmhpZGUodCl9LF9faGlkZTpmdW5jdGlvbigpe3RoaXMuX19jbGVhbnVwKCksdGhpcy5oaWRlUHJvbWlzZSYmdGhpcy5oaWRlUHJvbWlzZVJlc29sdmUoKSwhdGhpcy5ub1JlZm9jdXMmJnRoaXMuX19yZWZvY3VzVGFyZ2V0JiYodGhpcy5fX3JlZm9jdXNUYXJnZXQuZm9jdXMoKSwhdGhpcy5fX3JlZm9jdXNUYXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1pZlwiKSYmdGhpcy5fX3JlZm9jdXNUYXJnZXQuYmx1cigpKX0sX19jbGVhbnVwOmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHRoaXMuX19ib2R5SGlkZSwhMCksZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHRoaXMuX19ib2R5SGlkZSwhMCksdGhpcy5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuX191cGRhdGVQb3NpdGlvbixsaXN0ZW5PcHRzLnBhc3NpdmUpLHRoaXMuc2Nyb2xsVGFyZ2V0IT09d2luZG93JiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuX191cGRhdGVQb3NpdGlvbixsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fX3VwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksRXNjYXBlS2V5LnBvcCgpLHRoaXMuJGVsLnJlbW92ZSgpfSxyZXBvc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5hbmNob3JFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWkudG9wLG49aS5ib3R0b20sbz1pLmxlZnQscj1pLnJpZ2h0O2lmKCF0aGlzLmtlZXBPblNjcmVlbiYmKG48MHx8cz53aW5kb3cuaW5uZXJIZWlnaHR8fHI8MHx8bz53aW5kb3cuaW5uZXJXaWR0aCkpcmV0dXJuIHRoaXMuaGlkZSgpO2lmKHRoaXMuZml0fHx0aGlzLmNvdmVyKXt2YXIgYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmFuY2hvckVsKTt0aGlzLiRlbC5zdHlsZS5taW5XaWR0aD1hLmdldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiKSx0aGlzLmNvdmVyJiYodGhpcy4kZWwuc3R5bGUubWluSGVpZ2h0PWEuZ2V0UHJvcGVydHlWYWx1ZShcImhlaWdodFwiKSl9aWYoZSlpZih0aGlzLnRvdWNoUG9zaXRpb24pe3ZhciBsPXBvc2l0aW9uKHQpLGM9bC50b3AsaD1sLmxlZnQ7dGhpcy50b3VjaE9mZnNldD17bGVmdDpoLW8sdG9wOmMtc319ZWxzZSBkZWxldGUgdGhpcy50b3VjaE9mZnNldDtzZXRQb3NpdGlvbih7ZXZlbnQ6dCxhbmltYXRlOmUsZWw6dGhpcy4kZWwsb2Zmc2V0OnRoaXMub2Zmc2V0LGFuY2hvckVsOnRoaXMuYW5jaG9yRWwsYW5jaG9yT3JpZ2luOnRoaXMuYW5jaG9yT3JpZ2luLHNlbGZPcmlnaW46dGhpcy5zZWxmT3JpZ2luLG1heEhlaWdodDp0aGlzLm1heEhlaWdodCxhbmNob3JDbGljazp0aGlzLmFuY2hvckNsaWNrLHRvdWNoUG9zaXRpb246dGhpcy50b3VjaFBvc2l0aW9uLHRvdWNoT2Zmc2V0OnRoaXMudG91Y2hPZmZzZXQsY292ZXI6dGhpcy5jb3Zlcn0pfX19O2Z1bmN0aW9uIHB1c2godCxlLGkscyxuLG8pe3ZhciByPXtwcm9wczp7cmlnaHQ6by5yaWdodH19O2lmKHMmJm4pdC5wdXNoKGUoaSxyLHMpKTtlbHNle3ZhciBhPSExO2Zvcih2YXIgbCBpbiBvKWlmKG8uaGFzT3duUHJvcGVydHkobCkmJnZvaWQgMCE9PShhPW9bbF0pJiYhMCE9PWEpe3QucHVzaChlKGkse3Byb3BzOm99KSk7YnJlYWt9cyYmdC5wdXNoKGUoaSxyLHMpKX19dmFyIFFJdGVtV3JhcHBlcj17bmFtZTpcIlFJdGVtV3JhcHBlclwiLHByb3BzOntjZmc6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LHNsb3RSZXBsYWNlOkJvb2xlYW59LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmNmZyxpPXRoaXMuc2xvdFJlcGxhY2Uscz1bXTtyZXR1cm4gcHVzaChzLHQsUUl0ZW1TaWRlLHRoaXMuJHNsb3RzLmxlZnQsaSx7aWNvbjplLmljb24sY29sb3I6ZS5sZWZ0Q29sb3IsYXZhdGFyOmUuYXZhdGFyLGxldHRlcjplLmxldHRlcixpbWFnZTplLmltYWdlLGludmVydGVkOmUubGVmdEludmVydGVkLHRleHRDb2xvcjplLmxlZnRUZXh0Q29sb3J9KSxwdXNoKHMsdCxRSXRlbU1haW4sdGhpcy4kc2xvdHMubWFpbixpLHtsYWJlbDplLmxhYmVsLHN1YmxhYmVsOmUuc3VibGFiZWwsbGFiZWxMaW5lczplLmxhYmVsTGluZXMsc3VibGFiZWxMaW5lczplLnN1YmxhYmVsTGluZXMsaW5zZXQ6ZS5pbnNldH0pLHB1c2gocyx0LFFJdGVtU2lkZSx0aGlzLiRzbG90cy5yaWdodCxpLHtyaWdodDohMCxpY29uOmUucmlnaHRJY29uLGNvbG9yOmUucmlnaHRDb2xvcixhdmF0YXI6ZS5yaWdodEF2YXRhcixsZXR0ZXI6ZS5yaWdodExldHRlcixpbWFnZTplLnJpZ2h0SW1hZ2Usc3RhbXA6ZS5zdGFtcCxpbnZlcnRlZDplLnJpZ2h0SW52ZXJ0ZWQsdGV4dENvbG9yOmUucmlnaHRUZXh0Q29sb3J9KSxzLnB1c2godGhpcy4kc2xvdHMuZGVmYXVsdCksdChRSXRlbSx7YXR0cnM6dGhpcy4kYXR0cnMsb246dGhpcy4kbGlzdGVuZXJzLHByb3BzOmV9LHMpfX0sS2V5Ym9hcmRTZWxlY3Rpb25NaXhpbj17ZGF0YTpmdW5jdGlvbigpe3JldHVybntrZXlib2FyZEluZGV4OjAsa2V5Ym9hcmRNb3ZlRGlyZWN0aW9uOiExLGtleWJvYXJkTW92ZVRpbWVyOiExfX0sd2F0Y2g6e2tleWJvYXJkSW5kZXg6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRyZWZzLnBvcG92ZXImJnRoaXMuJHJlZnMucG9wb3Zlci5zaG93aW5nJiZ0aGlzLmtleWJvYXJkTW92ZURpcmVjdGlvbiYmdD4tMSYmdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpZihlLiRyZWZzLnBvcG92ZXIpe3ZhciB0PWUuJHJlZnMucG9wb3Zlci4kZWwucXVlcnlTZWxlY3RvcihcIi5xLXNlbGVjdC1oaWdobGlnaHRcIik7aWYodCYmdC5zY3JvbGxJbnRvVmlldyl7aWYodC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKXJldHVybiB0LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoITEpO3Quc2Nyb2xsSW50b1ZpZXcoZS5rZXlib2FyZE1vdmVEaXJlY3Rpb248MCl9fX0pfX0sbWV0aG9kczp7X19rZXlib2FyZFNob3c6ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCksdGhpcy5rZXlib2FyZEluZGV4IT09dCYmKHRoaXMua2V5Ym9hcmRJbmRleD10KX0sX19rZXlib2FyZFNldEN1cnJlbnRTZWxlY3Rpb246ZnVuY3Rpb24odCl7dGhpcy5rZXlib2FyZEluZGV4Pj0wJiZ0aGlzLmtleWJvYXJkSW5kZXg8PXRoaXMua2V5Ym9hcmRNYXhJbmRleCYmdGhpcy5fX2tleWJvYXJkU2V0U2VsZWN0aW9uKHRoaXMua2V5Ym9hcmRJbmRleCx0KX0sX19rZXlib2FyZEhhbmRsZUtleTpmdW5jdGlvbih0KXt2YXIgZT1nZXRFdmVudEtleSh0KTtzd2l0Y2goZSl7Y2FzZSAzODp0aGlzLl9fa2V5Ym9hcmRNb3ZlQ3Vyc29yKC0xLHQpO2JyZWFrO2Nhc2UgNDA6dGhpcy5fX2tleWJvYXJkTW92ZUN1cnNvcigxLHQpO2JyZWFrO2Nhc2UgMTM6aWYodGhpcy4kcmVmcy5wb3BvdmVyLnNob3dpbmcpcmV0dXJuIHN0b3BBbmRQcmV2ZW50KHQpLHZvaWQgdGhpcy5fX2tleWJvYXJkU2V0Q3VycmVudFNlbGVjdGlvbigpO2JyZWFrO2Nhc2UgOTp0aGlzLmhpZGUoKX10aGlzLl9fa2V5Ym9hcmRDdXN0b21LZXlIYW5kbGUoZSx0KX0sX19rZXlib2FyZE1vdmVDdXJzb3I6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO2lmKHN0b3BBbmRQcmV2ZW50KGUpLHRoaXMuJHJlZnMucG9wb3Zlci5zaG93aW5nKXtjbGVhclRpbWVvdXQodGhpcy5rZXlib2FyZE1vdmVUaW1lcik7dmFyIHM9dGhpcy5rZXlib2FyZEluZGV4LG49dGhpcy5fX2tleWJvYXJkSXNTZWxlY3RhYmxlSW5kZXh8fGZ1bmN0aW9uKCl7cmV0dXJuITB9O2Rve3M9bm9ybWFsaXplVG9JbnRlcnZhbChzK3QsLTEsaS5rZXlib2FyZE1heEluZGV4KX13aGlsZShzIT09dGhpcy5rZXlib2FyZEluZGV4JiYhbihzKSk7cmV0dXJuIHRoaXMua2V5Ym9hcmRNb3ZlRGlyZWN0aW9uPXM+dGhpcy5rZXlib2FyZEluZGV4PzE6LTEsdGhpcy5rZXlib2FyZE1vdmVUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5rZXlib2FyZE1vdmVEaXJlY3Rpb249ITF9LDUwMCksdm9pZCh0aGlzLmtleWJvYXJkSW5kZXg9cyl9dGhpcy5fX2tleWJvYXJkU2hvd1RyaWdnZXIoKX19fSxRQXV0b2NvbXBsZXRlPXtuYW1lOlwiUUF1dG9jb21wbGV0ZVwiLG1peGluczpbS2V5Ym9hcmRTZWxlY3Rpb25NaXhpbl0scHJvcHM6e21pbkNoYXJhY3RlcnM6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MX0sbWF4UmVzdWx0czp7dHlwZTpOdW1iZXIsZGVmYXVsdDo2fSxtYXhIZWlnaHQ6U3RyaW5nLGRlYm91bmNlOnt0eXBlOk51bWJlcixkZWZhdWx0OjUwMH0sZmlsdGVyOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6ZmlsdGVyfSxzdGF0aWNEYXRhOk9iamVjdCx2YWx1ZUZpZWxkOltTdHJpbmcsRnVuY3Rpb25dLHNlcGFyYXRvcjpCb29sZWFufSxpbmplY3Q6e19faW5wdXQ6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUUF1dG9jb21wbGV0ZSBuZWVkcyB0byBiZSBjaGlsZCBvZiBRSW5wdXQsIFFDaGlwc0lucHV0IG9yIFFTZWFyY2hcIil9fSxfX2lucHV0RGVib3VuY2U6e2RlZmF1bHQ6bnVsbH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2VhcmNoSWQ6XCJcIixyZXN1bHRzOltdLHdpZHRoOjAsZW50ZXJLZXk6ITEsdGltZXI6bnVsbH19LHdhdGNoOntcIl9faW5wdXQudmFsXCI6ZnVuY3Rpb24oKXt0aGlzLmVudGVyS2V5P3RoaXMuZW50ZXJLZXk9ITE6dGhpcy5fX2RlbGF5VHJpZ2dlcigpfX0sY29tcHV0ZWQ6e2NvbXB1dGVkUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heFJlc3VsdHMmJnRoaXMucmVzdWx0cy5sZW5ndGg+MD90aGlzLnJlc3VsdHMuc2xpY2UoMCx0aGlzLm1heFJlc3VsdHMpOltdfSxjb21wdXRlZFZhbHVlRmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZUZpZWxkfHx0aGlzLnN0YXRpY0RhdGEmJnRoaXMuc3RhdGljRGF0YS5maWVsZHx8XCJ2YWx1ZVwifSxrZXlib2FyZE1heEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcHV0ZWRSZXN1bHRzLmxlbmd0aC0xfSxjb21wdXRlZFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJue21pbldpZHRoOnRoaXMud2lkdGh9fSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWFyY2hJZC5sZW5ndGg+MH19LG1ldGhvZHM6e2lzV29ya2luZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzJiZ0aGlzLiRyZWZzLnBvcG92ZXJ9LHRyaWdnZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLl9faW5wdXQmJnRoaXMuX19pbnB1dC5pc0VkaXRhYmxlKCkmJnRoaXMuX19pbnB1dC5oYXNGb2N1cygpJiZ0aGlzLmlzV29ya2luZygpKXt2YXIgaT1bbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuX19pbnB1dC52YWwpP1wiXCI6U3RyaW5nKHRoaXMuX19pbnB1dC52YWwpLHM9aS5sZW5ndGgsbj11aWQoKSxvPXRoaXMuJHJlZnMucG9wb3ZlcjtpZih0aGlzLnNlYXJjaElkPW4sczx0aGlzLm1pbkNoYXJhY3RlcnN8fCEwPT09dCYmcz4wKXJldHVybiB0aGlzLnNlYXJjaElkPVwiXCIsdGhpcy5fX2NsZWFyU2VhcmNoKCksdm9pZCB0aGlzLmhpZGUoKTtpZih0aGlzLndpZHRoPXdpZHRoKHRoaXMuaW5wdXRFbCkrXCJweFwiLHRoaXMuc3RhdGljRGF0YSlyZXR1cm4gdGhpcy5zZWFyY2hJZD1cIlwiLHRoaXMucmVzdWx0cz10aGlzLmZpbHRlcihpLHRoaXMuc3RhdGljRGF0YSksdGhpcy5yZXN1bHRzLmxlbmd0aD92b2lkIHRoaXMuX19zaG93UmVzdWx0cygpOnZvaWQgby5oaWRlKCk7dGhpcy5fX2lucHV0LmxvYWRpbmc9ITAsdGhpcy4kZW1pdChcInNlYXJjaFwiLGksZnVuY3Rpb24odCl7aWYoZS5pc1dvcmtpbmcoKSYmZS5zZWFyY2hJZD09PW4pe2lmKGUuX19jbGVhclNlYXJjaCgpLEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjApcmV0dXJuIGUucmVzdWx0cz10LHZvaWQgZS5fX3Nob3dSZXN1bHRzKCk7ZS5oaWRlKCl9fSl9fSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVzdWx0cz1bXSx0aGlzLmlzV29ya2luZygpP3RoaXMuJHJlZnMucG9wb3Zlci5oaWRlKCk6UHJvbWlzZS5yZXNvbHZlKCl9LGJsdXJIaWRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9fY2xlYXJTZWFyY2goKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5oaWRlKCl9LDMwMCl9LF9fY2xlYXJTZWFyY2g6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5fX2lucHV0LmxvYWRpbmc9ITEsdGhpcy5zZWFyY2hJZD1cIlwifSxfX2tleWJvYXJkQ3VzdG9tS2V5SGFuZGxlOmZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDI3OnRoaXMuX19jbGVhclNlYXJjaCgpO2JyZWFrO2Nhc2UgMzg6Y2FzZSA0MDpjYXNlIDk6dGhpcy5fX2tleWJvYXJkU2V0Q3VycmVudFNlbGVjdGlvbighMCl9fSxfX2tleWJvYXJkU2hvd1RyaWdnZXI6ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoKX0sX19mb2N1c1Nob3dUcmlnZ2VyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQudHJpZ2dlcighMCl9LDEwMCl9LF9fa2V5Ym9hcmRJc1NlbGVjdGFibGVJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdD4tMSYmdDx0aGlzLmNvbXB1dGVkUmVzdWx0cy5sZW5ndGgmJiF0aGlzLmNvbXB1dGVkUmVzdWx0c1t0XS5kaXNhYmxlfSxzZXRWYWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMscz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmNvbXB1dGVkVmFsdWVGaWVsZD90aGlzLmNvbXB1dGVkVmFsdWVGaWVsZCh0KTp0W3RoaXMuY29tcHV0ZWRWYWx1ZUZpZWxkXSxuPXRoaXMuX19pbnB1dERlYm91bmNlP1wiRGVib3VuY2VcIjpcIlwiO3RoaXMuaW5wdXRFbCYmdGhpcy5fX2lucHV0JiYhdGhpcy5fX2lucHV0Lmhhc0ZvY3VzKCkmJih0aGlzLiRxLnBsYXRmb3JtLmlzLmllP3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aS5pbnB1dEVsLmZvY3VzKCl9KTp0aGlzLmlucHV0RWwuZm9jdXMoKSksdGhpcy5lbnRlcktleT10aGlzLl9faW5wdXQmJnMhPT10aGlzLl9faW5wdXQudmFsLHRoaXNbXCJfX2lucHV0XCIrbl1bZT9cInNldE5hdlwiOlwic2V0XCJdKHMpLHRoaXMuJGVtaXQoXCJzZWxlY3RlZFwiLHQsISFlKSxlfHwodGhpcy5fX2NsZWFyU2VhcmNoKCksdGhpcy5oaWRlKCkpfSxfX2tleWJvYXJkU2V0U2VsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7dGhpcy5zZXRWYWx1ZSh0aGlzLnJlc3VsdHNbdF0sZSl9LF9fZGVsYXlUcmlnZ2VyOmZ1bmN0aW9uKCl7dGhpcy5fX2NsZWFyU2VhcmNoKCksdGhpcy5fX2lucHV0Lmhhc0ZvY3VzKCkmJih0aGlzLnN0YXRpY0RhdGE/dGhpcy50cmlnZ2VyKCk6dGhpcy50aW1lcj1zZXRUaW1lb3V0KHRoaXMudHJpZ2dlcix0aGlzLmRlYm91bmNlKSl9LF9fc2hvd1Jlc3VsdHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRyZWZzLnBvcG92ZXI7dGhpcy5fX2tleWJvYXJkU2hvdygtMSksdC5zaG93aW5nP3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2hvd2luZyYmdC5yZXBvc2l0aW9uKCl9KTp0LnNob3coKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX19pbnB1dC5yZWdpc3RlcigpLHRoaXMuX19pbnB1dERlYm91bmNlJiZ0aGlzLl9faW5wdXREZWJvdW5jZS5zZXRDaGlsZERlYm91bmNlKCEwKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QuX19pbnB1dCYmKHQuaW5wdXRFbD10Ll9faW5wdXQuZ2V0RWwoKSx0LmlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0Ll9fa2V5Ym9hcmRIYW5kbGVLZXkpLHQuaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHQuYmx1ckhpZGUpLHQuaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0Ll9fZm9jdXNTaG93VHJpZ2dlcikpfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9fY2xlYXJTZWFyY2goKSx0aGlzLl9faW5wdXQudW5yZWdpc3RlcigpLHRoaXMuX19pbnB1dERlYm91bmNlJiZ0aGlzLl9faW5wdXREZWJvdW5jZS5zZXRDaGlsZERlYm91bmNlKCExKSx0aGlzLmlucHV0RWwmJih0aGlzLmlucHV0RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0aGlzLl9fa2V5Ym9hcmRIYW5kbGVLZXkpLHRoaXMuaW5wdXRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLHRoaXMuYmx1ckhpZGUpLHRoaXMuaW5wdXRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0aGlzLl9fZm9jdXNTaG93VHJpZ2dlciksdGhpcy5oaWRlKCkpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMuX19pbnB1dC5pc0RhcmsoKTtyZXR1cm4gdChRUG9wb3Zlcix7cmVmOlwicG9wb3ZlclwiLGNsYXNzOmk/XCJiZy1kYXJrXCI6bnVsbCxwcm9wczp7Zml0OiEwLGtlZXBPblNjcmVlbjohMCxhbmNob3JDbGljazohMSxtYXhIZWlnaHQ6dGhpcy5tYXhIZWlnaHQsbm9Gb2N1czohMCxub1JlZm9jdXM6ITB9LG9uOntzaG93OmZ1bmN0aW9uKCl7ZS5fX2lucHV0LnNlbGVjdGlvbk9wZW49ITAsZS4kZW1pdChcInNob3dcIil9LGhpZGU6ZnVuY3Rpb24oKXtlLl9faW5wdXQuc2VsZWN0aW9uT3Blbj0hMSxlLiRlbWl0KFwiaGlkZVwiKX19fSxbdChRTGlzdCx7cHJvcHM6e2Rhcms6aSxub0JvcmRlcjohMCxzZXBhcmF0b3I6dGhpcy5zZXBhcmF0b3J9LHN0eWxlOnRoaXMuY29tcHV0ZWRXaWR0aH0sdGhpcy5jb21wdXRlZFJlc3VsdHMubWFwKGZ1bmN0aW9uKGkscyl7cmV0dXJuIHQoUUl0ZW1XcmFwcGVyLHtrZXk6aS5pZHx8cyxjbGFzczp7XCJxLXNlbGVjdC1oaWdobGlnaHRcIjplLmtleWJvYXJkSW5kZXg9PT1zLFwiY3Vyc29yLXBvaW50ZXJcIjohaS5kaXNhYmxlLFwidGV4dC1mYWRlZFwiOmkuZGlzYWJsZX0scHJvcHM6e2NmZzppfSxuYXRpdmVPbjp7bW91c2VlbnRlcjpmdW5jdGlvbigpeyFpLmRpc2FibGUmJihlLmtleWJvYXJkSW5kZXg9cyl9LGNsaWNrOmZ1bmN0aW9uKCl7IWkuZGlzYWJsZSYmZS5zZXRWYWx1ZShpKX19fSl9KSldKX19LFFCcmVhZGNydW1icz17bmFtZTpcIlFCcmVhZGNydW1ic1wiLG1peGluczpbQWxpZ25NaXhpbl0scHJvcHM6e2NvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZmFkZWRcIn0sYWN0aXZlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHNlcGFyYXRvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIi9cIn0sYWxpZ246T2JqZWN0LmFzc2lnbih7fSxBbGlnbk1peGluLnByb3BzLmFsaWduLHtkZWZhdWx0OlwibGVmdFwifSl9LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW1widGV4dC1cIit0aGlzLmNvbG9yLHRoaXMuYWxpZ25DbGFzc119fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLiRzbG90cy5kZWZhdWx0KXt2YXIgaT1bXSxzPXRoaXMuJHNsb3RzLmRlZmF1bHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10LnRhZyYmdC50YWcuZW5kc1dpdGgoXCItUUJyZWFkY3J1bWJzRWxcIil9KS5sZW5ndGgsbj10aGlzLiRzY29wZWRTbG90cy5zZXBhcmF0b3J8fGZ1bmN0aW9uKCl7cmV0dXJuIGUuc2VwYXJhdG9yfSxvPVwidGV4dC1cIit0aGlzLmNvbG9yLHI9XCJ0ZXh0LVwiK3RoaXMuYWN0aXZlQ29sb3IsYT0xO2Zvcih2YXIgbCBpbiBlLiRzbG90cy5kZWZhdWx0KXt2YXIgYz1lLiRzbG90cy5kZWZhdWx0W2xdO2lmKHZvaWQgMCE9PWMudGFnJiZjLnRhZy5lbmRzV2l0aChcIi1RQnJlYWRjcnVtYnNFbFwiKSl7dmFyIGg9YTxzO2ErKyxpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcImZsZXggaXRlbXMtY2VudGVyXCIsY2xhc3M6W2g/cjpvLGg/XCJ0ZXh0LXdlaWdodC1ib2xkXCI6XCJxLWJyZWFkY3J1bWJzLWxhc3RcIl19LFtjXSkpLGgmJmkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1icmVhZGNydW1icy1zZXBhcmF0b3JcIixjbGFzczpvfSxbbigpXSkpfWVsc2UgaS5wdXNoKGMpfXJldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1icmVhZGNydW1icyBmbGV4IGd1dHRlci14cyBpdGVtcy1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxpKX19fSxRQnJlYWRjcnVtYnNFbD17bmFtZTpcIlFCcmVhZGNydW1ic0VsXCIsbWl4aW5zOlt7cHJvcHM6cm91dGVyTGlua1Byb3BzfV0scHJvcHM6e2xhYmVsOlN0cmluZyxpY29uOlN0cmluZyxjb2xvcjpTdHJpbmd9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCh2b2lkIDAhPT10aGlzLnRvP1wicm91dGVyLWxpbmtcIjpcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWxpbmsgcS1icmVhZGNydW1icy1lbCBmbGV4IGlubGluZSBpdGVtcy1jZW50ZXIgcmVsYXRpdmUtcG9zaXRpb25cIixwcm9wczp2b2lkIDAhPT10aGlzLnRvP3RoaXMuJHByb3BzOm51bGx9LFt0aGlzLmljb24/dChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLWJyZWFjcnVtYnMtZWwtaWNvbiBxLW1yLXNtXCIscHJvcHM6e25hbWU6dGhpcy5pY29ufX0pOm51bGwsdGhpcy5sYWJlbF0uY29uY2F0KHRoaXMuJHNsb3RzLmRlZmF1bHQpKX19LFFCdG5Hcm91cD17bmFtZTpcIlFCdG5Hcm91cFwiLHByb3BzOntvdXRsaW5lOkJvb2xlYW4sZmxhdDpCb29sZWFuLHJvdW5kZWQ6Qm9vbGVhbixwdXNoOkJvb2xlYW59LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm5bXCJvdXRsaW5lXCIsXCJmbGF0XCIsXCJyb3VuZGVkXCIsXCJwdXNoXCJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cInEtYnRuLWdyb3VwLVwiK3R9KS5qb2luKFwiIFwiKX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYnRuLWdyb3VwIHJvdyBuby13cmFwIGlubGluZVwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRQnRuRHJvcGRvd249e25hbWU6XCJRQnRuRHJvcGRvd25cIixtaXhpbnM6W0J0bk1peGluXSxwcm9wczp7dmFsdWU6Qm9vbGVhbixzcGxpdDpCb29sZWFuLGNvbnRlbnRDbGFzczpbQXJyYXksU3RyaW5nLE9iamVjdF0sY29udGVudFN0eWxlOltBcnJheSxTdHJpbmcsT2JqZWN0XSxwb3BvdmVyQW5jaG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYm90dG9tIHJpZ2h0XCJ9LHBvcG92ZXJTZWxmOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwidG9wIHJpZ2h0XCJ9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Nob3dpbmc6dGhpcy52YWx1ZX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLiRyZWZzLnBvcG92ZXImJnRoaXMuJHJlZnMucG9wb3Zlclt0P1wic2hvd1wiOlwiaGlkZVwiXSgpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10KFFQb3BvdmVyLHtyZWY6XCJwb3BvdmVyXCIscHJvcHM6e2Rpc2FibGU6dGhpcy5kaXNhYmxlLGZpdDohMCxhbmNob3JDbGljazohdGhpcy5zcGxpdCxhbmNob3I6dGhpcy5wb3BvdmVyQW5jaG9yLHNlbGY6dGhpcy5wb3BvdmVyU2VsZn0sY2xhc3M6dGhpcy5jb250ZW50Q2xhc3Msc3R5bGU6dGhpcy5jb250ZW50U3R5bGUsb246e3Nob3c6ZnVuY3Rpb24odCl7ZS5zaG93aW5nPSEwLGUuJGVtaXQoXCJzaG93XCIsdCksZS4kZW1pdChcImlucHV0XCIsITApfSxoaWRlOmZ1bmN0aW9uKHQpe2Uuc2hvd2luZz0hMSxlLiRlbWl0KFwiaGlkZVwiLHQpLGUuJGVtaXQoXCJpbnB1dFwiLCExKX19fSx0aGlzLiRzbG90cy5kZWZhdWx0KSxzPXQoUUljb24se3Byb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dC5kcm9wZG93bn0sc3RhdGljQ2xhc3M6XCJ0cmFuc2l0aW9uLWdlbmVyaWNcIixjbGFzczp7XCJyb3RhdGUtMTgwXCI6dGhpcy5zaG93aW5nLFwib24tcmlnaHRcIjohdGhpcy5zcGxpdCxcInEtYnRuLWRyb3Bkb3duLWFycm93XCI6IXRoaXMuc3BsaXR9fSksbj10KFFCdG4se3Byb3BzOk9iamVjdC5hc3NpZ24oe30sdGhpcy4kcHJvcHMse2ljb25SaWdodDp0aGlzLnNwbGl0P3RoaXMuaWNvblJpZ2h0Om51bGx9KSxjbGFzczp0aGlzLnNwbGl0P1wicS1idG4tZHJvcGRvd24tY3VycmVudFwiOlwicS1idG4tZHJvcGRvd24gcS1idG4tZHJvcGRvd24tc2ltcGxlXCIsb246e2NsaWNrOmZ1bmN0aW9uKHQpe2Uuc3BsaXQmJmUuaGlkZSgpLGUuZGlzYWJsZXx8ZS4kZW1pdChcImNsaWNrXCIsdCl9fX0sdGhpcy5zcGxpdD9udWxsOltzLGldKTtyZXR1cm4gdGhpcy5zcGxpdD90KFFCdG5Hcm91cCx7cHJvcHM6e291dGxpbmU6dGhpcy5vdXRsaW5lLGZsYXQ6dGhpcy5mbGF0LHJvdW5kZWQ6dGhpcy5yb3VuZGVkLHB1c2g6dGhpcy5wdXNofSxzdGF0aWNDbGFzczpcInEtYnRuLWRyb3Bkb3duIHEtYnRuLWRyb3Bkb3duLXNwbGl0IG5vLXdyYXAgcS1idG4taXRlbVwifSxbbix0KFFCdG4se3Byb3BzOntkaXNhYmxlOnRoaXMuZGlzYWJsZSxvdXRsaW5lOnRoaXMub3V0bGluZSxmbGF0OnRoaXMuZmxhdCxyb3VuZGVkOnRoaXMucm91bmRlZCxwdXNoOnRoaXMucHVzaCxzaXplOnRoaXMuc2l6ZSxjb2xvcjp0aGlzLmNvbG9yLHRleHRDb2xvcjp0aGlzLnRleHRDb2xvcixkZW5zZTp0aGlzLmRlbnNlLGdsb3NzeTp0aGlzLmdsb3NzeSxub1JpcHBsZTp0aGlzLm5vUmlwcGxlLHdhaXRGb3JSaXBwbGU6dGhpcy53YWl0Rm9yUmlwcGxlfSxzdGF0aWNDbGFzczpcInEtYnRuLWRyb3Bkb3duLWFycm93XCIsb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS50b2dnbGUoKX19fSxbc10pLFtpXV0pOm59LG1ldGhvZHM6e3RvZ2dsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLnBvcG92ZXI/dGhpcy4kcmVmcy5wb3BvdmVyLnRvZ2dsZSgpOlByb21pc2UucmVzb2x2ZSgpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wb3Zlcj90aGlzLiRyZWZzLnBvcG92ZXIuc2hvdygpOlByb21pc2UucmVzb2x2ZSgpfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wb3Zlcj90aGlzLiRyZWZzLnBvcG92ZXIuaGlkZSgpOlByb21pc2UucmVzb2x2ZSgpfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LnZhbHVlJiZ0LiRyZWZzLnBvcG92ZXImJnQuJHJlZnMucG9wb3Zlci5zaG93KCl9KX19LFFCdG5Ub2dnbGU9e25hbWU6XCJRQnRuVG9nZ2xlXCIscHJvcHM6e3ZhbHVlOntyZXF1aXJlZDohMH0sY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsdG9nZ2xlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHRvZ2dsZVRleHRDb2xvcjpTdHJpbmcsb3B0aW9uczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMCx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuKFwibGFiZWxcImluIHR8fFwiaWNvblwiaW4gdCkmJlwidmFsdWVcImluIHR9KX19LHJlYWRvbmx5OkJvb2xlYW4sZGlzYWJsZTpCb29sZWFuLG5vQ2FwczpCb29sZWFuLG5vV3JhcDpCb29sZWFuLG91dGxpbmU6Qm9vbGVhbixmbGF0OkJvb2xlYW4sZGVuc2U6Qm9vbGVhbixyb3VuZGVkOkJvb2xlYW4scHVzaDpCb29sZWFuLHNpemU6U3RyaW5nLGdsb3NzeTpCb29sZWFuLG5vUmlwcGxlOkJvb2xlYW4sd2FpdEZvclJpcHBsZTpCb29sZWFufSxjb21wdXRlZDp7dmFsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5vcHRpb25zLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT09PXQudmFsdWV9KX19LG1ldGhvZHM6e3NldDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7dGhpcy5yZWFkb25seXx8KHRoaXMuJGVtaXQoXCJpbnB1dFwiLHQsZSksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGkudmFsdWUpJiZpLiRlbWl0KFwiY2hhbmdlXCIsdCxlKX0pKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFFCdG5Hcm91cCx7c3RhdGljQ2xhc3M6XCJxLWJ0bi10b2dnbGVcIixwcm9wczp7b3V0bGluZTp0aGlzLm91dGxpbmUsZmxhdDp0aGlzLmZsYXQscm91bmRlZDp0aGlzLnJvdW5kZWQscHVzaDp0aGlzLnB1c2h9fSx0aGlzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKGkscyl7cmV0dXJuIHQoUUJ0bix7a2V5OlwiXCIraS5sYWJlbCtpLmljb24raS5pY29uUmlnaHQsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KGkudmFsdWUsaSl9fSxwcm9wczp7ZGlzYWJsZTplLmRpc2FibGV8fGkuZGlzYWJsZSxsYWJlbDppLmxhYmVsLGNvbG9yOmUudmFsW3NdP2kudG9nZ2xlQ29sb3J8fGUudG9nZ2xlQ29sb3I6aS5jb2xvcnx8ZS5jb2xvcix0ZXh0Q29sb3I6ZS52YWxbc10/aS50b2dnbGVUZXh0Q29sb3J8fGUudG9nZ2xlVGV4dENvbG9yOmkudGV4dENvbG9yfHxlLnRleHRDb2xvcixpY29uOmkuaWNvbixpY29uUmlnaHQ6aS5pY29uUmlnaHQsbm9DYXBzOmUubm9DYXBzfHxpLm5vQ2Fwcyxub1dyYXA6ZS5ub1dyYXB8fGkubm9XcmFwLG91dGxpbmU6ZS5vdXRsaW5lLGZsYXQ6ZS5mbGF0LHJvdW5kZWQ6ZS5yb3VuZGVkLHB1c2g6ZS5wdXNoLGdsb3NzeTplLmdsb3NzeSxzaXplOmUuc2l6ZSxkZW5zZTplLmRlbnNlLG5vUmlwcGxlOmUubm9SaXBwbGV8fGkubm9SaXBwbGUsd2FpdEZvclJpcHBsZTplLndhaXRGb3JSaXBwbGV8fGkud2FpdEZvclJpcHBsZSx0YWJpbmRleDppLnRhYmluZGV4fX0pfSkpfX0sUUNhcmQ9e25hbWU6XCJRQ2FyZFwiLHByb3BzOntkYXJrOkJvb2xlYW4sc3F1YXJlOkJvb2xlYW4sZmxhdDpCb29sZWFuLGlubGluZTpCb29sZWFuLGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nfSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVt7XCJuby1ib3JkZXItcmFkaXVzXCI6dGhpcy5zcXVhcmUsXCJuby1zaGFkb3dcIjp0aGlzLmZsYXQsXCJpbmxpbmUtYmxvY2tcIjp0aGlzLmlubGluZSxcInEtY2FyZC1kYXJrXCI6dGhpcy5kYXJrfV07cmV0dXJuIHRoaXMuY29sb3I/KHQucHVzaChcImJnLVwiK3RoaXMuY29sb3IpLHQucHVzaChcInRleHQtXCIrKHRoaXMudGV4dENvbG9yfHxcIndoaXRlXCIpKSk6dGhpcy50ZXh0Q29sb3ImJnQucHVzaChcInRleHQtXCIrdGhpcy50ZXh0Q29sb3IpLHR9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmRcIixjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUNhcmRUaXRsZT17bmFtZTpcIlFDYXJkVGl0bGVcIixyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtcHJpbWFyeSBxLWNhcmQtY29udGFpbmVyIHJvdyBuby13cmFwXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIGNvbHVtblwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2FyZC10aXRsZVwifSx0aGlzLiRzbG90cy5kZWZhdWx0KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLXN1YnRpdGxlXCJ9LFt0aGlzLiRzbG90cy5zdWJ0aXRsZV0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbC1hdXRvIHNlbGYtY2VudGVyIHEtY2FyZC10aXRsZS1leHRyYVwifSxbdGhpcy4kc2xvdHMucmlnaHRdKV0pfX0sUUNhcmRNYWluPXtuYW1lOlwiUUNhcmRNYWluXCIscmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLW1haW4gcS1jYXJkLWNvbnRhaW5lclwifSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFDYXJkQWN0aW9ucz17bmFtZTpcIlFDYXJkQWN0aW9uc1wiLHByb3BzOnt2ZXJ0aWNhbDpCb29sZWFuLGFsaWduOnt0eXBlOlN0cmluZyxkZWZhdWx0Olwic3RhcnRcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wic3RhcnRcIixcImNlbnRlclwiLFwiZW5kXCIsXCJhcm91bmRcIixcImJldHdlZW5cIl0uaW5jbHVkZXModCl9fX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5cInEtY2FyZC1hY3Rpb25zLVwiKyh0aGlzLnZlcnRpY2FsP1widmVydCBjb2x1bW4ganVzdGlmeS1zdGFydFwiOlwiaG9yaXogcm93XCIpK1wiIFwiKyh0aGlzLnZlcnRpY2FsP1wiaXRlbXNcIjpcImp1c3RpZnlcIikrXCItXCIrdGhpcy5hbGlnbn19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2FyZC1hY3Rpb25zXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFDYXJkTWVkaWE9e25hbWU6XCJRQ2FyZE1lZGlhXCIscHJvcHM6e292ZXJsYXlQb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImJvdHRvbVwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ0b3BcIixcImJvdHRvbVwiLFwiZnVsbFwiXS5pbmNsdWRlcyh0KX19fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtbWVkaWEgcmVsYXRpdmUtcG9zaXRpb25cIn0sW3RoaXMuJHNsb3RzLmRlZmF1bHQsdGhpcy4kc2xvdHMub3ZlcmxheT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLW1lZGlhLW92ZXJsYXlcIixjbGFzczpcImFic29sdXRlLVwiK3RoaXMub3ZlcmxheVBvc2l0aW9ufSxbdGhpcy4kc2xvdHMub3ZlcmxheV0pOm51bGxdKX19LFFDYXJkU2VwYXJhdG9yPXtuYW1lOlwiUUNhcmRTZXBhcmF0b3JcIixwcm9wczp7aW5zZXQ6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLXNlcGFyYXRvclwiLGNsYXNzOntpbnNldDp0aGlzLmluc2V0fX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fTtmdW5jdGlvbiBnZXREaXJlY3Rpb24odCl7dmFyIGU9ITAhPT10Lmhvcml6b250YWwmJiEwIT09dC52ZXJ0aWNhbCxpPXt9O3JldHVybiEwIT09dC5ob3Jpem9udGFsJiYhMCE9PWV8fChpLmhvcml6b250YWw9ITApLCEwIT09dC52ZXJ0aWNhbCYmITAhPT1lfHwoaS52ZXJ0aWNhbD0hMCksaX1mdW5jdGlvbiBwcm9jZXNzQ2hhbmdlcyh0LGUsaSl7dmFyIHM9cG9zaXRpb24odCksbj1zLmxlZnQtZS5ldmVudC54LG89cy50b3AtZS5ldmVudC55LHI9TWF0aC5hYnMobiksYT1NYXRoLmFicyhvKTtyZXR1cm57ZXZ0OnQscG9zaXRpb246cyxkaXJlY3Rpb246ZS5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmIWUuZGlyZWN0aW9uLnZlcnRpY2FsP248MD9cImxlZnRcIjpcInJpZ2h0XCI6IWUuZGlyZWN0aW9uLmhvcml6b250YWwmJmUuZGlyZWN0aW9uLnZlcnRpY2FsP288MD9cInVwXCI6XCJkb3duXCI6cj49YT9uPDA/XCJsZWZ0XCI6XCJyaWdodFwiOm88MD9cInVwXCI6XCJkb3duXCIsaXNGaXJzdDplLmV2ZW50LmlzRmlyc3QsaXNGaW5hbDppLGR1cmF0aW9uOihuZXcgRGF0ZSkuZ2V0VGltZSgpLWUuZXZlbnQudGltZSxkaXN0YW5jZTp7eDpyLHk6YX0sb2Zmc2V0Ont4Om4seTpvfSxkZWx0YTp7eDpzLmxlZnQtZS5ldmVudC5sYXN0WCx5OnMudG9wLWUuZXZlbnQubGFzdFl9fX1mdW5jdGlvbiBzaG91bGRUcmlnZ2VyKHQsZSl7cmV0dXJuISghdC5kaXJlY3Rpb24uaG9yaXpvbnRhbHx8IXQuZGlyZWN0aW9uLnZlcnRpY2FsKXx8KHQuZGlyZWN0aW9uLmhvcml6b250YWwmJiF0LmRpcmVjdGlvbi52ZXJ0aWNhbD9NYXRoLmFicyhlLmRlbHRhLngpPjA6IXQuZGlyZWN0aW9uLmhvcml6b250YWwmJnQuZGlyZWN0aW9uLnZlcnRpY2FsP01hdGguYWJzKGUuZGVsdGEueSk+MDp2b2lkIDApfXZhciBUb3VjaFBhbj17bmFtZTpcInRvdWNoLXBhblwiLGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT0hMCE9PWUubW9kaWZpZXJzLm5vTW91c2Uscz1lLm1vZGlmaWVycy5zdG9wLG49ZS5tb2RpZmllcnMucHJldmVudCxvPW58fGUubW9kaWZpZXJzLm1pZ2h0UHJldmVudD9udWxsOmxpc3Rlbk9wdHMucGFzc2l2ZSxyPXtoYW5kbGVyOmUudmFsdWUsZGlyZWN0aW9uOmdldERpcmVjdGlvbihlLm1vZGlmaWVycyksbW91c2VTdGFydDpmdW5jdGlvbih0KXtsZWZ0Q2xpY2sodCkmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsci5tb3ZlLG8pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsci5tb3VzZUVuZCxvKSxyLnN0YXJ0KHQsITApKX0sbW91c2VFbmQ6ZnVuY3Rpb24odCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHIubW92ZSxvKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHIubW91c2VFbmQsbyksci5lbmQodCl9LHN0YXJ0OmZ1bmN0aW9uKGUsaSl7dmFyIG89cG9zaXRpb24oZSk7ci5ldmVudD17eDpvLmxlZnQseTpvLnRvcCx0aW1lOihuZXcgRGF0ZSkuZ2V0VGltZSgpLGRldGVjdGVkOiEwPT09aXx8ci5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmci5kaXJlY3Rpb24udmVydGljYWwsYWJvcnQ6ITEsaXNGaXJzdDohMCxsYXN0WDpvLmxlZnQsbGFzdFk6by50b3B9LHIuZXZlbnQuZGV0ZWN0ZWQmJih0LmNsYXNzTGlzdC5hZGQoXCJxLXRvdWNoXCIpLCEwIT09aSYmKHMmJmUuc3RvcFByb3BhZ2F0aW9uKCksbiYmZS5wcmV2ZW50RGVmYXVsdCgpLHIubW92ZShlKSkpfSxtb3ZlOmZ1bmN0aW9uKHQpe2lmKCEwIT09ci5ldmVudC5hYm9ydClpZighMCE9PXIuZXZlbnQuZGV0ZWN0ZWQpe3ZhciBlPXBvc2l0aW9uKHQpLGk9TWF0aC5hYnMoZS5sZWZ0LXIuZXZlbnQueCksbz1NYXRoLmFicyhlLnRvcC1yLmV2ZW50LnkpO2khPT1vJiYoci5ldmVudC5kZXRlY3RlZD0hMCxyLmV2ZW50LmFib3J0PXIuZGlyZWN0aW9uLnZlcnRpY2FsP2k+bzppPG8sci5tb3ZlKHQpKX1lbHNle3MmJnQuc3RvcFByb3BhZ2F0aW9uKCksbiYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBhPXByb2Nlc3NDaGFuZ2VzKHQsciwhMSk7c2hvdWxkVHJpZ2dlcihyLGEpJiYoci5oYW5kbGVyKGEpLHIuZXZlbnQubGFzdFg9YS5wb3NpdGlvbi5sZWZ0LHIuZXZlbnQubGFzdFk9YS5wb3NpdGlvbi50b3Asci5ldmVudC5pc0ZpcnN0PSExKX19LGVuZDpmdW5jdGlvbihlKXt0LmNsYXNzTGlzdC5yZW1vdmUoXCJxLXRvdWNoXCIpLHIuZXZlbnQuYWJvcnR8fCFyLmV2ZW50LmRldGVjdGVkfHxyLmV2ZW50LmlzRmlyc3R8fChzJiZlLnN0b3BQcm9wYWdhdGlvbigpLG4mJmUucHJldmVudERlZmF1bHQoKSxyLmhhbmRsZXIocHJvY2Vzc0NoYW5nZXMoZSxyLCEwKSkpfX07dC5fX3F0b3VjaHBhbiYmKHQuX19xdG91Y2hwYW5fb2xkPXQuX19xdG91Y2hwYW4pLHQuX19xdG91Y2hwYW49cixpJiZ0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixyLm1vdXNlU3RhcnQsbyksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHIuc3RhcnQsbyksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsci5tb3ZlLG8pLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsci5lbmQsbyl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe3ZhciBpPWUub2xkVmFsdWUscz1lLnZhbHVlLG49ZS5tb2RpZmllcnMsbz10Ll9fcXRvdWNocGFuO2khPT1zJiYoby5oYW5kbGVyPXMpLG4uaG9yaXpvbnRhbD09PW8uZGlyZWN0aW9uLmhvcml6b250YWwmJm4udmVydGljYWw9PT1vLmRpcmVjdGlvbi52ZXJ0aWNhbHx8KG8uZGlyZWN0aW9uPWdldERpcmVjdGlvbihuKSl9LHVuYmluZDpmdW5jdGlvbih0LGUpe3ZhciBpPXQuX19xdG91Y2hwYW5fb2xkfHx0Ll9fcXRvdWNocGFuO2lmKHZvaWQgMCE9PWkpe3ZhciBzPWUubW9kaWZpZXJzLnByZXZlbnQ/bnVsbDpsaXN0ZW5PcHRzLnBhc3NpdmU7dC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsaS5tb3VzZVN0YXJ0LHMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixpLnN0YXJ0LHMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGkubW92ZSxzKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLGkuZW5kLHMpLGRlbGV0ZSB0W3QuX19xdG91Y2hwYW5fb2xkP1wiX19xdG91Y2hwYW5fb2xkXCI6XCJfX3F0b3VjaHBhblwiXX19fTtmdW5jdGlvbiBpc0RhdGUodCl7cmV0dXJuXCJbb2JqZWN0IERhdGVdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gaXNOdW1iZXIodCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQmJmlzRmluaXRlKHQpfWZ1bmN0aW9uIGlzU3RyaW5nKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0fXZhciBsaW5lYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGVhc2VJblF1YWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQqdH0sZWFzZU91dFF1YWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQqKDItdCl9LGVhc2VJbk91dFF1YWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/Mip0KnQ6KDQtMip0KSp0LTF9LGVhc2VJbkN1YmljPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LDMpfSxlYXNlT3V0Q3ViaWM9ZnVuY3Rpb24odCl7cmV0dXJuIDErTWF0aC5wb3codC0xLDMpfSxlYXNlSW5PdXRDdWJpYz1mdW5jdGlvbih0KXtyZXR1cm4gdDwuNT80Kk1hdGgucG93KHQsMyk6MSsodC0xKSpNYXRoLnBvdygyKnQtMiwyKX0sZWFzZUluUXVhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KHQsNCl9LGVhc2VPdXRRdWFydD1mdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdyh0LTEsNCl9LGVhc2VJbk91dFF1YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0PC41PzgqTWF0aC5wb3codCw0KToxLTgqTWF0aC5wb3codC0xLDQpfSxlYXNlSW5RdWludD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCw1KX0sZWFzZU91dFF1aW50PWZ1bmN0aW9uKHQpe3JldHVybiAxK01hdGgucG93KHQtMSw1KX0sZWFzZUluT3V0UXVpbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/MTYqTWF0aC5wb3codCw1KToxKzE2Kk1hdGgucG93KHQtMSw1KX0sZWFzZUluQ2lyYz1mdW5jdGlvbih0KXtyZXR1cm4tMSpNYXRoLnNxcnQoMS1NYXRoLnBvdyh0LDIpKSsxfSxlYXNlT3V0Q2lyYz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KC0xKih0LTIpKnQpfSxlYXNlSW5PdXRDaXJjPWZ1bmN0aW9uKHQpe3JldHVybiB0PC41Py41KigxLU1hdGguc3FydCgxLTQqdCp0KSk6LjUqKDErTWF0aC5zcXJ0KDgqdC0zLTQqdCp0KSl9LG92ZXJzaG9vdD1mdW5jdGlvbih0KXtyZXR1cm4tMSpNYXRoLnBvdyhNYXRoLkUsLTYuMyp0KSpNYXRoLmNvcyg1KnQpKzF9LHN0YW5kYXJkPWZ1bmN0aW9uKHQpe3JldHVybiB0PC40MDMxPzEyKk1hdGgucG93KHQsNCk6MS8xMjkwKigxMSpNYXRoLnNxcnQoLTRlNCp0KnQrOGU0KnQtMjMzNTkpLTEyOSl9LGRlY2VsZXJhdGU9ZWFzZU91dEN1YmljLGFjY2VsZXJhdGU9ZWFzZUluQ3ViaWMsc2hhcnA9ZWFzZUluT3V0UXVhZCxlYXNpbmc9e2xpbmVhcjpsaW5lYXIsZWFzZUluUXVhZDplYXNlSW5RdWFkLGVhc2VPdXRRdWFkOmVhc2VPdXRRdWFkLGVhc2VJbk91dFF1YWQ6ZWFzZUluT3V0UXVhZCxlYXNlSW5DdWJpYzplYXNlSW5DdWJpYyxlYXNlT3V0Q3ViaWM6ZWFzZU91dEN1YmljLGVhc2VJbk91dEN1YmljOmVhc2VJbk91dEN1YmljLGVhc2VJblF1YXJ0OmVhc2VJblF1YXJ0LGVhc2VPdXRRdWFydDplYXNlT3V0UXVhcnQsZWFzZUluT3V0UXVhcnQ6ZWFzZUluT3V0UXVhcnQsZWFzZUluUXVpbnQ6ZWFzZUluUXVpbnQsZWFzZU91dFF1aW50OmVhc2VPdXRRdWludCxlYXNlSW5PdXRRdWludDplYXNlSW5PdXRRdWludCxlYXNlSW5DaXJjOmVhc2VJbkNpcmMsZWFzZU91dENpcmM6ZWFzZU91dENpcmMsZWFzZUluT3V0Q2lyYzplYXNlSW5PdXRDaXJjLG92ZXJzaG9vdDpvdmVyc2hvb3Qsc3RhbmRhcmQ6c3RhbmRhcmQsZGVjZWxlcmF0ZTpkZWNlbGVyYXRlLGFjY2VsZXJhdGU6YWNjZWxlcmF0ZSxzaGFycDpzaGFycH0saWRzPXt9O2Z1bmN0aW9uIHN0YXJ0KHQpe3ZhciBlPXQubmFtZSxpPXQuZHVyYXRpb247dm9pZCAwPT09aSYmKGk9MzAwKTt2YXIgcz10LnRvLG49dC5mcm9tLG89dC5hcHBseSxyPXQuZG9uZSxhPXQuY2FuY2VsLGw9dC5lYXNpbmcsYz1lLGg9bmV3IERhdGU7Yz9zdG9wKGMpOmM9dWlkKCk7dmFyIHU9bHx8bGluZWFyLGQ9ZnVuY3Rpb24oKXt2YXIgdD0obmV3IERhdGUtaCkvaTt0PjEmJih0PTEpO3ZhciBlPW4rKHMtbikqdSh0KTtpZihvKGUsdCksMT09PXQpcmV0dXJuIGRlbGV0ZSBpZHNbY10sdm9pZChyJiZyKGUpKTtwLmxhc3Q9e3BvczplLHByb2dyZXNzOnR9LHAudGltZXI9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpfSxwPWlkc1tjXT17Y2FuY2VsOmEsdGltZXI6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpfTtyZXR1cm4gY31mdW5jdGlvbiBzdG9wKHQpe2lmKHQpe3ZhciBlPWlkc1t0XTtlJiZlLnRpbWVyJiYoY2FuY2VsQW5pbWF0aW9uRnJhbWUoZS50aW1lciksZS5jYW5jZWwmJmUuY2FuY2VsKGUubGFzdCksZGVsZXRlIGlkc1t0XSl9fXZhciBhbmltYXRlPXtzdGFydDpzdGFydCxzdG9wOnN0b3B9LEZ1bGxzY3JlZW5NaXhpbj17ZGF0YTpmdW5jdGlvbigpe3JldHVybntpbkZ1bGxzY3JlZW46ITF9fSx3YXRjaDp7JHJvdXRlOmZ1bmN0aW9uKCl7dGhpcy5leGl0RnVsbHNjcmVlbigpfSxpbkZ1bGxzY3JlZW46ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcImZ1bGxzY3JlZW5cIix0KX19LG1ldGhvZHM6e3RvZ2dsZUZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmluRnVsbHNjcmVlbj90aGlzLmV4aXRGdWxsc2NyZWVuKCk6dGhpcy5zZXRGdWxsc2NyZWVuKCl9LHNldEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmluRnVsbHNjcmVlbnx8KHRoaXMuaW5GdWxsc2NyZWVuPSEwLHRoaXMuY29udGFpbmVyPXRoaXMuJGVsLnBhcmVudE5vZGUsdGhpcy5jb250YWluZXIucmVwbGFjZUNoaWxkKHRoaXMuZnVsbHNjcmVlbkZpbGxlck5vZGUsdGhpcy4kZWwpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy4kZWwpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcInEtYm9keS1mdWxsc2NyZWVuLW1peGluXCIpLHRoaXMuX19oaXN0b3J5RnVsbHNjcmVlbj17aGFuZGxlcjp0aGlzLmV4aXRGdWxsc2NyZWVufSxIaXN0b3J5LmFkZCh0aGlzLl9faGlzdG9yeUZ1bGxzY3JlZW4pKX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmluRnVsbHNjcmVlbiYmKHRoaXMuX19oaXN0b3J5RnVsbHNjcmVlbiYmKEhpc3RvcnkucmVtb3ZlKHRoaXMuX19oaXN0b3J5RnVsbHNjcmVlbiksdGhpcy5fX2hpc3RvcnlGdWxsc2NyZWVuPW51bGwpLHRoaXMuY29udGFpbmVyLnJlcGxhY2VDaGlsZCh0aGlzLiRlbCx0aGlzLmZ1bGxzY3JlZW5GaWxsZXJOb2RlKSxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJxLWJvZHktZnVsbHNjcmVlbi1taXhpblwiKSx0aGlzLmluRnVsbHNjcmVlbj0hMSl9fSxiZWZvcmVNb3VudDpmdW5jdGlvbigpe3RoaXMuZnVsbHNjcmVlbkZpbGxlck5vZGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIil9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmV4aXRGdWxsc2NyZWVuKCl9fSxRQ2Fyb3VzZWw9e25hbWU6XCJRQ2Fyb3VzZWxcIixtaXhpbnM6W0Z1bGxzY3JlZW5NaXhpbl0sZGlyZWN0aXZlczp7VG91Y2hQYW46VG91Y2hQYW59LHByb3BzOnt2YWx1ZTpOdW1iZXIsY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LGhlaWdodDpTdHJpbmcsYXJyb3dzOkJvb2xlYW4saW5maW5pdGU6Qm9vbGVhbixhbmltYXRpb246e3R5cGU6W051bWJlcixCb29sZWFuXSxkZWZhdWx0OiEwfSxlYXNpbmc6RnVuY3Rpb24sc3dpcGVFYXNpbmc6RnVuY3Rpb24sbm9Td2lwZTpCb29sZWFuLGF1dG9wbGF5OltOdW1iZXIsQm9vbGVhbl0saGFuZGxlQXJyb3dLZXlzOkJvb2xlYW4scXVpY2tOYXY6Qm9vbGVhbixxdWlja05hdlBvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYm90dG9tXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInRvcFwiLFwiYm90dG9tXCJdLmluY2x1ZGVzKHQpfX0scXVpY2tOYXZJY29uOlN0cmluZyx0aHVtYm5haWxzOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LHRodW1ibmFpbHNJY29uOlN0cmluZyx0aHVtYm5haWxzSG9yaXpvbnRhbDpCb29sZWFufSxwcm92aWRlOmZ1bmN0aW9uKCl7cmV0dXJue2Nhcm91c2VsOnRoaXN9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Bvc2l0aW9uOjAsc2xpZGU6MCxwb3NpdGlvblNsaWRlOjAsc2xpZGVzTnVtYmVyOjAsYW5pbVVpZDohMSx2aWV3VGh1bWJuYWlsczohMX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0IT09dGhpcy5zbGlkZSYmdGhpcy5nb1RvU2xpZGUodCl9LGF1dG9wbGF5OmZ1bmN0aW9uKCl7dGhpcy5fX3BsYW5BdXRvUGxheSgpfSxpbmZpbml0ZTpmdW5jdGlvbigpe3RoaXMuX19wbGFuQXV0b1BsYXkoKX0saGFuZGxlQXJyb3dLZXlzOmZ1bmN0aW9uKHQpe3RoaXMuX19zZXRBcnJvd0tleXModCl9fSxjb21wdXRlZDp7cnRsRGlyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHEuaTE4bi5ydGw/LTE6MX0sYXJyb3dJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMuJHEuaWNvbi5jYXJvdXNlbC5sZWZ0LHRoaXMuJHEuaWNvbi5jYXJvdXNlbC5yaWdodF07cmV0dXJuIHRoaXMuJHEuaTE4bi5ydGw/dC5yZXZlcnNlKCk6dH0sdHJhY2tQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGVYKFwiK3RoaXMucnRsRGlyKnRoaXMucG9zaXRpb24rXCIlKVwifX0saW5maW5pdGVMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5maW5pdGUmJnRoaXMuc2xpZGVzTnVtYmVyPjEmJnRoaXMucG9zaXRpb25TbGlkZTwwfSxpbmZpbml0ZVJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5maW5pdGUmJnRoaXMuc2xpZGVzTnVtYmVyPjEmJnRoaXMucG9zaXRpb25TbGlkZT49dGhpcy5zbGlkZXNOdW1iZXJ9LGNhbkdvVG9QcmV2aW91czpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZmluaXRlP3RoaXMuc2xpZGVzTnVtYmVyPjE6dGhpcy5zbGlkZT4wfSxjYW5Hb1RvTmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZmluaXRlP3RoaXMuc2xpZGVzTnVtYmVyPjE6dGhpcy5zbGlkZTx0aGlzLnNsaWRlc051bWJlci0xfSxjb21wdXRlZFF1aWNrTmF2SWNvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1aWNrTmF2SWNvbnx8dGhpcy4kcS5pY29uLmNhcm91c2VsLnF1aWNrTmF2fSxjb21wdXRlZFN0eWxlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5GdWxsc2NyZWVuJiZ0aGlzLmhlaWdodClyZXR1cm5cImhlaWdodDogXCIrdGhpcy5oZWlnaHR9LHNsb3RTY29wZTpmdW5jdGlvbigpe3JldHVybntzbGlkZTp0aGlzLnNsaWRlLHNsaWRlc051bWJlcjp0aGlzLnNsaWRlc051bWJlcixwZXJjZW50YWdlOnRoaXMuc2xpZGVzTnVtYmVyPDI/MTAwOjEwMCp0aGlzLnNsaWRlLyh0aGlzLnNsaWRlc051bWJlci0xKSxnb1RvU2xpZGU6dGhpcy5nb1RvU2xpZGUscHJldmlvdXM6dGhpcy5wcmV2aW91cyxuZXh0OnRoaXMubmV4dCxjb2xvcjp0aGlzLmNvbG9yLGluRnVsbHNjcmVlbjp0aGlzLmluRnVsbHNjcmVlbix0b2dnbGVGdWxsc2NyZWVuOnRoaXMudG9nZ2xlRnVsbHNjcmVlbixjYW5Hb1RvTmV4dDp0aGlzLmNhbkdvVG9OZXh0LGNhbkdvVG9QcmV2aW91czp0aGlzLmNhbkdvVG9QcmV2aW91c319LGNvbXB1dGVkVGh1bWJuYWlsSWNvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRodW1ibmFpbHNJY29ufHx0aGlzLiRxLmljb24uY2Fyb3VzZWwudGh1bWJuYWlsc319LG1ldGhvZHM6e3ByZXZpb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuR29Ub1ByZXZpb3VzP3RoaXMuZ29Ub1NsaWRlKHRoaXMuc2xpZGUtMSk6UHJvbWlzZS5yZXNvbHZlKCl9LG5leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5Hb1RvTmV4dD90aGlzLmdvVG9TbGlkZSh0aGlzLnNsaWRlKzEpOlByb21pc2UucmVzb2x2ZSgpfSxnb1RvU2xpZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksbmV3IFByb21pc2UoZnVuY3Rpb24ocyl7dmFyIG4sbz1cIlwiLHI9aS5zbGlkZTtpLl9fY2xlYW51cCgpO3ZhciBhPWZ1bmN0aW9uKCl7aS4kZW1pdChcImlucHV0XCIsaS5zbGlkZSksaS4kZW1pdChcInNsaWRlXCIsaS5zbGlkZSxvKSxpLiRlbWl0KFwic2xpZGUtZGlyZWN0aW9uXCIsbyksaS5fX3BsYW5BdXRvUGxheSgpLHMoKX07aWYoaS5zbGlkZXNOdW1iZXI8Mj8oaS5zbGlkZT0wLGkucG9zaXRpb25TbGlkZT0wLG49MCk6KGkuaGFzT3duUHJvcGVydHkoXCJpbml0aWFsUG9zaXRpb25cIil8fChpLnBvc2l0aW9uPTEwMCotaS5zbGlkZSksbz10Pmkuc2xpZGU/XCJuZXh0XCI6XCJwcmV2aW91c1wiLGkuaW5maW5pdGU/KGkuc2xpZGU9bm9ybWFsaXplVG9JbnRlcnZhbCh0LDAsaS5zbGlkZXNOdW1iZXItMSksbj1ub3JtYWxpemVUb0ludGVydmFsKHQsLTEsaS5zbGlkZXNOdW1iZXIpLGV8fChpLnBvc2l0aW9uU2xpZGU9bikpOihpLnNsaWRlPWJldHdlZW4odCwwLGkuc2xpZGVzTnVtYmVyLTEpLGkucG9zaXRpb25TbGlkZT1pLnNsaWRlLG49aS5zbGlkZSkpLGkuJGVtaXQoXCJzbGlkZS10cmlnZ2VyXCIscixpLnNsaWRlLG8pLG4qPS0xMDAsIWkuYW5pbWF0aW9uKXJldHVybiBpLnBvc2l0aW9uPW4sdm9pZCBhKCk7aS5hbmltYXRpb25JblByb2dyZXNzPSEwLGkuYW5pbVVpZD1zdGFydCh7ZnJvbTppLnBvc2l0aW9uLHRvOm4sZHVyYXRpb246aXNOdW1iZXIoaS5hbmltYXRpb24pP2kuYW5pbWF0aW9uOjMwMCxlYXNpbmc6ZT9pLnN3aXBlRWFzaW5nfHxkZWNlbGVyYXRlOmkuZWFzaW5nfHxzdGFuZGFyZCxhcHBseTpmdW5jdGlvbih0KXtpLnBvc2l0aW9uPXR9LGRvbmU6ZnVuY3Rpb24oKXtpLmluZmluaXRlJiYoaS5wb3NpdGlvbj0xMDAqLWkuc2xpZGUsaS5wb3NpdGlvblNsaWRlPWkuc2xpZGUpLGkuYW5pbWF0aW9uSW5Qcm9ncmVzcz0hMSxhKCl9fSl9KX0sc3RvcEFuaW1hdGlvbjpmdW5jdGlvbigpe3N0b3AodGhpcy5hbmltVWlkKSx0aGlzLmFuaW1hdGlvbkluUHJvZ3Jlc3M9ITF9LF9fcGFuOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMuaW5maW5pdGV8fCF0aGlzLmFuaW1hdGlvbkluUHJvZ3Jlc3Mpe3QuaXNGaXJzdCYmKHRoaXMuaW5pdGlhbFBvc2l0aW9uPXRoaXMucG9zaXRpb24sdGhpcy5fX2NsZWFudXAoKSk7dmFyIGk9dGhpcy5ydGxEaXIqKFwibGVmdFwiPT09dC5kaXJlY3Rpb24/LTE6MSkqdC5kaXN0YW5jZS54Oyh0aGlzLmluZmluaXRlJiZ0aGlzLnNsaWRlc051bWJlcjwyfHwhdGhpcy5pbmZpbml0ZSYmKDA9PT10aGlzLnNsaWRlJiZpPjB8fHRoaXMuc2xpZGU9PT10aGlzLnNsaWRlc051bWJlci0xJiZpPDApKSYmKGk9MCk7dmFyIHM9dGhpcy5pbml0aWFsUG9zaXRpb24raS90aGlzLiRyZWZzLnRyYWNrLm9mZnNldFdpZHRoKjEwMCxuPXRoaXMuc2xpZGUrdGhpcy5ydGxEaXIqKFwibGVmdFwiPT09dC5kaXJlY3Rpb24/MTotMSk7dGhpcy5wb3NpdGlvbiE9PXMmJih0aGlzLnBvc2l0aW9uPXMpLHRoaXMucG9zaXRpb25TbGlkZSE9PW4mJih0aGlzLnBvc2l0aW9uU2xpZGU9biksdC5pc0ZpbmFsJiZ0aGlzLmdvVG9TbGlkZSh0LmRpc3RhbmNlLng8NDA/dGhpcy5zbGlkZTp0aGlzLnBvc2l0aW9uU2xpZGUsITApLnRoZW4oZnVuY3Rpb24oKXtkZWxldGUgZS5pbml0aWFsUG9zaXRpb259KX19LF9fcGxhbkF1dG9QbGF5OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QuYXV0b3BsYXkmJihjbGVhclRpbWVvdXQodC50aW1lciksdC50aW1lcj1zZXRUaW1lb3V0KHQubmV4dCxpc051bWJlcih0LmF1dG9wbGF5KT90LmF1dG9wbGF5OjVlMykpfSl9LF9fY2xlYW51cDpmdW5jdGlvbigpe3RoaXMuc3RvcEFuaW1hdGlvbigpLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKX0sX19oYW5kbGVBcnJvd0tleTpmdW5jdGlvbih0KXt2YXIgZT1nZXRFdmVudEtleSh0KTszNz09PWU/dGhpcy5wcmV2aW91cygpOjM5PT09ZSYmdGhpcy5uZXh0KCl9LF9fc2V0QXJyb3dLZXlzOmZ1bmN0aW9uKHQpe2RvY3VtZW50WyghMD09PXQ/XCJhZGRcIjpcInJlbW92ZVwiKStcIkV2ZW50TGlzdGVuZXJcIl0oXCJrZXlkb3duXCIsdGhpcy5fX2hhbmRsZUFycm93S2V5KX0sX19yZWdpc3RlclNsaWRlOmZ1bmN0aW9uKCl7dGhpcy5zbGlkZXNOdW1iZXIrK30sX191bnJlZ2lzdGVyU2xpZGU6ZnVuY3Rpb24oKXt0aGlzLnNsaWRlc051bWJlci0tfSxfX2dldFNjb3BlZFNsb3RzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoMCE9PXRoaXMuc2xpZGVzTnVtYmVyKXt2YXIgaT10aGlzLiRzY29wZWRTbG90cztyZXR1cm4gaT9PYmplY3Qua2V5cyhpKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RhcnRzV2l0aChcImNvbnRyb2wtXCIpfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpW3RdKGUuc2xvdFNjb3BlKX0pOnZvaWQgMH19LF9fZ2V0UXVpY2tOYXY6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigwIT09dGhpcy5zbGlkZXNOdW1iZXImJnRoaXMucXVpY2tOYXYpe3ZhciBpPXRoaXMuJHNjb3BlZFNsb3RzW1wicXVpY2stbmF2XCJdLHM9W107aWYoaSlmb3IodmFyIG49ZnVuY3Rpb24odCl7cy5wdXNoKGkoe3NsaWRlOnQsYmVmb3JlOnQ8ZS5zbGlkZSxjdXJyZW50OnQ9PT1lLnNsaWRlLGFmdGVyOnQ+ZS5zbGlkZSxjb2xvcjplLmNvbG9yLGdvVG9TbGlkZTpmdW5jdGlvbihpKXtlLmdvVG9TbGlkZShpfHx0KX19KSl9LG89MDtvPHRoaXMuc2xpZGVzTnVtYmVyO28rKyluKG8pO2Vsc2UgZm9yKHZhciByPWZ1bmN0aW9uKGkpe3MucHVzaCh0KFFCdG4se2tleTppLGNsYXNzOntpbmFjdGl2ZTppIT09ZS5zbGlkZX0scHJvcHM6e2ljb246ZS5jb21wdXRlZFF1aWNrTmF2SWNvbixyb3VuZDohMCxmbGF0OiEwLGRlbnNlOiEwLGNvbG9yOmUuY29sb3J9LG9uOntjbGljazpmdW5jdGlvbigpe2UuZ29Ub1NsaWRlKGkpfX19KSl9LGE9MDthPHRoaXMuc2xpZGVzTnVtYmVyO2ErKylyKGEpO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1xdWljay1uYXYgc2Nyb2xsIHRleHQtY2VudGVyXCIsY2xhc3M6W1widGV4dC1cIit0aGlzLmNvbG9yLFwiYWJzb2x1dGUtXCIrdGhpcy5xdWlja05hdlBvc2l0aW9uXX0scyl9fSxfX2dldFRodW1ibmFpbHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMudGh1bWJuYWlscy5tYXAoZnVuY3Rpb24oaSxzKXtpZihpKXJldHVybiB0KFwiZGl2XCIse29uOntjbGljazpmdW5jdGlvbigpe2UuZ29Ub1NsaWRlKHMpfX19LFt0KFwiaW1nXCIse2F0dHJzOntzcmM6aX0sY2xhc3M6e2FjdGl2ZTplLnNsaWRlPT09c319KV0pfSkscz1bdChRQnRuLHtzdGF0aWNDbGFzczpcInEtY2Fyb3VzZWwtdGh1bWJuYWlsLWJ0biBhYnNvbHV0ZVwiLHByb3BzOntpY29uOnRoaXMuY29tcHV0ZWRUaHVtYm5haWxJY29uLGZhYk1pbmk6ITAsZmxhdDohMCxjb2xvcjp0aGlzLmNvbG9yfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnZpZXdUaHVtYm5haWxzPSFlLnZpZXdUaHVtYm5haWxzfX19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC10aHVtYm5haWxzIHNjcm9sbCBhYnNvbHV0ZS1ib3R0b21cIixjbGFzczp7YWN0aXZlOnRoaXMudmlld1RodW1ibmFpbHN9fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBndXR0ZXIteHNcIixjbGFzczp0aGlzLnRodW1ibmFpbHNIb3Jpem9udGFsP1wibm8td3JhcFwiOlwianVzdGlmeS1jZW50ZXJcIn0saSldKV07cmV0dXJuIHRoaXMudmlld1RodW1ibmFpbHMmJnMudW5zaGlmdCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiYWJzb2x1dGUtZnVsbFwiLG9uOntjbGljazpmdW5jdGlvbigpe2Uudmlld1RodW1ibmFpbHM9ITF9fX0pKSxzfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbFwiLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZSxjbGFzczp7ZnVsbHNjcmVlbjp0aGlzLmluRnVsbHNjcmVlbn19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1pbm5lclwiLGRpcmVjdGl2ZXM6dGhpcy5ub1N3aXBlP251bGw6W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOntob3Jpem9udGFsOiEwLHByZXZlbnQ6ITAsc3RvcDohMH0sdmFsdWU6dGhpcy5fX3Bhbn1dfSxbdChcImRpdlwiLHtyZWY6XCJ0cmFja1wiLHN0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC10cmFja1wiLHN0eWxlOnRoaXMudHJhY2tQb3NpdGlvbixjbGFzczp7XCJpbmZpbml0ZS1sZWZ0XCI6dGhpcy5pbmZpbml0ZUxlZnQsXCJpbmZpbml0ZS1yaWdodFwiOnRoaXMuaW5maW5pdGVSaWdodH19LFt0aGlzLmluZmluaXRlUmlnaHQ/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2Fyb3VzZWwtc2xpZGVcIixzdHlsZTpcImZsZXg6IDAgMCAxMDAlXCJ9KTpudWxsLHRoaXMuJHNsb3RzLmRlZmF1bHQsdGhpcy5pbmZpbml0ZUxlZnQ/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2Fyb3VzZWwtc2xpZGVcIixzdHlsZTpcImZsZXg6IDAgMCAxMDAlXCJ9KTpudWxsXSldKSx0aGlzLmFycm93cz90KFFCdG4se3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1sZWZ0LWFycm93IGFic29sdXRlXCIscHJvcHM6e2NvbG9yOnRoaXMuY29sb3IsaWNvbjp0aGlzLmFycm93SWNvblswXSxmYWJNaW5pOiEwLGZsYXQ6ITB9LGRpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHZhbHVlOnRoaXMuY2FuR29Ub1ByZXZpb3VzfV0sb246e2NsaWNrOnRoaXMucHJldmlvdXN9fSk6bnVsbCx0aGlzLmFycm93cz90KFFCdG4se3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1yaWdodC1hcnJvdyBhYnNvbHV0ZVwiLHByb3BzOntjb2xvcjp0aGlzLmNvbG9yLGljb246dGhpcy5hcnJvd0ljb25bMV0sZmFiTWluaTohMCxmbGF0OiEwfSxkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTp0aGlzLmNhbkdvVG9OZXh0fV0sb246e2NsaWNrOnRoaXMubmV4dH19KTpudWxsLHRoaXMuX19nZXRRdWlja05hdih0KSx0aGlzLl9fZ2V0U2NvcGVkU2xvdHModCksdGhpcy50aHVtYm5haWxzLmxlbmd0aD90aGlzLl9fZ2V0VGh1bWJuYWlscyh0KTpudWxsLHRoaXMuJHNsb3RzLmNvbnRyb2xdKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fX3BsYW5BdXRvUGxheSgpLHRoaXMuaGFuZGxlQXJyb3dLZXlzJiZ0aGlzLl9fc2V0QXJyb3dLZXlzKCEwKSx0aGlzLl9fc3RvcFNsaWRlTnVtYmVyTm90aWZpZXI9dGhpcy4kd2F0Y2goXCJzbGlkZXNOdW1iZXJcIixmdW5jdGlvbihlKXt0LnZhbHVlPj1lJiZ0LiRlbWl0KFwiaW5wdXRcIixlLTEpfSx7aW1tZWRpYXRlOiEwfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9fY2xlYW51cCgpLHRoaXMuX19zdG9wU2xpZGVOdW1iZXJOb3RpZmllcigpLHRoaXMuaGFuZGxlQXJyb3dLZXlzJiZ0aGlzLl9fc2V0QXJyb3dLZXlzKCExKX19LFFDYXJvdXNlbFNsaWRlPXtuYW1lOlwiUUNhcm91c2VsU2xpZGVcIixpbmplY3Q6e2Nhcm91c2VsOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFDYXJvdXNlbFNsaWRlIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFDYXJvdXNlbFwiKX19fSxwcm9wczp7aW1nU3JjOlN0cmluZ30sY29tcHV0ZWQ6e2NvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5pbWdTcmMmJih0LmJhY2tncm91bmRJbWFnZT1cInVybChcIit0aGlzLmltZ1NyYytcIilcIix0LmJhY2tncm91bmRTaXplPVwiY292ZXJcIix0LmJhY2tncm91bmRQb3NpdGlvbj1cIjUwJVwiKSwhdGhpcy5jYXJvdXNlbC5pbkZ1bGxzY3JlZW4mJnRoaXMuY2Fyb3VzZWwuaGVpZ2h0JiYodC5tYXhIZWlnaHQ9dGhpcy5jYXJvdXNlbC5oZWlnaHQpLHR9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLXNsaWRlIHJlbGF0aXZlLXBvc2l0aW9uIHNjcm9sbFwiLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhcm91c2VsLl9fcmVnaXN0ZXJTbGlkZSgpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5jYXJvdXNlbC5fX3VucmVnaXN0ZXJTbGlkZSgpfX0sUUNhcm91c2VsQ29udHJvbD17bmFtZTpcIlFDYXJvdXNlbENvbnRyb2xcIixwcm9wczp7cG9zaXRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJib3R0b20tcmlnaHRcIn0sb2Zmc2V0Ont0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bMTgsMThdfX19LGNvbXB1dGVkOntjb21wdXRlZENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuXCJhYnNvbHV0ZS1cIit0aGlzLnBvc2l0aW9ufSxjb21wdXRlZFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue21hcmdpbjp0aGlzLm9mZnNldFsxXStcInB4IFwiK3RoaXMub2Zmc2V0WzBdK1wicHhcIn19fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLWNvbnRyb2wgYWJzb2x1dGVcIixzdHlsZTp0aGlzLmNvbXB1dGVkU3R5bGUsY2xhc3M6dGhpcy5jb21wdXRlZENsYXNzfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFDaGF0TWVzc2FnZT17bmFtZTpcIlFDaGF0TWVzc2FnZVwiLHByb3BzOntzZW50OkJvb2xlYW4sbGFiZWw6U3RyaW5nLGJnQ29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsbmFtZTpTdHJpbmcsYXZhdGFyOlN0cmluZyx0ZXh0OkFycmF5LHN0YW1wOlN0cmluZyxzaXplOlN0cmluZ30sY29tcHV0ZWQ6e3RleHRDbGFzczpmdW5jdGlvbigpe2lmKHRoaXMudGV4dENvbG9yKXJldHVyblwidGV4dC1cIit0aGlzLnRleHRDb2xvcn0sbWVzc2FnZUNsYXNzOmZ1bmN0aW9uKCl7aWYodGhpcy5iZ0NvbG9yKXJldHVyblwidGV4dC1cIit0aGlzLmJnQ29sb3J9LHNpemVDbGFzczpmdW5jdGlvbigpe2lmKHRoaXMuc2l6ZSlyZXR1cm5cImNvbC1cIit0aGlzLnNpemV9LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJxLW1lc3NhZ2Utc2VudFwiOnRoaXMuc2VudCxcInEtbWVzc2FnZS1yZWNlaXZlZFwiOiF0aGlzLnNlbnR9fX0sbWV0aG9kczp7X19nZXRUZXh0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMudGV4dC5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS10ZXh0XCIsY2xhc3M6ZS5tZXNzYWdlQ2xhc3N9LFt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS10ZXh0LWNvbnRlbnRcIixjbGFzczplLnRleHRDbGFzc30sW3QoXCJkaXZcIix7ZG9tUHJvcHM6e2lubmVySFRNTDppfX0pLGUuc3RhbXA/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1zdGFtcFwiLGRvbVByb3BzOntpbm5lckhUTUw6ZS5zdGFtcH19KTpudWxsXSldKX0pfSxfX2dldE1lc3NhZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW1lc3NhZ2UtdGV4dFwiLGNsYXNzOnRoaXMubWVzc2FnZUNsYXNzfSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLW1lc3NhZ2UtdGV4dC1jb250ZW50XCIsY2xhc3M6dGhpcy50ZXh0Q2xhc3N9LFt0aGlzLiRzbG90cy5kZWZhdWx0LHRoaXMuc3RhbXA/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1zdGFtcFwiLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5zdGFtcH19KTpudWxsXSldKX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZVwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sW3RoaXMubGFiZWw/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1sYWJlbCB0ZXh0LWNlbnRlclwiLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5sYWJlbH19KTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW1lc3NhZ2UtY29udGFpbmVyIHJvdyBpdGVtcy1lbmQgbm8td3JhcFwifSxbdGhpcy4kc2xvdHMuYXZhdGFyfHwodGhpcy5hdmF0YXI/dChcImltZ1wiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1hdmF0YXIgY29sLWF1dG9cIixhdHRyczp7c3JjOnRoaXMuYXZhdGFyfX0pOm51bGwpLHQoXCJkaXZcIix7Y2xhc3M6dGhpcy5zaXplQ2xhc3N9LFt0aGlzLm5hbWU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1uYW1lXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLm5hbWV9fSk6bnVsbCx0aGlzLnRleHQ/dGhpcy5fX2dldFRleHQodCk6bnVsbCx0aGlzLiRzbG90cy5kZWZhdWx0P3RoaXMuX19nZXRNZXNzYWdlKHQpOm51bGxdKV0pXSl9fTtmdW5jdGlvbiBnZXREaXJlY3Rpb24kMSh0KXt2YXIgZT17fTtyZXR1cm5bXCJsZWZ0XCIsXCJyaWdodFwiLFwidXBcIixcImRvd25cIixcImhvcml6b250YWxcIixcInZlcnRpY2FsXCJdLmZvckVhY2goZnVuY3Rpb24oaSl7dFtpXSYmKGVbaV09ITApfSksMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aD97bGVmdDohMCxyaWdodDohMCx1cDohMCxkb3duOiEwLGhvcml6b250YWw6ITAsdmVydGljYWw6ITB9OihlLmhvcml6b250YWwmJihlLmxlZnQ9ZS5yaWdodD0hMCksZS52ZXJ0aWNhbCYmKGUudXA9ZS5kb3duPSEwKSxlLmxlZnQmJmUucmlnaHQmJihlLmhvcml6b250YWw9ITApLGUudXAmJmUuZG93biYmKGUudmVydGljYWw9ITApLGUpfXZhciBUb3VjaFN3aXBlPXtuYW1lOlwidG91Y2gtc3dpcGVcIixiaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9IWUubW9kaWZpZXJzLm5vTW91c2Uscz17aGFuZGxlcjplLnZhbHVlLHRocmVzaG9sZDpwYXJzZUludChlLmFyZywxMCl8fDMwMCxkaXJlY3Rpb246Z2V0RGlyZWN0aW9uJDEoZS5tb2RpZmllcnMpLG1vdXNlU3RhcnQ6ZnVuY3Rpb24odCl7bGVmdENsaWNrKHQpJiYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHMubW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixzLm1vdXNlRW5kKSxzLnN0YXJ0KHQpKX0sbW91c2VFbmQ6ZnVuY3Rpb24odCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHMubW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixzLm1vdXNlRW5kKSxzLmVuZCh0KX0sc3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIGk9cG9zaXRpb24oZSk7cy5ldmVudD17eDppLmxlZnQseTppLnRvcCx0aW1lOihuZXcgRGF0ZSkuZ2V0VGltZSgpLGRldGVjdGVkOiExLGFib3J0OiExfSx0LmNsYXNzTGlzdC5hZGQoXCJxLXRvdWNoXCIpfSxtb3ZlOmZ1bmN0aW9uKHQpe2lmKCFzLmV2ZW50LmFib3J0KWlmKChuZXcgRGF0ZSkuZ2V0VGltZSgpLXMuZXZlbnQudGltZT5zLnRocmVzaG9sZClzLmV2ZW50LmFib3J0PSEwO2Vsc2V7aWYocy5ldmVudC5kZXRlY3RlZClyZXR1cm4gdC5zdG9wUHJvcGFnYXRpb24oKSx2b2lkIHQucHJldmVudERlZmF1bHQoKTt2YXIgZT1wb3NpdGlvbih0KSxpPWUubGVmdC1zLmV2ZW50Lngsbj1NYXRoLmFicyhpKSxvPWUudG9wLXMuZXZlbnQueSxyPU1hdGguYWJzKG8pO24hPT1yJiYocy5ldmVudC5kZXRlY3RlZD0hMCxzLmV2ZW50LmFib3J0PSEocy5kaXJlY3Rpb24udmVydGljYWwmJm48cnx8cy5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmbj5yfHxzLmRpcmVjdGlvbi51cCYmbjxyJiZvPDB8fHMuZGlyZWN0aW9uLmRvd24mJm48ciYmbz4wfHxzLmRpcmVjdGlvbi5sZWZ0JiZuPnImJmk8MHx8cy5kaXJlY3Rpb24ucmlnaHQmJm4+ciYmaT4wKSxzLm1vdmUodCkpfX0sZW5kOmZ1bmN0aW9uKGUpe2lmKHQuY2xhc3NMaXN0LnJlbW92ZShcInEtdG91Y2hcIiksIXMuZXZlbnQuYWJvcnQmJnMuZXZlbnQuZGV0ZWN0ZWQpe3ZhciBpPShuZXcgRGF0ZSkuZ2V0VGltZSgpLXMuZXZlbnQudGltZTtpZighKGk+cy50aHJlc2hvbGQpKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKTt2YXIgbixvPXBvc2l0aW9uKGUpLHI9by5sZWZ0LXMuZXZlbnQueCxhPU1hdGguYWJzKHIpLGw9by50b3Atcy5ldmVudC55LGM9TWF0aC5hYnMobCk7aWYoYT49Yyl7aWYoYTw1MClyZXR1cm47bj1yPDA/XCJsZWZ0XCI6XCJyaWdodFwifWVsc2V7aWYoYzw1MClyZXR1cm47bj1sPDA/XCJ1cFwiOlwiZG93blwifXMuZGlyZWN0aW9uW25dJiZzLmhhbmRsZXIoe2V2dDplLGRpcmVjdGlvbjpuLGR1cmF0aW9uOmksZGlzdGFuY2U6e3g6YSx5OmN9fSl9fX19O3QuX19xdG91Y2hzd2lwZT1zLGkmJnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHMubW91c2VTdGFydCksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHMuc3RhcnQpLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHMubW92ZSksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixzLmVuZCl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe2Uub2xkVmFsdWUhPT1lLnZhbHVlJiYodC5fX3F0b3VjaHN3aXBlLmhhbmRsZXI9ZS52YWx1ZSl9LHVuYmluZDpmdW5jdGlvbih0LGUpe3ZhciBpPXQuX19xdG91Y2hzd2lwZTtpJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsaS5tb3VzZVN0YXJ0KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsaS5zdGFydCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsaS5tb3ZlKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLGkuZW5kKSxkZWxldGUgdC5fX3F0b3VjaHN3aXBlKX19LENoZWNrYm94TWl4aW49e2RpcmVjdGl2ZXM6e1RvdWNoU3dpcGU6VG91Y2hTd2lwZX0scHJvcHM6e3ZhbDp7fSx0cnVlVmFsdWU6e2RlZmF1bHQ6ITB9LGZhbHNlVmFsdWU6e2RlZmF1bHQ6ITF9fSxjb21wdXRlZDp7aXNUcnVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWxJc0FycmF5P3RoaXMuaW5kZXg+LTE6dGhpcy52YWx1ZT09PXRoaXMudHJ1ZVZhbHVlfSxpc0ZhbHNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWxJc0FycmF5Py0xPT09dGhpcy5pbmRleDp0aGlzLnZhbHVlPT09dGhpcy5mYWxzZVZhbHVlfSxpbmRleDpmdW5jdGlvbigpe2lmKHRoaXMubW9kZWxJc0FycmF5KXJldHVybiB0aGlzLnZhbHVlLmluZGV4T2YodGhpcy52YWwpfSxtb2RlbElzQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKX19LG1ldGhvZHM6e3RvZ2dsZTpmdW5jdGlvbih0LGUpe3ZhciBpOyh2b2lkIDA9PT1lJiYoZT0hMCksdGhpcy5kaXNhYmxlfHx0aGlzLnJlYWRvbmx5KXx8KHQmJnN0b3BBbmRQcmV2ZW50KHQpLGUmJnRoaXMuJGVsLmJsdXIoKSx0aGlzLm1vZGVsSXNBcnJheT90aGlzLmlzVHJ1ZT8oaT10aGlzLnZhbHVlLnNsaWNlKCkpLnNwbGljZSh0aGlzLmluZGV4LDEpOmk9dGhpcy52YWx1ZS5jb25jYXQodGhpcy52YWwpOmk9dGhpcy5pc1RydWU/dGhpcy50b2dnbGVJbmRldGVybWluYXRlP3RoaXMuaW5kZXRlcm1pbmF0ZVZhbHVlOnRoaXMuZmFsc2VWYWx1ZTp0aGlzLmlzRmFsc2U/dGhpcy50cnVlVmFsdWU6dGhpcy5mYWxzZVZhbHVlLHRoaXMuX191cGRhdGUoaSkpfX19LE9wdGlvbk1peGluPXtwcm9wczp7dmFsdWU6e3JlcXVpcmVkOiEwfSxsYWJlbDpTdHJpbmcsbGVmdExhYmVsOkJvb2xlYW4sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LGtlZXBDb2xvcjpCb29sZWFuLGRhcms6Qm9vbGVhbixkaXNhYmxlOkJvb2xlYW4scmVhZG9ubHk6Qm9vbGVhbixub0ZvY3VzOkJvb2xlYW4sY2hlY2tlZEljb246U3RyaW5nLHVuY2hlY2tlZEljb246U3RyaW5nfSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVyblt0aGlzLl9fa2ViYWJUYWcse2Rpc2FibGVkOnRoaXMuZGlzYWJsZSxyZXZlcnNlOnRoaXMubGVmdExhYmVsLFwicS1mb2N1c2FibGVcIjp0aGlzLmZvY3VzYWJsZX1dfSxpbm5lckNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1RydWV8fHRoaXMuaXNJbmRldGVybWluYXRlP1tcImFjdGl2ZVwiLFwidGV4dC1cIit0aGlzLmNvbG9yXTpcInRleHQtXCIrKHRoaXMua2VlcENvbG9yP3RoaXMuY29sb3I6dGhpcy5kYXJrP1wibGlnaHRcIjpcImZhZGVkXCIpfSxmb2N1c2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub0ZvY3VzJiYhdGhpcy5kaXNhYmxlJiYhdGhpcy5yZWFkb25seX0sdGFiaW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb2N1c2FibGU/MDotMX19LG1ldGhvZHM6e19fdXBkYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLiRyZWZzLnJpcHBsZTtpJiYoaS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIil9LDEwKSksdGhpcy4kZW1pdChcImlucHV0XCIsdCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsdCl9KX0sX19oYW5kbGVLZXlEb3duOmZ1bmN0aW9uKHQpe1sxMywzMl0uaW5jbHVkZXMoZ2V0RXZlbnRLZXkodCkpJiZ0aGlzLnRvZ2dsZSh0LCExKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1vcHRpb24gY3Vyc29yLXBvaW50ZXIgbm8tb3V0bGluZSByb3cgaW5saW5lIG5vLXdyYXAgaXRlbXMtY2VudGVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt0YWJpbmRleDp0aGlzLnRhYmluZGV4fSxvbjp7Y2xpY2s6dGhpcy50b2dnbGUsZm9jdXM6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiZm9jdXNcIil9LGJsdXI6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiYmx1clwiKX0sa2V5ZG93bjp0aGlzLl9faGFuZGxlS2V5RG93bn0sZGlyZWN0aXZlczpcInEtdG9nZ2xlXCIhPT10aGlzLl9fa2ViYWJUYWd8fHRoaXMuZGlzYWJsZXx8dGhpcy5yZWFkb25seT9udWxsOlt7bmFtZTpcInRvdWNoLXN3aXBlXCIsbW9kaWZpZXJzOntob3Jpem9udGFsOiEwfSx2YWx1ZTp0aGlzLl9fc3dpcGV9XX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW9wdGlvbi1pbm5lciByZWxhdGl2ZS1wb3NpdGlvblwiLGNsYXNzOnRoaXMuaW5uZXJDbGFzc2VzfSxbdChcImlucHV0XCIse2F0dHJzOnt0eXBlOlwiY2hlY2tib3hcIn0sb246e2NoYW5nZTp0aGlzLnRvZ2dsZX19KSx0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3A/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZm9jdXMtaGVscGVyXCIsY2xhc3M6XCJxLXJhZGlvXCI9PT10aGlzLl9fa2ViYWJUYWc/XCJxLWZvY3VzLWhlbHBlci1yb3VuZFwiOlwicS1mb2N1cy1oZWxwZXItcm91bmRlZFwifSk6bnVsbCx0aGlzLl9fZ2V0Q29udGVudCh0KV0pLHRoaXMubGFiZWw/dChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLW9wdGlvbi1sYWJlbFwiLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5sYWJlbH19KTpudWxsLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX19LFFDaGVja2JveD17bmFtZTpcIlFDaGVja2JveFwiLG1peGluczpbQ2hlY2tib3hNaXhpbixPcHRpb25NaXhpbl0scHJvcHM6e3RvZ2dsZUluZGV0ZXJtaW5hdGU6Qm9vbGVhbixpbmRldGVybWluYXRlVmFsdWU6e2RlZmF1bHQ6bnVsbH0saW5kZXRlcm1pbmF0ZUljb246U3RyaW5nfSxjb21wdXRlZDp7aXNJbmRldGVybWluYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMudmFsdWV8fHRoaXMudmFsdWU9PT10aGlzLmluZGV0ZXJtaW5hdGVWYWx1ZX0sY2hlY2tlZFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNUcnVlP3t0cmFuc2l0aW9uOlwib3BhY2l0eSAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDBtcywgdHJhbnNmb3JtIDgwMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSAwbXNcIixvcGFjaXR5OjEsdHJhbnNmb3JtOlwic2NhbGUoMSlcIn06e3RyYW5zaXRpb246XCJvcGFjaXR5IDQ1MG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSAwbXMsIHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDQ1MG1zXCIsb3BhY2l0eTowLHRyYW5zZm9ybTpcInNjYWxlKDApXCJ9fSxpbmRldGVybWluYXRlU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZGV0ZXJtaW5hdGU/e3RyYW5zaXRpb246XCJvcGFjaXR5IDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgMG1zLCB0cmFuc2Zvcm0gODAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDBtc1wiLG9wYWNpdHk6MSx0cmFuc2Zvcm06XCJzY2FsZSgxKVwifTp7dHJhbnNpdGlvbjpcIm9wYWNpdHkgNDUwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDBtcywgdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgNDUwbXNcIixvcGFjaXR5OjAsdHJhbnNmb3JtOlwic2NhbGUoMClcIn19LHVuY2hlY2tlZFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNGYWxzZT97b3BhY2l0eToxfTp7dHJhbnNpdGlvbjpcIm9wYWNpdHkgNjUwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDE1MG1zXCIsb3BhY2l0eTowfX19LG1ldGhvZHM6e19fZ2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm5bdChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLWNoZWNrYm94LWljb24gY3Vyc29yLXBvaW50ZXJcIixwcm9wczp7bmFtZTp0aGlzLnVuY2hlY2tlZEljb258fHRoaXMuJHEuaWNvbi5jaGVja2JveC51bmNoZWNrZWQubWF0fSxzdHlsZTp0aGlzLnVuY2hlY2tlZFN0eWxlfSksdChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLWNoZWNrYm94LWljb24gY3Vyc29yLXBvaW50ZXIgYWJzb2x1dGUtZnVsbFwiLHByb3BzOntuYW1lOnRoaXMuaW5kZXRlcm1pbmF0ZUljb258fHRoaXMuJHEuaWNvbi5jaGVja2JveC5pbmRldGVybWluYXRlLm1hdH0sc3R5bGU6dGhpcy5pbmRldGVybWluYXRlU3R5bGV9KSx0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtY2hlY2tib3gtaWNvbiBjdXJzb3ItcG9pbnRlciBhYnNvbHV0ZS1mdWxsXCIscHJvcHM6e25hbWU6dGhpcy5jaGVja2VkSWNvbnx8dGhpcy4kcS5pY29uLmNoZWNrYm94LmNoZWNrZWQubWF0fSxzdHlsZTp0aGlzLmNoZWNrZWRTdHlsZX0pLHQoXCJkaXZcIix7cmVmOlwicmlwcGxlXCIsc3RhdGljQ2xhc3M6XCJxLXJhZGlhbC1yaXBwbGVcIn0pXX19LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX19rZWJhYlRhZz1cInEtY2hlY2tib3hcIn19LFFDaGlwPXtuYW1lOlwiUUNoaXBcIixwcm9wczp7c21hbGw6Qm9vbGVhbixkZW5zZTpCb29sZWFuLHRhZzpCb29sZWFuLHNxdWFyZTpCb29sZWFuLGZsb2F0aW5nOkJvb2xlYW4scG9pbnRpbmc6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ1cFwiLFwicmlnaHRcIixcImRvd25cIixcImxlZnRcIl0uaW5jbHVkZXModCl9fSxjb2xvcjpTdHJpbmcsdGV4dENvbG9yOlN0cmluZyxpY29uOlN0cmluZyxpY29uUmlnaHQ6U3RyaW5nLGF2YXRhcjpTdHJpbmcsY2xvc2FibGU6Qm9vbGVhbixkZXRhaWw6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHRoaXMucG9pbnRpbmcmJmUucHVzaChcInEtY2hpcC1wb2ludGluZy1cIit0aGlzLnBvaW50aW5nKSxbXCJ0YWdcIixcInNxdWFyZVwiLFwiZmxvYXRpbmdcIixcInBvaW50aW5nXCIsXCJzbWFsbFwiLFwiZGVuc2VcIl0uZm9yRWFjaChmdW5jdGlvbihpKXt0W2ldJiZlLnB1c2goXCJxLWNoaXAtXCIraSl9KSx0aGlzLmZsb2F0aW5nJiYoIXRoaXMuZGVuc2UmJmUucHVzaChcInEtY2hpcC1kZW5zZVwiKSwhdGhpcy5zcXVhcmUmJmUucHVzaChcInEtY2hpcC1zcXVhcmVcIikpLHRoaXMuY29sb3ImJihlLnB1c2goXCJiZy1cIit0aGlzLmNvbG9yKSwhdGhpcy50ZXh0Q29sb3ImJmUucHVzaChcInRleHQtd2hpdGVcIikpLHRoaXMudGV4dENvbG9yJiZlLnB1c2goXCJ0ZXh0LVwiK3RoaXMudGV4dENvbG9yKSxlfX0sbWV0aG9kczp7X19vbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQoXCJjbGlja1wiLHQpfSxfX29uTW91c2VEb3duOmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQoXCJmb2N1c1wiLHQpfSxfX2hhbmRsZUtleURvd246ZnVuY3Rpb24odCl7dGhpcy5jbG9zYWJsZSYmWzgsMTMsMzJdLmluY2x1ZGVzKGdldEV2ZW50S2V5KHQpKSYmKHN0b3BBbmRQcmV2ZW50KHQpLHRoaXMuJGVtaXQoXCJoaWRlXCIpKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jaGlwIHJvdyBuby13cmFwIGlubGluZSBpdGVtcy1jZW50ZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsb246e21vdXNlZG93bjp0aGlzLl9fb25Nb3VzZURvd24sdG91Y2hzdGFydDp0aGlzLl9fb25Nb3VzZURvd24sY2xpY2s6dGhpcy5fX29uQ2xpY2ssa2V5ZG93bjp0aGlzLl9faGFuZGxlS2V5RG93bn19LFt0aGlzLmljb258fHRoaXMuYXZhdGFyP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNoaXAtc2lkZSBxLWNoaXAtbGVmdCByb3cgZmxleC1jZW50ZXJcIixjbGFzczp7XCJxLWNoaXAtZGV0YWlsXCI6dGhpcy5kZXRhaWx9fSxbdGhpcy5pY29uP3QoUUljb24se3N0YXRpY0NsYXNzOlwicS1jaGlwLWljb25cIixwcm9wczp7bmFtZTp0aGlzLmljb259fSk6dGhpcy5hdmF0YXI/dChcImltZ1wiLHthdHRyczp7c3JjOnRoaXMuYXZhdGFyfX0pOm51bGxdKTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNoaXAtbWFpbiBlbGxpcHNpcyBxLXBvcHVwLS1za2lwXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpLHRoaXMuaWNvblJpZ2h0P3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMuaWNvblJpZ2h0fSxjbGFzczp0aGlzLmNsb3NhYmxlP1wib24tcmlnaHQgcS1jaGlwLWljb25cIjpcInEtY2hpcC1zaWRlIHEtY2hpcC1yaWdodFwifSk6bnVsbCx0aGlzLmNsb3NhYmxlP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNoaXAtc2lkZSBxLWNoaXAtY2xvc2UgcS1jaGlwLXJpZ2h0IHJvdyBmbGV4LWNlbnRlclwifSxbdChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmNoaXAuY2xvc2V9LHN0YXRpY0NsYXNzOlwiY3Vyc29yLXBvaW50ZXJcIixuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24odCl7dCYmdC5zdG9wUHJvcGFnYXRpb24oKSxlLiRlbWl0KFwiaGlkZVwiKX19fSldKTpudWxsXSl9fSxtYXJnaW5hbD17dHlwZTpBcnJheSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuXCJpY29uXCJpbiB0fSl9fSxGcmFtZU1peGluPXttaXhpbnM6W0FsaWduTWl4aW5dLHByb3BzOntwcmVmaXg6U3RyaW5nLHN1ZmZpeDpTdHJpbmcsc3RhY2tMYWJlbDpTdHJpbmcsZmxvYXRMYWJlbDpTdHJpbmcscGxhY2Vob2xkZXI6U3RyaW5nLGVycm9yOkJvb2xlYW4sd2FybmluZzpCb29sZWFuLGRpc2FibGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFuLGNsZWFyYWJsZTpCb29sZWFuLGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSxhbGlnbjp7ZGVmYXVsdDpcImxlZnRcIn0sZGFyazpCb29sZWFuLGJlZm9yZTptYXJnaW5hbCxhZnRlcjptYXJnaW5hbCxpbnZlcnRlZDpCb29sZWFuLGludmVydGVkTGlnaHQ6Qm9vbGVhbixoaWRlVW5kZXJsaW5lOkJvb2xlYW4sY2xlYXJWYWx1ZTp7fSxub1BhcmVudEZpZWxkOkJvb2xlYW59LGNvbXB1dGVkOntpbnB1dFBsYWNlaG9sZGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZmxvYXRMYWJlbCYmIXRoaXMuc3RhY2tMYWJlbHx8dGhpcy5sYWJlbElzQWJvdmUpcmV0dXJuIHRoaXMucGxhY2Vob2xkZXJ9LGlzSW52ZXJ0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZlcnRlZHx8dGhpcy5pbnZlcnRlZExpZ2h0fSxpc0ludmVydGVkTGlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0ludmVydGVkJiYodGhpcy5pbnZlcnRlZExpZ2h0JiYhdGhpcy5oYXNFcnJvcnx8dGhpcy5pbnZlcnRlZCYmdGhpcy5oYXNXYXJuaW5nKX0saXNTdGFuZGFyZDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzSW52ZXJ0ZWR9LGlzSGlkZVVuZGVybGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzU3RhbmRhcmQmJnRoaXMuaGlkZVVuZGVybGluZX0sbGFiZWxJc0Fib3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9jdXNlZHx8dGhpcy5sZW5ndGh8fHRoaXMuYWRkaXRpb25hbExlbmd0aHx8dGhpcy5zdGFja0xhYmVsfSxoYXNDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoPjB8fHRoaXMuYWRkaXRpb25hbExlbmd0aD4wfHx0aGlzLnBsYWNlaG9sZGVyfHwwPT09dGhpcy5wbGFjZWhvbGRlcn0sZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiYhdGhpcy5yZWFkb25seX0sY29tcHV0ZWRDbGVhclZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuY2xlYXJWYWx1ZT9udWxsOnRoaXMuY2xlYXJWYWx1ZX0saXNDbGVhcmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0YWJsZSYmdGhpcy5jbGVhcmFibGUmJnRoaXMuY29tcHV0ZWRDbGVhclZhbHVlIT09dGhpcy5tb2RlbH0saGFzRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4hISghdGhpcy5ub1BhcmVudEZpZWxkJiZ0aGlzLmZpZWxkJiZ0aGlzLmZpZWxkLmVycm9yfHx0aGlzLmVycm9yKX0saGFzV2FybmluZzpmdW5jdGlvbigpe3JldHVybiEodGhpcy5oYXNFcnJvcnx8ISghdGhpcy5ub1BhcmVudEZpZWxkJiZ0aGlzLmZpZWxkJiZ0aGlzLmZpZWxkLndhcm5pbmd8fHRoaXMud2FybmluZykpfSxmYWtlSW5wdXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdHVhbFZhbHVlfHwwPT09dGhpcy5hY3R1YWxWYWx1ZT90aGlzLmFjdHVhbFZhbHVlOnRoaXMucGxhY2Vob2xkZXJ8fDA9PT10aGlzLnBsYWNlaG9sZGVyP3RoaXMucGxhY2Vob2xkZXI6XCJcIn0sZmFrZUlucHV0Q2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYWN0dWFsVmFsdWV8fDA9PT10aGlzLmFjdHVhbFZhbHVlO3JldHVyblt0aGlzLmFsaWduQ2xhc3Mse2ludmlzaWJsZToodGhpcy5zdGFja0xhYmVsfHx0aGlzLmZsb2F0TGFiZWwpJiYhdGhpcy5sYWJlbElzQWJvdmUmJiF0LFwicS1pbnB1dC10YXJnZXQtcGxhY2Vob2xkZXJcIjohdCYmdGhpcy5pbnB1dFBsYWNlaG9sZGVyfV19fSxtZXRob2RzOntjbGVhcjpmdW5jdGlvbih0KXtpZih0aGlzLmVkaXRhYmxlKXt0JiZzdG9wQW5kUHJldmVudCh0KTt2YXIgZT10aGlzLmNvbXB1dGVkQ2xlYXJWYWx1ZTt0aGlzLl9fc2V0TW9kZWwmJnRoaXMuX19zZXRNb2RlbChlLCEwKSx0aGlzLiRlbWl0KFwiY2xlYXJcIixlKX19fX0sSW5wdXRNaXhpbj17cHJvcHM6e2F1dG9mb2N1czpbQm9vbGVhbixTdHJpbmddLG1heEhlaWdodDpOdW1iZXIsbG9hZGluZzpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2ZvY3VzZWQ6ITEsdGltZXI6bnVsbCxpc051bWJlckVycm9yOiExLGlzTmVnWmVybzohMX19LG1ldGhvZHM6e2ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlfHx0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCl9LGJsdXI6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLmlucHV0JiZ0aGlzLiRyZWZzLmlucHV0LmJsdXIoKX0sc2VsZWN0OmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5pbnB1dC5zZWxlY3QoKX0sX19vbkZvY3VzOmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmZvY3VzZWR8fCh0aGlzLmZvY3VzZWQ9ITAsdGhpcy4kcmVmcy5pbnB1dCYmdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpLHRoaXMuJGVtaXQoXCJmb2N1c1wiLHQpKX0sX19vbklucHV0Qmx1cjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9fb25CbHVyKHQpfSwyMDApfSxfX29uQmx1cjpmdW5jdGlvbih0LGUpe3RoaXMuZm9jdXNlZCYmKHRoaXMuZm9jdXNlZD0hMSx0aGlzLiRlbWl0KFwiYmx1clwiLHQpKSx0aGlzLl9fZW1pdChlKX0sX19lbWl0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLmlzTnVtYmVyJiZ0aGlzLmlzTnVtYmVyRXJyb3Iscz1pP3RoaXMuaXNOZWdaZXJvPy0wOm51bGw6dGhpcy5tb2RlbDt0aGlzLmlzTnVtYmVyJiYodGhpcy5tb2RlbD10aGlzLnZhbHVlKSxpJiZ0aGlzLiRlbWl0KFwiaW5wdXRcIixzKTt2YXIgbj1mdW5jdGlvbigpe2UuaXNOdW1iZXI/KHM9cGFyc2VGbG9hdChzKSxOdW1iZXIuaXNJbnRlZ2VyKGUuZGVjaW1hbHMpJiYocz1wYXJzZUZsb2F0KHMudG9GaXhlZChlLmRlY2ltYWxzKSkpLFN0cmluZygxL3MpIT09U3RyaW5nKDEvZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIixzKSk6SlNPTi5zdHJpbmdpZnkocykhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLHMpfTt0P24oKTp0aGlzLiRuZXh0VGljayhuKX0sX19vbktleWRvd246ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJihcInRleHRhcmVhXCI9PT10aGlzLnR5cGU/dC5zdG9wUHJvcGFnYXRpb24oKTp0aGlzLl9fZW1pdCgpKSx0aGlzLiRlbWl0KFwia2V5ZG93blwiLHQpfSxfX29uS2V5dXA6ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcImtleXVwXCIsdCl9LF9fb25DbGljazpmdW5jdGlvbih0KXt0aGlzLmZvY3VzKCksdGhpcy4kZW1pdChcImNsaWNrXCIsdCl9LF9fb25QYXN0ZTpmdW5jdGlvbih0KXt0aGlzLiRlbWl0KFwicGFzdGVcIix0KX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dmFyIGU9dC4kcmVmcy5pbnB1dDt0LmF1dG9mb2N1cyYmZSYmKGUuZm9jdXMoKSxcInNlbGVjdFwiPT09dC5hdXRvZm9jdXMmJmUuc2VsZWN0KCkpfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5mb2N1c2VkJiZ0aGlzLl9fb25CbHVyKHZvaWQgMCwhMCl9fSxQYXJlbnRGaWVsZE1peGluPXtpbmplY3Q6e2ZpZWxkOntmcm9tOlwiX19maWVsZFwiLGRlZmF1bHQ6bnVsbH19LHByb3BzOntub1BhcmVudEZpZWxkOkJvb2xlYW59LHdhdGNoOntub1BhcmVudEZpZWxkOmZ1bmN0aW9uKHQpe3RoaXMuZmllbGQmJnRoaXMuZmllbGRbdD9cIl9fcmVnaXN0ZXJJbnB1dFwiOlwiX191bnJlZ2lzdGVySW5wdXRcIl0odGhpcyl9fSxiZWZvcmVNb3VudDpmdW5jdGlvbigpeyF0aGlzLm5vUGFyZW50RmllbGQmJnRoaXMuZmllbGQmJnRoaXMuZmllbGQuX19yZWdpc3RlcklucHV0KHRoaXMpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7IXRoaXMubm9QYXJlbnRGaWVsZCYmdGhpcy5maWVsZCYmdGhpcy5maWVsZC5fX3VucmVnaXN0ZXJJbnB1dCh0aGlzKX19LFFJbnB1dEZyYW1lPXtuYW1lOlwiUUlucHV0RnJhbWVcIixtaXhpbnM6W0ZyYW1lTWl4aW4sUGFyZW50RmllbGRNaXhpbl0scHJvcHM6e2ZvY3VzZWQ6Qm9vbGVhbixsZW5ndGg6TnVtYmVyLGZvY3VzYWJsZTpCb29sZWFuLGFkZGl0aW9uYWxMZW5ndGg6Qm9vbGVhbn0sY29tcHV0ZWQ6e2hhc1N0YWNrTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdGhpcy5zdGFja0xhYmVsJiZ0aGlzLnN0YWNrTGFiZWwubGVuZ3RoPjB9LGhhc0xhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzU3RhY2tMYWJlbHx8XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuZmxvYXRMYWJlbCYmdGhpcy5mbG9hdExhYmVsLmxlbmd0aD4wfSxsYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc1N0YWNrTGFiZWw/dGhpcy5zdGFja0xhYmVsOnRoaXMuZmxvYXRMYWJlbH0sYWRkb25DbGFzczpmdW5jdGlvbigpe3JldHVybntcInEtaWYtYWRkb24tdmlzaWJsZVwiOiF0aGlzLmhhc0xhYmVsfHx0aGlzLmxhYmVsSXNBYm92ZX19LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1be1wicS1pZi1oYXMtbGFiZWxcIjp0aGlzLmxhYmVsLFwicS1pZi1mb2N1c2VkXCI6dGhpcy5mb2N1c2VkLFwicS1pZi1lcnJvclwiOnRoaXMuaGFzRXJyb3IsXCJxLWlmLXdhcm5pbmdcIjp0aGlzLmhhc1dhcm5pbmcsXCJxLWlmLWRpc2FibGVkXCI6dGhpcy5kaXNhYmxlLFwicS1pZi1yZWFkb25seVwiOnRoaXMucmVhZG9ubHksXCJxLWlmLWZvY3VzYWJsZVwiOnRoaXMuZm9jdXNhYmxlJiYhdGhpcy5kaXNhYmxlLFwicS1pZi1pbnZlcnRlZFwiOnRoaXMuaXNJbnZlcnRlZCxcInEtaWYtaW52ZXJ0ZWQtbGlnaHRcIjp0aGlzLmlzSW52ZXJ0ZWRMaWdodCxcInEtaWYtbGlnaHQtY29sb3JcIjp0aGlzLmxpZ2h0Q29sb3IsXCJxLWlmLWRhcmtcIjp0aGlzLmRhcmssXCJxLWlmLWhpZGUtdW5kZXJsaW5lXCI6dGhpcy5pc0hpZGVVbmRlcmxpbmUsXCJxLWlmLXN0YW5kYXJkXCI6dGhpcy5pc1N0YW5kYXJkLFwicS1pZi1oYXMtY29udGVudFwiOnRoaXMuaGFzQ29udGVudH1dLGU9dGhpcy5oYXNFcnJvcj9cIm5lZ2F0aXZlXCI6dGhpcy5oYXNXYXJuaW5nP1wid2FybmluZ1wiOnRoaXMuY29sb3I7cmV0dXJuIHRoaXMuaXNJbnZlcnRlZD8odC5wdXNoKFwiYmctXCIrZSksdC5wdXNoKFwidGV4dC1cIisodGhpcy5pc0ludmVydGVkTGlnaHQ/XCJibGFja1wiOlwid2hpdGVcIikpKTplJiZ0LnB1c2goXCJ0ZXh0LVwiK2UpLHR9fSxtZXRob2RzOntfX29uQ2xpY2s6ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcImNsaWNrXCIsdCl9LF9fb25Nb3VzZURvd246ZnVuY3Rpb24odCl7dmFyIGU9dGhpczshdGhpcy5kaXNhYmxlJiZ0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBlLiRlbWl0KFwiZm9jdXNcIix0KX0pfSxfX2FkZGl0aW9uYWxIaWRkZW46ZnVuY3Rpb24odCxlLGkscyl7cmV0dXJuIHZvaWQgMCE9PXQuY29uZGl0aW9uPyExPT09dC5jb25kaXRpb246dm9pZCAwIT09dC5jb250ZW50JiYhdC5jb250ZW50PT1zPjB8fHZvaWQgMCE9PXQuZXJyb3ImJiF0LmVycm9yPT09ZXx8dm9pZCAwIT09dC53YXJuaW5nJiYhdC53YXJuaW5nPT09aX0sX19iYUhhbmRsZXI6ZnVuY3Rpb24odCxlKXtlLmFsbG93UHJvcGFnYXRpb258fHQuc3RvcFByb3BhZ2F0aW9uKCksZS5oYW5kbGVyJiZlLmhhbmRsZXIodCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaWYgcm93IG5vLXdyYXAgcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3RhYmluZGV4OnRoaXMuZm9jdXNhYmxlJiYhdGhpcy5kaXNhYmxlPzA6LTF9LG9uOntjbGljazp0aGlzLl9fb25DbGlja319LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1iYXNlbGluZVwifSxcInxcIiksdGhpcy5iZWZvcmUmJnRoaXMuYmVmb3JlLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChRSWNvbix7a2V5OlwiYlwiK2kuaWNvbixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbCBxLWlmLWNvbnRyb2wtYmVmb3JlXCIsY2xhc3M6W2kuY2xhc3Mse2hpZGRlbjplLl9fYWRkaXRpb25hbEhpZGRlbihpLGUuaGFzRXJyb3IsZS5oYXNXYXJuaW5nLGUubGVuZ3RoKX1dLHByb3BzOntuYW1lOmkuaWNvbn0sbmF0aXZlT246e21vdXNlZG93bjplLl9fb25Nb3VzZURvd24sdG91Y2hzdGFydDplLl9fb25Nb3VzZURvd24sY2xpY2s6ZnVuY3Rpb24odCl7ZS5fX2JhSGFuZGxlcih0LGkpfX19KX0pfHx2b2lkIDAsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaWYtaW5uZXIgY29sIGNvbHVtbiBxLXBvcHVwLS1za2lwXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IG5vLXdyYXAgcmVsYXRpdmUtcG9zaXRpb25cIn0sW3RoaXMucHJlZml4JiZ0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtaWYtYWRkb24gcS1pZi1hZGRvbi1sZWZ0XCIsY2xhc3M6dGhpcy5hZGRvbkNsYXNzLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5wcmVmaXh9fSl8fHZvaWQgMCx0aGlzLmhhc0xhYmVsJiZ0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1sYWJlbFwiLGNsYXNzOntcInEtaWYtbGFiZWwtYWJvdmVcIjp0aGlzLmxhYmVsSXNBYm92ZX19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1sYWJlbC1pbm5lciBlbGxpcHNpc1wiLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5sYWJlbH19KV0pfHx2b2lkIDBdLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KS5jb25jYXQoW3RoaXMuc3VmZml4JiZ0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtaWYtYWRkb24gcS1pZi1hZGRvbi1yaWdodFwiLGNsYXNzOnRoaXMuYWRkb25DbGFzcyxkb21Qcm9wczp7aW5uZXJIVE1MOnRoaXMuc3VmZml4fX0pfHx2b2lkIDBdKSksdGhpcy5oYXNMYWJlbCYmdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaWYtbGFiZWwtc3BhY2VyXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLmxhYmVsfX0pfHx2b2lkIDBdKSx0aGlzLmFmdGVyJiZ0aGlzLmFmdGVyLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChRSWNvbix7a2V5OlwiYVwiK2kuaWNvbixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLGNsYXNzOltpLmNsYXNzLHtoaWRkZW46ZS5fX2FkZGl0aW9uYWxIaWRkZW4oaSxlLmhhc0Vycm9yLGUuaGFzV2FybmluZyxlLmxlbmd0aCl9XSxwcm9wczp7bmFtZTppLmljb259LG5hdGl2ZU9uOnttb3VzZWRvd246ZS5fX29uTW91c2VEb3duLHRvdWNoc3RhcnQ6ZS5fX29uTW91c2VEb3duLGNsaWNrOmZ1bmN0aW9uKHQpe2UuX19iYUhhbmRsZXIodCxpKX19fSl9KXx8dm9pZCAwXS5jb25jYXQodGhpcy4kc2xvdHMuYWZ0ZXIpKX19LFFDaGlwc0lucHV0PXtuYW1lOlwiUUNoaXBzSW5wdXRcIixtaXhpbnM6W0ZyYW1lTWl4aW4sSW5wdXRNaXhpbl0scHJvcHM6e3ZhbHVlOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfSxjaGlwc0NvbG9yOlN0cmluZyxjaGlwc0JnQ29sb3I6U3RyaW5nLHJlYWRvbmx5OkJvb2xlYW4sYWRkSWNvbjpTdHJpbmcsdXBwZXJDYXNlOkJvb2xlYW4sbG93ZXJDYXNlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybntpbnB1dDpcIlwiLG1vZGVsOnRoaXMudmFsdWUuc2xpY2UoKSx3YXRjaGVyOm51bGwsc2hhZG93Ont2YWw6dGhpcy5pbnB1dCxzZXQ6dGhpcy5hZGQsc2V0TmF2OmZ1bmN0aW9uKGUpe3QuaW5wdXQ9ZX0sbG9hZGluZzohMSxzZWxlY3Rpb25PcGVuOiExLHdhdGNoZWQ6MCxpc0VkaXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZWRpdGFibGV9LGlzRGFyazpmdW5jdGlvbigpe3JldHVybiB0LmRhcmt9LGhhc0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10LiRyZWZzLmlucHV0fSxyZWdpc3RlcjpmdW5jdGlvbigpe3Quc2hhZG93LndhdGNoZWQrPTEsdC5fX3dhdGNoZXJSZWdpc3RlcigpfSx1bnJlZ2lzdGVyOmZ1bmN0aW9uKCl7dC5zaGFkb3cud2F0Y2hlZD1NYXRoLm1heCgwLHQuc2hhZG93LndhdGNoZWQtMSksdC5fX3dhdGNoZXJVbnJlZ2lzdGVyKCl9LGdldEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHQuJHJlZnMuaW5wdXR9fX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXQuc2xpY2UoKX19LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57X19pbnB1dDp0aGlzLnNoYWRvd319LGNvbXB1dGVkOntsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbD90aGlzLm1vZGVsLmxlbmd0aDowfSxpc0xvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2FkaW5nfHx0aGlzLnNoYWRvdy53YXRjaGVkJiZ0aGlzLnNoYWRvdy5sb2FkaW5nfSxjb21wdXRlZEFkZEljb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZGRJY29ufHx0aGlzLiRxLmljb24uY2hpcHNJbnB1dC5hZGR9LGNvbXB1dGVkQ2hpcFRleHRDb2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaXBzQ29sb3I/dGhpcy5jaGlwc0NvbG9yOnRoaXMuaXNJbnZlcnRlZExpZ2h0P3RoaXMuaW52ZXJ0ZWRMaWdodD90aGlzLmNvbG9yOlwid2hpdGVcIjp0aGlzLmlzSW52ZXJ0ZWQ/dGhpcy5pbnZlcnRlZExpZ2h0P1wiZ3JleS0xMFwiOnRoaXMuY29sb3I6dGhpcy5kYXJrP3RoaXMuY29sb3I6XCJ3aGl0ZVwifSxjb21wdXRlZENoaXBCZ0NvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpcHNCZ0NvbG9yP3RoaXMuY2hpcHNCZ0NvbG9yOnRoaXMuaXNJbnZlcnRlZExpZ2h0P3RoaXMuaW52ZXJ0ZWRMaWdodD9cImdyZXktMTBcIjp0aGlzLmNvbG9yOnRoaXMuaXNJbnZlcnRlZD90aGlzLmludmVydGVkTGlnaHQ/dGhpcy5jb2xvcjpcIndoaXRlXCI6dGhpcy5kYXJrP1wid2hpdGVcIjp0aGlzLmNvbG9yfSxpbnB1dENsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5hbGlnbkNsYXNzXTtyZXR1cm4gdGhpcy51cHBlckNhc2UmJnQucHVzaChcInVwcGVyY2FzZVwiKSx0aGlzLmxvd2VyQ2FzZSYmdC5wdXNoKFwibG93ZXJjYXNlXCIpLHR9LGlzQ2xlYXJhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdGFibGUmJnRoaXMuY2xlYXJhYmxlJiYwIT09dGhpcy5tb2RlbC5sZW5ndGh9fSxtZXRob2RzOnthZGQ6ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCYmKHQ9dGhpcy5pbnB1dCksY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZm9jdXMoKSwhdGhpcy5pc0xvYWRpbmcmJnRoaXMuZWRpdGFibGUmJnQpe3ZhciBlPXRoaXMubG93ZXJDYXNlP3QudG9Mb3dlckNhc2UoKTp0aGlzLnVwcGVyQ2FzZT90LnRvVXBwZXJDYXNlKCk6dDt0aGlzLm1vZGVsLmluY2x1ZGVzKGUpP3RoaXMuJGVtaXQoXCJkdXBsaWNhdGVcIixlKToodGhpcy4kZW1pdChcImFkZFwiLHtpbmRleDp0aGlzLm1vZGVsLmxlbmd0aCx2YWw6ZX0pLHRoaXMubW9kZWwucHVzaChlKSx0aGlzLiRlbWl0KFwiaW5wdXRcIix0aGlzLm1vZGVsKSx0aGlzLmlucHV0PVwiXCIpfX0scmVtb3ZlOmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmZvY3VzKCksdGhpcy5lZGl0YWJsZSYmdD49MCYmdDx0aGlzLmxlbmd0aCYmKHRoaXMuJGVtaXQoXCJyZW1vdmVcIix7aW5kZXg6dCx2YWx1ZTp0aGlzLm1vZGVsLnNwbGljZSh0LDEpfSksdGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5tb2RlbCkpfSxjbGVhcjpmdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdCYmc3RvcEFuZFByZXZlbnQodCksdGhpcy5lZGl0YWJsZSYmKHRoaXMuJGVtaXQoXCJpbnB1dFwiLFtdKSx0aGlzLiRlbWl0KFwiY2xlYXJcIikpfSxfX2NsZWFyVGltZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dCh0LnRpbWVyKX0pfSxfX2hhbmRsZUtleURvd246ZnVuY3Rpb24odCl7c3dpdGNoKGdldEV2ZW50S2V5KHQpKXtjYXNlIDEzOmlmKHRoaXMuc2hhZG93LnNlbGVjdGlvbk9wZW4pcmV0dXJuO3JldHVybiBzdG9wQW5kUHJldmVudCh0KSx0aGlzLmFkZCgpO2Nhc2UgODpyZXR1cm4gdm9pZCghdGhpcy5pbnB1dC5sZW5ndGgmJnRoaXMubGVuZ3RoJiZ0aGlzLnJlbW92ZSh0aGlzLmxlbmd0aC0xKSk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5fX29uS2V5ZG93bih0KX19LF9fb25DbGljazpmdW5jdGlvbigpe3RoaXMuZm9jdXMoKX0sX193YXRjaGVyOmZ1bmN0aW9uKHQpe3RoaXMuc2hhZG93LndhdGNoZWQmJih0aGlzLnNoYWRvdy52YWw9dCl9LF9fd2F0Y2hlclJlZ2lzdGVyOmZ1bmN0aW9uKCl7dGhpcy53YXRjaGVyfHwodGhpcy53YXRjaGVyPXRoaXMuJHdhdGNoKFwiaW5wdXRcIix0aGlzLl9fd2F0Y2hlcikpfSxfX3dhdGNoZXJVbnJlZ2lzdGVyOmZ1bmN0aW9uKHQpeyF0aGlzLndhdGNoZXJ8fCF0JiZ0aGlzLnNoYWRvdy53YXRjaGVkfHwodGhpcy53YXRjaGVyKCksdGhpcy53YXRjaGVyPW51bGwsdGhpcy5zaGFkb3cuc2VsZWN0aW9uT3Blbj0hMSl9fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX3dhdGNoZXJVbnJlZ2lzdGVyKCEwKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoUUlucHV0RnJhbWUse3N0YXRpY0NsYXNzOlwicS1jaGlwcy1pbnB1dFwiLHByb3BzOntwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcsZGlzYWJsZTp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxpbnZlcnRlZDp0aGlzLmludmVydGVkLGludmVydGVkTGlnaHQ6dGhpcy5pbnZlcnRlZExpZ2h0LGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6dGhpcy5oaWRlVW5kZXJsaW5lLGJlZm9yZTp0aGlzLmJlZm9yZSxhZnRlcjp0aGlzLmFmdGVyLGNvbG9yOnRoaXMuY29sb3Isbm9QYXJlbnRGaWVsZDp0aGlzLm5vUGFyZW50RmllbGQsZm9jdXNlZDp0aGlzLmZvY3VzZWQsbGVuZ3RoOnRoaXMubGVuZ3RoLGFkZGl0aW9uYWxMZW5ndGg6dGhpcy5pbnB1dC5sZW5ndGg+MH0sb246e2NsaWNrOnRoaXMuX19vbkNsaWNrfX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcm93IGl0ZW1zLWNlbnRlciBxLWlucHV0LWNoaXBzXCJ9LHRoaXMubW9kZWwubWFwKGZ1bmN0aW9uKGkscyl7cmV0dXJuIHQoUUNoaXAse2tleTppK1wiI1wiK3MscHJvcHM6e3NtYWxsOiEwLGNsb3NhYmxlOmUuZWRpdGFibGUsY29sb3I6ZS5jb21wdXRlZENoaXBCZ0NvbG9yLHRleHRDb2xvcjplLmNvbXB1dGVkQ2hpcFRleHRDb2xvcn0sYXR0cnM6e3RhYmluZGV4OmUuZWRpdGFibGUmJmUuZm9jdXNlZD8wOi0xfSxvbjp7Ymx1cjplLl9fb25JbnB1dEJsdXIsZm9jdXM6ZS5fX2NsZWFyVGltZXIsaGlkZTpmdW5jdGlvbigpe2UucmVtb3ZlKHMpfX0sbmF0aXZlT246e2JsdXI6ZS5fX29uSW5wdXRCbHVyLGZvY3VzOmUuX19jbGVhclRpbWVyfX0saSl9KS5jb25jYXQoW3QoXCJpbnB1dFwiLHtyZWY6XCJpbnB1dFwiLHN0YXRpY0NsYXNzOlwiY29sIHEtaW5wdXQtdGFyZ2V0XCIsY2xhc3M6dGhpcy5pbnB1dENsYXNzZXMsZG9tUHJvcHM6e3ZhbHVlOnRoaXMuaW5wdXR9LGF0dHJzOk9iamVjdC5hc3NpZ24oe30sdGhpcy4kYXR0cnMse3BsYWNlaG9sZGVyOnRoaXMuaW5wdXRQbGFjZWhvbGRlcixkaXNhYmxlZDp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seX0pLG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLmlucHV0PXQudGFyZ2V0LnZhbHVlfSxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbklucHV0Qmx1cixrZXlkb3duOnRoaXMuX19oYW5kbGVLZXlEb3duLGtleXVwOnRoaXMuX19vbktleXVwfX0pXSkpLHRoaXMuaXNMb2FkaW5nP3RoaXMuJHNsb3RzLmxvYWRpbmc/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHNsb3Q6XCJhZnRlclwifSx0aGlzLiRzbG90cy5sb2FkaW5nKTp0KFFTcGlubmVyLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntzaXplOlwiMjRweFwifX0pOnRoaXMuZWRpdGFibGUmJnQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIsY2xhc3M6e2ludmlzaWJsZTowPT09dGhpcy5pbnB1dC5sZW5ndGh9LHByb3BzOntuYW1lOnRoaXMuY29tcHV0ZWRBZGRJY29ufSxuYXRpdmVPbjp7bW91c2Vkb3duOnRoaXMuX19jbGVhclRpbWVyLHRvdWNoc3RhcnQ6dGhpcy5fX2NsZWFyVGltZXIsY2xpY2s6ZnVuY3Rpb24oKXtlLmFkZCgpfX19KXx8dm9pZCAwLHRoaXMuaXNDbGVhcmFibGUmJnQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0W1wiY2xlYXJcIisodGhpcy5pc0ludmVydGVkP1wiSW52ZXJ0ZWRcIjpcIlwiKV19LG5hdGl2ZU9uOnttb3VzZWRvd246dGhpcy5fX2NsZWFyVGltZXIsdG91Y2hzdGFydDp0aGlzLl9fY2xlYXJUaW1lcixjbGljazp0aGlzLmNsZWFyfX0pfHx2b2lkIDBdLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0P3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhYnNvbHV0ZS1mdWxsIG5vLXBvaW50ZXItZXZlbnRzXCIsc2xvdDpcImFmdGVyXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpOnZvaWQgMCkpfX0sUUl0ZW1UaWxlPXtuYW1lOlwiUUl0ZW1UaWxlXCIscHJvcHM6e2ljb246U3RyaW5nLGxldHRlcjpCb29sZWFuLGludmVydGVkOkJvb2xlYW4saW1hZ2U6Qm9vbGVhbixhdmF0YXI6Qm9vbGVhbixzdGFtcDpCb29sZWFuLGxhYmVsOkJvb2xlYW4sc3VibGFiZWw6Qm9vbGVhbixsaW5lczpbTnVtYmVyLFN0cmluZ10sdGFnOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZGl2XCJ9LGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nfSxjb21wdXRlZDp7aGFzTGluZXM6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5sYWJlbHx8dGhpcy5zdWJsYWJlbCkmJnRoaXMubGluZXN9LHR5cGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybltcImljb25cIixcImxhYmVsXCIsXCJzdWJsYWJlbFwiLFwiaW1hZ2VcIixcImF2YXRhclwiLFwibGV0dGVyXCIsXCJzdGFtcFwiXS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5jb2xvciYmKHRoaXMuaW52ZXJ0ZWQ/dC5wdXNoKFwiYmctXCIrdGhpcy5jb2xvcik6dGhpcy50ZXh0Q29sb3J8fHQucHVzaChcInRleHQtXCIrdGhpcy5jb2xvcikpLHRoaXMudGV4dENvbG9yJiZ0LnB1c2goXCJ0ZXh0LVwiK3RoaXMudGV4dENvbG9yKSx0aGlzLnR5cGUmJnQucHVzaChcInEtaXRlbS1cIit0aGlzLnR5cGUpLHRoaXMuaW52ZXJ0ZWQmJih0aGlzLmljb258fHRoaXMubGV0dGVyKSYmKHQucHVzaChcInEtaXRlbS1pbnZlcnRlZFwiKSx0LnB1c2goXCJmbGV4XCIpLHQucHVzaChcImZsZXgtY2VudGVyXCIpKSwhdGhpcy5oYXNMaW5lc3x8XCIxXCIhPT10aGlzLmxpbmVzJiYxIT09dGhpcy5saW5lc3x8dC5wdXNoKFwiZWxsaXBzaXNcIiksdH0sc3R5bGU6ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0xpbmVzKXJldHVybiB0ZXh0U3R5bGUodGhpcy5saW5lcyl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9e2NsYXNzOnRoaXMuY2xhc3NlcyxzdHlsZTp0aGlzLnN0eWxlfTtpZih0aGlzLmljb24pe2lmKHRoaXMuaW52ZXJ0ZWQpcmV0dXJuIHQodGhpcy50YWcsZSxbdChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy5pY29ufX0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKTtlLnByb3BzPXtuYW1lOnRoaXMuaWNvbn19cmV0dXJuIHQodGhpcy5pY29uP1FJY29uOnRoaXMudGFnLGUsdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRU2xpZGVUcmFuc2l0aW9uPXtuYW1lOlwiUVNsaWRlVHJhbnNpdGlvblwiLHByb3BzOnthcHBlYXI6Qm9vbGVhbixkdXJhdGlvbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDozMDB9fSxtZXRob2RzOntfX2JlZ2luOmZ1bmN0aW9uKHQsZSxpKXt0LnN0eWxlLm92ZXJmbG93WT1cImhpZGRlblwiLHZvaWQgMCE9PWUmJih0LnN0eWxlLmhlaWdodD1lK1wicHhcIiksdC5zdHlsZS50cmFuc2l0aW9uPVwiaGVpZ2h0IFwiK3RoaXMuZHVyYXRpb24rXCJtcyBjdWJpYy1iZXppZXIoLjI1LCAuOCwgLjUwLCAxKVwiLHRoaXMuYW5pbWF0aW5nPSEwLHRoaXMuZG9uZT1pfSxfX2VuZDpmdW5jdGlvbih0LGUpe3Quc3R5bGUub3ZlcmZsb3dZPW51bGwsdC5zdHlsZS5oZWlnaHQ9bnVsbCx0LnN0eWxlLnRyYW5zaXRpb249bnVsbCx0aGlzLl9fY2xlYW51cCgpLGUhPT10aGlzLmxhc3RFdmVudCYmdGhpcy4kZW1pdChlKX0sX19jbGVhbnVwOmZ1bmN0aW9uKCl7dGhpcy5kb25lJiZ0aGlzLmRvbmUoKSx0aGlzLmRvbmU9bnVsbCx0aGlzLmFuaW1hdGluZz0hMSxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLHRoaXMuYW5pbUxpc3RlbmVyKSx0aGlzLmFuaW1MaXN0ZW5lcj1udWxsfX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW5nJiZ0aGlzLl9fY2xlYW51cCgpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcInRyYW5zaXRpb25cIix7cHJvcHM6e2NzczohMSxhcHBlYXI6dGhpcy5hcHBlYXJ9LG9uOntlbnRlcjpmdW5jdGlvbih0LGkpe3ZhciBzPTA7ZS5lbD10LCEwPT09ZS5hbmltYXRpbmc/KGUuX19jbGVhbnVwKCkscz10Lm9mZnNldEhlaWdodD09PXQuc2Nyb2xsSGVpZ2h0PzA6dm9pZCAwKTplLmxhc3RFdmVudD1cImhpZGVcIixlLl9fYmVnaW4odCxzLGkpLGUudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3Quc3R5bGUuaGVpZ2h0PXQuc2Nyb2xsSGVpZ2h0K1wicHhcIixlLmFuaW1MaXN0ZW5lcj1mdW5jdGlvbigpe2UuX19lbmQodCxcInNob3dcIil9LHQuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIixlLmFuaW1MaXN0ZW5lcil9LDEwMCl9LGxlYXZlOmZ1bmN0aW9uKHQsaSl7dmFyIHM7ZS5lbD10LCEwPT09ZS5hbmltYXRpbmc/ZS5fX2NsZWFudXAoKTooZS5sYXN0RXZlbnQ9XCJzaG93XCIscz10LnNjcm9sbEhlaWdodCksZS5fX2JlZ2luKHQscyxpKSxlLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnN0eWxlLmhlaWdodD0wLGUuYW5pbUxpc3RlbmVyPWZ1bmN0aW9uKCl7ZS5fX2VuZCh0LFwiaGlkZVwiKX0sdC5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLGUuYW5pbUxpc3RlbmVyKX0sMTAwKX19fSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LGV2ZW50TmFtZT1cInE6Y29sbGFwc2libGU6Y2xvc2VcIixRQ29sbGFwc2libGU9e25hbWU6XCJRQ29sbGFwc2libGVcIixtaXhpbnM6W01vZGVsVG9nZ2xlTWl4aW4sSXRlbU1peGluLHtwcm9wczpzdWJJdGVtUHJvcHN9XSxtb2RlbFRvZ2dsZTp7aGlzdG9yeTohMX0scHJvcHM6e2Rpc2FibGU6Qm9vbGVhbixwb3B1cDpCb29sZWFuLGluZGVudDpCb29sZWFuLGdyb3VwOlN0cmluZyxpY29uVG9nZ2xlOkJvb2xlYW4sY29sbGFwc2VJY29uOlN0cmluZyxvcGVuZWQ6Qm9vbGVhbixkdXJhdGlvbjpOdW1iZXIsaGVhZGVyU3R5bGU6W0FycmF5LFN0cmluZyxPYmplY3RdLGhlYWRlckNsYXNzOltBcnJheSxTdHJpbmcsT2JqZWN0XX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJxLWNvbGxhcHNpYmxlLW9wZW5lZFwiOnRoaXMuc2hvd2luZyxcInEtY29sbGFwc2libGUtY2xvc2VkXCI6IXRoaXMuc2hvd2luZyxcInEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkXCI6dGhpcy5wb3B1cCYmdGhpcy5zaG93aW5nLFwicS1jb2xsYXBzaWJsZS1wb3B1cC1jbG9zZWRcIjp0aGlzLnBvcHVwJiYhdGhpcy5zaG93aW5nLFwicS1jb2xsYXBzaWJsZS1jdXJzb3ItcG9pbnRlclwiOiF0aGlzLnNlcGFyYXRlVG9nZ2xlLFwicS1pdGVtLWRhcmtcIjp0aGlzLmRhcmssXCJxLWl0ZW0tc2VwYXJhdG9yXCI6dGhpcy5zZXBhcmF0b3IsXCJxLWl0ZW0taW5zZXQtc2VwYXJhdG9yXCI6dGhpcy5pbnNldFNlcGFyYXRvcixkaXNhYmxlZDp0aGlzLmRpc2FibGV9fSxzZXBhcmF0ZVRvZ2dsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmljb25Ub2dnbGV8fHZvaWQgMCE9PXRoaXMudG99fSx3YXRjaDp7c2hvd2luZzpmdW5jdGlvbih0KXt0JiZ0aGlzLmdyb3VwJiZ0aGlzLiRyb290LiRlbWl0KGV2ZW50TmFtZSx0aGlzKX19LG1ldGhvZHM6e19fdG9nZ2xlSXRlbTpmdW5jdGlvbigpe3RoaXMuc2VwYXJhdGVUb2dnbGV8fHRoaXMudG9nZ2xlKCl9LF9fdG9nZ2xlSWNvbjpmdW5jdGlvbih0KXt0aGlzLnNlcGFyYXRlVG9nZ2xlJiYodCYmc3RvcEFuZFByZXZlbnQodCksdGhpcy50b2dnbGUoKSl9LF9fZXZlbnRIYW5kbGVyOmZ1bmN0aW9uKHQpe3RoaXMuZ3JvdXAmJnRoaXMhPT10JiZ0Lmdyb3VwPT09dGhpcy5ncm91cCYmdGhpcy5oaWRlKCl9LF9fZ2V0VG9nZ2xlU2lkZTpmdW5jdGlvbih0LGUpe3JldHVyblt0KFFJdGVtVGlsZSx7c2xvdDplP1wicmlnaHRcIjp2b2lkIDAsc3RhdGljQ2xhc3M6XCJjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWdlbmVyaWMgcmVsYXRpdmUtcG9zaXRpb24gcS1jb2xsYXBzaWJsZS10b2dnbGUtaWNvblwiLGNsYXNzOntcInJvdGF0ZS0xODBcIjp0aGlzLnNob3dpbmcsaW52aXNpYmxlOnRoaXMuZGlzYWJsZX0sbmF0aXZlT246e2NsaWNrOnRoaXMuX190b2dnbGVJY29ufSxwcm9wczp7aWNvbjp0aGlzLmNvbGxhcHNlSWNvbnx8dGhpcy4kcS5pY29uLmNvbGxhcHNpYmxlLmljb259fSldfSxfX2dldEl0ZW1Qcm9wczpmdW5jdGlvbih0KXtyZXR1cm57cHJvcHM6dD97Y2ZnOnRoaXMuJHByb3BzfTp0aGlzLiRwcm9wcyxzdHlsZTp0aGlzLmhlYWRlclN0eWxlLGNsYXNzOnRoaXMuaGVhZGVyQ2xhc3MsbmF0aXZlT246e2NsaWNrOnRoaXMuX190b2dnbGVJdGVtfX19fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy4kcm9vdC4kb24oZXZlbnROYW1lLHRoaXMuX19ldmVudEhhbmRsZXIpLCh0aGlzLm9wZW5lZHx8dGhpcy52YWx1ZSkmJnRoaXMuc2hvdygpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy4kcm9vdC4kb2ZmKGV2ZW50TmFtZSx0aGlzLl9fZXZlbnRIYW5kbGVyKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KHRoaXMudGFnLHtzdGF0aWNDbGFzczpcInEtY29sbGFwc2libGUgcS1pdGVtLWRpdmlzaW9uIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sbGFwc2libGUtaW5uZXJcIn0sW3RoaXMuJHNsb3RzLmhlYWRlcj90KFFJdGVtLHRoaXMuX19nZXRJdGVtUHJvcHMoKSxbdGhpcy4kc2xvdHMuaGVhZGVyLHQoUUl0ZW1TaWRlLHtwcm9wczp7cmlnaHQ6ITB9LHN0YXRpY0NsYXNzOlwicmVsYXRpdmUtcG9zaXRpb25cIn0sdGhpcy5fX2dldFRvZ2dsZVNpZGUodCkpXSk6dChRSXRlbVdyYXBwZXIsdGhpcy5fX2dldEl0ZW1Qcm9wcyghMCksdGhpcy5fX2dldFRvZ2dsZVNpZGUodCwhMCkpLHQoUVNsaWRlVHJhbnNpdGlvbix7cHJvcHM6e2R1cmF0aW9uOnRoaXMuZHVyYXRpb259fSxbdChcImRpdlwiLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTp0aGlzLnNob3dpbmd9XX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbGxhcHNpYmxlLXN1Yi1pdGVtIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6e2luZGVudDp0aGlzLmluZGVudH19LHRoaXMuJHNsb3RzLmRlZmF1bHQpXSldKV0pXSl9fSxEaXNwbGF5TW9kZU1peGluPXtwcm9wczp7cG9wb3ZlcjpCb29sZWFuLG1vZGFsOkJvb2xlYW59LGNvbXB1dGVkOntpc1BvcG92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMucG9wb3Zlcnx8IXRoaXMubW9kYWwmJih0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3AmJiF0aGlzLiRxLnBsYXRmb3JtLndpdGhpbi5pZnJhbWUpfX19O2Z1bmN0aW9uIGdldFBlcmNlbnRhZ2UodCxlLGkpe3ZhciBzPWJldHdlZW4oKHBvc2l0aW9uKHQpLmxlZnQtZS5sZWZ0KS9lLndpZHRoLDAsMSk7cmV0dXJuIGk/MS1zOnN9ZnVuY3Rpb24gbm90RGl2aWRlcyh0LGUpe3ZhciBpPWU/cGFyc2VGbG9hdCh0LnRvRml4ZWQoZSkpOnQ7cmV0dXJuIGkhPT1wYXJzZUludChpLDEwKX1mdW5jdGlvbiBnZXRNb2RlbCh0LGUsaSxzLG4pe3ZhciBvPWUrdCooaS1lKSxyPShvLWUpJXM7cmV0dXJuIG8rPShNYXRoLmFicyhyKT49cy8yPyhyPDA/LTE6MSkqczowKS1yLG4mJihvPXBhcnNlRmxvYXQoby50b0ZpeGVkKG4pKSksYmV0d2VlbihvLGUsaSl9dmFyIFNsaWRlck1peGluPXtkaXJlY3RpdmVzOntUb3VjaFBhbjpUb3VjaFBhbn0scHJvcHM6e21pbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxtYXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NX0sc3RlcDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxkZWNpbWFsczpOdW1iZXIsc25hcDpCb29sZWFuLG1hcmtlcnM6Qm9vbGVhbixsYWJlbDpCb29sZWFuLGxhYmVsQWx3YXlzOkJvb2xlYW4sc3F1YXJlOkJvb2xlYW4sY29sb3I6U3RyaW5nLGZpbGxIYW5kbGVBbHdheXM6Qm9vbGVhbixlcnJvcjpCb29sZWFuLHdhcm5pbmc6Qm9vbGVhbixyZWFkb25seTpCb29sZWFuLGRpc2FibGU6Qm9vbGVhbn0sY29tcHV0ZWQ6e2VkaXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZGlzYWJsZSYmIXRoaXMucmVhZG9ubHl9LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD17ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlLHJlYWRvbmx5OnRoaXMucmVhZG9ubHksXCJsYWJlbC1hbHdheXNcIjp0aGlzLmxhYmVsQWx3YXlzLFwiaGFzLWVycm9yXCI6dGhpcy5lcnJvcixcImhhcy13YXJuaW5nXCI6dGhpcy53YXJuaW5nfTtyZXR1cm4gdGhpcy5lcnJvcnx8dGhpcy53YXJuaW5nfHwhdGhpcy5jb2xvcnx8KHRbXCJ0ZXh0LVwiK3RoaXMuY29sb3JdPSEwKSx0fSxtYXJrZXJzTGVuOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMubWF4LXRoaXMubWluKS90aGlzLnN0ZXArMX0sbGFiZWxDb2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yP1wibmVnYXRpdmVcIjp0aGlzLndhcm5pbmc/XCJ3YXJuaW5nXCI6dGhpcy5jb2xvcnx8XCJwcmltYXJ5XCJ9LGNvbXB1dGVkRGVjaW1hbHM6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5kZWNpbWFscz90aGlzLmRlY2ltYWxzfHwwOihTdHJpbmcodGhpcy5zdGVwKS50cmltKFwiMFwiKS5zcGxpdChcIi5cIilbMV18fFwiXCIpLmxlbmd0aH0sY29tcHV0ZWRTdGVwOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZGVjaW1hbHM/MS9NYXRoLnBvdygxMCx0aGlzLmRlY2ltYWxzfHwwKTp0aGlzLnN0ZXB9fSxtZXRob2RzOntfX3BhbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuaXNGaW5hbD90aGlzLmRyYWdnaW5nJiYodGhpcy5kcmFnVGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2UuZHJhZ2dpbmc9ITF9LDEwMCksdGhpcy5fX2VuZCh0LmV2dCksdGhpcy5fX3VwZGF0ZSghMCkpOnQuaXNGaXJzdD8oY2xlYXJUaW1lb3V0KHRoaXMuZHJhZ1RpbWVyKSx0aGlzLmRyYWdnaW5nPXRoaXMuX19nZXREcmFnZ2luZyh0LmV2dCkpOnRoaXMuZHJhZ2dpbmcmJih0aGlzLl9fbW92ZSh0LmV2dCksdGhpcy5fX3VwZGF0ZSgpKX0sX191cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpJiYodGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5tb2RlbCksdCYmdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeShlLm1vZGVsKSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsZS5tb2RlbCl9KSl9LF9fY2xpY2s6ZnVuY3Rpb24odCl7aWYoIXRoaXMuZHJhZ2dpbmcpe3ZhciBlPXRoaXMuX19nZXREcmFnZ2luZyh0KTtlJiYodGhpcy5fX2VuZCh0LGUpLHRoaXMuX191cGRhdGUoITApKX19LF9fZ2V0TWFya2VyczpmdW5jdGlvbih0KXtpZih0aGlzLm1hcmtlcnMpe2Zvcih2YXIgZT1bXSxpPTA7aTx0aGlzLm1hcmtlcnNMZW47aSsrKWUucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItbWFya1wiLGtleTpcIm1hcmtlclwiK2ksc3R5bGU6e2xlZnQ6MTAwKmkqdGhpcy5zdGVwLyh0aGlzLm1heC10aGlzLm1pbikrXCIlXCJ9fSkpO3JldHVybiBlfX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fdmFsaWRhdGVQcm9wcygpfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlciBub24tc2VsZWN0YWJsZVwiLGNsYXNzOnRoaXMuY2xhc3Nlcyxvbjp0aGlzLmVkaXRhYmxlP3tjbGljazp0aGlzLl9fY2xpY2t9Om51bGwsZGlyZWN0aXZlczp0aGlzLmVkaXRhYmxlP1t7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7aG9yaXpvbnRhbDohMCxwcmV2ZW50OiEwLHN0b3A6ITB9LHZhbHVlOnRoaXMuX19wYW59XTpudWxsfSxbdChcImRpdlwiLHtyZWY6XCJoYW5kbGVcIixzdGF0aWNDbGFzczpcInEtc2xpZGVyLWhhbmRsZS1jb250YWluZXJcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci10cmFja1wifSksdGhpcy5fX2dldE1hcmtlcnModCldLmNvbmNhdCh0aGlzLl9fZ2V0Q29udGVudCh0KSkpXSl9fSxRU2xpZGVyPXtuYW1lOlwiUVNsaWRlclwiLG1peGluczpbU2xpZGVyTWl4aW5dLHByb3BzOnt2YWx1ZTpOdW1iZXIsbGFiZWxWYWx1ZTpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9kZWw6dGhpcy52YWx1ZSxkcmFnZ2luZzohMSxjdXJyZW50UGVyY2VudGFnZToodGhpcy52YWx1ZS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX19LGNvbXB1dGVkOntwZXJjZW50YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcD8odGhpcy5tb2RlbC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSoxMDArXCIlXCI6MTAwKnRoaXMuY3VycmVudFBlcmNlbnRhZ2UrXCIlXCJ9LGRpc3BsYXlWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmxhYmVsVmFsdWU/dGhpcy5sYWJlbFZhbHVlOnRoaXMubW9kZWx9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5kcmFnZ2luZ3x8KHQ8dGhpcy5taW4/dGhpcy5tb2RlbD10aGlzLm1pbjp0PnRoaXMubWF4P3RoaXMubW9kZWw9dGhpcy5tYXg6dGhpcy5tb2RlbD10LHRoaXMuY3VycmVudFBlcmNlbnRhZ2U9KHRoaXMubW9kZWwtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikpfSxtaW46ZnVuY3Rpb24odCl7dGhpcy5tb2RlbDx0P3RoaXMubW9kZWw9dDp0aGlzLiRuZXh0VGljayh0aGlzLl9fdmFsaWRhdGVQcm9wcyl9LG1heDpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPnQ/dGhpcy5tb2RlbD10OnRoaXMuJG5leHRUaWNrKHRoaXMuX192YWxpZGF0ZVByb3BzKX0sc3RlcDpmdW5jdGlvbigpe3RoaXMuJG5leHRUaWNrKHRoaXMuX192YWxpZGF0ZVByb3BzKX19LG1ldGhvZHM6e19fZ2V0RHJhZ2dpbmc6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy4kcmVmcy5oYW5kbGU7cmV0dXJue2xlZnQ6ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LHdpZHRoOmUub2Zmc2V0V2lkdGh9fSxfX21vdmU6ZnVuY3Rpb24odCl7dmFyIGU9Z2V0UGVyY2VudGFnZSh0LHRoaXMuZHJhZ2dpbmcsdGhpcy4kcS5pMThuLnJ0bCk7dGhpcy5jdXJyZW50UGVyY2VudGFnZT1lLHRoaXMubW9kZWw9Z2V0TW9kZWwoZSx0aGlzLm1pbix0aGlzLm1heCx0aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKX0sX19lbmQ6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT10aGlzLmRyYWdnaW5nKTt2YXIgaT1nZXRQZXJjZW50YWdlKHQsZSx0aGlzLiRxLmkxOG4ucnRsKTt0aGlzLm1vZGVsPWdldE1vZGVsKGksdGhpcy5taW4sdGhpcy5tYXgsdGhpcy5zdGVwLHRoaXMuY29tcHV0ZWREZWNpbWFscyksdGhpcy5jdXJyZW50UGVyY2VudGFnZT0odGhpcy5tb2RlbC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX0sX19vbktleURvd246ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXlDb2RlO2lmKHRoaXMuZWRpdGFibGUmJlszNyw0MCwzOSwzOF0uaW5jbHVkZXMoZSkpe3N0b3BBbmRQcmV2ZW50KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWREZWNpbWFscyxzPXQuY3RybEtleT8xMCp0aGlzLmNvbXB1dGVkU3RlcDp0aGlzLmNvbXB1dGVkU3RlcCxuPVszNyw0MF0uaW5jbHVkZXMoZSk/LXM6cyxvPWk/cGFyc2VGbG9hdCgodGhpcy5tb2RlbCtuKS50b0ZpeGVkKGkpKTp0aGlzLm1vZGVsK247dGhpcy5tb2RlbD1iZXR3ZWVuKG8sdGhpcy5taW4sdGhpcy5tYXgpLHRoaXMuY3VycmVudFBlcmNlbnRhZ2U9KHRoaXMubW9kZWwtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbiksdGhpcy5fX3VwZGF0ZSgpfX0sX19vbktleVVwOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZTt0aGlzLmVkaXRhYmxlJiZbMzcsNDAsMzksMzhdLmluY2x1ZGVzKGUpJiZ0aGlzLl9fdXBkYXRlKCEwKX0sX192YWxpZGF0ZVByb3BzOmZ1bmN0aW9uKCl7dGhpcy5taW4+PXRoaXMubWF4P2NvbnNvbGUuZXJyb3IoXCJSYW5nZSBlcnJvcjogbWluID49IG1heFwiLHRoaXMuJGVsLHRoaXMubWluLHRoaXMubWF4KTpub3REaXZpZGVzKCh0aGlzLm1heC10aGlzLm1pbikvdGhpcy5zdGVwLHRoaXMuY29tcHV0ZWREZWNpbWFscykmJmNvbnNvbGUuZXJyb3IoXCJSYW5nZSBlcnJvcjogc3RlcCBtdXN0IGJlIGEgZGl2aXNvciBvZiBtYXggLSBtaW5cIix0aGlzLm1pbix0aGlzLm1heCx0aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKX0sX19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVyblt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItdHJhY2sgYWN0aXZlLXRyYWNrXCIsc3R5bGU6e3dpZHRoOnRoaXMucGVyY2VudGFnZX0sY2xhc3M6e1wibm8tdHJhbnNpdGlvblwiOnRoaXMuZHJhZ2dpbmcsXCJoYW5kbGUtYXQtbWluaW11bVwiOnRoaXMubW9kZWw9PT10aGlzLm1pbn19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItaGFuZGxlXCIsc3R5bGU6KGU9e30sZVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09dGhpcy5wZXJjZW50YWdlLGUuYm9yZGVyUmFkaXVzPXRoaXMuc3F1YXJlP1wiMFwiOlwiNTAlXCIsZSksY2xhc3M6e2RyYWdnaW5nOnRoaXMuZHJhZ2dpbmcsXCJoYW5kbGUtYXQtbWluaW11bVwiOiF0aGlzLmZpbGxIYW5kbGVBbHdheXMmJnRoaXMubW9kZWw9PT10aGlzLm1pbn0sYXR0cnM6e3RhYmluZGV4OnRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcD90aGlzLmVkaXRhYmxlPzA6LTE6dm9pZCAwfSxvbjp7a2V5ZG93bjp0aGlzLl9fb25LZXlEb3duLGtleXVwOnRoaXMuX19vbktleVVwfX0sW3RoaXMubGFiZWx8fHRoaXMubGFiZWxBbHdheXM/dChRQ2hpcCx7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci1sYWJlbCBuby1wb2ludGVyLWV2ZW50c1wiLGNsYXNzOntcImxhYmVsLWFsd2F5c1wiOnRoaXMubGFiZWxBbHdheXN9LHByb3BzOntwb2ludGluZzpcImRvd25cIixzcXVhcmU6ITAsZGVuc2U6ITAsY29sb3I6dGhpcy5sYWJlbENvbG9yfX0sW3RoaXMuZGlzcGxheVZhbHVlXSk6bnVsbCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItcmluZ1wifSldKV19fX07ZnVuY3Rpb24gdGhyb3R0bGUodCxlKXt2b2lkIDA9PT1lJiYoZT0yNTApO3ZhciBpLHM9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtdLG89YXJndW1lbnRzLmxlbmd0aDtvLS07KW5bb109YXJndW1lbnRzW29dO3JldHVybiBzP2k6KHM9ITAsaT10LmFwcGx5KHRoaXMsbiksc2V0VGltZW91dChmdW5jdGlvbigpe3M9ITF9LGUpLGkpfX1mdW5jdGlvbiBjbG9uZSh0KXt2YXIgZT1KU09OLnN0cmluZ2lmeSh0KTtpZihlKXJldHVybiBKU09OLnBhcnNlKGUpfXZhciBRQ29sb3JQaWNrZXI9e25hbWU6XCJRQ29sb3JQaWNrZXJcIixtaXhpbnM6W1BhcmVudEZpZWxkTWl4aW5dLGRpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7dmFsdWU6W1N0cmluZyxPYmplY3RdLGRlZmF1bHRWYWx1ZTp7dHlwZTpbU3RyaW5nLE9iamVjdF0sZGVmYXVsdDpudWxsfSxmb3JtYXRNb2RlbDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImF1dG9cIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wiYXV0b1wiLFwiaGV4XCIsXCJyZ2JcIixcImhleGFcIixcInJnYmFcIl0uaW5jbHVkZXModCl9fSxkaXNhYmxlOkJvb2xlYW4scmVhZG9ubHk6Qm9vbGVhbixkYXJrOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dmlldzp0aGlzLnZhbHVlJiZcInN0cmluZ1wiIT10eXBlb2YgdGhpcy52YWx1ZT9cInJnYlwiOlwiaGV4XCIsbW9kZWw6dGhpcy5fX3BhcnNlTW9kZWwodGhpcy52YWx1ZXx8dGhpcy5kZWZhdWx0VmFsdWUpfX0sd2F0Y2g6e3ZhbHVlOntoYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19wYXJzZU1vZGVsKHR8fHRoaXMuZGVmYXVsdFZhbHVlKTtlLmhleCE9PXRoaXMubW9kZWwuaGV4JiYodGhpcy5tb2RlbD1lKX0sZGVlcDohMH19LGNvbXB1dGVkOntmb3JjZUhleDpmdW5jdGlvbigpe3JldHVyblwiYXV0b1wiPT09dGhpcy5mb3JtYXRNb2RlbD9udWxsOnRoaXMuZm9ybWF0TW9kZWwuaW5kZXhPZihcImhleFwiKT4tMX0sZm9yY2VBbHBoYTpmdW5jdGlvbigpe3JldHVyblwiYXV0b1wiPT09dGhpcy5mb3JtYXRNb2RlbD9udWxsOnRoaXMuZm9ybWF0TW9kZWwuaW5kZXhPZihcImFcIik+LTF9LGlzSGV4OmZ1bmN0aW9uKCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMudmFsdWV9LGlzT3V0cHV0SGV4OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmZvcmNlSGV4P3RoaXMuZm9yY2VIZXg6dGhpcy5pc0hleH0sZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiYhdGhpcy5yZWFkb25seX0saGFzQWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuZm9yY2VBbHBoYT90aGlzLmZvcmNlQWxwaGE6dGhpcy5pc0hleD90aGlzLnZhbHVlLnRyaW0oKS5sZW5ndGg+Nzp0aGlzLnZhbHVlJiZ2b2lkIDAhPT10aGlzLnZhbHVlLmF9LHN3YXRjaENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJue2JhY2tncm91bmRDb2xvcjpcInJnYmEoXCIrdGhpcy5tb2RlbC5yK1wiLFwiK3RoaXMubW9kZWwuZytcIixcIit0aGlzLm1vZGVsLmIrXCIsXCIrKHZvaWQgMD09PXRoaXMubW9kZWwuYT8xMDA6dGhpcy5tb2RlbC5hKS8xMDArXCIpXCJ9fSxzYXR1cmF0aW9uU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57YmFja2dyb3VuZDpcImhzbChcIit0aGlzLm1vZGVsLmgrXCIsMTAwJSw1MCUpXCJ9fSxzYXR1cmF0aW9uUG9pbnRlclN0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuKHQ9e3RvcDoxMDEtdGhpcy5tb2RlbC52K1wiJVwifSlbdGhpcy4kcS5pMThuLnJ0bD9cInJpZ2h0XCI6XCJsZWZ0XCJdPXRoaXMubW9kZWwucytcIiVcIix0fSxpbnB1dHNBcnJheTpmdW5jdGlvbigpe3ZhciB0PVtcInJcIixcImdcIixcImJcIl07cmV0dXJuIHRoaXMuaGFzQWxwaGEmJnQucHVzaChcImFcIiksdH0sX19uZWVkc0JvcmRlcjpmdW5jdGlvbigpe3JldHVybiEwfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX19zYXR1cmF0aW9uQ2hhbmdlPXRocm90dGxlKHRoaXMuX19zYXR1cmF0aW9uQ2hhbmdlLDIwKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvclwiLGNsYXNzOntkaXNhYmxlZDp0aGlzLmRpc2FibGUsXCJxLWNvbG9yLWRhcmtcIjp0aGlzLmRhcmt9fSxbdGhpcy5fX2dldFNhdHVyYXRpb24odCksdGhpcy5fX2dldFNsaWRlcnModCksdGhpcy5fX2dldElucHV0cyh0KV0pfSxtZXRob2RzOntfX2dldFNhdHVyYXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7cmVmOlwic2F0dXJhdGlvblwiLHN0YXRpY0NsYXNzOlwicS1jb2xvci1zYXR1cmF0aW9uIG5vbi1zZWxlY3RhYmxlIHJlbGF0aXZlLXBvc2l0aW9uIG92ZXJmbG93LWhpZGRlbiBjdXJzb3ItcG9pbnRlclwiLHN0eWxlOnRoaXMuc2F0dXJhdGlvblN0eWxlLGNsYXNzOntyZWFkb25seTohdGhpcy5lZGl0YWJsZX0sb246dGhpcy5lZGl0YWJsZT97Y2xpY2s6dGhpcy5fX3NhdHVyYXRpb25DbGlja306bnVsbCxkaXJlY3RpdmVzOnRoaXMuZWRpdGFibGU/W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOnttaWdodFByZXZlbnQ6ITB9LHZhbHVlOnRoaXMuX19zYXR1cmF0aW9uUGFufV06bnVsbH0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLXNhdHVyYXRpb24td2hpdGUgYWJzb2x1dGUtZnVsbFwifSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3Itc2F0dXJhdGlvbi1ibGFjayBhYnNvbHV0ZS1mdWxsXCJ9KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiYWJzb2x1dGVcIixzdHlsZTp0aGlzLnNhdHVyYXRpb25Qb2ludGVyU3R5bGV9LFt2b2lkIDAhPT10aGlzLm1vZGVsLmhleD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvci1zYXR1cmF0aW9uLWNpcmNsZVwifSk6bnVsbF0pXSl9LF9fZ2V0U2xpZGVyczpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvci1zbGlkZXJzIHJvdyBpdGVtcy1jZW50ZXJcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLXN3YXRjaCBxLW10LXNtIHEtbWwtbWQgcS1tYi1zbSBub24tc2VsZWN0YWJsZSBvdmVyZmxvdy1oaWRkZW5cIn0sW3QoXCJkaXZcIix7c3R5bGU6dGhpcy5zd2F0Y2hDb2xvcixzdGF0aWNDbGFzczpcImZpdFwifSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtcGEtc21cIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLWh1ZSBub24tc2VsZWN0YWJsZVwifSxbdChRU2xpZGVyLHtwcm9wczp7dmFsdWU6dGhpcy5tb2RlbC5oLGNvbG9yOlwid2hpdGVcIixtaW46MCxtYXg6MzYwLGZpbGxIYW5kbGVBbHdheXM6ITAscmVhZG9ubHk6IXRoaXMuZWRpdGFibGV9LG9uOntpbnB1dDp0aGlzLl9fb25IdWVDaGFuZ2UsZHJhZ2VuZDpmdW5jdGlvbih0KXtyZXR1cm4gZS5fX29uSHVlQ2hhbmdlKHQsITApfX19KV0pLHRoaXMuaGFzQWxwaGE/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3ItYWxwaGEgbm9uLXNlbGVjdGFibGVcIn0sW3QoUVNsaWRlcix7cHJvcHM6e3ZhbHVlOnRoaXMubW9kZWwuYSxjb2xvcjpcIndoaXRlXCIsbWluOjAsbWF4OjEwMCxmaWxsSGFuZGxlQWx3YXlzOiEwLHJlYWRvbmx5OiF0aGlzLmVkaXRhYmxlfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUuX19vbk51bWVyaWNDaGFuZ2Uoe3RhcmdldDp7dmFsdWU6dH19LFwiYVwiLDEwMCl9LGRyYWdlbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUuX19vbk51bWVyaWNDaGFuZ2Uoe3RhcmdldDp7dmFsdWU6dH19LFwiYVwiLDEwMCwhMCl9fX0pXSk6bnVsbF0pXSl9LF9fZ2V0TnVtZXJpY0lucHV0czpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmlucHV0c0FycmF5Lm1hcChmdW5jdGlvbihpKXt2YXIgcz1cImFcIj09PWk/MTAwOjI1NTtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCBxLWNvbG9yLXBhZGRpbmdcIn0sW3QoXCJpbnB1dFwiLHthdHRyczp7dHlwZTpcIm51bWJlclwiLG1pbjowLG1heDpzLHJlYWRvbmx5OiFlLmVkaXRhYmxlLHRhYmluZGV4OmUuZWRpdGFibGU/MDotMX0sc3RhdGljQ2xhc3M6XCJmdWxsLXdpZHRoIHRleHQtY2VudGVyIHEtbm8taW5wdXQtc3Bpbm5lclwiLGRvbVByb3BzOnt2YWx1ZTp2b2lkIDA9PT1lLm1vZGVsLmhleD9cIlwiOk1hdGgucm91bmQoZS5tb2RlbFtpXSl9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gZS5fX29uTnVtZXJpY0NoYW5nZSh0LGkscyl9LGJsdXI6ZnVuY3Rpb24odCl7cmV0dXJuIGUuZWRpdGFibGUmJmUuX19vbk51bWVyaWNDaGFuZ2UodCxpLHMsITApfX19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvci1sYWJlbCB0ZXh0LWNlbnRlciB1cHBlcmNhc2VcIn0sW2ldKV0pfSl9LF9fZ2V0SW5wdXRzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLWlucHV0cyByb3cgaXRlbXMtY2VudGVyIHEtcHgtc20gcS1wYi1zbVwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCBxLW1yLXNtIHJvdyBuby13cmFwXCJ9LFwiaGV4XCI9PT10aGlzLnZpZXc/W3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2xcIn0sW3QoXCJpbnB1dFwiLHtkb21Qcm9wczp7dmFsdWU6dGhpcy5tb2RlbC5oZXh9LGF0dHJzOntyZWFkb25seTohdGhpcy5lZGl0YWJsZSx0YWJpbmRleDp0aGlzLmVkaXRhYmxlPzA6LTF9LG9uOntjaGFuZ2U6dGhpcy5fX29uSGV4Q2hhbmdlLGJsdXI6ZnVuY3Rpb24odCl7cmV0dXJuIGUuZWRpdGFibGUmJmUuX19vbkhleENoYW5nZSh0LCEwKX19LHN0YXRpY0NsYXNzOlwiZnVsbC13aWR0aCB0ZXh0LWNlbnRlciB1cHBlcmNhc2VcIn0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLWxhYmVsIHRleHQtY2VudGVyXCJ9LFtcIkhFWFwiKyh0aGlzLmhhc0FscGhhP1wiIC8gQVwiOlwiXCIpXSldKV06dGhpcy5fX2dldE51bWVyaWNJbnB1dHModCkpLHQoXCJkaXZcIixbdChRQnRuLHtwcm9wczp7ZmxhdDohMCxkaXNhYmxlOnRoaXMuZGlzYWJsZX0sb246e2NsaWNrOnRoaXMuX19uZXh0SW5wdXRWaWV3fSxzdGF0aWNDbGFzczpcInEtcGEtbm9uZVwifSxbdChcInN2Z1wiLHthdHRyczp7dmlld0JveDpcIjAgMCAyNCAyNFwifSxzdHlsZTp7d2lkdGg6XCIyNHB4XCIsaGVpZ2h0OlwiMjRweFwifX0sW3QoXCJwYXRoXCIse2F0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsZDpcIk0xMiwxOC4xN0w4LjgzLDE1TDcuNDIsMTYuNDFMMTIsMjFMMTYuNTksMTYuNDFMMTUuMTcsMTVNMTIsNS44M0wxNS4xNyw5TDE2LjU4LDcuNTlMMTIsM0w3LjQxLDcuNTlMOC44Myw5TDEyLDUuODNaXCJ9fSldKV0pXSldKX0sX19vblNhdHVyYXRpb25DaGFuZ2U6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXRoaXMuJHJlZnMuc2F0dXJhdGlvbjtpZihzKXt2YXIgbj1zLmNsaWVudFdpZHRoLG89cy5jbGllbnRIZWlnaHQscj1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9TWF0aC5taW4obixNYXRoLm1heCgwLHQtci5sZWZ0KSk7dGhpcy4kcS5pMThuLnJ0bCYmKGE9bi1hKTt2YXIgbD1NYXRoLm1pbihvLE1hdGgubWF4KDAsZS1yLnRvcCkpLGM9TWF0aC5yb3VuZCgxMDAqYS9uKSxoPU1hdGgucm91bmQoMTAwKk1hdGgubWF4KDAsTWF0aC5taW4oMSwtbC9vKzEpKSksdT1oc3ZUb1JnYih7aDp0aGlzLm1vZGVsLmgsczpjLHY6aCxhOnRoaXMuaGFzQWxwaGE/dGhpcy5tb2RlbC5hOnZvaWQgMH0pO3RoaXMubW9kZWwucz1jLHRoaXMubW9kZWwudj1oLHRoaXMuX191cGRhdGUodSxyZ2JUb0hleCh1KSxpKX19LF9fb25IdWVDaGFuZ2U6ZnVuY3Rpb24odCxlKXt2YXIgaT1oc3ZUb1JnYih7aDp0PU1hdGgucm91bmQodCksczp0aGlzLm1vZGVsLnMsdjp0aGlzLm1vZGVsLnYsYTp0aGlzLmhhc0FscGhhP3RoaXMubW9kZWwuYTp2b2lkIDB9KTt0aGlzLm1vZGVsLmg9dCx0aGlzLl9fdXBkYXRlKGkscmdiVG9IZXgoaSksZSl9LF9fb25OdW1lcmljQ2hhbmdlOmZ1bmN0aW9uKHQsZSxpLHMpe3ZhciBuPU51bWJlcih0LnRhcmdldC52YWx1ZSk7aWYoIWlzTmFOKG4pKWlmKChuPU1hdGguZmxvb3IobikpPDB8fG4+aSlzJiZ0aGlzLiRmb3JjZVVwZGF0ZSgpO2Vsc2V7dmFyIG89e3I6XCJyXCI9PT1lP246dGhpcy5tb2RlbC5yLGc6XCJnXCI9PT1lP246dGhpcy5tb2RlbC5nLGI6XCJiXCI9PT1lP246dGhpcy5tb2RlbC5iLGE6dGhpcy5oYXNBbHBoYT9cImFcIj09PWU/bjp0aGlzLm1vZGVsLmE6dm9pZCAwfTtpZihcImFcIiE9PWUpe3ZhciByPXJnYlRvSHN2KG8pO3RoaXMubW9kZWwuaD1yLmgsdGhpcy5tb2RlbC5zPXIucyx0aGlzLm1vZGVsLnY9ci52fXRoaXMuX191cGRhdGUobyxyZ2JUb0hleChvKSxzKX19LF9fb25IZXhDaGFuZ2U6ZnVuY3Rpb24odCxlKXt2YXIgaT10LnRhcmdldC52YWx1ZSxzPWkubGVuZ3RoLG49dGhpcy5oYXNBbHBoYT9bNSw5XTpbNCw3XTtpZihzPT09blswXXx8cz09PW5bMV0pe3ZhciBvPWhleFRvUmdiKGkpLHI9cmdiVG9Ic3Yobyk7dGhpcy5tb2RlbC5oPXIuaCx0aGlzLm1vZGVsLnM9ci5zLHRoaXMubW9kZWwudj1yLnYsdGhpcy5fX3VwZGF0ZShvLGksZSl9ZWxzZSBlJiZ0aGlzLiRmb3JjZVVwZGF0ZSgpfSxfX3VwZGF0ZTpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpcyxuPXRoaXMuaXNPdXRwdXRIZXg/ZTp0O3RoaXMubW9kZWwuaGV4PWUsdGhpcy5tb2RlbC5yPXQucix0aGlzLm1vZGVsLmc9dC5nLHRoaXMubW9kZWwuYj10LmIsdGhpcy5tb2RlbC5hPXRoaXMuaGFzQWxwaGE/dC5hOnZvaWQgMCx0aGlzLiRlbWl0KFwiaW5wdXRcIixuKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2kmJkpTT04uc3RyaW5naWZ5KG4pIT09SlNPTi5zdHJpbmdpZnkocy52YWx1ZSkmJnMuJGVtaXQoXCJjaGFuZ2VcIixuKX0pfSxfX25leHRJbnB1dFZpZXc6ZnVuY3Rpb24oKXt0aGlzLnZpZXc9XCJoZXhcIj09PXRoaXMudmlldz9cInJnYmFcIjpcImhleFwifSxfX3BhcnNlTW9kZWw6ZnVuY3Rpb24odCl7aWYobnVsbD09PXR8fHZvaWQgMD09PXQpcmV0dXJue2g6MCxzOjAsdjowLHI6MCxnOjAsYjowLGhleDp2b2lkIDAsYToxMDB9O3ZhciBlPVwic3RyaW5nXCI9PXR5cGVvZiB0P2hleFRvUmdiKHQudHJpbSgpKTpjbG9uZSh0KTtyZXR1cm4gdGhpcy5mb3JjZUFscGhhPT09KHZvaWQgMD09PWUuYSkmJihlLmE9dGhpcy5mb3JjZUFscGhhPzEwMDp2b2lkIDApLGUuaGV4PXJnYlRvSGV4KGUpLE9iamVjdC5hc3NpZ24oe2E6MTAwfSxlLHJnYlRvSHN2KGUpKX0sX19zYXR1cmF0aW9uUGFuOmZ1bmN0aW9uKHQpe3QuaXNGaW5hbD90aGlzLl9fZHJhZ1N0b3AodCk6dC5pc0ZpcnN0P3RoaXMuX19kcmFnU3RhcnQodCk6dGhpcy5fX2RyYWdNb3ZlKHQpfSxfX2RyYWdTdGFydDpmdW5jdGlvbih0KXtzdG9wQW5kUHJldmVudCh0LmV2dCksdGhpcy5zYXR1cmF0aW9uRHJhZ2dpbmc9ITAsdGhpcy5fX3NhdHVyYXRpb25DaGFuZ2UodCl9LF9fZHJhZ01vdmU6ZnVuY3Rpb24odCl7dGhpcy5zYXR1cmF0aW9uRHJhZ2dpbmcmJihzdG9wQW5kUHJldmVudCh0LmV2dCksdGhpcy5fX3NhdHVyYXRpb25DaGFuZ2UodCkpfSxfX2RyYWdTdG9wOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7c3RvcEFuZFByZXZlbnQodC5ldnQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnNhdHVyYXRpb25EcmFnZ2luZz0hMX0sMTAwKSx0aGlzLl9fb25TYXR1cmF0aW9uQ2hhbmdlKHQucG9zaXRpb24ubGVmdCx0LnBvc2l0aW9uLnRvcCwhMCl9LF9fc2F0dXJhdGlvbkNoYW5nZTpmdW5jdGlvbih0KXt0aGlzLl9fb25TYXR1cmF0aW9uQ2hhbmdlKHQucG9zaXRpb24ubGVmdCx0LnBvc2l0aW9uLnRvcCl9LF9fc2F0dXJhdGlvbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuc2F0dXJhdGlvbkRyYWdnaW5nfHx0aGlzLl9fb25TYXR1cmF0aW9uQ2hhbmdlKHQucGFnZVgtd2luZG93LnBhZ2VYT2Zmc2V0LHQucGFnZVktd2luZG93LnBhZ2VZT2Zmc2V0LCEwKX19fSxjb250ZW50Q3NzPXttYXhXaWR0aDpcIjk1dndcIixtYXhIZWlnaHQ6XCI5OHZoXCJ9LFFDb2xvcj17bmFtZTpcIlFDb2xvclwiLG1peGluczpbRnJhbWVNaXhpbixEaXNwbGF5TW9kZU1peGluXSxwcm9wczp7dmFsdWU6e3JlcXVpcmVkOiEwfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sZGVmYXVsdFZhbHVlOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0Om51bGx9LGZvcm1hdE1vZGVsOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYXV0b1wiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJhdXRvXCIsXCJoZXhcIixcInJnYlwiLFwiaGV4YVwiLFwicmdiYVwiXS5pbmNsdWRlcyh0KX19LGRpc3BsYXlWYWx1ZTpTdHJpbmcsb2tMYWJlbDpTdHJpbmcsY2FuY2VsTGFiZWw6U3RyaW5nfSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7IXRoaXMuZGlzYWJsZSYmdGhpcy5pc1BvcG92ZXImJih0aGlzLm1vZGVsPWNsb25lKHQpKX19LGRhdGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlzUG9wb3Zlcj97fTp7dHJhbnNpdGlvbjpcInEtbW9kYWxcIn07cmV0dXJuIHQuZm9jdXNlZD0hMSx0Lm1vZGVsPWNsb25lKHRoaXMudmFsdWV8fHRoaXMuZGVmYXVsdFZhbHVlKSx0fSxjb21wdXRlZDp7YWN0dWFsVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5VmFsdWU/dGhpcy5kaXNwbGF5VmFsdWU6dGhpcy52YWx1ZT9cInN0cmluZ1wiPT10eXBlb2YgdGhpcy52YWx1ZT90aGlzLnZhbHVlOlwicmdiXCIrKHZvaWQgMCE9PXRoaXMudmFsdWUuYT9cImFcIjpcIlwiKStcIihcIit0aGlzLnZhbHVlLnIrXCIsXCIrdGhpcy52YWx1ZS5nK1wiLFwiK3RoaXMudmFsdWUuYisodm9pZCAwIT09dGhpcy52YWx1ZS5hP1wiLFwiK3RoaXMudmFsdWUuYS8xMDA6XCJcIikrXCIpXCI6XCJcIn0sY29tcHV0ZWRDbGVhclZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuY2xlYXJWYWx1ZT90aGlzLmRlZmF1bHRWYWx1ZTp0aGlzLmNsZWFyVmFsdWV9LGlzQ2xlYXJhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdGFibGUmJnRoaXMuY2xlYXJhYmxlJiZKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXB1dGVkQ2xlYXJWYWx1ZSkhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnZhbHVlKX0sbW9kYWxCdG5Db2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbG9yfX0sbWV0aG9kczp7dG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5wb3B1cCYmdGhpc1t0aGlzLiRyZWZzLnBvcHVwLnNob3dpbmc/XCJoaWRlXCI6XCJzaG93XCJdKCl9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5kaXNhYmxlKXJldHVybiB0aGlzLl9fc2V0TW9kZWwodGhpcy52YWx1ZXx8dGhpcy5kZWZhdWx0VmFsdWUpLHRoaXMuJHJlZnMucG9wdXAuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wdXA/dGhpcy4kcmVmcy5wb3B1cC5oaWRlKCk6UHJvbWlzZS5yZXNvbHZlKCl9LF9faGFuZGxlS2V5RG93bjpmdW5jdGlvbih0KXtzd2l0Y2goZ2V0RXZlbnRLZXkodCkpe2Nhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gc3RvcEFuZFByZXZlbnQodCksdGhpcy5zaG93KCk7Y2FzZSA4OnRoaXMuaXNDbGVhcmFibGUmJnRoaXMuY2xlYXIoKX19LF9fb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZXx8dGhpcy5mb2N1c2VkfHwodGhpcy5tb2RlbD1jbG9uZSh0aGlzLnZhbHVlfHx0aGlzLmRlZmF1bHRWYWx1ZSksdGhpcy5mb2N1c2VkPSEwLHRoaXMuJGVtaXQoXCJmb2N1c1wiKSl9LF9fb25CbHVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5mb2N1c2VkJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlLiRyZWZzLnBvcHVwJiZlLiRyZWZzLnBvcHVwLnNob3dpbmcmJih0PT09ZG9jdW1lbnQuYm9keXx8ZS4kcmVmcy5wb3B1cC4kZWwuY29udGFpbnModCkpfHwoZS5fX29uSGlkZSgpLGUuaGlkZSgpKX0sMSl9LF9fb25IaWRlOmZ1bmN0aW9uKHQsZSl7KHR8fHRoaXMuaXNQb3BvdmVyKSYmdGhpcy5fX3VwZGF0ZSh0KSx0aGlzLmZvY3VzZWQmJihlP3RoaXMuJGVsLmZvY3VzKCk6KHRoaXMuJGVtaXQoXCJibHVyXCIpLHRoaXMuZm9jdXNlZD0hMSkpfSxfX3NldE1vZGVsOmZ1bmN0aW9uKHQsZSl7dGhpcy5tb2RlbD1jbG9uZSh0KSwoZXx8dGhpcy5pc1BvcG92ZXIpJiZ0aGlzLl9fdXBkYXRlKGUpfSxfX2hhc01vZGVsQ2hhbmdlZDpmdW5jdGlvbigpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpfSxfX3VwZGF0ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7ZS5fX2hhc01vZGVsQ2hhbmdlZCgpJiYoZS4kZW1pdChcImlucHV0XCIsZS5tb2RlbCksdCYmZS4kZW1pdChcImNoYW5nZVwiLGUubW9kZWwpKX0pfSxfX2dldFBpY2tlcjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMscz1bdChRQ29sb3JQaWNrZXIse3N0YXRpY0NsYXNzOlwibm8tYm9yZGVyXCIrKGU/XCIgZnVsbC13aWR0aFwiOlwiXCIpLHByb3BzOk9iamVjdC5hc3NpZ24oe30sdGhpcy4kYXR0cnMse3ZhbHVlOnRoaXMubW9kZWwsZGlzYWJsZTp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxmb3JtYXRNb2RlbDp0aGlzLmZvcm1hdE1vZGVsLGRhcms6dGhpcy5kYXJrLG5vUGFyZW50RmllbGQ6ITB9KSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX19zZXRNb2RlbCh0KX0pfX19KV07cmV0dXJuIGUmJnMucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYnV0dG9ucyBtb2RhbC1idXR0b25zLXRvcCByb3cgZnVsbC13aWR0aFwiLGNsYXNzOnRoaXMuZGFyaz9cImJnLWJsYWNrXCI6bnVsbH0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2xcIn0pLHQoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMubW9kYWxCdG5Db2xvcixmbGF0OiEwLGxhYmVsOnRoaXMuY2FuY2VsTGFiZWx8fHRoaXMuJHEuaTE4bi5sYWJlbC5jYW5jZWwsbm9SaXBwbGU6ITB9LG9uOntjbGljazpmdW5jdGlvbigpe2kuX19vbkhpZGUoITEsITApLGkuaGlkZSgpfX19KSx0aGlzLmVkaXRhYmxlP3QoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMubW9kYWxCdG5Db2xvcixmbGF0OiEwLGxhYmVsOnRoaXMub2tMYWJlbHx8dGhpcy4kcS5pMThuLmxhYmVsLnNldCxub1JpcHBsZTohMCxkaXNhYmxlOiF0aGlzLm1vZGVsfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtpLl9fb25IaWRlKCEwLCEwKSxpLmhpZGUoKX19fSk6bnVsbF0pKSxzfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoUUlucHV0RnJhbWUse3N0YXRpY0NsYXNzOlwicS1jb2xvci1pbnB1dFwiLHByb3BzOntwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcsZGlzYWJsZTp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxpbnZlcnRlZDp0aGlzLmludmVydGVkLGludmVydGVkTGlnaHQ6dGhpcy5pbnZlcnRlZExpZ2h0LGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6dGhpcy5oaWRlVW5kZXJsaW5lLGJlZm9yZTp0aGlzLmJlZm9yZSxhZnRlcjp0aGlzLmFmdGVyLGNvbG9yOnRoaXMuY29sb3Isbm9QYXJlbnRGaWVsZDp0aGlzLm5vUGFyZW50RmllbGQsZm9jdXNlZDp0aGlzLmZvY3VzZWR8fHRoaXMuJHJlZnMucG9wdXAmJnRoaXMuJHJlZnMucG9wdXAuc2hvd2luZyxmb2N1c2FibGU6ITAsbGVuZ3RoOnRoaXMuYWN0dWFsVmFsdWUubGVuZ3RofSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy50b2dnbGUsZm9jdXM6dGhpcy5fX29uRm9jdXMsYmx1cjp0aGlzLl9fb25CbHVyLGtleWRvd246dGhpcy5fX2hhbmRsZUtleURvd259fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBlbGxpcHNpc1wiLGNsYXNzOnRoaXMuZmFrZUlucHV0Q2xhc3Nlc30sW3RoaXMuZmFrZUlucHV0VmFsdWVdKSx0aGlzLmlzUG9wb3Zlcj90KFFQb3BvdmVyLHtyZWY6XCJwb3B1cFwiLHByb3BzOntjb3ZlcjohMCxrZWVwT25TY3JlZW46ITAsZGlzYWJsZTp0aGlzLmRpc2FibGUsYW5jaG9yQ2xpY2s6ITEsbWF4SGVpZ2h0OlwiMTAwdmhcIn0sc2xvdDpcImFmdGVyXCIsb246e3Nob3c6dGhpcy5fX29uRm9jdXMsaGlkZTpmdW5jdGlvbigpe3JldHVybiBlLl9fb25IaWRlKCEwLCEwKX19fSx0aGlzLl9fZ2V0UGlja2VyKHQpKTp0KFFNb2RhbCx7cmVmOlwicG9wdXBcIixzdGF0aWNDbGFzczpcIndpdGgtYmFja2Ryb3BcIixwcm9wczp7Y29udGVudENzczpjb250ZW50Q3NzLG1pbmltaXplZDohMCxwb3NpdGlvbjpudWxsLHRyYW5zaXRpb246dGhpcy50cmFuc2l0aW9ufSxvbjp7ZGlzbWlzczpmdW5jdGlvbigpe3JldHVybiBlLl9fb25IaWRlKCExLCEwKX19fSx0aGlzLl9fZ2V0UGlja2VyKHQsITApKSx0aGlzLmlzQ2xlYXJhYmxlP3QoUUljb24se3Nsb3Q6XCJhZnRlclwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFtcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5jbGVhcn0sc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIn0pOm51bGwsdChRSWNvbix7c2xvdDpcImFmdGVyXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0LmRyb3Bkb3dufSxzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwifSldKX19LFFDb250ZXh0TWVudT17bmFtZTpcIlFDb250ZXh0TWVudVwiLHByb3BzOntkaXNhYmxlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9iaWxlOnRoaXMuJHEucGxhdGZvcm0uaXMubW9iaWxlfX0sbWV0aG9kczp7aGlkZTpmdW5jdGlvbih0KXtpZih0aGlzLiRyZWZzLnBvcHVwKXJldHVybiB0aGlzLm1vYmlsZSYmdGhpcy50YXJnZXQuY2xhc3NMaXN0LnJlbW92ZShcIm5vbi1zZWxlY3RhYmxlXCIpLHRoaXMuJHJlZnMucG9wdXAuaGlkZSh0KX0sc2hvdzpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuZGlzYWJsZXx8KHRoaXMubW9iaWxlP3RoaXMuJHJlZnMucG9wdXAmJih0aGlzLmV2ZW50PXQsdGhpcy4kcmVmcy5wb3B1cC5zaG93KHQpKTp0JiYoc3RvcEFuZFByZXZlbnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UuJHJlZnMucG9wdXAmJihlLmV2ZW50PXQsZS4kcmVmcy5wb3B1cC5zaG93KHQpKX0sMTAwKSkpfSxfX2Rlc2t0b3BCb2R5SGlkZTpmdW5jdGlvbih0KXt0aGlzLiRlbC5jb250YWlucyh0LnRhcmdldCl8fHRoaXMuaGlkZSh0KX0sX19kZXNrdG9wT25TaG93OmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIix0aGlzLl9fZGVza3RvcEJvZHlIaWRlLCEwKSxkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuX19kZXNrdG9wQm9keUhpZGUsITApLHRoaXMuJGVtaXQoXCJzaG93XCIsdGhpcy5ldmVudCl9LF9fZGVza3RvcE9uSGlkZTpmdW5jdGlvbih0KXtkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLHRoaXMuX19kZXNrdG9wQm9keUhpZGUsITApLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5fX2Rlc2t0b3BCb2R5SGlkZSwhMCksdGhpcy4kZW1pdChcImhpZGVcIix0aGlzLmV2ZW50LHQpfSxfX21vYmlsZVRvdWNoU3RhcnRIYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fX21vYmlsZUNsZWFudXAoKSx0JiZ0LnRvdWNoZXMmJnQudG91Y2hlcy5sZW5ndGg+MXx8KHRoaXMudGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJub24tc2VsZWN0YWJsZVwiKSx0aGlzLnRvdWNoVGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3QmJnN0b3BBbmRQcmV2ZW50KHQpLGUuX19tb2JpbGVDbGVhbnVwKCksc2V0VGltZW91dChmdW5jdGlvbigpe2Uuc2hvdyh0KX0sMTApfSw2MDApKX0sX19tb2JpbGVDbGVhbnVwOmZ1bmN0aW9uKCl7dGhpcy50YXJnZXQuY2xhc3NMaXN0LnJlbW92ZShcIm5vbi1zZWxlY3RhYmxlXCIpLGNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZXIpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMubW9iaWxlP3QoUU1vZGFsLHtyZWY6XCJwb3B1cFwiLHByb3BzOnttaW5pbWl6ZWQ6ITB9LG9uOntzaG93OmZ1bmN0aW9uKCl7ZS4kZW1pdChcInNob3dcIixlLmV2ZW50KX0saGlkZTpmdW5jdGlvbih0KXtlLiRlbWl0KFwiaGlkZVwiLGUuZXZlbnQsdCl9fX0sdGhpcy4kc2xvdHMuZGVmYXVsdCk6dChRUG9wb3Zlcix7cmVmOlwicG9wdXBcIixwcm9wczp7YW5jaG9yQ2xpY2s6ITEsdG91Y2hQb3NpdGlvbjohMH0sb246e3Nob3c6dGhpcy5fX2Rlc2t0b3BPblNob3csaGlkZTp0aGlzLl9fZGVza3RvcE9uSGlkZX19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLm1vYmlsZT90aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QudGFyZ2V0PXQuJGVsLnBhcmVudE5vZGUsdC50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIix0Ll9fbW9iaWxlVG91Y2hTdGFydEhhbmRsZXIpLFtcInRvdWNoY2FuY2VsXCIsXCJ0b3VjaG1vdmVcIixcInRvdWNoZW5kXCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dC50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihlLHQuX19tb2JpbGVDbGVhbnVwKX0pfSk6KHRoaXMudGFyZ2V0PXRoaXMuJGVsLnBhcmVudE5vZGUsdGhpcy50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsdGhpcy5zaG93KSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubW9iaWxlPyh0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHRoaXMuX19tb2JpbGVUb3VjaFN0YXJ0SGFuZGxlciksW1widG91Y2hjYW5jZWxcIixcInRvdWNobW92ZVwiLFwidG91Y2hlbmRcIl0uZm9yRWFjaChmdW5jdGlvbihlKXt0LnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGUsdC5fX21vYmlsZUNsZWFudXApfSkpOnRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLHRoaXMuc2hvdyl9fSxtb2RlbFZhbGlkYXRvcj1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbD09PXR8fHZvaWQgMD09PXR8fFwibnVtYmVyXCI9PT1lfHxcInN0cmluZ1wiPT09ZXx8aXNEYXRlKHQpfSxpbmxpbmU9e3ZhbHVlOnt2YWxpZGF0b3I6bW9kZWxWYWxpZGF0b3IscmVxdWlyZWQ6ITB9LGRlZmF1bHRWYWx1ZTp7dHlwZTpbU3RyaW5nLE51bWJlcixEYXRlXSxkZWZhdWx0Om51bGx9LHR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJkYXRlXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImRhdGVcIixcInRpbWVcIixcImRhdGV0aW1lXCJdLmluY2x1ZGVzKHQpfX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LGRhcms6Qm9vbGVhbixtaW46e3ZhbGlkYXRvcjptb2RlbFZhbGlkYXRvcixkZWZhdWx0Om51bGx9LG1heDp7dmFsaWRhdG9yOm1vZGVsVmFsaWRhdG9yLGRlZmF1bHQ6bnVsbH0saGVhZGVyTGFiZWw6U3RyaW5nLGZpcnN0RGF5T2ZXZWVrOk51bWJlcixmb3JtYXRNb2RlbDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImF1dG9cIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wiYXV0b1wiLFwiZGF0ZVwiLFwibnVtYmVyXCIsXCJzdHJpbmdcIl0uaW5jbHVkZXModCl9fSxmb3JtYXQyNGg6e3R5cGU6W0Jvb2xlYW4sTnVtYmVyXSxkZWZhdWx0OjAsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVyblshMCwhMSwwXS5pbmNsdWRlcyh0KX19LGRlZmF1bHRWaWV3Ont0eXBlOlN0cmluZyx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wieWVhclwiLFwibW9udGhcIixcImRheVwiLFwiaG91clwiLFwibWludXRlXCJdLmluY2x1ZGVzKHQpfX0sbWluaW1hbDpCb29sZWFufSxpbnB1dD17Zm9ybWF0OlN0cmluZyxva0xhYmVsOlN0cmluZyxjYW5jZWxMYWJlbDpTdHJpbmcsZGlzcGxheVZhbHVlOlN0cmluZ30sTUlMTElTRUNPTkRTX0lOX0RBWT04NjRlNSxNSUxMSVNFQ09ORFNfSU5fSE9VUj0zNmU1LE1JTExJU0VDT05EU19JTl9NSU5VVEU9NmU0LHRva2VuPS9cXFsoKD86W15cXF1cXFxcXXxcXFxcXXxcXFxcKSopXFxdfGR7MSw0fXxNezEsNH18bXsxLDJ9fHd7MSwyfXxRb3xEb3xEezEsNH18WVkoPzpZWSk/fEh7MSwyfXxoezEsMn18c3sxLDJ9fFN7MSwzfXxaezEsMn18YXsxLDJ9fFtBUUV4WF0vZyxyZU15U1FMRGF0ZVRpbWVTdHI9L15bMC05XXs0fS1bMC05XXsyfS1bMC05XXsyfSBbMC05XXsyfTpbMC05XXsyfTpbMC05XXsyfSguWzAtOV17Nn0pPyQvO2Z1bmN0aW9uIGZvcm1hdFRpbWV6b25lKHQsZSl7dm9pZCAwPT09ZSYmKGU9XCJcIik7dmFyIGk9dD4wP1wiLVwiOlwiK1wiLHM9TWF0aC5hYnModCksbj1zJTYwO3JldHVybiBpK3BhZChNYXRoLmZsb29yKHMvNjApKStlK3BhZChuKX1mdW5jdGlvbiBzZXRNb250aCh0LGUpe3ZhciBpPW5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSxlLDAsMCwwLDAsMCkuZ2V0RGF0ZSgpO3Quc2V0TW9udGgoZS0xLE1hdGgubWluKGksdC5nZXREYXRlKCkpKX1mdW5jdGlvbiBidWlsZERhdGVWYWwodCl7cmV0dXJuIG5ldyBEYXRlKGlzU3RyaW5nKHQpJiZudWxsIT09cmVNeVNRTERhdGVUaW1lU3RyLmV4ZWModCk/dC5zdWJzdHJpbmcoMCwyMykucmVwbGFjZShcIiBcIixcIlRcIik6dCl9ZnVuY3Rpb24gZ2V0Q2hhbmdlKHQsZSxpKXt2YXIgcz1idWlsZERhdGVWYWwodCksbj1pPzE6LTE7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7aWYoXCJtb250aFwiIT09dCl7dmFyIGk9XCJ5ZWFyXCI9PT10P1wiRnVsbFllYXJcIjpjYXBpdGFsaXplKFwiZGF5c1wiPT09dD9cImRhdGVcIjp0KTtzW1wic2V0XCIraV0oc1tcImdldFwiK2ldKCkrbiplW3RdKX1lbHNlIHNldE1vbnRoKHMscy5nZXRNb250aCgpKzErbiplLm1vbnRoKX0pLHN9ZnVuY3Rpb24gaXNWYWxpZCh0KXtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm4hMDt2YXIgZT1EYXRlLnBhcnNlKHQpO3JldHVybiExPT09aXNOYU4oZSl9ZnVuY3Rpb24gYnVpbGREYXRlKHQsZSl7cmV0dXJuIGFkanVzdERhdGUobmV3IERhdGUsdCxlKX1mdW5jdGlvbiBnZXREYXlPZldlZWsodCl7dmFyIGU9YnVpbGREYXRlVmFsKHQpLmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gZ2V0V2Vla09mWWVhcih0KXt2YXIgZT1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKTtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNiklNyszKTt2YXIgaT1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksMCw0KTtpLnNldERhdGUoaS5nZXREYXRlKCktKGkuZ2V0RGF5KCkrNiklNyszKTt2YXIgcz1lLmdldFRpbWV6b25lT2Zmc2V0KCktaS5nZXRUaW1lem9uZU9mZnNldCgpO2Uuc2V0SG91cnMoZS5nZXRIb3VycygpLXMpO3ZhciBuPShlLWkpLyg3Kk1JTExJU0VDT05EU19JTl9EQVkpO3JldHVybiAxK01hdGguZmxvb3Iobil9ZnVuY3Rpb24gaXNCZXR3ZWVuRGF0ZXModCxlLGkscyl7dm9pZCAwPT09cyYmKHM9e30pO3ZhciBuPWJ1aWxkRGF0ZVZhbChlKS5nZXRUaW1lKCksbz1idWlsZERhdGVWYWwoaSkuZ2V0VGltZSgpLHI9YnVpbGREYXRlVmFsKHQpLmdldFRpbWUoKTtyZXR1cm4gcy5pbmNsdXNpdmVGcm9tJiZuLS0scy5pbmNsdXNpdmVUbyYmbysrLHI+biYmcjxvfWZ1bmN0aW9uIGFkZFRvRGF0ZSh0LGUpe3JldHVybiBnZXRDaGFuZ2UodCxlLCEwKX1mdW5jdGlvbiBzdWJ0cmFjdEZyb21EYXRlKHQsZSl7cmV0dXJuIGdldENoYW5nZSh0LGUsITEpfWZ1bmN0aW9uIGFkanVzdERhdGUodCxlLGkpe3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KSxuPVwic2V0XCIrKGk/XCJVVENcIjpcIlwiKTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtpZihcIm1vbnRoXCIhPT10KXt2YXIgaT1cInllYXJcIj09PXQ/XCJGdWxsWWVhclwiOnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtzW1wiXCIrbitpXShlW3RdKX1lbHNlIHNldE1vbnRoKHMsZS5tb250aCl9KSxzfWZ1bmN0aW9uIHN0YXJ0T2ZEYXRlKHQsZSl7dmFyIGk9YnVpbGREYXRlVmFsKHQpO3N3aXRjaChlKXtjYXNlXCJ5ZWFyXCI6aS5zZXRNb250aCgwKTtjYXNlXCJtb250aFwiOmkuc2V0RGF0ZSgxKTtjYXNlXCJkYXlcIjppLnNldEhvdXJzKDApO2Nhc2VcImhvdXJcIjppLnNldE1pbnV0ZXMoMCk7Y2FzZVwibWludXRlXCI6aS5zZXRTZWNvbmRzKDApO2Nhc2VcInNlY29uZFwiOmkuc2V0TWlsbGlzZWNvbmRzKDApfXJldHVybiBpfWZ1bmN0aW9uIGVuZE9mRGF0ZSh0LGUpe3ZhciBpPWJ1aWxkRGF0ZVZhbCh0KTtzd2l0Y2goZSl7Y2FzZVwieWVhclwiOmkuc2V0TW9udGgoMTEpO2Nhc2VcIm1vbnRoXCI6aS5zZXREYXRlKGRheXNJbk1vbnRoKHQpKTtjYXNlXCJkYXlcIjppLnNldEhvdXJzKDIzKTtjYXNlXCJob3VyXCI6aS5zZXRNaW51dGVzKDU5KTtjYXNlXCJtaW51dGVcIjppLnNldFNlY29uZHMoNTkpO2Nhc2VcInNlY29uZFwiOmkuc2V0TWlsbGlzZWNvbmRzKDU5KX1yZXR1cm4gaX1mdW5jdGlvbiBnZXRNYXhEYXRlKHQpe2Zvcih2YXIgZT1bXSxpPWFyZ3VtZW50cy5sZW5ndGgtMTtpLS0gPjA7KWVbaV09YXJndW1lbnRzW2krMV07dmFyIHM9YnVpbGREYXRlVmFsKHQpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7cz1NYXRoLm1heChzLGJ1aWxkRGF0ZVZhbCh0KSl9KSxzfWZ1bmN0aW9uIGdldE1pbkRhdGUodCl7Zm9yKHZhciBlPVtdLGk9YXJndW1lbnRzLmxlbmd0aC0xO2ktLSA+MDspZVtpXT1hcmd1bWVudHNbaSsxXTt2YXIgcz1idWlsZERhdGVWYWwodCk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih0KXtzPU1hdGgubWluKHMsYnVpbGREYXRlVmFsKHQpKX0pLHN9ZnVuY3Rpb24gZ2V0RGlmZih0LGUsaSl7cmV0dXJuKHQuZ2V0VGltZSgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpNSUxMSVNFQ09ORFNfSU5fTUlOVVRFLShlLmdldFRpbWUoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkqTUlMTElTRUNPTkRTX0lOX01JTlVURSkpL2l9ZnVuY3Rpb24gZ2V0RGF0ZURpZmYodCxlLGkpe3ZvaWQgMD09PWkmJihpPVwiZGF5c1wiKTt2YXIgcz1idWlsZERhdGVWYWwodCksbj1idWlsZERhdGVWYWwoZSk7c3dpdGNoKGkpe2Nhc2VcInllYXJzXCI6cmV0dXJuIHMuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCk7Y2FzZVwibW9udGhzXCI6cmV0dXJuIDEyKihzLmdldEZ1bGxZZWFyKCktbi5nZXRGdWxsWWVhcigpKStzLmdldE1vbnRoKCktbi5nZXRNb250aCgpO2Nhc2VcImRheXNcIjpyZXR1cm4gZ2V0RGlmZihzdGFydE9mRGF0ZShzLFwiZGF5XCIpLHN0YXJ0T2ZEYXRlKG4sXCJkYXlcIiksTUlMTElTRUNPTkRTX0lOX0RBWSk7Y2FzZVwiaG91cnNcIjpyZXR1cm4gZ2V0RGlmZihzdGFydE9mRGF0ZShzLFwiaG91clwiKSxzdGFydE9mRGF0ZShuLFwiaG91clwiKSxNSUxMSVNFQ09ORFNfSU5fSE9VUik7Y2FzZVwibWludXRlc1wiOnJldHVybiBnZXREaWZmKHN0YXJ0T2ZEYXRlKHMsXCJtaW51dGVcIiksc3RhcnRPZkRhdGUobixcIm1pbnV0ZVwiKSxNSUxMSVNFQ09ORFNfSU5fTUlOVVRFKTtjYXNlXCJzZWNvbmRzXCI6cmV0dXJuIGdldERpZmYoc3RhcnRPZkRhdGUocyxcInNlY29uZFwiKSxzdGFydE9mRGF0ZShuLFwic2Vjb25kXCIpLDFlMyl9fWZ1bmN0aW9uIGdldERheU9mWWVhcih0KXtyZXR1cm4gZ2V0RGF0ZURpZmYodCxzdGFydE9mRGF0ZSh0LFwieWVhclwiKSxcImRheXNcIikrMX1mdW5jdGlvbiBpbmZlckRhdGVGb3JtYXQodCl7cmV0dXJuIGlzRGF0ZSh0KT9cImRhdGVcIjpcIm51bWJlclwiPT10eXBlb2YgdD9cIm51bWJlclwiOlwic3RyaW5nXCJ9ZnVuY3Rpb24gY29udmVydERhdGVUb0Zvcm1hdCh0LGUsaSl7aWYodHx8MD09PXQpc3dpdGNoKGUpe2Nhc2VcImRhdGVcIjpyZXR1cm4gdDtjYXNlXCJudW1iZXJcIjpyZXR1cm4gdC5nZXRUaW1lKCk7ZGVmYXVsdDpyZXR1cm4gZm9ybWF0RGF0ZSh0LGkpfX1mdW5jdGlvbiBnZXREYXRlQmV0d2Vlbih0LGUsaSl7dmFyIHM9YnVpbGREYXRlVmFsKHQpO2lmKGUpe3ZhciBuPWJ1aWxkRGF0ZVZhbChlKTtpZihzPG4pcmV0dXJuIG59aWYoaSl7dmFyIG89YnVpbGREYXRlVmFsKGkpO2lmKHM+bylyZXR1cm4gb31yZXR1cm4gc31mdW5jdGlvbiBpc1NhbWVEYXRlKHQsZSxpKXt2YXIgcz1idWlsZERhdGVWYWwodCksbj1idWlsZERhdGVWYWwoZSk7aWYodm9pZCAwPT09aSlyZXR1cm4gcy5nZXRUaW1lKCk9PT1uLmdldFRpbWUoKTtzd2l0Y2goaSl7Y2FzZVwic2Vjb25kXCI6aWYocy5nZXRTZWNvbmRzKCkhPT1uLmdldFNlY29uZHMoKSlyZXR1cm4hMTtjYXNlXCJtaW51dGVcIjppZihzLmdldE1pbnV0ZXMoKSE9PW4uZ2V0TWludXRlcygpKXJldHVybiExO2Nhc2VcImhvdXJcIjppZihzLmdldEhvdXJzKCkhPT1uLmdldEhvdXJzKCkpcmV0dXJuITE7Y2FzZVwiZGF5XCI6aWYocy5nZXREYXRlKCkhPT1uLmdldERhdGUoKSlyZXR1cm4hMTtjYXNlXCJtb250aFwiOmlmKHMuZ2V0TW9udGgoKSE9PW4uZ2V0TW9udGgoKSlyZXR1cm4hMTtjYXNlXCJ5ZWFyXCI6aWYocy5nZXRGdWxsWWVhcigpIT09bi5nZXRGdWxsWWVhcigpKXJldHVybiExO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiZGF0ZSBpc1NhbWVEYXRlIHVua25vd24gdW5pdCBcIitpKX1yZXR1cm4hMH1mdW5jdGlvbiBkYXlzSW5Nb250aCh0KXtyZXR1cm4gbmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSsxLDApLmdldERhdGUoKX1mdW5jdGlvbiBnZXRPcmRpbmFsKHQpe2lmKHQ+PTExJiZ0PD0xMylyZXR1cm4gdCtcInRoXCI7c3dpdGNoKHQlMTApe2Nhc2UgMTpyZXR1cm4gdCtcInN0XCI7Y2FzZSAyOnJldHVybiB0K1wibmRcIjtjYXNlIDM6cmV0dXJuIHQrXCJyZFwifXJldHVybiB0K1widGhcIn12YXIgZm9ybWF0dGVyPXtZWTpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0RnVsbFllYXIoKSw0KS5zdWJzdHIoMil9LFlZWVk6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0LmdldEZ1bGxZZWFyKCksNCl9LE06ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKSsxfSxNTTpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0TW9udGgoKSsxKX0sTU1NOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSwoZS5tb250aE5hbWVzU2hvcnR8fGkxOG4ubGFuZy5kYXRlLm1vbnRoc1Nob3J0KVt0LmdldE1vbnRoKCldfSxNTU1NOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSwoZS5tb250aE5hbWVzfHxpMThuLmxhbmcuZGF0ZS5tb250aHMpW3QuZ2V0TW9udGgoKV19LFE6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbCgodC5nZXRNb250aCgpKzEpLzMpfSxRbzpmdW5jdGlvbih0KXtyZXR1cm4gZ2V0T3JkaW5hbCh0aGlzLlEodCkpfSxEOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKX0sRG86ZnVuY3Rpb24odCl7cmV0dXJuIGdldE9yZGluYWwodC5nZXREYXRlKCkpfSxERDpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0RGF0ZSgpKX0sREREOmZ1bmN0aW9uKHQpe3JldHVybiBnZXREYXlPZlllYXIodCl9LEREREQ6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZChnZXREYXlPZlllYXIodCksMyl9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCl9LGRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRkZGQodCkuc2xpY2UoMCwyKX0sZGRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSwoZS5kYXlOYW1lc1Nob3J0fHxpMThuLmxhbmcuZGF0ZS5kYXlzU2hvcnQpW3QuZ2V0RGF5KCldfSxkZGRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSwoZS5kYXlOYW1lc3x8aTE4bi5sYW5nLmRhdGUuZGF5cylbdC5nZXREYXkoKV19LEU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCl8fDd9LHc6ZnVuY3Rpb24odCl7cmV0dXJuIGdldFdlZWtPZlllYXIodCl9LHd3OmZ1bmN0aW9uKHQpe3JldHVybiBwYWQoZ2V0V2Vla09mWWVhcih0KSl9LEg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0sSEg6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0LmdldEhvdXJzKCkpfSxoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0SG91cnMoKTtyZXR1cm4gMD09PWU/MTI6ZT4xMj9lJTEyOmV9LGhoOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQodGhpcy5oKHQpKX0sbTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9LG1tOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQodC5nZXRNaW51dGVzKCkpfSxzOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX0sc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0LmdldFNlY29uZHMoKSl9LFM6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZmxvb3IodC5nZXRNaWxsaXNlY29uZHMoKS8xMDApfSxTUzpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKE1hdGguZmxvb3IodC5nZXRNaWxsaXNlY29uZHMoKS8xMCkpfSxTU1M6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0LmdldE1pbGxpc2Vjb25kcygpLDMpfSxBOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkgodCk8MTI/XCJBTVwiOlwiUE1cIn0sYTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5IKHQpPDEyP1wiYW1cIjpcInBtXCJ9LGFhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkgodCk8MTI/XCJhLm0uXCI6XCJwLm0uXCJ9LFo6ZnVuY3Rpb24odCl7cmV0dXJuIGZvcm1hdFRpbWV6b25lKHQuZ2V0VGltZXpvbmVPZmZzZXQoKSxcIjpcIil9LFpaOmZ1bmN0aW9uKHQpe3JldHVybiBmb3JtYXRUaW1lem9uZSh0LmdldFRpbWV6b25lT2Zmc2V0KCkpfSxYOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmZsb29yKHQuZ2V0VGltZSgpLzFlMyl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VGltZSgpfX07ZnVuY3Rpb24gZm9ybWF0RGF0ZSh0LGUsaSl7aWYodm9pZCAwPT09ZSYmKGU9XCJZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1pcIiksMD09PXR8fHQpe3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KTtyZXR1cm4gZS5yZXBsYWNlKHRva2VuLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW4gZm9ybWF0dGVyP2Zvcm1hdHRlclt0XShzLGkpOnZvaWQgMD09PWU/dDplLnNwbGl0KFwiXFxcXF1cIikuam9pbihcIl1cIil9KX19ZnVuY3Rpb24gbWF0Y2hGb3JtYXQodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwiXCIpLHQubWF0Y2godG9rZW4pfWZ1bmN0aW9uIGNsb25lJDEodCl7cmV0dXJuIGlzRGF0ZSh0KT9uZXcgRGF0ZSh0LmdldFRpbWUoKSk6dH12YXIgZGF0ZT17aXNWYWxpZDppc1ZhbGlkLGJ1aWxkRGF0ZTpidWlsZERhdGUsZ2V0RGF5T2ZXZWVrOmdldERheU9mV2VlayxnZXRXZWVrT2ZZZWFyOmdldFdlZWtPZlllYXIsaXNCZXR3ZWVuRGF0ZXM6aXNCZXR3ZWVuRGF0ZXMsYWRkVG9EYXRlOmFkZFRvRGF0ZSxzdWJ0cmFjdEZyb21EYXRlOnN1YnRyYWN0RnJvbURhdGUsYWRqdXN0RGF0ZTphZGp1c3REYXRlLHN0YXJ0T2ZEYXRlOnN0YXJ0T2ZEYXRlLGVuZE9mRGF0ZTplbmRPZkRhdGUsZ2V0TWF4RGF0ZTpnZXRNYXhEYXRlLGdldE1pbkRhdGU6Z2V0TWluRGF0ZSxnZXREYXRlRGlmZjpnZXREYXRlRGlmZixnZXREYXlPZlllYXI6Z2V0RGF5T2ZZZWFyLGluZmVyRGF0ZUZvcm1hdDppbmZlckRhdGVGb3JtYXQsY29udmVydERhdGVUb0Zvcm1hdDpjb252ZXJ0RGF0ZVRvRm9ybWF0LGdldERhdGVCZXR3ZWVuOmdldERhdGVCZXR3ZWVuLGlzU2FtZURhdGU6aXNTYW1lRGF0ZSxkYXlzSW5Nb250aDpkYXlzSW5Nb250aCxmb3JtYXR0ZXI6Zm9ybWF0dGVyLGZvcm1hdERhdGU6Zm9ybWF0RGF0ZSxtYXRjaEZvcm1hdDptYXRjaEZvcm1hdCxjbG9uZTpjbG9uZSQxfSxyZURhdGU9L15cXGR7NH1bXlxcZF1cXGR7Mn1bXlxcZF1cXGR7Mn0vLERhdGVNaXhpbj17cHJvcHM6aW5saW5lLGNvbXB1dGVkOntjb21wdXRlZFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuXCJkYXRlXCI9PT10aGlzLnR5cGUmJlwic3RyaW5nXCI9PT10aGlzLmZvcm1hdE1vZGVsJiZyZURhdGUudGVzdCh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLnNsaWNlKDAsMTApLnNwbGl0KC9bXlxcZF0vKS5qb2luKFwiL1wiKTp0aGlzLnZhbHVlfSxjb21wdXRlZERlZmF1bHRWYWx1ZTpmdW5jdGlvbigpe3JldHVyblwiZGF0ZVwiPT09dGhpcy50eXBlJiZcInN0cmluZ1wiPT09dGhpcy5mb3JtYXRNb2RlbCYmcmVEYXRlLnRlc3QodGhpcy5kZWZhdWx0VmFsdWUpP3RoaXMuZGVmYXVsdFZhbHVlLnNsaWNlKDAsMTApLnNwbGl0KC9bXlxcZF0rLykuam9pbihcIi9cIik6dGhpcy5kZWZhdWx0VmFsdWV9LGNvbXB1dGVkRGF0ZUZvcm1hdDpmdW5jdGlvbigpe2lmKFwiZGF0ZVwiPT09dGhpcy50eXBlJiZcInN0cmluZ1wiPT09dGhpcy5mb3JtYXRNb2RlbClyZXR1cm5cIllZWVkvTU0vREQgSEg6bW06c3NcIn0sbW9kZWw6e2dldDpmdW5jdGlvbigpe3JldHVybiBpc1ZhbGlkKHRoaXMuY29tcHV0ZWRWYWx1ZSk/bmV3IERhdGUodGhpcy5jb21wdXRlZFZhbHVlKTp0aGlzLmNvbXB1dGVkRGVmYXVsdFZhbHVlP25ldyBEYXRlKHRoaXMuY29tcHV0ZWREZWZhdWx0VmFsdWUpOnN0YXJ0T2ZEYXRlKG5ldyBEYXRlLFwiZGF5XCIpfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPWNvbnZlcnREYXRlVG9Gb3JtYXQoZ2V0RGF0ZUJldHdlZW4odCx0aGlzLnBtaW4sdGhpcy5wbWF4KSxcImF1dG9cIj09PXRoaXMuZm9ybWF0TW9kZWw/aW5mZXJEYXRlRm9ybWF0KHRoaXMudmFsdWUpOnRoaXMuZm9ybWF0TW9kZWwsdGhpcy5jb21wdXRlZERhdGVGb3JtYXQpO3RoaXMuJGVtaXQoXCJpbnB1dFwiLGkpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aXNTYW1lRGF0ZShpLGUudmFsdWUpfHxlLiRlbWl0KFwiY2hhbmdlXCIsaSl9KX19LHBtaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5taW4/bmV3IERhdGUodGhpcy5taW4pOm51bGx9LHBtYXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXg/bmV3IERhdGUodGhpcy5tYXgpOm51bGx9LHR5cGVIYXNEYXRlOmZ1bmN0aW9uKCl7cmV0dXJuXCJkYXRlXCI9PT10aGlzLnR5cGV8fFwiZGF0ZXRpbWVcIj09PXRoaXMudHlwZX0sdHlwZUhhc1RpbWU6ZnVuY3Rpb24oKXtyZXR1cm5cInRpbWVcIj09PXRoaXMudHlwZXx8XCJkYXRldGltZVwiPT09dGhpcy50eXBlfSx5ZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWwuZ2V0RnVsbFllYXIoKX0sbW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbC5nZXRNb250aCgpKzF9LGRheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsLmdldERhdGUoKX0sbWludXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWwuZ2V0TWludXRlcygpfSxjdXJyZW50WWVhcjpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX0seWVhckludGVydmFsOmZ1bmN0aW9uKCl7cmV0dXJue21pbjpudWxsIT09dGhpcy5wbWluP3RoaXMucG1pbi5nZXRGdWxsWWVhcigpOih0aGlzLnllYXJ8fHRoaXMuY3VycmVudFllYXIpLTgwLG1heDpudWxsIT09dGhpcy5wbWF4P3RoaXMucG1heC5nZXRGdWxsWWVhcigpOih0aGlzLnllYXJ8fHRoaXMuY3VycmVudFllYXIpKzgwfX0sbW9udGhJbnRlcnZhbDpmdW5jdGlvbigpe3JldHVybnttaW46dGhpcy5tb250aE1pbixtYXg6bnVsbCE9PXRoaXMucG1heCYmdGhpcy5wbWF4LmdldEZ1bGxZZWFyKCk9PT10aGlzLnllYXI/dGhpcy5wbWF4LmdldE1vbnRoKCk6MTF9fSxtb250aE1pbjpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5wbWluJiZ0aGlzLnBtaW4uZ2V0RnVsbFllYXIoKT09PXRoaXMueWVhcj90aGlzLnBtaW4uZ2V0TW9udGgoKTowfSxkYXlzSW5Nb250aDpmdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb2RlbC5nZXRNb250aCgpKzEsMCkuZ2V0RGF0ZSgpfSxlZGl0YWJsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmRpc2FibGUmJiF0aGlzLnJlYWRvbmx5fSxfX25lZWRzQm9yZGVyOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSxtZXRob2RzOnt0b2dnbGVBbVBtOmZ1bmN0aW9uKCl7aWYodGhpcy5lZGl0YWJsZSl7dmFyIHQ9dGhpcy5tb2RlbC5nZXRIb3VycygpLGU9dGhpcy5hbT8xMjotMTI7dGhpcy5tb2RlbD1uZXcgRGF0ZShuZXcgRGF0ZSh0aGlzLm1vZGVsKS5zZXRIb3Vycyh0K2UpKX19LF9fcGFyc2VUeXBlVmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm5cIm1vbnRoXCI9PT10P25vcm1hbGl6ZVRvSW50ZXJ2YWwoZSwxLDEyKTpcImRhdGVcIj09PXQ/bm9ybWFsaXplVG9JbnRlcnZhbChlLDEsdGhpcy5kYXlzSW5Nb250aCk6XCJ5ZWFyXCI9PT10P25vcm1hbGl6ZVRvSW50ZXJ2YWwoZSx0aGlzLnllYXJJbnRlcnZhbC5taW4sdGhpcy55ZWFySW50ZXJ2YWwubWF4KTpcImhvdXJcIj09PXQ/bm9ybWFsaXplVG9JbnRlcnZhbChlLDAsMjMpOlwibWludXRlXCI9PT10P25vcm1hbGl6ZVRvSW50ZXJ2YWwoZSwwLDU5KTp2b2lkIDB9fX07ZnVuY3Rpb24gY29udmVydFRvQW1QbSh0KXtyZXR1cm4gMD09PXQ/MTI6dD49MTM/dC0xMjp0fXZhciBRRGF0ZXRpbWVQaWNrZXI9e25hbWU6XCJRRGF0ZXRpbWVQaWNrZXJcIixtaXhpbnM6W0RhdGVNaXhpbixQYXJlbnRGaWVsZE1peGluLENhblJlbmRlck1peGluXSxwcm9wczp7ZGVmYXVsdFZhbHVlOltTdHJpbmcsTnVtYmVyLERhdGVdLGRpc2FibGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFufSxkaXJlY3RpdmVzOntSaXBwbGU6UmlwcGxlfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3ZpZXc6dGhpcy5fX2NhbGNWaWV3KHRoaXMuZGVmYXVsdFZpZXcpLGRyYWdnaW5nOiExLGNlbnRlckNsb2NrUG9zOjAsZmFrZVZhbHVlOnt5ZWFyOm51bGwsbW9udGg6bnVsbH19fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dHx8KHRoaXMudmlldz1bXCJkYXRlXCIsXCJkYXRldGltZVwiXS5pbmNsdWRlcyh0aGlzLnR5cGUpP1wiZGF5XCI6XCJob3VyXCIpfSx2aWV3OmZ1bmN0aW9uKCl7dGhpcy5fX3Njcm9sbFZpZXcoITApfSxtb2RlbDpmdW5jdGlvbigpe3RoaXMuZmFrZVZhbHVlLm1vbnRoIT09dGhpcy5tb250aCYmKHRoaXMuZmFrZVZhbHVlLm1vbnRoPXRoaXMubW9udGgsdGhpcy5fX3Njcm9sbFZpZXcoKSksdGhpcy5mYWtlVmFsdWUueWVhciE9PXRoaXMueWVhciYmKHRoaXMuZmFrZVZhbHVlLnllYXI9dGhpcy55ZWFyLHRoaXMuX19zY3JvbGxWaWV3KCkpfX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5kaXNhYmxlJiZ0LnB1c2goXCJkaXNhYmxlZFwiKSx0aGlzLnJlYWRvbmx5JiZ0LnB1c2goXCJyZWFkb25seVwiKSx0aGlzLmRhcmsmJnQucHVzaChcInEtZGF0ZXRpbWUtZGFya1wiKSx0aGlzLm1pbmltYWwmJnQucHVzaChcInEtZGF0ZXRpbWUtbWluaW1hbFwiKSx0aGlzLmNvbG9yJiZ0LnB1c2goXCJ0ZXh0LVwiK3RoaXMuY29sb3IpLHR9LGRhdGVBcnJvdzpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLiRxLmljb24uZGF0ZXRpbWUuYXJyb3dMZWZ0LHRoaXMuJHEuaWNvbi5kYXRldGltZS5hcnJvd1JpZ2h0XTtyZXR1cm4gdGhpcy4kcS5pMThuLnJ0bD90LnJldmVyc2UoKTp0fSxjb21wdXRlZEZvcm1hdDI0aDpmdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5mb3JtYXQyNGg/dGhpcy5mb3JtYXQyNGg6dGhpcy4kcS5pMThuLmRhdGUuZm9ybWF0MjRofSxjb21wdXRlZEZpcnN0RGF5T2ZXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZmlyc3REYXlPZldlZWs/dGhpcy5maXJzdERheU9mV2Vlazp0aGlzLiRxLmkxOG4uZGF0ZS5maXJzdERheU9mV2Vla30saGVhZGVyRGF5TmFtZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRxLmkxOG4uZGF0ZS5kYXlzU2hvcnQsZT10aGlzLmNvbXB1dGVkRmlyc3REYXlPZldlZWs7cmV0dXJuIGU+MD90LnNsaWNlKGUsNykuY29uY2F0KHQuc2xpY2UoMCxlKSk6dH0sZmFrZU1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMuZmFrZVllYXIsdGhpcy5mYWtlTW9udGgtMSwxKX0sZmFrZVllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mYWtlVmFsdWUueWVhcnx8dGhpcy55ZWFyfSxmYWtlTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mYWtlVmFsdWUubW9udGh8fHRoaXMubW9udGh9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMuZmFrZVllYXIsdGhpcy5mYWtlTW9udGgsMCkuZ2V0RGF0ZSgpfSxtb250aFN0cmluZzpmdW5jdGlvbigpe3JldHVyblwiXCIrdGhpcy4kcS5pMThuLmRhdGUubW9udGhzU2hvcnRbdGhpcy5tb250aC0xXX0sbW9udGhTdGFtcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRxLmkxOG4uZGF0ZS5tb250aHNbdGhpcy5mYWtlTW9udGgtMV0rXCIgXCIrdGhpcy5mYWtlWWVhcn0sd2Vla0RheVN0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWRlckxhYmVsfHx0aGlzLiRxLmkxOG4uZGF0ZS5kYXlzW3RoaXMubW9kZWwuZ2V0RGF5KCldfSxmaWxsZXJEYXlzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mYWtlTW9kZWwuZ2V0RGF5KCktdGhpcy5jb21wdXRlZEZpcnN0RGF5T2ZXZWVrO3JldHVybiB0PDAmJih0Kz03KSx0fSxiZWZvcmVNaW5EYXlzOmZ1bmN0aW9uKCl7aWYobnVsbD09PXRoaXMucG1pbilyZXR1cm4hMTt2YXIgdD10aGlzLnBtaW4uZ2V0RnVsbFllYXIoKSxlPXRoaXMucG1pbi5nZXRNb250aCgpKzE7cmV0dXJuIHQ9PT10aGlzLmZha2VZZWFyJiZlPT09dGhpcy5mYWtlTW9udGg/dGhpcy5wbWluLmdldERhdGUoKS0xOih0PnRoaXMuZmFrZVllYXJ8fHQ9PT10aGlzLmZha2VZZWFyJiZlPnRoaXMuZmFrZU1vbnRoKSYmdGhpcy5kYXlzSW5Nb250aH0sYWZ0ZXJNYXhEYXlzOmZ1bmN0aW9uKCl7aWYobnVsbD09PXRoaXMucG1heClyZXR1cm4hMTt2YXIgdD10aGlzLnBtYXguZ2V0RnVsbFllYXIoKSxlPXRoaXMucG1heC5nZXRNb250aCgpKzE7cmV0dXJuIHQ9PT10aGlzLmZha2VZZWFyJiZlPT09dGhpcy5mYWtlTW9udGg/dGhpcy5kYXlzSW5Nb250aC10aGlzLm1heERheToodDx0aGlzLmZha2VZZWFyfHx0PT09dGhpcy5mYWtlWWVhciYmZTx0aGlzLmZha2VNb250aCkmJnRoaXMuZGF5c0luTW9udGh9LG1heERheTpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5wbWF4P3RoaXMucG1heC5nZXREYXRlKCk6dGhpcy5kYXlzSW5Nb250aH0sZGF0ZUludGVydmFsOmZ1bmN0aW9uKCl7dmFyIHQ9bnVsbD09PXRoaXMucG1heHx8ITE9PT10aGlzLmFmdGVyTWF4RGF5cz8wOnRoaXMuYWZ0ZXJNYXhEYXlzO3JldHVybiB0aGlzLmJlZm9yZU1pbkRheXM+MHx8dD97bWluOnRoaXMuYmVmb3JlTWluRGF5cz4wP3RoaXMuYmVmb3JlTWluRGF5cysxOjEsbWF4OnRoaXMuZGF5c0luTW9udGgtdH06e21pbjoxLG1heDp0aGlzLmRheXNJbk1vbnRofX0saG91cjpmdW5jdGlvbigpe3ZhciB0PXRoaXMubW9kZWwuZ2V0SG91cnMoKTtyZXR1cm4gdGhpcy5jb21wdXRlZEZvcm1hdDI0aD90OmNvbnZlcnRUb0FtUG0odCl9LG1pbnV0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsLmdldE1pbnV0ZXMoKX0sYW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbC5nZXRIb3VycygpPD0xMX0sY2xvY2tQb2ludGVyU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD1cIm1pbnV0ZVwiPT09dGhpcy52aWV3LGU9dD82MDoxMixpPVtcInJvdGF0ZShcIisoTWF0aC5yb3VuZCgodD90aGlzLm1pbnV0ZTp0aGlzLmhvdXIpKigzNjAvZSkpLTE4MCkrXCJkZWcpXCJdO3JldHVybiB0fHwhdGhpcy5jb21wdXRlZEZvcm1hdDI0aHx8dGhpcy5ob3VyPjAmJnRoaXMuaG91cjwxM3x8aS5wdXNoKFwic2NhbGUoLjcsIC43KVwiKSx7dHJhbnNmb3JtOmkuam9pbihcIiBcIil9fSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIGlzVmFsaWQodGhpcy52YWx1ZSl9LHRvZGF5OmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IERhdGU7cmV0dXJuIGlzU2FtZURhdGUodCx0aGlzLmZha2VNb2RlbCxcIm1vbnRoXCIpP3QuZ2V0RGF0ZSgpOi0xfX0sbWV0aG9kczp7c2V0WWVhcjpmdW5jdGlvbih0LGUpe3RoaXMuZWRpdGFibGUmJihlfHwodGhpcy52aWV3PVwibW9udGhcIiksdGhpcy5tb2RlbD1uZXcgRGF0ZShuZXcgRGF0ZSh0aGlzLm1vZGVsKS5zZXRGdWxsWWVhcih0aGlzLl9fcGFyc2VUeXBlVmFsdWUoXCJ5ZWFyXCIsdCkpKSl9LHNldE1vbnRoOmZ1bmN0aW9uKHQsZSl7dGhpcy5lZGl0YWJsZSYmKGV8fCh0aGlzLnZpZXc9XCJkYXlcIiksdGhpcy5tb2RlbD1hZGp1c3REYXRlKHRoaXMubW9kZWwse21vbnRoOnR9KSl9LG1vdmVGYWtlTW9udGg6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mYWtlTW9udGgrKHQ+MD8xOi0xKSxpPXRoaXMuZmFrZVllYXI7aWYoZTwxPyhlPTEyLGktPTEpOmU+MTImJihlPTEsaSs9MSksbnVsbCE9PXRoaXMucG1pbiYmdD4wKXt2YXIgcz10aGlzLnBtaW4uZ2V0RnVsbFllYXIoKSxuPXRoaXMucG1pbi5nZXRNb250aCgpKzE7aTxzPyhpPXMsZT1uKTppPT09cyYmZTxuJiYoZT1uKX1pZihudWxsIT09dGhpcy5wbWF4JiZ0PDApe3ZhciBvPXRoaXMucG1heC5nZXRGdWxsWWVhcigpLHI9dGhpcy5wbWF4LmdldE1vbnRoKCkrMTtpPm8/KGk9byxlPXIpOmk9PT1vJiZlPnImJihlPXIpfXRoaXMuZmFrZVZhbHVlLnllYXI9aSx0aGlzLmZha2VWYWx1ZS5tb250aD1lfSxzZXREYXk6ZnVuY3Rpb24odCxlLGkscyl7aWYodGhpcy5lZGl0YWJsZSl7aWYoaSYmcyl7dmFyIG49YWRqdXN0RGF0ZSh0aGlzLm1vZGVsLHttb250aDpzfSk7bi5zZXRGdWxsWWVhcih0aGlzLl9fcGFyc2VUeXBlVmFsdWUoXCJ5ZWFyXCIsaSkpLG4uc2V0RGF0ZSh0aGlzLl9fcGFyc2VUeXBlVmFsdWUoXCJkYXRlXCIsdCkpLHRoaXMubW9kZWw9bn1lbHNlIHRoaXMubW9kZWw9bmV3IERhdGUobmV3IERhdGUodGhpcy5tb2RlbCkuc2V0RGF0ZSh0aGlzLl9fcGFyc2VUeXBlVmFsdWUoXCJkYXRlXCIsdCkpKTtlfHxcImRhdGVcIiE9PXRoaXMudHlwZT9lfHwodGhpcy52aWV3PVwiaG91clwiKToodGhpcy4kZW1pdChcImNhbkNsb3NlXCIpLHRoaXMubWluaW1hbCYmdGhpcy5zZXRWaWV3KHRoaXMuZGVmYXVsdFZpZXcpKX19LHNldEhvdXI6ZnVuY3Rpb24odCl7dGhpcy5lZGl0YWJsZSYmKHQ9dGhpcy5fX3BhcnNlVHlwZVZhbHVlKFwiaG91clwiLHQpLCF0aGlzLmNvbXB1dGVkRm9ybWF0MjRoJiZ0PDEyJiYhdGhpcy5hbSYmKHQrPTEyKSx0aGlzLm1vZGVsPW5ldyBEYXRlKG5ldyBEYXRlKHRoaXMubW9kZWwpLnNldEhvdXJzKHQpKSl9LHNldE1pbnV0ZTpmdW5jdGlvbih0KXt0aGlzLmVkaXRhYmxlJiYodGhpcy5tb2RlbD1uZXcgRGF0ZShuZXcgRGF0ZSh0aGlzLm1vZGVsKS5zZXRNaW51dGVzKHRoaXMuX19wYXJzZVR5cGVWYWx1ZShcIm1pbnV0ZVwiLHQpKSkpfSxzZXRWaWV3OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19jYWxjVmlldyh0KTt0aGlzLnZpZXchPT1lJiYodGhpcy52aWV3PWUpfSxfX2NhbGNWaWV3OmZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2VcInRpbWVcIjpyZXR1cm5bXCJob3VyXCIsXCJtaW51dGVcIl0uaW5jbHVkZXModCk/dDpcImhvdXJcIjtjYXNlXCJkYXRlXCI6cmV0dXJuW1wieWVhclwiLFwibW9udGhcIixcImRheVwiXS5pbmNsdWRlcyh0KT90OlwiZGF5XCI7ZGVmYXVsdDpyZXR1cm5bXCJ5ZWFyXCIsXCJtb250aFwiLFwiZGF5XCIsXCJob3VyXCIsXCJtaW51dGVcIl0uaW5jbHVkZXModCk/dDpcImRheVwifX0sX19wYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4odDwxMD9lfHxcIjBcIjpcIlwiKSt0fSxfX3Njcm9sbFZpZXc6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihcInllYXJcIj09PXRoaXMudmlld3x8XCJtb250aFwiPT09dGhpcy52aWV3KXt0JiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fX3Njcm9sbFZpZXcoKX0sMjAwKTt2YXIgaT10aGlzLiRyZWZzLnNlbGVjdG9yLHM9aT9pLnF1ZXJ5U2VsZWN0b3IoXCIucS1idG46bm90KC5hY3RpdmUpXCIpOm51bGwsbj1pP2kucXVlcnlTZWxlY3RvcihcIi5xLWJ0bi5hY3RpdmVcIik6bnVsbCxvPWk/aS5vZmZzZXRIZWlnaHQ6MDt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3ZhciB0PVwieWVhclwiPT09ZS52aWV3P2UueWVhci1lLnllYXJJbnRlcnZhbC5taW46ZS5tb250aC1lLm1vbnRoTWluLTE7byYmbiYmKGkuc2Nyb2xsVG9wPXQqKHM/cy5vZmZzZXRIZWlnaHQ6MCkrKG4ub2Zmc2V0SGVpZ2h0LW8pLzIpfSl9fSxfX2RyYWdTdGFydDpmdW5jdGlvbih0LGUpe3N0b3BBbmRQcmV2ZW50KHQpO3ZhciBpPXRoaXMuJHJlZnMuY2xvY2sscz1vZmZzZXQoaSk7dGhpcy5jZW50ZXJDbG9ja1Bvcz17dG9wOnMudG9wK2hlaWdodChpKS8yLGxlZnQ6cy5sZWZ0K3dpZHRoKGkpLzJ9LHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5fX3VwZGF0ZUNsb2NrKHQsZSl9LF9fZHJhZ01vdmU6ZnVuY3Rpb24odCl7dGhpcy5kcmFnZ2luZyYmKHN0b3BBbmRQcmV2ZW50KHQpLHRoaXMuX191cGRhdGVDbG9jayh0KSl9LF9fZHJhZ1N0b3A6ZnVuY3Rpb24odCxlKXtzdG9wQW5kUHJldmVudCh0KSx0aGlzLmRyYWdnaW5nPSExLHZvaWQgMCE9PXQmJnRoaXMuX191cGRhdGVDbG9jayh0LGUpLFwibWludXRlXCI9PT10aGlzLnZpZXc/KHRoaXMuJGVtaXQoXCJjYW5DbG9zZVwiKSx0aGlzLm1pbmltYWwmJnRoaXMuc2V0Vmlldyh0aGlzLmRlZmF1bHRWaWV3KSk6dGhpcy52aWV3PVwibWludXRlXCJ9LF9fdXBkYXRlQ2xvY2s6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1lKXJldHVybiB0aGlzW1wiaG91clwiPT09dGhpcy52aWV3P1wic2V0SG91clwiOlwic2V0TWludXRlXCJdKGUpO3ZhciBpPXBvc2l0aW9uKHQpLHM9TWF0aC5hYnMoaS50b3AtdGhpcy5jZW50ZXJDbG9ja1Bvcy50b3ApLG49TWF0aC5zcXJ0KE1hdGgucG93KE1hdGguYWJzKGkudG9wLXRoaXMuY2VudGVyQ2xvY2tQb3MudG9wKSwyKStNYXRoLnBvdyhNYXRoLmFicyhpLmxlZnQtdGhpcy5jZW50ZXJDbG9ja1Bvcy5sZWZ0KSwyKSksbz1NYXRoLmFzaW4ocy9uKSooMTgwL01hdGguUEkpO2lmKG89aS50b3A8dGhpcy5jZW50ZXJDbG9ja1Bvcy50b3A/dGhpcy5jZW50ZXJDbG9ja1Bvcy5sZWZ0PGkubGVmdD85MC1vOjI3MCtvOnRoaXMuY2VudGVyQ2xvY2tQb3MubGVmdDxpLmxlZnQ/bys5MDoyNzAtbyxcImhvdXJcIj09PXRoaXMudmlldyl7dmFyIHI9TWF0aC5yb3VuZChvLzMwKTt0aGlzLmNvbXB1dGVkRm9ybWF0MjRoJiYocj9uPDg1JiYocis9MTIpOnI9bjw4NT8wOjEyKSx0aGlzLnNldEhvdXIocil9ZWxzZSB0aGlzLnNldE1pbnV0ZShNYXRoLnJvdW5kKG8vNikpfSxfX3JlcGVhdFRpbWVvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDEwMCwzMDAtdCp0KjEwKX0sX19nZXRUb3BTZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bdGhpcy50eXBlSGFzRGF0ZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS13ZWVrZGF5c3RyaW5nXCJ9LFt0aGlzLndlZWtEYXlTdHJpbmddKTp2b2lkIDAsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbFwifSldO2lmKHRoaXMudHlwZUhhc0RhdGUpe3ZhciBzPVt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1kYXRlc3RyaW5nIHJvdyBqdXN0aWZ5LWNlbnRlciBpdGVtcy1lbmRcIn0sW3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1saW5rIHNtYWxsIGNvbC1hdXRvIGNvbC1tZC0xMlwiLGNsYXNzOnthY3RpdmU6XCJtb250aFwiPT09dGhpcy52aWV3fSxhdHRyczp7dGFiaW5kZXg6MH0sb246e2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9Z2V0RXZlbnRLZXkodCk7Mzg9PT1pfHwzOT09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0TW9udGgoZS5tb250aC0xLCEwKSk6NDA9PT1pfHwzNz09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0TW9udGgoZS5tb250aCsxLCEwKSk6MTMhPT1pJiYyMCE9PWl8fChlLnZpZXc9XCJtb250aFwiKX19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp0aGlzLmRpc2FibGU/e306e2NsaWNrOmZ1bmN0aW9uKCl7ZS52aWV3PVwibW9udGhcIn19fSxbdGhpcy5tb250aFN0cmluZ10pXSksdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmsgY29sLWF1dG8gY29sLW1kLTEyXCIsY2xhc3M6e2FjdGl2ZTpcImRheVwiPT09dGhpcy52aWV3fSxhdHRyczp7dGFiaW5kZXg6MH0sb246e2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9Z2V0RXZlbnRLZXkodCk7Mzc9PT1pfHwzOD09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0RGF5KGUuZGF5LSgzNz09PWk/MTo3KSwhMCkpOjM5PT09aXx8NDA9PT1pPyhzdG9wQW5kUHJldmVudCh0KSxlLnNldERheShlLmRheSsoMzk9PT1pPzE6NyksITApKToxMyE9PWkmJjIwIT09aXx8KGUudmlldz1cImRheVwiKX19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp0aGlzLmRpc2FibGU/e306e2NsaWNrOmZ1bmN0aW9uKCl7ZS52aWV3PVwiZGF5XCJ9fX0sW3RoaXMuZGF5XSldKSx0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtbGluayBzbWFsbCBjb2wtYXV0byBjb2wtbWQtMTJcIixjbGFzczp7YWN0aXZlOlwieWVhclwiPT09dGhpcy52aWV3fSxhdHRyczp7dGFiaW5kZXg6MH0sb246e2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9Z2V0RXZlbnRLZXkodCk7Mzg9PT1pfHwzOT09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0WWVhcihlLnllYXItMSwhMCkpOjQwPT09aXx8Mzc9PT1pPyhzdG9wQW5kUHJldmVudCh0KSxlLnNldFllYXIoZS55ZWFyKzEsITApKToxMyE9PWkmJjIwIT09aXx8KGUudmlldz1cInllYXJcIil9fX0sW3QoXCJzcGFuXCIse2F0dHJzOnt0YWJpbmRleDotMX0sb246dGhpcy5kaXNhYmxlP3t9OntjbGljazpmdW5jdGlvbigpe2Uudmlldz1cInllYXJcIn19fSxbdGhpcy55ZWFyXSldKV0pXTtpLnB1c2godChcImRpdlwiLHMpKX1pZih0aGlzLnR5cGVIYXNUaW1lKXt2YXIgbj0hdGhpcy5jb21wdXRlZEZvcm1hdDI0aCYmdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWFtcG0gY29sdW1uXCIsYXR0cnM6e3RhYmluZGV4OjB9LG9uOnRoaXMuX19hbVBtRXZlbnRzfSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmtcIixjbGFzczp7YWN0aXZlOnRoaXMuYW19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp7Y2xpY2s6dGhpcy50b2dnbGVBbVBtfX0sW1wiQU1cIl0pXSksdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmtcIixjbGFzczp7YWN0aXZlOiF0aGlzLmFtfX0sW3QoXCJzcGFuXCIse2F0dHJzOnt0YWJpbmRleDotMX0sb246e2NsaWNrOnRoaXMudG9nZ2xlQW1QbX19LFtcIlBNXCJdKV0pXSksbz1bdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJjb2wtYXV0b1wiLHN0eWxlOnt0ZXh0QWxpZ246XCJyaWdodFwifX0sW3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1saW5rXCIsc3R5bGU6e3RleHRBbGlnbjpcInJpZ2h0XCJ9LGNsYXNzOnthY3RpdmU6XCJob3VyXCI9PT10aGlzLnZpZXd9LGF0dHJzOnt0YWJpbmRleDowfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT1nZXRFdmVudEtleSh0KTs0MD09PWl8fDM3PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRIb3VyKGUuaG91ci0xLCEwKSk6Mzg9PT1pfHwzOT09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0SG91cihlLmhvdXIrMSwhMCkpOjEzIT09aSYmMjAhPT1pfHwoZS52aWV3PVwiaG91clwiKX19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp0aGlzLmRpc2FibGU/e306e2NsaWNrOmZ1bmN0aW9uKCl7ZS52aWV3PVwiaG91clwifX19LFt0aGlzLmNvbXB1dGVkRm9ybWF0MjRoP3RoaXMuX19wYWQodGhpcy5ob3VyKTp0aGlzLmhvdXJdKV0pXSksdChcInNwYW5cIix7c3R5bGU6XCJvcGFjaXR5OjAuNjtcIn0sW1wiOlwiXSksdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJjb2wtYXV0byByb3cgbm8td3JhcCBpdGVtcy1jZW50ZXJcIixzdHlsZTp7dGV4dEFsaWduOlwibGVmdFwifX0sW3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1saW5rXCIsc3R5bGU6e3RleHRBbGlnbjpcImxlZnRcIn0sY2xhc3M6e2FjdGl2ZTpcIm1pbnV0ZVwiPT09dGhpcy52aWV3fSxhdHRyczp7dGFiaW5kZXg6MH0sb246e2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9Z2V0RXZlbnRLZXkodCk7NDA9PT1pfHwzNz09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0TWludXRlKGUubWludXRlLTEsITApKTozOD09PWl8fDM5PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRNaW51dGUoZS5taW51dGUrMSwhMCkpOjEzIT09aSYmMjAhPT1pfHwoZS52aWV3PVwibWludXRlXCIpfX19LFt0KFwic3BhblwiLHthdHRyczp7dGFiaW5kZXg6LTF9LG9uOnRoaXMuZGlzYWJsZT97fTp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnZpZXc9XCJtaW51dGVcIn19fSxbdGhpcy5fX3BhZCh0aGlzLm1pbnV0ZSldKV0pLG5dKV07aS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLXRpbWUgcm93IHNjcm9sbCBmbGV4LWNlbnRlclwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtY2xvY2tzdHJpbmcgY29sIHJvdyBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydFwifSxvKV0pKX1yZXR1cm4gaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2xcIn0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1oZWFkZXIgY29sdW1uIG5vLXdyYXAgaXRlbXMtY2VudGVyXCJ9LGkpfSxfX2dldFllYXJWaWV3OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLGk9W3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wtZ3Jvd1wifSldLHM9ZnVuY3Rpb24ocyl7aS5wdXNoKHQoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWJ0biBuby1ib3JkZXItcmFkaXVzXCIsY2xhc3M6e2FjdGl2ZTpzPT09ZS55ZWFyfSxhdHRyczp7dGFiaW5kZXg6LTF9LHByb3BzOntmbGF0OiEwLGRpc2FibGU6IWUuZWRpdGFibGV9LG9uOntjbGljazpmdW5jdGlvbigpe2Uuc2V0WWVhcihzKX19fSxbc10pKX0sbj10aGlzLnllYXJJbnRlcnZhbC5taW47bjw9dGhpcy55ZWFySW50ZXJ2YWwubWF4O24rKylzKG4pO3JldHVybiBpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbC1ncm93XCJ9KSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtdmlldy15ZWFyIGZpdCBjb2x1bW4gbm8td3JhcFwifSxpKX0sX19nZXRNb250aFZpZXc6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsaT1bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbC1ncm93XCJ9KV0scz1mdW5jdGlvbihzKXtpLnB1c2godChRQnRuLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtYnRuIG5vLWJvcmRlci1yYWRpdXNcIixjbGFzczp7YWN0aXZlOnMrMT09PWUubW9udGh9LGF0dHJzOnt0YWJpbmRleDotMX0scHJvcHM6e2ZsYXQ6ITAsZGlzYWJsZTohZS5lZGl0YWJsZX0sb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5zZXRNb250aChzKzEpfX19LFtlLiRxLmkxOG4uZGF0ZS5tb250aHNbc11dKSl9LG49dGhpcy5tb250aEludGVydmFsLm1pbjtuPD10aGlzLm1vbnRoSW50ZXJ2YWwubWF4O24rKylzKG4pO3JldHVybiBpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbC1ncm93XCJ9KSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtdmlldy1tb250aCBmaXQgY29sdW1uIG5vLXdyYXBcIn0saSl9LF9fZ2V0RGF5VmlldzpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxpPVtdLHM9dGhpcy5mYWtlTW9udGg9PT10aGlzLm1vbnRoJiZ0aGlzLmZha2VZZWFyPT09dGhpcy55ZWFyP3RoaXMuZGF5Oi0xLG49MTtuPD10aGlzLmZpbGxlckRheXM7bisrKWkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1maWxsZXJkYXlcIn0pKTtpZih0aGlzLm1pbilmb3IodmFyIG89MTtvPD10aGlzLmJlZm9yZU1pbkRheXM7bysrKWkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciBqdXN0aWZ5LWNlbnRlciBkaXNhYmxlZFwiLGNsYXNzOntcInEtZGF0ZXRpbWUtZGF5LWFjdGl2ZVwiOmUuaXNWYWxpZCYmbz09PXN9fSxbdChcInNwYW5cIixbb10pXSkpO2Zvcih2YXIgcj10aGlzLmRhdGVJbnRlcnZhbCxhPXIubWluLGw9ci5tYXgsYz1mdW5jdGlvbihuKXtpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXIganVzdGlmeS1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIixjbGFzczpbZS5jb2xvciYmbj09PXM/XCJ0ZXh0LVwiK2UuY29sb3I6bnVsbCx7XCJxLWRhdGV0aW1lLWRheS1hY3RpdmVcIjplLmlzVmFsaWQmJm49PT1zLFwicS1kYXRldGltZS1kYXktdG9kYXlcIjpuPT09ZS50b2RheSxkaXNhYmxlZDohZS5lZGl0YWJsZX1dLG9uOntjbGljazpmdW5jdGlvbigpe2Uuc2V0RGF5KG4sITEsZS5mYWtlWWVhcixlLmZha2VNb250aCl9fX0sW3QoXCJzcGFuXCIsW25dKV0pKX0saD1hO2g8PWw7aCsrKWMoaCk7aWYodGhpcy5tYXgpZm9yKHZhciB1PTE7dTw9dGhpcy5hZnRlck1heERheXM7dSsrKWkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciBqdXN0aWZ5LWNlbnRlciBkaXNhYmxlZFwiLGNsYXNzOntcInEtZGF0ZXRpbWUtZGF5LWFjdGl2ZVwiOmUuaXNWYWxpZCYmdStlLm1heERheT09PXN9fSxbdChcInNwYW5cIixbdStlLm1heERheV0pXSkpO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS12aWV3LWRheVwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXJcIn0sW3QoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWFycm93XCIsYXR0cnM6e3RhYmluZGV4Oi0xfSxwcm9wczp7cm91bmQ6ITAsZGVuc2U6ITAsZmxhdDohMCxpY29uOnRoaXMuZGF0ZUFycm93WzBdLHJlcGVhdFRpbWVvdXQ6dGhpcy5fX3JlcGVhdFRpbWVvdXQsZGlzYWJsZTp0aGlzLmJlZm9yZU1pbkRheXM+MHx8dGhpcy5kaXNhYmxlfHx0aGlzLnJlYWRvbmx5fSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLm1vdmVGYWtlTW9udGgoLTEpfX19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtZGF0ZXRpbWUtbW9udGgtc3RhbXBcIn0sW3RoaXMubW9udGhTdGFtcF0pLHQoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWFycm93XCIsYXR0cnM6e3RhYmluZGV4Oi0xfSxwcm9wczp7cm91bmQ6ITAsZGVuc2U6ITAsZmxhdDohMCxpY29uOnRoaXMuZGF0ZUFycm93WzFdLHJlcGVhdFRpbWVvdXQ6dGhpcy5fX3JlcGVhdFRpbWVvdXQsZGlzYWJsZTp0aGlzLmFmdGVyTWF4RGF5cz4wfHx0aGlzLmRpc2FibGV8fHRoaXMucmVhZG9ubHl9LG9uOntjbGljazpmdW5jdGlvbigpe2UubW92ZUZha2VNb250aCgxKX19fSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS13ZWVrZGF5cyByb3cgbm8td3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydFwifSx0aGlzLmhlYWRlckRheU5hbWVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdChcImRpdlwiLFtlXSl9KSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtZGF5cyByb3cgd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBjb250ZW50LWNlbnRlclwifSxpKV0pfSxfX2dldENsb2NrVmlldzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W107aWYoXCJob3VyXCI9PT10aGlzLnZpZXcpe3ZhciBzLG4sbz1cIlwiO3RoaXMuY29tcHV0ZWRGb3JtYXQyNGg/KHM9MCxuPTI0LG89XCIgZm10MjRcIik6KHM9MSxuPTEzKTtmb3IodmFyIHI9ZnVuY3Rpb24ocyl7aS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uXCIrbyxjbGFzczpbXCJxLWRhdGV0aW1lLWNsb2NrLXBvcy1cIitzLHM9PT1lLmhvdXI/XCJhY3RpdmVcIjpcIlwiXSxvbjp7XCIhbW91c2Vkb3duXCI6ZnVuY3Rpb24odCl7cmV0dXJuIGUuX19kcmFnU3RhcnQodCxzKX0sXCIhbW91c2V1cFwiOmZ1bmN0aW9uKHQpe3JldHVybiBlLl9fZHJhZ1N0b3AodCxzKX19fSxbdChcInNwYW5cIixbc3x8XCIwMFwiXSldKSl9LGE9czthPG47YSsrKXIoYSl9ZWxzZSBmb3IodmFyIGw9MDtsPDEyO2wrKyl7dmFyIGM9NSpsO2kucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1jbG9jay1wb3NpdGlvblwiLGNsYXNzOltcInEtZGF0ZXRpbWUtY2xvY2stcG9zLVwiK2wsYz09PWUubWludXRlP1wiYWN0aXZlXCI6XCJcIl19LFt0KFwic3BhblwiLFtjXSldKSl9cmV0dXJuIHQoXCJkaXZcIix7cmVmOlwiY2xvY2tcIixrZXk6XCJjbG9ja1wiK3RoaXMudmlldyxzdGF0aWNDbGFzczpcImNvbHVtbiBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXIganVzdGlmeS1jZW50ZXJcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrIGN1cnNvci1wb2ludGVyXCIsb246e21vdXNlZG93bjp0aGlzLl9fZHJhZ1N0YXJ0LG1vdXNlbW92ZTp0aGlzLl9fZHJhZ01vdmUsbW91c2V1cDp0aGlzLl9fZHJhZ1N0b3AsdG91Y2hzdGFydDp0aGlzLl9fZHJhZ1N0YXJ0LHRvdWNobW92ZTp0aGlzLl9fZHJhZ01vdmUsdG91Y2hlbmQ6dGhpcy5fX2RyYWdTdG9wfX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrLWNpcmNsZSBmdWxsLXdpZHRoIGZ1bGwtaGVpZ2h0XCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1jbG9jay1jZW50ZXJcIn0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrLXBvaW50ZXJcIixzdHlsZTp0aGlzLmNsb2NrUG9pbnRlclN0eWxlfSxbdChcInNwYW5cIildKSxpXSldKV0pfSxfX2dldFZpZXdTZWN0aW9uOmZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLnZpZXcpe2Nhc2VcInllYXJcIjpyZXR1cm4gdGhpcy5fX2dldFllYXJWaWV3KHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIHRoaXMuX19nZXRNb250aFZpZXcodCk7Y2FzZVwiZGF5XCI6cmV0dXJuIHRoaXMuX19nZXREYXlWaWV3KHQpO2Nhc2VcImhvdXJcIjpjYXNlXCJtaW51dGVcIjpyZXR1cm4gdGhpcy5fX2dldENsb2NrVmlldyh0KX19fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9fYW1QbUV2ZW50cz17a2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaT1nZXRFdmVudEtleShlKTtbMTMsMzIsMzcsMzgsMzksNDBdLmluY2x1ZGVzKGkpJiYoc3RvcEFuZFByZXZlbnQoZSksdC50b2dnbGVBbVBtKCkpfX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fc2Nyb2xsVmlldyghMCl9LHJlbmRlcjpmdW5jdGlvbih0KXtpZih0aGlzLmNhblJlbmRlcilyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUgcm93XCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbIXRoaXMubWluaW1hbCYmdGhpcy5fX2dldFRvcFNlY3Rpb24odCl8fHZvaWQgMCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1jb250ZW50IHNjcm9sbFwifSxbdChcImRpdlwiLHtyZWY6XCJzZWxlY3RvclwiLHN0YXRpY0NsYXNzOlwicS1kYXRldGltZS1zZWxlY3RvciByb3cgaXRlbXMtY2VudGVyXCJ9LFt0KFwiZGl2XCIse2NsYXNzOlwiY29sXCJ9KSx0aGlzLl9fZ2V0Vmlld1NlY3Rpb24odCksdChcImRpdlwiLHtjbGFzczpcImNvbFwifSldKV0uY29uY2F0KHRoaXMuJHNsb3RzLmRlZmF1bHQpKV0pfX0sY29udGVudENzcyQxPXttYXhXaWR0aDpcIjk1dndcIixtYXhIZWlnaHQ6XCI5OHZoXCJ9LFFEYXRldGltZT17bmFtZTpcIlFEYXRldGltZVwiLG1peGluczpbRnJhbWVNaXhpbixEaXNwbGF5TW9kZU1peGluLENhblJlbmRlck1peGluXSxwcm9wczpPYmplY3QuYXNzaWduKHt9LGlucHV0LGlubGluZSksd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpeyF0aGlzLmRpc2FibGUmJnRoaXMuaXNQb3BvdmVyJiYodGhpcy5tb2RlbD1jbG9uZSQxKHQpKX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dHJhbnNpdGlvbjpudWxsLG1vZGVsOm51bGwsZm9jdXNlZDohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm1vZGVsPWNsb25lJDEodGhpcy5jb21wdXRlZFZhbHVlKSx0aGlzLmlzUG9wb3Zlcnx8KHRoaXMudHJhbnNpdGlvbj1cInEtbW9kYWxcIil9LGNvbXB1dGVkOntjb21wdXRlZEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvcm1hdD90aGlzLmZvcm1hdDpcImRhdGVcIj09PXRoaXMudHlwZT9cIllZWVkvTU0vRERcIjpcInRpbWVcIj09PXRoaXMudHlwZT9cIkhIOm1tXCI6XCJZWVlZL01NL0REIEhIOm1tOnNzXCJ9LGFjdHVhbFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheVZhbHVlP3RoaXMuZGlzcGxheVZhbHVlOmlzVmFsaWQodGhpcy52YWx1ZSkmJnRoaXMuY2FuUmVuZGVyP2Zvcm1hdERhdGUodGhpcy52YWx1ZSx0aGlzLmNvbXB1dGVkRm9ybWF0LHRoaXMuJHEuaTE4bi5kYXRlKTpcIlwifSxjb21wdXRlZFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGlzVmFsaWQodGhpcy52YWx1ZSk/dGhpcy52YWx1ZTp0aGlzLmRlZmF1bHRWYWx1ZX0sY29tcHV0ZWRDbGVhclZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuY2xlYXJWYWx1ZT90aGlzLmRlZmF1bHRWYWx1ZTp0aGlzLmNsZWFyVmFsdWV9LGlzQ2xlYXJhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdGFibGUmJnRoaXMuY2xlYXJhYmxlJiYhaXNTYW1lRGF0ZSh0aGlzLmNvbXB1dGVkQ2xlYXJWYWx1ZSx0aGlzLnZhbHVlKX0sbW9kYWxCdG5Db2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbG9yfX0sbWV0aG9kczp7dG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5wb3B1cCYmdGhpc1t0aGlzLiRyZWZzLnBvcHVwLnNob3dpbmc/XCJoaWRlXCI6XCJzaG93XCJdKCl9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5kaXNhYmxlKXJldHVybiB0aGlzLl9fc2V0TW9kZWwodGhpcy5jb21wdXRlZFZhbHVlKSx0aGlzLiRyZWZzLnBvcHVwLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLnBvcHVwP3RoaXMuJHJlZnMucG9wdXAuaGlkZSgpOlByb21pc2UucmVzb2x2ZSgpfSxfX2hhbmRsZUtleURvd246ZnVuY3Rpb24odCl7c3dpdGNoKGdldEV2ZW50S2V5KHQpKXtjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIHN0b3BBbmRQcmV2ZW50KHQpLHRoaXMuc2hvdygpO2Nhc2UgODp0aGlzLmlzQ2xlYXJhYmxlJiZ0aGlzLmNsZWFyKCl9fSxfX29uRm9jdXM6ZnVuY3Rpb24oKXtpZighdGhpcy5kaXNhYmxlJiYhdGhpcy5mb2N1c2VkKXt2YXIgdD10aGlzLiRyZWZzLnRhcmdldDt0JiZ0LnNldFZpZXcodGhpcy5kZWZhdWx0VmlldywhMCksdGhpcy5tb2RlbD1jbG9uZSQxKHRoaXMuY29tcHV0ZWRWYWx1ZSksdGhpcy5mb2N1c2VkPSEwLHRoaXMuJGVtaXQoXCJmb2N1c1wiKX19LF9fb25CbHVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5mb2N1c2VkJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlLiRyZWZzLnBvcHVwJiZlLiRyZWZzLnBvcHVwLnNob3dpbmcmJih0PT09ZG9jdW1lbnQuYm9keXx8ZS4kcmVmcy5wb3B1cC4kZWwuY29udGFpbnModCkpfHwoZS5fX29uSGlkZSgpLGUuaGlkZSgpKX0sMSl9LF9fb25IaWRlOmZ1bmN0aW9uKHQsZSl7KHR8fHRoaXMuaXNQb3BvdmVyKSYmdGhpcy5fX3VwZGF0ZSh0KSx0aGlzLmZvY3VzZWQmJihlP3RoaXMuJGVsLmZvY3VzKCk6KHRoaXMuJGVtaXQoXCJibHVyXCIpLHRoaXMuZm9jdXNlZD0hMSkpfSxfX3NldE1vZGVsOmZ1bmN0aW9uKHQsZSl7dGhpcy5tb2RlbD1jbG9uZSQxKHQpLChlfHx0aGlzLmlzUG9wb3ZlcikmJnRoaXMuX191cGRhdGUoZSl9LF9fdXBkYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpc1NhbWVEYXRlKGUubW9kZWwsZS52YWx1ZSl8fChlLiRlbWl0KFwiaW5wdXRcIixlLm1vZGVsKSx0JiZlLiRlbWl0KFwiY2hhbmdlXCIsZS5tb2RlbCkpfSl9LF9fc2Nyb2xsVmlldzpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHJlZnMudGFyZ2V0O3QmJnQuX19zY3JvbGxWaWV3KCl9LF9fZ2V0UGlja2VyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztyZXR1cm5bdChRRGF0ZXRpbWVQaWNrZXIse3JlZjpcInRhcmdldFwiLHN0YXRpY0NsYXNzOlwibm8tYm9yZGVyXCIsY2xhc3M6e1wiZGF0ZXRpbWUtaW9zLW1vZGFsXCI6ITF9LHByb3BzOnt0eXBlOnRoaXMudHlwZSxtaW46dGhpcy5taW4sbWF4OnRoaXMubWF4LGhlYWRlckxhYmVsOnRoaXMuaGVhZGVyTGFiZWwsbWluaW1hbDp0aGlzLm1pbmltYWwsZm9ybWF0TW9kZWw6dGhpcy5mb3JtYXRNb2RlbCxmb3JtYXQyNGg6dGhpcy5mb3JtYXQyNGgsZmlyc3REYXlPZldlZWs6dGhpcy5maXJzdERheU9mV2VlayxkZWZhdWx0Vmlldzp0aGlzLmRlZmF1bHRWaWV3LGNvbG9yOnRoaXMuaW52ZXJ0ZWRMaWdodD9cImdyZXktN1wiOnRoaXMuY29sb3IsZGFyazp0aGlzLmRhcmssdmFsdWU6dGhpcy5tb2RlbCxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LG5vUGFyZW50RmllbGQ6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gaS4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gaS5fX3NldE1vZGVsKHQpfSl9LGNhbkNsb3NlOmZ1bmN0aW9uKCl7aS5pc1BvcG92ZXImJmkuaGlkZSgpfX19LFtlP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJtb2RhbC1idXR0b25zIG1vZGFsLWJ1dHRvbnMtdG9wIHJvdyBmdWxsLXdpZHRoXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sXCJ9KSx0KFFCdG4se3Byb3BzOntjb2xvcjp0aGlzLm1vZGFsQnRuQ29sb3IsZmxhdDohMCxsYWJlbDp0aGlzLmNhbmNlbExhYmVsfHx0aGlzLiRxLmkxOG4ubGFiZWwuY2FuY2VsLG5vUmlwcGxlOiEwfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtpLl9fb25IaWRlKCExLCEwKSxpLmhpZGUoKX19fSksdGhpcy5lZGl0YWJsZT90KFFCdG4se3Byb3BzOntjb2xvcjp0aGlzLm1vZGFsQnRuQ29sb3IsZmxhdDohMCxsYWJlbDp0aGlzLm9rTGFiZWx8fHRoaXMuJHEuaTE4bi5sYWJlbC5zZXQsbm9SaXBwbGU6ITAsZGlzYWJsZTohdGhpcy5tb2RlbH0sb246e2NsaWNrOmZ1bmN0aW9uKCl7aS5fX29uSGlkZSghMCwhMCksaS5oaWRlKCl9fX0pOm51bGxdKTpudWxsXSldfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoUUlucHV0RnJhbWUse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1pbnB1dFwiLHByb3BzOntwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcsZGlzYWJsZTp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxpbnZlcnRlZDp0aGlzLmludmVydGVkLGludmVydGVkTGlnaHQ6dGhpcy5pbnZlcnRlZExpZ2h0LGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6dGhpcy5oaWRlVW5kZXJsaW5lLGJlZm9yZTp0aGlzLmJlZm9yZSxhZnRlcjp0aGlzLmFmdGVyLGNvbG9yOnRoaXMuY29sb3Isbm9QYXJlbnRGaWVsZDp0aGlzLm5vUGFyZW50RmllbGQsZm9jdXNlZDp0aGlzLmZvY3VzZWR8fHRoaXMuJHJlZnMucG9wdXAmJnRoaXMuJHJlZnMucG9wdXAuc2hvd2luZyxmb2N1c2FibGU6ITAsbGVuZ3RoOnRoaXMuYWN0dWFsVmFsdWUubGVuZ3RofSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy50b2dnbGUsZm9jdXM6dGhpcy5fX29uRm9jdXMsYmx1cjp0aGlzLl9fb25CbHVyLGtleWRvd246dGhpcy5fX2hhbmRsZUtleURvd259fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBlbGxpcHNpc1wiLGNsYXNzOnRoaXMuZmFrZUlucHV0Q2xhc3Nlc30sW3RoaXMuZmFrZUlucHV0VmFsdWVdKSx0aGlzLmlzUG9wb3Zlcj90KFFQb3BvdmVyLHtyZWY6XCJwb3B1cFwiLHByb3BzOntjb3ZlcjohMCxrZWVwT25TY3JlZW46ITAsZGlzYWJsZTp0aGlzLmRpc2FibGUsYW5jaG9yQ2xpY2s6ITEsbWF4SGVpZ2h0OlwiMTAwdmhcIn0sc2xvdDpcImFmdGVyXCIsb246e3Nob3c6ZnVuY3Rpb24odCl7ZS5fX29uRm9jdXModCksZS5fX3Njcm9sbFZpZXcoKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBlLl9fb25IaWRlKCEwLCEwKX19fSx0aGlzLl9fZ2V0UGlja2VyKHQpKTp0KFFNb2RhbCx7cmVmOlwicG9wdXBcIixzdGF0aWNDbGFzczpcIndpdGgtYmFja2Ryb3AgcS1kYXRldGltZS1tb2RhbFwiLHByb3BzOntjb250ZW50Q3NzOmNvbnRlbnRDc3MkMSxtaW5pbWl6ZWQ6ITAscG9zaXRpb246bnVsbCx0cmFuc2l0aW9uOnRoaXMudHJhbnNpdGlvbn0sb246e3Nob3c6dGhpcy5fX3Njcm9sbFZpZXcsZGlzbWlzczpmdW5jdGlvbigpe3JldHVybiBlLl9fb25IaWRlKCExLCEwKX19fSx0aGlzLl9fZ2V0UGlja2VyKHQsITApKSx0aGlzLmlzQ2xlYXJhYmxlP3QoUUljb24se3Nsb3Q6XCJhZnRlclwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFtcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5jbGVhcn0sc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIn0pOm51bGwsdChRSWNvbix7c2xvdDpcImFmdGVyXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0LmRyb3Bkb3dufSxzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwifSldKX19LGlucHV0VHlwZXM9W1widGV4dFwiLFwidGV4dGFyZWFcIixcImVtYWlsXCIsXCJzZWFyY2hcIixcInRlbFwiLFwiZmlsZVwiLFwibnVtYmVyXCIsXCJwYXNzd29yZFwiLFwidXJsXCIsXCJ0aW1lXCIsXCJkYXRlXCJdLFFSZXNpemVPYnNlcnZhYmxlPXtuYW1lOlwiUVJlc2l6ZU9ic2VydmFibGVcIixtaXhpbnM6W0NhblJlbmRlck1peGluXSxwcm9wczp7ZGVib3VuY2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTAwfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc09ic2VydmVyP3t9Ont1cmw6dGhpcy4kcS5wbGF0Zm9ybS5pcy5pZT9udWxsOlwiYWJvdXQ6YmxhbmtcIn19LG1ldGhvZHM6e29uUmVzaXplOmZ1bmN0aW9uKCl7aWYodGhpcy50aW1lcj1udWxsLHRoaXMuJGVsJiZ0aGlzLiRlbC5wYXJlbnROb2RlKXt2YXIgdD10aGlzLiRlbC5wYXJlbnROb2RlLGU9e3dpZHRoOnQub2Zmc2V0V2lkdGgsaGVpZ2h0OnQub2Zmc2V0SGVpZ2h0fTtlLndpZHRoPT09dGhpcy5zaXplLndpZHRoJiZlLmhlaWdodD09PXRoaXMuc2l6ZS5oZWlnaHR8fCh0aGlzLnNpemU9ZSx0aGlzLiRlbWl0KFwicmVzaXplXCIsdGhpcy5zaXplKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKHQpeyEwPT09dHx8MD09PXRoaXMuZGVib3VuY2U/dGhpcy5vblJlc2l6ZSgpOnRoaXMudGltZXJ8fCh0aGlzLnRpbWVyPXNldFRpbWVvdXQodGhpcy5vblJlc2l6ZSx0aGlzLmRlYm91bmNlKSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLmNhblJlbmRlciYmIXRoaXMuaGFzT2JzZXJ2ZXIpcmV0dXJuIHQoXCJvYmplY3RcIix7c3R5bGU6dGhpcy5zdHlsZSxhdHRyczp7dGFiaW5kZXg6LTEsdHlwZTpcInRleHQvaHRtbFwiLGRhdGE6dGhpcy51cmwsXCJhcmlhLWhpZGRlblwiOiEwfSxvbjp7bG9hZDpmdW5jdGlvbigpe2UuJGVsLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0Vmlldy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsZS50cmlnZ2VyLGxpc3Rlbk9wdHMucGFzc2l2ZSksZS50cmlnZ2VyKCEwKX19fSl9LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMuc2l6ZT17d2lkdGg6LTEsaGVpZ2h0Oi0xfSxpc1NTUnx8KHRoaXMuaGFzT2JzZXJ2ZXI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJlc2l6ZU9ic2VydmVyLHRoaXMuaGFzT2JzZXJ2ZXJ8fCh0aGlzLnN0eWxlPSh0aGlzLiRxLnBsYXRmb3JtLmlzLmllP1widmlzaWJpbGl0eTpoaWRkZW47XCI6XCJcIikrXCJkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDotMTtcIikpfSxtb3VudGVkOmZ1bmN0aW9uKCl7aWYodGhpcy5oYXNPYnNlcnZlcilyZXR1cm4gdGhpcy5vYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy50cmlnZ2VyKSx2b2lkIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLiRlbC5wYXJlbnROb2RlKTt0aGlzLnRyaWdnZXIoITApLHRoaXMuJHEucGxhdGZvcm0uaXMuaWUmJih0aGlzLnVybD1cImFib3V0OmJsYW5rXCIpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuaGFzT2JzZXJ2ZXI/dGhpcy4kZWwucGFyZW50Tm9kZSYmdGhpcy5vYnNlcnZlci51bm9ic2VydmUodGhpcy4kZWwucGFyZW50Tm9kZSk6dGhpcy4kZWwuY29udGVudERvY3VtZW50JiZ0aGlzLiRlbC5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMudHJpZ2dlcixsaXN0ZW5PcHRzLnBhc3NpdmUpfX0sUUlucHV0PXtuYW1lOlwiUUlucHV0XCIsbWl4aW5zOltGcmFtZU1peGluLElucHV0TWl4aW5dLHByb3BzOnt2YWx1ZTp7cmVxdWlyZWQ6ITB9LHR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJ0ZXh0XCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiBpbnB1dFR5cGVzLmluY2x1ZGVzKHQpfX0sYWxpZ246e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLmluY2x1ZGVzKHQpfX0sbm9QYXNzVG9nZ2xlOkJvb2xlYW4sbnVtZXJpY0tleWJvYXJkVG9nZ2xlOkJvb2xlYW4scmVhZG9ubHk6Qm9vbGVhbixkZWNpbWFsczpOdW1iZXIsc3RlcDpOdW1iZXIsdXBwZXJDYXNlOkJvb2xlYW4sbG93ZXJDYXNlOkJvb2xlYW4saW5pdGlhbFNob3dQYXNzd29yZDpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm57c2hvd1Bhc3M6dGhpcy5pbml0aWFsU2hvd1Bhc3N3b3JkLHNob3dOdW1iZXI6ITAsbW9kZWw6dGhpcy52YWx1ZSx3YXRjaGVyOm51bGwsYXV0b2ZpbGxlZDohMSxzaGFkb3c6e3ZhbDp0aGlzLm1vZGVsLHNldDp0aGlzLl9fc2V0LHNldE5hdjp0aGlzLl9fc2V0LGxvYWRpbmc6ITEsd2F0Y2hlZDowLGlzRWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdC5lZGl0YWJsZX0saXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGFya30saGFzRm9jdXM6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXQuJHJlZnMuaW5wdXR9LHJlZ2lzdGVyOmZ1bmN0aW9uKCl7dC5zaGFkb3cud2F0Y2hlZCs9MSx0Ll9fd2F0Y2hlclJlZ2lzdGVyKCl9LHVucmVnaXN0ZXI6ZnVuY3Rpb24oKXt0LnNoYWRvdy53YXRjaGVkPU1hdGgubWF4KDAsdC5zaGFkb3cud2F0Y2hlZC0xKSx0Ll9fd2F0Y2hlclVucmVnaXN0ZXIoKX0sZ2V0RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdC4kcmVmcy5pbnB1dH19fX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXBhcnNlRmxvYXQodGhpcy5tb2RlbCksaT1wYXJzZUZsb2F0KHQpOyghdGhpcy5pc051bWJlcnx8dGhpcy5pc051bWJlckVycm9yfHxpc05hTihlKXx8aXNOYU4oaSl8fGUhPT1pKSYmKHRoaXMubW9kZWw9dCksdGhpcy5pc051bWJlckVycm9yPSExLHRoaXMuaXNOZWdaZXJvPSExfSxpc1RleHRhcmVhOmZ1bmN0aW9uKHQpe3RoaXNbdD9cIl9fd2F0Y2hlclJlZ2lzdGVyXCI6XCJfX3dhdGNoZXJVbnJlZ2lzdGVyXCJdKCl9LFwiJGF0dHJzLnJvd3NcIjpmdW5jdGlvbigpe3RoaXMuaXNUZXh0YXJlYSYmdGhpcy5fX3VwZGF0ZUFyZWEoKX19LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57X19pbnB1dDp0aGlzLnNoYWRvd319LGNvbXB1dGVkOntpc051bWJlcjpmdW5jdGlvbigpe3JldHVyblwibnVtYmVyXCI9PT10aGlzLnR5cGV9LGlzUGFzc3dvcmQ6ZnVuY3Rpb24oKXtyZXR1cm5cInBhc3N3b3JkXCI9PT10aGlzLnR5cGV9LGlzVGV4dGFyZWE6ZnVuY3Rpb24oKXtyZXR1cm5cInRleHRhcmVhXCI9PT10aGlzLnR5cGV9LGlzTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRpbmd8fHRoaXMuc2hhZG93LndhdGNoZWQmJnRoaXMuc2hhZG93LmxvYWRpbmd9LGtleWJvYXJkVG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHEucGxhdGZvcm0uaXMubW9iaWxlJiZ0aGlzLmlzTnVtYmVyJiZ0aGlzLm51bWVyaWNLZXlib2FyZFRvZ2dsZX0saW5wdXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNQYXNzd29yZD90aGlzLnNob3dQYXNzJiZ0aGlzLmVkaXRhYmxlP1widGV4dFwiOlwicGFzc3dvcmRcIjp0aGlzLmlzTnVtYmVyP3RoaXMuc2hvd051bWJlcnx8IXRoaXMuZWRpdGFibGU/XCJudW1iZXJcIjpcInRleHRcIjp0aGlzLnR5cGV9LGlucHV0Q2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmFsaWduJiZ0LnB1c2goXCJ0ZXh0LVwiK3RoaXMuYWxpZ24pLHRoaXMuYXV0b2ZpbGxlZCYmdC5wdXNoKFwicS1pbnB1dC1hdXRvZmlsbFwiKSx0fSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMubW9kZWwmJnZvaWQgMCE9PXRoaXMubW9kZWw/KFwiXCIrdGhpcy5tb2RlbCkubGVuZ3RoOjB9LGNvbXB1dGVkQ2xlYXJWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLmNsZWFyVmFsdWU/dGhpcy5pc051bWJlcj9udWxsOlwiXCI6dGhpcy5jbGVhclZhbHVlfSxjb21wdXRlZFN0ZXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGVwfHwodGhpcy5kZWNpbWFscz9NYXRoLnBvdygxMCwtdGhpcy5kZWNpbWFscyk6XCJhbnlcIil9LGZyYW1lUHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm57cHJlZml4OnRoaXMucHJlZml4LHN1ZmZpeDp0aGlzLnN1ZmZpeCxzdGFja0xhYmVsOnRoaXMuc3RhY2tMYWJlbCxmbG9hdExhYmVsOnRoaXMuZmxvYXRMYWJlbCxwbGFjZWhvbGRlcjp0aGlzLnBsYWNlaG9sZGVyLGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcsZGlzYWJsZTp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxpbnZlcnRlZDp0aGlzLmludmVydGVkLGludmVydGVkTGlnaHQ6dGhpcy5pbnZlcnRlZExpZ2h0LGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6dGhpcy5oaWRlVW5kZXJsaW5lLGJlZm9yZTp0aGlzLmJlZm9yZSxhZnRlcjp0aGlzLmFmdGVyLGNvbG9yOnRoaXMuY29sb3Isbm9QYXJlbnRGaWVsZDp0aGlzLm5vUGFyZW50RmllbGQsZm9jdXNlZDp0aGlzLmZvY3VzZWQsbGVuZ3RoOnRoaXMuYXV0b2ZpbGxlZCt0aGlzLmxlbmd0aH19fSxtZXRob2RzOnt0b2dnbGVQYXNzOmZ1bmN0aW9uKCl7dGhpcy5zaG93UGFzcz0hdGhpcy5zaG93UGFzcyxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5mb2N1cygpfSx0b2dnbGVOdW1iZXI6ZnVuY3Rpb24oKXt0aGlzLnNob3dOdW1iZXI9IXRoaXMuc2hvd051bWJlcixjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5mb2N1cygpfSxfX2NsZWFyVGltZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dCh0LnRpbWVyKX0pfSxfX29uQW5pbWF0aW9uU3RhcnQ6ZnVuY3Rpb24odCl7aWYoMD09PXQuYW5pbWF0aW9uTmFtZS5pbmRleE9mKFwid2Via2l0LWF1dG9maWxsLVwiKSl7dmFyIGU9XCJ3ZWJraXQtYXV0b2ZpbGwtb25cIj09PXQuYW5pbWF0aW9uTmFtZTtpZihlIT09dGhpcy5hdXRvZmlsbGVkKXJldHVybiB0LnZhbHVlPXRoaXMuYXV0b2ZpbGxlZD1lLHQuZWw9dGhpcyx0aGlzLiRlbWl0KFwiYXV0b2ZpbGxcIix0KX19LF9fc2V0TW9kZWw6ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZm9jdXMoKSx0aGlzLl9fc2V0KHRoaXMuaXNOdW1iZXImJjA9PT10P3Q6dHx8KHRoaXMuaXNOdW1iZXI/bnVsbDpcIlwiKSwhMCl9LF9fc2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxzPXQmJnQudGFyZ2V0P3QudGFyZ2V0LnZhbHVlOnQ7aWYodGhpcy5pc051bWJlcil7dGhpcy5pc05lZ1plcm89MS9zPT0tMS8wO3ZhciBuPXRoaXMuaXNOZWdaZXJvPy0wOnM7aWYodGhpcy5tb2RlbD1zLHM9cGFyc2VGbG9hdChzKSxpc05hTihzKXx8dGhpcy5pc05lZ1plcm8pcmV0dXJuIHRoaXMuaXNOdW1iZXJFcnJvcj0hMCx2b2lkKGUmJih0aGlzLiRlbWl0KFwiaW5wdXRcIixuKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe1N0cmluZygxL24pIT09U3RyaW5nKDEvaS52YWx1ZSkmJmkuJGVtaXQoXCJjaGFuZ2VcIixuKX0pKSk7dGhpcy5pc051bWJlckVycm9yPSExLE51bWJlci5pc0ludGVnZXIodGhpcy5kZWNpbWFscykmJihzPXBhcnNlRmxvYXQocy50b0ZpeGVkKHRoaXMuZGVjaW1hbHMpKSl9ZWxzZSB0aGlzLmxvd2VyQ2FzZT9zPXMudG9Mb3dlckNhc2UoKTp0aGlzLnVwcGVyQ2FzZSYmKHM9cy50b1VwcGVyQ2FzZSgpKSx0aGlzLm1vZGVsPXM7dGhpcy4kZW1pdChcImlucHV0XCIscyksZSYmdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeShzKSE9PUpTT04uc3RyaW5naWZ5KGkudmFsdWUpJiZpLiRlbWl0KFwiY2hhbmdlXCIscyl9KX0sX191cGRhdGVBcmVhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kcmVmcy5zaGFkb3csZT10aGlzLiRyZWZzLmlucHV0O2lmKHQmJmUpe3ZhciBpPXQuc2Nyb2xsSGVpZ2h0LHM9YmV0d2VlbihpLHQub2Zmc2V0SGVpZ2h0LHRoaXMubWF4SGVpZ2h0fHxpKTtlLnN0eWxlLmhlaWdodD1zK1wicHhcIixlLnN0eWxlLm92ZXJmbG93WT10aGlzLm1heEhlaWdodCYmczxpP1wic2Nyb2xsXCI6XCJoaWRkZW5cIn19LF9fd2F0Y2hlcjpmdW5jdGlvbih0KXt0aGlzLmlzVGV4dGFyZWEmJnRoaXMuX191cGRhdGVBcmVhKCksdGhpcy5zaGFkb3cud2F0Y2hlZCYmKHRoaXMuc2hhZG93LnZhbD10KX0sX193YXRjaGVyUmVnaXN0ZXI6ZnVuY3Rpb24oKXt0aGlzLndhdGNoZXJ8fCh0aGlzLndhdGNoZXI9dGhpcy4kd2F0Y2goXCJtb2RlbFwiLHRoaXMuX193YXRjaGVyKSl9LF9fd2F0Y2hlclVucmVnaXN0ZXI6ZnVuY3Rpb24odCl7dGhpcy53YXRjaGVyJiYodHx8IXRoaXMuaXNUZXh0YXJlYSYmIXRoaXMuc2hhZG93LndhdGNoZWQpJiYodGhpcy53YXRjaGVyKCksdGhpcy53YXRjaGVyPW51bGwpfSxfX2dldFRleHRhcmVhOmZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5hc3NpZ24oe3Jvd3M6MX0sdGhpcy4kYXR0cnMpO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHJvdyByZWxhdGl2ZS1wb3NpdGlvblwifSxbdChRUmVzaXplT2JzZXJ2YWJsZSx7b246e3Jlc2l6ZTp0aGlzLl9fdXBkYXRlQXJlYX19KSx0KFwidGV4dGFyZWFcIix7cmVmOlwic2hhZG93XCIsc3RhdGljQ2xhc3M6XCJjb2wgcS1pbnB1dC10YXJnZXQgcS1pbnB1dC1zaGFkb3cgYWJzb2x1dGUtdG9wXCIsZG9tUHJvcHM6e3ZhbHVlOnRoaXMubW9kZWx9LGF0dHJzOmV9KSx0KFwidGV4dGFyZWFcIix7cmVmOlwiaW5wdXRcIixzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBxLWlucHV0LWFyZWFcIixhdHRyczpPYmplY3QuYXNzaWduKHt9LGUse3BsYWNlaG9sZGVyOnRoaXMuaW5wdXRQbGFjZWhvbGRlcixkaXNhYmxlZDp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seX0pLGRvbVByb3BzOnt2YWx1ZTp0aGlzLm1vZGVsfSxvbjp7aW5wdXQ6dGhpcy5fX3NldCxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbklucHV0Qmx1cixrZXlkb3duOnRoaXMuX19vbktleWRvd24sa2V5dXA6dGhpcy5fX29uS2V5dXAscGFzdGU6dGhpcy5fX29uUGFzdGV9fSldKX0sX19nZXRJbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdChcImlucHV0XCIse3JlZjpcImlucHV0XCIsc3RhdGljQ2xhc3M6XCJjb2wgcS1pbnB1dC10YXJnZXQgcS1uby1pbnB1dC1zcGlubmVyIGVsbGlwc2lzXCIsY2xhc3M6dGhpcy5pbnB1dENsYXNzZXMsYXR0cnM6T2JqZWN0LmFzc2lnbih7fSx0aGlzLiRhdHRycyx7dHlwZTp0aGlzLmlucHV0VHlwZSxwbGFjZWhvbGRlcjp0aGlzLmlucHV0UGxhY2Vob2xkZXIsZGlzYWJsZWQ6dGhpcy5kaXNhYmxlLHJlYWRvbmx5OnRoaXMucmVhZG9ubHksc3RlcDp0aGlzLmNvbXB1dGVkU3RlcH0pLGRvbVByb3BzOnt2YWx1ZTp0aGlzLm1vZGVsfSxvbjp7aW5wdXQ6dGhpcy5fX3NldCxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbklucHV0Qmx1cixrZXlkb3duOnRoaXMuX19vbktleWRvd24sa2V5dXA6dGhpcy5fX29uS2V5dXAscGFzdGU6dGhpcy5fX29uUGFzdGUsYW5pbWF0aW9uc3RhcnQ6dGhpcy5fX29uQW5pbWF0aW9uU3RhcnR9fSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5fX3VwZGF0ZUFyZWE9ZnJhbWVEZWJvdW5jZSh0aGlzLl9fdXBkYXRlQXJlYSksdGhpcy5pc1RleHRhcmVhJiYodGhpcy5fX3VwZGF0ZUFyZWEoKSx0aGlzLl9fd2F0Y2hlclJlZ2lzdGVyKCkpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX3dhdGNoZXJVbnJlZ2lzdGVyKCEwKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFFJbnB1dEZyYW1lLHtzdGF0aWNDbGFzczpcInEtaW5wdXRcIixwcm9wczp0aGlzLmZyYW1lUHJvcHMsb246e2NsaWNrOnRoaXMuX19vbkNsaWNrLGZvY3VzOnRoaXMuX19vbkZvY3VzLHBhc3RlOnRoaXMuX19vblBhc3RlfX0sW10uY29uY2F0KHRoaXMuJHNsb3RzLmJlZm9yZSkuY29uY2F0KFt0aGlzLmlzVGV4dGFyZWE/dGhpcy5fX2dldFRleHRhcmVhKHQpOnRoaXMuX19nZXRJbnB1dCh0KSwhdGhpcy5kaXNhYmxlJiZ0aGlzLmlzUGFzc3dvcmQmJiF0aGlzLm5vUGFzc1RvZ2dsZSYmKHRoaXMuaW5pdGlhbFNob3dQYXNzd29yZHx8dGhpcy5sZW5ndGgpJiZ0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFt0aGlzLnNob3dQYXNzP1wic2hvd1Bhc3NcIjpcImhpZGVQYXNzXCJdfSxuYXRpdmVPbjp7bW91c2Vkb3duOnRoaXMuX19jbGVhclRpbWVyLHRvdWNoc3RhcnQ6dGhpcy5fX2NsZWFyVGltZXIsY2xpY2s6dGhpcy50b2dnbGVQYXNzfX0pfHx2b2lkIDAsdGhpcy5lZGl0YWJsZSYmdGhpcy5rZXlib2FyZFRvZ2dsZSYmdChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uaW5wdXRbdGhpcy5zaG93TnVtYmVyP1wic2hvd051bWJlclwiOlwiaGlkZU51bWJlclwiXX0sbmF0aXZlT246e21vdXNlZG93bjp0aGlzLl9fY2xlYXJUaW1lcix0b3VjaHN0YXJ0OnRoaXMuX19jbGVhclRpbWVyLGNsaWNrOnRoaXMudG9nZ2xlTnVtYmVyfX0pfHx2b2lkIDAsdGhpcy5pc0NsZWFyYWJsZSYmdChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uaW5wdXRbXCJjbGVhclwiKyh0aGlzLmlzSW52ZXJ0ZWQ/XCJJbnZlcnRlZFwiOlwiXCIpXX0sbmF0aXZlT246e21vdXNlZG93bjp0aGlzLl9fY2xlYXJUaW1lcix0b3VjaHN0YXJ0OnRoaXMuX19jbGVhclRpbWVyLGNsaWNrOnRoaXMuY2xlYXJ9fSl8fHZvaWQgMCx0aGlzLmlzTG9hZGluZyYmKHRoaXMuJHNsb3RzLmxvYWRpbmc/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHNsb3Q6XCJhZnRlclwifSx0aGlzLiRzbG90cy5sb2FkaW5nKTp0KFFTcGlubmVyLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntzaXplOlwiMjRweFwifX0pKXx8dm9pZCAwXSkuY29uY2F0KHRoaXMuJHNsb3RzLmFmdGVyKS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiYWJzb2x1dGUtZnVsbCBuby1wb2ludGVyLWV2ZW50c1wiLHNsb3Q6XCJhZnRlclwifSx0aGlzLiRzbG90cy5kZWZhdWx0KTp2b2lkIDApKX19LFFSYWRpbz17bmFtZTpcIlFSYWRpb1wiLG1peGluczpbT3B0aW9uTWl4aW5dLHByb3BzOnt2YWw6e3JlcXVpcmVkOiEwfX0sY29tcHV0ZWQ6e2lzVHJ1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlPT09dGhpcy52YWx9fSxtZXRob2RzOnt0b2dnbGU6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0hMCksdGhpcy5kaXNhYmxlfHx0aGlzLnJlYWRvbmx5fHwodCYmc3RvcEFuZFByZXZlbnQodCksZSYmdGhpcy4kZWwuYmx1cigpLHRoaXMuaXNUcnVlfHx0aGlzLl9fdXBkYXRlKHRoaXMudmFsKSl9LF9fZ2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm5bdChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLXJhZGlvLXVuY2hlY2tlZCBjdXJzb3ItcG9pbnRlciBhYnNvbHV0ZS1mdWxsXCIscHJvcHM6e25hbWU6dGhpcy51bmNoZWNrZWRJY29ufHx0aGlzLiRxLmljb24ucmFkaW8udW5jaGVja2VkLm1hdH19KSx0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtcmFkaW8tY2hlY2tlZCBjdXJzb3ItcG9pbnRlciBhYnNvbHV0ZS1mdWxsXCIscHJvcHM6e25hbWU6dGhpcy5jaGVja2VkSWNvbnx8dGhpcy4kcS5pY29uLnJhZGlvLmNoZWNrZWQubWF0fX0pLHQoXCJkaXZcIix7cmVmOlwicmlwcGxlXCIsc3RhdGljQ2xhc3M6XCJxLXJhZGlhbC1yaXBwbGVcIn0pXX19LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX19rZWJhYlRhZz1cInEtcmFkaW9cIn19LFFUb2dnbGU9e25hbWU6XCJRVG9nZ2xlXCIsbWl4aW5zOltDaGVja2JveE1peGluLE9wdGlvbk1peGluXSxwcm9wczp7aWNvbjpTdHJpbmd9LGNvbXB1dGVkOntjdXJyZW50SWNvbjpmdW5jdGlvbigpe3JldHVybih0aGlzLmlzVHJ1ZT90aGlzLmNoZWNrZWRJY29uOnRoaXMudW5jaGVja2VkSWNvbil8fHRoaXMuaWNvbn0saWNvbkNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNUcnVlP1wid2hpdGVcIjpcImRhcmtcIn0sYmFzZUNsYXNzOmZ1bmN0aW9uKCl7fX0sbWV0aG9kczp7X19zd2lwZTpmdW5jdGlvbih0KXtcImxlZnRcIj09PXQuZGlyZWN0aW9uP3RoaXMuaXNUcnVlJiZ0aGlzLnRvZ2dsZSgpOlwicmlnaHRcIj09PXQuZGlyZWN0aW9uJiZ0aGlzLmlzRmFsc2UmJnRoaXMudG9nZ2xlKCl9LF9fZ2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm5bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9nZ2xlLWJhc2VcIixjbGFzczp0aGlzLmJhc2VDbGFzc30pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRvZ2dsZS1oYW5kbGUgcm93IGZsZXgtY2VudGVyXCJ9LFt0aGlzLmN1cnJlbnRJY29uP3QoUUljb24se3N0YXRpY0NsYXNzOlwicS10b2dnbGUtaWNvblwiLHByb3BzOntuYW1lOnRoaXMuY3VycmVudEljb24sY29sb3I6dGhpcy5pY29uQ29sb3J9fSk6bnVsbCx0KFwiZGl2XCIse3JlZjpcInJpcHBsZVwiLHN0YXRpY0NsYXNzOlwicS1yYWRpYWwtcmlwcGxlXCJ9KV0pXX19LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX19rZWJhYlRhZz1cInEtdG9nZ2xlXCJ9fSxjb21wb25lbnRzPXtyYWRpbzpRUmFkaW8sY2hlY2tib3g6UUNoZWNrYm94LHRvZ2dsZTpRVG9nZ2xlfSxRT3B0aW9uR3JvdXA9e25hbWU6XCJRT3B0aW9uR3JvdXBcIixtaXhpbnM6W1BhcmVudEZpZWxkTWl4aW5dLHByb3BzOnt2YWx1ZTp7cmVxdWlyZWQ6ITB9LHR5cGU6e2RlZmF1bHQ6XCJyYWRpb1wiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJyYWRpb1wiLFwiY2hlY2tib3hcIixcInRvZ2dsZVwiXS5pbmNsdWRlcyh0KX19LGNvbG9yOlN0cmluZyxrZWVwQ29sb3I6Qm9vbGVhbixkYXJrOkJvb2xlYW4sb3B0aW9uczp7dHlwZTpBcnJheSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuXCJ2YWx1ZVwiaW4gdCYmXCJsYWJlbFwiaW4gdH0pfX0sbGVmdExhYmVsOkJvb2xlYW4saW5saW5lOkJvb2xlYW4sZGlzYWJsZTpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW59LGNvbXB1dGVkOntjb21wb25lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29tcG9uZW50c1t0aGlzLnR5cGVdfSxtb2RlbDpmdW5jdGlvbigpe3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuc2xpY2UoKTp0aGlzLnZhbHVlfSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZT9cInJhZGlvXCI9PT10aGlzLnR5cGU/MTp0aGlzLnZhbHVlLmxlbmd0aDowfSxfX25lZWRzQm9yZGVyOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSxtZXRob2RzOntfX29uRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KFwiZm9jdXNcIil9LF9fb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdChcImJsdXJcIil9LF9fdXBkYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy4kZW1pdChcImlucHV0XCIsdCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsdCl9KX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD1BcnJheS5pc0FycmF5KHRoaXMudmFsdWUpO1wicmFkaW9cIj09PXRoaXMudHlwZT90JiZjb25zb2xlLmVycm9yKFwicS1vcHRpb24tZ3JvdXA6IG1vZGVsIHNob3VsZCBub3QgYmUgYXJyYXlcIik6dHx8Y29uc29sZS5lcnJvcihcInEtb3B0aW9uLWdyb3VwOiBtb2RlbCBzaG91bGQgYmUgYXJyYXkgaW4geW91ciBjYXNlXCIpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtb3B0aW9uLWdyb3VwIGdyb3VwXCIsY2xhc3M6e1wicS1vcHRpb24tZ3JvdXAtaW5saW5lLW9wdHNcIjp0aGlzLmlubGluZX19LHRoaXMub3B0aW9ucy5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIHQoXCJkaXZcIixbdChlLmNvbXBvbmVudCx7cHJvcHM6e3ZhbHVlOmUudmFsdWUsdmFsOmkudmFsdWUscmVhZG9ubHk6ZS5yZWFkb25seXx8aS5yZWFkb25seSxkaXNhYmxlOmUuZGlzYWJsZXx8aS5kaXNhYmxlLGxhYmVsOmkubGFiZWwsbGVmdExhYmVsOmUubGVmdExhYmVsfHxpLmxlZnRMYWJlbCxjb2xvcjppLmNvbG9yfHxlLmNvbG9yLGNoZWNrZWRJY29uOmkuY2hlY2tlZEljb24sdW5jaGVja2VkSWNvbjppLnVuY2hlY2tlZEljb24sZGFyazppLmRhcmt8fGUuZGFyayxrZWVwQ29sb3I6aS5rZWVwQ29sb3J8fGUua2VlcENvbG9yfSxvbjp7aW5wdXQ6ZS5fX3VwZGF0ZSxmb2N1czplLl9fb25Gb2N1cyxibHVyOmUuX19vbkJsdXJ9fSldKX0pKX19LFFEaWFsb2c9e25hbWU6XCJRRGlhbG9nXCIscHJvcHM6e3ZhbHVlOkJvb2xlYW4sdGl0bGU6U3RyaW5nLG1lc3NhZ2U6U3RyaW5nLHByb21wdDpPYmplY3Qsb3B0aW9uczpPYmplY3Qsb2s6e3R5cGU6W1N0cmluZyxPYmplY3QsQm9vbGVhbl0sZGVmYXVsdDohMH0sY2FuY2VsOltTdHJpbmcsT2JqZWN0LEJvb2xlYW5dLHN0YWNrQnV0dG9uczpCb29sZWFuLHByZXZlbnRDbG9zZTpCb29sZWFuLG5vQmFja2Ryb3BEaXNtaXNzOkJvb2xlYW4sbm9Fc2NEaXNtaXNzOkJvb2xlYW4sbm9SZWZvY3VzOkJvb2xlYW4scG9zaXRpb246U3RyaW5nLGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bXSxzPXRoaXMuJHNsb3RzLnRpdGxlfHx0aGlzLnRpdGxlLG49dGhpcy4kc2xvdHMubWVzc2FnZXx8dGhpcy5tZXNzYWdlO3JldHVybiBzJiZpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm1vZGFsLWhlYWRlclwifSxbc10pKSxuJiZpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm1vZGFsLWJvZHkgbW9kYWwtbWVzc2FnZSBtb2RhbC1zY3JvbGxcIn0sW25dKSksKHRoaXMuaGFzRm9ybXx8dGhpcy4kc2xvdHMuYm9keSkmJmkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYm9keSBtb2RhbC1zY3JvbGxcIn0sdGhpcy5oYXNGb3JtP3RoaXMucHJvbXB0P3RoaXMuX19nZXRQcm9tcHQodCk6dGhpcy5fX2dldE9wdGlvbnModCk6W3RoaXMuJHNsb3RzLmJvZHldKSksdGhpcy4kc2NvcGVkU2xvdHMuYnV0dG9ucz9pLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm1vZGFsLWJ1dHRvbnNcIixjbGFzczp0aGlzLmJ1dHRvbkNsYXNzfSxbdGhpcy4kc2NvcGVkU2xvdHMuYnV0dG9ucyh7b2s6dGhpcy5fX29uT2ssY2FuY2VsOnRoaXMuX19vbkNhbmNlbH0pXSkpOih0aGlzLm9rfHx0aGlzLmNhbmNlbCkmJmkucHVzaCh0aGlzLl9fZ2V0QnV0dG9ucyh0KSksdChRTW9kYWwse3JlZjpcIm1vZGFsXCIscHJvcHM6e3ZhbHVlOnRoaXMudmFsdWUsbWluaW1pemVkOiEwLG5vQmFja2Ryb3BEaXNtaXNzOnRoaXMubm9CYWNrZHJvcERpc21pc3N8fHRoaXMucHJldmVudENsb3NlLG5vRXNjRGlzbWlzczp0aGlzLm5vRXNjRGlzbWlzc3x8dGhpcy5wcmV2ZW50Q2xvc2Usbm9SZWZvY3VzOnRoaXMubm9SZWZvY3VzLHBvc2l0aW9uOnRoaXMucG9zaXRpb259LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLiRlbWl0KFwiaW5wdXRcIix0KX0sc2hvdzpmdW5jdGlvbigpe2lmKGUuJHEucGxhdGZvcm0uaXMuZGVza3RvcCl7dmFyIHQ7aWYoKGUucHJvbXB0fHxlLm9wdGlvbnMpJiYodD1lLnByb21wdD9lLiRyZWZzLm1vZGFsLiRlbC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIklOUFVUXCIpOmUuJHJlZnMubW9kYWwuJGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJxLW9wdGlvblwiKSkubGVuZ3RoKXJldHVybiB0WzBdLmZvY3VzKCksdm9pZCBlLiRlbWl0KFwic2hvd1wiKTsodD1lLiRyZWZzLm1vZGFsLiRlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicS1idG5cIikpLmxlbmd0aCYmdFt0Lmxlbmd0aC0xXS5mb2N1cygpLGUuJGVtaXQoXCJzaG93XCIpfWVsc2UgZS4kZW1pdChcInNob3dcIil9LGhpZGU6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiaGlkZVwiKX0sZGlzbWlzczpmdW5jdGlvbigpe2UuJGVtaXQoXCJjYW5jZWxcIil9LFwiZXNjYXBlLWtleVwiOmZ1bmN0aW9uKCl7ZS4kZW1pdChcImVzY2FwZS1rZXlcIil9fX0saSl9LGNvbXB1dGVkOntoYXNGb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvbXB0fHx0aGlzLm9wdGlvbnN9LG9rTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4hMD09PXRoaXMub2s/dGhpcy4kcS5pMThuLmxhYmVsLm9rOnRoaXMub2t9LGNhbmNlbExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuITA9PT10aGlzLmNhbmNlbD90aGlzLiRxLmkxOG4ubGFiZWwuY2FuY2VsOnRoaXMuY2FuY2VsfSxidXR0b25DbGFzczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YWNrQnV0dG9ucz9cImNvbHVtblwiOlwicm93XCJ9LG9rUHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHRoaXMub2spPT09dGhpcy5vaz9PYmplY3QuYXNzaWduKHtjb2xvcjp0aGlzLmNvbG9yLGxhYmVsOnRoaXMuJHEuaTE4bi5sYWJlbC5vayxub1JpcHBsZTohMH0sdGhpcy5vayk6e2NvbG9yOnRoaXMuY29sb3IsZmxhdDohMCxsYWJlbDp0aGlzLm9rTGFiZWwsbm9SaXBwbGU6ITB9fSxjYW5jZWxQcm9wczpmdW5jdGlvbigpe3JldHVybiBPYmplY3QodGhpcy5jYW5jZWwpPT09dGhpcy5jYW5jZWw/T2JqZWN0LmFzc2lnbih7Y29sb3I6dGhpcy5jb2xvcixsYWJlbDp0aGlzLiRxLmkxOG4ubGFiZWwuY2FuY2VsLG5vUmlwcGxlOiEwfSx0aGlzLmNhbmNlbCk6e2NvbG9yOnRoaXMuY29sb3IsZmxhdDohMCxsYWJlbDp0aGlzLmNhbmNlbExhYmVsLG5vUmlwcGxlOiEwfX19LG1ldGhvZHM6e3Nob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5tb2RhbC5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLiRyZWZzLm1vZGFsP3RoaXMuJHJlZnMubW9kYWwuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5oYXNGb3JtP2Nsb25lKHQuX19nZXREYXRhKCkpOnZvaWQgMH0pOlByb21pc2UucmVzb2x2ZSgpfSxfX2dldFByb21wdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVyblt0KFFJbnB1dCx7c3R5bGU6XCJtYXJnaW4tYm90dG9tOiAxMHB4XCIscHJvcHM6e3ZhbHVlOnRoaXMucHJvbXB0Lm1vZGVsLHR5cGU6dGhpcy5wcm9tcHQudHlwZXx8XCJ0ZXh0XCIsY29sb3I6dGhpcy5jb2xvcixub1Bhc3NUb2dnbGU6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLnByb21wdC5tb2RlbD10fSxrZXl1cDpmdW5jdGlvbih0KXsxMz09PWdldEV2ZW50S2V5KHQpJiZlLl9fb25PaygpfX19KV19LF9fZ2V0T3B0aW9uczpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVyblt0KFFPcHRpb25Hcm91cCx7cHJvcHM6e3ZhbHVlOnRoaXMub3B0aW9ucy5tb2RlbCx0eXBlOnRoaXMub3B0aW9ucy50eXBlLGNvbG9yOnRoaXMuY29sb3IsaW5saW5lOnRoaXMub3B0aW9ucy5pbmxpbmUsb3B0aW9uczp0aGlzLm9wdGlvbnMuaXRlbXN9LG9uOntjaGFuZ2U6ZnVuY3Rpb24odCl7ZS5vcHRpb25zLm1vZGVsPXR9fX0pXX0sX19nZXRCdXR0b25zOmZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB0aGlzLmNhbmNlbCYmZS5wdXNoKHQoUUJ0bix7cHJvcHM6dGhpcy5jYW5jZWxQcm9wcyxvbjp7Y2xpY2s6dGhpcy5fX29uQ2FuY2VsfX0pKSx0aGlzLm9rJiZlLnB1c2godChRQnRuLHtwcm9wczp0aGlzLm9rUHJvcHMsb246e2NsaWNrOnRoaXMuX19vbk9rfX0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYnV0dG9uc1wiLGNsYXNzOnRoaXMuYnV0dG9uQ2xhc3N9LGUpfSxfX29uT2s6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmhpZGUoKS50aGVuKGZ1bmN0aW9uKGUpe3QuJGVtaXQoXCJva1wiLGUpfSl9LF9fb25DYW5jZWw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmhpZGUoKS50aGVuKGZ1bmN0aW9uKCl7dC4kZW1pdChcImNhbmNlbFwiKX0pfSxfX2dldERhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9tcHQ/dGhpcy5wcm9tcHQubW9kZWw6dGhpcy5vcHRpb25zP3RoaXMub3B0aW9ucy5tb2RlbDp2b2lkIDB9fX07ZnVuY3Rpb24gZGVib3VuY2UodCxlLGkpe3ZhciBzO2Z1bmN0aW9uIG4oKXtmb3IodmFyIG49dGhpcyxvPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KW9bcl09YXJndW1lbnRzW3JdO2NsZWFyVGltZW91dChzKSxpJiYhcyYmdC5hcHBseSh0aGlzLG8pLHM9c2V0VGltZW91dChmdW5jdGlvbigpe3M9bnVsbCxpfHx0LmFwcGx5KG4sbyl9LGUpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0yNTApLG4uY2FuY2VsPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHMpfSxufXZhciBRVG9vbHRpcD17bmFtZTpcIlFUb29sdGlwXCIsbWl4aW5zOltNb2RlbFRvZ2dsZU1peGluLENhblJlbmRlck1peGluXSxwcm9wczp7YW5jaG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwidG9wIG1pZGRsZVwiLHZhbGlkYXRvcjpwb3NpdGlvblZhbGlkYXRvcn0sc2VsZjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImJvdHRvbSBtaWRkbGVcIix2YWxpZGF0b3I6cG9zaXRpb25WYWxpZGF0b3J9LG9mZnNldDp7dHlwZTpBcnJheSx2YWxpZGF0b3I6b2Zmc2V0VmFsaWRhdG9yfSxkZWxheTp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxtYXhIZWlnaHQ6U3RyaW5nLGRpc2FibGU6Qm9vbGVhbn0sd2F0Y2g6eyRyb3V0ZTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpfX0sY29tcHV0ZWQ6e2FuY2hvck9yaWdpbjpmdW5jdGlvbigpe3JldHVybiBwYXJzZVBvc2l0aW9uKHRoaXMuYW5jaG9yKX0sc2VsZk9yaWdpbjpmdW5jdGlvbigpe3JldHVybiBwYXJzZVBvc2l0aW9uKHRoaXMuc2VsZil9fSxtZXRob2RzOntfX3Nob3c6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCksdGhpcy5zY3JvbGxUYXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHRoaXMuYW5jaG9yRWwpLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLmhpZGUsbGlzdGVuT3B0cy5wYXNzaXZlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMuX19kZWJvdW5jZWRVcGRhdGVQb3NpdGlvbixsaXN0ZW5PcHRzLnBhc3NpdmUpLHRoaXMuJHEucGxhdGZvcm0uaXMubW9iaWxlJiZkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuaGlkZSwhMCksdGhpcy5fX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5zaG93UHJvbWlzZSYmdGhpcy5zaG93UHJvbWlzZVJlc29sdmUoKX0sX19oaWRlOmZ1bmN0aW9uKCl7dGhpcy5fX2NsZWFudXAoKSx0aGlzLmhpZGVQcm9taXNlJiZ0aGlzLmhpZGVQcm9taXNlUmVzb2x2ZSgpfSxfX2NsZWFudXA6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuaGlkZSxsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fX2RlYm91bmNlZFVwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy4kZWwucmVtb3ZlKCksdGhpcy4kcS5wbGF0Zm9ybS5pcy5tb2JpbGUmJmRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5oaWRlLCEwKX0sX191cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3NldFBvc2l0aW9uKHtlbDp0aGlzLiRlbCxhbmltYXRlOiEwLG9mZnNldDp0aGlzLm9mZnNldCxhbmNob3JFbDp0aGlzLmFuY2hvckVsLGFuY2hvck9yaWdpbjp0aGlzLmFuY2hvck9yaWdpbixzZWxmT3JpZ2luOnRoaXMuc2VsZk9yaWdpbixtYXhIZWlnaHQ6dGhpcy5tYXhIZWlnaHR9KX0sX19kZWxheVNob3c6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj1zZXRUaW1lb3V0KHRoaXMuc2hvdyx0aGlzLmRlbGF5KX0sX19kZWxheUhpZGU6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5oaWRlKCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7aWYodGhpcy5jYW5SZW5kZXIpcmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRvb2x0aXAgYW5pbWF0ZS1wb3B1cFwifSxbdChcImRpdlwiLHRoaXMuJHNsb3RzLmRlZmF1bHQpXSl9LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9fZGVib3VuY2VkVXBkYXRlUG9zaXRpb249ZGVib3VuY2UoZnVuY3Rpb24oKXt0Ll9fdXBkYXRlUG9zaXRpb24oKX0sNzApfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QuJGVsLm9mZnNldEhlaWdodCx0LmFuY2hvckVsPXQuJGVsLnBhcmVudE5vZGUsdC5hbmNob3JFbC5yZW1vdmVDaGlsZCh0LiRlbCksKHQuYW5jaG9yRWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1wb3B1cC0tc2tpcFwiKXx8dC5hbmNob3JFbC5jbGFzc0xpc3QuY29udGFpbnMoXCJuby1wb2ludGVyLWV2ZW50c1wiKSkmJih0LmFuY2hvckVsPXQuYW5jaG9yRWwucGFyZW50Tm9kZSksdC4kcS5wbGF0Zm9ybS5pcy5tb2JpbGU/dC5hbmNob3JFbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0LnNob3cpOih0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsdC5fX2RlbGF5U2hvdyksdC5hbmNob3JFbC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0Ll9fZGVsYXlTaG93KSx0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsdC5fX2RlbGF5SGlkZSksdC5hbmNob3JFbC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHQuX19kZWxheUhpZGUpKSx0LnZhbHVlJiZ0LnNob3coKX0pfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuc2hvd2luZyYmdGhpcy5fX2NsZWFudXAoKSx0aGlzLmFuY2hvckVsJiYodGhpcy4kcS5wbGF0Zm9ybS5pcy5tb2JpbGU/dGhpcy5hbmNob3JFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLnNob3cpOih0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsdGhpcy5fX2RlbGF5U2hvdyksdGhpcy5hbmNob3JFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0aGlzLl9fZGVsYXlTaG93KSx0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsdGhpcy5fX2RlbGF5SGlkZSksdGhpcy5hbmNob3JFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLHRoaXMuX19kZWxheUhpZGUpKSl9fTtmdW5jdGlvbiBydW4odCxlLGkpe2UuaGFuZGxlcj9lLmhhbmRsZXIodCxpLGkuY2FyZXQpOmkucnVuQ21kKGUuY21kLGUucGFyYW0pfWZ1bmN0aW9uIGdldEJ0bih0LGUsaSxzLG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgbz1ufHxcInRvZ2dsZVwiPT09aS50eXBlJiYoaS50b2dnbGVkP2kudG9nZ2xlZChlKTppLmNtZCYmZS5jYXJldC5pcyhpLmNtZCxpLnBhcmFtKSkscj1bXSxhPXtjbGljazpmdW5jdGlvbih0KXtzJiZzKCkscnVuKHQsaSxlKX19O2lmKGkudGlwJiZlLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3Ape3ZhciBsPWkua2V5P3QoXCJkaXZcIixbdChcInNtYWxsXCIsXCIoQ1RSTCArIFwiK1N0cmluZy5mcm9tQ2hhckNvZGUoaS5rZXkpK1wiKVwiKV0pOm51bGw7ci5wdXNoKHQoUVRvb2x0aXAse3Byb3BzOntkZWxheToxZTN9fSxbdChcImRpdlwiLHtkb21Qcm9wczp7aW5uZXJIVE1MOmkudGlwfX0pLGxdKSl9cmV0dXJuIHQoUUJ0bix7cHJvcHM6T2JqZWN0LmFzc2lnbih7fSxlLmJ1dHRvblByb3BzLHtpY29uOmkuaWNvbixjb2xvcjpvP2kudG9nZ2xlQ29sb3J8fGUudG9vbGJhclRvZ2dsZUNvbG9yOmkuY29sb3J8fGUudG9vbGJhckNvbG9yLHRleHRDb2xvcjpvJiYoZS50b29sYmFyRmxhdHx8ZS50b29sYmFyT3V0bGluZSk/bnVsbDppLnRleHRDb2xvcnx8ZS50b29sYmFyVGV4dENvbG9yLGxhYmVsOmkubGFiZWwsZGlzYWJsZTohIWkuZGlzYWJsZSYmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkuZGlzYWJsZXx8aS5kaXNhYmxlKGUpKX0pLG9uOmF9LHIpfWZ1bmN0aW9uIGdldERyb3Bkb3duKHQsZSxpKXt2YXIgcyxuLG89aS5sYWJlbCxyPWkuaWNvbixhPVwibm8taWNvbnNcIj09PWkubGlzdDtmdW5jdGlvbiBsKCl7aC5jb21wb25lbnRJbnN0YW5jZS5oaWRlKCl9XCJvbmx5LWljb25zXCI9PT1pLmxpc3Q/KG49aS5vcHRpb25zLm1hcChmdW5jdGlvbihpKXt2YXIgcz12b2lkIDA9PT1pLnR5cGUmJmUuY2FyZXQuaXMoaS5jbWQsaS5wYXJhbSk7cmV0dXJuIHMmJihvPWkudGlwLHI9aS5pY29uKSxnZXRCdG4odCxlLGksbCxzKX0pLHM9ZS50b29sYmFyQmFja2dyb3VuZENsYXNzLG49W3QoUUJ0bkdyb3VwLHtwcm9wczplLmJ1dHRvblByb3BzLHN0YXRpY0NsYXNzOlwicmVsYXRpdmUtcG9zaXRpb24gcS1lZGl0b3ItdG9vbGJhci1wYWRkaW5nXCIsc3R5bGU6e2JvcmRlclJhZGl1czpcIjBcIn19LG4pXSk6KG49aS5vcHRpb25zLm1hcChmdW5jdGlvbihpKXt2YXIgcz0hIWkuZGlzYWJsZSYmaS5kaXNhYmxlKGUpLG49dm9pZCAwPT09aS50eXBlJiZlLmNhcmV0LmlzKGkuY21kLGkucGFyYW0pO24mJihvPWkudGlwLHI9aS5pY29uKTt2YXIgYz1pLmh0bWxUaXA7cmV0dXJuIHQoUUl0ZW0se3Byb3BzOnthY3RpdmU6bixsaW5rOiFzfSxjbGFzczp7ZGlzYWJsZWQ6c30sbmF0aXZlT246e2NsaWNrOmZ1bmN0aW9uKHQpe3N8fChsKCksZS4kcmVmcy5jb250ZW50JiZlLiRyZWZzLmNvbnRlbnQuZm9jdXMoKSxlLmNhcmV0LnJlc3RvcmUoKSxydW4odCxpLGUpKX19fSxbYT9cIlwiOnQoUUl0ZW1TaWRlLHtwcm9wczp7aWNvbjppLmljb259fSksdChRSXRlbU1haW4se3Byb3BzOiFjJiZpLnRpcD97bGFiZWw6aS50aXB9Om51bGwsZG9tUHJvcHM6Yz97aW5uZXJIVE1MOmkuaHRtbFRpcH06bnVsbH0pXSl9KSxzPVtlLnRvb2xiYXJCYWNrZ3JvdW5kQ2xhc3MsZS50b29sYmFyVGV4dENvbG9yP1widGV4dC1cIitlLnRvb2xiYXJUZXh0Q29sb3I6XCJcIl0sbj1bdChRTGlzdCx7cHJvcHM6e3NlcGFyYXRvcjohMH19LFtuXSldKTt2YXIgYz1pLmhpZ2hsaWdodCYmbyE9PWkubGFiZWwsaD10KFFCdG5Ecm9wZG93bix7cHJvcHM6T2JqZWN0LmFzc2lnbih7fSxlLmJ1dHRvblByb3BzLHtub0NhcHM6ITAsbm9XcmFwOiEwLGNvbG9yOmM/ZS50b29sYmFyVG9nZ2xlQ29sb3I6ZS50b29sYmFyQ29sb3IsdGV4dENvbG9yOmMmJihlLnRvb2xiYXJGbGF0fHxlLnRvb2xiYXJPdXRsaW5lKT9udWxsOmUudG9vbGJhclRleHRDb2xvcixsYWJlbDppLmZpeGVkTGFiZWw/aS5sYWJlbDpvLGljb246aS5maXhlZEljb24/aS5pY29uOnIsY29udGVudENsYXNzOnN9KX0sbik7cmV0dXJuIGh9ZnVuY3Rpb24gZ2V0VG9vbGJhcih0LGUpe2lmKGUuY2FyZXQpcmV0dXJuIGUuYnV0dG9ucy5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIHQoUUJ0bkdyb3VwLHtwcm9wczplLmJ1dHRvblByb3BzLHN0YXRpY0NsYXNzOlwiaXRlbXMtY2VudGVyIHJlbGF0aXZlLXBvc2l0aW9uXCJ9LGkubWFwKGZ1bmN0aW9uKGkpe3JldHVyblwic2xvdFwiPT09aS50eXBlP2UuJHNsb3RzW2kuc2xvdF06XCJkcm9wZG93blwiPT09aS50eXBlP2dldERyb3Bkb3duKHQsZSxpKTpnZXRCdG4odCxlLGkpfSkpfSl9ZnVuY3Rpb24gZ2V0Rm9udHModCxlLGkscyl7dm9pZCAwPT09cyYmKHM9e30pO3ZhciBuPU9iamVjdC5rZXlzKHMpO2lmKDA9PT1uLmxlbmd0aClyZXR1cm57fTt2YXIgbz17ZGVmYXVsdF9mb250OntjbWQ6XCJmb250TmFtZVwiLHBhcmFtOnQsaWNvbjppLHRpcDplfX07cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1zW3RdO29bdF09e2NtZDpcImZvbnROYW1lXCIscGFyYW06ZSxpY29uOmksdGlwOmUsaHRtbFRpcDonPGZvbnQgZmFjZT1cIicrZSsnXCI+JytlK1wiPC9mb250PlwifX0pLG99ZnVuY3Rpb24gZ2V0TGlua0VkaXRvcih0LGUpe2lmKGUuY2FyZXQpe3ZhciBpPWUudG9vbGJhckNvbG9yfHxlLnRvb2xiYXJUZXh0Q29sb3Iscz1lLmVkaXRMaW5rVXJsLG49ZnVuY3Rpb24oKXtlLmNhcmV0LnJlc3RvcmUoKSxzIT09ZS5lZGl0TGlua1VybCYmZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjcmVhdGVMaW5rXCIsITEsXCJcIj09PXM/XCIgXCI6cyksZS5lZGl0TGlua1VybD1udWxsfTtyZXR1cm5bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbXgteHNcIixjbGFzczpcInRleHQtXCIraX0sW2UuJHEuaTE4bi5lZGl0b3IudXJsK1wiOiBcIl0pLHQoUUlucHV0LHtrZXk6XCJxZWR0X2J0bV9pbnB1dFwiLHN0YXRpY0NsYXNzOlwicS1tYS1ub25lIHEtcGEtbm9uZSBjb2wgcS1lZGl0b3ItaW5wdXRcIixwcm9wczp7dmFsdWU6cyxjb2xvcjppLGF1dG9mb2N1czohMCxoaWRlVW5kZXJsaW5lOiEwfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7cz10fSxrZXlkb3duOmZ1bmN0aW9uKHQpe3N3aXRjaChnZXRFdmVudEtleSh0KSl7Y2FzZSAxMzpyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLG4oKTtjYXNlIDI3OmUuY2FyZXQucmVzdG9yZSgpLCFlLmVkaXRMaW5rVXJsJiZkb2N1bWVudC5leGVjQ29tbWFuZChcInVubGlua1wiKSxlLmVkaXRMaW5rVXJsPW51bGx9fX19KSx0KFFCdG5Hcm91cCx7a2V5OlwicWVkdF9idG1fZ3JwXCIscHJvcHM6ZS5idXR0b25Qcm9wc30sW3QoUUJ0bix7a2V5OlwicWVkdF9idG1fcmVtXCIsYXR0cnM6e3RhYmluZGV4Oi0xfSxwcm9wczpPYmplY3QuYXNzaWduKHt9LGUuYnV0dG9uUHJvcHMse2xhYmVsOmUuJHEuaTE4bi5sYWJlbC5yZW1vdmUsbm9DYXBzOiEwfSksb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5jYXJldC5yZXN0b3JlKCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJ1bmxpbmtcIiksZS5lZGl0TGlua1VybD1udWxsfX19KSx0KFFCdG4se2tleTpcInFlZHRfYnRtX3VwZFwiLHByb3BzOk9iamVjdC5hc3NpZ24oe30sZS5idXR0b25Qcm9wcyx7bGFiZWw6ZS4kcS5pMThuLmxhYmVsLnVwZGF0ZSxub0NhcHM6ITB9KSxvbjp7Y2xpY2s6bn19KV0pXX19ZnVuY3Rpb24gZ2V0QmxvY2tFbGVtZW50KHQsZSl7aWYoZSYmdD09PWUpcmV0dXJuIG51bGw7dmFyIGk9KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlP3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpOnQuY3VycmVudFN0eWxlKS5kaXNwbGF5O3JldHVyblwiYmxvY2tcIj09PWl8fFwidGFibGVcIj09PWk/dDpnZXRCbG9ja0VsZW1lbnQodC5wYXJlbnROb2RlKX1mdW5jdGlvbiBpc0NoaWxkT2YodCxlKXtpZighdClyZXR1cm4hMTtmb3IoO3Q9dC5wYXJlbnROb2RlOyl7aWYodD09PWRvY3VtZW50LmJvZHkpcmV0dXJuITE7aWYodD09PWUpcmV0dXJuITB9cmV0dXJuITF9dmFyIHVybFJlZ2V4PS9eaHR0cHM/OlxcL1xcLy8sQ2FyZXQ9ZnVuY3Rpb24odCxlKXt0aGlzLmVsPXQsdGhpcy52bT1lfSxwcm90b3R5cGVBY2Nlc3NvcnM9e3NlbGVjdGlvbjp7Y29uZmlndXJhYmxlOiEwfSxoYXNTZWxlY3Rpb246e2NvbmZpZ3VyYWJsZTohMH0scmFuZ2U6e2NvbmZpZ3VyYWJsZTohMH0scGFyZW50Ontjb25maWd1cmFibGU6ITB9LGJsb2NrUGFyZW50Ontjb25maWd1cmFibGU6ITB9fTtwcm90b3R5cGVBY2Nlc3NvcnMuc2VsZWN0aW9uLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuZWwpe3ZhciB0PWRvY3VtZW50LmdldFNlbGVjdGlvbigpO3JldHVybiBpc0NoaWxkT2YodC5hbmNob3JOb2RlLHRoaXMuZWwpJiZpc0NoaWxkT2YodC5mb2N1c05vZGUsdGhpcy5lbCk/dDp2b2lkIDB9fSxwcm90b3R5cGVBY2Nlc3NvcnMuaGFzU2VsZWN0aW9uLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbj90aGlzLnNlbGVjdGlvbi50b1N0cmluZygpLmxlbmd0aD4wOm51bGx9LHByb3RvdHlwZUFjY2Vzc29ycy5yYW5nZS5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNlbGVjdGlvbjtpZih0KXJldHVybiB0LnJhbmdlQ291bnQ/dC5nZXRSYW5nZUF0KDApOm51bGx9LHByb3RvdHlwZUFjY2Vzc29ycy5wYXJlbnQuZ2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yYW5nZTtpZih0KXt2YXIgZT10LnN0YXJ0Q29udGFpbmVyO3JldHVybiBlLm5vZGVUeXBlPT09ZG9jdW1lbnQuRUxFTUVOVF9OT0RFP2U6ZS5wYXJlbnROb2RlfX0scHJvdG90eXBlQWNjZXNzb3JzLmJsb2NrUGFyZW50LmdldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50O2lmKHQpcmV0dXJuIGdldEJsb2NrRWxlbWVudCh0LHRoaXMuZWwpfSxDYXJldC5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD10aGlzLnJhbmdlKSx0aGlzLl9yYW5nZT10fSxDYXJldC5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD10aGlzLl9yYW5nZSk7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxpPWRvY3VtZW50LmdldFNlbGVjdGlvbigpO3Q/KGUuc2V0U3RhcnQodC5zdGFydENvbnRhaW5lcix0LnN0YXJ0T2Zmc2V0KSxlLnNldEVuZCh0LmVuZENvbnRhaW5lcix0LmVuZE9mZnNldCksaS5yZW1vdmVBbGxSYW5nZXMoKSxpLmFkZFJhbmdlKGUpKTooaS5zZWxlY3RBbGxDaGlsZHJlbih0aGlzLmVsKSxpLmNvbGxhcHNlVG9FbmQoKSl9LENhcmV0LnByb3RvdHlwZS5oYXNQYXJlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgaT1lP3RoaXMucGFyZW50OnRoaXMuYmxvY2tQYXJlbnQ7cmV0dXJuISFpJiZpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9LENhcmV0LnByb3RvdHlwZS5oYXNQYXJlbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFyZW50O3JldHVybiEhZSYmdC5pbmNsdWRlcyhlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpfSxDYXJldC5wcm90b3R5cGUuaXM9ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZVwiZm9ybWF0QmxvY2tcIjpyZXR1cm5cIkRJVlwiPT09ZSYmdGhpcy5wYXJlbnQ9PT10aGlzLmVsfHx0aGlzLmhhc1BhcmVudChlLFwiUFJFXCI9PT1lKTtjYXNlXCJsaW5rXCI6cmV0dXJuIHRoaXMuaGFzUGFyZW50KFwiQVwiLCEwKTtjYXNlXCJmb250U2l6ZVwiOnJldHVybiBkb2N1bWVudC5xdWVyeUNvbW1hbmRWYWx1ZSh0KT09PWU7Y2FzZVwiZm9udE5hbWVcIjp2YXIgaT1kb2N1bWVudC5xdWVyeUNvbW1hbmRWYWx1ZSh0KTtyZXR1cm4gaT09PSdcIicrZSsnXCInfHxpPT09ZTtjYXNlXCJmdWxsc2NyZWVuXCI6cmV0dXJuIHRoaXMudm0uaW5GdWxsc2NyZWVuO2Nhc2Ugdm9pZCAwOnJldHVybiExO2RlZmF1bHQ6dmFyIHM9ZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUodCk7cmV0dXJuIGU/cz09PWU6c319LENhcmV0LnByb3RvdHlwZS5nZXRQYXJlbnRBdHRyaWJ1dGU9ZnVuY3Rpb24odCl7aWYodGhpcy5wYXJlbnQpcmV0dXJuIHRoaXMucGFyZW50LmdldEF0dHJpYnV0ZSh0KX0sQ2FyZXQucHJvdG90eXBlLmNhbj1mdW5jdGlvbih0KXtpZihcIm91dGRlbnRcIj09PXQpcmV0dXJuIHRoaXMuaGFzUGFyZW50cyhbXCJibG9ja3F1b3RlXCIsXCJsaVwiXSk7aWYoXCJpbmRlbnRcIj09PXQpe3ZhciBlPSEhdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoXCJibG9ja3F1b3RlXCI9PT1lKXJldHVybiExO2lmKFwibGlcIj09PWUpe3ZhciBpPXRoaXMucGFyZW50LnByZXZpb3VzU2libGluZztyZXR1cm4gaSYmXCJsaVwiPT09aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfXJldHVybiExfX0sQ2FyZXQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKHQsZSxpKXtpZih2b2lkIDA9PT1pJiYoaT1mdW5jdGlvbigpe30pLFwiZm9ybWF0QmxvY2tcIj09PXQpW1wiQkxPQ0tRVU9URVwiLFwiSDFcIixcIkgyXCIsXCJIM1wiLFwiSDRcIixcIkg1XCIsXCJINlwiXS5pbmNsdWRlcyhlKSYmdGhpcy5pcyh0LGUpJiYodD1cIm91dGRlbnRcIixlPW51bGwpLFwiUFJFXCI9PT1lJiZ0aGlzLmlzKHQsXCJQUkVcIikmJihlPVwiUFwiKTtlbHNle2lmKFwicHJpbnRcIj09PXQpe2koKTt2YXIgcz13aW5kb3cub3BlbigpO3JldHVybiBzLmRvY3VtZW50LndyaXRlKFwiXFxuICAgICAgICA8IWRvY3R5cGUgaHRtbD5cXG4gICAgICAgIDxodG1sPlxcbiAgICAgICAgICA8aGVhZD5cXG4gICAgICAgICAgICA8dGl0bGU+UHJpbnQgLSBcIitkb2N1bWVudC50aXRsZStcIjwvdGl0bGU+XFxuICAgICAgICAgIDwvaGVhZD5cXG4gICAgICAgICAgPGJvZHk+XFxuICAgICAgICAgICAgPGRpdj5cIit0aGlzLmVsLmlubmVySFRNTCtcIjwvZGl2PlxcbiAgICAgICAgICA8L2JvZHk+XFxuICAgICAgICA8L2h0bWw+XFxuICAgICAgXCIpLHMucHJpbnQoKSx2b2lkIHMuY2xvc2UoKX1pZihcImxpbmtcIj09PXQpe3ZhciBuPXRoaXMuZ2V0UGFyZW50QXR0cmlidXRlKFwiaHJlZlwiKTtpZihuKXRoaXMudm0uZWRpdExpbmtVcmw9bjtlbHNle3ZhciBvPXRoaXMuc2VsZWN0V29yZCh0aGlzLnNlbGVjdGlvbikscj1vP28udG9TdHJpbmcoKTpcIlwiO2lmKCFyLmxlbmd0aClyZXR1cm47dGhpcy52bS5lZGl0TGlua1VybD11cmxSZWdleC50ZXN0KHIpP3I6XCJcIixkb2N1bWVudC5leGVjQ29tbWFuZChcImNyZWF0ZUxpbmtcIiwhMSxcIlwiPT09dGhpcy52bS5lZGl0TGlua1VybD9cIiBcIjp0aGlzLnZtLmVkaXRMaW5rVXJsKX1yZXR1cm4gdGhpcy5yYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5wYXJlbnQpLHZvaWQgdGhpcy5zYXZlKCl9aWYoXCJmdWxsc2NyZWVuXCI9PT10KXJldHVybiB0aGlzLnZtLnRvZ2dsZUZ1bGxzY3JlZW4oKSx2b2lkIGkoKX1kb2N1bWVudC5leGVjQ29tbWFuZCh0LCExLGUpLGkoKX0sQ2FyZXQucHJvdG90eXBlLnNlbGVjdFdvcmQ9ZnVuY3Rpb24odCl7aWYoIXQuaXNDb2xsYXBzZWQpcmV0dXJuIHQ7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtlLnNldFN0YXJ0KHQuYW5jaG9yTm9kZSx0LmFuY2hvck9mZnNldCksZS5zZXRFbmQodC5mb2N1c05vZGUsdC5mb2N1c09mZnNldCk7dmFyIGk9ZS5jb2xsYXBzZWQ/W1wiYmFja3dhcmRcIixcImZvcndhcmRcIl06W1wiZm9yd2FyZFwiLFwiYmFja3dhcmRcIl07ZS5kZXRhY2goKTt2YXIgcz10LmZvY3VzTm9kZSxuPXQuZm9jdXNPZmZzZXQ7cmV0dXJuIHQuY29sbGFwc2UodC5hbmNob3JOb2RlLHQuYW5jaG9yT2Zmc2V0KSx0Lm1vZGlmeShcIm1vdmVcIixpWzBdLFwiY2hhcmFjdGVyXCIpLHQubW9kaWZ5KFwibW92ZVwiLGlbMV0sXCJ3b3JkXCIpLHQuZXh0ZW5kKHMsbiksdC5tb2RpZnkoXCJleHRlbmRcIixpWzFdLFwiY2hhcmFjdGVyXCIpLHQubW9kaWZ5KFwiZXh0ZW5kXCIsaVswXSxcIndvcmRcIiksdH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FyZXQucHJvdG90eXBlLHByb3RvdHlwZUFjY2Vzc29ycyk7dmFyIHRvU3RyaW5nPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaGFzT3duPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksY2xhc3MydHlwZT17fTtmdW5jdGlvbiB0eXBlKHQpe3JldHVybiBudWxsPT09dD9TdHJpbmcodCk6Y2xhc3MydHlwZVt0b1N0cmluZy5jYWxsKHQpXXx8XCJvYmplY3RcIn1mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHQpe2lmKCF0fHxcIm9iamVjdFwiIT09dHlwZSh0KSlyZXR1cm4hMTtpZih0LmNvbnN0cnVjdG9yJiYhaGFzT3duLmNhbGwodCxcImNvbnN0cnVjdG9yXCIpJiYhaGFzT3duLmNhbGwodC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXCJpc1Byb3RvdHlwZU9mXCIpKXJldHVybiExO3ZhciBlO2ZvcihlIGluIHQpO3JldHVybiB2b2lkIDA9PT1lfHxoYXNPd24uY2FsbCh0LGUpfWZ1bmN0aW9uIGV4dGVuZCgpe3ZhciB0LGUsaSxzLG4sbyxyPWFyZ3VtZW50cyxhPWFyZ3VtZW50c1swXXx8e30sbD0xLGM9YXJndW1lbnRzLmxlbmd0aCxoPSExO2ZvcihcImJvb2xlYW5cIj09dHlwZW9mIGEmJihoPWEsYT1hcmd1bWVudHNbMV18fHt9LGw9MiksT2JqZWN0KGEpIT09YSYmXCJmdW5jdGlvblwiIT09dHlwZShhKSYmKGE9e30pLGM9PT1sJiYoYT10aGlzLGwtLSk7bDxjO2wrKylpZihudWxsIT09KHQ9cltsXSkpZm9yKGUgaW4gdClpPWFbZV0sYSE9PShzPXRbZV0pJiYoaCYmcyYmKGlzUGxhaW5PYmplY3Qocyl8fChuPVwiYXJyYXlcIj09PXR5cGUocykpKT8obj8obj0hMSxvPWkmJlwiYXJyYXlcIj09PXR5cGUoaSk/aTpbXSk6bz1pJiZpc1BsYWluT2JqZWN0KGkpP2k6e30sYVtlXT1leHRlbmQoaCxvLHMpKTp2b2lkIDAhPT1zJiYoYVtlXT1zKSk7cmV0dXJuIGF9XCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24odCl7Y2xhc3MydHlwZVtcIltvYmplY3QgXCIrdCtcIl1cIl09dC50b0xvd2VyQ2FzZSgpfSk7dmFyIFFFZGl0b3I9e25hbWU6XCJRRWRpdG9yXCIsbWl4aW5zOltGdWxsc2NyZWVuTWl4aW5dLHByb3BzOnt2YWx1ZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHJlYWRvbmx5OkJvb2xlYW4sZGlzYWJsZTpCb29sZWFuLG1pbkhlaWdodDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIjEwcmVtXCJ9LG1heEhlaWdodDpTdHJpbmcsaGVpZ2h0OlN0cmluZyxkZWZpbml0aW9uczpPYmplY3QsZm9udHM6T2JqZWN0LHRvb2xiYXI6e3R5cGU6QXJyYXksdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5sZW5ndGh8fHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSl9LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bW1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiLFwianVzdGlmeVwiXSxbXCJib2xkXCIsXCJpdGFsaWNcIixcInVuZGVybGluZVwiLFwic3RyaWtlXCJdLFtcInVuZG9cIixcInJlZG9cIl1dfX0sdG9vbGJhckNvbG9yOlN0cmluZyx0b29sYmFyVGV4dENvbG9yOlN0cmluZyx0b29sYmFyVG9nZ2xlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHRvb2xiYXJCZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImdyZXktM1wifSx0b29sYmFyRmxhdDpCb29sZWFuLHRvb2xiYXJPdXRsaW5lOkJvb2xlYW4sdG9vbGJhclB1c2g6Qm9vbGVhbix0b29sYmFyUm91bmRlZDpCb29sZWFuLGNvbnRlbnRTdHlsZTpPYmplY3QsY29udGVudENsYXNzOltPYmplY3QsQXJyYXksU3RyaW5nXX0sY29tcHV0ZWQ6e2VkaXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucmVhZG9ubHkmJiF0aGlzLmRpc2FibGV9LGhhc1Rvb2xiYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b29sYmFyJiZ0aGlzLnRvb2xiYXIubGVuZ3RoPjB9LHRvb2xiYXJCYWNrZ3JvdW5kQ2xhc3M6ZnVuY3Rpb24oKXtpZih0aGlzLnRvb2xiYXJCZylyZXR1cm5cImJnLVwiK3RoaXMudG9vbGJhckJnfSxidXR0b25Qcm9wczpmdW5jdGlvbigpe3JldHVybntvdXRsaW5lOnRoaXMudG9vbGJhck91dGxpbmUsZmxhdDp0aGlzLnRvb2xiYXJGbGF0LHB1c2g6dGhpcy50b29sYmFyUHVzaCxyb3VuZGVkOnRoaXMudG9vbGJhclJvdW5kZWQsZGVuc2U6ITAsY29sb3I6dGhpcy50b29sYmFyQ29sb3IsZGlzYWJsZTohdGhpcy5lZGl0YWJsZX19LGJ1dHRvbkRlZjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHEuaTE4bi5lZGl0b3IsZT10aGlzLiRxLmljb24uZWRpdG9yO3JldHVybntib2xkOntjbWQ6XCJib2xkXCIsaWNvbjplLmJvbGQsdGlwOnQuYm9sZCxrZXk6NjZ9LGl0YWxpYzp7Y21kOlwiaXRhbGljXCIsaWNvbjplLml0YWxpYyx0aXA6dC5pdGFsaWMsa2V5OjczfSxzdHJpa2U6e2NtZDpcInN0cmlrZVRocm91Z2hcIixpY29uOmUuc3RyaWtldGhyb3VnaCx0aXA6dC5zdHJpa2V0aHJvdWdoLGtleTo4M30sdW5kZXJsaW5lOntjbWQ6XCJ1bmRlcmxpbmVcIixpY29uOmUudW5kZXJsaW5lLHRpcDp0LnVuZGVybGluZSxrZXk6ODV9LHVub3JkZXJlZDp7Y21kOlwiaW5zZXJ0VW5vcmRlcmVkTGlzdFwiLGljb246ZS51bm9yZGVyZWRMaXN0LHRpcDp0LnVub3JkZXJlZExpc3R9LG9yZGVyZWQ6e2NtZDpcImluc2VydE9yZGVyZWRMaXN0XCIsaWNvbjplLm9yZGVyZWRMaXN0LHRpcDp0Lm9yZGVyZWRMaXN0fSxzdWJzY3JpcHQ6e2NtZDpcInN1YnNjcmlwdFwiLGljb246ZS5zdWJzY3JpcHQsdGlwOnQuc3Vic2NyaXB0LGh0bWxUaXA6XCJ4PHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+XCJ9LHN1cGVyc2NyaXB0OntjbWQ6XCJzdXBlcnNjcmlwdFwiLGljb246ZS5zdXBlcnNjcmlwdCx0aXA6dC5zdXBlcnNjcmlwdCxodG1sVGlwOlwieDxzdXBlcnNjcmlwdD4yPC9zdXBlcnNjcmlwdD5cIn0sbGluazp7Y21kOlwibGlua1wiLGljb246ZS5oeXBlcmxpbmssdGlwOnQuaHlwZXJsaW5rLGtleTo3Nn0sZnVsbHNjcmVlbjp7Y21kOlwiZnVsbHNjcmVlblwiLGljb246ZS50b2dnbGVGdWxsc2NyZWVuLHRpcDp0LnRvZ2dsZUZ1bGxzY3JlZW4sa2V5OjcwfSxxdW90ZTp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkJMT0NLUVVPVEVcIixpY29uOmUucXVvdGUsdGlwOnQucXVvdGUsa2V5OjgxfSxsZWZ0OntjbWQ6XCJqdXN0aWZ5TGVmdFwiLGljb246ZS5sZWZ0LHRpcDp0LmxlZnR9LGNlbnRlcjp7Y21kOlwianVzdGlmeUNlbnRlclwiLGljb246ZS5jZW50ZXIsdGlwOnQuY2VudGVyfSxyaWdodDp7Y21kOlwianVzdGlmeVJpZ2h0XCIsaWNvbjplLnJpZ2h0LHRpcDp0LnJpZ2h0fSxqdXN0aWZ5OntjbWQ6XCJqdXN0aWZ5RnVsbFwiLGljb246ZS5qdXN0aWZ5LHRpcDp0Lmp1c3RpZnl9LHByaW50Ont0eXBlOlwibm8tc3RhdGVcIixjbWQ6XCJwcmludFwiLGljb246ZS5wcmludCx0aXA6dC5wcmludCxrZXk6ODB9LG91dGRlbnQ6e3R5cGU6XCJuby1zdGF0ZVwiLGRpc2FibGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2FyZXQmJiF0LmNhcmV0LmNhbihcIm91dGRlbnRcIil9LGNtZDpcIm91dGRlbnRcIixpY29uOmUub3V0ZGVudCx0aXA6dC5vdXRkZW50fSxpbmRlbnQ6e3R5cGU6XCJuby1zdGF0ZVwiLGRpc2FibGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2FyZXQmJiF0LmNhcmV0LmNhbihcImluZGVudFwiKX0sY21kOlwiaW5kZW50XCIsaWNvbjplLmluZGVudCx0aXA6dC5pbmRlbnR9LHJlbW92ZUZvcm1hdDp7dHlwZTpcIm5vLXN0YXRlXCIsY21kOlwicmVtb3ZlRm9ybWF0XCIsaWNvbjplLnJlbW92ZUZvcm1hdCx0aXA6dC5yZW1vdmVGb3JtYXR9LGhyOnt0eXBlOlwibm8tc3RhdGVcIixjbWQ6XCJpbnNlcnRIb3Jpem9udGFsUnVsZVwiLGljb246ZS5ocix0aXA6dC5ocn0sdW5kbzp7dHlwZTpcIm5vLXN0YXRlXCIsY21kOlwidW5kb1wiLGljb246ZS51bmRvLHRpcDp0LnVuZG8sa2V5OjkwfSxyZWRvOnt0eXBlOlwibm8tc3RhdGVcIixjbWQ6XCJyZWRvXCIsaWNvbjplLnJlZG8sdGlwOnQucmVkbyxrZXk6ODl9LGgxOntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiSDFcIixpY29uOmUuaGVhZGVyLHRpcDp0LmhlYWRlcjEsaHRtbFRpcDonPGgxIGNsYXNzPVwicS1tYS1ub25lXCI+Jyt0LmhlYWRlcjErXCI8L2gxPlwifSxoMjp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkgyXCIsaWNvbjplLmhlYWRlcix0aXA6dC5oZWFkZXIyLGh0bWxUaXA6JzxoMiBjbGFzcz1cInEtbWEtbm9uZVwiPicrdC5oZWFkZXIyK1wiPC9oMj5cIn0saDM6e2NtZDpcImZvcm1hdEJsb2NrXCIscGFyYW06XCJIM1wiLGljb246ZS5oZWFkZXIsdGlwOnQuaGVhZGVyMyxodG1sVGlwOic8aDMgY2xhc3M9XCJxLW1hLW5vbmVcIj4nK3QuaGVhZGVyMytcIjwvaDM+XCJ9LGg0OntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiSDRcIixpY29uOmUuaGVhZGVyLHRpcDp0LmhlYWRlcjQsaHRtbFRpcDonPGg0IGNsYXNzPVwicS1tYS1ub25lXCI+Jyt0LmhlYWRlcjQrXCI8L2g0PlwifSxoNTp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkg1XCIsaWNvbjplLmhlYWRlcix0aXA6dC5oZWFkZXI1LGh0bWxUaXA6JzxoNSBjbGFzcz1cInEtbWEtbm9uZVwiPicrdC5oZWFkZXI1K1wiPC9oNT5cIn0saDY6e2NtZDpcImZvcm1hdEJsb2NrXCIscGFyYW06XCJINlwiLGljb246ZS5oZWFkZXIsdGlwOnQuaGVhZGVyNixodG1sVGlwOic8aDYgY2xhc3M9XCJxLW1hLW5vbmVcIj4nK3QuaGVhZGVyNitcIjwvaDY+XCJ9LHA6e2NtZDpcImZvcm1hdEJsb2NrXCIscGFyYW06XCJESVZcIixpY29uOmUuaGVhZGVyLHRpcDp0LnBhcmFncmFwaH0sY29kZTp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIlBSRVwiLGljb246ZS5jb2RlLHRpcDpcIjxjb2RlPlwiK3QuY29kZStcIjwvY29kZT5cIn0sXCJzaXplLTFcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjFcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplMSxodG1sVGlwOic8Zm9udCBzaXplPVwiMVwiPicrdC5zaXplMStcIjwvZm9udD5cIn0sXCJzaXplLTJcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjJcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplMixodG1sVGlwOic8Zm9udCBzaXplPVwiMlwiPicrdC5zaXplMitcIjwvZm9udD5cIn0sXCJzaXplLTNcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjNcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplMyxodG1sVGlwOic8Zm9udCBzaXplPVwiM1wiPicrdC5zaXplMytcIjwvZm9udD5cIn0sXCJzaXplLTRcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjRcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplNCxodG1sVGlwOic8Zm9udCBzaXplPVwiNFwiPicrdC5zaXplNCtcIjwvZm9udD5cIn0sXCJzaXplLTVcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjVcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplNSxodG1sVGlwOic8Zm9udCBzaXplPVwiNVwiPicrdC5zaXplNStcIjwvZm9udD5cIn0sXCJzaXplLTZcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjZcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplNixodG1sVGlwOic8Zm9udCBzaXplPVwiNlwiPicrdC5zaXplNitcIjwvZm9udD5cIn0sXCJzaXplLTdcIjp7Y21kOlwiZm9udFNpemVcIixwYXJhbTpcIjdcIixpY29uOmUuc2l6ZSx0aXA6dC5zaXplNyxodG1sVGlwOic8Zm9udCBzaXplPVwiN1wiPicrdC5zaXplNytcIjwvZm9udD5cIn19fSxidXR0b25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuZGVmaW5pdGlvbnN8fHt9LGk9dGhpcy5kZWZpbml0aW9uc3x8dGhpcy5mb250cz9leHRlbmQoITAse30sdGhpcy5idXR0b25EZWYsZSxnZXRGb250cyh0aGlzLmRlZmF1bHRGb250LHRoaXMuJHEuaTE4bi5lZGl0b3IuZGVmYXVsdEZvbnQsdGhpcy4kcS5pY29uLmVkaXRvci5mb250LHRoaXMuZm9udHMpKTp0aGlzLmJ1dHRvbkRlZjtyZXR1cm4gdGhpcy50b29sYmFyLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gcy5tYXAoZnVuY3Rpb24ocyl7aWYocy5vcHRpb25zKXJldHVybnt0eXBlOlwiZHJvcGRvd25cIixpY29uOnMuaWNvbixsYWJlbDpzLmxhYmVsLGZpeGVkTGFiZWw6cy5maXhlZExhYmVsLGZpeGVkSWNvbjpzLmZpeGVkSWNvbixoaWdobGlnaHQ6cy5oaWdobGlnaHQsbGlzdDpzLmxpc3Qsb3B0aW9uczpzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpW3RdfSl9O3ZhciBuPWlbc107cmV0dXJuIG4/XCJuby1zdGF0ZVwiPT09bi50eXBlfHxlW3NdJiYodm9pZCAwPT09bi5jbWR8fHQuYnV0dG9uRGVmW24uY21kXSYmXCJuby1zdGF0ZVwiPT09dC5idXR0b25EZWZbbi5jbWRdLnR5cGUpP246ZXh0ZW5kKCEwLHt0eXBlOlwidG9nZ2xlXCJ9LG4pOnt0eXBlOlwic2xvdFwiLHNsb3Q6c319KX0pfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT1mdW5jdGlvbihlKXtlLmtleSYmKHRbZS5rZXldPXtjbWQ6ZS5jbWQscGFyYW06ZS5wYXJhbX0pfTtyZXR1cm4gdGhpcy5idXR0b25zLmZvckVhY2goZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qub3B0aW9ucz90Lm9wdGlvbnMuZm9yRWFjaChlKTplKHQpfSl9KSx0fSxpbm5lclN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5GdWxsc2NyZWVuP3RoaXMuY29udGVudFN0eWxlOlt7bWluSGVpZ2h0OnRoaXMubWluSGVpZ2h0LGhlaWdodDp0aGlzLmhlaWdodCxtYXhIZWlnaHQ6dGhpcy5tYXhIZWlnaHR9LHRoaXMuY29udGVudFN0eWxlXX0saW5uZXJDbGFzczpmdW5jdGlvbigpe3JldHVyblt0aGlzLmNvbnRlbnRDbGFzcyx7Y29sOnRoaXMuaW5GdWxsc2NyZWVuLFwib3ZlcmZsb3ctYXV0b1wiOnRoaXMuaW5GdWxsc2NyZWVufHx0aGlzLm1heEhlaWdodH1dfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntlZGl0V2F0Y2hlcjohMCxlZGl0TGlua1VybDpudWxsfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZWRpdFdhdGNoZXI/dGhpcy4kcmVmcy5jb250ZW50LmlubmVySFRNTD10OnRoaXMuZWRpdFdhdGNoZXI9ITB9fSxtZXRob2RzOntvbklucHV0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZWRpdFdhdGNoZXIpe3ZhciBlPXRoaXMuJHJlZnMuY29udGVudC5pbm5lckhUTUw7ZSE9PXRoaXMudmFsdWUmJih0aGlzLmVkaXRXYXRjaGVyPSExLHRoaXMuJGVtaXQoXCJpbnB1dFwiLGUpKX19LG9uS2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgZT1nZXRFdmVudEtleSh0KTtpZighdC5jdHJsS2V5KXJldHVybiB0aGlzLnJlZnJlc2hUb29sYmFyKCksdm9pZCh0aGlzLiRxLnBsYXRmb3JtLmlzLmllJiZ0aGlzLiRuZXh0VGljayh0aGlzLm9uSW5wdXQpKTt2YXIgaT10aGlzLmtleXNbZV07aWYodm9pZCAwIT09aSl7dmFyIHM9aS5jbWQsbj1pLnBhcmFtO3N0b3BBbmRQcmV2ZW50KHQpLHRoaXMucnVuQ21kKHMsbiwhMSksdGhpcy4kcS5wbGF0Zm9ybS5pcy5pZSYmdGhpcy4kbmV4dFRpY2sodGhpcy5vbklucHV0KX19LHJ1bkNtZDpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpczt2b2lkIDA9PT1pJiYoaT0hMCksdGhpcy5mb2N1cygpLHRoaXMuY2FyZXQuYXBwbHkodCxlLGZ1bmN0aW9uKCl7cy5mb2N1cygpLGkmJnMucmVmcmVzaFRvb2xiYXIoKX0pfSxyZWZyZXNoVG9vbGJhcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe3QuZWRpdExpbmtVcmw9bnVsbCx0LiRmb3JjZVVwZGF0ZSgpfSwxKX0sZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLmNvbnRlbnQuZm9jdXMoKX0sZ2V0Q29udGVudEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMuY29udGVudH19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXtpc1NTUnx8KGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvclwiLCExLFwiZGl2XCIpLHRoaXMuZGVmYXVsdEZvbnQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udEZhbWlseSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC4kcmVmcy5jb250ZW50JiYodC5jYXJldD1uZXcgQ2FyZXQodC4kcmVmcy5jb250ZW50LHQpLHQuJHJlZnMuY29udGVudC5pbm5lckhUTUw9dC52YWx1ZSksdC4kbmV4dFRpY2sodC5yZWZyZXNoVG9vbGJhcil9KX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlLGk9dGhpcztpZih0aGlzLmhhc1Rvb2xiYXIpe3ZhciBzPXtzdGF0aWNDbGFzczpcInEtZWRpdG9yLXRvb2xiYXIgcm93IG5vLXdyYXAgc2Nyb2xsLXhcIixjbGFzczpbe1wicS1lZGl0b3ItdG9vbGJhci1zZXBhcmF0b3JcIjohdGhpcy50b29sYmFyT3V0bGluZSYmIXRoaXMudG9vbGJhclB1c2h9LHRoaXMudG9vbGJhckJhY2tncm91bmRDbGFzc119OyhlPVtdKS5wdXNoKHQoXCJkaXZcIixleHRlbmQoe2tleTpcInFlZHRfdG9wXCJ9LHMpLFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IG5vLXdyYXAgcS1lZGl0b3ItdG9vbGJhci1wYWRkaW5nIGZpdCBpdGVtcy1jZW50ZXJcIn0sZ2V0VG9vbGJhcih0LHRoaXMpKV0pKSxudWxsIT09dGhpcy5lZGl0TGlua1VybCYmZS5wdXNoKHQoXCJkaXZcIixleHRlbmQoe2tleTpcInFlZHRfYnRtXCJ9LHMpLFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IG5vLXdyYXAgcS1lZGl0b3ItdG9vbGJhci1wYWRkaW5nIGZpdCBpdGVtcy1jZW50ZXJcIn0sZ2V0TGlua0VkaXRvcih0LHRoaXMpKV0pKSxlPXQoXCJkaXZcIixlKX1yZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZWRpdG9yXCIsc3R5bGU6e2hlaWdodDp0aGlzLmluRnVsbHNjcmVlbj9cIjEwMHZoXCI6bnVsbH0sY2xhc3M6e2Rpc2FibGVkOnRoaXMuZGlzYWJsZSxmdWxsc2NyZWVuOnRoaXMuaW5GdWxsc2NyZWVuLGNvbHVtbjp0aGlzLmluRnVsbHNjcmVlbn19LFtlLHQoXCJkaXZcIix7cmVmOlwiY29udGVudFwiLHN0YXRpY0NsYXNzOlwicS1lZGl0b3ItY29udGVudFwiLHN0eWxlOnRoaXMuaW5uZXJTdHlsZSxjbGFzczp0aGlzLmlubmVyQ2xhc3MsYXR0cnM6e2NvbnRlbnRlZGl0YWJsZTp0aGlzLmVkaXRhYmxlfSxkb21Qcm9wczppc1NTUj97aW5uZXJIVE1MOnRoaXMudmFsdWV9OnZvaWQgMCxvbjp7aW5wdXQ6dGhpcy5vbklucHV0LGtleWRvd246dGhpcy5vbktleWRvd24sY2xpY2s6dGhpcy5yZWZyZXNoVG9vbGJhcixibHVyOmZ1bmN0aW9uKCl7aS5jYXJldC5zYXZlKCl9fX0pXSl9fSxGYWJNaXhpbj17cHJvcHM6e291dGxpbmU6Qm9vbGVhbixwdXNoOkJvb2xlYW4sZmxhdDpCb29sZWFuLGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nLGdsb3NzeTpCb29sZWFufX0sUUZhYj17bmFtZTpcIlFGYWJcIixtaXhpbnM6W0ZhYk1peGluLE1vZGVsVG9nZ2xlTWl4aW5dLHByb3ZpZGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybntfX3FGYWJDbG9zZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5oaWRlKGUpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC4kcmVmcy50cmlnZ2VyJiZ0LiRyZWZzLnRyaWdnZXIuJGVsJiZ0LiRyZWZzLnRyaWdnZXIuJGVsLmZvY3VzKCksZX0pfX19LHByb3BzOntpY29uOlN0cmluZyxhY3RpdmVJY29uOlN0cmluZyxkaXJlY3Rpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJyaWdodFwifSxwZXJzaXN0ZW50OkJvb2xlYW59LHdhdGNoOnskcm91dGU6ZnVuY3Rpb24oKXshdGhpcy5wZXJzaXN0ZW50JiZ0aGlzLmhpZGUoKX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnZhbHVlJiZ0aGlzLnNob3coKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1mYWIgei1mYWIgcm93IGlubGluZSBqdXN0aWZ5LWNlbnRlclwiLGNsYXNzOntcInEtZmFiLW9wZW5lZFwiOnRoaXMuc2hvd2luZ319LFt0KFFCdG4se3JlZjpcInRyaWdnZXJcIixwcm9wczp7ZmFiOiEwLG91dGxpbmU6dGhpcy5vdXRsaW5lLHB1c2g6dGhpcy5wdXNoLGZsYXQ6dGhpcy5mbGF0LGNvbG9yOnRoaXMuY29sb3IsdGV4dENvbG9yOnRoaXMudGV4dENvbG9yLGdsb3NzeTp0aGlzLmdsb3NzeX0sb246e2NsaWNrOnRoaXMudG9nZ2xlfX0sW3RoaXMuJHNsb3RzLnRvb2x0aXAsdChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLWZhYi1pY29uIGFic29sdXRlLWZ1bGxcIixwcm9wczp7bmFtZTp0aGlzLmljb258fHRoaXMuJHEuaWNvbi5mYWIuaWNvbn19KSx0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtZmFiLWFjdGl2ZS1pY29uIGFic29sdXRlLWZ1bGxcIixwcm9wczp7bmFtZTp0aGlzLmFjdGl2ZUljb258fHRoaXMuJHEuaWNvbi5mYWIuYWN0aXZlSWNvbn19KV0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZhYi1hY3Rpb25zIGZsZXggbm8td3JhcCBpbmxpbmUgaXRlbXMtY2VudGVyXCIsY2xhc3M6XCJxLWZhYi1cIit0aGlzLmRpcmVjdGlvbn0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKX19LFFGYWJBY3Rpb249e25hbWU6XCJRRmFiQWN0aW9uXCIsbWl4aW5zOltGYWJNaXhpbl0scHJvcHM6e2ljb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0saW5qZWN0OntfX3FGYWJDbG9zZTp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRRmFiQWN0aW9uIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFGYWJcIil9fX0sbWV0aG9kczp7Y2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9fcUZhYkNsb3NlKCkudGhlbihmdW5jdGlvbigpe2UuJGVtaXQoXCJjbGlja1wiLHQpfSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoUUJ0bix7cHJvcHM6e2ZhYk1pbmk6ITAsb3V0bGluZTp0aGlzLm91dGxpbmUscHVzaDp0aGlzLnB1c2gsZmxhdDp0aGlzLmZsYXQsY29sb3I6dGhpcy5jb2xvcix0ZXh0Q29sb3I6dGhpcy50ZXh0Q29sb3IsZ2xvc3N5OnRoaXMuZ2xvc3N5LGljb246dGhpcy5pY29ufSxvbjp7Y2xpY2s6dGhpcy5jbGlja319LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUZpZWxkPXtuYW1lOlwiUUZpZWxkXCIsbWl4aW5zOltDYW5SZW5kZXJNaXhpbl0scHJvcHM6e2luc2V0Ont0eXBlOlN0cmluZyx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wiaWNvblwiLFwibGFiZWxcIixcImZ1bGxcIl0uaW5jbHVkZXModCl9fSxsYWJlbDpTdHJpbmcsY291bnQ6e3R5cGU6W051bWJlcixCb29sZWFuXSxkZWZhdWx0OiExfSxlcnJvcjpCb29sZWFuLGVycm9yTGFiZWw6U3RyaW5nLHdhcm5pbmc6Qm9vbGVhbix3YXJuaW5nTGFiZWw6U3RyaW5nLGhlbHBlcjpTdHJpbmcsaWNvbjpTdHJpbmcsaWNvbkNvbG9yOlN0cmluZyxkYXJrOkJvb2xlYW4sb3JpZW50YXRpb246e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ2ZXJ0aWNhbFwiLFwiaG9yaXpvbnRhbFwiXS5pbmNsdWRlcyh0KX19LGxhYmVsV2lkdGg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6NSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7dmFyIGU9cGFyc2VJbnQodCwxMCk7cmV0dXJuIGU+MCYmZTwxM319fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2lucHV0Ont9fX0sY29tcHV0ZWQ6e2hhc0Vycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXQuZXJyb3J8fHRoaXMuZXJyb3J9LGhhc1dhcm5pbmc6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNFcnJvciYmKHRoaXMuaW5wdXQud2FybmluZ3x8dGhpcy53YXJuaW5nKX0sY2hpbGRIYXNMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0LmZsb2F0TGFiZWx8fHRoaXMuaW5wdXQuc3RhY2tMYWJlbH0saXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXQuZGFya3x8dGhpcy5kYXJrfSxpbnNldEljb246ZnVuY3Rpb24oKXtyZXR1cm5bXCJpY29uXCIsXCJmdWxsXCJdLmluY2x1ZGVzKHRoaXMuaW5zZXQpfSxoYXNOb0lucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuUmVuZGVyJiYoIXRoaXMuaW5wdXQuJG9wdGlvbnN8fHRoaXMuaW5wdXQuX19uZWVkc0JvcmRlcil9LGNvdW50ZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmNvdW50KXt2YXIgdD10aGlzLmlucHV0Lmxlbmd0aHx8XCIwXCI7cmV0dXJuIE51bWJlci5pc0ludGVnZXIodGhpcy5jb3VudCk/dCtcIiAvIFwiK3RoaXMuY291bnQ6dH19LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJxLWZpZWxkLXJlc3BvbnNpdmVcIjohdGhpcy5pc1ZlcnRpY2FsJiYhdGhpcy5pc0hvcml6b250YWwsXCJxLWZpZWxkLXZlcnRpY2FsXCI6dGhpcy5pc1ZlcnRpY2FsLFwicS1maWVsZC1ob3Jpem9udGFsXCI6dGhpcy5pc0hvcml6b250YWwsXCJxLWZpZWxkLWZsb2F0aW5nXCI6dGhpcy5jaGlsZEhhc0xhYmVsLFwicS1maWVsZC1uby1sYWJlbFwiOiF0aGlzLmxhYmVsJiYhdGhpcy4kc2xvdHMubGFiZWwsXCJxLWZpZWxkLXdpdGgtZXJyb3JcIjp0aGlzLmhhc0Vycm9yLFwicS1maWVsZC13aXRoLXdhcm5pbmdcIjp0aGlzLmhhc1dhcm5pbmcsXCJxLWZpZWxkLWRhcmtcIjp0aGlzLmlzRGFyayxcInEtZmllbGQtbm8taW5wdXRcIjp0aGlzLmhhc05vSW5wdXR9fSxjb21wdXRlZExhYmVsV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VJbnQodGhpcy5sYWJlbFdpZHRoLDEwKX0saXNWZXJ0aWNhbDpmdW5jdGlvbigpe3JldHVyblwidmVydGljYWxcIj09PXRoaXMub3JpZW50YXRpb258fDEyPT09dGhpcy5jb21wdXRlZExhYmVsV2lkdGh9LGlzSG9yaXpvbnRhbDpmdW5jdGlvbigpe3JldHVyblwiaG9yaXpvbnRhbFwiPT09dGhpcy5vcmllbnRhdGlvbn0sbGFiZWxDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWZXJ0aWNhbD9cImNvbC0xMlwiOnRoaXMuaXNIb3Jpem9udGFsP1wiY29sLVwiK3RoaXMubGFiZWxXaWR0aDpcImNvbC14cy0xMiBjb2wtc20tXCIrdGhpcy5sYWJlbFdpZHRofSxpbnB1dENsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZlcnRpY2FsP1wiY29sLXhzLTEyXCI6dGhpcy5pc0hvcml6b250YWw/XCJjb2xcIjpcImNvbC14cy0xMiBjb2wtc21cIn0saWNvblByb3BzOmZ1bmN0aW9uKCl7dmFyIHQ9e25hbWU6dGhpcy5pY29ufTtyZXR1cm4hdGhpcy5pY29uQ29sb3J8fHRoaXMuaGFzRXJyb3J8fHRoaXMuaGFzV2FybmluZ3x8KHQuY29sb3I9dGhpcy5pY29uQ29sb3IpLHR9LGluc2V0SGFzTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm5bXCJsYWJlbFwiLFwiZnVsbFwiXS5pbmNsdWRlcyh0aGlzLmluc2V0KX19LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57X19maWVsZDp0aGlzfX0sbWV0aG9kczp7X19yZWdpc3RlcklucHV0OmZ1bmN0aW9uKHQpe3RoaXMuaW5wdXQ9dH0sX191bnJlZ2lzdGVySW5wdXQ6ZnVuY3Rpb24odCl7dCYmdCE9PXRoaXMuaW5wdXR8fCh0aGlzLmlucHV0PXt9KX0sX19nZXRCb3R0b21Db250ZW50OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0aGlzLmhhc0Vycm9yJiYoZT10aGlzLiRzbG90c1tcImVycm9yLWxhYmVsXCJdfHx0aGlzLmVycm9yTGFiZWwpP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWVycm9yIGNvbFwifSxlKTp0aGlzLmhhc1dhcm5pbmcmJihlPXRoaXMuJHNsb3RzW1wid2FybmluZy1sYWJlbFwiXXx8dGhpcy53YXJuaW5nTGFiZWwpP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLXdhcm5pbmcgY29sXCJ9LGUpOihlPXRoaXMuJHNsb3RzLmhlbHBlcnx8dGhpcy5oZWxwZXIpP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWhlbHBlciBjb2xcIn0sZSk6dChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCB0ZXh0LXRyYW5zcGFyZW50XCJ9LFtcInxcIl0pfSxfX2hhc0JvdHRvbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRzbG90c1tcImVycm9yLWxhYmVsXCJdfHx0aGlzLmVycm9yTGFiZWx8fHRoaXMuJHNsb3RzW1wid2FybmluZy1sYWJlbFwiXXx8dGhpcy53YXJuaW5nTGFiZWx8fHRoaXMuJHNsb3RzLmhlbHBlcnx8dGhpcy5oZWxwZXJ8fHRoaXMuY291bnR9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy4kc2xvdHMubGFiZWx8fHRoaXMubGFiZWw7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkIHJvdyBuby13cmFwIGl0ZW1zLXN0YXJ0XCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbdGhpcy5pY29uP3QoUUljb24se3Byb3BzOnRoaXMuaWNvblByb3BzLHN0YXRpY0NsYXNzOlwicS1maWVsZC1pY29uIHEtZmllbGQtbWFyZ2luXCJ9KTp0aGlzLmluc2V0SWNvbj90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1maWVsZC1pY29uXCJ9KTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgY29sXCJ9LFtlfHx0aGlzLmluc2V0SGFzTGFiZWw/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtbGFiZWwgcS1maWVsZC1tYXJnaW5cIixjbGFzczp0aGlzLmxhYmVsQ2xhc3Nlc30sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWxhYmVsLWlubmVyIHJvdyBpdGVtcy1jZW50ZXJcIn0sW3RoaXMuJHNsb3RzLmxhYmVsfHx0aGlzLmxhYmVsXSldKTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWNvbnRlbnRcIixjbGFzczp0aGlzLmlucHV0Q2xhc3Nlc30sW3RoaXMuJHNsb3RzLmRlZmF1bHQsdGhpcy5fX2hhc0JvdHRvbSgpP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWJvdHRvbSByb3cgbm8td3JhcFwifSxbdGhpcy5fX2dldEJvdHRvbUNvbnRlbnQodCksdGhpcy5jb3VudGVyP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWNvdW50ZXIgY29sLWF1dG9cIn0sW3RoaXMuY291bnRlcl0pOm51bGxdKTpudWxsXSldKV0pfX0sUUluZmluaXRlU2Nyb2xsPXtuYW1lOlwiUUluZmluaXRlU2Nyb2xsXCIscHJvcHM6e2hhbmRsZXI6e3R5cGU6RnVuY3Rpb24scmVxdWlyZWQ6ITB9LGlubGluZTpCb29sZWFuLG9mZnNldDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntpbmRleDowLGZldGNoaW5nOiExLHdvcmtpbmc6ITB9fSxtZXRob2RzOntwb2xsOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZmV0Y2hpbmcmJnRoaXMud29ya2luZyl7dmFyIHQ9aGVpZ2h0KHRoaXMuc2Nyb2xsQ29udGFpbmVyKSxlPW9mZnNldCh0aGlzLnNjcm9sbENvbnRhaW5lcikudG9wK3Q7b2Zmc2V0KHRoaXMuZWxlbWVudCkudG9wK2hlaWdodCh0aGlzLmVsZW1lbnQpLSh0aGlzLm9mZnNldHx8dCk8ZSYmdGhpcy5sb2FkTW9yZSgpfX0sbG9hZE1vcmU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzOyF0aGlzLmZldGNoaW5nJiZ0aGlzLndvcmtpbmcmJih0aGlzLmluZGV4KyssdGhpcy5mZXRjaGluZz0hMCx0aGlzLmhhbmRsZXIodGhpcy5pbmRleCxmdW5jdGlvbihlKXt0LmZldGNoaW5nPSExLGU/dC5zdG9wKCk6dC5lbGVtZW50LmNsb3Nlc3QoXCJib2R5XCIpJiZ0LnBvbGwoKX0pKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmluZGV4PTB9LHJlc3VtZTpmdW5jdGlvbigpeyEwIT09dGhpcy53b3JraW5nJiYodGhpcy53b3JraW5nPSEwLHRoaXMuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLnBvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKSksdGhpcy5pbW1lZGlhdGVQb2xsKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLndvcmtpbmc9ITEsdGhpcy5mZXRjaGluZz0hMSx0aGlzLnNjcm9sbENvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5wb2xsLGxpc3Rlbk9wdHMucGFzc2l2ZSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QuZWxlbWVudD10LiRyZWZzLmNvbnRlbnQsdC5zY3JvbGxDb250YWluZXI9dC5pbmxpbmU/dC4kZWw6Z2V0U2Nyb2xsVGFyZ2V0KHQuJGVsKSx0LnBvbGwoKSx0LmltbWVkaWF0ZVBvbGw9dC5wb2xsLHQucG9sbD1kZWJvdW5jZSh0LnBvbGwsNTApLCEwPT09dC53b3JraW5nJiZ0LnNjcm9sbENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdC5wb2xsLGxpc3Rlbk9wdHMucGFzc2l2ZSl9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLnBvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pbmZpbml0ZS1zY3JvbGxcIn0sW3QoXCJkaXZcIix7cmVmOlwiY29udGVudFwiLHN0YXRpY0NsYXNzOlwicS1pbmZpbml0ZS1zY3JvbGwtY29udGVudFwifSx0aGlzLiRzbG90cy5kZWZhdWx0KSx0aGlzLmZldGNoaW5nP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWluZmluaXRlLXNjcm9sbC1tZXNzYWdlXCJ9LHRoaXMuJHNsb3RzLm1lc3NhZ2UpOm51bGxdKX19LFFJbm5lckxvYWRpbmc9e25hbWU6XCJRSW5uZXJMb2FkaW5nXCIscHJvcHM6e2Rhcms6Qm9vbGVhbix2aXNpYmxlOkJvb2xlYW4sc2l6ZTp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDo0Mn0sY29sb3I6U3RyaW5nfSxyZW5kZXI6ZnVuY3Rpb24odCl7aWYodGhpcy52aXNpYmxlKXJldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pbm5lci1sb2FkaW5nIGFuaW1hdGUtZmFkZSBhYnNvbHV0ZS1mdWxsIGNvbHVtbiBmbGV4LWNlbnRlclwiLGNsYXNzOntkYXJrOnRoaXMuZGFya319LHRoaXMuJHNsb3RzLmRlZmF1bHR8fFt0KFFTcGlubmVyLHtwcm9wczp7c2l6ZTp0aGlzLnNpemUsY29sb3I6dGhpcy5jb2xvcn19KV0pfX0sUUp1bWJvdHJvbj17bmFtZTpcIlFKdW1ib3Ryb25cIixwcm9wczp7ZGFyazpCb29sZWFuLHRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRpdlwifSxpbWdTcmM6U3RyaW5nLGdyYWRpZW50OlN0cmluZ30sY29tcHV0ZWQ6e2dyYWRpZW50VHlwZTpmdW5jdGlvbigpe2lmKHRoaXMuZ3JhZGllbnQpcmV0dXJuIHRoaXMuZ3JhZGllbnQuaW5kZXhPZihcImNpcmNsZVwiKT4tMT9cInJhZGlhbFwiOlwibGluZWFyXCJ9LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbWdTcmM/e1wiYmFja2dyb3VuZC1pbWFnZVwiOlwidXJsKFwiK3RoaXMuaW1nU3JjK1wiKVwifTp0aGlzLmdyYWRpZW50VHlwZT97YmFja2dyb3VuZDp0aGlzLmdyYWRpZW50VHlwZStcIi1ncmFkaWVudChcIit0aGlzLmdyYWRpZW50K1wiKVwifTp2b2lkIDB9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQodGhpcy50YWcse3N0YXRpY0NsYXNzOlwicS1qdW1ib3Ryb25cIixzdHlsZTp0aGlzLmNvbXB1dGVkU3R5bGUsY2xhc3M6e1wicS1qdW1ib3Ryb24tZGFya1wiOnRoaXMuZGFya319LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUtub2I9e25hbWU6XCJRS25vYlwiLGRpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7dmFsdWU6TnVtYmVyLG1pbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxtYXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTAwfSxjb2xvcjpTdHJpbmcsdHJhY2tDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImdyZXktM1wifSxsaW5lV2lkdGg6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCI2cHhcIn0sc2l6ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIjEwMHB4XCJ9LHN0ZXA6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MX0sZGVjaW1hbHM6TnVtYmVyLGRpc2FibGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFufSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmRpc2FibGUmJnQucHVzaChcImRpc2FibGVkXCIpLHRoaXMucmVhZG9ubHl8fHQucHVzaChcImN1cnNvci1wb2ludGVyXCIpLHRoaXMuY29sb3ImJnQucHVzaChcInRleHQtXCIrdGhpcy5jb2xvciksdH0sc3ZnU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57XCJzdHJva2UtZGFzaGFycmF5XCI6XCIyOTUuMzFweCwgMjk1LjMxcHhcIixcInN0cm9rZS1kYXNob2Zmc2V0XCI6Mjk1LjMxKih0aGlzLiRxLmkxOG4ucnRsPy0xOjEpKigxLSh0aGlzLm1vZGVsLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pKStcInB4XCIsdHJhbnNpdGlvbjp0aGlzLmRyYWdnaW5nP1wiXCI6XCJzdHJva2UtZGFzaG9mZnNldCAwLjZzIGVhc2UgMHMsIHN0cm9rZSAwLjZzIGVhc2VcIn19LGVkaXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZGlzYWJsZSYmIXRoaXMucmVhZG9ubHl9LGNvbXB1dGVkRGVjaW1hbHM6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5kZWNpbWFscz90aGlzLmRlY2ltYWxzfHwwOihTdHJpbmcodGhpcy5zdGVwKS50cmltKFwiMFwiKS5zcGxpdChcIi5cIilbMV18fFwiXCIpLmxlbmd0aH0sY29tcHV0ZWRTdGVwOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZGVjaW1hbHM/MS9NYXRoLnBvdygxMCx0aGlzLmRlY2ltYWxzfHwwKTp0aGlzLnN0ZXB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vZGVsOnRoaXMudmFsdWUsZHJhZ2dpbmc6ITF9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0PHRoaXMubWluKXRoaXMubW9kZWw9dGhpcy5taW47ZWxzZXtpZighKHQ+dGhpcy5tYXgpKXt2YXIgaT10aGlzLmNvbXB1dGVkRGVjaW1hbHMmJlwibnVtYmVyXCI9PXR5cGVvZiB0P3BhcnNlRmxvYXQodC50b0ZpeGVkKHRoaXMuY29tcHV0ZWREZWNpbWFscykpOnQ7cmV0dXJuIHZvaWQoaSE9PXRoaXMubW9kZWwmJih0aGlzLm1vZGVsPWkpKX10aGlzLm1vZGVsPXRoaXMubWF4fXRoaXMuJGVtaXQoXCJpbnB1dFwiLHRoaXMubW9kZWwpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7ZS5tb2RlbCE9PWUudmFsdWUmJmUuJGVtaXQoXCJjaGFuZ2VcIixlLm1vZGVsKX0pfX0sbWV0aG9kczp7X19wYW46ZnVuY3Rpb24odCl7dGhpcy5lZGl0YWJsZSYmKHQuaXNGaW5hbD90aGlzLl9fZHJhZ1N0b3AodC5ldnQpOnQuaXNGaXJzdD90aGlzLl9fZHJhZ1N0YXJ0KHQuZXZ0KTp0aGlzLl9fZHJhZ01vdmUodC5ldnQpKX0sX19kcmFnU3RhcnQ6ZnVuY3Rpb24odCl7dGhpcy5lZGl0YWJsZSYmKHN0b3BBbmRQcmV2ZW50KHQpLHRoaXMuY2VudGVyUG9zaXRpb249dGhpcy5fX2dldENlbnRlcigpLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmRyYWdnaW5nPSEwLHRoaXMuX19vbklucHV0KHQpKX0sX19kcmFnTW92ZTpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nJiZ0aGlzLmVkaXRhYmxlJiYoc3RvcEFuZFByZXZlbnQodCksdGhpcy5fX29uSW5wdXQodCx0aGlzLmNlbnRlclBvc2l0aW9uKSl9LF9fZHJhZ1N0b3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmVkaXRhYmxlJiYoc3RvcEFuZFByZXZlbnQodCksdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5kcmFnZ2luZz0hMX0sMTAwKSx0aGlzLl9fb25JbnB1dCh0LHRoaXMuY2VudGVyUG9zaXRpb24sITApKX0sX19vbktleURvd246ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXlDb2RlO2lmKHRoaXMuZWRpdGFibGUmJlszNyw0MCwzOSwzOF0uaW5jbHVkZXMoZSkpe3N0b3BBbmRQcmV2ZW50KHQpO3ZhciBpPXQuY3RybEtleT8xMCp0aGlzLmNvbXB1dGVkU3RlcDp0aGlzLmNvbXB1dGVkU3RlcCxzPVszNyw0MF0uaW5jbHVkZXMoZSk/LWk6aTt0aGlzLl9fb25JbnB1dFZhbHVlKGJldHdlZW4odGhpcy5tb2RlbCtzLHRoaXMubWluLHRoaXMubWF4KSl9fSxfX29uS2V5VXA6ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXlDb2RlO3RoaXMuZWRpdGFibGUmJlszNyw0MCwzOSwzOF0uaW5jbHVkZXMoZSkmJnRoaXMuX19lbWl0Q2hhbmdlKCl9LF9fb25JbnB1dDpmdW5jdGlvbih0LGUsaSl7aWYodm9pZCAwPT09ZSYmKGU9dGhpcy5fX2dldENlbnRlcigpKSx0aGlzLmVkaXRhYmxlKXt2YXIgcz1wb3NpdGlvbih0KSxuPU1hdGguYWJzKHMudG9wLWUudG9wKSxvPU1hdGguc3FydChNYXRoLnBvdyhNYXRoLmFicyhzLnRvcC1lLnRvcCksMikrTWF0aC5wb3coTWF0aC5hYnMocy5sZWZ0LWUubGVmdCksMikpLHI9TWF0aC5hc2luKG4vbykqKDE4MC9NYXRoLlBJKTtyPXMudG9wPGUudG9wP2UubGVmdDxzLmxlZnQ/OTAtcjoyNzArcjplLmxlZnQ8cy5sZWZ0P3IrOTA6MjcwLXIsdGhpcy4kcS5pMThuLnJ0bCYmKHI9MzYwLXIpO3ZhciBhPXRoaXMubWluK3IvMzYwKih0aGlzLm1heC10aGlzLm1pbiksbD1hJXRoaXMuc3RlcCxjPWJldHdlZW4oYS1sKyhNYXRoLmFicyhsKT49dGhpcy5zdGVwLzI/KGw8MD8tMToxKSp0aGlzLnN0ZXA6MCksdGhpcy5taW4sdGhpcy5tYXgpO3RoaXMuX19vbklucHV0VmFsdWUoYyxpKX19LF9fb25JbnB1dFZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5jb21wdXRlZERlY2ltYWxzJiYodD1wYXJzZUZsb2F0KHQudG9GaXhlZCh0aGlzLmNvbXB1dGVkRGVjaW1hbHMpKSksdGhpcy5tb2RlbCE9PXQmJih0aGlzLm1vZGVsPXQpLHRoaXMuJGVtaXQoXCJkcmFnLXZhbHVlXCIsdCksdGhpcy52YWx1ZSE9PXQmJih0aGlzLiRlbWl0KFwiaW5wdXRcIix0KSxlJiZ0aGlzLl9fZW1pdENoYW5nZSh0KSl9LF9fZW1pdENoYW5nZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQmJih0PXRoaXMubW9kZWwpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7SlNPTi5zdHJpbmdpZnkodCkhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLHQpfSl9LF9fZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7dmFyIHQ9b2Zmc2V0KHRoaXMuJGVsKTtyZXR1cm57dG9wOnQudG9wK2hlaWdodCh0aGlzLiRlbCkvMixsZWZ0OnQubGVmdCt3aWR0aCh0aGlzLiRlbCkvMn19fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEta25vYiBub24tc2VsZWN0YWJsZVwiLGNsYXNzOnRoaXMuY2xhc3NlcyxzdHlsZTp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemV9fSxbdChcImRpdlwiLHtvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIWUuZHJhZ2dpbmcmJmUuX19vbklucHV0KHQsdm9pZCAwLCEwKX19LGRpcmVjdGl2ZXM6dGhpcy5lZGl0YWJsZT9be25hbWU6XCJ0b3VjaC1wYW5cIixtb2RpZmllcnM6e3ByZXZlbnQ6ITAsc3RvcDohMH0sdmFsdWU6dGhpcy5fX3Bhbn1dOm51bGx9LFt0KFwic3ZnXCIse2F0dHJzOnt2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0gNTAsNTAgbSAwLC00NyBhIDQ3LDQ3IDAgMSAxIDAsOTQgYSA0Nyw0NyAwIDEgMSAwLC05NFwiLFwiZmlsbC1vcGFjaXR5XCI6XCIwXCIsc3Ryb2tlOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2Utd2lkdGhcIjp0aGlzLmxpbmVXaWR0aH0sY2xhc3M6XCJ0ZXh0LVwiK3RoaXMudHJhY2tDb2xvcn0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTSA1MCw1MCBtIDAsLTQ3IGEgNDcsNDcgMCAxIDEgMCw5NCBhIDQ3LDQ3IDAgMSAxIDAsLTk0XCIsXCJmaWxsLW9wYWNpdHlcIjpcIjBcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZS1saW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlLXdpZHRoXCI6dGhpcy5saW5lV2lkdGh9LHN0eWxlOnRoaXMuc3ZnU3R5bGV9KV0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWtub2ItbGFiZWwgcm93IGZsZXgtY2VudGVyIGNvbnRlbnQtY2VudGVyXCIsYXR0cnM6e3RhYmluZGV4OnRoaXMuZWRpdGFibGU/MDotMX0sb246e2tleWRvd246dGhpcy5fX29uS2V5RG93bixrZXl1cDp0aGlzLl9fb25LZXlVcH19LHRoaXMuJHNsb3RzLmRlZmF1bHR8fFt0KFwic3BhblwiLFt0aGlzLm1vZGVsXSldKV0pXSl9fSxRU2Nyb2xsT2JzZXJ2YWJsZT17bmFtZTpcIlFTY3JvbGxPYnNlcnZhYmxlXCIscHJvcHM6e2RlYm91bmNlOk51bWJlcn0scmVuZGVyOmZ1bmN0aW9uKCl7fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3BvczowLGRpcjpcImRvd25cIixkaXJDaGFuZ2VkOiExLGRpckNoYW5nZVBvczowfX0sbWV0aG9kczp7Z2V0UG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm57cG9zaXRpb246dGhpcy5wb3MsZGlyZWN0aW9uOnRoaXMuZGlyLGRpcmVjdGlvbkNoYW5nZWQ6dGhpcy5kaXJDaGFuZ2VkLGluZmxleGlvblBvc2l0aW9uOnRoaXMuZGlyQ2hhbmdlUG9zfX0sdHJpZ2dlcjpmdW5jdGlvbih0KXshMD09PXR8fDA9PT10aGlzLmRlYm91bmNlP3RoaXMuZW1pdCgpOnRoaXMudGltZXJ8fCh0aGlzLnRpbWVyPXRoaXMuZGVib3VuY2U/c2V0VGltZW91dCh0aGlzLmVtaXQsdGhpcy5kZWJvdW5jZSk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuZW1pdCkpfSxlbWl0OmZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5tYXgoMCxnZXRTY3JvbGxQb3NpdGlvbih0aGlzLnRhcmdldCkpLGU9dC10aGlzLnBvczwwP1widXBcIjpcImRvd25cIjt0aGlzLmRpckNoYW5nZWQ9dGhpcy5kaXIhPT1lLHRoaXMuZGlyQ2hhbmdlZCYmKHRoaXMuZGlyPWUsdGhpcy5kaXJDaGFuZ2VQb3M9dGhpcy5wb3MpLHRoaXMudGltZXI9bnVsbCx0aGlzLnBvcz10LHRoaXMuJGVtaXQoXCJzY3JvbGxcIix0aGlzLmdldFBvc2l0aW9uKCkpfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMudGFyZ2V0PWdldFNjcm9sbFRhcmdldCh0aGlzLiRlbC5wYXJlbnROb2RlKSx0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy50cmlnZ2VyLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy50cmlnZ2VyKCEwKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKSx0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy50cmlnZ2VyLGxpc3Rlbk9wdHMucGFzc2l2ZSl9fSxRTGF5b3V0PXtuYW1lOlwiUUxheW91dFwiLHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57bGF5b3V0OnRoaXN9fSxwcm9wczp7Y29udGFpbmVyOkJvb2xlYW4sdmlldzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImhoaCBscHIgZmZmXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybi9eKGh8bCloKGh8cikgbHByIChmfGwpZihmfHIpJC8udGVzdCh0LnRvTG93ZXJDYXNlKCkpfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aGVpZ2h0Om9uU1NSPzA6d2luZG93LmlubmVySGVpZ2h0LHdpZHRoOm9uU1NSfHx0aGlzLmNvbnRhaW5lcj8wOndpbmRvdy5pbm5lcldpZHRoLGNvbnRhaW5lckhlaWdodDowLHNjcm9sbGJhcldpZHRoOm9uU1NSPzA6Z2V0U2Nyb2xsYmFyV2lkdGgoKSxoZWFkZXI6e3NpemU6MCxvZmZzZXQ6MCxzcGFjZTohMX0scmlnaHQ6e3NpemU6MzAwLG9mZnNldDowLHNwYWNlOiExfSxmb290ZXI6e3NpemU6MCxvZmZzZXQ6MCxzcGFjZTohMX0sbGVmdDp7c2l6ZTozMDAsb2Zmc2V0OjAsc3BhY2U6ITF9LHNjcm9sbDp7cG9zaXRpb246MCxkaXJlY3Rpb246XCJkb3duXCJ9fX0sY29tcHV0ZWQ6e3Jvd3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZpZXcudG9Mb3dlckNhc2UoKS5zcGxpdChcIiBcIik7cmV0dXJue3RvcDp0WzBdLnNwbGl0KFwiXCIpLG1pZGRsZTp0WzFdLnNwbGl0KFwiXCIpLGJvdHRvbTp0WzJdLnNwbGl0KFwiXCIpfX0sdGFyZ2V0U3R5bGU6ZnVuY3Rpb24oKXt2YXIgdDtpZigwIT09dGhpcy5zY3JvbGxiYXJXaWR0aClyZXR1cm4odD17fSlbdGhpcy4kcS5pMThuLnJ0bD9cImxlZnRcIjpcInJpZ2h0XCJdPXRoaXMuc2Nyb2xsYmFyV2lkdGgrXCJweFwiLHR9LHRhcmdldENoaWxkU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdDtpZigwIT09dGhpcy5zY3JvbGxiYXJXaWR0aClyZXR1cm4odD17fSlbdGhpcy4kcS5pMThuLnJ0bD9cInJpZ2h0XCI6XCJsZWZ0XCJdPTAsdFt0aGlzLiRxLmkxOG4ucnRsP1wibGVmdFwiOlwicmlnaHRcIl09XCItXCIrdGhpcy5zY3JvbGxiYXJXaWR0aCtcInB4XCIsdC53aWR0aD1cImNhbGMoMTAwJSArIFwiK3RoaXMuc2Nyb2xsYmFyV2lkdGgrXCJweClcIix0fX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuaW5zdGFuY2VzPXtoZWFkZXI6bnVsbCxyaWdodDpudWxsLGZvb3RlcjpudWxsLGxlZnQ6bnVsbH19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXRcIn0sW3QoUVNjcm9sbE9ic2VydmFibGUse29uOntzY3JvbGw6dGhpcy5fX29uUGFnZVNjcm9sbH19KSx0KFFSZXNpemVPYnNlcnZhYmxlLHtvbjp7cmVzaXplOnRoaXMuX19vblBhZ2VSZXNpemV9fSksdGhpcy4kc2xvdHMuZGVmYXVsdF0pO3JldHVybiB0aGlzLmNvbnRhaW5lcj90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtY29udGFpbmVyIHJlbGF0aXZlLXBvc2l0aW9uIG92ZXJmbG93LWhpZGRlblwifSxbdChRUmVzaXplT2JzZXJ2YWJsZSx7b246e3Jlc2l6ZTp0aGlzLl9fb25Db250YWluZXJSZXNpemV9fSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImFic29sdXRlLWZ1bGxcIixzdHlsZTp0aGlzLnRhcmdldFN0eWxlfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm92ZXJmbG93LWF1dG9cIixzdHlsZTp0aGlzLnRhcmdldENoaWxkU3R5bGV9LFtlXSldKV0pOmV9LG1ldGhvZHM6e19fYW5pbWF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy50aW1lcj9jbGVhclRpbWVvdXQodGhpcy50aW1lcik6ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwicS1sYXlvdXQtYW5pbWF0ZVwiKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJxLWxheW91dC1hbmltYXRlXCIpLHQudGltZXI9bnVsbH0sMTUwKX0sX19vblBhZ2VTY3JvbGw6ZnVuY3Rpb24odCl7dGhpcy5zY3JvbGw9dCx0aGlzLiRlbWl0KFwic2Nyb2xsXCIsdCl9LF9fb25QYWdlUmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaGVpZ2h0LGk9dC53aWR0aCxzPSExO3RoaXMuaGVpZ2h0IT09ZSYmKHM9ITAsdGhpcy5oZWlnaHQ9ZSx0aGlzLiRlbWl0KFwic2Nyb2xsSGVpZ2h0XCIsZSksdGhpcy5fX3VwZGF0ZVNjcm9sbGJhcldpZHRoKCkpLHRoaXMud2lkdGghPT1pJiYocz0hMCx0aGlzLndpZHRoPWkpLHMmJnRoaXMuJGVtaXQoXCJyZXNpemVcIix7aGVpZ2h0OmUsd2lkdGg6aX0pfSxfX29uQ29udGFpbmVyUmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaGVpZ2h0O3RoaXMuY29udGFpbmVySGVpZ2h0IT09ZSYmKHRoaXMuY29udGFpbmVySGVpZ2h0PWUsdGhpcy5fX3VwZGF0ZVNjcm9sbGJhcldpZHRoKCkpfSxfX3VwZGF0ZVNjcm9sbGJhcldpZHRoOmZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXIpe3ZhciB0PXRoaXMuaGVpZ2h0PnRoaXMuY29udGFpbmVySGVpZ2h0P2dldFNjcm9sbGJhcldpZHRoKCk6MDt0aGlzLnNjcm9sbGJhcldpZHRoIT09dCYmKHRoaXMuc2Nyb2xsYmFyV2lkdGg9dCl9fX19LGR1cmF0aW9uPTE1MCxRTGF5b3V0RHJhd2VyPXtuYW1lOlwiUUxheW91dERyYXdlclwiLGluamVjdDp7bGF5b3V0OntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFMYXlvdXREcmF3ZXIgbmVlZHMgdG8gYmUgY2hpbGQgb2YgUUxheW91dFwiKX19fSxtaXhpbnM6W01vZGVsVG9nZ2xlTWl4aW5dLGRpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7b3ZlcmxheTpCb29sZWFuLHNpZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJsZWZ0XCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImxlZnRcIixcInJpZ2h0XCJdLmluY2x1ZGVzKHQpfX0sd2lkdGg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MzAwfSxtaW5pOkJvb2xlYW4sbWluaVdpZHRoOnt0eXBlOk51bWJlcixkZWZhdWx0OjYwfSxicmVha3BvaW50Ont0eXBlOk51bWJlcixkZWZhdWx0Ojk5Mn0sYmVoYXZpb3I6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJkZWZhdWx0XCIsXCJkZXNrdG9wXCIsXCJtb2JpbGVcIl0uaW5jbHVkZXModCl9LGRlZmF1bHQ6XCJkZWZhdWx0XCJ9LHNob3dJZkFib3ZlOkJvb2xlYW4sY29udGVudFN0eWxlOk9iamVjdCxjb250ZW50Q2xhc3M6W1N0cmluZyxPYmplY3QsQXJyYXldLG5vSGlkZU9uUm91dGVDaGFuZ2U6Qm9vbGVhbixub1N3aXBlT3BlbjpCb29sZWFuLG5vU3dpcGVDbG9zZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaG93SWZBYm92ZXx8dm9pZCAwPT09dGhpcy52YWx1ZXx8dGhpcy52YWx1ZSxlPVwibW9iaWxlXCIhPT10aGlzLmJlaGF2aW9yJiZ0aGlzLmJyZWFrcG9pbnQ8dGhpcy5sYXlvdXQud2lkdGgmJiF0aGlzLm92ZXJsYXkmJnQ7cmV0dXJuIHZvaWQgMCE9PXRoaXMudmFsdWUmJnRoaXMudmFsdWUhPT1lJiZ0aGlzLiRlbWl0KFwiaW5wdXRcIixlKSx7c2hvd2luZzplLGJlbG93QnJlYWtwb2ludDpcIm1vYmlsZVwiPT09dGhpcy5iZWhhdmlvcnx8XCJkZXNrdG9wXCIhPT10aGlzLmJlaGF2aW9yJiZ0aGlzLmJyZWFrcG9pbnQ+PXRoaXMubGF5b3V0LndpZHRoLGxhcmdlU2NyZWVuU3RhdGU6dCxtb2JpbGVPcGVuZWQ6ITF9fSx3YXRjaDp7YmVsb3dCcmVha3BvaW50OmZ1bmN0aW9uKHQpe3RoaXMubW9iaWxlT3BlbmVkfHwodD8odGhpcy5vdmVybGF5fHwodGhpcy5sYXJnZVNjcmVlblN0YXRlPXRoaXMuc2hvd2luZyksdGhpcy5oaWRlKCExKSk6dGhpcy5vdmVybGF5fHx0aGlzW3RoaXMubGFyZ2VTY3JlZW5TdGF0ZT9cInNob3dcIjpcImhpZGVcIl0oITEpKX0sc2lkZTpmdW5jdGlvbih0LGUpe3RoaXMubGF5b3V0W2VdLnNwYWNlPSExLHRoaXMubGF5b3V0W2VdLm9mZnNldD0wfSxiZWhhdmlvcjpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlTG9jYWwoXCJiZWxvd0JyZWFrcG9pbnRcIixcIm1vYmlsZVwiPT09dHx8XCJkZXNrdG9wXCIhPT10JiZ0aGlzLmJyZWFrcG9pbnQ+PXRoaXMubGF5b3V0LndpZHRoKX0sYnJlYWtwb2ludDpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlTG9jYWwoXCJiZWxvd0JyZWFrcG9pbnRcIixcIm1vYmlsZVwiPT09dGhpcy5iZWhhdmlvcnx8XCJkZXNrdG9wXCIhPT10aGlzLmJlaGF2aW9yJiZ0Pj10aGlzLmxheW91dC53aWR0aCl9LFwibGF5b3V0LndpZHRoXCI6ZnVuY3Rpb24odCl7dGhpcy5fX3VwZGF0ZUxvY2FsKFwiYmVsb3dCcmVha3BvaW50XCIsXCJtb2JpbGVcIj09PXRoaXMuYmVoYXZpb3J8fFwiZGVza3RvcFwiIT09dGhpcy5iZWhhdmlvciYmdGhpcy5icmVha3BvaW50Pj10KX0sXCJsYXlvdXQuc2Nyb2xsYmFyV2lkdGhcIjpmdW5jdGlvbigpe3RoaXMuYXBwbHlQb3NpdGlvbih0aGlzLnNob3dpbmc/MDp2b2lkIDApfSxvZmZzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHQpfSxvbkxheW91dDpmdW5jdGlvbih0KXt0aGlzLiRlbWl0KFwib24tbGF5b3V0XCIsdCksdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsdCl9LCRyb3V0ZTpmdW5jdGlvbigpe3RoaXMubm9IaWRlT25Sb3V0ZUNoYW5nZXx8KHRoaXMubW9iaWxlT3BlbmVkfHx0aGlzLm9uU2NyZWVuT3ZlcmxheSkmJnRoaXMuaGlkZSgpfSxyaWdodFNpZGU6ZnVuY3Rpb24oKXt0aGlzLmFwcGx5UG9zaXRpb24oKX0sc2l6ZTpmdW5jdGlvbih0KXt0aGlzLmFwcGx5UG9zaXRpb24oKSx0aGlzLl9fdXBkYXRlKFwic2l6ZVwiLHQpfSxcIiRxLmkxOG4ucnRsXCI6ZnVuY3Rpb24oKXt0aGlzLmFwcGx5UG9zaXRpb24oKX0sbWluaTpmdW5jdGlvbigpe3RoaXMudmFsdWUmJnRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpfX0sY29tcHV0ZWQ6e3JpZ2h0U2lkZTpmdW5jdGlvbigpe3JldHVyblwicmlnaHRcIj09PXRoaXMuc2lkZX0sb2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc2hvd2luZ3x8dGhpcy5tb2JpbGVPcGVuZWR8fHRoaXMub3ZlcmxheT8wOnRoaXMuc2l6ZX0sc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTWluaT90aGlzLm1pbmlXaWR0aDp0aGlzLndpZHRofSxmaXhlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm92ZXJsYXl8fHRoaXMubGF5b3V0LnZpZXcuaW5kZXhPZih0aGlzLnJpZ2h0U2lkZT9cIlJcIjpcIkxcIik+LTF9LG9uTGF5b3V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hvd2luZyYmIXRoaXMubW9iaWxlVmlldyYmIXRoaXMub3ZlcmxheX0sb25TY3JlZW5PdmVybGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hvd2luZyYmIXRoaXMubW9iaWxlVmlldyYmdGhpcy5vdmVybGF5fSxiYWNrZHJvcENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue1wibm8tcG9pbnRlci1ldmVudHNcIjohdGhpcy5zaG93aW5nfHwhdGhpcy5tb2JpbGVWaWV3fX0sbW9iaWxlVmlldzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJlbG93QnJlYWtwb2ludHx8dGhpcy5tb2JpbGVPcGVuZWR9LGhlYWRlclNsb3Q6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5vdmVybGF5JiYodGhpcy5yaWdodFNpZGU/XCJyXCI9PT10aGlzLmxheW91dC5yb3dzLnRvcFsyXTpcImxcIj09PXRoaXMubGF5b3V0LnJvd3MudG9wWzBdKX0sZm9vdGVyU2xvdDpmdW5jdGlvbigpe3JldHVybiF0aGlzLm92ZXJsYXkmJih0aGlzLnJpZ2h0U2lkZT9cInJcIj09PXRoaXMubGF5b3V0LnJvd3MuYm90dG9tWzJdOlwibFwiPT09dGhpcy5sYXlvdXQucm93cy5ib3R0b21bMF0pfSxiZWxvd0NsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue2ZpeGVkOiEwLFwib24tdG9wXCI6ITAsXCJxLWxheW91dC1kcmF3ZXItZGVsaW1pdGVyXCI6dGhpcy5maXhlZCYmdGhpcy5zaG93aW5nLFwicS1sYXlvdXQtZHJhd2VyLW1vYmlsZVwiOiEwLFwidG9wLXBhZGRpbmdcIjohMH19LGFib3ZlQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm57Zml4ZWQ6dGhpcy5maXhlZHx8IXRoaXMub25MYXlvdXQsXCJxLWxheW91dC1kcmF3ZXItbWluaVwiOnRoaXMuaXNNaW5pLFwicS1sYXlvdXQtZHJhd2VyLW5vcm1hbFwiOiF0aGlzLmlzTWluaSxcInEtbGF5b3V0LWRyYXdlci1kZWxpbWl0ZXJcIjp0aGlzLmZpeGVkJiZ0aGlzLnNob3dpbmcsXCJ0b3AtcGFkZGluZ1wiOnRoaXMuaGVhZGVyU2xvdH19LGFib3ZlU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5sYXlvdXQuaGVhZGVyLnNwYWNlJiYhdGhpcy5oZWFkZXJTbG90JiYodGhpcy5maXhlZD90LnRvcD10aGlzLmxheW91dC5oZWFkZXIub2Zmc2V0K1wicHhcIjp0aGlzLmxheW91dC5oZWFkZXIuc3BhY2UmJih0LnRvcD10aGlzLmxheW91dC5oZWFkZXIuc2l6ZStcInB4XCIpKSx0aGlzLmxheW91dC5mb290ZXIuc3BhY2UmJiF0aGlzLmZvb3RlclNsb3QmJih0aGlzLmZpeGVkP3QuYm90dG9tPXRoaXMubGF5b3V0LmZvb3Rlci5vZmZzZXQrXCJweFwiOnRoaXMubGF5b3V0LmZvb3Rlci5zcGFjZSYmKHQuYm90dG9tPXRoaXMubGF5b3V0LmZvb3Rlci5zaXplK1wicHhcIikpLHR9LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5jb250ZW50U3R5bGUse3dpZHRoOnRoaXMuc2l6ZStcInB4XCJ9LHRoaXMubW9iaWxlVmlldz9cIlwiOnRoaXMuYWJvdmVTdHlsZV19LGNvbXB1dGVkQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5bXCJxLWxheW91dC1kcmF3ZXItXCIrdGhpcy5zaWRlLHRoaXMubGF5b3V0LmNvbnRhaW5lcj9cIm92ZXJmbG93LWF1dG9cIjpcInNjcm9sbFwiLHRoaXMuY29udGVudENsYXNzLHRoaXMubW9iaWxlVmlldz90aGlzLmJlbG93Q2xhc3M6dGhpcy5hYm92ZUNsYXNzXX0sc3RhdGVEaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy4kcS5pMThuLnJ0bD8tMToxKSoodGhpcy5yaWdodFNpZGU/MTotMSl9LGlzTWluaTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1pbmkmJiF0aGlzLm1vYmlsZVZpZXd9LG9uTmF0aXZlRXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5tb2JpbGVWaWV3KXJldHVybntcIiFjbGlja1wiOmZ1bmN0aW9uKGUpe3QuJGVtaXQoXCJjbGlja1wiLGUpfSxtb3VzZW92ZXI6ZnVuY3Rpb24oZSl7dC4kZW1pdChcIm1vdXNlb3ZlclwiLGUpfSxtb3VzZW91dDpmdW5jdGlvbihlKXt0LiRlbWl0KFwibW91c2VvdXRcIixlKX19fX0sbWV0aG9kczp7YXBwbHlQb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQ/dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0PWUuc2hvd2luZz8wOmUuc2l6ZSxlLmFwcGx5UG9zaXRpb24oZS5zdGF0ZURpcmVjdGlvbip0KX0pOnRoaXMuJHJlZnMuY29udGVudCYmKHRoaXMubGF5b3V0LmNvbnRhaW5lciYmdGhpcy5yaWdodFNpZGUmJih0aGlzLm1vYmlsZVZpZXd8fE1hdGguYWJzKHQpPT09dGhpcy5zaXplKSYmKHQrPXRoaXMuc3RhdGVEaXJlY3Rpb24qdGhpcy5sYXlvdXQuc2Nyb2xsYmFyV2lkdGgpLHRoaXMuJHJlZnMuY29udGVudC5zdHlsZS50cmFuc2Zvcm09XCJ0cmFuc2xhdGVYKFwiK3QrXCJweClcIil9LGFwcGx5QmFja2Ryb3A6ZnVuY3Rpb24odCl7dGhpcy4kcmVmcy5iYWNrZHJvcCYmKHRoaXMuJHJlZnMuYmFja2Ryb3Auc3R5bGUuYmFja2dyb3VuZENvbG9yPVwicmdiYSgwLDAsMCxcIisuNCp0K1wiKVwiKX0sX19zZXRTY3JvbGxhYmxlOmZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0LmNvbnRhaW5lcnx8ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3RbdD9cImFkZFwiOlwicmVtb3ZlXCJdKFwicS1ib2R5LWRyYXdlci10b2dnbGVcIil9LF9fb3BlbkJ5VG91Y2g6ZnVuY3Rpb24odCl7aWYodGhpcy5iZWxvd0JyZWFrcG9pbnQpe3ZhciBlPXRoaXMuc2l6ZSxpPWJldHdlZW4odC5kaXN0YW5jZS54LDAsZSk7aWYodC5pc0ZpbmFsKXt2YXIgcz10aGlzLiRyZWZzLmNvbnRlbnQsbj1pPj1NYXRoLm1pbig3NSxlKTtyZXR1cm4gcy5jbGFzc0xpc3QucmVtb3ZlKFwibm8tdHJhbnNpdGlvblwiKSx2b2lkKG4/dGhpcy5zaG93KCk6KHRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpLHRoaXMuYXBwbHlCYWNrZHJvcCgwKSx0aGlzLmFwcGx5UG9zaXRpb24odGhpcy5zdGF0ZURpcmVjdGlvbiplKSxzLmNsYXNzTGlzdC5yZW1vdmUoXCJxLWxheW91dC1kcmF3ZXItZGVsaW1pdGVyXCIpKSl9aWYodGhpcy5hcHBseVBvc2l0aW9uKCh0aGlzLiRxLmkxOG4ucnRsPyF0aGlzLnJpZ2h0U2lkZTp0aGlzLnJpZ2h0U2lkZSk/TWF0aC5tYXgoZS1pLDApOk1hdGgubWluKDAsaS1lKSksdGhpcy5hcHBseUJhY2tkcm9wKGJldHdlZW4oaS9lLDAsMSkpLHQuaXNGaXJzdCl7dmFyIG89dGhpcy4kcmVmcy5jb250ZW50O28uY2xhc3NMaXN0LmFkZChcIm5vLXRyYW5zaXRpb25cIiksby5jbGFzc0xpc3QuYWRkKFwicS1sYXlvdXQtZHJhd2VyLWRlbGltaXRlclwiKX19fSxfX2Nsb3NlQnlUb3VjaDpmdW5jdGlvbih0KXtpZih0aGlzLm1vYmlsZU9wZW5lZCl7dmFyIGU9dGhpcy5zaXplLGk9dC5kaXJlY3Rpb249PT10aGlzLnNpZGUscz0odGhpcy4kcS5pMThuLnJ0bD8haTppKT9iZXR3ZWVuKHQuZGlzdGFuY2UueCwwLGUpOjA7aWYodC5pc0ZpbmFsKXt2YXIgbj1NYXRoLmFicyhzKTxNYXRoLm1pbig3NSxlKTtyZXR1cm4gdGhpcy4kcmVmcy5jb250ZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJuby10cmFuc2l0aW9uXCIpLHZvaWQobj8odGhpcy5sYXlvdXQuX19hbmltYXRlKCksdGhpcy5hcHBseUJhY2tkcm9wKDEpLHRoaXMuYXBwbHlQb3NpdGlvbigwKSk6dGhpcy5oaWRlKCkpfXRoaXMuYXBwbHlQb3NpdGlvbih0aGlzLnN0YXRlRGlyZWN0aW9uKnMpLHRoaXMuYXBwbHlCYWNrZHJvcChiZXR3ZWVuKDEtcy9lLDAsMSkpLHQuaXNGaXJzdCYmdGhpcy4kcmVmcy5jb250ZW50LmNsYXNzTGlzdC5hZGQoXCJuby10cmFuc2l0aW9uXCIpfX0sX19zaG93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9ITApLHQmJnRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpLHRoaXMuYXBwbHlQb3NpdGlvbigwKTt2YXIgaT10aGlzLmxheW91dC5pbnN0YW5jZXNbdGhpcy5yaWdodFNpZGU/XCJsZWZ0XCI6XCJyaWdodFwiXTtpJiZpLm1vYmlsZU9wZW5lZCYmaS5oaWRlKCksdGhpcy5iZWxvd0JyZWFrcG9pbnQ/KHRoaXMubW9iaWxlT3BlbmVkPSEwLHRoaXMuYXBwbHlCYWNrZHJvcCgxKSx0aGlzLmxheW91dC5jb250YWluZXJ8fCh0aGlzLnByZXZlbnRlZFNjcm9sbD0hMCxwcmV2ZW50U2Nyb2xsKCEwKSkpOnRoaXMuX19zZXRTY3JvbGxhYmxlKCEwKSxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5zaG93UHJvbWlzZSYmKGUuc2hvd1Byb21pc2UudGhlbihmdW5jdGlvbigpe2UuX19zZXRTY3JvbGxhYmxlKCExKX0pLGUuc2hvd1Byb21pc2VSZXNvbHZlKCkpfSxkdXJhdGlvbil9LF9faGlkZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQmJih0PSEwKSx0JiZ0aGlzLmxheW91dC5fX2FuaW1hdGUoKSx0aGlzLm1vYmlsZU9wZW5lZCYmKHRoaXMubW9iaWxlT3BlbmVkPSExKSx0aGlzLmFwcGx5UG9zaXRpb24odGhpcy5zdGF0ZURpcmVjdGlvbip0aGlzLnNpemUpLHRoaXMuYXBwbHlCYWNrZHJvcCgwKSx0aGlzLl9fY2xlYW51cCgpLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmhpZGVQcm9taXNlJiZlLmhpZGVQcm9taXNlUmVzb2x2ZSgpfSxkdXJhdGlvbil9LF9fY2xlYW51cDpmdW5jdGlvbigpe3RoaXMucHJldmVudGVkU2Nyb2xsJiYodGhpcy5wcmV2ZW50ZWRTY3JvbGw9ITEscHJldmVudFNjcm9sbCghMSkpLHRoaXMuX19zZXRTY3JvbGxhYmxlKCExKX0sX191cGRhdGU6ZnVuY3Rpb24odCxlKXt0aGlzLmxheW91dFt0aGlzLnNpZGVdW3RdIT09ZSYmKHRoaXMubGF5b3V0W3RoaXMuc2lkZV1bdF09ZSl9LF9fdXBkYXRlTG9jYWw6ZnVuY3Rpb24odCxlKXt0aGlzW3RdIT09ZSYmKHRoaXNbdF09ZSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5sYXlvdXQuaW5zdGFuY2VzW3RoaXMuc2lkZV09dGhpcyx0aGlzLl9fdXBkYXRlKFwic2l6ZVwiLHRoaXMuc2l6ZSksdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsdGhpcy5vbkxheW91dCksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHRoaXMub2Zmc2V0KX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuYXBwbHlQb3NpdGlvbih0aGlzLnNob3dpbmc/MDp2b2lkIDApfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuc2hvd2luZyYmdGhpcy5fX2NsZWFudXAoKSx0aGlzLmxheW91dC5pbnN0YW5jZXNbdGhpcy5zaWRlXT09PXRoaXMmJih0aGlzLmxheW91dC5pbnN0YW5jZXNbdGhpcy5zaWRlXT1udWxsLHRoaXMuX191cGRhdGUoXCJzaXplXCIsMCksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLDApLHRoaXMuX191cGRhdGUoXCJzcGFjZVwiLCExKSl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZHJhd2VyLWNvbnRhaW5lclwifSxbdGhpcy5tb2JpbGVWaWV3JiYhdGhpcy5ub1N3aXBlT3Blbj90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtZHJhd2VyLW9wZW5lciBmaXhlZC1cIit0aGlzLnNpZGUsZGlyZWN0aXZlczpbe25hbWU6XCJ0b3VjaC1wYW5cIixtb2RpZmllcnM6e2hvcml6b250YWw6ITB9LHZhbHVlOnRoaXMuX19vcGVuQnlUb3VjaH1dfSk6bnVsbCx0KFwiZGl2XCIse3JlZjpcImJhY2tkcm9wXCIsc3RhdGljQ2xhc3M6XCJmdWxsc2NyZWVuIHEtbGF5b3V0LWJhY2tkcm9wIHEtbGF5b3V0LXRyYW5zaXRpb25cIixjbGFzczp0aGlzLmJhY2tkcm9wQ2xhc3Msb246e2NsaWNrOnRoaXMuaGlkZX0sZGlyZWN0aXZlczpbe25hbWU6XCJ0b3VjaC1wYW5cIixtb2RpZmllcnM6e2hvcml6b250YWw6ITB9LHZhbHVlOnRoaXMuX19jbG9zZUJ5VG91Y2h9XX0pXS5jb25jYXQoW3QoXCJhc2lkZVwiLHtyZWY6XCJjb250ZW50XCIsc3RhdGljQ2xhc3M6XCJxLWxheW91dC1kcmF3ZXIgcS1sYXlvdXQtdHJhbnNpdGlvblwiLGNsYXNzOnRoaXMuY29tcHV0ZWRDbGFzcyxzdHlsZTp0aGlzLmNvbXB1dGVkU3R5bGUsYXR0cnM6dGhpcy4kYXR0cnMsb246dGhpcy5vbk5hdGl2ZUV2ZW50cyxkaXJlY3RpdmVzOnRoaXMubW9iaWxlVmlldyYmIXRoaXMubm9Td2lwZUNsb3NlP1t7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7aG9yaXpvbnRhbDohMH0sdmFsdWU6dGhpcy5fX2Nsb3NlQnlUb3VjaH1dOm51bGx9LHRoaXMuaXNNaW5pJiZ0aGlzLiRzbG90cy5taW5pP1t0aGlzLiRzbG90cy5taW5pXTp0aGlzLiRzbG90cy5kZWZhdWx0KV0pKX19LFFXaW5kb3dSZXNpemVPYnNlcnZhYmxlPXtuYW1lOlwiUVdpbmRvd1Jlc2l6ZU9ic2VydmFibGVcIixwcm9wczp7ZGVib3VuY2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6ODB9fSxyZW5kZXI6ZnVuY3Rpb24oKXt9LG1ldGhvZHM6e3RyaWdnZXI6ZnVuY3Rpb24oKXswPT09dGhpcy5kZWJvdW5jZT90aGlzLmVtaXQoKTp0aGlzLnRpbWVyfHwodGhpcy50aW1lcj1zZXRUaW1lb3V0KHRoaXMuZW1pdCx0aGlzLmRlYm91bmNlKSl9LGVtaXQ6ZnVuY3Rpb24odCl7dGhpcy50aW1lcj1udWxsLHRoaXMuJGVtaXQoXCJyZXNpemVcIix7aGVpZ2h0OnQ/MDp3aW5kb3cuaW5uZXJIZWlnaHQsd2lkdGg6dD8wOndpbmRvdy5pbm5lcldpZHRofSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5lbWl0KG9uU1NSKX0sbW91bnRlZDpmdW5jdGlvbigpe2Zyb21TU1ImJnRoaXMuZW1pdCgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy50cmlnZ2VyLGxpc3Rlbk9wdHMucGFzc2l2ZSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLnRyaWdnZXIsbGlzdGVuT3B0cy5wYXNzaXZlKX19LFFMYXlvdXRGb290ZXI9e25hbWU6XCJRTGF5b3V0Rm9vdGVyXCIsbWl4aW5zOltDYW5SZW5kZXJNaXhpbl0saW5qZWN0OntsYXlvdXQ6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUUxheW91dEZvb3RlciBuZWVkcyB0byBiZSBjaGlsZCBvZiBRTGF5b3V0XCIpfX19LHByb3BzOnt2YWx1ZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LHJldmVhbDpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3NpemU6MCxyZXZlYWxlZDohMCx3aW5kb3dIZWlnaHQ6b25TU1J8fHRoaXMubGF5b3V0LmNvbnRhaW5lcj8wOndpbmRvdy5pbm5lckhlaWdodH19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0KSx0aGlzLl9fdXBkYXRlTG9jYWwoXCJyZXZlYWxlZFwiLCEwKSx0aGlzLmxheW91dC5fX2FuaW1hdGUoKX0sb2Zmc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGUoXCJvZmZzZXRcIix0KX0scmV2ZWFsOmZ1bmN0aW9uKHQpe3R8fHRoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsdGhpcy52YWx1ZSl9LHJldmVhbGVkOmZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpLHRoaXMuJGVtaXQoXCJyZXZlYWxcIix0KX0sXCJsYXlvdXQuc2Nyb2xsXCI6ZnVuY3Rpb24oKXt0aGlzLl9fdXBkYXRlUmV2ZWFsZWQoKX0sXCJsYXlvdXQuaGVpZ2h0XCI6ZnVuY3Rpb24oKXt0aGlzLl9fdXBkYXRlUmV2ZWFsZWQoKX0sc2l6ZTpmdW5jdGlvbigpe3RoaXMuX191cGRhdGVSZXZlYWxlZCgpfX0sY29tcHV0ZWQ6e2ZpeGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmV2ZWFsfHx0aGlzLmxheW91dC52aWV3LmluZGV4T2YoXCJGXCIpPi0xfHx0aGlzLmxheW91dC5jb250YWluZXJ9LGNvbnRhaW5lckhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dC5jb250YWluZXI/dGhpcy5sYXlvdXQuY29udGFpbmVySGVpZ2h0OnRoaXMud2luZG93SGVpZ2h0fSxvZmZzZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jYW5SZW5kZXJ8fCF0aGlzLnZhbHVlKXJldHVybiAwO2lmKHRoaXMuZml4ZWQpcmV0dXJuIHRoaXMucmV2ZWFsZWQ/dGhpcy5zaXplOjA7dmFyIHQ9dGhpcy5sYXlvdXQuc2Nyb2xsLnBvc2l0aW9uK3RoaXMuY29udGFpbmVySGVpZ2h0K3RoaXMuc2l6ZS10aGlzLmxheW91dC5oZWlnaHQ7cmV0dXJuIHQ+MD90OjB9LGNvbXB1dGVkQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm57XCJmaXhlZC1ib3R0b21cIjp0aGlzLmZpeGVkLFwiYWJzb2x1dGUtYm90dG9tXCI6IXRoaXMuZml4ZWQsaGlkZGVuOiF0aGlzLnZhbHVlJiYhdGhpcy5maXhlZCxcInEtbGF5b3V0LWZvb3Rlci1oaWRkZW5cIjohdGhpcy5jYW5SZW5kZXJ8fCF0aGlzLnZhbHVlfHx0aGlzLmZpeGVkJiYhdGhpcy5yZXZlYWxlZH19LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxheW91dC5yb3dzLmJvdHRvbSxlPXt9O3JldHVyblwibFwiPT09dFswXSYmdGhpcy5sYXlvdXQubGVmdC5zcGFjZSYmKGVbdGhpcy4kcS5pMThuLnJ0bD9cInJpZ2h0XCI6XCJsZWZ0XCJdPXRoaXMubGF5b3V0LmxlZnQuc2l6ZStcInB4XCIpLFwiclwiPT09dFsyXSYmdGhpcy5sYXlvdXQucmlnaHQuc3BhY2UmJihlW3RoaXMuJHEuaTE4bi5ydGw/XCJsZWZ0XCI6XCJyaWdodFwiXT10aGlzLmxheW91dC5yaWdodC5zaXplK1wicHhcIiksZX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImZvb3RlclwiLHtzdGF0aWNDbGFzczpcInEtbGF5b3V0LWZvb3RlciBxLWxheW91dC1tYXJnaW5hbCBxLWxheW91dC10cmFuc2l0aW9uXCIsY2xhc3M6dGhpcy5jb21wdXRlZENsYXNzLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZX0sW3QoUVJlc2l6ZU9ic2VydmFibGUse3Byb3BzOntkZWJvdW5jZTowfSxvbjp7cmVzaXplOnRoaXMuX19vblJlc2l6ZX19KSwhdGhpcy5sYXlvdXQuY29udGFpbmVyJiZ0KFFXaW5kb3dSZXNpemVPYnNlcnZhYmxlLHtwcm9wczp7ZGVib3VuY2U6MH0sb246e3Jlc2l6ZTp0aGlzLl9fb25XaW5kb3dSZXNpemV9fSl8fHZvaWQgMCx0aGlzLiRzbG90cy5kZWZhdWx0XSl9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmxheW91dC5pbnN0YW5jZXMuZm9vdGVyPXRoaXMsdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsdGhpcy52YWx1ZSksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHRoaXMub2Zmc2V0KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMubGF5b3V0Lmluc3RhbmNlcy5mb290ZXI9PT10aGlzJiYodGhpcy5sYXlvdXQuaW5zdGFuY2VzLmZvb3Rlcj1udWxsLHRoaXMuX191cGRhdGUoXCJzaXplXCIsMCksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLDApLHRoaXMuX191cGRhdGUoXCJzcGFjZVwiLCExKSl9LG1ldGhvZHM6e19fb25SZXNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQ7dGhpcy5fX3VwZGF0ZUxvY2FsKFwic2l6ZVwiLGUpLHRoaXMuX191cGRhdGUoXCJzaXplXCIsZSl9LF9fb25XaW5kb3dSZXNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQ7dGhpcy5fX3VwZGF0ZUxvY2FsKFwid2luZG93SGVpZ2h0XCIsZSl9LF9fdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXlvdXQuZm9vdGVyW3RdIT09ZSYmKHRoaXMubGF5b3V0LmZvb3Rlclt0XT1lKX0sX191cGRhdGVMb2NhbDpmdW5jdGlvbih0LGUpe3RoaXNbdF0hPT1lJiYodGhpc1t0XT1lKX0sX191cGRhdGVSZXZlYWxlZDpmdW5jdGlvbigpe2lmKHRoaXMucmV2ZWFsKXt2YXIgdD10aGlzLmxheW91dC5zY3JvbGwsZT10LmRpcmVjdGlvbixpPXQucG9zaXRpb24scz10LmluZmxleGlvblBvc2l0aW9uO3RoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsXCJ1cFwiPT09ZXx8aS1zPDEwMHx8dGhpcy5sYXlvdXQuaGVpZ2h0LXRoaXMuY29udGFpbmVySGVpZ2h0LWktdGhpcy5zaXplPDMwMCl9fX19LFFMYXlvdXRIZWFkZXI9e25hbWU6XCJRTGF5b3V0SGVhZGVyXCIsbWl4aW5zOltDYW5SZW5kZXJNaXhpbl0saW5qZWN0OntsYXlvdXQ6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUUxheW91dEhlYWRlciBuZWVkcyB0byBiZSBjaGlsZCBvZiBRTGF5b3V0XCIpfX19LHByb3BzOnt2YWx1ZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LHJldmVhbDpCb29sZWFuLHJldmVhbE9mZnNldDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoyNTB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3NpemU6MCxyZXZlYWxlZDohMH19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0KSx0aGlzLl9fdXBkYXRlTG9jYWwoXCJyZXZlYWxlZFwiLCEwKSx0aGlzLmxheW91dC5fX2FuaW1hdGUoKX0sb2Zmc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGUoXCJvZmZzZXRcIix0KX0scmV2ZWFsOmZ1bmN0aW9uKHQpe3R8fHRoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsdGhpcy52YWx1ZSl9LHJldmVhbGVkOmZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpLHRoaXMuJGVtaXQoXCJyZXZlYWxcIix0KX0sXCJsYXlvdXQuc2Nyb2xsXCI6ZnVuY3Rpb24odCl7dGhpcy5yZXZlYWwmJnRoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsXCJ1cFwiPT09dC5kaXJlY3Rpb258fHQucG9zaXRpb248PXRoaXMucmV2ZWFsT2Zmc2V0fHx0LnBvc2l0aW9uLXQuaW5mbGV4aW9uUG9zaXRpb248MTAwKX19LGNvbXB1dGVkOntmaXhlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJldmVhbHx8dGhpcy5sYXlvdXQudmlldy5pbmRleE9mKFwiSFwiKT4tMXx8dGhpcy5sYXlvdXQuY29udGFpbmVyfSxvZmZzZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jYW5SZW5kZXJ8fCF0aGlzLnZhbHVlKXJldHVybiAwO2lmKHRoaXMuZml4ZWQpcmV0dXJuIHRoaXMucmV2ZWFsZWQ/dGhpcy5zaXplOjA7dmFyIHQ9dGhpcy5zaXplLXRoaXMubGF5b3V0LnNjcm9sbC5wb3NpdGlvbjtyZXR1cm4gdD4wP3Q6MH0sY29tcHV0ZWRDbGFzczpmdW5jdGlvbigpe3JldHVybntcImZpeGVkLXRvcFwiOnRoaXMuZml4ZWQsXCJhYnNvbHV0ZS10b3BcIjohdGhpcy5maXhlZCxcInEtbGF5b3V0LWhlYWRlci1oaWRkZW5cIjohdGhpcy5jYW5SZW5kZXJ8fCF0aGlzLnZhbHVlfHx0aGlzLmZpeGVkJiYhdGhpcy5yZXZlYWxlZH19LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxheW91dC5yb3dzLnRvcCxlPXt9O3JldHVyblwibFwiPT09dFswXSYmdGhpcy5sYXlvdXQubGVmdC5zcGFjZSYmKGVbdGhpcy4kcS5pMThuLnJ0bD9cInJpZ2h0XCI6XCJsZWZ0XCJdPXRoaXMubGF5b3V0LmxlZnQuc2l6ZStcInB4XCIpLFwiclwiPT09dFsyXSYmdGhpcy5sYXlvdXQucmlnaHQuc3BhY2UmJihlW3RoaXMuJHEuaTE4bi5ydGw/XCJsZWZ0XCI6XCJyaWdodFwiXT10aGlzLmxheW91dC5yaWdodC5zaXplK1wicHhcIiksZX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImhlYWRlclwiLHtzdGF0aWNDbGFzczpcInEtbGF5b3V0LWhlYWRlciBxLWxheW91dC1tYXJnaW5hbCBxLWxheW91dC10cmFuc2l0aW9uXCIsY2xhc3M6dGhpcy5jb21wdXRlZENsYXNzLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZX0sW3QoUVJlc2l6ZU9ic2VydmFibGUse3Byb3BzOntkZWJvdW5jZTowfSxvbjp7cmVzaXplOnRoaXMuX19vblJlc2l6ZX19KSx0aGlzLiRzbG90cy5kZWZhdWx0XSl9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmxheW91dC5pbnN0YW5jZXMuaGVhZGVyPXRoaXMsdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsdGhpcy52YWx1ZSksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHRoaXMub2Zmc2V0KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMubGF5b3V0Lmluc3RhbmNlcy5oZWFkZXI9PT10aGlzJiYodGhpcy5sYXlvdXQuaW5zdGFuY2VzLmhlYWRlcj1udWxsLHRoaXMuX191cGRhdGUoXCJzaXplXCIsMCksdGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLDApLHRoaXMuX191cGRhdGUoXCJzcGFjZVwiLCExKSl9LG1ldGhvZHM6e19fb25SZXNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQ7dGhpcy5fX3VwZGF0ZUxvY2FsKFwic2l6ZVwiLGUpLHRoaXMuX191cGRhdGUoXCJzaXplXCIsZSl9LF9fdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXlvdXQuaGVhZGVyW3RdIT09ZSYmKHRoaXMubGF5b3V0LmhlYWRlclt0XT1lKX0sX191cGRhdGVMb2NhbDpmdW5jdGlvbih0LGUpe3RoaXNbdF0hPT1lJiYodGhpc1t0XT1lKX19fSxRUGFnZT17bmFtZTpcIlFQYWdlXCIsaW5qZWN0OntwYWdlQ29udGFpbmVyOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFQYWdlIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFQYWdlQ29udGFpbmVyXCIpfX0sbGF5b3V0Ont9fSxwcm9wczp7cGFkZGluZzpCb29sZWFuLHN0eWxlRm46RnVuY3Rpb259LGNvbXB1dGVkOntzdHlsZTpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmxheW91dC5oZWFkZXIuc3BhY2U/dGhpcy5sYXlvdXQuaGVhZGVyLnNpemU6MCkrKHRoaXMubGF5b3V0LmZvb3Rlci5zcGFjZT90aGlzLmxheW91dC5mb290ZXIuc2l6ZTowKTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLnN0eWxlRm4/dGhpcy5zdHlsZUZuKHQpOnttaW5IZWlnaHQ6dGhpcy5sYXlvdXQuY29udGFpbmVyP3RoaXMubGF5b3V0LmNvbnRhaW5lckhlaWdodC10K1wicHhcIjp0P1wiY2FsYygxMDB2aCAtIFwiK3QrXCJweClcIjpcIjEwMHZoXCJ9fSxjbGFzc2VzOmZ1bmN0aW9uKCl7aWYodGhpcy5wYWRkaW5nKXJldHVyblwibGF5b3V0LXBhZGRpbmdcIn19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcIm1haW5cIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dC1wYWdlXCIsc3R5bGU6dGhpcy5zdHlsZSxjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUVBhZ2VDb250YWluZXI9e25hbWU6XCJRUGFnZUNvbnRhaW5lclwiLGluamVjdDp7bGF5b3V0OntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFQYWdlQ29udGFpbmVyIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFMYXlvdXRcIil9fX0scHJvdmlkZTp7cGFnZUNvbnRhaW5lcjohMH0sY29tcHV0ZWQ6e3N0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRoaXMubGF5b3V0LmhlYWRlci5zcGFjZSYmKHQucGFkZGluZ1RvcD10aGlzLmxheW91dC5oZWFkZXIuc2l6ZStcInB4XCIpLHRoaXMubGF5b3V0LnJpZ2h0LnNwYWNlJiYodFtcInBhZGRpbmdcIisodGhpcy4kcS5pMThuLnJ0bD9cIkxlZnRcIjpcIlJpZ2h0XCIpXT10aGlzLmxheW91dC5yaWdodC5zaXplK1wicHhcIiksdGhpcy5sYXlvdXQuZm9vdGVyLnNwYWNlJiYodC5wYWRkaW5nQm90dG9tPXRoaXMubGF5b3V0LmZvb3Rlci5zaXplK1wicHhcIiksdGhpcy5sYXlvdXQubGVmdC5zcGFjZSYmKHRbXCJwYWRkaW5nXCIrKHRoaXMuJHEuaTE4bi5ydGw/XCJSaWdodFwiOlwiTGVmdFwiKV09dGhpcy5sYXlvdXQubGVmdC5zaXplK1wicHhcIiksdH19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbGF5b3V0LXBhZ2UtY29udGFpbmVyIHEtbGF5b3V0LXRyYW5zaXRpb25cIixzdHlsZTp0aGlzLnN0eWxlfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFQYWdlU3RpY2t5PXtuYW1lOlwiUVBhZ2VTdGlja3lcIixpbmplY3Q6e2xheW91dDp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRUGFnZVN0aWNreSBuZWVkcyB0byBiZSBjaGlsZCBvZiBRTGF5b3V0XCIpfX19LHByb3BzOntwb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImJvdHRvbS1yaWdodFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ0b3AtcmlnaHRcIixcInRvcC1sZWZ0XCIsXCJib3R0b20tcmlnaHRcIixcImJvdHRvbS1sZWZ0XCIsXCJ0b3BcIixcInJpZ2h0XCIsXCJib3R0b21cIixcImxlZnRcIl0uaW5jbHVkZXModCl9fSxvZmZzZXQ6e3R5cGU6QXJyYXksdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiAyPT09dC5sZW5ndGh9fSxleHBhbmQ6Qm9vbGVhbn0sY29tcHV0ZWQ6e2F0dGFjaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucG9zaXRpb247cmV0dXJue3RvcDp0LmluZGV4T2YoXCJ0b3BcIik+LTEscmlnaHQ6dC5pbmRleE9mKFwicmlnaHRcIik+LTEsYm90dG9tOnQuaW5kZXhPZihcImJvdHRvbVwiKT4tMSxsZWZ0OnQuaW5kZXhPZihcImxlZnRcIik+LTEsdmVydGljYWw6XCJ0b3BcIj09PXR8fFwiYm90dG9tXCI9PT10LGhvcml6b250YWw6XCJsZWZ0XCI9PT10fHxcInJpZ2h0XCI9PT10fX0sdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LmhlYWRlci5vZmZzZXR9LHJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LnJpZ2h0Lm9mZnNldH0sYm90dG9tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LmZvb3Rlci5vZmZzZXR9LGxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXQubGVmdC5vZmZzZXR9LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmF0dGFjaCxlPVtdLGk9dGhpcy4kcS5pMThuLnJ0bD8tMToxO3QudG9wJiZ0aGlzLnRvcD9lLnB1c2goXCJ0cmFuc2xhdGVZKFwiK3RoaXMudG9wK1wicHgpXCIpOnQuYm90dG9tJiZ0aGlzLmJvdHRvbSYmZS5wdXNoKFwidHJhbnNsYXRlWShcIistdGhpcy5ib3R0b20rXCJweClcIiksdC5sZWZ0JiZ0aGlzLmxlZnQ/ZS5wdXNoKFwidHJhbnNsYXRlWChcIitpKnRoaXMubGVmdCtcInB4KVwiKTp0LnJpZ2h0JiZ0aGlzLnJpZ2h0JiZlLnB1c2goXCJ0cmFuc2xhdGVYKFwiKy1pKnRoaXMucmlnaHQrXCJweClcIik7dmFyIHM9ZS5sZW5ndGg/e3RyYW5zZm9ybTplLmpvaW4oXCIgXCIpfTp7fTtyZXR1cm4gdGhpcy5vZmZzZXQmJihzLm1hcmdpbj10aGlzLm9mZnNldFsxXStcInB4IFwiK3RoaXMub2Zmc2V0WzBdK1wicHhcIiksdC52ZXJ0aWNhbD8odGhpcy5sZWZ0JiYoc1t0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09dGhpcy5sZWZ0K1wicHhcIiksdGhpcy5yaWdodCYmKHNbdGhpcy4kcS5pMThuLnJ0bD9cImxlZnRcIjpcInJpZ2h0XCJdPXRoaXMucmlnaHQrXCJweFwiKSk6dC5ob3Jpem9udGFsJiYodGhpcy50b3AmJihzLnRvcD10aGlzLnRvcCtcInB4XCIpLHRoaXMuYm90dG9tJiYocy5ib3R0b209dGhpcy5ib3R0b20rXCJweFwiKSksc30sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybltcImZpeGVkLVwiK3RoaXMucG9zaXRpb24sXCJxLXBhZ2Utc3RpY2t5LVwiKyh0aGlzLmV4cGFuZD9cImV4cGFuZFwiOlwic2hyaW5rXCIpXX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcGFnZS1zdGlja3kgcS1sYXlvdXQtdHJhbnNpdGlvbiByb3cgZmxleC1jZW50ZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsc3R5bGU6dGhpcy5jb21wdXRlZFN0eWxlfSx0aGlzLmV4cGFuZD90aGlzLiRzbG90cy5kZWZhdWx0Olt0KFwic3BhblwiLHRoaXMuJHNsb3RzLmRlZmF1bHQpXSl9fSxRTGlzdEhlYWRlcj17bmFtZTpcIlFMaXN0SGVhZGVyXCIscHJvcHM6e2luc2V0OkJvb2xlYW59LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbGlzdC1oZWFkZXJcIixjbGFzczp7XCJxLWxpc3QtaGVhZGVyLWluc2V0XCI6dGhpcy5pbnNldH19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUU1vZGFsTGF5b3V0PXtuYW1lOlwiUU1vZGFsTGF5b3V0XCIsaW5qZWN0OntfX3Ftb2RhbDp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRTW9kYWxMYXlvdXQgbmVlZHMgdG8gYmUgY2hpbGQgb2YgUU1vZGFsXCIpfX19LHByb3BzOntoZWFkZXJTdHlsZTpbU3RyaW5nLE9iamVjdCxBcnJheV0saGVhZGVyQ2xhc3M6W1N0cmluZyxPYmplY3QsQXJyYXldLGNvbnRlbnRTdHlsZTpbU3RyaW5nLE9iamVjdCxBcnJheV0sY29udGVudENsYXNzOltTdHJpbmcsT2JqZWN0LEFycmF5XSxmb290ZXJTdHlsZTpbU3RyaW5nLE9iamVjdCxBcnJheV0sZm9vdGVyQ2xhc3M6W1N0cmluZyxPYmplY3QsQXJyYXldfSx3YXRjaDp7X19xbW9kYWw6ZnVuY3Rpb24odCxlKXtlJiZlLnVucmVnaXN0ZXIodGhpcyksdCYmdC5yZWdpc3Rlcih0aGlzKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fcW1vZGFsJiZ0aGlzLl9fcW1vZGFsLnJlZ2lzdGVyKHRoaXMpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX3Ftb2RhbCYmdGhpcy5fX3Ftb2RhbC51bnJlZ2lzdGVyKHRoaXMpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuKHRoaXMuJHNsb3RzLmhlYWRlcnx8dGhpcy4kc2xvdHMubmF2aWdhdGlvbikmJmUucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtaGVhZGVyXCIsc3R5bGU6dGhpcy5oZWFkZXJTdHlsZSxjbGFzczp0aGlzLmhlYWRlckNsYXNzfSxbdGhpcy4kc2xvdHMuaGVhZGVyLHRoaXMuJHNsb3RzLm5hdmlnYXRpb25dKSksZS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW1vZGFsLWxheW91dC1jb250ZW50IGNvbCBzY3JvbGxcIixzdHlsZTp0aGlzLmNvbnRlbnRTdHlsZSxjbGFzczp0aGlzLmNvbnRlbnRDbGFzc30sdGhpcy4kc2xvdHMuZGVmYXVsdCkpLHRoaXMuJHNsb3RzLmZvb3RlciYmZS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dC1mb290ZXJcIixzdHlsZTp0aGlzLmZvb3RlclN0eWxlLGNsYXNzOnRoaXMuZm9vdGVyQ2xhc3N9LFt0aGlzLiRzbG90cy5mb290ZXIsbnVsbF0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tb2RhbC1sYXlvdXQgY29sIGNvbHVtbiBuby13cmFwXCJ9LGUpfX0sUU5vU3NyPXtuYW1lOlwiUU5vU3NyXCIsbWl4aW5zOltDYW5SZW5kZXJNaXhpbl0scHJvcHM6e3RhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRpdlwifSxwbGFjZWhvbGRlcjpTdHJpbmd9LHJlbmRlcjpmdW5jdGlvbih0KXtpZih0aGlzLmNhblJlbmRlcil7dmFyIGU9dGhpcy4kc2xvdHMuZGVmYXVsdDtyZXR1cm4gZSYmZS5sZW5ndGg+MT90KHRoaXMudGFnLGUpOmU/ZVswXTpudWxsfWlmKHRoaXMuJHNsb3RzLnBsYWNlaG9sZGVyKXt2YXIgaT10aGlzLiRzbG90cy5wbGFjZWhvbGRlcjtyZXR1cm4gaSYmaS5sZW5ndGg+MT90KHRoaXMudGFnLHtzdGF0aWNDbGFzczpcInEtbm8tc3NyLXBsYWNlaG9sZGVyXCJ9LGkpOmk/aVswXTpudWxsfWlmKHRoaXMucGxhY2Vob2xkZXIpcmV0dXJuIHQodGhpcy50YWcse3N0YXRpY0NsYXNzOlwicS1uby1zc3ItcGxhY2Vob2xkZXJcIn0sW3RoaXMucGxhY2Vob2xkZXJdKX19LFFQYWdpbmF0aW9uPXtuYW1lOlwiUVBhZ2luYXRpb25cIixwcm9wczp7dmFsdWU6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfSxtaW46e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MX0sbWF4Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHRleHRDb2xvcjpTdHJpbmcsc2l6ZTpTdHJpbmcsZGlzYWJsZTpCb29sZWFuLGlucHV0OkJvb2xlYW4sYm91bmRhcnlMaW5rczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6bnVsbH0sYm91bmRhcnlOdW1iZXJzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpudWxsfSxkaXJlY3Rpb25MaW5rczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6bnVsbH0sZWxsaXBzZXM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0Om51bGx9LG1heFBhZ2VzOnt0eXBlOk51bWJlcixkZWZhdWx0OjAsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiEodDwwKXx8KGNvbnNvbGUuZXJyb3IoXCJtYXhQYWdlcyBzaG91bGQgbm90IGJlIG5lZ2F0aXZlXCIpLCExKX19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue25ld1BhZ2U6bnVsbH19LHdhdGNoOnttaW46ZnVuY3Rpb24odCl7dGhpcy5tb2RlbD10aGlzLnZhbHVlfSxtYXg6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbD10aGlzLnZhbHVlfX0sY29tcHV0ZWQ6e21vZGVsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMuZGlzYWJsZSYmdCYmIWlzTmFOKHQpKXt2YXIgaT1iZXR3ZWVuKHBhcnNlSW50KHQsMTApLHRoaXMubWluLHRoaXMubWF4KTt0aGlzLiRlbWl0KFwiaW5wdXRcIixpKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KGkpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIixpKX0pfX19LGlucHV0UGxhY2Vob2xkZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbCtcIiAvIFwiK3RoaXMubWF4fSxfX2JvdW5kYXJ5TGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEJvb2wodGhpcy5ib3VuZGFyeUxpbmtzLHRoaXMuaW5wdXQpfSxfX2JvdW5kYXJ5TnVtYmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Qm9vbCh0aGlzLmJvdW5kYXJ5TnVtYmVycywhdGhpcy5pbnB1dCl9LF9fZGlyZWN0aW9uTGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dldEJvb2wodGhpcy5kaXJlY3Rpb25MaW5rcyx0aGlzLmlucHV0KX0sX19lbGxpcHNlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Qm9vbCh0aGlzLmVsbGlwc2VzLCF0aGlzLmlucHV0KX0saWNvbnM6ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy4kcS5pY29uLnBhZ2luYXRpb24uZmlyc3QsdGhpcy4kcS5pY29uLnBhZ2luYXRpb24ucHJldix0aGlzLiRxLmljb24ucGFnaW5hdGlvbi5uZXh0LHRoaXMuJHEuaWNvbi5wYWdpbmF0aW9uLmxhc3RdO3JldHVybiB0aGlzLiRxLmkxOG4ucnRsP3QucmV2ZXJzZSgpOnR9fSxtZXRob2RzOntzZXQ6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbD10fSxzZXRCeU9mZnNldDpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXRoaXMubW9kZWwrdH0sX191cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLm1vZGVsPXRoaXMubmV3UGFnZSx0aGlzLm5ld1BhZ2U9bnVsbH0sX19nZXRCb29sOmZ1bmN0aW9uKHQsZSl7cmV0dXJuWyEwLCExXS5pbmNsdWRlcyh0KT90OmV9LF9fZ2V0QnRuOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZS5wcm9wcz1PYmplY3QuYXNzaWduKHtjb2xvcjp0aGlzLmNvbG9yLGZsYXQ6ITAsc2l6ZTp0aGlzLnNpemV9LGkpLHQoUUJ0bixlKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W10scz1bXSxuPVtdO2lmKHRoaXMuX19ib3VuZGFyeUxpbmtzJiYoaS5wdXNoKHRoaXMuX19nZXRCdG4odCx7a2V5OlwiYmxzXCIsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KGUubWluKX19fSx7ZGlzYWJsZTp0aGlzLmRpc2FibGV8fHRoaXMudmFsdWU8PXRoaXMubWluLGljb246dGhpcy5pY29uc1swXX0pKSxzLnVuc2hpZnQodGhpcy5fX2dldEJ0bih0LHtrZXk6XCJibGVcIixvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoZS5tYXgpfX19LHtkaXNhYmxlOnRoaXMuZGlzYWJsZXx8dGhpcy52YWx1ZT49dGhpcy5tYXgsaWNvbjp0aGlzLmljb25zWzNdfSkpKSx0aGlzLl9fZGlyZWN0aW9uTGlua3MmJihpLnB1c2godGhpcy5fX2dldEJ0bih0LHtrZXk6XCJiZHBcIixvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXRCeU9mZnNldCgtMSl9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlfHx0aGlzLnZhbHVlPD10aGlzLm1pbixpY29uOnRoaXMuaWNvbnNbMV19KSkscy51bnNoaWZ0KHRoaXMuX19nZXRCdG4odCx7a2V5OlwiYmRuXCIsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0QnlPZmZzZXQoMSl9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlfHx0aGlzLnZhbHVlPj10aGlzLm1heCxpY29uOnRoaXMuaWNvbnNbMl19KSkpLHRoaXMuaW5wdXQpbi5wdXNoKHQoUUlucHV0LHtzdGF0aWNDbGFzczpcImlubGluZSBuby1wYWRkaW5nXCIsc3R5bGU6e3dpZHRoOnRoaXMuaW5wdXRQbGFjZWhvbGRlci5sZW5ndGgrXCJyZW1cIn0scHJvcHM6e3R5cGU6XCJudW1iZXJcIix2YWx1ZTp0aGlzLm5ld1BhZ2Usbm9OdW1iZXJUb2dnbGU6ITAsbWluOnRoaXMubWluLG1heDp0aGlzLm1heCxjb2xvcjp0aGlzLmNvbG9yLHBsYWNlaG9sZGVyOnRoaXMuaW5wdXRQbGFjZWhvbGRlcixkaXNhYmxlOnRoaXMuZGlzYWJsZSxoaWRlVW5kZXJsaW5lOiEwfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUubmV3UGFnZT10fSxrZXlkb3duOmZ1bmN0aW9uKHQpe3JldHVybiAxMz09PWdldEV2ZW50S2V5KHQpJiZlLl9fdXBkYXRlKCl9LGJsdXI6ZnVuY3Rpb24oKXtyZXR1cm4gZS5fX3VwZGF0ZSgpfX19KSk7ZWxzZXt2YXIgbz1NYXRoLm1heCh0aGlzLm1heFBhZ2VzLDErKHRoaXMuX19lbGxpcHNlcz8yOjApKyh0aGlzLl9fYm91bmRhcnlOdW1iZXJzPzI6MCkpLHI9dGhpcy5taW4sYT10aGlzLm1heCxsPSExLGM9ITEsaD0hMSx1PSExO3RoaXMubWF4UGFnZXMmJm88dGhpcy5tYXgtdGhpcy5taW4rMSYmKG89MSsyKk1hdGguZmxvb3Ioby8yKSxyPU1hdGgubWF4KHRoaXMubWluLE1hdGgubWluKHRoaXMubWF4LW8rMSx0aGlzLnZhbHVlLU1hdGguZmxvb3Ioby8yKSkpLGE9TWF0aC5taW4odGhpcy5tYXgscitvLTEpLHRoaXMuX19ib3VuZGFyeU51bWJlcnMmJihoPSEwLHIrPTEpLHRoaXMuX19lbGxpcHNlcyYmcj50aGlzLm1pbisodGhpcy5fX2JvdW5kYXJ5TnVtYmVycz8xOjApJiYobD0hMCxyKz0xKSx0aGlzLl9fYm91bmRhcnlOdW1iZXJzJiYodT0hMCxhLT0xKSx0aGlzLl9fZWxsaXBzZXMmJmE8dGhpcy5tYXgtKHRoaXMuX19ib3VuZGFyeU51bWJlcnM/MTowKSYmKGM9ITAsYS09MSkpO3ZhciBkPXttaW5XaWR0aDpNYXRoLm1heCgyLFN0cmluZyh0aGlzLm1heCkubGVuZ3RoKStcImVtXCJ9O2lmKGgpe3ZhciBwPXRoaXMubWluPT09dGhpcy52YWx1ZTtpLnB1c2godGhpcy5fX2dldEJ0bih0LHtrZXk6XCJibnNcIixzdHlsZTpkLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChlLm1pbil9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlLGZsYXQ6IXAsdGV4dENvbG9yOnA/dGhpcy50ZXh0Q29sb3I6bnVsbCxsYWJlbDp0aGlzLm1pbixub1JpcHBsZTohMH0pKX1pZih1KXt2YXIgZj10aGlzLm1heD09PXRoaXMudmFsdWU7cy51bnNoaWZ0KHRoaXMuX19nZXRCdG4odCx7a2V5OlwiYm5lXCIsc3R5bGU6ZCxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoZS5tYXgpfX19LHtkaXNhYmxlOnRoaXMuZGlzYWJsZSxmbGF0OiFmLHRleHRDb2xvcjpmP3RoaXMudGV4dENvbG9yOm51bGwsbGFiZWw6dGhpcy5tYXgsbm9SaXBwbGU6ITB9KSl9bCYmaS5wdXNoKHRoaXMuX19nZXRCdG4odCx7a2V5OlwiYmVzXCIsc3R5bGU6ZCxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoci0xKX19fSx7ZGlzYWJsZTp0aGlzLmRpc2FibGUsbGFiZWw6XCLigKZcIn0pKSxjJiZzLnVuc2hpZnQodGhpcy5fX2dldEJ0bih0LHtrZXk6XCJiZWVcIixzdHlsZTpkLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChhKzEpfX19LHtkaXNhYmxlOnRoaXMuZGlzYWJsZSxsYWJlbDpcIuKAplwifSkpO2Zvcih2YXIgbT1mdW5jdGlvbihpKXt2YXIgcz1pPT09ZS52YWx1ZTtuLnB1c2goZS5fX2dldEJ0bih0LHtrZXk6XCJicGdcIitpLHN0eWxlOmQsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KGkpfX19LHtkaXNhYmxlOmUuZGlzYWJsZSxmbGF0OiFzLHRleHRDb2xvcjpzP2UudGV4dENvbG9yOm51bGwsbGFiZWw6aSxub1JpcHBsZTohMH0pKX0sZz1yO2c8PWE7ZysrKW0oZyl9cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXBhZ2luYXRpb24gcm93IG5vLXdyYXAgaXRlbXMtY2VudGVyXCIsY2xhc3M6e2Rpc2FibGVkOnRoaXMuZGlzYWJsZX19LFtpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cganVzdGlmeS1jZW50ZXJcIn0sW25dKSxzXSl9fSxRUGFyYWxsYXg9e25hbWU6XCJRUGFyYWxsYXhcIixwcm9wczp7c3JjOlN0cmluZyxoZWlnaHQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NTAwfSxzcGVlZDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MCYmdDw9MX19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Njcm9sbGluZzohMX19LHdhdGNoOntoZWlnaHQ6ZnVuY3Rpb24oKXt0aGlzLl9fdXBkYXRlUG9zKCl9fSxtZXRob2RzOntfX29uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxUYXJnZXQmJih0aGlzLm1lZGlhSGVpZ2h0PXRoaXMubWVkaWEubmF0dXJhbEhlaWdodHx8aGVpZ2h0KHRoaXMubWVkaWEpLHRoaXMuX191cGRhdGVQb3MoKSl9LF9fdXBkYXRlUG9zOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLHM7aWYodGhpcy5zY3JvbGxUYXJnZXQ9PT13aW5kb3c/KHQ9MCxpPWU9d2luZG93LmlubmVySGVpZ2h0KTppPSh0PW9mZnNldCh0aGlzLnNjcm9sbFRhcmdldCkudG9wKSsoZT1oZWlnaHQodGhpcy5zY3JvbGxUYXJnZXQpKSwocz1vZmZzZXQodGhpcy4kZWwpLnRvcCkrdGhpcy5oZWlnaHQ+dCYmczxpKXt2YXIgbj0oaS1zKS8odGhpcy5oZWlnaHQrZSk7dGhpcy5fX3NldFBvcygodGhpcy5tZWRpYUhlaWdodC10aGlzLmhlaWdodCkqbip0aGlzLnNwZWVkKX19LF9fc2V0UG9zOmZ1bmN0aW9uKHQpe3RoaXMubWVkaWEuc3R5bGUudHJhbnNmb3JtPVwidHJhbnNsYXRlM0QoLTUwJSxcIit0K1wicHgsIDApXCJ9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXBhcmFsbGF4XCIsc3R5bGU6e2hlaWdodDp0aGlzLmhlaWdodCtcInB4XCJ9fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcGFyYWxsYXgtbWVkaWEgYWJzb2x1dGUtZnVsbFwifSxbdGhpcy4kc2xvdHMubWVkaWF8fHQoXCJpbWdcIix7cmVmOlwibWVkaWFcIixhdHRyczp7c3JjOnRoaXMuc3JjfX0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcGFyYWxsYXgtdGV4dCBhYnNvbHV0ZS1mdWxsIGNvbHVtbiBmbGV4LWNlbnRlciBuby1wb2ludGVyLWV2ZW50c1wifSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pfSxiZWZvcmVNb3VudDpmdW5jdGlvbigpe3RoaXMuX19zZXRQb3M9ZnJhbWVEZWJvdW5jZSh0aGlzLl9fc2V0UG9zKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0Lm1lZGlhPXQuJHNsb3RzLm1lZGlhP3QuJHNsb3RzLm1lZGlhWzBdLmVsbTp0LiRyZWZzLm1lZGlhLHQubWVkaWEub25sb2FkPXQubWVkaWEub25sb2Fkc3RhcnQ9dC5fX29uUmVzaXplLHQuc2Nyb2xsVGFyZ2V0PWdldFNjcm9sbFRhcmdldCh0LiRlbCksdC5yZXNpemVIYW5kbGVyPWRlYm91bmNlKHQuX19vblJlc2l6ZSw1MCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LnJlc2l6ZUhhbmRsZXIsbGlzdGVuT3B0cy5wYXNzaXZlKSx0LnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdC5fX3VwZGF0ZVBvcyxsaXN0ZW5PcHRzLnBhc3NpdmUpLHQuX19vblJlc2l6ZSgpfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMucmVzaXplSGFuZGxlcixsaXN0ZW5PcHRzLnBhc3NpdmUpLHRoaXMuc2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLl9fdXBkYXRlUG9zLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy5tZWRpYS5vbmxvYWQ9dGhpcy5tZWRpYS5vbmxvYWRzdGFydD1udWxsfX0sUVBvcHVwRWRpdD17bmFtZTpcIlFQb3B1cEVkaXRcIixwcm9wczp7dmFsdWU6e30scGVyc2lzdGVudDpCb29sZWFuLGtlZXBPblNjcmVlbjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LHRpdGxlOlN0cmluZyxidXR0b25zOkJvb2xlYW4sbGFiZWxTZXQ6U3RyaW5nLGxhYmVsQ2FuY2VsOlN0cmluZyxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdmFsaWRhdGU6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiEwfX0sZGlzYWJsZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2luaXRpYWxWYWx1ZTpcIlwifX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QuJHJlZnMucG9wb3Zlci5yZXBvc2l0aW9uKCl9KX19LG1ldGhvZHM6e2NhbmNlbDpmdW5jdGlvbigpe3RoaXMuX19oYXNDaGFuZ2VkKCkmJih0aGlzLiRlbWl0KFwiY2FuY2VsXCIsdGhpcy52YWx1ZSx0aGlzLmluaXRpYWxWYWx1ZSksdGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5pbml0aWFsVmFsdWUpKSx0aGlzLiRuZXh0VGljayh0aGlzLl9fY2xvc2UpfSxzZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9faGFzQ2hhbmdlZCgpKXtpZighdGhpcy52YWxpZGF0ZSh0aGlzLnZhbHVlKSlyZXR1cm47dGhpcy4kZW1pdChcInNhdmVcIix0aGlzLnZhbHVlLHRoaXMuaW5pdGlhbFZhbHVlKX10aGlzLl9fY2xvc2UoKX0sX19oYXNDaGFuZ2VkOmZ1bmN0aW9uKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpIT09SlNPTi5zdHJpbmdpZnkodGhpcy5pbml0aWFsVmFsdWUpfSxfX2Nsb3NlOmZ1bmN0aW9uKCl7dGhpcy52YWxpZGF0ZWQ9ITAsdGhpcy4kcmVmcy5wb3BvdmVyLmhpZGUoKX0sX19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJHNsb3RzLnRpdGxlfHx0aGlzLnRpdGxlO3JldHVybltlJiZ0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10aXRsZSBxLW10LXNtIHEtbWItc21cIn0sW2VdKXx8dm9pZCAwXS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCkuY29uY2F0KFt0aGlzLmJ1dHRvbnMmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cganVzdGlmeS1jZW50ZXIgbm8td3JhcCBxLW10LXNtXCJ9LFt0KFFCdG4se3Byb3BzOntmbGF0OiEwLGNvbG9yOnRoaXMuY29sb3IsbGFiZWw6dGhpcy5sYWJlbENhbmNlbHx8dGhpcy4kcS5pMThuLmxhYmVsLmNhbmNlbH0sb246e2NsaWNrOnRoaXMuY2FuY2VsfX0pLHQoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLW1sLXNtXCIscHJvcHM6e2ZsYXQ6ITAsY29sb3I6dGhpcy5jb2xvcixsYWJlbDp0aGlzLmxhYmVsU2V0fHx0aGlzLiRxLmkxOG4ubGFiZWwuc2V0fSxvbjp7Y2xpY2s6dGhpcy5zZXR9fSldKXx8dm9pZCAwXSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRUG9wb3Zlcix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWVkaXQgcS1weC1tZCBxLXB5LXNtXCIscmVmOlwicG9wb3ZlclwiLHByb3BzOntjb3ZlcjohMCxwZXJzaXN0ZW50OnRoaXMucGVyc2lzdGVudCxrZWVwT25TY3JlZW46dGhpcy5rZWVwT25TY3JlZW4sZGlzYWJsZTp0aGlzLmRpc2FibGV9LG9uOntzaG93OmZ1bmN0aW9uKCl7dmFyIHQ9ZS4kZWwucXVlcnlTZWxlY3RvcihcIi5xLWlucHV0LXRhcmdldDpub3QoLnEtaW5wdXQtc2hhZG93KVwiKXx8ZS4kZWwucXVlcnlTZWxlY3RvcihcImlucHV0XCIpfHxlLiRlbC5xdWVyeVNlbGVjdG9yKFwidGV4dGFyZWFcIik7dCYmdC5mb2N1cygpLGUuJGVtaXQoXCJzaG93XCIpLGUuaW5pdGlhbFZhbHVlPWNsb25lKGUudmFsdWUpLGUudmFsaWRhdGVkPSExfSxcImVzY2FwZS1rZXlcIjpmdW5jdGlvbigpe2UudmFsaWRhdGVkPSEwLGUuJGVtaXQoXCJjYW5jZWxcIixlLnZhbHVlLGUuaW5pdGlhbFZhbHVlKSxlLiRlbWl0KFwiaW5wdXRcIixlLmluaXRpYWxWYWx1ZSl9LGhpZGU6ZnVuY3Rpb24oKXtlLnZhbGlkYXRlZHx8KGUuX19oYXNDaGFuZ2VkKCkmJihlLnZhbGlkYXRlKGUudmFsdWUpP2UuJGVtaXQoXCJzYXZlXCIsZS52YWx1ZSxlLmluaXRpYWxWYWx1ZSk6KGUuJGVtaXQoXCJjYW5jZWxcIixlLnZhbHVlLGUuaW5pdGlhbFZhbHVlKSxlLiRlbWl0KFwiaW5wdXRcIixlLmluaXRpYWxWYWx1ZSkpKSxlLiRlbWl0KFwiaGlkZVwiKSl9fSxuYXRpdmVPbjp7a2V5ZG93bjpmdW5jdGlvbih0KXsxMz09PWdldEV2ZW50S2V5KHQpJiYoZS5idXR0b25zP2Uuc2V0KCk6ZS4kcmVmcy5wb3BvdmVyLmhpZGUoKSl9fX0sdGhpcy5fX2dldENvbnRlbnQodCkpfX07ZnVuY3Rpb24gd2lkdGgkMSh0KXtyZXR1cm57d2lkdGg6dCtcIiVcIn19dmFyIFFQcm9ncmVzcz17bmFtZTpcIlFQcm9ncmVzc1wiLHByb3BzOntwZXJjZW50YWdlOnt0eXBlOk51bWJlcixkZWZhdWx0OjB9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSxzdHJpcGU6Qm9vbGVhbixhbmltYXRlOkJvb2xlYW4saW5kZXRlcm1pbmF0ZTpCb29sZWFuLGJ1ZmZlcjpOdW1iZXIsaGVpZ2h0Ont0eXBlOlN0cmluZyxkZWZhdWx0OlwiNHB4XCJ9fSxjb21wdXRlZDp7bW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gYmV0d2Vlbih0aGlzLnBlcmNlbnRhZ2UsMCwxMDApfSxidWZmZXJNb2RlbDpmdW5jdGlvbigpe3JldHVybiBiZXR3ZWVuKHRoaXMuYnVmZmVyfHwwLDAsMTAwLXRoaXMubW9kZWwpfSxidWZmZXJTdHlsZTpmdW5jdGlvbigpe3JldHVybiB3aWR0aCQxKHRoaXMuYnVmZmVyTW9kZWwpfSx0cmFja1N0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHdpZHRoJDEodGhpcy5idWZmZXI/MTAwLXRoaXMuYnVmZmVyOjEwMCl9LGNvbXB1dGVkQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5cInRleHQtXCIrdGhpcy5jb2xvcn0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3JldHVybntoZWlnaHQ6dGhpcy5oZWlnaHR9fSxtb2RlbENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue2FuaW1hdGU6dGhpcy5hbmltYXRlLHN0cmlwZTp0aGlzLnN0cmlwZSxpbmRldGVybWluYXRlOnRoaXMuaW5kZXRlcm1pbmF0ZX19LG1vZGVsU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gd2lkdGgkMSh0aGlzLm1vZGVsKX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcHJvZ3Jlc3NcIixzdHlsZTp0aGlzLmNvbXB1dGVkU3R5bGUsY2xhc3M6dGhpcy5jb21wdXRlZENsYXNzfSxbdGhpcy5idWZmZXImJiF0aGlzLmluZGV0ZXJtaW5hdGU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcHJvZ3Jlc3MtYnVmZmVyXCIsc3R5bGU6dGhpcy5idWZmZXJTdHlsZX0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcHJvZ3Jlc3MtdHJhY2tcIixzdHlsZTp0aGlzLnRyYWNrU3R5bGV9KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wcm9ncmVzcy1tb2RlbFwiLHN0eWxlOnRoaXMubW9kZWxTdHlsZSxjbGFzczp0aGlzLm1vZGVsQ2xhc3N9KV0pfX0saGVpZ2h0JDE9LTY1LFFQdWxsVG9SZWZyZXNoPXtuYW1lOlwiUVB1bGxUb1JlZnJlc2hcIixkaXJlY3RpdmVzOntUb3VjaFBhbjpUb3VjaFBhbn0scHJvcHM6e2hhbmRsZXI6e3R5cGU6RnVuY3Rpb24scmVxdWlyZWQ6ITB9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSxkaXN0YW5jZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDozNX0scHVsbE1lc3NhZ2U6U3RyaW5nLHJlbGVhc2VNZXNzYWdlOlN0cmluZyxyZWZyZXNoTWVzc2FnZTpTdHJpbmcscmVmcmVzaEljb246U3RyaW5nLGlubGluZTpCb29sZWFuLGRpc2FibGU6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybntzdGF0ZTpcInB1bGxcIixwdWxsUG9zaXRpb246aGVpZ2h0JDEsYW5pbWF0aW5nOiExLHB1bGxpbmc6ITEsc2Nyb2xsaW5nOiExfX0sd2F0Y2g6e2lubGluZTpmdW5jdGlvbih0KXt0aGlzLnNldFNjcm9sbENvbnRhaW5lcih0KX19LGNvbXB1dGVkOnttZXNzYWdlOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuc3RhdGUpe2Nhc2VcInB1bGxlZFwiOnJldHVybiB0aGlzLnJlbGVhc2VNZXNzYWdlfHx0aGlzLiRxLmkxOG4ucHVsbFRvUmVmcmVzaC5yZWxlYXNlO2Nhc2VcInJlZnJlc2hpbmdcIjpyZXR1cm4gdGhpcy5yZWZyZXNoTWVzc2FnZXx8dGhpcy4kcS5pMThuLnB1bGxUb1JlZnJlc2gucmVmcmVzaDtjYXNlXCJwdWxsXCI6ZGVmYXVsdDpyZXR1cm4gdGhpcy5wdWxsTWVzc2FnZXx8dGhpcy4kcS5pMThuLnB1bGxUb1JlZnJlc2gucHVsbH19LHN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue3RyYW5zZm9ybTpcInRyYW5zbGF0ZVkoXCIrdGhpcy5wdWxsUG9zaXRpb24rXCJweClcIixtYXJnaW5Cb3R0b206aGVpZ2h0JDErXCJweFwifX0sbWVzc2FnZUNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuXCJ0ZXh0LVwiK3RoaXMuY29sb3J9fSxtZXRob2RzOntfX3B1bGw6ZnVuY3Rpb24odCl7aWYoIXRoaXMuZGlzYWJsZSl7aWYodC5pc0ZpbmFsKXJldHVybiB0aGlzLnNjcm9sbGluZz0hMSx0aGlzLnB1bGxpbmc9ITEsdm9pZChcInB1bGxlZFwiPT09dGhpcy5zdGF0ZT8odGhpcy5zdGF0ZT1cInJlZnJlc2hpbmdcIix0aGlzLl9fYW5pbWF0ZVRvKDApLHRoaXMudHJpZ2dlcigpKTpcInB1bGxcIj09PXRoaXMuc3RhdGUmJnRoaXMuX19hbmltYXRlVG8oaGVpZ2h0JDEpKTtpZih0aGlzLmFuaW1hdGluZ3x8dGhpcy5zY3JvbGxpbmd8fFwicmVmcmVzaGluZ1wiPT09dGhpcy5zdGF0ZSlyZXR1cm4hMDt2YXIgZT1nZXRTY3JvbGxQb3NpdGlvbih0aGlzLnNjcm9sbENvbnRhaW5lcik7aWYoMCE9PWV8fDA9PT1lJiZcImRvd25cIiE9PXQuZGlyZWN0aW9uKXJldHVybiB0aGlzLnNjcm9sbGluZz0hMCx0aGlzLnB1bGxpbmcmJih0aGlzLnB1bGxpbmc9ITEsdGhpcy5zdGF0ZT1cInB1bGxcIix0aGlzLl9fYW5pbWF0ZVRvKGhlaWdodCQxKSksITA7dC5ldnQucHJldmVudERlZmF1bHQoKSx0aGlzLnB1bGxpbmc9ITAsdGhpcy5wdWxsUG9zaXRpb249aGVpZ2h0JDErTWF0aC5tYXgoMCxNYXRoLnBvdyh0LmRpc3RhbmNlLnksLjg1KSksdGhpcy5zdGF0ZT10aGlzLnB1bGxQb3NpdGlvbj50aGlzLmRpc3RhbmNlP1wicHVsbGVkXCI6XCJwdWxsXCJ9fSxfX2FuaW1hdGVUbzpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpczshaSYmdGhpcy5hbmltYXRpb25JZCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRpbmcpLHRoaXMucHVsbFBvc2l0aW9uLT0odGhpcy5wdWxsUG9zaXRpb24tdCkvNyx0aGlzLnB1bGxQb3NpdGlvbi10PjE/dGhpcy5hbmltYXRpbmc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cy5fX2FuaW1hdGVUbyh0LGUsITApfSk6dGhpcy5hbmltYXRpbmc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cy5wdWxsUG9zaXRpb249dCxzLmFuaW1hdGluZz0hMSxlJiZlKCl9KX0sdHJpZ2dlcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5oYW5kbGVyKGZ1bmN0aW9uKCl7dC5fX2FuaW1hdGVUbyhoZWlnaHQkMSxmdW5jdGlvbigpe3Quc3RhdGU9XCJwdWxsXCJ9KX0pfSxzZXRTY3JvbGxDb250YWluZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2Uuc2Nyb2xsQ29udGFpbmVyPXQ/ZS4kZWwucGFyZW50Tm9kZTpnZXRTY3JvbGxUYXJnZXQoZS4kZWwpfSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5zZXRTY3JvbGxDb250YWluZXIodGhpcy5pbmxpbmUpfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJwdWxsLXRvLXJlZnJlc2ggb3ZlcmZsb3ctaGlkZGVuLXlcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJwdWxsLXRvLXJlZnJlc2gtY29udGFpbmVyXCIsc3R5bGU6dGhpcy5zdHlsZSxkaXJlY3RpdmVzOnRoaXMuZGlzYWJsZT9udWxsOlt7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7dmVydGljYWw6ITAsbWlnaHRQcmV2ZW50OiEwfSx2YWx1ZTp0aGlzLl9fcHVsbH1dfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInB1bGwtdG8tcmVmcmVzaC1tZXNzYWdlIHJvdyBmbGV4LWNlbnRlclwiLGNsYXNzOnRoaXMubWVzc2FnZUNsYXNzfSxbdChRSWNvbix7Y2xhc3M6e1wicm90YXRlLTE4MFwiOlwicHVsbGVkXCI9PT10aGlzLnN0YXRlfSxwcm9wczp7bmFtZTp0aGlzLiRxLmljb24ucHVsbFRvUmVmcmVzaC5hcnJvd30sZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIsdmFsdWU6XCJyZWZyZXNoaW5nXCIhPT10aGlzLnN0YXRlfV19KSx0KFFJY29uLHtzdGF0aWNDbGFzczpcImFuaW1hdGUtc3BpblwiLHByb3BzOntuYW1lOnRoaXMucmVmcmVzaEljb258fHRoaXMuJHEuaWNvbi5wdWxsVG9SZWZyZXNoLnJlZnJlc2h9LGRpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHZhbHVlOlwicmVmcmVzaGluZ1wiPT09dGhpcy5zdGF0ZX1dfSksXCIgXCIrdGhpcy5tZXNzYWdlXSksdGhpcy4kc2xvdHMuZGVmYXVsdF0pXSl9fSxkcmFnVHlwZT17TUlOOjAsUkFOR0U6MSxNQVg6Mn0sUVJhbmdlPXtuYW1lOlwiUVJhbmdlXCIsbWl4aW5zOltTbGlkZXJNaXhpbl0scHJvcHM6e3ZhbHVlOnt0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue21pbjowLG1heDowfX0sdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmhhc093blByb3BlcnR5KFwibWluXCIpJiZ0Lmhhc093blByb3BlcnR5KFwibWF4XCIpfX0sZHJhZ1JhbmdlOkJvb2xlYW4sZHJhZ09ubHlSYW5nZTpCb29sZWFuLGxlZnRMYWJlbENvbG9yOlN0cmluZyxsZWZ0TGFiZWxWYWx1ZTpTdHJpbmcscmlnaHRMYWJlbENvbG9yOlN0cmluZyxyaWdodExhYmVsVmFsdWU6U3RyaW5nfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vZGVsOk9iamVjdC5hc3NpZ24oe30sdGhpcy52YWx1ZSksZHJhZ2dpbmc6ITEsY3VycmVudE1pblBlcmNlbnRhZ2U6KHRoaXMudmFsdWUubWluLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pLGN1cnJlbnRNYXhQZXJjZW50YWdlOih0aGlzLnZhbHVlLm1heC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX19LGNvbXB1dGVkOntwZXJjZW50YWdlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcD8odGhpcy5tb2RlbC5taW4tdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbik6dGhpcy5jdXJyZW50TWluUGVyY2VudGFnZX0scGVyY2VudGFnZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNuYXA/KHRoaXMubW9kZWwubWF4LXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pOnRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2V9LGFjdGl2ZVRyYWNrV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gMTAwKih0aGlzLnBlcmNlbnRhZ2VNYXgtdGhpcy5wZXJjZW50YWdlTWluKStcIiVcIn0sbGVmdERpc3BsYXlWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmxlZnRMYWJlbFZhbHVlP3RoaXMubGVmdExhYmVsVmFsdWU6dGhpcy5tb2RlbC5taW59LHJpZ2h0RGlzcGxheVZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMucmlnaHRMYWJlbFZhbHVlP3RoaXMucmlnaHRMYWJlbFZhbHVlOnRoaXMubW9kZWwubWF4fSxsZWZ0VG9vbHRpcENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdExhYmVsQ29sb3J8fHRoaXMubGFiZWxDb2xvcn0scmlnaHRUb29sdGlwQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yaWdodExhYmVsQ29sb3J8fHRoaXMubGFiZWxDb2xvcn19LHdhdGNoOntcInZhbHVlLm1pblwiOmZ1bmN0aW9uKHQpe3RoaXMubW9kZWwubWluPXR9LFwidmFsdWUubWF4XCI6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbC5tYXg9dH0sXCJtb2RlbC5taW5cIjpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nfHwodD50aGlzLm1vZGVsLm1heCYmKHQ9dGhpcy5tb2RlbC5tYXgpLHRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2U9KHQtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikpfSxcIm1vZGVsLm1heFwiOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmd8fCh0PHRoaXMubW9kZWwubWluJiYodD10aGlzLm1vZGVsLm1pbiksdGhpcy5jdXJyZW50TWF4UGVyY2VudGFnZT0odC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSl9LG1pbjpmdW5jdGlvbih0KXt0aGlzLm1vZGVsLm1pbjx0JiZ0aGlzLl9fdXBkYXRlKHttaW46dH0pLHRoaXMubW9kZWwubWF4PHQmJnRoaXMuX191cGRhdGUoe21heDp0fSksdGhpcy4kbmV4dFRpY2sodGhpcy5fX3ZhbGlkYXRlUHJvcHMpfSxtYXg6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbC5taW4+dCYmdGhpcy5fX3VwZGF0ZSh7bWluOnR9KSx0aGlzLm1vZGVsLm1heD50JiZ0aGlzLl9fdXBkYXRlKHttYXg6dH0pLHRoaXMuJG5leHRUaWNrKHRoaXMuX192YWxpZGF0ZVByb3BzKX0sc3RlcDpmdW5jdGlvbigpe3RoaXMuJG5leHRUaWNrKHRoaXMuX192YWxpZGF0ZVByb3BzKX19LG1ldGhvZHM6e19fZ2V0RHJhZ2dpbmc6ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLiRyZWZzLmhhbmRsZSxzPWkub2Zmc2V0V2lkdGgsbj0odGhpcy5kcmFnT25seVJhbmdlPy0xOjEpKnRoaXMuJHJlZnMuaGFuZGxlTWluLm9mZnNldFdpZHRoLygyKnMpLG89e2xlZnQ6aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LHdpZHRoOnMsdmFsdWVNaW46dGhpcy5tb2RlbC5taW4sdmFsdWVNYXg6dGhpcy5tb2RlbC5tYXgscGVyY2VudGFnZU1pbjp0aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlLHBlcmNlbnRhZ2VNYXg6dGhpcy5jdXJyZW50TWF4UGVyY2VudGFnZX0scj1nZXRQZXJjZW50YWdlKHQsbyx0aGlzLiRxLmkxOG4ucnRsKTtyZXR1cm4gcjx0aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlK24/ZT1kcmFnVHlwZS5NSU46cjx0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlLW4/dGhpcy5kcmFnUmFuZ2V8fHRoaXMuZHJhZ09ubHlSYW5nZT8oZT1kcmFnVHlwZS5SQU5HRSxPYmplY3QuYXNzaWduKG8se29mZnNldFBlcmNlbnRhZ2U6cixvZmZzZXRNb2RlbDpnZXRNb2RlbChyLHRoaXMubWluLHRoaXMubWF4LHRoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpLHJhbmdlVmFsdWU6by52YWx1ZU1heC1vLnZhbHVlTWluLHJhbmdlUGVyY2VudGFnZTp0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlLXRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2V9KSk6ZT10aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlLXI8ci10aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlP2RyYWdUeXBlLk1BWDpkcmFnVHlwZS5NSU46ZT1kcmFnVHlwZS5NQVgsKCF0aGlzLmRyYWdPbmx5UmFuZ2V8fGU9PT1kcmFnVHlwZS5SQU5HRSkmJihvLnR5cGU9ZSxvKX0sX19tb3ZlOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9dGhpcy5kcmFnZ2luZyk7dmFyIGkscz1nZXRQZXJjZW50YWdlKHQsZSx0aGlzLiRxLmkxOG4ucnRsKSxuPWdldE1vZGVsKHMsdGhpcy5taW4sdGhpcy5tYXgsdGhpcy5zdGVwLHRoaXMuY29tcHV0ZWREZWNpbWFscyk7c3dpdGNoKGUudHlwZSl7Y2FzZSBkcmFnVHlwZS5NSU46aT1zPD1lLnBlcmNlbnRhZ2VNYXg/e21pblA6cyxtYXhQOmUucGVyY2VudGFnZU1heCxtaW46bixtYXg6ZS52YWx1ZU1heH06e21pblA6ZS5wZXJjZW50YWdlTWF4LG1heFA6cyxtaW46ZS52YWx1ZU1heCxtYXg6bn07YnJlYWs7Y2FzZSBkcmFnVHlwZS5NQVg6aT1zPj1lLnBlcmNlbnRhZ2VNaW4/e21pblA6ZS5wZXJjZW50YWdlTWluLG1heFA6cyxtaW46ZS52YWx1ZU1pbixtYXg6bn06e21pblA6cyxtYXhQOmUucGVyY2VudGFnZU1pbixtaW46bixtYXg6ZS52YWx1ZU1pbn07YnJlYWs7Y2FzZSBkcmFnVHlwZS5SQU5HRTp2YXIgbz1zLWUub2Zmc2V0UGVyY2VudGFnZSxyPWJldHdlZW4oZS5wZXJjZW50YWdlTWluK28sMCwxLWUucmFuZ2VQZXJjZW50YWdlKSxhPW4tZS5vZmZzZXRNb2RlbCxsPWJldHdlZW4oZS52YWx1ZU1pbithLHRoaXMubWluLHRoaXMubWF4LWUucmFuZ2VWYWx1ZSk7aT17bWluUDpyLG1heFA6citlLnJhbmdlUGVyY2VudGFnZSxtaW46cGFyc2VGbG9hdChsLnRvRml4ZWQodGhpcy5jb21wdXRlZERlY2ltYWxzKSksbWF4OnBhcnNlRmxvYXQoKGwrZS5yYW5nZVZhbHVlKS50b0ZpeGVkKHRoaXMuY29tcHV0ZWREZWNpbWFscykpfX10aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlPWkubWluUCx0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlPWkubWF4UCx0aGlzLm1vZGVsPXttaW46aS5taW4sbWF4OmkubWF4fX0sX19lbmQ6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT10aGlzLmRyYWdnaW5nKSx0aGlzLl9fbW92ZSh0LGUpLHRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2U9KHRoaXMubW9kZWwubWluLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pLHRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2U9KHRoaXMubW9kZWwubWF4LXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfSxfX29uS2V5RG93bjpmdW5jdGlvbih0LGUpe3ZhciBpPXQua2V5Q29kZTtpZih0aGlzLmVkaXRhYmxlJiZbMzcsNDAsMzksMzhdLmluY2x1ZGVzKGkpKXtzdG9wQW5kUHJldmVudCh0KTt2YXIgcz10aGlzLmNvbXB1dGVkRGVjaW1hbHMsbj10LmN0cmxLZXk/MTAqdGhpcy5jb21wdXRlZFN0ZXA6dGhpcy5jb21wdXRlZFN0ZXAsbz1bMzcsNDBdLmluY2x1ZGVzKGkpPy1uOm4scj1zP3BhcnNlRmxvYXQoKHRoaXMubW9kZWxbZV0rbykudG9GaXhlZChzKSk6dGhpcy5tb2RlbFtlXStvO3RoaXMubW9kZWxbZV09YmV0d2VlbihyLFwibWluXCI9PT1lP3RoaXMubWluOnRoaXMubW9kZWwubWluLFwibWF4XCI9PT1lP3RoaXMubWF4OnRoaXMubW9kZWwubWF4KSx0aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlPSh0aGlzLm1vZGVsLm1pbi10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSx0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlPSh0aGlzLm1vZGVsLm1heC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSx0aGlzLl9fdXBkYXRlKCl9fSxfX29uS2V5VXA6ZnVuY3Rpb24odCxlKXt2YXIgaT10LmtleUNvZGU7dGhpcy5lZGl0YWJsZSYmWzM3LDQwLDM5LDM4XS5pbmNsdWRlcyhpKSYmdGhpcy5fX3VwZGF0ZSghMCl9LF9fdmFsaWRhdGVQcm9wczpmdW5jdGlvbigpe3RoaXMubWluPj10aGlzLm1heD9jb25zb2xlLmVycm9yKFwiUmFuZ2UgZXJyb3I6IG1pbiA+PSBtYXhcIix0aGlzLiRlbCx0aGlzLm1pbix0aGlzLm1heCk6bm90RGl2aWRlcygodGhpcy5tYXgtdGhpcy5taW4pL3RoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpP2NvbnNvbGUuZXJyb3IoXCJSYW5nZSBlcnJvcjogc3RlcCBtdXN0IGJlIGEgZGl2aXNvciBvZiBtYXggLSBtaW5cIix0aGlzLm1pbix0aGlzLm1heCx0aGlzLnN0ZXApOm5vdERpdmlkZXMoKHRoaXMubW9kZWwubWluLXRoaXMubWluKS90aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKT9jb25zb2xlLmVycm9yKFwiUmFuZ2UgZXJyb3I6IHN0ZXAgbXVzdCBiZSBhIGRpdmlzb3Igb2YgaW5pdGlhbCB2YWx1ZS5taW4gLSBtaW5cIix0aGlzLm1vZGVsLm1pbix0aGlzLm1pbix0aGlzLnN0ZXApOm5vdERpdmlkZXMoKHRoaXMubW9kZWwubWF4LXRoaXMubWluKS90aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKSYmY29uc29sZS5lcnJvcihcIlJhbmdlIGVycm9yOiBzdGVwIG11c3QgYmUgYSBkaXZpc29yIG9mIGluaXRpYWwgdmFsdWUubWF4IC0gbWluXCIsdGhpcy5tb2RlbC5tYXgsdGhpcy5tYXgsdGhpcy5zdGVwKX0sX19nZXRIYW5kbGU6ZnVuY3Rpb24odCxlLGkscyxuLG8scil7dmFyIGEsbD10aGlzO3JldHVybiB0KFwiZGl2XCIse3JlZjpcImhhbmRsZVwiK2ksc3RhdGljQ2xhc3M6XCJxLXNsaWRlci1oYW5kbGUgcS1zbGlkZXItaGFuZGxlLVwiK2Usc3R5bGU6KGE9e30sYVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09MTAwKm4rXCIlXCIsYS5ib3JkZXJSYWRpdXM9dGhpcy5zcXVhcmU/XCIwXCI6XCI1MCVcIixhKSxjbGFzczpbcz9cImhhbmRsZS1hdC1taW5pbXVtXCI6bnVsbCx7ZHJhZ2dpbmc6dGhpcy5kcmFnZ2luZ31dLGF0dHJzOnt0YWJpbmRleDp0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3A/dGhpcy5lZGl0YWJsZT8wOi0xOnZvaWQgMH0sb246e2tleWRvd246ZnVuY3Rpb24odCl7cmV0dXJuIGwuX19vbktleURvd24odCxlKX0sa2V5dXA6ZnVuY3Rpb24odCl7cmV0dXJuIGwuX19vbktleVVwKHQsZSl9fX0sW3RoaXMubGFiZWx8fHRoaXMubGFiZWxBbHdheXM/dChRQ2hpcCx7cHJvcHM6e3BvaW50aW5nOlwiZG93blwiLHNxdWFyZTohMCxkZW5zZTohMCxjb2xvcjpvfSxzdGF0aWNDbGFzczpcInEtc2xpZGVyLWxhYmVsIG5vLXBvaW50ZXItZXZlbnRzXCIsY2xhc3M6e1wibGFiZWwtYWx3YXlzXCI6dGhpcy5sYWJlbEFsd2F5c319LFtyXSk6bnVsbCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItcmluZ1wifSldKX0sX19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVyblt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zbGlkZXItdHJhY2sgYWN0aXZlLXRyYWNrXCIsc3R5bGU6KGU9e30sZVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09MTAwKnRoaXMucGVyY2VudGFnZU1pbitcIiVcIixlLndpZHRoPXRoaXMuYWN0aXZlVHJhY2tXaWR0aCxlKSxjbGFzczp7ZHJhZ2dpbmc6dGhpcy5kcmFnZ2luZyxcInRyYWNrLWRyYWdnYWJsZVwiOnRoaXMuZHJhZ1JhbmdlfHx0aGlzLmRyYWdPbmx5UmFuZ2V9fSksdGhpcy5fX2dldEhhbmRsZSh0LFwibWluXCIsXCJNaW5cIiwhdGhpcy5maWxsSGFuZGxlQWx3YXlzJiZ0aGlzLm1vZGVsLm1pbj09PXRoaXMubWluLHRoaXMucGVyY2VudGFnZU1pbix0aGlzLmxlZnRUb29sdGlwQ29sb3IsdGhpcy5sZWZ0RGlzcGxheVZhbHVlKSx0aGlzLl9fZ2V0SGFuZGxlKHQsXCJtYXhcIixcIk1heFwiLCExLHRoaXMucGVyY2VudGFnZU1heCx0aGlzLnJpZ2h0VG9vbHRpcENvbG9yLHRoaXMucmlnaHREaXNwbGF5VmFsdWUpXX19fSxRUmF0aW5nPXtuYW1lOlwiUVJhdGluZ1wiLHByb3BzOnt2YWx1ZTpOdW1iZXIsbWF4Ont0eXBlOk51bWJlcixkZWZhdWx0OjV9LGljb246U3RyaW5nLGNvbG9yOlN0cmluZyxzaXplOlN0cmluZyxyZWFkb25seTpCb29sZWFuLGRpc2FibGU6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybnttb3VzZU1vZGVsOjB9fSxjb21wdXRlZDp7bW9kZWw6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRlbWl0KFwiaW5wdXRcIix0KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIix0KX0pfX0sZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5yZWFkb25seSYmIXRoaXMuZGlzYWJsZX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmRpc2FibGUmJnQucHVzaChcImRpc2FibGVkXCIpLHRoaXMuZWRpdGFibGUmJnQucHVzaChcImVkaXRhYmxlXCIpLHRoaXMuY29sb3ImJnQucHVzaChcInRleHQtXCIrdGhpcy5jb2xvciksdH19LG1ldGhvZHM6e3NldDpmdW5jdGlvbih0KXtpZih0aGlzLmVkaXRhYmxlKXt2YXIgZT1iZXR3ZWVuKHBhcnNlSW50KHQsMTApLDEsdGhpcy5tYXgpO3RoaXMubW9kZWw9dGhpcy5tb2RlbD09PWU/MDplLHRoaXMubW91c2VNb2RlbD0wfX0sX19zZXRIb3ZlclZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZWRpdGFibGUmJih0aGlzLm1vdXNlTW9kZWw9dCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsaT1bXSxzPXRoaXMuZWRpdGFibGU/MDotMSxuPWZ1bmN0aW9uKG4pe2kucHVzaCh0KFwic3BhblwiLHtrZXk6bixyZWY6XCJydFwiK24sYXR0cnM6e3RhYmluZGV4OnN9LG9uOntrZXlkb3duOmZ1bmN0aW9uKHQpe3N3aXRjaChnZXRFdmVudEtleSh0KSl7Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBlLnNldChuKSxzdG9wQW5kUHJldmVudCh0KTtjYXNlIDM3OmNhc2UgNDA6cmV0dXJuIGUuJHJlZnNbXCJydFwiKyhuLTEpXSYmZS4kcmVmc1tcInJ0XCIrKG4tMSldLmZvY3VzKCksc3RvcEFuZFByZXZlbnQodCk7Y2FzZSAzOTpjYXNlIDM4OnJldHVybiBlLiRyZWZzW1wicnRcIisobisxKV0mJmUuJHJlZnNbXCJydFwiKyhuKzEpXS5mb2N1cygpLHN0b3BBbmRQcmV2ZW50KHQpfX19fSxbdChRSWNvbix7cHJvcHM6e25hbWU6ZS5pY29ufHxlLiRxLmljb24ucmF0aW5nLmljb259LGNsYXNzOnthY3RpdmU6IWUubW91c2VNb2RlbCYmZS5tb2RlbD49bnx8ZS5tb3VzZU1vZGVsJiZlLm1vdXNlTW9kZWw+PW4sZXhzZWxlY3RlZDplLm1vdXNlTW9kZWwmJmUubW9kZWw+PW4mJmUubW91c2VNb2RlbDxuLGhvdmVyZWQ6ZS5tb3VzZU1vZGVsPT09bn0sYXR0cnM6e3RhYmluZGV4Oi0xfSxuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQobil9LG1vdXNlb3ZlcjpmdW5jdGlvbigpe3JldHVybiBlLl9fc2V0SG92ZXJWYWx1ZShuKX0sbW91c2VvdXQ6ZnVuY3Rpb24oKXtlLm1vdXNlTW9kZWw9MH0sZm9jdXM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5fX3NldEhvdmVyVmFsdWUobil9LGJsdXI6ZnVuY3Rpb24oKXtlLm1vdXNlTW9kZWw9MH19fSldKSl9LG89MTtvPD10aGlzLm1heDtvKyspbihvKTtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcmF0aW5nIHJvdyBpbmxpbmUgaXRlbXMtY2VudGVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLHN0eWxlOnRoaXMuc2l6ZT9cImZvbnQtc2l6ZTogXCIrdGhpcy5zaXplOlwiXCJ9LGkpfX0sUVNjcm9sbEFyZWE9e25hbWU6XCJRU2Nyb2xsQXJlYVwiLGRpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7dGh1bWJTdHlsZTp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX0sY29udGVudFN0eWxlOnt0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue319fSxjb250ZW50QWN0aXZlU3R5bGU6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LGRlbGF5Ont0eXBlOk51bWJlcixkZWZhdWx0OjFlM319LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57YWN0aXZlOiExLGhvdmVyOiExLGNvbnRhaW5lckhlaWdodDowLHNjcm9sbFBvc2l0aW9uOjAsc2Nyb2xsSGVpZ2h0OjB9fSxjb21wdXRlZDp7dGh1bWJIaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxIZWlnaHQ8PXRoaXMuY29udGFpbmVySGVpZ2h0fHwhdGhpcy5hY3RpdmUmJiF0aGlzLmhvdmVyfSx0aHVtYkhlaWdodDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGJldHdlZW4odGhpcy5jb250YWluZXJIZWlnaHQqdGhpcy5jb250YWluZXJIZWlnaHQvdGhpcy5zY3JvbGxIZWlnaHQsNTAsdGhpcy5jb250YWluZXJIZWlnaHQpKX0sc3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNjcm9sbFBlcmNlbnRhZ2UqKHRoaXMuY29udGFpbmVySGVpZ2h0LXRoaXMudGh1bWJIZWlnaHQpO3JldHVybiBPYmplY3QuYXNzaWduKHt9LHRoaXMudGh1bWJTdHlsZSx7dG9wOnQrXCJweFwiLGhlaWdodDp0aGlzLnRodW1iSGVpZ2h0K1wicHhcIn0pfSxtYWluU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aHVtYkhpZGRlbj90aGlzLmNvbnRlbnRTdHlsZTp0aGlzLmNvbnRlbnRBY3RpdmVTdHlsZX0sc2Nyb2xsUGVyY2VudGFnZTpmdW5jdGlvbigpe3ZhciB0PWJldHdlZW4odGhpcy5zY3JvbGxQb3NpdGlvbi8odGhpcy5zY3JvbGxIZWlnaHQtdGhpcy5jb250YWluZXJIZWlnaHQpLDAsMSk7cmV0dXJuIE1hdGgucm91bmQoMWU0KnQpLzFlNH19LG1ldGhvZHM6e3NldFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSl7c2V0U2Nyb2xsUG9zaXRpb24odGhpcy4kcmVmcy50YXJnZXQsdCxlKX0sX191cGRhdGVDb250YWluZXI6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQ7dGhpcy5jb250YWluZXJIZWlnaHQhPT1lJiYodGhpcy5jb250YWluZXJIZWlnaHQ9ZSx0aGlzLl9fc2V0QWN0aXZlKCEwLCEwKSl9LF9fdXBkYXRlU2Nyb2xsOmZ1bmN0aW9uKHQpe3ZhciBlPXQucG9zaXRpb247dGhpcy5zY3JvbGxQb3NpdGlvbiE9PWUmJih0aGlzLnNjcm9sbFBvc2l0aW9uPWUsdGhpcy5fX3NldEFjdGl2ZSghMCwhMCkpfSxfX3VwZGF0ZVNjcm9sbEhlaWdodDpmdW5jdGlvbih0KXt2YXIgZT10LmhlaWdodDt0aGlzLnNjcm9sbEhlaWdodCE9PWUmJih0aGlzLnNjcm9sbEhlaWdodD1lLHRoaXMuX19zZXRBY3RpdmUoITAsITApKX0sX19wYW5UaHVtYjpmdW5jdGlvbih0KXt0LmlzRmlyc3QmJih0aGlzLnJlZlBvcz10aGlzLnNjcm9sbFBvc2l0aW9uLHRoaXMuX19zZXRBY3RpdmUoITAsITApLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcIm5vbi1zZWxlY3RhYmxlXCIpLGRvY3VtZW50LnNlbGVjdGlvbj9kb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTp3aW5kb3cuZ2V0U2VsZWN0aW9uJiZ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkpLHQuaXNGaW5hbCYmKHRoaXMuX19zZXRBY3RpdmUoITEpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcIm5vbi1zZWxlY3RhYmxlXCIpKTt2YXIgZT0odGhpcy5zY3JvbGxIZWlnaHQtdGhpcy5jb250YWluZXJIZWlnaHQpLyh0aGlzLmNvbnRhaW5lckhlaWdodC10aGlzLnRodW1iSGVpZ2h0KTt0aGlzLiRyZWZzLnRhcmdldC5zY3JvbGxUb3A9dGhpcy5yZWZQb3MrKFwiZG93blwiPT09dC5kaXJlY3Rpb24/MTotMSkqdC5kaXN0YW5jZS55KmV9LF9fcGFuQ29udGFpbmVyOmZ1bmN0aW9uKHQpe3QuaXNGaXJzdCYmKHRoaXMucmVmUG9zPXRoaXMuc2Nyb2xsUG9zaXRpb24sdGhpcy5fX3NldEFjdGl2ZSghMCwhMCkpLHQuaXNGaW5hbCYmdGhpcy5fX3NldEFjdGl2ZSghMSk7dmFyIGU9dGhpcy5yZWZQb3MrKFwiZG93blwiPT09dC5kaXJlY3Rpb24/LTE6MSkqdC5kaXN0YW5jZS55O3RoaXMuJHJlZnMudGFyZ2V0LnNjcm9sbFRvcD1lLGU+MCYmZSt0aGlzLmNvbnRhaW5lckhlaWdodDx0aGlzLnNjcm9sbEhlaWdodCYmdC5ldnQucHJldmVudERlZmF1bHQoKX0sX19tb3VzZVdoZWVsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJHJlZnMudGFyZ2V0O2Uuc2Nyb2xsVG9wKz1nZXRNb3VzZVdoZWVsRGlzdGFuY2UodCkueSxlLnNjcm9sbFRvcD4wJiZlLnNjcm9sbFRvcCt0aGlzLmNvbnRhaW5lckhlaWdodDx0aGlzLnNjcm9sbEhlaWdodCYmdC5wcmV2ZW50RGVmYXVsdCgpfSxfX3NldEFjdGl2ZTpmdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0IT09dGhpcy5hY3RpdmU/dD8odGhpcy5hY3RpdmU9ITAsZSYmdGhpcy5fX3N0YXJ0VGltZXIoKSk6dGhpcy5hY3RpdmU9ITE6dCYmdGhpcy50aW1lciYmdGhpcy5fX3N0YXJ0VGltZXIoKX0sX19zdGFydFRpbWVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmFjdGl2ZT0hMSx0LnRpbWVyPW51bGx9LHRoaXMuZGVsYXkpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zY3JvbGxhcmVhIHJlbGF0aXZlLXBvc2l0aW9uXCIsb246e21vdXNlZW50ZXI6ZnVuY3Rpb24oKXtlLmhvdmVyPSEwfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKCl7ZS5ob3Zlcj0hMX19fSxbdChcImRpdlwiLHtyZWY6XCJ0YXJnZXRcIixzdGF0aWNDbGFzczpcInNjcm9sbCByZWxhdGl2ZS1wb3NpdGlvbiBvdmVyZmxvdy1oaWRkZW4gZml0XCIsb246e3doZWVsOnRoaXMuX19tb3VzZVdoZWVsfSxkaXJlY3RpdmVzOlt7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7dmVydGljYWw6ITAsbm9Nb3VzZTohMCxtaWdodFByZXZlbnQ6ITB9LHZhbHVlOnRoaXMuX19wYW5Db250YWluZXJ9XX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhYnNvbHV0ZSBmdWxsLXdpZHRoXCIsc3R5bGU6dGhpcy5tYWluU3R5bGV9LFt0KFFSZXNpemVPYnNlcnZhYmxlLHtvbjp7cmVzaXplOnRoaXMuX191cGRhdGVTY3JvbGxIZWlnaHR9fSksdGhpcy4kc2xvdHMuZGVmYXVsdF0pLHQoUVNjcm9sbE9ic2VydmFibGUse29uOntzY3JvbGw6dGhpcy5fX3VwZGF0ZVNjcm9sbH19KV0pLHQoUVJlc2l6ZU9ic2VydmFibGUse29uOntyZXNpemU6dGhpcy5fX3VwZGF0ZUNvbnRhaW5lcn19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zY3JvbGxhcmVhLXRodW1iIGFic29sdXRlLXJpZ2h0XCIsc3R5bGU6dGhpcy5zdHlsZSxjbGFzczp7XCJpbnZpc2libGUtdGh1bWJcIjp0aGlzLnRodW1iSGlkZGVufSxkaXJlY3RpdmVzOlt7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7dmVydGljYWw6ITAscHJldmVudDohMH0sdmFsdWU6dGhpcy5fX3BhblRodW1ifV19KV0pOnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNjcm9sbC1hcmVhIHJlbGF0aXZlLXBvc2l0aW9uXCIsc3R5bGU6dGhpcy5jb250ZW50U3R5bGV9LFt0KFwiZGl2XCIse3JlZjpcInRhcmdldFwiLHN0YXRpY0NsYXNzOlwic2Nyb2xsIHJlbGF0aXZlLXBvc2l0aW9uIGZpdFwifSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pfX0sUVNlYXJjaD17bmFtZTpcIlFTZWFyY2hcIixtaXhpbnM6W0ZyYW1lTWl4aW4sSW5wdXRNaXhpbl0scHJvcHM6e3ZhbHVlOntyZXF1aXJlZDohMH0sdHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInNlYXJjaFwifSxkZWJvdW5jZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDozMDB9LGljb246U3RyaW5nLG5vSWNvbjpCb29sZWFuLHVwcGVyQ2FzZTpCb29sZWFuLGxvd2VyQ2FzZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vZGVsOnRoaXMudmFsdWUsY2hpbGREZWJvdW5jZTohMX19LHByb3ZpZGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9ZnVuY3Rpb24oZSl7dC5tb2RlbCE9PWUmJih0Lm1vZGVsPWUpfTtyZXR1cm57X19pbnB1dERlYm91bmNlOntzZXQ6ZSxzZXROYXY6ZSxzZXRDaGlsZERlYm91bmNlOmZ1bmN0aW9uKGUpe3QuY2hpbGREZWJvdW5jZT1lfX19fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbD10fSxtb2RlbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnZhbHVlIT09dCYmKHR8fDA9PT10fHwodGhpcy5tb2RlbD1cIm51bWJlclwiPT09dGhpcy50eXBlP251bGw6XCJcIiksdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS4kZW1pdChcImlucHV0XCIsZS5tb2RlbCl9LHRoaXMuZGVib3VuY2VWYWx1ZSkpfX0sY29tcHV0ZWQ6e2RlYm91bmNlVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZERlYm91bmNlPzA6dGhpcy5kZWJvdW5jZX0sY29tcHV0ZWRDbGVhclZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNOdW1iZXImJjA9PT10aGlzLmNsZWFyVmFsdWU/dGhpcy5jbGVhclZhbHVlOnRoaXMuY2xlYXJWYWx1ZXx8KFwibnVtYmVyXCI9PT10aGlzLnR5cGU/bnVsbDpcIlwiKX0sY29udHJvbEJlZm9yZTpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmJlZm9yZXx8W10pLnNsaWNlKCk7cmV0dXJuIHRoaXMubm9JY29ufHx0LnVuc2hpZnQoe2ljb246dGhpcy5pY29ufHx0aGlzLiRxLmljb24uc2VhcmNoLmljb24saGFuZGxlcjp0aGlzLmZvY3VzfSksdH0sY29udHJvbEFmdGVyOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMuYWZ0ZXJ8fFtdKS5zbGljZSgpO3JldHVybiB0aGlzLmlzQ2xlYXJhYmxlJiZ0LnB1c2goe2ljb246dGhpcy4kcS5pY29uLnNlYXJjaFtcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildLGhhbmRsZXI6dGhpcy5jbGVhcn0pLHR9fSxtZXRob2RzOntjbGVhcjpmdW5jdGlvbih0KXt0aGlzLiRyZWZzLmlucHV0LmNsZWFyKHQpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoUUlucHV0LHtyZWY6XCJpbnB1dFwiLHN0YXRpY0NsYXNzOlwicS1zZWFyY2hcIixwcm9wczp7dmFsdWU6dGhpcy5tb2RlbCx0eXBlOnRoaXMudHlwZSxhdXRvZm9jdXM6dGhpcy5hdXRvZm9jdXMscGxhY2Vob2xkZXI6dGhpcy5wbGFjZWhvbGRlcnx8dGhpcy4kcS5pMThuLmxhYmVsLnNlYXJjaCxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcsYWxpZ246dGhpcy5hbGlnbixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmbG9hdExhYmVsOnRoaXMuZmxvYXRMYWJlbCxzdGFja0xhYmVsOnRoaXMuc3RhY2tMYWJlbCxwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsY29sb3I6dGhpcy5jb2xvcixyb3dzOnRoaXMucm93cyxiZWZvcmU6dGhpcy5jb250cm9sQmVmb3JlLGFmdGVyOnRoaXMuY29udHJvbEFmdGVyLGNsZWFyVmFsdWU6dGhpcy5jbGVhclZhbHVlLHVwcGVyQ2FzZTp0aGlzLnVwcGVyQ2FzZSxsb3dlckNhc2U6dGhpcy5sb3dlckNhc2V9LGF0dHJzOnRoaXMuJGF0dHJzLG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLm1vZGVsPXR9LGZvY3VzOnRoaXMuX19vbkZvY3VzLGJsdXI6dGhpcy5fX29uQmx1cixrZXl1cDp0aGlzLl9fb25LZXl1cCxrZXlkb3duOnRoaXMuX19vbktleWRvd24sY2xpY2s6dGhpcy5fX29uQ2xpY2sscGFzdGU6dGhpcy5fX29uUGFzdGUsY2xlYXI6ZnVuY3Rpb24odCl7ZS4kZW1pdChcImNsZWFyXCIsdCksZS5fX2VtaXQoKX19fSx0aGlzLiRzbG90cy5kZWZhdWx0KX19O2Z1bmN0aW9uIGRlZmF1bHRGaWx0ZXJGbih0LGUpe3JldHVybiBlLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT4tMX12YXIgUVNlbGVjdD17bmFtZTpcIlFTZWxlY3RcIixtaXhpbnM6W0ZyYW1lTWl4aW4sS2V5Ym9hcmRTZWxlY3Rpb25NaXhpbl0scHJvcHM6e2ZpbHRlcjpbRnVuY3Rpb24sQm9vbGVhbl0sZmlsdGVyUGxhY2Vob2xkZXI6U3RyaW5nLHJhZGlvOkJvb2xlYW4scGxhY2Vob2xkZXI6U3RyaW5nLHNlcGFyYXRvcjpCb29sZWFuLHZhbHVlOntyZXF1aXJlZDohMH0sbXVsdGlwbGU6Qm9vbGVhbix0b2dnbGU6Qm9vbGVhbixjaGlwczpCb29sZWFuLG9wdGlvbnM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITAsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVyblwibGFiZWxcImluIHQmJlwidmFsdWVcImluIHR9KX19LGNoaXBzQ29sb3I6U3RyaW5nLGNoaXBzQmdDb2xvcjpTdHJpbmcsZGlzcGxheVZhbHVlOlN0cmluZyxwb3B1cE1heEhlaWdodDpTdHJpbmcscG9wdXBDb3Zlcjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vZGVsOnRoaXMubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5zbGljZSgpOnRoaXMudmFsdWUsdGVybXM6XCJcIixmb2N1c2VkOiExfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMubW9kZWw9dGhpcy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh0KT90LnNsaWNlKCk6dH0sdmlzaWJsZU9wdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl9fa2V5Ym9hcmRDYWxjSW5kZXgoKX19LGNvbXB1dGVkOntvcHRNb2RlbDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5tdWx0aXBsZSlyZXR1cm4gdGhpcy5tb2RlbC5sZW5ndGg+MD90aGlzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm1vZGVsLmluY2x1ZGVzKGUudmFsdWUpfSk6dGhpcy5vcHRpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4hMX0pfSx2aXNpYmxlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdCx7aW5kZXg6ZX0pfSk7aWYodGhpcy5maWx0ZXImJnRoaXMudGVybXMubGVuZ3RoKXt2YXIgaT10aGlzLnRlcm1zLnRvTG93ZXJDYXNlKCk7ZT1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5maWx0ZXJGbihpLGUpfSl9cmV0dXJuIGV9LGtleWJvYXJkTWF4SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aXNpYmxlT3B0aW9ucy5sZW5ndGgtMX0sZmlsdGVyRm46ZnVuY3Rpb24oKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIHRoaXMuZmlsdGVyP2RlZmF1bHRGaWx0ZXJGbjp0aGlzLmZpbHRlcn0sYWN0dWFsVmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuZGlzcGxheVZhbHVlKXJldHVybiB0aGlzLmRpc3BsYXlWYWx1ZTtpZighdGhpcy5tdWx0aXBsZSl7dmFyIGU9dGhpcy5vcHRpb25zLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWU9PT10Lm1vZGVsfSk7cmV0dXJuIGU/ZS5sYWJlbDpcIlwifXZhciBpPXRoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5sYWJlbH0pO3JldHVybiBpLmxlbmd0aD9pLmpvaW4oXCIsIFwiKTpcIlwifSxjb21wdXRlZENsZWFyVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5jbGVhclZhbHVlP3RoaXMubXVsdGlwbGU/W106bnVsbDp0aGlzLmNsZWFyVmFsdWV9LGlzQ2xlYXJhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdGFibGUmJnRoaXMuY2xlYXJhYmxlJiZKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXB1dGVkQ2xlYXJWYWx1ZSkhPT1KU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsKX0sc2VsZWN0ZWRPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLm11bHRpcGxlKXJldHVybiB0aGlzLmxlbmd0aD4wP3RoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQubW9kZWwuaW5jbHVkZXMoZS52YWx1ZSl9KTpbXX0saGFzQ2hpcHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWx0aXBsZSYmdGhpcy5jaGlwcyYmdGhpcy5sZW5ndGg+MH0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5tb2RlbC5sZW5ndGg6W251bGwsdm9pZCAwLFwiXCJdLmluY2x1ZGVzKHRoaXMubW9kZWwpPzA6MX0sYWRkaXRpb25hbExlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXlWYWx1ZSYmdGhpcy5kaXNwbGF5VmFsdWUubGVuZ3RoPjB9fSxtZXRob2RzOnt0b2dnbGVQb3B1cDpmdW5jdGlvbigpe3RoaXMuJHJlZnMucG9wb3ZlciYmdGhpc1t0aGlzLiRyZWZzLnBvcG92ZXIuc2hvd2luZz9cImhpZGVcIjpcInNob3dcIl0oKX0sc2hvdzpmdW5jdGlvbigpe2lmKHRoaXMuX19rZXlib2FyZENhbGNJbmRleCgpLHRoaXMuJHJlZnMucG9wb3ZlcilyZXR1cm4gdGhpcy4kcmVmcy5wb3BvdmVyLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLnBvcG92ZXI/dGhpcy4kcmVmcy5wb3BvdmVyLmhpZGUoKTpQcm9taXNlLnJlc29sdmUoKX0scmVwb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHJlZnMucG9wb3Zlcjt0JiZ0LnNob3dpbmcmJnRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIHQmJnQucmVwb3NpdGlvbigpfSl9LF9fa2V5Ym9hcmRDYWxjSW5kZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMua2V5Ym9hcmRJbmRleD0tMTt2YXIgZT10aGlzLm11bHRpcGxlP3RoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pOlt0aGlzLm1vZGVsXTt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3ZhciBpPXZvaWQgMD09PWU/LTE6TWF0aC5tYXgoLTEsdC52aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModC52YWx1ZSl9KSk7aT4tMSYmKHQua2V5Ym9hcmRNb3ZlRGlyZWN0aW9uPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmtleWJvYXJkTW92ZURpcmVjdGlvbj0hMX0sNTAwKSx0Ll9fa2V5Ym9hcmRTaG93KGkpKX0pfSxfX2tleWJvYXJkQ3VzdG9tS2V5SGFuZGxlOmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2UgMjc6dGhpcy4kcmVmcy5wb3BvdmVyLnNob3dpbmcmJnRoaXMuaGlkZSgpO2JyZWFrO2Nhc2UgMTM6Y2FzZSAzMjp0aGlzLiRyZWZzLnBvcG92ZXIuc2hvd2luZ3x8dGhpcy5zaG93KCl9fSxfX2tleWJvYXJkU2hvd1RyaWdnZXI6ZnVuY3Rpb24oKXt0aGlzLnNob3coKX0sX19rZXlib2FyZFNldFNlbGVjdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnZpc2libGVPcHRpb25zW3RdO3RoaXMubXVsdGlwbGU/dGhpcy5fX3RvZ2dsZU11bHRpcGxlKGUudmFsdWUsZS5kaXNhYmxlKTp0aGlzLl9fc2luZ2xlU2VsZWN0KGUudmFsdWUsZS5kaXNhYmxlKX0sX19rZXlib2FyZElzU2VsZWN0YWJsZUluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0Pi0xJiZ0PHRoaXMudmlzaWJsZU9wdGlvbnMubGVuZ3RoJiYhdGhpcy52aXNpYmxlT3B0aW9uc1t0XS5kaXNhYmxlfSxfX21vdXNlRW50ZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5rZXlib2FyZE1vdmVEaXJlY3Rpb258fCh0aGlzLmtleWJvYXJkSW5kZXg9ZSl9LF9fb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZXx8dGhpcy5mb2N1c2VkfHwodGhpcy5mb2N1c2VkPSEwLHRoaXMuJGVtaXQoXCJmb2N1c1wiKSl9LF9fb25TaG93OmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlfHwodGhpcy5fX29uRm9jdXMoKSx0aGlzLmZpbHRlciYmdGhpcy4kcmVmcy5maWx0ZXImJih0aGlzLiRyZWZzLmZpbHRlci5mb2N1cygpLHRoaXMucmVwb3NpdGlvbigpKSl9LF9fb25CbHVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5mb2N1c2VkJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlLiRyZWZzLnBvcG92ZXImJmUuJHJlZnMucG9wb3Zlci5zaG93aW5nJiYodD09PWRvY3VtZW50LmJvZHl8fGUuJHJlZnMucG9wb3Zlci4kZWwuY29udGFpbnModCkpfHwoZS5fX29uQ2xvc2UoKSxlLmhpZGUoKSl9LDEpfSxfX29uQ2xvc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KGUubW9kZWwpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIixlLm1vZGVsKX0pLHRoaXMudGVybXM9XCJcIix0aGlzLmZvY3VzZWQmJih0P3RoaXMuJHJlZnMuaW5wdXQmJnRoaXMuJHJlZnMuaW5wdXQuJGVsJiZ0aGlzLiRyZWZzLmlucHV0LiRlbC5mb2N1cygpOih0aGlzLmZvY3VzZWQ9ITEsdGhpcy4kZW1pdChcImJsdXJcIikpKX0sX19zaW5nbGVTZWxlY3Q6ZnVuY3Rpb24odCxlKXtlfHwodGhpcy5fX2VtaXQodCksdGhpcy5oaWRlKCkpfSxfX3RvZ2dsZU11bHRpcGxlOmZ1bmN0aW9uKHQsZSl7aWYoIWUpe3ZhciBpPXRoaXMubW9kZWwscz1pLmluZGV4T2YodCk7cz4tMT90aGlzLiRlbWl0KFwicmVtb3ZlXCIse2luZGV4OnMsdmFsdWU6aS5zcGxpY2UocywxKX0pOih0aGlzLiRlbWl0KFwiYWRkXCIse2luZGV4OmkubGVuZ3RoLHZhbHVlOnR9KSxpLnB1c2godCkpLHRoaXMuJGVtaXQoXCJpbnB1dFwiLGkpfX0sX19lbWl0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy4kZW1pdChcImlucHV0XCIsdCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsdCl9KX0sX19zZXRNb2RlbDpmdW5jdGlvbih0LGUpe3RoaXMubW9kZWw9dHx8KHRoaXMubXVsdGlwbGU/W106bnVsbCksdGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5tb2RlbCksIWUmJnRoaXMuJHJlZnMucG9wb3ZlciYmdGhpcy4kcmVmcy5wb3BvdmVyLnNob3dpbmd8fHRoaXMuX19vbkNsb3NlKGUpfSxfX2dldENoaXBUZXh0Q29sb3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2hpcHNDb2xvcj90aGlzLmNoaXBzQ29sb3I6dGhpcy5pc0ludmVydGVkTGlnaHQ/dGhpcy5pbnZlcnRlZExpZ2h0P3R8fHRoaXMuY29sb3I6XCJ3aGl0ZVwiOnRoaXMuaXNJbnZlcnRlZD90fHwodGhpcy5pbnZlcnRlZExpZ2h0P1wiZ3JleS0xMFwiOnRoaXMuY29sb3IpOnRoaXMuZGFyaz90fHx0aGlzLmNvbG9yOlwid2hpdGVcIn0sX19nZXRDaGlwQmdDb2xvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jaGlwc0JnQ29sb3I/dGhpcy5jaGlwc0JnQ29sb3I6dGhpcy5pc0ludmVydGVkTGlnaHQ/dGhpcy5pbnZlcnRlZExpZ2h0P1wiZ3JleS0xMFwiOnR8fHRoaXMuY29sb3I6dGhpcy5pc0ludmVydGVkP3RoaXMuaW52ZXJ0ZWRMaWdodD90aGlzLmNvbG9yOlwid2hpdGVcIjp0aGlzLmRhcms/XCJ3aGl0ZVwiOnR8fHRoaXMuY29sb3J9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPVtdO2lmKHRoaXMuaGFzQ2hpcHMpe3ZhciBzPXQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcm93IGl0ZW1zLWNlbnRlciBxLWlucHV0LWNoaXBzXCIsY2xhc3M6dGhpcy5hbGlnbkNsYXNzfSx0aGlzLnNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChRQ2hpcCx7a2V5OnMscHJvcHM6e3NtYWxsOiEwLGNsb3NhYmxlOmUuZWRpdGFibGUmJiFpLmRpc2FibGUsY29sb3I6ZS5fX2dldENoaXBCZ0NvbG9yKGkuY29sb3IpLHRleHRDb2xvcjplLl9fZ2V0Q2hpcFRleHRDb2xvcihpLmNvbG9yKSxpY29uOmkuaWNvbixpY29uUmlnaHQ6aS5yaWdodEljb24sYXZhdGFyOmkuYXZhdGFyfSxvbjp7aGlkZTpmdW5jdGlvbigpe2UuX190b2dnbGVNdWx0aXBsZShpLnZhbHVlLGUuZGlzYWJsZXx8aS5kaXNhYmxlKX19LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfX19LFt0KFwiZGl2XCIse2RvbVByb3BzOntpbm5lckhUTUw6aS5sYWJlbH19KV0pfSkpO2kucHVzaChzKX1lbHNle3ZhciBuPXQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcS1pbnB1dC10YXJnZXQgZWxsaXBzaXNcIixjbGFzczp0aGlzLmZha2VJbnB1dENsYXNzZXMsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLmZha2VJbnB1dFZhbHVlfX0pO2kucHVzaChuKX1yZXR1cm4gaS5wdXNoKHQoUVBvcG92ZXIse3JlZjpcInBvcG92ZXJcIixzdGF0aWNDbGFzczpcImNvbHVtbiBuby13cmFwXCIsY2xhc3M6dGhpcy5kYXJrP1wiYmctZGFya1wiOm51bGwscHJvcHM6e2NvdmVyOnRoaXMucG9wdXBDb3ZlcixrZWVwT25TY3JlZW46ITAsZGlzYWJsZTohdGhpcy5lZGl0YWJsZSxhbmNob3JDbGljazohMSxtYXhIZWlnaHQ6dGhpcy5wb3B1cE1heEhlaWdodH0sc2xvdDpcImFmdGVyXCIsb246e3Nob3c6dGhpcy5fX29uU2hvdyxoaWRlOmZ1bmN0aW9uKCl7ZS5fX29uQ2xvc2UoITApfX0sbmF0aXZlT246e2tleWRvd246dGhpcy5fX2tleWJvYXJkSGFuZGxlS2V5fX0sW3RoaXMuZmlsdGVyJiZ0KFFTZWFyY2gse3JlZjpcImZpbHRlclwiLHN0YXRpY0NsYXNzOlwiY29sLWF1dG9cIixzdHlsZTpcInBhZGRpbmc6IDEwcHg7XCIscHJvcHM6e3ZhbHVlOnRoaXMudGVybXMscGxhY2Vob2xkZXI6dGhpcy5maWx0ZXJQbGFjZWhvbGRlcnx8dGhpcy4kcS5pMThuLmxhYmVsLmZpbHRlcixkZWJvdW5jZToxMDAsY29sb3I6dGhpcy5jb2xvcixkYXJrOnRoaXMuZGFyayxub1BhcmVudEZpZWxkOiEwLG5vSWNvbjohMH0sb246e2lucHV0OmZ1bmN0aW9uKHQpe2UudGVybXM9dCxlLnJlcG9zaXRpb24oKX19fSl8fHZvaWQgMCx0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aCYmdChRTGlzdCx7c3RhdGljQ2xhc3M6XCJuby1ib3JkZXIgc2Nyb2xsXCIscHJvcHM6e3NlcGFyYXRvcjp0aGlzLnNlcGFyYXRvcixkYXJrOnRoaXMuZGFya319LHRoaXMudmlzaWJsZU9wdGlvbnMubWFwKGZ1bmN0aW9uKGkscyl7cmV0dXJuIHQoUUl0ZW1XcmFwcGVyLHtrZXk6cyxjbGFzczpbaS5kaXNhYmxlP1widGV4dC1mYWRlZFwiOlwiY3Vyc29yLXBvaW50ZXJcIixzPT09ZS5rZXlib2FyZEluZGV4P1wicS1zZWxlY3QtaGlnaGxpZ2h0XCI6XCJcIixpLmRpc2FibGU/XCJcIjpcImN1cnNvci1wb2ludGVyXCIsaS5jbGFzc05hbWV8fFwiXCJdLHByb3BzOntjZmc6aSxzbG90UmVwbGFjZTohMCxhY3RpdmU6ZS5tdWx0aXBsZT92b2lkIDA6ZS52YWx1ZT09PWkudmFsdWV9LG5hdGl2ZU9uOntcIiFjbGlja1wiOmZ1bmN0aW9uKCl7dmFyIHQ9ZS5tdWx0aXBsZT9cIl9fdG9nZ2xlTXVsdGlwbGVcIjpcIl9fc2luZ2xlU2VsZWN0XCI7ZVt0XShpLnZhbHVlLGkuZGlzYWJsZSl9LG1vdXNlZW50ZXI6ZnVuY3Rpb24odCl7IWkuZGlzYWJsZSYmZS5fX21vdXNlRW50ZXJIYW5kbGVyKHQscyl9fX0sW2UubXVsdGlwbGU/dChlLnRvZ2dsZT9RVG9nZ2xlOlFDaGVja2JveCx7c2xvdDplLnRvZ2dsZT9cInJpZ2h0XCI6XCJsZWZ0XCIscHJvcHM6e2tlZXBDb2xvcjohMCxjb2xvcjppLmNvbG9yfHxlLmNvbG9yLGRhcms6ZS5kYXJrLHZhbHVlOmUub3B0TW9kZWxbaS5pbmRleF0sZGlzYWJsZTppLmRpc2FibGUsbm9Gb2N1czohMH19KTplLnJhZGlvJiZ0KFFSYWRpbyx7c2xvdDpcImxlZnRcIixwcm9wczp7a2VlcENvbG9yOiEwLGNvbG9yOmkuY29sb3J8fGUuY29sb3IsZGFyazplLmRhcmssdmFsdWU6ZS52YWx1ZSx2YWw6aS52YWx1ZSxkaXNhYmxlOmkuZGlzYWJsZSxub0ZvY3VzOiEwfX0pfHx2b2lkIDBdKX0pKXx8dm9pZCAwXSkpLHRoaXMuaXNDbGVhcmFibGUmJmkucHVzaCh0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFtcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5jbGVhcn19KSksaS5wdXNoKHQoUUljb24sdGhpcy5yZWFkb25seT97c2xvdDpcImFmdGVyXCJ9OntzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dC5kcm9wZG93bn19KSksdChRSW5wdXRGcmFtZSx7cmVmOlwiaW5wdXRcIixzdGF0aWNDbGFzczpcInEtc2VsZWN0XCIscHJvcHM6e3ByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsc3RhY2tMYWJlbDp0aGlzLnN0YWNrTGFiZWwsZmxvYXRMYWJlbDp0aGlzLmZsb2F0TGFiZWwsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmb2N1c2VkOnRoaXMuZm9jdXNlZCxmb2N1c2FibGU6ITAsbGVuZ3RoOnRoaXMubGVuZ3RoLGFkZGl0aW9uYWxMZW5ndGg6dGhpcy5hZGRpdGlvbmFsTGVuZ3RofSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy50b2dnbGVQb3B1cCxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbkJsdXIsa2V5ZG93bjp0aGlzLl9fa2V5Ym9hcmRIYW5kbGVLZXl9fSxpKX19LFFTcGlubmVyQXVkaW89e25hbWU6XCJRU3Bpbm5lckF1ZGlvXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e2ZpbGw6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDU1IDgwXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4MClcIn19LFt0KFwicmVjdFwiLHthdHRyczp7d2lkdGg6XCIxMFwiLGhlaWdodDpcIjIwXCIscng6XCIzXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjBzXCIsZHVyOlwiNC4zc1wiLHZhbHVlczpcIjIwOzQ1OzU3OzgwOzY0OzMyOzY2OzQ1OzY0OzIzOzY2OzEzOzY0OzU2OzM0OzM0OzI7MjM7NzY7Nzk7MjBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInJlY3RcIix7YXR0cnM6e3g6XCIxNVwiLHdpZHRoOlwiMTBcIixoZWlnaHQ6XCI4MFwiLHJ4OlwiM1wifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwc1wiLGR1cjpcIjJzXCIsdmFsdWVzOlwiODA7NTU7MzM7NTs3NTsyMzs3MzszMzsxMjsxNDs2MDs4MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjMwXCIsd2lkdGg6XCIxMFwiLGhlaWdodDpcIjUwXCIscng6XCIzXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjBzXCIsZHVyOlwiMS40c1wiLHZhbHVlczpcIjUwOzM0Ozc4OzIzOzU2OzIzOzM0Ozc2OzgwOzU0OzIxOzUwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiNDVcIix3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMzBcIixyeDpcIjNcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGJlZ2luOlwiMHNcIixkdXI6XCIyc1wiLHZhbHVlczpcIjMwOzQ1OzEzOzgwOzU2OzcyOzQ1Ozc2OzM0OzIzOzY3OzMwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSldKX19LFFTcGlubmVyQmFsbD17bmFtZTpcIlFTcGlubmVyQmFsbFwiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntzdHJva2U6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDU3IDU3XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMSAxKVwiLFwic3Ryb2tlLXdpZHRoXCI6XCIyXCIsZmlsbDpcIm5vbmVcIixcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwifX0sW3QoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiNVwiLGN5OlwiNTBcIixyOlwiNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiY3lcIixiZWdpbjpcIjBzXCIsZHVyOlwiMi4yc1wiLHZhbHVlczpcIjUwOzU7NTA7NTBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiY3hcIixiZWdpbjpcIjBzXCIsZHVyOlwiMi4yc1wiLHZhbHVlczpcIjU7Mjc7NDk7NVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjI3XCIsY3k6XCI1XCIscjpcIjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImN5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjIuMnNcIixmcm9tOlwiNVwiLHRvOlwiNVwiLHZhbHVlczpcIjU7NTA7NTA7NVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJjeFwiLGJlZ2luOlwiMHNcIixkdXI6XCIyLjJzXCIsZnJvbTpcIjI3XCIsdG86XCIyN1wiLHZhbHVlczpcIjI3OzQ5OzU7MjdcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI0OVwiLGN5OlwiNTBcIixyOlwiNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiY3lcIixiZWdpbjpcIjBzXCIsZHVyOlwiMi4yc1wiLHZhbHVlczpcIjUwOzUwOzU7NTBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiY3hcIixmcm9tOlwiNDlcIix0bzpcIjQ5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjIuMnNcIix2YWx1ZXM6XCI0OTs1OzI3OzQ5XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSldKX19LFFTcGlubmVyQmFycz17bmFtZTpcIlFTcGlubmVyQmFyc1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMzUgMTQwXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt5OlwiMTBcIix3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTIwXCIscng6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjAuNXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjEyMDsxMTA7MTAwOzkwOzgwOzcwOzYwOzUwOzQwOzE0MDsxMjBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwieVwiLGJlZ2luOlwiMC41c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTA7MTU7MjA7MjU7MzA7MzU7NDA7NDU7NTA7MDsxMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjMwXCIseTpcIjEwXCIsd2lkdGg6XCIxNVwiLGhlaWdodDpcIjEyMFwiLHJ4OlwiNlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwLjI1c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTIwOzExMDsxMDA7OTA7ODA7NzA7NjA7NTA7NDA7MTQwOzEyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsYmVnaW46XCIwLjI1c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTA7MTU7MjA7MjU7MzA7MzU7NDA7NDU7NTA7MDsxMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjYwXCIsd2lkdGg6XCIxNVwiLGhlaWdodDpcIjE0MFwiLHJ4OlwiNlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTIwOzExMDsxMDA7OTA7ODA7NzA7NjA7NTA7NDA7MTQwOzEyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTA7MTU7MjA7MjU7MzA7MzU7NDA7NDU7NTA7MDsxMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjkwXCIseTpcIjEwXCIsd2lkdGg6XCIxNVwiLGhlaWdodDpcIjEyMFwiLHJ4OlwiNlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwLjI1c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTIwOzExMDsxMDA7OTA7ODA7NzA7NjA7NTA7NDA7MTQwOzEyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsYmVnaW46XCIwLjI1c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTA7MTU7MjA7MjU7MzA7MzU7NDA7NDU7NTA7MDsxMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjEyMFwiLHk6XCIxMFwiLHdpZHRoOlwiMTVcIixoZWlnaHQ6XCIxMjBcIixyeDpcIjZcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGJlZ2luOlwiMC41c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTIwOzExMDsxMDA7OTA7ODA7NzA7NjA7NTA7NDA7MTQwOzEyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsYmVnaW46XCIwLjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMDsxNTsyMDsyNTszMDszNTs0MDs0NTs1MDswOzEwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSl9fSxRU3Bpbm5lckNpcmNsZXM9e25hbWU6XCJRU3Bpbm5lckNpcmNsZXNcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7ZmlsbDpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTM1IDEzNVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk02Ny40NDcgNThjNS41MjMgMCAxMC00LjQ3NyAxMC0xMHMtNC40NzctMTAtMTAtMTAtMTAgNC40NzctMTAgMTAgNC40NzcgMTAgMTAgMTB6bTkuNDQ4IDkuNDQ3YzAgNS41MjMgNC40NzcgMTAgMTAgMTAgNS41MjIgMCAxMC00LjQ3NyAxMC0xMHMtNC40NzgtMTAtMTAtMTBjLTUuNTIzIDAtMTAgNC40NzctMTAgMTB6bS05LjQ0OCA5LjQ0OGMtNS41MjMgMC0xMCA0LjQ3Ny0xMCAxMCAwIDUuNTIyIDQuNDc3IDEwIDEwIDEwczEwLTQuNDc4IDEwLTEwYzAtNS41MjMtNC40NzctMTAtMTAtMTB6TTU4IDY3LjQ0N2MwLTUuNTIzLTQuNDc3LTEwLTEwLTEwcy0xMCA0LjQ3Ny0xMCAxMCA0LjQ3NyAxMCAxMCAxMCAxMC00LjQ3NyAxMC0xMHpcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCA2NyA2N1wiLHRvOlwiLTM2MCA2NyA2N1wiLGR1cjpcIjIuNXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTTI4LjE5IDQwLjMxYzYuNjI3IDAgMTItNS4zNzQgMTItMTIgMC02LjYyOC01LjM3My0xMi0xMi0xMi02LjYyOCAwLTEyIDUuMzcyLTEyIDEyIDAgNi42MjYgNS4zNzIgMTIgMTIgMTJ6bTMwLjcyLTE5LjgyNWM0LjY4NiA0LjY4NyAxMi4yODQgNC42ODcgMTYuOTcgMCA0LjY4Ni00LjY4NiA0LjY4Ni0xMi4yODQgMC0xNi45Ny00LjY4Ni00LjY4Ny0xMi4yODQtNC42ODctMTYuOTcgMC00LjY4NyA0LjY4Ni00LjY4NyAxMi4yODQgMCAxNi45N3ptMzUuNzQgNy43MDVjMCA2LjYyNyA1LjM3IDEyIDEyIDEyIDYuNjI2IDAgMTItNS4zNzMgMTItMTIgMC02LjYyOC01LjM3NC0xMi0xMi0xMi02LjYzIDAtMTIgNS4zNzItMTIgMTJ6bTE5LjgyMiAzMC43MmMtNC42ODYgNC42ODYtNC42ODYgMTIuMjg0IDAgMTYuOTcgNC42ODcgNC42ODYgMTIuMjg1IDQuNjg2IDE2Ljk3IDAgNC42ODctNC42ODYgNC42ODctMTIuMjg0IDAtMTYuOTctNC42ODUtNC42ODctMTIuMjgzLTQuNjg3LTE2Ljk3IDB6bS03LjcwNCAzNS43NGMtNi42MjcgMC0xMiA1LjM3LTEyIDEyIDAgNi42MjYgNS4zNzMgMTIgMTIgMTJzMTItNS4zNzQgMTItMTJjMC02LjYzLTUuMzczLTEyLTEyLTEyem0tMzAuNzIgMTkuODIyYy00LjY4Ni00LjY4Ni0xMi4yODQtNC42ODYtMTYuOTcgMC00LjY4NiA0LjY4Ny00LjY4NiAxMi4yODUgMCAxNi45NyA0LjY4NiA0LjY4NyAxMi4yODQgNC42ODcgMTYuOTcgMCA0LjY4Ny00LjY4NSA0LjY4Ny0xMi4yODMgMC0xNi45N3ptLTM1Ljc0LTcuNzA0YzAtNi42MjctNS4zNzItMTItMTItMTItNi42MjYgMC0xMiA1LjM3My0xMiAxMnM1LjM3NCAxMiAxMiAxMmM2LjYyOCAwIDEyLTUuMzczIDEyLTEyem0tMTkuODIzLTMwLjcyYzQuNjg3LTQuNjg2IDQuNjg3LTEyLjI4NCAwLTE2Ljk3LTQuNjg2LTQuNjg2LTEyLjI4NC00LjY4Ni0xNi45NyAwLTQuNjg3IDQuNjg2LTQuNjg3IDEyLjI4NCAwIDE2Ljk3IDQuNjg2IDQuNjg3IDEyLjI4NCA0LjY4NyAxNi45NyAwelwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDY3IDY3XCIsdG86XCIzNjAgNjcgNjdcIixkdXI6XCI4c1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKX19LFFTcGlubmVyQ29tbWVudD17bmFtZTpcIlFTcGlubmVyQ29tbWVudFwiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsdmlld0JveDpcIjAgMCAxMDAgMTAwXCIscHJlc2VydmVBc3BlY3RSYXRpbzpcInhNaWRZTWlkXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3g6XCIwXCIseTpcIjBcIix3aWR0aDpcIjEwMFwiLGhlaWdodDpcIjEwMFwiLGZpbGw6XCJub25lXCJ9fSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNNzgsMTlIMjJjLTYuNiwwLTEyLDUuNC0xMiwxMnYzMWMwLDYuNiw1LjQsMTIsMTIsMTJoMzcuMmMwLjQsMywxLjgsNS42LDMuNyw3LjZjMi40LDIuNSw1LjEsNC4xLDkuMSw0IGMtMS40LTIuMS0yLTcuMi0yLTEwLjNjMC0wLjQsMC0wLjgsMC0xLjNoOGM2LjYsMCwxMi01LjQsMTItMTJWMzFDOTAsMjQuNCw4NC42LDE5LDc4LDE5elwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19KSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjMwXCIsY3k6XCI0N1wiLHI6XCI1XCIsZmlsbDpcIiNmZmZcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcIm9wYWNpdHlcIixmcm9tOlwiMFwiLHRvOlwiMVwiLHZhbHVlczpcIjA7MTsxXCIsa2V5VGltZXM6XCIwOzAuMjsxXCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiNTBcIixjeTpcIjQ3XCIscjpcIjVcIixmaWxsOlwiI2ZmZlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwiLGZyb206XCIwXCIsdG86XCIxXCIsdmFsdWVzOlwiMDswOzE7MVwiLGtleVRpbWVzOlwiMDswLjI7MC40OzFcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI3MFwiLGN5OlwiNDdcIixyOlwiNVwiLGZpbGw6XCIjZmZmXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJvcGFjaXR5XCIsZnJvbTpcIjBcIix0bzpcIjFcIix2YWx1ZXM6XCIwOzA7MTsxXCIsa2V5VGltZXM6XCIwOzAuNDswLjY7MVwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pfX0sUVNwaW5uZXJDdWJlPXtuYW1lOlwiUVNwaW5uZXJDdWJlXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIn19LFt0KFwicmVjdFwiLHthdHRyczp7eDpcIjBcIix5OlwiMFwiLHdpZHRoOlwiMTAwXCIsaGVpZ2h0OlwiMTAwXCIsZmlsbDpcIm5vbmVcIn19KSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDI1IDI1KVwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt4OlwiLTIwXCIseTpcIi0yMFwiLHdpZHRoOlwiNDBcIixoZWlnaHQ6XCI0MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC45XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMS41XCIsdG86XCIxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsYmVnaW46XCIwc1wiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4yIDAuOCAwLjIgMC44XCIsa2V5VGltZXM6XCIwOzFcIn19KV0pXSksdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSg3NSAyNSlcIn19LFt0KFwicmVjdFwiLHthdHRyczp7eDpcIi0yMFwiLHk6XCItMjBcIix3aWR0aDpcIjQwXCIsaGVpZ2h0OlwiNDBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuOFwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInNjYWxlXCIsZnJvbTpcIjEuNVwiLHRvOlwiMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGJlZ2luOlwiMC4xc1wiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4yIDAuOCAwLjIgMC44XCIsa2V5VGltZXM6XCIwOzFcIn19KV0pXSksdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSgyNSA3NSlcIn19LFt0KFwicmVjdFwiLHtzdGF0aWNDbGFzczpcImN1YmVcIixhdHRyczp7eDpcIi0yMFwiLHk6XCItMjBcIix3aWR0aDpcIjQwXCIsaGVpZ2h0OlwiNDBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuN1wifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInNjYWxlXCIsZnJvbTpcIjEuNVwiLHRvOlwiMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGJlZ2luOlwiMC4zc1wiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4yIDAuOCAwLjIgMC44XCIsa2V5VGltZXM6XCIwOzFcIn19KV0pXSksdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSg3NSA3NSlcIn19LFt0KFwicmVjdFwiLHtzdGF0aWNDbGFzczpcImN1YmVcIixhdHRyczp7eDpcIi0yMFwiLHk6XCItMjBcIix3aWR0aDpcIjQwXCIsaGVpZ2h0OlwiNDBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuNlwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInNjYWxlXCIsZnJvbTpcIjEuNVwiLHRvOlwiMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGJlZ2luOlwiMC4yc1wiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4yIDAuOCAwLjIgMC44XCIsa2V5VGltZXM6XCIwOzFcIn19KV0pXSldKX19LFFTcGlubmVyRG90cz17bmFtZTpcIlFTcGlubmVyRG90c1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMjAgMzBcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIxNVwiLGN5OlwiMTVcIixyOlwiMTVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInJcIixmcm9tOlwiMTVcIix0bzpcIjE1XCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCIxNTs5OzE1XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGZyb206XCIxXCIsdG86XCIxXCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCIxOy41OzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI2MFwiLGN5OlwiMTVcIixyOlwiOVwiLFwiZmlsbC1vcGFjaXR5XCI6XCIuM1wifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGZyb206XCI5XCIsdG86XCI5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCI5OzE1OzlcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsZnJvbTpcIi41XCIsdG86XCIuNVwiLGJlZ2luOlwiMHNcIixkdXI6XCIwLjhzXCIsdmFsdWVzOlwiLjU7MTsuNVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjEwNVwiLGN5OlwiMTVcIixyOlwiMTVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInJcIixmcm9tOlwiMTVcIix0bzpcIjE1XCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCIxNTs5OzE1XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGZyb206XCIxXCIsdG86XCIxXCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCIxOy41OzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKX19LFFTcGlubmVyRmFjZWJvb2s9e25hbWU6XCJRU3Bpbm5lckZhY2Vib29rXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIn19LFt0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDIwIDUwKVwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt4OlwiLTEwXCIseTpcIi0zMFwiLHdpZHRoOlwiMjBcIixoZWlnaHQ6XCI2MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC42XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMlwiLHRvOlwiMVwiLGJlZ2luOlwiMHNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixkdXI6XCIxc1wiLGNhbGNNb2RlOlwic3BsaW5lXCIsa2V5U3BsaW5lczpcIjAuMSAwLjkgMC40IDFcIixrZXlUaW1lczpcIjA7MVwiLHZhbHVlczpcIjI7MVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDUwIDUwKVwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt4OlwiLTEwXCIseTpcIi0zMFwiLHdpZHRoOlwiMjBcIixoZWlnaHQ6XCI2MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC44XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMlwiLHRvOlwiMVwiLGJlZ2luOlwiMC4xc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4xIDAuOSAwLjQgMVwiLGtleVRpbWVzOlwiMDsxXCIsdmFsdWVzOlwiMjsxXCJ9fSldKV0pLHQoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoODAgNTApXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3g6XCItMTBcIix5OlwiLTMwXCIsd2lkdGg6XCIyMFwiLGhlaWdodDpcIjYwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLG9wYWNpdHk6XCIwLjlcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJzY2FsZVwiLGZyb206XCIyXCIsdG86XCIxXCIsYmVnaW46XCIwLjJzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjEgMC45IDAuNCAxXCIsa2V5VGltZXM6XCIwOzFcIix2YWx1ZXM6XCIyOzFcIn19KV0pXSldKX19LFFTcGlubmVyR2VhcnM9e25hbWU6XCJRU3Bpbm5lckdlYXJzXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKC0yMCwtMjApXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNNzkuOSw1Mi42QzgwLDUxLjgsODAsNTAuOSw4MCw1MHMwLTEuOC0wLjEtMi42bC01LjEtMC40Yy0wLjMtMi40LTAuOS00LjYtMS44LTYuN2w0LjItMi45Yy0wLjctMS42LTEuNi0zLjEtMi42LTQuNSBMNzAsMzVjLTEuNC0xLjktMy4xLTMuNS00LjktNC45bDIuMi00LjZjLTEuNC0xLTIuOS0xLjktNC41LTIuNkw1OS44LDI3Yy0yLjEtMC45LTQuNC0xLjUtNi43LTEuOGwtMC40LTUuMUM1MS44LDIwLDUwLjksMjAsNTAsMjAgcy0xLjgsMC0yLjYsMC4xbC0wLjQsNS4xYy0yLjQsMC4zLTQuNiwwLjktNi43LDEuOGwtMi45LTQuMWMtMS42LDAuNy0zLjEsMS42LTQuNSwyLjZsMi4xLDQuNmMtMS45LDEuNC0zLjUsMy4xLTUsNC45bC00LjUtMi4xIGMtMSwxLjQtMS45LDIuOS0yLjYsNC41bDQuMSwyLjljLTAuOSwyLjEtMS41LDQuNC0xLjgsNi44bC01LDAuNEMyMCw0OC4yLDIwLDQ5LjEsMjAsNTBzMCwxLjgsMC4xLDIuNmw1LDAuNCBjMC4zLDIuNCwwLjksNC43LDEuOCw2LjhsLTQuMSwyLjljMC43LDEuNiwxLjYsMy4xLDIuNiw0LjVsNC41LTIuMWMxLjQsMS45LDMuMSwzLjUsNSw0LjlsLTIuMSw0LjZjMS40LDEsMi45LDEuOSw0LjUsMi42bDIuOS00LjEgYzIuMSwwLjksNC40LDEuNSw2LjcsMS44bDAuNCw1LjFDNDguMiw4MCw0OS4xLDgwLDUwLDgwczEuOCwwLDIuNi0wLjFsMC40LTUuMWMyLjMtMC4zLDQuNi0wLjksNi43LTEuOGwyLjksNC4yIGMxLjYtMC43LDMuMS0xLjYsNC41LTIuNkw2NSw2OS45YzEuOS0xLjQsMy41LTMsNC45LTQuOWw0LjYsMi4yYzEtMS40LDEuOS0yLjksMi42LTQuNUw3Myw1OS44YzAuOS0yLjEsMS41LTQuNCwxLjgtNi43TDc5LjksNTIuNiB6IE01MCw2NWMtOC4zLDAtMTUtNi43LTE1LTE1YzAtOC4zLDYuNy0xNSwxNS0xNXMxNSw2LjcsMTUsMTVDNjUsNTguMyw1OC4zLDY1LDUwLDY1elwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiOTAgNTAgNTBcIix0bzpcIjAgNTAgNTBcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDIwLDIwKSByb3RhdGUoMTUgNTAgNTApXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNNzkuOSw1Mi42QzgwLDUxLjgsODAsNTAuOSw4MCw1MHMwLTEuOC0wLjEtMi42bC01LjEtMC40Yy0wLjMtMi40LTAuOS00LjYtMS44LTYuN2w0LjItMi45Yy0wLjctMS42LTEuNi0zLjEtMi42LTQuNSBMNzAsMzVjLTEuNC0xLjktMy4xLTMuNS00LjktNC45bDIuMi00LjZjLTEuNC0xLTIuOS0xLjktNC41LTIuNkw1OS44LDI3Yy0yLjEtMC45LTQuNC0xLjUtNi43LTEuOGwtMC40LTUuMUM1MS44LDIwLDUwLjksMjAsNTAsMjAgcy0xLjgsMC0yLjYsMC4xbC0wLjQsNS4xYy0yLjQsMC4zLTQuNiwwLjktNi43LDEuOGwtMi45LTQuMWMtMS42LDAuNy0zLjEsMS42LTQuNSwyLjZsMi4xLDQuNmMtMS45LDEuNC0zLjUsMy4xLTUsNC45bC00LjUtMi4xIGMtMSwxLjQtMS45LDIuOS0yLjYsNC41bDQuMSwyLjljLTAuOSwyLjEtMS41LDQuNC0xLjgsNi44bC01LDAuNEMyMCw0OC4yLDIwLDQ5LjEsMjAsNTBzMCwxLjgsMC4xLDIuNmw1LDAuNCBjMC4zLDIuNCwwLjksNC43LDEuOCw2LjhsLTQuMSwyLjljMC43LDEuNiwxLjYsMy4xLDIuNiw0LjVsNC41LTIuMWMxLjQsMS45LDMuMSwzLjUsNSw0LjlsLTIuMSw0LjZjMS40LDEsMi45LDEuOSw0LjUsMi42bDIuOS00LjEgYzIuMSwwLjksNC40LDEuNSw2LjcsMS44bDAuNCw1LjFDNDguMiw4MCw0OS4xLDgwLDUwLDgwczEuOCwwLDIuNi0wLjFsMC40LTUuMWMyLjMtMC4zLDQuNi0wLjksNi43LTEuOGwyLjksNC4yIGMxLjYtMC43LDMuMS0xLjYsNC41LTIuNkw2NSw2OS45YzEuOS0xLjQsMy41LTMsNC45LTQuOWw0LjYsMi4yYzEtMS40LDEuOS0yLjksMi42LTQuNUw3Myw1OS44YzAuOS0yLjEsMS41LTQuNCwxLjgtNi43TDc5LjksNTIuNiB6IE01MCw2NWMtOC4zLDAtMTUtNi43LTE1LTE1YzAtOC4zLDYuNy0xNSwxNS0xNXMxNSw2LjcsMTUsMTVDNjUsNTguMyw1OC4zLDY1LDUwLDY1elwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCA1MCA1MFwiLHRvOlwiOTAgNTAgNTBcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJHcmlkPXtuYW1lOlwiUVNwaW5uZXJHcmlkXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e2ZpbGw6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEwNSAxMDVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIxMi41XCIsY3k6XCIxMi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiMHNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjEyLjVcIixjeTpcIjUyLjVcIixyOlwiMTIuNVwiLFwiZmlsbC1vcGFjaXR5XCI6XCIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCIxMDBtc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiNTIuNVwiLGN5OlwiMTIuNVwiLHI6XCIxMi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjMwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI1Mi41XCIsY3k6XCI1Mi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiNjAwbXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjkyLjVcIixjeTpcIjEyLjVcIixyOlwiMTIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCI4MDBtc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiOTIuNVwiLGN5OlwiNTIuNVwiLHI6XCIxMi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjQwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIxMi41XCIsY3k6XCI5Mi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiNzAwbXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjUyLjVcIixjeTpcIjkyLjVcIixyOlwiMTIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCI1MDBtc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiOTIuNVwiLGN5OlwiOTIuNVwiLHI6XCIxMi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjIwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKX19LFFTcGlubmVySGVhcnRzPXtuYW1lOlwiUVNwaW5uZXJIZWFydHNcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7ZmlsbDpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTQwIDY0XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJwYXRoXCIse2F0dHJzOntkOlwiTTMwLjI2MiA1Ny4wMkw3LjE5NSA0MC43MjNjLTUuODQtMy45NzYtNy41Ni0xMi4wNi0zLjg0Mi0xOC4wNjMgMy43MTUtNiAxMS40NjctNy42NSAxNy4zMDYtMy42OGw0LjUyIDMuNzYgMi42LTUuMjc0YzMuNzE2LTYuMDAyIDExLjQ3LTcuNjUgMTcuMzA0LTMuNjggNS44NCAzLjk3IDcuNTYgMTIuMDU0IDMuODQyIDE4LjA2MkwzNC40OSA1Ni4xMThjLS44OTcgMS41MTItMi43OTMgMS45MTUtNC4yMjguOXpcIixcImZpbGwtb3BhY2l0eVwiOlwiLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiMHNcIixkdXI6XCIxLjRzXCIsdmFsdWVzOlwiMC41OzE7MC41XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTTEwNS41MTIgNTYuMTJsLTE0LjQ0LTI0LjI3MmMtMy43MTYtNi4wMDgtMS45OTYtMTQuMDkzIDMuODQzLTE4LjA2MiA1LjgzNS0zLjk3IDEzLjU4OC0yLjMyMiAxNy4zMDYgMy42OGwyLjYgNS4yNzQgNC41Mi0zLjc2YzUuODQtMy45NyAxMy41OTMtMi4zMiAxNy4zMDggMy42OCAzLjcxOCA2LjAwMyAxLjk5OCAxNC4wODgtMy44NDIgMTguMDY0TDEwOS43NCA1Ny4wMmMtMS40MzQgMS4wMTQtMy4zMy42MS00LjIyOC0uOXpcIixcImZpbGwtb3BhY2l0eVwiOlwiLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiMC43c1wiLGR1cjpcIjEuNHNcIix2YWx1ZXM6XCIwLjU7MTswLjVcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNNjcuNDA4IDU3LjgzNGwtMjMuMDEtMjQuOThjLTUuODY0LTYuMTUtNS44NjQtMTYuMTA4IDAtMjIuMjQ4IDUuODYtNi4xNCAxNS4zNy02LjE0IDIxLjIzNCAwTDcwIDE2LjE2OGw0LjM2OC01LjU2MmM1Ljg2My02LjE0IDE1LjM3NS02LjE0IDIxLjIzNSAwIDUuODYzIDYuMTQgNS44NjMgMTYuMDk4IDAgMjIuMjQ3bC0yMy4wMDcgMjQuOThjLTEuNDMgMS41NTYtMy43NTcgMS41NTYtNS4xODggMHpcIn19KV0pfX0sUVNwaW5uZXJIb3VyZ2xhc3M9e25hbWU6XCJRU3Bpbm5lckhvdXJnbGFzc1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIixbdChcInBhdGhcIix7c3RhdGljQ2xhc3M6XCJnbGFzc1wiLGF0dHJzOntmaWxsOlwibm9uZVwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlLXdpZHRoXCI6XCI1XCIsXCJzdHJva2UtbWl0ZXJsaW1pdFwiOlwiMTBcIixkOlwiTTU4LjQsNTEuN2MtMC45LTAuOS0xLjQtMi0xLjQtMi4zczAuNS0wLjQsMS40LTEuNCBDNzAuOCw0My44LDc5LjgsMzAuNSw4MCwxNS41SDcwSDMwSDIwYzAuMiwxNSw5LjIsMjguMSwyMS42LDMyLjNjMC45LDAuOSwxLjQsMS4yLDEuNCwxLjVzLTAuNSwxLjYtMS40LDIuNSBDMjkuMiw1Ni4xLDIwLjIsNjkuNSwyMCw4NS41aDEwaDQwaDEwQzc5LjgsNjkuNSw3MC44LDU1LjksNTguNCw1MS43elwifX0pLHQoXCJjbGlwUGF0aFwiLHthdHRyczp7aWQ6XCJ1aWwtaG91cmdsYXNzLWNsaXAxXCJ9fSxbdChcInJlY3RcIix7c3RhdGljQ2xhc3M6XCJjbGlwXCIsYXR0cnM6e3g6XCIxNVwiLHk6XCIyMFwiLHdpZHRoOlwiNzBcIixoZWlnaHQ6XCIyNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsZnJvbTpcIjI1XCIsdG86XCIwXCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIix2bGF1ZXM6XCIyNTswOzBcIixrZXlUaW1lczpcIjA7MC41OzFcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInlcIixmcm9tOlwiMjBcIix0bzpcIjQ1XCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIix2bGF1ZXM6XCIyMDs0NTs0NVwiLGtleVRpbWVzOlwiMDswLjU7MVwifX0pXSldKSx0KFwiY2xpcFBhdGhcIix7YXR0cnM6e2lkOlwidWlsLWhvdXJnbGFzcy1jbGlwMlwifX0sW3QoXCJyZWN0XCIse3N0YXRpY0NsYXNzOlwiY2xpcFwiLGF0dHJzOnt4OlwiMTVcIix5OlwiNTVcIix3aWR0aDpcIjcwXCIsaGVpZ2h0OlwiMjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGZyb206XCIwXCIsdG86XCIyNVwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsdmxhdWVzOlwiMDsyNTsyNVwiLGtleVRpbWVzOlwiMDswLjU7MVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwieVwiLGZyb206XCI4MFwiLHRvOlwiNTVcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLHZsYXVlczpcIjgwOzU1OzU1XCIsa2V5VGltZXM6XCIwOzAuNTsxXCJ9fSldKV0pLHQoXCJwYXRoXCIse3N0YXRpY0NsYXNzOlwic2FuZFwiLGF0dHJzOntkOlwiTTI5LDIzYzMuMSwxMS40LDExLjMsMTkuNSwyMSwxOS41UzY3LjksMzQuNCw3MSwyM0gyOXpcIixcImNsaXAtcGF0aFwiOlwidXJsKCN1aWwtaG91cmdsYXNzLWNsaXAxKVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19KSx0KFwicGF0aFwiLHtzdGF0aWNDbGFzczpcInNhbmRcIixhdHRyczp7ZDpcIk03MS42LDc4Yy0zLTExLjYtMTEuNS0yMC0yMS41LTIwcy0xOC41LDguNC0yMS41LDIwSDcxLjZ6XCIsXCJjbGlwLXBhdGhcIjpcInVybCgjdWlsLWhvdXJnbGFzcy1jbGlwMilcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9fSksdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgNTAgNTBcIix0bzpcIjE4MCA1MCA1MFwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMCA1MCA1MDswIDUwIDUwOzE4MCA1MCA1MFwiLGtleVRpbWVzOlwiMDswLjc7MVwifX0pXSldKX19LFFTcGlubmVySW5maW5pdHk9e25hbWU6XCJRU3Bpbm5lckluZmluaXR5XCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwifX0sW3QoXCJwYXRoXCIse2F0dHJzOntkOlwiTTI0LjMsMzBDMTEuNCwzMCw1LDQzLjMsNSw1MHM2LjQsMjAsMTkuMywyMGMxOS4zLDAsMzIuMS00MCw1MS40LTQwQzg4LjYsMzAsOTUsNDMuMyw5NSw1MHMtNi40LDIwLTE5LjMsMjBDNTYuNCw3MCw0My42LDMwLDI0LjMsMzB6XCIsZmlsbDpcIm5vbmVcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZS13aWR0aFwiOlwiOFwiLFwic3Ryb2tlLWRhc2hhcnJheVwiOlwiMTAuNjkxMjA1MzQyNjEwNjc4IDEwLjY5MTIwNTM0MjYxMDY3OFwiLFwic3Ryb2tlLWRhc2hvZmZzZXRcIjpcIjBcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1kYXNob2Zmc2V0XCIsZnJvbTpcIjBcIix0bzpcIjIxLjM4MjQxMDY4NTIyMTM1NVwiLGJlZ2luOlwiMFwiLGR1cjpcIjJzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsZmlsbDpcImZyZWV6ZVwifX0pXSldKX19LFFTcGlubmVyX2lvcz17bmFtZTpcIlFTcGlubmVySW9zXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIix2aWV3Qm94OlwiMCAwIDY0IDY0XCJ9fSxbdChcImdcIix7YXR0cnM6e1wic3Ryb2tlLXdpZHRoXCI6XCI0XCIsXCJzdHJva2UtbGluZWNhcFwiOlwicm91bmRcIn19LFt0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgxODApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiMTsuODU7Ljc7LjY1Oy41NTsuNDU7LjM1Oy4yNTsuMTU7LjE7MDsxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgyMTApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiMDsxOy44NTsuNzsuNjU7LjU1Oy40NTsuMzU7LjI1Oy4xNTsuMTswXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgyNDApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjE7MDsxOy44NTsuNzsuNjU7LjU1Oy40NTsuMzU7LjI1Oy4xNTsuMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoMjcwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIi4xNTsuMTswOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1XCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgzMDApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjI1Oy4xNTsuMTswOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjVcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDMzMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuMzU7LjI1Oy4xNTsuMTswOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuNDU7LjM1Oy4yNTsuMTU7LjE7MDsxOy44NTsuNzsuNjU7LjU1Oy40NVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoMzApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjU1Oy40NTsuMzU7LjI1Oy4xNTsuMTswOzE7Ljg1Oy43Oy42NTsuNTVcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDYwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIi42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzA7MTsuODU7Ljc7LjY1XCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSg5MClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuNzsuNjU7LjU1Oy40NTsuMzU7LjI1Oy4xNTsuMTswOzE7Ljg1Oy43XCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgxMjApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzA7MTsuODVcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDE1MClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIxOy44NTsuNzsuNjU7LjU1Oy40NTsuMzU7LjI1Oy4xNTsuMTswOzFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSldKX19LFFTcGlubmVyT3ZhbD17bmFtZTpcIlFTcGlubmVyT3ZhbFwiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntzdHJva2U6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDM4IDM4XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMSAxKVwiLFwic3Ryb2tlLXdpZHRoXCI6XCIyXCIsZmlsbDpcIm5vbmVcIixcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwifX0sW3QoXCJjaXJjbGVcIix7YXR0cnM6e1wic3Ryb2tlLW9wYWNpdHlcIjpcIi41XCIsY3g6XCIxOFwiLGN5OlwiMThcIixyOlwiMThcIn19KSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0zNiAxOGMwLTkuOTQtOC4wNi0xOC0xOC0xOFwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDE4IDE4XCIsdG86XCIzNjAgMTggMThcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJQaWU9e25hbWU6XCJRU3Bpbm5lclBpZVwiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMCA1MEE1MCA1MCAwIDAgMSA1MCAwTDUwIDUwTDAgNTBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuNVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDUwIDUwXCIsdG86XCIzNjAgNTAgNTBcIixkdXI6XCIwLjhzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk01MCAwQTUwIDUwIDAgMCAxIDEwMCA1MEw1MCA1MEw1MCAwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLG9wYWNpdHk6XCIwLjVcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCA1MCA1MFwiLHRvOlwiMzYwIDUwIDUwXCIsZHVyOlwiMS42c1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMTAwIDUwQTUwIDUwIDAgMCAxIDUwIDEwMEw1MCA1MEwxMDAgNTBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuNVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDUwIDUwXCIsdG86XCIzNjAgNTAgNTBcIixkdXI6XCIyLjRzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk01MCAxMDBBNTAgNTAgMCAwIDEgMCA1MEw1MCA1MEw1MCAxMDBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuNVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDUwIDUwXCIsdG86XCIzNjAgNTAgNTBcIixkdXI6XCIzLjJzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pfX0sUVNwaW5uZXJQdWZmPXtuYW1lOlwiUVNwaW5uZXJQdWZmXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3N0cm9rZTpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgNDQgNDRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIix7YXR0cnM6e2ZpbGw6XCJub25lXCIsXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixcInN0cm9rZS13aWR0aFwiOlwiMlwifX0sW3QoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMjJcIixjeTpcIjIyXCIscjpcIjFcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInJcIixiZWdpbjpcIjBzXCIsZHVyOlwiMS44c1wiLHZhbHVlczpcIjE7IDIwXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlUaW1lczpcIjA7IDFcIixrZXlTcGxpbmVzOlwiMC4xNjUsIDAuODQsIDAuNDQsIDFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjEuOHNcIix2YWx1ZXM6XCIxOyAwXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlUaW1lczpcIjA7IDFcIixrZXlTcGxpbmVzOlwiMC4zLCAwLjYxLCAwLjM1NSwgMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIyMlwiLGN5OlwiMjJcIixyOlwiMVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGJlZ2luOlwiLTAuOXNcIixkdXI6XCIxLjhzXCIsdmFsdWVzOlwiMTsgMjBcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVRpbWVzOlwiMDsgMVwiLGtleVNwbGluZXM6XCIwLjE2NSwgMC44NCwgMC40NCwgMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixiZWdpbjpcIi0wLjlzXCIsZHVyOlwiMS44c1wiLHZhbHVlczpcIjE7IDBcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVRpbWVzOlwiMDsgMVwiLGtleVNwbGluZXM6XCIwLjMsIDAuNjEsIDAuMzU1LCAxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pXSl9fSxRU3Bpbm5lclJhZGlvPXtuYW1lOlwiUVNwaW5uZXJSYWRpb1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInNjYWxlKDAuNTUpXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIzMFwiLGN5OlwiMTUwXCIscjpcIjMwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwiLGZyb206XCIwXCIsdG86XCIxXCIsZHVyOlwiMXNcIixiZWdpbjpcIjBcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixrZXlUaW1lczpcIjA7MC41OzFcIix2YWx1ZXM6XCIwOzE7MVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNOTAsMTUwaDMwYzAtNDkuNy00MC4zLTkwLTkwLTkwdjMwQzYzLjEsOTAsOTAsMTE2LjksOTAsMTUwelwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcIm9wYWNpdHlcIixmcm9tOlwiMFwiLHRvOlwiMVwiLGR1cjpcIjFzXCIsYmVnaW46XCIwLjFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixrZXlUaW1lczpcIjA7MC41OzFcIix2YWx1ZXM6XCIwOzE7MVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMTUwLDE1MGgzMEMxODAsNjcuMiwxMTIuOCwwLDMwLDB2MzBDOTYuMywzMCwxNTAsODMuNywxNTAsMTUwelwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcIm9wYWNpdHlcIixmcm9tOlwiMFwiLHRvOlwiMVwiLGR1cjpcIjFzXCIsYmVnaW46XCIwLjJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixrZXlUaW1lczpcIjA7MC41OzFcIix2YWx1ZXM6XCIwOzE7MVwifX0pXSldKV0pfX0sUVNwaW5uZXJSaW5ncz17bmFtZTpcIlFTcGlubmVyUmluZ3NcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7c3Ryb2tlOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCA0NSA0NVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZ1wiLHthdHRyczp7ZmlsbDpcIm5vbmVcIixcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgxIDEpXCIsXCJzdHJva2Utd2lkdGhcIjpcIjJcIn19LFt0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjIyXCIsY3k6XCIyMlwiLHI6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJyXCIsYmVnaW46XCIxLjVzXCIsZHVyOlwiM3NcIix2YWx1ZXM6XCI2OzIyXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsYmVnaW46XCIxLjVzXCIsZHVyOlwiM3NcIix2YWx1ZXM6XCIxOzBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLXdpZHRoXCIsYmVnaW46XCIxLjVzXCIsZHVyOlwiM3NcIix2YWx1ZXM6XCIyOzBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIyMlwiLGN5OlwiMjJcIixyOlwiNlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGJlZ2luOlwiM3NcIixkdXI6XCIzc1wiLHZhbHVlczpcIjY7MjJcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixiZWdpbjpcIjNzXCIsZHVyOlwiM3NcIix2YWx1ZXM6XCIxOzBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLXdpZHRoXCIsYmVnaW46XCIzc1wiLGR1cjpcIjNzXCIsdmFsdWVzOlwiMjswXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMjJcIixjeTpcIjIyXCIscjpcIjhcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInJcIixiZWdpbjpcIjBzXCIsZHVyOlwiMS41c1wiLHZhbHVlczpcIjY7MTsyOzM7NDs1OzZcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJUYWlsPXtuYW1lOlwiUVNwaW5uZXJUYWlsXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMzggMzhcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImRlZnNcIixbdChcImxpbmVhckdyYWRpZW50XCIse2F0dHJzOnt4MTpcIjguMDQyJVwiLHkxOlwiMCVcIix4MjpcIjY1LjY4MiVcIix5MjpcIjIzLjg2NSVcIixpZDpcImFcIn19LFt0KFwic3RvcFwiLHthdHRyczp7XCJzdG9wLWNvbG9yXCI6XCJjdXJyZW50Q29sb3JcIixcInN0b3Atb3BhY2l0eVwiOlwiMFwiLG9mZnNldDpcIjAlXCJ9fSksdChcInN0b3BcIix7YXR0cnM6e1wic3RvcC1jb2xvclwiOlwiY3VycmVudENvbG9yXCIsXCJzdG9wLW9wYWNpdHlcIjpcIi42MzFcIixvZmZzZXQ6XCI2My4xNDYlXCJ9fSksdChcInN0b3BcIix7YXR0cnM6e1wic3RvcC1jb2xvclwiOlwiY3VycmVudENvbG9yXCIsb2Zmc2V0OlwiMTAwJVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDEgMSlcIixmaWxsOlwibm9uZVwiLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMzYgMThjMC05Ljk0LTguMDYtMTgtMTgtMThcIixzdHJva2U6XCJ1cmwoI2EpXCIsXCJzdHJva2Utd2lkdGhcIjpcIjJcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCAxOCAxOFwiLHRvOlwiMzYwIDE4IDE4XCIsZHVyOlwiMC45c1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGN4OlwiMzZcIixjeTpcIjE4XCIscjpcIjFcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCAxOCAxOFwiLHRvOlwiMzYwIDE4IDE4XCIsZHVyOlwiMC45c1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sU3RlcFRhYj17bmFtZTpcIlFTdGVwVGFiXCIsZGlyZWN0aXZlczp7UmlwcGxlOlJpcHBsZX0scHJvcHM6W1widm1cIl0sY29tcHV0ZWQ6e2hhc05hdmlnYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy52bS5fX3N0ZXBwZXIubm9IZWFkZXJOYXZpZ2F0aW9ufSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJue1wic3RlcC1lcnJvclwiOnRoaXMudm0uZXJyb3IsXCJzdGVwLWFjdGl2ZVwiOnRoaXMudm0uYWN0aXZlLFwic3RlcC1kb25lXCI6dGhpcy52bS5kb25lLFwic3RlcC1uYXZpZ2F0aW9uXCI6dGhpcy52bS5kb25lJiZ0aGlzLmhhc05hdmlnYXRpb24sXCJzdGVwLXdhaXRpbmdcIjp0aGlzLnZtLndhaXRpbmcsXCJzdGVwLWRpc2FibGVkXCI6dGhpcy52bS5kaXNhYmxlLFwic3RlcC1jb2xvcmVkXCI6dGhpcy52bS5hY3RpdmV8fHRoaXMudm0uZG9uZSxcIml0ZW1zLWNlbnRlclwiOiF0aGlzLnZtLl9fc3RlcHBlci52ZXJ0aWNhbCxcIml0ZW1zLXN0YXJ0XCI6dGhpcy52bS5fX3N0ZXBwZXIudmVydGljYWwsXCJxLXN0ZXBwZXItZmlyc3RcIjp0aGlzLnZtLmZpcnN0LFwicS1zdGVwcGVyLWxhc3RcIjp0aGlzLnZtLmxhc3R9fX0sbWV0aG9kczp7X19zZWxlY3Q6ZnVuY3Rpb24oKXt0aGlzLmhhc05hdmlnYXRpb24mJnRoaXMudm0uc2VsZWN0KCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy52bS5zdGVwSWNvbj90KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLnZtLnN0ZXBJY29ufX0pOnQoXCJzcGFuXCIsW3RoaXMudm0uaW5uZXJPcmRlcisxXSk7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXN0ZXBwZXItdGFiIGNvbC1ncm93IGZsZXggbm8td3JhcCByZWxhdGl2ZS1wb3NpdGlvblwiLGNsYXNzOnRoaXMuY2xhc3Nlcyxvbjp7Y2xpY2s6dGhpcy5fX3NlbGVjdH0sZGlyZWN0aXZlczp0aGlzLmhhc05hdmlnYXRpb24/W3tuYW1lOlwicmlwcGxlXCIsdmFsdWU6dGhpcy52bS5kb25lfV06bnVsbH0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXN0ZXBwZXItZG90IHJvdyBmbGV4LWNlbnRlciBxLXN0ZXBwZXItbGluZSByZWxhdGl2ZS1wb3NpdGlvblwifSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJyb3cgZmxleC1jZW50ZXJcIn0sW2VdKV0pLHRoaXMudm0udGl0bGU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1sYWJlbCBxLXN0ZXBwZXItbGluZSByZWxhdGl2ZS1wb3NpdGlvblwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci10aXRsZVwifSxbdGhpcy52bS50aXRsZV0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXN0ZXBwZXItc3VidGl0bGVcIn0sW3RoaXMudm0uc3VidGl0bGVdKV0pOm51bGxdKX19LFFTdGVwPXtuYW1lOlwiUVN0ZXBcIixpbmplY3Q6e19fc3RlcHBlcjp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRU3RlcCBuZWVkcyB0byBiZSBjaGlsZCBvZiBRU3RlcHBlclwiKX19fSxwcm9wczp7bmFtZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiB1aWQoKX19LGRlZmF1bHQ6Qm9vbGVhbix0aXRsZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHN1YnRpdGxlOlN0cmluZyxpY29uOlN0cmluZyxvcmRlcjpbTnVtYmVyLFN0cmluZ10sZXJyb3I6Qm9vbGVhbixhY3RpdmVJY29uOlN0cmluZyxlcnJvckljb246U3RyaW5nLGRvbmVJY29uOlN0cmluZyxkaXNhYmxlOkJvb2xlYW59LHdhdGNoOntvcmRlcjpmdW5jdGlvbigpe3RoaXMuX19zdGVwcGVyLl9fc29ydFN0ZXBzKCl9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2lubmVyT3JkZXI6MCxmaXJzdDohMSxsYXN0OiExfX0sY29tcHV0ZWQ6e3N0ZXBJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3N0ZXBwZXI7cmV0dXJuIHRoaXMuYWN0aXZlP3RoaXMuYWN0aXZlSWNvbnx8dC5hY3RpdmVJY29ufHx0aGlzLiRxLmljb24uc3RlcHBlci5hY3RpdmU6dGhpcy5lcnJvcj90aGlzLmVycm9ySWNvbnx8dC5lcnJvckljb258fHRoaXMuJHEuaWNvbi5zdGVwcGVyLmVycm9yOnRoaXMuZG9uZSYmIXRoaXMuZGlzYWJsZT90aGlzLmRvbmVJY29ufHx0LmRvbmVJY29ufHx0aGlzLiRxLmljb24uc3RlcHBlci5kb25lOnRoaXMuaWNvbn0sYWN0dWFsT3JkZXI6ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VJbnQodGhpcy5vcmRlcnx8dGhpcy5pbm5lck9yZGVyLDEwKX0sYWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19zdGVwcGVyLnN0ZXA9PT10aGlzLm5hbWV9LGRvbmU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiZ0aGlzLl9fc3RlcHBlci5jdXJyZW50T3JkZXI+dGhpcy5pbm5lck9yZGVyfSx3YWl0aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZGlzYWJsZSYmdGhpcy5fX3N0ZXBwZXIuY3VycmVudE9yZGVyPHRoaXMuaW5uZXJPcmRlcn0sc3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmFjdHVhbE9yZGVyO3JldHVybntcIi13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXBcIjp0LFwiLW1zLWZsZXgtb3JkZXJcIjp0LG9yZGVyOnR9fSxjbGFzc2VzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zdGVwcGVyLnZlcnRpY2FsKXt2YXIgdD1bXTtyZXR1cm4hdGhpcy5hY3RpdmUmJnQucHVzaChcImhpZGRlblwiKSxudWxsIT09dGhpcy5fX3N0ZXBwZXIuYW5pbWF0aW9uJiZ0LnB1c2godGhpcy5fX3N0ZXBwZXIuYW5pbWF0aW9uKSx0fX19LG1ldGhvZHM6e3NlbGVjdDpmdW5jdGlvbigpe3RoaXMuZG9uZSYmdGhpcy5fX3N0ZXBwZXIuZ29Ub1N0ZXAodGhpcy5uYW1lKX0sX19nZXRDb250YWluZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hY3RpdmU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1zdGVwLWNvbnRlbnRcIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLXN0ZXAtaW5uZXJcIn0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKTpudWxsO3JldHVybiB0aGlzLl9fc3RlcHBlci52ZXJ0aWNhbD90KFFTbGlkZVRyYW5zaXRpb24sW2VdKTplfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuX19zdGVwcGVyLl9fcmVnaXN0ZXJTdGVwKHRoaXMpLHRoaXMuZGVmYXVsdCYmdGhpcy5zZWxlY3QoKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX19zdGVwcGVyLl9fdW5yZWdpc3RlclN0ZXAodGhpcyl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1zdGVwXCIsc3R5bGU6dGhpcy5zdHlsZX0sW3RoaXMuX19zdGVwcGVyLnZlcnRpY2FsP3QoU3RlcFRhYix7cHJvcHM6e3ZtOnRoaXN9fSk6bnVsbCx0aGlzLl9fZ2V0Q29udGFpbmVyKHQpXSl9fSxRU3RlcHBlcj17bmFtZTpcIlFTdGVwcGVyXCIscHJvcHM6e3ZhbHVlOltOdW1iZXIsU3RyaW5nXSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdmVydGljYWw6Qm9vbGVhbixhbHRlcm5hdGl2ZUxhYmVsczpCb29sZWFuLG5vSGVhZGVyTmF2aWdhdGlvbjpCb29sZWFuLGNvbnRyYWN0YWJsZTpCb29sZWFuLGRvbmVJY29uOkJvb2xlYW4sYWN0aXZlSWNvbjpCb29sZWFuLGVycm9ySWNvbjpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2FuaW1hdGlvbjpudWxsLHN0ZXA6dGhpcy52YWx1ZXx8bnVsbCxzdGVwczpbXX19LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57X19zdGVwcGVyOnRoaXN9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5nb1RvU3RlcCh0KX0sc3RlcDpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnZlcnRpY2FsKXt2YXIgaT10aGlzLnN0ZXBzLmZpbmRJbmRleChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dH0pLHM9dGhpcy5zdGVwcy5maW5kSW5kZXgoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZT09PWV9KTt0aGlzLmFuaW1hdGlvbj1pPHM/XCJhbmltYXRlLWZhZGUtbGVmdFwiOmk+cz9cImFuaW1hdGUtZmFkZS1yaWdodFwiOm51bGx9fX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXCJxLXN0ZXBwZXItXCIrKHRoaXMudmVydGljYWw/XCJ2ZXJ0aWNhbFwiOlwiaG9yaXpvbnRhbFwiKSxcInRleHQtXCIrdGhpcy5jb2xvcl07cmV0dXJuIHRoaXMuY29udHJhY3RhYmxlJiZ0LnB1c2goXCJxLXN0ZXBwZXItY29udHJhY3RhYmxlXCIpLHR9LGhhc1N0ZXBzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RlcHMubGVuZ3RoPjB9LGN1cnJlbnRTdGVwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLmhhc1N0ZXBzKXJldHVybiB0aGlzLnN0ZXBzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09PXQuc3RlcH0pfSxjdXJyZW50T3JkZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnJlbnRTdGVwKXJldHVybiB0aGlzLmN1cnJlbnRTdGVwLmlubmVyT3JkZXJ9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0ZXBzLmxlbmd0aH19LG1ldGhvZHM6e2dvVG9TdGVwOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5zdGVwIT09dCYmdm9pZCAwIT09dCYmKHRoaXMuc3RlcD10LHRoaXMuJGVtaXQoXCJpbnB1dFwiLHQpLHRoaXMuJGVtaXQoXCJzdGVwXCIsdCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsdCl9KSl9LG5leHQ6ZnVuY3Rpb24oKXt0aGlzLl9fZ28oMSl9LHByZXZpb3VzOmZ1bmN0aW9uKCl7dGhpcy5fX2dvKC0xKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmhhc1N0ZXBzJiZ0aGlzLmdvVG9TdGVwKHRoaXMuc3RlcHNbMF0ubmFtZSl9LF9fZ286ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLmN1cnJlbnRPcmRlcjtpZih2b2lkIDA9PT1pKXtpZighdGhpcy5oYXNTdGVwcylyZXR1cm47ZT10aGlzLnN0ZXBzWzBdLm5hbWV9ZWxzZXtkb3tpKz10fXdoaWxlKGk+PTAmJmk8dGhpcy5sZW5ndGgtMSYmdGhpcy5zdGVwc1tpXS5kaXNhYmxlKTtpZihpPDB8fGk+dGhpcy5sZW5ndGgtMXx8dGhpcy5zdGVwc1tpXS5kaXNhYmxlKXJldHVybjtlPXRoaXMuc3RlcHNbaV0ubmFtZX10aGlzLmdvVG9TdGVwKGUpfSxfX3NvcnRTdGVwczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5zdGVwcy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYWN0dWFsT3JkZXItZS5hY3R1YWxPcmRlcn0pO3ZhciBlPXRoaXMuc3RlcHMubGVuZ3RoLTE7dGhpcy5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7dC5pbm5lck9yZGVyPWksdC5maXJzdD0wPT09aSx0Lmxhc3Q9aT09PWV9KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3Quc3RlcHMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5hY3RpdmV9KXx8dC5nb1RvU3RlcCh0LnN0ZXBzWzBdLm5hbWUpfSl9LF9fcmVnaXN0ZXJTdGVwOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0ZXBzLnB1c2godCksdGhpcy5fX3NvcnRTdGVwcygpLHRoaXN9LF9fdW5yZWdpc3RlclN0ZXA6ZnVuY3Rpb24odCl7dGhpcy5zdGVwcz10aGlzLnN0ZXBzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fc29ydFN0ZXBzPWZyYW1lRGVib3VuY2UodGhpcy5fX3NvcnRTdGVwcyl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlciBjb2x1bW4gb3ZlcmZsb3ctaGlkZGVuIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbdGhpcy52ZXJ0aWNhbD9udWxsOnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXN0ZXBwZXItaGVhZGVyIHJvdyBpdGVtcy1zdHJldGNoIGp1c3RpZnktYmV0d2VlbiBzaGFkb3ctMVwiLGNsYXNzOntcImFsdGVybmF0aXZlLWxhYmVsc1wiOnRoaXMuYWx0ZXJuYXRpdmVMYWJlbHN9fSx0aGlzLnN0ZXBzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdChTdGVwVGFiLHtrZXk6ZS5uYW1lLHByb3BzOnt2bTplfX0pfSkpLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX19LFFTdGVwcGVyTmF2aWdhdGlvbj17bmFtZTpcIlFTdGVwcGVyTmF2aWdhdGlvblwiLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1uYXYgb3JkZXItbGFzdCByb3cgaXRlbXMtY2VudGVyXCJ9LFt0aGlzLiRzbG90cy5sZWZ0LHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2xcIn0pLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX19LFRhYk1peGluPXtkaXJlY3RpdmVzOntSaXBwbGU6UmlwcGxlfSxwcm9wczp7bGFiZWw6U3RyaW5nLGljb246U3RyaW5nLGRpc2FibGU6Qm9vbGVhbixoaWRkZW46Qm9vbGVhbixoaWRlOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiXCJ9LG5hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdWlkKCl9fSxhbGVydDpCb29sZWFuLGNvdW50OltOdW1iZXIsU3RyaW5nXSxjb2xvcjpTdHJpbmcsdGFiaW5kZXg6TnVtYmVyfSxpbmplY3Q6e2RhdGE6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUVRhYi9RUm91dGVUYWIgY29tcG9uZW50cyBuZWVkIHRvIGJlIGNoaWxkIG9mIFFUYWJzXCIpfX0sc2VsZWN0VGFiOnt9fSx3YXRjaDp7YWN0aXZlOmZ1bmN0aW9uKHQpe3QmJnRoaXMuJGVtaXQoXCJzZWxlY3RcIix0aGlzLm5hbWUpfX0sY29tcHV0ZWQ6e2FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEudGFiTmFtZT09PXRoaXMubmFtZX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PXthY3RpdmU6dGhpcy5hY3RpdmUsaGlkZGVuOnRoaXMuaGlkZGVuLGRpc2FibGVkOnRoaXMuZGlzYWJsZSxcInEtdGFiLWZ1bGxcIjp0aGlzLmljb24mJnRoaXMubGFiZWwsXCJxLXRhYi1vbmx5LWxhYmVsXCI6IXRoaXMuaWNvbiYmdGhpcy5sYWJlbCxcImhpZGUtbm9uZVwiOiF0aGlzLmhpZGUsXCJoaWRlLWljb25cIjpcImljb25cIj09PXRoaXMuaGlkZSxcImhpZGUtbGFiZWxcIjpcImxhYmVsXCI9PT10aGlzLmhpZGV9LGU9dGhpcy5kYXRhLmludmVydGVkP3RoaXMuY29sb3J8fHRoaXMuZGF0YS50ZXh0Q29sb3J8fHRoaXMuZGF0YS5jb2xvcjp0aGlzLmNvbG9yO3JldHVybiBlJiYodFtcInRleHQtXCIrZV09ITApLHR9LGJhclN0eWxlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZlfHwhdGhpcy5kYXRhLmhpZ2hsaWdodClyZXR1cm5cImRpc3BsYXk6IG5vbmU7XCJ9LGNvbXB1dGVkVGFiSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlfHx0aGlzLmFjdGl2ZT8tMTp0aGlzLnRhYmluZGV4fHwwfX0sbWV0aG9kczp7X19nZXRUYWJNZXRhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvdW50P1t0KFFDaGlwLHtzdGF0aWNDbGFzczpcInEtdGFiLW1ldGFcIixwcm9wczp7ZmxvYXRpbmc6ITB9fSxbdGhpcy5jb3VudF0pXTp0aGlzLmFsZXJ0P1t0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItbWV0YSBxLWRvdFwifSldOnZvaWQgMH0sX19nZXRUYWJDb250ZW50OmZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB0aGlzLmljb24mJmUucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItaWNvbi1wYXJlbnQgcmVsYXRpdmUtcG9zaXRpb25cIn0sW3QoUUljb24se3N0YXRpY0NsYXNzOlwicS10YWItaWNvblwiLHByb3BzOntuYW1lOnRoaXMuaWNvbn19KSx0aGlzLl9fZ2V0VGFiTWV0YSh0KV0pKSx0aGlzLmxhYmVsJiZlLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFiLWxhYmVsLXBhcmVudCByZWxhdGl2ZS1wb3NpdGlvblwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFiLWxhYmVsXCJ9LFt0aGlzLmxhYmVsXSksdGhpcy5fX2dldFRhYk1ldGEodCldKSksKGU9ZS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCkpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFicy1iYXJcIixzdHlsZTp0aGlzLmJhclN0eWxlLGNsYXNzOnRoaXMuZGF0YS51bmRlcmxpbmVDbGFzc30pKSxlLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFiLWZvY3VzLWhlbHBlciBhYnNvbHV0ZS1mdWxsXCIsYXR0cnM6e3RhYmluZGV4OnRoaXMuY29tcHV0ZWRUYWJJbmRleH19KSksZX19fSxRUm91dGVUYWI9e25hbWU6XCJRUm91dGVUYWJcIixtaXhpbnM6W1RhYk1peGluLFJvdXRlckxpbmtNaXhpbl0saW5qZWN0OntzZWxlY3RUYWJSb3V0ZXI6e319LHdhdGNoOnskcm91dGU6ZnVuY3Rpb24oKXt0aGlzLmNoZWNrSWZTZWxlY3RlZCgpfX0sbWV0aG9kczp7c2VsZWN0OmZ1bmN0aW9uKCl7dGhpcy4kZW1pdChcImNsaWNrXCIsdGhpcy5uYW1lKSx0aGlzLmRpc2FibGV8fCh0aGlzLiRlbC5kaXNwYXRjaEV2ZW50KGV2dCksdGhpcy5zZWxlY3RUYWJSb3V0ZXIoe3ZhbHVlOnRoaXMubmFtZSxzZWxlY3RlZDohMH0pKX0sY2hlY2tJZlNlbGVjdGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2lmKHQuJGVsLmNsYXNzTGlzdC5jb250YWlucyhcInEtcm91dGVyLWxpbmstZXhhY3QtYWN0aXZlXCIpKXQuc2VsZWN0VGFiUm91dGVyKHt2YWx1ZTp0Lm5hbWUsc2VsZWN0YWJsZTohMCxleGFjdDohMH0pO2Vsc2UgaWYodC4kZWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1yb3V0ZXItbGluay1hY3RpdmVcIikpe3ZhciBlPXQuJHJvdXRlci5yZXNvbHZlKHQudG8sdm9pZCAwLHQuYXBwZW5kKTt0LnNlbGVjdFRhYlJvdXRlcih7dmFsdWU6dC5uYW1lLHNlbGVjdGFibGU6ITAscHJpb3JpdHk6ZS5ocmVmLmxlbmd0aH0pfWVsc2UgdC5hY3RpdmUmJnQuc2VsZWN0VGFiUm91dGVyKHt2YWx1ZTpudWxsfSl9KX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNoZWNrSWZTZWxlY3RlZCgpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcInJvdXRlci1saW5rXCIse3Byb3BzOnt0YWc6XCJhXCIsdG86dGhpcy50byxleGFjdDp0aGlzLmV4YWN0LGFwcGVuZDp0aGlzLmFwcGVuZCxyZXBsYWNlOnRoaXMucmVwbGFjZSxldmVudDpyb3V0ZXJMaW5rRXZlbnROYW1lLGFjdGl2ZUNsYXNzOlwicS1yb3V0ZXItbGluay1hY3RpdmVcIixleGFjdEFjdGl2ZUNsYXNzOlwicS1yb3V0ZXItbGluay1leGFjdC1hY3RpdmVcIn0sYXR0cnM6e3RhYmluZGV4Oi0xfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5zZWxlY3Qsa2V5dXA6ZnVuY3Rpb24odCl7cmV0dXJuIDEzPT09dC5rZXlDb2RlJiZlLnNlbGVjdCh0KX19LHN0YXRpY0NsYXNzOlwicS1saW5rIHEtdGFiIGNvbHVtbiBmbGV4LWNlbnRlciByZWxhdGl2ZS1wb3NpdGlvblwiLGNsYXNzOnRoaXMuY2xhc3NlcyxkaXJlY3RpdmVzOlt7bmFtZTpcInJpcHBsZVwifV19LHRoaXMuX19nZXRUYWJDb250ZW50KHQpKX19LFFUYWI9e25hbWU6XCJRVGFiXCIsbWl4aW5zOltUYWJNaXhpbl0scHJvcHM6e2RlZmF1bHQ6Qm9vbGVhbn0sbWV0aG9kczp7c2VsZWN0OmZ1bmN0aW9uKCl7dGhpcy4kZW1pdChcImNsaWNrXCIsdGhpcy5uYW1lKSx0aGlzLmRpc2FibGV8fHRoaXMuc2VsZWN0VGFiKHRoaXMubmFtZSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0JiYhdGhpcy5kaXNhYmxlJiZ0aGlzLnNlbGVjdCgpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFiIGNvbHVtbiBmbGV4LWNlbnRlciByZWxhdGl2ZS1wb3NpdGlvblwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7XCJkYXRhLXRhYi1uYW1lXCI6dGhpcy5uYW1lfSxvbjp7Y2xpY2s6dGhpcy5zZWxlY3Qsa2V5dXA6ZnVuY3Rpb24odCl7cmV0dXJuIDEzPT09dC5rZXlDb2RlJiZlLnNlbGVjdCh0KX19LGRpcmVjdGl2ZXM6W3tuYW1lOlwicmlwcGxlXCJ9XX0sdGhpcy5fX2dldFRhYkNvbnRlbnQodCkpfX0sUVRhYlBhbmU9e25hbWU6XCJRVGFiUGFuZVwiLGluamVjdDp7ZGF0YTp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRVGFiUGFuZSBuZWVkcyB0byBiZSBjaGlsZCBvZiBRVGFic1wiKX19fSxwcm9wczp7bmFtZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGtlZXBBbGl2ZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Nob3duOiExfX0sY29tcHV0ZWQ6e2FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEudGFiTmFtZT09PXRoaXMubmFtZX0sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybntoaWRkZW46IXRoaXMuYWN0aXZlLFwiYW5pbWF0ZS1mYWRlLWxlZnRcIjpcImxlZnRcIj09PXRoaXMuZGF0YS5kaXJlY3Rpb24sXCJhbmltYXRlLWZhZGUtcmlnaHRcIjpcInJpZ2h0XCI9PT10aGlzLmRhdGEuZGlyZWN0aW9ufX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItcGFuZVwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCk7aWYodGhpcy5rZWVwQWxpdmUpe2lmKCF0aGlzLnNob3duJiYhdGhpcy5hY3RpdmUpcmV0dXJuO3JldHVybiB0aGlzLnNob3duPSEwLGV9aWYodGhpcy5zaG93bj10aGlzLmFjdGl2ZSx0aGlzLmFjdGl2ZSlyZXR1cm4gZX19LHNjcm9sbE5hdmlnYXRpb25TcGVlZD01LGRlYm91bmNlRGVsYXk9NTA7ZnVuY3Rpb24gZ2V0VW5kZXJsaW5lQ2xhc3ModCl7aWYodClyZXR1cm5cInRleHQtXCIrdH12YXIgUVRhYnM9e25hbWU6XCJRVGFic1wiLHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57ZGF0YTp0aGlzLmRhdGEsc2VsZWN0VGFiOnRoaXMuc2VsZWN0VGFiLHNlbGVjdFRhYlJvdXRlcjp0aGlzLnNlbGVjdFRhYlJvdXRlcn19LGRpcmVjdGl2ZXM6e1RvdWNoU3dpcGU6VG91Y2hTd2lwZX0scHJvcHM6e3ZhbHVlOlN0cmluZyxhbGlnbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImxlZnRcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiLFwianVzdGlmeVwiXS5pbmNsdWRlcyh0KX19LHBvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwidG9wXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInRvcFwiLFwiYm90dG9tXCJdLmluY2x1ZGVzKHQpfX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHRleHRDb2xvcjpTdHJpbmcsaW52ZXJ0ZWQ6Qm9vbGVhbix0d29MaW5lczpCb29sZWFuLGdsb3NzeTpCb29sZWFuLGFuaW1hdGVkOkJvb2xlYW4sc3dpcGVhYmxlOkJvb2xlYW4scGFuZXNDb250YWluZXJDbGFzczpTdHJpbmcsdW5kZXJsaW5lQ29sb3I6U3RyaW5nfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnRFbDpudWxsLHBvc2Jhcjp7d2lkdGg6MCxsZWZ0OjB9LGRhdGE6e2hpZ2hsaWdodDohMCx0YWJOYW1lOnRoaXMudmFsdWV8fFwiXCIsY29sb3I6dGhpcy5jb2xvcix0ZXh0Q29sb3I6dGhpcy50ZXh0Q29sb3IsaW52ZXJ0ZWQ6dGhpcy5pbnZlcnRlZCx1bmRlcmxpbmVDbGFzczpnZXRVbmRlcmxpbmVDbGFzcyh0aGlzLnVuZGVybGluZUNvbG9yKSxkaXJlY3Rpb246bnVsbH19fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZWxlY3RUYWIodCl9LGNvbG9yOmZ1bmN0aW9uKHQpe3RoaXMuZGF0YS5jb2xvcj10fSx0ZXh0Q29sb3I6ZnVuY3Rpb24odCl7dGhpcy5kYXRhLnRleHRDb2xvcj10fSxpbnZlcnRlZDpmdW5jdGlvbih0KXt0aGlzLmRhdGEuaW52ZXJ0ZWQ9dH0sdW5kZXJsaW5lQ29sb3I6ZnVuY3Rpb24odCl7dGhpcy5kYXRhLnVuZGVybGluZUNsYXNzPWdldFVuZGVybGluZUNsYXNzKHQpfX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXCJxLXRhYnMtcG9zaXRpb24tXCIrdGhpcy5wb3NpdGlvbixcInEtdGFicy1cIisodGhpcy5pbnZlcnRlZD9cImludmVydGVkXCI6XCJub3JtYWxcIiksdGhpcy50d29MaW5lcz9cInEtdGFicy10d28tbGluZXNcIjpcIlwiXX0saW5uZXJDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W1wicS10YWJzLWFsaWduLVwiK3RoaXMuYWxpZ25dO3JldHVybiB0aGlzLmdsb3NzeSYmdC5wdXNoKFwiZ2xvc3N5XCIpLHRoaXMuaW52ZXJ0ZWQ/dC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fHRoaXMuY29sb3IpKToodC5wdXNoKFwiYmctXCIrdGhpcy5jb2xvciksdC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fFwid2hpdGVcIikpKSx0fSxwb3NiYXJDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuaW52ZXJ0ZWQmJnQucHVzaChcInRleHQtXCIrKHRoaXMudGV4dENvbG9yfHx0aGlzLmNvbG9yKSksdGhpcy5kYXRhLmhpZ2hsaWdodCYmdC5wdXNoKFwiaGlnaGxpZ2h0XCIpLHR9fSxtZXRob2RzOntnbzpmdW5jdGlvbih0KXt2YXIgZT0wO2lmKHRoaXMuZGF0YS50YWJOYW1lKXt2YXIgaT10aGlzLiRyZWZzLnNjcm9sbGVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXRhYi1uYW1lPVwiJyt0aGlzLmRhdGEudGFiTmFtZSsnXCJdJyk7aSYmKGU9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLiRyZWZzLnNjcm9sbGVyLmNoaWxkcmVuLGkpKX12YXIgcz10aGlzLiRyZWZzLnNjcm9sbGVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS10YWItbmFtZV1cIik7KGUrPXQpPi0xJiZlPHMubGVuZ3RoJiZ0aGlzLnNlbGVjdFRhYihzW2VdLmdldEF0dHJpYnV0ZShcImRhdGEtdGFiLW5hbWVcIikpfSxwcmV2aW91czpmdW5jdGlvbigpe3RoaXMuZ28oLTEpfSxuZXh0OmZ1bmN0aW9uKCl7dGhpcy5nbygxKX0sc2VsZWN0VGFiOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZGF0YS50YWJOYW1lIT09dCl7dGhpcy5kYXRhLnRhYk5hbWU9dDt2YXIgZT10aGlzLl9fZ2V0VGFiRWxCeU5hbWUodCk7aWYoZSlpZih0aGlzLl9fc2Nyb2xsVG9UYWIoZSksdGhpcy5jdXJyZW50RWw9ZSx0aGlzLm9sZEVsKXtpZih0aGlzLmFuaW1hdGVkKXt2YXIgaT10aGlzLiRyZWZzLnNjcm9sbGVyLmNoaWxkcmVuO3RoaXMuZGF0YS5kaXJlY3Rpb249QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChpLGUpPEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoaSx0aGlzLm9sZEVsKT9cImxlZnRcIjpcInJpZ2h0XCJ9dGhpcy5fX3JlcG9zaXRpb25CYXIoKX1lbHNlIHRoaXMub2xkRWw9ZTtlbHNlIHRoaXMub2xkRWw9bnVsbCx0aGlzLmRhdGEuZGlyZWN0aW9uPW51bGw7dGhpcy4kZW1pdChcImlucHV0XCIsdCx0aGlzLmRhdGEuZGlyZWN0aW9uKSx0aGlzLiRlbWl0KFwic2VsZWN0XCIsdCx0aGlzLmRhdGEuZGlyZWN0aW9uKX19LHNlbGVjdFRhYlJvdXRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dC52YWx1ZSxzPXQuc2VsZWN0YWJsZSxuPXQuZXhhY3Qsbz10LnNlbGVjdGVkLHI9dC5wcmlvcml0eSxhPSF0aGlzLmJ1ZmZlci5sZW5ndGgsbD1hPy0xOnRoaXMuYnVmZmVyLmZpbmRJbmRleChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZT09PWl9KTtpZihsPi0xKXt2YXIgYz10aGlzLmJ1ZmZlcltsXTtuJiYoYy5leGFjdD1uKSxzJiYoYy5zZWxlY3RhYmxlPXMpLG8mJihjLnNlbGVjdGVkPW8pLHImJihjLnByaW9yaXR5PXIpfWVsc2UgdGhpcy5idWZmZXIucHVzaCh0KTthJiYodGhpcy5idWZmZXJUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZS5idWZmZXIuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5leGFjdCYmdC5zZWxlY3RlZH0pfHxlLmJ1ZmZlci5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdGFibGUmJnQuc2VsZWN0ZWR9KXx8ZS5idWZmZXIuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5leGFjdH0pfHxlLmJ1ZmZlci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0YWJsZX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5wcmlvcml0eS10LnByaW9yaXR5fSlbMF18fGUuYnVmZmVyWzBdO2UuYnVmZmVyLmxlbmd0aD0wLGUuc2VsZWN0VGFiKHQudmFsdWUpfSwxMDApKX0sX19zd2lwZTpmdW5jdGlvbih0KXt0aGlzLmdvKFwibGVmdFwiPT09dC5kaXJlY3Rpb24/MTotMSl9LF9fcmVwb3NpdGlvbkJhcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO3ZhciBlPSExLGk9dGhpcy4kcmVmcy5wb3NiYXIscz10aGlzLmN1cnJlbnRFbDtpZighMSE9PXRoaXMuZGF0YS5oaWdobGlnaHQmJih0aGlzLmRhdGEuaGlnaGxpZ2h0PSExLGU9ITApLCFzKXJldHVybiB0aGlzLmZpbmFsUG9zYmFyPXt3aWR0aDowLGxlZnQ6MH0sdm9pZCB0aGlzLl9fc2V0UG9zaXRpb25CYXIoMCwwKTt2YXIgbj1pLnBhcmVudE5vZGUub2Zmc2V0TGVmdDtlJiZ0aGlzLm9sZEVsJiZ0aGlzLl9fc2V0UG9zaXRpb25CYXIodGhpcy5vbGRFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCx0aGlzLm9sZEVsLm9mZnNldExlZnQtbiksdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGU9cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxvPXMub2Zmc2V0TGVmdC1uO2kuY2xhc3NMaXN0LnJlbW92ZShcImNvbnRyYWN0XCIpLHQub2xkRWw9cyx0LmZpbmFsUG9zYmFyPXt3aWR0aDplLGxlZnQ6b30sdC5fX3NldFBvc2l0aW9uQmFyKHQucG9zYmFyLmxlZnQ8bz9vK2UtdC5wb3NiYXIubGVmdDp0LnBvc2Jhci5sZWZ0K3QucG9zYmFyLndpZHRoLW8sdC5wb3NiYXIubGVmdDxvP3QucG9zYmFyLmxlZnQ6byl9LDIwKX0sX19zZXRQb3NpdGlvbkJhcjpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PWUmJihlPTApLHRoaXMucG9zYmFyLndpZHRoIT09dHx8dGhpcy5wb3NiYXIubGVmdCE9PWUpe3RoaXMucG9zYmFyPXt3aWR0aDp0LGxlZnQ6ZX07dmFyIGk9dGhpcy4kcS5pMThuLnJ0bD9lK3Q6ZTt0aGlzLiRyZWZzLnBvc2Jhci5zdHlsZS50cmFuc2Zvcm09XCJ0cmFuc2xhdGVYKFwiK2krXCJweCkgc2NhbGVYKFwiK3QrXCIpXCJ9ZWxzZSB0aGlzLl9fdXBkYXRlUG9zYmFyVHJhbnNpdGlvbigpfSxfX3VwZGF0ZVBvc2JhclRyYW5zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLmZpbmFsUG9zYmFyLndpZHRoPT09dGhpcy5wb3NiYXIud2lkdGgmJnRoaXMuZmluYWxQb3NiYXIubGVmdD09PXRoaXMucG9zYmFyLmxlZnQpcmV0dXJuIHRoaXMucG9zYmFyPXt9LHZvaWQoITAhPT10aGlzLmRhdGEuaGlnaGxpZ2h0JiYodGhpcy5kYXRhLmhpZ2hsaWdodD0hMCkpO3RoaXMuJHJlZnMucG9zYmFyLmNsYXNzTGlzdC5hZGQoXCJjb250cmFjdFwiKSx0aGlzLl9fc2V0UG9zaXRpb25CYXIodGhpcy5maW5hbFBvc2Jhci53aWR0aCx0aGlzLmZpbmFsUG9zYmFyLmxlZnQpfSxfX3JlZHJhdzpmdW5jdGlvbigpe3RoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcCYmKHRoaXMuc2Nyb2xsZXJXaWR0aD13aWR0aCh0aGlzLiRyZWZzLnNjcm9sbGVyKSwwPT09dGhpcy5zY3JvbGxlcldpZHRoJiYwPT09dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxXaWR0aHx8KHRoaXMuc2Nyb2xsZXJXaWR0aCs1PHRoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsV2lkdGg/KHRoaXMuJHJlZnMudGFicy5jbGFzc0xpc3QuYWRkKFwic2Nyb2xsYWJsZVwiKSx0aGlzLnNjcm9sbGFibGU9ITAsdGhpcy5fX3VwZGF0ZVNjcm9sbEluZGljYXRvcigpKToodGhpcy4kcmVmcy50YWJzLmNsYXNzTGlzdC5yZW1vdmUoXCJzY3JvbGxhYmxlXCIpLHRoaXMuc2Nyb2xsYWJsZT0hMSkpKX0sX191cGRhdGVTY3JvbGxJbmRpY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3AmJnRoaXMuc2Nyb2xsYWJsZSl7dmFyIHQ9dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0K3dpZHRoKHRoaXMuJHJlZnMuc2Nyb2xsZXIpKzU+PXRoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsV2lkdGg/XCJhZGRcIjpcInJlbW92ZVwiO3RoaXMuJHJlZnMubGVmdFNjcm9sbC5jbGFzc0xpc3RbdGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0PD0wP1wiYWRkXCI6XCJyZW1vdmVcIl0oXCJkaXNhYmxlZFwiKSx0aGlzLiRyZWZzLnJpZ2h0U2Nyb2xsLmNsYXNzTGlzdFt0XShcImRpc2FibGVkXCIpfX0sX19nZXRUYWJFbEJ5TmFtZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiRjaGlsZHJlbi5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT10JiZlLiRlbCYmMT09PWUuJGVsLm5vZGVUeXBlfSk7aWYoZSlyZXR1cm4gZS4kZWx9LF9fZmluZFRhYkFuZFNjcm9sbDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2kuX19zY3JvbGxUb1RhYihpLl9fZ2V0VGFiRWxCeU5hbWUodCksZSl9LDQqZGVib3VuY2VEZWxheSl9LF9fc2Nyb2xsVG9UYWI6ZnVuY3Rpb24odCxlKXtpZih0JiZ0aGlzLnNjcm9sbGFibGUpe3ZhciBpPXRoaXMuJHJlZnMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49cy53aWR0aCxvPXMubGVmdC1pLmxlZnQ7bzwwP2U/dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0Kz1vOnRoaXMuX19hbmltU2Nyb2xsVG8odGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0K28pOihvKz1uLXRoaXMuJHJlZnMuc2Nyb2xsZXIub2Zmc2V0V2lkdGgpPjAmJihlP3RoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsTGVmdCs9bzp0aGlzLl9fYW5pbVNjcm9sbFRvKHRoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsTGVmdCtvKSl9fSxfX2FuaW1TY3JvbGxUbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX19zdG9wQW5pbVNjcm9sbCgpLHRoaXMuX19zY3JvbGxUb3dhcmRzKHQpLHRoaXMuc2Nyb2xsVGltZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtlLl9fc2Nyb2xsVG93YXJkcyh0KSYmZS5fX3N0b3BBbmltU2Nyb2xsKCl9LDUpfSxfX3Njcm9sbFRvU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9fYW5pbVNjcm9sbFRvKDApfSxfX3Njcm9sbFRvRW5kOmZ1bmN0aW9uKCl7dGhpcy5fX2FuaW1TY3JvbGxUbyg5OTk5KX0sX19zdG9wQW5pbVNjcm9sbDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGhpcy5zY3JvbGxUaW1lcil9LF9fc2Nyb2xsVG93YXJkczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQsaT10PGU/LTE6MSxzPSExO3JldHVybihlKz1pKnNjcm9sbE5hdmlnYXRpb25TcGVlZCk8MD8ocz0hMCxlPTApOigtMT09PWkmJmU8PXR8fDE9PT1pJiZlPj10KSYmKHM9ITAsZT10KSx0aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQ9ZSxzfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJzIGZsZXggbm8td3JhcCBvdmVyZmxvdy1oaWRkZW5cIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJzLWhlYWQgcm93XCIscmVmOlwidGFic1wiLGNsYXNzOnRoaXMuaW5uZXJDbGFzc2VzfSxbdChcImRpdlwiLHtyZWY6XCJzY3JvbGxlclwiLHN0YXRpY0NsYXNzOlwicS10YWJzLXNjcm9sbGVyIHJvdyBuby13cmFwXCJ9LFt0aGlzLiRzbG90cy50aXRsZSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicmVsYXRpdmUtcG9zaXRpb24gc2VsZi1zdHJldGNoIHEtdGFicy1nbG9iYWwtYmFyLWNvbnRhaW5lclwiLGNsYXNzOnRoaXMucG9zYmFyQ2xhc3Nlc30sW3QoXCJkaXZcIix7cmVmOlwicG9zYmFyXCIsc3RhdGljQ2xhc3M6XCJxLXRhYnMtYmFyIHEtdGFicy1nbG9iYWwtYmFyXCIsY2xhc3M6dGhpcy5kYXRhLnVuZGVybGluZUNsYXNzLG9uOnt0cmFuc2l0aW9uZW5kOnRoaXMuX191cGRhdGVQb3NiYXJUcmFuc2l0aW9ufX0pXSldKSx0KFwiZGl2XCIse3JlZjpcImxlZnRTY3JvbGxcIixzdGF0aWNDbGFzczpcInJvdyBmbGV4LWNlbnRlciBxLXRhYnMtbGVmdC1zY3JvbGxcIixvbjp7bW91c2Vkb3duOnRoaXMuX19zY3JvbGxUb1N0YXJ0LHRvdWNoc3RhcnQ6dGhpcy5fX3Njcm9sbFRvU3RhcnQsbW91c2V1cDp0aGlzLl9fc3RvcEFuaW1TY3JvbGwsbW91c2VsZWF2ZTp0aGlzLl9fc3RvcEFuaW1TY3JvbGwsdG91Y2hlbmQ6dGhpcy5fX3N0b3BBbmltU2Nyb2xsfX0sW3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMuJHEuaWNvbi50YWJzLmxlZnR9fSldKSx0KFwiZGl2XCIse3JlZjpcInJpZ2h0U2Nyb2xsXCIsc3RhdGljQ2xhc3M6XCJyb3cgZmxleC1jZW50ZXIgcS10YWJzLXJpZ2h0LXNjcm9sbFwiLG9uOnttb3VzZWRvd246dGhpcy5fX3Njcm9sbFRvRW5kLHRvdWNoc3RhcnQ6dGhpcy5fX3Njcm9sbFRvRW5kLG1vdXNldXA6dGhpcy5fX3N0b3BBbmltU2Nyb2xsLG1vdXNlbGVhdmU6dGhpcy5fX3N0b3BBbmltU2Nyb2xsLHRvdWNoZW5kOnRoaXMuX19zdG9wQW5pbVNjcm9sbH19LFt0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udGFicy5yaWdodH19KV0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFicy1wYW5lc1wiLGNsYXNzOnRoaXMucGFuZXNDb250YWluZXJDbGFzcyxkaXJlY3RpdmVzOnRoaXMuc3dpcGVhYmxlP1t7bmFtZTpcInRvdWNoLXN3aXBlXCIsdmFsdWU6dGhpcy5fX3N3aXBlfV06bnVsbH0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMudGltZXI9bnVsbCx0aGlzLnNjcm9sbFRpbWVyPW51bGwsdGhpcy5idWZmZXJUaW1lcj1udWxsLHRoaXMuYnVmZmVyPVtdLHRoaXMuc2Nyb2xsYWJsZT0hdGhpcy4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wLHRoaXMuX19yZWRyYXc9ZGVib3VuY2UodGhpcy5fX3JlZHJhdyxkZWJvdW5jZURlbGF5KSx0aGlzLl9fdXBkYXRlU2Nyb2xsSW5kaWNhdG9yPWRlYm91bmNlKHRoaXMuX191cGRhdGVTY3JvbGxJbmRpY2F0b3IsZGVib3VuY2VEZWxheSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC4kcmVmcy5zY3JvbGxlciYmKHQuJHJlZnMuc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHQuX191cGRhdGVTY3JvbGxJbmRpY2F0b3IsbGlzdGVuT3B0cy5wYXNzaXZlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQuX19yZWRyYXcsbGlzdGVuT3B0cy5wYXNzaXZlKSxcIlwiIT09dC5kYXRhLnRhYk5hbWUmJnQudmFsdWUmJnQuc2VsZWN0VGFiKHQudmFsdWUpLHQuX19yZWRyYXcoKSx0Ll9fZmluZFRhYkFuZFNjcm9sbCh0LmRhdGEudGFiTmFtZSwhMCkpfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksY2xlYXJUaW1lb3V0KHRoaXMuYnVmZmVyVGltZXIpLHRoaXMuX19zdG9wQW5pbVNjcm9sbCgpLHRoaXMuJHJlZnMuc2Nyb2xsZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuX191cGRhdGVTY3JvbGxJbmRpY2F0b3IsbGlzdGVuT3B0cy5wYXNzaXZlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMuX19yZWRyYXcsbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLl9fcmVkcmF3LmNhbmNlbCgpLHRoaXMuX191cGRhdGVTY3JvbGxJbmRpY2F0b3IuY2FuY2VsKCl9fSxUb3A9e2NvbXB1dGVkOnttYXJnaW5hbHNQcm9wczpmdW5jdGlvbigpe3JldHVybntwYWdpbmF0aW9uOnRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLHBhZ2VzTnVtYmVyOnRoaXMucGFnZXNOdW1iZXIsaXNGaXJzdFBhZ2U6dGhpcy5pc0ZpcnN0UGFnZSxpc0xhc3RQYWdlOnRoaXMuaXNMYXN0UGFnZSxwcmV2UGFnZTp0aGlzLnByZXZQYWdlLG5leHRQYWdlOnRoaXMubmV4dFBhZ2UsaW5GdWxsc2NyZWVuOnRoaXMuaW5GdWxsc2NyZWVuLHRvZ2dsZUZ1bGxzY3JlZW46dGhpcy50b2dnbGVGdWxsc2NyZWVufX19LG1ldGhvZHM6e2dldFRvcDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiRzY29wZWRTbG90cy50b3AsaT10aGlzLiRzY29wZWRTbG90c1tcInRvcC1sZWZ0XCJdLHM9dGhpcy4kc2NvcGVkU2xvdHNbXCJ0b3AtcmlnaHRcIl0sbj10aGlzLiRzY29wZWRTbG90c1tcInRvcC1zZWxlY3Rpb25cIl0sbz10aGlzLmhhc1NlbGVjdGlvbk1vZGUmJm4mJnRoaXMucm93c1NlbGVjdGVkTnVtYmVyPjAscj1cInEtdGFibGUtdG9wIHJlbGF0aXZlLXBvc2l0aW9uIHJvdyBpdGVtcy1jZW50ZXJcIixhPVtdO3JldHVybiBlP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6cn0sW2UodGhpcy5tYXJnaW5hbHNQcm9wcyldKToobz9hLnB1c2gobih0aGlzLm1hcmdpbmFsc1Byb3BzKSk6aT9hLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbaSh0aGlzLm1hcmdpbmFsc1Byb3BzKV0pKTp0aGlzLnRpdGxlJiZhLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtdGl0bGVcIn0sdGhpcy50aXRsZSldKSkscyYmKGEucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1zZXBhcmF0b3IgY29sXCJ9KSksYS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWNvbnRyb2xcIn0sW3ModGhpcy5tYXJnaW5hbHNQcm9wcyldKSkpLDAhPT1hLmxlbmd0aD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOnJ9LGEpOnZvaWQgMCl9fX0sUVRoPXtuYW1lOlwiUVRoXCIscHJvcHM6e3Byb3BzOk9iamVjdCxhdXRvV2lkdGg6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlLGk9dGhpcztpZighdGhpcy5wcm9wcylyZXR1cm4gdChcInRkXCIse2NsYXNzOntcInEtdGFibGUtY29sLWF1dG8td2lkdGhcIjp0aGlzLmF1dG9XaWR0aH19LHRoaXMuJHNsb3RzLmRlZmF1bHQpO3ZhciBzPXRoaXMuJHZub2RlLmtleSxuPVtdLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KTtpZihzKXtpZighKGU9dGhpcy5wcm9wcy5jb2xzTWFwW3NdKSlyZXR1cm59ZWxzZSBlPXRoaXMucHJvcHMuY29sO2Uuc29ydGFibGUmJm5bXCJyaWdodFwiPT09ZS5hbGlnbj9cInVuc2hpZnRcIjpcInB1c2hcIl0odChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLnRhYmxlLmFycm93VXB9LHN0YXRpY0NsYXNzOmUuX19pY29uQ2xhc3N9KSk7cmV0dXJuIHQoXCJ0aFwiLHtjbGFzczpbZS5fX3RoQ2xhc3Mse1wicS10YWJsZS1jb2wtYXV0by13aWR0aFwiOnRoaXMuYXV0b1dpZHRofV0sb246ZS5zb3J0YWJsZT97Y2xpY2s6ZnVuY3Rpb24oKXtpLnByb3BzLnNvcnQoZSl9fTpudWxsfSxuKX19LFRhYmxlSGVhZGVyPXttZXRob2RzOntnZXRUYWJsZUhlYWRlcjpmdW5jdGlvbih0KXt2YXIgZT1bdGhpcy5nZXRUYWJsZUhlYWRlclJvdyh0KV07cmV0dXJuIHRoaXMubG9hZGluZyYmZS5wdXNoKHQoXCJ0clwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtcHJvZ3Jlc3MgYW5pbWF0ZS1mYWRlXCJ9LFt0KFwidGRcIix7YXR0cnM6e2NvbHNwYW46XCIxMDAlXCJ9fSxbdChRUHJvZ3Jlc3Mse3Byb3BzOntjb2xvcjp0aGlzLmNvbG9yLGluZGV0ZXJtaW5hdGU6ITAsaGVpZ2h0OlwiMnB4XCJ9fSldKV0pKSx0KFwidGhlYWRcIixlKX0sZ2V0VGFibGVIZWFkZXJSb3c6ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLHM9dGhpcy4kc2NvcGVkU2xvdHMuaGVhZGVyLG49dGhpcy4kc2NvcGVkU2xvdHNbXCJoZWFkZXItY2VsbFwiXTtpZihzKXJldHVybiBzKHRoaXMuYWRkVGFibGVIZWFkZXJSb3dNZXRhKHtoZWFkZXI6ITAsY29sczp0aGlzLmNvbXB1dGVkQ29scyxzb3J0OnRoaXMuc29ydCxjb2xzTWFwOnRoaXMuY29tcHV0ZWRDb2xzTWFwfSkpO2U9bj9mdW5jdGlvbih0KXtyZXR1cm4gbih7Y29sOnQsY29sczppLmNvbXB1dGVkQ29scyxzb3J0Omkuc29ydCxjb2xzTWFwOmkuY29tcHV0ZWRDb2xzTWFwfSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0KFFUaCx7a2V5OmUubmFtZSxwcm9wczp7cHJvcHM6e2NvbDplLGNvbHM6aS5jb21wdXRlZENvbHMsc29ydDppLnNvcnQsY29sc01hcDppLmNvbXB1dGVkQ29sc01hcH19LHN0eWxlOmUuc3R5bGUsY2xhc3M6ZS5jbGFzc2VzfSxlLmxhYmVsKX07dmFyIG89dGhpcy5jb21wdXRlZENvbHMubWFwKGUpO3JldHVybiB0aGlzLnNpbmdsZVNlbGVjdGlvbiYmIXRoaXMuZ3JpZD9vLnVuc2hpZnQodChcInRoXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb2wtYXV0by13aWR0aFwifSxbXCIgXCJdKSk6dGhpcy5tdWx0aXBsZVNlbGVjdGlvbiYmby51bnNoaWZ0KHQoXCJ0aFwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29sLWF1dG8td2lkdGhcIn0sW3QoUUNoZWNrYm94LHtwcm9wczp7Y29sb3I6dGhpcy5jb2xvcix2YWx1ZTp0aGlzLnNvbWVSb3dzU2VsZWN0ZWQ/bnVsbDp0aGlzLmFsbFJvd3NTZWxlY3RlZCxkYXJrOnRoaXMuZGFya30sb246e2lucHV0OmZ1bmN0aW9uKHQpe2kuc29tZVJvd3NTZWxlY3RlZCYmKHQ9ITEpLGkuX191cGRhdGVTZWxlY3Rpb24oaS5jb21wdXRlZFJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0W2kucm93S2V5XX0pLGkuY29tcHV0ZWRSb3dzLHQpfX19KV0pKSx0KFwidHJcIixvKX0sYWRkVGFibGVIZWFkZXJSb3dNZXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMubXVsdGlwbGVTZWxlY3Rpb24mJihPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInNlbGVjdGVkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLnNvbWVSb3dzU2VsZWN0ZWQ/XCJzb21lXCI6ZS5hbGxSb3dzU2VsZWN0ZWR9LHNldDpmdW5jdGlvbih0KXtlLnNvbWVSb3dzU2VsZWN0ZWQmJih0PSExKSxlLl9fdXBkYXRlU2VsZWN0aW9uKGUuY29tcHV0ZWRSb3dzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFtlLnJvd0tleV19KSxlLmNvbXB1dGVkUm93cyx0KX19KSx0LnBhcnRpYWxTZWxlY3RlZD10aGlzLnNvbWVSb3dzU2VsZWN0ZWQsdC5tdWx0aXBsZVNlbGVjdD0hMCksdH19fSxUYWJsZUJvZHk9e21ldGhvZHM6e2dldFRhYmxlQm9keTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dGhpcy4kc2NvcGVkU2xvdHMuYm9keSxzPXRoaXMuJHNjb3BlZFNsb3RzW1wiYm9keS1jZWxsXCJdLG49dGhpcy4kc2NvcGVkU2xvdHNbXCJ0b3Atcm93XCJdLG89dGhpcy4kc2NvcGVkU2xvdHNbXCJib3R0b20tcm93XCJdLHI9W107cmV0dXJuIHI9aT90aGlzLmNvbXB1dGVkUm93cy5tYXAoZnVuY3Rpb24odCl7dmFyIHM9dFtlLnJvd0tleV0sbj1lLmlzUm93U2VsZWN0ZWQocyk7cmV0dXJuIGkoZS5hZGRCb2R5Um93TWV0YSh7a2V5OnMscm93OnQsY29sczplLmNvbXB1dGVkQ29scyxjb2xzTWFwOmUuY29tcHV0ZWRDb2xzTWFwLF9fdHJDbGFzczpuP1wic2VsZWN0ZWRcIjpcIlwifSkpfSk6dGhpcy5jb21wdXRlZFJvd3MubWFwKGZ1bmN0aW9uKGkpe3ZhciBuPWlbZS5yb3dLZXldLG89ZS5pc1Jvd1NlbGVjdGVkKG4pLHI9cz9lLmNvbXB1dGVkQ29scy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHMoZS5hZGRCb2R5Q2VsbE1ldGFEYXRhKHtyb3c6aSxjb2w6dH0pKX0pOmUuY29tcHV0ZWRDb2xzLm1hcChmdW5jdGlvbihzKXt2YXIgbj1lLiRzY29wZWRTbG90c1tcImJvZHktY2VsbC1cIitzLm5hbWVdO3JldHVybiBuP24oZS5hZGRCb2R5Q2VsbE1ldGFEYXRhKHtyb3c6aSxjb2w6c30pKTp0KFwidGRcIix7c3RhdGljQ2xhc3M6cy5fX3RkQ2xhc3Msc3R5bGU6cy5zdHlsZSxjbGFzczpzLmNsYXNzZXN9LGUuZ2V0Q2VsbFZhbHVlKHMsaSkpfSk7cmV0dXJuIGUuaGFzU2VsZWN0aW9uTW9kZSYmci51bnNoaWZ0KHQoXCJ0ZFwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29sLWF1dG8td2lkdGhcIn0sW3QoUUNoZWNrYm94LHtwcm9wczp7dmFsdWU6byxjb2xvcjplLmNvbG9yLGRhcms6ZS5kYXJrfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS5fX3VwZGF0ZVNlbGVjdGlvbihbbl0sW2ldLHQpfX19KV0pKSx0KFwidHJcIix7a2V5Om4sY2xhc3M6e3NlbGVjdGVkOm99fSxyKX0pLG4mJnIudW5zaGlmdChuKHtjb2xzOnRoaXMuY29tcHV0ZWRDb2xzfSkpLG8mJnIucHVzaChvKHtjb2xzOnRoaXMuY29tcHV0ZWRDb2xzfSkpLHQoXCJ0Ym9keVwiLHIpfSxhZGRCb2R5Um93TWV0YTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmhhc1NlbGVjdGlvbk1vZGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwic2VsZWN0ZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuaXNSb3dTZWxlY3RlZCh0LmtleSl9LHNldDpmdW5jdGlvbihpKXtlLl9fdXBkYXRlU2VsZWN0aW9uKFt0LmtleV0sW3Qucm93XSxpKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcImV4cGFuZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMD09PWUucm93c0V4cGFuZGVkW3Qua2V5XX0sc2V0OmZ1bmN0aW9uKGkpe2UuJHNldChlLnJvd3NFeHBhbmRlZCx0LmtleSxpKX19KSx0LmNvbHM9dC5jb2xzLm1hcChmdW5jdGlvbihpKXt2YXIgcz1PYmplY3QuYXNzaWduKHt9LGkpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocyxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLmdldENlbGxWYWx1ZShpLHQucm93KX19KSxzfSksdH0sYWRkQm9keUNlbGxNZXRhRGF0YTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLmdldENlbGxWYWx1ZSh0LmNvbCx0LnJvdyl9fSksdH0sZ2V0Q2VsbFZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdC5maWVsZD90LmZpZWxkKGUpOmVbdC5maWVsZF07cmV0dXJuIHQuZm9ybWF0P3QuZm9ybWF0KGkpOml9fX0sQm90dG9tPXtjb21wdXRlZDp7bmF2SWNvbjpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLiRxLmljb24udGFibGUucHJldlBhZ2UsdGhpcy4kcS5pY29uLnRhYmxlLm5leHRQYWdlXTtyZXR1cm4gdGhpcy4kcS5pMThuLnJ0bD90LnJldmVyc2UoKTp0fX0sbWV0aG9kczp7Z2V0Qm90dG9tOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLmhpZGVCb3R0b20pe2lmKHRoaXMubm90aGluZ1RvRGlzcGxheSl7dmFyIGU9dGhpcy5maWx0ZXI/dGhpcy5ub1Jlc3VsdHNMYWJlbHx8dGhpcy4kcS5pMThuLnRhYmxlLm5vUmVzdWx0czp0aGlzLmxvYWRpbmc/dGhpcy5sb2FkaW5nTGFiZWx8fHRoaXMuJHEuaTE4bi50YWJsZS5sb2FkaW5nOnRoaXMubm9EYXRhTGFiZWx8fHRoaXMuJHEuaTE4bi50YWJsZS5ub0RhdGE7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWJvdHRvbSByb3cgaXRlbXMtY2VudGVyIHEtdGFibGUtbm9kYXRhXCJ9LFt0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udGFibGUud2FybmluZ319KSxlXSl9dmFyIGk9dGhpcy4kc2NvcGVkU2xvdHMuYm90dG9tO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1ib3R0b20gcm93IGl0ZW1zLWNlbnRlclwiLGNsYXNzOmk/bnVsbDpcImp1c3RpZnktZW5kXCJ9LGk/W2kodGhpcy5tYXJnaW5hbHNQcm9wcyldOnRoaXMuZ2V0UGFnaW5hdGlvblJvdyh0KSl9fSxnZXRQYWdpbmF0aW9uUm93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5yb3dzUGVyUGFnZSxzPXRoaXMucGFnaW5hdGlvbkxhYmVsfHx0aGlzLiRxLmkxOG4udGFibGUucGFnaW5hdGlvbixuPXRoaXMuJHNjb3BlZFNsb3RzLnBhZ2luYXRpb247cmV0dXJuW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWNvbnRyb2xcIn0sW3QoXCJkaXZcIixbdGhpcy5oYXNTZWxlY3Rpb25Nb2RlJiZ0aGlzLnJvd3NTZWxlY3RlZE51bWJlcj4wPyh0aGlzLnNlbGVjdGVkUm93c0xhYmVsfHx0aGlzLiRxLmkxOG4udGFibGUuc2VsZWN0ZWRSZWNvcmRzKSh0aGlzLnJvd3NTZWxlY3RlZE51bWJlcik6XCJcIl0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtc2VwYXJhdG9yIGNvbFwifSksdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMubGVuZ3RoPjEmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWNvbnRyb2xcIn0sW3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1ib3R0b20taXRlbVwifSxbdGhpcy5yb3dzUGVyUGFnZUxhYmVsfHx0aGlzLiRxLmkxOG4udGFibGUucmVjb3Jkc1BlclBhZ2VdKSx0KFFTZWxlY3Qse3N0YXRpY0NsYXNzOlwiaW5saW5lIHEtdGFibGUtYm90dG9tLWl0ZW1cIixwcm9wczp7Y29sb3I6dGhpcy5jb2xvcix2YWx1ZTppLG9wdGlvbnM6dGhpcy5jb21wdXRlZFJvd3NQZXJQYWdlT3B0aW9ucyxkYXJrOnRoaXMuZGFyayxoaWRlVW5kZXJsaW5lOiEwfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS5zZXRQYWdpbmF0aW9uKHtwYWdlOjEscm93c1BlclBhZ2U6dH0pfX19KV0pfHx2b2lkIDAsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbbj9uKHRoaXMubWFyZ2luYWxzUHJvcHMpOlt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtYm90dG9tLWl0ZW1cIn0sW2k/cyh0aGlzLmZpcnN0Um93SW5kZXgrMSxNYXRoLm1pbih0aGlzLmxhc3RSb3dJbmRleCx0aGlzLmNvbXB1dGVkUm93c051bWJlciksdGhpcy5jb21wdXRlZFJvd3NOdW1iZXIpOnMoMSx0aGlzLmNvbXB1dGVkUm93c051bWJlcix0aGlzLmNvbXB1dGVkUm93c051bWJlcildKSx0KFFCdG4se3Byb3BzOntjb2xvcjp0aGlzLmNvbG9yLHJvdW5kOiEwLGljb246dGhpcy5uYXZJY29uWzBdLGRlbnNlOiEwLGZsYXQ6ITAsZGlzYWJsZTp0aGlzLmlzRmlyc3RQYWdlfSxvbjp7Y2xpY2s6dGhpcy5wcmV2UGFnZX19KSx0KFFCdG4se3Byb3BzOntjb2xvcjp0aGlzLmNvbG9yLHJvdW5kOiEwLGljb246dGhpcy5uYXZJY29uWzFdLGRlbnNlOiEwLGZsYXQ6ITAsZGlzYWJsZTp0aGlzLmlzTGFzdFBhZ2V9LG9uOntjbGljazp0aGlzLm5leHRQYWdlfX0pXV0pXX19fTtmdW5jdGlvbiBzb3J0RGF0ZSh0LGUpe3JldHVybiBuZXcgRGF0ZSh0KS1uZXcgRGF0ZShlKX12YXIgU29ydD17cHJvcHM6e3NvcnRNZXRob2Q6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpcy5jb2x1bW5zLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZT09PWV9KTtpZihudWxsPT09c3x8dm9pZCAwPT09cy5maWVsZClyZXR1cm4gdDt2YXIgbj1pPy0xOjEsbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzLmZpZWxkP2Z1bmN0aW9uKHQpe3JldHVybiBzLmZpZWxkKHQpfTpmdW5jdGlvbih0KXtyZXR1cm4gdFtzLmZpZWxkXX07cmV0dXJuIHQuc29ydChmdW5jdGlvbih0LGUpe3ZhciBpLHI9byh0KSxhPW8oZSk7cmV0dXJuIG51bGw9PT1yfHx2b2lkIDA9PT1yPy0xKm46bnVsbD09PWF8fHZvaWQgMD09PWE/MSpuOnMuc29ydD9zLnNvcnQocixhKSpuOmlzTnVtYmVyKHIpJiZpc051bWJlcihhKT8oci1hKSpuOmlzRGF0ZShyKSYmaXNEYXRlKGEpP3NvcnREYXRlKHIsYSkqbjpcImJvb2xlYW5cIj09dHlwZW9mIHImJlwiYm9vbGVhblwiPT10eXBlb2YgYT8odC1lKSpuOihyPShpPVtyLGFdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odCtcIlwiKS50b0xvd2VyQ2FzZSgpfSkpWzBdKTwoYT1pWzFdKT8tMSpuOnI9PT1hPzA6bn0pfX19LGNvbXB1dGVkOntjb2x1bW5Ub1NvcnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5zb3J0Qnk7aWYodClyZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09PXR9KXx8bnVsbH19LG1ldGhvZHM6e3NvcnQ6ZnVuY3Rpb24odCl7dD09PU9iamVjdCh0KSYmKHQ9dC5uYW1lKTt2YXIgZT10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbixpPWUuc29ydEJ5LHM9ZS5kZXNjZW5kaW5nO2khPT10PyhpPXQscz0hMSk6dGhpcy5iaW5hcnlTdGF0ZVNvcnQ/cz0hczpzP2k9bnVsbDpzPSEwLHRoaXMuc2V0UGFnaW5hdGlvbih7c29ydEJ5OmksZGVzY2VuZGluZzpzLHBhZ2U6MX0pfX19LEZpbHRlcj17cHJvcHM6e2ZpbHRlcjpbU3RyaW5nLE9iamVjdF0sZmlsdGVyTWV0aG9kOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6ZnVuY3Rpb24odCxlLGkscyl7dm9pZCAwPT09aSYmKGk9dGhpcy5jb21wdXRlZENvbHMpLHZvaWQgMD09PXMmJihzPXRoaXMuZ2V0Q2VsbFZhbHVlKTt2YXIgbj1lP2UudG9Mb3dlckNhc2UoKTpcIlwiO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gaS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybi0xIT09KHMoZSx0KStcIlwiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yobil9KX0pfX19LHdhdGNoOntmaWx0ZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5zZXRQYWdpbmF0aW9uKHtwYWdlOjF9LCEwKX0pfX19O2Z1bmN0aW9uIHNhbWVQYWdpbmF0aW9uKHQsZSl7Zm9yKHZhciBpIGluIGUpaWYoZVtpXSE9PXRbaV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZml4UGFnaW5hdGlvbih0KXtyZXR1cm4gdC5wYWdlPDEmJih0LnBhZ2U9MSksdm9pZCAwIT09dC5yb3dzUGVyUGFnZSYmdC5yb3dzUGVyUGFnZTwxJiYodC5yb3dzUGVyUGFnZT0wKSx0fXZhciBQYWdpbmF0aW9uPXtwcm9wczp7cGFnaW5hdGlvbjpPYmplY3Qscm93c1BlclBhZ2VPcHRpb25zOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bMyw1LDcsMTAsMTUsMjAsMjUsNTAsMF19fX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntpbm5lclBhZ2luYXRpb246e3NvcnRCeTpudWxsLGRlc2NlbmRpbmc6ITEscGFnZToxLHJvd3NQZXJQYWdlOjV9fX0sY29tcHV0ZWQ6e2NvbXB1dGVkUGFnaW5hdGlvbjpmdW5jdGlvbigpe3JldHVybiBmaXhQYWdpbmF0aW9uKE9iamVjdC5hc3NpZ24oe30sdGhpcy5pbm5lclBhZ2luYXRpb24sdGhpcy5wYWdpbmF0aW9uKSl9LGZpcnN0Um93SW5kZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbjtyZXR1cm4odC5wYWdlLTEpKnQucm93c1BlclBhZ2V9LGxhc3RSb3dJbmRleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uO3JldHVybiB0LnBhZ2UqdC5yb3dzUGVyUGFnZX0saXNGaXJzdFBhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnBhZ2V9LHBhZ2VzTnVtYmVyOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KDEsTWF0aC5jZWlsKHRoaXMuY29tcHV0ZWRSb3dzTnVtYmVyL3RoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnJvd3NQZXJQYWdlKSl9LGlzTGFzdFBhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGFzdFJvd0luZGV4fHx0aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5wYWdlPj10aGlzLnBhZ2VzTnVtYmVyfSxjb21wdXRlZFJvd3NQZXJQYWdlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucm93c1BlclBhZ2VPcHRpb25zLm1hcChmdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6MD09PWU/dC4kcS5pMThuLnRhYmxlLmFsbFJvd3M6XCJcIitlLHZhbHVlOmV9fSl9fSx3YXRjaDp7cGFnZXNOdW1iZXI6ZnVuY3Rpb24odCxlKXtpZih0IT09ZSl7dmFyIGk9dGhpcy5jb21wdXRlZFBhZ2luYXRpb24ucGFnZTt0JiYhaT90aGlzLnNldFBhZ2luYXRpb24oe3BhZ2U6MX0pOnQ8aSYmdGhpcy5zZXRQYWdpbmF0aW9uKHtwYWdlOnR9KX19fSxtZXRob2RzOntfX3NlbmRTZXJ2ZXJSZXF1ZXN0OmZ1bmN0aW9uKHQpe3RoaXMucmVxdWVzdFNlcnZlckludGVyYWN0aW9uKHtwYWdpbmF0aW9uOnQsZmlsdGVyOnRoaXMuZmlsdGVyfSl9LHNldFBhZ2luYXRpb246ZnVuY3Rpb24odCxlKXt2YXIgaT1maXhQYWdpbmF0aW9uKE9iamVjdC5hc3NpZ24oe30sdGhpcy5jb21wdXRlZFBhZ2luYXRpb24sdCkpO3NhbWVQYWdpbmF0aW9uKHRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLGkpP3RoaXMuaXNTZXJ2ZXJTaWRlJiZlJiZ0aGlzLl9fc2VuZFNlcnZlclJlcXVlc3QoaSk6dGhpcy5pc1NlcnZlclNpZGU/dGhpcy5fX3NlbmRTZXJ2ZXJSZXF1ZXN0KGkpOnRoaXMucGFnaW5hdGlvbj90aGlzLiRlbWl0KFwidXBkYXRlOnBhZ2luYXRpb25cIixpKTp0aGlzLmlubmVyUGFnaW5hdGlvbj1pfSxwcmV2UGFnZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnBhZ2U7dD4xJiZ0aGlzLnNldFBhZ2luYXRpb24oe3BhZ2U6dC0xfSl9LG5leHRQYWdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb21wdXRlZFBhZ2luYXRpb24sZT10LnBhZ2UsaT10LnJvd3NQZXJQYWdlO3RoaXMubGFzdFJvd0luZGV4PjAmJmUqaTx0aGlzLmNvbXB1dGVkUm93c051bWJlciYmdGhpcy5zZXRQYWdpbmF0aW9uKHtwYWdlOmUrMX0pfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuJGVtaXQoXCJ1cGRhdGU6cGFnaW5hdGlvblwiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5jb21wdXRlZFBhZ2luYXRpb24pKX19LFJvd1NlbGVjdGlvbj17cHJvcHM6e3NlbGVjdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIm5vbmVcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wic2luZ2xlXCIsXCJtdWx0aXBsZVwiLFwibm9uZVwiXS5pbmNsdWRlcyh0KX19LHNlbGVjdGVkOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxjb21wdXRlZDp7c2VsZWN0ZWRLZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXt9O3JldHVybiB0aGlzLnNlbGVjdGVkLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZVt0LnJvd0tleV19KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ITB9KSxlfSxoYXNTZWxlY3Rpb25Nb2RlOmZ1bmN0aW9uKCl7cmV0dXJuXCJub25lXCIhPT10aGlzLnNlbGVjdGlvbn0sc2luZ2xlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuXCJzaW5nbGVcIj09PXRoaXMuc2VsZWN0aW9ufSxtdWx0aXBsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVyblwibXVsdGlwbGVcIj09PXRoaXMuc2VsZWN0aW9ufSxhbGxSb3dzU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMubXVsdGlwbGVTZWxlY3Rpb24pcmV0dXJuIHRoaXMuY29tcHV0ZWRSb3dzLmxlbmd0aD4wJiZ0aGlzLmNvbXB1dGVkUm93cy5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4hMD09PXQuc2VsZWN0ZWRLZXlzW2VbdC5yb3dLZXldXX0pfSxzb21lUm93c1NlbGVjdGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLm11bHRpcGxlU2VsZWN0aW9uKXJldHVybiF0aGlzLmFsbFJvd3NTZWxlY3RlZCYmdGhpcy5jb21wdXRlZFJvd3Muc29tZShmdW5jdGlvbihlKXtyZXR1cm4hMD09PXQuc2VsZWN0ZWRLZXlzW2VbdC5yb3dLZXldXX0pfSxyb3dzU2VsZWN0ZWROdW1iZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZC5sZW5ndGh9fSxtZXRob2RzOntpc1Jvd1NlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09dGhpcy5zZWxlY3RlZEtleXNbdF19LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdChcInVwZGF0ZTpzZWxlY3RlZFwiLFtdKX0sX191cGRhdGVTZWxlY3Rpb246ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXRoaXM7dGhpcy5zaW5nbGVTZWxlY3Rpb24/dGhpcy4kZW1pdChcInVwZGF0ZTpzZWxlY3RlZFwiLGk/ZTpbXSk6dGhpcy4kZW1pdChcInVwZGF0ZTpzZWxlY3RlZFwiLGk/dGhpcy5zZWxlY3RlZC5jb25jYXQoZSk6dGhpcy5zZWxlY3RlZC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXQuaW5jbHVkZXMoZVtzLnJvd0tleV0pfSkpfX19LENvbHVtblNlbGVjdGlvbj17cHJvcHM6e3Zpc2libGVDb2x1bW5zOkFycmF5fSxjb21wdXRlZDp7Y29tcHV0ZWRDb2xzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLGk9ZS5zb3J0Qnkscz1lLmRlc2NlbmRpbmc7cmV0dXJuKHRoaXMudmlzaWJsZUNvbHVtbnM/dGhpcy5jb2x1bW5zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXF1aXJlZHx8dC52aXNpYmxlQ29sdW1ucy5pbmNsdWRlcyhlLm5hbWUpfSk6dGhpcy5jb2x1bW5zKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWxpZ249dC5hbGlnbnx8XCJyaWdodFwiLHQuX19pY29uQ2xhc3M9XCJxLXRhYmxlLXNvcnQtaWNvbiBxLXRhYmxlLXNvcnQtaWNvbi1cIit0LmFsaWduLHQuX190aENsYXNzPVwidGV4dC1cIit0LmFsaWduKyh0LnNvcnRhYmxlP1wiIHNvcnRhYmxlXCI6XCJcIikrKHQubmFtZT09PWk/XCIgc29ydGVkIFwiKyhzP1wic29ydC1kZXNjXCI6XCJcIik6XCJcIiksdC5fX3RkQ2xhc3M9XCJ0ZXh0LVwiK3QuYWxpZ24sdH0pfSxjb21wdXRlZENvbHNNYXA6ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5jb21wdXRlZENvbHMuZm9yRWFjaChmdW5jdGlvbihlKXt0W2UubmFtZV09ZX0pLHR9fX0sRXhwYW5kPXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Jvd3NFeHBhbmRlZDp7fX19fSxRVGFibGU9e25hbWU6XCJRVGFibGVcIixtaXhpbnM6W0Z1bGxzY3JlZW5NaXhpbixUb3AsVGFibGVIZWFkZXIsVGFibGVCb2R5LEJvdHRvbSxTb3J0LEZpbHRlcixQYWdpbmF0aW9uLFJvd1NlbGVjdGlvbixDb2x1bW5TZWxlY3Rpb24sRXhwYW5kXSxwcm9wczp7ZGF0YTp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuW119fSxyb3dLZXk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJpZFwifSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImdyZXktOFwifSxncmlkOkJvb2xlYW4sZGVuc2U6Qm9vbGVhbixjb2x1bW5zOkFycmF5LGxvYWRpbmc6Qm9vbGVhbix0aXRsZTpTdHJpbmcsaGlkZUhlYWRlcjpCb29sZWFuLGhpZGVCb3R0b206Qm9vbGVhbixkYXJrOkJvb2xlYW4sc2VwYXJhdG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiaG9yaXpvbnRhbFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJob3Jpem9udGFsXCIsXCJ2ZXJ0aWNhbFwiLFwiY2VsbFwiLFwibm9uZVwiXS5pbmNsdWRlcyh0KX19LGJpbmFyeVN0YXRlU29ydDpCb29sZWFuLG5vRGF0YUxhYmVsOlN0cmluZyxub1Jlc3VsdHNMYWJlbDpTdHJpbmcsbG9hZGluZ0xhYmVsOlN0cmluZyxzZWxlY3RlZFJvd3NMYWJlbDpGdW5jdGlvbixyb3dzUGVyUGFnZUxhYmVsOlN0cmluZyxwYWdpbmF0aW9uTGFiZWw6RnVuY3Rpb24sdGFibGVTdHlsZTp7dHlwZTpbU3RyaW5nLEFycmF5LE9iamVjdF0sZGVmYXVsdDpcIlwifSx0YWJsZUNsYXNzOnt0eXBlOltTdHJpbmcsQXJyYXksT2JqZWN0XSxkZWZhdWx0OlwiXCJ9fSxjb21wdXRlZDp7Y29tcHV0ZWREYXRhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKCkubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19pbmRleD1lLHR9KTtpZigwPT09dC5sZW5ndGgpcmV0dXJue3Jvd3NOdW1iZXI6MCxyb3dzOltdfTtpZih0aGlzLmlzU2VydmVyU2lkZSlyZXR1cm57cm93czp0fTt2YXIgZT10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbixpPWUuc29ydEJ5LHM9ZS5kZXNjZW5kaW5nLG49ZS5yb3dzUGVyUGFnZTt0aGlzLmZpbHRlciYmKHQ9dGhpcy5maWx0ZXJNZXRob2QodCx0aGlzLmZpbHRlcix0aGlzLmNvbXB1dGVkQ29scyx0aGlzLmdldENlbGxWYWx1ZSkpLHRoaXMuY29sdW1uVG9Tb3J0JiYodD10aGlzLnNvcnRNZXRob2QodCxpLHMpKTt2YXIgbz10Lmxlbmd0aDtyZXR1cm4gbiYmKHQ9dC5zbGljZSh0aGlzLmZpcnN0Um93SW5kZXgsdGhpcy5sYXN0Um93SW5kZXgpKSx7cm93c051bWJlcjpvLHJvd3M6dH19LGNvbXB1dGVkUm93czpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbXB1dGVkRGF0YS5yb3dzfSxjb21wdXRlZFJvd3NOdW1iZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1NlcnZlclNpZGU/dGhpcy5jb21wdXRlZFBhZ2luYXRpb24ucm93c051bWJlcnx8MDp0aGlzLmNvbXB1dGVkRGF0YS5yb3dzTnVtYmVyfSxub3RoaW5nVG9EaXNwbGF5OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmNvbXB1dGVkUm93cy5sZW5ndGh9LGlzU2VydmVyU2lkZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5yb3dzTnVtYmVyfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse2NsYXNzOntcInEtdGFibGUtZ3JpZFwiOnRoaXMuZ3JpZCxcInEtdGFibGUtY29udGFpbmVyXCI6ITAsXCJxLXRhYmxlLWRhcmtcIjp0aGlzLmRhcmssXCJxLXRhYmxlLWRlbnNlXCI6dGhpcy5kZW5zZSxmdWxsc2NyZWVuOnRoaXMuaW5GdWxsc2NyZWVuLHNjcm9sbDp0aGlzLmluRnVsbHNjcmVlbn19LFt0aGlzLmdldFRvcCh0KSx0aGlzLmdldEJvZHkodCksdGhpcy5nZXRCb3R0b20odCldKX0sbWV0aG9kczp7cmVxdWVzdFNlcnZlckludGVyYWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtlLiRlbWl0KFwicmVxdWVzdFwiLHtwYWdpbmF0aW9uOnQucGFnaW5hdGlvbnx8ZS5jb21wdXRlZFBhZ2luYXRpb24sZmlsdGVyOnQuZmlsdGVyfHxlLmZpbHRlcixnZXRDZWxsVmFsdWU6ZS5nZXRDZWxsVmFsdWV9KX0pfSxnZXRCb2R5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT0hdGhpcy5oaWRlSGVhZGVyO2lmKHRoaXMuZ3JpZCl7dmFyIHM9dGhpcy4kc2NvcGVkU2xvdHMuaXRlbTtpZih2b2lkIDAhPT1zKXJldHVybltpJiZ0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1taWRkbGUgc2Nyb2xsXCJ9LFt0KFwidGFibGVcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlXCIrKHRoaXMuZGFyaz9cIiBxLXRhYmxlLWRhcmtcIjpcIlwiKX0sW3RoaXMuZ2V0VGFibGVIZWFkZXIodCldKV0pfHxudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3dcIn0sdGhpcy5jb21wdXRlZFJvd3MubWFwKGZ1bmN0aW9uKHQpe3ZhciBpPXRbZS5yb3dLZXldLG49ZS5pc1Jvd1NlbGVjdGVkKGkpO3JldHVybiBzKGUuYWRkQm9keVJvd01ldGEoe2tleTppLHJvdzp0LGNvbHM6ZS5jb21wdXRlZENvbHMsY29sc01hcDplLmNvbXB1dGVkQ29sc01hcCxfX3RyQ2xhc3M6bj9cInNlbGVjdGVkXCI6XCJcIn0pKX0pKV19cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLW1pZGRsZSBzY3JvbGxcIixjbGFzczp0aGlzLnRhYmxlQ2xhc3Msc3R5bGU6dGhpcy50YWJsZVN0eWxlfSxbdChcInRhYmxlXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZSBxLXRhYmxlLVwiK3RoaXMuc2VwYXJhdG9yK1wiLXNlcGFyYXRvclwiKyh0aGlzLmRhcms/XCIgcS10YWJsZS1kYXJrXCI6XCJcIil9LFtpJiZ0aGlzLmdldFRhYmxlSGVhZGVyKHQpfHxudWxsLHRoaXMuZ2V0VGFibGVCb2R5KHQpXSldKX19fSxRVHI9e25hbWU6XCJRVHJcIixwcm9wczp7cHJvcHM6T2JqZWN0fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJ0clwiLCF0aGlzLnByb3BzfHx0aGlzLnByb3BzLmhlYWRlcj97fTp7Y2xhc3M6dGhpcy5wcm9wcy5fX3RyQ2xhc3N9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUVRkPXtuYW1lOlwiUVRkXCIscHJvcHM6e3Byb3BzOk9iamVjdCxhdXRvV2lkdGg6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnByb3BzKXJldHVybiB0KFwidGRcIix7Y2xhc3M6e1wicS10YWJsZS1jb2wtYXV0by13aWR0aFwiOnRoaXMuYXV0b1dpZHRofX0sdGhpcy4kc2xvdHMuZGVmYXVsdCk7dmFyIGUsaT10aGlzLiR2bm9kZS5rZXk7aWYoaSl7aWYoIShlPXRoaXMucHJvcHMuY29sc01hcFtpXSkpcmV0dXJufWVsc2UgZT10aGlzLnByb3BzLmNvbDtyZXR1cm4gdChcInRkXCIse2NsYXNzOltlLl9fdGRDbGFzcyx7XCJxLXRhYmxlLWNvbC1hdXRvLXdpZHRoXCI6dGhpcy5hdXRvV2lkdGh9XX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRVGFibGVDb2x1bW5zPXtuYW1lOlwiUVRhYmxlQ29sdW1uc1wiLHByb3BzOnt2YWx1ZTp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH0sbGFiZWw6U3RyaW5nLGNvbHVtbnM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LGNvbG9yOlN0cmluZyxkYXJrOkJvb2xlYW59LGNvbXB1dGVkOntjb21wdXRlZE9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5yZXF1aXJlZH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dmFsdWU6dC5uYW1lLGxhYmVsOnQubGFiZWx9fSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRU2VsZWN0LHtwcm9wczp7bXVsdGlwbGU6ITAsdG9nZ2xlOiEwLHZhbHVlOnRoaXMudmFsdWUsb3B0aW9uczp0aGlzLmNvbXB1dGVkT3B0aW9ucyxkaXNwbGF5VmFsdWU6dGhpcy5sYWJlbHx8dGhpcy4kcS5pMThuLnRhYmxlLmNvbHVtbnMsY29sb3I6dGhpcy5jb2xvcixkYXJrOnRoaXMuZGFyayxoaWRlVW5kZXJsaW5lOiEwfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS4kZW1pdChcImlucHV0XCIsdCl9LGNoYW5nZTpmdW5jdGlvbih0KXtlLiRlbWl0KFwiY2hhbmdlXCIsdCl9fX0pfX0sUVRpbWVsaW5lPXtuYW1lOlwiUVRpbWVsaW5lXCIscHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntfX3RpbWVsaW5lOnRoaXN9fSxwcm9wczp7Y29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHJlc3BvbnNpdmU6Qm9vbGVhbixub0hvdmVyOkJvb2xlYW4sZGFyazpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJ1bFwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmVcIixjbGFzczp7XCJxLXRpbWVsaW5lLWRhcmtcIjp0aGlzLmRhcmssXCJxLXRpbWVsaW5lLXJlc3BvbnNpdmVcIjp0aGlzLnJlc3BvbnNpdmUsXCJxLXRpbWVsaW5lLWhvdmVyXCI6IXRoaXMubm9Ib3Zlcn19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUVRpbWVsaW5lRW50cnk9e25hbWU6XCJRVGltZWxpbmVFbnRyeVwiLGluamVjdDp7X190aW1lbGluZTp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRVGltZWxpbmVFbnRyeSBuZWVkcyB0byBiZSBjaGlsZCBvZiBRVGltZWxpbmVcIil9fX0scHJvcHM6e2hlYWRpbmc6Qm9vbGVhbix0YWc6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJoM1wifSxzaWRlOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicmlnaHRcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wibGVmdFwiLFwicmlnaHRcIl0uaW5jbHVkZXModCl9fSxpY29uOlN0cmluZyxjb2xvcjpTdHJpbmcsdGl0bGU6U3RyaW5nLHN1YnRpdGxlOlN0cmluZ30sY29tcHV0ZWQ6e2NvbG9yQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5cInRleHQtXCIrKHRoaXMuY29sb3J8fHRoaXMuX190aW1lbGluZS5jb2xvcil9LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXCJxLXRpbWVsaW5lLWVudHJ5LVwiKyhcImxlZnRcIj09PXRoaXMuc2lkZT9cImxlZnRcIjpcInJpZ2h0XCIpLHRoaXMuaWNvbj9cInEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uXCI6XCJcIl19fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGVhZGluZz90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10aW1lbGluZS1oZWFkaW5nXCJ9LFt0KFwiZGl2XCIpLHQoXCJkaXZcIiksdCh0aGlzLnRhZyx7c3RhdGljQ2xhc3M6XCJxLXRpbWVsaW5lLWhlYWRpbmctdGl0bGVcIn0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKTp0KFwibGlcIix7c3RhdGljQ2xhc3M6XCJxLXRpbWVsaW5lLWVudHJ5XCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbdGhpcy4kc2xvdHMuc3VidGl0bGV8fHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRpbWVsaW5lLXN1YnRpdGxlXCJ9LFt0KFwic3BhblwiLHRoaXMuc3VidGl0bGUpXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtZG90XCIsY2xhc3M6dGhpcy5jb2xvckNsYXNzfSxbdGhpcy5pY29uP3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMuaWNvbn19KTpudWxsXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtY29udGVudFwifSwodGhpcy4kc2xvdHMudGl0bGV8fFt0KFwiaDZcIix7c3RhdGljQ2xhc3M6XCJxLXRpbWVsaW5lLXRpdGxlXCJ9LFt0aGlzLnRpdGxlXSldKS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCkpXSl9fSxRVG9vbGJhcj17bmFtZTpcIlFUb29sYmFyXCIscHJvcHM6e2NvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSx0ZXh0Q29sb3I6U3RyaW5nLGludmVydGVkOkJvb2xlYW4sZ2xvc3N5OkJvb2xlYW59LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W1wicS10b29sYmFyLVwiKyh0aGlzLmludmVydGVkP1wiaW52ZXJ0ZWRcIjpcIm5vcm1hbFwiKV07cmV0dXJuIHRoaXMuZ2xvc3N5JiZ0LnB1c2goXCJnbG9zc3lcIiksdGhpcy5pbnZlcnRlZD90LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8dGhpcy5jb2xvcikpOih0LnB1c2goXCJiZy1cIit0aGlzLmNvbG9yKSx0LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8XCJ3aGl0ZVwiKSkpLHR9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRvb2xiYXIgcm93IG5vLXdyYXAgaXRlbXMtY2VudGVyIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFUb29sYmFyVGl0bGU9e25hbWU6XCJRVG9vbGJhclRpdGxlXCIscHJvcHM6e3NocmluazpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRvb2xiYXItdGl0bGVcIixjbGFzczp0aGlzLnNocmluaz9cImNvbC1hdXRvXCI6bnVsbH0sW3RoaXMuJHNsb3RzLmRlZmF1bHQsdGhpcy4kc2xvdHMuc3VidGl0bGU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9vbGJhci1zdWJ0aXRsZVwifSx0aGlzLiRzbG90cy5zdWJ0aXRsZSk6bnVsbF0pfX0sUVRyZWU9e25hbWU6XCJRVHJlZVwiLGRpcmVjdGl2ZXM6e1JpcHBsZTpSaXBwbGV9LHByb3BzOntub2RlczpBcnJheSxub2RlS2V5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sbGFiZWxLZXk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJsYWJlbFwifSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImdyZXlcIn0sY29udHJvbENvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nLGRhcms6Qm9vbGVhbixpY29uOlN0cmluZyx0aWNrU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJub25lXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcIm5vbmVcIixcInN0cmljdFwiLFwibGVhZlwiLFwibGVhZi1maWx0ZXJlZFwiXS5pbmNsdWRlcyh0KX19LHRpY2tlZDpBcnJheSxleHBhbmRlZDpBcnJheSxzZWxlY3RlZDp7fSxkZWZhdWx0RXhwYW5kQWxsOkJvb2xlYW4sYWNjb3JkaW9uOkJvb2xlYW4sZmlsdGVyOlN0cmluZyxmaWx0ZXJNZXRob2Q6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmdW5jdGlvbih0LGUpe3ZhciBpPWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdFt0aGlzLmxhYmVsS2V5XSYmdFt0aGlzLmxhYmVsS2V5XS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoaSk+LTF9fSxkdXJhdGlvbjpOdW1iZXIsbm9Ob2Rlc0xhYmVsOlN0cmluZyxub1Jlc3VsdHNMYWJlbDpTdHJpbmd9LGNvbXB1dGVkOntoYXNSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub1JpcHBsZX0sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybltcInRleHQtXCIrdGhpcy5jb2xvcix7XCJxLXRyZWUtZGFya1wiOnRoaXMuZGFya31dfSxoYXNTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5zZWxlY3RlZH0sY29tcHV0ZWRJY29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8dGhpcy4kcS5pY29uLnRyZWUuaWNvbn0sY29tcHV0ZWRDb250cm9sQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sQ29sb3J8fHRoaXMuY29sb3J9LGNvbnRlbnRDbGFzczpmdW5jdGlvbigpe3JldHVyblwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fCh0aGlzLmRhcms/XCJ3aGl0ZVwiOlwiYmxhY2tcIikpfSxtZXRhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXt9LGk9ZnVuY3Rpb24ocyxuKXt2YXIgbz1zLnRpY2tTdHJhdGVneXx8KG4/bi50aWNrU3RyYXRlZ3k6dC50aWNrU3RyYXRlZ3kpLHI9c1t0Lm5vZGVLZXldLGE9cy5jaGlsZHJlbiYmcy5jaGlsZHJlbi5sZW5ndGg+MCxsPSFhLGM9IXMuZGlzYWJsZWQmJnQuaGFzU2VsZWN0aW9uJiYhMSE9PXMuc2VsZWN0YWJsZSxoPSFzLmRpc2FibGVkJiYhMSE9PXMuZXhwYW5kYWJsZSx1PVwibm9uZVwiIT09byxkPVwic3RyaWN0XCI9PT1vLHA9XCJsZWFmLWZpbHRlcmVkXCI9PT1vLGY9XCJsZWFmXCI9PT1vfHxcImxlYWYtZmlsdGVyZWRcIj09PW8sbT0hcy5kaXNhYmxlZCYmITEhPT1zLnRpY2thYmxlO2YmJm0mJm4mJiFuLnRpY2thYmxlJiYobT0hMSk7dmFyIGc9cy5sYXp5O2cmJnQubGF6eVtyXSYmKGc9dC5sYXp5W3JdKTt2YXIgdj17a2V5OnIscGFyZW50Om4saXNQYXJlbnQ6YSxpc0xlYWY6bCxsYXp5OmcsZGlzYWJsZWQ6cy5kaXNhYmxlZCxsaW5rOmN8fGgmJihhfHwhMD09PWcpLGNoaWxkcmVuOltdLG1hdGNoZXNGaWx0ZXI6IXQuZmlsdGVyfHx0LmZpbHRlck1ldGhvZChzLHQuZmlsdGVyKSxzZWxlY3RlZDpyPT09dC5zZWxlY3RlZCYmYyxzZWxlY3RhYmxlOmMsZXhwYW5kZWQ6ISFhJiZ0LmlubmVyRXhwYW5kZWQuaW5jbHVkZXMociksZXhwYW5kYWJsZTpoLG5vVGljazpzLm5vVGlja3x8IWQmJmcmJlwibG9hZGVkXCIhPT1nLHRpY2thYmxlOm0sdGlja1N0cmF0ZWd5Om8saGFzVGlja2luZzp1LHN0cmljdFRpY2tpbmc6ZCxsZWFmRmlsdGVyZWRUaWNraW5nOnAsbGVhZlRpY2tpbmc6Zix0aWNrZWQ6ZD90LmlubmVyVGlja2VkLmluY2x1ZGVzKHIpOiEhbCYmdC5pbm5lclRpY2tlZC5pbmNsdWRlcyhyKX07aWYoZVtyXT12LGEmJih2LmNoaWxkcmVuPXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQsdil9KSx0LmZpbHRlciYmKHYubWF0Y2hlc0ZpbHRlcnx8KHYubWF0Y2hlc0ZpbHRlcj12LmNoaWxkcmVuLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2hlc0ZpbHRlcn0pKSx2Lm1hdGNoZXNGaWx0ZXImJiF2Lm5vVGljayYmIXYuZGlzYWJsZWQmJnYudGlja2FibGUmJnAmJnYuY2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIXQubWF0Y2hlc0ZpbHRlcnx8dC5ub1RpY2t8fCF0LnRpY2thYmxlfSkmJih2LnRpY2thYmxlPSExKSksdi5tYXRjaGVzRmlsdGVyJiYodi5ub1RpY2t8fGR8fCF2LmNoaWxkcmVuLmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vVGlja30pfHwodi5ub1RpY2s9ITApLGYmJih2LnRpY2tlZD0hMSx2LmluZGV0ZXJtaW5hdGU9di5jaGlsZHJlbi5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluZGV0ZXJtaW5hdGV9KSwhdi5pbmRldGVybWluYXRlKSkpKXt2YXIgYj12LmNoaWxkcmVuLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBlLnRpY2tlZD90KzE6dH0sMCk7Yj09PXYuY2hpbGRyZW4ubGVuZ3RoP3YudGlja2VkPSEwOmI+MCYmKHYuaW5kZXRlcm1pbmF0ZT0hMCl9cmV0dXJuIHZ9O3JldHVybiB0aGlzLm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGkodCxudWxsKX0pLGV9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2xhenk6e30saW5uZXJUaWNrZWQ6dGhpcy50aWNrZWR8fFtdLGlubmVyRXhwYW5kZWQ6dGhpcy5leHBhbmRlZHx8W119fSx3YXRjaDp7dGlja2VkOmZ1bmN0aW9uKHQpe3RoaXMuaW5uZXJUaWNrZWQ9dH0sZXhwYW5kZWQ6ZnVuY3Rpb24odCl7dGhpcy5pbm5lckV4cGFuZGVkPXR9fSxtZXRob2RzOntnZXROb2RlQnlLZXk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPVtdLnJlZHVjZSxzPWZ1bmN0aW9uKG4sbyl7cmV0dXJuIG58fCFvP246QXJyYXkuaXNBcnJheShvKT9pLmNhbGwoT2JqZWN0KG8pLHMsbik6b1tlLm5vZGVLZXldPT09dD9vOm8uY2hpbGRyZW4/cyhudWxsLG8uY2hpbGRyZW4pOnZvaWQgMH07cmV0dXJuIHMobnVsbCx0aGlzLm5vZGVzKX0sZ2V0VGlja2VkTm9kZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmlubmVyVGlja2VkLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5nZXROb2RlQnlLZXkoZSl9KX0sZ2V0RXhwYW5kZWROb2RlczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaW5uZXJFeHBhbmRlZC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0Tm9kZUJ5S2V5KGUpfSl9LGlzRXhwYW5kZWQ6ZnVuY3Rpb24odCl7cmV0dXJuISghdHx8IXRoaXMubWV0YVt0XSkmJnRoaXMubWV0YVt0XS5leHBhbmRlZH0sY29sbGFwc2VBbGw6ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLmV4cGFuZGVkP3RoaXMuJGVtaXQoXCJ1cGRhdGU6ZXhwYW5kZWRcIixbXSk6dGhpcy5pbm5lckV4cGFuZGVkPVtdfSxleHBhbmRBbGw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5pbm5lckV4cGFuZGVkLGk9ZnVuY3Rpb24ocyl7cy5jaGlsZHJlbiYmcy5jaGlsZHJlbi5sZW5ndGg+MCYmITEhPT1zLmV4cGFuZGFibGUmJiEwIT09cy5kaXNhYmxlZCYmKGUucHVzaChzW3Qubm9kZUtleV0pLHMuY2hpbGRyZW4uZm9yRWFjaChpKSl9O3RoaXMubm9kZXMuZm9yRWFjaChpKSx2b2lkIDAhPT10aGlzLmV4cGFuZGVkP3RoaXMuJGVtaXQoXCJ1cGRhdGU6ZXhwYW5kZWRcIixlKTp0aGlzLmlubmVyRXhwYW5kZWQ9ZX0sc2V0RXhwYW5kZWQ6ZnVuY3Rpb24odCxlLGkscyl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1pJiYoaT10aGlzLmdldE5vZGVCeUtleSh0KSksdm9pZCAwPT09cyYmKHM9dGhpcy5tZXRhW3RdKSxzLmxhenkmJlwibG9hZGVkXCIhPT1zLmxhenkpe2lmKFwibG9hZGluZ1wiPT09cy5sYXp5KXJldHVybjt0aGlzLiRzZXQodGhpcy5sYXp5LHQsXCJsb2FkaW5nXCIpLHRoaXMuJGVtaXQoXCJsYXp5LWxvYWRcIix7bm9kZTppLGtleTp0LGRvbmU6ZnVuY3Rpb24oZSl7bi5sYXp5W3RdPVwibG9hZGVkXCIsZSYmKGkuY2hpbGRyZW49ZSksbi4kbmV4dFRpY2soZnVuY3Rpb24oKXt2YXIgZT1uLm1ldGFbdF07ZSYmZS5pc1BhcmVudCYmbi5fX3NldEV4cGFuZGVkKHQsITApfSl9LGZhaWw6ZnVuY3Rpb24oKXtuLiRkZWxldGUobi5sYXp5LHQpfX0pfWVsc2Ugcy5pc1BhcmVudCYmcy5leHBhbmRhYmxlJiZ0aGlzLl9fc2V0RXhwYW5kZWQodCxlKX0sX19zZXRFeHBhbmRlZDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMscz10aGlzLmlubmVyRXhwYW5kZWQsbj12b2lkIDAhPT10aGlzLmV4cGFuZGVkO2lmKG4mJihzPXMuc2xpY2UoKSksZSl7aWYodGhpcy5hY2NvcmRpb24mJnRoaXMubWV0YVt0XSl7dmFyIG89W107dGhpcy5tZXRhW3RdLnBhcmVudD90aGlzLm1ldGFbdF0ucGFyZW50LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5rZXkhPT10JiZlLmV4cGFuZGFibGUmJm8ucHVzaChlLmtleSl9KTp0aGlzLm5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHM9ZVtpLm5vZGVLZXldO3MhPT10JiZvLnB1c2gocyl9KSxvLmxlbmd0aD4wJiYocz1zLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hby5pbmNsdWRlcyh0KX0pKX1zPXMuY29uY2F0KFt0XSkuZmlsdGVyKGZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gaS5pbmRleE9mKHQpPT09ZX0pfWVsc2Ugcz1zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KTtuP3RoaXMuJGVtaXQoXCJ1cGRhdGU6ZXhwYW5kZWRcIixzKTp0aGlzLmlubmVyRXhwYW5kZWQ9c30saXNUaWNrZWQ6ZnVuY3Rpb24odCl7cmV0dXJuISghdHx8IXRoaXMubWV0YVt0XSkmJnRoaXMubWV0YVt0XS50aWNrZWR9LHNldFRpY2tlZDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuaW5uZXJUaWNrZWQscz12b2lkIDAhPT10aGlzLnRpY2tlZDtzJiYoaT1pLnNsaWNlKCkpLGk9ZT9pLmNvbmNhdCh0KS5maWx0ZXIoZnVuY3Rpb24odCxlLGkpe3JldHVybiBpLmluZGV4T2YodCk9PT1lfSk6aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXQuaW5jbHVkZXMoZSl9KSxzJiZ0aGlzLiRlbWl0KFwidXBkYXRlOnRpY2tlZFwiLGkpfSxfX2dldFNsb3RTY29wZTpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpcyxuPXt0cmVlOnRoaXMsbm9kZTp0LGtleTppLGNvbG9yOnRoaXMuY29sb3IsZGFyazp0aGlzLmRhcmt9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobixcImV4cGFuZGVkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLmV4cGFuZGVkfSxzZXQ6ZnVuY3Rpb24odCl7dCE9PWUuZXhwYW5kZWQmJnMuc2V0RXhwYW5kZWQoaSx0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixcInRpY2tlZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS50aWNrZWR9LHNldDpmdW5jdGlvbih0KXt0IT09ZS50aWNrZWQmJnMuc2V0VGlja2VkKFtpXSx0KX19KSxufSxfX2dldENoaWxkcmVuOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztyZXR1cm4odGhpcy5maWx0ZXI/ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGkubWV0YVt0W2kubm9kZUtleV1dLm1hdGNoZXNGaWx0ZXJ9KTplKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGkuX19nZXROb2RlKHQsZSl9KX0sX19nZXROb2RlTWVkaWE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5pY29uP3QoUUljb24se3N0YXRpY0NsYXNzOlwicS10cmVlLWljb24gcS1tci1zbVwiLHByb3BzOntuYW1lOmUuaWNvbixjb2xvcjplLmljb25Db2xvcn19KTplLmltZ3x8ZS5hdmF0YXI/dChcImltZ1wiLHtzdGF0aWNDbGFzczpcInEtdHJlZS1pbWcgcS1tci1zbVwiLGNsYXNzOnthdmF0YXI6ZS5hdmF0YXJ9LGF0dHJzOntzcmM6ZS5pbWd8fGUuYXZhdGFyfX0pOnZvaWQgMH0sX19nZXROb2RlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxzPWVbdGhpcy5ub2RlS2V5XSxuPXRoaXMubWV0YVtzXSxvPWUuaGVhZGVyJiZ0aGlzLiRzY29wZWRTbG90c1tcImhlYWRlci1cIitlLmhlYWRlcl18fHRoaXMuJHNjb3BlZFNsb3RzW1wiZGVmYXVsdC1oZWFkZXJcIl0scj1uLmlzUGFyZW50P3RoaXMuX19nZXRDaGlsZHJlbih0LGUuY2hpbGRyZW4pOltdLGE9ci5sZW5ndGg+MHx8bi5sYXp5JiZcImxvYWRlZFwiIT09bi5sYXp5LGw9ZS5ib2R5JiZ0aGlzLiRzY29wZWRTbG90c1tcImJvZHktXCIrZS5ib2R5XXx8dGhpcy4kc2NvcGVkU2xvdHNbXCJkZWZhdWx0LWJvZHlcIl0sYz1vfHxsP3RoaXMuX19nZXRTbG90U2NvcGUoZSxuLHMpOm51bGw7cmV0dXJuIGwmJihsPXQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRyZWUtbm9kZS1ib2R5IHJlbGF0aXZlLXBvc2l0aW9uXCJ9LFt0KFwiZGl2XCIse2NsYXNzOnRoaXMuY29udGVudENsYXNzfSxbbChjKV0pXSkpLHQoXCJkaXZcIix7a2V5OnMsc3RhdGljQ2xhc3M6XCJxLXRyZWUtbm9kZVwiLGNsYXNzOntcInEtdHJlZS1ub2RlLXBhcmVudFwiOmEsXCJxLXRyZWUtbm9kZS1jaGlsZFwiOiFhfX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRyZWUtbm9kZS1oZWFkZXIgcmVsYXRpdmUtcG9zaXRpb24gcm93IG5vLXdyYXAgaXRlbXMtY2VudGVyXCIsY2xhc3M6e1wicS10cmVlLW5vZGUtbGlua1wiOm4ubGluayxcInEtdHJlZS1ub2RlLXNlbGVjdGVkXCI6bi5zZWxlY3RlZCxkaXNhYmxlZDpuLmRpc2FibGVkfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtpLl9fb25DbGljayhlLG4pfX0sZGlyZWN0aXZlczpuLnNlbGVjdGFibGU/W3tuYW1lOlwicmlwcGxlXCJ9XTpudWxsfSxbXCJsb2FkaW5nXCI9PT1uLmxhenk/dChRU3Bpbm5lcix7c3RhdGljQ2xhc3M6XCJxLXRyZWUtbm9kZS1oZWFkZXItbWVkaWEgcS1tci14c1wiLHByb3BzOntjb2xvcjp0aGlzLmNvbXB1dGVkQ29udHJvbENvbG9yfX0pOmE/dChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLXRyZWUtYXJyb3cgcS1tci14cyB0cmFuc2l0aW9uLWdlbmVyaWNcIixjbGFzczp7XCJxLXRyZWUtYXJyb3ctcm90YXRlXCI6bi5leHBhbmRlZH0scHJvcHM6e25hbWU6dGhpcy5jb21wdXRlZEljb259LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbih0KXtpLl9fb25FeHBhbmRDbGljayhlLG4sdCl9fX0pOm51bGwsdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJyb3cgbm8td3JhcCBpdGVtcy1jZW50ZXJcIixjbGFzczp0aGlzLmNvbnRlbnRDbGFzc30sW24uaGFzVGlja2luZyYmIW4ubm9UaWNrP3QoUUNoZWNrYm94LHtzdGF0aWNDbGFzczpcInEtbXIteHNcIixwcm9wczp7dmFsdWU6bi5pbmRldGVybWluYXRlP251bGw6bi50aWNrZWQsY29sb3I6dGhpcy5jb21wdXRlZENvbnRyb2xDb2xvcixkYXJrOnRoaXMuZGFyayxrZWVwQ29sb3I6ITAsZGlzYWJsZTohbi50aWNrYWJsZX0sb246e2lucHV0OmZ1bmN0aW9uKHQpe2kuX19vblRpY2tlZENsaWNrKGUsbix0KX19fSk6bnVsbCxvP28oYyk6W3RoaXMuX19nZXROb2RlTWVkaWEodCxlKSx0KFwic3BhblwiLGVbdGhpcy5sYWJlbEtleV0pXV0pXSksYT90KFFTbGlkZVRyYW5zaXRpb24se3Byb3BzOntkdXJhdGlvbjp0aGlzLmR1cmF0aW9ufX0sW3QoXCJkaXZcIix7ZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIsdmFsdWU6bi5leHBhbmRlZH1dLHN0YXRpY0NsYXNzOlwicS10cmVlLW5vZGUtY29sbGFwc2libGVcIixjbGFzczpcInRleHQtXCIrdGhpcy5jb2xvcn0sW2wsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdHJlZS1jaGlsZHJlblwiLGNsYXNzOntkaXNhYmxlZDpuLmRpc2FibGVkfX0scildKV0pOmxdKX0sX19vbkNsaWNrOmZ1bmN0aW9uKHQsZSl7dGhpcy5oYXNTZWxlY3Rpb24/ZS5zZWxlY3RhYmxlJiZ0aGlzLiRlbWl0KFwidXBkYXRlOnNlbGVjdGVkXCIsZS5rZXkhPT10aGlzLnNlbGVjdGVkP2Uua2V5Om51bGwpOnRoaXMuX19vbkV4cGFuZENsaWNrKHQsZSksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5oYW5kbGVyJiZ0LmhhbmRsZXIodCl9LF9fb25FeHBhbmRDbGljazpmdW5jdGlvbih0LGUsaSl7dm9pZCAwIT09aSYmaS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnNldEV4cGFuZGVkKGUua2V5LCFlLmV4cGFuZGVkLHQsZSl9LF9fb25UaWNrZWRDbGljazpmdW5jdGlvbih0LGUsaSl7aWYoZS5pbmRldGVybWluYXRlJiZpJiYoaT0hMSksZS5zdHJpY3RUaWNraW5nKXRoaXMuc2V0VGlja2VkKFtlLmtleV0saSk7ZWxzZSBpZihlLmxlYWZUaWNraW5nKXt2YXIgcz1bXSxuPWZ1bmN0aW9uKHQpe3QuaXNQYXJlbnQ/KGl8fHQubm9UaWNrfHwhdC50aWNrYWJsZXx8cy5wdXNoKHQua2V5KSx0LmxlYWZUaWNraW5nJiZ0LmNoaWxkcmVuLmZvckVhY2gobikpOnQubm9UaWNrfHwhdC50aWNrYWJsZXx8dC5sZWFmRmlsdGVyZWRUaWNraW5nJiYhdC5tYXRjaGVzRmlsdGVyfHxzLnB1c2godC5rZXkpfTtuKGUpLHRoaXMuc2V0VGlja2VkKHMsaSl9fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19nZXRDaGlsZHJlbih0LHRoaXMubm9kZXMpO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10cmVlIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSwwPT09ZS5sZW5ndGg/dGhpcy5maWx0ZXI/dGhpcy5ub1Jlc3VsdHNMYWJlbHx8dGhpcy4kcS5pMThuLnRyZWUubm9SZXN1bHRzOnRoaXMubm9Ob2Rlc0xhYmVsfHx0aGlzLiRxLmkxOG4udHJlZS5ub05vZGVzOmUpfSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0RXhwYW5kQWxsJiZ0aGlzLmV4cGFuZEFsbCgpfX07ZnVuY3Rpb24gaW5pdEZpbGUodCl7dC5fX2RvbmVVcGxvYWRpbmc9ITEsdC5fX2ZhaWxlZD0hMSx0Ll9fdXBsb2FkZWQ9MCx0Ll9fcHJvZ3Jlc3M9MH12YXIgUVVwbG9hZGVyPXtuYW1lOlwiUVVwbG9hZGVyXCIsbWl4aW5zOltGcmFtZU1peGluXSxwcm9wczp7bmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImZpbGVcIn0saGVhZGVyczpPYmplY3QsdXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sdXJsRmFjdG9yeTp7dHlwZTpGdW5jdGlvbixyZXF1aXJlZDohMX0sdXBsb2FkRmFjdG9yeTpGdW5jdGlvbixhZGRpdGlvbmFsRmllbGRzOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LG5vQ29udGVudFR5cGU6Qm9vbGVhbixtZXRob2Q6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJQT1NUXCJ9LGZpbHRlcjpGdW5jdGlvbixleHRlbnNpb25zOlN0cmluZyxtdWx0aXBsZTpCb29sZWFuLGhpZGVVcGxvYWRCdXR0b246Qm9vbGVhbixoaWRlVXBsb2FkUHJvZ3Jlc3M6Qm9vbGVhbixub1RodW1ibmFpbHM6Qm9vbGVhbixhdXRvRXhwYW5kOkJvb2xlYW4sZXhwYW5kU3R5bGU6W0FycmF5LFN0cmluZyxPYmplY3RdLGV4cGFuZENsYXNzOltBcnJheSxTdHJpbmcsT2JqZWN0XSx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbixzZW5kUmF3Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cXVldWU6W10sZmlsZXM6W10sdXBsb2FkaW5nOiExLHVwbG9hZGVkU2l6ZTowLHRvdGFsU2l6ZTowLHhocnM6W10sZm9jdXNlZDohMSxkbmQ6ITEsZXhwYW5kZWQ6ITF9fSxjb21wdXRlZDp7cXVldWVMZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZS5sZW5ndGh9LGhhc0V4cGFuZGVkQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGVzLmxlbmd0aD4wfSxsYWJlbDpmdW5jdGlvbigpe3ZhciB0PWh1bWFuU3RvcmFnZVNpemUodGhpcy50b3RhbFNpemUpO3JldHVybiB0aGlzLnVwbG9hZGluZz90aGlzLnByb2dyZXNzLnRvRml4ZWQoMikrXCIlIChcIitodW1hblN0b3JhZ2VTaXplKHRoaXMudXBsb2FkZWRTaXplKStcIiAvIFwiK3QrXCIpXCI6dGhpcy5xdWV1ZUxlbmd0aCtcIiAoXCIrdCtcIilcIn0scHJvZ3Jlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b3RhbFNpemU/TWF0aC5taW4oOTkuOTksdGhpcy51cGxvYWRlZFNpemUvdGhpcy50b3RhbFNpemUqMTAwKTowfSxhZGREaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGV8fCF0aGlzLm11bHRpcGxlJiZ0aGlzLnF1ZXVlTGVuZ3RoPj0xfSxmaWxlc1N0eWxlOmZ1bmN0aW9uKCl7aWYodGhpcy5tYXhIZWlnaHQpcmV0dXJue21heEhlaWdodDp0aGlzLm1heEhlaWdodH19LGRuZENsYXNzOmZ1bmN0aW9uKCl7dmFyIHQ9W1widGV4dC1cIit0aGlzLmNvbG9yXTtyZXR1cm4gdGhpcy5pc0ludmVydGVkJiZ0LnB1c2goXCJpbnZlcnRlZFwiKSx0fSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJue1wicS11cGxvYWRlci1leHBhbmRlZFwiOnRoaXMuZXhwYW5kZWQsXCJxLXVwbG9hZGVyLWRhcmtcIjp0aGlzLmRhcmssXCJxLXVwbG9hZGVyLWZpbGVzLW5vLWJvcmRlclwiOnRoaXMuaXNJbnZlcnRlZHx8IXRoaXMuaGlkZVVuZGVybGluZX19LHByb2dyZXNzQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXJrP1wid2hpdGVcIjpcImdyZXlcIn0sY29tcHV0ZWRFeHRlbnNpb25zOmZ1bmN0aW9uKCl7aWYodGhpcy5leHRlbnNpb25zKXJldHVybiB0aGlzLmV4dGVuc2lvbnMuc3BsaXQoXCIsXCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odD10LnRyaW0oKSkuZW5kc1dpdGgoXCIvKlwiKSYmKHQ9dC5zbGljZSgwLHQubGVuZ3RoLTEpKSx0fSl9fSx3YXRjaDp7aGFzRXhwYW5kZWRDb250ZW50OmZ1bmN0aW9uKHQpeyExPT09dD90aGlzLmV4cGFuZGVkPSExOnRoaXMuYXV0b0V4cGFuZCYmKHRoaXMuZXhwYW5kZWQ9ITApfX0sbWV0aG9kczp7YWRkOmZ1bmN0aW9uKHQpe3QmJnRoaXMuX19hZGQobnVsbCx0KX0sX19vbkRyYWdPdmVyOmZ1bmN0aW9uKHQpe3N0b3BBbmRQcmV2ZW50KHQpLHRoaXMuZG5kPSEwfSxfX29uRHJhZ0xlYXZlOmZ1bmN0aW9uKHQpe3N0b3BBbmRQcmV2ZW50KHQpLHRoaXMuZG5kPSExfSxfX29uRHJvcDpmdW5jdGlvbih0KXtzdG9wQW5kUHJldmVudCh0KSx0aGlzLmRuZD0hMTt2YXIgZT10LmRhdGFUcmFuc2Zlci5maWxlczswIT09ZS5sZW5ndGgmJihlPXRoaXMubXVsdGlwbGU/ZTpbZVswXV0sdGhpcy5fX2FkZChudWxsLGUpKX0sX19maWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHQsZnVuY3Rpb24odCl7cmV0dXJuIGUuY29tcHV0ZWRFeHRlbnNpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQudHlwZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoZS50b1VwcGVyQ2FzZSgpKXx8dC5uYW1lLnRvVXBwZXJDYXNlKCkuZW5kc1dpdGgoZS50b1VwcGVyQ2FzZSgpKX0pfSl9LF9fYWRkOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztpZighdGhpcy5hZGREaXNhYmxlZCYmKGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZXx8dC50YXJnZXQuZmlsZXMpLCF0aGlzLmV4dGVuc2lvbnN8fDAhPT0oZT10aGlzLl9fZmlsdGVyKGUpKS5sZW5ndGgpKXt0aGlzLiRyZWZzLmZpbGUudmFsdWU9XCJcIjt2YXIgcz1bXTtlPWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFpLnF1ZXVlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQubmFtZT09PWUubmFtZX0pfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5maWx0ZXImJihlPXRoaXMuZmlsdGVyKGUpKSwoZT1lLm1hcChmdW5jdGlvbih0KXtpZihpbml0RmlsZSh0KSx0Ll9fc2l6ZT1odW1hblN0b3JhZ2VTaXplKHQuc2l6ZSksdC5fX3RpbWVzdGFtcD0obmV3IERhdGUpLmdldFRpbWUoKSxpLm5vVGh1bWJuYWlsc3x8IXQudHlwZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJJTUFHRVwiKSlpLnF1ZXVlLnB1c2godCk7ZWxzZXt2YXIgZT1uZXcgRmlsZVJlYWRlcixuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHMsbil7ZS5vbmxvYWQ9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IEltYWdlO24uc3JjPWUudGFyZ2V0LnJlc3VsdCx0Ll9faW1nPW4saS5xdWV1ZS5wdXNoKHQpLGkuX19jb21wdXRlVG90YWxTaXplKCkscyghMCl9LGUub25lcnJvcj1mdW5jdGlvbih0KXtuKHQpfX0pO2UucmVhZEFzRGF0YVVSTCh0KSxzLnB1c2gobil9cmV0dXJuIHR9KSkubGVuZ3RoPjAmJih0aGlzLmZpbGVzPXRoaXMuZmlsZXMuY29uY2F0KGUpLFByb21pc2UuYWxsKHMpLnRoZW4oZnVuY3Rpb24oKXtpLiRlbWl0KFwiYWRkXCIsZSl9KSx0aGlzLl9fY29tcHV0ZVRvdGFsU2l6ZSgpKX19LF9fY29tcHV0ZVRvdGFsU2l6ZTpmdW5jdGlvbigpe3RoaXMudG90YWxTaXplPXRoaXMucXVldWVMZW5ndGg/dGhpcy5xdWV1ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2l6ZX0pLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KTowfSxfX3JlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10Lm5hbWUsaT10Ll9fZG9uZVVwbG9hZGluZzt0aGlzLnVwbG9hZGluZyYmIWk/KHRoaXMuJGVtaXQoXCJyZW1vdmU6YWJvcnRcIix0LHQueGhyKSx0LnhociYmdC54aHIuYWJvcnQoKSx0aGlzLnVwbG9hZGVkU2l6ZS09dC5fX3VwbG9hZGVkKTp0aGlzLiRlbWl0KFwicmVtb3ZlOlwiKyhpP1wiZG9uZVwiOlwiY2FuY2VsXCIpLHQsdC54aHIpLGl8fCh0aGlzLnF1ZXVlPXRoaXMucXVldWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWUhPT1lfSkpLHQuX19yZW1vdmVkPSEwLHRoaXMuZmlsZXM9dGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZSE9PWV9KSx0aGlzLmZpbGVzLmxlbmd0aHx8KHRoaXMudXBsb2FkaW5nPSExKSx0aGlzLl9fY29tcHV0ZVRvdGFsU2l6ZSgpfSxfX3BpY2s6ZnVuY3Rpb24oKXshdGhpcy5hZGREaXNhYmxlZCYmdGhpcy4kcS5wbGF0Zm9ybS5pcy5tb3ppbGxhJiZ0aGlzLiRyZWZzLmZpbGUuY2xpY2soKX0sX19nZXRVcGxvYWRQcm9taXNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoaW5pdEZpbGUodCksdGhpcy51cGxvYWRGYWN0b3J5KXt2YXIgaT1mdW5jdGlvbihpKXt2YXIgcz1pKnQuc2l6ZTtlLnVwbG9hZGVkU2l6ZSs9cy10Ll9fdXBsb2FkZWQsdC5fX3VwbG9hZGVkPXMsdC5fX3Byb2dyZXNzPU1hdGgubWluKDk5LHBhcnNlSW50KDEwMCppLDEwKSksZS4kZm9yY2VVcGRhdGUoKX07cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHMsbil7ZS51cGxvYWRGYWN0b3J5KHQsaSkudGhlbihmdW5jdGlvbih0KXt0Ll9fZG9uZVVwbG9hZGluZz0hMCx0Ll9fcHJvZ3Jlc3M9MTAwLGUuJGVtaXQoXCJ1cGxvYWRlZFwiLHQpLGUuJGZvcmNlVXBkYXRlKCkscyh0KX0pLmNhdGNoKGZ1bmN0aW9uKGkpe3QuX19mYWlsZWQ9ITAsZS4kZW1pdChcImZhaWxcIix0KSxlLiRmb3JjZVVwZGF0ZSgpLG4oaSl9KX0pfXZhciBzPW5ldyBGb3JtRGF0YSxuPW5ldyBYTUxIdHRwUmVxdWVzdDt0cnl7dGhpcy5hZGRpdGlvbmFsRmllbGRzLmZvckVhY2goZnVuY3Rpb24odCl7cy5hcHBlbmQodC5uYW1lLHQudmFsdWUpfSksITAhPT10aGlzLm5vQ29udGVudFR5cGUmJnMuYXBwZW5kKFwiQ29udGVudC1UeXBlXCIsdC50eXBlfHxcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKSxzLmFwcGVuZCh0aGlzLm5hbWUsdCl9Y2F0Y2godCl7cmV0dXJufXJldHVybiB0Lnhocj1uLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7bi51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcihcInByb2dyZXNzXCIsZnVuY3Rpb24oaSl7aWYoIXQuX19yZW1vdmVkKXtpLnBlcmNlbnQ9aS50b3RhbD9pLmxvYWRlZC9pLnRvdGFsOjA7dmFyIHM9aS5wZXJjZW50KnQuc2l6ZTtlLnVwbG9hZGVkU2l6ZSs9cy10Ll9fdXBsb2FkZWQsdC5fX3VwbG9hZGVkPXMsdC5fX3Byb2dyZXNzPU1hdGgubWluKDk5LHBhcnNlSW50KDEwMCppLnBlcmNlbnQsMTApKX19LCExKSxuLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe24ucmVhZHlTdGF0ZTw0fHwobi5zdGF0dXMmJm4uc3RhdHVzPDQwMD8odC5fX2RvbmVVcGxvYWRpbmc9ITAsdC5fX3Byb2dyZXNzPTEwMCxlLiRlbWl0KFwidXBsb2FkZWRcIix0LG4pLGkodCkpOih0Ll9fZmFpbGVkPSEwLGUuJGVtaXQoXCJmYWlsXCIsdCxuKSxvKG4pKSl9LG4ub25lcnJvcj1mdW5jdGlvbigpe3QuX19mYWlsZWQ9ITAsZS4kZW1pdChcImZhaWxcIix0LG4pLG8obil9LChlLnVybEZhY3Rvcnk/ZS51cmxGYWN0b3J5KHQpOlByb21pc2UucmVzb2x2ZShlLnVybCkpLnRoZW4oZnVuY3Rpb24oaSl7bi5vcGVuKGUubWV0aG9kLGksITApLGUud2l0aENyZWRlbnRpYWxzJiYobi53aXRoQ3JlZGVudGlhbHM9ITApLGUuaGVhZGVycyYmT2JqZWN0LmtleXMoZS5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24uc2V0UmVxdWVzdEhlYWRlcih0LGUuaGVhZGVyc1t0XSl9KSxlLnhocnMucHVzaChuKSxlLnNlbmRSYXc/bi5zZW5kKHQpOm4uc2VuZChzKX0pfSl9LHBpY2s6ZnVuY3Rpb24oKXt0aGlzLmFkZERpc2FibGVkfHx0aGlzLiRyZWZzLmZpbGUuY2xpY2soKX0sdXBsb2FkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMucXVldWVMZW5ndGg7aWYoIXRoaXMuZGlzYWJsZSYmMCE9PWUpe3ZhciBpPTA7dGhpcy51cGxvYWRlZFNpemU9MCx0aGlzLnVwbG9hZGluZz0hMCx0aGlzLnhocnM9W10sdGhpcy4kZW1pdChcInN0YXJ0XCIpO3ZhciBzPWZ1bmN0aW9uKCl7KytpPT09ZSYmKHQudXBsb2FkaW5nPSExLHQueGhycz1bXSx0LnF1ZXVlPXQucXVldWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0Ll9fZG9uZVVwbG9hZGluZ30pLHQuX19jb21wdXRlVG90YWxTaXplKCksdC4kZW1pdChcImZpbmlzaFwiKSl9O3RoaXMucXVldWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9fZ2V0VXBsb2FkUHJvbWlzZShlKX0pLmZvckVhY2goZnVuY3Rpb24odCl7dC50aGVuKHMpLmNhdGNoKHMpfSl9fSxhYm9ydDpmdW5jdGlvbigpe3RoaXMueGhycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuYWJvcnQoKX0pLHRoaXMudXBsb2FkaW5nPSExLHRoaXMuJGVtaXQoXCJhYm9ydFwiKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmFib3J0KCksdGhpcy5maWxlcz1bXSx0aGlzLnF1ZXVlPVtdLHRoaXMuZXhwYW5kZWQ9ITEsdGhpcy5fX2NvbXB1dGVUb3RhbFNpemUoKSx0aGlzLiRlbWl0KFwicmVzZXRcIil9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPVt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtaW5wdXQtdGFyZ2V0IGVsbGlwc2lzXCIsY2xhc3M6dGhpcy5hbGlnbkNsYXNzfSxbdGhpcy5sYWJlbF0pXTtyZXR1cm4gdGhpcy51cGxvYWRpbmc/aS5wdXNoKHRoaXMuJHNsb3RzLmxvYWRpbmc/dChcImRpdlwiLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtZW5kIHNlbGYtY2VudGVyIHEtaWYtY29udHJvbFwifSx0aGlzLiRzbG90cy5sb2FkaW5nKTp0KFFTcGlubmVyLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtZW5kIHNlbGYtY2VudGVyXCIscHJvcHM6e3NpemU6XCIyNHB4XCJ9fSksdChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLWlmLWVuZCBzZWxmLWNlbnRlciBxLWlmLWNvbnRyb2xcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udXBsb2FkZXJbXCJjbGVhclwiKyh0aGlzLmlzSW52ZXJ0ZWQ/XCJJbnZlcnRlZFwiOlwiXCIpXX0sbmF0aXZlT246e2NsaWNrOnRoaXMuYWJvcnR9fSkpOihpLnB1c2godChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLXBpY2stYnV0dG9uIHNlbGYtY2VudGVyIHEtaWYtY29udHJvbCByZWxhdGl2ZS1wb3NpdGlvbiBvdmVyZmxvdy1oaWRkZW5cIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udXBsb2FkZXIuYWRkfSxhdHRyczp7ZGlzYWJsZWQ6dGhpcy5hZGREaXNhYmxlZH19LFt0KFwiaW5wdXRcIix7cmVmOlwiZmlsZVwiLHN0YXRpY0NsYXNzOlwicS11cGxvYWRlci1pbnB1dCBhYnNvbHV0ZS1mdWxsIGN1cnNvci1wb2ludGVyXCIsYXR0cnM6T2JqZWN0LmFzc2lnbih7dHlwZTpcImZpbGVcIixhY2NlcHQ6dGhpcy5leHRlbnNpb25zfSx0aGlzLm11bHRpcGxlP3ttdWx0aXBsZTohMH06e30pLG9uOntjaGFuZ2U6dGhpcy5fX2FkZH19KV0pKSx0aGlzLmhpZGVVcGxvYWRCdXR0b258fGkucHVzaCh0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbCBzZWxmLWNlbnRlclwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi51cGxvYWRlci51cGxvYWR9LGF0dHJzOntkaXNhYmxlZDowPT09dGhpcy5xdWV1ZUxlbmd0aH0sbmF0aXZlT246e2NsaWNrOnRoaXMudXBsb2FkfX0pKSksdGhpcy5oYXNFeHBhbmRlZENvbnRlbnQmJmkucHVzaCh0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbCBnZW5lcmljX3RyYW5zaXRpb24gc2VsZi1jZW50ZXJcIixjbGFzczp7XCJyb3RhdGUtMTgwXCI6dGhpcy5leHBhbmRlZH0scHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLnVwbG9hZGVyLmV4cGFuZH0sbmF0aXZlT246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5leHBhbmRlZD0hZS5leHBhbmRlZH19fSkpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzLG9uOntkcmFnb3Zlcjp0aGlzLl9fb25EcmFnT3Zlcn19LFt0KFFJbnB1dEZyYW1lLHtyZWY6XCJpbnB1dFwiLHByb3BzOntwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLGVycm9yOnRoaXMuZXJyb3Isd2FybmluZzp0aGlzLndhcm5pbmcscmVhZG9ubHk6dGhpcy5yZWFkb25seSxpbnZlcnRlZDp0aGlzLmludmVydGVkLGludmVydGVkTGlnaHQ6dGhpcy5pbnZlcnRlZExpZ2h0LGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6dGhpcy5oaWRlVW5kZXJsaW5lLGJlZm9yZTp0aGlzLmJlZm9yZSxhZnRlcjp0aGlzLmFmdGVyLGNvbG9yOnRoaXMuY29sb3IsYWxpZ246dGhpcy5hbGlnbixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxsZW5ndGg6dGhpcy5xdWV1ZUxlbmd0aCxhZGRpdGlvbmFsTGVuZ3RoOiEwfX0saSksdChRU2xpZGVUcmFuc2l0aW9uLFt0KFwiZGl2XCIse2NsYXNzOnRoaXMuZXhwYW5kQ2xhc3Msc3R5bGU6dGhpcy5leHBhbmRTdHlsZSxkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTp0aGlzLmV4cGFuZGVkfV19LFt0KFFMaXN0LHtzdGF0aWNDbGFzczpcInEtdXBsb2FkZXItZmlsZXMgcS1weS1ub25lIHNjcm9sbFwiLHN0eWxlOnRoaXMuZmlsZXNTdHlsZSxwcm9wczp7ZGFyazp0aGlzLmRhcmt9fSx0aGlzLmZpbGVzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChRSXRlbSx7a2V5OmkubmFtZStpLl9fdGltZXN0YW1wLHN0YXRpY0NsYXNzOlwicS11cGxvYWRlci1maWxlIHEtcGEteHNcIn0sWyFlLmhpZGVVcGxvYWRQcm9ncmVzcyYmdChRUHJvZ3Jlc3Mse3N0YXRpY0NsYXNzOlwicS11cGxvYWRlci1wcm9ncmVzcy1iZyBhYnNvbHV0ZS1mdWxsXCIscHJvcHM6e2NvbG9yOmkuX19mYWlsZWQ/XCJuZWdhdGl2ZVwiOmUucHJvZ3Jlc3NDb2xvcixwZXJjZW50YWdlOmkuX19wcm9ncmVzcyxoZWlnaHQ6XCIxMDAlXCJ9fSl8fHZvaWQgMCwhZS5oaWRlVXBsb2FkUHJvZ3Jlc3MmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLXByb2dyZXNzLXRleHQgYWJzb2x1dGVcIn0sW2kuX19wcm9ncmVzcytcIiVcIl0pfHx2b2lkIDAsdChRSXRlbVNpZGUse3Byb3BzOmkuX19pbWc/e2ltYWdlOmkuX19pbWcuc3JjfTp7aWNvbjplLiRxLmljb24udXBsb2FkZXIuZmlsZSxjb2xvcjplLmNvbG9yfX0pLHQoUUl0ZW1NYWluLHtwcm9wczp7bGFiZWw6aS5uYW1lLHN1YmxhYmVsOmkuX19zaXplfX0pLHQoUUl0ZW1TaWRlLHtwcm9wczp7cmlnaHQ6ITB9fSxbdChRSXRlbVRpbGUse3N0YXRpY0NsYXNzOlwiY3Vyc29yLXBvaW50ZXJcIixwcm9wczp7aWNvbjplLiRxLmljb24udXBsb2FkZXJbaS5fX2RvbmVVcGxvYWRpbmc/XCJkb25lXCI6XCJjbGVhclwiXSxjb2xvcjplLmNvbG9yfSxuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLl9fcmVtb3ZlKGkpfX19KV0pXSl9KSldKV0pLHRoaXMuZG5kJiZ0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS11cGxvYWRlci1kbmQgZmxleCByb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGFic29sdXRlLWZ1bGxcIixjbGFzczp0aGlzLmRuZENsYXNzLG9uOntkcmFnZW50ZXI6c3RvcEFuZFByZXZlbnQsZHJhZ292ZXI6c3RvcEFuZFByZXZlbnQsZHJhZ2xlYXZlOnRoaXMuX19vbkRyYWdMZWF2ZSxkcm9wOnRoaXMuX19vbkRyb3B9fSl8fHZvaWQgMF0pfX0sUVZpZGVvPXtuYW1lOlwiUVZpZGVvXCIscHJvcHM6e3NyYzp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxjb21wdXRlZDp7aWZyYW1lRGF0YTpmdW5jdGlvbigpe3JldHVybnthdHRyczp7c3JjOnRoaXMuc3JjLGZyYW1lYm9yZGVyOlwiMFwiLGFsbG93ZnVsbHNjcmVlbjohMH19fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS12aWRlb1wifSxbdChcImlmcmFtZVwiLHRoaXMuaWZyYW1lRGF0YSldKX19LGNvbXBvbmVudHMkMT1PYmplY3QuZnJlZXplKHtRQWN0aW9uU2hlZXQ6UUFjdGlvblNoZWV0LFFBamF4QmFyOlFBamF4QmFyLFFBbGVydDpRQWxlcnQsUUF1dG9jb21wbGV0ZTpRQXV0b2NvbXBsZXRlLFFCcmVhZGNydW1iczpRQnJlYWRjcnVtYnMsUUJyZWFkY3J1bWJzRWw6UUJyZWFkY3J1bWJzRWwsUUJ0bjpRQnRuLFFCdG5Hcm91cDpRQnRuR3JvdXAsUUJ0bkRyb3Bkb3duOlFCdG5Ecm9wZG93bixRQnRuVG9nZ2xlOlFCdG5Ub2dnbGUsUUNhcmQ6UUNhcmQsUUNhcmRUaXRsZTpRQ2FyZFRpdGxlLFFDYXJkTWFpbjpRQ2FyZE1haW4sUUNhcmRBY3Rpb25zOlFDYXJkQWN0aW9ucyxRQ2FyZE1lZGlhOlFDYXJkTWVkaWEsUUNhcmRTZXBhcmF0b3I6UUNhcmRTZXBhcmF0b3IsUUNhcm91c2VsOlFDYXJvdXNlbCxRQ2Fyb3VzZWxTbGlkZTpRQ2Fyb3VzZWxTbGlkZSxRQ2Fyb3VzZWxDb250cm9sOlFDYXJvdXNlbENvbnRyb2wsUUNoYXRNZXNzYWdlOlFDaGF0TWVzc2FnZSxRQ2hlY2tib3g6UUNoZWNrYm94LFFDaGlwOlFDaGlwLFFDaGlwc0lucHV0OlFDaGlwc0lucHV0LFFDb2xsYXBzaWJsZTpRQ29sbGFwc2libGUsUUNvbG9yOlFDb2xvcixRQ29sb3JQaWNrZXI6UUNvbG9yUGlja2VyLFFDb250ZXh0TWVudTpRQ29udGV4dE1lbnUsUURhdGV0aW1lOlFEYXRldGltZSxRRGF0ZXRpbWVQaWNrZXI6UURhdGV0aW1lUGlja2VyLFFEaWFsb2c6UURpYWxvZyxRRWRpdG9yOlFFZGl0b3IsUUZhYjpRRmFiLFFGYWJBY3Rpb246UUZhYkFjdGlvbixRRmllbGQ6UUZpZWxkLFFJY29uOlFJY29uLFFJbmZpbml0ZVNjcm9sbDpRSW5maW5pdGVTY3JvbGwsUUlubmVyTG9hZGluZzpRSW5uZXJMb2FkaW5nLFFJbnB1dDpRSW5wdXQsUUlucHV0RnJhbWU6UUlucHV0RnJhbWUsUUp1bWJvdHJvbjpRSnVtYm90cm9uLFFLbm9iOlFLbm9iLFFMYXlvdXQ6UUxheW91dCxRTGF5b3V0RHJhd2VyOlFMYXlvdXREcmF3ZXIsUUxheW91dEZvb3RlcjpRTGF5b3V0Rm9vdGVyLFFMYXlvdXRIZWFkZXI6UUxheW91dEhlYWRlcixRUGFnZTpRUGFnZSxRUGFnZUNvbnRhaW5lcjpRUGFnZUNvbnRhaW5lcixRUGFnZVN0aWNreTpRUGFnZVN0aWNreSxRSXRlbTpRSXRlbSxRSXRlbVNlcGFyYXRvcjpRSXRlbVNlcGFyYXRvcixRSXRlbU1haW46UUl0ZW1NYWluLFFJdGVtU2lkZTpRSXRlbVNpZGUsUUl0ZW1UaWxlOlFJdGVtVGlsZSxRSXRlbVdyYXBwZXI6UUl0ZW1XcmFwcGVyLFFMaXN0OlFMaXN0LFFMaXN0SGVhZGVyOlFMaXN0SGVhZGVyLFFNb2RhbDpRTW9kYWwsUU1vZGFsTGF5b3V0OlFNb2RhbExheW91dCxRTm9Tc3I6UU5vU3NyLFFSZXNpemVPYnNlcnZhYmxlOlFSZXNpemVPYnNlcnZhYmxlLFFTY3JvbGxPYnNlcnZhYmxlOlFTY3JvbGxPYnNlcnZhYmxlLFFXaW5kb3dSZXNpemVPYnNlcnZhYmxlOlFXaW5kb3dSZXNpemVPYnNlcnZhYmxlLFFPcHRpb25Hcm91cDpRT3B0aW9uR3JvdXAsUVBhZ2luYXRpb246UVBhZ2luYXRpb24sUVBhcmFsbGF4OlFQYXJhbGxheCxRUG9wb3ZlcjpRUG9wb3ZlcixRUG9wdXBFZGl0OlFQb3B1cEVkaXQsUVByb2dyZXNzOlFQcm9ncmVzcyxRUHVsbFRvUmVmcmVzaDpRUHVsbFRvUmVmcmVzaCxRUmFkaW86UVJhZGlvLFFSYW5nZTpRUmFuZ2UsUVJhdGluZzpRUmF0aW5nLFFTY3JvbGxBcmVhOlFTY3JvbGxBcmVhLFFTZWFyY2g6UVNlYXJjaCxRU2VsZWN0OlFTZWxlY3QsUVNsaWRlVHJhbnNpdGlvbjpRU2xpZGVUcmFuc2l0aW9uLFFTbGlkZXI6UVNsaWRlcixRU3Bpbm5lcjpRU3Bpbm5lcixRU3Bpbm5lckF1ZGlvOlFTcGlubmVyQXVkaW8sUVNwaW5uZXJCYWxsOlFTcGlubmVyQmFsbCxRU3Bpbm5lckJhcnM6UVNwaW5uZXJCYXJzLFFTcGlubmVyQ2lyY2xlczpRU3Bpbm5lckNpcmNsZXMsUVNwaW5uZXJDb21tZW50OlFTcGlubmVyQ29tbWVudCxRU3Bpbm5lckN1YmU6UVNwaW5uZXJDdWJlLFFTcGlubmVyRG90czpRU3Bpbm5lckRvdHMsUVNwaW5uZXJGYWNlYm9vazpRU3Bpbm5lckZhY2Vib29rLFFTcGlubmVyR2VhcnM6UVNwaW5uZXJHZWFycyxRU3Bpbm5lckdyaWQ6UVNwaW5uZXJHcmlkLFFTcGlubmVySGVhcnRzOlFTcGlubmVySGVhcnRzLFFTcGlubmVySG91cmdsYXNzOlFTcGlubmVySG91cmdsYXNzLFFTcGlubmVySW5maW5pdHk6UVNwaW5uZXJJbmZpbml0eSxRU3Bpbm5lcklvczpRU3Bpbm5lcl9pb3MsUVNwaW5uZXJNYXQ6RGVmYXVsdFNwaW5uZXIsUVNwaW5uZXJPdmFsOlFTcGlubmVyT3ZhbCxRU3Bpbm5lclBpZTpRU3Bpbm5lclBpZSxRU3Bpbm5lclB1ZmY6UVNwaW5uZXJQdWZmLFFTcGlubmVyUmFkaW86UVNwaW5uZXJSYWRpbyxRU3Bpbm5lclJpbmdzOlFTcGlubmVyUmluZ3MsUVNwaW5uZXJUYWlsOlFTcGlubmVyVGFpbCxRU3RlcDpRU3RlcCxRU3RlcHBlcjpRU3RlcHBlcixRU3RlcHBlck5hdmlnYXRpb246UVN0ZXBwZXJOYXZpZ2F0aW9uLFFSb3V0ZVRhYjpRUm91dGVUYWIsUVRhYjpRVGFiLFFUYWJQYW5lOlFUYWJQYW5lLFFUYWJzOlFUYWJzLFFUYWJsZTpRVGFibGUsUVRoOlFUaCxRVHI6UVRyLFFUZDpRVGQsUVRhYmxlQ29sdW1uczpRVGFibGVDb2x1bW5zLFFUaW1lbGluZTpRVGltZWxpbmUsUVRpbWVsaW5lRW50cnk6UVRpbWVsaW5lRW50cnksUVRvZ2dsZTpRVG9nZ2xlLFFUb29sYmFyOlFUb29sYmFyLFFUb29sYmFyVGl0bGU6UVRvb2xiYXJUaXRsZSxRVG9vbHRpcDpRVG9vbHRpcCxRVHJlZTpRVHJlZSxRVXBsb2FkZXI6UVVwbG9hZGVyLFFWaWRlbzpRVmlkZW99KTtmdW5jdGlvbiB1cGRhdGVCaW5kaW5nKHQsZSl7dmFyIGk9ZS52YWx1ZSxzPShlLm1vZGlmaWVycyx0Ll9fcWJhY2t0b3RvcCk7aWYoaSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGkpcmV0dXJuIHMub2Zmc2V0PWksdm9pZCBzLnVwZGF0ZSgpO2lmKGkmJk9iamVjdChpKSE9PWkpY29uc29sZS5lcnJvcihcInYtYmFjay10by10b3AgcmVxdWlyZXMgYW4gb2JqZWN0IHtvZmZzZXQsIGR1cmF0aW9ufSBhcyBwYXJhbWV0ZXJcIix0KTtlbHNle2lmKGkub2Zmc2V0KXtpZihcIm51bWJlclwiIT10eXBlb2YgaS5vZmZzZXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcInYtYmFjay10by10b3AgcmVxdWlyZXMgYSBudW1iZXIgYXMgb2Zmc2V0XCIsdCk7cy5vZmZzZXQ9aS5vZmZzZXR9aWYoaS5kdXJhdGlvbil7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGkuZHVyYXRpb24pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcInYtYmFjay10by10b3AgcmVxdWlyZXMgYSBudW1iZXIgYXMgZHVyYXRpb25cIix0KTtzLmR1cmF0aW9uPWkuZHVyYXRpb259cy51cGRhdGUoKX19ZWxzZSBzLnVwZGF0ZSgpfXZhciBiYWNrVG9Ub3A9e25hbWU6XCJiYWNrLXRvLXRvcFwiLGJpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9e29mZnNldDoyMDAsZHVyYXRpb246MzAwLHVwZGF0ZU5vdzpmdW5jdGlvbigpe3ZhciBpPWdldFNjcm9sbFBvc2l0aW9uKGUuc2Nyb2xsVGFyZ2V0KTw9ZS5vZmZzZXQ7aSE9PXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZGVuXCIpJiZ0LmNsYXNzTGlzdFtpP1wiYWRkXCI6XCJyZW1vdmVcIl0oXCJoaWRkZW5cIil9LGdvVG9Ub3A6ZnVuY3Rpb24oKXtzZXRTY3JvbGxQb3NpdGlvbihlLnNjcm9sbFRhcmdldCwwLGUuYW5pbWF0ZT9lLmR1cmF0aW9uOjApfSxnb1RvVG9wS2V5OmZ1bmN0aW9uKHQpezEzPT09dC5rZXlDb2RlJiZzZXRTY3JvbGxQb3NpdGlvbihlLnNjcm9sbFRhcmdldCwwLGUuYW5pbWF0ZT9lLmR1cmF0aW9uOjApfX07ZS51cGRhdGU9ZGVib3VuY2UoZS51cGRhdGVOb3csMjUpLHQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKSx0Ll9fcWJhY2t0b3RvcD1lfSxpbnNlcnRlZDpmdW5jdGlvbih0LGUpe3ZhciBpPXQuX19xYmFja3RvdG9wO2kuc2Nyb2xsVGFyZ2V0PWdldFNjcm9sbFRhcmdldCh0KSxpLmFuaW1hdGU9ZS5tb2RpZmllcnMuYW5pbWF0ZSx1cGRhdGVCaW5kaW5nKHQsZSksaS5zY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGkudXBkYXRlLGxpc3Rlbk9wdHMucGFzc2l2ZSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixpLnVwZGF0ZSxsaXN0ZW5PcHRzLnBhc3NpdmUpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaS5nb1RvVG9wKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGkuZ29Ub1RvcEtleSl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe0pTT04uc3RyaW5naWZ5KGUub2xkVmFsdWUpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSk/dXBkYXRlQmluZGluZyh0LGUpOnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0Ll9fcWJhY2t0b3RvcCYmdC5fX3FiYWNrdG90b3AudXBkYXRlTm93KCl9LDApfSx1bmJpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5fX3FiYWNrdG90b3A7ZSYmKGUuc2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixlLnVwZGF0ZSxsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsZS51cGRhdGUsbGlzdGVuT3B0cy5wYXNzaXZlKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGUuZ29Ub1RvcCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixlLmdvVG9Ub3BLZXkpLGRlbGV0ZSB0Ll9fcWJhY2t0b3RvcCl9fSxjbG9zZU92ZXJsYXk9e25hbWU6XCJjbG9zZS1vdmVybGF5XCIsYmluZDpmdW5jdGlvbih0LGUsaSl7dmFyIHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkuY29tcG9uZW50SW5zdGFuY2U7ZT1lLiRwYXJlbnQ7KXt2YXIgcz1lLiRvcHRpb25zLm5hbWU7aWYoXCJRUG9wb3ZlclwiPT09c3x8XCJRTW9kYWxcIj09PXMpe2UuaGlkZSh0KTticmVha319fSxuPWZ1bmN0aW9uKHQpezEzPT09dC5rZXlDb2RlJiZzKHQpfTt0Ll9fcWNsb3NlPXtoYW5kbGVyOnMsaGFuZGxlcktleTpufSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHMpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsbil9LHVuYmluZDpmdW5jdGlvbih0KXt2YXIgZT10Ll9fcWNsb3NlO2UmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGUuaGFuZGxlciksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixlLmhhbmRsZXJLZXkpLGRlbGV0ZSB0Ll9fcWNsb3NlKX19LGdvQmFjaz17bmFtZTpcImdvLWJhY2tcIixiaW5kOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz1lLnZhbHVlLG49ZS5tb2RpZmllcnMsbz17dmFsdWU6cyxwb3NpdGlvbjp3aW5kb3cuaGlzdG9yeS5sZW5ndGgtMSxzaW5nbGU6bi5zaW5nbGV9O1BsYXRmb3JtLmlzLmNvcmRvdmE/by5nb0JhY2s9ZnVuY3Rpb24oKXtpLmNvbnRleHQuJHJvdXRlci5nbyhvLnNpbmdsZT8tMTpvLnBvc2l0aW9uLXdpbmRvdy5oaXN0b3J5Lmxlbmd0aCl9Om8uZ29CYWNrPWZ1bmN0aW9uKCl7aS5jb250ZXh0LiRyb3V0ZXIucmVwbGFjZShvLnZhbHVlKX0sby5nb0JhY2tLZXk9ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJm8uZ29CYWNrKHQpfSx0Ll9fcWdvYmFjaz1vLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsby5nb0JhY2spLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsby5nb0JhY2tLZXkpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXtlLm9sZFZhbHVlIT09ZS52YWx1ZSYmKHQuX19xZ29iYWNrLnZhbHVlPWUudmFsdWUpfSx1bmJpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5fX3Fnb2JhY2s7ZSYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZS5nb0JhY2spLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZS5nb0JhY2tLZXkpLGRlbGV0ZSB0Ll9fcWdvYmFjayl9fTtmdW5jdGlvbiB1cGRhdGVCaW5kaW5nJDEodCxlKXt2YXIgaT10Ll9fcXNjcm9sbGZpcmU7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS52YWx1ZSlyZXR1cm4gaS5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGkuc2Nyb2xsKSx2b2lkIGNvbnNvbGUuZXJyb3IoXCJ2LXNjcm9sbC1maXJlIHJlcXVpcmVzIGEgZnVuY3Rpb24gYXMgcGFyYW1ldGVyXCIsdCk7aS5oYW5kbGVyPWUudmFsdWUsXCJmdW5jdGlvblwiIT10eXBlb2YgZS5vbGRWYWx1ZSYmKGkuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixpLnNjcm9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpLGkuc2Nyb2xsKCkpfXZhciBzY3JvbGxGaXJlPXtuYW1lOlwic2Nyb2xsLWZpcmVcIixiaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9e3Njcm9sbDpkZWJvdW5jZShmdW5jdGlvbigpe3ZhciBlLHM7aS5zY3JvbGxUYXJnZXQ9PT13aW5kb3c/KHM9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20sZT13aW5kb3cuaW5uZXJIZWlnaHQpOihzPW9mZnNldCh0KS50b3AraGVpZ2h0KHQpLGU9b2Zmc2V0KGkuc2Nyb2xsVGFyZ2V0KS50b3AraGVpZ2h0KGkuc2Nyb2xsVGFyZ2V0KSkscz4wJiZzPGUmJihpLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsaS5zY3JvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKSxpLmhhbmRsZXIodCkpfSwyNSl9O3QuX19xc2Nyb2xsZmlyZT1pfSxpbnNlcnRlZDpmdW5jdGlvbih0LGUpe3QuX19xc2Nyb2xsZmlyZS5zY3JvbGxUYXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHQpLHVwZGF0ZUJpbmRpbmckMSh0LGUpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXtlLnZhbHVlIT09ZS5vbGRWYWx1ZSYmdXBkYXRlQmluZGluZyQxKHQsZSl9LHVuYmluZDpmdW5jdGlvbih0KXt2YXIgZT10Ll9fcXNjcm9sbGZpcmU7ZSYmKGUuc2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixlLnNjcm9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpLGRlbGV0ZSB0Ll9fcXNjcm9sbGZpcmUpfX07ZnVuY3Rpb24gdXBkYXRlQmluZGluZyQyKHQsZSl7dmFyIGk9dC5fX3FzY3JvbGw7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS52YWx1ZSlyZXR1cm4gaS5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGkuc2Nyb2xsLGxpc3Rlbk9wdHMucGFzc2l2ZSksdm9pZCBjb25zb2xlLmVycm9yKFwidi1zY3JvbGwgcmVxdWlyZXMgYSBmdW5jdGlvbiBhcyBwYXJhbWV0ZXJcIix0KTtpLmhhbmRsZXI9ZS52YWx1ZSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLm9sZFZhbHVlJiZpLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsaS5zY3JvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKX12YXIgc2Nyb2xsJDE9e25hbWU6XCJzY3JvbGxcIixiaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9e3Njcm9sbDpmdW5jdGlvbigpe2kuaGFuZGxlcihnZXRTY3JvbGxQb3NpdGlvbihpLnNjcm9sbFRhcmdldCksZ2V0SG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uKGkuc2Nyb2xsVGFyZ2V0KSl9fTt0Ll9fcXNjcm9sbD1pfSxpbnNlcnRlZDpmdW5jdGlvbih0LGUpe3QuX19xc2Nyb2xsLnNjcm9sbFRhcmdldD1nZXRTY3JvbGxUYXJnZXQodCksdXBkYXRlQmluZGluZyQyKHQsZSl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe2Uub2xkVmFsdWUhPT1lLnZhbHVlJiZ1cGRhdGVCaW5kaW5nJDIodCxlKX0sdW5iaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX19xc2Nyb2xsO2UmJihlLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsZS5zY3JvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKSxkZWxldGUgdC5fX3FzY3JvbGwpfX07ZnVuY3Rpb24gdXBkYXRlQmluZGluZyQzKHQsZSl7dmFyIGk9dC5fX3F0b3VjaGhvbGQ7aS5kdXJhdGlvbj1wYXJzZUludChlLmFyZywxMCl8fDYwMCxlLm9sZFZhbHVlIT09ZS52YWx1ZSYmKGkuaGFuZGxlcj1lLnZhbHVlKX12YXIgdG91Y2hIb2xkPXtuYW1lOlwidG91Y2gtaG9sZFwiLGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT0hZS5tb2RpZmllcnMubm9Nb3VzZSxzPWUubW9kaWZpZXJzLnN0b3Asbj1lLm1vZGlmaWVycy5wcmV2ZW50LG89e21vdXNlU3RhcnQ6ZnVuY3Rpb24odCl7bGVmdENsaWNrKHQpJiYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLG8ubW91c2VBYm9ydCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixvLm1vdXNlQWJvcnQpLG8uc3RhcnQodCkpfSxtb3VzZUFib3J0OmZ1bmN0aW9uKHQpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixvLm1vdXNlQWJvcnQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsby5tb3VzZUFib3J0KSxvLmFib3J0KHQpfSxzdGFydDpmdW5jdGlvbih0KXt2YXIgZT0obmV3IERhdGUpLmdldFRpbWUoKTtzJiZ0LnN0b3BQcm9wYWdhdGlvbigpLG4mJnQucHJldmVudERlZmF1bHQoKSxvLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLG8ubW91c2VBYm9ydCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixvLm1vdXNlQWJvcnQpKSxvLmhhbmRsZXIoe2V2dDp0LHBvc2l0aW9uOnBvc2l0aW9uKHQpLGR1cmF0aW9uOihuZXcgRGF0ZSkuZ2V0VGltZSgpLWV9KX0sby5kdXJhdGlvbil9LGFib3J0OmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dChvLnRpbWVyKSxvLnRpbWVyPW51bGx9fTt0Ll9fcXRvdWNoaG9sZD1vLHVwZGF0ZUJpbmRpbmckMyh0LGUpLGkmJnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG8ubW91c2VTdGFydCksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLG8uc3RhcnQpLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLG8uYWJvcnQpLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsby5hYm9ydCl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe3VwZGF0ZUJpbmRpbmckMyh0LGUpfSx1bmJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10Ll9fcXRvdWNoaG9sZDtpJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGkuc3RhcnQpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsaS5hYm9ydCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsaS5hYm9ydCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsaS5tb3VzZVN0YXJ0KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsaS5tb3VzZUFib3J0KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLGkubW91c2VBYm9ydCksZGVsZXRlIHQuX19xdG91Y2hob2xkKX19LGRpcmVjdGl2ZXM9T2JqZWN0LmZyZWV6ZSh7QmFja1RvVG9wOmJhY2tUb1RvcCxDbG9zZU92ZXJsYXk6Y2xvc2VPdmVybGF5LEdvQmFjazpnb0JhY2ssUmlwcGxlOlJpcHBsZSxTY3JvbGxGaXJlOnNjcm9sbEZpcmUsU2Nyb2xsOnNjcm9sbCQxLFRvdWNoSG9sZDp0b3VjaEhvbGQsVG91Y2hQYW46VG91Y2hQYW4sVG91Y2hTd2lwZTpUb3VjaFN3aXBlfSk7ZnVuY3Rpb24gb2JqZWN0V2l0aG91dFByb3BlcnRpZXModCxlKXt2YXIgaT17fTtmb3IodmFyIHMgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxzKSYmLTE9PT1lLmluZGV4T2YocykmJihpW3NdPXRbc10pO3JldHVybiBpfWZ1bmN0aW9uIG1vZGFsRm4odCxlKXtyZXR1cm4gZnVuY3Rpb24oaSxzKXt2YXIgbj1pLmNsYXNzTmFtZSxvPW9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGksW1wiY2xhc3NOYW1lXCJdKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSxyKXtpZihpc1NTUilyZXR1cm4gaSgpO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTt2YXIgbD1mdW5jdGlvbih0KXtpKHQpLGguJGRlc3Ryb3koKX0sYz1mdW5jdGlvbih0KXtyKHR8fG5ldyBFcnJvciksaC4kZGVzdHJveSgpfSxoPW5ldyBlKHtlbDphLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cHJvcHM6b319LHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZSh0LHtyZWY6XCJtb2RhbFwiLHByb3BzOm8sY2xhc3M6bixvbjp7b2s6bCxjYW5jZWw6Y319KX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuJHJlZnMubW9kYWwuc2hvdygpfX0pO3MmJnMudGhlbihsLGMpfSl9fXZhciBtZXRhVmFsdWUsYWN0aW9uU2hlZXQ9e2luc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPXQuVnVlO3RoaXMuY3JlYXRlPWUuYWN0aW9uU2hlZXQ9bW9kYWxGbihRQWN0aW9uU2hlZXQsaSl9fTtmdW5jdGlvbiBnZXRQcm9wKCl7cmV0dXJuIFBsYXRmb3JtLmlzLndpbnBob25lP1wibXNhcHBsaWNhdGlvbi1uYXZidXR0b24tY29sb3JcIjpQbGF0Zm9ybS5pcy5zYWZhcmk/XCJhcHBsZS1tb2JpbGUtd2ViLWFwcC1zdGF0dXMtYmFyLXN0eWxlXCI6XCJ0aGVtZS1jb2xvclwifWZ1bmN0aW9uIGdldE1ldGFUYWcodCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJNRVRBXCIpO2Zvcih2YXIgaSBpbiBlKWlmKGVbaV0ubmFtZT09PXQpcmV0dXJuIGVbaV19ZnVuY3Rpb24gc2V0Q29sb3IodCl7dm9pZCAwPT09bWV0YVZhbHVlJiYobWV0YVZhbHVlPWdldFByb3AoKSk7dmFyIGU9Z2V0TWV0YVRhZyhtZXRhVmFsdWUpLGk9dm9pZCAwPT09ZTtpJiYoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibWV0YVwiKSkuc2V0QXR0cmlidXRlKFwibmFtZVwiLG1ldGFWYWx1ZSksZS5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsdCksaSYmZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlKX12YXIgYWRkcmVzc2JhckNvbG9yPXtpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXQuJHEsaT0odC5WdWUsdC5jZmcpO3RoaXMuc2V0PSFpc1NTUiYmUGxhdGZvcm0uaXMubW9iaWxlJiYoUGxhdGZvcm0uaXMuY29yZG92YXx8UGxhdGZvcm0uaXMud2lucGhvbmV8fFBsYXRmb3JtLmlzLnNhZmFyaXx8UGxhdGZvcm0uaXMud2Via2l0fHxQbGF0Zm9ybS5pcy52aXZhbGRpKT9mdW5jdGlvbih0KXt2YXIgZT10fHxnZXRCcmFuZChcInByaW1hcnlcIik7UGxhdGZvcm0uaXMuY29yZG92YSYmd2luZG93LlN0YXR1c0Jhcj93aW5kb3cuU3RhdHVzQmFyLmJhY2tncm91bmRDb2xvckJ5SGV4U3RyaW5nKGUpOnNldENvbG9yKGUpfTpmdW5jdGlvbigpe30sZS5hZGRyZXNzYmFyQ29sb3I9dGhpcyxpLmFkZHJlc3NiYXJDb2xvciYmdGhpcy5zZXQoaS5hZGRyZXNzYmFyQ29sb3IpfX0scHJlZml4ZXM9e30sYXBwRnVsbHNjcmVlbj17aXNDYXBhYmxlOiExLGlzQWN0aXZlOiExLHJlcXVlc3Q6ZnVuY3Rpb24odCl7dGhpcy5pc0NhcGFibGUmJiF0aGlzLmlzQWN0aXZlJiYodD10fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpW3ByZWZpeGVzLnJlcXVlc3RdKCl9LGV4aXQ6ZnVuY3Rpb24oKXt0aGlzLmlzQ2FwYWJsZSYmdGhpcy5pc0FjdGl2ZSYmZG9jdW1lbnRbcHJlZml4ZXMuZXhpdF0oKX0sdG9nZ2xlOmZ1bmN0aW9uKHQpe3RoaXMuaXNBY3RpdmU/dGhpcy5leGl0KCk6dGhpcy5yZXF1ZXN0KHQpfSxpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10LiRxLHM9dC5WdWU7aS5mdWxsc2NyZWVuPXRoaXMsaXNTU1J8fChwcmVmaXhlcy5yZXF1ZXN0PVtcInJlcXVlc3RGdWxsc2NyZWVuXCIsXCJtc1JlcXVlc3RGdWxsc2NyZWVuXCIsXCJtb3pSZXF1ZXN0RnVsbFNjcmVlblwiLFwid2Via2l0UmVxdWVzdEZ1bGxzY3JlZW5cIl0uZmluZChmdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W3RdfSksdGhpcy5pc0NhcGFibGU9dm9pZCAwIT09cHJlZml4ZXMucmVxdWVzdCx0aGlzLmlzQ2FwYWJsZSYmKHByZWZpeGVzLmV4aXQ9W1wiZXhpdEZ1bGxzY3JlZW5cIixcIm1zRXhpdEZ1bGxzY3JlZW5cIixcIm1vekNhbmNlbEZ1bGxTY3JlZW5cIixcIndlYmtpdEV4aXRGdWxsc2NyZWVuXCJdLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50W3RdfSksdGhpcy5pc0FjdGl2ZT0hIShkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50KSxbXCJvbmZ1bGxzY3JlZW5jaGFuZ2VcIixcIm9ubXNmdWxsc2NyZWVuY2hhbmdlXCIsXCJvbm1vemZ1bGxzY3JlZW5jaGFuZ2VcIixcIm9ud2Via2l0ZnVsbHNjcmVlbmNoYW5nZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RvY3VtZW50W3RdPWZ1bmN0aW9uKCl7ZS5pc0FjdGl2ZT0hZS5pc0FjdGl2ZX19KSxzLnV0aWwuZGVmaW5lUmVhY3RpdmUodGhpcyxcImlzQWN0aXZlXCIsdGhpcy5pc0FjdGl2ZSkpKX19LGFwcFZpc2liaWxpdHk9e2FwcFZpc2libGU6ITEsaW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dC4kcSxzPXQuVnVlO2lmKGlzU1NSKXRoaXMuYXBwVmlzaWJsZT1pLmFwcFZpc2libGU9ITA7ZWxzZXt2YXIgbixvO3ZvaWQgMCE9PWRvY3VtZW50LmhpZGRlbj8obj1cImhpZGRlblwiLG89XCJ2aXNpYmlsaXR5Y2hhbmdlXCIpOnZvaWQgMCE9PWRvY3VtZW50Lm1zSGlkZGVuPyhuPVwibXNIaWRkZW5cIixvPVwibXN2aXNpYmlsaXR5Y2hhbmdlXCIpOnZvaWQgMCE9PWRvY3VtZW50LndlYmtpdEhpZGRlbiYmKG49XCJ3ZWJraXRIaWRkZW5cIixvPVwid2Via2l0dmlzaWJpbGl0eWNoYW5nZVwiKTt2YXIgcj1mdW5jdGlvbigpe2UuYXBwVmlzaWJsZT1pLmFwcFZpc2libGU9IWRvY3VtZW50W25dfTtyKCksbyYmdm9pZCAwIT09ZG9jdW1lbnRbbl0mJihzLnV0aWwuZGVmaW5lUmVhY3RpdmUoaSxcImFwcFZpc2libGVcIix0aGlzLmFwcFZpc2libGUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIobyxyLCExKSl9fX07ZnVuY3Rpb24gZW5jb2RlKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCl9ZnVuY3Rpb24gZGVjb2RlKHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZnVuY3Rpb24gc3RyaW5naWZ5Q29va2llVmFsdWUodCl7cmV0dXJuIGVuY29kZSh0PT09T2JqZWN0KHQpP0pTT04uc3RyaW5naWZ5KHQpOlwiXCIrdCl9ZnVuY3Rpb24gcmVhZCh0KXtpZihcIlwiPT09dClyZXR1cm4gdDswPT09dC5pbmRleE9mKCdcIicpJiYodD10LnNsaWNlKDEsLTEpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpLnJlcGxhY2UoL1xcXFxcXFxcL2csXCJcXFxcXCIpKSx0PWRlY29kZSh0LnJlcGxhY2UoL1xcKy9nLFwiIFwiKSk7dHJ5e3Q9SlNPTi5wYXJzZSh0KX1jYXRjaCh0KXt9cmV0dXJuIHR9ZnVuY3Rpb24gc2V0KHQsZSxpLHMpe3ZhciBuLG87aWYodm9pZCAwPT09aSYmKGk9e30pLHZvaWQgMCE9PWkuZXhwaXJlcyl7aWYobz1wYXJzZUludChpLmV4cGlyZXMsMTApLGlzTmFOKG8pKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoXCJRdWFzYXIgY29va2llOiBleHBpcmVzIG5lZWRzIHRvIGJlIGEgbnVtYmVyXCIpOyhuPW5ldyBEYXRlKS5zZXRNaWxsaXNlY29uZHMobi5nZXRNaWxsaXNlY29uZHMoKSs4NjRlNSpvKX12YXIgcj1lbmNvZGUodCkrXCI9XCIrc3RyaW5naWZ5Q29va2llVmFsdWUoZSksYT1bcix2b2lkIDAhPT1uP1wiOyBFeHBpcmVzPVwiK24udG9VVENTdHJpbmcoKTpcIlwiLGkucGF0aD9cIjsgUGF0aD1cIitpLnBhdGg6XCJcIixpLmRvbWFpbj9cIjsgRG9tYWluPVwiK2kuZG9tYWluOlwiXCIsaS5odHRwT25seT9cIjsgSHR0cE9ubHlcIjpcIlwiLGkuc2VjdXJlP1wiOyBTZWN1cmVcIjpcIlwiXS5qb2luKFwiXCIpO2lmKHMpe3MucmVxLnFDb29raWVzP3MucmVxLnFDb29raWVzLnB1c2goYSk6cy5yZXEucUNvb2tpZXM9W2FdLHMucmVzLnNldEhlYWRlcihcIlNldC1Db29raWVcIixzLnJlcS5xQ29va2llcyk7dmFyIGw9cy5yZXEuaGVhZGVycy5jb29raWV8fFwiXCI7aWYodm9pZCAwIT09biYmbzwwKXt2YXIgYz1nZXQodCxzKTt2b2lkIDAhPT1jJiYobD1sLnJlcGxhY2UodCtcIj1cIitjK1wiOyBcIixcIlwiKS5yZXBsYWNlKFwiOyBcIit0K1wiPVwiK2MsXCJcIikucmVwbGFjZSh0K1wiPVwiK2MsXCJcIikpfWVsc2UgbD1sP3IrXCI7IFwiK2w6YTtzLnJlcS5oZWFkZXJzLmNvb2tpZT1sfWVsc2UgZG9jdW1lbnQuY29va2llPWF9ZnVuY3Rpb24gZ2V0KHQsZSl7Zm9yKHZhciBpLHMsbixvPXQ/dm9pZCAwOnt9LHI9ZT9lLnJlcS5oZWFkZXJzOmRvY3VtZW50LGE9ci5jb29raWU/ci5jb29raWUuc3BsaXQoXCI7IFwiKTpbXSxsPTAsYz1hLmxlbmd0aDtsPGM7bCsrKWlmKHM9ZGVjb2RlKChpPWFbbF0uc3BsaXQoXCI9XCIpKS5zaGlmdCgpKSxuPWkuam9pbihcIj1cIiksdCl7aWYodD09PXMpe289cmVhZChuKTticmVha319ZWxzZSBvW3NdPW47cmV0dXJuIG99ZnVuY3Rpb24gcmVtb3ZlKHQsZSxpKXtzZXQodCxcIlwiLE9iamVjdC5hc3NpZ24oe30sZSx7ZXhwaXJlczotMX0pLGkpfWZ1bmN0aW9uIGhhcyh0LGUpe3JldHVybiB2b2lkIDAhPT1nZXQodCxlKX1mdW5jdGlvbiBnZXRPYmplY3QodCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBlPXQuc3NyO3JldHVybntnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGdldCh0LGUpfSxzZXQ6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBzZXQodCxpLHMsZSl9LGhhczpmdW5jdGlvbih0KXtyZXR1cm4gaGFzKHQsZSl9LHJlbW92ZTpmdW5jdGlvbih0LGkpe3JldHVybiByZW1vdmUodCxpLGUpfSxhbGw6ZnVuY3Rpb24oKXtyZXR1cm4gZ2V0KG51bGwsZSl9fX12YXIgdm0sdGltZW91dCx1cGRhdGVJZCxzc3JUYWtlb3Zlcixjb29raWVzPXtwYXJzZVNTUjpmdW5jdGlvbih0KXtyZXR1cm4gdD9nZXRPYmplY3Qoe3Nzcjp0fSk6dGhpc30saW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9dC5xdWV1ZXM7aXNTU1I/aS5zZXJ2ZXIucHVzaChmdW5jdGlvbih0LGUpe3QuY29va2llcz1nZXRPYmplY3QoZSl9KTooT2JqZWN0LmFzc2lnbih0aGlzLGdldE9iamVjdCgpKSxlLmNvb2tpZXM9dGhpcyl9fSxkaWFsb2c9e2luc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPXQuVnVlO3RoaXMuY3JlYXRlPWUuZGlhbG9nPW1vZGFsRm4oUURpYWxvZyxpKX19LGxvYWRpbmdCYXI9e3N0YXJ0OmZ1bmN0aW9uKCl7fSxzdG9wOmZ1bmN0aW9uKCl7fSxpbmNyZW1lbnQ6ZnVuY3Rpb24oKXt9LGluc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPXQuVnVlLHM9dC5jZmc7aWYoaXNTU1IpZS5sb2FkaW5nQmFyPXRoaXM7ZWxzZXt2YXIgbj1lLmxvYWRpbmdCYXI9bmV3IGkoe3JlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChRQWpheEJhcix7cmVmOlwiYmFyXCIscHJvcHM6cy5sb2FkaW5nQmFyfSl9fSkuJG1vdW50KCkuJHJlZnMuYmFyO09iamVjdC5hc3NpZ24odGhpcyx7c3RhcnQ6bi5zdGFydCxzdG9wOm4uc3RvcCxpbmNyZW1lbnQ6bi5pbmNyZW1lbnR9KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUubG9hZGluZ0Jhci4kcGFyZW50LiRlbCl9fX0scHJvcHM9e30sZGVmYXVsdHM9e2RlbGF5OjAsbWVzc2FnZTohMSxzcGlubmVyU2l6ZTo4MCxzcGlubmVyQ29sb3I6XCJ3aGl0ZVwiLG1lc3NhZ2VDb2xvcjpcIndoaXRlXCIsc3Bpbm5lcjpRU3Bpbm5lcixjdXN0b21DbGFzczohMX0sc3RhdGljQ2xhc3M9XCJxLWxvYWRpbmcgYW5pbWF0ZS1mYWRlIGZ1bGxzY3JlZW4gY29sdW1uIGZsZXgtY2VudGVyIHotbWF4XCIsbG9hZGluZz17aXNBY3RpdmU6ITEsc2hvdzpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lzU1NSfHwoXCJzdHJpbmdcIj09dHlwZW9mKHByb3BzPU9iamVjdC5hc3NpZ24oe30sZGVmYXVsdHMsdCkpLmN1c3RvbUNsYXNzJiYocHJvcHMuY3VzdG9tQ2xhc3M9cHJvcHMuY3VzdG9tQ2xhc3MudHJpbSgpKSx0aGlzLmlzQWN0aXZlP3ZtJiZ2bS4kZm9yY2VVcGRhdGUoKToodGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGltZW91dD1udWxsO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJ3aXRoLWxvYWRpbmdcIiksdm09bmV3IGUuX19WdWUoe25hbWU6XCJRTG9hZGluZ1wiLGVsOnQscmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOnN0YXRpY0NsYXNzLGNsYXNzOnByb3BzLmN1c3RvbUNsYXNzfSxbdChwcm9wcy5zcGlubmVyLHtwcm9wczp7Y29sb3I6cHJvcHMuc3Bpbm5lckNvbG9yLHNpemU6cHJvcHMuc3Bpbm5lclNpemV9fSkscHJvcHMubWVzc2FnZT90KFwiZGl2XCIse2NsYXNzOlwidGV4dC1cIitwcm9wcy5tZXNzYWdlQ29sb3IsZG9tUHJvcHM6e2lubmVySFRNTDpwcm9wcy5tZXNzYWdlfX0pOm51bGxdKX19KX0scHJvcHMuZGVsYXkpLHRoaXMuaXNBY3RpdmU9ITApKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuaXNBY3RpdmUmJih0aW1lb3V0PyhjbGVhclRpbWVvdXQodGltZW91dCksdGltZW91dD1udWxsKToodm0uJGRlc3Ryb3koKSxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJ3aXRoLWxvYWRpbmdcIiksdm0uJGVsLnJlbW92ZSgpLHZtPW51bGwpLHRoaXMuaXNBY3RpdmU9ITEpfSxzZXREZWZhdWx0czpmdW5jdGlvbih0KXtPYmplY3QuYXNzaWduKGRlZmF1bHRzLHQpfSxfX1Z1ZTpudWxsLGluc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPXQuVnVlLHM9dC5jZmcubG9hZGluZztzJiZ0aGlzLnNldERlZmF1bHRzKHMpLGUubG9hZGluZz10aGlzLHRoaXMuX19WdWU9aX19O2Z1bmN0aW9uIG5vcm1hbGl6ZSh0KXt0LnRpdGxlJiYodC50aXRsZT10LnRpdGxlVGVtcGxhdGU/dC50aXRsZVRlbXBsYXRlKHQudGl0bGV8fFwiXCIpOnQudGl0bGUsZGVsZXRlIHQudGl0bGVUZW1wbGF0ZSksW1tcIm1ldGFcIixcImNvbnRlbnRcIl0sW1wibGlua1wiLFwiaHJlZlwiXV0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgaT10W2VbMF1dLHM9ZVsxXTtmb3IodmFyIG4gaW4gaSl7dmFyIG89aVtuXTtvLnRlbXBsYXRlJiYoMT09PU9iamVjdC5rZXlzKG8pLmxlbmd0aD9kZWxldGUgaVtuXToob1tzXT1vLnRlbXBsYXRlKG9bc118fFwiXCIpLGRlbGV0ZSBvLnRlbXBsYXRlKSl9fSl9ZnVuY3Rpb24gY2hhbmdlZCh0LGUpe2lmKE9iamVjdC5rZXlzKHQpLmxlbmd0aCE9PU9iamVjdC5rZXlzKGUpLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGkgaW4gdClpZih0W2ldIT09ZVtpXSlyZXR1cm4hMH1mdW5jdGlvbiBib2R5RmlsdGVyKHQpe3JldHVybiFbXCJjbGFzc1wiLFwic3R5bGVcIl0uaW5jbHVkZXModCl9ZnVuY3Rpb24gaHRtbEZpbHRlcih0KXtyZXR1cm4hW1wibGFuZ1wiLFwiZGlyXCJdLmluY2x1ZGVzKHQpfWZ1bmN0aW9uIGRpZmYodCxlKXt2YXIgaT17fSxzPXt9O3JldHVybiB0Pyh0LnRpdGxlIT09ZS50aXRsZSYmKGkudGl0bGU9ZS50aXRsZSksW1wibWV0YVwiLFwibGlua1wiLFwic2NyaXB0XCIsXCJodG1sQXR0clwiLFwiYm9keUF0dHJcIl0uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbz10W25dLHI9ZVtuXTtpZihzW25dPVtdLG8pe2Zvcih2YXIgYSBpbiBpW25dPXt9LG8pci5oYXNPd25Qcm9wZXJ0eShhKXx8c1tuXS5wdXNoKGEpO2Zvcih2YXIgbCBpbiByKW8uaGFzT3duUHJvcGVydHkobCk/Y2hhbmdlZChvW2xdLHJbbF0pJiYoc1tuXS5wdXNoKGwpLGlbbl1bbF09cltsXSk6aVtuXVtsXT1yW2xdfWVsc2UgaVtuXT1yfSkse2FkZDppLHJlbW92ZTpzfSk6e2FkZDplLHJlbW92ZTpzfX1mdW5jdGlvbiBhcHBseSh0KXt2YXIgZT10LmFkZCxpPXQucmVtb3ZlO2UudGl0bGUmJihkb2N1bWVudC50aXRsZT1lLnRpdGxlKSxPYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmKFtcIm1ldGFcIixcImxpbmtcIixcInNjcmlwdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdF0uZm9yRWFjaChmdW5jdGlvbihlKXtkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3IodCsnW2RhdGEtcW1ldGE9XCInK2UrJ1wiXScpLnJlbW92ZSgpfSl9KSxpLmh0bWxBdHRyLmZpbHRlcihodG1sRmlsdGVyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodCl9KSxpLmJvZHlBdHRyLmZpbHRlcihib2R5RmlsdGVyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RvY3VtZW50LmJvZHkucmVtb3ZlQXR0cmlidXRlKHQpfSkpLFtcIm1ldGFcIixcImxpbmtcIixcInNjcmlwdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPWVbdF07Zm9yKHZhciBzIGluIGkpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7Zm9yKHZhciBvIGluIGlbc10pXCJpbm5lckhUTUxcIiE9PW8mJm4uc2V0QXR0cmlidXRlKG8saVtzXVtvXSk7bi5zZXRBdHRyaWJ1dGUoXCJkYXRhLXFtZXRhXCIscyksXCJzY3JpcHRcIj09PXQmJihuLmlubmVySFRNTD1pW3NdLmlubmVySFRNTHx8XCJcIiksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuKX19KSxPYmplY3Qua2V5cyhlLmh0bWxBdHRyKS5maWx0ZXIoaHRtbEZpbHRlcikuZm9yRWFjaChmdW5jdGlvbih0KXtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKHQsZS5odG1sQXR0clt0XXx8XCJcIil9KSxPYmplY3Qua2V5cyhlLmJvZHlBdHRyKS5maWx0ZXIoYm9keUZpbHRlcikuZm9yRWFjaChmdW5jdGlvbih0KXtkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSh0LGUuYm9keUF0dHJbdF18fFwiXCIpfSl9ZnVuY3Rpb24gcGFyc2VNZXRhKHQsZSl7aWYoIXQuX2luYWN0aXZlKXt2YXIgaT10LiRvcHRpb25zLm1ldGE7aSYmKGV4dGVuZCghMCxlLHQuX19xTWV0YSksaS5zdG9wUHJvcGFnYXRpb24pfHx0LiRjaGlsZHJlbiYmdC4kY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtwYXJzZU1ldGEodCxlKX0pfX1mdW5jdGlvbiB1cGRhdGVDbGllbnQoKXtpZihzc3JUYWtlb3ZlcilyZXR1cm4gc3NyVGFrZW92ZXI9ITEsdGhpcy4kcm9vdC5fX2N1cnJlbnRNZXRhPXdpbmRvdy5fX1FfTUVUQV9fLHZvaWQgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKFwic2NyaXB0W2RhdGEtcW1ldGEtaW5pdF1cIikucmVtb3ZlKCk7dmFyIHQ9e3RpdGxlOlwiXCIsdGl0bGVUZW1wbGF0ZTpudWxsLG1ldGE6e30sbGluazp7fSxzY3JpcHQ6e30saHRtbEF0dHI6e30sYm9keUF0dHI6e319O3BhcnNlTWV0YSh0aGlzLiRyb290LHQpLG5vcm1hbGl6ZSh0KSxhcHBseShkaWZmKHRoaXMuJHJvb3QuX19jdXJyZW50TWV0YSx0KSksdGhpcy4kcm9vdC5fX2N1cnJlbnRNZXRhPXR9ZnVuY3Rpb24gZ2V0QXR0cih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9dFtlXTtyZXR1cm4gZSsodm9pZCAwIT09aT8nPVwiJytpKydcIic6XCJcIil9fWZ1bmN0aW9uIGdldEhlYWQodCl7dmFyIGU9XCJcIjtyZXR1cm4gdC50aXRsZSYmKGUrPVwiPHRpdGxlPlwiK3QudGl0bGUrXCI8L3RpdGxlPlwiKSxbXCJtZXRhXCIsXCJsaW5rXCIsXCJzY3JpcHRcIl0uZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcz10W2ldO2Zvcih2YXIgbiBpbiBzKXt2YXIgbz1PYmplY3Qua2V5cyhzW25dKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuXCJpbm5lckhUTUxcIiE9PXR9KS5tYXAoZ2V0QXR0cihzW25dKSk7ZSs9XCI8XCIraStcIiBcIitvLmpvaW4oXCIgXCIpKycgZGF0YS1xbWV0YT1cIicrbisnXCI+JyxcInNjcmlwdFwiPT09aSYmKGUrPShzW25dLmlubmVySFRNTHx8XCJcIikrXCI8XFwvc2NyaXB0PlwiKX19KSxlfWZ1bmN0aW9uIGdldFNlcnZlck1ldGEodCxlKXt2YXIgaT17dGl0bGU6XCJcIix0aXRsZVRlbXBsYXRlOm51bGwsbWV0YTp7fSxsaW5rOnt9LGh0bWxBdHRyOnt9LGJvZHlBdHRyOnt9LG5vc2NyaXB0Ont9fTtwYXJzZU1ldGEodCxpKSxub3JtYWxpemUoaSk7dmFyIHM9e1wiJSVRX0hUTUxfQVRUUlMlJVwiOk9iamVjdC5rZXlzKGkuaHRtbEF0dHIpLmZpbHRlcihodG1sRmlsdGVyKS5tYXAoZ2V0QXR0cihpLmh0bWxBdHRyKSkuam9pbihcIiBcIiksXCIlJVFfSEVBRF9UQUdTJSVcIjpnZXRIZWFkKGkpLFwiJSVRX0JPRFlfQVRUUlMlJVwiOk9iamVjdC5rZXlzKGkuYm9keUF0dHIpLmZpbHRlcihib2R5RmlsdGVyKS5tYXAoZ2V0QXR0cihpLmJvZHlBdHRyKSkuam9pbihcIiBcIiksXCIlJVFfQk9EWV9UQUdTJSVcIjpPYmplY3Qua2V5cyhpLm5vc2NyaXB0KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuJzxub3NjcmlwdCBkYXRhLXFtZXRhPVwiJyt0KydcIj4nK2kubm9zY3JpcHRbdF0rXCI8L25vc2NyaXB0PlwifSkuam9pbihcIlwiKStcIjxzY3JpcHQgZGF0YS1xbWV0YS1pbml0PndpbmRvdy5fX1FfTUVUQV9fPVwiKyhkZWxldGUgaS5ub3NjcmlwdCYmSlNPTi5zdHJpbmdpZnkoaSkpK1wiPFxcL3NjcmlwdD5cIn07cmV0dXJuIE9iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odCl7ZT1lLnJlcGxhY2UodCxzW3RdKX0pLGV9ZnVuY3Rpb24gYmVmb3JlQ3JlYXRlKCl7dGhpcy4kb3B0aW9ucy5tZXRhJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy4kb3B0aW9ucy5tZXRhPyh0aGlzLiRvcHRpb25zLmNvbXB1dGVkfHwodGhpcy4kb3B0aW9ucy5jb21wdXRlZD17fSksdGhpcy4kb3B0aW9ucy5jb21wdXRlZC5fX3FNZXRhPXRoaXMuJG9wdGlvbnMubWV0YSk6dGhpcy5fX3FNZXRhPXRoaXMuJG9wdGlvbnMubWV0YSl9ZnVuY3Rpb24gdHJpZ2dlck1ldGEoKXt0aGlzLiRvcHRpb25zLm1ldGEmJnRoaXMuX19xTWV0YVVwZGF0ZSgpfXZhciBtZXRhPXtpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXQucXVldWVzLGk9dC5WdWU7aXNTU1I/KGkucHJvdG90eXBlLiRnZXRNZXRhSFRNTD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGdldFNlcnZlck1ldGEodCxlKX19LGkubWl4aW4oe2JlZm9yZUNyZWF0ZTpiZWZvcmVDcmVhdGV9KSxlLnNlcnZlci5wdXNoKGZ1bmN0aW9uKHQsZSl7ZS5zc3IuUV9IVE1MX0FUVFJTKz1cIiAlJVFfSFRNTF9BVFRSUyUlXCIsT2JqZWN0LmFzc2lnbihlLnNzcix7UV9IRUFEX1RBR1M6XCIlJVFfSEVBRF9UQUdTJSVcIixRX0JPRFlfQVRUUlM6XCIlJVFfQk9EWV9BVFRSUyUlXCIsUV9CT0RZX1RBR1M6XCIlJVFfQk9EWV9UQUdTJSVcIn0pfSkpOihzc3JUYWtlb3Zlcj1mcm9tU1NSLGkubWl4aW4oe2JlZm9yZUNyZWF0ZTpiZWZvcmVDcmVhdGUsY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuJG9wdGlvbnMubWV0YSYmKHRoaXMuX19xTWV0YVVud2F0Y2g9dGhpcy4kd2F0Y2goXCJfX3FNZXRhXCIsdGhpcy5fX3FNZXRhVXBkYXRlKSl9LGFjdGl2YXRlZDp0cmlnZ2VyTWV0YSxkZWFjdGl2YXRlZDp0cmlnZ2VyTWV0YSxiZWZvcmVNb3VudDp0cmlnZ2VyTWV0YSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRvcHRpb25zLm1ldGEmJih0aGlzLl9fcU1ldGFVbndhdGNoKCksdGhpcy5fX3FNZXRhVXBkYXRlKCkpfSxtZXRob2RzOntfX3FNZXRhVXBkYXRlOmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHVwZGF0ZUlkKSx1cGRhdGVJZD1zZXRUaW1lb3V0KHVwZGF0ZUNsaWVudC5iaW5kKHRoaXMpLDUwKX19fSkpfX0sZGVmYXVsdHMkMT17fSxwb3NpdGlvbkxpc3Q9W1widG9wLWxlZnRcIixcInRvcC1yaWdodFwiLFwiYm90dG9tLWxlZnRcIixcImJvdHRvbS1yaWdodFwiLFwidG9wXCIsXCJib3R0b21cIixcImxlZnRcIixcInJpZ2h0XCIsXCJjZW50ZXJcIl07ZnVuY3Rpb24gaW5pdCh0KXt2YXIgZT10LlZ1ZSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSx0aGlzLl9fdm09bmV3IGUoe25hbWU6XCJRTm90aWZpY2F0aW9uc1wiLGRhdGE6e25vdGlmczp7Y2VudGVyOltdLGxlZnQ6W10scmlnaHQ6W10sdG9wOltdLFwidG9wLWxlZnRcIjpbXSxcInRvcC1yaWdodFwiOltdLGJvdHRvbTpbXSxcImJvdHRvbS1sZWZ0XCI6W10sXCJib3R0b20tcmlnaHRcIjpbXX19LG1ldGhvZHM6e2FkZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKFwiTm90aWZ5OiBwYXJhbWV0ZXIgcmVxdWlyZWRcIiksITE7dmFyIGk9T2JqZWN0LmFzc2lnbih7fSxkZWZhdWx0cyQxLFwic3RyaW5nXCI9PXR5cGVvZiB0P3ttZXNzYWdlOnR9OmNsb25lKHQpKTtpZihpLnBvc2l0aW9uKXtpZighcG9zaXRpb25MaXN0LmluY2x1ZGVzKGkucG9zaXRpb24pKXJldHVybiBjb25zb2xlLmVycm9yKFwiTm90aWZ5OiB3cm9uZyBwb3NpdGlvbjogXCIraS5wb3NpdGlvbiksITF9ZWxzZSBpLnBvc2l0aW9uPVwiYm90dG9tXCI7aWYoaS5fX3VpZD11aWQoKSx2b2lkIDA9PT1pLnRpbWVvdXQpaS50aW1lb3V0PTVlMztlbHNle3ZhciBzPXBhcnNlSW50KGkudGltZW91dCwxMCk7aWYoaXNOYU4ocyl8fHM8MClyZXR1cm4gY29uc29sZS5lcnJvcihcIk5vdGlmeTogd3JvbmcgdGltZW91dDogXCIraS50aW1lb3V0KSwhMTtpLnRpbWVvdXQ9c312YXIgbj1mdW5jdGlvbigpe2UucmVtb3ZlKGkpfTtpZih0LmFjdGlvbnMmJihpLmFjdGlvbnM9dC5hY3Rpb25zLm1hcChmdW5jdGlvbih0KXt2YXIgZT10LmhhbmRsZXIsaT1jbG9uZSh0KTtyZXR1cm4gaS5oYW5kbGVyPVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXtlKCksIXQubm9EaXNtaXNzJiZuKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIG4oKX0saX0pKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lm9uRGlzbWlzcyYmKGkub25EaXNtaXNzPXQub25EaXNtaXNzKSxpLmNsb3NlQnRuKXt2YXIgbz1be2Nsb3NlQnRuOiEwLGxhYmVsOmkuY2xvc2VCdG4saGFuZGxlcjpufV07aS5hY3Rpb25zPWkuYWN0aW9ucz9pLmFjdGlvbnMuY29uY2F0KG8pOm99aS50aW1lb3V0PjAmJihpLl9fdGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bigpfSxpLnRpbWVvdXQrMWUzKSk7dmFyIHI9aS5wb3NpdGlvbi5pbmRleE9mKFwidG9wXCIpPi0xP1widW5zaGlmdFwiOlwicHVzaFwiO3JldHVybiB0aGlzLm5vdGlmc1tpLnBvc2l0aW9uXVtyXShpKSxufSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5fX3RpbWVvdXQmJmNsZWFyVGltZW91dCh0Ll9fdGltZW91dCk7dmFyIGU9dGhpcy5ub3RpZnNbdC5wb3NpdGlvbl0uaW5kZXhPZih0KTtpZigtMSE9PWUpe3ZhciBpPXRoaXMuJHJlZnNbXCJub3RpZl9cIit0Ll9fdWlkXTtpZihpJiZpLiRlbCl7dmFyIHM9aS4kZWw7cy5zdHlsZS5sZWZ0PXMub2Zmc2V0TGVmdCtcInB4XCIscy5zdHlsZS53aWR0aD1nZXRDb21wdXRlZFN0eWxlKHMpLndpZHRofXRoaXMubm90aWZzW3QucG9zaXRpb25dLnNwbGljZShlLDEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQub25EaXNtaXNzJiZ0Lm9uRGlzbWlzcygpfX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1ub3RpZmljYXRpb25zXCJ9LHBvc2l0aW9uTGlzdC5tYXAoZnVuY3Rpb24oaSl7dmFyIHM9W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXS5pbmNsdWRlcyhpKT9cImNlbnRlclwiOmkuaW5kZXhPZihcInRvcFwiKT4tMT9cInRvcFwiOlwiYm90dG9tXCIsbj1pLmluZGV4T2YoXCJsZWZ0XCIpPi0xP1wic3RhcnRcIjppLmluZGV4T2YoXCJyaWdodFwiKT4tMT9cImVuZFwiOlwiY2VudGVyXCIsbz1bXCJsZWZ0XCIsXCJyaWdodFwiXS5pbmNsdWRlcyhpKT9cIml0ZW1zLVwiKyhcImxlZnRcIj09PWk/XCJzdGFydFwiOlwiZW5kXCIpK1wiIGp1c3RpZnktY2VudGVyXCI6XCJjZW50ZXJcIj09PWk/XCJmbGV4LWNlbnRlclwiOlwiaXRlbXMtXCIrbjtyZXR1cm4gdChcInRyYW5zaXRpb24tZ3JvdXBcIix7a2V5Omksc3RhdGljQ2xhc3M6XCJxLW5vdGlmaWNhdGlvbi1saXN0IHEtbm90aWZpY2F0aW9uLWxpc3QtXCIrcytcIiBmaXhlZCBjb2x1bW4gXCIrbyx0YWc6XCJkaXZcIixwcm9wczp7bmFtZTpcInEtbm90aWZpY2F0aW9uLVwiK2ksbW9kZTpcIm91dC1pblwifX0sZS5ub3RpZnNbaV0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0KFFBbGVydCx7cmVmOlwibm90aWZfXCIrZS5fX3VpZCxrZXk6ZS5fX3VpZCxzdGF0aWNDbGFzczpcInEtbm90aWZpY2F0aW9uXCIscHJvcHM6ZX0sW2UubWVzc2FnZV0pfSkpfSkpfX0pLHRoaXMuX192bS4kbW91bnQoaSl9dmFyIG5vdGlmeT17Y3JlYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBpc1NTUj9mdW5jdGlvbigpe306dGhpcy5fX3ZtLmFkZCh0KX0sc2V0RGVmYXVsdHM6ZnVuY3Rpb24odCl7T2JqZWN0LmFzc2lnbihkZWZhdWx0cyQxLHQpfSxpbnN0YWxsOmZ1bmN0aW9uKHQpe2lmKGlzU1NSKXJldHVybiB0LiRxLm5vdGlmeT1mdW5jdGlvbigpe30sdm9pZCh0LiRxLm5vdGlmeS5zZXREZWZhdWx0cz1mdW5jdGlvbigpe30pO2luaXQuY2FsbCh0aGlzLHQpLHQuY2ZnLm5vdGlmeSYmdGhpcy5zZXREZWZhdWx0cyh0LmNmZy5ub3RpZnkpLHQuJHEubm90aWZ5PXRoaXMuY3JlYXRlLmJpbmQodGhpcyksdC4kcS5ub3RpZnkuc2V0RGVmYXVsdHM9dGhpcy5zZXREZWZhdWx0c319LFNJWkVfTElTVD1bXCJzbVwiLFwibWRcIixcImxnXCIsXCJ4bFwiXSxzY3JlZW49e3dpZHRoOjAsc2l6ZXM6e3NtOjU3NixtZDo3NjgsbGc6OTkyLHhsOjEyMDB9LGx0OntzbTohMCxtZDohMCxsZzohMCx4bDohMH0sZ3Q6e30seHM6ITAsc2V0U2l6ZXM6ZnVuY3Rpb24oKXt9LHNldERlYm91bmNlOmZ1bmN0aW9uKCl7fSxpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10LiRxLHM9dC5xdWV1ZXMsbj10LlZ1ZTtpZihpc1NTUilpLnNjcmVlbj10aGlzO2Vsc2V7dmFyIG8scixhPWZ1bmN0aW9uKHQpe3ZhciBpPXdpbmRvdy5pbm5lcldpZHRoLHM9ZS5zaXplczt0JiZpPT09ZS53aWR0aHx8KGUud2lkdGg9aSxlLmd0LnhzPWk+PXMuc20sZS5ndC5zbT1pPj1zLm1kLGUuZ3QubWQ9aT49cy5sZyxlLmd0LmxnPWk+PXMueGwsZS5sdC5zbT1pPHMuc20sZS5sdC5tZD1pPHMubWQsZS5sdC5sZz1pPHMubGcsZS5sdC54bD1pPHMueGwsZS54cz1lLmx0LnNtLGUuc209ZS5ndC54cyYmZS5sdC5tZCxlLm1kPWUuZ3Quc20mJmUubHQubGcsZS5sZz1lLmd0Lm1kJiZlLmx0LnhsLGUueGw9aT5zLnhsKX0sbD17fTt0aGlzLnNldFNpemVzPWZ1bmN0aW9uKHQpe1NJWkVfTElTVC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV0mJihsW2VdPXRbZV0pfSl9LHRoaXMuc2V0RGVib3VuY2U9ZnVuY3Rpb24odCl7cj10fTt2YXIgYz1mdW5jdGlvbigpe3ZhciB0PWdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSk7dC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1xLXNpemUtc21cIikmJlNJWkVfTElTVC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2Uuc2l6ZXNbaV09cGFyc2VJbnQodC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1xLXNpemUtXCIraSksMTApfSksZS5zZXRTaXplcz1mdW5jdGlvbih0KXtTSVpFX0xJU1QuZm9yRWFjaChmdW5jdGlvbihpKXt0W2ldJiYoZS5zaXplc1tpXT10W2ldKX0pLGEoKX0sZS5zZXREZWJvdW5jZT1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe2EoITApfTtvJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLG8sbGlzdGVuT3B0cy5wYXNzaXZlKSxvPXQ+MD9kZWJvdW5jZShlLHQpOmUsd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixvLGxpc3Rlbk9wdHMucGFzc2l2ZSl9LGUuc2V0RGVib3VuY2Uocnx8MTAwKSxPYmplY3Qua2V5cyhsKS5sZW5ndGg+MD8oZS5zZXRTaXplcyhsKSxsPW51bGwpOmEoKX07ZnJvbVNTUj9zLnRha2VvdmVyLnB1c2goYyk6YygpLG4udXRpbC5kZWZpbmVSZWFjdGl2ZShpLFwic2NyZWVuXCIsdGhpcyl9fX07ZnVuY3Rpb24gZW5jb2RlJDEodCl7cmV0dXJuXCJbb2JqZWN0IERhdGVdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk/XCJfX3FfZGF0ZXxcIit0LnRvVVRDU3RyaW5nKCk6XCJbb2JqZWN0IFJlZ0V4cF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT9cIl9fcV9leHByfFwiK3Quc291cmNlOlwibnVtYmVyXCI9PXR5cGVvZiB0P1wiX19xX251bWJ8XCIrdDpcImJvb2xlYW5cIj09dHlwZW9mIHQ/XCJfX3FfYm9vbHxcIisodD9cIjFcIjpcIjBcIik6XCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJfX3Ffc3RybnxcIit0OlwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/XCJfX3Ffc3RybnxcIit0LnRvU3RyaW5nKCk6dD09PU9iamVjdCh0KT9cIl9fcV9vYmp0fFwiK0pTT04uc3RyaW5naWZ5KHQpOnR9ZnVuY3Rpb24gZGVjb2RlJDEodCl7dmFyIGUsaTtpZih0Lmxlbmd0aDw5KXJldHVybiB0O3N3aXRjaChlPXQuc3Vic3RyKDAsOCksaT10LnN1YnN0cmluZyg5KSxlKXtjYXNlXCJfX3FfZGF0ZVwiOnJldHVybiBuZXcgRGF0ZShpKTtjYXNlXCJfX3FfZXhwclwiOnJldHVybiBuZXcgUmVnRXhwKGkpO2Nhc2VcIl9fcV9udW1iXCI6cmV0dXJuIE51bWJlcihpKTtjYXNlXCJfX3FfYm9vbFwiOnJldHVybiBCb29sZWFuKFwiMVwiPT09aSk7Y2FzZVwiX19xX3N0cm5cIjpyZXR1cm5cIlwiK2k7Y2FzZVwiX19xX29ianRcIjpyZXR1cm4gSlNPTi5wYXJzZShpKTtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBnZXRFbXB0eVN0b3JhZ2UoKXt2YXIgdD1mdW5jdGlvbigpe307cmV0dXJue2hhczp0LGdldDp7bGVuZ3RoOnQsaXRlbTp0LGluZGV4OnQsYWxsOnR9LHNldDp0LHJlbW92ZTp0LGNsZWFyOnQsaXNFbXB0eTp0fX1mdW5jdGlvbiBnZXRTdG9yYWdlKHQpe3ZhciBlPXdpbmRvd1t0K1wiU3RvcmFnZVwiXSxpPWZ1bmN0aW9uKHQpe3ZhciBpPWUuZ2V0SXRlbSh0KTtyZXR1cm4gaT9kZWNvZGUkMShpKTpudWxsfTtyZXR1cm57aGFzOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09ZS5nZXRJdGVtKHQpfSxnZXQ6e2xlbmd0aDpmdW5jdGlvbigpe3JldHVybiBlLmxlbmd0aH0saXRlbTppLGluZGV4OmZ1bmN0aW9uKHQpe2lmKHQ8ZS5sZW5ndGgpcmV0dXJuIGkoZS5rZXkodCkpfSxhbGw6ZnVuY3Rpb24oKXtmb3IodmFyIHQscz17fSxuPWUubGVuZ3RoLG89MDtvPG47bysrKXNbdD1lLmtleShvKV09aSh0KTtyZXR1cm4gc319LHNldDpmdW5jdGlvbih0LGkpe2Uuc2V0SXRlbSh0LGVuY29kZSQxKGkpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe2UucmVtb3ZlSXRlbSh0KX0sY2xlYXI6ZnVuY3Rpb24oKXtlLmNsZWFyKCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PWUubGVuZ3RofX19dmFyIGxvY2FsU3RvcmFnZT17aW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9aXNTU1J8fCFoYXNXZWJTdG9yYWdlP2dldEVtcHR5U3RvcmFnZSgpOmdldFN0b3JhZ2UoXCJsb2NhbFwiKTtlLmxvY2FsU3RvcmFnZT1pLE9iamVjdC5hc3NpZ24odGhpcyxpKX19LHNlc3Npb25TdG9yYWdlPXtpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXQuJHEsaT1pc1NTUnx8IWhhc1dlYlN0b3JhZ2U/Z2V0RW1wdHlTdG9yYWdlKCk6Z2V0U3RvcmFnZShcInNlc3Npb25cIik7ZS5zZXNzaW9uU3RvcmFnZT1pLE9iamVjdC5hc3NpZ24odGhpcyxpKX19LHBsdWdpbnM9T2JqZWN0LmZyZWV6ZSh7QWN0aW9uU2hlZXQ6YWN0aW9uU2hlZXQsQWRkcmVzc2JhckNvbG9yOmFkZHJlc3NiYXJDb2xvcixBcHBGdWxsc2NyZWVuOmFwcEZ1bGxzY3JlZW4sQXBwVmlzaWJpbGl0eTphcHBWaXNpYmlsaXR5LENvb2tpZXM6Y29va2llcyxEaWFsb2c6ZGlhbG9nLExvYWRpbmdCYXI6bG9hZGluZ0JhcixMb2FkaW5nOmxvYWRpbmcsTWV0YTptZXRhLE5vdGlmeTpub3RpZnksUGxhdGZvcm06UGxhdGZvcm0sU2NyZWVuOnNjcmVlbixMb2NhbFN0b3JhZ2U6bG9jYWxTdG9yYWdlLFNlc3Npb25TdG9yYWdlOnNlc3Npb25TdG9yYWdlfSk7ZnVuY3Rpb24gb3BlblVybCh0LGUpe2lmKFBsYXRmb3JtLmlzLmNvcmRvdmEmJm5hdmlnYXRvciYmbmF2aWdhdG9yLmFwcClyZXR1cm4gbmF2aWdhdG9yLmFwcC5sb2FkVXJsKHQse29wZW5FeHRlcm5hbDohMH0pO3ZhciBpPXdpbmRvdy5vcGVuKHQsXCJfYmxhbmtcIik7aWYoaSlyZXR1cm4gaS5mb2N1cygpLGk7ZSYmZSgpfWZ1bmN0aW9uIG5vb3AoKXt9dmFyIGluZGV4X2VzbT1PYmplY3QuYXNzaWduKHt9LFZ1ZVBsdWdpbix7aW5zdGFsbDpmdW5jdGlvbih0LGUpe1Z1ZVBsdWdpbi5pbnN0YWxsKHQsT2JqZWN0LmFzc2lnbih7fSx7Y29tcG9uZW50czpjb21wb25lbnRzJDEsZGlyZWN0aXZlczpkaXJlY3RpdmVzLHBsdWdpbnM6cGx1Z2luc30sZSkpfX0pO2V4cG9ydCBkZWZhdWx0IGluZGV4X2VzbTtleHBvcnR7UUFjdGlvblNoZWV0LFFBamF4QmFyLFFBbGVydCxRQXV0b2NvbXBsZXRlLFFCcmVhZGNydW1icyxRQnJlYWRjcnVtYnNFbCxRQnRuLFFCdG5Hcm91cCxRQnRuRHJvcGRvd24sUUJ0blRvZ2dsZSxRQ2FyZCxRQ2FyZFRpdGxlLFFDYXJkTWFpbixRQ2FyZEFjdGlvbnMsUUNhcmRNZWRpYSxRQ2FyZFNlcGFyYXRvcixRQ2Fyb3VzZWwsUUNhcm91c2VsU2xpZGUsUUNhcm91c2VsQ29udHJvbCxRQ2hhdE1lc3NhZ2UsUUNoZWNrYm94LFFDaGlwLFFDaGlwc0lucHV0LFFDb2xsYXBzaWJsZSxRQ29sb3IsUUNvbG9yUGlja2VyLFFDb250ZXh0TWVudSxRRGF0ZXRpbWUsUURhdGV0aW1lUGlja2VyLFFEaWFsb2csUUVkaXRvcixRRmFiLFFGYWJBY3Rpb24sUUZpZWxkLFFJY29uLFFJbmZpbml0ZVNjcm9sbCxRSW5uZXJMb2FkaW5nLFFJbnB1dCxRSW5wdXRGcmFtZSxRSnVtYm90cm9uLFFLbm9iLFFMYXlvdXQsUUxheW91dERyYXdlcixRTGF5b3V0Rm9vdGVyLFFMYXlvdXRIZWFkZXIsUVBhZ2UsUVBhZ2VDb250YWluZXIsUVBhZ2VTdGlja3ksUUl0ZW0sUUl0ZW1TZXBhcmF0b3IsUUl0ZW1NYWluLFFJdGVtU2lkZSxRSXRlbVRpbGUsUUl0ZW1XcmFwcGVyLFFMaXN0LFFMaXN0SGVhZGVyLFFNb2RhbCxRTW9kYWxMYXlvdXQsUU5vU3NyLFFSZXNpemVPYnNlcnZhYmxlLFFTY3JvbGxPYnNlcnZhYmxlLFFXaW5kb3dSZXNpemVPYnNlcnZhYmxlLFFPcHRpb25Hcm91cCxRUGFnaW5hdGlvbixRUGFyYWxsYXgsUVBvcG92ZXIsUVBvcHVwRWRpdCxRUHJvZ3Jlc3MsUVB1bGxUb1JlZnJlc2gsUVJhZGlvLFFSYW5nZSxRUmF0aW5nLFFTY3JvbGxBcmVhLFFTZWFyY2gsUVNlbGVjdCxRU2xpZGVUcmFuc2l0aW9uLFFTbGlkZXIsUVNwaW5uZXIsUVNwaW5uZXJBdWRpbyxRU3Bpbm5lckJhbGwsUVNwaW5uZXJCYXJzLFFTcGlubmVyQ2lyY2xlcyxRU3Bpbm5lckNvbW1lbnQsUVNwaW5uZXJDdWJlLFFTcGlubmVyRG90cyxRU3Bpbm5lckZhY2Vib29rLFFTcGlubmVyR2VhcnMsUVNwaW5uZXJHcmlkLFFTcGlubmVySGVhcnRzLFFTcGlubmVySG91cmdsYXNzLFFTcGlubmVySW5maW5pdHksUVNwaW5uZXJfaW9zIGFzIFFTcGlubmVySW9zLERlZmF1bHRTcGlubmVyIGFzIFFTcGlubmVyTWF0LFFTcGlubmVyT3ZhbCxRU3Bpbm5lclBpZSxRU3Bpbm5lclB1ZmYsUVNwaW5uZXJSYWRpbyxRU3Bpbm5lclJpbmdzLFFTcGlubmVyVGFpbCxRU3RlcCxRU3RlcHBlcixRU3RlcHBlck5hdmlnYXRpb24sUVJvdXRlVGFiLFFUYWIsUVRhYlBhbmUsUVRhYnMsUVRhYmxlLFFUaCxRVHIsUVRkLFFUYWJsZUNvbHVtbnMsUVRpbWVsaW5lLFFUaW1lbGluZUVudHJ5LFFUb2dnbGUsUVRvb2xiYXIsUVRvb2xiYXJUaXRsZSxRVG9vbHRpcCxRVHJlZSxRVXBsb2FkZXIsUVZpZGVvLGJhY2tUb1RvcCBhcyBCYWNrVG9Ub3AsY2xvc2VPdmVybGF5IGFzIENsb3NlT3ZlcmxheSxnb0JhY2sgYXMgR29CYWNrLFJpcHBsZSxzY3JvbGxGaXJlIGFzIFNjcm9sbEZpcmUsc2Nyb2xsJDEgYXMgU2Nyb2xsLHRvdWNoSG9sZCBhcyBUb3VjaEhvbGQsVG91Y2hQYW4sVG91Y2hTd2lwZSxhY3Rpb25TaGVldCBhcyBBY3Rpb25TaGVldCxhZGRyZXNzYmFyQ29sb3IgYXMgQWRkcmVzc2JhckNvbG9yLGFwcEZ1bGxzY3JlZW4gYXMgQXBwRnVsbHNjcmVlbixhcHBWaXNpYmlsaXR5IGFzIEFwcFZpc2liaWxpdHksY29va2llcyBhcyBDb29raWVzLGRpYWxvZyBhcyBEaWFsb2csbG9hZGluZ0JhciBhcyBMb2FkaW5nQmFyLGxvYWRpbmcgYXMgTG9hZGluZyxtZXRhIGFzIE1ldGEsbm90aWZ5IGFzIE5vdGlmeSxQbGF0Zm9ybSxzY3JlZW4gYXMgU2NyZWVuLGxvY2FsU3RvcmFnZSBhcyBMb2NhbFN0b3JhZ2Usc2Vzc2lvblN0b3JhZ2UgYXMgU2Vzc2lvblN0b3JhZ2UsYW5pbWF0ZSxjbG9uZSxjb2xvcnMsZGF0ZSxkZWJvdW5jZSxkb20sZWFzaW5nLGV2ZW50LGV4dGVuZCxmaWx0ZXIsZm9ybWF0LGZyYW1lRGVib3VuY2Usbm9vcCxvcGVuVXJsIGFzIG9wZW5VUkwsc2Nyb2xsLHRocm90dGxlLHVpZH07IiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vcXVhc2FyLm1hdC5jc3NcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCI2M2JiNGQ2MFwiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9xdWFzYXIubWF0LmNzc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL3F1YXNhci5tYXQuY3NzXCIpO1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIoZnVuY3Rpb24gKGdsb2JhbCwgdW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICBpZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5leHRIYW5kbGUgPSAxOyAvLyBTcGVjIHNheXMgZ3JlYXRlciB0aGFuIHplcm9cbiAgICB2YXIgdGFza3NCeUhhbmRsZSA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICB2YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciByZWdpc3RlckltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYWxsYmFjaykge1xuICAgICAgLy8gQ2FsbGJhY2sgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24oXCJcIiArIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIENvcHkgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIGFuZCByZWdpc3RlciB0aGUgdGFza1xuICAgICAgdmFyIHRhc2sgPSB7IGNhbGxiYWNrOiBjYWxsYmFjaywgYXJnczogYXJncyB9O1xuICAgICAgdGFza3NCeUhhbmRsZVtuZXh0SGFuZGxlXSA9IHRhc2s7XG4gICAgICByZWdpc3RlckltbWVkaWF0ZShuZXh0SGFuZGxlKTtcbiAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuKHRhc2spIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdGFzay5jYWxsYmFjaztcbiAgICAgICAgdmFyIGFyZ3MgPSB0YXNrLmFyZ3M7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBydW4odGFzayk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcnVuSWZQcmVzZW50KGhhbmRsZSk7IH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gdHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMgOiBnbG9iYWwgOiBzZWxmKSk7XG4iLCJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcbiIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImFwcFwiIH0sXG4gICAgW1xuICAgICAgX3ZtLl9tKDApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImVtb2ppXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IF92bS5pbmRleCwgZW1vamk6IFwiOnNhbnRhOjpza2luLXRvbmUtMzpcIiwgc2l6ZTogMzIgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJlbW9qaVwiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBkYXRhOiBfdm0uaW5kZXgsIGVtb2ppOiBcInNhbnRhXCIsIHNldDogXCJ0d2l0dGVyXCIsIHNpemU6IDMyIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwiZW1vamlcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgZGF0YTogX3ZtLmluZGV4LCBlbW9qaTogX3ZtLnNhbnRhRW1vamlPYmplY3QsIHNpemU6IDMyIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSwgW1xuICAgICAgICBfYyhcImJ1dHRvblwiLCB7IG9uOiB7IGNsaWNrOiBfdm0udG9nZ2xlVmlzaWJsZSB9IH0sIFtcbiAgICAgICAgICBfdm0uX3YoXCJTaG93IC8gaGlkZSB0aGUgcGlja2VyXCIpXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnNtaWxlKSB9LFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0udG9nZ2xlVmlzaWJsZSB9XG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLl9sKFtcIm5hdGl2ZVwiLCBcImFwcGxlXCIsIFwiZ29vZ2xlXCIsIFwidHdpdHRlclwiLCBcImZhY2Vib29rXCJdLCBmdW5jdGlvbihcbiAgICAgICAgICAgIHNldFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IHNldCxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGRpc2FibGVkOiBfdm0uYWN0aXZlU2V0ID09IHNldCB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5hY3RpdmVTZXQgPSBzZXRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3Moc2V0KSArIFwiXFxuICAgICAgXCIpXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXNWaXNpYmxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInBpY2tlclwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5pbmRleCxcbiAgICAgICAgICAgICAgICAgIHNldDogX3ZtLmFjdGl2ZVNldCxcbiAgICAgICAgICAgICAgICAgIG5hdGl2ZTogX3ZtLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgIGVtb2ppOiBfdm0uZW1vamksXG4gICAgICAgICAgICAgICAgICBlbW9qaVRvb2x0aXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgZW1vamlTaXplOiAzMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgc2VsZWN0OiBfdm0uc2hvd0Vtb2ppIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSwgW192bS5fdihfdm0uX3MoX3ZtLmVtb2ppc091dHB1dCkpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9tKDEpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJoMlwiLCBbX3ZtLl92KFwiUURpYWxvZyBFeGFtcGxlXCIpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwicS1idG5cIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgbGFiZWw6IFwiT3BlbiBRRGlhbG9nXCIgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uZW1vamlQaWNrZXJEaWFsb2cgPSB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwicS1kaWFsb2dcIiwge1xuICAgICAgICBzY29wZWRTbG90czogX3ZtLl91KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYm9keVwiLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIF9jKFwicGlja2VyXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IF92bS5pbmRleCwgZW1vamlTaXplOiAyNCwgbmF0aXZlOiB0cnVlIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJveHk6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0pLFxuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIHZhbHVlOiBfdm0uZW1vamlQaWNrZXJEaWFsb2csXG4gICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgX3ZtLmVtb2ppUGlja2VyRGlhbG9nID0gJCR2XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcImVtb2ppUGlja2VyRGlhbG9nXCJcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImgyXCIsIFtfdm0uX3YoXCJDdXN0b20gRGlhbG9nIEV4YW1wbGVcIildKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmVtb2ppUGlja2VyQ3VzdG9tRGlhbG9nID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX3ZtLl92KFwiXFxuICAgICAgT3BlbiBDdXR0b20gRGlhbG9nXFxuICAgIFwiKV1cbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVtb2ppUGlja2VyQ3VzdG9tRGlhbG9nXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJwb3B1cFwiIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwicG9wdXAtYm94XCIsXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmVtb2ppUGlja2VyQ3VzdG9tRGlhbG9nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInBvcHVwLWNvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBvcHVwLWNsb3NlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmVtb2ppUGlja2VyQ3VzdG9tRGlhbG9nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiWFwiKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcImgyXCIsIFtfdm0uX3YoXCJcXG4gICAgICAgICAgRW1vamkgU2VsZWN0b3JcXG4gICAgICAgIFwiKV0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcInBpY2tlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZGF0YTogX3ZtLmluZGV4LCBlbW9qaVNpemU6IDI0LCBuYXRpdmU6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJoMlwiLCBbX3ZtLl92KFwiQ3VzdG9tIFNlYXJjaCBBbmQgUHJldmlldyBUZW1wbGF0ZXMgRXhhbXBsZVwiKV0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcIlBpY2tlclwiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBkYXRhOiBfdm0uaW5kZXgsIG5hdGl2ZTogdHJ1ZSB9LFxuICAgICAgICAgICAgc2NvcGVkU2xvdHM6IF92bS5fdShbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwic2VhcmNoVGVtcGxhdGVcIixcbiAgICAgICAgICAgICAgICBmbjogZnVuY3Rpb24oc2xvdFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogc2xvdFByb3BzLmkxOG4uc2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2xvdFByb3BzLm9uU2VhcmNoKCRldmVudC50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogXCJwcmV2aWV3VGVtcGxhdGVcIixcbiAgICAgICAgICAgICAgICBmbjogZnVuY3Rpb24oc2xvdFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlld1wiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1lbW9qaVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiRW1vamlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzbG90UHJvcHMuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiBzbG90UHJvcHMuZW1vamlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzbG90UHJvcHMuZW1vamlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcInBvaW50X3VwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmU6IHNsb3RQcm9wcy5lbW9qaVByb3BzLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraW46IHNsb3RQcm9wcy5lbW9qaVByb3BzLnNraW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IHNsb3RQcm9wcy5lbW9qaVByb3BzLnNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWRhdGFcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1uYW1lXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFByb3BzLmVtb2ppXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIn5cIiArIHNsb3RQcm9wcy5lbW9qaS5uYW1lICsgXCJ+XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiQ2hvb3NlLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lc1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFByb3BzLmVtb2ppID8gc2xvdFByb3BzLmVtb2ppLmNvbG9ucyA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJoMlwiLCBbX3ZtLl92KFwiRmlsdGVyZWQgcGlja2VyIGV4YW1wbGVcIildKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uZmxhZ3NWaXNpYmxlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImZsYWdzVmlzaWJsZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJyb3dcIlxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJQaWNrZXJcIiwge1xuICAgICAgICAgICAgcmVmOiBcImZsYWdzXCIsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBuYXRpdmU6IHRydWUsXG4gICAgICAgICAgICAgIGVtb2ppOiBcImZsYWctdGZcIixcbiAgICAgICAgICAgICAgZW1vamlTaXplOiAxOCxcbiAgICAgICAgICAgICAgZGF0YTogX3ZtLmluZGV4RmlsdGVyZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSwgW1xuICAgICAgICBfYyhcImJ1dHRvblwiLCB7IG9uOiB7IGNsaWNrOiBfdm0udG9nZ2xlRmxhZ3NWaXNpYmxlIH0gfSwgW1xuICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgIFNob3cgLyBoaWRlIHRoZSBmbGFncyBwaWNrZXIgKHdpdGggdi1zaG93KVxcbiAgICBcIilcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJoMlwiLCBbX3ZtLl92KFwiSTE4biBwaWNrZXIgZXhhbXBsZVwiKV0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcIlBpY2tlclwiLCB7XG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBlbW9qaTogXCJkZXBhcnRtZW50X3N0b3JlXCIsXG4gICAgICAgICAgICAgIGRhdGE6IF92bS5pbmRleEkxOG4sXG4gICAgICAgICAgICAgIGkxOG46IF92bS5pMThuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiaDJcIiwgW192bS5fdihcIkN1c3RvbSBvcmRlciBleGFtcGxlXCIpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW19jKFwiUGlja2VyXCIsIHsgYXR0cnM6IHsgZGF0YTogX3ZtLmluZGV4SW5jbHVkZSB9IH0pXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW1xuICBmdW5jdGlvbigpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sIFtcbiAgICAgIF9jKFwiaDFcIiwgW192bS5fdihcIkVtb2ppIE1hcnQgVnVlIPCfj6xcIildKVxuICAgIF0pXG4gIH0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHZhciBfdm0gPSB0aGlzXG4gICAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gICAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gICAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93LXNtYWxsXCIgfSwgW1xuICAgICAgX2MoXCJpZnJhbWVcIiwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHNyYzpcbiAgICAgICAgICAgIFwiaHR0cHM6Ly9naGJ0bnMuY29tL2dpdGh1Yi1idG4uaHRtbD91c2VyPXNlcmVicm92JnJlcG89ZW1vamktbWFydC12dWUmdHlwZT1zdGFyJmNvdW50PXRydWVcIixcbiAgICAgICAgICBmcmFtZUJvcmRlcjogXCIwXCIsXG4gICAgICAgICAgc2Nyb2xsaW5nOiBcIjBcIixcbiAgICAgICAgICB3aWR0aDogXCI5MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjIwcHhcIlxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF0pXG4gIH1cbl1cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0udmlldy5jYW5SZW5kZXJcbiAgICA/IF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtZW1vamlcIixcbiAgICAgICAgICBhdHRyczogeyB0aXRsZTogX3ZtLnZpZXcudGl0bGUsIFwiZGF0YS10aXRsZVwiOiBfdm0udGl0bGUgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgbW91c2VlbnRlcjogX3ZtLm9uTW91c2VFbnRlcixcbiAgICAgICAgICAgIG1vdXNlbGVhdmU6IF92bS5vbk1vdXNlTGVhdmUsXG4gICAgICAgICAgICBjbGljazogX3ZtLm9uQ2xpY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnZpZXcuY3NzQ2xhc3MsIHN0eWxlOiBfdm0udmlldy5jc3NTdHlsZSB9LCBbXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS52aWV3LmNvbnRlbnQpKVxuICAgICAgICAgIF0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydCBlbW9qaS1tYXJ0LXN0YXRpY1wiLCBzdHlsZTogX3ZtLmN1c3RvbVN0eWxlcyB9LFxuICAgIFtcbiAgICAgIF92bS5zaG93Q2F0ZWdvcmllc1xuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1iYXIgZW1vamktbWFydC1iYXItYW5jaG9yc1wiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiYW5jaG9yc1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgaTE4bjogX3ZtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgICAgICAgICBjb2xvcjogX3ZtLmNvbG9yLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllczogX3ZtLmNhdGVnb3JpZXMsXG4gICAgICAgICAgICAgICAgICBcImFjdGl2ZS1jYXRlZ29yeVwiOiBfdm0uYWN0aXZlQ2F0ZWdvcnlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ub25BbmNob3JDbGljayB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX3QoXG4gICAgICAgIFwic2VhcmNoVGVtcGxhdGVcIixcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5zaG93U2VhcmNoXG4gICAgICAgICAgICA/IF9jKFwic2VhcmNoXCIsIHtcbiAgICAgICAgICAgICAgICByZWY6IFwic2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgaTE4bjogX3ZtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgICAgICAgICBcImF1dG8tZm9jdXNcIjogX3ZtLmF1dG9Gb2N1cyxcbiAgICAgICAgICAgICAgICAgIFwib24tc2VhcmNoXCI6IF92bS5vblNlYXJjaFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgc2VhcmNoOiBfdm0ub25TZWFyY2ggfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICB7XG4gICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgaTE4bjogX3ZtLmkxOG4sXG4gICAgICAgICAgYXV0b0ZvY3VzOiBfdm0uYXV0b0ZvY3VzLFxuICAgICAgICAgIG9uU2VhcmNoOiBfdm0ub25TZWFyY2hcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJzY3JvbGxcIixcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXNjcm9sbFwiLFxuICAgICAgICAgIG9uOiB7IHNjcm9sbDogX3ZtLm9uU2Nyb2xsIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiY2F0ZWdvcnlcIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNlYXJjaEVtb2ppcyxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNlYXJjaEVtb2ppc1wiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBkYXRhOiBfdm0uZGF0YSxcbiAgICAgICAgICAgICAgaTE4bjogX3ZtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgICAgIGlkOiBcInNlYXJjaFwiLFxuICAgICAgICAgICAgICBuYW1lOiBcIlNlYXJjaFwiLFxuICAgICAgICAgICAgICBlbW9qaXM6IF92bS5zZWFyY2hFbW9qaXMsXG4gICAgICAgICAgICAgIFwiZW1vamktcHJvcHNcIjogX3ZtLmVtb2ppUHJvcHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5fbChfdm0uZmlsdGVyZWRDYXRlZ29yaWVzLCBmdW5jdGlvbihjYXRlZ29yeSwgaWR4KSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXCJjYXRlZ29yeVwiLCB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgIV92bS5zZWFyY2hFbW9qaXMgJiZcbiAgICAgICAgICAgICAgICAgICAgKF92bS5pbmZpbml0ZVNjcm9sbCB8fCBjYXRlZ29yeSA9PSBfdm0uYWN0aXZlQ2F0ZWdvcnkpLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgICAgICAgICAgICAgXCIhc2VhcmNoRW1vamlzICYmIChpbmZpbml0ZVNjcm9sbCB8fCBjYXRlZ29yeSA9PSBhY3RpdmVDYXRlZ29yeSlcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAga2V5OiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgcmVmOiBcImNhdGVnb3JpZXNfXCIgKyBpZHgsXG4gICAgICAgICAgICAgIHJlZkluRm9yOiB0cnVlLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgIGkxOG46IF92bS5tZXJnZWRJMThuLFxuICAgICAgICAgICAgICAgIGlkOiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiBjYXRlZ29yeS5uYW1lLFxuICAgICAgICAgICAgICAgIGVtb2ppczogY2F0ZWdvcnkuZW1vamlzLFxuICAgICAgICAgICAgICAgIFwiZW1vamktcHJvcHNcIjogX3ZtLmVtb2ppUHJvcHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fdChcbiAgICAgICAgXCJwcmV2aWV3VGVtcGxhdGVcIixcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5zaG93UHJldmlld1xuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1iYXIgZW1vamktbWFydC1iYXItcHJldmlld1wiIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJwcmV2aWV3XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBfdm0uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiBfdm0ucHJldmlld0Vtb2ppLFxuICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZS1lbW9qaVwiOiBfdm0uaWRsZUVtb2ppLFxuICAgICAgICAgICAgICAgICAgICAgIFwic2hvdy1za2luLXRvbmVzXCI6IF92bS5zaG93U2tpblRvbmVzLFxuICAgICAgICAgICAgICAgICAgICAgIFwiZW1vamktcHJvcHNcIjogX3ZtLmVtb2ppUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgXCJza2luLXByb3BzXCI6IF92bS5za2luUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgXCJvbi1za2luLWNoYW5nZVwiOiBfdm0ub25Ta2luQ2hhbmdlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgIHRpdGxlOiBfdm0udGl0bGUsXG4gICAgICAgICAgZW1vamk6IF92bS5wcmV2aWV3RW1vamksXG4gICAgICAgICAgaWRsZUVtb2ppOiBfdm0uaWRsZUVtb2ppLFxuICAgICAgICAgIHNob3dTa2luVG9uZXM6IF92bS5zaG93U2tpblRvbmVzLFxuICAgICAgICAgIGVtb2ppUHJvcHM6IF92bS5lbW9qaVByb3BzLFxuICAgICAgICAgIHNraW5Qcm9wczogX3ZtLnNraW5Qcm9wcyxcbiAgICAgICAgICBvblNraW5DaGFuZ2U6IF92bS5vblNraW5DaGFuZ2VcbiAgICAgICAgfVxuICAgICAgKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1hbmNob3JzXCIgfSxcbiAgICBfdm0uX2woX3ZtLmNhdGVnb3JpZXMsIGZ1bmN0aW9uKGNhdGVnb3J5KSB7XG4gICAgICByZXR1cm4gX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LWFuY2hvclwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LWFuY2hvci1zZWxlY3RlZFwiOiBjYXRlZ29yeS5pZCA9PSBfdm0uYWN0aXZlQ2F0ZWdvcnkuaWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBjb2xvcjogY2F0ZWdvcnkuaWQgPT0gX3ZtLmFjdGl2ZUNhdGVnb3J5LmlkID8gX3ZtLmNvbG9yIDogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXR0cnM6IHsgXCJkYXRhLXRpdGxlXCI6IF92bS5pMThuLmNhdGVnb3JpZXNbY2F0ZWdvcnkuaWRdIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS4kZW1pdChcImNsaWNrXCIsIGNhdGVnb3J5KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnN2Z3NbY2F0ZWdvcnkuaWRdKSB9IH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtYW5jaG9yLWJhclwiLFxuICAgICAgICAgICAgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yOiBfdm0uY29sb3IgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICB9KSxcbiAgICAwXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5pc1Zpc2libGUgJiYgKF92bS5pc1NlYXJjaCB8fCBfdm0uaGFzUmVzdWx0cylcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgIFwiZW1vamktbWFydC1jYXRlZ29yeVwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LW5vLXJlc3VsdHNcIjogIV92bS5oYXNSZXN1bHRzXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWNhdGVnb3J5LWxhYmVsXCIgfSwgW1xuICAgICAgICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5pMThuLmNhdGVnb3JpZXNbX3ZtLmlkXSkpXSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5fbChfdm0uZW1vamlPYmplY3RzLCBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgIHZhciBlbW9qaU9iamVjdCA9IHJlZi5lbW9qaU9iamVjdFxuICAgICAgICAgICAgdmFyIGVtb2ppVmlldyA9IHJlZi5lbW9qaVZpZXdcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIGVtb2ppVmlldy5jYW5SZW5kZXJcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtZW1vamlcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXRpdGxlXCI6IGVtb2ppT2JqZWN0LnNob3J0X25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZW1vamlWaWV3LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5lbW9qaVByb3BzLm9uRW50ZXIoZW1vamlWaWV3LmdldEVtb2ppKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5lbW9qaVByb3BzLm9uTGVhdmUoZW1vamlWaWV3LmdldEVtb2ppKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZW1vamlQcm9wcy5vbkNsaWNrKGVtb2ppVmlldy5nZXRFbW9qaSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBlbW9qaVZpZXcuY3NzQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBlbW9qaVZpZXcuY3NzU3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhlbW9qaVZpZXcuY29udGVudCkpXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0uaGFzUmVzdWx0c1xuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiZW1vamlcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiBcInNsZXV0aF9vcl9zcHlcIixcbiAgICAgICAgICAgICAgICAgICAgICBuYXRpdmU6IF92bS5lbW9qaVByb3BzLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICBza2luOiBfdm0uZW1vamlQcm9wcy5za2luLFxuICAgICAgICAgICAgICAgICAgICAgIHNldDogX3ZtLmVtb2ppUHJvcHMuc2V0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1uby1yZXN1bHRzLWxhYmVsXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5pMThuLm5vdGZvdW5kKSlcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXdcIiB9LFxuICAgIFtcbiAgICAgIF92bS5lbW9qaVxuICAgICAgICA/IFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1lbW9qaVwiIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcImVtb2ppXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBlbW9qaTogX3ZtLmVtb2ppLFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmU6IF92bS5lbW9qaVByb3BzLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgc2tpbjogX3ZtLmVtb2ppUHJvcHMuc2tpbixcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBfdm0uZW1vamlQcm9wcy5zZXRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWRhdGFcIiB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uZW1vamkubmFtZSkpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZXNcIiB9LFxuICAgICAgICAgICAgICAgIF92bS5fbChfdm0uZW1vamlTaG9ydE5hbWVzLCBmdW5jdGlvbihzaG9ydE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IHNob3J0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIjpcIiArIF92bS5fcyhzaG9ydE5hbWUpICsgXCI6XCIpXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbnNcIiB9LFxuICAgICAgICAgICAgICAgIF92bS5fbChfdm0uZW1vamlFbW90aWNvbnMsIGZ1bmN0aW9uKGVtb3RpY29uKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBlbW90aWNvbixcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb25cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhlbW90aWNvbikpXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdXG4gICAgICAgIDogW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCIgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwiZW1vamlcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGVtb2ppOiBfdm0uaWRsZUVtb2ppLFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmU6IF92bS5lbW9qaVByb3BzLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgc2tpbjogX3ZtLmVtb2ppUHJvcHMuc2tpbixcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBfdm0uZW1vamlQcm9wcy5zZXRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWRhdGFcIiB9LCBbXG4gICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtdGl0bGUtbGFiZWxcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLnNob3dTa2luVG9uZXNcbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1za2luc1wiIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwic2tpbnNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNraW46IF92bS5za2luUHJvcHMuc2tpbiB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uU2tpbkNoYW5nZSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICBdXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1zZWFyY2hcIiB9LCBbXG4gICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgdmFsdWU6IF92bS52YWx1ZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcInZhbHVlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7IHR5cGU6IFwidGV4dFwiLCBwbGFjZWhvbGRlcjogX3ZtLmkxOG4uc2VhcmNoIH0sXG4gICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnZhbHVlIH0sXG4gICAgICBvbjoge1xuICAgICAgICBpbnB1dDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCRldmVudC50YXJnZXQuY29tcG9zaW5nKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgX3ZtLnZhbHVlID0gJGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgY2xhc3M6IHtcbiAgICAgICAgXCJlbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJlbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMtb3BlbmVkXCI6IF92bS5vcGVuZWRcbiAgICAgIH1cbiAgICB9LFxuICAgIF92bS5fbCg2LCBmdW5jdGlvbihza2luVG9uZSkge1xuICAgICAgcmV0dXJuIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIGtleTogc2tpblRvbmUsXG4gICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgIFwiZW1vamktbWFydC1za2luLXN3YXRjaFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LXNraW4tc3dhdGNoLXNlbGVjdGVkXCI6IF92bS5za2luID09IHNraW5Ub25lXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcImVtb2ppLW1hcnQtc2tpbiBlbW9qaS1tYXJ0LXNraW4tdG9uZS1cIiArIHNraW5Ub25lLFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25DbGljayhza2luVG9uZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICB9KSxcbiAgICAwXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuIiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCI3MDQyYzc4YVwiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmbGFuZz1jc3MmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuICBNb2RpZmllZCBieSBFdmFuIFlvdSBAeXl4OTkwODAzXG4qL1xuXG5pbXBvcnQgbGlzdFRvU3R5bGVzIGZyb20gJy4vbGlzdFRvU3R5bGVzJ1xuXG52YXIgaGFzRG9jdW1lbnQgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG5cbmlmICh0eXBlb2YgREVCVUcgIT09ICd1bmRlZmluZWQnICYmIERFQlVHKSB7XG4gIGlmICghaGFzRG9jdW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3Z1ZS1zdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudC4gJyArXG4gICAgXCJVc2UgeyB0YXJnZXQ6ICdub2RlJyB9IGluIHlvdXIgV2VicGFjayBjb25maWcgdG8gaW5kaWNhdGUgYSBzZXJ2ZXItcmVuZGVyaW5nIGVudmlyb25tZW50LlwiXG4gICkgfVxufVxuXG4vKlxudHlwZSBTdHlsZU9iamVjdCA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgcGFydHM6IEFycmF5PFN0eWxlT2JqZWN0UGFydD5cbn1cblxudHlwZSBTdHlsZU9iamVjdFBhcnQgPSB7XG4gIGNzczogc3RyaW5nO1xuICBtZWRpYTogc3RyaW5nO1xuICBzb3VyY2VNYXA6ID9zdHJpbmdcbn1cbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHsvKlxuICBbaWQ6IG51bWJlcl06IHtcbiAgICBpZDogbnVtYmVyLFxuICAgIHJlZnM6IG51bWJlcixcbiAgICBwYXJ0czogQXJyYXk8KG9iaj86IFN0eWxlT2JqZWN0UGFydCkgPT4gdm9pZD5cbiAgfVxuKi99XG5cbnZhciBoZWFkID0gaGFzRG9jdW1lbnQgJiYgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSlcbnZhciBzaW5nbGV0b25FbGVtZW50ID0gbnVsbFxudmFyIHNpbmdsZXRvbkNvdW50ZXIgPSAwXG52YXIgaXNQcm9kdWN0aW9uID0gZmFsc2VcbnZhciBub29wID0gZnVuY3Rpb24gKCkge31cbnZhciBvcHRpb25zID0gbnVsbFxudmFyIHNzcklkS2V5ID0gJ2RhdGEtdnVlLXNzci1pZCdcblxuLy8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG4vLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG52YXIgaXNPbGRJRSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIC9tc2llIFs2LTldXFxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkU3R5bGVzQ2xpZW50IChwYXJlbnRJZCwgbGlzdCwgX2lzUHJvZHVjdGlvbiwgX29wdGlvbnMpIHtcbiAgaXNQcm9kdWN0aW9uID0gX2lzUHJvZHVjdGlvblxuXG4gIG9wdGlvbnMgPSBfb3B0aW9ucyB8fCB7fVxuXG4gIHZhciBzdHlsZXMgPSBsaXN0VG9TdHlsZXMocGFyZW50SWQsIGxpc3QpXG4gIGFkZFN0eWxlc1RvRG9tKHN0eWxlcylcblxuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlIChuZXdMaXN0KSB7XG4gICAgdmFyIG1heVJlbW92ZSA9IFtdXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gc3R5bGVzW2ldXG4gICAgICB2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXVxuICAgICAgZG9tU3R5bGUucmVmcy0tXG4gICAgICBtYXlSZW1vdmUucHVzaChkb21TdHlsZSlcbiAgICB9XG4gICAgaWYgKG5ld0xpc3QpIHtcbiAgICAgIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhwYXJlbnRJZCwgbmV3TGlzdClcbiAgICAgIGFkZFN0eWxlc1RvRG9tKHN0eWxlcylcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzID0gW11cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXVxuICAgICAgaWYgKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGRvbVN0eWxlLnBhcnRzW2pdKClcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMgLyogQXJyYXk8U3R5bGVPYmplY3Q+ICovKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBzdHlsZXNbaV1cbiAgICB2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXVxuICAgIGlmIChkb21TdHlsZSkge1xuICAgICAgZG9tU3R5bGUucmVmcysrXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pXG4gICAgICB9XG4gICAgICBmb3IgKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdKSlcbiAgICAgIH1cbiAgICAgIGlmIChkb21TdHlsZS5wYXJ0cy5sZW5ndGggPiBpdGVtLnBhcnRzLmxlbmd0aCkge1xuICAgICAgICBkb21TdHlsZS5wYXJ0cy5sZW5ndGggPSBpdGVtLnBhcnRzLmxlbmd0aFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFydHMgPSBbXVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSkpXG4gICAgICB9XG4gICAgICBzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHsgaWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0cyB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAoKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpXG4gIHN0eWxlRWxlbWVudC50eXBlID0gJ3RleHQvY3NzJ1xuICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudClcbiAgcmV0dXJuIHN0eWxlRWxlbWVudFxufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqIC8qIFN0eWxlT2JqZWN0UGFydCAqLykge1xuICB2YXIgdXBkYXRlLCByZW1vdmVcbiAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlWycgKyBzc3JJZEtleSArICd+PVwiJyArIG9iai5pZCArICdcIl0nKVxuXG4gIGlmIChzdHlsZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNQcm9kdWN0aW9uKSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBhbmQgaW4gcHJvZHVjdGlvbiBtb2RlLlxuICAgICAgLy8gc2ltcGx5IGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbm9vcFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBidXQgaW4gZGV2IG1vZGUuXG4gICAgICAvLyBmb3Igc29tZSByZWFzb24gQ2hyb21lIGNhbid0IGhhbmRsZSBzb3VyY2UgbWFwIGluIHNlcnZlci1yZW5kZXJlZFxuICAgICAgLy8gc3R5bGUgdGFncyAtIHNvdXJjZSBtYXBzIGluIDxzdHlsZT4gb25seSB3b3JrcyBpZiB0aGUgc3R5bGUgdGFnIGlzXG4gICAgICAvLyBjcmVhdGVkIGFuZCBpbnNlcnRlZCBkeW5hbWljYWxseS4gU28gd2UgcmVtb3ZlIHRoZSBzZXJ2ZXIgcmVuZGVyZWRcbiAgICAgIC8vIHN0eWxlcyBhbmQgaW5qZWN0IG5ldyBvbmVzLlxuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc09sZElFKSB7XG4gICAgLy8gdXNlIHNpbmdsZXRvbiBtb2RlIGZvciBJRTkuXG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKytcbiAgICBzdHlsZUVsZW1lbnQgPSBzaW5nbGV0b25FbGVtZW50IHx8IChzaW5nbGV0b25FbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KCkpXG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgZmFsc2UpXG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgdHJ1ZSlcbiAgfSBlbHNlIHtcbiAgICAvLyB1c2UgbXVsdGktc3R5bGUtdGFnIG1vZGUgaW4gYWxsIG90aGVyIGNhc2VzXG4gICAgc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KClcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50KVxuICAgIHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudClcbiAgICB9XG4gIH1cblxuICB1cGRhdGUob2JqKVxuXG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqIC8qIFN0eWxlT2JqZWN0UGFydCAqLykge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG4gICAgICAgICAgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcbiAgICAgICAgICBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iailcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnRcbiAgICByZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKVxuICB9XG59KSgpXG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlRWxlbWVudCwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG4gIHZhciBjc3MgPSByZW1vdmUgPyAnJyA6IG9iai5jc3NcblxuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcylcbiAgfSBlbHNlIHtcbiAgICB2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcylcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlRWxlbWVudC5jaGlsZE5vZGVzXG4gICAgaWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pXG4gICAgaWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY3NzTm9kZSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGVFbGVtZW50LCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3NcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwXG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnbWVkaWEnLCBtZWRpYSlcbiAgfVxuICBpZiAob3B0aW9ucy5zc3JJZCkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoc3NySWRLZXksIG9iai5pZClcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXApIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2RldnRvb2xzL2RvY3MvamF2YXNjcmlwdC1kZWJ1Z2dpbmdcbiAgICAvLyB0aGlzIG1ha2VzIHNvdXJjZSBtYXBzIGluc2lkZSBzdHlsZSB0YWdzIHdvcmsgcHJvcGVybHkgaW4gQ2hyb21lXG4gICAgY3NzICs9ICdcXG4vKiMgc291cmNlVVJMPScgKyBzb3VyY2VNYXAuc291cmNlc1swXSArICcgKi8nXG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcbiAgICBjc3MgKz0gJ1xcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsJyArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyAnICovJ1xuICB9XG5cbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzc1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKVxuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSlcbiAgfVxufVxuIiwiLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBsaXN0IGZvcm1hdCBwcm9kdWNlZCBieSBjc3MtbG9hZGVyIGludG8gc29tZXRoaW5nXG4gKiBlYXNpZXIgdG8gbWFuaXB1bGF0ZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChwYXJlbnRJZCwgbGlzdCkge1xuICB2YXIgc3R5bGVzID0gW11cbiAgdmFyIG5ld1N0eWxlcyA9IHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXVxuICAgIHZhciBpZCA9IGl0ZW1bMF1cbiAgICB2YXIgY3NzID0gaXRlbVsxXVxuICAgIHZhciBtZWRpYSA9IGl0ZW1bMl1cbiAgICB2YXIgc291cmNlTWFwID0gaXRlbVszXVxuICAgIHZhciBwYXJ0ID0ge1xuICAgICAgaWQ6IHBhcmVudElkICsgJzonICsgaSxcbiAgICAgIGNzczogY3NzLFxuICAgICAgbWVkaWE6IG1lZGlhLFxuICAgICAgc291cmNlTWFwOiBzb3VyY2VNYXBcbiAgICB9XG4gICAgaWYgKCFuZXdTdHlsZXNbaWRdKSB7XG4gICAgICBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0geyBpZDogaWQsIHBhcnRzOiBbcGFydF0gfSlcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpXG4gICAgfVxuICB9XG4gIHJldHVybiBzdHlsZXNcbn1cbiIsIi8qIVxuICogVnVlLmpzIHYyLjYuMTBcbiAqIChjKSAyMDE0LTIwMTkgRXZhbiBZb3VcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuLyogICovXG5cbnZhciBlbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuXG4vLyBUaGVzZSBoZWxwZXJzIHByb2R1Y2UgYmV0dGVyIFZNIGNvZGUgaW4gSlMgZW5naW5lcyBkdWUgdG8gdGhlaXJcbi8vIGV4cGxpY2l0bmVzcyBhbmQgZnVuY3Rpb24gaW5saW5pbmcuXG5mdW5jdGlvbiBpc1VuZGVmICh2KSB7XG4gIHJldHVybiB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0RlZiAodikge1xuICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNUcnVlICh2KSB7XG4gIHJldHVybiB2ID09PSB0cnVlXG59XG5cbmZ1bmN0aW9uIGlzRmFsc2UgKHYpIHtcbiAgcmV0dXJuIHYgPT09IGZhbHNlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgcHJpbWl0aXZlLlxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJ1xuICApXG59XG5cbi8qKlxuICogUXVpY2sgb2JqZWN0IGNoZWNrIC0gdGhpcyBpcyBwcmltYXJpbHkgdXNlZCB0byB0ZWxsXG4gKiBPYmplY3RzIGZyb20gcHJpbWl0aXZlIHZhbHVlcyB3aGVuIHdlIGtub3cgdGhlIHZhbHVlXG4gKiBpcyBhIEpTT04tY29tcGxpYW50IHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xufVxuXG4vKipcbiAqIEdldCB0aGUgcmF3IHR5cGUgc3RyaW5nIG9mIGEgdmFsdWUsIGUuZy4sIFtvYmplY3QgT2JqZWN0XS5cbiAqL1xudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHRvUmF3VHlwZSAodmFsdWUpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSlcbn1cblxuLyoqXG4gKiBTdHJpY3Qgb2JqZWN0IHR5cGUgY2hlY2suIE9ubHkgcmV0dXJucyB0cnVlXG4gKiBmb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nXG59XG5cbmZ1bmN0aW9uIGlzUmVnRXhwICh2KSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2KSA9PT0gJ1tvYmplY3QgUmVnRXhwXSdcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWwgaXMgYSB2YWxpZCBhcnJheSBpbmRleC5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEFycmF5SW5kZXggKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQoU3RyaW5nKHZhbCkpO1xuICByZXR1cm4gbiA+PSAwICYmIE1hdGguZmxvb3IobikgPT09IG4gJiYgaXNGaW5pdGUodmFsKVxufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UgKHZhbCkge1xuICByZXR1cm4gKFxuICAgIGlzRGVmKHZhbCkgJiZcbiAgICB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgdmFsLmNhdGNoID09PSAnZnVuY3Rpb24nXG4gIClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgdG8gYSBzdHJpbmcgdGhhdCBpcyBhY3R1YWxseSByZW5kZXJlZC5cbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcgKHZhbCkge1xuICByZXR1cm4gdmFsID09IG51bGxcbiAgICA/ICcnXG4gICAgOiBBcnJheS5pc0FycmF5KHZhbCkgfHwgKGlzUGxhaW5PYmplY3QodmFsKSAmJiB2YWwudG9TdHJpbmcgPT09IF90b1N0cmluZylcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCAyKVxuICAgICAgOiBTdHJpbmcodmFsKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gaW5wdXQgdmFsdWUgdG8gYSBudW1iZXIgZm9yIHBlcnNpc3RlbmNlLlxuICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybiBvcmlnaW5hbCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyICh2YWwpIHtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KHZhbCk7XG4gIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG5cbn1cblxuLyoqXG4gKiBNYWtlIGEgbWFwIGFuZCByZXR1cm4gYSBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYSBrZXlcbiAqIGlzIGluIHRoYXQgbWFwLlxuICovXG5mdW5jdGlvbiBtYWtlTWFwIChcbiAgc3RyLFxuICBleHBlY3RzTG93ZXJDYXNlXG4pIHtcbiAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIG1hcFtsaXN0W2ldXSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGV4cGVjdHNMb3dlckNhc2VcbiAgICA/IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWwudG9Mb3dlckNhc2UoKV07IH1cbiAgICA6IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWxdOyB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0YWcgaXMgYSBidWlsdC1pbiB0YWcuXG4gKi9cbnZhciBpc0J1aWx0SW5UYWcgPSBtYWtlTWFwKCdzbG90LGNvbXBvbmVudCcsIHRydWUpO1xuXG4vKipcbiAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZS5cbiAqL1xudmFyIGlzUmVzZXJ2ZWRBdHRyaWJ1dGUgPSBtYWtlTWFwKCdrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpcycpO1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpdGVtIGZyb20gYW4gYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZSAoYXJyLCBpdGVtKSB7XG4gIGlmIChhcnIubGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBhcnIuc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkuXG4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBoYXNPd24gKG9iaiwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNhY2hlZCB2ZXJzaW9uIG9mIGEgcHVyZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FjaGVkIChmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gKGZ1bmN0aW9uIGNhY2hlZEZuIChzdHIpIHtcbiAgICB2YXIgaGl0ID0gY2FjaGVbc3RyXTtcbiAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxuICovXG52YXIgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcbnZhciBjYW1lbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCBmdW5jdGlvbiAoXywgYykgeyByZXR1cm4gYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnOyB9KVxufSk7XG5cbi8qKlxuICogQ2FwaXRhbGl6ZSBhIHN0cmluZy5cbiAqL1xudmFyIGNhcGl0YWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpXG59KTtcblxuLyoqXG4gKiBIeXBoZW5hdGUgYSBjYW1lbENhc2Ugc3RyaW5nLlxuICovXG52YXIgaHlwaGVuYXRlUkUgPSAvXFxCKFtBLVpdKS9nO1xudmFyIGh5cGhlbmF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJy0kMScpLnRvTG93ZXJDYXNlKClcbn0pO1xuXG4vKipcbiAqIFNpbXBsZSBiaW5kIHBvbHlmaWxsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBpdCxcbiAqIGUuZy4sIFBoYW50b21KUyAxLnguIFRlY2huaWNhbGx5LCB3ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZVxuICogc2luY2UgbmF0aXZlIGJpbmQgaXMgbm93IHBlcmZvcm1hbnQgZW5vdWdoIGluIG1vc3QgYnJvd3NlcnMuXG4gKiBCdXQgcmVtb3ZpbmcgaXQgd291bGQgbWVhbiBicmVha2luZyBjb2RlIHRoYXQgd2FzIGFibGUgdG8gcnVuIGluXG4gKiBQaGFudG9tSlMgMS54LCBzbyB0aGlzIG11c3QgYmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gcG9seWZpbGxCaW5kIChmbiwgY3R4KSB7XG4gIGZ1bmN0aW9uIGJvdW5kRm4gKGEpIHtcbiAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIGxcbiAgICAgID8gbCA+IDFcbiAgICAgICAgPyBmbi5hcHBseShjdHgsIGFyZ3VtZW50cylcbiAgICAgICAgOiBmbi5jYWxsKGN0eCwgYSlcbiAgICAgIDogZm4uY2FsbChjdHgpXG4gIH1cblxuICBib3VuZEZuLl9sZW5ndGggPSBmbi5sZW5ndGg7XG4gIHJldHVybiBib3VuZEZuXG59XG5cbmZ1bmN0aW9uIG5hdGl2ZUJpbmQgKGZuLCBjdHgpIHtcbiAgcmV0dXJuIGZuLmJpbmQoY3R4KVxufVxuXG52YXIgYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gID8gbmF0aXZlQmluZFxuICA6IHBvbHlmaWxsQmluZDtcblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgcmVhbCBBcnJheS5cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSAobGlzdCwgc3RhcnQpIHtcbiAgc3RhcnQgPSBzdGFydCB8fCAwO1xuICB2YXIgaSA9IGxpc3QubGVuZ3RoIC0gc3RhcnQ7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0pIHtcbiAgICByZXRbaV0gPSBsaXN0W2kgKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG4vKipcbiAqIE1peCBwcm9wZXJ0aWVzIGludG8gdGFyZ2V0IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kICh0bywgX2Zyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIF9mcm9tKSB7XG4gICAgdG9ba2V5XSA9IF9mcm9tW2tleV07XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbi8qKlxuICogTWVyZ2UgYW4gQXJyYXkgb2YgT2JqZWN0cyBpbnRvIGEgc2luZ2xlIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gdG9PYmplY3QgKGFycikge1xuICB2YXIgcmVzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycltpXSkge1xuICAgICAgZXh0ZW5kKHJlcywgYXJyW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKipcbiAqIFBlcmZvcm0gbm8gb3BlcmF0aW9uLlxuICogU3R1YmJpbmcgYXJncyB0byBtYWtlIEZsb3cgaGFwcHkgd2l0aG91dCBsZWF2aW5nIHVzZWxlc3MgdHJhbnNwaWxlZCBjb2RlXG4gKiB3aXRoIC4uLnJlc3QgKGh0dHBzOi8vZmxvdy5vcmcvYmxvZy8yMDE3LzA1LzA3L1N0cmljdC1GdW5jdGlvbi1DYWxsLUFyaXR5LykuXG4gKi9cbmZ1bmN0aW9uIG5vb3AgKGEsIGIsIGMpIHt9XG5cbi8qKlxuICogQWx3YXlzIHJldHVybiBmYWxzZS5cbiAqL1xudmFyIG5vID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGZhbHNlOyB9O1xuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbi8qKlxuICogUmV0dXJuIHRoZSBzYW1lIHZhbHVlLlxuICovXG52YXIgaWRlbnRpdHkgPSBmdW5jdGlvbiAoXykgeyByZXR1cm4gXzsgfTtcblxuLyoqXG4gKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAqIGlmIHRoZXkgYXJlIHBsYWluIG9iamVjdHMsIGRvIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaGFwZT9cbiAqL1xuZnVuY3Rpb24gbG9vc2VFcXVhbCAoYSwgYikge1xuICBpZiAoYSA9PT0gYikgeyByZXR1cm4gdHJ1ZSB9XG4gIHZhciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcbiAgdmFyIGlzT2JqZWN0QiA9IGlzT2JqZWN0KGIpO1xuICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgIHRyeSB7XG4gICAgICB2YXIgaXNBcnJheUEgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgdmFyIGlzQXJyYXlCID0gQXJyYXkuaXNBcnJheShiKTtcbiAgICAgIGlmIChpc0FycmF5QSAmJiBpc0FycmF5Qikge1xuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChlLCBiW2ldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpXG4gICAgICB9IGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcbiAgICAgICAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICByZXR1cm4ga2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiYga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZmlyc3QgaW5kZXggYXQgd2hpY2ggYSBsb29zZWx5IGVxdWFsIHZhbHVlIGNhbiBiZVxuICogZm91bmQgaW4gdGhlIGFycmF5IChpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCwgdGhlIGFycmF5IG11c3RcbiAqIGNvbnRhaW4gYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHNoYXBlKSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gKi9cbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZiAoYXJyLCB2YWwpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobG9vc2VFcXVhbChhcnJbaV0sIHZhbCkpIHsgcmV0dXJuIGkgfVxuICB9XG4gIHJldHVybiAtMVxufVxuXG4vKipcbiAqIEVuc3VyZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IG9uY2UuXG4gKi9cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBTU1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XG5cbnZhciBBU1NFVF9UWVBFUyA9IFtcbiAgJ2NvbXBvbmVudCcsXG4gICdkaXJlY3RpdmUnLFxuICAnZmlsdGVyJ1xuXTtcblxudmFyIExJRkVDWUNMRV9IT09LUyA9IFtcbiAgJ2JlZm9yZUNyZWF0ZScsXG4gICdjcmVhdGVkJyxcbiAgJ2JlZm9yZU1vdW50JyxcbiAgJ21vdW50ZWQnLFxuICAnYmVmb3JlVXBkYXRlJyxcbiAgJ3VwZGF0ZWQnLFxuICAnYmVmb3JlRGVzdHJveScsXG4gICdkZXN0cm95ZWQnLFxuICAnYWN0aXZhdGVkJyxcbiAgJ2RlYWN0aXZhdGVkJyxcbiAgJ2Vycm9yQ2FwdHVyZWQnLFxuICAnc2VydmVyUHJlZmV0Y2gnXG5dO1xuXG4vKiAgKi9cblxuXG5cbnZhciBjb25maWcgPSAoe1xuICAvKipcbiAgICogT3B0aW9uIG1lcmdlIHN0cmF0ZWdpZXMgKHVzZWQgaW4gY29yZS91dGlsL29wdGlvbnMpXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHdhcm5pbmdzLlxuICAgKi9cbiAgc2lsZW50OiBmYWxzZSxcblxuICAvKipcbiAgICogU2hvdyBwcm9kdWN0aW9uIG1vZGUgdGlwIG1lc3NhZ2Ugb24gYm9vdD9cbiAgICovXG4gIHByb2R1Y3Rpb25UaXA6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAqL1xuICBkZXZ0b29sczogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvcmQgcGVyZlxuICAgKi9cbiAgcGVyZm9ybWFuY2U6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgKi9cbiAgZXJyb3JIYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBXYXJuIGhhbmRsZXIgZm9yIHdhdGNoZXIgd2FybnNcbiAgICovXG4gIHdhcm5IYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBJZ25vcmUgY2VydGFpbiBjdXN0b20gZWxlbWVudHNcbiAgICovXG4gIGlnbm9yZWRFbGVtZW50czogW10sXG5cbiAgLyoqXG4gICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAga2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHJlZ2lzdGVyZWQgYXMgYVxuICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkVGFnOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgYXMgYSBjb21wb25lbnRcbiAgICogcHJvcC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRBdHRyOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBpc1Vua25vd25FbGVtZW50OiBubyxcblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lc3BhY2Ugb2YgYW4gZWxlbWVudFxuICAgKi9cbiAgZ2V0VGFnTmFtZXNwYWNlOiBub29wLFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcmVhbCB0YWcgbmFtZSBmb3IgdGhlIHNwZWNpZmljIHBsYXRmb3JtLlxuICAgKi9cbiAgcGFyc2VQbGF0Zm9ybVRhZ05hbWU6IGlkZW50aXR5LFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgbXVzdCBiZSBib3VuZCB1c2luZyBwcm9wZXJ0eSwgZS5nLiB2YWx1ZVxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBtdXN0VXNlUHJvcDogbm8sXG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gdXBkYXRlcyBhc3luY2hyb25vdXNseS4gSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBWdWUgVGVzdCBVdGlsc1xuICAgKiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSByZWR1Y2UgcGVyZm9ybWFuY2UgaWYgc2V0IHRvIGZhbHNlLlxuICAgKi9cbiAgYXN5bmM6IHRydWUsXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICAqL1xuICBfbGlmZWN5Y2xlSG9va3M6IExJRkVDWUNMRV9IT09LU1xufSk7XG5cbi8qICAqL1xuXG4vKipcbiAqIHVuaWNvZGUgbGV0dGVycyB1c2VkIGZvciBwYXJzaW5nIGh0bWwgdGFncywgY29tcG9uZW50IG5hbWVzIGFuZCBwcm9wZXJ0eSBwYXRocy5cbiAqIHVzaW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNTMvc2VtYW50aWNzLXNjcmlwdGluZy5odG1sI3BvdGVudGlhbGN1c3RvbWVsZW1lbnRuYW1lXG4gKiBza2lwcGluZyBcXHUxMDAwMC1cXHVFRkZGRiBkdWUgdG8gaXQgZnJlZXppbmcgdXAgUGhhbnRvbUpTXG4gKi9cbnZhciB1bmljb2RlUmVnRXhwID0gL2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoICQgb3IgX1xuICovXG5mdW5jdGlvbiBpc1Jlc2VydmVkIChzdHIpIHtcbiAgdmFyIGMgPSAoc3RyICsgJycpLmNoYXJDb2RlQXQoMCk7XG4gIHJldHVybiBjID09PSAweDI0IHx8IGMgPT09IDB4NUZcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZGVmIChvYmosIGtleSwgdmFsLCBlbnVtZXJhYmxlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIHZhbHVlOiB2YWwsXG4gICAgZW51bWVyYWJsZTogISFlbnVtZXJhYmxlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBQYXJzZSBzaW1wbGUgcGF0aC5cbiAqL1xudmFyIGJhaWxSRSA9IG5ldyBSZWdFeHAoKFwiW15cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIi4kX1xcXFxkXVwiKSk7XG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgaWYgKGJhaWxSRS50ZXN0KHBhdGgpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghb2JqKSB7IHJldHVybiB9XG4gICAgICBvYmogPSBvYmpbc2VnbWVudHNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gb2JqXG4gIH1cbn1cblxuLyogICovXG5cbi8vIGNhbiB3ZSB1c2UgX19wcm90b19fP1xudmFyIGhhc1Byb3RvID0gJ19fcHJvdG9fXycgaW4ge307XG5cbi8vIEJyb3dzZXIgZW52aXJvbm1lbnQgc25pZmZpbmdcbnZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbnZhciBpbldlZXggPSB0eXBlb2YgV1hFbnZpcm9ubWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgISFXWEVudmlyb25tZW50LnBsYXRmb3JtO1xudmFyIHdlZXhQbGF0Zm9ybSA9IGluV2VleCAmJiBXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk7XG52YXIgVUEgPSBpbkJyb3dzZXIgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbnZhciBpc0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XG52YXIgaXNJRTkgPSBVQSAmJiBVQS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbnZhciBpc0VkZ2UgPSBVQSAmJiBVQS5pbmRleE9mKCdlZGdlLycpID4gMDtcbnZhciBpc0FuZHJvaWQgPSAoVUEgJiYgVUEuaW5kZXhPZignYW5kcm9pZCcpID4gMCkgfHwgKHdlZXhQbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKTtcbnZhciBpc0lPUyA9IChVQSAmJiAvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoVUEpKSB8fCAod2VleFBsYXRmb3JtID09PSAnaW9zJyk7XG52YXIgaXNDaHJvbWUgPSBVQSAmJiAvY2hyb21lXFwvXFxkKy8udGVzdChVQSkgJiYgIWlzRWRnZTtcbnZhciBpc1BoYW50b21KUyA9IFVBICYmIC9waGFudG9tanMvLnRlc3QoVUEpO1xudmFyIGlzRkYgPSBVQSAmJiBVQS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pO1xuXG4vLyBGaXJlZm94IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJvdG90eXBlLi4uXG52YXIgbmF0aXZlV2F0Y2ggPSAoe30pLndhdGNoO1xuXG52YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5pZiAoaW5Ccm93c2VyKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdHMgPSB7fTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCAoe1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbiAgfSBjYXRjaCAoZSkge31cbn1cblxuLy8gdGhpcyBuZWVkcyB0byBiZSBsYXp5LWV2YWxlZCBiZWNhdXNlIHZ1ZSBtYXkgYmUgcmVxdWlyZWQgYmVmb3JlXG4vLyB2dWUtc2VydmVyLXJlbmRlcmVyIGNhbiBzZXQgVlVFX0VOVlxudmFyIF9pc1NlcnZlcjtcbnZhciBpc1NlcnZlclJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFpbkJyb3dzZXIgJiYgIWluV2VleCAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZGV0ZWN0IHByZXNlbmNlIG9mIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgYW5kIGF2b2lkXG4gICAgICAvLyBXZWJwYWNrIHNoaW1taW5nIHRoZSBwcm9jZXNzXG4gICAgICBfaXNTZXJ2ZXIgPSBnbG9iYWxbJ3Byb2Nlc3MnXSAmJiBnbG9iYWxbJ3Byb2Nlc3MnXS5lbnYuVlVFX0VOViA9PT0gJ3NlcnZlcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gX2lzU2VydmVyXG59O1xuXG4vLyBkZXRlY3QgZGV2dG9vbHNcbnZhciBkZXZ0b29scyA9IGluQnJvd3NlciAmJiB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGlzTmF0aXZlIChDdG9yKSB7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKVxufVxuXG52YXIgaGFzU3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU3ltYm9sKSAmJlxuICB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUmVmbGVjdC5vd25LZXlzKTtcblxudmFyIF9TZXQ7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gLy8gJGZsb3ctZGlzYWJsZS1saW5lXG5pZiAodHlwZW9mIFNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU2V0KSkge1xuICAvLyB1c2UgbmF0aXZlIFNldCB3aGVuIGF2YWlsYWJsZS5cbiAgX1NldCA9IFNldDtcbn0gZWxzZSB7XG4gIC8vIGEgbm9uLXN0YW5kYXJkIFNldCBwb2x5ZmlsbCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBwcmltaXRpdmUga2V5cy5cbiAgX1NldCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNldCAoKSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuICAgIFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldFtrZXldID09PSB0cnVlXG4gICAgfTtcbiAgICBTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAoa2V5KSB7XG4gICAgICB0aGlzLnNldFtrZXldID0gdHJ1ZTtcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhciAoKSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfTtcblxuICAgIHJldHVybiBTZXQ7XG4gIH0oKSk7XG59XG5cbi8qICAqL1xuXG52YXIgd2FybiA9IG5vb3A7XG52YXIgdGlwID0gbm9vcDtcbnZhciBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gKG5vb3ApOyAvLyB3b3JrIGFyb3VuZCBmbG93IGNoZWNrXG52YXIgZm9ybWF0Q29tcG9uZW50TmFtZSA9IChub29wKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGhhc0NvbnNvbGUgPSB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBjbGFzc2lmeVJFID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICB2YXIgY2xhc3NpZnkgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHJcbiAgICAucmVwbGFjZShjbGFzc2lmeVJFLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KVxuICAgIC5yZXBsYWNlKC9bLV9dL2csICcnKTsgfTtcblxuICB3YXJuID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcbiAgICB2YXIgdHJhY2UgPSB2bSA/IGdlbmVyYXRlQ29tcG9uZW50VHJhY2Uodm0pIDogJyc7XG5cbiAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XG4gICAgICBjb25maWcud2FybkhhbmRsZXIuY2FsbChudWxsLCBtc2csIHZtLCB0cmFjZSk7XG4gICAgfSBlbHNlIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW1Z1ZSB3YXJuXTogXCIgKyBtc2cgKyB0cmFjZSkpO1xuICAgIH1cbiAgfTtcblxuICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIltWdWUgdGlwXTogXCIgKyBtc2cgKyAoXG4gICAgICAgIHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJ1xuICAgICAgKSk7XG4gICAgfVxuICB9O1xuXG4gIGZvcm1hdENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAodm0sIGluY2x1ZGVGaWxlKSB7XG4gICAgaWYgKHZtLiRyb290ID09PSB2bSkge1xuICAgICAgcmV0dXJuICc8Um9vdD4nXG4gICAgfVxuICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHZtID09PSAnZnVuY3Rpb24nICYmIHZtLmNpZCAhPSBudWxsXG4gICAgICA/IHZtLm9wdGlvbnNcbiAgICAgIDogdm0uX2lzVnVlXG4gICAgICAgID8gdm0uJG9wdGlvbnMgfHwgdm0uY29uc3RydWN0b3Iub3B0aW9uc1xuICAgICAgICA6IHZtO1xuICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lIHx8IG9wdGlvbnMuX2NvbXBvbmVudFRhZztcbiAgICB2YXIgZmlsZSA9IG9wdGlvbnMuX19maWxlO1xuICAgIGlmICghbmFtZSAmJiBmaWxlKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBmaWxlLm1hdGNoKC8oW14vXFxcXF0rKVxcLnZ1ZSQvKTtcbiAgICAgIG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKG5hbWUgPyAoXCI8XCIgKyAoY2xhc3NpZnkobmFtZSkpICsgXCI+XCIpIDogXCI8QW5vbnltb3VzPlwiKSArXG4gICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyAoXCIgYXQgXCIgKyBmaWxlKSA6ICcnKVxuICAgIClcbiAgfTtcblxuICB2YXIgcmVwZWF0ID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB3aGlsZSAobikge1xuICAgICAgaWYgKG4gJSAyID09PSAxKSB7IHJlcyArPSBzdHI7IH1cbiAgICAgIGlmIChuID4gMSkgeyBzdHIgKz0gc3RyOyB9XG4gICAgICBuID4+PSAxO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH07XG5cbiAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xuICAgIGlmICh2bS5faXNWdWUgJiYgdm0uJHBhcmVudCkge1xuICAgICAgdmFyIHRyZWUgPSBbXTtcbiAgICAgIHZhciBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgd2hpbGUgKHZtKSB7XG4gICAgICAgIGlmICh0cmVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbGFzdCA9IHRyZWVbdHJlZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdC5jb25zdHJ1Y3RvciA9PT0gdm0uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSsrO1xuICAgICAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXSA9IFtsYXN0LCBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2VdO1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJlZS5wdXNoKHZtKTtcbiAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuICdcXG5cXG5mb3VuZCBpblxcblxcbicgKyB0cmVlXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHZtLCBpKSB7IHJldHVybiAoXCJcIiArIChpID09PSAwID8gJy0tLT4gJyA6IHJlcGVhdCgnICcsIDUgKyBpICogMikpICsgKEFycmF5LmlzQXJyYXkodm0pXG4gICAgICAgICAgICA/ICgoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSkpICsgXCIuLi4gKFwiICsgKHZtWzFdKSArIFwiIHJlY3Vyc2l2ZSBjYWxscylcIilcbiAgICAgICAgICAgIDogZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpKTsgfSlcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXCJcXG5cXG4oZm91bmQgaW4gXCIgKyAoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpICsgXCIpXCIpXG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCA9IDA7XG5cbi8qKlxuICogQSBkZXAgaXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBoYXZlIG11bHRpcGxlXG4gKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxuICovXG52YXIgRGVwID0gZnVuY3Rpb24gRGVwICgpIHtcbiAgdGhpcy5pZCA9IHVpZCsrO1xuICB0aGlzLnN1YnMgPSBbXTtcbn07XG5cbkRlcC5wcm90b3R5cGUuYWRkU3ViID0gZnVuY3Rpb24gYWRkU3ViIChzdWIpIHtcbiAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gcmVtb3ZlU3ViIChzdWIpIHtcbiAgcmVtb3ZlKHRoaXMuc3Vicywgc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgaWYgKERlcC50YXJnZXQpIHtcbiAgICBEZXAudGFyZ2V0LmFkZERlcCh0aGlzKTtcbiAgfVxufTtcblxuRGVwLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkgKCkge1xuICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxuICB2YXIgc3VicyA9IHRoaXMuc3Vicy5zbGljZSgpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZmlnLmFzeW5jKSB7XG4gICAgLy8gc3VicyBhcmVuJ3Qgc29ydGVkIGluIHNjaGVkdWxlciBpZiBub3QgcnVubmluZyBhc3luY1xuICAgIC8vIHdlIG5lZWQgdG8gc29ydCB0aGVtIG5vdyB0byBtYWtlIHN1cmUgdGhleSBmaXJlIGluIGNvcnJlY3RcbiAgICAvLyBvcmRlclxuICAgIHN1YnMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuICB9XG4gIGZvciAodmFyIGkgPSAwLCBsID0gc3Vicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBzdWJzW2ldLnVwZGF0ZSgpO1xuICB9XG59O1xuXG4vLyBUaGUgY3VycmVudCB0YXJnZXQgd2F0Y2hlciBiZWluZyBldmFsdWF0ZWQuXG4vLyBUaGlzIGlzIGdsb2JhbGx5IHVuaXF1ZSBiZWNhdXNlIG9ubHkgb25lIHdhdGNoZXJcbi8vIGNhbiBiZSBldmFsdWF0ZWQgYXQgYSB0aW1lLlxuRGVwLnRhcmdldCA9IG51bGw7XG52YXIgdGFyZ2V0U3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gcHVzaFRhcmdldCAodGFyZ2V0KSB7XG4gIHRhcmdldFN0YWNrLnB1c2godGFyZ2V0KTtcbiAgRGVwLnRhcmdldCA9IHRhcmdldDtcbn1cblxuZnVuY3Rpb24gcG9wVGFyZ2V0ICgpIHtcbiAgdGFyZ2V0U3RhY2sucG9wKCk7XG4gIERlcC50YXJnZXQgPSB0YXJnZXRTdGFja1t0YXJnZXRTdGFjay5sZW5ndGggLSAxXTtcbn1cblxuLyogICovXG5cbnZhciBWTm9kZSA9IGZ1bmN0aW9uIFZOb2RlIChcbiAgdGFnLFxuICBkYXRhLFxuICBjaGlsZHJlbixcbiAgdGV4dCxcbiAgZWxtLFxuICBjb250ZXh0LFxuICBjb21wb25lbnRPcHRpb25zLFxuICBhc3luY0ZhY3Rvcnlcbikge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5kYXRhID0gZGF0YTtcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnRleHQgPSB0ZXh0O1xuICB0aGlzLmVsbSA9IGVsbTtcbiAgdGhpcy5ucyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5mbkNvbnRleHQgPSB1bmRlZmluZWQ7XG4gIHRoaXMuZm5PcHRpb25zID0gdW5kZWZpbmVkO1xuICB0aGlzLmZuU2NvcGVJZCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5rZXkgPSBkYXRhICYmIGRhdGEua2V5O1xuICB0aGlzLmNvbXBvbmVudE9wdGlvbnMgPSBjb21wb25lbnRPcHRpb25zO1xuICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5yYXcgPSBmYWxzZTtcbiAgdGhpcy5pc1N0YXRpYyA9IGZhbHNlO1xuICB0aGlzLmlzUm9vdEluc2VydCA9IHRydWU7XG4gIHRoaXMuaXNDb21tZW50ID0gZmFsc2U7XG4gIHRoaXMuaXNDbG9uZWQgPSBmYWxzZTtcbiAgdGhpcy5pc09uY2UgPSBmYWxzZTtcbiAgdGhpcy5hc3luY0ZhY3RvcnkgPSBhc3luY0ZhY3Rvcnk7XG4gIHRoaXMuYXN5bmNNZXRhID0gdW5kZWZpbmVkO1xuICB0aGlzLmlzQXN5bmNQbGFjZWhvbGRlciA9IGZhbHNlO1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgY2hpbGQ6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuLy8gREVQUkVDQVRFRDogYWxpYXMgZm9yIGNvbXBvbmVudEluc3RhbmNlIGZvciBiYWNrd2FyZHMgY29tcGF0LlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnByb3RvdHlwZUFjY2Vzc29ycy5jaGlsZC5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlXG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVk5vZGUucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxudmFyIGNyZWF0ZUVtcHR5Vk5vZGUgPSBmdW5jdGlvbiAodGV4dCkge1xuICBpZiAoIHRleHQgPT09IHZvaWQgMCApIHRleHQgPSAnJztcblxuICB2YXIgbm9kZSA9IG5ldyBWTm9kZSgpO1xuICBub2RlLnRleHQgPSB0ZXh0O1xuICBub2RlLmlzQ29tbWVudCA9IHRydWU7XG4gIHJldHVybiBub2RlXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVUZXh0Vk5vZGUgKHZhbCkge1xuICByZXR1cm4gbmV3IFZOb2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFN0cmluZyh2YWwpKVxufVxuXG4vLyBvcHRpbWl6ZWQgc2hhbGxvdyBjbG9uZVxuLy8gdXNlZCBmb3Igc3RhdGljIG5vZGVzIGFuZCBzbG90IG5vZGVzIGJlY2F1c2UgdGhleSBtYXkgYmUgcmV1c2VkIGFjcm9zc1xuLy8gbXVsdGlwbGUgcmVuZGVycywgY2xvbmluZyB0aGVtIGF2b2lkcyBlcnJvcnMgd2hlbiBET00gbWFuaXB1bGF0aW9ucyByZWx5XG4vLyBvbiB0aGVpciBlbG0gcmVmZXJlbmNlLlxuZnVuY3Rpb24gY2xvbmVWTm9kZSAodm5vZGUpIHtcbiAgdmFyIGNsb25lZCA9IG5ldyBWTm9kZShcbiAgICB2bm9kZS50YWcsXG4gICAgdm5vZGUuZGF0YSxcbiAgICAvLyAjNzk3NVxuICAgIC8vIGNsb25lIGNoaWxkcmVuIGFycmF5IHRvIGF2b2lkIG11dGF0aW5nIG9yaWdpbmFsIGluIGNhc2Ugb2YgY2xvbmluZ1xuICAgIC8vIGEgY2hpbGQuXG4gICAgdm5vZGUuY2hpbGRyZW4gJiYgdm5vZGUuY2hpbGRyZW4uc2xpY2UoKSxcbiAgICB2bm9kZS50ZXh0LFxuICAgIHZub2RlLmVsbSxcbiAgICB2bm9kZS5jb250ZXh0LFxuICAgIHZub2RlLmNvbXBvbmVudE9wdGlvbnMsXG4gICAgdm5vZGUuYXN5bmNGYWN0b3J5XG4gICk7XG4gIGNsb25lZC5ucyA9IHZub2RlLm5zO1xuICBjbG9uZWQuaXNTdGF0aWMgPSB2bm9kZS5pc1N0YXRpYztcbiAgY2xvbmVkLmtleSA9IHZub2RlLmtleTtcbiAgY2xvbmVkLmlzQ29tbWVudCA9IHZub2RlLmlzQ29tbWVudDtcbiAgY2xvbmVkLmZuQ29udGV4dCA9IHZub2RlLmZuQ29udGV4dDtcbiAgY2xvbmVkLmZuT3B0aW9ucyA9IHZub2RlLmZuT3B0aW9ucztcbiAgY2xvbmVkLmZuU2NvcGVJZCA9IHZub2RlLmZuU2NvcGVJZDtcbiAgY2xvbmVkLmFzeW5jTWV0YSA9IHZub2RlLmFzeW5jTWV0YTtcbiAgY2xvbmVkLmlzQ2xvbmVkID0gdHJ1ZTtcbiAgcmV0dXJuIGNsb25lZFxufVxuXG4vKlxuICogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoXG4gKiBkeW5hbWljYWxseSBhY2Nlc3NpbmcgbWV0aG9kcyBvbiBBcnJheSBwcm90b3R5cGVcbiAqL1xuXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBhcnJheU1ldGhvZHMgPSBPYmplY3QuY3JlYXRlKGFycmF5UHJvdG8pO1xuXG52YXIgbWV0aG9kc1RvUGF0Y2ggPSBbXG4gICdwdXNoJyxcbiAgJ3BvcCcsXG4gICdzaGlmdCcsXG4gICd1bnNoaWZ0JyxcbiAgJ3NwbGljZScsXG4gICdzb3J0JyxcbiAgJ3JldmVyc2UnXG5dO1xuXG4vKipcbiAqIEludGVyY2VwdCBtdXRhdGluZyBtZXRob2RzIGFuZCBlbWl0IGV2ZW50c1xuICovXG5tZXRob2RzVG9QYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgLy8gY2FjaGUgb3JpZ2luYWwgbWV0aG9kXG4gIHZhciBvcmlnaW5hbCA9IGFycmF5UHJvdG9bbWV0aG9kXTtcbiAgZGVmKGFycmF5TWV0aG9kcywgbWV0aG9kLCBmdW5jdGlvbiBtdXRhdG9yICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgdmFyIG9iID0gdGhpcy5fX29iX187XG4gICAgdmFyIGluc2VydGVkO1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdwdXNoJzpcbiAgICAgIGNhc2UgJ3Vuc2hpZnQnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3M7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzcGxpY2UnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3Muc2xpY2UoMik7XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIGlmIChpbnNlcnRlZCkgeyBvYi5vYnNlcnZlQXJyYXkoaW5zZXJ0ZWQpOyB9XG4gICAgLy8gbm90aWZ5IGNoYW5nZVxuICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH0pO1xufSk7XG5cbi8qICAqL1xuXG52YXIgYXJyYXlLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJyYXlNZXRob2RzKTtcblxuLyoqXG4gKiBJbiBzb21lIGNhc2VzIHdlIG1heSB3YW50IHRvIGRpc2FibGUgb2JzZXJ2YXRpb24gaW5zaWRlIGEgY29tcG9uZW50J3NcbiAqIHVwZGF0ZSBjb21wdXRhdGlvbi5cbiAqL1xudmFyIHNob3VsZE9ic2VydmUgPSB0cnVlO1xuXG5mdW5jdGlvbiB0b2dnbGVPYnNlcnZpbmcgKHZhbHVlKSB7XG4gIHNob3VsZE9ic2VydmUgPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBPYnNlcnZlciBjbGFzcyB0aGF0IGlzIGF0dGFjaGVkIHRvIGVhY2ggb2JzZXJ2ZWRcbiAqIG9iamVjdC4gT25jZSBhdHRhY2hlZCwgdGhlIG9ic2VydmVyIGNvbnZlcnRzIHRoZSB0YXJnZXRcbiAqIG9iamVjdCdzIHByb3BlcnR5IGtleXMgaW50byBnZXR0ZXIvc2V0dGVycyB0aGF0XG4gKiBjb2xsZWN0IGRlcGVuZGVuY2llcyBhbmQgZGlzcGF0Y2ggdXBkYXRlcy5cbiAqL1xudmFyIE9ic2VydmVyID0gZnVuY3Rpb24gT2JzZXJ2ZXIgKHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgdGhpcy5kZXAgPSBuZXcgRGVwKCk7XG4gIHRoaXMudm1Db3VudCA9IDA7XG4gIGRlZih2YWx1ZSwgJ19fb2JfXycsIHRoaXMpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAoaGFzUHJvdG8pIHtcbiAgICAgIHByb3RvQXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29weUF1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcywgYXJyYXlLZXlzKTtcbiAgICB9XG4gICAgdGhpcy5vYnNlcnZlQXJyYXkodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud2Fsayh2YWx1ZSk7XG4gIH1cbn07XG5cbi8qKlxuICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICogZ2V0dGVyL3NldHRlcnMuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuXG4gKiB2YWx1ZSB0eXBlIGlzIE9iamVjdC5cbiAqL1xuT2JzZXJ2ZXIucHJvdG90eXBlLndhbGsgPSBmdW5jdGlvbiB3YWxrIChvYmopIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMShvYmosIGtleXNbaV0pO1xuICB9XG59O1xuXG4vKipcbiAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gb2JzZXJ2ZUFycmF5IChpdGVtcykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9ic2VydmUoaXRlbXNbaV0pO1xuICB9XG59O1xuXG4vLyBoZWxwZXJzXG5cbi8qKlxuICogQXVnbWVudCBhIHRhcmdldCBPYmplY3Qgb3IgQXJyYXkgYnkgaW50ZXJjZXB0aW5nXG4gKiB0aGUgcHJvdG90eXBlIGNoYWluIHVzaW5nIF9fcHJvdG9fX1xuICovXG5mdW5jdGlvbiBwcm90b0F1Z21lbnQgKHRhcmdldCwgc3JjKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG4gIHRhcmdldC5fX3Byb3RvX18gPSBzcmM7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tcHJvdG8gKi9cbn1cblxuLyoqXG4gKiBBdWdtZW50IGEgdGFyZ2V0IE9iamVjdCBvciBBcnJheSBieSBkZWZpbmluZ1xuICogaGlkZGVuIHByb3BlcnRpZXMuXG4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBjb3B5QXVnbWVudCAodGFyZ2V0LCBzcmMsIGtleXMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGRlZih0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIGEgdmFsdWUsXG4gKiByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgaWYgc3VjY2Vzc2Z1bGx5IG9ic2VydmVkLFxuICogb3IgdGhlIGV4aXN0aW5nIG9ic2VydmVyIGlmIHRoZSB2YWx1ZSBhbHJlYWR5IGhhcyBvbmUuXG4gKi9cbmZ1bmN0aW9uIG9ic2VydmUgKHZhbHVlLCBhc1Jvb3REYXRhKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2I7XG4gIGlmIChoYXNPd24odmFsdWUsICdfX29iX18nKSAmJiB2YWx1ZS5fX29iX18gaW5zdGFuY2VvZiBPYnNlcnZlcikge1xuICAgIG9iID0gdmFsdWUuX19vYl9fO1xuICB9IGVsc2UgaWYgKFxuICAgIHNob3VsZE9ic2VydmUgJiZcbiAgICAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSAmJlxuICAgIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkgJiZcbiAgICBPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKSAmJlxuICAgICF2YWx1ZS5faXNWdWVcbiAgKSB7XG4gICAgb2IgPSBuZXcgT2JzZXJ2ZXIodmFsdWUpO1xuICB9XG4gIGlmIChhc1Jvb3REYXRhICYmIG9iKSB7XG4gICAgb2Iudm1Db3VudCsrO1xuICB9XG4gIHJldHVybiBvYlxufVxuXG4vKipcbiAqIERlZmluZSBhIHJlYWN0aXZlIHByb3BlcnR5IG9uIGFuIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZGVmaW5lUmVhY3RpdmUkJDEgKFxuICBvYmosXG4gIGtleSxcbiAgdmFsLFxuICBjdXN0b21TZXR0ZXIsXG4gIHNoYWxsb3dcbikge1xuICB2YXIgZGVwID0gbmV3IERlcCgpO1xuXG4gIHZhciBwcm9wZXJ0eSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpO1xuICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuY29uZmlndXJhYmxlID09PSBmYWxzZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gY2F0ZXIgZm9yIHByZS1kZWZpbmVkIGdldHRlci9zZXR0ZXJzXG4gIHZhciBnZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQ7XG4gIHZhciBzZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQ7XG4gIGlmICgoIWdldHRlciB8fCBzZXR0ZXIpICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICB2YWwgPSBvYmpba2V5XTtcbiAgfVxuXG4gIHZhciBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZSh2YWwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyICgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgIGlmIChjaGlsZE9iKSB7XG4gICAgICAgICAgY2hpbGRPYi5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBkZXBlbmRBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gcmVhY3RpdmVTZXR0ZXIgKG5ld1ZhbCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKG5ld1ZhbCA9PT0gdmFsdWUgfHwgKG5ld1ZhbCAhPT0gbmV3VmFsICYmIHZhbHVlICE9PSB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY3VzdG9tU2V0dGVyKSB7XG4gICAgICAgIGN1c3RvbVNldHRlcigpO1xuICAgICAgfVxuICAgICAgLy8gIzc5ODE6IGZvciBhY2Nlc3NvciBwcm9wZXJ0aWVzIHdpdGhvdXQgc2V0dGVyXG4gICAgICBpZiAoZ2V0dGVyICYmICFzZXR0ZXIpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgc2V0dGVyLmNhbGwob2JqLCBuZXdWYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gbmV3VmFsO1xuICAgICAgfVxuICAgICAgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUobmV3VmFsKTtcbiAgICAgIGRlcC5ub3RpZnkoKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdC4gQWRkcyB0aGUgbmV3IHByb3BlcnR5IGFuZFxuICogdHJpZ2dlcnMgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZiB0aGUgcHJvcGVydHkgZG9lc24ndFxuICogYWxyZWFkeSBleGlzdC5cbiAqL1xuZnVuY3Rpb24gc2V0ICh0YXJnZXQsIGtleSwgdmFsKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBzZXQgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5sZW5ndGggPSBNYXRoLm1heCh0YXJnZXQubGVuZ3RoLCBrZXkpO1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxLCB2YWwpO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoa2V5IGluIHRhcmdldCAmJiAhKGtleSBpbiBPYmplY3QucHJvdG90eXBlKSkge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBhZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICdhdCBydW50aW1lIC0gZGVjbGFyZSBpdCB1cGZyb250IGluIHRoZSBkYXRhIG9wdGlvbi4nXG4gICAgKTtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgaWYgKCFvYikge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBkZWZpbmVSZWFjdGl2ZSQkMShvYi52YWx1ZSwga2V5LCB2YWwpO1xuICBvYi5kZXAubm90aWZ5KCk7XG4gIHJldHVybiB2YWxcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2UgaWYgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiBkZWwgKHRhcmdldCwga2V5KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBkZWxldGUgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBkZWxldGluZyBwcm9wZXJ0aWVzIG9uIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJy0ganVzdCBzZXQgaXQgdG8gbnVsbC4nXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBkZWxldGUgdGFyZ2V0W2tleV07XG4gIGlmICghb2IpIHtcbiAgICByZXR1cm5cbiAgfVxuICBvYi5kZXAubm90aWZ5KCk7XG59XG5cbi8qKlxuICogQ29sbGVjdCBkZXBlbmRlbmNpZXMgb24gYXJyYXkgZWxlbWVudHMgd2hlbiB0aGUgYXJyYXkgaXMgdG91Y2hlZCwgc2luY2VcbiAqIHdlIGNhbm5vdCBpbnRlcmNlcHQgYXJyYXkgZWxlbWVudCBhY2Nlc3MgbGlrZSBwcm9wZXJ0eSBnZXR0ZXJzLlxuICovXG5mdW5jdGlvbiBkZXBlbmRBcnJheSAodmFsdWUpIHtcbiAgZm9yICh2YXIgZSA9ICh2b2lkIDApLCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGUgPSB2YWx1ZVtpXTtcbiAgICBlICYmIGUuX19vYl9fICYmIGUuX19vYl9fLmRlcC5kZXBlbmQoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlKSkge1xuICAgICAgZGVwZW5kQXJyYXkoZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAqIGhvdyB0byBtZXJnZSBhIHBhcmVudCBvcHRpb24gdmFsdWUgYW5kIGEgY2hpbGQgb3B0aW9uXG4gKiB2YWx1ZSBpbnRvIHRoZSBmaW5hbCB2YWx1ZS5cbiAqL1xudmFyIHN0cmF0cyA9IGNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG5cbi8qKlxuICogT3B0aW9ucyB3aXRoIHJlc3RyaWN0aW9uc1xuICovXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRhID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcbiAgICBpZiAoIXZtKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIm9wdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW5zdGFuY2UgXCIgK1xuICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFN0cmF0KHBhcmVudCwgY2hpbGQpXG4gIH07XG59XG5cbi8qKlxuICogSGVscGVyIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIHR3byBkYXRhIG9iamVjdHMgdG9nZXRoZXIuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YSAodG8sIGZyb20pIHtcbiAgaWYgKCFmcm9tKSB7IHJldHVybiB0byB9XG4gIHZhciBrZXksIHRvVmFsLCBmcm9tVmFsO1xuXG4gIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICA6IE9iamVjdC5rZXlzKGZyb20pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cbiAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgdG9WYWwgPSB0b1trZXldO1xuICAgIGZyb21WYWwgPSBmcm9tW2tleV07XG4gICAgaWYgKCFoYXNPd24odG8sIGtleSkpIHtcbiAgICAgIHNldCh0bywga2V5LCBmcm9tVmFsKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdG9WYWwgIT09IGZyb21WYWwgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICBpc1BsYWluT2JqZWN0KGZyb21WYWwpXG4gICAgKSB7XG4gICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBEYXRhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YU9yRm4gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bVxuKSB7XG4gIGlmICghdm0pIHtcbiAgICAvLyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgaWYgKCFwYXJlbnRWYWwpIHtcbiAgICAgIHJldHVybiBjaGlsZFZhbFxuICAgIH1cbiAgICAvLyB3aGVuIHBhcmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgLy8gd2UgbmVlZCB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgLy8gbWVyZ2VkIHJlc3VsdCBvZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgLy8gY2hlY2sgaWYgcGFyZW50VmFsIGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbiAoKSB7XG4gICAgICByZXR1cm4gbWVyZ2VEYXRhKFxuICAgICAgICB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbicgPyBjaGlsZFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogY2hpbGRWYWwsXG4gICAgICAgIHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbicgPyBwYXJlbnRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IHBhcmVudFZhbFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4gKCkge1xuICAgICAgLy8gaW5zdGFuY2UgbWVyZ2VcbiAgICAgIHZhciBpbnN0YW5jZURhdGEgPSB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBjaGlsZFZhbDtcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgIDogcGFyZW50VmFsO1xuICAgICAgaWYgKGluc3RhbmNlRGF0YSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdERhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIGlmIChjaGlsZFZhbCAmJiB0eXBlb2YgY2hpbGRWYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ1RoZSBcImRhdGFcIiBvcHRpb24gc2hvdWxkIGJlIGEgZnVuY3Rpb24gJyArXG4gICAgICAgICd0aGF0IHJldHVybnMgYSBwZXItaW5zdGFuY2UgdmFsdWUgaW4gY29tcG9uZW50ICcgK1xuICAgICAgICAnZGVmaW5pdGlvbnMuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbClcbiAgfVxuXG4gIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKVxufTtcblxuLyoqXG4gKiBIb29rcyBhbmQgcHJvcHMgYXJlIG1lcmdlZCBhcyBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSG9vayAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWxcbikge1xuICB2YXIgcmVzID0gY2hpbGRWYWxcbiAgICA/IHBhcmVudFZhbFxuICAgICAgPyBwYXJlbnRWYWwuY29uY2F0KGNoaWxkVmFsKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKVxuICAgICAgICA/IGNoaWxkVmFsXG4gICAgICAgIDogW2NoaWxkVmFsXVxuICAgIDogcGFyZW50VmFsO1xuICByZXR1cm4gcmVzXG4gICAgPyBkZWR1cGVIb29rcyhyZXMpXG4gICAgOiByZXNcbn1cblxuZnVuY3Rpb24gZGVkdXBlSG9va3MgKGhvb2tzKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZXMuaW5kZXhPZihob29rc1tpXSkgPT09IC0xKSB7XG4gICAgICByZXMucHVzaChob29rc1tpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuTElGRUNZQ0xFX0hPT0tTLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgc3RyYXRzW2hvb2tdID0gbWVyZ2VIb29rO1xufSk7XG5cbi8qKlxuICogQXNzZXRzXG4gKlxuICogV2hlbiBhIHZtIGlzIHByZXNlbnQgKGluc3RhbmNlIGNyZWF0aW9uKSwgd2UgbmVlZCB0byBkb1xuICogYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiBjb25zdHJ1Y3RvciBvcHRpb25zLCBpbnN0YW5jZVxuICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQXNzZXRzIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKHBhcmVudFZhbCB8fCBudWxsKTtcbiAgaWYgKGNoaWxkVmFsKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgICByZXR1cm4gZXh0ZW5kKHJlcywgY2hpbGRWYWwpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbkFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgc3RyYXRzW3R5cGUgKyAncyddID0gbWVyZ2VBc3NldHM7XG59KTtcblxuLyoqXG4gKiBXYXRjaGVycy5cbiAqXG4gKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAqL1xuc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgLy8gd29yayBhcm91bmQgRmlyZWZveCdzIE9iamVjdC5wcm90b3R5cGUud2F0Y2guLi5cbiAgaWYgKHBhcmVudFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgcGFyZW50VmFsID0gdW5kZWZpbmVkOyB9XG4gIGlmIChjaGlsZFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgY2hpbGRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2hpbGRWYWwpIHsgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgfVxuICBpZiAoIXBhcmVudFZhbCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICB2YXIgcmV0ID0ge307XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGZvciAodmFyIGtleSQxIGluIGNoaWxkVmFsKSB7XG4gICAgdmFyIHBhcmVudCA9IHJldFtrZXkkMV07XG4gICAgdmFyIGNoaWxkID0gY2hpbGRWYWxba2V5JDFdO1xuICAgIGlmIChwYXJlbnQgJiYgIUFycmF5LmlzQXJyYXkocGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gW3BhcmVudF07XG4gICAgfVxuICAgIHJldFtrZXkkMV0gPSBwYXJlbnRcbiAgICAgID8gcGFyZW50LmNvbmNhdChjaGlsZClcbiAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZCkgPyBjaGlsZCA6IFtjaGlsZF07XG4gIH1cbiAgcmV0dXJuIHJldFxufTtcblxuLyoqXG4gKiBPdGhlciBvYmplY3QgaGFzaGVzLlxuICovXG5zdHJhdHMucHJvcHMgPVxuc3RyYXRzLm1ldGhvZHMgPVxuc3RyYXRzLmluamVjdCA9XG5zdHJhdHMuY29tcHV0ZWQgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICBpZiAoY2hpbGRWYWwgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICBpZiAoY2hpbGRWYWwpIHsgZXh0ZW5kKHJldCwgY2hpbGRWYWwpOyB9XG4gIHJldHVybiByZXRcbn07XG5zdHJhdHMucHJvdmlkZSA9IG1lcmdlRGF0YU9yRm47XG5cbi8qKlxuICogRGVmYXVsdCBzdHJhdGVneS5cbiAqL1xudmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkXG4gICAgPyBwYXJlbnRWYWxcbiAgICA6IGNoaWxkVmFsXG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICovXG5mdW5jdGlvbiBjaGVja0NvbXBvbmVudHMgKG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMuY29tcG9uZW50cykge1xuICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcG9uZW50TmFtZSAobmFtZSkge1xuICBpZiAoIW5ldyBSZWdFeHAoKFwiXlthLXpBLVpdW1xcXFwtXFxcXC4wLTlfXCIgKyAodW5pY29kZVJlZ0V4cC5zb3VyY2UpICsgXCJdKiRcIikpLnRlc3QobmFtZSkpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ludmFsaWQgY29tcG9uZW50IG5hbWU6IFwiJyArIG5hbWUgKyAnXCIuIENvbXBvbmVudCBuYW1lcyAnICtcbiAgICAgICdzaG91bGQgY29uZm9ybSB0byB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lIGluIGh0bWw1IHNwZWNpZmljYXRpb24uJ1xuICAgICk7XG4gIH1cbiAgaWYgKGlzQnVpbHRJblRhZyhuYW1lKSB8fCBjb25maWcuaXNSZXNlcnZlZFRhZyhuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCAnICtcbiAgICAgICdpZDogJyArIG5hbWVcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogRW5zdXJlIGFsbCBwcm9wcyBvcHRpb24gc3ludGF4IGFyZSBub3JtYWxpemVkIGludG8gdGhlXG4gKiBPYmplY3QtYmFzZWQgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQcm9wcyAob3B0aW9ucywgdm0pIHtcbiAgdmFyIHByb3BzID0gb3B0aW9ucy5wcm9wcztcbiAgaWYgKCFwcm9wcykgeyByZXR1cm4gfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBpLCB2YWwsIG5hbWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmFtZSA9IGNhbWVsaXplKHZhbCk7XG4gICAgICAgIHJlc1tuYW1lXSA9IHsgdHlwZTogbnVsbCB9O1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oJ3Byb3BzIG11c3QgYmUgc3RyaW5ncyB3aGVuIHVzaW5nIGFycmF5IHN5bnRheC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhbCA9IHByb3BzW2tleV07XG4gICAgICBuYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICAgIHJlc1tuYW1lXSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IHZhbFxuICAgICAgICA6IHsgdHlwZTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcInByb3BzXFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKHByb3BzKSkgKyBcIi5cIixcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICBvcHRpb25zLnByb3BzID0gcmVzO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbGwgaW5qZWN0aW9ucyBpbnRvIE9iamVjdC1iYXNlZCBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0IChvcHRpb25zLCB2bSkge1xuICB2YXIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gIGlmICghaW5qZWN0KSB7IHJldHVybiB9XG4gIHZhciBub3JtYWxpemVkID0gb3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5qZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGluamVjdCkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICB2YXIgdmFsID0gaW5qZWN0W2tleV07XG4gICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgPyBleHRlbmQoeyBmcm9tOiBrZXkgfSwgdmFsKVxuICAgICAgICA6IHsgZnJvbTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZShpbmplY3QpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHJhdyBmdW5jdGlvbiBkaXJlY3RpdmVzIGludG8gb2JqZWN0IGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyAob3B0aW9ucykge1xuICB2YXIgZGlycyA9IG9wdGlvbnMuZGlyZWN0aXZlcztcbiAgaWYgKGRpcnMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGlycykge1xuICAgICAgdmFyIGRlZiQkMSA9IGRpcnNba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgZGVmJCQxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmJCQxLCB1cGRhdGU6IGRlZiQkMSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRPYmplY3RUeXBlIChuYW1lLCB2YWx1ZSwgdm0pIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiOiBleHBlY3RlZCBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUodmFsdWUpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWVyZ2UgdHdvIG9wdGlvbiBvYmplY3RzIGludG8gYSBuZXcgb25lLlxuICogQ29yZSB1dGlsaXR5IHVzZWQgaW4gYm90aCBpbnN0YW50aWF0aW9uIGFuZCBpbmhlcml0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPcHRpb25zIChcbiAgcGFyZW50LFxuICBjaGlsZCxcbiAgdm1cbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNoZWNrQ29tcG9uZW50cyhjaGlsZCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2hpbGQgPSBjaGlsZC5vcHRpb25zO1xuICB9XG5cbiAgbm9ybWFsaXplUHJvcHMoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplSW5qZWN0KGNoaWxkLCB2bSk7XG4gIG5vcm1hbGl6ZURpcmVjdGl2ZXMoY2hpbGQpO1xuXG4gIC8vIEFwcGx5IGV4dGVuZHMgYW5kIG1peGlucyBvbiB0aGUgY2hpbGQgb3B0aW9ucyxcbiAgLy8gYnV0IG9ubHkgaWYgaXQgaXMgYSByYXcgb3B0aW9ucyBvYmplY3QgdGhhdCBpc24ndFxuICAvLyB0aGUgcmVzdWx0IG9mIGFub3RoZXIgbWVyZ2VPcHRpb25zIGNhbGwuXG4gIC8vIE9ubHkgbWVyZ2VkIG9wdGlvbnMgaGFzIHRoZSBfYmFzZSBwcm9wZXJ0eS5cbiAgaWYgKCFjaGlsZC5fYmFzZSkge1xuICAgIGlmIChjaGlsZC5leHRlbmRzKSB7XG4gICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5leHRlbmRzLCB2bSk7XG4gICAgfVxuICAgIGlmIChjaGlsZC5taXhpbnMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5taXhpbnNbaV0sIHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHt9O1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICBtZXJnZUZpZWxkKGtleSk7XG4gIH1cbiAgZm9yIChrZXkgaW4gY2hpbGQpIHtcbiAgICBpZiAoIWhhc093bihwYXJlbnQsIGtleSkpIHtcbiAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbWVyZ2VGaWVsZCAoa2V5KSB7XG4gICAgdmFyIHN0cmF0ID0gc3RyYXRzW2tleV0gfHwgZGVmYXVsdFN0cmF0O1xuICAgIG9wdGlvbnNba2V5XSA9IHN0cmF0KHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSwga2V5KTtcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gYXNzZXQuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmVjYXVzZSBjaGlsZCBpbnN0YW5jZXMgbmVlZCBhY2Nlc3NcbiAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0IChcbiAgb3B0aW9ucyxcbiAgdHlwZSxcbiAgaWQsXG4gIHdhcm5NaXNzaW5nXG4pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gIC8vIGNoZWNrIGxvY2FsIHJlZ2lzdHJhdGlvbiB2YXJpYXRpb25zIGZpcnN0XG4gIGlmIChoYXNPd24oYXNzZXRzLCBpZCkpIHsgcmV0dXJuIGFzc2V0c1tpZF0gfVxuICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBjYW1lbGl6ZWRJZCkpIHsgcmV0dXJuIGFzc2V0c1tjYW1lbGl6ZWRJZF0gfVxuICB2YXIgUGFzY2FsQ2FzZUlkID0gY2FwaXRhbGl6ZShjYW1lbGl6ZWRJZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKSB7IHJldHVybiBhc3NldHNbUGFzY2FsQ2FzZUlkXSB9XG4gIC8vIGZhbGxiYWNrIHRvIHByb3RvdHlwZSBjaGFpblxuICB2YXIgcmVzID0gYXNzZXRzW2lkXSB8fCBhc3NldHNbY2FtZWxpemVkSWRdIHx8IGFzc2V0c1tQYXNjYWxDYXNlSWRdO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XG4gICAgd2FybihcbiAgICAgICdGYWlsZWQgdG8gcmVzb2x2ZSAnICsgdHlwZS5zbGljZSgwLCAtMSkgKyAnOiAnICsgaWQsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wIChcbiAga2V5LFxuICBwcm9wT3B0aW9ucyxcbiAgcHJvcHNEYXRhLFxuICB2bVxuKSB7XG4gIHZhciBwcm9wID0gcHJvcE9wdGlvbnNba2V5XTtcbiAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xuICB2YXIgdmFsdWUgPSBwcm9wc0RhdGFba2V5XTtcbiAgLy8gYm9vbGVhbiBjYXN0aW5nXG4gIHZhciBib29sZWFuSW5kZXggPSBnZXRUeXBlSW5kZXgoQm9vbGVhbiwgcHJvcC50eXBlKTtcbiAgaWYgKGJvb2xlYW5JbmRleCA+IC0xKSB7XG4gICAgaWYgKGFic2VudCAmJiAhaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IGh5cGhlbmF0ZShrZXkpKSB7XG4gICAgICAvLyBvbmx5IGNhc3QgZW1wdHkgc3RyaW5nIC8gc2FtZSBuYW1lIHRvIGJvb2xlYW4gaWZcbiAgICAgIC8vIGJvb2xlYW4gaGFzIGhpZ2hlciBwcmlvcml0eVxuICAgICAgdmFyIHN0cmluZ0luZGV4ID0gZ2V0VHlwZUluZGV4KFN0cmluZywgcHJvcC50eXBlKTtcbiAgICAgIGlmIChzdHJpbmdJbmRleCA8IDAgfHwgYm9vbGVhbkluZGV4IDwgc3RyaW5nSW5kZXgpIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBjaGVjayBkZWZhdWx0IHZhbHVlXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpO1xuICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgZnJlc2ggY29weSxcbiAgICAvLyBtYWtlIHN1cmUgdG8gb2JzZXJ2ZSBpdC5cbiAgICB2YXIgcHJldlNob3VsZE9ic2VydmUgPSBzaG91bGRPYnNlcnZlO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICBvYnNlcnZlKHZhbHVlKTtcbiAgICB0b2dnbGVPYnNlcnZpbmcocHJldlNob3VsZE9ic2VydmUpO1xuICB9XG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgLy8gc2tpcCB2YWxpZGF0aW9uIGZvciB3ZWV4IHJlY3ljbGUtbGlzdCBjaGlsZCBjb21wb25lbnQgcHJvcHNcbiAgICAhKGZhbHNlKVxuICApIHtcbiAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIHByb3AuXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BEZWZhdWx0VmFsdWUgKHZtLCBwcm9wLCBrZXkpIHtcbiAgLy8gbm8gZGVmYXVsdCwgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tZmFjdG9yeSBkZWZhdWx0cyBmb3IgT2JqZWN0ICYgQXJyYXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNPYmplY3QoZGVmKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9BcnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgLy8gcmV0dXJuIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2F0Y2hlciB0cmlnZ2VyXG4gIGlmICh2bSAmJiB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgfVxuICAvLyBjYWxsIGZhY3RvcnkgZnVuY3Rpb24gZm9yIG5vbi1GdW5jdGlvbiB0eXBlc1xuICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gIHJldHVybiB0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGdldFR5cGUocHJvcC50eXBlKSAhPT0gJ0Z1bmN0aW9uJ1xuICAgID8gZGVmLmNhbGwodm0pXG4gICAgOiBkZWZcbn1cblxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AgKFxuICBwcm9wLFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgdm0sXG4gIGFic2VudFxuKSB7XG4gIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgIHdhcm4oXG4gICAgICAnTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhcHJvcC5yZXF1aXJlZCkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICBpZiAodHlwZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xuICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0pO1xuICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGFzc2VydGVkVHlwZS5leHBlY3RlZFR5cGUgfHwgJycpO1xuICAgICAgdmFsaWQgPSBhc3NlcnRlZFR5cGUudmFsaWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF2YWxpZCkge1xuICAgIHdhcm4oXG4gICAgICBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciB2YWxpZGF0b3IgPSBwcm9wLnZhbGlkYXRvcjtcbiAgaWYgKHZhbGlkYXRvcikge1xuICAgIGlmICghdmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0ludmFsaWQgcHJvcDogY3VzdG9tIHZhbGlkYXRvciBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCInICsgbmFtZSArICdcIi4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHNpbXBsZUNoZWNrUkUgPSAvXihTdHJpbmd8TnVtYmVyfEJvb2xlYW58RnVuY3Rpb258U3ltYm9sKSQvO1xuXG5mdW5jdGlvbiBhc3NlcnRUeXBlICh2YWx1ZSwgdHlwZSkge1xuICB2YXIgdmFsaWQ7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICBpZiAoc2ltcGxlQ2hlY2tSRS50ZXN0KGV4cGVjdGVkVHlwZSkpIHtcbiAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICB2YWxpZCA9IHQgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXG4gICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ0FycmF5Jykge1xuICAgIHZhbGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlIChmbikge1xuICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnXG59XG5cbmZ1bmN0aW9uIGlzU2FtZVR5cGUgKGEsIGIpIHtcbiAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYilcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZUluZGV4ICh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgIHJldHVybiBpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXMsIHR5cGUpID8gMCA6IC0xXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzW2ldLCB0eXBlKSkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZSAobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgdmFyIG1lc3NhZ2UgPSBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiICsgbmFtZSArIFwiXFxcIi5cIiArXG4gICAgXCIgRXhwZWN0ZWQgXCIgKyAoZXhwZWN0ZWRUeXBlcy5tYXAoY2FwaXRhbGl6ZSkuam9pbignLCAnKSk7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGVzWzBdO1xuICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgdmFyIGV4cGVjdGVkVmFsdWUgPSBzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgcmVjZWl2ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSk7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgIGlzRXhwbGljYWJsZShleHBlY3RlZFR5cGUpICYmXG4gICAgICAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCIgd2l0aCB2YWx1ZSBcIiArIGV4cGVjdGVkVmFsdWU7XG4gIH1cbiAgbWVzc2FnZSArPSBcIiwgZ290IFwiICsgcmVjZWl2ZWRUeXBlICsgXCIgXCI7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSByZWNlaXZlZCB2YWx1ZVxuICBpZiAoaXNFeHBsaWNhYmxlKHJlY2VpdmVkVHlwZSkpIHtcbiAgICBtZXNzYWdlICs9IFwid2l0aCB2YWx1ZSBcIiArIHJlY2VpdmVkVmFsdWUgKyBcIi5cIjtcbiAgfVxuICByZXR1cm4gbWVzc2FnZVxufVxuXG5mdW5jdGlvbiBzdHlsZVZhbHVlICh2YWx1ZSwgdHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICByZXR1cm4gKFwiXFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIilcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xuICAgIHJldHVybiAoXCJcIiArIChOdW1iZXIodmFsdWUpKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiXCIgKyB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4cGxpY2FibGUgKHZhbHVlKSB7XG4gIHZhciBleHBsaWNpdFR5cGVzID0gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXTtcbiAgcmV0dXJuIGV4cGxpY2l0VHlwZXMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbTsgfSlcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuICgpIHtcbiAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICByZXR1cm4gYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiBlbGVtLnRvTG93ZXJDYXNlKCkgPT09ICdib29sZWFuJzsgfSlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIC8vIERlYWN0aXZhdGUgZGVwcyB0cmFja2luZyB3aGlsZSBwcm9jZXNzaW5nIGVycm9yIGhhbmRsZXIgdG8gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgcmVuZGVyaW5nLlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWV4L2lzc3Vlcy8xNTA1XG4gIHB1c2hUYXJnZXQoKTtcbiAgdHJ5IHtcbiAgICBpZiAodm0pIHtcbiAgICAgIHZhciBjdXIgPSB2bTtcbiAgICAgIHdoaWxlICgoY3VyID0gY3VyLiRwYXJlbnQpKSB7XG4gICAgICAgIHZhciBob29rcyA9IGN1ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO1xuICAgICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgY2FwdHVyZSA9IGhvb2tzW2ldLmNhbGwoY3VyLCBlcnIsIHZtLCBpbmZvKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7IHJldHVybiB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGUsIGN1ciwgJ2Vycm9yQ2FwdHVyZWQgaG9vaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwb3BUYXJnZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyAoXG4gIGhhbmRsZXIsXG4gIGNvbnRleHQsXG4gIGFyZ3MsXG4gIHZtLFxuICBpbmZvXG4pIHtcbiAgdmFyIHJlcztcbiAgdHJ5IHtcbiAgICByZXMgPSBhcmdzID8gaGFuZGxlci5hcHBseShjb250ZXh0LCBhcmdzKSA6IGhhbmRsZXIuY2FsbChjb250ZXh0KTtcbiAgICBpZiAocmVzICYmICFyZXMuX2lzVnVlICYmIGlzUHJvbWlzZShyZXMpICYmICFyZXMuX2hhbmRsZWQpIHtcbiAgICAgIHJlcy5jYXRjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8gKyBcIiAoUHJvbWlzZS9hc3luYylcIik7IH0pO1xuICAgICAgLy8gaXNzdWUgIzk1MTFcbiAgICAgIC8vIGF2b2lkIGNhdGNoIHRyaWdnZXJpbmcgbXVsdGlwbGUgdGltZXMgd2hlbiBuZXN0ZWQgY2FsbHNcbiAgICAgIHJlcy5faGFuZGxlZCA9IHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8pO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2xvYmFsSGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKGNvbmZpZy5lcnJvckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5lcnJvckhhbmRsZXIuY2FsbChudWxsLCBlcnIsIHZtLCBpbmZvKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGlmIHRoZSB1c2VyIGludGVudGlvbmFsbHkgdGhyb3dzIHRoZSBvcmlnaW5hbCBlcnJvciBpbiB0aGUgaGFuZGxlcixcbiAgICAgIC8vIGRvIG5vdCBsb2cgaXQgdHdpY2VcbiAgICAgIGlmIChlICE9PSBlcnIpIHtcbiAgICAgICAgbG9nRXJyb3IoZSwgbnVsbCwgJ2NvbmZpZy5lcnJvckhhbmRsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG59XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2FybigoXCJFcnJvciBpbiBcIiArIGluZm8gKyBcIjogXFxcIlwiICsgKGVyci50b1N0cmluZygpKSArIFwiXFxcIlwiKSwgdm0pO1xuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICgoaW5Ccm93c2VyIHx8IGluV2VleCkgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IGVyclxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgaXNVc2luZ01pY3JvVGFzayA9IGZhbHNlO1xuXG52YXIgY2FsbGJhY2tzID0gW107XG52YXIgcGVuZGluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbHVzaENhbGxiYWNrcyAoKSB7XG4gIHBlbmRpbmcgPSBmYWxzZTtcbiAgdmFyIGNvcGllcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcbiAgY2FsbGJhY2tzLmxlbmd0aCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29waWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29waWVzW2ldKCk7XG4gIH1cbn1cblxuLy8gSGVyZSB3ZSBoYXZlIGFzeW5jIGRlZmVycmluZyB3cmFwcGVycyB1c2luZyBtaWNyb3Rhc2tzLlxuLy8gSW4gMi41IHdlIHVzZWQgKG1hY3JvKSB0YXNrcyAoaW4gY29tYmluYXRpb24gd2l0aCBtaWNyb3Rhc2tzKS5cbi8vIEhvd2V2ZXIsIGl0IGhhcyBzdWJ0bGUgcHJvYmxlbXMgd2hlbiBzdGF0ZSBpcyBjaGFuZ2VkIHJpZ2h0IGJlZm9yZSByZXBhaW50XG4vLyAoZS5nLiAjNjgxMywgb3V0LWluIHRyYW5zaXRpb25zKS5cbi8vIEFsc28sIHVzaW5nIChtYWNybykgdGFza3MgaW4gZXZlbnQgaGFuZGxlciB3b3VsZCBjYXVzZSBzb21lIHdlaXJkIGJlaGF2aW9yc1xuLy8gdGhhdCBjYW5ub3QgYmUgY2lyY3VtdmVudGVkIChlLmcuICM3MTA5LCAjNzE1MywgIzc1NDYsICM3ODM0LCAjODEwOSkuXG4vLyBTbyB3ZSBub3cgdXNlIG1pY3JvdGFza3MgZXZlcnl3aGVyZSwgYWdhaW4uXG4vLyBBIG1ham9yIGRyYXdiYWNrIG9mIHRoaXMgdHJhZGVvZmYgaXMgdGhhdCB0aGVyZSBhcmUgc29tZSBzY2VuYXJpb3Ncbi8vIHdoZXJlIG1pY3JvdGFza3MgaGF2ZSB0b28gaGlnaCBhIHByaW9yaXR5IGFuZCBmaXJlIGluIGJldHdlZW4gc3VwcG9zZWRseVxuLy8gc2VxdWVudGlhbCBldmVudHMgKGUuZy4gIzQ1MjEsICM2NjkwLCB3aGljaCBoYXZlIHdvcmthcm91bmRzKVxuLy8gb3IgZXZlbiBiZXR3ZWVuIGJ1YmJsaW5nIG9mIHRoZSBzYW1lIGV2ZW50ICgjNjU2NikuXG52YXIgdGltZXJGdW5jO1xuXG4vLyBUaGUgbmV4dFRpY2sgYmVoYXZpb3IgbGV2ZXJhZ2VzIHRoZSBtaWNyb3Rhc2sgcXVldWUsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZFxuLy8gdmlhIGVpdGhlciBuYXRpdmUgUHJvbWlzZS50aGVuIG9yIE11dGF0aW9uT2JzZXJ2ZXIuXG4vLyBNdXRhdGlvbk9ic2VydmVyIGhhcyB3aWRlciBzdXBwb3J0LCBob3dldmVyIGl0IGlzIHNlcmlvdXNseSBidWdnZWQgaW5cbi8vIFVJV2ViVmlldyBpbiBpT1MgPj0gOS4zLjMgd2hlbiB0cmlnZ2VyZWQgaW4gdG91Y2ggZXZlbnQgaGFuZGxlcnMuIEl0XG4vLyBjb21wbGV0ZWx5IHN0b3BzIHdvcmtpbmcgYWZ0ZXIgdHJpZ2dlcmluZyBhIGZldyB0aW1lcy4uLiBzbywgaWYgbmF0aXZlXG4vLyBQcm9taXNlIGlzIGF2YWlsYWJsZSwgd2Ugd2lsbCB1c2UgaXQ6XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCwgJGZsb3ctZGlzYWJsZS1saW5lICovXG5pZiAodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb21pc2UpKSB7XG4gIHZhciBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwLnRoZW4oZmx1c2hDYWxsYmFja3MpO1xuICAgIC8vIEluIHByb2JsZW1hdGljIFVJV2ViVmlld3MsIFByb21pc2UudGhlbiBkb2Vzbid0IGNvbXBsZXRlbHkgYnJlYWssIGJ1dFxuICAgIC8vIGl0IGNhbiBnZXQgc3R1Y2sgaW4gYSB3ZWlyZCBzdGF0ZSB3aGVyZSBjYWxsYmFja3MgYXJlIHB1c2hlZCBpbnRvIHRoZVxuICAgIC8vIG1pY3JvdGFzayBxdWV1ZSBidXQgdGhlIHF1ZXVlIGlzbid0IGJlaW5nIGZsdXNoZWQsIHVudGlsIHRoZSBicm93c2VyXG4gICAgLy8gbmVlZHMgdG8gZG8gc29tZSBvdGhlciB3b3JrLCBlLmcuIGhhbmRsZSBhIHRpbWVyLiBUaGVyZWZvcmUgd2UgY2FuXG4gICAgLy8gXCJmb3JjZVwiIHRoZSBtaWNyb3Rhc2sgcXVldWUgdG8gYmUgZmx1c2hlZCBieSBhZGRpbmcgYW4gZW1wdHkgdGltZXIuXG4gICAgaWYgKGlzSU9TKSB7IHNldFRpbWVvdXQobm9vcCk7IH1cbiAgfTtcbiAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XG59IGVsc2UgaWYgKCFpc0lFICYmIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJyAmJiAoXG4gIGlzTmF0aXZlKE11dGF0aW9uT2JzZXJ2ZXIpIHx8XG4gIC8vIFBoYW50b21KUyBhbmQgaU9TIDcueFxuICBNdXRhdGlvbk9ic2VydmVyLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcl0nXG4pKSB7XG4gIC8vIFVzZSBNdXRhdGlvbk9ic2VydmVyIHdoZXJlIG5hdGl2ZSBQcm9taXNlIGlzIG5vdCBhdmFpbGFibGUsXG4gIC8vIGUuZy4gUGhhbnRvbUpTLCBpT1M3LCBBbmRyb2lkIDQuNFxuICAvLyAoIzY0NjYgTXV0YXRpb25PYnNlcnZlciBpcyB1bnJlbGlhYmxlIGluIElFMTEpXG4gIHZhciBjb3VudGVyID0gMTtcbiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2hDYWxsYmFja3MpO1xuICB2YXIgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoY291bnRlcikpO1xuICBvYnNlcnZlci5vYnNlcnZlKHRleHROb2RlLCB7XG4gICAgY2hhcmFjdGVyRGF0YTogdHJ1ZVxuICB9KTtcbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIGNvdW50ZXIgPSAoY291bnRlciArIDEpICUgMjtcbiAgICB0ZXh0Tm9kZS5kYXRhID0gU3RyaW5nKGNvdW50ZXIpO1xuICB9O1xuICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoc2V0SW1tZWRpYXRlKSkge1xuICAvLyBGYWxsYmFjayB0byBzZXRJbW1lZGlhdGUuXG4gIC8vIFRlY2hpbmljYWxseSBpdCBsZXZlcmFnZXMgdGhlIChtYWNybykgdGFzayBxdWV1ZSxcbiAgLy8gYnV0IGl0IGlzIHN0aWxsIGEgYmV0dGVyIGNob2ljZSB0aGFuIHNldFRpbWVvdXQuXG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJbW1lZGlhdGUoZmx1c2hDYWxsYmFja3MpO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gRmFsbGJhY2sgdG8gc2V0VGltZW91dC5cbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHNldFRpbWVvdXQoZmx1c2hDYWxsYmFja3MsIDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayAoY2IsIGN0eCkge1xuICB2YXIgX3Jlc29sdmU7XG4gIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNiLmNhbGwoY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZSwgY3R4LCAnbmV4dFRpY2snKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF9yZXNvbHZlKSB7XG4gICAgICBfcmVzb2x2ZShjdHgpO1xuICAgIH1cbiAgfSk7XG4gIGlmICghcGVuZGluZykge1xuICAgIHBlbmRpbmcgPSB0cnVlO1xuICAgIHRpbWVyRnVuYygpO1xuICB9XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBpZiAoIWNiICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pXG4gIH1cbn1cblxuLyogICovXG5cbi8qIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBQcm94eSAqL1xuXG52YXIgaW5pdFByb3h5O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgYWxsb3dlZEdsb2JhbHMgPSBtYWtlTWFwKFxuICAgICdJbmZpbml0eSx1bmRlZmluZWQsTmFOLGlzRmluaXRlLGlzTmFOLCcgK1xuICAgICdwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCwnICtcbiAgICAnTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLCcgK1xuICAgICdyZXF1aXJlJyAvLyBmb3IgV2VicGFjay9Ccm93c2VyaWZ5XG4gICk7XG5cbiAgdmFyIHdhcm5Ob25QcmVzZW50ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgb3IgbWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBvbiB0aGUgaW5zdGFuY2UgYnV0IFwiICtcbiAgICAgICdyZWZlcmVuY2VkIGR1cmluZyByZW5kZXIuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgcmVhY3RpdmUsICcgK1xuICAgICAgJ2VpdGhlciBpbiB0aGUgZGF0YSBvcHRpb24sIG9yIGZvciBjbGFzcy1iYXNlZCBjb21wb25lbnRzLCBieSAnICtcbiAgICAgICdpbml0aWFsaXppbmcgdGhlIHByb3BlcnR5LiAnICtcbiAgICAgICdTZWU6IGh0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL3JlYWN0aXZpdHkuaHRtbCNEZWNsYXJpbmctUmVhY3RpdmUtUHJvcGVydGllcy4nLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgd2FyblJlc2VydmVkUHJlZml4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIG11c3QgYmUgYWNjZXNzZWQgd2l0aCBcXFwiJGRhdGEuXCIgKyBrZXkgKyBcIlxcXCIgYmVjYXVzZSBcIiArXG4gICAgICAncHJvcGVydGllcyBzdGFydGluZyB3aXRoIFwiJFwiIG9yIFwiX1wiIGFyZSBub3QgcHJveGllZCBpbiB0aGUgVnVlIGluc3RhbmNlIHRvICcgK1xuICAgICAgJ3ByZXZlbnQgY29uZmxpY3RzIHdpdGggVnVlIGludGVybmFscycgK1xuICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvYXBpLyNkYXRhJyxcbiAgICAgIHRhcmdldFxuICAgICk7XG4gIH07XG5cbiAgdmFyIGhhc1Byb3h5ID1cbiAgICB0eXBlb2YgUHJveHkgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb3h5KTtcblxuICBpZiAoaGFzUHJveHkpIHtcbiAgICB2YXIgaXNCdWlsdEluTW9kaWZpZXIgPSBtYWtlTWFwKCdzdG9wLHByZXZlbnQsc2VsZixjdHJsLHNoaWZ0LGFsdCxtZXRhLGV4YWN0Jyk7XG4gICAgY29uZmlnLmtleUNvZGVzID0gbmV3IFByb3h5KGNvbmZpZy5rZXlDb2Rlcywge1xuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoaXNCdWlsdEluTW9kaWZpZXIoa2V5KSkge1xuICAgICAgICAgIHdhcm4oKFwiQXZvaWQgb3ZlcndyaXRpbmcgYnVpbHQtaW4gbW9kaWZpZXIgaW4gY29uZmlnLmtleUNvZGVzOiAuXCIgKyBrZXkpKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBoYXNIYW5kbGVyID0ge1xuICAgIGhhczogZnVuY3Rpb24gaGFzICh0YXJnZXQsIGtleSkge1xuICAgICAgdmFyIGhhcyA9IGtleSBpbiB0YXJnZXQ7XG4gICAgICB2YXIgaXNBbGxvd2VkID0gYWxsb3dlZEdsb2JhbHMoa2V5KSB8fFxuICAgICAgICAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5LmNoYXJBdCgwKSA9PT0gJ18nICYmICEoa2V5IGluIHRhcmdldC4kZGF0YSkpO1xuICAgICAgaWYgKCFoYXMgJiYgIWlzQWxsb3dlZCkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSkgeyB3YXJuUmVzZXJ2ZWRQcmVmaXgodGFyZ2V0LCBrZXkpOyB9XG4gICAgICAgIGVsc2UgeyB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXMgfHwgIWlzQWxsb3dlZFxuICAgIH1cbiAgfTtcblxuICB2YXIgZ2V0SGFuZGxlciA9IHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAodGFyZ2V0LCBrZXkpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiAhKGtleSBpbiB0YXJnZXQpKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKSB7IHdhcm5SZXNlcnZlZFByZWZpeCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhcmdldFtrZXldXG4gICAgfVxuICB9O1xuXG4gIGluaXRQcm94eSA9IGZ1bmN0aW9uIGluaXRQcm94eSAodm0pIHtcbiAgICBpZiAoaGFzUHJveHkpIHtcbiAgICAgIC8vIGRldGVybWluZSB3aGljaCBwcm94eSBoYW5kbGVyIHRvIHVzZVxuICAgICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICAgIHZhciBoYW5kbGVycyA9IG9wdGlvbnMucmVuZGVyICYmIG9wdGlvbnMucmVuZGVyLl93aXRoU3RyaXBwZWRcbiAgICAgICAgPyBnZXRIYW5kbGVyXG4gICAgICAgIDogaGFzSGFuZGxlcjtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IG5ldyBQcm94eSh2bSwgaGFuZGxlcnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgc2Vlbk9iamVjdHMgPSBuZXcgX1NldCgpO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFuIG9iamVjdCB0byBldm9rZSBhbGwgY29udmVydGVkXG4gKiBnZXR0ZXJzLCBzbyB0aGF0IGV2ZXJ5IG5lc3RlZCBwcm9wZXJ0eSBpbnNpZGUgdGhlIG9iamVjdFxuICogaXMgY29sbGVjdGVkIGFzIGEgXCJkZWVwXCIgZGVwZW5kZW5jeS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2UgKHZhbCkge1xuICBfdHJhdmVyc2UodmFsLCBzZWVuT2JqZWN0cyk7XG4gIHNlZW5PYmplY3RzLmNsZWFyKCk7XG59XG5cbmZ1bmN0aW9uIF90cmF2ZXJzZSAodmFsLCBzZWVuKSB7XG4gIHZhciBpLCBrZXlzO1xuICB2YXIgaXNBID0gQXJyYXkuaXNBcnJheSh2YWwpO1xuICBpZiAoKCFpc0EgJiYgIWlzT2JqZWN0KHZhbCkpIHx8IE9iamVjdC5pc0Zyb3plbih2YWwpIHx8IHZhbCBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHZhbC5fX29iX18pIHtcbiAgICB2YXIgZGVwSWQgPSB2YWwuX19vYl9fLmRlcC5pZDtcbiAgICBpZiAoc2Vlbi5oYXMoZGVwSWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2Vlbi5hZGQoZGVwSWQpO1xuICB9XG4gIGlmIChpc0EpIHtcbiAgICBpID0gdmFsLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7IF90cmF2ZXJzZSh2YWxbaV0sIHNlZW4pOyB9XG4gIH0gZWxzZSB7XG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgaSA9IGtleXMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtrZXlzW2ldXSwgc2Vlbik7IH1cbiAgfVxufVxuXG52YXIgbWFyaztcbnZhciBtZWFzdXJlO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcGVyZiA9IGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXG4gICAgcGVyZiAmJlxuICAgIHBlcmYubWFyayAmJlxuICAgIHBlcmYubWVhc3VyZSAmJlxuICAgIHBlcmYuY2xlYXJNYXJrcyAmJlxuICAgIHBlcmYuY2xlYXJNZWFzdXJlc1xuICApIHtcbiAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZi5tYXJrKHRhZyk7IH07XG4gICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICB9O1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgbmFtZSA9IG9uY2UkJDEgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgb25jZTogb25jZSQkMSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlciAoZm5zLCB2bSkge1xuICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMkMSwgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIilcbiAgICB9XG4gIH1cbiAgaW52b2tlci5mbnMgPSBmbnM7XG4gIHJldHVybiBpbnZva2VyXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyAoXG4gIG9uLFxuICBvbGRPbixcbiAgYWRkLFxuICByZW1vdmUkJDEsXG4gIGNyZWF0ZU9uY2VIYW5kbGVyLFxuICB2bVxuKSB7XG4gIHZhciBuYW1lLCBkZWYkJDEsIGN1ciwgb2xkLCBldmVudDtcbiAgZm9yIChuYW1lIGluIG9uKSB7XG4gICAgZGVmJCQxID0gY3VyID0gb25bbmFtZV07XG4gICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIgKyAoZXZlbnQubmFtZSkgKyBcIlxcXCI6IGdvdCBcIiArIFN0cmluZyhjdXIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkKSkge1xuICAgICAgaWYgKGlzVW5kZWYoY3VyLmZucykpIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVGbkludm9rZXIoY3VyLCB2bSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNUcnVlKGV2ZW50Lm9uY2UpKSB7XG4gICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlKTtcbiAgICAgIH1cbiAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUsIGV2ZW50LnBhc3NpdmUsIGV2ZW50LnBhcmFtcyk7XG4gICAgfSBlbHNlIGlmIChjdXIgIT09IG9sZCkge1xuICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgIG9uW25hbWVdID0gb2xkO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICBpZiAoaXNVbmRlZihvbltuYW1lXSkpIHtcbiAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICByZW1vdmUkJDEoZXZlbnQubmFtZSwgb2xkT25bbmFtZV0sIGV2ZW50LmNhcHR1cmUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9va0tleSwgaG9vaykge1xuICBpZiAoZGVmIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICBkZWYgPSBkZWYuZGF0YS5ob29rIHx8IChkZWYuZGF0YS5ob29rID0ge30pO1xuICB9XG4gIHZhciBpbnZva2VyO1xuICB2YXIgb2xkSG9vayA9IGRlZltob29rS2V5XTtcblxuICBmdW5jdGlvbiB3cmFwcGVkSG9vayAoKSB7XG4gICAgaG9vay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIC8vIGltcG9ydGFudDogcmVtb3ZlIG1lcmdlZCBob29rIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2VcbiAgICAvLyBhbmQgcHJldmVudCBtZW1vcnkgbGVha1xuICAgIHJlbW92ZShpbnZva2VyLmZucywgd3JhcHBlZEhvb2spO1xuICB9XG5cbiAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAvLyBubyBleGlzdGluZyBob29rXG4gICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbd3JhcHBlZEhvb2tdKTtcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob2xkSG9vay5mbnMpICYmIGlzVHJ1ZShvbGRIb29rLm1lcmdlZCkpIHtcbiAgICAgIC8vIGFscmVhZHkgYSBtZXJnZWQgaW52b2tlclxuICAgICAgaW52b2tlciA9IG9sZEhvb2s7XG4gICAgICBpbnZva2VyLmZucy5wdXNoKHdyYXBwZWRIb29rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbb2xkSG9vaywgd3JhcHBlZEhvb2tdKTtcbiAgICB9XG4gIH1cblxuICBpbnZva2VyLm1lcmdlZCA9IHRydWU7XG4gIGRlZltob29rS2V5XSA9IGludm9rZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIChcbiAgZGF0YSxcbiAgQ3RvcixcbiAgdGFnXG4pIHtcbiAgLy8gd2UgYXJlIG9ubHkgZXh0cmFjdGluZyByYXcgdmFsdWVzIGhlcmUuXG4gIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICB2YXIgcHJvcE9wdGlvbnMgPSBDdG9yLm9wdGlvbnMucHJvcHM7XG4gIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGF0dHJzID0gZGF0YS5hdHRycztcbiAgdmFyIHByb3BzID0gZGF0YS5wcm9wcztcbiAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHZhciBhbHRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBrZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXksXG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVkIGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVudClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChpc1VuZGVmKGMpIHx8IHR5cGVvZiBjID09PSAnYm9vbGVhbicpIHsgY29udGludWUgfVxuICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgIGxhc3QgPSByZXNbbGFzdEluZGV4XTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKTtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgKGNbMF0pLnRleHQpO1xuICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAvLyBlc3NlbnRpYWxseSBtZXJnZWQgd2hlbiByZW5kZXJlZCB0byBIVE1MIHN0cmluZ3NcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXG4gICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJpbmplY3Rpb24gYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlSW5qZWN0IChpbmplY3QsIHZtKSB7XG4gIGlmIChpbmplY3QpIHtcbiAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICA/IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpXG4gICAgICA6IE9iamVjdC5rZXlzKGluamVjdCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgLy8gIzY1NzQgaW4gY2FzZSB0aGUgaW5qZWN0IG9iamVjdCBpcyBvYnNlcnZlZC4uLlxuICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgdmFyIHByb3ZpZGVLZXkgPSBpbmplY3Rba2V5XS5mcm9tO1xuICAgICAgdmFyIHNvdXJjZSA9IHZtO1xuICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLl9wcm92aWRlZCAmJiBoYXNPd24oc291cmNlLl9wcm92aWRlZCwgcHJvdmlkZUtleSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHNvdXJjZS5fcHJvdmlkZWRbcHJvdmlkZUtleV07XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcbiAgICAgICAgICB2YXIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdHlwZW9mIHByb3ZpZGVEZWZhdWx0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHByb3ZpZGVEZWZhdWx0LmNhbGwodm0pXG4gICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKChcIkluamVjdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbi8qICAqL1xuXG5cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2xvdHMgKFxuICBjaGlsZHJlbixcbiAgY29udGV4dFxuKSB7XG4gIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgIHJldHVybiB7fVxuICB9XG4gIHZhciBzbG90cyA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciBkYXRhID0gY2hpbGQuZGF0YTtcbiAgICAvLyByZW1vdmUgc2xvdCBhdHRyaWJ1dGUgaWYgdGhlIG5vZGUgaXMgcmVzb2x2ZWQgYXMgYSBWdWUgc2xvdCBub2RlXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnNsb3QpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgfVxuICAgIC8vIG5hbWVkIHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVkIGluIHRoZVxuICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICBpZiAoKGNoaWxkLmNvbnRleHQgPT09IGNvbnRleHQgfHwgY2hpbGQuZm5Db250ZXh0ID09PSBjb250ZXh0KSAmJlxuICAgICAgZGF0YSAmJiBkYXRhLnNsb3QgIT0gbnVsbFxuICAgICkge1xuICAgICAgdmFyIG5hbWUgPSBkYXRhLnNsb3Q7XG4gICAgICB2YXIgc2xvdCA9IChzbG90c1tuYW1lXSB8fCAoc2xvdHNbbmFtZV0gPSBbXSkpO1xuICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hpbGQuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxuICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgZm9yICh2YXIgbmFtZSQxIGluIHNsb3RzKSB7XG4gICAgaWYgKHNsb3RzW25hbWUkMV0uZXZlcnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgICAgZGVsZXRlIHNsb3RzW25hbWUkMV07XG4gICAgfVxuICB9XG4gIHJldHVybiBzbG90c1xufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UgKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLmlzQ29tbWVudCAmJiAhbm9kZS5hc3luY0ZhY3RvcnkpIHx8IG5vZGUudGV4dCA9PT0gJyAnXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyAoXG4gIHNsb3RzLFxuICBub3JtYWxTbG90cyxcbiAgcHJldlNsb3RzXG4pIHtcbiAgdmFyIHJlcztcbiAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gIHZhciBpc1N0YWJsZSA9IHNsb3RzID8gISFzbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xuICB2YXIga2V5ID0gc2xvdHMgJiYgc2xvdHMuJGtleTtcbiAgaWYgKCFzbG90cykge1xuICAgIHJlcyA9IHt9O1xuICB9IGVsc2UgaWYgKHNsb3RzLl9ub3JtYWxpemVkKSB7XG4gICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgcmV0dXJuIHNsb3RzLl9ub3JtYWxpemVkXG4gIH0gZWxzZSBpZiAoXG4gICAgaXNTdGFibGUgJiZcbiAgICBwcmV2U2xvdHMgJiZcbiAgICBwcmV2U2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmXG4gICAga2V5ID09PSBwcmV2U2xvdHMuJGtleSAmJlxuICAgICFoYXNOb3JtYWxTbG90cyAmJlxuICAgICFwcmV2U2xvdHMuJGhhc05vcm1hbFxuICApIHtcbiAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXG4gICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXG4gICAgcmV0dXJuIHByZXZTbG90c1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSQxIGluIHNsb3RzKSB7XG4gICAgICBpZiAoc2xvdHNba2V5JDFdICYmIGtleSQxWzBdICE9PSAnJCcpIHtcbiAgICAgICAgcmVzW2tleSQxXSA9IG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSQxLCBzbG90c1trZXkkMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gIGZvciAodmFyIGtleSQyIGluIG5vcm1hbFNsb3RzKSB7XG4gICAgaWYgKCEoa2V5JDIgaW4gcmVzKSkge1xuICAgICAgcmVzW2tleSQyXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5JDIpO1xuICAgIH1cbiAgfVxuICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gIC8vIGFuZCB3aGVuIHRoYXQgaXMgcGFzc2VkIGRvd24gdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvclxuICBpZiAoc2xvdHMgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShzbG90cykpIHtcbiAgICAoc2xvdHMpLl9ub3JtYWxpemVkID0gcmVzO1xuICB9XG4gIGRlZihyZXMsICckc3RhYmxlJywgaXNTdGFibGUpO1xuICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gIGRlZihyZXMsICckaGFzTm9ybWFsJywgaGFzTm9ybWFsU2xvdHMpO1xuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcbiAgdmFyIG5vcm1hbGl6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgIHJlcyA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZXMpXG4gICAgICA/IFtyZXNdIC8vIHNpbmdsZSB2bm9kZVxuICAgICAgOiBub3JtYWxpemVDaGlsZHJlbihyZXMpO1xuICAgIHJldHVybiByZXMgJiYgKFxuICAgICAgcmVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgKHJlcy5sZW5ndGggPT09IDEgJiYgcmVzWzBdLmlzQ29tbWVudCkgLy8gIzk2NThcbiAgICApID8gdW5kZWZpbmVkXG4gICAgICA6IHJlc1xuICB9O1xuICAvLyB0aGlzIGlzIGEgc2xvdCB1c2luZyB0aGUgbmV3IHYtc2xvdCBzeW50YXggd2l0aG91dCBzY29wZS4gYWx0aG91Z2ggaXQgaXNcbiAgLy8gY29tcGlsZWQgYXMgYSBzY29wZWQgc2xvdCwgcmVuZGVyIGZuIHVzZXJzIHdvdWxkIGV4cGVjdCBpdCB0byBiZSBwcmVzZW50XG4gIC8vIG9uIHRoaXMuJHNsb3RzIGJlY2F1c2UgdGhlIHVzYWdlIGlzIHNlbWFudGljYWxseSBhIG5vcm1hbCBzbG90LlxuICBpZiAoZm4ucHJveHkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9ybWFsU2xvdHMsIGtleSwge1xuICAgICAgZ2V0OiBub3JtYWxpemVkLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbmZ1bmN0aW9uIHByb3h5Tm9ybWFsU2xvdChzbG90cywga2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbG90c1trZXldOyB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckxpc3QgKFxuICB2YWwsXG4gIHJlbmRlclxuKSB7XG4gIHZhciByZXQsIGksIGwsIGtleXMsIGtleTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtpXSwgaSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgaWYgKGhhc1N5bWJvbCAmJiB2YWxbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgcmV0ID0gW107XG4gICAgICB2YXIgaXRlcmF0b3IgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAgICAgcmV0LnB1c2gocmVuZGVyKHJlc3VsdC52YWx1ZSwgcmV0Lmxlbmd0aCkpO1xuICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2tleV0sIGtleSwgaSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNEZWYocmV0KSkge1xuICAgIHJldCA9IFtdO1xuICB9XG4gIChyZXQpLl9pc1ZMaXN0ID0gdHJ1ZTtcbiAgcmV0dXJuIHJldFxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIDxzbG90PlxuICovXG5mdW5jdGlvbiByZW5kZXJTbG90IChcbiAgbmFtZSxcbiAgZmFsbGJhY2ssXG4gIHByb3BzLFxuICBiaW5kT2JqZWN0XG4pIHtcbiAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICB2YXIgbm9kZXM7XG4gIGlmIChzY29wZWRTbG90Rm4pIHsgLy8gc2NvcGVkIHNsb3RcbiAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgIGlmIChiaW5kT2JqZWN0KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNPYmplY3QoYmluZE9iamVjdCkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnc2xvdCB2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCcsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiaW5kT2JqZWN0KSwgcHJvcHMpO1xuICAgIH1cbiAgICBub2RlcyA9IHNjb3BlZFNsb3RGbihwcm9wcykgfHwgZmFsbGJhY2s7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMgPSB0aGlzLiRzbG90c1tuYW1lXSB8fCBmYWxsYmFjaztcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSBwcm9wcyAmJiBwcm9wcy5zbG90O1xuICBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJywgeyBzbG90OiB0YXJnZXQgfSwgbm9kZXMpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGVzXG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIgKGlkKSB7XG4gIHJldHVybiByZXNvbHZlQXNzZXQodGhpcy4kb3B0aW9ucywgJ2ZpbHRlcnMnLCBpZCwgdHJ1ZSkgfHwgaWRlbnRpdHlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzS2V5Tm90TWF0Y2ggKGV4cGVjdCwgYWN0dWFsKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdCkpIHtcbiAgICByZXR1cm4gZXhwZWN0LmluZGV4T2YoYWN0dWFsKSA9PT0gLTFcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXhwZWN0ICE9PSBhY3R1YWxcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBjaGVja2luZyBrZXlDb2RlcyBmcm9tIGNvbmZpZy5cbiAqIGV4cG9zZWQgYXMgVnVlLnByb3RvdHlwZS5fa1xuICogcGFzc2luZyBpbiBldmVudEtleU5hbWUgYXMgbGFzdCBhcmd1bWVudCBzZXBhcmF0ZWx5IGZvciBiYWNrd2FyZHMgY29tcGF0XG4gKi9cbmZ1bmN0aW9uIGNoZWNrS2V5Q29kZXMgKFxuICBldmVudEtleUNvZGUsXG4gIGtleSxcbiAgYnVpbHRJbktleUNvZGUsXG4gIGV2ZW50S2V5TmFtZSxcbiAgYnVpbHRJbktleU5hbWVcbikge1xuICB2YXIgbWFwcGVkS2V5Q29kZSA9IGNvbmZpZy5rZXlDb2Rlc1trZXldIHx8IGJ1aWx0SW5LZXlDb2RlO1xuICBpZiAoYnVpbHRJbktleU5hbWUgJiYgZXZlbnRLZXlOYW1lICYmICFjb25maWcua2V5Q29kZXNba2V5XSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKGJ1aWx0SW5LZXlOYW1lLCBldmVudEtleU5hbWUpXG4gIH0gZWxzZSBpZiAobWFwcGVkS2V5Q29kZSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKG1hcHBlZEtleUNvZGUsIGV2ZW50S2V5Q29kZSlcbiAgfSBlbHNlIGlmIChldmVudEtleU5hbWUpIHtcbiAgICByZXR1cm4gaHlwaGVuYXRlKGV2ZW50S2V5TmFtZSkgIT09IGtleVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyAoXG4gIGRhdGEsXG4gIHRhZyxcbiAgdmFsdWUsXG4gIGFzUHJvcCxcbiAgaXNTeW5jXG4pIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFyIGhhc2g7XG4gICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAnY2xhc3MnIHx8XG4gICAgICAgICAga2V5ID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc2ggPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgaGFzaCA9IGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgIDogZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgaWYgKCEoY2FtZWxpemVkS2V5IGluIGhhc2gpICYmICEoaHlwaGVuYXRlZEtleSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0luRm9yXG4pIHtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgdGhpcy5fcmVuZGVyUHJveHksXG4gICAgbnVsbCxcbiAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgpLCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUsXG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIgKyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNPbmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAoa2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIG91cnMpIDogb3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRTbG90cyAoXG4gIGZucywgLy8gc2VlIGZsb3cvdm5vZGVcbiAgcmVzLFxuICAvLyB0aGUgZm9sbG93aW5nIGFyZSBhZGRlZCBpbiAyLjZcbiAgaGFzRHluYW1pY0tleXMsXG4gIGNvbnRlbnRIYXNoS2V5XG4pIHtcbiAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNsb3QgPSBmbnNbaV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2xvdCkpIHtcbiAgICAgIHJlc29sdmVTY29wZWRTbG90cyhzbG90LCByZXMsIGhhc0R5bmFtaWNLZXlzKTtcbiAgICB9IGVsc2UgaWYgKHNsb3QpIHtcbiAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgaWYgKHNsb3QucHJveHkpIHtcbiAgICAgICAgc2xvdC5mbi5wcm94eSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXNbc2xvdC5rZXldID0gc2xvdC5mbjtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbnRlbnRIYXNoS2V5KSB7XG4gICAgKHJlcykuJGtleSA9IGNvbnRlbnRIYXNoS2V5O1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGJpbmREeW5hbWljS2V5cyAoYmFzZU9iaiwgdmFsdWVzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5KSB7XG4gICAgICBiYXNlT2JqW3ZhbHVlc1tpXV0gPSB2YWx1ZXNbaSArIDFdO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgIT09ICcnICYmIGtleSAhPT0gbnVsbCkge1xuICAgICAgLy8gbnVsbCBpcyBhIHNwZWljYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICB3YXJuKFxuICAgICAgICAoXCJJbnZhbGlkIHZhbHVlIGZvciBkeW5hbWljIGRpcmVjdGl2ZSBhcmd1bWVudCAoZXhwZWN0ZWQgc3RyaW5nIG9yIG51bGwpOiBcIiArIGtleSksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiYXNlT2JqXG59XG5cbi8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuLy8gZW5zdXJlIG9ubHkgYXBwZW5kIHdoZW4gdmFsdWUgaXMgYWxyZWFkeSBzdHJpbmcsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNhc3Rcbi8vIHRvIHN0cmluZyBhbmQgY2F1c2UgdGhlIHR5cGUgY2hlY2sgdG8gbWlzcy5cbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllciAodmFsdWUsIHN5bWJvbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN5bWJvbCArIHZhbHVlIDogdmFsdWVcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluc3RhbGxSZW5kZXJIZWxwZXJzICh0YXJnZXQpIHtcbiAgdGFyZ2V0Ll9vID0gbWFya09uY2U7XG4gIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICB0YXJnZXQuX3MgPSB0b1N0cmluZztcbiAgdGFyZ2V0Ll9sID0gcmVuZGVyTGlzdDtcbiAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgdGFyZ2V0Ll9xID0gbG9vc2VFcXVhbDtcbiAgdGFyZ2V0Ll9pID0gbG9vc2VJbmRleE9mO1xuICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gIHRhcmdldC5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gIHRhcmdldC5fayA9IGNoZWNrS2V5Q29kZXM7XG4gIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgdGFyZ2V0Ll92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICB0YXJnZXQuX2UgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gIHRhcmdldC5fZyA9IGJpbmRPYmplY3RMaXN0ZW5lcnM7XG4gIHRhcmdldC5fZCA9IGJpbmREeW5hbWljS2V5cztcbiAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgKFxuICBkYXRhLFxuICBwcm9wcyxcbiAgY2hpbGRyZW4sXG4gIHBhcmVudCxcbiAgQ3RvclxuKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gIC8vIGdldHMgYSB1bmlxdWUgY29udGV4dCAtIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IG5hbWVkIHNsb3QgY2hlY2tcbiAgdmFyIGNvbnRleHRWbTtcbiAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICBjb250ZXh0Vm0gPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY29udGV4dCB2bSBwYXNzZWQgaW4gaXMgYSBmdW5jdGlvbmFsIGNvbnRleHQgYXMgd2VsbC5cbiAgICAvLyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGFibGUgdG8gZ2V0IGEgaG9sZCB0byB0aGVcbiAgICAvLyByZWFsIGNvbnRleHQgaW5zdGFuY2UuXG4gICAgY29udGV4dFZtID0gcGFyZW50O1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHBhcmVudCA9IHBhcmVudC5fb3JpZ2luYWw7XG4gIH1cbiAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcblxuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgdGhpcy5pbmplY3Rpb25zID0gcmVzb2x2ZUluamVjdChvcHRpb25zLmluamVjdCwgcGFyZW50KTtcbiAgdGhpcy5zbG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMkMS4kc2xvdHMpIHtcbiAgICAgIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBkYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB0aGlzJDEuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcyQxLiRzbG90c1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NvcGVkU2xvdHMnLCAoe1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuc2xvdHMoKSlcbiAgICB9XG4gIH0pKTtcblxuICAvLyBzdXBwb3J0IGZvciBjb21waWxlZCBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgIHRoaXMuJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy4kc2xvdHMpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuX3Njb3BlSWQpIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICBpZiAodm5vZGUgJiYgIUFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHZub2RlLmZuU2NvcGVJZCA9IG9wdGlvbnMuX3Njb3BlSWQ7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bm9kZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pOyB9O1xuICB9XG59XG5cbmluc3RhbGxSZW5kZXJIZWxwZXJzKEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0LnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQgKFxuICBDdG9yLFxuICBwcm9wc0RhdGEsXG4gIGRhdGEsXG4gIGNvbnRleHRWbSxcbiAgY2hpbGRyZW5cbikge1xuICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEucHJvcHMpOyB9XG4gIH1cblxuICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChcbiAgICBkYXRhLFxuICAgIHByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRleHRWbSxcbiAgICBDdG9yXG4gICk7XG5cbiAgdmFyIHZub2RlID0gb3B0aW9ucy5yZW5kZXIuY2FsbChudWxsLCByZW5kZXJDb250ZXh0Ll9jLCByZW5kZXJDb250ZXh0KTtcblxuICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dClcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgIHZhciB2bm9kZXMgPSBub3JtYWxpemVDaGlsZHJlbih2bm9kZSkgfHwgW107XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldID0gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZXNbaV0sIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQgKHZub2RlLCBkYXRhLCBjb250ZXh0Vm0sIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpIHtcbiAgLy8gIzc4MTcgY2xvbmUgbm9kZSBiZWZvcmUgc2V0dGluZyBmbkNvbnRleHQsIG90aGVyd2lzZSBpZiB0aGUgbm9kZSBpcyByZXVzZWRcbiAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gIC8vIHRoYXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIHRvIG1hdGNoLlxuICB2YXIgY2xvbmUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICBjbG9uZS5mbk9wdGlvbnMgPSBvcHRpb25zO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIChjbG9uZS5kZXZ0b29sc01ldGEgPSBjbG9uZS5kZXZ0b29sc01ldGEgfHwge30pLnJlbmRlckNvbnRleHQgPSByZW5kZXJDb250ZXh0O1xuICB9XG4gIGlmIChkYXRhLnNsb3QpIHtcbiAgICAoY2xvbmUuZGF0YSB8fCAoY2xvbmUuZGF0YSA9IHt9KSkuc2xvdCA9IGRhdGEuc2xvdDtcbiAgfVxuICByZXR1cm4gY2xvbmVcbn1cblxuZnVuY3Rpb24gbWVyZ2VQcm9wcyAodG8sIGZyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICB0b1tjYW1lbGl6ZShrZXkpXSA9IGZyb21ba2V5XTtcbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW5saW5lIGhvb2tzIHRvIGJlIGludm9rZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbnZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICBpbml0OiBmdW5jdGlvbiBpbml0ICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgaWYgKFxuICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICF2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQgJiZcbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlXG4gICAgKSB7XG4gICAgICAvLyBrZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcbiAgICAgIHZhciBtb3VudGVkTm9kZSA9IHZub2RlOyAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZShcbiAgICAgICAgdm5vZGUsXG4gICAgICAgIGFjdGl2ZUluc3RhbmNlXG4gICAgICApO1xuICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICB9XG4gIH0sXG5cbiAgcHJlcGF0Y2g6IGZ1bmN0aW9uIHByZXBhdGNoIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB1cGRhdGVDaGlsZENvbXBvbmVudChcbiAgICAgIGNoaWxkLFxuICAgICAgb3B0aW9ucy5wcm9wc0RhdGEsIC8vIHVwZGF0ZWQgcHJvcHNcbiAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xuICAgICAgdm5vZGUsIC8vIG5ldyBwYXJlbnQgdm5vZGVcbiAgICAgIG9wdGlvbnMuY2hpbGRyZW4gLy8gbmV3IGNoaWxkcmVuXG4gICAgKTtcbiAgfSxcblxuICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydCAodm5vZGUpIHtcbiAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICBjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGNhbGxIb29rKGNvbXBvbmVudEluc3RhbmNlLCAnbW91bnRlZCcpO1xuICAgIH1cbiAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgIGlmIChjb250ZXh0Ll9pc01vdW50ZWQpIHtcbiAgICAgICAgLy8gdnVlLXJvdXRlciMxMjEyXG4gICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgLy8gY2hhbmdlLCBzbyBkaXJlY3RseSB3YWxraW5nIHRoZSB0cmVlIGhlcmUgbWF5IGNhbGwgYWN0aXZhdGVkIGhvb2tzXG4gICAgICAgIC8vIG9uIGluY29ycmVjdCBjaGlsZHJlbi4gSW5zdGVhZCB3ZSBwdXNoIHRoZW0gaW50byBhIHF1ZXVlIHdoaWNoIHdpbGxcbiAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRjaCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3kgKHZub2RlKSB7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGlmICghdm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxudmFyIGhvb2tzVG9NZXJnZSA9IE9iamVjdC5rZXlzKGNvbXBvbmVudFZOb2RlSG9va3MpO1xuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQgKFxuICBDdG9yLFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgaWYgKGlzVW5kZWYoQ3RvcikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBiYXNlQ3RvciA9IGNvbnRleHQuJG9wdGlvbnMuX2Jhc2U7XG5cbiAgLy8gcGxhaW4gb3B0aW9ucyBvYmplY3Q6IHR1cm4gaXQgaW50byBhIGNvbnN0cnVjdG9yXG4gIGlmIChpc09iamVjdChDdG9yKSkge1xuICAgIEN0b3IgPSBiYXNlQ3Rvci5leHRlbmQoQ3Rvcik7XG4gIH1cblxuICAvLyBpZiBhdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGEgY29uc3RydWN0b3Igb3IgYW4gYXN5bmMgY29tcG9uZW50IGZhY3RvcnksXG4gIC8vIHJlamVjdC5cbiAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIgKyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGFzeW5jIGNvbXBvbmVudFxuICB2YXIgYXN5bmNGYWN0b3J5O1xuICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgbm9kZSBmb3IgYXN5bmMgY29tcG9uZW50LCB3aGljaCBpcyByZW5kZXJlZFxuICAgICAgLy8gYXMgYSBjb21tZW50IG5vZGUgYnV0IHByZXNlcnZlcyBhbGwgdGhlIHJhdyBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUuXG4gICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihcbiAgICAgICAgYXN5bmNGYWN0b3J5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdGFnXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3RvciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcblxuICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgIHRyYW5zZm9ybU1vZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gIH1cblxuICAvLyBleHRyYWN0IHByb3BzXG4gIHZhciBwcm9wc0RhdGEgPSBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZyk7XG5cbiAgLy8gZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKVxuICB9XG5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgLy8gY2hpbGQgY29tcG9uZW50IGxpc3RlbmVycyBpbnN0ZWFkIG9mIERPTSBsaXN0ZW5lcnNcbiAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gIC8vIHNvIGl0IGdldHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJlbnQgY29tcG9uZW50IHBhdGNoLlxuICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcblxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcblxuICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICBkYXRhID0ge307XG4gICAgaWYgKHNsb3QpIHtcbiAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKTtcblxuICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICB2YXIgbmFtZSA9IEN0b3Iub3B0aW9ucy5uYW1lIHx8IHRhZztcbiAgdmFyIHZub2RlID0gbmV3IFZOb2RlKFxuICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCxcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LFxuICAgIGFzeW5jRmFjdG9yeVxuICApO1xuXG4gIHJldHVybiB2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChcbiAgdm5vZGUsIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cgZG9lc24ndFxuICBwYXJlbnQgLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXG4pIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgcGFyZW50OiBwYXJlbnRcbiAgfTtcbiAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbnNcbiAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gaW5saW5lVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zO1xuICB9XG4gIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rc1RvTWVyZ2UubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgdmFyIHRvTWVyZ2UgPSBjb21wb25lbnRWTm9kZUhvb2tzW2tleV07XG4gICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgIGhvb2tzW2tleV0gPSBleGlzdGluZyA/IG1lcmdlSG9vayQxKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayQxIChmMSwgZjIpIHtcbiAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgIGYxKGEsIGIpO1xuICAgIGYyKGEsIGIpO1xuICB9O1xuICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gIHJldHVybiBtZXJnZWRcbn1cblxuLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50b1xuLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Nb2RlbCAob3B0aW9ucywgZGF0YSkge1xuICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICA7KGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShleGlzdGluZylcbiAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbnZhciBBTFdBWVNfTk9STUFMSVpFID0gMjtcblxuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlLFxuICBhbHdheXNOb3JtYWxpemVcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgY2hpbGRyZW4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICB9XG4gIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSlcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQgKFxuICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICBub3JtYWxpemF0aW9uVHlwZVxuKSB7XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoZGF0YSkuX19vYl9fKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIgKyAoSlNPTi5zdHJpbmdpZnkoZGF0YSkpICsgXCJcXG5cIiArXG4gICAgICAnQWx3YXlzIGNyZWF0ZSBmcmVzaCB2bm9kZSBkYXRhIG9iamVjdHMgaW4gZWFjaCByZW5kZXIhJyxcbiAgICAgIGNvbnRleHRcbiAgICApO1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyBvYmplY3Qgc3ludGF4IGluIHYtYmluZFxuICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICB0YWcgPSBkYXRhLmlzO1xuICB9XG4gIGlmICghdGFnKSB7XG4gICAgLy8gaW4gY2FzZSBvZiBjb21wb25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICBpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KVxuICApIHtcbiAgICB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgIHR5cGVvZiBjaGlsZHJlblswXSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cbiAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgdm5vZGUsIG5zO1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgQ3RvcjtcbiAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJiBpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVtZW50c1xuICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgdGFnLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXG4gICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH0gZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgaWYgKGlzRGVmKG5zKSkgeyBhcHBseU5TKHZub2RlLCBucyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHsgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7IH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlOUyAodm5vZGUsIG5zLCBmb3JjZSkge1xuICB2bm9kZS5ucyA9IG5zO1xuICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICBucyA9IHVuZGVmaW5lZDtcbiAgICBmb3JjZSA9IHRydWU7XG4gIH1cbiAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIChcbiAgICAgICAgaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zLCBmb3JjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIHJlZiAjNTMxOFxuLy8gbmVjZXNzYXJ5IHRvIGVuc3VyZSBwYXJlbnQgcmUtcmVuZGVyIHdoZW4gZGVlcCBiaW5kaW5ncyBsaWtlIDpzdHlsZSBhbmRcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG5mdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyAoZGF0YSkge1xuICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgfVxuICBpZiAoaXNPYmplY3QoZGF0YS5jbGFzcykpIHtcbiAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFJlbmRlciAodm0pIHtcbiAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICB2YXIgcGFyZW50Vm5vZGUgPSB2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcbiAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICB2bS4kc2NvcGVkU2xvdHMgPSBlbXB0eU9iamVjdDtcbiAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gIC8vIGFyZ3Mgb3JkZXI6IHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemVcbiAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAvLyBub3JtYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGZvciB0aGUgcHVibGljIHZlcnNpb24sIHVzZWQgaW5cbiAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuXG4gIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRhdHRycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0LCBudWxsLCB0cnVlKTtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICB9XG59XG5cbnZhciBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuXG5mdW5jdGlvbiByZW5kZXJNaXhpbiAoVnVlKSB7XG4gIC8vIGluc3RhbGwgcnVudGltZSBjb252ZW5pZW5jZSBoZWxwZXJzXG4gIGluc3RhbGxSZW5kZXJIZWxwZXJzKFZ1ZS5wcm90b3R5cGUpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIG5leHRUaWNrKGZuLCB0aGlzKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHZhciByZWYgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgcmVuZGVyID0gcmVmLnJlbmRlcjtcbiAgICB2YXIgX3BhcmVudFZub2RlID0gcmVmLl9wYXJlbnRWbm9kZTtcblxuICAgIGlmIChfcGFyZW50Vm5vZGUpIHtcbiAgICAgIHZtLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cyxcbiAgICAgICAgdm0uJHNsb3RzLFxuICAgICAgICB2bS4kc2NvcGVkU2xvdHNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAvLyByZW5kZXIgc2VsZlxuICAgIHZhciB2bm9kZTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIG1haW50YWluIGEgc3RhY2sgYmVjYXVlcyBhbGwgcmVuZGVyIGZucyBhcmUgY2FsbGVkXG4gICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gb25lIGFub3RoZXIuIE5lc3RlZCBjb21wb25lbnQncyByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHdoZW4gcGFyZW50IGNvbXBvbmVudCBpcyBwYXRjaGVkLlxuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gdm07XG4gICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlclwiKTtcbiAgICAgIC8vIHJldHVybiBlcnJvciByZW5kZXIgcmVzdWx0LFxuICAgICAgLy8gb3IgcHJldmlvdXMgdm5vZGUgdG8gcHJldmVudCByZW5kZXIgZXJyb3IgY2F1c2luZyBibGFuayBjb21wb25lbnRcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkgJiYgdm5vZGUubGVuZ3RoID09PSAxKSB7XG4gICAgICB2bm9kZSA9IHZub2RlWzBdO1xuICAgIH1cbiAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgaWYgKCEodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ011bHRpcGxlIHJvb3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSByZW5kZXIgZnVuY3Rpb24uIFJlbmRlciBmdW5jdGlvbiAnICtcbiAgICAgICAgICAnc2hvdWxkIHJldHVybiBhIHNpbmdsZSByb290IG5vZGUuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgfVxuICAgIC8vIHNldCBwYXJlbnRcbiAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgcmV0dXJuIHZub2RlXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnN1cmVDdG9yIChjb21wLCBiYXNlKSB7XG4gIGlmIChcbiAgICBjb21wLl9fZXNNb2R1bGUgfHxcbiAgICAoaGFzU3ltYm9sICYmIGNvbXBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpXG4gICkge1xuICAgIGNvbXAgPSBjb21wLmRlZmF1bHQ7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0KGNvbXApXG4gICAgPyBiYXNlLmV4dGVuZChjb21wKVxuICAgIDogY29tcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyIChcbiAgZmFjdG9yeSxcbiAgZGF0YSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHRhZ1xuKSB7XG4gIHZhciBub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICBub2RlLmFzeW5jRmFjdG9yeSA9IGZhY3Rvcnk7XG4gIG5vZGUuYXN5bmNNZXRhID0geyBkYXRhOiBkYXRhLCBjb250ZXh0OiBjb250ZXh0LCBjaGlsZHJlbjogY2hpbGRyZW4sIHRhZzogdGFnIH07XG4gIHJldHVybiBub2RlXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBc3luY0NvbXBvbmVudCAoXG4gIGZhY3RvcnksXG4gIGJhc2VDdG9yXG4pIHtcbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmVycm9yKSAmJiBpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXBcbiAgfVxuXG4gIGlmIChpc0RlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgIHJldHVybiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cblxuICB2YXIgb3duZXIgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XG4gIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgLy8gYWxyZWFkeSBwZW5kaW5nXG4gICAgZmFjdG9yeS5vd25lcnMucHVzaChvd25lcik7XG4gIH1cblxuICBpZiAoaXNUcnVlKGZhY3RvcnkubG9hZGluZykgJiYgaXNEZWYoZmFjdG9yeS5sb2FkaW5nQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICB9XG5cbiAgaWYgKG93bmVyICYmICFpc0RlZihmYWN0b3J5Lm93bmVycykpIHtcbiAgICB2YXIgb3duZXJzID0gZmFjdG9yeS5vd25lcnMgPSBbb3duZXJdO1xuICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICB2YXIgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICB2YXIgdGltZXJUaW1lb3V0ID0gbnVsbFxuXG4gICAgOyhvd25lcikuJG9uKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZShvd25lcnMsIG93bmVyKTsgfSk7XG5cbiAgICB2YXIgZm9yY2VSZW5kZXIgPSBmdW5jdGlvbiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG93bmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgKG93bmVyc1tpXSkuJGZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIGlmICh0aW1lckxvYWRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJMb2FkaW5nKTtcbiAgICAgICAgICB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lclRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJUaW1lb3V0KTtcbiAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzKSB7XG4gICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgZmFjdG9yeS5yZXNvbHZlZCA9IGVuc3VyZUN0b3IocmVzLCBiYXNlQ3Rvcik7XG4gICAgICAvLyBpbnZva2UgY2FsbGJhY2tzIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBzeW5jaHJvbm91cyByZXNvbHZlXG4gICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgIGlmICghc3luYykge1xuICAgICAgICBmb3JjZVJlbmRlcih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG93bmVycy5sZW5ndGggPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlamVjdCA9IG9uY2UoZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudDogXCIgKyAoU3RyaW5nKGZhY3RvcnkpKSArXG4gICAgICAgIChyZWFzb24gPyAoXCJcXG5SZWFzb246IFwiICsgcmVhc29uKSA6ICcnKVxuICAgICAgKTtcbiAgICAgIGlmIChpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XG4gICAgICAgIGZvcmNlUmVuZGVyKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlcyA9IGZhY3RvcnkocmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgIGlmIChpc09iamVjdChyZXMpKSB7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcbiAgICAgICAgLy8gKCkgPT4gUHJvbWlzZVxuICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKHJlcy5jb21wb25lbnQpKSB7XG4gICAgICAgIHJlcy5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChpc0RlZihyZXMuZXJyb3IpKSB7XG4gICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAgPSBlbnN1cmVDdG9yKHJlcy5lcnJvciwgYmFzZUN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5sb2FkaW5nKSkge1xuICAgICAgICAgIGZhY3RvcnkubG9hZGluZ0NvbXAgPSBlbnN1cmVDdG9yKHJlcy5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgaWYgKHJlcy5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9yeS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVzLmRlbGF5IHx8IDIwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy50aW1lb3V0KSkge1xuICAgICAgICAgIHRpbWVyVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGltZXJUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICAgICAgICAgICA/IChcInRpbWVvdXQgKFwiICsgKHJlcy50aW1lb3V0KSArIFwibXMpXCIpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZXMudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzeW5jID0gZmFsc2U7XG4gICAgLy8gcmV0dXJuIGluIGNhc2UgcmVzb2x2ZWQgc3luY2hyb25vdXNseVxuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdcbiAgICAgID8gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICAgICAgOiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzQXN5bmNQbGFjZWhvbGRlciAobm9kZSkge1xuICByZXR1cm4gbm9kZS5pc0NvbW1lbnQgJiYgbm9kZS5hc3luY0ZhY3Rvcnlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQgKGNoaWxkcmVuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xuICAgICAgICByZXR1cm4gY1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFdmVudHMgKHZtKSB7XG4gIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2bS5faGFzSG9va0V2ZW50ID0gZmFsc2U7XG4gIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICB2YXIgbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgaWYgKGxpc3RlbmVycykge1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0O1xuXG5mdW5jdGlvbiBhZGQgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9uKGV2ZW50LCBmbik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSQxIChldmVudCwgZm4pIHtcbiAgdGFyZ2V0LiRvZmYoZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT25jZUhhbmRsZXIgKGV2ZW50LCBmbikge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldDtcbiAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICB2YXIgcmVzID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzIChcbiAgdm0sXG4gIGxpc3RlbmVycyxcbiAgb2xkTGlzdGVuZXJzXG4pIHtcbiAgdGFyZ2V0ID0gdm07XG4gIHVwZGF0ZUxpc3RlbmVycyhsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyB8fCB7fSwgYWRkLCByZW1vdmUkMSwgY3JlYXRlT25jZUhhbmRsZXIsIHZtKTtcbiAgdGFyZ2V0ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBldmVudHNNaXhpbiAoVnVlKSB7XG4gIHZhciBob29rUkUgPSAvXmhvb2s6LztcbiAgVnVlLnByb3RvdHlwZS4kb24gPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZtLiRvbihldmVudFtpXSwgZm4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAodm0uX2V2ZW50c1tldmVudF0gfHwgKHZtLl9ldmVudHNbZXZlbnRdID0gW10pKS5wdXNoKGZuKTtcbiAgICAgIC8vIG9wdGltaXplIGhvb2s6ZXZlbnQgY29zdCBieSB1c2luZyBhIGJvb2xlYW4gZmxhZyBtYXJrZWQgYXQgcmVnaXN0cmF0aW9uXG4gICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcbiAgICAgIGlmIChob29rUkUudGVzdChldmVudCkpIHtcbiAgICAgICAgdm0uX2hhc0hvb2tFdmVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBmdW5jdGlvbiBvbiAoKSB7XG4gICAgICB2bS4kb2ZmKGV2ZW50LCBvbik7XG4gICAgICBmbi5hcHBseSh2bSwgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgb24uZm4gPSBmbjtcbiAgICB2bS4kb24oZXZlbnQsIG9uKTtcbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRvZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhbGxcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSQxID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSQxIDwgbDsgaSQxKyspIHtcbiAgICAgICAgdm0uJG9mZihldmVudFtpJDFdLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKCFjYnMpIHtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICBpZiAoIWZuKSB7XG4gICAgICB2bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgaGFuZGxlclxuICAgIHZhciBjYjtcbiAgICB2YXIgaSA9IGNicy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY2IgPSBjYnNbaV07XG4gICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGxvd2VyQ2FzZUV2ZW50ID0gZXZlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgdm0uX2V2ZW50c1tsb3dlckNhc2VFdmVudF0pIHtcbiAgICAgICAgdGlwKFxuICAgICAgICAgIFwiRXZlbnQgXFxcIlwiICsgbG93ZXJDYXNlRXZlbnQgKyBcIlxcXCIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgXCIgK1xuICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIiBidXQgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIFwiICtcbiAgICAgICAgICBcInYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBcIiArXG4gICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIgKyAoaHlwaGVuYXRlKGV2ZW50KSkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBldmVudCArIFwiXFxcIi5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKGNicykge1xuICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgPyB0b0FycmF5KGNicykgOiBjYnM7XG4gICAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBpbmZvID0gXCJldmVudCBoYW5kbGVyIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNic1tpXSwgdm0sIGFyZ3MsIHZtLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzZXRBY3RpdmVJbnN0YW5jZSh2bSkge1xuICB2YXIgcHJldkFjdGl2ZUluc3RhbmNlID0gYWN0aXZlSW5zdGFuY2U7XG4gIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgYWN0aXZlSW5zdGFuY2UgPSBwcmV2QWN0aXZlSW5zdGFuY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdExpZmVjeWNsZSAodm0pIHtcbiAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcblxuICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWFic3RyYWN0IHBhcmVudFxuICB2YXIgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICB3aGlsZSAocGFyZW50LiRvcHRpb25zLmFic3RyYWN0ICYmIHBhcmVudC4kcGFyZW50KSB7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICB9XG4gICAgcGFyZW50LiRjaGlsZHJlbi5wdXNoKHZtKTtcbiAgfVxuXG4gIHZtLiRwYXJlbnQgPSBwYXJlbnQ7XG4gIHZtLiRyb290ID0gcGFyZW50ID8gcGFyZW50LiRyb290IDogdm07XG5cbiAgdm0uJGNoaWxkcmVuID0gW107XG4gIHZtLiRyZWZzID0ge307XG5cbiAgdm0uX3dhdGNoZXIgPSBudWxsO1xuICB2bS5faW5hY3RpdmUgPSBudWxsO1xuICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgdm0uX2lzTW91bnRlZCA9IGZhbHNlO1xuICB2bS5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGlmZWN5Y2xlTWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHByZXZFbCA9IHZtLiRlbDtcbiAgICB2YXIgcHJldlZub2RlID0gdm0uX3Zub2RlO1xuICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh2bSk7XG4gICAgdm0uX3Zub2RlID0gdm5vZGU7XG4gICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgLy8gYmFzZWQgb24gdGhlIHJlbmRlcmluZyBiYWNrZW5kIHVzZWQuXG4gICAgaWYgKCFwcmV2Vm5vZGUpIHtcbiAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18odm0uJGVsLCB2bm9kZSwgaHlkcmF0aW5nLCBmYWxzZSAvKiByZW1vdmVPbmx5ICovKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlc1xuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAocHJldkVsKSB7XG4gICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgfVxuICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICBpZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgdm0uJHBhcmVudC4kZWwgPSB2bS4kZWw7XG4gICAgfVxuICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlRGVzdHJveScpO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHJlbW92ZShwYXJlbnQuJGNoaWxkcmVuLCB2bSk7XG4gICAgfVxuICAgIC8vIHRlYXJkb3duIHdhdGNoZXJzXG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgICB2YXIgaSA9IHZtLl93YXRjaGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgZnJvbSBkYXRhIG9iXG4gICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xuICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICB9XG4gICAgLy8gY2FsbCB0aGUgbGFzdCBob29rLi4uXG4gICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICB2bS5fX3BhdGNoX18odm0uX3Zub2RlLCBudWxsKTtcbiAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgY2FsbEhvb2sodm0sICdkZXN0cm95ZWQnKTtcbiAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxuICAgIHZtLiRvZmYoKTtcbiAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIC8vIHJlbGVhc2UgY2lyY3VsYXIgcmVmZXJlbmNlICgjNjc1OSlcbiAgICBpZiAodm0uJHZub2RlKSB7XG4gICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50IChcbiAgdm0sXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICB2bS4kZWwgPSBlbDtcbiAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgIHZtLiRvcHRpb25zLmVsIHx8IGVsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICdyZW5kZXIgZnVuY3Rpb25zLCBvciB1c2UgdGhlIGNvbXBpbGVyLWluY2x1ZGVkIGJ1aWxkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxIb29rKHZtLCAnYmVmb3JlTW91bnQnKTtcblxuICB2YXIgdXBkYXRlQ29tcG9uZW50O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbmFtZSA9IHZtLl9uYW1lO1xuICAgICAgdmFyIGlkID0gdm0uX3VpZDtcbiAgICAgIHZhciBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyBpZDtcbiAgICAgIHZhciBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArIGlkO1xuXG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIHZhciB2bm9kZSA9IHZtLl9yZW5kZXIoKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG5cbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgdm0uX3VwZGF0ZSh2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRlcigpLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH1cblxuICAvLyB3ZSBzZXQgdGhpcyB0byB2bS5fd2F0Y2hlciBpbnNpZGUgdGhlIHdhdGNoZXIncyBjb25zdHJ1Y3RvclxuICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAvLyBjb21wb25lbnQncyBtb3VudGVkIGhvb2spLCB3aGljaCByZWxpZXMgb24gdm0uX3dhdGNoZXIgYmVpbmcgYWxyZWFkeSBkZWZpbmVkXG4gIG5ldyBXYXRjaGVyKHZtLCB1cGRhdGVDb21wb25lbnQsIG5vb3AsIHtcbiAgICBiZWZvcmU6IGZ1bmN0aW9uIGJlZm9yZSAoKSB7XG4gICAgICBpZiAodm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlVXBkYXRlJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB0cnVlIC8qIGlzUmVuZGVyV2F0Y2hlciAqLyk7XG4gIGh5ZHJhdGluZyA9IGZhbHNlO1xuXG4gIC8vIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UsIGNhbGwgbW91bnRlZCBvbiBzZWxmXG4gIC8vIG1vdW50ZWQgaXMgY2FsbGVkIGZvciByZW5kZXItY3JlYXRlZCBjaGlsZCBjb21wb25lbnRzIGluIGl0cyBpbnNlcnRlZCBob29rXG4gIGlmICh2bS4kdm5vZGUgPT0gbnVsbCkge1xuICAgIHZtLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIGNhbGxIb29rKHZtLCAnbW91bnRlZCcpO1xuICB9XG4gIHJldHVybiB2bVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDaGlsZENvbXBvbmVudCAoXG4gIHZtLFxuICBwcm9wc0RhdGEsXG4gIGxpc3RlbmVycyxcbiAgcGFyZW50Vm5vZGUsXG4gIHJlbmRlckNoaWxkcmVuXG4pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLlxuXG4gIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBkeW5hbWljIHNjb3BlZFNsb3RzIChoYW5kLXdyaXR0ZW4gb3IgY29tcGlsZWQgYnV0IHdpdGhcbiAgLy8gZHluYW1pYyBzbG90IG5hbWVzKS4gU3RhdGljIHNjb3BlZCBzbG90cyBjb21waWxlZCBmcm9tIHRlbXBsYXRlIGhhcyB0aGVcbiAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICB2YXIgbmV3U2NvcGVkU2xvdHMgPSBwYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzO1xuICB2YXIgb2xkU2NvcGVkU2xvdHMgPSB2bS4kc2NvcGVkU2xvdHM7XG4gIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKFxuICAgIChuZXdTY29wZWRTbG90cyAmJiAhbmV3U2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAob2xkU2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmICFvbGRTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgIChuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSAhPT0gbmV3U2NvcGVkU2xvdHMuJGtleSlcbiAgKTtcblxuICAvLyBBbnkgc3RhdGljIHNsb3QgY2hpbGRyZW4gZnJvbSB0aGUgcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHBhcmVudCdzXG4gIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAvLyB1cGRhdGUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSAhIShcbiAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8ICAvLyBoYXMgb2xkIHN0YXRpYyBzbG90c1xuICAgIGhhc0R5bmFtaWNTY29wZWRTbG90XG4gICk7XG5cbiAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG5cbiAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgfVxuICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuZXJzIGhhc2hcbiAgLy8gdGhlc2UgYXJlIGFsc28gcmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4gIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gIHZtLiRhdHRycyA9IHBhcmVudFZub2RlLmRhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZtLiRsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG5cbiAgLy8gdXBkYXRlIHByb3BzXG4gIGlmIChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICB2YXIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgdmFyIHByb3BPcHRpb25zID0gdm0uJG9wdGlvbnMucHJvcHM7IC8vIHd0ZiBmbG93P1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICB9XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIC8vIGtlZXAgYSBjb3B5IG9mIHJhdyBwcm9wc0RhdGFcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gIH1cblxuICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgdmFyIG9sZExpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuXG4gIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gIGlmIChuZWVkc0ZvcmNlVXBkYXRlKSB7XG4gICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICB2bS4kZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkluYWN0aXZlVHJlZSAodm0pIHtcbiAgd2hpbGUgKHZtICYmICh2bSA9IHZtLiRwYXJlbnQpKSB7XG4gICAgaWYgKHZtLl9pbmFjdGl2ZSkgeyByZXR1cm4gdHJ1ZSB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHZtLl9kaXJlY3RJbmFjdGl2ZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2bS5faW5hY3RpdmUgfHwgdm0uX2luYWN0aXZlID09PSBudWxsKSB7XG4gICAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdhY3RpdmF0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgaWYgKCF2bS5faW5hY3RpdmUpIHtcbiAgICB2bS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdkZWFjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rICh2bSwgaG9vaykge1xuICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgbGlmZWN5Y2xlIGhvb2tzXG4gIHB1c2hUYXJnZXQoKTtcbiAgdmFyIGhhbmRsZXJzID0gdm0uJG9wdGlvbnNbaG9va107XG4gIHZhciBpbmZvID0gaG9vayArIFwiIGhvb2tcIjtcbiAgaWYgKGhhbmRsZXJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXJzW2ldLCB2bSwgbnVsbCwgdm0sIGluZm8pO1xuICAgIH1cbiAgfVxuICBpZiAodm0uX2hhc0hvb2tFdmVudCkge1xuICAgIHZtLiRlbWl0KCdob29rOicgKyBob29rKTtcbiAgfVxuICBwb3BUYXJnZXQoKTtcbn1cblxuLyogICovXG5cbnZhciBNQVhfVVBEQVRFX0NPVU5UID0gMTAwO1xuXG52YXIgcXVldWUgPSBbXTtcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xudmFyIGhhcyA9IHt9O1xudmFyIGNpcmN1bGFyID0ge307XG52YXIgd2FpdGluZyA9IGZhbHNlO1xudmFyIGZsdXNoaW5nID0gZmFsc2U7XG52YXIgaW5kZXggPSAwO1xuXG4vKipcbiAqIFJlc2V0IHRoZSBzY2hlZHVsZXIncyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSAoKSB7XG4gIGluZGV4ID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgaGFzID0ge307XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2lyY3VsYXIgPSB7fTtcbiAgfVxuICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cblxuLy8gQXN5bmMgZWRnZSBjYXNlICM2NTY2IHJlcXVpcmVzIHNhdmluZyB0aGUgdGltZXN0YW1wIHdoZW4gZXZlbnQgbGlzdGVuZXJzIGFyZVxuLy8gYXR0YWNoZWQuIEhvd2V2ZXIsIGNhbGxpbmcgcGVyZm9ybWFuY2Uubm93KCkgaGFzIGEgcGVyZiBvdmVyaGVhZCBlc3BlY2lhbGx5XG4vLyBpZiB0aGUgcGFnZSBoYXMgdGhvdXNhbmRzIG9mIGV2ZW50IGxpc3RlbmVycy4gSW5zdGVhZCwgd2UgdGFrZSBhIHRpbWVzdGFtcFxuLy8gZXZlcnkgdGltZSB0aGUgc2NoZWR1bGVyIGZsdXNoZXMgYW5kIHVzZSB0aGF0IGZvciBhbGwgZXZlbnQgbGlzdGVuZXJzXG4vLyBhdHRhY2hlZCBkdXJpbmcgdGhhdCBmbHVzaC5cbnZhciBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSAwO1xuXG4vLyBBc3luYyBlZGdlIGNhc2UgZml4IHJlcXVpcmVzIHN0b3JpbmcgYW4gZXZlbnQgbGlzdGVuZXIncyBhdHRhY2ggdGltZXN0YW1wLlxudmFyIGdldE5vdyA9IERhdGUubm93O1xuXG4vLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuLy8gdGltZXN0YW1wIGNhbiBlaXRoZXIgYmUgaGktcmVzIChyZWxhdGl2ZSB0byBwYWdlIGxvYWQpIG9yIGxvdy1yZXNcbi8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxuLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuLy8gQWxsIElFIHZlcnNpb25zIHVzZSBsb3ctcmVzIGV2ZW50IHRpbWVzdGFtcHMsIGFuZCBoYXZlIHByb2JsZW1hdGljIGNsb2NrXG4vLyBpbXBsZW1lbnRhdGlvbnMgKCM5NjMyKVxuaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICB2YXIgcGVyZm9ybWFuY2UgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIGlmIChcbiAgICBwZXJmb3JtYW5jZSAmJlxuICAgIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicgJiZcbiAgICBnZXROb3coKSA+IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpLnRpbWVTdGFtcFxuICApIHtcbiAgICAvLyBpZiB0aGUgZXZlbnQgdGltZXN0YW1wLCBhbHRob3VnaCBldmFsdWF0ZWQgQUZURVIgdGhlIERhdGUubm93KCksIGlzXG4gICAgLy8gc21hbGxlciB0aGFuIGl0LCBpdCBtZWFucyB0aGUgZXZlbnQgaXMgdXNpbmcgYSBoaS1yZXMgdGltZXN0YW1wLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGktcmVzIHZlcnNpb24gZm9yIGV2ZW50IGxpc3RlbmVyIHRpbWVzdGFtcHMgYXNcbiAgICAvLyB3ZWxsLlxuICAgIGdldE5vdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpOyB9O1xuICB9XG59XG5cbi8qKlxuICogRmx1c2ggYm90aCBxdWV1ZXMgYW5kIHJ1biB0aGUgd2F0Y2hlcnMuXG4gKi9cbmZ1bmN0aW9uIGZsdXNoU2NoZWR1bGVyUXVldWUgKCkge1xuICBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSBnZXROb3coKTtcbiAgZmx1c2hpbmcgPSB0cnVlO1xuICB2YXIgd2F0Y2hlciwgaWQ7XG5cbiAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0OlxuICAvLyAxLiBDb21wb25lbnRzIGFyZSB1cGRhdGVkIGZyb20gcGFyZW50IHRvIGNoaWxkLiAoYmVjYXVzZSBwYXJlbnQgaXMgYWx3YXlzXG4gIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgLy8gMi4gQSBjb21wb25lbnQncyB1c2VyIHdhdGNoZXJzIGFyZSBydW4gYmVmb3JlIGl0cyByZW5kZXIgd2F0Y2hlciAoYmVjYXVzZVxuICAvLyAgICB1c2VyIHdhdGNoZXJzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgcmVuZGVyIHdhdGNoZXIpXG4gIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gIC8vICAgIGl0cyB3YXRjaGVycyBjYW4gYmUgc2tpcHBlZC5cbiAgcXVldWUuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuXG4gIC8vIGRvIG5vdCBjYWNoZSBsZW5ndGggYmVjYXVzZSBtb3JlIHdhdGNoZXJzIG1pZ2h0IGJlIHB1c2hlZFxuICAvLyBhcyB3ZSBydW4gZXhpc3Rpbmcgd2F0Y2hlcnNcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcXVldWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgd2F0Y2hlciA9IHF1ZXVlW2luZGV4XTtcbiAgICBpZiAod2F0Y2hlci5iZWZvcmUpIHtcbiAgICAgIHdhdGNoZXIuYmVmb3JlKCk7XG4gICAgfVxuICAgIGlkID0gd2F0Y2hlci5pZDtcbiAgICBoYXNbaWRdID0gbnVsbDtcbiAgICB3YXRjaGVyLnJ1bigpO1xuICAgIC8vIGluIGRldiBidWlsZCwgY2hlY2sgYW5kIHN0b3AgY2lyY3VsYXIgdXBkYXRlcy5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBoYXNbaWRdICE9IG51bGwpIHtcbiAgICAgIGNpcmN1bGFyW2lkXSA9IChjaXJjdWxhcltpZF0gfHwgMCkgKyAxO1xuICAgICAgaWYgKGNpcmN1bGFyW2lkXSA+IE1BWF9VUERBVEVfQ09VTlQpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnWW91IG1heSBoYXZlIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wICcgKyAoXG4gICAgICAgICAgICB3YXRjaGVyLnVzZXJcbiAgICAgICAgICAgICAgPyAoXCJpbiB3YXRjaGVyIHdpdGggZXhwcmVzc2lvbiBcXFwiXCIgKyAod2F0Y2hlci5leHByZXNzaW9uKSArIFwiXFxcIlwiKVxuICAgICAgICAgICAgICA6IFwiaW4gYSBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9uLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3YXRjaGVyLnZtXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8ga2VlcCBjb3BpZXMgb2YgcG9zdCBxdWV1ZXMgYmVmb3JlIHJlc2V0dGluZyBzdGF0ZVxuICB2YXIgYWN0aXZhdGVkUXVldWUgPSBhY3RpdmF0ZWRDaGlsZHJlbi5zbGljZSgpO1xuICB2YXIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcblxuICByZXNldFNjaGVkdWxlclN0YXRlKCk7XG5cbiAgLy8gY2FsbCBjb21wb25lbnQgdXBkYXRlZCBhbmQgYWN0aXZhdGVkIGhvb2tzXG4gIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XG4gIGNhbGxVcGRhdGVkSG9va3ModXBkYXRlZFF1ZXVlKTtcblxuICAvLyBkZXZ0b29sIGhvb2tcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChkZXZ0b29scyAmJiBjb25maWcuZGV2dG9vbHMpIHtcbiAgICBkZXZ0b29scy5lbWl0KCdmbHVzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxVcGRhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIHZhciBpID0gcXVldWUubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIHdhdGNoZXIgPSBxdWV1ZVtpXTtcbiAgICB2YXIgdm0gPSB3YXRjaGVyLnZtO1xuICAgIGlmICh2bS5fd2F0Y2hlciA9PT0gd2F0Y2hlciAmJiB2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGNhbGxIb29rKHZtLCAndXBkYXRlZCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQgKHZtKSB7XG4gIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuXG5mdW5jdGlvbiBjYWxsQWN0aXZhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQocXVldWVbaV0sIHRydWUgLyogdHJ1ZSAqLyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdXNoIGEgd2F0Y2hlciBpbnRvIHRoZSB3YXRjaGVyIHF1ZXVlLlxuICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gKiBwdXNoZWQgd2hlbiB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVXYXRjaGVyICh3YXRjaGVyKSB7XG4gIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gIGlmIChoYXNbaWRdID09IG51bGwpIHtcbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbHJlYWR5IGZsdXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAvLyBpZiBhbHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkgPiBpbmRleCAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgICAgcXVldWUuc3BsaWNlKGkgKyAxLCAwLCB3YXRjaGVyKTtcbiAgICB9XG4gICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgaWYgKCF3YWl0aW5nKSB7XG4gICAgICB3YWl0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xuICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5cblxudmFyIHVpZCQyID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlvbiBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zLFxuICBpc1JlbmRlcldhdGNoZXJcbikge1xuICB0aGlzLnZtID0gdm07XG4gIGlmIChpc1JlbmRlcldhdGNoZXIpIHtcbiAgICB2bS5fd2F0Y2hlciA9IHRoaXM7XG4gIH1cbiAgdm0uX3dhdGNoZXJzLnB1c2godGhpcyk7XG4gIC8vIG9wdGlvbnNcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlcDtcbiAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICB9XG4gIHRoaXMuY2IgPSBjYjtcbiAgdGhpcy5pZCA9ICsrdWlkJDI7IC8vIHVpZCBmb3IgYmF0Y2hpbmdcbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICB0aGlzLmRlcHMgPSBbXTtcbiAgdGhpcy5uZXdEZXBzID0gW107XG4gIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLmV4cHJlc3Npb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgPyBleHBPckZuLnRvU3RyaW5nKClcbiAgICA6ICcnO1xuICAvLyBwYXJzZSBleHByZXNzaW9uIGZvciBnZXR0ZXJcbiAgaWYgKHR5cGVvZiBleHBPckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZ2V0dGVyID0gcGFyc2VQYXRoKGV4cE9yRm4pO1xuICAgIGlmICghdGhpcy5nZXR0ZXIpIHtcbiAgICAgIHRoaXMuZ2V0dGVyID0gbm9vcDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiICsgZXhwT3JGbiArIFwiXFxcIiBcIiArXG4gICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5XG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHRoaXMuZ2V0KCk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgcHVzaFRhcmdldCh0aGlzKTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgdm0gPSB0aGlzLnZtO1xuICB0cnkge1xuICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gXCJ0b3VjaFwiIGV2ZXJ5IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXG4gICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICB0aGlzLmNsZWFudXBEZXBzKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59O1xuXG4vKipcbiAqIEFkZCBhIGRlcGVuZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gIHZhciBpZCA9IGRlcC5pZDtcbiAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICB0aGlzLm5ld0RlcHMucHVzaChkZXApO1xuICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4gdXAgZm9yIGRlcGVuZGVuY3kgY29sbGVjdGlvbi5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiBjbGVhbnVwRGVwcyAoKSB7XG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBkZXAgPSB0aGlzLmRlcHNbaV07XG4gICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoZGVwLmlkKSkge1xuICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbiAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICB0aGlzLmRlcElkcyA9IHRoaXMubmV3RGVwSWRzO1xuICB0aGlzLm5ld0RlcElkcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgdG1wID0gdGhpcy5kZXBzO1xuICB0aGlzLmRlcHMgPSB0aGlzLm5ld0RlcHM7XG4gIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRoaXMubGF6eSkge1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgIHRoaXMucnVuKCk7XG4gIH0gZWxzZSB7XG4gICAgcXVldWVXYXRjaGVyKHRoaXMpO1xuICB9XG59O1xuXG4vKipcbiAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgLy8gRGVlcCB3YXRjaGVycyBhbmQgd2F0Y2hlcnMgb24gT2JqZWN0L0FycmF5cyBzaG91bGQgZmlyZSBldmVuXG4gICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICBpc09iamVjdCh2YWx1ZSkgfHxcbiAgICAgIHRoaXMuZGVlcFxuICAgICkge1xuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHRoaXMudm0sIChcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAqIFRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgbGF6eSB3YXRjaGVycy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZSAoKSB7XG4gIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB0aGlzLmRlcHNbaV0uZGVwZW5kKCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlIHNlbGYgZnJvbSBhbGwgZGVwZW5kZW5jaWVzJyBzdWJzY3JpYmVyIGxpc3QuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gdGVhcmRvd24gKCkge1xuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHZtJ3Mgd2F0Y2hlciBsaXN0XG4gICAgLy8gdGhpcyBpcyBhIHNvbWV3aGF0IGV4cGVuc2l2ZSBvcGVyYXRpb24gc28gd2Ugc2tpcCBpdFxuICAgIC8vIGlmIHRoZSB2bSBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgaWYgKCF0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZW1vdmUodGhpcy52bS5fd2F0Y2hlcnMsIHRoaXMpO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBub29wLFxuICBzZXQ6IG5vb3Bcbn07XG5cbmZ1bmN0aW9uIHByb3h5ICh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4gICAgcmV0dXJuIHRoaXNbc291cmNlS2V5XVtrZXldXG4gIH07XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgdGhpc1tzb3VyY2VLZXldW2tleV0gPSB2YWw7XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gaW5pdFN0YXRlICh2bSkge1xuICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgaWYgKG9wdHMucHJvcHMpIHsgaW5pdFByb3BzKHZtLCBvcHRzLnByb3BzKTsgfVxuICBpZiAob3B0cy5tZXRob2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gIGlmIChvcHRzLmRhdGEpIHtcbiAgICBpbml0RGF0YSh2bSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2ZSh2bS5fZGF0YSA9IHt9LCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xuICB9XG4gIGlmIChvcHRzLmNvbXB1dGVkKSB7IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgaWYgKG9wdHMud2F0Y2ggJiYgb3B0cy53YXRjaCAhPT0gbmF0aXZlV2F0Y2gpIHtcbiAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyAodm0sIHByb3BzT3B0aW9ucykge1xuICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICB2YXIgcHJvcHMgPSB2bS5fcHJvcHMgPSB7fTtcbiAgLy8gY2FjaGUgcHJvcCBrZXlzIHNvIHRoYXQgZnV0dXJlIHByb3BzIHVwZGF0ZXMgY2FuIGl0ZXJhdGUgdXNpbmcgQXJyYXlcbiAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXG4gIHZhciBrZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzID0gW107XG4gIHZhciBpc1Jvb3QgPSAhdm0uJHBhcmVudDtcbiAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gIGlmICghaXNSb290KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgfVxuICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgIGtleXMucHVzaChrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChpc1Jlc2VydmVkQXR0cmlidXRlKGh5cGhlbmF0ZWRLZXkpIHx8XG4gICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiXFxcIlwiICsgaHlwaGVuYXRlZEtleSArIFwiXFxcIiBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgY29tcG9uZW50IHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWZpbmVSZWFjdGl2ZSQkMShwcm9wcywga2V5LCB2YWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWlzUm9vdCAmJiAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50KSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRoZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHBhcmVudCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJJbnN0ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3MgXCIgK1xuICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSBsb29wKCBrZXkgKTtcbiAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICBkYXRhID0gdm0uX2RhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICA6IGRhdGEgfHwge307XG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGRhdGEgPSB7fTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAnZGF0YSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBhbiBvYmplY3Q6XFxuJyArXG4gICAgICAnaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvY29tcG9uZW50cy5odG1sI2RhdGEtTXVzdC1CZS1hLUZ1bmN0aW9uJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyBhIHByb3AuIFwiICtcbiAgICAgICAgXCJVc2UgcHJvcCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwga2V5KTtcbiAgICB9XG4gIH1cbiAgLy8gb2JzZXJ2ZSBkYXRhXG4gIG9ic2VydmUoZGF0YSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YSAoZGF0YSwgdm0pIHtcbiAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGRhdGEgZ2V0dGVyc1xuICBwdXNoVGFyZ2V0KCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRhdGEuY2FsbCh2bSwgdm0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJkYXRhKClcIik7XG4gICAgcmV0dXJuIHt9XG4gIH0gZmluYWxseSB7XG4gICAgcG9wVGFyZ2V0KCk7XG4gIH1cbn1cblxudmFyIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnMgPSB7IGxhenk6IHRydWUgfTtcblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkICh2bSwgY29tcHV0ZWQpIHtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciB3YXRjaGVycyA9IHZtLl9jb21wdXRlZFdhdGNoZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gY29tcHV0ZWQgcHJvcGVydGllcyBhcmUganVzdCBnZXR0ZXJzIGR1cmluZyBTU1JcbiAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICB2YXIgdXNlckRlZiA9IGNvbXB1dGVkW2tleV07XG4gICAgdmFyIGdldHRlciA9IHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGdldHRlciA9PSBudWxsKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJHZXR0ZXIgaXMgbWlzc2luZyBmb3IgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1NTUikge1xuICAgICAgLy8gY3JlYXRlIGludGVybmFsIHdhdGNoZXIgZm9yIHRoZSBjb21wdXRlZCBwcm9wZXJ0eS5cbiAgICAgIHdhdGNoZXJzW2tleV0gPSBuZXcgV2F0Y2hlcihcbiAgICAgICAgdm0sXG4gICAgICAgIGdldHRlciB8fCBub29wLFxuICAgICAgICBub29wLFxuICAgICAgICBjb21wdXRlZFdhdGNoZXJPcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcbiAgICAvLyBjb21wb25lbnQgcHJvdG90eXBlLiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGNvbXB1dGVkIHByb3BlcnRpZXMgZGVmaW5lZFxuICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICBkZWZpbmVDb21wdXRlZCh2bSwga2V5LCB1c2VyRGVmKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChrZXkgaW4gdm0uJGRhdGEpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBkYXRhLlwiKSwgdm0pO1xuICAgICAgfSBlbHNlIGlmICh2bS4kb3B0aW9ucy5wcm9wcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIHByb3AuXCIpLCB2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUNvbXB1dGVkIChcbiAgdGFyZ2V0LFxuICBrZXksXG4gIHVzZXJEZWZcbikge1xuICB2YXIgc2hvdWxkQ2FjaGUgPSAhaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcbiAgaWYgKHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHNob3VsZENhY2hlXG4gICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gbm9vcDtcbiAgfSBlbHNlIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gdXNlckRlZi5nZXRcbiAgICAgID8gc2hvdWxkQ2FjaGUgJiYgdXNlckRlZi5jYWNoZSAhPT0gZmFsc2VcbiAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmLmdldClcbiAgICAgIDogbm9vcDtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gdXNlckRlZi5zZXQgfHwgbm9vcDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJDb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIgKGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgIHZhciB3YXRjaGVyID0gdGhpcy5fY29tcHV0ZWRXYXRjaGVycyAmJiB0aGlzLl9jb21wdXRlZFdhdGNoZXJzW2tleV07XG4gICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVHZXR0ZXJJbnZva2VyKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhpcywgdGhpcylcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TWV0aG9kcyAodm0sIG1ldGhvZHMpIHtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBtZXRob2RzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIiArICh0eXBlb2YgbWV0aG9kc1trZXldKSArIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiICtcbiAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiICtcbiAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm1ba2V5XSA9IHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicgPyBub29wIDogYmluZChtZXRob2RzW2tleV0sIHZtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGhhbmRsZXIsXG4gIG9wdGlvbnNcbikge1xuICBpZiAoaXNQbGFpbk9iamVjdChoYW5kbGVyKSkge1xuICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgfVxuICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIHN0YXRlTWl4aW4gKFZ1ZSkge1xuICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gIC8vIHRoZSBvYmplY3QgaGVyZS5cbiAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gIHZhciBwcm9wc0RlZiA9IHt9O1xuICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcm9wcyB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGRhdGFEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIHJlcGxhY2luZyBpbnN0YW5jZSByb290ICRkYXRhLiAnICtcbiAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXCIkcHJvcHMgaXMgcmVhZG9ubHkuXCIsIHRoaXMpO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRwcm9wcycsIHByb3BzRGVmKTtcblxuICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcblxuICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChcbiAgICBleHBPckZuLFxuICAgIGNiLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYi5jYWxsKHZtLCB3YXRjaGVyLnZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCB2bSwgKFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbiAoKSB7XG4gICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCQzID0gMDtcblxuZnVuY3Rpb24gaW5pdE1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhIHVpZFxuICAgIHZtLl91aWQgPSB1aWQkMysrO1xuXG4gICAgdmFyIHN0YXJ0VGFnLCBlbmRUYWc7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArICh2bS5fdWlkKTtcbiAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91aWQpO1xuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuXG4gICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLFxuICAgICAgICBvcHRpb25zIHx8IHt9LFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW5pdFByb3h5KHZtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgfVxuICAgIC8vIGV4cG9zZSByZWFsIHNlbGZcbiAgICB2bS5fc2VsZiA9IHZtO1xuICAgIGluaXRMaWZlY3ljbGUodm0pO1xuICAgIGluaXRFdmVudHModm0pO1xuICAgIGluaXRSZW5kZXIodm0pO1xuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlQ3JlYXRlJyk7XG4gICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcbiAgICBpbml0U3RhdGUodm0pO1xuICAgIGluaXRQcm92aWRlKHZtKTsgLy8gcmVzb2x2ZSBwcm92aWRlIGFmdGVyIGRhdGEvcHJvcHNcbiAgICBjYWxsSG9vayh2bSwgJ2NyZWF0ZWQnKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICB2bS5fbmFtZSA9IGZvcm1hdENvbXBvbmVudE5hbWUodm0sIGZhbHNlKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgKHZtLl9uYW1lKSArIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgIH1cblxuICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCAodm0sIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucyk7XG4gIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGR5bmFtaWMgZW51bWVyYXRpb24uXG4gIHZhciBwYXJlbnRWbm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlO1xuICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBvcHRzLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuXG4gIHZhciB2bm9kZUNvbXBvbmVudE9wdGlvbnMgPSBwYXJlbnRWbm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBvcHRzLnByb3BzRGF0YSA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGE7XG4gIG9wdHMuX3BhcmVudExpc3RlbmVycyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5saXN0ZW5lcnM7XG4gIG9wdHMuX3JlbmRlckNoaWxkcmVuID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmNoaWxkcmVuO1xuICBvcHRzLl9jb21wb25lbnRUYWcgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMudGFnO1xuXG4gIGlmIChvcHRpb25zLnJlbmRlcikge1xuICAgIG9wdHMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XG4gICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zIChDdG9yKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICBpZiAoQ3Rvci5zdXBlcikge1xuICAgIHZhciBzdXBlck9wdGlvbnMgPSByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3Iuc3VwZXIpO1xuICAgIHZhciBjYWNoZWRTdXBlck9wdGlvbnMgPSBDdG9yLnN1cGVyT3B0aW9ucztcbiAgICBpZiAoc3VwZXJPcHRpb25zICE9PSBjYWNoZWRTdXBlck9wdGlvbnMpIHtcbiAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxuICAgICAgLy8gbmVlZCB0byByZXNvbHZlIG5ldyBvcHRpb25zLlxuICAgICAgQ3Rvci5zdXBlck9wdGlvbnMgPSBzdXBlck9wdGlvbnM7XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXG4gICAgICB2YXIgbW9kaWZpZWRPcHRpb25zID0gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyhDdG9yKTtcbiAgICAgIC8vIHVwZGF0ZSBiYXNlIGV4dGVuZCBvcHRpb25zXG4gICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XG4gICAgICAgIGV4dGVuZChDdG9yLmV4dGVuZE9wdGlvbnMsIG1vZGlmaWVkT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHN1cGVyT3B0aW9ucywgQ3Rvci5leHRlbmRPcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5jb21wb25lbnRzW29wdGlvbnMubmFtZV0gPSBDdG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTW9kaWZpZWRPcHRpb25zIChDdG9yKSB7XG4gIHZhciBtb2RpZmllZDtcbiAgdmFyIGxhdGVzdCA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHNlYWxlZCA9IEN0b3Iuc2VhbGVkT3B0aW9ucztcbiAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xuICAgIGlmIChsYXRlc3Rba2V5XSAhPT0gc2VhbGVkW2tleV0pIHtcbiAgICAgIGlmICghbW9kaWZpZWQpIHsgbW9kaWZpZWQgPSB7fTsgfVxuICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbW9kaWZpZWRcbn1cblxuZnVuY3Rpb24gVnVlIChvcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgISh0aGlzIGluc3RhbmNlb2YgVnVlKVxuICApIHtcbiAgICB3YXJuKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XG4gIH1cbiAgdGhpcy5faW5pdChvcHRpb25zKTtcbn1cblxuaW5pdE1peGluKFZ1ZSk7XG5zdGF0ZU1peGluKFZ1ZSk7XG5ldmVudHNNaXhpbihWdWUpO1xubGlmZWN5Y2xlTWl4aW4oVnVlKTtcbnJlbmRlck1peGluKFZ1ZSk7XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0VXNlIChWdWUpIHtcbiAgVnVlLnVzZSA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICB2YXIgaW5zdGFsbGVkUGx1Z2lucyA9ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zIHx8ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zID0gW10pKTtcbiAgICBpZiAoaW5zdGFsbGVkUGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPiAtMSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaW5zdGFsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmluc3RhbGwuYXBwbHkocGx1Z2luLCBhcmdzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG4gICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgcmV0dXJuIHRoaXNcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRNaXhpbiQxIChWdWUpIHtcbiAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgdGhpcy5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgbWl4aW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0RXh0ZW5kIChWdWUpIHtcbiAgLyoqXG4gICAqIEVhY2ggaW5zdGFuY2UgY29uc3RydWN0b3IsIGluY2x1ZGluZyBWdWUsIGhhcyBhIHVuaXF1ZVxuICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAqIGNvbnN0cnVjdG9yc1wiIGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlIGFuZCBjYWNoZSB0aGVtLlxuICAgKi9cbiAgVnVlLmNpZCA9IDA7XG4gIHZhciBjaWQgPSAxO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgKi9cbiAgVnVlLmV4dGVuZCA9IGZ1bmN0aW9uIChleHRlbmRPcHRpb25zKSB7XG4gICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgdmFyIFN1cGVyID0gdGhpcztcbiAgICB2YXIgU3VwZXJJZCA9IFN1cGVyLmNpZDtcbiAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgIGlmIChjYWNoZWRDdG9yc1tTdXBlcklkXSkge1xuICAgICAgcmV0dXJuIGNhY2hlZEN0b3JzW1N1cGVySWRdXG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBleHRlbmRPcHRpb25zLm5hbWUgfHwgU3VwZXIub3B0aW9ucy5uYW1lO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUpIHtcbiAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgU3ViID0gZnVuY3Rpb24gVnVlQ29tcG9uZW50IChvcHRpb25zKSB7XG4gICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xuICAgIH07XG4gICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViO1xuICAgIFN1Yi5jaWQgPSBjaWQrKztcbiAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgIFN1cGVyLm9wdGlvbnMsXG4gICAgICBleHRlbmRPcHRpb25zXG4gICAgKTtcbiAgICBTdWJbJ3N1cGVyJ10gPSBTdXBlcjtcblxuICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgLy8gdGhlIFZ1ZSBpbnN0YW5jZXMgYXQgZXh0ZW5zaW9uIHRpbWUsIG9uIHRoZSBleHRlbmRlZCBwcm90b3R5cGUuIFRoaXNcbiAgICAvLyBhdm9pZHMgT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxzIGZvciBlYWNoIGluc3RhbmNlIGNyZWF0ZWQuXG4gICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICBpbml0UHJvcHMkMShTdWIpO1xuICAgIH1cbiAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgIGluaXRDb21wdXRlZCQxKFN1Yik7XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgU3ViLmV4dGVuZCA9IFN1cGVyLmV4dGVuZDtcbiAgICBTdWIubWl4aW4gPSBTdXBlci5taXhpbjtcbiAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuXG4gICAgLy8gY3JlYXRlIGFzc2V0IHJlZ2lzdGVycywgc28gZXh0ZW5kZWQgY2xhc3Nlc1xuICAgIC8vIGNhbiBoYXZlIHRoZWlyIHByaXZhdGUgYXNzZXRzIHRvby5cbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBTdWJbdHlwZV0gPSBTdXBlclt0eXBlXTtcbiAgICB9KTtcbiAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIFN1Yi5vcHRpb25zLmNvbXBvbmVudHNbbmFtZV0gPSBTdWI7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgc3VwZXIgb3B0aW9ucyBhdCBleHRlbnNpb24gdGltZS5cbiAgICAvLyBsYXRlciBhdCBpbnN0YW50aWF0aW9uIHdlIGNhbiBjaGVjayBpZiBTdXBlcidzIG9wdGlvbnMgaGF2ZVxuICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICBTdWIuc3VwZXJPcHRpb25zID0gU3VwZXIub3B0aW9ucztcbiAgICBTdWIuZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnM7XG4gICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcblxuICAgIC8vIGNhY2hlIGNvbnN0cnVjdG9yXG4gICAgY2FjaGVkQ3RvcnNbU3VwZXJJZF0gPSBTdWI7XG4gICAgcmV0dXJuIFN1YlxuICB9O1xufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMkMSAoQ29tcCkge1xuICB2YXIgcHJvcHMgPSBDb21wLm9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRDb21wdXRlZCQxIChDb21wKSB7XG4gIHZhciBjb21wdXRlZCA9IENvbXAub3B0aW9ucy5jb21wdXRlZDtcbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRBc3NldFJlZ2lzdGVycyAoVnVlKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAqL1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlW3R5cGVdID0gZnVuY3Rpb24gKFxuICAgICAgaWQsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKSB7XG4gICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICByZXR1cm4gb3B0cyAmJiAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZylcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGUgKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gIHZhciBrZXlzID0ga2VlcEFsaXZlSW5zdGFuY2Uua2V5cztcbiAgdmFyIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgdmFyIGNhY2hlZE5vZGUgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWROb2RlKSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeSAoXG4gIGNhY2hlLFxuICBrZXksXG4gIGtleXMsXG4gIGN1cnJlbnRcbikge1xuICB2YXIgY2FjaGVkJCQxID0gY2FjaGVba2V5XTtcbiAgaWYgKGNhY2hlZCQkMSAmJiAoIWN1cnJlbnQgfHwgY2FjaGVkJCQxLnRhZyAhPT0gY3VycmVudC50YWcpKSB7XG4gICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gIH1cbiAgY2FjaGVba2V5XSA9IG51bGw7XG4gIHJlbW92ZShrZXlzLCBrZXkpO1xufVxuXG52YXIgcGF0dGVyblR5cGVzID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XG5cbnZhciBLZWVwQWxpdmUgPSB7XG4gIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQgKCkge1xuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMua2V5cyA9IFtdO1xuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLiR3YXRjaCgnaW5jbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgICB0aGlzLiR3YXRjaCgnZXhjbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gIW1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKCkge1xuICAgIHZhciBzbG90ID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgIHZhciBjb21wb25lbnRPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgLy8gY2hlY2sgcGF0dGVyblxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICB2YXIgaW5jbHVkZSA9IHJlZi5pbmNsdWRlO1xuICAgICAgdmFyIGV4Y2x1ZGUgPSByZWYuZXhjbHVkZTtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm90IGluY2x1ZGVkXG4gICAgICAgIChpbmNsdWRlICYmICghbmFtZSB8fCAhbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSkpIHx8XG4gICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgIChleGNsdWRlICYmIG5hbWUgJiYgbWF0Y2hlcyhleGNsdWRlLCBuYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiQxID0gdGhpcztcbiAgICAgIHZhciBjYWNoZSA9IHJlZiQxLmNhY2hlO1xuICAgICAgdmFyIGtleXMgPSByZWYkMS5rZXlzO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgIC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgIC8vIHNvIGNpZCBhbG9uZSBpcyBub3QgZW5vdWdoICgjMzI2OSlcbiAgICAgICAgPyBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICsgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gKFwiOjpcIiArIChjb21wb25lbnRPcHRpb25zLnRhZykpIDogJycpXG4gICAgICAgIDogdm5vZGUua2V5O1xuICAgICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgIHJlbW92ZShrZXlzLCBrZXkpO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlW2tleV0gPSB2bm9kZTtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICBpZiAodGhpcy5tYXggJiYga2V5cy5sZW5ndGggPiBwYXJzZUludCh0aGlzLm1heCkpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZSB8fCAoc2xvdCAmJiBzbG90WzBdKVxuICB9XG59O1xuXG52YXIgYnVpbHRJbkNvbXBvbmVudHMgPSB7XG4gIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSSAoVnVlKSB7XG4gIC8vIGNvbmZpZ1xuICB2YXIgY29uZmlnRGVmID0ge307XG4gIGNvbmZpZ0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWc7IH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uZmlnRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdEbyBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxkcyBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcblxuICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgLy8gTk9URTogdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgLSBhdm9pZCByZWx5aW5nIG9uXG4gIC8vIHRoZW0gdW5sZXNzIHlvdSBhcmUgYXdhcmUgb2YgdGhlIHJpc2suXG4gIFZ1ZS51dGlsID0ge1xuICAgIHdhcm46IHdhcm4sXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgZGVmaW5lUmVhY3RpdmU6IGRlZmluZVJlYWN0aXZlJCQxXG4gIH07XG5cbiAgVnVlLnNldCA9IHNldDtcbiAgVnVlLmRlbGV0ZSA9IGRlbDtcbiAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XG5cbiAgLy8gMi42IGV4cGxpY2l0IG9ic2VydmFibGUgQVBJXG4gIFZ1ZS5vYnNlcnZhYmxlID0gZnVuY3Rpb24gKG9iaikge1xuICAgIG9ic2VydmUob2JqKTtcbiAgICByZXR1cm4gb2JqXG4gIH07XG5cbiAgVnVlLm9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlLm9wdGlvbnNbdHlwZSArICdzJ10gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gIC8vIGNvbXBvbmVudHMgd2l0aCBpbiBXZWV4J3MgbXVsdGktaW5zdGFuY2Ugc2NlbmFyaW9zLlxuICBWdWUub3B0aW9ucy5fYmFzZSA9IFZ1ZTtcblxuICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuXG4gIGluaXRVc2UoVnVlKTtcbiAgaW5pdE1peGluJDEoVnVlKTtcbiAgaW5pdEV4dGVuZChWdWUpO1xuICBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKTtcbn1cblxuaW5pdEdsb2JhbEFQSShWdWUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgZ2V0OiBpc1NlcnZlclJlbmRlcmluZ1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0XG4gIH1cbn0pO1xuXG4vLyBleHBvc2UgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgZm9yIHNzciBydW50aW1lIGhlbHBlciBpbnN0YWxsYXRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCcsIHtcbiAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG59KTtcblxuVnVlLnZlcnNpb24gPSAnMi42LjEwJztcblxuLyogICovXG5cbi8vIHRoZXNlIGFyZSByZXNlcnZlZCBmb3Igd2ViIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgY29tcGlsZWQgYXdheVxuLy8gZHVyaW5nIHRlbXBsYXRlIGNvbXBpbGF0aW9uXG52YXIgaXNSZXNlcnZlZEF0dHIgPSBtYWtlTWFwKCdzdHlsZSxjbGFzcycpO1xuXG4vLyBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHVzaW5nIHByb3BzIGZvciBiaW5kaW5nXG52YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzJyk7XG52YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRyKSB7XG4gIHJldHVybiAoXG4gICAgKGF0dHIgPT09ICd2YWx1ZScgJiYgYWNjZXB0VmFsdWUodGFnKSkgJiYgdHlwZSAhPT0gJ2J1dHRvbicgfHxcbiAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAnaW5wdXQnKSB8fFxuICAgIChhdHRyID09PSAnbXV0ZWQnICYmIHRhZyA9PT0gJ3ZpZGVvJylcbiAgKVxufTtcblxudmFyIGlzRW51bWVyYXRlZEF0dHIgPSBtYWtlTWFwKCdjb250ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2snKTtcblxudmFyIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSA9IG1ha2VNYXAoJ2V2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHknKTtcblxudmFyIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUgPT09ICdmYWxzZSdcbiAgICA/ICdmYWxzZSdcbiAgICAvLyBhbGxvdyBhcmJpdHJhcnkgc3RyaW5nIHZhbHVlIGZvciBjb250ZW50ZWRpdGFibGVcbiAgICA6IGtleSA9PT0gJ2NvbnRlbnRlZGl0YWJsZScgJiYgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlKHZhbHVlKVxuICAgICAgPyB2YWx1ZVxuICAgICAgOiAndHJ1ZSdcbn07XG5cbnZhciBpc0Jvb2xlYW5BdHRyID0gbWFrZU1hcChcbiAgJ2FsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsJyArXG4gICdkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsJyArXG4gICdlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLCcgK1xuICAnbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSwnICtcbiAgJ3JlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsJyArXG4gICd0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlJ1xuKTtcblxudmFyIHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG5cbnZhciBpc1hsaW5rID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJ1xufTtcblxudmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBpc1hsaW5rKG5hbWUpID8gbmFtZS5zbGljZSg2LCBuYW1lLmxlbmd0aCkgOiAnJ1xufTtcblxudmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09IGZhbHNlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2VuQ2xhc3NGb3JWbm9kZSAodm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gIHdoaWxlIChpc0RlZihjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoY2hpbGROb2RlLmRhdGEsIGRhdGEpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoaXNEZWYocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGRhdGEsIHBhcmVudE5vZGUuZGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZW5kZXJDbGFzcyhkYXRhLnN0YXRpY0NsYXNzLCBkYXRhLmNsYXNzKVxufVxuXG5mdW5jdGlvbiBtZXJnZUNsYXNzRGF0YSAoY2hpbGQsIHBhcmVudCkge1xuICByZXR1cm4ge1xuICAgIHN0YXRpY0NsYXNzOiBjb25jYXQoY2hpbGQuc3RhdGljQ2xhc3MsIHBhcmVudC5zdGF0aWNDbGFzcyksXG4gICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKVxuICAgICAgPyBbY2hpbGQuY2xhc3MsIHBhcmVudC5jbGFzc11cbiAgICAgIDogcGFyZW50LmNsYXNzXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ2xhc3MgKFxuICBzdGF0aWNDbGFzcyxcbiAgZHluYW1pY0NsYXNzXG4pIHtcbiAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgcmV0dXJuIGNvbmNhdChzdGF0aWNDbGFzcywgc3RyaW5naWZ5Q2xhc3MoZHluYW1pY0NsYXNzKSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gY29uY2F0IChhLCBiKSB7XG4gIHJldHVybiBhID8gYiA/IChhICsgJyAnICsgYikgOiBhIDogKGIgfHwgJycpXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXkodmFsdWUpXG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlPYmplY3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXkgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIHN0cmluZ2lmaWVkO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChpc0RlZihzdHJpbmdpZmllZCA9IHN0cmluZ2lmeUNsYXNzKHZhbHVlW2ldKSkgJiYgc3RyaW5naWZpZWQgIT09ICcnKSB7XG4gICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgIHJlcyArPSBzdHJpbmdpZmllZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIG5hbWVzcGFjZU1hcCA9IHtcbiAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICBtYXRoOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCdcbn07XG5cbnZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKFxuICAnaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsJyArXG4gICdhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sJyArXG4gICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgJ2EsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSwnICtcbiAgJ3Msc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLCcgK1xuICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICdjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0ciwnICtcbiAgJ2J1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sJyArXG4gICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAnZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LCcgK1xuICAnY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCdcbik7XG5cbi8vIHRoaXMgbWFwIGlzIGludGVudGlvbmFsbHkgc2VsZWN0aXZlLCBvbmx5IGNvdmVyaW5nIFNWRyBlbGVtZW50cyB0aGF0IG1heVxuLy8gY29udGFpbiBjaGlsZCBlbGVtZW50cy5cbnZhciBpc1NWRyA9IG1ha2VNYXAoXG4gICdzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsJyArXG4gICdmb3JlaWduT2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybiwnICtcbiAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLFxuICB0cnVlXG4pO1xuXG52YXIgaXNSZXNlcnZlZFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgcmV0dXJuIGlzSFRNTFRhZyh0YWcpIHx8IGlzU1ZHKHRhZylcbn07XG5cbmZ1bmN0aW9uIGdldFRhZ05hbWVzcGFjZSAodGFnKSB7XG4gIGlmIChpc1NWRyh0YWcpKSB7XG4gICAgcmV0dXJuICdzdmcnXG4gIH1cbiAgLy8gYmFzaWMgc3VwcG9ydCBmb3IgTWF0aE1MXG4gIC8vIG5vdGUgaXQgZG9lc24ndCBzdXBwb3J0IG90aGVyIE1hdGhNTCBlbGVtZW50cyBiZWluZyBjb21wb25lbnQgcm9vdHNcbiAgaWYgKHRhZyA9PT0gJ21hdGgnKSB7XG4gICAgcmV0dXJuICdtYXRoJ1xuICB9XG59XG5cbnZhciB1bmtub3duRWxlbWVudENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQgKHRhZykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChpc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB0YWcgPSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gIT0gbnVsbCkge1xuICAgIHJldHVybiB1bmtub3duRWxlbWVudENhY2hlW3RhZ11cbiAgfVxuICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gIGlmICh0YWcuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODIxMDM2NC8xMDcwMjQ0XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAoXG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxVbmtub3duRWxlbWVudCB8fFxuICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MRWxlbWVudFxuICAgICkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAvSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGVsLnRvU3RyaW5nKCkpKVxuICB9XG59XG5cbnZhciBpc1RleHRJbnB1dFR5cGUgPSBtYWtlTWFwKCd0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCcpO1xuXG4vKiAgKi9cblxuLyoqXG4gKiBRdWVyeSBhbiBlbGVtZW50IHNlbGVjdG9yIGlmIGl0J3Mgbm90IGFuIGVsZW1lbnQgYWxyZWFkeS5cbiAqL1xuZnVuY3Rpb24gcXVlcnkgKGVsKSB7XG4gIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHNlbGVjdGVkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCk7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEgKHRhZ05hbWUsIHZub2RlKSB7XG4gIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZWxtXG4gIH1cbiAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgaWYgKHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS5hdHRycyAmJiB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbG0uc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xuICB9XG4gIHJldHVybiBlbG1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSwgdGFnTmFtZSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS5wYXJlbnROb2RlXG59XG5cbmZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gIHJldHVybiBub2RlLm5leHRTaWJsaW5nXG59XG5cbmZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZVxufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwgdGV4dCkge1xuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cblxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZSAobm9kZSwgc2NvcGVJZCkge1xuICBub2RlLnNldEF0dHJpYnV0ZShzY29wZUlkLCAnJyk7XG59XG5cbnZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50JDEsXG4gIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gIGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcbiAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICB0YWdOYW1lOiB0YWdOYW1lLFxuICBzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4gICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyUmVmICh2bm9kZSwgaXNSZW1vdmFsKSB7XG4gIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgaWYgKCFpc0RlZihrZXkpKSB7IHJldHVybiB9XG5cbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgdmFyIHJlZiA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgdmFyIHJlZnMgPSB2bS4kcmVmcztcbiAgaWYgKGlzUmVtb3ZhbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgIHJlbW92ZShyZWZzW2tleV0sIHJlZik7XG4gICAgfSBlbHNlIGlmIChyZWZzW2tleV0gPT09IHJlZikge1xuICAgICAgcmVmc1trZXldID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodm5vZGUuZGF0YS5yZWZJbkZvcikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgICAgcmVmc1trZXldID0gW3JlZl07XG4gICAgICB9IGVsc2UgaWYgKHJlZnNba2V5XS5pbmRleE9mKHJlZikgPCAwKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICByZWZzW2tleV0ucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWZzW2tleV0gPSByZWY7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XG4gKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICpcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICovXG5cbnZhciBlbXB0eU5vZGUgPSBuZXcgVk5vZGUoJycsIHt9LCBbXSk7XG5cbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuXG5mdW5jdGlvbiBzYW1lVm5vZGUgKGEsIGIpIHtcbiAgcmV0dXJuIChcbiAgICBhLmtleSA9PT0gYi5rZXkgJiYgKFxuICAgICAgKFxuICAgICAgICBhLnRhZyA9PT0gYi50YWcgJiZcbiAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgIGlzRGVmKGEuZGF0YSkgPT09IGlzRGVmKGIuZGF0YSkgJiZcbiAgICAgICAgc2FtZUlucHV0VHlwZShhLCBiKVxuICAgICAgKSB8fCAoXG4gICAgICAgIGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiZcbiAgICAgICAgYS5hc3luY0ZhY3RvcnkgPT09IGIuYXN5bmNGYWN0b3J5ICYmXG4gICAgICAgIGlzVW5kZWYoYi5hc3luY0ZhY3RvcnkuZXJyb3IpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHNhbWVJbnB1dFR5cGUgKGEsIGIpIHtcbiAgaWYgKGEudGFnICE9PSAnaW5wdXQnKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGk7XG4gIHZhciB0eXBlQSA9IGlzRGVmKGkgPSBhLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHZhciB0eXBlQiA9IGlzRGVmKGkgPSBiLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHJldHVybiB0eXBlQSA9PT0gdHlwZUIgfHwgaXNUZXh0SW5wdXRUeXBlKHR5cGVBKSAmJiBpc1RleHRJbnB1dFR5cGUodHlwZUIpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4IChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICB2YXIgaSwga2V5O1xuICB2YXIgbWFwID0ge307XG4gIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAga2V5ID0gY2hpbGRyZW5baV0ua2V5O1xuICAgIGlmIChpc0RlZihrZXkpKSB7IG1hcFtrZXldID0gaTsgfVxuICB9XG4gIHJldHVybiBtYXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbiAoYmFja2VuZCkge1xuICB2YXIgaSwgajtcbiAgdmFyIGNicyA9IHt9O1xuXG4gIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzO1xuICB2YXIgbm9kZU9wcyA9IGJhY2tlbmQubm9kZU9wcztcblxuICBmb3IgKGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyArK2kpIHtcbiAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChpc0RlZihtb2R1bGVzW2pdW2hvb2tzW2ldXSkpIHtcbiAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbXB0eU5vZGVBdCAoZWxtKSB7XG4gICAgcmV0dXJuIG5ldyBWTm9kZShub2RlT3BzLnRhZ05hbWUoZWxtKS50b0xvd2VyQ2FzZSgpLCB7fSwgW10sIHVuZGVmaW5lZCwgZWxtKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUm1DYiAoY2hpbGRFbG0sIGxpc3RlbmVycykge1xuICAgIGZ1bmN0aW9uIHJlbW92ZSQkMSAoKSB7XG4gICAgICBpZiAoLS1yZW1vdmUkJDEubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgIHJlbW92ZU5vZGUoY2hpbGRFbG0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZW1vdmUkJDEubGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHJldHVybiByZW1vdmUkJDFcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU5vZGUgKGVsKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGVPcHMucGFyZW50Tm9kZShlbCk7XG4gICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgIG5vZGVPcHMucmVtb3ZlQ2hpbGQocGFyZW50LCBlbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCQkMSAodm5vZGUsIGluVlByZSkge1xuICAgIHJldHVybiAoXG4gICAgICAhaW5WUHJlICYmXG4gICAgICAhdm5vZGUubnMgJiZcbiAgICAgICEoXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMuc29tZShmdW5jdGlvbiAoaWdub3JlKSB7XG4gICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgID8gaWdub3JlLnRlc3Qodm5vZGUudGFnKVxuICAgICAgICAgICAgOiBpZ25vcmUgPT09IHZub2RlLnRhZ1xuICAgICAgICB9KVxuICAgICAgKSAmJlxuICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodm5vZGUudGFnKVxuICAgIClcbiAgfVxuXG4gIHZhciBjcmVhdGluZ0VsbUluVlByZSA9IDA7XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxtIChcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgcGFyZW50RWxtLFxuICAgIHJlZkVsbSxcbiAgICBuZXN0ZWQsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleFxuICApIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gVGhpcyB2bm9kZSB3YXMgdXNlZCBpbiBhIHByZXZpb3VzIHJlbmRlciFcbiAgICAgIC8vIG5vdyBpdCdzIHVzZWQgYXMgYSBuZXcgbm9kZSwgb3ZlcndyaXRpbmcgaXRzIGVsbSB3b3VsZCBjYXVzZVxuICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxuICAgICAgLy8gcmVmZXJlbmNlIG5vZGUuIEluc3RlYWQsIHdlIGNsb25lIHRoZSBub2RlIG9uLWRlbWFuZCBiZWZvcmUgY3JlYXRpbmdcbiAgICAgIC8vIGFzc29jaWF0ZWQgRE9NIGVsZW1lbnQgZm9yIGl0LlxuICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIH1cblxuICAgIHZub2RlLmlzUm9vdEluc2VydCA9ICFuZXN0ZWQ7IC8vIGZvciB0cmFuc2l0aW9uIGVudGVyIGNoZWNrXG4gICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW5rbm93bkVsZW1lbnQkJDEodm5vZGUsIGNyZWF0aW5nRWxtSW5WUHJlKSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnVW5rbm93biBjdXN0b20gZWxlbWVudDogPCcgKyB0YWcgKyAnPiAtIGRpZCB5b3UgJyArXG4gICAgICAgICAgICAncmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBjb3JyZWN0bHk/IEZvciByZWN1cnNpdmUgY29tcG9uZW50cywgJyArXG4gICAgICAgICAgICAnbWFrZSBzdXJlIHRvIHByb3ZpZGUgdGhlIFwibmFtZVwiIG9wdGlvbi4nLFxuICAgICAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdm5vZGUuZWxtID0gdm5vZGUubnNcbiAgICAgICAgPyBub2RlT3BzLmNyZWF0ZUVsZW1lbnROUyh2bm9kZS5ucywgdGFnKVxuICAgICAgICA6IG5vZGVPcHMuY3JlYXRlRWxlbWVudCh0YWcsIHZub2RlKTtcbiAgICAgIHNldFNjb3BlKHZub2RlKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICB7XG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICB2YXIgaXNSZWFjdGl2YXRlZCA9IGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpLmtlZXBBbGl2ZTtcbiAgICAgIGlmIChpc0RlZihpID0gaS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkge1xuICAgICAgICBpKHZub2RlLCBmYWxzZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgfVxuICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21wb25lbnRcbiAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50IGFsc28gaGFzIHNldCB0aGUgcGxhY2Vob2xkZXIgdm5vZGUncyBlbG0uXG4gICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxuICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtcbiAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRDb21wb25lbnQgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSkge1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgIGlmIChpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cbiAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZva2UgdGhlIGluc2VydCBob29rXG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaTtcbiAgICAvLyBoYWNrIGZvciAjNDMzOTogYSByZWFjdGl2YXRlZCBjb21wb25lbnQgd2l0aCBpbm5lciB0cmFuc2l0aW9uXG4gICAgLy8gZG9lcyBub3QgdHJpZ2dlciBiZWNhdXNlIHRoZSBpbm5lciBub2RlJ3MgY3JlYXRlZCBob29rcyBhcmUgbm90IGNhbGxlZFxuICAgIC8vIGFnYWluLiBJdCdzIG5vdCBpZGVhbCB0byBpbnZvbHZlIG1vZHVsZS1zcGVjaWZpYyBsb2dpYyBpbiBoZXJlIGJ1dFxuICAgIC8vIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gaXQuXG4gICAgdmFyIGlubmVyTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoaXNEZWYoaSA9IGlubmVyTm9kZS5kYXRhKSAmJiBpc0RlZihpID0gaS50cmFuc2l0aW9uKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmFjdGl2YXRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2JzLmFjdGl2YXRlW2ldKGVtcHR5Tm9kZSwgaW5uZXJOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaChpbm5lck5vZGUpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB1bmxpa2UgYSBuZXdseSBjcmVhdGVkIGNvbXBvbmVudCxcbiAgICAvLyBhIHJlYWN0aXZhdGVkIGtlZXAtYWxpdmUgY29tcG9uZW50IGRvZXNuJ3QgaW5zZXJ0IGl0c2VsZlxuICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydCAocGFyZW50LCBlbG0sIHJlZiQkMSkge1xuICAgIGlmIChpc0RlZihwYXJlbnQpKSB7XG4gICAgICBpZiAoaXNEZWYocmVmJCQxKSkge1xuICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZiQkMSkgPT09IHBhcmVudCkge1xuICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxtLCByZWYkJDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHBhcmVudCwgZWxtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbiAodm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbik7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNyZWF0ZUVsbShjaGlsZHJlbltpXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUHJpbWl0aXZlKHZub2RlLnRleHQpKSB7XG4gICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHZub2RlLmVsbSwgbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcodm5vZGUudGV4dCkpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1BhdGNoYWJsZSAodm5vZGUpIHtcbiAgICB3aGlsZSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIH1cbiAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlQ3JlYXRlSG9va3MgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgaSA9IHZub2RlLmRhdGEuaG9vazsgLy8gUmV1c2UgdmFyaWFibGVcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIGlmIChpc0RlZihpLmNyZWF0ZSkpIHsgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpLmluc2VydCkpIHsgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHNjb3BlIGlkIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIENTUy5cbiAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHNwZWNpYWwgY2FzZSB0byBhdm9pZCB0aGUgb3ZlcmhlYWRcbiAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRjaGluZyBwcm9jZXNzLlxuICBmdW5jdGlvbiBzZXRTY29wZSAodm5vZGUpIHtcbiAgICB2YXIgaTtcbiAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmZuU2NvcGVJZCkpIHtcbiAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYW5jZXN0b3IgPSB2bm9kZTtcbiAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICBpZiAoaXNEZWYoaSA9IGFuY2VzdG9yLmNvbnRleHQpICYmIGlzRGVmKGkgPSBpLiRvcHRpb25zLl9zY29wZUlkKSkge1xuICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICB9XG4gICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmb3Igc2xvdCBjb250ZW50IHRoZXkgc2hvdWxkIGFsc28gZ2V0IHRoZSBzY29wZUlkIGZyb20gdGhlIGhvc3QgaW5zdGFuY2UuXG4gICAgaWYgKGlzRGVmKGkgPSBhY3RpdmVJbnN0YW5jZSkgJiZcbiAgICAgIGkgIT09IHZub2RlLmNvbnRleHQgJiZcbiAgICAgIGkgIT09IHZub2RlLmZuQ29udGV4dCAmJlxuICAgICAgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpXG4gICAgKSB7XG4gICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhZGRWbm9kZXMgKHBhcmVudEVsbSwgcmVmRWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIGNyZWF0ZUVsbSh2bm9kZXNbc3RhcnRJZHhdLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBmYWxzZSwgdm5vZGVzLCBzdGFydElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRGVzdHJveUhvb2sgKHZub2RlKSB7XG4gICAgdmFyIGksIGo7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLmRlc3Ryb3kpKSB7IGkodm5vZGUpOyB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpIHsgY2JzLmRlc3Ryb3lbaV0odm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc0RlZihpID0gdm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaW52b2tlRGVzdHJveUhvb2sodm5vZGUuY2hpbGRyZW5bal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVZub2RlcyAocGFyZW50RWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgpIHtcbiAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICB2YXIgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAoaXNEZWYoY2gudGFnKSkge1xuICAgICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soY2gpO1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKGNoKTtcbiAgICAgICAgfSBlbHNlIHsgLy8gVGV4dCBub2RlXG4gICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayAodm5vZGUsIHJtKSB7XG4gICAgaWYgKGlzRGVmKHJtKSB8fCBpc0RlZih2bm9kZS5kYXRhKSkge1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gY2JzLnJlbW92ZS5sZW5ndGggKyAxO1xuICAgICAgaWYgKGlzRGVmKHJtKSkge1xuICAgICAgICAvLyB3ZSBoYXZlIGEgcmVjdXJzaXZlbHkgcGFzc2VkIGRvd24gcm0gY2FsbGJhY2tcbiAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxpc3RlbmVycyBjb3VudFxuICAgICAgICBybS5saXN0ZW5lcnMgKz0gbGlzdGVuZXJzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGlyZWN0bHkgcmVtb3ZpbmdcbiAgICAgICAgcm0gPSBjcmVhdGVSbUNiKHZub2RlLmVsbSwgbGlzdGVuZXJzKTtcbiAgICAgIH1cbiAgICAgIC8vIHJlY3Vyc2l2ZWx5IGludm9rZSBob29rcyBvbiBjaGlsZCBjb21wb25lbnQgcm9vdCBub2RlXG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpc0RlZihpID0gaS5fdm5vZGUpICYmIGlzRGVmKGkuZGF0YSkpIHtcbiAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhpLCBybSk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBjYnMucmVtb3ZlW2ldKHZub2RlLCBybSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucmVtb3ZlKSkge1xuICAgICAgICBpKHZub2RlLCBybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVOb2RlKHZub2RlLmVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4gKHBhcmVudEVsbSwgb2xkQ2gsIG5ld0NoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcbiAgICB2YXIgb2xkU3RhcnRJZHggPSAwO1xuICAgIHZhciBuZXdTdGFydElkeCA9IDA7XG4gICAgdmFyIG9sZEVuZElkeCA9IG9sZENoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFswXTtcbiAgICB2YXIgb2xkRW5kVm5vZGUgPSBvbGRDaFtvbGRFbmRJZHhdO1xuICAgIHZhciBuZXdFbmRJZHggPSBuZXdDaC5sZW5ndGggLSAxO1xuICAgIHZhciBuZXdTdGFydFZub2RlID0gbmV3Q2hbMF07XG4gICAgdmFyIG5ld0VuZFZub2RlID0gbmV3Q2hbbmV3RW5kSWR4XTtcbiAgICB2YXIgb2xkS2V5VG9JZHgsIGlkeEluT2xkLCB2bm9kZVRvTW92ZSwgcmVmRWxtO1xuXG4gICAgLy8gcmVtb3ZlT25seSBpcyBhIHNwZWNpYWwgZmxhZyB1c2VkIG9ubHkgYnkgPHRyYW5zaXRpb24tZ3JvdXA+XG4gICAgLy8gdG8gZW5zdXJlIHJlbW92ZWQgZWxlbWVudHMgc3RheSBpbiBjb3JyZWN0IHJlbGF0aXZlIHBvc2l0aW9uc1xuICAgIC8vIGR1cmluZyBsZWF2aW5nIHRyYW5zaXRpb25zXG4gICAgdmFyIGNhbk1vdmUgPSAhcmVtb3ZlT25seTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjaGVja0R1cGxpY2F0ZUtleXMobmV3Q2gpO1xuICAgIH1cblxuICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICBpZiAoaXNVbmRlZihvbGRTdGFydFZub2RlKSkge1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07IC8vIFZub2RlIGhhcyBiZWVuIG1vdmVkIGxlZnRcbiAgICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9kZSkpIHtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSkpIHsgLy8gVm5vZGUgbW92ZWQgcmlnaHRcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBub2RlT3BzLm5leHRTaWJsaW5nKG9sZEVuZFZub2RlLmVsbSkpO1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIGxlZnRcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkRW5kVm5vZGUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNVbmRlZihvbGRLZXlUb0lkeCkpIHsgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7IH1cbiAgICAgICAgaWR4SW5PbGQgPSBpc0RlZihuZXdTdGFydFZub2RlLmtleSlcbiAgICAgICAgICA/IG9sZEtleVRvSWR4W25ld1N0YXJ0Vm5vZGUua2V5XVxuICAgICAgICAgIDogZmluZElkeEluT2xkKG5ld1N0YXJ0Vm5vZGUsIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICAgICAgaWYgKGlzVW5kZWYoaWR4SW5PbGQpKSB7IC8vIE5ldyBlbGVtZW50XG4gICAgICAgICAgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgZmFsc2UsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm5vZGVUb01vdmUgPSBvbGRDaFtpZHhJbk9sZF07XG4gICAgICAgICAgaWYgKHNhbWVWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGNoVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgIG9sZENoW2lkeEluT2xkXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCB2bm9kZVRvTW92ZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2FtZSBrZXkgYnV0IGRpZmZlcmVudCBlbGVtZW50LiB0cmVhdCBhcyBuZXcgZWxlbWVudFxuICAgICAgICAgICAgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgZmFsc2UsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9sZFN0YXJ0SWR4ID4gb2xkRW5kSWR4KSB7XG4gICAgICByZWZFbG0gPSBpc1VuZGVmKG5ld0NoW25ld0VuZElkeCArIDFdKSA/IG51bGwgOiBuZXdDaFtuZXdFbmRJZHggKyAxXS5lbG07XG4gICAgICBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIG5ld0NoLCBuZXdTdGFydElkeCwgbmV3RW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgIH0gZWxzZSBpZiAobmV3U3RhcnRJZHggPiBuZXdFbmRJZHgpIHtcbiAgICAgIHJlbW92ZVZub2RlcyhwYXJlbnRFbG0sIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0R1cGxpY2F0ZUtleXMgKGNoaWxkcmVuKSB7XG4gICAgdmFyIHNlZW5LZXlzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZub2RlID0gY2hpbGRyZW5baV07XG4gICAgICB2YXIga2V5ID0gdm5vZGUua2V5O1xuICAgICAgaWYgKGlzRGVmKGtleSkpIHtcbiAgICAgICAgaWYgKHNlZW5LZXlzW2tleV0pIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgKFwiRHVwbGljYXRlIGtleXMgZGV0ZWN0ZWQ6ICdcIiArIGtleSArIFwiJy4gVGhpcyBtYXkgY2F1c2UgYW4gdXBkYXRlIGVycm9yLlwiKSxcbiAgICAgICAgICAgIHZub2RlLmNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZW5LZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZElkeEluT2xkIChub2RlLCBvbGRDaCwgc3RhcnQsIGVuZCkge1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IG9sZENoW2ldO1xuICAgICAgaWYgKGlzRGVmKGMpICYmIHNhbWVWbm9kZShub2RlLCBjKSkgeyByZXR1cm4gaSB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hWbm9kZSAoXG4gICAgb2xkVm5vZGUsXG4gICAgdm5vZGUsXG4gICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgIG93bmVyQXJyYXksXG4gICAgaW5kZXgsXG4gICAgcmVtb3ZlT25seVxuICApIHtcbiAgICBpZiAob2xkVm5vZGUgPT09IHZub2RlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gY2xvbmUgcmV1c2VkIHZub2RlXG4gICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgfVxuXG4gICAgdmFyIGVsbSA9IHZub2RlLmVsbSA9IG9sZFZub2RlLmVsbTtcblxuICAgIGlmIChpc1RydWUob2xkVm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyKSkge1xuICAgICAgaWYgKGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgaHlkcmF0ZShvbGRWbm9kZS5lbG0sIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHJldXNlIGVsZW1lbnQgZm9yIHN0YXRpYyB0cmVlcy5cbiAgICAvLyBub3RlIHdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgdm5vZGUgaXMgY2xvbmVkIC1cbiAgICAvLyBpZiB0aGUgbmV3IG5vZGUgaXMgbm90IGNsb25lZCBpdCBtZWFucyB0aGUgcmVuZGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW5cbiAgICAvLyByZXNldCBieSB0aGUgaG90LXJlbG9hZC1hcGkgYW5kIHdlIG5lZWQgdG8gZG8gYSBwcm9wZXIgcmUtcmVuZGVyLlxuICAgIGlmIChpc1RydWUodm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICBpc1RydWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICB2bm9kZS5rZXkgPT09IG9sZFZub2RlLmtleSAmJlxuICAgICAgKGlzVHJ1ZSh2bm9kZS5pc0Nsb25lZCkgfHwgaXNUcnVlKHZub2RlLmlzT25jZSkpXG4gICAgKSB7XG4gICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGk7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wcmVwYXRjaCkpIHtcbiAgICAgIGkob2xkVm5vZGUsIHZub2RlKTtcbiAgICB9XG5cbiAgICB2YXIgb2xkQ2ggPSBvbGRWbm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgY2ggPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7ICsraSkgeyBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS51cGRhdGUpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgICBpZiAoaXNVbmRlZih2bm9kZS50ZXh0KSkge1xuICAgICAgaWYgKGlzRGVmKG9sZENoKSAmJiBpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKG9sZENoICE9PSBjaCkgeyB1cGRhdGVDaGlsZHJlbihlbG0sIG9sZENoLCBjaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KTsgfVxuICAgICAgfSBlbHNlIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMoY2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkgeyBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpOyB9XG4gICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRDaCkpIHtcbiAgICAgICAgcmVtb3ZlVm5vZGVzKGVsbSwgb2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkge1xuICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2xkVm5vZGUudGV4dCAhPT0gdm5vZGUudGV4dCkge1xuICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sIHZub2RlLnRleHQpO1xuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wb3N0cGF0Y2gpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sgKHZub2RlLCBxdWV1ZSwgaW5pdGlhbCkge1xuICAgIC8vIGRlbGF5IGluc2VydCBob29rcyBmb3IgY29tcG9uZW50IHJvb3Qgbm9kZXMsIGludm9rZSB0aGVtIGFmdGVyIHRoZVxuICAgIC8vIGVsZW1lbnQgaXMgcmVhbGx5IGluc2VydGVkXG4gICAgaWYgKGlzVHJ1ZShpbml0aWFsKSAmJiBpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICB2bm9kZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gcXVldWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcXVldWVbaV0uZGF0YS5ob29rLmluc2VydChxdWV1ZVtpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAvLyBsaXN0IG9mIG1vZHVsZXMgdGhhdCBjYW4gc2tpcCBjcmVhdGUgaG9vayBkdXJpbmcgaHlkcmF0aW9uIGJlY2F1c2UgdGhleVxuICAvLyBhcmUgYWxyZWFkeSByZW5kZXJlZCBvbiB0aGUgY2xpZW50IG9yIGhhcyBubyBuZWVkIGZvciBpbml0aWFsaXphdGlvblxuICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgLy8gZGVlcCB1cGRhdGVzICgjNzA2MykuXG4gIHZhciBpc1JlbmRlcmVkTW9kdWxlID0gbWFrZU1hcCgnYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Jyk7XG5cbiAgLy8gTm90ZTogdGhpcyBpcyBhIGJyb3dzZXItb25seSBmdW5jdGlvbiBzbyB3ZSBjYW4gYXNzdW1lIGVsbXMgYXJlIERPTSBub2Rlcy5cbiAgZnVuY3Rpb24gaHlkcmF0ZSAoZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpblZQcmUgPSBpblZQcmUgfHwgKGRhdGEgJiYgZGF0YS5wcmUpO1xuICAgIHZub2RlLmVsbSA9IGVsbTtcblxuICAgIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSAmJiBpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkpKSB7XG4gICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gYXNzZXJ0IG5vZGUgbWF0Y2hcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFhc3NlcnROb2RlTWF0Y2goZWxtLCB2bm9kZSwgaW5WUHJlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuaW5pdCkpIHsgaSh2bm9kZSwgdHJ1ZSAvKiBoeWRyYXRpbmcgKi8pOyB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICAvLyBjaGlsZCBjb21wb25lbnQuIGl0IHNob3VsZCBoYXZlIGh5ZHJhdGVkIGl0cyBvd24gdHJlZS5cbiAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgLy8gZW1wdHkgZWxlbWVudCwgYWxsb3cgY2xpZW50IHRvIHBpY2sgdXAgYW5kIHBvcHVsYXRlIGNoaWxkcmVuXG4gICAgICAgIGlmICghZWxtLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB2LWh0bWwgYW5kIGRvbVByb3BzOiBpbm5lckhUTUxcbiAgICAgICAgICBpZiAoaXNEZWYoaSA9IGRhdGEpICYmIGlzRGVmKGkgPSBpLmRvbVByb3BzKSAmJiBpc0RlZihpID0gaS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgICBpZiAoaSAhPT0gZWxtLmlubmVySFRNTCkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2NsaWVudCBpbm5lckhUTUw6ICcsIGVsbS5pbm5lckhUTUwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRlIGFuZCBjb21wYXJlIGNoaWxkcmVuIGxpc3RzXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW5NYXRjaCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gZWxtLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgICAgIGlmICghY2hpbGROb2RlIHx8ICFoeWRyYXRlKGNoaWxkTm9kZSwgY2hpbGRyZW5baSQxXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY2hpbGROb2RlIGlzIG5vdCBudWxsLCBpdCBtZWFucyB0aGUgYWN0dWFsIGNoaWxkTm9kZXMgbGlzdCBpc1xuICAgICAgICAgICAgLy8gbG9uZ2VyIHRoYW4gdGhlIHZpcnR1YWwgY2hpbGRyZW4gbGlzdC5cbiAgICAgICAgICAgIGlmICghY2hpbGRyZW5NYXRjaCB8fCBjaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWlzbWF0Y2hpbmcgY2hpbGROb2RlcyB2cy4gVk5vZGVzOiAnLCBlbG0uY2hpbGROb2RlcywgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIHZhciBmdWxsSW52b2tlID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAgICAgICAgIGZ1bGxJbnZva2UgPSB0cnVlO1xuICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZ1bGxJbnZva2UgJiYgZGF0YVsnY2xhc3MnXSkge1xuICAgICAgICAgIC8vIGVuc3VyZSBjb2xsZWN0aW5nIGRlcHMgZm9yIGRlZXAgY2xhc3MgYmluZGluZ3MgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICAgICAgdHJhdmVyc2UoZGF0YVsnY2xhc3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnROb2RlTWF0Y2ggKG5vZGUsIHZub2RlLCBpblZQcmUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUudGFnKSkge1xuICAgICAgcmV0dXJuIHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHwgKFxuICAgICAgICAhaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgaW5WUHJlKSAmJlxuICAgICAgICB2bm9kZS50YWcudG9Mb3dlckNhc2UoKSA9PT0gKG5vZGUudGFnTmFtZSAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkVm5vZGUpKSB7IGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTsgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuXG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1JlYWxFbGVtZW50ID0gaXNEZWYob2xkVm5vZGUubm9kZVR5cGUpO1xuICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgIC8vIHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBudWxsLCBudWxsLCByZW1vdmVPbmx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1JlYWxFbGVtZW50KSB7XG4gICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgIC8vIGEgc3VjY2Vzc2Z1bCBoeWRyYXRpb24uXG4gICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAgICAgIGlmIChoeWRyYXRlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xuICAgICAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICdUaGUgY2xpZW50LXNpZGUgcmVuZGVyZWQgdmlydHVhbCBET00gdHJlZSBpcyBub3QgbWF0Y2hpbmcgJyArXG4gICAgICAgICAgICAgICAgJ3NlcnZlci1yZW5kZXJlZCBjb250ZW50LiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgaW5jb3JyZWN0ICcgK1xuICAgICAgICAgICAgICAgICdIVE1MIG1hcmt1cCwgZm9yIGV4YW1wbGUgbmVzdGluZyBibG9jay1sZXZlbCBlbGVtZW50cyBpbnNpZGUgJyArXG4gICAgICAgICAgICAgICAgJzxwPiwgb3IgbWlzc2luZyA8dGJvZHk+LiBCYWlsaW5nIGh5ZHJhdGlvbiBhbmQgcGVyZm9ybWluZyAnICtcbiAgICAgICAgICAgICAgICAnZnVsbCBjbGllbnQtc2lkZSByZW5kZXIuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlaXRoZXIgbm90IHNlcnZlci1yZW5kZXJlZCwgb3IgaHlkcmF0aW9uIGZhaWxlZC5cbiAgICAgICAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbm9kZSBhbmQgcmVwbGFjZSBpdFxuICAgICAgICAgIG9sZFZub2RlID0gZW1wdHlOb2RlQXQob2xkVm5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVwbGFjaW5nIGV4aXN0aW5nIGVsZW1lbnRcbiAgICAgICAgdmFyIG9sZEVsbSA9IG9sZFZub2RlLmVsbTtcbiAgICAgICAgdmFyIHBhcmVudEVsbSA9IG5vZGVPcHMucGFyZW50Tm9kZShvbGRFbG0pO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgbm9kZVxuICAgICAgICBjcmVhdGVFbG0oXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgICAgICAgIC8vIGV4dHJlbWVseSByYXJlIGVkZ2UgY2FzZTogZG8gbm90IGluc2VydCBpZiBvbGQgZWxlbWVudCBpcyBpbiBhXG4gICAgICAgICAgLy8gbGVhdmluZyB0cmFuc2l0aW9uLiBPbmx5IGhhcHBlbnMgd2hlbiBjb21iaW5pbmcgdHJhbnNpdGlvbiArXG4gICAgICAgICAgLy8ga2VlcC1hbGl2ZSArIEhPQ3MuICgjNDU5MClcbiAgICAgICAgICBvbGRFbG0uX2xlYXZlQ2IgPyBudWxsIDogcGFyZW50RWxtLFxuICAgICAgICAgIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBwYXJlbnQgcGxhY2Vob2xkZXIgbm9kZSBlbGVtZW50LCByZWN1cnNpdmVseVxuICAgICAgICBpZiAoaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlLnBhcmVudDtcbiAgICAgICAgICB2YXIgcGF0Y2hhYmxlID0gaXNQYXRjaGFibGUodm5vZGUpO1xuICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBjYnMuZGVzdHJveVtpXShhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3Rvci5lbG0gPSB2bm9kZS5lbG07XG4gICAgICAgICAgICBpZiAocGF0Y2hhYmxlKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICAgICAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIGFuY2VzdG9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyAjNjUxM1xuICAgICAgICAgICAgICAvLyBpbnZva2UgaW5zZXJ0IGhvb2tzIHRoYXQgbWF5IGhhdmUgYmVlbiBtZXJnZWQgYnkgY3JlYXRlIGhvb2tzLlxuICAgICAgICAgICAgICAvLyBlLmcuIGZvciBkaXJlY3RpdmVzIHRoYXQgdXNlcyB0aGUgXCJpbnNlcnRlZFwiIGhvb2suXG4gICAgICAgICAgICAgIHZhciBpbnNlcnQgPSBhbmNlc3Rvci5kYXRhLmhvb2suaW5zZXJ0O1xuICAgICAgICAgICAgICBpZiAoaW5zZXJ0Lm1lcmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGF0IGluZGV4IDEgdG8gYXZvaWQgcmUtaW52b2tpbmcgY29tcG9uZW50IG1vdW50ZWQgaG9va1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkkMiA9IDE7IGkkMiA8IGluc2VydC5mbnMubGVuZ3RoOyBpJDIrKykge1xuICAgICAgICAgICAgICAgICAgaW5zZXJ0LmZuc1tpJDJdKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWdpc3RlclJlZihhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZXN0cm95IG9sZCBub2RlXG4gICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0pKSB7XG4gICAgICAgICAgcmVtb3ZlVm5vZGVzKHBhcmVudEVsbSwgW29sZFZub2RlXSwgMCwgMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgaXNJbml0aWFsUGF0Y2gpO1xuICAgIHJldHVybiB2bm9kZS5lbG1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIGRpcmVjdGl2ZXMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgdXBkYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICBkZXN0cm95OiBmdW5jdGlvbiB1bmJpbmREaXJlY3RpdmVzICh2bm9kZSkge1xuICAgIHVwZGF0ZURpcmVjdGl2ZXModm5vZGUsIGVtcHR5Tm9kZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZURpcmVjdGl2ZXMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzIHx8IHZub2RlLmRhdGEuZGlyZWN0aXZlcykge1xuICAgIF91cGRhdGUob2xkVm5vZGUsIHZub2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfdXBkYXRlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGlzQ3JlYXRlID0gb2xkVm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgdmFyIGlzRGVzdHJveSA9IHZub2RlID09PSBlbXB0eU5vZGU7XG4gIHZhciBvbGREaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyQxKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcywgb2xkVm5vZGUuY29udGV4dCk7XG4gIHZhciBuZXdEaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyQxKHZub2RlLmRhdGEuZGlyZWN0aXZlcywgdm5vZGUuY29udGV4dCk7XG5cbiAgdmFyIGRpcnNXaXRoSW5zZXJ0ID0gW107XG4gIHZhciBkaXJzV2l0aFBvc3RwYXRjaCA9IFtdO1xuXG4gIHZhciBrZXksIG9sZERpciwgZGlyO1xuICBmb3IgKGtleSBpbiBuZXdEaXJzKSB7XG4gICAgb2xkRGlyID0gb2xkRGlyc1trZXldO1xuICAgIGRpciA9IG5ld0RpcnNba2V5XTtcbiAgICBpZiAoIW9sZERpcikge1xuICAgICAgLy8gbmV3IGRpcmVjdGl2ZSwgYmluZFxuICAgICAgY2FsbEhvb2skMShkaXIsICdiaW5kJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuaW5zZXJ0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhJbnNlcnQucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleGlzdGluZyBkaXJlY3RpdmUsIHVwZGF0ZVxuICAgICAgZGlyLm9sZFZhbHVlID0gb2xkRGlyLnZhbHVlO1xuICAgICAgZGlyLm9sZEFyZyA9IG9sZERpci5hcmc7XG4gICAgICBjYWxsSG9vayQxKGRpciwgJ3VwZGF0ZScsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmNvbXBvbmVudFVwZGF0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhQb3N0cGF0Y2gucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aEluc2VydC5sZW5ndGgpIHtcbiAgICB2YXIgY2FsbEluc2VydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhJbnNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aEluc2VydFtpXSwgJ2luc2VydGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChpc0NyZWF0ZSkge1xuICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBjYWxsSW5zZXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbEluc2VydCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGgpIHtcbiAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aFBvc3RwYXRjaFtpXSwgJ2NvbXBvbmVudFVwZGF0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFpc0NyZWF0ZSkge1xuICAgIGZvciAoa2V5IGluIG9sZERpcnMpIHtcbiAgICAgIGlmICghbmV3RGlyc1trZXldKSB7XG4gICAgICAgIC8vIG5vIGxvbmdlciBwcmVzZW50LCB1bmJpbmRcbiAgICAgICAgY2FsbEhvb2skMShvbGREaXJzW2tleV0sICd1bmJpbmQnLCBvbGRWbm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBlbXB0eU1vZGlmaWVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSAoXG4gIGRpcnMsXG4gIHZtXG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghZGlycykge1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHJldHVybiByZXNcbiAgfVxuICB2YXIgaSwgZGlyO1xuICBmb3IgKGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgIGRpciA9IGRpcnNbaV07XG4gICAgaWYgKCFkaXIubW9kaWZpZXJzKSB7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGRpci5tb2RpZmllcnMgPSBlbXB0eU1vZGlmaWVycztcbiAgICB9XG4gICAgcmVzW2dldFJhd0Rpck5hbWUoZGlyKV0gPSBkaXI7XG4gICAgZGlyLmRlZiA9IHJlc29sdmVBc3NldCh2bS4kb3B0aW9ucywgJ2RpcmVjdGl2ZXMnLCBkaXIubmFtZSwgdHJ1ZSk7XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2V0UmF3RGlyTmFtZSAoZGlyKSB7XG4gIHJldHVybiBkaXIucmF3TmFtZSB8fCAoKGRpci5uYW1lKSArIFwiLlwiICsgKE9iamVjdC5rZXlzKGRpci5tb2RpZmllcnMgfHwge30pLmpvaW4oJy4nKSkpXG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rJDEgKGRpciwgaG9vaywgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpIHtcbiAgdmFyIGZuID0gZGlyLmRlZiAmJiBkaXIuZGVmW2hvb2tdO1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgZm4odm5vZGUuZWxtLCBkaXIsIHZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bm9kZS5jb250ZXh0LCAoXCJkaXJlY3RpdmUgXCIgKyAoZGlyLm5hbWUpICsgXCIgXCIgKyBob29rICsgXCIgaG9va1wiKSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBiYXNlTW9kdWxlcyA9IFtcbiAgcmVmLFxuICBkaXJlY3RpdmVzXG5dO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlQXR0cnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgb3B0cyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIGlmIChpc0RlZihvcHRzKSAmJiBvcHRzLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnMgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5hdHRycykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmF0dHJzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1ciwgb2xkO1xuICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkQXR0cnMgPSBvbGRWbm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICB2YXIgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgaWYgKGlzRGVmKGF0dHJzLl9fb2JfXykpIHtcbiAgICBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGF0dHJzKTtcbiAgfVxuXG4gIGZvciAoa2V5IGluIGF0dHJzKSB7XG4gICAgY3VyID0gYXR0cnNba2V5XTtcbiAgICBvbGQgPSBvbGRBdHRyc1trZXldO1xuICAgIGlmIChvbGQgIT09IGN1cikge1xuICAgICAgc2V0QXR0cihlbG0sIGtleSwgY3VyKTtcbiAgICB9XG4gIH1cbiAgLy8gIzQzOTE6IGluIElFOSwgc2V0dGluZyB0eXBlIGNhbiByZXNldCB2YWx1ZSBmb3IgaW5wdXRbdHlwZT1yYWRpb11cbiAgLy8gIzY2NjY6IElFL0VkZ2UgZm9yY2VzIHByb2dyZXNzIHZhbHVlIGRvd24gdG8gMSBiZWZvcmUgc2V0dGluZyBhIG1heFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKChpc0lFIHx8IGlzRWRnZSkgJiYgYXR0cnMudmFsdWUgIT09IG9sZEF0dHJzLnZhbHVlKSB7XG4gICAgc2V0QXR0cihlbG0sICd2YWx1ZScsIGF0dHJzLnZhbHVlKTtcbiAgfVxuICBmb3IgKGtleSBpbiBvbGRBdHRycykge1xuICAgIGlmIChpc1VuZGVmKGF0dHJzW2tleV0pKSB7XG4gICAgICBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRBdHRyIChlbCwga2V5LCB2YWx1ZSkge1xuICBpZiAoZWwudGFnTmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5BdHRyKGtleSkpIHtcbiAgICAvLyBzZXQgYXR0cmlidXRlIGZvciBibGFuayB2YWx1ZVxuICAgIC8vIGUuZy4gPG9wdGlvbiBkaXNhYmxlZD5TZWxlY3Qgb25lPC9vcHRpb24+XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGVjaG5pY2FsbHkgYWxsb3dmdWxsc2NyZWVuIGlzIGEgYm9vbGVhbiBhdHRyaWJ1dGUgZm9yIDxpZnJhbWU+LFxuICAgICAgLy8gYnV0IEZsYXNoIGV4cGVjdHMgYSB2YWx1ZSBvZiBcInRydWVcIiB3aGVuIHVzZWQgb24gPGVtYmVkPiB0YWdcbiAgICAgIHZhbHVlID0ga2V5ID09PSAnYWxsb3dmdWxsc2NyZWVuJyAmJiBlbC50YWdOYW1lID09PSAnRU1CRUQnXG4gICAgICAgID8gJ3RydWUnXG4gICAgICAgIDoga2V5O1xuICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBjb252ZXJ0RW51bWVyYXRlZFZhbHVlKGtleSwgdmFsdWUpKTtcbiAgfSBlbHNlIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmlidXRlTlMoeGxpbmtOUywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlU2V0QXR0ciAoZWwsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gIzcxMzg6IElFMTAgJiAxMSBmaXJlcyBpbnB1dCBldmVudCB3aGVuIHNldHRpbmcgcGxhY2Vob2xkZXIgb25cbiAgICAvLyA8dGV4dGFyZWE+Li4uIGJsb2NrIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhbmQgcmVtb3ZlIHRoZSBibG9ja2VyXG4gICAgLy8gaW1tZWRpYXRlbHkuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKFxuICAgICAgaXNJRSAmJiAhaXNJRTkgJiZcbiAgICAgIGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgJiZcbiAgICAgIGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiB2YWx1ZSAhPT0gJycgJiYgIWVsLl9faWVwaFxuICAgICkge1xuICAgICAgdmFyIGJsb2NrZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXIpO1xuICAgICAgfTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcik7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGVsLl9faWVwaCA9IHRydWU7IC8qIElFIHBsYWNlaG9sZGVyIHBhdGNoZWQgKi9cbiAgICB9XG4gICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICB9XG59XG5cbnZhciBhdHRycyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVBdHRycyxcbiAgdXBkYXRlOiB1cGRhdGVBdHRyc1xufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcbiAgaWYgKFxuICAgIGlzVW5kZWYoZGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICBpc1VuZGVmKGRhdGEuY2xhc3MpICYmIChcbiAgICAgIGlzVW5kZWYob2xkRGF0YSkgfHwgKFxuICAgICAgICBpc1VuZGVmKG9sZERhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5jbGFzcylcbiAgICAgIClcbiAgICApXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNscyA9IGdlbkNsYXNzRm9yVm5vZGUodm5vZGUpO1xuXG4gIC8vIGhhbmRsZSB0cmFuc2l0aW9uIGNsYXNzZXNcbiAgdmFyIHRyYW5zaXRpb25DbGFzcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcztcbiAgaWYgKGlzRGVmKHRyYW5zaXRpb25DbGFzcykpIHtcbiAgICBjbHMgPSBjb25jYXQoY2xzLCBzdHJpbmdpZnlDbGFzcyh0cmFuc2l0aW9uQ2xhc3MpKTtcbiAgfVxuXG4gIC8vIHNldCB0aGUgY2xhc3NcbiAgaWYgKGNscyAhPT0gZWwuX3ByZXZDbGFzcykge1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjbHMpO1xuICAgIGVsLl9wcmV2Q2xhc3MgPSBjbHM7XG4gIH1cbn1cblxudmFyIGtsYXNzID0ge1xuICBjcmVhdGU6IHVwZGF0ZUNsYXNzLFxuICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG59O1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW4gc29tZSBjYXNlcywgdGhlIGV2ZW50IHVzZWQgaGFzIHRvIGJlIGRldGVybWluZWQgYXQgcnVudGltZVxuLy8gc28gd2UgdXNlZCBzb21lIHJlc2VydmVkIHRva2VucyBkdXJpbmcgY29tcGlsZS5cbnZhciBSQU5HRV9UT0tFTiA9ICdfX3InO1xudmFyIENIRUNLQk9YX1JBRElPX1RPS0VOID0gJ19fYyc7XG5cbi8qICAqL1xuXG4vLyBub3JtYWxpemUgdi1tb2RlbCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXG4vLyBpdCdzIGltcG9ydGFudCB0byBwbGFjZSB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGluIHRoZSBhcnJheSBiZWNhdXNlXG4vLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4vLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzIChvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcbiAgICAvLyBJRSBpbnB1dFt0eXBlPXJhbmdlXSBvbmx5IHN1cHBvcnRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgdmFyIGV2ZW50ID0gaXNJRSA/ICdjaGFuZ2UnIDogJ2lucHV0JztcbiAgICBvbltldmVudF0gPSBbXS5jb25jYXQob25bUkFOR0VfVE9LRU5dLCBvbltldmVudF0gfHwgW10pO1xuICAgIGRlbGV0ZSBvbltSQU5HRV9UT0tFTl07XG4gIH1cbiAgLy8gVGhpcyB3YXMgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBmaXggIzQ1MjEgYnV0IG5vIGxvbmdlciBuZWNlc3NhcnlcbiAgLy8gYWZ0ZXIgMi41LiBLZWVwaW5nIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0IHdpdGggZ2VuZXJhdGVkIGNvZGUgZnJvbSA8IDIuNFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSkpIHtcbiAgICBvbi5jaGFuZ2UgPSBbXS5jb25jYXQob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dLCBvbi5jaGFuZ2UgfHwgW10pO1xuICAgIGRlbGV0ZSBvbltDSEVDS0JPWF9SQURJT19UT0tFTl07XG4gIH1cbn1cblxudmFyIHRhcmdldCQxO1xuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciQxIChldmVudCwgaGFuZGxlciwgY2FwdHVyZSkge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldCQxOyAvLyBzYXZlIGN1cnJlbnQgdGFyZ2V0IGVsZW1lbnQgaW4gY2xvc3VyZVxuICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgIHZhciByZXMgPSBoYW5kbGVyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgcmVtb3ZlJDIoZXZlbnQsIG9uY2VIYW5kbGVyLCBjYXB0dXJlLCBfdGFyZ2V0KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gIzk0NDY6IEZpcmVmb3ggPD0gNTMgKGluIHBhcnRpY3VsYXIsIEVTUiA1MikgaGFzIGluY29ycmVjdCBFdmVudC50aW1lU3RhbXBcbi8vIGltcGxlbWVudGF0aW9uIGFuZCBkb2VzIG5vdCBmaXJlIG1pY3JvdGFza3MgaW4gYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbiwgc29cbi8vIHNhZmUgdG8gZXhjbHVkZS5cbnZhciB1c2VNaWNyb3Rhc2tGaXggPSBpc1VzaW5nTWljcm9UYXNrICYmICEoaXNGRiAmJiBOdW1iZXIoaXNGRlsxXSkgPD0gNTMpO1xuXG5mdW5jdGlvbiBhZGQkMSAoXG4gIG5hbWUsXG4gIGhhbmRsZXIsXG4gIGNhcHR1cmUsXG4gIHBhc3NpdmVcbikge1xuICAvLyBhc3luYyBlZGdlIGNhc2UgIzY1NjY6IGlubmVyIGNsaWNrIGV2ZW50IHRyaWdnZXJzIHBhdGNoLCBldmVudCBoYW5kbGVyXG4gIC8vIGF0dGFjaGVkIHRvIG91dGVyIGVsZW1lbnQgZHVyaW5nIHBhdGNoLCBhbmQgdHJpZ2dlcmVkIGFnYWluLiBUaGlzXG4gIC8vIGhhcHBlbnMgYmVjYXVzZSBicm93c2VycyBmaXJlIG1pY3JvdGFzayB0aWNrcyBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLlxuICAvLyB0aGUgc29sdXRpb24gaXMgc2ltcGxlOiB3ZSBzYXZlIHRoZSB0aW1lc3RhbXAgd2hlbiBhIGhhbmRsZXIgaXMgYXR0YWNoZWQsXG4gIC8vIGFuZCB0aGUgaGFuZGxlciB3b3VsZCBvbmx5IGZpcmUgaWYgdGhlIGV2ZW50IHBhc3NlZCB0byBpdCB3YXMgZmlyZWRcbiAgLy8gQUZURVIgaXQgd2FzIGF0dGFjaGVkLlxuICBpZiAodXNlTWljcm90YXNrRml4KSB7XG4gICAgdmFyIGF0dGFjaGVkVGltZXN0YW1wID0gY3VycmVudEZsdXNoVGltZXN0YW1wO1xuICAgIHZhciBvcmlnaW5hbCA9IGhhbmRsZXI7XG4gICAgaGFuZGxlciA9IG9yaWdpbmFsLl93cmFwcGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm8gYnViYmxpbmcsIHNob3VsZCBhbHdheXMgZmlyZS5cbiAgICAgICAgLy8gdGhpcyBpcyBqdXN0IGEgc2FmZXR5IG5ldCBpbiBjYXNlIGV2ZW50LnRpbWVTdGFtcCBpcyB1bnJlbGlhYmxlIGluXG4gICAgICAgIC8vIGNlcnRhaW4gd2VpcmQgZW52aXJvbm1lbnRzLi4uXG4gICAgICAgIGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgLy8gZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgaGFuZGxlciBhdHRhY2htZW50XG4gICAgICAgIGUudGltZVN0YW1wID49IGF0dGFjaGVkVGltZXN0YW1wIHx8XG4gICAgICAgIC8vIGJhaWwgZm9yIGVudmlyb25tZW50cyB0aGF0IGhhdmUgYnVnZ3kgZXZlbnQudGltZVN0YW1wIGltcGxlbWVudGF0aW9uc1xuICAgICAgICAvLyAjOTQ2MiBpT1MgOSBidWc6IGV2ZW50LnRpbWVTdGFtcCBpcyAwIGFmdGVyIGhpc3RvcnkucHVzaFN0YXRlXG4gICAgICAgIC8vICM5NjgxIFF0V2ViRW5naW5lIGV2ZW50LnRpbWVTdGFtcCBpcyBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICBlLnRpbWVTdGFtcCA8PSAwIHx8XG4gICAgICAgIC8vICM5NDQ4IGJhaWwgaWYgZXZlbnQgaXMgZmlyZWQgaW4gYW5vdGhlciBkb2N1bWVudCBpbiBhIG11bHRpLXBhZ2VcbiAgICAgICAgLy8gZWxlY3Ryb24vbncuanMgYXBwLCBzaW5jZSBldmVudC50aW1lU3RhbXAgd2lsbCBiZSB1c2luZyBhIGRpZmZlcmVudFxuICAgICAgICAvLyBzdGFydGluZyByZWZlcmVuY2VcbiAgICAgICAgZS50YXJnZXQub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgdGFyZ2V0JDEuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIsXG4gICAgc3VwcG9ydHNQYXNzaXZlXG4gICAgICA/IHsgY2FwdHVyZTogY2FwdHVyZSwgcGFzc2l2ZTogcGFzc2l2ZSB9XG4gICAgICA6IGNhcHR1cmVcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDIgKFxuICBuYW1lLFxuICBoYW5kbGVyLFxuICBjYXB0dXJlLFxuICBfdGFyZ2V0XG4pIHtcbiAgKF90YXJnZXQgfHwgdGFyZ2V0JDEpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgbmFtZSxcbiAgICBoYW5kbGVyLl93cmFwcGVyIHx8IGhhbmRsZXIsXG4gICAgY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVET01MaXN0ZW5lcnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLm9uKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEub24pKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG9uID0gdm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdGFyZ2V0JDEgPSB2bm9kZS5lbG07XG4gIG5vcm1hbGl6ZUV2ZW50cyhvbik7XG4gIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCQxLCByZW1vdmUkMiwgY3JlYXRlT25jZUhhbmRsZXIkMSwgdm5vZGUuY29udGV4dCk7XG4gIHRhcmdldCQxID0gdW5kZWZpbmVkO1xufVxuXG52YXIgZXZlbnRzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTUxpc3RlbmVycyxcbiAgdXBkYXRlOiB1cGRhdGVET01MaXN0ZW5lcnNcbn07XG5cbi8qICAqL1xuXG52YXIgc3ZnQ29udGFpbmVyO1xuXG5mdW5jdGlvbiB1cGRhdGVET01Qcm9wcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEuZG9tUHJvcHMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5kb21Qcm9wcykpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIga2V5LCBjdXI7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRQcm9wcyA9IG9sZFZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gIHZhciBwcm9wcyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYocHJvcHMuX19vYl9fKSkge1xuICAgIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyA9IGV4dGVuZCh7fSwgcHJvcHMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICBpZiAoIShrZXkgaW4gcHJvcHMpKSB7XG4gICAgICBlbG1ba2V5XSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoa2V5IGluIHByb3BzKSB7XG4gICAgY3VyID0gcHJvcHNba2V5XTtcbiAgICAvLyBpZ25vcmUgY2hpbGRyZW4gaWYgdGhlIG5vZGUgaGFzIHRleHRDb250ZW50IG9yIGlubmVySFRNTCxcbiAgICAvLyBhcyB0aGVzZSB3aWxsIHRocm93IGF3YXkgZXhpc3RpbmcgRE9NIG5vZGVzIGFuZCBjYXVzZSByZW1vdmFsIGVycm9yc1xuICAgIC8vIG9uIHN1YnNlcXVlbnQgcGF0Y2hlcyAoIzMzNjApXG4gICAgaWYgKGtleSA9PT0gJ3RleHRDb250ZW50JyB8fCBrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBpZiAodm5vZGUuY2hpbGRyZW4pIHsgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoID0gMDsgfVxuICAgICAgaWYgKGN1ciA9PT0gb2xkUHJvcHNba2V5XSkgeyBjb250aW51ZSB9XG4gICAgICAvLyAjNjYwMSB3b3JrIGFyb3VuZCBDaHJvbWUgdmVyc2lvbiA8PSA1NSBidWcgd2hlcmUgc2luZ2xlIHRleHROb2RlXG4gICAgICAvLyByZXBsYWNlZCBieSBpbm5lckhUTUwvdGV4dENvbnRlbnQgcmV0YWlucyBpdHMgcGFyZW50Tm9kZSBwcm9wZXJ0eVxuICAgICAgaWYgKGVsbS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICd2YWx1ZScgJiYgZWxtLnRhZ05hbWUgIT09ICdQUk9HUkVTUycpIHtcbiAgICAgIC8vIHN0b3JlIHZhbHVlIGFzIF92YWx1ZSBhcyB3ZWxsIHNpbmNlXG4gICAgICAvLyBub24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIHN0cmluZ2lmaWVkXG4gICAgICBlbG0uX3ZhbHVlID0gY3VyO1xuICAgICAgLy8gYXZvaWQgcmVzZXR0aW5nIGN1cnNvciBwb3NpdGlvbiB3aGVuIHZhbHVlIGlzIHRoZSBzYW1lXG4gICAgICB2YXIgc3RyQ3VyID0gaXNVbmRlZihjdXIpID8gJycgOiBTdHJpbmcoY3VyKTtcbiAgICAgIGlmIChzaG91bGRVcGRhdGVWYWx1ZShlbG0sIHN0ckN1cikpIHtcbiAgICAgICAgZWxtLnZhbHVlID0gc3RyQ3VyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJyAmJiBpc1NWRyhlbG0udGFnTmFtZSkgJiYgaXNVbmRlZihlbG0uaW5uZXJIVE1MKSkge1xuICAgICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGlubmVySFRNTCBmb3IgU1ZHIGVsZW1lbnRzXG4gICAgICBzdmdDb250YWluZXIgPSBzdmdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBzdmdDb250YWluZXIuaW5uZXJIVE1MID0gXCI8c3ZnPlwiICsgY3VyICsgXCI8L3N2Zz5cIjtcbiAgICAgIHZhciBzdmcgPSBzdmdDb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgIHdoaWxlIChlbG0uZmlyc3RDaGlsZCkge1xuICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHN2Zy5maXJzdENoaWxkKSB7XG4gICAgICAgIGVsbS5hcHBlbmRDaGlsZChzdmcuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIHNraXAgdGhlIHVwZGF0ZSBpZiBvbGQgYW5kIG5ldyBWRE9NIHN0YXRlIGlzIHRoZSBzYW1lLlxuICAgICAgLy8gYHZhbHVlYCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYmVjYXVzZSB0aGUgRE9NIHZhbHVlIG1heSBiZSB0ZW1wb3JhcmlseVxuICAgICAgLy8gb3V0IG9mIHN5bmMgd2l0aCBWRE9NIHN0YXRlIGR1ZSB0byBmb2N1cywgY29tcG9zaXRpb24gYW5kIG1vZGlmaWVycy5cbiAgICAgIC8vIFRoaXMgICM0NTIxIGJ5IHNraXBwaW5nIHRoZSB1bm5lY2VzYXJyeSBgY2hlY2tlZGAgdXBkYXRlLlxuICAgICAgY3VyICE9PSBvbGRQcm9wc1trZXldXG4gICAgKSB7XG4gICAgICAvLyBzb21lIHByb3BlcnR5IHVwZGF0ZXMgY2FuIHRocm93XG4gICAgICAvLyBlLmcuIGB2YWx1ZWAgb24gPHByb2dyZXNzPiB3LyBub24tZmluaXRlIHZhbHVlXG4gICAgICB0cnkge1xuICAgICAgICBlbG1ba2V5XSA9IGN1cjtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG59XG5cbi8vIGNoZWNrIHBsYXRmb3Jtcy93ZWIvdXRpbC9hdHRycy5qcyBhY2NlcHRWYWx1ZVxuXG5cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVZhbHVlIChlbG0sIGNoZWNrVmFsKSB7XG4gIHJldHVybiAoIWVsbS5jb21wb3NpbmcgJiYgKFxuICAgIGVsbS50YWdOYW1lID09PSAnT1BUSU9OJyB8fFxuICAgIGlzTm90SW5Gb2N1c0FuZERpcnR5KGVsbSwgY2hlY2tWYWwpIHx8XG4gICAgaXNEaXJ0eVdpdGhNb2RpZmllcnMoZWxtLCBjaGVja1ZhbClcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNOb3RJbkZvY3VzQW5kRGlydHkgKGVsbSwgY2hlY2tWYWwpIHtcbiAgLy8gcmV0dXJuIHRydWUgd2hlbiB0ZXh0Ym94ICgubnVtYmVyIGFuZCAudHJpbSkgbG9zZXMgZm9jdXMgYW5kIGl0cyB2YWx1ZSBpc1xuICAvLyBub3QgZXF1YWwgdG8gdGhlIHVwZGF0ZWQgdmFsdWVcbiAgdmFyIG5vdEluRm9jdXMgPSB0cnVlO1xuICAvLyAjNjE1N1xuICAvLyB3b3JrIGFyb3VuZCBJRSBidWcgd2hlbiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbiBhbiBpZnJhbWVcbiAgdHJ5IHsgbm90SW5Gb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVsbTsgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIG5vdEluRm9jdXMgJiYgZWxtLnZhbHVlICE9PSBjaGVja1ZhbFxufVxuXG5mdW5jdGlvbiBpc0RpcnR5V2l0aE1vZGlmaWVycyAoZWxtLCBuZXdWYWwpIHtcbiAgdmFyIHZhbHVlID0gZWxtLnZhbHVlO1xuICB2YXIgbW9kaWZpZXJzID0gZWxtLl92TW9kaWZpZXJzOyAvLyBpbmplY3RlZCBieSB2LW1vZGVsIHJ1bnRpbWVcbiAgaWYgKGlzRGVmKG1vZGlmaWVycykpIHtcbiAgICBpZiAobW9kaWZpZXJzLm51bWJlcikge1xuICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKSAhPT0gdG9OdW1iZXIobmV3VmFsKVxuICAgIH1cbiAgICBpZiAobW9kaWZpZXJzLnRyaW0pIHtcbiAgICAgIHJldHVybiB2YWx1ZS50cmltKCkgIT09IG5ld1ZhbC50cmltKClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlICE9PSBuZXdWYWxcbn1cblxudmFyIGRvbVByb3BzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTVByb3BzLFxuICB1cGRhdGU6IHVwZGF0ZURPTVByb3BzXG59O1xuXG4vKiAgKi9cblxudmFyIHBhcnNlU3R5bGVUZXh0ID0gY2FjaGVkKGZ1bmN0aW9uIChjc3NUZXh0KSB7XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGxpc3REZWxpbWl0ZXIgPSAvOyg/IVteKF0qXFwpKS9nO1xuICB2YXIgcHJvcGVydHlEZWxpbWl0ZXIgPSAvOiguKykvO1xuICBjc3NUZXh0LnNwbGl0KGxpc3REZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdmFyIHRtcCA9IGl0ZW0uc3BsaXQocHJvcGVydHlEZWxpbWl0ZXIpO1xuICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJlc1t0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vLyBtZXJnZSBzdGF0aWMgYW5kIGR5bmFtaWMgc3R5bGUgZGF0YSBvbiB0aGUgc2FtZSB2bm9kZVxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVEYXRhIChkYXRhKSB7XG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyhkYXRhLnN0eWxlKTtcbiAgLy8gc3RhdGljIHN0eWxlIGlzIHByZS1wcm9jZXNzZWQgaW50byBhbiBvYmplY3QgZHVyaW5nIGNvbXBpbGF0aW9uXG4gIC8vIGFuZCBpcyBhbHdheXMgYSBmcmVzaCBvYmplY3QsIHNvIGl0J3Mgc2FmZSB0byBtZXJnZSBpbnRvIGl0XG4gIHJldHVybiBkYXRhLnN0YXRpY1N0eWxlXG4gICAgPyBleHRlbmQoZGF0YS5zdGF0aWNTdHlsZSwgc3R5bGUpXG4gICAgOiBzdHlsZVxufVxuXG4vLyBub3JtYWxpemUgcG9zc2libGUgYXJyYXkgLyBzdHJpbmcgdmFsdWVzIGludG8gT2JqZWN0XG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZUJpbmRpbmcgKGJpbmRpbmdTdHlsZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShiaW5kaW5nU3R5bGUpKSB7XG4gICAgcmV0dXJuIHRvT2JqZWN0KGJpbmRpbmdTdHlsZSlcbiAgfVxuICBpZiAodHlwZW9mIGJpbmRpbmdTdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGFyc2VTdHlsZVRleHQoYmluZGluZ1N0eWxlKVxuICB9XG4gIHJldHVybiBiaW5kaW5nU3R5bGVcbn1cblxuLyoqXG4gKiBwYXJlbnQgY29tcG9uZW50IHN0eWxlIHNob3VsZCBiZSBhZnRlciBjaGlsZCdzXG4gKiBzbyB0aGF0IHBhcmVudCBjb21wb25lbnQncyBzdHlsZSBjb3VsZCBvdmVycmlkZSBpdFxuICovXG5mdW5jdGlvbiBnZXRTdHlsZSAodm5vZGUsIGNoZWNrQ2hpbGQpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgc3R5bGVEYXRhO1xuXG4gIGlmIChjaGVja0NoaWxkKSB7XG4gICAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUuZGF0YSAmJlxuICAgICAgICAoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKGNoaWxkTm9kZS5kYXRhKSlcbiAgICAgICkge1xuICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICgoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKHZub2RlLmRhdGEpKSkge1xuICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gIH1cblxuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB3aGlsZSAoKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudCkpIHtcbiAgICBpZiAocGFyZW50Tm9kZS5kYXRhICYmIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEocGFyZW50Tm9kZS5kYXRhKSkpIHtcbiAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbnZhciBjc3NWYXJSRSA9IC9eLS0vO1xudmFyIGltcG9ydGFudFJFID0gL1xccyohaW1wb3J0YW50JC87XG52YXIgc2V0UHJvcCA9IGZ1bmN0aW9uIChlbCwgbmFtZSwgdmFsKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoY3NzVmFyUkUudGVzdChuYW1lKSkge1xuICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbCk7XG4gIH0gZWxzZSBpZiAoaW1wb3J0YW50UkUudGVzdCh2YWwpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoaHlwaGVuYXRlKG5hbWUpLCB2YWwucmVwbGFjZShpbXBvcnRhbnRSRSwgJycpLCAnaW1wb3J0YW50Jyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIC8vIFN1cHBvcnQgdmFsdWVzIGFycmF5IGNyZWF0ZWQgYnkgYXV0b3ByZWZpeGVyLCBlLmcuXG4gICAgICAvLyB7ZGlzcGxheTogW1wiLXdlYmtpdC1ib3hcIiwgXCItbXMtZmxleGJveFwiLCBcImZsZXhcIl19XG4gICAgICAvLyBTZXQgdGhlbSBvbmUgYnkgb25lLCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBvbmx5IHNldCB0aG9zZSBpdCBjYW4gcmVjb2duaXplXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbFtpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHZlbmRvck5hbWVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XG5cbnZhciBlbXB0eVN0eWxlO1xudmFyIG5vcm1hbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAocHJvcCkge1xuICBlbXB0eVN0eWxlID0gZW1wdHlTdHlsZSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTtcbiAgcHJvcCA9IGNhbWVsaXplKHByb3ApO1xuICBpZiAocHJvcCAhPT0gJ2ZpbHRlcicgJiYgKHByb3AgaW4gZW1wdHlTdHlsZSkpIHtcbiAgICByZXR1cm4gcHJvcFxuICB9XG4gIHZhciBjYXBOYW1lID0gcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmVuZG9yTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbmFtZSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcbiAgICBpZiAobmFtZSBpbiBlbXB0eVN0eWxlKSB7XG4gICAgICByZXR1cm4gbmFtZVxuICAgIH1cbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG5cbiAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxuICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihvbGREYXRhLnN0eWxlKVxuICApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjdXIsIG5hbWU7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFN0YXRpY1N0eWxlID0gb2xkRGF0YS5zdGF0aWNTdHlsZTtcbiAgdmFyIG9sZFN0eWxlQmluZGluZyA9IG9sZERhdGEubm9ybWFsaXplZFN0eWxlIHx8IG9sZERhdGEuc3R5bGUgfHwge307XG5cbiAgLy8gaWYgc3RhdGljIHN0eWxlIGV4aXN0cywgc3R5bGViaW5kaW5nIGFscmVhZHkgbWVyZ2VkIGludG8gaXQgd2hlbiBkb2luZyBub3JtYWxpemVTdHlsZURhdGFcbiAgdmFyIG9sZFN0eWxlID0gb2xkU3RhdGljU3R5bGUgfHwgb2xkU3R5bGVCaW5kaW5nO1xuXG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyh2bm9kZS5kYXRhLnN0eWxlKSB8fCB7fTtcblxuICAvLyBzdG9yZSBub3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXG4gIC8vIG1ha2Ugc3VyZSB0byBjbG9uZSBpdCBpZiBpdCdzIHJlYWN0aXZlLCBzaW5jZSB0aGUgdXNlciBsaWtlbHkgd2FudHNcbiAgLy8gdG8gbXV0YXRlIGl0LlxuICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRTdHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXylcbiAgICA/IGV4dGVuZCh7fSwgc3R5bGUpXG4gICAgOiBzdHlsZTtcblxuICB2YXIgbmV3U3R5bGUgPSBnZXRTdHlsZSh2bm9kZSwgdHJ1ZSk7XG5cbiAgZm9yIChuYW1lIGluIG9sZFN0eWxlKSB7XG4gICAgaWYgKGlzVW5kZWYobmV3U3R5bGVbbmFtZV0pKSB7XG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCAnJyk7XG4gICAgfVxuICB9XG4gIGZvciAobmFtZSBpbiBuZXdTdHlsZSkge1xuICAgIGN1ciA9IG5ld1N0eWxlW25hbWVdO1xuICAgIGlmIChjdXIgIT09IG9sZFN0eWxlW25hbWVdKSB7XG4gICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgc2V0UHJvcChlbCwgbmFtZSwgY3VyID09IG51bGwgPyAnJyA6IGN1cik7XG4gICAgfVxuICB9XG59XG5cbnZhciBzdHlsZSA9IHtcbiAgY3JlYXRlOiB1cGRhdGVTdHlsZSxcbiAgdXBkYXRlOiB1cGRhdGVTdHlsZVxufTtcblxuLyogICovXG5cbnZhciB3aGl0ZXNwYWNlUkUgPSAvXFxzKy87XG5cbi8qKlxuICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gYWRkQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiO1xuICAgIGlmIChjdXIuaW5kZXhPZignICcgKyBjbHMgKyAnICcpIDwgMCkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIChjdXIgKyBjbHMpLnRyaW0oKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgIH1cbiAgICBpZiAoIWVsLmNsYXNzTGlzdC5sZW5ndGgpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAgICB2YXIgdGFyID0gJyAnICsgY2xzICsgJyAnO1xuICAgIHdoaWxlIChjdXIuaW5kZXhPZih0YXIpID49IDApIHtcbiAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICB9XG4gICAgY3VyID0gY3VyLnRyaW0oKTtcbiAgICBpZiAoY3VyKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY3VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpb24gKGRlZiQkMSkge1xuICBpZiAoIWRlZiQkMSkge1xuICAgIHJldHVyblxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgZGVmJCQxID09PSAnb2JqZWN0Jykge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBpZiAoZGVmJCQxLmNzcyAhPT0gZmFsc2UpIHtcbiAgICAgIGV4dGVuZChyZXMsIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZiQkMS5uYW1lIHx8ICd2JykpO1xuICAgIH1cbiAgICBleHRlbmQocmVzLCBkZWYkJDEpO1xuICAgIHJldHVybiByZXNcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmJCQxID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBhdXRvQ3NzVHJhbnNpdGlvbihkZWYkJDEpXG4gIH1cbn1cblxudmFyIGF1dG9Dc3NUcmFuc2l0aW9uID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB7XG4gICAgZW50ZXJDbGFzczogKG5hbWUgKyBcIi1lbnRlclwiKSxcbiAgICBlbnRlclRvQ2xhc3M6IChuYW1lICsgXCItZW50ZXItdG9cIiksXG4gICAgZW50ZXJBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1lbnRlci1hY3RpdmVcIiksXG4gICAgbGVhdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZVwiKSxcbiAgICBsZWF2ZVRvQ2xhc3M6IChuYW1lICsgXCItbGVhdmUtdG9cIiksXG4gICAgbGVhdmVBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZS1hY3RpdmVcIilcbiAgfVxufSk7XG5cbnZhciBoYXNUcmFuc2l0aW9uID0gaW5Ccm93c2VyICYmICFpc0lFOTtcbnZhciBUUkFOU0lUSU9OID0gJ3RyYW5zaXRpb24nO1xudmFyIEFOSU1BVElPTiA9ICdhbmltYXRpb24nO1xuXG4vLyBUcmFuc2l0aW9uIHByb3BlcnR5L2V2ZW50IHNuaWZmaW5nXG52YXIgdHJhbnNpdGlvblByb3AgPSAndHJhbnNpdGlvbic7XG52YXIgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3RyYW5zaXRpb25lbmQnO1xudmFyIGFuaW1hdGlvblByb3AgPSAnYW5pbWF0aW9uJztcbnZhciBhbmltYXRpb25FbmRFdmVudCA9ICdhbmltYXRpb25lbmQnO1xuaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh3aW5kb3cub250cmFuc2l0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICB3aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgdHJhbnNpdGlvblByb3AgPSAnV2Via2l0VHJhbnNpdGlvbic7XG4gICAgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICB9XG4gIGlmICh3aW5kb3cub25hbmltYXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgIHdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGFuaW1hdGlvblByb3AgPSAnV2Via2l0QW5pbWF0aW9uJztcbiAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xuICB9XG59XG5cbi8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxudmFyIHJhZiA9IGluQnJvd3NlclxuICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXG4gICAgOiBzZXRUaW1lb3V0XG4gIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKGZuKSB7IHJldHVybiBmbigpOyB9O1xuXG5mdW5jdGlvbiBuZXh0RnJhbWUgKGZuKSB7XG4gIHJhZihmdW5jdGlvbiAoKSB7XG4gICAgcmFmKGZuKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFRyYW5zaXRpb25DbGFzcyAoZWwsIGNscykge1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXMgfHwgKGVsLl90cmFuc2l0aW9uQ2xhc3NlcyA9IFtdKTtcbiAgaWYgKHRyYW5zaXRpb25DbGFzc2VzLmluZGV4T2YoY2xzKSA8IDApIHtcbiAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5wdXNoKGNscyk7XG4gICAgYWRkQ2xhc3MoZWwsIGNscyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICByZW1vdmUoZWwuX3RyYW5zaXRpb25DbGFzc2VzLCBjbHMpO1xuICB9XG4gIHJlbW92ZUNsYXNzKGVsLCBjbHMpO1xufVxuXG5mdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMgKFxuICBlbCxcbiAgZXhwZWN0ZWRUeXBlLFxuICBjYlxuKSB7XG4gIHZhciByZWYgPSBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKTtcbiAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgdmFyIHRpbWVvdXQgPSByZWYudGltZW91dDtcbiAgdmFyIHByb3BDb3VudCA9IHJlZi5wcm9wQ291bnQ7XG4gIGlmICghdHlwZSkgeyByZXR1cm4gY2IoKSB9XG4gIHZhciBldmVudCA9IHR5cGUgPT09IFRSQU5TSVRJT04gPyB0cmFuc2l0aW9uRW5kRXZlbnQgOiBhbmltYXRpb25FbmRFdmVudDtcbiAgdmFyIGVuZGVkID0gMDtcbiAgdmFyIGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG4gICAgY2IoKTtcbiAgfTtcbiAgdmFyIG9uRW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZS50YXJnZXQgPT09IGVsKSB7XG4gICAgICBpZiAoKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcbiAgICAgICAgZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcbiAgICAgIGVuZCgpO1xuICAgIH1cbiAgfSwgdGltZW91dCArIDEpO1xuICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG59XG5cbnZhciB0cmFuc2Zvcm1SRSA9IC9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87XG5cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25JbmZvIChlbCwgZXhwZWN0ZWRUeXBlKSB7XG4gIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIC8vIEpTRE9NIG1heSByZXR1cm4gdW5kZWZpbmVkIGZvciB0cmFuc2l0aW9uIHByb3BlcnRpZXNcbiAgdmFyIHRyYW5zaXRpb25EZWxheXMgPSAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0RlbGF5J10gfHwgJycpLnNwbGl0KCcsICcpO1xuICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XG4gIHZhciBhbmltYXRpb25EZWxheXMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciBhbmltYXRpb25EdXJhdGlvbnMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XG5cbiAgdmFyIHR5cGU7XG4gIHZhciB0aW1lb3V0ID0gMDtcbiAgdmFyIHByb3BDb3VudCA9IDA7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZXhwZWN0ZWRUeXBlID09PSBUUkFOU0lUSU9OKSB7XG4gICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IFRSQU5TSVRJT047XG4gICAgICB0aW1lb3V0ID0gdHJhbnNpdGlvblRpbWVvdXQ7XG4gICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBBTklNQVRJT04pIHtcbiAgICBpZiAoYW5pbWF0aW9uVGltZW91dCA+IDApIHtcbiAgICAgIHR5cGUgPSBBTklNQVRJT047XG4gICAgICB0aW1lb3V0ID0gYW5pbWF0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgdHlwZSA9IHRpbWVvdXQgPiAwXG4gICAgICA/IHRyYW5zaXRpb25UaW1lb3V0ID4gYW5pbWF0aW9uVGltZW91dFxuICAgICAgICA/IFRSQU5TSVRJT05cbiAgICAgICAgOiBBTklNQVRJT05cbiAgICAgIDogbnVsbDtcbiAgICBwcm9wQ291bnQgPSB0eXBlXG4gICAgICA/IHR5cGUgPT09IFRSQU5TSVRJT05cbiAgICAgICAgPyB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgICA6IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgIDogMDtcbiAgfVxuICB2YXIgaGFzVHJhbnNmb3JtID1cbiAgICB0eXBlID09PSBUUkFOU0lUSU9OICYmXG4gICAgdHJhbnNmb3JtUkUudGVzdChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnUHJvcGVydHknXSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogdHlwZSxcbiAgICB0aW1lb3V0OiB0aW1lb3V0LFxuICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgIGhhc1RyYW5zZm9ybTogaGFzVHJhbnNmb3JtXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGltZW91dCAoZGVsYXlzLCBkdXJhdGlvbnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgd2hpbGUgKGRlbGF5cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgZGVsYXlzID0gZGVsYXlzLmNvbmNhdChkZWxheXMpO1xuICB9XG5cbiAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGR1cmF0aW9ucy5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICByZXR1cm4gdG9NcyhkKSArIHRvTXMoZGVsYXlzW2ldKVxuICB9KSlcbn1cblxuLy8gT2xkIHZlcnNpb25zIG9mIENocm9taXVtIChiZWxvdyA2MS4wLjMxNjMuMTAwKSBmb3JtYXRzIGZsb2F0aW5nIHBvaW50ZXIgbnVtYmVyc1xuLy8gaW4gYSBsb2NhbGUtZGVwZW5kZW50IHdheSwgdXNpbmcgYSBjb21tYSBpbnN0ZWFkIG9mIGEgZG90LlxuLy8gSWYgY29tbWEgaXMgbm90IHJlcGxhY2VkIHdpdGggYSBkb3QsIHRoZSBpbnB1dCB3aWxsIGJlIHJvdW5kZWQgZG93biAoaS5lLiBhY3Rpbmdcbi8vIGFzIGEgZmxvb3IgZnVuY3Rpb24pIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvcnNcbmZ1bmN0aW9uIHRvTXMgKHMpIHtcbiAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKCcsJywgJy4nKSkgKiAxMDAwXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnRlciAodm5vZGUsIHRvZ2dsZURpc3BsYXkpIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuXG4gIC8vIGNhbGwgbGVhdmUgY2FsbGJhY2sgbm93XG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICBlbC5fbGVhdmVDYi5jYW5jZWxsZWQgPSB0cnVlO1xuICAgIGVsLl9sZWF2ZUNiKCk7XG4gIH1cblxuICB2YXIgZGF0YSA9IHJlc29sdmVUcmFuc2l0aW9uKHZub2RlLmRhdGEudHJhbnNpdGlvbik7XG4gIGlmIChpc1VuZGVmKGRhdGEpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgdmFyIGVudGVyQ2xhc3MgPSBkYXRhLmVudGVyQ2xhc3M7XG4gIHZhciBlbnRlclRvQ2xhc3MgPSBkYXRhLmVudGVyVG9DbGFzcztcbiAgdmFyIGVudGVyQWN0aXZlQ2xhc3MgPSBkYXRhLmVudGVyQWN0aXZlQ2xhc3M7XG4gIHZhciBhcHBlYXJDbGFzcyA9IGRhdGEuYXBwZWFyQ2xhc3M7XG4gIHZhciBhcHBlYXJUb0NsYXNzID0gZGF0YS5hcHBlYXJUb0NsYXNzO1xuICB2YXIgYXBwZWFyQWN0aXZlQ2xhc3MgPSBkYXRhLmFwcGVhckFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlRW50ZXIgPSBkYXRhLmJlZm9yZUVudGVyO1xuICB2YXIgZW50ZXIgPSBkYXRhLmVudGVyO1xuICB2YXIgYWZ0ZXJFbnRlciA9IGRhdGEuYWZ0ZXJFbnRlcjtcbiAgdmFyIGVudGVyQ2FuY2VsbGVkID0gZGF0YS5lbnRlckNhbmNlbGxlZDtcbiAgdmFyIGJlZm9yZUFwcGVhciA9IGRhdGEuYmVmb3JlQXBwZWFyO1xuICB2YXIgYXBwZWFyID0gZGF0YS5hcHBlYXI7XG4gIHZhciBhZnRlckFwcGVhciA9IGRhdGEuYWZ0ZXJBcHBlYXI7XG4gIHZhciBhcHBlYXJDYW5jZWxsZWQgPSBkYXRhLmFwcGVhckNhbmNlbGxlZDtcbiAgdmFyIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICAvLyBhY3RpdmVJbnN0YW5jZSB3aWxsIGFsd2F5cyBiZSB0aGUgPHRyYW5zaXRpb24+IGNvbXBvbmVudCBtYW5hZ2luZyB0aGlzXG4gIC8vIHRyYW5zaXRpb24uIE9uZSBlZGdlIGNhc2UgdG8gY2hlY2sgaXMgd2hlbiB0aGUgPHRyYW5zaXRpb24+IGlzIHBsYWNlZFxuICAvLyBhcyB0aGUgcm9vdCBub2RlIG9mIGEgY2hpbGQgY29tcG9uZW50LiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBjaGVja1xuICAvLyA8dHJhbnNpdGlvbj4ncyBwYXJlbnQgZm9yIGFwcGVhciBjaGVjay5cbiAgdmFyIGNvbnRleHQgPSBhY3RpdmVJbnN0YW5jZTtcbiAgdmFyIHRyYW5zaXRpb25Ob2RlID0gYWN0aXZlSW5zdGFuY2UuJHZub2RlO1xuICB3aGlsZSAodHJhbnNpdGlvbk5vZGUgJiYgdHJhbnNpdGlvbk5vZGUucGFyZW50KSB7XG4gICAgY29udGV4dCA9IHRyYW5zaXRpb25Ob2RlLmNvbnRleHQ7XG4gICAgdHJhbnNpdGlvbk5vZGUgPSB0cmFuc2l0aW9uTm9kZS5wYXJlbnQ7XG4gIH1cblxuICB2YXIgaXNBcHBlYXIgPSAhY29udGV4dC5faXNNb3VudGVkIHx8ICF2bm9kZS5pc1Jvb3RJbnNlcnQ7XG5cbiAgaWYgKGlzQXBwZWFyICYmICFhcHBlYXIgJiYgYXBwZWFyICE9PSAnJykge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIHN0YXJ0Q2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJDbGFzc1xuICAgID8gYXBwZWFyQ2xhc3NcbiAgICA6IGVudGVyQ2xhc3M7XG4gIHZhciBhY3RpdmVDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgPyBhcHBlYXJBY3RpdmVDbGFzc1xuICAgIDogZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIHRvQ2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJUb0NsYXNzXG4gICAgPyBhcHBlYXJUb0NsYXNzXG4gICAgOiBlbnRlclRvQ2xhc3M7XG5cbiAgdmFyIGJlZm9yZUVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYmVmb3JlQXBwZWFyIHx8IGJlZm9yZUVudGVyKVxuICAgIDogYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKHR5cGVvZiBhcHBlYXIgPT09ICdmdW5jdGlvbicgPyBhcHBlYXIgOiBlbnRlcilcbiAgICA6IGVudGVyO1xuICB2YXIgYWZ0ZXJFbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKGFmdGVyQXBwZWFyIHx8IGFmdGVyRW50ZXIpXG4gICAgOiBhZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWRIb29rID0gaXNBcHBlYXJcbiAgICA/IChhcHBlYXJDYW5jZWxsZWQgfHwgZW50ZXJDYW5jZWxsZWQpXG4gICAgOiBlbnRlckNhbmNlbGxlZDtcblxuICB2YXIgZXhwbGljaXRFbnRlckR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmVudGVyXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZXhwbGljaXRFbnRlckR1cmF0aW9uICE9IG51bGwpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiwgJ2VudGVyJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG5cbiAgdmFyIGNiID0gZWwuX2VudGVyQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgfVxuICAgICAgZW50ZXJDYW5jZWxsZWRIb29rICYmIGVudGVyQ2FuY2VsbGVkSG9vayhlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyRW50ZXJIb29rICYmIGFmdGVyRW50ZXJIb29rKGVsKTtcbiAgICB9XG4gICAgZWwuX2VudGVyQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoIXZub2RlLmRhdGEuc2hvdykge1xuICAgIC8vIHJlbW92ZSBwZW5kaW5nIGxlYXZlIGVsZW1lbnQgb24gZW50ZXIgYnkgaW5qZWN0aW5nIGFuIGluc2VydCBob29rXG4gICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICAgIHZhciBwZW5kaW5nTm9kZSA9IHBhcmVudCAmJiBwYXJlbnQuX3BlbmRpbmcgJiYgcGFyZW50Ll9wZW5kaW5nW3Zub2RlLmtleV07XG4gICAgICBpZiAocGVuZGluZ05vZGUgJiZcbiAgICAgICAgcGVuZGluZ05vZGUudGFnID09PSB2bm9kZS50YWcgJiZcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiXG4gICAgICApIHtcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiKCk7XG4gICAgICB9XG4gICAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzdGFydCBlbnRlciB0cmFuc2l0aW9uXG4gIGJlZm9yZUVudGVySG9vayAmJiBiZWZvcmVFbnRlckhvb2soZWwpO1xuICBpZiAoZXhwZWN0c0NTUykge1xuICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbikpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0RW50ZXJEdXJhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHZub2RlLmRhdGEuc2hvdykge1xuICAgIHRvZ2dsZURpc3BsYXkgJiYgdG9nZ2xlRGlzcGxheSgpO1xuICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgfVxuXG4gIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgIGNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVhdmUgKHZub2RlLCBybSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBlbnRlciBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSkge1xuICAgIGVsLl9lbnRlckNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2VudGVyQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gcm0oKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjc3MgPSBkYXRhLmNzcztcbiAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gIHZhciBsZWF2ZUNsYXNzID0gZGF0YS5sZWF2ZUNsYXNzO1xuICB2YXIgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3M7XG4gIHZhciBsZWF2ZUFjdGl2ZUNsYXNzID0gZGF0YS5sZWF2ZUFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlTGVhdmUgPSBkYXRhLmJlZm9yZUxlYXZlO1xuICB2YXIgbGVhdmUgPSBkYXRhLmxlYXZlO1xuICB2YXIgYWZ0ZXJMZWF2ZSA9IGRhdGEuYWZ0ZXJMZWF2ZTtcbiAgdmFyIGxlYXZlQ2FuY2VsbGVkID0gZGF0YS5sZWF2ZUNhbmNlbGxlZDtcbiAgdmFyIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmU7XG4gIHZhciBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGxlYXZlKTtcblxuICB2YXIgZXhwbGljaXRMZWF2ZUR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmxlYXZlXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNEZWYoZXhwbGljaXRMZWF2ZUR1cmF0aW9uKSkge1xuICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uLCAnbGVhdmUnLCB2bm9kZSk7XG4gIH1cblxuICB2YXIgY2IgPSBlbC5fbGVhdmVDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUuX3BlbmRpbmcpIHtcbiAgICAgIGVsLnBhcmVudE5vZGUuX3BlbmRpbmdbdm5vZGUua2V5XSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgfVxuICAgICAgbGVhdmVDYW5jZWxsZWQgJiYgbGVhdmVDYW5jZWxsZWQoZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBybSgpO1xuICAgICAgYWZ0ZXJMZWF2ZSAmJiBhZnRlckxlYXZlKGVsKTtcbiAgICB9XG4gICAgZWwuX2xlYXZlQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoZGVsYXlMZWF2ZSkge1xuICAgIGRlbGF5TGVhdmUocGVyZm9ybUxlYXZlKTtcbiAgfSBlbHNlIHtcbiAgICBwZXJmb3JtTGVhdmUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcmZvcm1MZWF2ZSAoKSB7XG4gICAgLy8gdGhlIGRlbGF5ZWQgbGVhdmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGxlZFxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICAvLyByZWNvcmQgbGVhdmluZyBlbGVtZW50XG4gICAgaWYgKCF2bm9kZS5kYXRhLnNob3cgJiYgZWwucGFyZW50Tm9kZSkge1xuICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgPSB7fSkpWyh2bm9kZS5rZXkpXSA9IHZub2RlO1xuICAgIH1cbiAgICBiZWZvcmVMZWF2ZSAmJiBiZWZvcmVMZWF2ZShlbCk7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgaWYgKCFjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgICAgaWYgKCF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRMZWF2ZUR1cmF0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxlYXZlICYmIGxlYXZlKGVsLCBjYik7XG4gICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICBjYigpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBvbmx5IHVzZWQgaW4gZGV2IG1vZGVcbmZ1bmN0aW9uIGNoZWNrRHVyYXRpb24gKHZhbCwgbmFtZSwgdm5vZGUpIHtcbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIFwiICtcbiAgICAgIFwiZ290IFwiICsgKEpTT04uc3RyaW5naWZ5KHZhbCkpICsgXCIuXCIsXG4gICAgICB2bm9kZS5jb250ZXh0XG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc05hTih2YWwpKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIE5hTiAtIFwiICtcbiAgICAgICd0aGUgZHVyYXRpb24gZXhwcmVzc2lvbiBtaWdodCBiZSBpbmNvcnJlY3QuJyxcbiAgICAgIHZub2RlLmNvbnRleHRcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbiAodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHRyYW5zaXRpb24gaG9vaydzIGFyZ3VtZW50IGxlbmd0aC4gVGhlIGhvb2sgbWF5IGJlOlxuICogLSBhIG1lcmdlZCBob29rIChpbnZva2VyKSB3aXRoIHRoZSBvcmlnaW5hbCBpbiAuZm5zXG4gKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAqIC0gYSBwbGFpbiBmdW5jdGlvbiAoLmxlbmd0aClcbiAqL1xuZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aCAoZm4pIHtcbiAgaWYgKGlzVW5kZWYoZm4pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdmFyIGludm9rZXJGbnMgPSBmbi5mbnM7XG4gIGlmIChpc0RlZihpbnZva2VyRm5zKSkge1xuICAgIC8vIGludm9rZXJcbiAgICByZXR1cm4gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChcbiAgICAgIEFycmF5LmlzQXJyYXkoaW52b2tlckZucylcbiAgICAgICAgPyBpbnZva2VyRm5zWzBdXG4gICAgICAgIDogaW52b2tlckZuc1xuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKGZuLl9sZW5ndGggfHwgZm4ubGVuZ3RoKSA+IDFcbiAgfVxufVxuXG5mdW5jdGlvbiBfZW50ZXIgKF8sIHZub2RlKSB7XG4gIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICBlbnRlcih2bm9kZSk7XG4gIH1cbn1cblxudmFyIHRyYW5zaXRpb24gPSBpbkJyb3dzZXIgPyB7XG4gIGNyZWF0ZTogX2VudGVyLFxuICBhY3RpdmF0ZTogX2VudGVyLFxuICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSQkMSAodm5vZGUsIHJtKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgICBsZWF2ZSh2bm9kZSwgcm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBybSgpO1xuICAgIH1cbiAgfVxufSA6IHt9O1xuXG52YXIgcGxhdGZvcm1Nb2R1bGVzID0gW1xuICBhdHRycyxcbiAga2xhc3MsXG4gIGV2ZW50cyxcbiAgZG9tUHJvcHMsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uXG5dO1xuXG4vKiAgKi9cblxuLy8gdGhlIGRpcmVjdGl2ZSBtb2R1bGUgc2hvdWxkIGJlIGFwcGxpZWQgbGFzdCwgYWZ0ZXIgYWxsXG4vLyBidWlsdC1pbiBtb2R1bGVzIGhhdmUgYmVlbiBhcHBsaWVkLlxudmFyIG1vZHVsZXMgPSBwbGF0Zm9ybU1vZHVsZXMuY29uY2F0KGJhc2VNb2R1bGVzKTtcblxudmFyIHBhdGNoID0gY3JlYXRlUGF0Y2hGdW5jdGlvbih7IG5vZGVPcHM6IG5vZGVPcHMsIG1vZHVsZXM6IG1vZHVsZXMgfSk7XG5cbi8qKlxuICogTm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IGxpa2UgYXR0YWNoaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIEVsZW1lbnRzLlxuICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKGlzSUU5KSB7XG4gIC8vIGh0dHA6Ly93d3cubWF0dHM0MTEuY29tL3Bvc3QvaW50ZXJuZXQtZXhwbG9yZXItOS1vbmlucHV0L1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoZWwgJiYgZWwudm1vZGVsKSB7XG4gICAgICB0cmlnZ2VyKGVsLCAnaW5wdXQnKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgZGlyZWN0aXZlID0ge1xuICBpbnNlcnRlZDogZnVuY3Rpb24gaW5zZXJ0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHtcbiAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgLy8gIzY5MDNcbiAgICAgIGlmIChvbGRWbm9kZS5lbG0gJiYgIW9sZFZub2RlLmVsbS5fdk9wdGlvbnMpIHtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyZWN0aXZlLmNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICB9XG4gICAgICBlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09ICd0ZXh0YXJlYScgfHwgaXNUZXh0SW5wdXRUeXBlKGVsLnR5cGUpKSB7XG4gICAgICBlbC5fdk1vZGlmaWVycyA9IGJpbmRpbmcubW9kaWZpZXJzO1xuICAgICAgaWYgKCFiaW5kaW5nLm1vZGlmaWVycy5sYXp5KSB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBvbkNvbXBvc2l0aW9uU3RhcnQpO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAvLyBTYWZhcmkgPCAxMC4yICYgVUlXZWJWaWV3IGRvZXNuJ3QgZmlyZSBjb21wb3NpdGlvbmVuZCB3aGVuXG4gICAgICAgIC8vIHN3aXRjaGluZyBmb2N1cyBiZWZvcmUgY29uZmlybWluZyBjb21wb3NpdGlvbiBjaG9pY2VcbiAgICAgICAgLy8gdGhpcyBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzb21lIGJyb3dzZXJzIGUuZy4gaU9TIENocm9tZVxuICAgICAgICAvLyBmaXJlcyBcImNoYW5nZVwiIGluc3RlYWQgb2YgXCJpbnB1dFwiIG9uIGF1dG9jb21wbGV0ZS5cbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXNJRTkpIHtcbiAgICAgICAgICBlbC52bW9kZWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIGNvbXBvbmVudFVwZGF0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAvLyBpbiBjYXNlIHRoZSBvcHRpb25zIHJlbmRlcmVkIGJ5IHYtZm9yIGhhdmUgY2hhbmdlZCxcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgdmFsdWUgaXMgb3V0LW9mLXN5bmMgd2l0aCB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAgICAgIC8vIGRldGVjdCBzdWNoIGNhc2VzIGFuZCBmaWx0ZXIgb3V0IHZhbHVlcyB0aGF0IG5vIGxvbmdlciBoYXMgYSBtYXRjaGluZ1xuICAgICAgLy8gb3B0aW9uIGluIHRoZSBET00uXG4gICAgICB2YXIgcHJldk9wdGlvbnMgPSBlbC5fdk9wdGlvbnM7XG4gICAgICB2YXIgY3VyT3B0aW9ucyA9IGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKTtcbiAgICAgIGlmIChjdXJPcHRpb25zLnNvbWUoZnVuY3Rpb24gKG8sIGkpIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHByZXZPcHRpb25zW2ldKTsgfSkpIHtcbiAgICAgICAgLy8gdHJpZ2dlciBjaGFuZ2UgZXZlbnQgaWZcbiAgICAgICAgLy8gbm8gbWF0Y2hpbmcgb3B0aW9uIGZvdW5kIGZvciBhdCBsZWFzdCBvbmUgdmFsdWVcbiAgICAgICAgdmFyIG5lZWRSZXNldCA9IGVsLm11bHRpcGxlXG4gICAgICAgICAgPyBiaW5kaW5nLnZhbHVlLnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGhhc05vTWF0Y2hpbmdPcHRpb24odiwgY3VyT3B0aW9ucyk7IH0pXG4gICAgICAgICAgOiBiaW5kaW5nLnZhbHVlICE9PSBiaW5kaW5nLm9sZFZhbHVlICYmIGhhc05vTWF0Y2hpbmdPcHRpb24oYmluZGluZy52YWx1ZSwgY3VyT3B0aW9ucyk7XG4gICAgICAgIGlmIChuZWVkUmVzZXQpIHtcbiAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtcbiAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzSUUgfHwgaXNFZGdlKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWN0dWFsbHlTZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gIHZhciB2YWx1ZSA9IGJpbmRpbmcudmFsdWU7XG4gIHZhciBpc011bHRpcGxlID0gZWwubXVsdGlwbGU7XG4gIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiPHNlbGVjdCBtdWx0aXBsZSB2LW1vZGVsPVxcXCJcIiArIChiaW5kaW5nLmV4cHJlc3Npb24pICsgXCJcXFwiPiBcIiArXG4gICAgICBcImV4cGVjdHMgYW4gQXJyYXkgdmFsdWUgZm9yIGl0cyBiaW5kaW5nLCBidXQgZ290IFwiICsgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpKSxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2VsZWN0ZWQsIG9wdGlvbjtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbC5vcHRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9wdGlvbiA9IGVsLm9wdGlvbnNbaV07XG4gICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgIHNlbGVjdGVkID0gbG9vc2VJbmRleE9mKHZhbHVlLCBnZXRWYWx1ZShvcHRpb24pKSA+IC0xO1xuICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsb29zZUVxdWFsKGdldFZhbHVlKG9wdGlvbiksIHZhbHVlKSkge1xuICAgICAgICBpZiAoZWwuc2VsZWN0ZWRJbmRleCAhPT0gaSkge1xuICAgICAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICBlbC5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzTm9NYXRjaGluZ09wdGlvbiAodmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZXZlcnkoZnVuY3Rpb24gKG8pIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHZhbHVlKTsgfSlcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUgKG9wdGlvbikge1xuICByZXR1cm4gJ192YWx1ZScgaW4gb3B0aW9uXG4gICAgPyBvcHRpb24uX3ZhbHVlXG4gICAgOiBvcHRpb24udmFsdWVcbn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0IChlKSB7XG4gIGUudGFyZ2V0LmNvbXBvc2luZyA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQgKGUpIHtcbiAgLy8gcHJldmVudCB0cmlnZ2VyaW5nIGFuIGlucHV0IGV2ZW50IGZvciBubyByZWFzb25cbiAgaWYgKCFlLnRhcmdldC5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgZS50YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gIHRyaWdnZXIoZS50YXJnZXQsICdpbnB1dCcpO1xufVxuXG5mdW5jdGlvbiB0cmlnZ2VyIChlbCwgdHlwZSkge1xuICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJyk7XG4gIGUuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xufVxuXG4vKiAgKi9cblxuLy8gcmVjdXJzaXZlbHkgc2VhcmNoIGZvciBwb3NzaWJsZSB0cmFuc2l0aW9uIGRlZmluZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgcm9vdFxuZnVuY3Rpb24gbG9jYXRlTm9kZSAodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmICghdm5vZGUuZGF0YSB8fCAhdm5vZGUuZGF0YS50cmFuc2l0aW9uKVxuICAgID8gbG9jYXRlTm9kZSh2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpXG4gICAgOiB2bm9kZVxufVxuXG52YXIgc2hvdyA9IHtcbiAgYmluZDogZnVuY3Rpb24gYmluZCAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSByZWYudmFsdWU7XG5cbiAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgIHZhciB0cmFuc2l0aW9uJCQxID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgdmFyIG9yaWdpbmFsRGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA9XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXk7XG4gICAgaWYgKHZhbHVlICYmIHRyYW5zaXRpb24kJDEpIHtcbiAgICAgIHZub2RlLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IG9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUgKGVsLCByZWYsIHZub2RlKSB7XG4gICAgdmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuICAgIHZhciBvbGRWYWx1ZSA9IHJlZi5vbGRWYWx1ZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdmFsdWUgPT09ICFvbGRWYWx1ZSkgeyByZXR1cm4gfVxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICBpZiAodHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVhdmUodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gZWwuX192T3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZCAoXG4gICAgZWwsXG4gICAgYmluZGluZyxcbiAgICB2bm9kZSxcbiAgICBvbGRWbm9kZSxcbiAgICBpc0Rlc3Ryb3lcbiAgKSB7XG4gICAgaWYgKCFpc0Rlc3Ryb3kpIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcGxhdGZvcm1EaXJlY3RpdmVzID0ge1xuICBtb2RlbDogZGlyZWN0aXZlLFxuICBzaG93OiBzaG93XG59O1xuXG4vKiAgKi9cblxudmFyIHRyYW5zaXRpb25Qcm9wcyA9IHtcbiAgbmFtZTogU3RyaW5nLFxuICBhcHBlYXI6IEJvb2xlYW4sXG4gIGNzczogQm9vbGVhbixcbiAgbW9kZTogU3RyaW5nLFxuICB0eXBlOiBTdHJpbmcsXG4gIGVudGVyQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVDbGFzczogU3RyaW5nLFxuICBlbnRlclRvQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVUb0NsYXNzOiBTdHJpbmcsXG4gIGVudGVyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVBY3RpdmVDbGFzczogU3RyaW5nLFxuICBhcHBlYXJDbGFzczogU3RyaW5nLFxuICBhcHBlYXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBhcHBlYXJUb0NsYXNzOiBTdHJpbmcsXG4gIGR1cmF0aW9uOiBbTnVtYmVyLCBTdHJpbmcsIE9iamVjdF1cbn07XG5cbi8vIGluIGNhc2UgdGhlIGNoaWxkIGlzIGFsc28gYW4gYWJzdHJhY3QgY29tcG9uZW50LCBlLmcuIDxrZWVwLWFsaXZlPlxuLy8gd2Ugd2FudCB0byByZWN1cnNpdmVseSByZXRyaWV2ZSB0aGUgcmVhbCBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWRcbmZ1bmN0aW9uIGdldFJlYWxDaGlsZCAodm5vZGUpIHtcbiAgdmFyIGNvbXBPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgaWYgKGNvbXBPcHRpb25zICYmIGNvbXBPcHRpb25zLkN0b3Iub3B0aW9ucy5hYnN0cmFjdCkge1xuICAgIHJldHVybiBnZXRSZWFsQ2hpbGQoZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChjb21wT3B0aW9ucy5jaGlsZHJlbikpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdFRyYW5zaXRpb25EYXRhIChjb21wKSB7XG4gIHZhciBkYXRhID0ge307XG4gIHZhciBvcHRpb25zID0gY29tcC4kb3B0aW9ucztcbiAgLy8gcHJvcHNcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMucHJvcHNEYXRhKSB7XG4gICAgZGF0YVtrZXldID0gY29tcFtrZXldO1xuICB9XG4gIC8vIGV2ZW50cy5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMgYW5kIHBhc3MgdGhlbSBkaXJlY3RseSB0byB0aGUgdHJhbnNpdGlvbiBtZXRob2RzXG4gIHZhciBsaXN0ZW5lcnMgPSBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIGZvciAodmFyIGtleSQxIGluIGxpc3RlbmVycykge1xuICAgIGRhdGFbY2FtZWxpemUoa2V5JDEpXSA9IGxpc3RlbmVyc1trZXkkMV07XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuZnVuY3Rpb24gcGxhY2Vob2xkZXIgKGgsIHJhd0NoaWxkKSB7XG4gIGlmICgvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHJhd0NoaWxkLnRhZykpIHtcbiAgICByZXR1cm4gaCgna2VlcC1hbGl2ZScsIHtcbiAgICAgIHByb3BzOiByYXdDaGlsZC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzUGFyZW50VHJhbnNpdGlvbiAodm5vZGUpIHtcbiAgd2hpbGUgKCh2bm9kZSA9IHZub2RlLnBhcmVudCkpIHtcbiAgICBpZiAodm5vZGUuZGF0YS50cmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1NhbWVDaGlsZCAoY2hpbGQsIG9sZENoaWxkKSB7XG4gIHJldHVybiBvbGRDaGlsZC5rZXkgPT09IGNoaWxkLmtleSAmJiBvbGRDaGlsZC50YWcgPT09IGNoaWxkLnRhZ1xufVxuXG52YXIgaXNOb3RUZXh0Tm9kZSA9IGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRhZyB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYyk7IH07XG5cbnZhciBpc1ZTaG93RGlyZWN0aXZlID0gZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQubmFtZSA9PT0gJ3Nob3cnOyB9O1xuXG52YXIgVHJhbnNpdGlvbiA9IHtcbiAgbmFtZTogJ3RyYW5zaXRpb24nLFxuICBwcm9wczogdHJhbnNpdGlvblByb3BzLFxuICBhYnN0cmFjdDogdHJ1ZSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHRleHQgbm9kZXMgKHBvc3NpYmxlIHdoaXRlc3BhY2VzKVxuICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGlzTm90VGV4dE5vZGUpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3YXJuIG11bHRpcGxlIGVsZW1lbnRzXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgd2FybihcbiAgICAgICAgJzx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQuIFVzZSAnICtcbiAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJyxcbiAgICAgICAgdGhpcy4kcGFyZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciBtb2RlID0gdGhpcy5tb2RlO1xuXG4gICAgLy8gd2FybiBpbnZhbGlkIG1vZGVcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgbW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJ1xuICAgICkge1xuICAgICAgd2FybihcbiAgICAgICAgJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHJhd0NoaWxkID0gY2hpbGRyZW5bMF07XG5cbiAgICAvLyBpZiB0aGlzIGlzIGEgY29tcG9uZW50IHJvb3Qgbm9kZSBhbmQgdGhlIGNvbXBvbmVudCdzXG4gICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgaWYgKGhhc1BhcmVudFRyYW5zaXRpb24odGhpcy4kdm5vZGUpKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0cmFuc2l0aW9uIGRhdGEgdG8gY2hpbGRcbiAgICAvLyB1c2UgZ2V0UmVhbENoaWxkKCkgdG8gaWdub3JlIGFic3RyYWN0IGNvbXBvbmVudHMgZS5nLiBrZWVwLWFsaXZlXG4gICAgdmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGVhdmluZykge1xuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgIH1cblxuICAgIC8vIGVuc3VyZSBhIGtleSB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgdm5vZGUgdHlwZSBhbmQgdG8gdGhpcyB0cmFuc2l0aW9uXG4gICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xuICAgIC8vIGR1cmluZyBlbnRlcmluZy5cbiAgICB2YXIgaWQgPSBcIl9fdHJhbnNpdGlvbi1cIiArICh0aGlzLl91aWQpICsgXCItXCI7XG4gICAgY2hpbGQua2V5ID0gY2hpbGQua2V5ID09IG51bGxcbiAgICAgID8gY2hpbGQuaXNDb21tZW50XG4gICAgICAgID8gaWQgKyAnY29tbWVudCdcbiAgICAgICAgOiBpZCArIGNoaWxkLnRhZ1xuICAgICAgOiBpc1ByaW1pdGl2ZShjaGlsZC5rZXkpXG4gICAgICAgID8gKFN0cmluZyhjaGlsZC5rZXkpLmluZGV4T2YoaWQpID09PSAwID8gY2hpbGQua2V5IDogaWQgKyBjaGlsZC5rZXkpXG4gICAgICAgIDogY2hpbGQua2V5O1xuXG4gICAgdmFyIGRhdGEgPSAoY2hpbGQuZGF0YSB8fCAoY2hpbGQuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcbiAgICB2YXIgb2xkUmF3Q2hpbGQgPSB0aGlzLl92bm9kZTtcbiAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuXG4gICAgLy8gbWFyayB2LXNob3dcbiAgICAvLyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIG1vZHVsZSBjYW4gaGFuZCBvdmVyIHRoZSBjb250cm9sIHRvIHRoZSBkaXJlY3RpdmVcbiAgICBpZiAoY2hpbGQuZGF0YS5kaXJlY3RpdmVzICYmIGNoaWxkLmRhdGEuZGlyZWN0aXZlcy5zb21lKGlzVlNob3dEaXJlY3RpdmUpKSB7XG4gICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9sZENoaWxkICYmXG4gICAgICBvbGRDaGlsZC5kYXRhICYmXG4gICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgIWlzQXN5bmNQbGFjZWhvbGRlcihvbGRDaGlsZCkgJiZcbiAgICAgIC8vICM2Njg3IGNvbXBvbmVudCByb290IGlzIGEgY29tbWVudCBub2RlXG4gICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmIG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcbiAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgIHZhciBvbGREYXRhID0gb2xkQ2hpbGQuZGF0YS50cmFuc2l0aW9uID0gZXh0ZW5kKHt9LCBkYXRhKTtcbiAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBkYXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcbiAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMkMS5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMkMS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xkUmF3Q2hpbGRcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsYXllZExlYXZlO1xuICAgICAgICB2YXIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkgeyBkZWxheWVkTGVhdmUoKTsgfTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnZGVsYXlMZWF2ZScsIGZ1bmN0aW9uIChsZWF2ZSkgeyBkZWxheWVkTGVhdmUgPSBsZWF2ZTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhd0NoaWxkXG4gIH1cbn07XG5cbi8qICAqL1xuXG52YXIgcHJvcHMgPSBleHRlbmQoe1xuICB0YWc6IFN0cmluZyxcbiAgbW92ZUNsYXNzOiBTdHJpbmdcbn0sIHRyYW5zaXRpb25Qcm9wcyk7XG5cbmRlbGV0ZSBwcm9wcy5tb2RlO1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0ge1xuICBwcm9wczogcHJvcHMsXG5cbiAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB1cGRhdGUgPSB0aGlzLl91cGRhdGU7XG4gICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh0aGlzJDEpO1xuICAgICAgLy8gZm9yY2UgcmVtb3ZpbmcgcGFzc1xuICAgICAgdGhpcyQxLl9fcGF0Y2hfXyhcbiAgICAgICAgdGhpcyQxLl92bm9kZSxcbiAgICAgICAgdGhpcyQxLmtlcHQsXG4gICAgICAgIGZhbHNlLCAvLyBoeWRyYXRpbmdcbiAgICAgICAgdHJ1ZSAvLyByZW1vdmVPbmx5ICghaW1wb3J0YW50LCBhdm9pZHMgdW5uZWNlc3NhcnkgbW92ZXMpXG4gICAgICApO1xuICAgICAgdGhpcyQxLl92bm9kZSA9IHRoaXMkMS5rZXB0O1xuICAgICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgICB1cGRhdGUuY2FsbCh0aGlzJDEsIHZub2RlLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3NwYW4nO1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdmFyIHRyYW5zaXRpb25EYXRhID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSByYXdDaGlsZHJlbltpXTtcbiAgICAgIGlmIChjLnRhZykge1xuICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goYyk7XG4gICAgICAgICAgbWFwW2Mua2V5XSA9IGNcbiAgICAgICAgICA7KGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHZhciBvcHRzID0gYy5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgIHZhciBuYW1lID0gb3B0cyA/IChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnIHx8ICcnKSA6IGMudGFnO1xuICAgICAgICAgIHdhcm4oKFwiPHRyYW5zaXRpb24tZ3JvdXA+IGNoaWxkcmVuIG11c3QgYmUga2V5ZWQ6IDxcIiArIG5hbWUgKyBcIj5cIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgdmFyIGtlcHQgPSBbXTtcbiAgICAgIHZhciByZW1vdmVkID0gW107XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwcmV2Q2hpbGRyZW4ubGVuZ3RoOyBpJDErKykge1xuICAgICAgICB2YXIgYyQxID0gcHJldkNoaWxkcmVuW2kkMV07XG4gICAgICAgIGMkMS5kYXRhLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgYyQxLmRhdGEucG9zID0gYyQxLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKG1hcFtjJDEua2V5XSkge1xuICAgICAgICAgIGtlcHQucHVzaChjJDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZWQucHVzaChjJDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmtlcHQgPSBoKHRhZywgbnVsbCwga2VwdCk7XG4gICAgICB0aGlzLnJlbW92ZWQgPSByZW1vdmVkO1xuICAgIH1cblxuICAgIHJldHVybiBoKHRhZywgbnVsbCwgY2hpbGRyZW4pXG4gIH0sXG5cbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCAoKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRyZW47XG4gICAgdmFyIG1vdmVDbGFzcyA9IHRoaXMubW92ZUNsYXNzIHx8ICgodGhpcy5uYW1lIHx8ICd2JykgKyAnLW1vdmUnKTtcbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8gdGhyZWUgbG9vcHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXG4gICAgLy8gaW4gZWFjaCBpdGVyYXRpb24gLSB3aGljaCBoZWxwcyBwcmV2ZW50IGxheW91dCB0aHJhc2hpbmcuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChjYWxsUGVuZGluZ0Nicyk7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChyZWNvcmRQb3NpdGlvbik7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChhcHBseVRyYW5zbGF0aW9uKTtcblxuICAgIC8vIGZvcmNlIHJlZmxvdyB0byBwdXQgZXZlcnl0aGluZyBpbiBwb3NpdGlvblxuICAgIC8vIGFzc2lnbiB0byB0aGlzIHRvIGF2b2lkIGJlaW5nIHJlbW92ZWQgaW4gdHJlZS1zaGFraW5nXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdGhpcy5fcmVmbG93ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoYy5kYXRhLm1vdmVkKSB7XG4gICAgICAgIHZhciBlbCA9IGMuZWxtO1xuICAgICAgICB2YXIgcyA9IGVsLnN0eWxlO1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcnO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgZWwuX21vdmVDYiA9IGZ1bmN0aW9uIGNiIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IGVsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFlIHx8IC90cmFuc2Zvcm0kLy50ZXN0KGUucHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kRXZlbnQsIGNiKTtcbiAgICAgICAgICAgIGVsLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc01vdmU6IGZ1bmN0aW9uIGhhc01vdmUgKGVsLCBtb3ZlQ2xhc3MpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFoYXNUcmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodGhpcy5faGFzTW92ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZVxuICAgICAgfVxuICAgICAgLy8gRGV0ZWN0IHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIHRoZSBtb3ZlIGNsYXNzIGFwcGxpZWQgaGFzXG4gICAgICAvLyBDU1MgdHJhbnNpdGlvbnMuIFNpbmNlIHRoZSBlbGVtZW50IG1heSBiZSBpbnNpZGUgYW4gZW50ZXJpbmdcbiAgICAgIC8vIHRyYW5zaXRpb24gYXQgdGhpcyB2ZXJ5IG1vbWVudCwgd2UgbWFrZSBhIGNsb25lIG9mIGl0IGFuZCByZW1vdmVcbiAgICAgIC8vIGFsbCBvdGhlciB0cmFuc2l0aW9uIGNsYXNzZXMgYXBwbGllZCB0byBlbnN1cmUgb25seSB0aGUgbW92ZSBjbGFzc1xuICAgICAgLy8gaXMgYXBwbGllZC5cbiAgICAgIHZhciBjbG9uZSA9IGVsLmNsb25lTm9kZSgpO1xuICAgICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgICBlbC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7IHJlbW92ZUNsYXNzKGNsb25lLCBjbHMpOyB9KTtcbiAgICAgIH1cbiAgICAgIGFkZENsYXNzKGNsb25lLCBtb3ZlQ2xhc3MpO1xuICAgICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuJGVsLmFwcGVuZENoaWxkKGNsb25lKTtcbiAgICAgIHZhciBpbmZvID0gZ2V0VHJhbnNpdGlvbkluZm8oY2xvbmUpO1xuICAgICAgdGhpcy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgcmV0dXJuICh0aGlzLl9oYXNNb3ZlID0gaW5mby5oYXNUcmFuc2Zvcm0pXG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBjYWxsUGVuZGluZ0NicyAoYykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9tb3ZlQ2IpIHtcbiAgICBjLmVsbS5fbW92ZUNiKCk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjLmVsbS5fZW50ZXJDYikge1xuICAgIGMuZWxtLl9lbnRlckNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24gKGMpIHtcbiAgYy5kYXRhLm5ld1BvcyA9IGMuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdW5jdGlvbiBhcHBseVRyYW5zbGF0aW9uIChjKSB7XG4gIHZhciBvbGRQb3MgPSBjLmRhdGEucG9zO1xuICB2YXIgbmV3UG9zID0gYy5kYXRhLm5ld1BvcztcbiAgdmFyIGR4ID0gb2xkUG9zLmxlZnQgLSBuZXdQb3MubGVmdDtcbiAgdmFyIGR5ID0gb2xkUG9zLnRvcCAtIG5ld1Bvcy50b3A7XG4gIGlmIChkeCB8fCBkeSkge1xuICAgIGMuZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgdmFyIHMgPSBjLmVsbS5zdHlsZTtcbiAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIgKyBkeCArIFwicHgsXCIgKyBkeSArIFwicHgpXCI7XG4gICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICB9XG59XG5cbnZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gIFRyYW5zaXRpb246IFRyYW5zaXRpb24sXG4gIFRyYW5zaXRpb25Hcm91cDogVHJhbnNpdGlvbkdyb3VwXG59O1xuXG4vKiAgKi9cblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBzcGVjaWZpYyB1dGlsc1xuVnVlLmNvbmZpZy5tdXN0VXNlUHJvcCA9IG11c3RVc2VQcm9wO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkVGFnID0gaXNSZXNlcnZlZFRhZztcblZ1ZS5jb25maWcuaXNSZXNlcnZlZEF0dHIgPSBpc1Jlc2VydmVkQXR0cjtcblZ1ZS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlID0gZ2V0VGFnTmFtZXNwYWNlO1xuVnVlLmNvbmZpZy5pc1Vua25vd25FbGVtZW50ID0gaXNVbmtub3duRWxlbWVudDtcblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBydW50aW1lIGRpcmVjdGl2ZXMgJiBjb21wb25lbnRzXG5leHRlbmQoVnVlLm9wdGlvbnMuZGlyZWN0aXZlcywgcGxhdGZvcm1EaXJlY3RpdmVzKTtcbmV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBwbGF0Zm9ybUNvbXBvbmVudHMpO1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHBhdGNoIGZ1bmN0aW9uXG5WdWUucHJvdG90eXBlLl9fcGF0Y2hfXyA9IGluQnJvd3NlciA/IHBhdGNoIDogbm9vcDtcblxuLy8gcHVibGljIG1vdW50IG1ldGhvZFxuVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICBlbCA9IGVsICYmIGluQnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG1vdW50Q29tcG9uZW50KHRoaXMsIGVsLCBoeWRyYXRpbmcpXG59O1xuXG4vLyBkZXZ0b29scyBnbG9iYWwgaG9va1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpbkJyb3dzZXIpIHtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgaWYgKGRldnRvb2xzKSB7XG4gICAgICAgIGRldnRvb2xzLmVtaXQoJ2luaXQnLCBWdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgICAgJ0Rvd25sb2FkIHRoZSBWdWUgRGV2dG9vbHMgZXh0ZW5zaW9uIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOlxcbicgK1xuICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWRldnRvb2xzJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgY29uZmlnLnByb2R1Y3Rpb25UaXAgIT09IGZhbHNlICYmXG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICApIHtcbiAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFxuICAgICAgICBcIllvdSBhcmUgcnVubmluZyBWdWUgaW4gZGV2ZWxvcG1lbnQgbW9kZS5cXG5cIiArXG4gICAgICAgIFwiTWFrZSBzdXJlIHRvIHR1cm4gb24gcHJvZHVjdGlvbiBtb2RlIHdoZW4gZGVwbG95aW5nIGZvciBwcm9kdWN0aW9uLlxcblwiICtcbiAgICAgICAgXCJTZWUgbW9yZSB0aXBzIGF0IGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2RlcGxveW1lbnQuaHRtbFwiXG4gICAgICApO1xuICAgIH1cbiAgfSwgMCk7XG59XG5cbi8qICAqL1xuXG5leHBvcnQgZGVmYXVsdCBWdWU7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0Vtb2ppLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MzRhZDk0NiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9FbW9qaS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0Vtb2ppLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzUzNGFkOTQ2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzUzNGFkOTQ2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9FbW9qaS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTM0YWQ5NDYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNTM0YWQ5NDYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL0Vtb2ppLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9FbW9qaS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9FbW9qaS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRW1vamkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUzNGFkOTQ2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQxNmU5MDg0JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL1BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdkMTZlOTA4NCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdkMTZlOTA4NCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMTZlOTA4NCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdkMTZlOTA4NCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvUGlja2VyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vUGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQxNmU5MDg0JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hbmNob3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MTE4ODEwNCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9hbmNob3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYW5jaG9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc1MTE4ODEwNCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc1MTE4ODEwNCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vYW5jaG9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTExODgxMDQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNTExODgxMDQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYW5jaG9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYW5jaG9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTExODgxMDQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NhdGVnb3J5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNzZjZGEwZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NhdGVnb3J5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzM3NmNkYTBlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzM3NmNkYTBlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc2Y2RhMGUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMzc2Y2RhMGUnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL2NhdGVnb3J5LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2F0ZWdvcnkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM3NmNkYTBlJlwiIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBBbmNob3JzIH0gZnJvbSAnLi9hbmNob3JzLnZ1ZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2F0ZWdvcnkgfSBmcm9tICcuL2NhdGVnb3J5LnZ1ZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHJldmlldyB9IGZyb20gJy4vcHJldmlldy52dWUnXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gJy4vc2VhcmNoLnZ1ZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2tpbnMgfSBmcm9tICcuL3NraW5zLnZ1ZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW1vamkgfSBmcm9tICcuL0Vtb2ppLnZ1ZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGlja2VyIH0gZnJvbSAnLi9QaWNrZXIudnVlJ1xuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNTA1NmMzMCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHJldmlldy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCczNTA1NmMzMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCczNTA1NmMzMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHJldmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzUwNTZjMzAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMzUwNTZjMzAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL3ByZXZpZXcudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3ByZXZpZXcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJldmlldy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJldmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzUwNTZjMzAmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3NlYXJjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGFkNDFiYjgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc2VhcmNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc2VhcmNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzRhZDQxYmI4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzRhZDQxYmI4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRhZDQxYmI4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzRhZDQxYmI4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvY29tcG9uZW50cy9zZWFyY2gudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NlYXJjaC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NlYXJjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGFkNDFiYjgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3NraW5zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYzYxNDg5NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NraW5zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzFjNjE0ODk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzFjNjE0ODk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9za2lucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWM2MTQ4OTQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWM2MTQ4OTQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL3NraW5zLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2tpbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFjNjE0ODk0JlwiIiwiaW1wb3J0IHN0b3JlIGZyb20gJy4vdXRpbHMvc3RvcmUnXG5pbXBvcnQgeyB1bmNvbXByZXNzIH0gZnJvbSAnLi91dGlscy9kYXRhJ1xuaW1wb3J0IGZyZXF1ZW50bHkgZnJvbSAnLi91dGlscy9mcmVxdWVudGx5J1xuXG5leHBvcnQge1xuICBQaWNrZXIsXG4gIEVtb2ppLFxuICBBbmNob3JzLFxuICBQcmV2aWV3LFxuICBTZWFyY2gsXG4gIENhdGVnb3J5LFxuICBTa2lucyxcbn0gZnJvbSAnLi9jb21wb25lbnRzJ1xuXG5leHBvcnQgeyBFbW9qaUluZGV4LCBFbW9qaVZpZXcsIEVtb2ppRGF0YSwgc2FuaXRpemUgfSBmcm9tICcuL3V0aWxzL2Vtb2ppLWRhdGEnXG5leHBvcnQgeyB1bmNvbXByZXNzLCBzdG9yZSwgZnJlcXVlbnRseSB9XG4iLCJjb25zdCBfU3RyaW5nID0gU3RyaW5nXG5cbmV4cG9ydCBkZWZhdWx0IF9TdHJpbmcuZnJvbUNvZGVQb2ludCB8fFxuICBmdW5jdGlvbiBzdHJpbmdGcm9tQ29kZVBvaW50KCkge1xuICAgIHZhciBNQVhfU0laRSA9IDB4NDAwMFxuICAgIHZhciBjb2RlVW5pdHMgPSBbXVxuICAgIHZhciBoaWdoU3Vycm9nYXRlXG4gICAgdmFyIGxvd1N1cnJvZ2F0ZVxuICAgIHZhciBpbmRleCA9IC0xXG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIHZhciByZXN1bHQgPSAnJ1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pXG4gICAgICBpZiAoXG4gICAgICAgICFpc0Zpbml0ZShjb2RlUG9pbnQpIHx8IC8vIGBOYU5gLCBgK0luZmluaXR5YCwgb3IgYC1JbmZpbml0eWBcbiAgICAgICAgY29kZVBvaW50IDwgMCB8fCAvLyBub3QgYSB2YWxpZCBVbmljb2RlIGNvZGUgcG9pbnRcbiAgICAgICAgY29kZVBvaW50ID4gMHgxMGZmZmYgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG4gICAgICAgIE1hdGguZmxvb3IoY29kZVBvaW50KSAhPSBjb2RlUG9pbnQgLy8gbm90IGFuIGludGVnZXJcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQ6ICcgKyBjb2RlUG9pbnQpXG4gICAgICB9XG4gICAgICBpZiAoY29kZVBvaW50IDw9IDB4ZmZmZikge1xuICAgICAgICAvLyBCTVAgY29kZSBwb2ludFxuICAgICAgICBjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW4gc3Vycm9nYXRlIGhhbHZlc1xuICAgICAgICAvLyBodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuICAgICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgICBoaWdoU3Vycm9nYXRlID0gKGNvZGVQb2ludCA+PiAxMCkgKyAweGQ4MDBcbiAgICAgICAgbG93U3Vycm9nYXRlID0gKGNvZGVQb2ludCAlIDB4NDAwKSArIDB4ZGMwMFxuICAgICAgICBjb2RlVW5pdHMucHVzaChoaWdoU3Vycm9nYXRlLCBsb3dTdXJyb2dhdGUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggKyAxID09PSBsZW5ndGggfHwgY29kZVVuaXRzLmxlbmd0aCA+IE1BWF9TSVpFKSB7XG4gICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cylcbiAgICAgICAgY29kZVVuaXRzLmxlbmd0aCA9IDBcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG4iLCJjb25zdCBTVkdzID0ge1xuICBhY3Rpdml0eTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEyIDBDNS4zNzMgMCAwIDUuMzcyIDAgMTJjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMiA2LjYyOCAwIDEyLTUuMzczIDEyLTEyIDAtNi42MjgtNS4zNzItMTItMTItMTJtOS45NDkgMTFIMTcuMDVjLjIyNC0yLjUyNyAxLjIzMi00Ljc3MyAxLjk2OC02LjExM0E5Ljk2NiA5Ljk2NiAwIDAgMSAyMS45NDkgMTFNMTMgMTFWMi4wNTFhOS45NDUgOS45NDUgMCAwIDEgNC40MzIgMS41NjRjLS44NTggMS40OTEtMi4xNTYgNC4yMi0yLjM5MiA3LjM4NUgxM3ptLTIgMEg4Ljk2MWMtLjIzOC0zLjE2NS0xLjUzNi01Ljg5NC0yLjM5My03LjM4NUE5Ljk1IDkuOTUgMCAwIDEgMTEgMi4wNTFWMTF6bTAgMnY4Ljk0OWE5LjkzNyA5LjkzNyAwIDAgMS00LjQzMi0xLjU2NGMuODU3LTEuNDkyIDIuMTU1LTQuMjIxIDIuMzkzLTcuMzg1SDExem00LjA0IDBjLjIzNiAzLjE2NCAxLjUzNCA1Ljg5MyAyLjM5MiA3LjM4NUE5LjkyIDkuOTIgMCAwIDEgMTMgMjEuOTQ5VjEzaDIuMDR6TTQuOTgyIDQuODg3QzUuNzE4IDYuMjI3IDYuNzI2IDguNDczIDYuOTUxIDExaC00LjlhOS45NzcgOS45NzcgMCAwIDEgMi45MzEtNi4xMTNNMi4wNTEgMTNoNC45Yy0uMjI2IDIuNTI3LTEuMjMzIDQuNzcxLTEuOTY5IDYuMTEzQTkuOTcyIDkuOTcyIDAgMCAxIDIuMDUxIDEzbTE2Ljk2NyA2LjExM2MtLjczNS0xLjM0Mi0xLjc0NC0zLjU4Ni0xLjk2OC02LjExM2g0Ljg5OWE5Ljk2MSA5Ljk2MSAwIDAgMS0yLjkzMSA2LjExM1wiLz48L3N2Zz5gLFxuXG4gIGN1c3RvbTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMi4wMDAwMDAsIDEuMDAwMDAwKVwiPjxyZWN0IGlkPVwiUmVjdGFuZ2xlXCIgeD1cIjhcIiB5PVwiMFwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjIxXCIgcng9XCIxLjVcIj48L3JlY3Q+PHJlY3QgaWQ9XCJSZWN0YW5nbGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoOS44NDMsIDEwLjU0OSkgcm90YXRlKDYwKSB0cmFuc2xhdGUoLTkuODQzLCAtMTAuNTQ5KSBcIiB4PVwiOC4zNDNcIiB5PVwiMC4wNDlcIiB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIyMVwiIHJ4PVwiMS41XCI+PC9yZWN0PjxyZWN0IGlkPVwiUmVjdGFuZ2xlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDkuODQzLCAxMC41NDkpIHJvdGF0ZSgtNjApIHRyYW5zbGF0ZSgtOS44NDMsIC0xMC41NDkpIFwiIHg9XCI4LjM0M1wiIHk9XCIwLjA0OVwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjIxXCIgcng9XCIxLjVcIj48L3JlY3Q+PC9nPjwvc3ZnPmAsXG5cbiAgZmxhZ3M6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0wIDBsNi4wODQgMjRIOEwxLjkxNiAwek0yMSA1aC00bC0xLTRINGwzIDEyaDNsMSA0aDEzTDIxIDV6TTYuNTYzIDNoNy44NzVsMiA4SDguNTYzbC0yLTh6bTguODMyIDEwbC0yLjg1NiAxLjkwNEwxMi4wNjMgMTNoMy4zMzJ6TTE5IDEzbC0xLjUtNmgxLjkzOGwyIDhIMTZsMy0yelwiLz48L3N2Zz5gLFxuXG4gIGZvb2RzOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTcgNC45NzhjLTEuODM4IDAtMi44NzYuMzk2LTMuNjguOTM0LjUxMy0xLjE3MiAxLjc2OC0yLjkzNCA0LjY4LTIuOTM0YTEgMSAwIDAgMCAwLTJjLTIuOTIxIDAtNC42MjkgMS4zNjUtNS41NDcgMi41MTItLjA2NC4wNzgtLjExOS4xNjItLjE4LjI0NEMxMS43MyAxLjgzOCAxMC43OTguMDIzIDkuMjA3LjAyMyA4LjU3OS4wMjIgNy44NS4zMDYgNyAuOTc4IDUuMDI3IDIuNTQgNS4zMjkgMy45MDIgNi40OTIgNC45OTkgMy42MDkgNS4yMjIgMCA3LjM1MiAwIDEyLjk2OWMwIDQuNTgyIDQuOTYxIDExLjAwOSA5IDExLjAwOSAxLjk3NSAwIDIuMzcxLS40ODYgMy0xIC42MjkuNTE0IDEuMDI1IDEgMyAxIDQuMDM5IDAgOS02LjQxOCA5LTExIDAtNS45NTMtNC4wNTUtOC03LThNOC4yNDIgMi41NDZjLjY0MS0uNTA4Ljk0My0uNTIzLjk2NS0uNTIzLjQyNi4xNjkuOTc1IDEuNDA1IDEuMzU3IDMuMDU1LTEuNTI3LS42MjktMi43NDEtMS4zNTItMi45OC0xLjg0Ni4wNTktLjExMi4yNDEtLjM1Ni42NTgtLjY4Nk0xNSAyMS45NzhjLTEuMDggMC0xLjIxLS4xMDktMS41NTktLjQwMmwtLjE3Ni0uMTQ2Yy0uMzY3LS4zMDItLjgxNi0uNDUyLTEuMjY2LS40NTJzLS44OTguMTUtMS4yNjYuNDUybC0uMTc2LjE0NmMtLjM0Ny4yOTItLjQ3Ny40MDItMS41NTcuNDAyLTIuODEzIDAtNy01LjM4OS03LTkuMDA5IDAtNS44MjMgNC40ODgtNS45OTEgNS01Ljk5MSAxLjkzOSAwIDIuNDg0LjQ3MSAzLjM4NyAxLjI1MWwuMzIzLjI3NmExLjk5NSAxLjk5NSAwIDAgMCAyLjU4IDBsLjMyMy0uMjc2Yy45MDItLjc4IDEuNDQ3LTEuMjUxIDMuMzg3LTEuMjUxLjUxMiAwIDUgLjE2OCA1IDYgMCAzLjYxNy00LjE4NyA5LTcgOVwiLz48L3N2Zz5gLFxuXG4gIG5hdHVyZTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTE1LjUgOGExLjUgMS41IDAgMSAwIC4wMDEgMy4wMDFBMS41IDEuNSAwIDAgMCAxNS41IDhNOC41IDhhMS41IDEuNSAwIDEgMCAuMDAxIDMuMDAxQTEuNSAxLjUgMCAwIDAgOC41IDhcIi8+PHBhdGggZD1cIk0xOC45MzMgMGgtLjAyN2MtLjk3IDAtMi4xMzguNzg3LTMuMDE4IDEuNDk3LTEuMjc0LS4zNzQtMi42MTItLjUxLTMuODg3LS41MS0xLjI4NSAwLTIuNjE2LjEzMy0zLjg3NC41MTdDNy4yNDUuNzkgNi4wNjkgMCA1LjA5MyAwaC0uMDI3QzMuMzUyIDAgLjA3IDIuNjcuMDAyIDcuMDI2Yy0uMDM5IDIuNDc5LjI3NiA0LjIzOCAxLjA0IDUuMDEzLjI1NC4yNTguODgyLjY3NyAxLjI5NS44ODIuMTkxIDMuMTc3LjkyMiA1LjIzOCAyLjUzNiA2LjM4Ljg5Ny42MzcgMi4xODcuOTQ5IDMuMiAxLjEwMkM4LjA0IDIwLjYgOCAyMC43OTUgOCAyMWMwIDEuNzczIDIuMzUgMyA0IDMgMS42NDggMCA0LTEuMjI3IDQtMyAwLS4yMDEtLjAzOC0uMzkzLS4wNzItLjU4NiAyLjU3My0uMzg1IDUuNDM1LTEuODc3IDUuOTI1LTcuNTg3LjM5Ni0uMjIuODg3LS41NjggMS4xMDQtLjc4OC43NjMtLjc3NCAxLjA3OS0yLjUzNCAxLjA0LTUuMDEzQzIzLjkyOSAyLjY3IDIwLjY0NiAwIDE4LjkzMyAwTTMuMjIzIDkuMTM1Yy0uMjM3LjI4MS0uODM3IDEuMTU1LS44ODQgMS4yMzgtLjE1LS40MS0uMzY4LTEuMzQ5LS4zMzctMy4yOTEuMDUxLTMuMjgxIDIuNDc4LTQuOTcyIDMuMDkxLTUuMDMxLjI1Ni4wMTUuNzMxLjI3IDEuMjY1LjY0Ni0xLjExIDEuMTcxLTIuMjc1IDIuOTE1LTIuMzUyIDUuMTI1LS4xMzMuNTQ2LS4zOTguODU4LS43ODMgMS4zMTNNMTIgMjJjLS45MDEgMC0xLjk1NC0uNjkzLTItMSAwLS42NTQuNDc1LTEuMjM2IDEtMS42MDJWMjBhMSAxIDAgMSAwIDIgMHYtLjYwMmMuNTI0LjM2NSAxIC45NDcgMSAxLjYwMi0uMDQ2LjMwNy0xLjA5OSAxLTIgMW0zLTMuNDh2LjAyYTQuNzUyIDQuNzUyIDAgMCAwLTEuMjYyLTEuMDJjMS4wOTItLjUxNiAyLjIzOS0xLjMzNCAyLjIzOS0yLjIxNyAwLTEuODQyLTEuNzgxLTIuMTk1LTMuOTc3LTIuMTk1LTIuMTk2IDAtMy45NzguMzU0LTMuOTc4IDIuMTk1IDAgLjg4MyAxLjE0OCAxLjcwMSAyLjIzOCAyLjIxN0E0LjggNC44IDAgMCAwIDkgMTguNTM5di0uMDI1Yy0xLS4wNzYtMi4xODItLjI4MS0yLjk3My0uODQyLTEuMzAxLS45Mi0xLjgzOC0zLjA0NS0xLjg1My02LjQ3OGwuMDIzLS4wNDFjLjQ5Ni0uODI2IDEuNDktMS40NSAxLjgwNC0zLjEwMiAwLTIuMDQ3IDEuMzU3LTMuNjMxIDIuMzYyLTQuNTIyQzkuMzcgMy4xNzggMTAuNTU1IDMgMTEuOTQ4IDNjMS40NDcgMCAyLjY4NS4xOTIgMy43MzMuNTcgMSAuOSAyLjMxNiAyLjQ2NSAyLjMxNiA0LjQ4LjMxMyAxLjY1MSAxLjMwNyAyLjI3NSAxLjgwMyAzLjEwMi4wMzUuMDU4LjA2OC4xMTcuMTAyLjE3OC0uMDU5IDUuOTY3LTEuOTQ5IDcuMDEtNC45MDIgNy4xOW02LjYyOC04LjIwMmMtLjAzNy0uMDY1LS4wNzQtLjEzLS4xMTMtLjE5NWE3LjU4NyA3LjU4NyAwIDAgMC0uNzM5LS45ODdjLS4zODUtLjQ1NS0uNjQ4LS43NjgtLjc4Mi0xLjMxMy0uMDc2LTIuMjA5LTEuMjQxLTMuOTU0LTIuMzUzLTUuMTI0LjUzMS0uMzc2IDEuMDA0LS42MyAxLjI2MS0uNjQ3LjYzNi4wNzEgMy4wNDQgMS43NjQgMy4wOTYgNS4wMzEuMDI3IDEuODEtLjM0NyAzLjIxOC0uMzcgMy4yMzVcIi8+PC9zdmc+YCxcblxuICBvYmplY3RzOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTIgMGE5IDkgMCAwIDAtNSAxNi40ODJWMjFzMi4wMzUgMyA1IDMgNS0zIDUtM3YtNC41MThBOSA5IDAgMCAwIDEyIDB6bTAgMmMzLjg2IDAgNyAzLjE0MSA3IDdzLTMuMTQgNy03IDctNy0zLjE0MS03LTcgMy4xNC03IDctN3pNOSAxNy40NzdjLjk0LjMzMiAxLjk0Ni41MjMgMyAuNTIzczIuMDYtLjE5IDMtLjUyM3YuODM0Yy0uOTEuNDM2LTEuOTI1LjY4OS0zIC42ODlhNi45MjQgNi45MjQgMCAwIDEtMy0uNjl2LS44MzN6bS4yMzYgMy4wN0E4Ljg1NCA4Ljg1NCAwIDAgMCAxMiAyMWMuOTY1IDAgMS44ODgtLjE2NyAyLjc1OC0uNDUxQzE0LjE1NSAyMS4xNzMgMTMuMTUzIDIyIDEyIDIyYy0xLjEwMiAwLTIuMTE3LS43ODktMi43NjQtMS40NTN6XCIvPjxwYXRoIGQ9XCJNMTQuNzQ1IDEyLjQ0OWgtLjAwNGMtLjg1Mi0uMDI0LTEuMTg4LS44NTgtMS41NzctMS44MjQtLjQyMS0xLjA2MS0uNzAzLTEuNTYxLTEuMTgyLTEuNTY2aC0uMDA5Yy0uNDgxIDAtLjc4My40OTctMS4yMzUgMS41MzctLjQzNi45ODItLjgwMSAxLjgxMS0xLjYzNiAxLjc5MWwtLjI3Ni0uMDQzYy0uNTY1LS4xNzEtLjg1My0uNjkxLTEuMjg0LTEuNzk0LS4xMjUtLjMxMy0uMjAyLS42MzItLjI3LS45MTMtLjA1MS0uMjEzLS4xMjctLjUzLS4xOTUtLjYzNEM3LjA2NyA5LjAwNCA3LjAzOSA5IDYuOTkgOUExIDEgMCAwIDEgNyA3aC4wMWMxLjY2Mi4wMTcgMi4wMTUgMS4zNzMgMi4xOTggMi4xMzQuNDg2LS45ODEgMS4zMDQtMi4wNTggMi43OTctMi4wNzUgMS41MzEuMDE4IDIuMjggMS4xNTMgMi43MzEgMi4xNDFsLjAwMi0uMDA4QzE0Ljk0NCA4LjQyNCAxNS4zMjcgNyAxNi45NzkgN2guMDMyQTEgMSAwIDEgMSAxNyA5aC0uMDExYy0uMTQ5LjA3Ni0uMjU2LjQ3NC0uMzE5LjcwOWE2LjQ4NCA2LjQ4NCAwIDAgMS0uMzExLjk1MWMtLjQyOS45NzMtLjc5IDEuNzg5LTEuNjE0IDEuNzg5XCIvPjwvc3ZnPmAsXG5cbiAgc21pbGV5czogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTEyIDBDNS4zNzMgMCAwIDUuMzczIDAgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTJTMTguNjI3IDAgMTIgMG0wIDIyQzYuNDg2IDIyIDIgMTcuNTE0IDIgMTJTNi40ODYgMiAxMiAyczEwIDQuNDg2IDEwIDEwLTQuNDg2IDEwLTEwIDEwXCIvPjxwYXRoIGQ9XCJNOCA3YTIgMiAwIDEgMC0uMDAxIDMuOTk5QTIgMiAwIDAgMCA4IDdNMTYgN2EyIDIgMCAxIDAtLjAwMSAzLjk5OUEyIDIgMCAwIDAgMTYgN00xNS4yMzIgMTVjLS42OTMgMS4xOTUtMS44NyAyLTMuMzQ5IDItMS40NzcgMC0yLjY1NS0uODA1LTMuMzQ3LTJIMTVtMy0ySDZhNiA2IDAgMSAwIDEyIDBcIi8+PC9zdmc+YCxcblxuICBwZW9wbGU6IGA8c3ZnIHhtbG5zOnN2Zz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRcIiB3aWR0aD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPiA8cGF0aCBpZD1cInBhdGgzODE0XCIgZD1cIm0gMy4zNTkxMDg5LDIxLjE3NzI2IGMgMC4xNzIwMzYsMC4wOTM4NSA0LjI2NTk5NCwyLjI5ODM3IDguODE0NDQ1MSwyLjI5ODM3IDQuOTI3NzY3LDAgOC42NzA4OTQsLTIuMjExODgzIDguODI3ODIsLTIuMzA2MDE5IDAuMTEzMDc5LC0wLjA2Nzg1IDAuMTgyMjY4LC0wLjE5MDA1MSAwLjE4MjI2NywtMC4zMjE5MjMgMCwtMy4wMzExOSAtMC45Mjk0OTQsLTUuODA0OTM2IC0yLjYxNzE5NiwtNy44MTA3MTIgLTEuMTgwNjAzLC0xLjQwMzEzNCAtMi42NjE5MTgsLTIuMzU5NTE2IC00LjI5NTY5OSwtMi43OTk3OTEgNC42OTkxMTgsLTIuMjM2MjU4IDMuMTAyMzA2LC05LjI4NjE3MTYyIC0yLjA5NzE5MSwtOS4yODYxNzE2MiAtNS4xOTk0OTc4LDAgLTYuNzk2MzEwMyw3LjA0OTkxMzYyIC0yLjA5NzE5Miw5LjI4NjE3MTYyIC0xLjYzMzc4MjEsMC40NDAyNzUgLTMuMTE1MDk3MSwxLjM5Njc5OCAtNC4yOTU2OTkxLDIuNzk5NzkxIC0xLjY4NzcwMywyLjAwNTc3NiAtMi42MTcxOTYsNC43Nzk1MjIgLTIuNjE3MTk2LDcuODEwNzEyIDEuMmUtNiwwLjEzNzM3OCAwLjA3NTAzOSwwLjI2Mzc4NSAwLjE5NTY0MSwwLjMyOTU3MiB6IE0gOC4wNDM5MzE5LDUuODMwODc4MyBDIDguMDQzOTMwOSwyLjE1MTUyMSAxMi40OTIxMDcsMC4zMDk1NTgxMSAxNS4wOTM0OTEsMi45MTA5NDExIDE3LjY5NDg3NCw1LjUxMjMyNDEgMTUuODUyOTExLDkuOTYwNTAwNiAxMi4xNzM1NTQsOS45NjA1IDkuODkzODk5MSw5Ljk1NzkxMzUgOC4wNDY1MTg2LDguMTEwNTMzMiA4LjA0MzkzMTksNS44MzA4NzgzIFogbSAtMS42ODg3ODIsNy42ODk0OTc3IGMgMS41MjQ1MzUsLTEuODExNDQ5IDMuNTkwNjYwMSwtMi44MDkwMzUgNS44MTg0MDQxLC0yLjgwOTAzNSAyLjIyNzc0NCwwIDQuMjkzODY5LDAuOTk3NTg2IDUuODE4NDA0LDIuODA5MDM1IDEuNTMzNjM5LDEuODIyNTcxIDIuMzk1OTMyLDQuMzM5ODU4IDIuNDM5MTUyLDcuMTA4MzAxIC0wLjgwMzM1MiwwLjQzNDg3NyAtNC4xNDE2MzYsMi4wOTYxMTIgLTguMjU3NTU2LDIuMDk2MTEyIC0zLjgwNjI5MjEsMCAtNy4zOTEwODYxLC0xLjY3MTA0MyAtOC4yNTczNjgxLC0yLjEwNDk4MSAwLjA0NTA1LC0yLjc2NTAxNyAwLjkwNjk2OCwtNS4yNzg3ODUgMi40Mzg5NjQsLTcuMDk5NDMyIHpcIiAvPiA8cGF0aCBpZD1cInBhdGgzODE2XCIgZD1cIk0gMTIuMTczODI4IDAuMzg4NjcxODggQyA5LjMxOTg1MTMgMC4zODg2NzE4NyA3LjM3NzA5ODggMi4zNjcyMjg1IDYuODY1MjM0NCA0LjYzMDg1OTQgQyA2LjQyMTg2MDggNi41OTE2MDE1IDcuMTE1MzU2MiA4Ljc2NzYxMTcgOC45NjQ4NDM4IDEwLjEyNjk1MyBDIDcuNjE0MTI0OSAxMC42NzczNzYgNi4zNTUwNTExIDExLjQ4MDk0NCA1LjM0OTYwOTQgMTIuNjc1NzgxIEMgMy41NjI5MzE3IDE0Ljc5OTE4NSAyLjYwMTU2MjUgMTcuNzAxNDc1IDIuNjAxNTYyNSAyMC44NDc2NTYgQyAyLjYwMTU2NTQgMjEuMTg5ODYxIDIuNzg5NDI3NiAyMS41MDgwMDIgMy4wODk4NDM4IDIxLjY3MTg3NSBDIDMuMzA0NDA2OCAyMS43ODg5MjUgNy40NDM2MjM5IDI0LjAzOTA2MiAxMi4xNzM4MjggMjQuMDM5MDYyIEMgMTcuMjY5OTE4IDI0LjAzOTA2MiAyMS4wODM1NjggMjEuNzc2Nzg2IDIxLjI5MTAxNiAyMS42NTIzNDQgQyAyMS41NzI4MSAyMS40ODMyNjYgMjEuNzQ2MDk3IDIxLjE3NjI4MiAyMS43NDYwOTQgMjAuODQ3NjU2IEMgMjEuNzQ2MDk0IDE3LjcwMTQ3NSAyMC43ODI3NyAxNC43OTkxODUgMTguOTk2MDk0IDEyLjY3NTc4MSBDIDE3Ljk5MDQ1NSAxMS40ODA1OTEgMTYuNzMzODE4IDEwLjY3NTM2MiAxNS4zODI4MTIgMTAuMTI1IEMgMTcuMjMxMTMyIDguNzY1NTU1MiAxNy45MjU2NzUgNi41OTEwNzAxIDE3LjQ4MjQyMiA0LjYzMDg1OTQgQyAxNi45NzA1NTcgMi4zNjcyMjg1IDE1LjAyNzgwNSAwLjM4ODY3MTg4IDEyLjE3MzgyOCAwLjM4ODY3MTg4IHogTSAxMi43OTI5NjkgMi4zMDA3ODEyIEMgMTMuNDY2MjUzIDIuNDE2MTc5MiAxNC4xMjUxMTMgMi43MzgzOTQxIDE0LjY5NTMxMiAzLjMwODU5MzggQyAxNS44MzU3MTIgNC40NDg5OTMxIDE1Ljk4NTYwNCA1Ljk0NzM1NDkgMTUuNDY4NzUgNy4xOTUzMTI1IEMgMTQuOTUxODk2IDguNDQzMjcwMSAxMy43ODY4MjggOS4zOTg0Mzc4IDEyLjE3MzgyOCA5LjM5ODQzNzUgQyAxMC4xOTc3MTkgOS4zOTYxOTU0IDguNjA3NzExIDcuODA2MTg3IDguNjA1NDY4OCA1LjgzMDA3ODEgQyA4LjYwNTQ2ODMgNC4yMTcwNzg1IDkuNTYwNjM2MiAzLjA1MjAxMDIgMTAuODA4NTk0IDIuNTM1MTU2MiBDIDExLjQzMjU3MyAyLjI3NjcyOTMgMTIuMTE5Njg1IDIuMTg1MzgzMyAxMi43OTI5NjkgMi4zMDA3ODEyIHogTSAxMi4xNzM4MjggMTEuMjczNDM4IEMgMTQuMjMzNjQ3IDExLjI3MzQzOCAxNi4xMzM2NzQgMTIuMTg1MDg0IDE3LjU2MjUgMTMuODgyODEyIEMgMTguOTMwNjkgMTUuNTA4NzY1IDE5LjY5ODM0NyAxNy43NzY5NjkgMTkuODA4NTk0IDIwLjI4MzIwMyBDIDE4LjgwNzM5NSAyMC44MDAyMzUgMTUuODg2MTU3IDIyLjE2MjEwOSAxMi4xNzM4MjggMjIuMTYyMTA5IEMgOC43NjE0NjMyIDIyLjE2MjEwOSA1LjYyNDU3NTQgMjAuNzg3MDY5IDQuNTM5MDYyNSAyMC4yNjU2MjUgQyA0LjY1MjU4OTYgMTcuNzY2NzE3IDUuNDIwMzMxNSAxNS41MDQ3OTEgNi43ODUxNTYyIDEzLjg4MjgxMiBDIDguMjEzOTgyNyAxMi4xODUwODQgMTAuMTE0MDEgMTEuMjczNDM4IDEyLjE3MzgyOCAxMS4yNzM0MzggeiBcIiAvPiA8L3N2Zz5gLFxuXG4gIHBsYWNlczogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTYuNSAxMkM1LjEyMiAxMiA0IDEzLjEyMSA0IDE0LjVTNS4xMjIgMTcgNi41IDE3IDkgMTUuODc5IDkgMTQuNSA3Ljg3OCAxMiA2LjUgMTJtMCAzYy0uMjc1IDAtLjUtLjIyNS0uNS0uNXMuMjI1LS41LjUtLjUuNS4yMjUuNS41LS4yMjUuNS0uNS41TTE3LjUgMTJjLTEuMzc4IDAtMi41IDEuMTIxLTIuNSAyLjVzMS4xMjIgMi41IDIuNSAyLjUgMi41LTEuMTIxIDIuNS0yLjUtMS4xMjItMi41LTIuNS0yLjVtMCAzYy0uMjc1IDAtLjUtLjIyNS0uNS0uNXMuMjI1LS41LjUtLjUuNS4yMjUuNS41LS4yMjUuNS0uNS41XCIvPjxwYXRoIGQ9XCJNMjIuNDgyIDkuNDk0bC0xLjAzOS0uMzQ2TDIxLjQgOWguNmMuNTUyIDAgMS0uNDM5IDEtLjk5MiAwLS4wMDYtLjAwMy0uMDA4LS4wMDMtLjAwOEgyM2MwLTEtLjg4OS0yLTEuOTg0LTJoLS42NDJsLS43MzEtMS43MTdDMTkuMjYyIDMuMDEyIDE4LjA5MSAyIDE2Ljc2NCAySDcuMjM2QzUuOTA5IDIgNC43MzggMy4wMTIgNC4zNTcgNC4yODNMMy42MjYgNmgtLjY0MkMxLjg4OSA2IDEgNyAxIDhoLjAwM1MxIDguMDAyIDEgOC4wMDhDMSA4LjU2MSAxLjQ0OCA5IDIgOWguNmwtLjA0My4xNDgtMS4wMzkuMzQ2YTIuMDAxIDIuMDAxIDAgMCAwLTEuMzU5IDIuMDk3bC43NTEgNy41MDhhMSAxIDAgMCAwIC45OTQuOTAxSDN2MWMwIDEuMTAzLjg5NiAyIDIgMmgyYzEuMTA0IDAgMi0uODk3IDItMnYtMWg2djFjMCAxLjEwMy44OTYgMiAyIDJoMmMxLjEwNCAwIDItLjg5NyAyLTJ2LTFoMS4wOTZhLjk5OS45OTkgMCAwIDAgLjk5NC0uOTAxbC43NTEtNy41MDhhMi4wMDEgMi4wMDEgMCAwIDAtMS4zNTktMi4wOTdNNi4yNzMgNC44NTdDNi40MDIgNC40MyA2Ljc4OCA0IDcuMjM2IDRoOS41MjdjLjQ0OCAwIC44MzQuNDMuOTYzLjg1N0wxOS4zMTMgOUg0LjY4OGwxLjU4NS00LjE0M3pNNyAyMUg1di0xaDJ2MXptMTIgMGgtMnYtMWgydjF6bTIuMTg5LTNIMi44MTFsLS42NjItNi42MDdMMyAxMWgxOGwuODUyLjM5M0wyMS4xODkgMTh6XCIvPjwvc3ZnPmAsXG5cbiAgcmVjZW50OiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTMgNGgtMmwtLjAwMSA3SDl2MmgydjJoMnYtMmg0di0yaC00elwiLz48cGF0aCBkPVwiTTEyIDBDNS4zNzMgMCAwIDUuMzczIDAgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTJTMTguNjI3IDAgMTIgMG0wIDIyQzYuNDg2IDIyIDIgMTcuNTE0IDIgMTJTNi40ODYgMiAxMiAyczEwIDQuNDg2IDEwIDEwLTQuNDg2IDEwLTEwIDEwXCIvPjwvc3ZnPmAsXG5cbiAgc3ltYm9sczogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTAgMGgxMXYySDB6TTQgMTFoM1Y2aDRWNEgwdjJoNHpNMTUuNSAxN2MxLjM4MSAwIDIuNS0xLjExNiAyLjUtMi40OTNzLTEuMTE5LTIuNDkzLTIuNS0yLjQ5M1MxMyAxMy4xMyAxMyAxNC41MDcgMTQuMTE5IDE3IDE1LjUgMTdtMC0yLjk4NmMuMjc2IDAgLjUuMjIyLjUuNDkzIDAgLjI3Mi0uMjI0LjQ5My0uNS40OTNzLS41LS4yMjEtLjUtLjQ5My4yMjQtLjQ5My41LS40OTNNMjEuNSAxOS4wMTRjLTEuMzgxIDAtMi41IDEuMTE2LTIuNSAyLjQ5M1MyMC4xMTkgMjQgMjEuNSAyNHMyLjUtMS4xMTYgMi41LTIuNDkzLTEuMTE5LTIuNDkzLTIuNS0yLjQ5M20wIDIuOTg2YS40OTcuNDk3IDAgMCAxLS41LS40OTNjMC0uMjcxLjIyNC0uNDkzLjUtLjQ5M3MuNS4yMjIuNS40OTNhLjQ5Ny40OTcgMCAwIDEtLjUuNDkzTTIyIDEzbC05IDkgMS41MTMgMS41IDguOTktOS4wMDl6TTE3IDExYzIuMjA5IDAgNC0xLjExOSA0LTIuNVYycy45ODUtLjE2MSAxLjQ5OC45NDlDMjMuMDEgNC4wNTUgMjMgNiAyMyA2czEtMS4xMTkgMS0zLjEzNUMyNC0uMDIgMjEgMCAyMSAwaC0ydjYuMzQ3QTUuODUzIDUuODUzIDAgMCAwIDE3IDZjLTIuMjA5IDAtNCAxLjExOS00IDIuNXMxLjc5MSAyLjUgNCAyLjVNMTAuMjk3IDIwLjQ4MmwtMS40NzUtMS41ODVhNDcuNTQgNDcuNTQgMCAwIDEtMS40NDIgMS4xMjljLS4zMDctLjI4OC0uOTg5LTEuMDE2LTIuMDQ1LTIuMTgzLjkwMi0uODM2IDEuNDc5LTEuNDY2IDEuNzI5LTEuODkycy4zNzYtLjg3MS4zNzYtMS4zMzZjMC0uNTkyLS4yNzMtMS4xNzgtLjgxOC0xLjc1OS0uNTQ2LS41ODEtMS4zMjktLjg3MS0yLjM0OS0uODcxLTEuMDA4IDAtMS43OS4yOTMtMi4zNDQuODc5LS41NTYuNTg3LS44MzIgMS4xODEtLjgzMiAxLjc4NCAwIC44MTMuNDE5IDEuNzQ4IDEuMjU2IDIuODA1LS44NDcuNjE0LTEuNDQ0IDEuMjA4LTEuNzk0IDEuNzg0YTMuNDY1IDMuNDY1IDAgMCAwLS41MjMgMS44MzNjMCAuODU3LjMwOCAxLjU2LjkyNCAyLjEwNy42MTYuNTQ5IDEuNDIzLjgyMyAyLjQyLjgyMyAxLjE3MyAwIDIuNDQ0LS4zNzkgMy44MTMtMS4xMzdMOC4yMzUgMjRoMi44MTlsLTIuMDktMi4zODMgMS4zMzMtMS4xMzV6bS02LjczNi02LjM4OWExLjAyIDEuMDIgMCAwIDEgLjczLS4yODZjLjMxIDAgLjU1OS4wODUuNzQ3LjI1NGEuODQ5Ljg0OSAwIDAgMSAuMjgzLjY1OWMwIC41MTgtLjQxOSAxLjExMi0xLjI1NyAxLjc4NC0uNTM2LS42NTEtLjgwNS0xLjIzMS0uODA1LTEuNzQyYS45MDEuOTAxIDAgMCAxIC4zMDItLjY2OU0zLjc0IDIyYy0uNDI3IDAtLjc3OC0uMTE2LTEuMDU3LS4zNDktLjI3OS0uMjMyLS40MTgtLjQ4Ny0uNDE4LS43NjYgMC0uNTk0LjUwOS0xLjI4OCAxLjUyNy0yLjA4My45NjggMS4xMzQgMS43MTcgMS45NDYgMi4yNDggMi40MzgtLjkyMS41MDctMS42ODYuNzYtMi4zLjc2XCIvPjwvc3ZnPmAsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNWR3NcbiIsImNvbnN0IG1hcHBpbmcgPSB7XG4gIG5hbWU6ICdhJyxcbiAgdW5pZmllZDogJ2InLFxuICBub25fcXVhbGlmaWVkOiAnYycsXG4gIGhhc19pbWdfYXBwbGU6ICdkJyxcbiAgaGFzX2ltZ19nb29nbGU6ICdlJyxcbiAgaGFzX2ltZ190d2l0dGVyOiAnZicsXG4gIGhhc19pbWdfZmFjZWJvb2s6ICdoJyxcbiAga2V5d29yZHM6ICdqJyxcbiAgc2hlZXQ6ICdrJyxcbiAgZW1vdGljb25zOiAnbCcsXG4gIHRleHQ6ICdtJyxcbiAgc2hvcnRfbmFtZXM6ICduJyxcbiAgYWRkZWRfaW46ICdvJyxcbn1cblxuY29uc3QgYnVpbGRTZWFyY2ggPSAoZW1vamkpID0+IHtcbiAgY29uc3Qgc2VhcmNoID0gW11cblxuICB2YXIgYWRkVG9TZWFyY2ggPSAoc3RyaW5ncywgc3BsaXQpID0+IHtcbiAgICBpZiAoIXN0cmluZ3MpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIDsoQXJyYXkuaXNBcnJheShzdHJpbmdzKSA/IHN0cmluZ3MgOiBbc3RyaW5nc10pLmZvckVhY2goKHN0cmluZykgPT4ge1xuICAgICAgOyhzcGxpdCA/IHN0cmluZy5zcGxpdCgvWy18X3xcXHNdKy8pIDogW3N0cmluZ10pLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgcyA9IHMudG9Mb3dlckNhc2UoKVxuXG4gICAgICAgIGlmIChzZWFyY2guaW5kZXhPZihzKSA9PSAtMSkge1xuICAgICAgICAgIHNlYXJjaC5wdXNoKHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGFkZFRvU2VhcmNoKGVtb2ppLnNob3J0X25hbWVzLCB0cnVlKVxuICBhZGRUb1NlYXJjaChlbW9qaS5uYW1lLCB0cnVlKVxuICBhZGRUb1NlYXJjaChlbW9qaS5rZXl3b3JkcywgZmFsc2UpXG4gIGFkZFRvU2VhcmNoKGVtb2ppLmVtb3RpY29ucywgZmFsc2UpXG5cbiAgcmV0dXJuIHNlYXJjaC5qb2luKCcsJylcbn1cblxuZnVuY3Rpb24gZGVlcEZyZWV6ZShvYmplY3QpIHtcbiAgLy8gUmV0cmlldmUgdGhlIHByb3BlcnR5IG5hbWVzIGRlZmluZWQgb24gb2JqZWN0XG4gIHZhciBwcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpXG5cbiAgLy8gRnJlZXplIHByb3BlcnRpZXMgYmVmb3JlIGZyZWV6aW5nIHNlbGZcbiAgZm9yIChsZXQgbmFtZSBvZiBwcm9wTmFtZXMpIHtcbiAgICBsZXQgdmFsdWUgPSBvYmplY3RbbmFtZV1cbiAgICBvYmplY3RbbmFtZV0gPVxuICAgICAgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IGRlZXBGcmVlemUodmFsdWUpIDogdmFsdWVcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShvYmplY3QpXG59XG5cbmNvbnN0IHVuY29tcHJlc3MgPSAoZGF0YSkgPT4ge1xuICBpZiAoIWRhdGEuY29tcHJlc3NlZCkge1xuICAgIHJldHVybiBkYXRhXG4gIH1cbiAgZGF0YS5jb21wcmVzc2VkID0gZmFsc2VcblxuICBmb3IgKGxldCBpZCBpbiBkYXRhLmVtb2ppcykge1xuICAgIGxldCBlbW9qaSA9IGRhdGEuZW1vamlzW2lkXVxuXG4gICAgZm9yIChsZXQga2V5IGluIG1hcHBpbmcpIHtcbiAgICAgIGVtb2ppW2tleV0gPSBlbW9qaVttYXBwaW5nW2tleV1dXG4gICAgICBkZWxldGUgZW1vamlbbWFwcGluZ1trZXldXVxuICAgIH1cblxuICAgIGlmICghZW1vamkuc2hvcnRfbmFtZXMpIGVtb2ppLnNob3J0X25hbWVzID0gW11cbiAgICBlbW9qaS5zaG9ydF9uYW1lcy51bnNoaWZ0KGlkKVxuXG4gICAgZW1vamkuc2hlZXRfeCA9IGVtb2ppLnNoZWV0WzBdXG4gICAgZW1vamkuc2hlZXRfeSA9IGVtb2ppLnNoZWV0WzFdXG4gICAgZGVsZXRlIGVtb2ppLnNoZWV0XG5cbiAgICBpZiAoIWVtb2ppLnRleHQpIGVtb2ppLnRleHQgPSAnJ1xuXG4gICAgaWYgKCFlbW9qaS5hZGRlZF9pbikgZW1vamkuYWRkZWRfaW4gPSA2XG4gICAgZW1vamkuYWRkZWRfaW4gPSBlbW9qaS5hZGRlZF9pbi50b0ZpeGVkKDEpXG5cbiAgICBlbW9qaS5zZWFyY2ggPSBidWlsZFNlYXJjaChlbW9qaSlcbiAgfVxuICBkYXRhID0gZGVlcEZyZWV6ZShkYXRhKVxuICByZXR1cm4gZGF0YVxufVxuXG5leHBvcnQgeyBidWlsZFNlYXJjaCwgdW5jb21wcmVzcyB9XG4iLCJpbXBvcnQgeyBpbnRlcnNlY3QsIHVuaWZpZWRUb05hdGl2ZSB9IGZyb20gJy4vaW5kZXgnXG5pbXBvcnQgeyB1bmNvbXByZXNzLCBidWlsZFNlYXJjaCB9IGZyb20gJy4vZGF0YSdcbmltcG9ydCBmcmVxdWVudGx5IGZyb20gJy4vZnJlcXVlbnRseSdcblxuY29uc3QgU0hFRVRfQ09MVU1OUyA9IDU3XG5jb25zdCBDT0xPTlNfUkVHRVggPSAvXig/OlxcOihbXlxcOl0rKVxcOikoPzpcXDpza2luLXRvbmUtKFxcZClcXDopPyQvXG4vLyBTa2luIHRvbmVzXG5jb25zdCBTS0lOUyA9IFsnMUYzRkEnLCAnMUYzRkInLCAnMUYzRkMnLCAnMUYzRkQnLCAnMUYzRkUnLCAnMUYzRkYnXVxuXG4vKipcbiAqIEVtb2ppIGRhdGEgc3RydWN0dXJlOlxuICoge1xuICogICAgXCJjb21wcmVzc2VkXCI6IGZhbHNlLFxuICogICAgXCJhbGlhc2VzXCI6IHtcbiAqICAgICAgY29sbGlzaW9uOiBcImJvb21cIlxuICogICAgICBjb29raW5nOiBcImZyaWVkX2VnZ1wiXG4gKiAgICAgIGVudmVsb3BlOiBcImVtYWlsXCJcbiAqICAgICAgZmFjZV93aXRoX2Zpbmdlcl9jb3ZlcmluZ19jbG9zZWRfbGlwczogXCJzaHVzaGluZ19mYWNlXCJcbiAqICAgICAgLi4uXG4gKiAgICB9LFxuICogICAgXCJjYXRlZ29yaWVzXCI6IFsge1xuICogICAgICBpZDogXCJwZW9wbGVcIixcbiAqICAgICAgbmFtZTogXCJTbWlsZXlzICYgRW1vdGlvblwiLFxuICogICAgICBlbW9qaXM6IFsgXCJncmlubmluZ1wiLCBcImdyaW5cIiwgXCJqb3lcIiwgLi4uIF1cbiAqICAgIH0sIHtcbiAqICAgICAgaWQ6IFwibmF0dXJlXCIsXG4gKiAgICAgIG5hbWU6IFwiQW5pbWFscyAmIE5hdHVyZVwiLFxuICogICAgICBlbW9qaXM6IFsgXCJtb25rZXlfZmFjZVwiLCBcIm1vbmV5XCIsIFwiZ29yaWxsYVwiLCAuLi4gXVxuICogICAgfSxcbiAqICAgIC4uLlxuICogICAgXSxcbiAqICAgIFwiZW1vamlzXCI6IFtcbiAqICAgICAgc21pbGV5OiB7XG4gKiAgICAgICAgYWRkZWRfaW46IFwiNi4wXCIsXG4gKiAgICAgICAgZW1vdGljb25zOiBbXCI9KVwiLCBcIj0tKVwiXSxcbiAqICAgICAgICBoYXNfaW1nX2FwcGxlOiB0cnVlLFxuICogICAgICAgIGhhc19pbWdfZmFjZWJvb2s6IHRydWUsXG4gKiAgICAgICAgaGFzX2ltZ19nb29nbGU6IHRydWUsXG4gKiAgICAgICAgaGFzX2ltZ190d2l0dGVyOiB0cnVlLFxuICogICAgICAgIGtleXdvcmRzOiBbXCJmYWNlXCIsIFwiaGFwcHlcIiwgXCJqb3lcIiwgXCJoYWhhXCIsIFwiOkRcIiwgXCI6KVwiLCBcInNtaWxlXCIsIFwiZnVubnlcIl0sXG4gKiAgICAgICAgbmFtZTogXCJTbWlsaW5nIEZhY2Ugd2l0aCBPcGVuIE1vdXRoXCIsXG4gKiAgICAgICAgbm9uX3F1YWxpZmllZDogdW5kZWZpbmVkLFxuICogICAgICAgIHNlYXJjaDogXCJzbWlsZXksc21pbGluZyxmYWNlLHdpdGgsb3Blbixtb3V0aCxoYXBweSxqb3ksaGFoYSw6ZCw6KSxzbWlsZSxmdW5ueSw9KSw9LSlcIixcbiAqICAgICAgICBzaGVldF94OiAzMCxcbiAqICAgICAgICBzaGVldF95OiAyNyxcbiAqICAgICAgICBzaG9ydF9uYW1lczogW1wic21pbGV5XCJdLFxuICogICAgICAgIHRleHQ6IFwiOilcIixcbiAqICAgICAgICB1bmlmaWVkOiBcIjFGNjAzXCIsXG4gKiAgICAgIH0sIHtcbiAqICAgICAgKzE6IHsgICAgLy8gZW1vamkgd2l0aCBza2luX3ZhcmlhdGlvbnNcbiAqICAgICAgICAgIC4uLiwgLy8gYWxsIHRoZSByZWd1bGFyIGZpZWxkcyBhcmUgcHJlc2VudFxuICogICAgICAgICAgbmFtZTogXCJUaHVtYnMgVXAgU2lnblwiLFxuICogICAgICAgICAgc2hvcnRfbmFtZXM6ICgyKSBbXCIrMVwiLCBcInRodW1ic3VwXCJdLFxuICogICAgICAgICAgc2tpbl92YXJpYXRpb25zOiB7XG4gKiAgICAgICAgICAgIDFGM0ZCOiAgICAgICAgICAgICAvLyBlYWNoIHZhcmlhdGlvbiBoYXMgYWRkaXRpb25hbCBzZXQgb2YgZmllbGRzOlxuICogICAgICAgICAgICAgIGFkZGVkX2luOiBcIjguMFwiLFxuICogICAgICAgICAgICAgIGhhc19pbWdfYXBwbGU6IHRydWUsXG4gKiAgICAgICAgICAgICAgaGFzX2ltZ19mYWNlYm9vazogdHJ1ZSxcbiAqICAgICAgICAgICAgICBoYXNfaW1nX2dvb2dsZTogdHJ1ZSxcbiAqICAgICAgICAgICAgICBoYXNfaW1nX3R3aXR0ZXI6IHRydWUsXG4gKiAgICAgICAgICAgICAgaW1hZ2U6IFwiMWY0NGQtMWYzZmIucG5nXCIsXG4gKiAgICAgICAgICAgICAgbm9uX3F1YWxpZmllZDogbnVsbCxcbiAqICAgICAgICAgICAgICBzaGVldF94OiAxNCxcbiAqICAgICAgICAgICAgICBzaGVldF95OiA1MCxcbiAqICAgICAgICAgICAgICB1bmlmaWVkOiBcIjFGNDRELTFGM0ZCXCIsXG4gKiAgICAgICAgICAgIDFGM0ZCOiB74oCmfSxcbiAqICAgICAgICAgICAgMUYzRkM6IHvigKZ9LFxuICogICAgICAgICAgICAxRjNGRDoge+KApn0sXG4gKiAgICAgICAgICAgIDFGM0ZFOiB74oCmfSxcbiAqICAgICAgICAgICAgMUYzRkY6IHvigKZ9XG4gKiAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAuLi5cbiAqICAgICAgfSxcbiAqICAgICAgYTogeyAgLy8gZW1vamkgd2l0aCBub25fcXVhbGlmaWVkIGZpZWxkIHNldFxuICogICAgICAgIGFkZGVkX2luOiBcIjYuMFwiLFxuICogICAgICAgIGVtb3RpY29uczogdW5kZWZpbmVkLFxuICogICAgICAgIGhhc19pbWdfYXBwbGU6IHRydWUsXG4gKiAgICAgICAgLi4uXG4gKiAgICAgICAgbm9uX3F1YWxpZmllZDogXCIxRjE3MFwiLFxuICogICAgICAgIHVuaWZpZWQ6IFwiMUYxNzAtRkUwRlwiLFxuICogICAgIH0sXG4gKiAgICAgLi4uXG4gKiAgIF1cbiAqIH1cbiAqL1xuXG4vKipcbiAqIFdyYXBzIHJhdyBqYXNvbiBlbW9qaSBkYXRhLCBzZXJ2ZXMgYXMgZGF0YSBzb3VyY2UgZm9yXG4gKiBlbW9qaSBwaWNrZXIgY29tcG9uZW50cy5cbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgIGltcG9ydCBkYXRhIGZyb20gJy4uL2RhdGEvYWxsLmpzb24nXG4gKiAgIGxldCBpbmRleCA9IG5ldyBFbW9qaUluZGV4KGRhdGEpXG4gKlxuICovXG5leHBvcnQgY2xhc3MgRW1vamlJbmRleCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgLSBSYXcganNvbiBkYXRhLCBzZWUgdGhlIHN0cnVjdHVyZSBhYm92ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMsIGFzIGFuIG9iamVjdDpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZW1vamlzVG9TaG93RmlsdGVyIC0gb3B0aW9uYWwsIGZ1bmN0aW9uIHRvIGZpbHRlciBvdXRcbiAgICogICBzb21lIGVtb2ppcywgZnVuY3Rpb24oZW1vamkpIHsgcmV0dXJuIHRydWV8ZmFsc2UgfVxuICAgKiAgIHdoZXJlIGBlbW9qaWAgaXMgYW4gcmF3IGVtb2ppIG9iamVjdCwgc2VlIGRhdGEuZW1vamlzIGFib3ZlLlxuICAgKiBAcGFyYW0ge0FycmF5fSBpbmNsdWRlIC0gb3B0aW9uYWwsIGEgbGlzdCBvZiBjYXRlZ29yeSBpZHMgdG8gaW5jbHVkZS5cbiAgICogQHBhcmFtIHtBcnJheX0gZXhjbHVkZSAtIG9wdGlvbmFsLCBhIGxpc3Qgb2YgY2F0ZWdvcnkgaWRzIHRvIGV4Y2x1ZGUuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGN1c3RvbSAtIG9wdGlvbmFsLCBhIGxpc3QgY3VzdG9tIGVtb2ppcywgZWFjaCBlbW9qaSBpc1xuICAgKiAgIGFuIG9iamVjdCwgc2VlIGRhdGEuZW1vamlzIGFib3ZlIGZvciBleGFtcGxlcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGRhdGEsXG4gICAge1xuICAgICAgZW1vamlzVG9TaG93RmlsdGVyLFxuICAgICAgaW5jbHVkZSxcbiAgICAgIGV4Y2x1ZGUsXG4gICAgICBjdXN0b20sXG4gICAgICByZWNlbnQsXG4gICAgICByZWNlbnRMZW5ndGggPSAyMCxcbiAgICB9ID0ge30sXG4gICkge1xuICAgIHRoaXMuX2RhdGEgPSB1bmNvbXByZXNzKGRhdGEpXG4gICAgLy8gQ2FsbGJhY2sgdG8gZXhjbHVkZSBzcGVjaWZpYyBlbW9qaXNcbiAgICB0aGlzLl9lbW9qaXNGaWx0ZXIgPSBlbW9qaXNUb1Nob3dGaWx0ZXIgfHwgbnVsbFxuICAgIC8vIENhdGVnb3JpZXMgdG8gaW5jbHVkZSAvIGV4Y2x1ZGVcbiAgICB0aGlzLl9pbmNsdWRlID0gaW5jbHVkZSB8fCBudWxsXG4gICAgdGhpcy5fZXhjbHVkZSA9IGV4Y2x1ZGUgfHwgbnVsbFxuICAgIC8vIEN1c3RvbSBlbW9qaXNcbiAgICB0aGlzLl9jdXN0b20gPSBjdXN0b20gfHwgW11cbiAgICAvLyBSZWNlbnQgZW1vamlzXG4gICAgLy8gVE9ETzogbWFrZSBwYXJhbWV0ZXIgY29uZmlndXJhYmxlXG4gICAgdGhpcy5fcmVjZW50ID0gcmVjZW50IHx8IGZyZXF1ZW50bHkuZ2V0KHJlY2VudExlbmd0aClcblxuICAgIHRoaXMuX2Vtb2ppcyA9IHt9XG4gICAgdGhpcy5fbmF0aXZlRW1vamlzID0ge31cbiAgICB0aGlzLl9lbW90aWNvbnMgPSB7fVxuXG4gICAgdGhpcy5fY2F0ZWdvcmllcyA9IFtdXG4gICAgdGhpcy5fcmVjZW50Q2F0ZWdvcnkgPSB7IGlkOiAncmVjZW50JywgbmFtZTogJ1JlY2VudCcsIGVtb2ppczogW10gfVxuICAgIHRoaXMuX2N1c3RvbUNhdGVnb3J5ID0geyBpZDogJ2N1c3RvbScsIG5hbWU6ICdDdXN0b20nLCBlbW9qaXM6IFtdIH1cbiAgICB0aGlzLl9zZWFyY2hJbmRleCA9IHt9XG4gICAgdGhpcy5idWlsZEluZGV4KClcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpXG4gIH1cblxuICBidWlsZEluZGV4KCkge1xuICAgIGxldCBhbGxDYXRlZ29yaWVzID0gdGhpcy5fZGF0YS5jYXRlZ29yaWVzXG5cbiAgICBpZiAodGhpcy5faW5jbHVkZSkge1xuICAgICAgLy8gUmVtb3ZlIGNhdGVnb3JpZXMgdGhhdCBhcmUgbm90IGluIHRoZSBpbmNsdWRlIGxpc3QuXG4gICAgICBhbGxDYXRlZ29yaWVzID0gYWxsQ2F0ZWdvcmllcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luY2x1ZGUuaW5jbHVkZXMoaXRlbS5pZClcbiAgICAgIH0pXG4gICAgICAvLyBTb3J0IGNhdGVnb3JpZXMgYWNjb3JkaW5nIHRvIHRoZSBpbmNsdWRlIGxpc3QuXG4gICAgICBhbGxDYXRlZ29yaWVzID0gYWxsQ2F0ZWdvcmllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4QSA9IHRoaXMuX2luY2x1ZGUuaW5kZXhPZihhLmlkKVxuICAgICAgICBjb25zdCBpbmRleEIgPSB0aGlzLl9pbmNsdWRlLmluZGV4T2YoYi5pZClcbiAgICAgICAgaWYgKGluZGV4QSA8IGluZGV4Qikge1xuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleEEgPiBpbmRleEIpIHtcbiAgICAgICAgICByZXR1cm4gMVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFsbENhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnlEYXRhKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNDYXRlZ29yeU5lZWRlZChjYXRlZ29yeURhdGEuaWQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbGV0IGNhdGVnb3J5ID0ge1xuICAgICAgICBpZDogY2F0ZWdvcnlEYXRhLmlkLFxuICAgICAgICBuYW1lOiBjYXRlZ29yeURhdGEubmFtZSxcbiAgICAgICAgZW1vamlzOiBbXSxcbiAgICAgIH1cbiAgICAgIGNhdGVnb3J5RGF0YS5lbW9qaXMuZm9yRWFjaCgoZW1vamlJZCkgPT4ge1xuICAgICAgICBsZXQgZW1vamkgPSB0aGlzLmFkZEVtb2ppKGVtb2ppSWQpXG4gICAgICAgIGlmIChlbW9qaSkge1xuICAgICAgICAgIGNhdGVnb3J5LmVtb2ppcy5wdXNoKGVtb2ppKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGNhdGVnb3J5LmVtb2ppcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5pc0NhdGVnb3J5TmVlZGVkKCdjdXN0b20nKSkge1xuICAgICAgaWYgKHRoaXMuX2N1c3RvbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGN1c3RvbUVtb2ppIG9mIHRoaXMuX2N1c3RvbSkge1xuICAgICAgICAgIHRoaXMuYWRkQ3VzdG9tRW1vamkoY3VzdG9tRW1vamkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXN0b21DYXRlZ29yeS5lbW9qaXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2NhdGVnb3JpZXMucHVzaCh0aGlzLl9jdXN0b21DYXRlZ29yeSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0NhdGVnb3J5TmVlZGVkKCdyZWNlbnQnKSkge1xuICAgICAgaWYgKHRoaXMuX3JlY2VudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fcmVjZW50Lm1hcCgoaWQpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBjdXN0b21FbW9qaSBvZiB0aGlzLl9jdXN0b21DYXRlZ29yeS5lbW9qaXMpIHtcbiAgICAgICAgICAgIGlmIChjdXN0b21FbW9qaS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcmVjZW50Q2F0ZWdvcnkuZW1vamlzLnB1c2goY3VzdG9tRW1vamkpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5oYXNFbW9qaShpZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlY2VudENhdGVnb3J5LmVtb2ppcy5wdXNoKHRoaXMuZW1vamkoaWQpKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIEFkZCByZWNlbnQgY2F0ZWdvcnkgdG8gdGhlIHRvcFxuICAgICAgaWYgKHRoaXMuX3JlY2VudENhdGVnb3J5LmVtb2ppcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllcy51bnNoaWZ0KHRoaXMuX3JlY2VudENhdGVnb3J5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBlbW9qaSBmcm9tIHRoZSBzdHJpbmdcbiAgICovXG4gIGZpbmRFbW9qaShlbW9qaSwgc2tpbikge1xuICAgIC8vIDEuIFBhcnNlIGFzIDplbW9qaV9uYW1lOnNraW4tdG9uZS14eDpcbiAgICBsZXQgbWF0Y2hlcyA9IGVtb2ppLm1hdGNoKENPTE9OU19SRUdFWClcblxuICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICBlbW9qaSA9IG1hdGNoZXNbMV1cbiAgICAgIGlmIChtYXRjaGVzWzJdKSB7XG4gICAgICAgIHNraW4gPSBwYXJzZUludChtYXRjaGVzWzJdLCAxMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVtb2ppIGlzIGFuIGFsaWFzXG4gICAgaWYgKHRoaXMuX2RhdGEuYWxpYXNlcy5oYXNPd25Qcm9wZXJ0eShlbW9qaSkpIHtcbiAgICAgIGVtb2ppID0gdGhpcy5fZGF0YS5hbGlhc2VzW2Vtb2ppXVxuICAgIH1cblxuICAgIC8vIDMuIENoZWNrIGlmIHdlIGhhdmUgdGhlIHNwZWNpZmllZCBlbW9qaVxuICAgIGlmICh0aGlzLl9lbW9qaXMuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgICBsZXQgZW1vamlPYmplY3QgPSB0aGlzLl9lbW9qaXNbZW1vamldXG4gICAgICBpZiAoc2tpbikge1xuICAgICAgICByZXR1cm4gZW1vamlPYmplY3QuZ2V0U2tpbihza2luKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtb2ppT2JqZWN0XG4gICAgfVxuXG4gICAgLy8gNC4gQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgc3BlY2lmaWVkIG5hdGl2ZSBlbW9qaVxuICAgIGlmICh0aGlzLl9uYXRpdmVFbW9qaXMuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbmF0aXZlRW1vamlzW2Vtb2ppXVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcmllc1xuICB9XG5cbiAgZW1vamkoZW1vamlJZCkge1xuICAgIGlmICh0aGlzLl9kYXRhLmFsaWFzZXMuaGFzT3duUHJvcGVydHkoZW1vamlJZCkpIHtcbiAgICAgIGVtb2ppSWQgPSB0aGlzLl9kYXRhLmFsaWFzZXNbZW1vamlJZF1cbiAgICB9XG4gICAgbGV0IGVtb2ppID0gdGhpcy5fZW1vamlzW2Vtb2ppSWRdXG4gICAgaWYgKCFlbW9qaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgZW1vamkgYnkgaWQ6ICcgKyBlbW9qaUlkKVxuICAgIH1cbiAgICByZXR1cm4gZW1vamlcbiAgfVxuXG4gIGZpcnN0RW1vamkoKSB7XG4gICAgbGV0IGVtb2ppID0gdGhpcy5fZW1vamlzW09iamVjdC5rZXlzKHRoaXMuX2Vtb2ppcylbMF1dXG4gICAgaWYgKCFlbW9qaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGdldCBmaXJzdCBlbW9qaScpXG4gICAgfVxuICAgIHJldHVybiBlbW9qaVxuICB9XG5cbiAgaGFzRW1vamkoZW1vamlJZCkge1xuICAgIGlmICh0aGlzLl9kYXRhLmFsaWFzZXMuaGFzT3duUHJvcGVydHkoZW1vamlJZCkpIHtcbiAgICAgIGVtb2ppSWQgPSB0aGlzLl9kYXRhLmFsaWFzZXNbZW1vamlJZF1cbiAgICB9XG4gICAgaWYgKHRoaXMuX2Vtb2ppc1tlbW9qaUlkXSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBuYXRpdmVFbW9qaSh1bmljb2RlRW1vamkpIHtcbiAgICBpZiAodGhpcy5fbmF0aXZlRW1vamlzLmhhc093blByb3BlcnR5KHVuaWNvZGVFbW9qaSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9uYXRpdmVFbW9qaXNbdW5pY29kZUVtb2ppXVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgc2VhcmNoKHZhbHVlLCBtYXhSZXN1bHRzKSB7XG4gICAgbWF4UmVzdWx0cyB8fCAobWF4UmVzdWx0cyA9IDc1KVxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBpZiAodmFsdWUgPT0gJy0nIHx8IHZhbHVlID09ICctMScpIHtcbiAgICAgIHJldHVybiBbdGhpcy5lbW9qaSgnLTEnKV1cbiAgICB9XG5cbiAgICBsZXQgdmFsdWVzID0gdmFsdWUudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1xcc3wsfFxcLXxfXSsvKVxuICAgIGxldCBhbGxSZXN1bHRzID0gW11cblxuICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMikge1xuICAgICAgdmFsdWVzID0gW3ZhbHVlc1swXSwgdmFsdWVzWzFdXVxuICAgIH1cblxuICAgIGFsbFJlc3VsdHMgPSB2YWx1ZXNcbiAgICAgIC5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIFN0YXJ0IHNlYXJjaGluIGluIHRoZSBnbG9iYWwgbGlzdCBvZiBlbW9qaXNcbiAgICAgICAgbGV0IGVtb2ppcyA9IHRoaXMuX2Vtb2ppc1xuICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gdGhpcy5fc2VhcmNoSW5kZXhcbiAgICAgICAgbGV0IGxlbmd0aCA9IDBcblxuICAgICAgICBmb3IgKGxldCBjaGFySW5kZXggPSAwOyBjaGFySW5kZXggPCB2YWx1ZS5sZW5ndGg7IGNoYXJJbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgY2hhciA9IHZhbHVlW2NoYXJJbmRleF1cbiAgICAgICAgICBsZW5ndGgrK1xuXG4gICAgICAgICAgY3VycmVudEluZGV4W2NoYXJdIHx8IChjdXJyZW50SW5kZXhbY2hhcl0gPSB7fSlcbiAgICAgICAgICBjdXJyZW50SW5kZXggPSBjdXJyZW50SW5kZXhbY2hhcl1cblxuICAgICAgICAgIGlmICghY3VycmVudEluZGV4LnJlc3VsdHMpIHtcbiAgICAgICAgICAgIGxldCBzY29yZXMgPSB7fVxuICAgICAgICAgICAgY3VycmVudEluZGV4LnJlc3VsdHMgPSBbXVxuICAgICAgICAgICAgY3VycmVudEluZGV4LmVtb2ppcyA9IHt9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGVtb2ppSWQgaW4gZW1vamlzKSB7XG4gICAgICAgICAgICAgIGxldCBlbW9qaSA9IGVtb2ppc1tlbW9qaUlkXVxuICAgICAgICAgICAgICAvLyBzZWFyY2ggaXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIHdpdGggd29yZHMsIHJlbGF0ZWRcbiAgICAgICAgICAgICAgLy8gdG8gdGhlIGVtb2ppLCBmb3IgZXhhbXBsZTpcbiAgICAgICAgICAgICAgLy8gc2VhcmNoOiBcInNtaWxleSxzbWlsaW5nLGZhY2Usam95LGhhaGEsOmQsOiksc21pbGUsZnVubnksPSksPS0pXCIsXG4gICAgICAgICAgICAgIGxldCBzZWFyY2ggPSBlbW9qaS5fZGF0YS5zZWFyY2hcbiAgICAgICAgICAgICAgbGV0IHN1YiA9IHZhbHVlLnN1YnN0cigwLCBsZW5ndGgpXG4gICAgICAgICAgICAgIGxldCBzdWJJbmRleCA9IHNlYXJjaC5pbmRleE9mKHN1YilcbiAgICAgICAgICAgICAgaWYgKHN1YkluZGV4ICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjb3JlID0gc3ViSW5kZXggKyAxXG4gICAgICAgICAgICAgICAgaWYgKHN1YiA9PSBlbW9qaUlkKSBzY29yZSA9IDBcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleC5yZXN1bHRzLnB1c2goZW1vamkpXG4gICAgICAgICAgICAgICAgY3VycmVudEluZGV4LmVtb2ppc1tlbW9qaUlkXSA9IGVtb2ppXG5cbiAgICAgICAgICAgICAgICBzY29yZXNbZW1vamlJZF0gPSBzY29yZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50SW5kZXgucmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBhU2NvcmUgPSBzY29yZXNbYS5pZF0sXG4gICAgICAgICAgICAgICAgYlNjb3JlID0gc2NvcmVzW2IuaWRdXG4gICAgICAgICAgICAgIHJldHVybiBhU2NvcmUgLSBiU2NvcmVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY29udGludWUgc2VhcmNoIGluIHRoZSByZWR1Y2VkIHNldCBvZiBlbW9qaXNcbiAgICAgICAgICBlbW9qaXMgPSBjdXJyZW50SW5kZXguZW1vamlzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleC5yZXN1bHRzXG4gICAgICAgIC8vIFRoZSBcImZpbHRlclwiIGNhbGwgcmVtb3ZlcyB1bmRlZmluZWQgdmFsdWVzIGZyb20gYWxsUmVzdWx0c1xuICAgICAgICAvLyBhcnJheSwgZm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgXCJ0ZXN0IFwiICh3aXRoIHRyYWlsaW5nIHNwYWNlKSxcbiAgICAgICAgLy8gd2Ugd2lsbCBnZXQgXCJbQXJyYXksIHVuZGVmaW5lZF1cIiBmb3IgYWxsUmVzdWx0cyBhbmQgYWZ0ZXJcbiAgICAgICAgLy8gdGhlIFwiZmlsdGVyXCIgY2FsbCBpdCB3aWxsIHR1cm4gaW50byBcIltBcnJheV1cIlxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGEpID0+IGEpXG5cbiAgICB2YXIgcmVzdWx0cyA9IG51bGxcbiAgICBpZiAoYWxsUmVzdWx0cy5sZW5ndGggPiAxKSB7XG4gICAgICByZXN1bHRzID0gaW50ZXJzZWN0LmFwcGx5KG51bGwsIGFsbFJlc3VsdHMpXG4gICAgfSBlbHNlIGlmIChhbGxSZXN1bHRzLmxlbmd0aCkge1xuICAgICAgcmVzdWx0cyA9IGFsbFJlc3VsdHNbMF1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IFtdXG4gICAgfVxuICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gbWF4UmVzdWx0cykge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc2xpY2UoMCwgbWF4UmVzdWx0cylcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfVxuXG4gIGFkZEN1c3RvbUVtb2ppKGN1c3RvbUVtb2ppKSB7XG4gICAgbGV0IGVtb2ppRGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGN1c3RvbUVtb2ppLCB7XG4gICAgICBpZDogY3VzdG9tRW1vamkuc2hvcnRfbmFtZXNbMF0sXG4gICAgICBjdXN0b206IHRydWUsXG4gICAgfSlcbiAgICBpZiAoIWVtb2ppRGF0YS5zZWFyY2gpIHtcbiAgICAgIGVtb2ppRGF0YS5zZWFyY2ggPSBidWlsZFNlYXJjaChlbW9qaURhdGEpXG4gICAgfVxuICAgIGxldCBlbW9qaSA9IG5ldyBFbW9qaURhdGEoZW1vamlEYXRhKVxuICAgIHRoaXMuX2Vtb2ppc1tlbW9qaS5pZF0gPSBlbW9qaVxuICAgIHRoaXMuX2N1c3RvbUNhdGVnb3J5LmVtb2ppcy5wdXNoKGVtb2ppKVxuICAgIHJldHVybiBlbW9qaVxuICB9XG5cbiAgYWRkRW1vamkoZW1vamlJZCkge1xuICAgIC8vIFdlIGV4cGVjdCB0aGUgY29ycmVjdCBlbW9qaSBpZCB0aGF0IGlzIHByZXNlbnQgaW4gdGhlIGVtb2ppcyBkYXRhLlxuICAgIGxldCBkYXRhID0gdGhpcy5fZGF0YS5lbW9qaXNbZW1vamlJZF1cblxuICAgIGlmICghdGhpcy5pc0Vtb2ppTmVlZGVkKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBsZXQgZW1vamkgPSBuZXcgRW1vamlEYXRhKGRhdGEpXG4gICAgdGhpcy5fZW1vamlzW2Vtb2ppSWRdID0gZW1vamlcbiAgICBpZiAoZW1vamkubmF0aXZlKSB7XG4gICAgICB0aGlzLl9uYXRpdmVFbW9qaXNbZW1vamkubmF0aXZlXSA9IGVtb2ppXG4gICAgfVxuICAgIGlmIChlbW9qaS5fc2tpbnMpIHtcbiAgICAgIGZvciAobGV0IGlkeCBpbiBlbW9qaS5fc2tpbnMpIHtcbiAgICAgICAgbGV0IHNraW4gPSBlbW9qaS5fc2tpbnNbaWR4XVxuICAgICAgICBpZiAoc2tpbi5uYXRpdmUpIHtcbiAgICAgICAgICB0aGlzLl9uYXRpdmVFbW9qaXNbc2tpbi5uYXRpdmVdID0gc2tpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVtb2ppLmVtb3RpY29ucykge1xuICAgICAgZW1vamkuZW1vdGljb25zLmZvckVhY2goKGVtb3RpY29uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9lbW90aWNvbnNbZW1vdGljb25dKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW1vdGljb25zW2Vtb3RpY29uXSA9IGVtb2ppSWRcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBlbW9qaVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHdlIG5lZWQgdG8gaW5jbHVkZSBnaXZlbiBjYXRlZ29yeS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhdGVnb3J5X2lkIC0gVGhlIGNhdGVnb3J5IGlkLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSAtIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZW1vamkuXG4gICAqL1xuICBpc0NhdGVnb3J5TmVlZGVkKGNhdGVnb3J5X2lkKSB7XG4gICAgbGV0IGlzSW5jbHVkZWQgPVxuICAgICAgdGhpcy5faW5jbHVkZSAmJiB0aGlzLl9pbmNsdWRlLmxlbmd0aFxuICAgICAgICA/IHRoaXMuX2luY2x1ZGUuaW5kZXhPZihjYXRlZ29yeV9pZCkgPiAtMVxuICAgICAgICA6IHRydWVcbiAgICBsZXQgaXNFeGNsdWRlZCA9XG4gICAgICB0aGlzLl9leGNsdWRlICYmIHRoaXMuX2V4Y2x1ZGUubGVuZ3RoXG4gICAgICAgID8gdGhpcy5fZXhjbHVkZS5pbmRleE9mKGNhdGVnb3J5X2lkKSA+IC0xXG4gICAgICAgIDogZmFsc2VcbiAgICBpZiAoIWlzSW5jbHVkZWQgfHwgaXNFeGNsdWRlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgd2UgbmVlZCB0byBpbmNsdWRlIGdpdmVuIGVtb2ppLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZW1vamkgLSBUaGUgcmF3IGVtb2ppIG9iamVjdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGVtb2ppLlxuICAgKi9cbiAgaXNFbW9qaU5lZWRlZChlbW9qaSkge1xuICAgIGlmICh0aGlzLl9lbW9qaXNGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbW9qaXNGaWx0ZXIoZW1vamkpXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVtb2ppRGF0YSB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0aGlzLl9kYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSlcbiAgICB0aGlzLl9za2lucyA9IG51bGxcbiAgICBpZiAodGhpcy5fZGF0YS5za2luX3ZhcmlhdGlvbnMpIHtcbiAgICAgIHRoaXMuX3NraW5zID0gW11cbiAgICAgIGZvciAodmFyIHNraW5JZHggaW4gU0tJTlMpIHtcbiAgICAgICAgbGV0IHNraW5LZXkgPSBTS0lOU1tza2luSWR4XVxuICAgICAgICBsZXQgdmFyaWF0aW9uRGF0YSA9IHRoaXMuX2RhdGEuc2tpbl92YXJpYXRpb25zW3NraW5LZXldXG4gICAgICAgIGxldCBza2luRGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEpXG4gICAgICAgIGZvciAobGV0IGsgaW4gdmFyaWF0aW9uRGF0YSkge1xuICAgICAgICAgIHNraW5EYXRhW2tdID0gdmFyaWF0aW9uRGF0YVtrXVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBza2luRGF0YS5za2luX3ZhcmlhdGlvbnNcbiAgICAgICAgc2tpbkRhdGFbJ3NraW5fdG9uZSddID0gcGFyc2VJbnQoc2tpbklkeCkgKyAxXG4gICAgICAgIHRoaXMuX3NraW5zLnB1c2gobmV3IEVtb2ppRGF0YShza2luRGF0YSkpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3Nhbml0aXplZCA9IHNhbml0aXplKHRoaXMuX2RhdGEpXG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMuX3Nhbml0aXplZCkge1xuICAgICAgdGhpc1trZXldID0gdGhpcy5fc2FuaXRpemVkW2tleV1cbiAgICB9XG4gICAgdGhpcy5zaG9ydF9uYW1lcyA9IHRoaXMuX2RhdGEuc2hvcnRfbmFtZXNcbiAgICB0aGlzLnNob3J0X25hbWUgPSB0aGlzLl9kYXRhLnNob3J0X25hbWVzWzBdXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKVxuICB9XG5cbiAgZ2V0U2tpbihza2luSWR4KSB7XG4gICAgaWYgKHNraW5JZHggJiYgc2tpbklkeCAhPSAnbmF0aXZlJyAmJiB0aGlzLl9za2lucykge1xuICAgICAgcmV0dXJuIHRoaXMuX3NraW5zW3NraW5JZHggLSAxXVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0UG9zaXRpb24oKSB7XG4gICAgbGV0IG11bHRpcGx5ID0gMTAwIC8gU0hFRVRfQ09MVU1OUyxcbiAgICAgIHggPSBNYXRoLnJvdW5kKG11bHRpcGx5ICogdGhpcy5fZGF0YS5zaGVldF94ICogMTAwKSAvIDEwMCxcbiAgICAgIHkgPSBNYXRoLnJvdW5kKG11bHRpcGx5ICogdGhpcy5fZGF0YS5zaGVldF95ICogMTAwKSAvIDEwMFxuICAgIHJldHVybiBgJHt4fSUgJHt5fSVgXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVtb2ppVmlldyB7XG4gIC8qKlxuICAgKiBlbW9qaSAtIEVtb2ppIHRvIGRpc3BsYXlcbiAgICogc2V0IC0gc3RyaW5nLCBlbW9qaSBzZXQgbmFtZVxuICAgKiBuYXRpdmUgLSBib29sZWFuLCB3aGV0aGVyIHRvIHJlbmRlciBuYXRpdmUgZW1vamlcbiAgICogZmFsbGJhY2sgLSBmYWxsYmFjayBmdW5jdGlvbiB0byByZW5kZXIgbWlzc2luZyBlbW9qaSwgb3B0aW9uYWxcbiAgICogZW1vamlUb29sdGlwIC0gd2V0aGVyIHdlIG5lZWQgdG8gc2hvdyB0aGUgZW1vamkgdG9vbHRpcCwgb3B0aW9uYWxcbiAgICogZW1vamlTaXplIC0gZW1vamkgc2l6ZSBpbiBwaXhlbHMsIG9wdGlvbmFsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbW9qaSwgc2tpbiwgc2V0LCBuYXRpdmUsIGZhbGxiYWNrLCBlbW9qaVRvb2x0aXAsIGVtb2ppU2l6ZSkge1xuICAgIHRoaXMuX2Vtb2ppID0gZW1vamlcbiAgICB0aGlzLl9uYXRpdmUgPSBuYXRpdmVcbiAgICB0aGlzLl9za2luID0gc2tpblxuICAgIHRoaXMuX3NldCA9IHNldFxuICAgIHRoaXMuX2ZhbGxiYWNrID0gZmFsbGJhY2tcblxuICAgIHRoaXMuY2FuUmVuZGVyID0gdGhpcy5fY2FuUmVuZGVyKClcbiAgICB0aGlzLmNzc0NsYXNzID0gdGhpcy5fY3NzQ2xhc3MoKVxuICAgIHRoaXMuY3NzU3R5bGUgPSB0aGlzLl9jc3NTdHlsZShlbW9qaVNpemUpXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5fY29udGVudCgpXG4gICAgdGhpcy50aXRsZSA9IGVtb2ppVG9vbHRpcCA9PT0gdHJ1ZSA/IGVtb2ppLnNob3J0X25hbWUgOiBudWxsXG5cbiAgICBPYmplY3QuZnJlZXplKHRoaXMpXG4gIH1cblxuICBnZXRFbW9qaSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW1vamkuZ2V0U2tpbih0aGlzLl9za2luKVxuICB9XG5cbiAgX2NhblJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5faXNDdXN0b20oKSB8fCB0aGlzLl9pc05hdGl2ZSgpIHx8IHRoaXMuX2hhc0Vtb2ppKCkgfHwgdGhpcy5fZmFsbGJhY2tcbiAgICApXG4gIH1cblxuICBfY3NzQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFsnZW1vamktc2V0LScgKyB0aGlzLl9zZXQsICdlbW9qaS10eXBlLScgKyB0aGlzLl9lbW9qaVR5cGUoKV1cbiAgfVxuXG4gIF9jc3NTdHlsZShlbW9qaVNpemUpIHtcbiAgICBsZXQgY3NzU3R5bGUgPSB7fVxuICAgIGlmICh0aGlzLl9pc0N1c3RvbSgpKSB7XG4gICAgICBjc3NTdHlsZSA9IHtcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiAndXJsKCcgKyB0aGlzLmdldEVtb2ppKCkuX2RhdGEuaW1hZ2VVcmwgKyAnKScsXG4gICAgICAgIGJhY2tncm91bmRTaXplOiAnMTAwJScsXG4gICAgICAgIHdpZHRoOiBlbW9qaVNpemUgKyAncHgnLFxuICAgICAgICBoZWlnaHQ6IGVtb2ppU2l6ZSArICdweCcsXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9oYXNFbW9qaSgpICYmICF0aGlzLl9pc05hdGl2ZSgpKSB7XG4gICAgICBjc3NTdHlsZSA9IHtcbiAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiB0aGlzLmdldEVtb2ppKCkuZ2V0UG9zaXRpb24oKSxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVtb2ppU2l6ZSkge1xuICAgICAgaWYgKHRoaXMuX2lzTmF0aXZlKCkpIHtcbiAgICAgICAgLy8gU2V0IGZvbnQtc2l6ZSBmb3IgbmF0aXZlIGVtb2ppLlxuICAgICAgICBjc3NTdHlsZSA9IE9iamVjdC5hc3NpZ24oY3NzU3R5bGUsIHtcbiAgICAgICAgICAvLyBmb250LXNpemUgaXMgdXNlZCBmb3IgbmF0aXZlIGVtb2ppIHdoaWNoIHdlIG5lZWRcbiAgICAgICAgICAvLyB0byBzY2FsZSB3aXRoIDAuOCBmYWN0b3IgdG8gaGF2ZSB0aGVtIGxvb2sgYXBwcm94aW1hdGVseVxuICAgICAgICAgIC8vIHRoZSBzYW1lIHNpemUgYXMgaW1hZ2UtYmFzZWQgZW1vamwuXG4gICAgICAgICAgZm9udFNpemU6IE1hdGgucm91bmQoZW1vamlTaXplICogMC44ICogMTApIC8gMTAgKyAncHgnLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2V0IHdpZHRoL2hlaWdodCBmb3IgaW1hZ2UgZW1vamkuXG4gICAgICAgIGNzc1N0eWxlID0gT2JqZWN0LmFzc2lnbihjc3NTdHlsZSwge1xuICAgICAgICAgIHdpZHRoOiBlbW9qaVNpemUgKyAncHgnLFxuICAgICAgICAgIGhlaWdodDogZW1vamlTaXplICsgJ3B4JyxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNzc1N0eWxlXG4gIH1cblxuICBfY29udGVudCgpIHtcbiAgICBpZiAodGhpcy5faXNDdXN0b20oKSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0aGlzLl9pc05hdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRFbW9qaSgpLm5hdGl2ZVxuICAgIH1cbiAgICBpZiAodGhpcy5faGFzRW1vamkoKSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mYWxsYmFjayA/IHRoaXMuX2ZhbGxiYWNrKHRoaXMuZ2V0RW1vamkoKSkgOiBudWxsXG4gIH1cblxuICBfaXNOYXRpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdGl2ZVxuICB9XG5cbiAgX2lzQ3VzdG9tKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVtb2ppKCkuY3VzdG9tXG4gIH1cblxuICBfaGFzRW1vamkoKSB7XG4gICAgaWYgKCF0aGlzLmdldEVtb2ppKCkuX2RhdGEpIHtcbiAgICAgIC8vIFJldHVybiBmYWxzZSBpZiB3ZSBoYXZlIG5vIGRhdGEuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgY29uc3QgaGFzSW1hZ2UgPSB0aGlzLmdldEVtb2ppKCkuX2RhdGFbJ2hhc19pbWdfJyArIHRoaXMuX3NldF1cbiAgICBpZiAoaGFzSW1hZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gaGFzX2ltZ194eHggaW4gdGhlIGRhdGEsIHdlIGFyZSB3b3JraW5nIHdpdGhcbiAgICAgIC8vIHNwZWNpZmljIGRhdGEgZmlsZSwgbGlrZSBmYWNlYm9vay5qc29uLCBzbyB3ZSBhc3N1bWUgYWxsXG4gICAgICAvLyBlbW9qaXMgYXJlIGF2YWlsYWJsZSAodGhlIDpzZXQgc2V0dGluZyBmb3IgcGlja2VyIHNob3VsZFxuICAgICAgLy8gbWF0Y2ggdGhlIGRhdGEgZmlsZSkuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIHdlIGFyZSB1c2luZyBhbGwuanNvbiBhbmQgY2FuIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudFxuICAgIC8vIHNldHMgLSBpbiB0aGlzIGNhc2UgdGhlIGBoYXNfaW1nX3tzZXRfbmFtZX1gIGlzIGEgYm9vbGVhbiB0aGF0XG4gICAgLy8gaW5kaWNhdGVzIGlmIHRoZXJlIGlzIHN1Y2ggaW1hZ2Ugb3Igbm90IGZvciBhIGdpdmVuIHNldC5cbiAgICByZXR1cm4gaGFzSW1hZ2VcbiAgfVxuXG4gIF9lbW9qaVR5cGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzQ3VzdG9tKCkpIHtcbiAgICAgIHJldHVybiAnY3VzdG9tJ1xuICAgIH1cbiAgICBpZiAodGhpcy5faXNOYXRpdmUoKSkge1xuICAgICAgcmV0dXJuICduYXRpdmUnXG4gICAgfVxuICAgIGlmICh0aGlzLl9oYXNFbW9qaSgpKSB7XG4gICAgICByZXR1cm4gJ2ltYWdlJ1xuICAgIH1cbiAgICByZXR1cm4gJ2ZhbGxiYWNrJ1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZShlbW9qaSkge1xuICB2YXIge1xuICAgICAgbmFtZSxcbiAgICAgIHNob3J0X25hbWVzLFxuICAgICAgc2tpbl90b25lLFxuICAgICAgc2tpbl92YXJpYXRpb25zLFxuICAgICAgZW1vdGljb25zLFxuICAgICAgdW5pZmllZCxcbiAgICAgIGN1c3RvbSxcbiAgICAgIGltYWdlVXJsLFxuICAgIH0gPSBlbW9qaSxcbiAgICBpZCA9IGVtb2ppLmlkIHx8IHNob3J0X25hbWVzWzBdLFxuICAgIGNvbG9ucyA9IGA6JHtpZH06YFxuXG4gIGlmIChjdXN0b20pIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBuYW1lLFxuICAgICAgY29sb25zLFxuICAgICAgZW1vdGljb25zLFxuICAgICAgY3VzdG9tLFxuICAgICAgaW1hZ2VVcmwsXG4gICAgfVxuICB9XG5cbiAgaWYgKHNraW5fdG9uZSkge1xuICAgIGNvbG9ucyArPSBgOnNraW4tdG9uZS0ke3NraW5fdG9uZX06YFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICBuYW1lLFxuICAgIGNvbG9ucyxcbiAgICBlbW90aWNvbnMsXG4gICAgdW5pZmllZDogdW5pZmllZC50b0xvd2VyQ2FzZSgpLFxuICAgIHNraW46IHNraW5fdG9uZSB8fCAoc2tpbl92YXJpYXRpb25zID8gMSA6IG51bGwpLFxuICAgIG5hdGl2ZTogdW5pZmllZFRvTmF0aXZlKHVuaWZpZWQpLFxuICB9XG59XG4iLCJpbXBvcnQgc3RvcmUgZnJvbSAnLi9zdG9yZSdcblxuY29uc3QgREVGQVVMVFMgPSBbXG4gICcrMScsXG4gICdncmlubmluZycsXG4gICdraXNzaW5nX2hlYXJ0JyxcbiAgJ2hlYXJ0X2V5ZXMnLFxuICAnbGF1Z2hpbmcnLFxuICAnc3R1Y2tfb3V0X3Rvbmd1ZV93aW5raW5nX2V5ZScsXG4gICdzd2VhdF9zbWlsZScsXG4gICdqb3knLFxuICAnc2NyZWFtJyxcbiAgJ2Rpc2FwcG9pbnRlZCcsXG4gICd1bmFtdXNlZCcsXG4gICd3ZWFyeScsXG4gICdzb2InLFxuICAnc3VuZ2xhc3NlcycsXG4gICdoZWFydCcsXG4gICdwb29wJyxcbl1cblxubGV0IGZyZXF1ZW50bHksIGluaXRpYWxpemVkXG5sZXQgZGVmYXVsdHMgPSB7fVxuXG5mdW5jdGlvbiBpbml0KCkge1xuICBpbml0aWFsaXplZCA9IHRydWVcbiAgZnJlcXVlbnRseSA9IHN0b3JlLmdldCgnZnJlcXVlbnRseScpXG59XG5cbmZ1bmN0aW9uIGFkZChlbW9qaSkge1xuICBpZiAoIWluaXRpYWxpemVkKSBpbml0KClcbiAgdmFyIHsgaWQgfSA9IGVtb2ppXG5cbiAgZnJlcXVlbnRseSB8fCAoZnJlcXVlbnRseSA9IGRlZmF1bHRzKVxuICBmcmVxdWVudGx5W2lkXSB8fCAoZnJlcXVlbnRseVtpZF0gPSAwKVxuICBmcmVxdWVudGx5W2lkXSArPSAxXG5cbiAgc3RvcmUuc2V0KCdsYXN0JywgaWQpXG4gIHN0b3JlLnNldCgnZnJlcXVlbnRseScsIGZyZXF1ZW50bHkpXG59XG5cbmZ1bmN0aW9uIGdldChtYXhOdW1iZXIpIHtcbiAgaWYgKCFpbml0aWFsaXplZCkgaW5pdCgpXG4gIGlmICghZnJlcXVlbnRseSkge1xuICAgIGRlZmF1bHRzID0ge31cblxuICAgIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgICBsZXQgZGVmYXVsdExlbmd0aCA9IE1hdGgubWluKG1heE51bWJlciwgREVGQVVMVFMubGVuZ3RoKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVmYXVsdExlbmd0aDsgaSsrKSB7XG4gICAgICBkZWZhdWx0c1tERUZBVUxUU1tpXV0gPSBkZWZhdWx0TGVuZ3RoIC0gaVxuICAgICAgcmVzdWx0LnB1c2goREVGQVVMVFNbaV0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgY29uc3QgcXVhbnRpdHkgPSBtYXhOdW1iZXJcbiAgY29uc3QgZnJlcXVlbnRseUtleXMgPSBbXVxuXG4gIGZvciAobGV0IGtleSBpbiBmcmVxdWVudGx5KSB7XG4gICAgaWYgKGZyZXF1ZW50bHkuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgZnJlcXVlbnRseUtleXMucHVzaChrZXkpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc29ydGVkID0gZnJlcXVlbnRseUtleXNcbiAgICAuc29ydCgoYSwgYikgPT4gZnJlcXVlbnRseVthXSAtIGZyZXF1ZW50bHlbYl0pXG4gICAgLnJldmVyc2UoKVxuICBjb25zdCBzbGljZWQgPSBzb3J0ZWQuc2xpY2UoMCwgcXVhbnRpdHkpXG5cbiAgY29uc3QgbGFzdCA9IHN0b3JlLmdldCgnbGFzdCcpXG5cbiAgaWYgKGxhc3QgJiYgc2xpY2VkLmluZGV4T2YobGFzdCkgPT0gLTEpIHtcbiAgICBzbGljZWQucG9wKClcbiAgICBzbGljZWQucHVzaChsYXN0KVxuICB9XG5cbiAgcmV0dXJuIHNsaWNlZFxufVxuXG5leHBvcnQgZGVmYXVsdCB7IGFkZCwgZ2V0IH1cbiIsImltcG9ydCBzdHJpbmdGcm9tQ29kZVBvaW50IGZyb20gJy4uL3BvbHlmaWxscy9zdHJpbmdGcm9tQ29kZVBvaW50J1xuXG5mdW5jdGlvbiB1bmlmaWVkVG9OYXRpdmUodW5pZmllZCkge1xuICB2YXIgdW5pY29kZXMgPSB1bmlmaWVkLnNwbGl0KCctJyksXG4gICAgY29kZVBvaW50cyA9IHVuaWNvZGVzLm1hcCgodSkgPT4gYDB4JHt1fWApXG5cbiAgcmV0dXJuIHN0cmluZ0Zyb21Db2RlUG9pbnQuYXBwbHkobnVsbCwgY29kZVBvaW50cylcbn1cblxuZnVuY3Rpb24gdW5pcShhcnIpIHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgIGlmIChhY2MuaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcbiAgICAgIGFjYy5wdXNoKGl0ZW0pXG4gICAgfVxuICAgIHJldHVybiBhY2NcbiAgfSwgW10pXG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdChhLCBiKSB7XG4gIGNvbnN0IHVuaXFBID0gdW5pcShhKVxuICBjb25zdCB1bmlxQiA9IHVuaXEoYilcblxuICByZXR1cm4gdW5pcUEuZmlsdGVyKChpdGVtKSA9PiB1bmlxQi5pbmRleE9mKGl0ZW0pID49IDApXG59XG5cbmZ1bmN0aW9uIGRlZXBNZXJnZShhLCBiKSB7XG4gIHZhciBvID0ge31cblxuICBmb3IgKGxldCBrZXkgaW4gYSkge1xuICAgIGxldCBvcmlnaW5hbFZhbHVlID0gYVtrZXldLFxuICAgICAgdmFsdWUgPSBvcmlnaW5hbFZhbHVlXG5cbiAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICB2YWx1ZSA9IGJba2V5XVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YWx1ZSA9IGRlZXBNZXJnZShvcmlnaW5hbFZhbHVlLCB2YWx1ZSlcbiAgICB9XG5cbiAgICBvW2tleV0gPSB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIG9cbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NvbmljZG9lL21lYXN1cmUtc2Nyb2xsYmFyXG5mdW5jdGlvbiBtZWFzdXJlU2Nyb2xsYmFyKCkge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09ICd1bmRlZmluZWQnKSByZXR1cm4gMFxuICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuXG4gIGRpdi5zdHlsZS53aWR0aCA9ICcxMDBweCdcbiAgZGl2LnN0eWxlLmhlaWdodCA9ICcxMDBweCdcbiAgZGl2LnN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCdcbiAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xuICBkaXYuc3R5bGUudG9wID0gJy05OTk5cHgnXG5cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpXG4gIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gZGl2Lm9mZnNldFdpZHRoIC0gZGl2LmNsaWVudFdpZHRoXG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KVxuXG4gIHJldHVybiBzY3JvbGxiYXJXaWR0aFxufVxuXG5leHBvcnQgeyB1bmlxLCBpbnRlcnNlY3QsIGRlZXBNZXJnZSwgdW5pZmllZFRvTmF0aXZlLCBtZWFzdXJlU2Nyb2xsYmFyIH1cbiIsImNvbnN0IEVtb2ppUHJvcHMgPSB7XG4gIG5hdGl2ZToge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHRvb2x0aXA6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBmYWxsYmFjazoge1xuICAgIHR5cGU6IEZ1bmN0aW9uLFxuICB9LFxuICBza2luOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDEsXG4gIH0sXG4gIHNldDoge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICBkZWZhdWx0OiAnYXBwbGUnLFxuICB9LFxuICBlbW9qaToge1xuICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG4gIHNpemU6IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgZGVmYXVsdDogbnVsbCxcbiAgfSxcbn1cblxuY29uc3QgUGlja2VyUHJvcHMgPSB7XG4gIHBlckxpbmU6IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgZGVmYXVsdDogOSxcbiAgfSxcbiAgbWF4U2VhcmNoUmVzdWx0czoge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiA3NSxcbiAgfSxcbiAgZW1vamlTaXplOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDI0LFxuICB9LFxuICB0aXRsZToge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICBkZWZhdWx0OiAnRW1vamkgTWFydOKEoicsXG4gIH0sXG4gIGVtb2ppOiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGRlZmF1bHQ6ICdkZXBhcnRtZW50X3N0b3JlJyxcbiAgfSxcbiAgY29sb3I6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZGVmYXVsdDogJyNhZTY1YzUnLFxuICB9LFxuICBzZXQ6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZGVmYXVsdDogJ2FwcGxlJyxcbiAgfSxcbiAgc2tpbjoge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiBudWxsLFxuICB9LFxuICBkZWZhdWx0U2tpbjoge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiAxLFxuICB9LFxuICBuYXRpdmU6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBlbW9qaVRvb2x0aXA6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBhdXRvRm9jdXM6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBpMThuOiB7XG4gICAgdHlwZTogT2JqZWN0LFxuICAgIGRlZmF1bHQoKSB7XG4gICAgICByZXR1cm4ge31cbiAgICB9LFxuICB9LFxuICBzaG93UHJldmlldzoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgc2hvd1NlYXJjaDoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgc2hvd0NhdGVnb3JpZXM6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHNob3dTa2luVG9uZXM6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGluZmluaXRlU2Nyb2xsOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBwaWNrZXJTdHlsZXM6IHtcbiAgICB0eXBlOiBPYmplY3QsXG4gICAgZGVmYXVsdCgpIHtcbiAgICAgIHJldHVybiB7fVxuICAgIH0sXG4gIH0sXG59XG5cbmV4cG9ydCB7IEVtb2ppUHJvcHMsIFBpY2tlclByb3BzIH1cbiIsInZhciBOQU1FU1BBQ0UgPSAnZW1vamktbWFydCdcblxuY29uc3QgX0pTT04gPSBKU09OXG5cbnZhciBpc0xvY2FsU3RvcmFnZVN1cHBvcnRlZCA9XG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICdsb2NhbFN0b3JhZ2UnIGluIHdpbmRvd1xuXG5sZXQgZ2V0dGVyXG5sZXQgc2V0dGVyXG5cbmZ1bmN0aW9uIHNldEhhbmRsZXJzKGhhbmRsZXJzKSB7XG4gIGhhbmRsZXJzIHx8IChoYW5kbGVycyA9IHt9KVxuXG4gIGdldHRlciA9IGhhbmRsZXJzLmdldHRlclxuICBzZXR0ZXIgPSBoYW5kbGVycy5zZXR0ZXJcbn1cblxuZnVuY3Rpb24gc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSkge1xuICBOQU1FU1BBQ0UgPSBuYW1lc3BhY2Vcbn1cblxuZnVuY3Rpb24gdXBkYXRlKHN0YXRlKSB7XG4gIGZvciAobGV0IGtleSBpbiBzdGF0ZSkge1xuICAgIGxldCB2YWx1ZSA9IHN0YXRlW2tleV1cbiAgICBzZXQoa2V5LCB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICBpZiAoc2V0dGVyKSB7XG4gICAgc2V0dGVyKGtleSwgdmFsdWUpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCFpc0xvY2FsU3RvcmFnZVN1cHBvcnRlZCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2VbYCR7TkFNRVNQQUNFfS4ke2tleX1gXSA9IF9KU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldChrZXkpIHtcbiAgaWYgKGdldHRlcikge1xuICAgIHJldHVybiBnZXR0ZXIoa2V5KVxuICB9IGVsc2Uge1xuICAgIGlmICghaXNMb2NhbFN0b3JhZ2VTdXBwb3J0ZWQpIHJldHVyblxuICAgIHRyeSB7XG4gICAgICB2YXIgdmFsdWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlW2Ake05BTUVTUEFDRX0uJHtrZXl9YF1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IHVwZGF0ZSwgc2V0LCBnZXQsIHNldE5hbWVzcGFjZSwgc2V0SGFuZGxlcnMgfVxuIiwiLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHA6Ly9teS5vcGVyYS5jb20vZW1vbGxlci9ibG9nLzIwMTEvMTIvMjAvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1lci1hbmltYXRpbmdcblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHBvbHlmaWxsIGJ5IEVyaWsgTcO2bGxlci4gZml4ZXMgZnJvbSBQYXVsIElyaXNoIGFuZCBUaW5vIFppamRlbFxuXG4vLyBNSVQgbGljZW5zZVxuXG52YXIgaXNXaW5kb3dBdmFpbGFibGUgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuXG5pc1dpbmRvd0F2YWlsYWJsZSAmJlxuICAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxhc3RUaW1lID0gMFxuICAgIHZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXVxuXG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID1cbiAgICAgICAgd2luZG93W3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ11cbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9XG4gICAgICAgIHdpbmRvd1t2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgd2luZG93W3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ11cbiAgICB9XG5cbiAgICBpZiAoIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpXG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oY2FsbGJhY2ssIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIGN1cnJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgICAgdmFyIHRpbWVUb0NhbGwgPSBNYXRoLm1heCgwLCAxNiAtIChjdXJyVGltZSAtIGxhc3RUaW1lKSlcbiAgICAgICAgdmFyIGlkID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY2FsbGJhY2soY3VyclRpbWUgKyB0aW1lVG9DYWxsKVxuICAgICAgICB9LCB0aW1lVG9DYWxsKVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VyclRpbWUgKyB0aW1lVG9DYWxsXG4gICAgICAgIHJldHVybiBpZFxuICAgICAgfVxuXG4gICAgaWYgKCF3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUpXG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpXG4gICAgICB9XG4gIH0pKClcbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file