// ==UserScript== // @name Sniffies Tools Userscript // @namespace https://sniffies.com // @author Beam // @version 0.4.1 // @description Recreating and expanding features on top of Sniffies.com // @match https://sniffies.com/* // @match https://*.sniffies.com/* // @run-at document-start // @grant none // ==/UserScript== // @buildTime 2026-10-23T04:53:06.854Z // @buildLocation remote "use strict";(()=>{var $o=e=>`[sniffies-${e}]`,_=e=>{let t=$o(e),n=((...o)=>{});return n.warn=(...o)=>{console.warn(t,...o)},n.error=(...o)=>{console.error(t,...o)},n};var z=e=>e==="sniffies.com"||e.endsWith(".sniffies.com"),X="prod.ws.sniffies.com",J="userId",Re={inches:{min:48,max:84},cm:{min:120,max:210}},ke={lb:{min:90,max:400},kg:{min:40,max:180}},Kt=2.54,zt=2.20462,we="/api/authenticate/current",Xt="/api/post-authentication",Jt="/api/softReload",Y="/api/v2/post-authentication/chat-data",Q="/api/messages",Yt="/api/messages/photo-visibility",Qt="/api/messages/all-photos-visibility",Ie="/api/visitor/current/location",Zt=/\/api\/city\/[^/?]+/;var qo=["data.connectUpdateTime","data.profile.extended.sexuality","data.profile.extended.stats.heightInCm","data.profile.extended.stats.weightInKg"],Vo=(e,t)=>{let n=e;for(let o of t.split(".")){if(typeof n!="object"||n===null||!(o in n))return!1;n=n[o]}return!0},Ko=_("profile-filter"),en=new Set,zo=e=>{for(let t of qo)!en.has(t)&&!Vo(e,t)&&(en.add(t),Ko.warn(`profile ${e._id} has no ${t}; Sniffies may have changed its profile format`))},Fe=e=>{let t=new Map,n=new Map,o="",i=(r,a)=>{if(r._id===o)return!1;let p=e.find(c=>c.isActive()&&!(a&&c.mapOnly)&&c.hides(r));return p?(n.has(p)||n.set(p,new Set),n.get(p).add(r._id),!0):!1},s=r=>({hidesProfile:a=>(a.data&&(zo(a),t.set(a._id,a)),i(a,r)),hidesId:a=>i(t.get(a)??{_id:a},r)});return{isActive:()=>e.some(r=>r.isActive()),keepsOnMap:()=>e.some(r=>r.keepsOnMap&&r.isActive()),...s(!1),chat:s(!0),setSelfId:r=>{o=r},noteUpdate:({_id:r,data:a})=>{let p=t.get(r);p?.data&&a?.connectUpdateTime&&t.set(r,{...p,data:{...p.data,connectUpdateTime:a.connectUpdateTime}})},flush:()=>{let r=[...n].map(([a,p])=>({rule:a,ids:[...p]}));n.clear();for(let{rule:a,ids:p}of r)a.onFiltered?.(p);return r.map(({rule:a,ids:p})=>({rule:a.name,ids:p}))}}},Ne=(e,t)=>({name:"bot-block",isActive:()=>e().enabled&&e().blockedIds.size>0,hides:n=>e().blockedIds.has(n._id),onFiltered:t}),N=["male","female","nonbinary","undefined"],on={enabled:!1,genders:[...N]},rn=e=>{let t=e??{},{genders:n}=t,o=Array.isArray(n)?N.filter(i=>n.includes(i)):[];return{enabled:t.enabled===!0,genders:o.length>0?o:[...N]}},Ae=e=>e.enabled?e.genders:N,Xo={man:"male",woman:"female",nonbinary:"nonbinary"},sn=e=>{if(!e.data)return null;let t=e.data.profile?.extended?.sexuality?.gender;return t&&Xo[t]||"undefined"},an=e=>({name:"gender",mapOnly:!0,isActive:()=>{let{enabled:t,genders:n}=e();return t&&n.length>0&&n.length{let n=sn(t);return n!==null&&!e().genders.includes(n)}}),ln=()=>typeof navigator>"u"||!/-(US|LR|MM)$/i.test(navigator.language),tn=()=>({enabled:!1,min:null,max:null,metric:ln(),includeUnspecified:!1}),nn=e=>{let t=e??{},n=o=>typeof o=="number"&&isFinite(o)?o:null;return{enabled:t.enabled===!0,min:n(t.min),max:n(t.max),metric:typeof t.metric=="boolean"?t.metric:ln(),includeUnspecified:t.includeUnspecified===!0}},ee=e=>e.enabled&&(e.min!==null||e.max!==null)?`${e.min??""}-${e.max??""}${e.includeUnspecified?"+unspecified":""}`:"",Ce=(e,t,n)=>({name:e,mapOnly:!0,isActive:()=>ee(t())!=="",hides:o=>{if(!o.data)return!1;let i=n(o),{min:s,max:r,includeUnspecified:a}=t();return typeof i!="number"?!a:s!==null&&ir}}),cn={enabled:!1,minutes:null},Be=[15,30,45,60,90,180,360,720,1440,2160,2880],Me=e=>`< ${e<60?`${e} min`:`${e/60} hour${e===60?"":"s"}`} ago`,Jo=e=>{let t=e??{},n=Be.includes(t.minutes)?t.minutes:null,o={enabled:t.enabled===!0&&n!==null,minutes:n};return n!==null&&typeof t.cutoff=="number"&&isFinite(t.cutoff)&&(o.cutoff=t.cutoff),o},te=e=>!e.enabled||e.minutes===null?"":e.cutoff===void 0?String(e.minutes):`static${e.cutoff}`,ne=(e,t)=>{let n=new Date(e),o=n.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"}).replace(/\s+/g,"");return`${n.toDateString()===new Date(t).toDateString()?"":`${n.toLocaleDateString([],{weekday:"short"})} `}${o}`},dn=(e,t)=>`Cruisers online after ${ne(t-e*6e4,t)}`,pn=e=>{let t=Date.now();return{name:"online",mapOnly:!0,keepsOnMap:!0,isActive:()=>te(e())!=="",hides:n=>n.data?!(Date.parse(n.data.connectUpdateTime??"")>=(e().cutoff??t-e().minutes*6e4)):!1}},Z=(e,t)=>{let n=[];for(let o=e.min;o<=e.max;o+=t)n.push(o);return n},un={imperial:{unit:"ft",choices:Z(Re.inches,1).map(e=>({value:Math.round(e*Kt),label:`${Math.floor(e/12)}'${e%12}"`}))},metric:{unit:"cm",choices:Z(Re.cm,1).map(e=>({value:e,label:`${e}cm`}))}},fn={imperial:{unit:"lb",choices:Z(ke.lb,5).map(e=>({value:Math.round(e/zt),label:`${e}lb`}))},metric:{unit:"kg",choices:Z(ke.kg,5).map(e=>({value:e,label:`${e}kg`}))}},He=(e,t)=>e.reduce((n,o)=>Math.abs(o.value-t){let{choices:n}=e.metric?t.metric:t.imperial,o=i=>He(n,i).label;return e.min!==null&&e.max!==null?`${o(e.min)} - ${o(e.max)}`:e.min!==null?`${o(e.min)} +`:e.max!==null?`Up to ${o(e.max)}`:null},G={gender:on,height:tn(),weight:tn(),online:cn},oe=e=>{let t=e??{};return{gender:rn(t.gender),height:nn(t.height),weight:nn(t.weight),online:Jo(t.online)}},De=(e,t)=>t?e:{gender:{...e.gender,enabled:!1},height:{...e.height,enabled:!1},weight:{...e.weight,enabled:!1},online:{...e.online,enabled:!1}},Ue=e=>[an(()=>e().gender),Ce("height",()=>e().height,t=>t.data?.profile?.extended?.stats?.heightInCm),Ce("weight",()=>e().weight,t=>t.data?.profile?.extended?.stats?.weightInKg),pn(()=>e().online)];var A={enabled:!1,latitude:0,longitude:0},I=e=>e.latitude!==0||e.longitude!==0,Ge={enabled:!1,openInNewTab:!0},gn={location:!0,boundary:!0,photos:!0},re=e=>{let t=e??{};return{location:t.location!==!1,boundary:t.boundary!==!1,photos:t.photos!==!1}};var bn={guid:"",phone:"",geoOverride:A,profileBorderOpen:Ge,premiumSectionOpen:!1,favoritesEnabled:!1,favoritesSectionOpen:!1,sniffiesUserId:"",blockedBots:[],blockedBotsFetchedAt:0,botBlockingEnabled:!0,botBlockingSectionOpen:!1,blockedBotEventsByDay:{},profileFilters:G,profileFiltersEnabled:!1,profileFiltersSectionOpen:!1,hasPlus:null,premiumFeaturesEnabled:!0,premiumFeatureFlags:gn},je=(e,t,n)=>e!==void 0?e:t===void 0&&n===void 0?bn.premiumFeaturesEnabled:t===!0||n===!0;var We=(e,t)=>{let n=_("geo"),o=navigator.geolocation;if(!o||o.__sniffiesPatched)return null;let i=o.getCurrentPosition.bind(o),s=o.watchPosition.bind(o),r=o.clearWatch.bind(o),a=new Map,p=l=>{let f=e();if(!f?.enabled||!I(f))return n("override disabled or no location captured yet, passing real coords",l.coords),l;let g={coords:{latitude:f.latitude,longitude:f.longitude,accuracy:10,altitude:null,altitudeAccuracy:null,heading:null,speed:null},timestamp:Date.now()};return n("applying override",g.coords),g},c=l=>f=>{t?.({latitude:f.coords.latitude,longitude:f.coords.longitude}),l(p(f))},d=l=>f=>{n("native geolocation call failed",{code:f.code,message:f.message}),l?.(f)};o.getCurrentPosition=(l,f,g)=>{n("getCurrentPosition intercepted"),i(c(l),d(f),g)},o.watchPosition=(l,f,g)=>{n("watchPosition intercepted");let h=c(l),E=s(h,d(f),g);return a.set(E,h),E},o.clearWatch=l=>{a.delete(l),r(l)};let u=()=>{a.size!==0&&i(l=>{for(let f of a.values())f(l)},void 0,{maximumAge:0})};return o.__sniffiesPatched=!0,{nativeGetCurrentPosition:i,nativeWatchPosition:s,refreshWatches:u}};var Yo=e=>{try{let t=new URL(e,typeof location<"u"?location.href:void 0);return t.host!==X?null:t.searchParams.get(J)}catch{return null}},$e=e=>{let t=_("user-id"),n=typeof WebSocket<"u"?WebSocket:void 0;if(!n||n.__sniffiesUserIdPatched)return t("hook not installed (no WebSocket or already patched)"),!1;let o=function(i,s){let r=Yo(i);return r&&(t("observed userId on WebSocket connect",r),e(r)),s===void 0?new n(i):new n(i,s)};return o.prototype=n.prototype,o.CONNECTING=n.CONNECTING,o.OPEN=n.OPEN,o.CLOSING=n.CLOSING,o.CLOSED=n.CLOSED,o.__sniffiesUserIdPatched=!0,window.WebSocket=o,t("hook installed"),!0};var Qo=_("profile-filter"),hn=new Set,C=(e,t)=>{!e&&!hn.has(t)&&(hn.add(t),Qo.warn(`${t}; Sniffies may have changed its API`))},ie=(e,t)=>e?.filter(n=>!t.hidesProfile(n)),En=(e,t)=>(C(Array.isArray(e.nearbyVisitors?.visitors),"map init has no nearbyVisitors.visitors list"),C(Array.isArray(e.partialVisitorData),"map init has no partialVisitorData list"),e.nearbyVisitors?.visitors&&(e.nearbyVisitors.visitors=ie(e.nearbyVisitors.visitors,t)),e.partialVisitorData&&(e.partialVisitorData=ie(e.partialVisitorData,t.chat)),e),Zo=12500,er=e=>{let t=e.nearbyVisitors;return C(typeof t?.emitRadiusInMiles=="number","map payload has no nearbyVisitors.emitRadiusInMiles"),t&&typeof t.emitRadiusInMiles=="number"&&(t.emitRadiusInMiles=Math.max(t.emitRadiusInMiles,Zo)),e},yn=(e,{chat:t})=>{C(Array.isArray(e.conversationData?.conversations)&&Array.isArray(e.conversationData?.userIds),"chat init has no conversationData.conversations / userIds list"),C(Array.isArray(e.partialVisitorData),"chat init has no partialVisitorData list"),e.partialVisitorData&&(e.partialVisitorData=ie(e.partialVisitorData,t));let n=o=>{let i=!1;for(let s of[o.participants,o.author1,o.author2])s&&t.hidesId(s)&&(i=!0);return i};return e.conversationData?.conversations&&(e.conversationData.conversations=e.conversationData.conversations.filter(o=>!n(o))),e.conversationData?.userIds&&(e.conversationData.userIds=e.conversationData.userIds.filter(o=>!t.hidesId(o))),e},vn=(e,{chat:t})=>(C(Array.isArray(e.messages),"chat thread has no messages list"),C(Array.isArray(e.partialUsers),"chat thread has no partialUsers list"),e.partialUsers&&(e.partialUsers=ie(e.partialUsers,t)),e.messages&&(e.messages=e.messages.filter(n=>!(n.author&&t.hidesId(n.author)))),e),tr=(e,t,n)=>{switch(e){case"post-authentication":case"soft-reload":return En(t,n);case"chat-data":return yn(t,n);case"messages":return vn(t,n)}},qe=e=>typeof e?._id=="string"?e:null,nr=e=>{let t;try{t=JSON.parse(e)}catch{return null}if(typeof t.eventName!="string")return null;if(t.eventName==="userJoined"){let n=qe(t.data);return C(n!==null,"userJoined frame has no profile with an _id"),{eventName:t.eventName,subject:n}}if(t.eventName==="userUpdated"){let n=qe(t.data);return C(n!==null,"userUpdated frame has no profile with an _id"),{eventName:t.eventName,subject:n?._id??null,update:n??void 0}}if(t.eventName==="userAwake"||t.eventName==="userDisconnected"||t.eventName==="userRemoved")return C(typeof t.data=="string",`${t.eventName} frame has no string id`),{eventName:t.eventName,subject:typeof t.data=="string"?t.data:null};if(t.eventName==="newMsg"){let n=t.data?.message?.author;return{eventName:t.eventName,subject:typeof n=="string"?n:null,chat:!0}}if(t.eventName==="newConversation"){let n=t.data?.partialUser;return{eventName:t.eventName,subject:qe(n),chat:!0}}return{eventName:t.eventName,subject:null}},or=(e,t)=>{if((e?.eventName==="userDisconnected"||e?.eventName==="userRemoved")&&t.keepsOnMap())return!0;if(!e?.subject)return!1;e.update&&t.noteUpdate(e.update);let n=e.chat?t.chat:t;return typeof e.subject=="string"?n.hidesId(e.subject):n.hidesProfile(e.subject)};var rr=e=>{try{let t=new URL(e,typeof location<"u"?location.href:void 0);return z(t.host)?t.pathname===Xt?"post-authentication":t.pathname===Jt?"soft-reload":t.pathname===Y?"chat-data":t.pathname===Q?"messages":null:null}catch{return null}},ir=(e,t,n)=>{let o=XMLHttpRequest.prototype;if(o.__sniffiesBotBlockPatched)return t("XHR filter not installed (already patched)"),!1;let i=o.open,s=o.send,r=Object.getOwnPropertyDescriptor(o,"responseText"),a=Object.getOwnPropertyDescriptor(o,"response");return!r?.get||!a?.get?(t.warn("XHR filter not installed (responseText/response are not accessor properties)"),!1):(o.open=function(p,c,...d){return this.__sniffiesFilterKind=rr(c.toString()),i.apply(this,[p,c,...d])},o.send=function(...p){let c=this.__sniffiesFilterKind;if(c){let d=this.responseType||"";if(d===""||d==="text"||d==="json"){let u=null,l=()=>{if(u)return u;let f=e.isActive(),g=n()&&(c==="post-authentication"||c==="soft-reload"),h=f||g;t(`${c} response read`,{filtering:f,ms:Math.round(performance.now())});let E,m="";if(d==="json")E=a.get.call(this);else if(m=r.get.call(this),h)try{E=JSON.parse(m)}catch{return u={text:m,json:void 0},u}if(h){if(f){E=tr(c,E,e);for(let{rule:y,ids:v}of e.flush())t.warn(`${y} filtered account(s) from ${c} response:`,v)}g&&(E=er(E)),d!=="json"&&(m=JSON.stringify(E))}return u={text:m,json:E},u};d!=="json"&&Object.defineProperty(this,"responseText",{configurable:!0,get:()=>l().text}),Object.defineProperty(this,"response",{configurable:!0,get:()=>d==="json"?l().json:l().text})}else t.warn(`unsupported responseType "${d}" for ${c}, not filtering`)}return s.apply(this,p)},o.__sniffiesBotBlockPatched=!0,t("XHR filter installed"),!0)},sr=e=>{try{return new URL(e,typeof location<"u"?location.href:void 0).host===X}catch{return!1}},ar=(e,t,n,o)=>{let i=c=>{if(!(c instanceof MessageEvent)||typeof c.data!="string"||!t.isActive())return!1;let d=nr(c.data);if(!or(d,t))return!1;for(let{rule:u,ids:l}of t.flush())o.warn(`${u} filtered account from WS ${d.eventName} frame:`,...l);return!0},s=e.addEventListener.bind(e),r=e.removeEventListener.bind(e),a=new WeakMap,p=c=>{let d=a.get(c);if(d)return d;let u=typeof c=="function"?c:c.handleEvent.bind(c),l=f=>{i(f)||u(f)};return a.set(c,l),l};if(e.addEventListener=((c,d,u)=>c!=="message"||!d?s(c,d,u):s(c,p(d),u)),e.removeEventListener=((c,d,u)=>c!=="message"||!d?r(c,d,u):r(c,a.get(d)??d,u)),n?.get&&n.set){let c=null;Object.defineProperty(e,"onmessage",{configurable:!0,enumerable:!0,get:()=>c,set:d=>{if(c=d,typeof d!="function"){n.set.call(e,d);return}n.set.call(e,function(u){i(u)||d.call(this,u)})}})}},lr=(e,t)=>{let n=typeof WebSocket<"u"?WebSocket:void 0;if(!n||n.__sniffiesBotBlockPatched)return t("WebSocket filter not installed (no WebSocket or already patched)"),!1;let o=Object.getOwnPropertyDescriptor(n.prototype,"onmessage"),i=function(s,r){let a=r===void 0?new n(s):new n(s,r);return sr(s)&&(e.setSelfId(new URL(s,location.href).searchParams.get(J)??""),ar(a,e,o,t)),a};return i.prototype=n.prototype,i.CONNECTING=n.CONNECTING,i.OPEN=n.OPEN,i.CLOSING=n.CLOSING,i.CLOSED=n.CLOSED,i.__sniffiesBotBlockPatched=!0,window.WebSocket=i,t("WebSocket filter installed"),!0},Ve=(e,t=()=>!1)=>{let n=_("profile-filter"),o=Fe(e);return{xhrInstalled:ir(o,n,t),wsInstalled:lr(o,n)}};var Sn=`.snp-filter-row .snp-filter-body { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; width: 100%; padding: 4px 0; font-size: 12px; color: #7a90a4; } #snp-online-filter .trailing { width: auto; min-width: 0; flex: none; } #snp-online-filter .trailing .snp-filter-apply { width: auto; white-space: nowrap; } .snp-filter-row .snp-online-since { margin: 2px 0 0; font-size: 12px; color: #7a90a4; } .snp-filter-row .snp-gender-option, .snp-filter-row .snp-filter-apply { border: 1px solid #7a90a4; border-radius: 12px; padding: 4px 10px; font-size: 12px; cursor: pointer; background: transparent; color: #7a90a4; } .snp-filter-row .snp-gender-option.active { border-color: #ff5500; background: #ff5500; color: #ffffff; } .snp-filter-row .snp-filter-apply { border-color: #ffffff; color: #ffffff; font-weight: 600; } .snp-filter-row .snp-filter-apply[hidden] { display: none; } .snp-filter-row .snp-filter-off .snp-gender-option { opacity: 0.5; } .snp-flyout-backdrop { position: fixed; inset: 0; z-index: 2147483000; display: flex; align-items: flex-end; justify-content: center; background: rgba(0, 0, 0, 0.5); } .snp-flyout { width: 100%; max-width: 480px; min-height: 402px; border-top: 5px solid #4b84e6; border-radius: 6px 6px 0 0; background: #07101e; color: #d4d9e4; font-family: inherit; font-size: 16px; } @media (min-width: 768px) { .snp-flyout-backdrop { align-items: center; } } .snp-flyout-header { display: grid; grid-template-columns: 1fr 2fr 1fr; align-items: center; min-height: 50px; margin-bottom: 6px; padding: 0 15px; background: #000000; text-align: center; } .snp-flyout-header h1 { margin: 0; color: #ffffff; font-size: 16px; font-weight: 700; } .snp-flyout-action.right { text-align: right; } .snp-flyout-action button { border: 0; padding: 6px; background: transparent; color: #4b84e6; font-size: 16px; cursor: pointer; } .snp-wheel-container { display: flex; justify-content: center; gap: 12px; padding: 10px 20px; background: #0f1e35; border-bottom: 1px solid #2c4669; } .snp-flyout-prompt, .snp-flyout-option { display: flex; align-items: center; justify-content: center; gap: 8px; margin: 0; padding: 16px 10px; font-size: 16px; cursor: pointer; } .snp-flyout-prompt { cursor: default; } .snp-flyout-modes { display: flex; justify-content: center; gap: 8px; padding: 12px 10px 0; } .snp-flyout-modes button { border: 1px solid #7a90a4; border-radius: 12px; padding: 4px 14px; font-size: 13px; cursor: pointer; background: transparent; color: #7a90a4; } .snp-flyout-modes button.active { border-color: #ff5500; background: #ff5500; color: #ffffff; } .snp-flyout-option input { position: absolute; opacity: 0; pointer-events: none; } .snp-flyout-option i { color: #7a90a4; } .snp-flyout-option i.checked { color: #ff5500; } .snp-wheel-column { flex: 1; max-width: 140px; text-align: center; } .snp-wheel-column:has([data-wheel="choice"]) { max-width: 280px; } .snp-wheel-column p { margin: 0 0 4px; font-size: 12px; color: #7a90a4; } .snp-wheel-middle { align-self: center; padding-top: 20px; font-size: 13px; color: #7a90a4; } .snp-wheel { position: relative; height: 262px; overflow-y: scroll; scroll-snap-type: y mandatory; scrollbar-width: none; background: linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.1)) center / 100% 34px no-repeat; border-radius: 8px; mask-image: linear-gradient(transparent, #000 35%, #000 65%, transparent); } .snp-wheel::-webkit-scrollbar { display: none; } .snp-wheel::before, .snp-wheel::after { content: ""; display: block; height: 114px; } .snp-wheel-item { height: 34px; line-height: 34px; font-size: 16.5px; color: #d4d9e4; cursor: pointer; scroll-snap-align: center; white-space: nowrap; } .snp-wheel-item.selected { color: #ffffff; } .snp-filter-row .list-item.parent-enabled label.active i { color: #4b84e6; } .snp-filter-row .list-item:not(.parent-enabled) label, .snp-filter-row .list-item:not(.parent-enabled) label i, .snp-filter-row .list-item:not(.parent-enabled) .stat-button { color: #768eb8; cursor: default; } `;var ae="snp-range-flyout",xn=34,se=(e,t,n)=>{let o=document.createElement("span");o.className="snp-wheel-column";let i=document.createElement("p");i.textContent=t;let s=document.createElement("div");s.className="snp-wheel",s.dataset.wheel=e,s.setAttribute("role","listbox"),s.setAttribute("aria-label",t),o.append(i,s);let r=[],a=0,p=d=>{let u=Math.max(0,Math.min(r.length-1,d)),l=u!==a;a=u,[...s.children].forEach((f,g)=>{f.classList.toggle("selected",g===a),f.setAttribute("aria-selected",String(g===a))}),l&&n?.()},c=()=>{s.scrollTop=a*xn};return s.addEventListener("scroll",()=>p(Math.round(s.scrollTop/xn))),{el:o,value:()=>r[a].value,fill:(d,u)=>{r=d,s.replaceChildren(...r.map((l,f)=>{let g=document.createElement("div");return g.className="snp-wheel-item",g.setAttribute("role","option"),g.textContent=l.label,g.addEventListener("click",()=>{p(f),c()}),g})),a=Math.max(0,r.findIndex(l=>l.value===u)),p(a),c()},set:d=>{let u=r.findIndex(l=>l.value===d);u!==-1&&u!==a&&(p(u),c())},reveal:c}},_n=(e,t,n,o,i,s)=>{document.getElementById(ae)?.remove();let r=document.createElement("div");r.id=ae,r.className="snp-flyout-backdrop";let a=document.createElement("div");a.className="snp-flyout",a.setAttribute("role","dialog"),a.setAttribute("aria-label",`${e}: Make a Selection`),r.appendChild(a);let p=()=>{document.removeEventListener("keydown",c),r.remove()},c=O=>{O.key==="Escape"&&p()},d=(O,R,k)=>{let L=document.createElement("span");L.className=`snp-flyout-action ${R}`;let w=document.createElement("button");return w.type="button",w.textContent=O,w.addEventListener("click",k),L.appendChild(w),L},u=O=>(O?t.metric:t.imperial).choices,l=(O,R="")=>[{value:null,label:"-"},...O.map((k,L)=>L===O.length-1?{...k,label:k.label+R}:k)],f=(O,R,k)=>{let[L,w]=[O.value(),R.value()];if(L===null||w===null||(w-L)*k>0)return;let U=u(m.value()),Vt=U[U.findIndex(Wo=>Wo.value===L)+k];R.set(Vt?Vt.value:null)},g=se("min","Min",()=>f(g,h,1)),h=se("max","Max",()=>f(h,g,-1)),E=(O,R,k)=>{let L=u(O),w=U=>U===null?null:He(L,U).value;g.fill(l(L," +"),w(R)),h.fill(l(L),w(k))},m=se("unit","Unit",()=>E(m.value(),g.value(),h.value()));m.fill([{value:!1,label:t.imperial.unit},{value:!0,label:t.metric.unit}],n.metric),E(n.metric,n.min,n.max);let y=document.createElement("h1");y.textContent=e;let v=document.createElement("div");v.className="snp-flyout-header",v.append(d("Cancel","left",p),y,d("Done","right",()=>{p(),o({min:g.value(),max:h.value(),metric:m.value(),includeUnspecified:T.checked})}));let b=document.createElement("span");b.className="snp-wheel-middle",b.textContent="to";let x=document.createElement("div");x.className="snp-wheel-container",x.append(m.el,g.el,b,h.el);let T=document.createElement("input");T.type="checkbox",T.checked=n.includeUnspecified;let S=document.createElement("i");S.className=s?.className??"fa fa-square";let F=()=>{S.classList.toggle("fa-check-square",T.checked),S.classList.toggle("fa-square",!T.checked),S.classList.toggle("checked",T.checked)};T.addEventListener("change",F),F();let Pe=document.createElement("label");Pe.className="snp-flyout-option",Pe.append(T,S,` Include profiles with no ${e.toLowerCase()} listed`),a.append(v,Pe,x),r.addEventListener("click",O=>{O.target===r&&p()});for(let O of["click","mousedown","pointerdown","touchstart"])r.addEventListener(O,R=>R.stopPropagation());document.addEventListener("keydown",c),(i??document.body).appendChild(r);for(let O of[m,g,h])O.reveal()},Tn=(e,t,n,o,i,s)=>{document.getElementById(ae)?.remove();let r=document.createElement("div");r.id=ae,r.className="snp-flyout-backdrop";let a=document.createElement("div");a.className="snp-flyout",a.setAttribute("role","dialog"),a.setAttribute("aria-label",`${e}: Make a Selection`),r.appendChild(a);let p=()=>{document.removeEventListener("keydown",c),r.remove()},c=b=>{b.key==="Escape"&&p()},d=(b,x,T)=>{let S=document.createElement("span");S.className=`snp-flyout-action ${x}`;let F=document.createElement("button");return F.type="button",F.textContent=b,F.addEventListener("click",T),S.appendChild(F),S},u=s?.current??"",l=se("choice",e);l.fill(t(u),n??t(u)[0].value);let f=document.createElement("h1");f.textContent=e;let g=document.createElement("div");g.className="snp-flyout-header",g.append(d("Cancel","left",p),f,d("Done","right",()=>{p(),o(l.value(),u)}));let h=document.createElement("div");h.className="snp-flyout-modes";let E=(s?.choices??[]).map(b=>{let x=document.createElement("button");return x.type="button",x.dataset.mode=b.value,x.textContent=b.label,x.addEventListener("click",()=>{u=b.value,m(),l.fill(t(u),l.value()),l.reveal()}),h.appendChild(x),x}),m=()=>{for(let b of E){let x=b.dataset.mode===u;b.classList.toggle("active",x),b.setAttribute("aria-pressed",String(x))}};m(),l.el.querySelector("p")?.remove();let y=document.createElement("p");y.className="snp-flyout-prompt",y.textContent="Select a value:";let v=document.createElement("div");v.className="snp-wheel-container",v.append(l.el),a.append(g,...E.length?[h]:[],y,v),r.addEventListener("click",b=>{b.target===r&&p()});for(let b of["click","mousedown","pointerdown","touchstart"])r.addEventListener(b,x=>x.stopPropagation());document.addEventListener("keydown",c),(i??document.body).appendChild(r),l.reveal()};var On={MARKER_CONTAINER_SELECTOR:'[data-testid="markerUserContainer"]',MARKER_AVATAR_SELECTOR:'[data-testid="cv-marker-avatar-image"]',APP_SCREEN_SELECTOR:"#app-screen",NAME_LABEL_SELECTOR:'[data-testid="cruiserNameLabel"]',PIN_BUTTON_SELECTOR:'[data-testid="pinUserButton"]',PROFILE_OPTIONS_MENU_SELECTOR:'[data-testid="profileOptionsContainer"]',ICON_HOLDER_RIGHT_BOTTOM_SELECTOR:'[data-testid="iconHolderRightBottom"]',TRAVEL_HERE_BUTTON_SELECTOR:'[data-testid="travelHereButton"]',CITIES_INPUT_SELECTOR:'[data-testid="citiesInput"]',PROFILE_TYPE_FILTER_LABEL_SELECTOR:'label[for="IS_PROFILE_TYPE"]',CONNECTED_NOW_FILTER_LABEL_SELECTOR:'label[for="CONNECTED_NOW"]',ENDOWMENT_FILTER_LABEL_SELECTOR:'label[for="stats.endowment"]',HIDE_PHOTO_BUTTON_SELECTOR:'[aria-label="Hide Photo"]',PHOTO_MESSAGE_SELECTOR:"chat-photo-message",HIDE_ALL_PHOTOS_BUTTON_SELECTOR:'[data-testid="hideAllPhotosButton"]',UNHIDE_ALL_PHOTOS_BUTTON_SELECTOR:'[data-testid="unhideAllPhotosButton"]'},{MARKER_CONTAINER_SELECTOR:Ln,MARKER_AVATAR_SELECTOR:Ke,APP_SCREEN_SELECTOR:ze,NAME_LABEL_SELECTOR:le,PIN_BUTTON_SELECTOR:ce,PROFILE_OPTIONS_MENU_SELECTOR:B,ICON_HOLDER_RIGHT_BOTTOM_SELECTOR:Xe,TRAVEL_HERE_BUTTON_SELECTOR:de,CITIES_INPUT_SELECTOR:Je,PROFILE_TYPE_FILTER_LABEL_SELECTOR:Ye,CONNECTED_NOW_FILTER_LABEL_SELECTOR:Qe,ENDOWMENT_FILTER_LABEL_SELECTOR:Ze,HIDE_PHOTO_BUTTON_SELECTOR:et,PHOTO_MESSAGE_SELECTOR:tt,HIDE_ALL_PHOTOS_BUTTON_SELECTOR:j,UNHIDE_ALL_PHOTOS_BUTTON_SELECTOR:W}=On;var Pn="snp-filter-menu-style",dr=Date.now(),it=e=>{for(let t of e.querySelectorAll("[data-testid]"))t.removeAttribute("data-testid")},Cn="snp-gender-filter",pr={male:"Male",female:"Female",nonbinary:"Nonbinary",undefined:"Not specified"},ur=(e,t,n)=>{let o=e.cloneNode(!0),i=o.querySelector(".list-item-level-2"),s=o.querySelector("label"),r=o.querySelector("p"),a=o.querySelector('.trailing input[type="checkbox"]'),p=o.querySelector(".options-container");if(!s||!r||!a||!p)return null;o.classList.remove("last"),it(o),a.id=`${Cn}-enabled`,a.disabled=!1,s.htmlFor=a.id,s.querySelector("i")?.classList.replace("fa-user","fa-venus-mars"),r.textContent=" Gender",a.addEventListener("change",()=>{t.gender.enabled=a.checked,n()});let c=document.createElement("div");c.className="snp-filter-body";let d=N.map(u=>{let l=document.createElement("button");return l.type="button",l.className="snp-gender-option",l.dataset.gender=u,l.textContent=pr[u],l.addEventListener("click",()=>{let{genders:f}=t.gender;if(!f.includes(u))t.gender.genders=N.filter(g=>g===u||f.includes(g));else if(f.length>1)t.gender.genders=f.filter(g=>g!==u);else return;n()}),c.appendChild(l),l});return p.replaceChildren(c),{root:o,placeApply:u=>c.appendChild(u),sync:()=>{let{enabled:u,genders:l}=t.gender;a.checked=u,i?.classList.toggle("active",u),c.classList.toggle("snp-filter-off",!u);for(let f of d){let g=l.includes(f.dataset.gender);f.classList.toggle("active",g),f.setAttribute("aria-pressed",String(g))}}}},Fn="snp-online-filter",fr=(e,t,n)=>{let o=e.cloneNode(!0),i=o.querySelector(".list-item-level-2"),s=o.querySelector(".details-title"),r=o.querySelector("label"),a=r?.querySelector("i"),p=o.querySelector("p"),c=o.querySelector('.trailing input[type="checkbox"]'),d=o.querySelector(".trailing"),u=c?.closest("label");if(!i||!s||!r||!a||!p||!c||!d||!u)return null;it(o),c.id=`${Fn}-enabled`,c.disabled=!1,r.removeAttribute("for"),a.classList.replace("fa-plug","fa-clock"),p.textContent=" Online After";let l=document.createElement("p");l.className="snp-online-since",s.after(l);let f=()=>{let g=Date.now();Tn("Online After",h=>Be.map(E=>({value:E,label:h==="static"?`${Me(E)} (${ne(g-E*6e4,g)})`:Me(E)})),t.online.minutes,(h,E)=>{t.online={enabled:!0,minutes:h,pickedAt:Date.now(),...E==="static"&&{cutoff:Date.now()-h*6e4}},n()},o.closest("smart-select-filter"),{current:t.online.cutoff===void 0?"rolling":"static",choices:[{value:"rolling",label:"Rolling"},{value:"static",label:"Static"}]})};return c.addEventListener("change",()=>{if(t.online.minutes===null){c.checked=!1,f();return}t.online.enabled=c.checked,n()}),r.addEventListener("click",g=>{g.preventDefault(),f()}),{root:o,placeApply:g=>d.appendChild(g),sync:g=>{let{enabled:h,minutes:E}=t.online,m=h&&E!==null;u.style.display=g?"none":"",c.checked=m,i.classList.toggle("active",m);let y=g?t.online.pickedAt??Date.now():dr,{cutoff:v}=t.online;l.textContent=m?v===void 0?dn(E,y):`Cruisers online after ${ne(v,Date.now())}`:"",l.style.display=m?"":"none"}}},Rn=(e,t,n)=>(o,i,s)=>{let r=o.cloneNode(!0),a=r.querySelector(".menu-item-group"),p=r.querySelector(".list-item"),c=r.querySelector("label"),d=c?.querySelector("i"),u=c?.querySelector("span"),l=r.querySelector(".stat-button"),f=l?.querySelector("button"),g=f?.querySelector(".text-value");if(!a||!p||!c||!d||!u||!l||!f||!g)return null;let h=t(i);it(r),a.classList.remove("no-border-bottom"),p.classList.remove("last"),c.removeAttribute("for"),u.textContent=e;let E=()=>_n(e,n,h,b=>{Object.assign(h,b),h.enabled=b.min!==null||b.max!==null,s()},r.closest("smart-select-filter"),d),m=o.closest(".smart-options-container"),y=!1,v=()=>{let b=m?.classList.contains("active")??!0;p.classList.toggle("parent-enabled",b),!b&&h.enabled?(y=!0,h.enabled=!1,s()):b&&y&&(y=!1,h.enabled=!0,s())};return m&&new MutationObserver(v).observe(m,{attributes:!0,attributeFilter:["class"]}),v(),c.addEventListener("click",b=>{if(b.preventDefault(),!!p.classList.contains("parent-enabled")){if(!h.enabled&&h.min===null&&h.max===null){E();return}h.enabled=!h.enabled,s()}}),l.addEventListener("click",()=>{p.classList.contains("parent-enabled")&&E()}),{root:r,placeApply:b=>f.after(b),sync:b=>{f.style.display=b?"none":"",c.classList.toggle("active",h.enabled),d.classList.toggle("fa-check-square",h.enabled),d.classList.toggle("fa-square",!h.enabled),l.classList.toggle("active",h.enabled);let x=mn(h,n);f.className=x?"range":"select",g.classList.toggle("placeholder",!x),g.textContent=` ${x??"Select"} `}}},ot=()=>document.querySelector(Ye)?.closest("filter-type-component")??null,rt=()=>document.querySelector(Qe)?.closest("ui-list-item-level-2")??null,kn=()=>document.querySelector(Ze)?.closest("ui-menu-item-group")??null,nt=[{id:Cn,anchor:ot,key:e=>Ae(e.gender).join(),build:ur},{id:Fn,anchor:rt,key:e=>te(e.online)?`${te(e.online)}@${e.online.pickedAt??""}`:"",build:fr},{id:"snp-height-filter",anchor:kn,key:e=>ee(e.height),build:Rn("Height",e=>e.height,un)},{id:"snp-weight-filter",anchor:kn,key:e=>ee(e.weight),build:Rn("Weight",e=>e.weight,fn)}],Nn=_("filter-menu"),wn=new Set,In=(e,t)=>{wn.has(e)||(wn.add(e),Nn.warn(`${t}; Sniffies may have changed its markup`))},mr=2e3,st=e=>{let t=structuredClone(e.initial),n=new Map,o=()=>{for(let d of n.values())d();Promise.resolve(e.onChange(structuredClone(t))).catch(d=>{Nn.warn("couldn't save filters",d)})},i=(d,u)=>{let l=u.build(d,t,o);if(!l)return null;l.root.id=u.id,l.root.classList.add("snp-filter-row");let f=document.createElement("button");f.type="button",f.className="snp-filter-apply",f.textContent="Reload to apply",f.addEventListener("click",h=>{h.stopPropagation(),(e.reloadPage??(()=>location.reload()))()}),l.placeApply(f);let g=()=>{f.hidden=u.key(t)===u.key(e.applied),l.sync(!f.hidden)};return n.set(u.id,g),g(),l.root},s=()=>{if(nt.every(u=>document.getElementById(u.id)))return;let d=new Map;for(let u of nt){let l=u.anchor();if(!l)continue;let f=document.getElementById(u.id)??i(l,u);if(!f){In(u.id,`${u.id}: found its anchor but not the parts to clone from it`);continue}if(!f.isConnected){if(!document.getElementById(Pn)){let g=document.createElement("style");g.id=Pn,g.textContent=Sn,document.head.appendChild(g)}(d.get(l)??l).after(f)}d.set(l,f)}},r,a=()=>{let[d,u]=[ot(),rt()];!d!=!u&&(r??=setTimeout(()=>{r=void 0;let[l,f]=[ot(),rt()];!l!=!f&&In("menu-neighbours",`filter menu has ${l?"Profile Type":"Cruising Now"} but not ${l?"Cruising Now":"Profile Type"}`)},mr))},p=new MutationObserver(()=>{s(),a()}),c=()=>{p.observe(document.body,{childList:!0,subtree:!0}),s()};return document.body?c():document.addEventListener("DOMContentLoaded",c,{once:!0}),()=>{document.removeEventListener("DOMContentLoaded",c),p.disconnect(),clearTimeout(r);for(let d of nt)document.getElementById(d.id)?.remove()}};var pe="maxSelections";var at="sexuality.attitude",$=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),gr=e=>{if(typeof e!="object"||e===null||!$(e,"key"))return!1;let{name:t}=e;return $(e,"name")&&typeof t=="string"&&t.startsWith("PROFILE.STATS.")},An=e=>typeof e=="object"&&e!==null&&$(e,pe)&&$(e,"header")&&$(e,"data"),Bn=(e,t,n)=>{Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})},lt=e=>{if(Object.getOwnPropertyDescriptor(Object.prototype,pe))return!1;Object.defineProperty(Object.prototype,pe,{configurable:!0,enumerable:!1,get(){return e()&&gr(this)?99:void 0},set(n){Bn(this,pe,n)}});let t=n=>(e()&&An(n)&&(n.maxSelections=99),n);return Object.defineProperty(Object.prototype,at,{configurable:!0,enumerable:!1,get(){},set(n){if(!An(n)){Bn(this,at,n);return}let o=t(n);Object.defineProperty(this,at,{enumerable:!0,configurable:!0,get:()=>o,set:i=>{o=t(i)}})}}),!0};var Mn=`#snp-profile-filters-root { margin: 0 -16px; } #snp-profile-filters-root .section { background: transparent; border: none; border-radius: 0; padding: 0; display: flex; flex-direction: column; gap: 0; } #snp-profile-filters-root .section h2 { margin: 0; font-size: 10px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: #7a90a4; } #snp-profile-filters-root details.collapsible { padding: 0; display: block; } #snp-profile-filters-root details.collapsible summary { list-style: none; cursor: pointer; padding: 0 12px; min-height: 56px; background: #0f1e35; display: flex; align-items: center; gap: 12px; user-select: none; } #snp-profile-filters-root details.collapsible summary::-webkit-details-marker { display: none; } #snp-profile-filters-root details.collapsible summary:hover::after { color: #768eb8; } #snp-profile-filters-root details.collapsible summary::after { content: "\u203A"; margin-left: auto; font-size: 16px; line-height: 1; color: #7a90a4; transform: rotate(90deg); transition: transform 0.15s, color 0.25s; } #snp-profile-filters-root details.collapsible[open] summary::after { transform: rotate(270deg); } #snp-profile-filters-root details.collapsible summary h2 { margin: 0; } #snp-profile-filters-root .collapsible-body { padding: 12px 12px 12px 56px; display: flex; flex-direction: column; gap: 0; } #snp-profile-filters-root .row { display: flex; align-items: center; gap: 8px; font-size: 13px; cursor: pointer; color: #ffffff; } #snp-profile-filters-root .row input[type="checkbox"] { accent-color: #ff5500; width: 14px; height: 14px; } #snp-profile-filters-root .hint { font-size: 12px; color: #aebcd0; margin: 0; } `;var M=`.snp-switch { position: relative; display: inline-flex; align-items: center; flex: none; width: 32px; height: 20px; cursor: pointer; } .snp-switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; } .snp-switch-slider { position: absolute; inset: 0; overflow: hidden; border-radius: 20px; background: #768eb8; pointer-events: none; } .snp-switch-slider::before { content: ""; position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%; background: #0f1e35; box-shadow: rgba(0, 0, 0, 0.25) 0 4px 4px; } .snp-switch input:checked + .snp-switch-slider { background: #ff5500; } .snp-switch input:checked + .snp-switch-slider::before { background: #ffffff; transform: translateX(12px); } .snp-switch input:focus-visible + .snp-switch-slider { outline: 2px solid #ffffff; outline-offset: 2px; } .snp-switch:has(input:disabled), .snp-switch input:disabled { cursor: not-allowed; } .snp-switch input:disabled:checked + .snp-switch-slider { background: #415571; } .snp-switch input:disabled + .snp-switch-slider { opacity: 0.6; } .snp-label { display: inline-block; margin: 0; font-family: Roboto, RedactionSquare, sans-serif; font-size: 16px; line-height: 20px; font-weight: 400; color: #d4d9e4; transition: color 0.25s; } .snp-row:has(input:checked) .snp-label { color: #ffffff; font-weight: 700; } .snp-row:has(input):hover .snp-label, .snp-disabled .snp-row:has(input) .snp-label { color: #768eb8; } .snp-disabled .snp-row:has(input) .snp-label { font-weight: 400; } `;var ue=`

Expanded Filters

Add Gender, Height, and Weight filters. Choose an any number of options in the Sexuality and Body Type filters.

`;var ct=M+Mn;var dt=(e,t)=>{let n=e.querySelector("#profile-filters-details"),o=e.querySelector("#profile-filters-enabled");n&&(n.open=t.initialOpen,n.addEventListener("toggle",()=>t.onToggle(n.open))),t.hint&&(e.querySelector("#profile-filters-hint").textContent=t.hint),o.checked=t.initialEnabled,o.addEventListener("change",()=>{t.onToggleEnabled(o.checked)})};var fe=e=>e.toISOString().slice(0,10),Hn=e=>new Date(e.getTime()-864e5),pt=(e,t,n=new Date)=>{if(t.length===0)return e;let o=fe(n),i=fe(Hn(n)),s=new Set([...e[o]??[],...t]),r={[o]:[...s]};return e[i]&&(r[i]=e[i]),r},ut=(e,t=new Date)=>{let n=fe(t),o=fe(Hn(t));return new Set([...e[n]??[],...e[o]??[]]).size};var ft=async e=>{let t=_("log-init"),{serverBase:n,clientSecret:o,userId:i,clientType:s,version:r}=e;if(!n||!i){t("skipping, missing serverBase or userId",{serverBase:n,userId:i});return}t("sending init ping",{userId:i,clientType:s,version:r});try{let a=n.replace(/\/+$/,""),p=await fetch(`${a}/api/logInit`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o}`},body:JSON.stringify({userId:i,clientType:s,version:r})});p.ok?t("init ping sent"):t.error("init ping rejected",p.status)}catch(a){t.error("init ping failed",a)}};var me=`

Premium Features

Unlocks things Sniffies normally reserves for Plus: location spoofing, opening profiles outside your boundary, and hiding photos you've sent.

`;var Dn=`#snp-premium-root { margin: 0 -16px; } #snp-premium-root .section { background: transparent; border: none; border-radius: 0; padding: 0; display: flex; flex-direction: column; gap: 0; box-shadow: inset 0 -1px #0f1e35; } #snp-premium-root .section h2 { margin: 0; font-size: 10px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: #7a90a4; } #snp-premium-root details.collapsible { padding: 0; display: block; } #snp-premium-root details.collapsible summary { list-style: none; cursor: pointer; padding: 0 12px; min-height: 56px; background: #0f1e35; display: flex; align-items: center; gap: 12px; user-select: none; } #snp-premium-root details.collapsible summary::-webkit-details-marker { display: none; } #snp-premium-root details.collapsible summary:hover::after { color: #768eb8; } #snp-premium-root details.collapsible summary::after { content: "\u203A"; margin-left: auto; font-size: 20px; line-height: 1; color: #d4d9e4; transform: rotate(90deg); transition: transform 0.15s, color 0.25s; } #snp-premium-root details.collapsible[open] summary::after { transform: rotate(270deg); } #snp-premium-root details.collapsible summary h2 { margin: 0; } #snp-premium-root .collapsible-body { padding: 0; display: flex; flex-direction: column; gap: 0; } /* Form fields \u2014 shared with popup.css .row, .hint, .field, button.primary/secondary, .actions */ #snp-premium-root .row { display: flex; align-items: center; gap: 8px; font-size: 13px; cursor: pointer; color: #ffffff; } #snp-premium-root > .section .collapsible-body > .hint, #snp-premium-root > .section .collapsible-body > .notice { margin: 12px 12px 12px 56px; } #snp-premium-root #premium-config { border-top: 1px solid #0f1e35; gap: 0; background: #07101e; } #snp-premium-root .premium-feature { display: flex; flex-direction: column; gap: 0; box-shadow: inset 0 -1px #0f1e35; } #snp-premium-root .premium-feature .snp-label { font-size: 14px; line-height: 21px; } #snp-premium-root .premium-feature-head { display: flex; align-items: center; gap: 12px; padding: 8px 12px 8px 24px; min-height: 49px; /* 8 + 32 + 8 + 1px divider, as the Cruiser Stats rows */ } #snp-premium-root .premium-feature-toggle { flex: 1; display: flex; align-items: center; gap: 6px; padding: 0; border: none; background: transparent; font: inherit; text-align: left; cursor: pointer; } #snp-premium-root .premium-feature-head:hover .premium-feature-toggle::after { color: #768eb8; } #snp-premium-root .premium-feature-toggle::after { content: "\u203A"; margin-left: auto; font-size: 20px; line-height: 1; color: #d4d9e4; transform: rotate(90deg); transition: transform 0.15s, color 0.25s; } #snp-premium-root .premium-feature-toggle[aria-expanded="true"]::after { transform: rotate(270deg); } #snp-premium-root .premium-feature-body { padding: 0 12px 12px 72px; } #snp-premium-root .premium-feature-body[hidden] { display: none; } #snp-premium-root .hint { font-size: 12px; color: #aebcd0; margin: 0; } #snp-premium-root button.primary { font-size: 12px; font-weight: 700; padding: 7px 16px; border-radius: 20px; border: none; background: #ff5500; color: #fff; cursor: pointer; letter-spacing: 0.02em; transition: background 0.15s; } #snp-premium-root button.primary:hover:not(:disabled) { background: #e04a00; } #snp-premium-root button.primary:disabled { background: #0f1e35; color: #7a90a4; cursor: not-allowed; } #snp-premium-root .field { display: flex; flex-direction: column; gap: 4px; font-size: 11px; color: #7a90a4; } #snp-premium-root .field select { font-size: 13px; padding: 7px 10px; border-radius: 6px; border: 1px solid #0f1e35; background: #080e18; color: #ffffff; outline: none; transition: border-color 0.15s; } #snp-premium-root .field select:focus { border-color: #ff5500; } #snp-premium-root .actions { display: flex; gap: 8px; align-items: center; } #snp-premium-root button.secondary { font-size: 12px; font-weight: 600; padding: 7px 16px; border-radius: 20px; border: 1px solid #0f1e35; background: transparent; color: #7a90a4; cursor: pointer; transition: border-color 0.15s, color 0.15s; } #snp-premium-root button.secondary:hover:not(:disabled) { border-color: #7a90a4; color: #ffffff; } #snp-premium-root .premium-section { display: flex; flex-direction: column; gap: 10px; } #snp-premium-root .notice { color: #ffffff; background: #0f1e35; border-radius: 6px; padding: 8px 10px; } `;var mt=M+Dn;var ge={current:"Current tab",currentSaved:"Current tab (saved)",new:"New tab",newSaved:"New tab (saved)"},Sr=e=>e.label??`${e.latitude.toFixed(5)}, ${e.longitude.toFixed(5)}`,gt=(e,t)=>{let n=b=>e.querySelector(`#${b}`),o=n("premium-details");o.open=t.initialOpen,o.addEventListener("toggle",()=>t.onToggle(o.open)),n("premium-plus-notice").style.display=t.hasPlus===!0?"":"none";let i=n("premium-enabled"),s=n("premium-config"),r=()=>{s.classList.toggle("snp-disabled",!i.checked);for(let b of s.querySelectorAll(".premium-feature-head input"))b.disabled=!i.checked};i.checked=t.initialEnabled,r(),i.addEventListener("change",()=>{r(),t.onToggleEnabled(i.checked)});let a={location:"premium-flag-location",boundary:"premium-flag-boundary",photos:"premium-flag-photos"};for(let[b,x]of Object.entries(a)){let T=n(x);T.checked=t.flags[b],T.addEventListener("change",()=>{t.onFlagChange(b,T.checked)})}for(let b of e.querySelectorAll(".premium-feature-toggle")){let x=b.closest(".premium-feature").querySelector(".premium-feature-body");b.addEventListener("click",T=>{x.hidden=!x.hidden,b.setAttribute("aria-expanded",String(!x.hidden)),T.detail>0&&b.blur()})}let p=n("geo-clear"),c=n("geo-saved"),d=t.geo?{...t.geo.initial}:null,u=b=>{d={...b},l()},l=()=>{let b=d!==null&&I(d);p.style.display=b?"":"none",c.textContent=b?`Saved: ${Sr(d)}`:""};t.geo||(n("premium-geo").style.display="none"),l(),p.addEventListener("click",()=>{d={...d,latitude:0,longitude:0,label:void 0},l(),t.geo?.onClear(d)});let f=t.border;if(!f)return n("profile-border-hint").textContent="Profiles outside your boundary open like any other.",n("profile-border-tab-field").style.display="none",{setOverride:u};let g=n("profile-border-tab"),h=g.querySelector('option[value="current-tab"]'),E=g.querySelector('option[value="new-tab"]'),m=n("profile-border-save"),y=b=>{h.text=b?ge.current:ge.currentSaved,E.text=b?ge.newSaved:ge.new},v={...f.initial};return g.value=v.openInNewTab?"new-tab":"current-tab",y(v.openInNewTab),m.style.display="none",g.addEventListener("change",()=>{m.style.display=g.value==="new-tab"!==v.openInNewTab?"":"none"}),m.addEventListener("click",()=>{let b={...v,openInNewTab:g.value==="new-tab"};Promise.resolve(f.onSave(b)).then(()=>{v=b,y(b.openInNewTab),m.style.display="none"})}),{setOverride:u}};var Gn=(e,t=Date.now())=>{let n=e.user?.private?.appstoreMembership;return!n||n.subscriptionStatus!=="active"?!1:n.end===void 0||Date.parse(n.end)>t},Un=(e,t)=>{try{t(Gn(JSON.parse(e)))}catch{}},bt=e=>{let t=XMLHttpRequest.prototype;if(t.__sniffiesPlusPatched)return;t.__sniffiesPlusPatched=!0;let n=t.open,o=t.send;t.open=function(s,r,...a){return this.__sniffiesIsAuthCurrent=r.toString().includes(we),n.apply(this,[s,r,...a])},t.send=function(...s){return this.__sniffiesIsAuthCurrent&&this.addEventListener("load",()=>Un(this.responseText,e)),o.apply(this,s)};let i=window.fetch;window.fetch=async(s,r)=>{let a=await i.call(window,s,r);return(typeof s=="string"?s:s instanceof URL?s.href:s.url).includes(we)&&a.clone().text().then(c=>Un(c,e)).catch(()=>{}),a}};var xr="lower-map-icon",_r="snp-fab-docked",Tr="_ngcontent-",Or=(e,t)=>{let n=Array.from(t.attributes).find(o=>o.name.startsWith(Tr));n&&e.setAttribute(n.name,n.value)},ht=e=>{let t=()=>{let o=document.querySelector(Xe);return o?(e.parentElement!==o&&(o.prepend(e),e.classList.add(xr,_r),Or(e,o)),!0):!1};t()||document.body.appendChild(e),new MutationObserver(()=>{t()}).observe(document.body,{childList:!0,subtree:!0})};var Et=`#snp-fab { position: fixed; bottom: calc(80px + 5vh); right: 16px; z-index: 2147483646; background: rgba(7, 16, 30, 0.85); border: 1px solid #0f1e35; border-radius: 50%; cursor: pointer; color: #ffffff; width: 44px; height: 44px; padding: 0; margin: 0; appearance: none; font: inherit; display: flex; align-items: center; justify-content: center; opacity: 0.9; transition: opacity 0.15s; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4); } #snp-fab:hover { opacity: 1; } #snp-fab.snp-fab-docked { position: static; bottom: auto; right: auto; z-index: auto; width: auto; height: auto; background: transparent; border: none; border-radius: 0; box-shadow: none; opacity: 1; color: inherit; } #snp-fab-icon { background-size: 24px 24px; background-position: center; background-repeat: no-repeat; border-radius: 6px; } .snp-fab-icon-base-size { display: inline-block; width: 24px; height: 24px; } #snp-panel { position: fixed; top: 60px; right: 12px; z-index: 2147483647; width: 300px; background: #07101e; border: none; border-top: 8px solid #4b84e6; border-bottom: 8px solid #4b84e6; border-radius: 8px; box-shadow: 0 4px 24px rgba(0, 0, 0, 0.5); font-family: Roboto, RedactionSquare, sans-serif; color: #ffffff; padding: 14px 16px 0; display: flex; flex-direction: column; gap: 0; box-sizing: border-box; max-height: calc(100vh - 160px); max-height: calc(100dvh - 160px); overflow-y: auto; overflow-x: hidden; } #snp-panel::-webkit-scrollbar { display: block; width: 8px; } #snp-panel::-webkit-scrollbar-button { display: none; } #snp-panel::-webkit-scrollbar-track { background: transparent; } #snp-panel::-webkit-scrollbar-thumb { background: #aebcd0; border-radius: 4px; } @supports not selector(::-webkit-scrollbar) { #snp-panel { scrollbar-width: thin; scrollbar-color: #aebcd0 transparent; } } .snp-header { margin-bottom: 12px; display: flex; align-items: center; justify-content: space-between; } .snp-title { display: flex; align-items: baseline; gap: 6px; } .snp-header h1 { font-size: 14px; font-weight: 700; margin: 0; letter-spacing: 0.01em; } .snp-close { background: transparent; border: none; color: #7a90a4; font-size: 18px; cursor: pointer; line-height: 1; padding: 2px 4px; transition: color 0.15s; } .snp-close:hover { color: #fff; } `;var jn=_("update-check"),Pr="https://api.github.com/repos/deckmasterbeam/SniffiesProjects/releases",$n="snp-latest-version-",Rr=1440*60*1e3,Wn=e=>e.split(".").map(t=>Number(t)||0),yt=(e,t)=>{let n=Wn(e),o=Wn(t),i=Math.max(n.length,o.length);for(let s=0;sr}return!1},kr=e=>{try{let t=localStorage.getItem($n+e),n=t?JSON.parse(t):null;return n&&Date.now()-n.at{try{localStorage.setItem($n+e,JSON.stringify({version:t,at:Date.now()}))}catch{}},qn=async e=>{let t=kr(e);if(t!==null)return t;let n=`${e}-`;try{let o=await fetch(Pr,{headers:{Accept:"application/vnd.github+json"}});if(!o.ok)return jn.error("releases fetch rejected",o.status),null;let i=await o.json(),s=null;for(let r of i){if(!r.tag_name?.startsWith(n))continue;let a=r.tag_name.slice(n.length);(s===null||yt(s,a))&&(s=a)}return s!==null&&wr(e,s),s}catch(o){return jn.error("releases fetch failed",o),null}},vt=async(e,t)=>{let n=await qn(e);return n!==null&&yt(t,n)};var be=` `;var he=`.snp-update-banner { margin: 8px 0; padding: 8px 10px; border-radius: 6px; background: #4a2a00; color: #ffcf8a; font-size: 12px; line-height: 1.4; } .snp-update-banner[hidden] { display: none; } .snp-update-banner a { color: #ffe1b0; font-weight: 600; } `;var St=(e,t,n)=>{let o=e.querySelector("#snp-update-banner");o&&vt(t,n).then(i=>{i&&(o.hidden=!1)})};var Fr="sniffies-profile-border";var Kn="sniffies-premium-features-enabled",Nr="sniffies-geo",Vn=e=>{try{let t=localStorage.getItem(e);return t?!!JSON.parse(t)?.enabled:void 0}catch{return}},xt=()=>{let e=localStorage.getItem(Kn);return je(e===null?void 0:e==="true",Vn(Nr),Vn(Fr))},_t=e=>{localStorage.setItem(Kn,String(e))},zn="sniffies-premium-feature-flags",Tt=()=>{try{return re(JSON.parse(localStorage.getItem(zn)))}catch{return re(null)}},Ot=e=>{localStorage.setItem(zn,JSON.stringify(e))},Xn="sniffies-premium-section-open",Jn="sniffies-has-plus",Lt=()=>localStorage.getItem(Xn)==="true",Pt=e=>{localStorage.setItem(Xn,String(e))},Rt=()=>{let e=localStorage.getItem(Jn);return e===null?null:e==="true"},kt=e=>{localStorage.setItem(Jn,String(e))};var Ee=` `;var ye=`.snp-version { font-size: 10px; font-weight: 400; color: #7a90a4; letter-spacing: 0.02em; } `;var wt=(e,t)=>{let n=e.querySelector("#snp-version");n&&(n.textContent=`v${t}`)};var ve=_("travel-capture"),Yn=5e3,It=e=>{let t=!1,n=null,o=()=>{t=!1,n&&(clearTimeout(n),n=null)};return ve(`watching for clicks matching ${de}`),document.addEventListener("click",i=>{let s=i.target;!(s instanceof Element)||!s.closest(de)||(ve("travel here clicked, arming capture for",Yn,"ms"),e?.(),t=!0,n&&clearTimeout(n),n=setTimeout(()=>{ve("armed window expired with no matching location PUT seen"),o()},Yn))},!0),{consume:()=>{let i=t;return ve("consume() called, was armed:",i),o(),i}}},Ct=e=>{if(!e||typeof e!="object")return null;let t=e.virtualLocation;return!t||typeof t.lat!="number"||typeof t.lng!="number"?null:{latitude:t.lat,longitude:t.lng}};var Qn=e=>Zt.test(e),Zn=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.location?.coordinates;if(!Array.isArray(n)||typeof n[0]!="number"||typeof n[1]!="number")return null;let[o,i]=n,s=typeof t.city=="string"?t.city:"",r=typeof t.admin_name=="string"?t.admin_name:"",a=[s,r].filter(Boolean).join(", ")||void 0;return{latitude:i,longitude:o,label:a}},Ft=e=>{let t=XMLHttpRequest.prototype;if(t.__sniffiesCitySearchPatched)return;let n=t.open,o=t.send;t.open=function(i,s,...r){return this.__sniffiesIsCitySearch=Qn(s.toString()),n.apply(this,[i,s,...r])},t.send=function(...i){return this.__sniffiesIsCitySearch&&this.addEventListener("load",()=>{try{let s=JSON.parse(this.responseText);e(Zn(s))}catch{e(null)}}),o.apply(this,i)},t.__sniffiesCitySearchPatched=!0};var Nt="snp-city-search-status",Mr=`Location spoofing only picks up cities you search for here \u2014 moving the map before tapping "Travel here" won't be captured.`,Hr=["margin:6px 0 0","padding:0","font-size:11px","color:#7a90a4"].join(";"),Dr=["margin:6px 0 0","padding:0","font-size:12px","font-weight:600","color:#ff5500"].join(";"),At=()=>{let e=null,t=()=>document.querySelector(Je)?.closest("cities-input")??null,n=()=>{let s=t();if(!s)return;let r=document.getElementById(Nt);r||(r=document.createElement("p"),r.id=Nt,s.appendChild(r)),e?(r.textContent=e,r.setAttribute("style",Dr)):(r.textContent=Mr,r.setAttribute("style",Hr))},o=new MutationObserver(()=>{document.getElementById(Nt)||n()}),i=()=>{o.observe(document.body,{childList:!0,subtree:!0})};return document.body?(i(),n()):document.addEventListener("DOMContentLoaded",()=>{i(),n()},{once:!0}),{showPending:s=>{e=`Captured "${s}" \u2014 pending until you click "Travel here".`,n()},clear:()=>{e=null,n()}}};var P=_("location-override"),Ur=4e3,Bt=e=>{let t=e.reloadPage??(()=>location.reload()),n=e.initialOverride,o=()=>e.isPremiumEnabled(),i=We(()=>({...n,enabled:o()}),e.onPosition),s=window.fetch.bind(window),r=null,a=null,p=null,c=m=>{n=m,i?.refreshWatches(),p?.(m)},d=m=>{c(m),e.onOverrideChanged(m)},u=m=>{c(m)},l=m=>{let y={lat:m.latitude,lng:m.longitude};if(r)try{let v=JSON.parse(r.init.body??"{}");return v.virtualLocation=y,v.physicalLocation=y,s(r.url,{...r.init,body:JSON.stringify(v)}).then(()=>{})}catch{}return a?s(`${a}${Ie}?state=loaded`,{method:"PUT",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({virtualLocation:y,physicalLocation:y,homeDistanceInMiles:null})}).then(()=>{}):Promise.resolve()},f=null,g=At(),E=It(()=>{if(!f)return;let m=f;f=null,g.clear(),P("travel here clicked \u2014 committing pending search location",m),d(m);let y=l(m).catch(b=>{P("proactive location update failed",b)}),v=new Promise(b=>setTimeout(b,Ur));Promise.race([y,v]).then(()=>{P("reloading to show the newly confirmed location"),t()})});return Ft(m=>{if(P("city search response seen (XHR)",{result:m,spoofingEnabled:o()}),!o()){P("spoofing not enabled \u2014 skipping city search capture");return}m?(f={enabled:!0,latitude:m.latitude,longitude:m.longitude,label:m.label},P("staged pending search location",f),g.showPending(m.label??`${m.latitude}, ${m.longitude}`)):P("city search response had no usable location to capture")}),window.fetch=async(m,y)=>{let v=typeof m=="string"?m:m instanceof URL?m.href:m.url,b=v.match(/^(https?:\/\/[^/]*sniffies\.com)/);if(b&&!a&&(a=b[1]??null),v.includes(Ie)){r={url:v,init:{...y}};let x=E.consume();if(P("location PUT seen",{url:v,wasArmed:x,spoofingEnabled:o()}),x&&o())try{let T=JSON.parse(y?.body??"{}"),S=Ct(T);P("parsed travel PUT body",{body:T,captured:S}),S?(d({enabled:!0,...S}),P("saved captured override",n)):P("armed travel click but PUT body had no virtualLocation to capture",T)}catch(T){P("failed to parse/capture travel PUT body",T)}else if(o()&&I(n))try{let T=JSON.parse(y?.body??"{}"),S={lat:n.latitude,lng:n.longitude};T.virtualLocation=S,T.physicalLocation=S,y={...y,body:JSON.stringify(T)}}catch{}}return s(m,y)},{getOverride:()=>n,setOverride:d,syncOverride:u,subscribeChange:m=>{p=m},sendLocationUpdate:l}};var Se=`
`;var xe=`#snp-report-backdrop { display: none; position: fixed; inset: 0; z-index: 2147483647; background: rgba(8, 14, 24, 0.65); align-items: center; justify-content: center; font-family: system-ui, -apple-system, "Segoe UI", sans-serif; } #snp-report-backdrop .snp-report-modal { width: min(320px, calc(100vw - 32px)); background: #0e1825; border: 1px solid #1c2b3a; border-radius: 8px; padding: 16px; display: flex; flex-direction: column; gap: 10px; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); } #snp-report-backdrop h3 { margin: 0; font-size: 14px; font-weight: 700; color: #ffffff; } #snp-report-backdrop .hint { font-size: 11px; color: #7a90a4; margin: 0; } #snp-report-backdrop .hint.error { color: #ff4d4f; } #snp-report-backdrop .field { display: flex; flex-direction: column; gap: 4px; font-size: 11px; color: #7a90a4; } #snp-report-backdrop .field textarea { font-size: 13px; padding: 7px 10px; border-radius: 6px; border: 1px solid #1c2b3a; background: #080e18; color: #ffffff; outline: none; resize: vertical; font-family: inherit; transition: border-color 0.15s; } #snp-report-backdrop .field textarea:focus { border-color: #ff5500; } #snp-report-backdrop .actions { display: flex; gap: 8px; justify-content: flex-end; } #snp-report-backdrop button.primary { font-size: 12px; font-weight: 700; padding: 7px 16px; border-radius: 20px; border: none; background: #ff5500; color: #fff; cursor: pointer; letter-spacing: 0.02em; transition: background 0.15s; } #snp-report-backdrop button.primary:hover:not(:disabled) { background: #e04a00; } #snp-report-backdrop button.primary:disabled { background: #1c2b3a; color: #7a90a4; cursor: not-allowed; } #snp-report-backdrop button.secondary { font-size: 12px; font-weight: 600; padding: 7px 16px; border-radius: 20px; border: 1px solid #1c2b3a; background: transparent; color: #7a90a4; cursor: pointer; transition: border-color 0.15s, color 0.15s; } #snp-report-backdrop button.secondary:hover:not(:disabled) { border-color: #7a90a4; color: #ffffff; } `;var Mt=(e,t)=>{let n=l=>e.querySelector(`#${l}`),o=n("snp-report-backdrop"),i=n("snp-report-message"),s=n("snp-report-status"),r=n("snp-report-cancel"),a=n("snp-report-submit");o.style.display="none";let p=(l,f=!1)=>{s.textContent=l,s.classList.toggle("error",f)},c=0,d=()=>{o.style.display="none",i.value="",p(""),a.disabled=!1},u=()=>{c+=1,o.style.display="flex",p(""),a.disabled=!1,i.focus()};return r.addEventListener("click",()=>{t.onCancel?.(),d()}),o.addEventListener("click",l=>{l.target===o&&(t.onCancel?.(),d())}),a.addEventListener("click",()=>{let l=c;a.disabled=!0,p("Submitting\u2026"),Promise.resolve(t.onSubmit(i.value.trim())).then(()=>{c===l&&(p("Reported. Thanks."),setTimeout(d,1200))}).catch(()=>{c===l&&(p("Failed to submit report. Try again.",!0),a.disabled=!1)})}),{open:u,close:d}};var q=_("report-button"),eo="data-sniffies-report-injection",Wr="Sniffies Project: Report",$r="snp-report-root",qr=1e3,Vr=100,Kr=3e3,zr=300,Xr=e=>{try{let n=new URL(e).pathname.split("/").filter(Boolean)[0];return n&&/^[a-f0-9]{16,}$/i.test(n)?n:null}catch{return null}},to=e=>{let t=e.split("/").filter(Boolean),n=t[0]==="profile"?t[1]:void 0;return n&&/^[a-f0-9]{16,}$/i.test(n)?n:null},Jr=e=>{let t=e.style.backgroundImage||getComputedStyle(e).backgroundImage;if(!t||t==="none")return null;let o=t.match(/url\((['"]?)(.*?)\1\)/)?.[2];if(!o)return null;let i=Xr(o);return i?{userId:i,profilePicUrl:o}:null},Ht=e=>{let t=null,n=0,o=null,i=null,s=async(h,E)=>{if(!e.serverBase)throw new Error("server not configured");let m=await fetch(`${e.serverBase}/api/report`,{method:"POST",headers:e.getAuthHeaders(),body:JSON.stringify({reportType:"bot_suspected",reportedUserId:h,reporterUserId:e.getReporterUserId(),message:E||void 0})});if(!m.ok)throw new Error(`report failed with status ${m.status}`)},r=()=>{if(o)return o;let h=document.createElement("style");h.textContent=xe,document.head.appendChild(h);let E=document.createElement("div");return E.id=$r,E.innerHTML=Se,document.body.appendChild(E),o=Mt(E,{onSubmit:async m=>{i&&await s(i,m)},onCancel:()=>{i=null}}),o},a=()=>to(location.pathname)??t,p=h=>{let E=h.cloneNode(!0);E.removeAttribute("data-testid"),E.setAttribute(eo,""),E.title="Report as suspected bot";let m=E.querySelector("span")??E,y=m.querySelector("i");return m.textContent=Wr,y&&(y.className=y.className.replace(/\bfa-\S+/,"fa-flag"),m.prepend(y)),E.addEventListener("click",v=>{if(v.stopPropagation(),!e.getReporterUserId()){q.warn("no sniffies user id observed yet \u2014 cannot report");return}let b=a();if(!b){q.warn("no profile id resolved \u2014 cannot report");return}i=b,r().open()}),E},c=h=>{let E=h.querySelector("button:last-of-type");!E||h.querySelector(`[${eo}]`)||h.append(p(E))},d=()=>{let h=document.querySelector(ze),E=a();h&&E&&e.onProfileResolved?.(h,E)},u=(h,E)=>{if(!e.onProfileResolved)return;n+=1;let m=n,y=performance.now()+h,v=()=>{m===n&&(d(),performance.now(){for(let E of h)for(let m of E.addedNodes){if(!(m instanceof HTMLElement))continue;let y=m.matches(B)?m:m.querySelector(B);y&&e.reportingEnabled&&c(y),(m.matches(`${le}, ${ce}`)||m.querySelector(`${le}, ${ce}`))&&d()}}),f=()=>{l.observe(document.body,{childList:!0,subtree:!0})};document.addEventListener("click",h=>{let E=h.target;if(!(E instanceof Element))return;let m=E.closest(Ke);if(!m)return;let y=Jr(m);e.onMarkerClick?.(m,y),q(y?"marker clicked":"marker clicked but no id in its image \u2014 resolving from URL",y??m),y&&(t=y.userId),u(qr,Vr)},!0),document.body?f():document.addEventListener("DOMContentLoaded",f,{once:!0});let g=to(location.pathname);g&&(q("initial page load on a profile URL",g),u(Kr,zr))},Yr=async(e,t,n)=>{if(e)try{let o=await fetch(`${e}/api/blocked-bots`,{headers:t()});if(!o.ok)return;let i=await o.json();n(i.userIds??[],Date.now())}catch(o){q.error("fetchBlockedBots failed",o)}},Qr=1440*60*1e3,Dt=(e,t,n,o)=>{Date.now()-e>Qr&&Yr(t,n,o)};var no=`#snp-bot-block-root { margin: 0 -16px; } #snp-bot-block-root .section { background: transparent; border: none; border-radius: 0; padding: 0; display: flex; flex-direction: column; gap: 0; box-shadow: inset 0 -1px #0f1e35; } #snp-bot-block-root .section h2 { margin: 0; font-size: 10px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: #7a90a4; } #snp-bot-block-root details.collapsible { padding: 0; display: block; } #snp-bot-block-root details.collapsible summary { list-style: none; cursor: pointer; padding: 0 12px; min-height: 56px; background: #0f1e35; display: flex; align-items: center; gap: 12px; user-select: none; } #snp-bot-block-root details.collapsible summary::-webkit-details-marker { display: none; } #snp-bot-block-root details.collapsible summary:hover::after { color: #768eb8; } #snp-bot-block-root details.collapsible summary::after { content: "\u203A"; margin-left: auto; font-size: 16px; line-height: 1; color: #7a90a4; transform: rotate(90deg); transition: transform 0.15s, color 0.25s; } #snp-bot-block-root details.collapsible[open] summary::after { transform: rotate(270deg); } #snp-bot-block-root details.collapsible summary h2 { margin: 0; } #snp-bot-block-root .collapsible-body { padding: 12px 12px 12px 56px; display: flex; flex-direction: column; gap: 0; } #snp-bot-block-root .row { display: flex; align-items: center; gap: 8px; font-size: 13px; cursor: pointer; color: #ffffff; } #snp-bot-block-root .row input[type="checkbox"] { accent-color: #ff5500; width: 14px; height: 14px; } #snp-bot-block-root .hint { font-size: 12px; color: #aebcd0; margin: 0; } #snp-bot-block-root .stat { font-size: 12px; font-weight: 700; color: #ffffff; margin: 0; } #snp-bot-block-root .stat:empty { display: none; } `;var _e=`

Block Bot Accounts

`;var Ut=M+no;var Gt=(e,t)=>{let n=p=>e.querySelector(`#${p}`),o=e.querySelector("#bot-block-details"),i=n("bot-block-count"),s=n("bot-block-hint"),r=n("bot-block-enabled"),a=n("bot-block-enable-label");if(o&&(o.open=t.initialOpen,o.addEventListener("toggle",()=>t.onToggle(o.open))),!t.reportingEnabled){r.checked=!1,r.disabled=!0,s.textContent="Coming soon!",a.style.textDecoration="line-through";return}r.checked=t.userEnabledReporting,s.textContent="Hide profiles that have been confirmed as bots from the map and live updates.",i.textContent=t.initialCount>0?`${t.initialCount} bot${t.initialCount===1?"":"s"} blocked in the last 24 hours`:"",r.addEventListener("change",()=>{t.onToggleEnabled(r.checked)})};var ro=_("sent-photos"),oo="Couldn't find this chat. Reopen it, then try again.",ti=(e,t)=>e.messages.find(n=>n.author&&n.author!==t)?.author??e.partialUserIds.find(n=>n!==t),ni=(e,t)=>{let{conversations:n=[],pinnedConversations:o=[]}=e.conversationData??{};for(let i of[...n,...o]){let s=i.author1===t?i.author2:i.author2===t?i.author1:null;if(s&&i._id)return{conversationId:i._id,ownId:s}}return null},oi=async(e,t,n=window.fetch.bind(window))=>{try{let o=await n(`${e}${Y}`,{credentials:"include",headers:{"ngsw-bypass":"true"}});if(!o.ok)return null;let i=ni(await o.json(),t);return i&&{apiOrigin:e,recipientId:t,...i}}catch(o){return ro.warn("chat list lookup failed:",o),null}},io=async(e,t,n,o)=>{try{let i=await o(`${e.apiOrigin}${t}`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json","ngsw-bypass":"true"},body:JSON.stringify(n)});return i.ok?null:`Sniffies rejected a request (${i.status}).`}catch(i){return ro.warn("hide request failed:",i),"A request failed; check your connection."}},ri=(e,t,n=window.fetch.bind(window))=>io(e,Yt,{conversationId:e.conversationId,conversationLocation:null,userIdFrom:e.ownId,userIdTo:e.recipientId,messageId:t,isHidden:!0,file:null},n),ii=(e,t,n=window.fetch.bind(window))=>io(e,Qt,{conversationId:e.conversationId,conversationLocation:null,userIdFrom:e.ownId,userIdTo:e.recipientId,isHidden:t},n),so=e=>{try{let t=new URL(e,location.href);return z(t.host)&&t.pathname.startsWith("/api/")?t:null}catch{return null}},si=()=>{for(let e of performance.getEntriesByType("resource")){let t=so(e.name);if(t)return t.origin}return null},jt=e=>{let t=null,n=null,o=new Map,i=XMLHttpRequest.prototype;if(!i.__sniffiesSentPhotosPatched){i.__sniffiesSentPhotosPatched=!0;let r=i.open,a=i.send;i.open=function(p,c,...d){return this.__sniffiesApiUrl=so(c.toString()),this.__sniffiesApiUrl&&(n=this.__sniffiesApiUrl.origin),r.apply(this,[p,c,...d])},i.send=function(...p){let c=this.__sniffiesApiUrl,d=c?.pathname===Q?c.searchParams.get("conversationId"):null;return c&&d&&this.addEventListener("load",()=>{try{let u=this.responseType==="json"?this.response:JSON.parse(this.responseText);if(!Array.isArray(u?.messages))return;t={apiOrigin:c.origin,conversationId:d,messages:u.messages,partialUserIds:(u.partialUsers??[]).map(l=>l._id)}}catch{}}),a.apply(this,p)}}let s=async r=>{let a=e();if(t&&a){let d=ti(t,a);if(d&&(!r||d===r))return{apiOrigin:t.apiOrigin,conversationId:t.conversationId,ownId:a,recipientId:d}}let p=t?.apiOrigin??n??si();if(!r||!p)return null;let c=o.get(r)??null;return c||(c=await oi(p,r),c&&o.set(r,c)),c};return{hideOne:async(r,a)=>{let p=await s(a);return p?ri(p,r):oo},setAllHidden:async(r,a)=>{let p=await s(r);return p?ii(p,a):oo}}};var ai=_("hide-photo"),ao="message-",li=e=>{let n=e.closest(tt)?.querySelector(`[id^="${ao}"]`)?.id;return n?n.slice(ao.length):null},lo=()=>location.pathname.match(/^\/profile\/([a-f0-9]{16,})/i)?.[1]??null,Wt=(e,t,n=()=>location.reload(),o=i=>window.alert(i))=>{let i=r=>{let a=r.closest(et),p=a&&li(a);if(p)return()=>e.hideOne(p,lo());let c=lo();return c&&r.closest(j)?()=>e.setAllHidden(c,!0):c&&r.closest(W)?()=>e.setAllHidden(c,!1):null},s=r=>{let a=t()&&r.target instanceof Element?i(r.target):null;a&&(r.preventDefault(),r.stopPropagation(),r.stopImmediatePropagation(),a().then(p=>{if(p){ai.warn("couldn't change photo visibility:",p),o(p);return}n()}))};return document.addEventListener("click",s,!0),()=>document.removeEventListener("click",s,!0)};var ci=_("hide-photo-menu"),co="data-sniffies-photos-injection",po="data-sniffies-report-injection",di=[{selector:j,testId:"hideAllPhotosButton",label:"Hide All My Photos",icon:"fa-eye-slash"},{selector:W,testId:"unhideAllPhotosButton",label:"Unhide All My Photos",icon:"fa-eye"}],pi=(e,{testId:t,label:n,icon:o})=>{let i=e.cloneNode(!0);i.removeAttribute(po),i.removeAttribute("title"),i.setAttribute("data-testid",t),i.setAttribute(co,"");let s=i.querySelector("span")??i,r=s.querySelector("i");return s.textContent=n,r&&(r.className=r.className.replace(/\bfa-\S+/,o),s.prepend(r)),i},ui=e=>{let t=e.querySelector(`button:not([${co}]):not([${po}])`);if(t)for(let n of di)e.querySelector(n.selector)||(e.append(pi(t,n)),ci("added",n.label))},$t=e=>{let t=new MutationObserver(o=>{if(e())for(let{addedNodes:i}of o)for(let s of i){if(!(s instanceof HTMLElement))continue;let r=s.matches(B)?s:s.querySelector(B);r&&ui(r)}}),n=()=>t.observe(document.body,{childList:!0,subtree:!0});return document.body?n():document.addEventListener("DOMContentLoaded",n,{once:!0}),()=>t.disconnect()};var uo="data:image/png;base64,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";var fo=`

Sniffies Plug-ins

`;var V="https://sniffies-projects.vercel.app",Te="ed6fd0cd-fe58-4dcc-83cd-65651771e0e9",H="0.4.1";var mo="sniffies-geo",go="sniffies-blocked-bots",bo="sniffies-blocked-bots-fetched-at",ho="sniffies-bot-blocking-enabled",Eo="sniffies-bot-blocking-section-open",yo="sniffies-blocked-bot-events",vo="sniffies-profile-filters",So="sniffies-profile-filters-enabled",xo="sniffies-profile-filters-section-open",_o=()=>{try{let e=localStorage.getItem(mo);return e?{...A,...JSON.parse(e)}:{...A}}catch{return{...A}}},To=e=>{localStorage.setItem(mo,JSON.stringify(e))},Oo=()=>{try{let e=localStorage.getItem(go),t=e?JSON.parse(e):[];return Array.isArray(t)?t.filter(n=>typeof n=="string"):[]}catch{return[]}},Lo=()=>{let e=localStorage.getItem(bo),t=e?Number(e):0;return Number.isFinite(t)?t:0},Po=(e,t)=>{localStorage.setItem(go,JSON.stringify(e)),localStorage.setItem(bo,String(t))},Oe=()=>{let e=localStorage.getItem(ho);return e===null?!0:e==="true"},Ro=e=>{localStorage.setItem(ho,String(e))},ko=()=>localStorage.getItem(Eo)==="true",wo=e=>{localStorage.setItem(Eo,String(e))},qt=()=>{try{let e=localStorage.getItem(yo);return e?JSON.parse(e):{}}catch{return{}}},Io=e=>{let t=pt(qt(),e);localStorage.setItem(yo,JSON.stringify(t))},Le=()=>{try{return oe(JSON.parse(localStorage.getItem(vo)??"null"))}catch{return oe(null)}},Co=e=>{localStorage.setItem(vo,JSON.stringify(e))},D=()=>localStorage.getItem(So)==="true",Fo=e=>{localStorage.setItem(So,String(e))},No=()=>localStorage.getItem(xo)==="true",Ao=e=>{localStorage.setItem(xo,String(e))};var Bo=()=>({"Content-Type":"application/json",Authorization:`Bearer ${Te}`}),Mo=e=>{let t={currentSniffiesUserId:"",botBlockState:{blockedIds:new Set(Oo()),enabled:Oe()},appliedProfileFilters:De(Le(),D())};return Ve([Ne(()=>t.botBlockState,n=>Io(n)),...Ue(()=>t.appliedProfileFilters)],e),Ht({serverBase:V,getAuthHeaders:Bo,reportingEnabled:!0,getReporterUserId:()=>t.currentSniffiesUserId}),t},Ho=e=>{Dt(Lo(),V,Bo,(t,n)=>{Po(t,n),e.botBlockState={...e.botBlockState,blockedIds:new Set(t)}})};var gi=_("user-id-logger"),Do=e=>{let t=!1;return $e(n=>{gi("user id observed",n),e?.(n),!t&&(t=!0,ft({serverBase:V,clientSecret:Te,userId:n,clientType:"userscript",version:H}))})};var Go=_("tools"),jo=()=>({enabled:xt(),flags:Tt()});function bi(){let e=jo(),t=Mo(()=>e.enabled&&e.flags.boundary);Do(s=>{t.currentSniffiesUserId=s}),Ho(t),lt(D),bt(kt);let n=()=>e.enabled&&e.flags.photos;Wt(jt(()=>t.currentSniffiesUserId),n),$t(n);let o=Bt({initialOverride:_o(),isPremiumEnabled:()=>e.enabled&&e.flags.location,onOverrideChanged:To}),i=o.getOverride();return Go("init",{version:H,reportingBuildFlag:!0,premiumFeatures:e.enabled,geoSpoofing:{hasLocation:I(i)},botBlocking:t.botBlockState.enabled,profileFilters:t.appliedProfileFilters}),{premium:e,geoController:o,reportState:t}}function Uo(e){let t=e?.premium??jo(),n=e?.geoController??null,o=e?.reportState??{currentSniffiesUserId:"",botBlockState:{blockedIds:new Set,enabled:!0},appliedProfileFilters:G},i=document.createElement("style");i.textContent=Et,document.head.appendChild(i);let s=document.createElement("style");s.textContent=mt,document.head.appendChild(s);let r=document.createElement("style");r.textContent=Ut,document.head.appendChild(r);let a=document.createElement("style");a.textContent=ct,document.head.appendChild(a);let p=document.createElement("style");p.textContent=ye,document.head.appendChild(p);let c=document.createElement("style");c.textContent=he,document.head.appendChild(c);let d=document.createElement("button");d.id="snp-fab",d.title="Sniffies Tools";let u=document.createElement("i");u.id="snp-fab-icon",u.classList.add("fa","snp-fab-icon-base-size"),u.style.backgroundImage=`url("${uo}")`,d.appendChild(u),ht(d);let l=document.createElement("div");l.id="snp-panel",l.style.display="none",l.innerHTML=fo,document.body.appendChild(l);let f=l.querySelector("#snp-version-root");f.innerHTML=Ee,wt(f,H);let g=l.querySelector("#snp-update-root");g.innerHTML=be,St(g,"userscript",H);let h=l.querySelector("#snp-premium-root");h.innerHTML=me;let E=()=>{n&&(n.syncOverride(n.getOverride()),t.enabled&&t.flags.location&&I(n.getOverride())&&n.sendLocationUpdate(n.getOverride()))},m=gt(h,{initialEnabled:t.enabled,onToggleEnabled:S=>{_t(S),t.enabled=S,E()},flags:t.flags,onFlagChange:(S,F)=>{t.flags={...t.flags,[S]:F},Ot(t.flags),S==="location"&&E()},hasPlus:Rt(),geo:{initial:n?.getOverride()??{...A},onClear:S=>n?.setOverride(S)},initialOpen:Lt(),onToggle:Pt});n?.subscribeChange(S=>{m.setOverride(S)});let y=l.querySelector("#snp-bot-block-root");y.innerHTML=_e,Gt(y,{reportingEnabled:!0,userEnabledReporting:Oe(),initialCount:ut(qt()),initialOpen:ko(),onToggle:wo,onToggleEnabled:S=>{Ro(S),o.botBlockState={...o.botBlockState,enabled:S}}});let v=l.querySelector("#snp-profile-filters-root");v.innerHTML=ue;let b=null,x=S=>{S&&!b?b=st({initial:Le(),applied:o.appliedProfileFilters,onChange:Co}):!S&&b&&(b(),b=null)};x(D()),dt(v,{initialEnabled:D(),onToggleEnabled:S=>{Fo(S),x(S)},initialOpen:No(),onToggle:Ao});let T=l.querySelector("#snp-close");d.addEventListener("click",()=>{l.style.display=l.style.display==="none"?"flex":"none"}),T.addEventListener("click",()=>{l.style.display="none"})}if(!window.__sniffiesInjected){window.__sniffiesInjected=!0;let e=null;try{e=bi()}catch(t){Go.error("hook install failed:",t)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>Uo(e),{once:!0}):Uo(e)}})(); //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vY29yZS9zcmMvbG9nLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NuaWZmaWVzLWFwaS50cyIsICIuLi8uLi9jb3JlL3NyYy9wcm9maWxlLWZpbHRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXR0aW5ncy50cyIsICIuLi8uLi9jb3JlL3NyYy9nZW8taG9vay50cyIsICIuLi8uLi9jb3JlL3NyYy91c2VyLWlkLWhvb2sudHMiLCAiLi4vLi4vY29yZS9zcmMvcHJvZmlsZS1maWx0ZXItaG9vay50cyIsICIuLi8uLi9jb3JlL3NyYy9maWx0ZXItbWVudS5jc3MiLCAiLi4vLi4vY29yZS9zcmMvcmFuZ2UtZmx5b3V0LXVpLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NuaWZmaWVzLXNlbGVjdG9ycy50cyIsICIuLi8uLi9jb3JlL3NyYy9maWx0ZXItbWVudS11aS50cyIsICIuLi8uLi9jb3JlL3NyYy9zZWxlY3Rpb24tbGltaXQtaG9vay50cyIsICIuLi8uLi9jb3JlL3NyYy9wcm9maWxlLWZpbHRlcnMuY3NzIiwgIi4uLy4uL2NvcmUvc3JjL3N3aXRjaC5jc3MiLCAiLi4vLi4vY29yZS9zcmMvcHJvZmlsZS1maWx0ZXJzLmh0bWwiLCAiLi4vLi4vY29yZS9zcmMvcHJvZmlsZS1maWx0ZXJzLXVpLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Jsb2NrZWQtYm90LWxvZy50cyIsICIuLi8uLi9jb3JlL3NyYy9sb2ctaW5pdC50cyIsICIuLi8uLi9jb3JlL3NyYy9wcmVtaXVtLWZlYXR1cmVzLmh0bWwiLCAiLi4vLi4vY29yZS9zcmMvcHJlbWl1bS1mZWF0dXJlcy5jc3MiLCAiLi4vLi4vY29yZS9zcmMvcHJlbWl1bS1mZWF0dXJlcy11aS50cyIsICIuLi8uLi9jb3JlL3NyYy9wbHVzLWhvb2sudHMiLCAiLi4vLi4vY29yZS9zcmMvbW91bnQtZmFiLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3BhbmVsLmNzcyIsICIuLi8uLi9jb3JlL3NyYy91cGRhdGUtY2hlY2sudHMiLCAiLi4vLi4vY29yZS9zcmMvdXBkYXRlLWJhbm5lci5odG1sIiwgIi4uLy4uL2NvcmUvc3JjL3VwZGF0ZS1iYW5uZXIuY3NzIiwgIi4uLy4uL2NvcmUvc3JjL3VwZGF0ZS1iYW5uZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvbG9jYWwtc3RvcmFnZS50cyIsICIuLi8uLi9jb3JlL3NyYy92ZXJzaW9uLWJhZGdlLmh0bWwiLCAiLi4vLi4vY29yZS9zcmMvdmVyc2lvbi1iYWRnZS5jc3MiLCAiLi4vLi4vY29yZS9zcmMvdmVyc2lvbi1iYWRnZS50cyIsICIuLi8uLi9jb3JlL3NyYy90cmF2ZWwtY2FwdHVyZS1ob29rLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2NpdHktc2VhcmNoLWhvb2sudHMiLCAiLi4vLi4vY29yZS9zcmMvY2l0eS1zZWFyY2gtc3RhdHVzLWhvb2sudHMiLCAiLi4vLi4vY29yZS9zcmMvbG9jYXRpb24tb3ZlcnJpZGUtY29udHJvbGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9yZXBvcnQtbW9kYWwuaHRtbCIsICIuLi8uLi9jb3JlL3NyYy9yZXBvcnQtbW9kYWwuY3NzIiwgIi4uLy4uL2NvcmUvc3JjL3JlcG9ydC11aS50cyIsICIuLi8uLi9jb3JlL3NyYy9yZXBvcnQtYnV0dG9uLWhvb2sudHMiLCAiLi4vLi4vY29yZS9zcmMvYm90LWJsb2NrLmNzcyIsICIuLi8uLi9jb3JlL3NyYy9ib3QtYmxvY2suaHRtbCIsICIuLi8uLi9jb3JlL3NyYy9ib3QtYmxvY2stdWkudHMiLCAiLi4vLi4vY29yZS9zcmMvc2VudC1waG90b3MudHMiLCAiLi4vLi4vY29yZS9zcmMvaGlkZS1waG90by1jbGljay1ob29rLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2hpZGUtcGhvdG8tbWVudS1ob29rLnRzIiwgIi4uL3NyYy9wYW5lbC5odG1sIiwgIi4uL3NyYy9zaGFyZWQvZW52LnRzIiwgIi4uL3NyYy9zaGFyZWQvbG9jYWwtc3RvcmFnZS50cyIsICIuLi9zcmMvcmVwb3J0LnRzIiwgIi4uL3NyYy91c2VyLWlkLWxvZ2dlci50cyIsICIuLi9zcmMvdXNlcnNjcmlwdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xuICAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZDtcbiAgd2FybjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZDtcbiAgZXJyb3I6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQ7XG59XG5cbi8vIEFsbCBjb25zb2xlIHRhZ3MgaGF2ZSBcIltzbmlmZmllcy08bmFtZT5dXCIgZm9ybWF0LlxuY29uc3QgZm9ybWF0VGFnID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiBgW3NuaWZmaWVzLSR7bmFtZX1dYDtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUxvZ2dlciA9IChuYW1lOiBzdHJpbmcpOiBMb2dnZXIgPT4ge1xuICBjb25zdCB0YWcgPSBmb3JtYXRUYWcobmFtZSk7XG4gIGNvbnN0IGxvZyA9ICgoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCA9PiB7XG4gICAgaWYgKF9fREVCVUdfXykge1xuICAgICAgY29uc29sZS5sb2codGFnLCAuLi5hcmdzKTtcbiAgICB9XG4gIH0pIGFzIExvZ2dlcjtcbiAgbG9nLndhcm4gPSAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCA9PiB7XG4gICAgY29uc29sZS53YXJuKHRhZywgLi4uYXJncyk7XG4gIH07XG4gIGxvZy5lcnJvciA9ICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICBjb25zb2xlLmVycm9yKHRhZywgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiBsb2c7XG59O1xuIiwgIi8vIEV2ZXJ5dGhpbmcgd2UgYXNzdW1lIGFib3V0IHNuaWZmaWVzLmNvbSBBUElcblxuLy8gXHUyNTAwXHUyNTAwIEhvc3RzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgY29uc3QgaXNTbmlmZmllc0FwaUhvc3QgPSAoaG9zdDogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBob3N0ID09PSBcInNuaWZmaWVzLmNvbVwiIHx8IGhvc3QuZW5kc1dpdGgoXCIuc25pZmZpZXMuY29tXCIpO1xuXG4vKiogTGl2ZSBwcmVzZW5jZSArIGNoYXQgc29ja2V0OiB3c3M6Ly9wcm9kLndzLnNuaWZmaWVzLmNvbS8/dXNlcklkPTxvd24gaWQ+JmxhdD0uLi4mbG5nPS4uLiAqL1xuZXhwb3J0IGNvbnN0IFdTX0hPU1QgPSBcInByb2Qud3Muc25pZmZpZXMuY29tXCI7XG4vKiogUXVlcnkgcGFyYW0gb24gdGhlIHNvY2tldCdzIGNvbm5lY3QgVVJMIGNhcnJ5aW5nIHRoZSBsb2dnZWQtaW4gdXNlcidzIG93biBpZC4gKi9cbmV4cG9ydCBjb25zdCBXU19VU0VSX0lEX1BBUkFNID0gXCJ1c2VySWRcIjtcblxuLy8gXHUyNTAwXHUyNTAwIFByb2ZpbGVzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBTbmlmZmllc0dlbmRlciA9IFwibWFuXCIgfCBcIndvbWFuXCIgfCBcIm5vbmJpbmFyeVwiIHwgbnVsbDtcblxuLyoqIEEgU25pZmZpZXMgYWNjb3VudCBhcyBpdCBhcHBlYXJzIG9uIHRoZSB3aXJlLiBgZGF0YWAgaXMgYWJzZW50IHdoZW4gb25seSB0aGUgaWQgaXMga25vd24uICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlcmFibGVQcm9maWxlIHtcbiAgX2lkOiBzdHJpbmc7XG4gIGRhdGE/OiB7XG4gICAgY29ubmVjdFVwZGF0ZVRpbWU/OiBzdHJpbmc7XG4gICAgcHJvZmlsZT86IHtcbiAgICAgIGV4dGVuZGVkPzoge1xuICAgICAgICBzZXh1YWxpdHk/OiB7IGdlbmRlcj86IFNuaWZmaWVzR2VuZGVyIH07XG4gICAgICAgIC8qKiBXaG9sZSBudW1iZXJzLCB3aGF0ZXZlciB1bml0cyB0aGUgcHJvZmlsZSB3YXMgZW50ZXJlZCBpbi4gKi9cbiAgICAgICAgc3RhdHM/OiB7IGhlaWdodEluQ20/OiBudW1iZXIgfCBudWxsOyB3ZWlnaHRJbktnPzogbnVtYmVyIHwgbnVsbCB9O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufVxuXG4vLyBXaGF0IFNuaWZmaWVzJyBwcm9maWxlIGVkaXRvciBvZmZlcnNcbmV4cG9ydCBjb25zdCBIRUlHSFRfTElNSVRTID0geyBpbmNoZXM6IHsgbWluOiA0OCwgbWF4OiA4NCB9LCBjbTogeyBtaW46IDEyMCwgbWF4OiAyMTAgfSB9IGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFdFSUdIVF9MSU1JVFMgPSB7IGxiOiB7IG1pbjogOTAsIG1heDogNDAwIH0sIGtnOiB7IG1pbjogNDAsIG1heDogMTgwIH0gfSBhcyBjb25zdDtcblxuLy8gSW1wZXJpYWwgZW50cmllcyBhcmUgc3RvcmVkIGFzIE1hdGgucm91bmQoaW5jaGVzICogMi41NCkgY20gYW5kIE1hdGgucm91bmQobGIgLyAyLjIwNDYyKSBrZy5cbmV4cG9ydCBjb25zdCBDTV9QRVJfSU5DSCA9IDIuNTQ7XG5leHBvcnQgY29uc3QgTEJfUEVSX0tHID0gMi4yMDQ2MjtcblxuLy8gXHUyNTAwXHUyNTAwIEFjY291bnQgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKiBQT1NUIFx1MjAxNCB0aGUgbG9nZ2VkLWluIHVzZXIncyBvd24gYWNjb3VudC4gKi9cbmV4cG9ydCBjb25zdCBBVVRIRU5USUNBVEVfQ1VSUkVOVF9QQVRIID0gXCIvYXBpL2F1dGhlbnRpY2F0ZS9jdXJyZW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aGVudGljYXRlQ3VycmVudFBheWxvYWQge1xuICB1c2VyPzoge1xuICAgIHByaXZhdGU/OiB7XG4gICAgICBhcHBzdG9yZU1lbWJlcnNoaXA/OiB7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgICAgIHN1YnNjcmlwdGlvblN0YXR1cz86IHN0cmluZztcbiAgICAgICAgLyoqIElTTyBkYXRlIHRoZSBtZW1iZXJzaGlwIGVuZHMuICovXG4gICAgICAgIGVuZD86IHN0cmluZztcbiAgICAgIH0gfCBudWxsO1xuICAgIH07XG4gIH07XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBNYXAgKyBjaGF0IGVuZHBvaW50cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqIFBPU1QgXHUyMDE0IHRoZSBtYXAgaW5pdC4gKi9cbmV4cG9ydCBjb25zdCBQT1NUX0FVVEhfUEFUSCA9IFwiL2FwaS9wb3N0LWF1dGhlbnRpY2F0aW9uXCI7XG4vKiogUE9TVCBcdTIwMTQgXCJDcnVpc2UgdGhpcyBhcmVhXCI6IHJlbG9hZHMgdGhlIG1hcCBmb3IgYSBuZXcgc3BvdC4gU2FtZSB2aXNpdG9yIGxpc3RzIGFzIHRoZSBtYXAgaW5pdC4gKi9cbmV4cG9ydCBjb25zdCBTT0ZUX1JFTE9BRF9QQVRIID0gXCIvYXBpL3NvZnRSZWxvYWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZWFyYnlWaXNpdG9yc1BheWxvYWQge1xuICBuZWFyYnlWaXNpdG9ycz86IHtcbiAgICB2aXNpdG9ycz86IEZpbHRlcmFibGVQcm9maWxlW107XG4gICAgZW1pdFJhZGl1c0luTWlsZXM/OiBudW1iZXI7XG4gIH07XG4gIHBhcnRpYWxWaXNpdG9yRGF0YT86IEZpbHRlcmFibGVQcm9maWxlW107XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbi8qKiBHRVQgXHUyMDE0IHRoZSBjaGF0IGluaXQuICovXG5leHBvcnQgY29uc3QgQ0hBVF9EQVRBX1BBVEggPSBcIi9hcGkvdjIvcG9zdC1hdXRoZW50aWNhdGlvbi9jaGF0LWRhdGFcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb24ge1xuICBfaWQ/OiBzdHJpbmc7XG4gIHBhcnRpY2lwYW50cz86IHN0cmluZztcbiAgYXV0aG9yMT86IHN0cmluZztcbiAgYXV0aG9yMj86IHN0cmluZyB8IG51bGw7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdERhdGFQYXlsb2FkIHtcbiAgY29udmVyc2F0aW9uRGF0YT86IHtcbiAgICBjb252ZXJzYXRpb25zPzogQ29udmVyc2F0aW9uW107XG4gICAgcGlubmVkQ29udmVyc2F0aW9ucz86IENvbnZlcnNhdGlvbltdO1xuICAgIHVzZXJJZHM/OiBzdHJpbmdbXTtcbiAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICB9O1xuICBwYXJ0aWFsVmlzaXRvckRhdGE/OiBGaWx0ZXJhYmxlUHJvZmlsZVtdO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG4vKiogR0VUID9jb252ZXJzYXRpb25JZD1cdTIwMjYgXHUyMDE0IGFuIG9wZW5lZCBjaGF0IHRocmVhZC4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFU19QQVRIID0gXCIvYXBpL21lc3NhZ2VzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XG4gIF9pZD86IHN0cmluZztcbiAgYXV0aG9yPzogc3RyaW5nO1xuICAvKiogRmlsZW5hbWUgb2YgdGhlIGF0dGFjaGVkIHBob3RvOyBudWxsL2Fic2VudCBvbiB0ZXh0IG1lc3NhZ2VzLiAqL1xuICBmaWxlPzogc3RyaW5nIHwgbnVsbDtcbiAgaXNIaWRkZW4/OiBib29sZWFuO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VzUGF5bG9hZCB7XG4gIG1lc3NhZ2VzPzogTWVzc2FnZVtdO1xuICBwYXJ0aWFsVXNlcnM/OiBGaWx0ZXJhYmxlUHJvZmlsZVtdO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG4vKiogUE9TVCBcdTIwMTQgaGlkZXMgKG9yIHVuLWhpZGVzKSBvbmUgcGhvdG8gbWVzc2FnZSwgcGVyIHBob3RvLiBSZXNwb25kcyBgdHJ1ZWAuICovXG5leHBvcnQgY29uc3QgUEhPVE9fVklTSUJJTElUWV9QQVRIID0gXCIvYXBpL21lc3NhZ2VzL3Bob3RvLXZpc2liaWxpdHlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQaG90b1Zpc2liaWxpdHlCb2R5IHtcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgY29udmVyc2F0aW9uTG9jYXRpb246IG51bGw7XG4gIHVzZXJJZEZyb206IHN0cmluZztcbiAgdXNlcklkVG86IHN0cmluZztcbiAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gIGlzSGlkZGVuOiBib29sZWFuO1xuICBmaWxlOiBudWxsO1xufVxuXG4vKiogUE9TVCBcdTIwMTQgaGlkZXMgb3IgdW4taGlkZXMgZXZlcnkgcGhvdG8geW91J3ZlIHNlbnQgaW4gb25lIGNvbnZlcnNhdGlvbi4gUmVzcG9uZHMgYHRydWVgLiAqL1xuZXhwb3J0IGNvbnN0IEFMTF9QSE9UT1NfVklTSUJJTElUWV9QQVRIID0gXCIvYXBpL21lc3NhZ2VzL2FsbC1waG90b3MtdmlzaWJpbGl0eVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFsbFBob3Rvc1Zpc2liaWxpdHlCb2R5IHtcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgY29udmVyc2F0aW9uTG9jYXRpb246IG51bGw7XG4gIHVzZXJJZEZyb206IHN0cmluZztcbiAgdXNlcklkVG86IHN0cmluZztcbiAgaXNIaWRkZW46IGJvb2xlYW47XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBMb2NhdGlvbiBlbmRwb2ludHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCBpbnRlcmZhY2UgU25pZmZpZXNMYXRMbmcge1xuICBsYXQ6IG51bWJlcjtcbiAgbG5nOiBudW1iZXI7XG59XG5cbi8qKiBQVVQgXHUyMDE0IHRoZSB1c2VyJ3MgcG9zaXRpb247IFRyYXZlbCBNb2RlJ3MgXCJUcmF2ZWwgaGVyZVwiIHNlbmRzIHRoZSBwaWNrZWQgcGluIGFzIHZpcnR1YWxMb2NhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBMT0NBVElPTl9QQVRIID0gXCIvYXBpL3Zpc2l0b3IvY3VycmVudC9sb2NhdGlvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uUHV0Qm9keSB7XG4gIHZpcnR1YWxMb2NhdGlvbj86IFNuaWZmaWVzTGF0TG5nO1xuICBwaHlzaWNhbExvY2F0aW9uPzogU25pZmZpZXNMYXRMbmc7XG4gIGhvbWVEaXN0YW5jZUluTWlsZXM/OiBudW1iZXIgfCBudWxsO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG4vKiogR0VUIC9hcGkvY2l0eS97aWR9IFx1MjAxNCBhIFRyYXZlbCBNb2RlIGNpdHkgc2VhcmNoIHJlc3VsdC4gKi9cbmV4cG9ydCBjb25zdCBDSVRZX0VORFBPSU5UX1BBVFRFUk4gPSAvXFwvYXBpXFwvY2l0eVxcL1teLz9dKy87XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2l0eVBheWxvYWQge1xuICAvKiogR2VvSlNPTiBQb2ludDogW2xuZywgbGF0XS4gKi9cbiAgbG9jYXRpb24/OiB7IGNvb3JkaW5hdGVzPzogW251bWJlciwgbnVtYmVyXSB9O1xuICBjaXR5Pzogc3RyaW5nO1xuICBhZG1pbl9uYW1lPzogc3RyaW5nO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgV2ViU29ja2V0IGZyYW1lcyAodGhlIG9uZXMgd2UgYWN0IG9uKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqIEEgY3J1aXNlciBhcHBlYXJlZCBvbiB0aGUgbWFwOyBjYXJyaWVzIHRoZWlyIGZ1bGwgcHJvZmlsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckpvaW5lZEZyYW1lIHtcbiAgZXZlbnROYW1lOiBcInVzZXJKb2luZWRcIjtcbiAgZGF0YTogRmlsdGVyYWJsZVByb2ZpbGU7XG59XG5cbi8qKiBBIGNydWlzZXIgY2hhbmdlZCBzb21ldGhpbmc7IGBkYXRhLmRhdGFgIGhvbGRzIG9ubHkgdGhlIGNoYW5nZWQgZmllbGRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVXBkYXRlZEZyYW1lIHtcbiAgZXZlbnROYW1lOiBcInVzZXJVcGRhdGVkXCI7XG4gIGRhdGE6IEZpbHRlcmFibGVQcm9maWxlO1xufVxuXG4vKiogUHJlc2VuY2UgY2hhbmdlczsgYGRhdGFgIGlzIHRoZSBiYXJlIHVzZXIgaWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcmVzZW5jZUZyYW1lIHtcbiAgZXZlbnROYW1lOiBcInVzZXJBd2FrZVwiIHwgXCJ1c2VyRGlzY29ubmVjdGVkXCIgfCBcInVzZXJSZW1vdmVkXCI7XG4gIGRhdGE6IHN0cmluZztcbn1cblxuLyoqIEEgbGl2ZSAxOjEgY2hhdCBtZXNzYWdlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXdNc2dGcmFtZSB7XG4gIGV2ZW50TmFtZTogXCJuZXdNc2dcIjtcbiAgZGF0YTogeyBtZXNzYWdlPzogTWVzc2FnZSB9O1xufVxuXG4vKiogU29tZW9uZSBzdGFydGVkIGEgbmV3IGNoYXQgdGhyZWFkIHdpdGggdGhlIHVzZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ld0NvbnZlcnNhdGlvbkZyYW1lIHtcbiAgZXZlbnROYW1lOiBcIm5ld0NvbnZlcnNhdGlvblwiO1xuICBkYXRhOiB7IHBhcnRpYWxVc2VyPzogRmlsdGVyYWJsZVByb2ZpbGUgfTtcbn1cblxuZXhwb3J0IHR5cGUgU25pZmZpZXNXc0ZyYW1lID1cbiAgfCBVc2VySm9pbmVkRnJhbWVcbiAgfCBVc2VyVXBkYXRlZEZyYW1lXG4gIHwgVXNlclByZXNlbmNlRnJhbWVcbiAgfCBOZXdNc2dGcmFtZVxuICB8IE5ld0NvbnZlcnNhdGlvbkZyYW1lO1xuIiwgImltcG9ydCB0eXBlIHsgQm90QmxvY2tTdGF0ZSB9IGZyb20gXCIuL2NvbnRyYWN0cy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4vbG9nLmpzXCI7XG5pbXBvcnQge1xuICBDTV9QRVJfSU5DSCxcbiAgSEVJR0hUX0xJTUlUUyxcbiAgTEJfUEVSX0tHLFxuICBXRUlHSFRfTElNSVRTLFxuICB0eXBlIEZpbHRlcmFibGVQcm9maWxlLFxuICB0eXBlIFNuaWZmaWVzR2VuZGVyLFxufSBmcm9tIFwiLi9zbmlmZmllcy1hcGkuanNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9maWxlRmlsdGVyUnVsZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaXNBY3RpdmU6ICgpID0+IGJvb2xlYW47XG4gIGhpZGVzOiAocHJvZmlsZTogRmlsdGVyYWJsZVByb2ZpbGUpID0+IGJvb2xlYW47XG4gIG1hcE9ubHk/OiBib29sZWFuO1xuICAvKiogU3dhbGxvdyBgdXNlckRpc2Nvbm5lY3RlZGAgLyBgdXNlclJlbW92ZWRgIGZyYW1lcyB3aGlsZSBhY3RpdmUgKi9cbiAga2VlcHNPbk1hcD86IGJvb2xlYW47XG4gIG9uRmlsdGVyZWQ/OiAoaWRzOiBzdHJpbmdbXSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9maWxlQ2hlY2tzIHtcbiAgaGlkZXNQcm9maWxlOiAocHJvZmlsZTogRmlsdGVyYWJsZVByb2ZpbGUpID0+IGJvb2xlYW47XG4gIGhpZGVzSWQ6IChpZDogc3RyaW5nKSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2ZpbGVNYXRjaGVyIGV4dGVuZHMgUHJvZmlsZUNoZWNrcyB7XG4gIGlzQWN0aXZlOiAoKSA9PiBib29sZWFuO1xuICBrZWVwc09uTWFwOiAoKSA9PiBib29sZWFuO1xuICBjaGF0OiBQcm9maWxlQ2hlY2tzO1xuICBzZXRTZWxmSWQ6IChpZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQXBwbGllcyBhIHBhcnRpYWwgYHVzZXJVcGRhdGVkYCBwcm9maWxlIHRvIHRoZSBsYXN0IGZ1bGwgb25lOiBvbmx5IGl0cyBjb25uZWN0IHRpbWUuICovXG4gIG5vdGVVcGRhdGU6IChwYXJ0aWFsOiBGaWx0ZXJhYmxlUHJvZmlsZSkgPT4gdm9pZDtcbiAgZmx1c2g6ICgpID0+IHsgcnVsZTogc3RyaW5nOyBpZHM6IHN0cmluZ1tdIH1bXTtcbn1cblxuY29uc3QgRVhQRUNURURfUFJPRklMRV9QQVRIUyA9IFtcbiAgXCJkYXRhLmNvbm5lY3RVcGRhdGVUaW1lXCIsXG4gIFwiZGF0YS5wcm9maWxlLmV4dGVuZGVkLnNleHVhbGl0eVwiLFxuICBcImRhdGEucHJvZmlsZS5leHRlbmRlZC5zdGF0cy5oZWlnaHRJbkNtXCIsXG4gIFwiZGF0YS5wcm9maWxlLmV4dGVuZGVkLnN0YXRzLndlaWdodEluS2dcIixcbl07XG5cbmNvbnN0IGhhc1BhdGggPSAocm9vdDogdW5rbm93biwgcGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGxldCBub2RlID0gcm9vdDtcbiAgZm9yIChjb25zdCBrZXkgb2YgcGF0aC5zcGxpdChcIi5cIikpIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09IFwib2JqZWN0XCIgfHwgbm9kZSA9PT0gbnVsbCB8fCAhKGtleSBpbiBub2RlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBub2RlID0gKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoXCJwcm9maWxlLWZpbHRlclwiKTtcbmNvbnN0IHJlcG9ydGVkR2FwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5jb25zdCB3YXJuSWZJbmNvbXBsZXRlID0gKHByb2ZpbGU6IEZpbHRlcmFibGVQcm9maWxlKTogdm9pZCA9PiB7XG4gIGZvciAoY29uc3QgcGF0aCBvZiBFWFBFQ1RFRF9QUk9GSUxFX1BBVEhTKSB7XG4gICAgaWYgKCFyZXBvcnRlZEdhcHMuaGFzKHBhdGgpICYmICFoYXNQYXRoKHByb2ZpbGUsIHBhdGgpKSB7XG4gICAgICByZXBvcnRlZEdhcHMuYWRkKHBhdGgpO1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIGBwcm9maWxlICR7cHJvZmlsZS5faWR9IGhhcyBubyAke3BhdGh9OyBTbmlmZmllcyBtYXkgaGF2ZSBjaGFuZ2VkIGl0cyBwcm9maWxlIGZvcm1hdGAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVByb2ZpbGVNYXRjaGVyID0gKHJ1bGVzOiByZWFkb25seSBQcm9maWxlRmlsdGVyUnVsZVtdKTogUHJvZmlsZU1hdGNoZXIgPT4ge1xuICBjb25zdCBzZWVuID0gbmV3IE1hcDxzdHJpbmcsIEZpbHRlcmFibGVQcm9maWxlPigpO1xuICBjb25zdCBoaWRkZW4gPSBuZXcgTWFwPFByb2ZpbGVGaWx0ZXJSdWxlLCBTZXQ8c3RyaW5nPj4oKTtcbiAgbGV0IHNlbGZJZCA9IFwiXCI7XG5cbiAgY29uc3QgaGlkZXMgPSAocHJvZmlsZTogRmlsdGVyYWJsZVByb2ZpbGUsIGluQ2hhdDogYm9vbGVhbik6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChwcm9maWxlLl9pZCA9PT0gc2VsZklkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHJ1bGUgPSBydWxlcy5maW5kKChyKSA9PiByLmlzQWN0aXZlKCkgJiYgIShpbkNoYXQgJiYgci5tYXBPbmx5KSAmJiByLmhpZGVzKHByb2ZpbGUpKTtcbiAgICBpZiAoIXJ1bGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFoaWRkZW4uaGFzKHJ1bGUpKSB7XG4gICAgICBoaWRkZW4uc2V0KHJ1bGUsIG5ldyBTZXQoKSk7XG4gICAgfVxuICAgIGhpZGRlbi5nZXQocnVsZSkhLmFkZChwcm9maWxlLl9pZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgY2hlY2tzID0gKGluQ2hhdDogYm9vbGVhbik6IFByb2ZpbGVDaGVja3MgPT4gKHtcbiAgICBoaWRlc1Byb2ZpbGU6IChwcm9maWxlKSA9PiB7XG4gICAgICBpZiAocHJvZmlsZS5kYXRhKSB7XG4gICAgICAgIHdhcm5JZkluY29tcGxldGUocHJvZmlsZSk7XG4gICAgICAgIHNlZW4uc2V0KHByb2ZpbGUuX2lkLCBwcm9maWxlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoaWRlcyhwcm9maWxlLCBpbkNoYXQpO1xuICAgIH0sXG4gICAgaGlkZXNJZDogKGlkKSA9PiBoaWRlcyhzZWVuLmdldChpZCkgPz8geyBfaWQ6IGlkIH0sIGluQ2hhdCksXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgaXNBY3RpdmU6ICgpID0+IHJ1bGVzLnNvbWUoKHIpID0+IHIuaXNBY3RpdmUoKSksXG4gICAga2VlcHNPbk1hcDogKCkgPT4gcnVsZXMuc29tZSgocikgPT4gci5rZWVwc09uTWFwICYmIHIuaXNBY3RpdmUoKSksXG4gICAgLi4uY2hlY2tzKGZhbHNlKSxcbiAgICBjaGF0OiBjaGVja3ModHJ1ZSksXG4gICAgc2V0U2VsZklkOiAoaWQpID0+IHtcbiAgICAgIHNlbGZJZCA9IGlkO1xuICAgIH0sXG4gICAgbm90ZVVwZGF0ZTogKHsgX2lkLCBkYXRhIH0pID0+IHtcbiAgICAgIGNvbnN0IGtub3duID0gc2Vlbi5nZXQoX2lkKTtcbiAgICAgIGlmIChrbm93bj8uZGF0YSAmJiBkYXRhPy5jb25uZWN0VXBkYXRlVGltZSkge1xuICAgICAgICBzZWVuLnNldChfaWQsIHtcbiAgICAgICAgICAuLi5rbm93bixcbiAgICAgICAgICBkYXRhOiB7IC4uLmtub3duLmRhdGEsIGNvbm5lY3RVcGRhdGVUaW1lOiBkYXRhLmNvbm5lY3RVcGRhdGVUaW1lIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZmx1c2g6ICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5oaWRkZW5dLm1hcCgoW3J1bGUsIGlkc10pID0+ICh7IHJ1bGUsIGlkczogWy4uLmlkc10gfSkpO1xuICAgICAgaGlkZGVuLmNsZWFyKCk7XG4gICAgICBmb3IgKGNvbnN0IHsgcnVsZSwgaWRzIH0gb2YgcmVzdWx0KSB7XG4gICAgICAgIHJ1bGUub25GaWx0ZXJlZD8uKGlkcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0Lm1hcCgoeyBydWxlLCBpZHMgfSkgPT4gKHsgcnVsZTogcnVsZS5uYW1lLCBpZHMgfSkpO1xuICAgIH0sXG4gIH07XG59O1xuXG4vLyBcdTI1MDBcdTI1MDAgUnVsZXMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCBjb25zdCBib3RCbG9ja1J1bGUgPSAoXG4gIGdldFN0YXRlOiAoKSA9PiBCb3RCbG9ja1N0YXRlLFxuICBvbkZpbHRlcmVkPzogKGlkczogc3RyaW5nW10pID0+IHZvaWQsXG4pOiBQcm9maWxlRmlsdGVyUnVsZSA9PiAoe1xuICBuYW1lOiBcImJvdC1ibG9ja1wiLFxuICBpc0FjdGl2ZTogKCkgPT4gZ2V0U3RhdGUoKS5lbmFibGVkICYmIGdldFN0YXRlKCkuYmxvY2tlZElkcy5zaXplID4gMCxcbiAgaGlkZXM6IChwcm9maWxlKSA9PiBnZXRTdGF0ZSgpLmJsb2NrZWRJZHMuaGFzKHByb2ZpbGUuX2lkKSxcbiAgb25GaWx0ZXJlZCxcbn0pO1xuXG5leHBvcnQgY29uc3QgR0VOREVSUyA9IFtcIm1hbGVcIiwgXCJmZW1hbGVcIiwgXCJub25iaW5hcnlcIiwgXCJ1bmRlZmluZWRcIl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBHZW5kZXIgPSAodHlwZW9mIEdFTkRFUlMpW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZGVyRmlsdGVyIHtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgLyoqIFRoZSBnZW5kZXJzIHRvIHNob3cgd2hpbGUgZW5hYmxlZC4gTmV2ZXIgZW1wdHkuICovXG4gIGdlbmRlcnM6IEdlbmRlcltdO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9HRU5ERVJfRklMVEVSOiBHZW5kZXJGaWx0ZXIgPSB7IGVuYWJsZWQ6IGZhbHNlLCBnZW5kZXJzOiBbLi4uR0VOREVSU10gfTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlR2VuZGVyRmlsdGVyID0gKHZhbHVlOiB1bmtub3duKTogR2VuZGVyRmlsdGVyID0+IHtcbiAgY29uc3QgcmF3ID0gKHZhbHVlID8/IHt9KSBhcyB7IGVuYWJsZWQ/OiB1bmtub3duOyBnZW5kZXJzPzogdW5rbm93biB9O1xuICBjb25zdCB7IGdlbmRlcnMgfSA9IHJhdztcbiAgY29uc3QgcGlja2VkID0gQXJyYXkuaXNBcnJheShnZW5kZXJzKSA/IEdFTkRFUlMuZmlsdGVyKChnKSA9PiBnZW5kZXJzLmluY2x1ZGVzKGcpKSA6IFtdO1xuICByZXR1cm4geyBlbmFibGVkOiByYXcuZW5hYmxlZCA9PT0gdHJ1ZSwgZ2VuZGVyczogcGlja2VkLmxlbmd0aCA+IDAgPyBwaWNrZWQgOiBbLi4uR0VOREVSU10gfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhbGxvd2VkR2VuZGVycyA9IChmaWx0ZXI6IEdlbmRlckZpbHRlcik6IHJlYWRvbmx5IEdlbmRlcltdID0+XG4gIGZpbHRlci5lbmFibGVkID8gZmlsdGVyLmdlbmRlcnMgOiBHRU5ERVJTO1xuXG5jb25zdCBXSVJFX0dFTkRFUlM6IFBhcnRpYWw8UmVjb3JkPEV4Y2x1ZGU8U25pZmZpZXNHZW5kZXIsIG51bGw+LCBHZW5kZXI+PiA9IHtcbiAgbWFuOiBcIm1hbGVcIixcbiAgd29tYW46IFwiZmVtYWxlXCIsXG4gIG5vbmJpbmFyeTogXCJub25iaW5hcnlcIixcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9maWxlR2VuZGVyID0gKHByb2ZpbGU6IEZpbHRlcmFibGVQcm9maWxlKTogR2VuZGVyIHwgbnVsbCA9PiB7XG4gIGlmICghcHJvZmlsZS5kYXRhKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmF3ID0gcHJvZmlsZS5kYXRhLnByb2ZpbGU/LmV4dGVuZGVkPy5zZXh1YWxpdHk/LmdlbmRlcjtcbiAgcmV0dXJuIChyYXcgJiYgV0lSRV9HRU5ERVJTW3Jhd10pIHx8IFwidW5kZWZpbmVkXCI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2VuZGVyUnVsZSA9IChnZXRGaWx0ZXI6ICgpID0+IEdlbmRlckZpbHRlcik6IFByb2ZpbGVGaWx0ZXJSdWxlID0+ICh7XG4gIG5hbWU6IFwiZ2VuZGVyXCIsXG4gIG1hcE9ubHk6IHRydWUsXG4gIGlzQWN0aXZlOiAoKSA9PiB7XG4gICAgY29uc3QgeyBlbmFibGVkLCBnZW5kZXJzIH0gPSBnZXRGaWx0ZXIoKTtcbiAgICByZXR1cm4gZW5hYmxlZCAmJiBnZW5kZXJzLmxlbmd0aCA+IDAgJiYgZ2VuZGVycy5sZW5ndGggPCBHRU5ERVJTLmxlbmd0aDtcbiAgfSxcbiAgaGlkZXM6IChwcm9maWxlKSA9PiB7XG4gICAgY29uc3QgZ2VuZGVyID0gcHJvZmlsZUdlbmRlcihwcm9maWxlKTtcbiAgICByZXR1cm4gZ2VuZGVyICE9PSBudWxsICYmICFnZXRGaWx0ZXIoKS5nZW5kZXJzLmluY2x1ZGVzKGdlbmRlcik7XG4gIH0sXG59KTtcblxuLy8gXHUyNTAwXHUyNTAwIEhlaWdodCAvIHdlaWdodCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGludGVyZmFjZSBSYW5nZUZpbHRlciB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIG1pbjogbnVtYmVyIHwgbnVsbDtcbiAgbWF4OiBudW1iZXIgfCBudWxsO1xuICBtZXRyaWM6IGJvb2xlYW47XG4gIC8qKiBBbHNvIHNob3cgcHJvZmlsZXMgdGhhdCBkb24ndCBsaXN0IHRoZSB2YWx1ZSBhdCBhbGwuICovXG4gIGluY2x1ZGVVbnNwZWNpZmllZDogYm9vbGVhbjtcbn1cblxuY29uc3QgcHJlZmVyc01ldHJpYyA9ICgpOiBib29sZWFuID0+XG4gIHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwidW5kZWZpbmVkXCIgfHwgIS8tKFVTfExSfE1NKSQvaS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk7XG5cbmNvbnN0IGRlZmF1bHRSYW5nZUZpbHRlciA9ICgpOiBSYW5nZUZpbHRlciA9PiAoe1xuICBlbmFibGVkOiBmYWxzZSxcbiAgbWluOiBudWxsLFxuICBtYXg6IG51bGwsXG4gIG1ldHJpYzogcHJlZmVyc01ldHJpYygpLFxuICBpbmNsdWRlVW5zcGVjaWZpZWQ6IGZhbHNlLFxufSk7XG5cbmNvbnN0IHBhcnNlUmFuZ2VGaWx0ZXIgPSAodmFsdWU6IHVua25vd24pOiBSYW5nZUZpbHRlciA9PiB7XG4gIGNvbnN0IHJhdyA9ICh2YWx1ZSA/PyB7fSkgYXMgUGFydGlhbDxSZWNvcmQ8a2V5b2YgUmFuZ2VGaWx0ZXIsIHVua25vd24+PjtcbiAgY29uc3QgYm91bmQgPSAodjogdW5rbm93bik6IG51bWJlciB8IG51bGwgPT4gKHR5cGVvZiB2ID09PSBcIm51bWJlclwiICYmIGlzRmluaXRlKHYpID8gdiA6IG51bGwpO1xuICByZXR1cm4ge1xuICAgIGVuYWJsZWQ6IHJhdy5lbmFibGVkID09PSB0cnVlLFxuICAgIG1pbjogYm91bmQocmF3Lm1pbiksXG4gICAgbWF4OiBib3VuZChyYXcubWF4KSxcbiAgICBtZXRyaWM6IHR5cGVvZiByYXcubWV0cmljID09PSBcImJvb2xlYW5cIiA/IHJhdy5tZXRyaWMgOiBwcmVmZXJzTWV0cmljKCksXG4gICAgaW5jbHVkZVVuc3BlY2lmaWVkOiByYXcuaW5jbHVkZVVuc3BlY2lmaWVkID09PSB0cnVlLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJhbmdlS2V5ID0gKGZpbHRlcjogUmFuZ2VGaWx0ZXIpOiBzdHJpbmcgPT5cbiAgZmlsdGVyLmVuYWJsZWQgJiYgKGZpbHRlci5taW4gIT09IG51bGwgfHwgZmlsdGVyLm1heCAhPT0gbnVsbClcbiAgICA/IGAke2ZpbHRlci5taW4gPz8gXCJcIn0tJHtmaWx0ZXIubWF4ID8/IFwiXCJ9JHtmaWx0ZXIuaW5jbHVkZVVuc3BlY2lmaWVkID8gXCIrdW5zcGVjaWZpZWRcIiA6IFwiXCJ9YFxuICAgIDogXCJcIjtcblxuZXhwb3J0IGNvbnN0IHJhbmdlUnVsZSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBnZXRGaWx0ZXI6ICgpID0+IFJhbmdlRmlsdGVyLFxuICByZWFkOiAocHJvZmlsZTogRmlsdGVyYWJsZVByb2ZpbGUpID0+IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBQcm9maWxlRmlsdGVyUnVsZSA9PiAoe1xuICBuYW1lLFxuICBtYXBPbmx5OiB0cnVlLFxuICBpc0FjdGl2ZTogKCkgPT4gcmFuZ2VLZXkoZ2V0RmlsdGVyKCkpICE9PSBcIlwiLFxuICBoaWRlczogKHByb2ZpbGUpID0+IHtcbiAgICBpZiAoIXByb2ZpbGUuZGF0YSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHJlYWQocHJvZmlsZSk7XG4gICAgY29uc3QgeyBtaW4sIG1heCwgaW5jbHVkZVVuc3BlY2lmaWVkIH0gPSBnZXRGaWx0ZXIoKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gIWluY2x1ZGVVbnNwZWNpZmllZDtcbiAgICB9XG4gICAgcmV0dXJuIChtaW4gIT09IG51bGwgJiYgdmFsdWUgPCBtaW4pIHx8IChtYXggIT09IG51bGwgJiYgdmFsdWUgPiBtYXgpO1xuICB9LFxufSk7XG5cbi8vIFx1MjUwMFx1MjUwMCBMYXN0IG9ubGluZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGludGVyZmFjZSBPbmxpbmVGaWx0ZXIge1xuICBlbmFibGVkOiBib29sZWFuO1xuICAvKiogU2VlbiB3aXRoaW4gdGhpcyBtYW55IG1pbnV0ZXMgb2Ygbm93LiAqL1xuICBtaW51dGVzOiBudW1iZXIgfCBudWxsO1xuICAvKiogV2hlbiB0aGUgbWVudSdzIERvbmUgbGFzdCBjb25maXJtZWQgdGhlIHBpY2s7IHRoZSBjdXRvZmYgbW92ZXMgdG8gdGhlbiBvbiB0aGUgbmV4dCByZWxvYWQuIE5vdCByZXN0b3JlZCBmcm9tIHN0b3JhZ2UuICovXG4gIHBpY2tlZEF0PzogbnVtYmVyO1xuICAvKiogU3RhdGljIG1vZGU6IHRoZSBmaXhlZCB0aW1lIHRvIGJlIHNlZW4gYWZ0ZXIsIGluc3RlYWQgb2YgYSBsb29rYmFjayB0aGF0IG1vdmVzIHdpdGggZWFjaCByZWxvYWQuICovXG4gIGN1dG9mZj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT05MSU5FX0ZJTFRFUjogT25saW5lRmlsdGVyID0geyBlbmFibGVkOiBmYWxzZSwgbWludXRlczogbnVsbCB9O1xuXG5leHBvcnQgY29uc3QgT05MSU5FX01JTlVURVMgPSBbMTUsIDMwLCA0NSwgNjAsIDkwLCAxODAsIDM2MCwgNzIwLCAxNDQwLCAyMTYwLCAyODgwXTtcblxuZXhwb3J0IGNvbnN0IG9ubGluZUxhYmVsID0gKG1pbnV0ZXM6IG51bWJlcik6IHN0cmluZyA9PlxuICBgPCAke21pbnV0ZXMgPCA2MCA/IGAke21pbnV0ZXN9IG1pbmAgOiBgJHttaW51dGVzIC8gNjB9IGhvdXIke21pbnV0ZXMgPT09IDYwID8gXCJcIiA6IFwic1wifWB9IGFnb2A7XG5cbmNvbnN0IHBhcnNlT25saW5lRmlsdGVyID0gKHZhbHVlOiB1bmtub3duKTogT25saW5lRmlsdGVyID0+IHtcbiAgY29uc3QgcmF3ID0gKHZhbHVlID8/IHt9KSBhcyB7IGVuYWJsZWQ/OiB1bmtub3duOyBtaW51dGVzPzogdW5rbm93bjsgY3V0b2ZmPzogdW5rbm93biB9O1xuICBjb25zdCBtaW51dGVzID0gT05MSU5FX01JTlVURVMuaW5jbHVkZXMocmF3Lm1pbnV0ZXMgYXMgbnVtYmVyKSA/IChyYXcubWludXRlcyBhcyBudW1iZXIpIDogbnVsbDtcbiAgY29uc3QgZmlsdGVyOiBPbmxpbmVGaWx0ZXIgPSB7IGVuYWJsZWQ6IHJhdy5lbmFibGVkID09PSB0cnVlICYmIG1pbnV0ZXMgIT09IG51bGwsIG1pbnV0ZXMgfTtcbiAgaWYgKG1pbnV0ZXMgIT09IG51bGwgJiYgdHlwZW9mIHJhdy5jdXRvZmYgPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUocmF3LmN1dG9mZikpIHtcbiAgICBmaWx0ZXIuY3V0b2ZmID0gcmF3LmN1dG9mZjtcbiAgfVxuICByZXR1cm4gZmlsdGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IG9ubGluZUtleSA9IChmaWx0ZXI6IE9ubGluZUZpbHRlcik6IHN0cmluZyA9PiB7XG4gIGlmICghZmlsdGVyLmVuYWJsZWQgfHwgZmlsdGVyLm1pbnV0ZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICByZXR1cm4gZmlsdGVyLmN1dG9mZiA9PT0gdW5kZWZpbmVkID8gU3RyaW5nKGZpbHRlci5taW51dGVzKSA6IGBzdGF0aWMke2ZpbHRlci5jdXRvZmZ9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBjbG9ja1RleHQgPSAodGltZTogbnVtYmVyLCBub3c6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGF0ID0gbmV3IERhdGUodGltZSk7XG4gIGNvbnN0IGNsb2NrID0gYXQudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLCB7IGhvdXI6IFwibnVtZXJpY1wiLCBtaW51dGU6IFwiMi1kaWdpdFwiIH0pLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG4gIGNvbnN0IGRheSA9XG4gICAgYXQudG9EYXRlU3RyaW5nKCkgPT09IG5ldyBEYXRlKG5vdykudG9EYXRlU3RyaW5nKClcbiAgICAgID8gXCJcIlxuICAgICAgOiBgJHthdC50b0xvY2FsZURhdGVTdHJpbmcoW10sIHsgd2Vla2RheTogXCJzaG9ydFwiIH0pfSBgO1xuICByZXR1cm4gYCR7ZGF5fSR7Y2xvY2t9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBvbmxpbmVTaW5jZUxhYmVsID0gKG1pbnV0ZXM6IG51bWJlciwgZnJvbTogbnVtYmVyKTogc3RyaW5nID0+XG4gIGBDcnVpc2VycyBvbmxpbmUgYWZ0ZXIgJHtjbG9ja1RleHQoZnJvbSAtIG1pbnV0ZXMgKiA2MF8wMDAsIGZyb20pfWA7XG5cbmV4cG9ydCBjb25zdCBvbmxpbmVSdWxlID0gKGdldEZpbHRlcjogKCkgPT4gT25saW5lRmlsdGVyKTogUHJvZmlsZUZpbHRlclJ1bGUgPT4ge1xuICBjb25zdCBsb2FkZWRBdCA9IERhdGUubm93KCk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJvbmxpbmVcIixcbiAgICBtYXBPbmx5OiB0cnVlLFxuICAgIGtlZXBzT25NYXA6IHRydWUsXG4gICAgaXNBY3RpdmU6ICgpID0+IG9ubGluZUtleShnZXRGaWx0ZXIoKSkgIT09IFwiXCIsXG4gICAgaGlkZXM6IChwcm9maWxlKSA9PiB7XG4gICAgICBpZiAoIXByb2ZpbGUuZGF0YSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBIG1pc3NpbmcgY29ubmVjdCB0aW1lIGlzIE5hTiwgaXQgd2Fzbid0IG9ubGluZSByZWNlbnRseS5cbiAgICAgIHJldHVybiAhKFxuICAgICAgICBEYXRlLnBhcnNlKHByb2ZpbGUuZGF0YS5jb25uZWN0VXBkYXRlVGltZSA/PyBcIlwiKSA+PVxuICAgICAgICAoZ2V0RmlsdGVyKCkuY3V0b2ZmID8/IGxvYWRlZEF0IC0gZ2V0RmlsdGVyKCkubWludXRlcyEgKiA2MF8wMDApXG4gICAgICApO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlQ2hvaWNlcyB7XG4gIHVuaXQ6IHN0cmluZztcbiAgY2hvaWNlczogeyB2YWx1ZTogbnVtYmVyOyBsYWJlbDogc3RyaW5nIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYW5nZU9wdGlvbnMge1xuICBpbXBlcmlhbDogUmFuZ2VDaG9pY2VzO1xuICBtZXRyaWM6IFJhbmdlQ2hvaWNlcztcbn1cblxuY29uc3Qgc3RlcHMgPSAobGltaXRzOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LCBzdGVwOiBudW1iZXIpOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgbiA9IGxpbWl0cy5taW47IG4gPD0gbGltaXRzLm1heDsgbiArPSBzdGVwKSB7XG4gICAgcmVzdWx0LnB1c2gobik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBIRUlHSFRfT1BUSU9OUzogUmFuZ2VPcHRpb25zID0ge1xuICBpbXBlcmlhbDoge1xuICAgIHVuaXQ6IFwiZnRcIixcbiAgICBjaG9pY2VzOiBzdGVwcyhIRUlHSFRfTElNSVRTLmluY2hlcywgMSkubWFwKChpbmNoZXMpID0+ICh7XG4gICAgICB2YWx1ZTogTWF0aC5yb3VuZChpbmNoZXMgKiBDTV9QRVJfSU5DSCksXG4gICAgICBsYWJlbDogYCR7TWF0aC5mbG9vcihpbmNoZXMgLyAxMil9JyR7aW5jaGVzICUgMTJ9XCJgLFxuICAgIH0pKSxcbiAgfSxcbiAgbWV0cmljOiB7XG4gICAgdW5pdDogXCJjbVwiLFxuICAgIGNob2ljZXM6IHN0ZXBzKEhFSUdIVF9MSU1JVFMuY20sIDEpLm1hcCgoY20pID0+ICh7IHZhbHVlOiBjbSwgbGFiZWw6IGAke2NtfWNtYCB9KSksXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgV0VJR0hUX09QVElPTlM6IFJhbmdlT3B0aW9ucyA9IHtcbiAgaW1wZXJpYWw6IHtcbiAgICB1bml0OiBcImxiXCIsXG4gICAgY2hvaWNlczogc3RlcHMoV0VJR0hUX0xJTUlUUy5sYiwgNSkubWFwKChsYikgPT4gKHtcbiAgICAgIHZhbHVlOiBNYXRoLnJvdW5kKGxiIC8gTEJfUEVSX0tHKSxcbiAgICAgIGxhYmVsOiBgJHtsYn1sYmAsXG4gICAgfSkpLFxuICB9LFxuICBtZXRyaWM6IHtcbiAgICB1bml0OiBcImtnXCIsXG4gICAgY2hvaWNlczogc3RlcHMoV0VJR0hUX0xJTUlUUy5rZywgNSkubWFwKChrZykgPT4gKHsgdmFsdWU6IGtnLCBsYWJlbDogYCR7a2d9a2dgIH0pKSxcbiAgfSxcbn07XG5cbnR5cGUgUmFuZ2VDaG9pY2UgPSBSYW5nZUNob2ljZXNbXCJjaG9pY2VzXCJdW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBuZWFyZXN0Q2hvaWNlID0gKGNob2ljZXM6IFJhbmdlQ2hvaWNlW10sIHZhbHVlOiBudW1iZXIpOiBSYW5nZUNob2ljZSA9PlxuICBjaG9pY2VzLnJlZHVjZSgoYSwgYikgPT4gKE1hdGguYWJzKGIudmFsdWUgLSB2YWx1ZSkgPCBNYXRoLmFicyhhLnZhbHVlIC0gdmFsdWUpID8gYiA6IGEpKTtcblxuZXhwb3J0IGNvbnN0IHJhbmdlTGFiZWwgPSAoZmlsdGVyOiBSYW5nZUZpbHRlciwgb3B0aW9uczogUmFuZ2VPcHRpb25zKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHsgY2hvaWNlcyB9ID0gZmlsdGVyLm1ldHJpYyA/IG9wdGlvbnMubWV0cmljIDogb3B0aW9ucy5pbXBlcmlhbDtcbiAgY29uc3QgbGFiZWwgPSAodmFsdWU6IG51bWJlcik6IHN0cmluZyA9PiBuZWFyZXN0Q2hvaWNlKGNob2ljZXMsIHZhbHVlKS5sYWJlbDtcbiAgaWYgKGZpbHRlci5taW4gIT09IG51bGwgJiYgZmlsdGVyLm1heCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBgJHtsYWJlbChmaWx0ZXIubWluKX0gLSAke2xhYmVsKGZpbHRlci5tYXgpfWA7XG4gIH1cbiAgaWYgKGZpbHRlci5taW4gIT09IG51bGwpIHtcbiAgICByZXR1cm4gYCR7bGFiZWwoZmlsdGVyLm1pbil9ICtgO1xuICB9XG4gIHJldHVybiBmaWx0ZXIubWF4ICE9PSBudWxsID8gYFVwIHRvICR7bGFiZWwoZmlsdGVyLm1heCl9YCA6IG51bGw7XG59O1xuXG4vLyBcdTI1MDBcdTI1MDAgQWxsIHRoZSBmaWx0ZXJzIHRoZSB1c2VyIHNldHMgZnJvbSBTbmlmZmllcyBmaWx0ZXIgbWVudSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGludGVyZmFjZSBQcm9maWxlRmlsdGVycyB7XG4gIGdlbmRlcjogR2VuZGVyRmlsdGVyO1xuICBoZWlnaHQ6IFJhbmdlRmlsdGVyO1xuICB3ZWlnaHQ6IFJhbmdlRmlsdGVyO1xuICBvbmxpbmU6IE9ubGluZUZpbHRlcjtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUFJPRklMRV9GSUxURVJTOiBQcm9maWxlRmlsdGVycyA9IHtcbiAgZ2VuZGVyOiBERUZBVUxUX0dFTkRFUl9GSUxURVIsXG4gIGhlaWdodDogZGVmYXVsdFJhbmdlRmlsdGVyKCksXG4gIHdlaWdodDogZGVmYXVsdFJhbmdlRmlsdGVyKCksXG4gIG9ubGluZTogREVGQVVMVF9PTkxJTkVfRklMVEVSLFxufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlUHJvZmlsZUZpbHRlcnMgPSAodmFsdWU6IHVua25vd24pOiBQcm9maWxlRmlsdGVycyA9PiB7XG4gIGNvbnN0IHJhdyA9ICh2YWx1ZSA/PyB7fSkgYXMgUGFydGlhbDxSZWNvcmQ8a2V5b2YgUHJvZmlsZUZpbHRlcnMsIHVua25vd24+PjtcbiAgcmV0dXJuIHtcbiAgICBnZW5kZXI6IHBhcnNlR2VuZGVyRmlsdGVyKHJhdy5nZW5kZXIpLFxuICAgIGhlaWdodDogcGFyc2VSYW5nZUZpbHRlcihyYXcuaGVpZ2h0KSxcbiAgICB3ZWlnaHQ6IHBhcnNlUmFuZ2VGaWx0ZXIocmF3LndlaWdodCksXG4gICAgb25saW5lOiBwYXJzZU9ubGluZUZpbHRlcihyYXcub25saW5lKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnYXRlUHJvZmlsZUZpbHRlcnMgPSAoZmlsdGVyczogUHJvZmlsZUZpbHRlcnMsIGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9maWxlRmlsdGVycyA9PlxuICBlbmFibGVkXG4gICAgPyBmaWx0ZXJzXG4gICAgOiB7XG4gICAgICAgIGdlbmRlcjogeyAuLi5maWx0ZXJzLmdlbmRlciwgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgICAgaGVpZ2h0OiB7IC4uLmZpbHRlcnMuaGVpZ2h0LCBlbmFibGVkOiBmYWxzZSB9LFxuICAgICAgICB3ZWlnaHQ6IHsgLi4uZmlsdGVycy53ZWlnaHQsIGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIG9ubGluZTogeyAuLi5maWx0ZXJzLm9ubGluZSwgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgIH07XG5cbmV4cG9ydCBjb25zdCBwcm9maWxlRmlsdGVyUnVsZXMgPSAoZ2V0RmlsdGVyczogKCkgPT4gUHJvZmlsZUZpbHRlcnMpOiBQcm9maWxlRmlsdGVyUnVsZVtdID0+IFtcbiAgZ2VuZGVyUnVsZSgoKSA9PiBnZXRGaWx0ZXJzKCkuZ2VuZGVyKSxcbiAgcmFuZ2VSdWxlKFxuICAgIFwiaGVpZ2h0XCIsXG4gICAgKCkgPT4gZ2V0RmlsdGVycygpLmhlaWdodCxcbiAgICAocHJvZmlsZSkgPT4gcHJvZmlsZS5kYXRhPy5wcm9maWxlPy5leHRlbmRlZD8uc3RhdHM/LmhlaWdodEluQ20sXG4gICksXG4gIHJhbmdlUnVsZShcbiAgICBcIndlaWdodFwiLFxuICAgICgpID0+IGdldEZpbHRlcnMoKS53ZWlnaHQsXG4gICAgKHByb2ZpbGUpID0+IHByb2ZpbGUuZGF0YT8ucHJvZmlsZT8uZXh0ZW5kZWQ/LnN0YXRzPy53ZWlnaHRJbktnLFxuICApLFxuICBvbmxpbmVSdWxlKCgpID0+IGdldEZpbHRlcnMoKS5vbmxpbmUpLFxuXTtcbiIsICJpbXBvcnQgdHlwZSB7IEJsb2NrZWRCb3REYWlseUxvZyB9IGZyb20gXCIuL2Jsb2NrZWQtYm90LWxvZy5qc1wiO1xuaW1wb3J0IHsgREVGQVVMVF9QUk9GSUxFX0ZJTFRFUlMsIHR5cGUgUHJvZmlsZUZpbHRlcnMgfSBmcm9tIFwiLi9wcm9maWxlLWZpbHRlci5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdlb092ZXJyaWRlIHtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgbG9uZ2l0dWRlOiBudW1iZXI7XG4gIGxhYmVsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9HRU9fT1ZFUlJJREU6IEdlb092ZXJyaWRlID0ge1xuICBlbmFibGVkOiBmYWxzZSxcbiAgbGF0aXR1ZGU6IDAsXG4gIGxvbmdpdHVkZTogMCxcbn07XG5cbi8qKiBUcnVlIG9uY2UgYSByZWFsIGxvY2F0aW9uIGhhcyBiZWVuIGNhcHR1cmVkIFx1MjAxNCAoMCwgMCkgaXMgdGhlIFwibm90aGluZyBwaWNrZWQgeWV0XCIgc2VudGluZWwuICovXG5leHBvcnQgY29uc3QgaGFzQ2FwdHVyZWRDb29yZHMgPSAob3ZlcnJpZGU6IEdlb092ZXJyaWRlKTogYm9vbGVhbiA9PlxuICBvdmVycmlkZS5sYXRpdHVkZSAhPT0gMCB8fCBvdmVycmlkZS5sb25naXR1ZGUgIT09IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZmlsZUJvcmRlck9wZW4ge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBvcGVuSW5OZXdUYWI6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BST0ZJTEVfQk9SREVSX09QRU46IFByb2ZpbGVCb3JkZXJPcGVuID0ge1xuICBlbmFibGVkOiBmYWxzZSxcbiAgb3BlbkluTmV3VGFiOiB0cnVlLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcmVtaXVtRmVhdHVyZUZsYWdzIHtcbiAgbG9jYXRpb246IGJvb2xlYW47XG4gIGJvdW5kYXJ5OiBib29sZWFuO1xuICBwaG90b3M6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BSRU1JVU1fRkVBVFVSRV9GTEFHUzogUHJlbWl1bUZlYXR1cmVGbGFncyA9IHtcbiAgbG9jYXRpb246IHRydWUsXG4gIGJvdW5kYXJ5OiB0cnVlLFxuICBwaG90b3M6IHRydWUsXG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VQcmVtaXVtRmVhdHVyZUZsYWdzID0gKHZhbHVlOiB1bmtub3duKTogUHJlbWl1bUZlYXR1cmVGbGFncyA9PiB7XG4gIGNvbnN0IHJhdyA9ICh2YWx1ZSA/PyB7fSkgYXMgUGFydGlhbDxSZWNvcmQ8a2V5b2YgUHJlbWl1bUZlYXR1cmVGbGFncywgdW5rbm93bj4+O1xuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uOiByYXcubG9jYXRpb24gIT09IGZhbHNlLFxuICAgIGJvdW5kYXJ5OiByYXcuYm91bmRhcnkgIT09IGZhbHNlLFxuICAgIHBob3RvczogcmF3LnBob3RvcyAhPT0gZmFsc2UsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgUEhPTkVfRTE2NF9SRUdFWCA9IC9eXFwrWzEtOV1cXGR7NiwxNH0kLztcblxuLy8gU25pZmZpZXMgdXNlciBpZHMgYXJlIDI0LWNoYXJhY3RlciBoZXggTW9uZ28gT2JqZWN0SWRzIChjb25maXJtZWQgdmlhIEhBUikuXG5leHBvcnQgY29uc3QgU05JRkZJRVNfVVNFUl9JRF9SRUdFWCA9IC9eW2EtZjAtOV17MjR9JC9pO1xuXG5leHBvcnQgY29uc3QgU0VUVElOR1NfS0VZUyA9IHtcbiAgZ3VpZDogXCJndWlkXCIsXG4gIHBob25lOiBcInBob25lXCIsXG4gIGdlb092ZXJyaWRlOiBcImdlb092ZXJyaWRlXCIsXG4gIHByb2ZpbGVCb3JkZXJPcGVuOiBcInByb2ZpbGVCb3JkZXJPcGVuXCIsXG4gIHByZW1pdW1TZWN0aW9uT3BlbjogXCJwcmVtaXVtU2VjdGlvbk9wZW5cIixcbiAgZmF2b3JpdGVzRW5hYmxlZDogXCJmYXZvcml0ZXNFbmFibGVkXCIsXG4gIGZhdm9yaXRlc1NlY3Rpb25PcGVuOiBcImZhdm9yaXRlc1NlY3Rpb25PcGVuXCIsXG4gIHNuaWZmaWVzVXNlcklkOiBcInNuaWZmaWVzVXNlcklkXCIsXG4gIGJsb2NrZWRCb3RzOiBcImJsb2NrZWRCb3RzXCIsXG4gIGJsb2NrZWRCb3RzRmV0Y2hlZEF0OiBcImJsb2NrZWRCb3RzRmV0Y2hlZEF0XCIsXG4gIGJvdEJsb2NraW5nRW5hYmxlZDogXCJib3RCbG9ja2luZ0VuYWJsZWRcIixcbiAgYm90QmxvY2tpbmdTZWN0aW9uT3BlbjogXCJib3RCbG9ja2luZ1NlY3Rpb25PcGVuXCIsXG4gIGJsb2NrZWRCb3RFdmVudHNCeURheTogXCJibG9ja2VkQm90RXZlbnRzQnlEYXlcIixcbiAgcHJvZmlsZUZpbHRlcnM6IFwicHJvZmlsZUZpbHRlcnNcIixcbiAgcHJvZmlsZUZpbHRlcnNFbmFibGVkOiBcInByb2ZpbGVGaWx0ZXJzRW5hYmxlZFwiLFxuICBwcm9maWxlRmlsdGVyc1NlY3Rpb25PcGVuOiBcInByb2ZpbGVGaWx0ZXJzU2VjdGlvbk9wZW5cIixcbiAgaGFzUGx1czogXCJoYXNQbHVzXCIsXG4gIHByZW1pdW1GZWF0dXJlc0VuYWJsZWQ6IFwicHJlbWl1bUZlYXR1cmVzRW5hYmxlZFwiLFxuICBwcmVtaXVtRmVhdHVyZUZsYWdzOiBcInByZW1pdW1GZWF0dXJlRmxhZ3NcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9uTG9jYWxTZXR0aW5ncyB7XG4gIGd1aWQ6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbiAgZ2VvT3ZlcnJpZGU6IEdlb092ZXJyaWRlO1xuICBwcm9maWxlQm9yZGVyT3BlbjogUHJvZmlsZUJvcmRlck9wZW47XG4gIHByZW1pdW1TZWN0aW9uT3BlbjogYm9vbGVhbjtcbiAgZmF2b3JpdGVzRW5hYmxlZDogYm9vbGVhbjtcbiAgZmF2b3JpdGVzU2VjdGlvbk9wZW46IGJvb2xlYW47XG4gIHNuaWZmaWVzVXNlcklkOiBzdHJpbmc7XG4gIGJsb2NrZWRCb3RzOiBzdHJpbmdbXTtcbiAgYmxvY2tlZEJvdHNGZXRjaGVkQXQ6IG51bWJlcjtcbiAgYm90QmxvY2tpbmdFbmFibGVkOiBib29sZWFuO1xuICBib3RCbG9ja2luZ1NlY3Rpb25PcGVuOiBib29sZWFuO1xuICBibG9ja2VkQm90RXZlbnRzQnlEYXk6IEJsb2NrZWRCb3REYWlseUxvZztcbiAgcHJvZmlsZUZpbHRlcnM6IFByb2ZpbGVGaWx0ZXJzO1xuICBwcm9maWxlRmlsdGVyc0VuYWJsZWQ6IGJvb2xlYW47XG4gIHByb2ZpbGVGaWx0ZXJzU2VjdGlvbk9wZW46IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBhY2NvdW50IGhhcyBTbmlmZmllcyBQbHVzOyBudWxsIHVudGlsIG9ic2VydmVkLiAqL1xuICBoYXNQbHVzOiBib29sZWFuIHwgbnVsbDtcbiAgcHJlbWl1bUZlYXR1cmVzRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJlbWl1bUZlYXR1cmVGbGFnczogUHJlbWl1bUZlYXR1cmVGbGFncztcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9DQUxfU0VUVElOR1M6IEV4dGVuc2lvbkxvY2FsU2V0dGluZ3MgPSB7XG4gIGd1aWQ6IFwiXCIsXG4gIHBob25lOiBcIlwiLFxuICBnZW9PdmVycmlkZTogREVGQVVMVF9HRU9fT1ZFUlJJREUsXG4gIHByb2ZpbGVCb3JkZXJPcGVuOiBERUZBVUxUX1BST0ZJTEVfQk9SREVSX09QRU4sXG4gIHByZW1pdW1TZWN0aW9uT3BlbjogZmFsc2UsXG4gIGZhdm9yaXRlc0VuYWJsZWQ6IGZhbHNlLFxuICBmYXZvcml0ZXNTZWN0aW9uT3BlbjogZmFsc2UsXG4gIHNuaWZmaWVzVXNlcklkOiBcIlwiLFxuICBibG9ja2VkQm90czogW10sXG4gIGJsb2NrZWRCb3RzRmV0Y2hlZEF0OiAwLFxuICBib3RCbG9ja2luZ0VuYWJsZWQ6IHRydWUsXG4gIGJvdEJsb2NraW5nU2VjdGlvbk9wZW46IGZhbHNlLFxuICBibG9ja2VkQm90RXZlbnRzQnlEYXk6IHt9LFxuICBwcm9maWxlRmlsdGVyczogREVGQVVMVF9QUk9GSUxFX0ZJTFRFUlMsXG4gIHByb2ZpbGVGaWx0ZXJzRW5hYmxlZDogZmFsc2UsXG4gIHByb2ZpbGVGaWx0ZXJzU2VjdGlvbk9wZW46IGZhbHNlLFxuICBoYXNQbHVzOiBudWxsLFxuICBwcmVtaXVtRmVhdHVyZXNFbmFibGVkOiB0cnVlLFxuICBwcmVtaXVtRmVhdHVyZUZsYWdzOiBERUZBVUxUX1BSRU1JVU1fRkVBVFVSRV9GTEFHUyxcbn07XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJlbWl1bUZlYXR1cmVzRW5hYmxlZCA9IChcbiAgc3RvcmVkOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBsZWdhY3lHZW9FbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBsZWdhY3lCb3JkZXJFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChzdG9yZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBzdG9yZWQ7XG4gIH1cbiAgaWYgKGxlZ2FjeUdlb0VuYWJsZWQgPT09IHVuZGVmaW5lZCAmJiBsZWdhY3lCb3JkZXJFbmFibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gREVGQVVMVF9MT0NBTF9TRVRUSU5HUy5wcmVtaXVtRmVhdHVyZXNFbmFibGVkO1xuICB9XG4gIHJldHVybiBsZWdhY3lHZW9FbmFibGVkID09PSB0cnVlIHx8IGxlZ2FjeUJvcmRlckVuYWJsZWQgPT09IHRydWU7XG59O1xuIiwgImltcG9ydCB0eXBlIHsgR2VvT3ZlcnJpZGUgfSBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgaGFzQ2FwdHVyZWRDb29yZHMgfSBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4vbG9nLmpzXCI7XG5cbnR5cGUgUGF0Y2hlZEdlbyA9IEdlb2xvY2F0aW9uICYgeyBfX3NuaWZmaWVzUGF0Y2hlZD86IGJvb2xlYW4gfTtcblxuZXhwb3J0IGludGVyZmFjZSBHZW9Ib29rUmVzdWx0IHtcbiAgbmF0aXZlR2V0Q3VycmVudFBvc2l0aW9uOiBHZW9sb2NhdGlvbltcImdldEN1cnJlbnRQb3NpdGlvblwiXTtcbiAgbmF0aXZlV2F0Y2hQb3NpdGlvbjogR2VvbG9jYXRpb25bXCJ3YXRjaFBvc2l0aW9uXCJdO1xuICByZWZyZXNoV2F0Y2hlczogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBXcmFwcyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24gdG8gaW50ZXJjZXB0IHBvc2l0aW9uIGNhbGxzLlxuICogQHBhcmFtIGdldE92ZXJyaWRlIENhbGxlZCBvbiBldmVyeSBwb3NpdGlvbiByZXF1ZXN0LiBSZXR1cm4gbnVsbCB0byBwYXNzIHRocm91Z2ggcmVhbCBjb29yZHNcbiAqIEBwYXJhbSBvblBvc2l0aW9uIE9wdGlvbmFsIGNhbGxiYWNrIGZpcmVkIHdpdGggdGhlIHJlYWwgY29vcmRzXG4gKiBAcmV0dXJucyBnZW8gbWV0aG9kc1xuICovXG5leHBvcnQgY29uc3QgaW5zdGFsbEdlb0hvb2sgPSAoXG4gIGdldE92ZXJyaWRlOiAoKSA9PiBHZW9PdmVycmlkZSB8IG51bGwsXG4gIG9uUG9zaXRpb24/OiAoY29vcmRzOiB7IGxhdGl0dWRlOiBudW1iZXI7IGxvbmdpdHVkZTogbnVtYmVyIH0pID0+IHZvaWQsXG4pOiBHZW9Ib29rUmVzdWx0IHwgbnVsbCA9PiB7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcihcImdlb1wiKTtcbiAgY29uc3QgZ2VvID0gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGFzIFBhdGNoZWRHZW8gfCB1bmRlZmluZWQ7XG4gIGlmICghZ2VvIHx8IGdlby5fX3NuaWZmaWVzUGF0Y2hlZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmF0aXZlR2V0Q3VycmVudFBvc2l0aW9uID0gZ2VvLmdldEN1cnJlbnRQb3NpdGlvbi5iaW5kKGdlbyk7XG4gIGNvbnN0IG5hdGl2ZVdhdGNoUG9zaXRpb24gPSBnZW8ud2F0Y2hQb3NpdGlvbi5iaW5kKGdlbyk7XG4gIGNvbnN0IG5hdGl2ZUNsZWFyV2F0Y2ggPSBnZW8uY2xlYXJXYXRjaC5iaW5kKGdlbyk7XG5cbiAgY29uc3QgYWN0aXZlV2F0Y2hlcnMgPSBuZXcgTWFwPG51bWJlciwgUG9zaXRpb25DYWxsYmFjaz4oKTtcblxuICBjb25zdCBhcHBseU92ZXJyaWRlID0gKHBvc2l0aW9uOiBHZW9sb2NhdGlvblBvc2l0aW9uKTogR2VvbG9jYXRpb25Qb3NpdGlvbiA9PiB7XG4gICAgY29uc3Qgb3YgPSBnZXRPdmVycmlkZSgpO1xuICAgIGlmICghb3Y/LmVuYWJsZWQgfHwgIWhhc0NhcHR1cmVkQ29vcmRzKG92KSkge1xuICAgICAgbG9nKFwib3ZlcnJpZGUgZGlzYWJsZWQgb3Igbm8gbG9jYXRpb24gY2FwdHVyZWQgeWV0LCBwYXNzaW5nIHJlYWwgY29vcmRzXCIsIHBvc2l0aW9uLmNvb3Jkcyk7XG4gICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfVxuICAgIGNvbnN0IHNwb29mZWQgPSB7XG4gICAgICBjb29yZHM6IHtcbiAgICAgICAgbGF0aXR1ZGU6IG92LmxhdGl0dWRlLFxuICAgICAgICBsb25naXR1ZGU6IG92LmxvbmdpdHVkZSxcbiAgICAgICAgYWNjdXJhY3k6IDEwLFxuICAgICAgICBhbHRpdHVkZTogbnVsbCxcbiAgICAgICAgYWx0aXR1ZGVBY2N1cmFjeTogbnVsbCxcbiAgICAgICAgaGVhZGluZzogbnVsbCxcbiAgICAgICAgc3BlZWQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIH0gYXMgR2VvbG9jYXRpb25Qb3NpdGlvbjtcbiAgICBsb2coXCJhcHBseWluZyBvdmVycmlkZVwiLCBzcG9vZmVkLmNvb3Jkcyk7XG4gICAgcmV0dXJuIHNwb29mZWQ7XG4gIH07XG5cbiAgY29uc3Qgd3JhcFN1Y2Nlc3MgPVxuICAgIChjYWxsYmFjazogUG9zaXRpb25DYWxsYmFjayk6IFBvc2l0aW9uQ2FsbGJhY2sgPT5cbiAgICAocG9zaXRpb24pID0+IHtcbiAgICAgIG9uUG9zaXRpb24/Lih7XG4gICAgICAgIGxhdGl0dWRlOiBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUsXG4gICAgICAgIGxvbmdpdHVkZTogcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSxcbiAgICAgIH0pO1xuICAgICAgY2FsbGJhY2soYXBwbHlPdmVycmlkZShwb3NpdGlvbikpO1xuICAgIH07XG5cbiAgY29uc3Qgd3JhcEVycm9yID1cbiAgICAoY2FsbGJhY2s6IFBvc2l0aW9uRXJyb3JDYWxsYmFjayB8IG51bGwgfCB1bmRlZmluZWQpOiBQb3NpdGlvbkVycm9yQ2FsbGJhY2sgPT5cbiAgICAoZXJyKSA9PiB7XG4gICAgICBsb2coXCJuYXRpdmUgZ2VvbG9jYXRpb24gY2FsbCBmYWlsZWRcIiwgeyBjb2RlOiBlcnIuY29kZSwgbWVzc2FnZTogZXJyLm1lc3NhZ2UgfSk7XG4gICAgICBjYWxsYmFjaz8uKGVycik7XG4gICAgfTtcblxuICBnZW8uZ2V0Q3VycmVudFBvc2l0aW9uID0gKHN1Y2Nlc3MsIGVycm9yLCBvcHRpb25zKSA9PiB7XG4gICAgbG9nKFwiZ2V0Q3VycmVudFBvc2l0aW9uIGludGVyY2VwdGVkXCIpO1xuICAgIG5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbih3cmFwU3VjY2VzcyhzdWNjZXNzKSwgd3JhcEVycm9yKGVycm9yKSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgZ2VvLndhdGNoUG9zaXRpb24gPSAoc3VjY2VzcywgZXJyb3IsIG9wdGlvbnMpID0+IHtcbiAgICBsb2coXCJ3YXRjaFBvc2l0aW9uIGludGVyY2VwdGVkXCIpO1xuICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwU3VjY2VzcyhzdWNjZXNzKTtcbiAgICBjb25zdCBpZCA9IG5hdGl2ZVdhdGNoUG9zaXRpb24od3JhcHBlZCwgd3JhcEVycm9yKGVycm9yKSwgb3B0aW9ucyk7XG4gICAgYWN0aXZlV2F0Y2hlcnMuc2V0KGlkLCB3cmFwcGVkKTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG5cbiAgZ2VvLmNsZWFyV2F0Y2ggPSAoaWQpID0+IHtcbiAgICBhY3RpdmVXYXRjaGVycy5kZWxldGUoaWQpO1xuICAgIG5hdGl2ZUNsZWFyV2F0Y2goaWQpO1xuICB9O1xuXG4gIGNvbnN0IHJlZnJlc2hXYXRjaGVzID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmIChhY3RpdmVXYXRjaGVycy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbihcbiAgICAgIChwb3MpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjYiBvZiBhY3RpdmVXYXRjaGVycy52YWx1ZXMoKSkge1xuICAgICAgICAgIGNiKHBvcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7IG1heGltdW1BZ2U6IDAgfSxcbiAgICApO1xuICB9O1xuXG4gIGdlby5fX3NuaWZmaWVzUGF0Y2hlZCA9IHRydWU7XG5cbiAgcmV0dXJuIHsgbmF0aXZlR2V0Q3VycmVudFBvc2l0aW9uLCBuYXRpdmVXYXRjaFBvc2l0aW9uLCByZWZyZXNoV2F0Y2hlcyB9O1xufTtcbiIsICJpbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi9sb2cuanNcIjtcbmltcG9ydCB7IFdTX0hPU1QsIFdTX1VTRVJfSURfUEFSQU0gfSBmcm9tIFwiLi9zbmlmZmllcy1hcGkuanNcIjtcblxudHlwZSBQYXRjaGVkV2ViU29ja2V0Q3RvciA9IHR5cGVvZiBXZWJTb2NrZXQgJiB7IF9fc25pZmZpZXNVc2VySWRQYXRjaGVkPzogYm9vbGVhbiB9O1xuXG5jb25zdCBleHRyYWN0VXNlcklkID0gKHVybDogc3RyaW5nIHwgVVJMKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwsIHR5cGVvZiBsb2NhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIiA/IGxvY2F0aW9uLmhyZWYgOiB1bmRlZmluZWQpO1xuICAgIGlmIChwYXJzZWQuaG9zdCAhPT0gV1NfSE9TVCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWQuc2VhcmNoUGFyYW1zLmdldChXU19VU0VSX0lEX1BBUkFNKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcHMgdGhlIGdsb2JhbCBXZWJTb2NrZXQgY29uc3RydWN0b3IgdG8gcmVhZCB0aGUgYHVzZXJJZGAgcXVlcnkgcGFyYW0gb2ZmXG4gKiBjb25uZWN0aW9ucyB0byBwcm9kLndzLnNuaWZmaWVzLmNvbVxuICpcbiAqIEByZXR1cm5zIGZhbHNlIGlmIFdlYlNvY2tldCBpcyB1bmF2YWlsYWJsZSBvciBhbHJlYWR5IHBhdGNoZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnN0YWxsVXNlcklkSG9vayA9IChvblVzZXJJZDogKHVzZXJJZDogc3RyaW5nKSA9PiB2b2lkKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcihcInVzZXItaWRcIik7XG4gIGNvbnN0IE5hdGl2ZVdlYlNvY2tldCA9ICh0eXBlb2YgV2ViU29ja2V0ICE9PSBcInVuZGVmaW5lZFwiID8gV2ViU29ja2V0IDogdW5kZWZpbmVkKSBhc1xuICAgIHwgUGF0Y2hlZFdlYlNvY2tldEN0b3JcbiAgICB8IHVuZGVmaW5lZDtcbiAgaWYgKCFOYXRpdmVXZWJTb2NrZXQgfHwgTmF0aXZlV2ViU29ja2V0Ll9fc25pZmZpZXNVc2VySWRQYXRjaGVkKSB7XG4gICAgbG9nKFwiaG9vayBub3QgaW5zdGFsbGVkIChubyBXZWJTb2NrZXQgb3IgYWxyZWFkeSBwYXRjaGVkKVwiKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBQYXRjaGVkV2ViU29ja2V0ID0gZnVuY3Rpb24gKFxuICAgIHRoaXM6IFdlYlNvY2tldCxcbiAgICB1cmw6IHN0cmluZyB8IFVSTCxcbiAgICBwcm90b2NvbHM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgKTogV2ViU29ja2V0IHtcbiAgICBjb25zdCB1c2VySWQgPSBleHRyYWN0VXNlcklkKHVybCk7XG4gICAgaWYgKHVzZXJJZCkge1xuICAgICAgbG9nKFwib2JzZXJ2ZWQgdXNlcklkIG9uIFdlYlNvY2tldCBjb25uZWN0XCIsIHVzZXJJZCk7XG4gICAgICBvblVzZXJJZCh1c2VySWQpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvdG9jb2xzID09PSB1bmRlZmluZWQgPyBuZXcgTmF0aXZlV2ViU29ja2V0KHVybCkgOiBuZXcgTmF0aXZlV2ViU29ja2V0KHVybCwgcHJvdG9jb2xzKTtcbiAgfSBhcyB1bmtub3duIGFzIFBhdGNoZWRXZWJTb2NrZXRDdG9yO1xuXG4gIFBhdGNoZWRXZWJTb2NrZXQucHJvdG90eXBlID0gTmF0aXZlV2ViU29ja2V0LnByb3RvdHlwZTtcbiAgKFBhdGNoZWRXZWJTb2NrZXQgYXMgdW5rbm93biBhcyB7IENPTk5FQ1RJTkc6IG51bWJlciB9KS5DT05ORUNUSU5HID0gTmF0aXZlV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG4gIChQYXRjaGVkV2ViU29ja2V0IGFzIHVua25vd24gYXMgeyBPUEVOOiBudW1iZXIgfSkuT1BFTiA9IE5hdGl2ZVdlYlNvY2tldC5PUEVOO1xuICAoUGF0Y2hlZFdlYlNvY2tldCBhcyB1bmtub3duIGFzIHsgQ0xPU0lORzogbnVtYmVyIH0pLkNMT1NJTkcgPSBOYXRpdmVXZWJTb2NrZXQuQ0xPU0lORztcbiAgKFBhdGNoZWRXZWJTb2NrZXQgYXMgdW5rbm93biBhcyB7IENMT1NFRDogbnVtYmVyIH0pLkNMT1NFRCA9IE5hdGl2ZVdlYlNvY2tldC5DTE9TRUQ7XG4gIFBhdGNoZWRXZWJTb2NrZXQuX19zbmlmZmllc1VzZXJJZFBhdGNoZWQgPSB0cnVlO1xuXG4gIHdpbmRvdy5XZWJTb2NrZXQgPSBQYXRjaGVkV2ViU29ja2V0O1xuICBsb2coXCJob29rIGluc3RhbGxlZFwiKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuIiwgImltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgdHlwZSBMb2dnZXIgfSBmcm9tIFwiLi9sb2cuanNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2ZpbGVNYXRjaGVyLFxuICB0eXBlIFByb2ZpbGVDaGVja3MsXG4gIHR5cGUgUHJvZmlsZUZpbHRlclJ1bGUsXG4gIHR5cGUgUHJvZmlsZU1hdGNoZXIsXG59IGZyb20gXCIuL3Byb2ZpbGUtZmlsdGVyLmpzXCI7XG5pbXBvcnQge1xuICBDSEFUX0RBVEFfUEFUSCxcbiAgTUVTU0FHRVNfUEFUSCxcbiAgUE9TVF9BVVRIX1BBVEgsXG4gIFNPRlRfUkVMT0FEX1BBVEgsXG4gIFdTX0hPU1QsXG4gIFdTX1VTRVJfSURfUEFSQU0sXG4gIGlzU25pZmZpZXNBcGlIb3N0LFxuICB0eXBlIENoYXREYXRhUGF5bG9hZCxcbiAgdHlwZSBDb252ZXJzYXRpb24sXG4gIHR5cGUgRmlsdGVyYWJsZVByb2ZpbGUsXG4gIHR5cGUgTWVzc2FnZXNQYXlsb2FkLFxuICB0eXBlIE5lYXJieVZpc2l0b3JzUGF5bG9hZCxcbiAgdHlwZSBOZXdDb252ZXJzYXRpb25GcmFtZSxcbiAgdHlwZSBOZXdNc2dGcmFtZSxcbn0gZnJvbSBcIi4vc25pZmZpZXMtYXBpLmpzXCI7XG5cbnR5cGUgRmlsdGVyS2luZCA9IFwicG9zdC1hdXRoZW50aWNhdGlvblwiIHwgXCJzb2Z0LXJlbG9hZFwiIHwgXCJjaGF0LWRhdGFcIiB8IFwibWVzc2FnZXNcIjtcblxuY29uc3Qgc2hhcGVMb2cgPSBjcmVhdGVMb2dnZXIoXCJwcm9maWxlLWZpbHRlclwiKTtcbmNvbnN0IHJlcG9ydGVkU2hhcGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbi8qKiBXYXJucywgb25jZSBwZXIgcGFnZSBsb2FkLCB0aGF0IGEgcGF5bG9hZCBsYWNrcyBzb21ldGhpbmcgdGhlIGZpbHRlcnMgcmVhZC4gKi9cbmNvbnN0IGV4cGVjdFNoYXBlID0gKG9rOiBib29sZWFuLCB3aGF0OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgaWYgKCFvayAmJiAhcmVwb3J0ZWRTaGFwZXMuaGFzKHdoYXQpKSB7XG4gICAgcmVwb3J0ZWRTaGFwZXMuYWRkKHdoYXQpO1xuICAgIHNoYXBlTG9nLndhcm4oYCR7d2hhdH07IFNuaWZmaWVzIG1heSBoYXZlIGNoYW5nZWQgaXRzIEFQSWApO1xuICB9XG59O1xuXG5jb25zdCBmaWx0ZXJQcm9maWxlcyA9IChcbiAgaXRlbXM6IEZpbHRlcmFibGVQcm9maWxlW10gfCB1bmRlZmluZWQsXG4gIGNoZWNrczogUHJvZmlsZUNoZWNrcyxcbik6IEZpbHRlcmFibGVQcm9maWxlW10gfCB1bmRlZmluZWQgPT4gaXRlbXM/LmZpbHRlcigoaXRlbSkgPT4gIWNoZWNrcy5oaWRlc1Byb2ZpbGUoaXRlbSkpO1xuXG4vKiogUmVtb3ZlcyBoaWRkZW4gYWNjb3VudHMgZnJvbSB0aGUgbWFwIGluaXQgKi9cbmV4cG9ydCBjb25zdCBmaWx0ZXJQb3N0QXV0aGVudGljYXRpb25QYXlsb2FkID0gKFxuICBwYXlsb2FkOiBOZWFyYnlWaXNpdG9yc1BheWxvYWQsXG4gIG1hdGNoZXI6IFByb2ZpbGVNYXRjaGVyLFxuKTogTmVhcmJ5VmlzaXRvcnNQYXlsb2FkID0+IHtcbiAgZXhwZWN0U2hhcGUoXG4gICAgQXJyYXkuaXNBcnJheShwYXlsb2FkLm5lYXJieVZpc2l0b3JzPy52aXNpdG9ycyksXG4gICAgXCJtYXAgaW5pdCBoYXMgbm8gbmVhcmJ5VmlzaXRvcnMudmlzaXRvcnMgbGlzdFwiLFxuICApO1xuICBleHBlY3RTaGFwZShBcnJheS5pc0FycmF5KHBheWxvYWQucGFydGlhbFZpc2l0b3JEYXRhKSwgXCJtYXAgaW5pdCBoYXMgbm8gcGFydGlhbFZpc2l0b3JEYXRhIGxpc3RcIik7XG4gIGlmIChwYXlsb2FkLm5lYXJieVZpc2l0b3JzPy52aXNpdG9ycykge1xuICAgIHBheWxvYWQubmVhcmJ5VmlzaXRvcnMudmlzaXRvcnMgPSBmaWx0ZXJQcm9maWxlcyhwYXlsb2FkLm5lYXJieVZpc2l0b3JzLnZpc2l0b3JzLCBtYXRjaGVyKTtcbiAgfVxuICAvLyBUaGUgcHJvZmlsZSBjYXJkcyBiZWhpbmQgdGhlIGNoYXQgbGlzdCwgbm90IG1hcCBtYXJrZXJzLlxuICBpZiAocGF5bG9hZC5wYXJ0aWFsVmlzaXRvckRhdGEpIHtcbiAgICBwYXlsb2FkLnBhcnRpYWxWaXNpdG9yRGF0YSA9IGZpbHRlclByb2ZpbGVzKHBheWxvYWQucGFydGlhbFZpc2l0b3JEYXRhLCBtYXRjaGVyLmNoYXQpO1xuICB9XG4gIHJldHVybiBwYXlsb2FkO1xufTtcblxuLyoqIFRoZSBmYXJ0aGVzdCB0d28gcG9pbnRzIG9uIEVhcnRoIGNhbiBiZSBhcGFydCwgc28gZXZlcnkgcHJvZmlsZSBjb3VudHMgYXMgaW5zaWRlIHRoZSByYWRpdXMuICovXG5jb25zdCBBTlRJUE9ERV9NSUxFUyA9IDEyNTAwO1xuXG5leHBvcnQgY29uc3QgcmFpc2VSYWRpdXNJblBheWxvYWQgPSAocGF5bG9hZDogTmVhcmJ5VmlzaXRvcnNQYXlsb2FkKTogTmVhcmJ5VmlzaXRvcnNQYXlsb2FkID0+IHtcbiAgY29uc3QgbmVhcmJ5ID0gcGF5bG9hZC5uZWFyYnlWaXNpdG9ycztcbiAgZXhwZWN0U2hhcGUoXG4gICAgdHlwZW9mIG5lYXJieT8uZW1pdFJhZGl1c0luTWlsZXMgPT09IFwibnVtYmVyXCIsXG4gICAgXCJtYXAgcGF5bG9hZCBoYXMgbm8gbmVhcmJ5VmlzaXRvcnMuZW1pdFJhZGl1c0luTWlsZXNcIixcbiAgKTtcbiAgaWYgKG5lYXJieSAmJiB0eXBlb2YgbmVhcmJ5LmVtaXRSYWRpdXNJbk1pbGVzID09PSBcIm51bWJlclwiKSB7XG4gICAgbmVhcmJ5LmVtaXRSYWRpdXNJbk1pbGVzID0gTWF0aC5tYXgobmVhcmJ5LmVtaXRSYWRpdXNJbk1pbGVzLCBBTlRJUE9ERV9NSUxFUyk7XG4gIH1cbiAgcmV0dXJuIHBheWxvYWQ7XG59O1xuXG4vKiogUmVtb3ZlcyBoaWRkZW4gYWNjb3VudHMgZnJvbSB0aGUgY2hhdCBpbml0IHBheWxvYWQncyBjb252ZXJzYXRpb24gbGlzdHMuICovXG5leHBvcnQgY29uc3QgZmlsdGVyQ2hhdERhdGFQYXlsb2FkID0gKFxuICBwYXlsb2FkOiBDaGF0RGF0YVBheWxvYWQsXG4gIHsgY2hhdCB9OiBQcm9maWxlTWF0Y2hlcixcbik6IENoYXREYXRhUGF5bG9hZCA9PiB7XG4gIGV4cGVjdFNoYXBlKFxuICAgIEFycmF5LmlzQXJyYXkocGF5bG9hZC5jb252ZXJzYXRpb25EYXRhPy5jb252ZXJzYXRpb25zKSAmJlxuICAgICAgQXJyYXkuaXNBcnJheShwYXlsb2FkLmNvbnZlcnNhdGlvbkRhdGE/LnVzZXJJZHMpLFxuICAgIFwiY2hhdCBpbml0IGhhcyBubyBjb252ZXJzYXRpb25EYXRhLmNvbnZlcnNhdGlvbnMgLyB1c2VySWRzIGxpc3RcIixcbiAgKTtcbiAgZXhwZWN0U2hhcGUoXG4gICAgQXJyYXkuaXNBcnJheShwYXlsb2FkLnBhcnRpYWxWaXNpdG9yRGF0YSksXG4gICAgXCJjaGF0IGluaXQgaGFzIG5vIHBhcnRpYWxWaXNpdG9yRGF0YSBsaXN0XCIsXG4gICk7XG4gIGlmIChwYXlsb2FkLnBhcnRpYWxWaXNpdG9yRGF0YSkge1xuICAgIHBheWxvYWQucGFydGlhbFZpc2l0b3JEYXRhID0gZmlsdGVyUHJvZmlsZXMocGF5bG9hZC5wYXJ0aWFsVmlzaXRvckRhdGEsIGNoYXQpO1xuICB9XG4gIGNvbnN0IGlzSGlkZGVuQ29udmVyc2F0aW9uID0gKGM6IENvbnZlcnNhdGlvbik6IGJvb2xlYW4gPT4ge1xuICAgIGxldCBoaWRkZW4gPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIFtjLnBhcnRpY2lwYW50cywgYy5hdXRob3IxLCBjLmF1dGhvcjJdKSB7XG4gICAgICBpZiAoaWQgJiYgY2hhdC5oaWRlc0lkKGlkKSkge1xuICAgICAgICBoaWRkZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGlkZGVuO1xuICB9O1xuXG4gIGlmIChwYXlsb2FkLmNvbnZlcnNhdGlvbkRhdGE/LmNvbnZlcnNhdGlvbnMpIHtcbiAgICBwYXlsb2FkLmNvbnZlcnNhdGlvbkRhdGEuY29udmVyc2F0aW9ucyA9IHBheWxvYWQuY29udmVyc2F0aW9uRGF0YS5jb252ZXJzYXRpb25zLmZpbHRlcihcbiAgICAgIChjKSA9PiAhaXNIaWRkZW5Db252ZXJzYXRpb24oYyksXG4gICAgKTtcbiAgfVxuICBpZiAocGF5bG9hZC5jb252ZXJzYXRpb25EYXRhPy51c2VySWRzKSB7XG4gICAgcGF5bG9hZC5jb252ZXJzYXRpb25EYXRhLnVzZXJJZHMgPSBwYXlsb2FkLmNvbnZlcnNhdGlvbkRhdGEudXNlcklkcy5maWx0ZXIoXG4gICAgICAoaWQpID0+ICFjaGF0LmhpZGVzSWQoaWQpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHBheWxvYWQ7XG59O1xuXG4vKiogUmVtb3ZlcyBhIGhpZGRlbiBhY2NvdW50J3MgbWVzc2FnZXMgKGFuZCBwcm9maWxlIGNhcmQpIGZyb20gYW4gb3BlbmVkIGNoYXQgdGhyZWFkLiAqL1xuZXhwb3J0IGNvbnN0IGZpbHRlck1lc3NhZ2VzUGF5bG9hZCA9IChcbiAgcGF5bG9hZDogTWVzc2FnZXNQYXlsb2FkLFxuICB7IGNoYXQgfTogUHJvZmlsZU1hdGNoZXIsXG4pOiBNZXNzYWdlc1BheWxvYWQgPT4ge1xuICBleHBlY3RTaGFwZShBcnJheS5pc0FycmF5KHBheWxvYWQubWVzc2FnZXMpLCBcImNoYXQgdGhyZWFkIGhhcyBubyBtZXNzYWdlcyBsaXN0XCIpO1xuICBleHBlY3RTaGFwZShBcnJheS5pc0FycmF5KHBheWxvYWQucGFydGlhbFVzZXJzKSwgXCJjaGF0IHRocmVhZCBoYXMgbm8gcGFydGlhbFVzZXJzIGxpc3RcIik7XG4gIGlmIChwYXlsb2FkLnBhcnRpYWxVc2Vycykge1xuICAgIHBheWxvYWQucGFydGlhbFVzZXJzID0gZmlsdGVyUHJvZmlsZXMocGF5bG9hZC5wYXJ0aWFsVXNlcnMsIGNoYXQpO1xuICB9XG4gIGlmIChwYXlsb2FkLm1lc3NhZ2VzKSB7XG4gICAgcGF5bG9hZC5tZXNzYWdlcyA9IHBheWxvYWQubWVzc2FnZXMuZmlsdGVyKChtKSA9PiAhKG0uYXV0aG9yICYmIGNoYXQuaGlkZXNJZChtLmF1dGhvcikpKTtcbiAgfVxuICByZXR1cm4gcGF5bG9hZDtcbn07XG5cbmNvbnN0IGFwcGx5RmlsdGVyID0gKGtpbmQ6IEZpbHRlcktpbmQsIHBheWxvYWQ6IHVua25vd24sIG1hdGNoZXI6IFByb2ZpbGVNYXRjaGVyKTogdW5rbm93biA9PiB7XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgXCJwb3N0LWF1dGhlbnRpY2F0aW9uXCI6XG4gICAgY2FzZSBcInNvZnQtcmVsb2FkXCI6XG4gICAgICByZXR1cm4gZmlsdGVyUG9zdEF1dGhlbnRpY2F0aW9uUGF5bG9hZChwYXlsb2FkIGFzIE5lYXJieVZpc2l0b3JzUGF5bG9hZCwgbWF0Y2hlcik7XG4gICAgY2FzZSBcImNoYXQtZGF0YVwiOlxuICAgICAgcmV0dXJuIGZpbHRlckNoYXREYXRhUGF5bG9hZChwYXlsb2FkIGFzIENoYXREYXRhUGF5bG9hZCwgbWF0Y2hlcik7XG4gICAgY2FzZSBcIm1lc3NhZ2VzXCI6XG4gICAgICByZXR1cm4gZmlsdGVyTWVzc2FnZXNQYXlsb2FkKHBheWxvYWQgYXMgTWVzc2FnZXNQYXlsb2FkLCBtYXRjaGVyKTtcbiAgfVxufTtcblxuaW50ZXJmYWNlIFdzRnJhbWVJbmZvIHtcbiAgZXZlbnROYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgYWNjb3VudCB0aGUgZnJhbWUgaXMgYWJvdXQ6IGEgcHJvZmlsZSB3aGVuIHRoZSBmcmFtZSBjYXJyaWVzIG9uZSwgZWxzZSBhIGJhcmUgaWQuICovXG4gIHN1YmplY3Q6IEZpbHRlcmFibGVQcm9maWxlIHwgc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBwYXJ0aWFsIHByb2ZpbGUgYSBgdXNlclVwZGF0ZWRgIGZyYW1lIGNhcnJpZXMuICovXG4gIHVwZGF0ZT86IEZpbHRlcmFibGVQcm9maWxlO1xuICAvKiogQSBjaGF0IGV2ZW50IHJhdGhlciB0aGFuIHNvbWVvbmUncyBwcmVzZW5jZSBvbiB0aGUgbWFwLiAqL1xuICBjaGF0PzogYm9vbGVhbjtcbn1cblxuY29uc3QgYXNQcm9maWxlID0gKHZhbHVlOiB1bmtub3duKTogRmlsdGVyYWJsZVByb2ZpbGUgfCBudWxsID0+XG4gIHR5cGVvZiAodmFsdWUgYXMgeyBfaWQ/OiB1bmtub3duIH0gfCB1bmRlZmluZWQpPy5faWQgPT09IFwic3RyaW5nXCJcbiAgICA/ICh2YWx1ZSBhcyBGaWx0ZXJhYmxlUHJvZmlsZSlcbiAgICA6IG51bGw7XG5cbi8qKiBQdWxscyB0aGUgZXZlbnQgbmFtZSArIHN1YmplY3QgYWNjb3VudCAoaWYgYW55KSBvdXQgb2YgYSByYXcgV1MgZnJhbWUuICovXG5jb25zdCBwYXJzZVdzRnJhbWUgPSAocmF3OiBzdHJpbmcpOiBXc0ZyYW1lSW5mbyB8IG51bGwgPT4ge1xuICBsZXQgb2JqOiB7IGV2ZW50TmFtZT86IHVua25vd247IGRhdGE/OiB1bmtub3duIH07XG4gIHRyeSB7XG4gICAgb2JqID0gSlNPTi5wYXJzZShyYXcpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIG9iai5ldmVudE5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAob2JqLmV2ZW50TmFtZSA9PT0gXCJ1c2VySm9pbmVkXCIpIHtcbiAgICBjb25zdCBqb2luZWQgPSBhc1Byb2ZpbGUob2JqLmRhdGEpO1xuICAgIGV4cGVjdFNoYXBlKGpvaW5lZCAhPT0gbnVsbCwgXCJ1c2VySm9pbmVkIGZyYW1lIGhhcyBubyBwcm9maWxlIHdpdGggYW4gX2lkXCIpO1xuICAgIHJldHVybiB7IGV2ZW50TmFtZTogb2JqLmV2ZW50TmFtZSwgc3ViamVjdDogam9pbmVkIH07XG4gIH1cbiAgaWYgKG9iai5ldmVudE5hbWUgPT09IFwidXNlclVwZGF0ZWRcIikge1xuICAgIC8vIENhcnJpZXMgb25seSB0aGUgY2hhbmdlZCBmaWVsZHMsIHNvIGl0J3MganVkZ2VkIGJ5IGlkIGFnYWluc3QgdGhlIGxhc3QgZnVsbCBwcm9maWxlLlxuICAgIGNvbnN0IHVwZGF0ZSA9IGFzUHJvZmlsZShvYmouZGF0YSk7XG4gICAgZXhwZWN0U2hhcGUodXBkYXRlICE9PSBudWxsLCBcInVzZXJVcGRhdGVkIGZyYW1lIGhhcyBubyBwcm9maWxlIHdpdGggYW4gX2lkXCIpO1xuICAgIHJldHVybiB7IGV2ZW50TmFtZTogb2JqLmV2ZW50TmFtZSwgc3ViamVjdDogdXBkYXRlPy5faWQgPz8gbnVsbCwgdXBkYXRlOiB1cGRhdGUgPz8gdW5kZWZpbmVkIH07XG4gIH1cbiAgaWYgKFxuICAgIG9iai5ldmVudE5hbWUgPT09IFwidXNlckF3YWtlXCIgfHxcbiAgICBvYmouZXZlbnROYW1lID09PSBcInVzZXJEaXNjb25uZWN0ZWRcIiB8fFxuICAgIG9iai5ldmVudE5hbWUgPT09IFwidXNlclJlbW92ZWRcIlxuICApIHtcbiAgICBleHBlY3RTaGFwZSh0eXBlb2Ygb2JqLmRhdGEgPT09IFwic3RyaW5nXCIsIGAke29iai5ldmVudE5hbWV9IGZyYW1lIGhhcyBubyBzdHJpbmcgaWRgKTtcbiAgICByZXR1cm4geyBldmVudE5hbWU6IG9iai5ldmVudE5hbWUsIHN1YmplY3Q6IHR5cGVvZiBvYmouZGF0YSA9PT0gXCJzdHJpbmdcIiA/IG9iai5kYXRhIDogbnVsbCB9O1xuICB9XG4gIGlmIChvYmouZXZlbnROYW1lID09PSBcIm5ld01zZ1wiKSB7XG4gICAgY29uc3QgYXV0aG9yID0gKG9iai5kYXRhIGFzIE5ld01zZ0ZyYW1lW1wiZGF0YVwiXSB8IHVuZGVmaW5lZCk/Lm1lc3NhZ2U/LmF1dGhvcjtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnROYW1lOiBvYmouZXZlbnROYW1lLFxuICAgICAgc3ViamVjdDogdHlwZW9mIGF1dGhvciA9PT0gXCJzdHJpbmdcIiA/IGF1dGhvciA6IG51bGwsXG4gICAgICBjaGF0OiB0cnVlLFxuICAgIH07XG4gIH1cbiAgaWYgKG9iai5ldmVudE5hbWUgPT09IFwibmV3Q29udmVyc2F0aW9uXCIpIHtcbiAgICBjb25zdCBwYXJ0aWFsVXNlciA9IChvYmouZGF0YSBhcyBOZXdDb252ZXJzYXRpb25GcmFtZVtcImRhdGFcIl0gfCB1bmRlZmluZWQpPy5wYXJ0aWFsVXNlcjtcbiAgICByZXR1cm4geyBldmVudE5hbWU6IG9iai5ldmVudE5hbWUsIHN1YmplY3Q6IGFzUHJvZmlsZShwYXJ0aWFsVXNlciksIGNoYXQ6IHRydWUgfTtcbiAgfVxuICByZXR1cm4geyBldmVudE5hbWU6IG9iai5ldmVudE5hbWUsIHN1YmplY3Q6IG51bGwgfTtcbn07XG5cbmNvbnN0IGhpZGVzRnJhbWUgPSAoZnJhbWU6IFdzRnJhbWVJbmZvIHwgbnVsbCwgbWF0Y2hlcjogUHJvZmlsZU1hdGNoZXIpOiBib29sZWFuID0+IHtcbiAgaWYgKFxuICAgIChmcmFtZT8uZXZlbnROYW1lID09PSBcInVzZXJEaXNjb25uZWN0ZWRcIiB8fCBmcmFtZT8uZXZlbnROYW1lID09PSBcInVzZXJSZW1vdmVkXCIpICYmXG4gICAgbWF0Y2hlci5rZWVwc09uTWFwKClcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCFmcmFtZT8uc3ViamVjdCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZnJhbWUudXBkYXRlKSB7XG4gICAgbWF0Y2hlci5ub3RlVXBkYXRlKGZyYW1lLnVwZGF0ZSk7XG4gIH1cbiAgY29uc3QgY2hlY2tzID0gZnJhbWUuY2hhdCA/IG1hdGNoZXIuY2hhdCA6IG1hdGNoZXI7XG4gIHJldHVybiB0eXBlb2YgZnJhbWUuc3ViamVjdCA9PT0gXCJzdHJpbmdcIlxuICAgID8gY2hlY2tzLmhpZGVzSWQoZnJhbWUuc3ViamVjdClcbiAgICA6IGNoZWNrcy5oaWRlc1Byb2ZpbGUoZnJhbWUuc3ViamVjdCk7XG59O1xuXG4vKiogRGVjaWRlcyB3aGV0aGVyIGEgc2luZ2xlIGxpdmUgV2ViU29ja2V0IGZyYW1lIGNhcnJpZXMgYSBoaWRkZW4gYWNjb3VudC4gKi9cbmV4cG9ydCBjb25zdCBzaG91bGRGaWx0ZXJXZWJTb2NrZXRGcmFtZSA9IChyYXc6IHN0cmluZywgbWF0Y2hlcjogUHJvZmlsZU1hdGNoZXIpOiBib29sZWFuID0+XG4gIG1hdGNoZXIuaXNBY3RpdmUoKSAmJiBoaWRlc0ZyYW1lKHBhcnNlV3NGcmFtZShyYXcpLCBtYXRjaGVyKTtcblxuLy8gXHUyNTAwXHUyNTAwIFhIUiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxudHlwZSBQYXRjaGVkWEhSUHJvdG90eXBlID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSAmIHtcbiAgX19zbmlmZmllc0JvdEJsb2NrUGF0Y2hlZD86IGJvb2xlYW47XG59O1xudHlwZSBYaHJXaXRoRmlsdGVyS2luZCA9IFhNTEh0dHBSZXF1ZXN0ICYgeyBfX3NuaWZmaWVzRmlsdGVyS2luZD86IEZpbHRlcktpbmQgfCBudWxsIH07XG5cbmNvbnN0IGNsYXNzaWZ5WGhyVXJsID0gKHVybDogc3RyaW5nKTogRmlsdGVyS2luZCB8IG51bGwgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsLCB0eXBlb2YgbG9jYXRpb24gIT09IFwidW5kZWZpbmVkXCIgPyBsb2NhdGlvbi5ocmVmIDogdW5kZWZpbmVkKTtcbiAgICBpZiAoIWlzU25pZmZpZXNBcGlIb3N0KHBhcnNlZC5ob3N0KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwYXJzZWQucGF0aG5hbWUgPT09IFBPU1RfQVVUSF9QQVRIKSB7XG4gICAgICByZXR1cm4gXCJwb3N0LWF1dGhlbnRpY2F0aW9uXCI7XG4gICAgfVxuICAgIGlmIChwYXJzZWQucGF0aG5hbWUgPT09IFNPRlRfUkVMT0FEX1BBVEgpIHtcbiAgICAgIHJldHVybiBcInNvZnQtcmVsb2FkXCI7XG4gICAgfVxuICAgIGlmIChwYXJzZWQucGF0aG5hbWUgPT09IENIQVRfREFUQV9QQVRIKSB7XG4gICAgICByZXR1cm4gXCJjaGF0LWRhdGFcIjtcbiAgICB9XG4gICAgaWYgKHBhcnNlZC5wYXRobmFtZSA9PT0gTUVTU0FHRVNfUEFUSCkge1xuICAgICAgcmV0dXJuIFwibWVzc2FnZXNcIjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5jb25zdCBpbnN0YWxsWGhyRmlsdGVyID0gKFxuICBtYXRjaGVyOiBQcm9maWxlTWF0Y2hlcixcbiAgbG9nOiBMb2dnZXIsXG4gIHJhaXNlUmFkaXVzOiAoKSA9PiBib29sZWFuLFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHByb3RvID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlIGFzIFBhdGNoZWRYSFJQcm90b3R5cGU7XG4gIGlmIChwcm90by5fX3NuaWZmaWVzQm90QmxvY2tQYXRjaGVkKSB7XG4gICAgbG9nKFwiWEhSIGZpbHRlciBub3QgaW5zdGFsbGVkIChhbHJlYWR5IHBhdGNoZWQpXCIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG5hdGl2ZU9wZW4gPSBwcm90by5vcGVuO1xuICBjb25zdCBuYXRpdmVTZW5kID0gcHJvdG8uc2VuZDtcbiAgY29uc3QgcmVzcG9uc2VUZXh0RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwicmVzcG9uc2VUZXh0XCIpO1xuICBjb25zdCByZXNwb25zZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInJlc3BvbnNlXCIpO1xuICBpZiAoIXJlc3BvbnNlVGV4dERlc2NyaXB0b3I/LmdldCB8fCAhcmVzcG9uc2VEZXNjcmlwdG9yPy5nZXQpIHtcbiAgICBsb2cud2FybihcIlhIUiBmaWx0ZXIgbm90IGluc3RhbGxlZCAocmVzcG9uc2VUZXh0L3Jlc3BvbnNlIGFyZSBub3QgYWNjZXNzb3IgcHJvcGVydGllcylcIik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdG8ub3BlbiA9IGZ1bmN0aW9uIChcbiAgICB0aGlzOiBYaHJXaXRoRmlsdGVyS2luZCxcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyB8IFVSTCxcbiAgICAuLi5yZXN0OiB1bmtub3duW11cbiAgKSB7XG4gICAgdGhpcy5fX3NuaWZmaWVzRmlsdGVyS2luZCA9IGNsYXNzaWZ5WGhyVXJsKHVybC50b1N0cmluZygpKTtcbiAgICByZXR1cm4gKG5hdGl2ZU9wZW4gYXMgKC4uLmE6IHVua25vd25bXSkgPT4gdW5rbm93bikuYXBwbHkodGhpcywgW21ldGhvZCwgdXJsLCAuLi5yZXN0XSk7XG4gIH0gYXMgdHlwZW9mIHByb3RvLm9wZW47XG5cbiAgcHJvdG8uc2VuZCA9IGZ1bmN0aW9uICh0aGlzOiBYaHJXaXRoRmlsdGVyS2luZCwgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgY29uc3Qga2luZCA9IHRoaXMuX19zbmlmZmllc0ZpbHRlcktpbmQ7XG4gICAgaWYgKGtpbmQpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IHRoaXMucmVzcG9uc2VUeXBlIHx8IFwiXCI7XG4gICAgICBpZiAocmVzcG9uc2VUeXBlID09PSBcIlwiIHx8IHJlc3BvbnNlVHlwZSA9PT0gXCJ0ZXh0XCIgfHwgcmVzcG9uc2VUeXBlID09PSBcImpzb25cIikge1xuICAgICAgICBsZXQgY2FjaGVkOiB7IHRleHQ6IHN0cmluZzsganNvbjogdW5rbm93biB9IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGNvbXB1dGUgPSAoKTogeyB0ZXh0OiBzdHJpbmc7IGpzb246IHVua25vd24gfSA9PiB7XG4gICAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc2hvdWxkRmlsdGVyID0gbWF0Y2hlci5pc0FjdGl2ZSgpO1xuICAgICAgICAgIGNvbnN0IHNob3VsZFJhaXNlID1cbiAgICAgICAgICAgIHJhaXNlUmFkaXVzKCkgJiYgKGtpbmQgPT09IFwicG9zdC1hdXRoZW50aWNhdGlvblwiIHx8IGtpbmQgPT09IFwic29mdC1yZWxvYWRcIik7XG4gICAgICAgICAgY29uc3Qgc2hvdWxkUmV3cml0ZSA9IHNob3VsZEZpbHRlciB8fCBzaG91bGRSYWlzZTtcbiAgICAgICAgICBsb2coYCR7a2luZH0gcmVzcG9uc2UgcmVhZGAsIHtcbiAgICAgICAgICAgIGZpbHRlcmluZzogc2hvdWxkRmlsdGVyLFxuICAgICAgICAgICAgbXM6IE1hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCBqc29uOiB1bmtub3duO1xuICAgICAgICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICAgICAgICBpZiAocmVzcG9uc2VUeXBlID09PSBcImpzb25cIikge1xuICAgICAgICAgICAganNvbiA9IHJlc3BvbnNlRGVzY3JpcHRvci5nZXQhLmNhbGwodGhpcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHQgPSByZXNwb25zZVRleHREZXNjcmlwdG9yLmdldCEuY2FsbCh0aGlzKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmV3cml0ZSkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICBjYWNoZWQgPSB7IHRleHQsIGpzb246IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNob3VsZFJld3JpdGUpIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRGaWx0ZXIpIHtcbiAgICAgICAgICAgICAganNvbiA9IGFwcGx5RmlsdGVyKGtpbmQsIGpzb24sIG1hdGNoZXIpO1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHsgcnVsZSwgaWRzIH0gb2YgbWF0Y2hlci5mbHVzaCgpKSB7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4oYCR7cnVsZX0gZmlsdGVyZWQgYWNjb3VudChzKSBmcm9tICR7a2luZH0gcmVzcG9uc2U6YCwgaWRzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNob3VsZFJhaXNlKSB7XG4gICAgICAgICAgICAgIGpzb24gPSByYWlzZVJhZGl1c0luUGF5bG9hZChqc29uIGFzIE5lYXJieVZpc2l0b3JzUGF5bG9hZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VUeXBlICE9PSBcImpzb25cIikge1xuICAgICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhY2hlZCA9IHsgdGV4dCwganNvbiB9O1xuICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChyZXNwb25zZVR5cGUgIT09IFwianNvblwiKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicmVzcG9uc2VUZXh0XCIsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGdldDogKCkgPT4gY29tcHV0ZSgpLnRleHQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicmVzcG9uc2VcIiwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQ6ICgpID0+IChyZXNwb25zZVR5cGUgPT09IFwianNvblwiID8gY29tcHV0ZSgpLmpzb24gOiBjb21wdXRlKCkudGV4dCksXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLndhcm4oYHVuc3VwcG9ydGVkIHJlc3BvbnNlVHlwZSBcIiR7cmVzcG9uc2VUeXBlfVwiIGZvciAke2tpbmR9LCBub3QgZmlsdGVyaW5nYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAobmF0aXZlU2VuZCBhcyAoLi4uYTogdW5rbm93bltdKSA9PiB1bmtub3duKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfSBhcyB0eXBlb2YgcHJvdG8uc2VuZDtcblxuICBwcm90by5fX3NuaWZmaWVzQm90QmxvY2tQYXRjaGVkID0gdHJ1ZTtcbiAgbG9nKFwiWEhSIGZpbHRlciBpbnN0YWxsZWRcIik7XG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gXHUyNTAwXHUyNTAwIFdlYlNvY2tldCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxudHlwZSBQYXRjaGVkV2ViU29ja2V0Q3RvciA9IHR5cGVvZiBXZWJTb2NrZXQgJiB7IF9fc25pZmZpZXNCb3RCbG9ja1BhdGNoZWQ/OiBib29sZWFuIH07XG5cbmNvbnN0IGlzV3NUYXJnZXRIb3N0ID0gKHVybDogc3RyaW5nIHwgVVJMKTogYm9vbGVhbiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwsIHR5cGVvZiBsb2NhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIiA/IGxvY2F0aW9uLmhyZWYgOiB1bmRlZmluZWQpO1xuICAgIHJldHVybiBwYXJzZWQuaG9zdCA9PT0gV1NfSE9TVDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBwYXRjaFNvY2tldEluc3RhbmNlID0gKFxuICBzb2NrZXQ6IFdlYlNvY2tldCxcbiAgbWF0Y2hlcjogUHJvZmlsZU1hdGNoZXIsXG4gIG5hdGl2ZU9uTWVzc2FnZURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCxcbiAgbG9nOiBMb2dnZXIsXG4pOiB2b2lkID0+IHtcbiAgY29uc3Qgc2hvdWxkU3VwcHJlc3MgPSAoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCEoZXZlbnQgaW5zdGFuY2VvZiBNZXNzYWdlRXZlbnQpIHx8IHR5cGVvZiBldmVudC5kYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghbWF0Y2hlci5pc0FjdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGZyYW1lID0gcGFyc2VXc0ZyYW1lKGV2ZW50LmRhdGEpO1xuICAgIGlmICghaGlkZXNGcmFtZShmcmFtZSwgbWF0Y2hlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB7IHJ1bGUsIGlkcyB9IG9mIG1hdGNoZXIuZmx1c2goKSkge1xuICAgICAgbG9nLndhcm4oYCR7cnVsZX0gZmlsdGVyZWQgYWNjb3VudCBmcm9tIFdTICR7ZnJhbWUhLmV2ZW50TmFtZX0gZnJhbWU6YCwgLi4uaWRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgbmF0aXZlQWRkRXZlbnRMaXN0ZW5lciA9IHNvY2tldC5hZGRFdmVudExpc3RlbmVyLmJpbmQoc29ja2V0KSBhcyAoXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0IHwgbnVsbCxcbiAgICBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zLFxuICApID0+IHZvaWQ7XG4gIGNvbnN0IG5hdGl2ZVJlbW92ZUV2ZW50TGlzdGVuZXIgPSBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHNvY2tldCkgYXMgKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCB8IG51bGwsXG4gICAgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyxcbiAgKSA9PiB2b2lkO1xuICBjb25zdCB3cmFwcGVkTGlzdGVuZXJzID0gbmV3IFdlYWtNYXA8RXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgRXZlbnRMaXN0ZW5lcj4oKTtcblxuICBjb25zdCB3cmFwID0gKGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0KTogRXZlbnRMaXN0ZW5lciA9PiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB3cmFwcGVkTGlzdGVuZXJzLmdldChsaXN0ZW5lcik7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZSA9IHR5cGVvZiBsaXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiID8gbGlzdGVuZXIgOiBsaXN0ZW5lci5oYW5kbGVFdmVudC5iaW5kKGxpc3RlbmVyKTtcbiAgICBjb25zdCB3cmFwcGVkOiBFdmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoc2hvdWxkU3VwcHJlc3MoZXZlbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGhhbmRsZShldmVudCk7XG4gICAgfTtcbiAgICB3cmFwcGVkTGlzdGVuZXJzLnNldChsaXN0ZW5lciwgd3JhcHBlZCk7XG4gICAgcmV0dXJuIHdyYXBwZWQ7XG4gIH07XG5cbiAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIgPSAoKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCB8IG51bGwsXG4gICAgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyxcbiAgKSA9PiB7XG4gICAgaWYgKHR5cGUgIT09IFwibWVzc2FnZVwiIHx8ICFsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIG5hdGl2ZUFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gbmF0aXZlQWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB3cmFwKGxpc3RlbmVyKSwgb3B0aW9ucyk7XG4gIH0pIGFzIHR5cGVvZiBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcjtcblxuICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lciA9ICgoXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0IHwgbnVsbCxcbiAgICBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zLFxuICApID0+IHtcbiAgICBpZiAodHlwZSAhPT0gXCJtZXNzYWdlXCIgfHwgIWxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gbmF0aXZlUmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBuYXRpdmVSZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHdyYXBwZWRMaXN0ZW5lcnMuZ2V0KGxpc3RlbmVyKSA/PyBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH0pIGFzIHR5cGVvZiBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcjtcblxuICBpZiAobmF0aXZlT25NZXNzYWdlRGVzY3JpcHRvcj8uZ2V0ICYmIG5hdGl2ZU9uTWVzc2FnZURlc2NyaXB0b3Iuc2V0KSB7XG4gICAgbGV0IGN1cnJlbnRIYW5kbGVyOiAoKHRoaXM6IFdlYlNvY2tldCwgZXY6IE1lc3NhZ2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsID0gbnVsbDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc29ja2V0LCBcIm9ubWVzc2FnZVwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiAoKSA9PiBjdXJyZW50SGFuZGxlcixcbiAgICAgIHNldDogKGhhbmRsZXI6ICgodGhpczogV2ViU29ja2V0LCBldjogTWVzc2FnZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpID0+IHtcbiAgICAgICAgY3VycmVudEhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIG5hdGl2ZU9uTWVzc2FnZURlc2NyaXB0b3Iuc2V0IS5jYWxsKHNvY2tldCwgaGFuZGxlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG5hdGl2ZU9uTWVzc2FnZURlc2NyaXB0b3Iuc2V0IS5jYWxsKFxuICAgICAgICAgIHNvY2tldCxcbiAgICAgICAgICBmdW5jdGlvbiAodGhpczogV2ViU29ja2V0LCBldmVudDogTWVzc2FnZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3VwcHJlc3MoZXZlbnQpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn07XG5cbmNvbnN0IGluc3RhbGxXZWJTb2NrZXRGaWx0ZXIgPSAobWF0Y2hlcjogUHJvZmlsZU1hdGNoZXIsIGxvZzogTG9nZ2VyKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IE5hdGl2ZVdlYlNvY2tldCA9ICh0eXBlb2YgV2ViU29ja2V0ICE9PSBcInVuZGVmaW5lZFwiID8gV2ViU29ja2V0IDogdW5kZWZpbmVkKSBhc1xuICAgIFBhdGNoZWRXZWJTb2NrZXRDdG9yIHwgdW5kZWZpbmVkO1xuICBpZiAoIU5hdGl2ZVdlYlNvY2tldCB8fCBOYXRpdmVXZWJTb2NrZXQuX19zbmlmZmllc0JvdEJsb2NrUGF0Y2hlZCkge1xuICAgIGxvZyhcIldlYlNvY2tldCBmaWx0ZXIgbm90IGluc3RhbGxlZCAobm8gV2ViU29ja2V0IG9yIGFscmVhZHkgcGF0Y2hlZClcIik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbmF0aXZlT25NZXNzYWdlRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgTmF0aXZlV2ViU29ja2V0LnByb3RvdHlwZSxcbiAgICBcIm9ubWVzc2FnZVwiLFxuICApO1xuXG4gIGNvbnN0IFBhdGNoZWRXZWJTb2NrZXQgPSBmdW5jdGlvbiAoXG4gICAgdGhpczogV2ViU29ja2V0LFxuICAgIHVybDogc3RyaW5nIHwgVVJMLFxuICAgIHByb3RvY29scz86IHN0cmluZyB8IHN0cmluZ1tdLFxuICApOiBXZWJTb2NrZXQge1xuICAgIGNvbnN0IHNvY2tldCA9XG4gICAgICBwcm90b2NvbHMgPT09IHVuZGVmaW5lZCA/IG5ldyBOYXRpdmVXZWJTb2NrZXQodXJsKSA6IG5ldyBOYXRpdmVXZWJTb2NrZXQodXJsLCBwcm90b2NvbHMpO1xuICAgIGlmIChpc1dzVGFyZ2V0SG9zdCh1cmwpKSB7XG4gICAgICAvLyBTbmlmZmllcyBjb25uZWN0cyB3aXRoID91c2VySWQ9PG93biBpZD4gXHUyMDE0IG5ldmVyIGhpZGUgdGhlIHVzZXIgZnJvbSB0aGVtc2VsdmVzLlxuICAgICAgbWF0Y2hlci5zZXRTZWxmSWQobmV3IFVSTCh1cmwsIGxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoV1NfVVNFUl9JRF9QQVJBTSkgPz8gXCJcIik7XG4gICAgICBwYXRjaFNvY2tldEluc3RhbmNlKHNvY2tldCwgbWF0Y2hlciwgbmF0aXZlT25NZXNzYWdlRGVzY3JpcHRvciwgbG9nKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvY2tldDtcbiAgfSBhcyB1bmtub3duIGFzIFBhdGNoZWRXZWJTb2NrZXRDdG9yO1xuXG4gIC8vIFRPRE86IEkgaGF0ZSB0aGlzXG4gIFBhdGNoZWRXZWJTb2NrZXQucHJvdG90eXBlID0gTmF0aXZlV2ViU29ja2V0LnByb3RvdHlwZTtcbiAgKFBhdGNoZWRXZWJTb2NrZXQgYXMgdW5rbm93biBhcyB7IENPTk5FQ1RJTkc6IG51bWJlciB9KS5DT05ORUNUSU5HID0gTmF0aXZlV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG4gIChQYXRjaGVkV2ViU29ja2V0IGFzIHVua25vd24gYXMgeyBPUEVOOiBudW1iZXIgfSkuT1BFTiA9IE5hdGl2ZVdlYlNvY2tldC5PUEVOO1xuICAoUGF0Y2hlZFdlYlNvY2tldCBhcyB1bmtub3duIGFzIHsgQ0xPU0lORzogbnVtYmVyIH0pLkNMT1NJTkcgPSBOYXRpdmVXZWJTb2NrZXQuQ0xPU0lORztcbiAgKFBhdGNoZWRXZWJTb2NrZXQgYXMgdW5rbm93biBhcyB7IENMT1NFRDogbnVtYmVyIH0pLkNMT1NFRCA9IE5hdGl2ZVdlYlNvY2tldC5DTE9TRUQ7XG4gIFBhdGNoZWRXZWJTb2NrZXQuX19zbmlmZmllc0JvdEJsb2NrUGF0Y2hlZCA9IHRydWU7XG5cbiAgd2luZG93LldlYlNvY2tldCA9IFBhdGNoZWRXZWJTb2NrZXQ7XG4gIGxvZyhcIldlYlNvY2tldCBmaWx0ZXIgaW5zdGFsbGVkXCIpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZmlsZUZpbHRlckhvb2tSZXN1bHQge1xuICB4aHJJbnN0YWxsZWQ6IGJvb2xlYW47XG4gIHdzSW5zdGFsbGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgaW5zdGFsbFByb2ZpbGVGaWx0ZXJIb29rID0gKFxuICBydWxlczogcmVhZG9ubHkgUHJvZmlsZUZpbHRlclJ1bGVbXSxcbiAgcmFpc2VSYWRpdXM6ICgpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbik6IFByb2ZpbGVGaWx0ZXJIb29rUmVzdWx0ID0+IHtcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKFwicHJvZmlsZS1maWx0ZXJcIik7XG4gIGNvbnN0IG1hdGNoZXIgPSBjcmVhdGVQcm9maWxlTWF0Y2hlcihydWxlcyk7XG4gIHJldHVybiB7XG4gICAgeGhySW5zdGFsbGVkOiBpbnN0YWxsWGhyRmlsdGVyKG1hdGNoZXIsIGxvZywgcmFpc2VSYWRpdXMpLFxuICAgIHdzSW5zdGFsbGVkOiBpbnN0YWxsV2ViU29ja2V0RmlsdGVyKG1hdGNoZXIsIGxvZyksXG4gIH07XG59O1xuIiwgIi5zbnAtZmlsdGVyLXJvdyAuc25wLWZpbHRlci1ib2R5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDZweDtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDRweCAwO1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAjN2E5MGE0O1xufVxuXG4jc25wLW9ubGluZS1maWx0ZXIgLnRyYWlsaW5nIHtcbiAgd2lkdGg6IGF1dG87XG4gIG1pbi13aWR0aDogMDtcbiAgZmxleDogbm9uZTtcbn1cblxuI3NucC1vbmxpbmUtZmlsdGVyIC50cmFpbGluZyAuc25wLWZpbHRlci1hcHBseSB7XG4gIHdpZHRoOiBhdXRvO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uc25wLWZpbHRlci1yb3cgLnNucC1vbmxpbmUtc2luY2Uge1xuICBtYXJnaW46IDJweCAwIDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICM3YTkwYTQ7XG59XG5cbi5zbnAtZmlsdGVyLXJvdyAuc25wLWdlbmRlci1vcHRpb24sXG4uc25wLWZpbHRlci1yb3cgLnNucC1maWx0ZXItYXBwbHkge1xuICBib3JkZXI6IDFweCBzb2xpZCAjN2E5MGE0O1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICBwYWRkaW5nOiA0cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogIzdhOTBhNDtcbn1cblxuLnNucC1maWx0ZXItcm93IC5zbnAtZ2VuZGVyLW9wdGlvbi5hY3RpdmUge1xuICBib3JkZXItY29sb3I6ICNmZjU1MDA7XG4gIGJhY2tncm91bmQ6ICNmZjU1MDA7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxuXG4uc25wLWZpbHRlci1yb3cgLnNucC1maWx0ZXItYXBwbHkge1xuICBib3JkZXItY29sb3I6ICNmZmZmZmY7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBmb250LXdlaWdodDogNjAwO1xufVxuXG4uc25wLWZpbHRlci1yb3cgLnNucC1maWx0ZXItYXBwbHlbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5zbnAtZmlsdGVyLXJvdyAuc25wLWZpbHRlci1vZmYgLnNucC1nZW5kZXItb3B0aW9uIHtcbiAgb3BhY2l0eTogMC41O1xufVxuXG4uc25wLWZseW91dC1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5zZXQ6IDA7XG4gIHotaW5kZXg6IDIxNDc0ODMwMDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cblxuLnNucC1mbHlvdXQge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA0ODBweDtcbiAgbWluLWhlaWdodDogNDAycHg7XG4gIGJvcmRlci10b3A6IDVweCBzb2xpZCAjNGI4NGU2O1xuICBib3JkZXItcmFkaXVzOiA2cHggNnB4IDAgMDtcbiAgYmFja2dyb3VuZDogIzA3MTAxZTtcbiAgY29sb3I6ICNkNGQ5ZTQ7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IDE2cHg7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc25wLWZseW91dC1iYWNrZHJvcCB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxufVxuXG4uc25wLWZseW91dC1oZWFkZXIge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAyZnIgMWZyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtaW4taGVpZ2h0OiA1MHB4O1xuICBtYXJnaW4tYm90dG9tOiA2cHg7XG4gIHBhZGRpbmc6IDAgMTVweDtcbiAgYmFja2dyb3VuZDogIzAwMDAwMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uc25wLWZseW91dC1oZWFkZXIgaDEge1xuICBtYXJnaW46IDA7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbi5zbnAtZmx5b3V0LWFjdGlvbi5yaWdodCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4uc25wLWZseW91dC1hY3Rpb24gYnV0dG9uIHtcbiAgYm9yZGVyOiAwO1xuICBwYWRkaW5nOiA2cHg7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogIzRiODRlNjtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5zbnAtd2hlZWwtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogMTJweDtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xuICBiYWNrZ3JvdW5kOiAjMGYxZTM1O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzJjNDY2OTtcbn1cblxuLnNucC1mbHlvdXQtcHJvbXB0LFxuLnNucC1mbHlvdXQtb3B0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDE2cHggMTBweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5zbnAtZmx5b3V0LXByb21wdCB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLnNucC1mbHlvdXQtbW9kZXMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiA4cHg7XG4gIHBhZGRpbmc6IDEycHggMTBweCAwO1xufVxuXG4uc25wLWZseW91dC1tb2RlcyBidXR0b24ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjN2E5MGE0O1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICBwYWRkaW5nOiA0cHggMTRweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogIzdhOTBhNDtcbn1cblxuLnNucC1mbHlvdXQtbW9kZXMgYnV0dG9uLmFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogI2ZmNTUwMDtcbiAgYmFja2dyb3VuZDogI2ZmNTUwMDtcbiAgY29sb3I6ICNmZmZmZmY7XG59XG5cbi5zbnAtZmx5b3V0LW9wdGlvbiBpbnB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5zbnAtZmx5b3V0LW9wdGlvbiBpIHtcbiAgY29sb3I6ICM3YTkwYTQ7XG59XG5cbi5zbnAtZmx5b3V0LW9wdGlvbiBpLmNoZWNrZWQge1xuICBjb2xvcjogI2ZmNTUwMDtcbn1cblxuLnNucC13aGVlbC1jb2x1bW4ge1xuICBmbGV4OiAxO1xuICBtYXgtd2lkdGg6IDE0MHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5zbnAtd2hlZWwtY29sdW1uOmhhcyhbZGF0YS13aGVlbD1cImNob2ljZVwiXSkge1xuICBtYXgtd2lkdGg6IDI4MHB4O1xufVxuXG4uc25wLXdoZWVsLWNvbHVtbiBwIHtcbiAgbWFyZ2luOiAwIDAgNHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAjN2E5MGE0O1xufVxuXG4uc25wLXdoZWVsLW1pZGRsZSB7XG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgcGFkZGluZy10b3A6IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgY29sb3I6ICM3YTkwYTQ7XG59XG5cbi5zbnAtd2hlZWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMjYycHg7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG4gIHNjcm9sbGJhci13aWR0aDogbm9uZTtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpKSBjZW50ZXIgLyAxMDAlIDM0cHhcbiAgICBuby1yZXBlYXQ7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCAjMDAwIDM1JSwgIzAwMCA2NSUsIHRyYW5zcGFyZW50KTtcbn1cblxuLnNucC13aGVlbDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4uc25wLXdoZWVsOjpiZWZvcmUsXG4uc25wLXdoZWVsOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDExNHB4O1xufVxuXG4uc25wLXdoZWVsLWl0ZW0ge1xuICBoZWlnaHQ6IDM0cHg7XG4gIGxpbmUtaGVpZ2h0OiAzNHB4O1xuICBmb250LXNpemU6IDE2LjVweDtcbiAgY29sb3I6ICNkNGQ5ZTQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgc2Nyb2xsLXNuYXAtYWxpZ246IGNlbnRlcjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnNucC13aGVlbC1pdGVtLnNlbGVjdGVkIHtcbiAgY29sb3I6ICNmZmZmZmY7XG59XG5cbi5zbnAtZmlsdGVyLXJvdyAubGlzdC1pdGVtLnBhcmVudC1lbmFibGVkIGxhYmVsLmFjdGl2ZSBpIHtcbiAgY29sb3I6ICM0Yjg0ZTY7XG59XG5cbi5zbnAtZmlsdGVyLXJvdyAubGlzdC1pdGVtOm5vdCgucGFyZW50LWVuYWJsZWQpIGxhYmVsLFxuLnNucC1maWx0ZXItcm93IC5saXN0LWl0ZW06bm90KC5wYXJlbnQtZW5hYmxlZCkgbGFiZWwgaSxcbi5zbnAtZmlsdGVyLXJvdyAubGlzdC1pdGVtOm5vdCgucGFyZW50LWVuYWJsZWQpIC5zdGF0LWJ1dHRvbiB7XG4gIGNvbG9yOiAjNzY4ZWI4O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4iLCAiaW1wb3J0IHsgbmVhcmVzdENob2ljZSwgdHlwZSBSYW5nZUZpbHRlciwgdHlwZSBSYW5nZU9wdGlvbnMgfSBmcm9tIFwiLi9wcm9maWxlLWZpbHRlci5qc1wiO1xuXG5jb25zdCBGTFlPVVRfSUQgPSBcInNucC1yYW5nZS1mbHlvdXRcIjtcbi8vIEtlZXAgaW4gc3luYyB3aXRoIC5zbnAtd2hlZWwtaXRlbSdzIGhlaWdodCBpbiBmaWx0ZXItbWVudS5jc3MuXG5jb25zdCBJVEVNX0hFSUdIVCA9IDM0O1xuXG5pbnRlcmZhY2UgV2hlZWxJdGVtPFQ+IHtcbiAgdmFsdWU6IFQ7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXaGVlbDxUPiB7XG4gIGVsOiBIVE1MRWxlbWVudDtcbiAgdmFsdWU6ICgpID0+IFQ7XG4gIC8qKiBSZXBsYWNlcyB0aGUgaXRlbXMsIHNlbGVjdGluZyB0aGUgb25lIGhvbGRpbmcgYHZhbHVlYCAob3IgdGhlIGZpcnN0KS4gKi9cbiAgZmlsbDogKGl0ZW1zOiBXaGVlbEl0ZW08VD5bXSwgdmFsdWU6IFQpID0+IHZvaWQ7XG4gIC8qKiBNb3ZlcyB0aGUgc2VsZWN0aW9uIHRvIHRoZSBpdGVtIGhvbGRpbmcgYHZhbHVlYCwgaWYgdGhlcmUgaXMgb25lLiAqL1xuICBzZXQ6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgLyoqIFNjcm9sbHMgdGhlIHNlbGVjdGVkIGl0ZW0gaW50byB0aGUgbWlkZGxlIFx1MjAxNCBvbmx5IHdvcmtzIG9uY2UgdGhlIHdoZWVsIGlzIGluIHRoZSBwYWdlLiAqL1xuICByZXZlYWw6ICgpID0+IHZvaWQ7XG59XG5cbmNvbnN0IGNyZWF0ZVdoZWVsID0gPFQ+KG5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZywgb25DaGFuZ2U/OiAoKSA9PiB2b2lkKTogV2hlZWw8VD4gPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICBlbC5jbGFzc05hbWUgPSBcInNucC13aGVlbC1jb2x1bW5cIjtcbiAgY29uc3QgaGVhZGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICBoZWFkaW5nLnRleHRDb250ZW50ID0gdGl0bGU7XG4gIGNvbnN0IGxpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBsaXN0LmNsYXNzTmFtZSA9IFwic25wLXdoZWVsXCI7XG4gIGxpc3QuZGF0YXNldC53aGVlbCA9IG5hbWU7XG4gIGxpc3Quc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcImxpc3Rib3hcIik7XG4gIGxpc3Quc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCB0aXRsZSk7XG4gIGVsLmFwcGVuZChoZWFkaW5nLCBsaXN0KTtcblxuICBsZXQgaXRlbXM6IFdoZWVsSXRlbTxUPltdID0gW107XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgY29uc3Qgc2VsZWN0ID0gKG5leHQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtcy5sZW5ndGggLSAxLCBuZXh0KSk7XG4gICAgY29uc3QgbW92ZWQgPSBjbGFtcGVkICE9PSBpbmRleDtcbiAgICBpbmRleCA9IGNsYW1wZWQ7XG4gICAgWy4uLmxpc3QuY2hpbGRyZW5dLmZvckVhY2goKG5vZGUsIGkpID0+IHtcbiAgICAgIG5vZGUuY2xhc3NMaXN0LnRvZ2dsZShcInNlbGVjdGVkXCIsIGkgPT09IGluZGV4KTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLCBTdHJpbmcoaSA9PT0gaW5kZXgpKTtcbiAgICB9KTtcbiAgICBpZiAobW92ZWQpIHtcbiAgICAgIG9uQ2hhbmdlPy4oKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJldmVhbCA9ICgpOiB2b2lkID0+IHtcbiAgICBsaXN0LnNjcm9sbFRvcCA9IGluZGV4ICogSVRFTV9IRUlHSFQ7XG4gIH07XG4gIGxpc3QuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCAoKSA9PiBzZWxlY3QoTWF0aC5yb3VuZChsaXN0LnNjcm9sbFRvcCAvIElURU1fSEVJR0hUKSkpO1xuXG4gIHJldHVybiB7XG4gICAgZWwsXG4gICAgdmFsdWU6ICgpID0+IGl0ZW1zW2luZGV4XSEudmFsdWUsXG4gICAgZmlsbDogKG5leHRJdGVtcywgdmFsdWUpID0+IHtcbiAgICAgIGl0ZW1zID0gbmV4dEl0ZW1zO1xuICAgICAgbGlzdC5yZXBsYWNlQ2hpbGRyZW4oXG4gICAgICAgIC4uLml0ZW1zLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgIG5vZGUuY2xhc3NOYW1lID0gXCJzbnAtd2hlZWwtaXRlbVwiO1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcIm9wdGlvblwiKTtcbiAgICAgICAgICBub2RlLnRleHRDb250ZW50ID0gaXRlbS5sYWJlbDtcbiAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBzZWxlY3QoaSk7XG4gICAgICAgICAgICByZXZlYWwoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgaW5kZXggPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgaXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSksXG4gICAgICApO1xuICAgICAgc2VsZWN0KGluZGV4KTtcbiAgICAgIHJldmVhbCgpO1xuICAgIH0sXG4gICAgc2V0OiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBpdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKTtcbiAgICAgIGlmIChuZXh0ICE9PSAtMSAmJiBuZXh0ICE9PSBpbmRleCkge1xuICAgICAgICBzZWxlY3QobmV4dCk7XG4gICAgICAgIHJldmVhbCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmV2ZWFsLFxuICB9O1xufTtcblxudHlwZSBSYW5nZUNob2ljZSA9IFBpY2s8UmFuZ2VGaWx0ZXIsIFwibWluXCIgfCBcIm1heFwiIHwgXCJtZXRyaWNcIiB8IFwiaW5jbHVkZVVuc3BlY2lmaWVkXCI+O1xuXG5leHBvcnQgY29uc3Qgb3BlblJhbmdlRmx5b3V0ID0gKFxuICB0aXRsZTogc3RyaW5nLFxuICBvcHRpb25zOiBSYW5nZU9wdGlvbnMsXG4gIGN1cnJlbnQ6IFJhbmdlQ2hvaWNlLFxuICBvbkRvbmU6IChuZXh0OiBSYW5nZUNob2ljZSkgPT4gdm9pZCxcbiAgaG9zdD86IEVsZW1lbnQgfCBudWxsLFxuICBjaGVja0ljb24/OiBFbGVtZW50IHwgbnVsbCxcbik6IHZvaWQgPT4ge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChGTFlPVVRfSUQpPy5yZW1vdmUoKTtcblxuICBjb25zdCBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGJhY2tkcm9wLmlkID0gRkxZT1VUX0lEO1xuICBiYWNrZHJvcC5jbGFzc05hbWUgPSBcInNucC1mbHlvdXQtYmFja2Ryb3BcIjtcbiAgY29uc3Qgc2hlZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBzaGVldC5jbGFzc05hbWUgPSBcInNucC1mbHlvdXRcIjtcbiAgc2hlZXQuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcImRpYWxvZ1wiKTtcbiAgc2hlZXQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBgJHt0aXRsZX06IE1ha2UgYSBTZWxlY3Rpb25gKTtcbiAgYmFja2Ryb3AuYXBwZW5kQ2hpbGQoc2hlZXQpO1xuXG4gIGNvbnN0IGNsb3NlID0gKCk6IHZvaWQgPT4ge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIG9uS2V5KTtcbiAgICBiYWNrZHJvcC5yZW1vdmUoKTtcbiAgfTtcbiAgY29uc3Qgb25LZXkgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBjbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhY3Rpb24gPSAodGV4dDogc3RyaW5nLCBzaWRlOiBzdHJpbmcsIG9uQ2xpY2s6ICgpID0+IHZvaWQpOiBIVE1MRWxlbWVudCA9PiB7XG4gICAgY29uc3Qgd3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIHdyYXAuY2xhc3NOYW1lID0gYHNucC1mbHlvdXQtYWN0aW9uICR7c2lkZX1gO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgYnV0dG9uLnR5cGUgPSBcImJ1dHRvblwiO1xuICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrKTtcbiAgICB3cmFwLmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgcmV0dXJuIHdyYXA7XG4gIH07XG5cbiAgY29uc3QgY2hvaWNlcyA9IChtZXRyaWM6IGJvb2xlYW4pOiBXaGVlbEl0ZW08bnVtYmVyPltdID0+XG4gICAgKG1ldHJpYyA/IG9wdGlvbnMubWV0cmljIDogb3B0aW9ucy5pbXBlcmlhbCkuY2hvaWNlcztcbiAgLy8gXCItXCIgbGVhdmVzIHRoYXQgZW5kIG9mIHRoZSByYW5nZSBvcGVuLCBhcyBvbiBTbmlmZmllcycgb3duIHdoZWVscy5cbiAgY29uc3Qgd2l0aE5vbmUgPSAoaXRlbXM6IFdoZWVsSXRlbTxudW1iZXI+W10sIHRvcCA9IFwiXCIpOiBXaGVlbEl0ZW08bnVtYmVyIHwgbnVsbD5bXSA9PiBbXG4gICAgeyB2YWx1ZTogbnVsbCwgbGFiZWw6IFwiLVwiIH0sXG4gICAgLi4uaXRlbXMubWFwKChpdGVtLCBpKSA9PlxuICAgICAgaSA9PT0gaXRlbXMubGVuZ3RoIC0gMSA/IHsgLi4uaXRlbSwgbGFiZWw6IGl0ZW0ubGFiZWwgKyB0b3AgfSA6IGl0ZW0sXG4gICAgKSxcbiAgXTtcblxuICAvLyBNYXggc3RheXMgYWJvdmUgbWluLCBtaW4gc3RheXMgYmVsb3cgbWF4XG4gIGNvbnN0IHB1c2ggPSAobW92ZWQ6IFdoZWVsPG51bWJlciB8IG51bGw+LCBvdGhlcjogV2hlZWw8bnVtYmVyIHwgbnVsbD4sIHN0ZXA6IDEgfCAtMSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IFtmcm9tLCB0b10gPSBbbW92ZWQudmFsdWUoKSwgb3RoZXIudmFsdWUoKV07XG4gICAgaWYgKGZyb20gPT09IG51bGwgfHwgdG8gPT09IG51bGwgfHwgKHRvIC0gZnJvbSkgKiBzdGVwID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsaXN0ID0gY2hvaWNlcyh1bml0LnZhbHVlKCkpO1xuICAgIGNvbnN0IG5leHQgPSBsaXN0W2xpc3QuZmluZEluZGV4KChjaG9pY2UpID0+IGNob2ljZS52YWx1ZSA9PT0gZnJvbSkgKyBzdGVwXTtcbiAgICBvdGhlci5zZXQobmV4dCA/IG5leHQudmFsdWUgOiBudWxsKTtcbiAgfTtcbiAgY29uc3QgbWluOiBXaGVlbDxudW1iZXIgfCBudWxsPiA9IGNyZWF0ZVdoZWVsKFwibWluXCIsIFwiTWluXCIsICgpID0+IHB1c2gobWluLCBtYXgsIDEpKTtcbiAgY29uc3QgbWF4OiBXaGVlbDxudW1iZXIgfCBudWxsPiA9IGNyZWF0ZVdoZWVsKFwibWF4XCIsIFwiTWF4XCIsICgpID0+IHB1c2gobWF4LCBtaW4sIC0xKSk7XG4gIGNvbnN0IGZpbGxCb3VuZHMgPSAobWV0cmljOiBib29sZWFuLCBtaW5WYWx1ZTogbnVtYmVyIHwgbnVsbCwgbWF4VmFsdWU6IG51bWJlciB8IG51bGwpOiB2b2lkID0+IHtcbiAgICBjb25zdCBsaXN0ID0gY2hvaWNlcyhtZXRyaWMpO1xuICAgIGNvbnN0IHNuYXAgPSAodmFsdWU6IG51bWJlciB8IG51bGwpOiBudW1iZXIgfCBudWxsID0+XG4gICAgICB2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiBuZWFyZXN0Q2hvaWNlKGxpc3QsIHZhbHVlKS52YWx1ZTtcbiAgICBtaW4uZmlsbCh3aXRoTm9uZShsaXN0LCBcIiArXCIpLCBzbmFwKG1pblZhbHVlKSk7XG4gICAgbWF4LmZpbGwod2l0aE5vbmUobGlzdCksIHNuYXAobWF4VmFsdWUpKTtcbiAgfTtcbiAgY29uc3QgdW5pdDogV2hlZWw8Ym9vbGVhbj4gPSBjcmVhdGVXaGVlbChcInVuaXRcIiwgXCJVbml0XCIsICgpID0+XG4gICAgZmlsbEJvdW5kcyh1bml0LnZhbHVlKCksIG1pbi52YWx1ZSgpLCBtYXgudmFsdWUoKSksXG4gICk7XG4gIHVuaXQuZmlsbChcbiAgICBbXG4gICAgICB7IHZhbHVlOiBmYWxzZSwgbGFiZWw6IG9wdGlvbnMuaW1wZXJpYWwudW5pdCB9LFxuICAgICAgeyB2YWx1ZTogdHJ1ZSwgbGFiZWw6IG9wdGlvbnMubWV0cmljLnVuaXQgfSxcbiAgICBdLFxuICAgIGN1cnJlbnQubWV0cmljLFxuICApO1xuICBmaWxsQm91bmRzKGN1cnJlbnQubWV0cmljLCBjdXJyZW50Lm1pbiwgY3VycmVudC5tYXgpO1xuXG4gIGNvbnN0IGhlYWRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaDFcIik7XG4gIGhlYWRpbmcudGV4dENvbnRlbnQgPSB0aXRsZTtcbiAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgaGVhZGVyLmNsYXNzTmFtZSA9IFwic25wLWZseW91dC1oZWFkZXJcIjtcbiAgaGVhZGVyLmFwcGVuZChcbiAgICBhY3Rpb24oXCJDYW5jZWxcIiwgXCJsZWZ0XCIsIGNsb3NlKSxcbiAgICBoZWFkaW5nLFxuICAgIGFjdGlvbihcIkRvbmVcIiwgXCJyaWdodFwiLCAoKSA9PiB7XG4gICAgICBjbG9zZSgpO1xuICAgICAgb25Eb25lKHtcbiAgICAgICAgbWluOiBtaW4udmFsdWUoKSxcbiAgICAgICAgbWF4OiBtYXgudmFsdWUoKSxcbiAgICAgICAgbWV0cmljOiB1bml0LnZhbHVlKCksXG4gICAgICAgIGluY2x1ZGVVbnNwZWNpZmllZDogdW5zcGVjaWZpZWQuY2hlY2tlZCxcbiAgICAgIH0pO1xuICAgIH0pLFxuICApO1xuXG4gIGNvbnN0IHRvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gIHRvLmNsYXNzTmFtZSA9IFwic25wLXdoZWVsLW1pZGRsZVwiO1xuICB0by50ZXh0Q29udGVudCA9IFwidG9cIjtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGJvZHkuY2xhc3NOYW1lID0gXCJzbnAtd2hlZWwtY29udGFpbmVyXCI7XG4gIGJvZHkuYXBwZW5kKHVuaXQuZWwsIG1pbi5lbCwgdG8sIG1heC5lbCk7XG4gIGNvbnN0IHVuc3BlY2lmaWVkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICB1bnNwZWNpZmllZC50eXBlID0gXCJjaGVja2JveFwiO1xuICB1bnNwZWNpZmllZC5jaGVja2VkID0gY3VycmVudC5pbmNsdWRlVW5zcGVjaWZpZWQ7XG4gIGNvbnN0IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpXCIpO1xuICBib3guY2xhc3NOYW1lID0gY2hlY2tJY29uPy5jbGFzc05hbWUgPz8gXCJmYSBmYS1zcXVhcmVcIjtcbiAgY29uc3Qgc3luY0JveCA9ICgpOiB2b2lkID0+IHtcbiAgICBib3guY2xhc3NMaXN0LnRvZ2dsZShcImZhLWNoZWNrLXNxdWFyZVwiLCB1bnNwZWNpZmllZC5jaGVja2VkKTtcbiAgICBib3guY2xhc3NMaXN0LnRvZ2dsZShcImZhLXNxdWFyZVwiLCAhdW5zcGVjaWZpZWQuY2hlY2tlZCk7XG4gICAgYm94LmNsYXNzTGlzdC50b2dnbGUoXCJjaGVja2VkXCIsIHVuc3BlY2lmaWVkLmNoZWNrZWQpO1xuICB9O1xuICB1bnNwZWNpZmllZC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHN5bmNCb3gpO1xuICBzeW5jQm94KCk7XG4gIGNvbnN0IHVuc3BlY2lmaWVkTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIik7XG4gIHVuc3BlY2lmaWVkTGFiZWwuY2xhc3NOYW1lID0gXCJzbnAtZmx5b3V0LW9wdGlvblwiO1xuICB1bnNwZWNpZmllZExhYmVsLmFwcGVuZChcbiAgICB1bnNwZWNpZmllZCxcbiAgICBib3gsXG4gICAgYCBJbmNsdWRlIHByb2ZpbGVzIHdpdGggbm8gJHt0aXRsZS50b0xvd2VyQ2FzZSgpfSBsaXN0ZWRgLFxuICApO1xuXG4gIHNoZWV0LmFwcGVuZChoZWFkZXIsIHVuc3BlY2lmaWVkTGFiZWwsIGJvZHkpO1xuXG4gIGJhY2tkcm9wLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBiYWNrZHJvcCkge1xuICAgICAgY2xvc2UoKTtcbiAgICB9XG4gIH0pO1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgW1wiY2xpY2tcIiwgXCJtb3VzZWRvd25cIiwgXCJwb2ludGVyZG93blwiLCBcInRvdWNoc3RhcnRcIl0pIHtcbiAgICBiYWNrZHJvcC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIChldmVudCkgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkpO1xuICB9XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIG9uS2V5KTtcblxuICAoaG9zdCA/PyBkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChiYWNrZHJvcCk7XG4gIGZvciAoY29uc3Qgd2hlZWwgb2YgW3VuaXQsIG1pbiwgbWF4XSkge1xuICAgIHdoZWVsLnJldmVhbCgpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgb3BlbkNob2ljZUZseW91dCA9IChcbiAgdGl0bGU6IHN0cmluZyxcbiAgaXRlbXM6IChtb2RlOiBzdHJpbmcpID0+IFdoZWVsSXRlbTxudW1iZXI+W10sXG4gIGN1cnJlbnQ6IG51bWJlciB8IG51bGwsXG4gIG9uRG9uZTogKHZhbHVlOiBudW1iZXIsIG1vZGU6IHN0cmluZykgPT4gdm9pZCxcbiAgaG9zdD86IEVsZW1lbnQgfCBudWxsLFxuICBtb2Rlcz86IHsgY3VycmVudDogc3RyaW5nOyBjaG9pY2VzOiBXaGVlbEl0ZW08c3RyaW5nPltdIH0sXG4pOiB2b2lkID0+IHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoRkxZT1VUX0lEKT8ucmVtb3ZlKCk7XG5cbiAgY29uc3QgYmFja2Ryb3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBiYWNrZHJvcC5pZCA9IEZMWU9VVF9JRDtcbiAgYmFja2Ryb3AuY2xhc3NOYW1lID0gXCJzbnAtZmx5b3V0LWJhY2tkcm9wXCI7XG4gIGNvbnN0IHNoZWV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgc2hlZXQuY2xhc3NOYW1lID0gXCJzbnAtZmx5b3V0XCI7XG4gIHNoZWV0LnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJkaWFsb2dcIik7XG4gIHNoZWV0LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgYCR7dGl0bGV9OiBNYWtlIGEgU2VsZWN0aW9uYCk7XG4gIGJhY2tkcm9wLmFwcGVuZENoaWxkKHNoZWV0KTtcblxuICBjb25zdCBjbG9zZSA9ICgpOiB2b2lkID0+IHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBvbktleSk7XG4gICAgYmFja2Ryb3AucmVtb3ZlKCk7XG4gIH07XG4gIGNvbnN0IG9uS2V5ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgY2xvc2UoKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGFjdGlvbiA9ICh0ZXh0OiBzdHJpbmcsIHNpZGU6IHN0cmluZywgb25DbGljazogKCkgPT4gdm9pZCk6IEhUTUxFbGVtZW50ID0+IHtcbiAgICBjb25zdCB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgd3JhcC5jbGFzc05hbWUgPSBgc25wLWZseW91dC1hY3Rpb24gJHtzaWRlfWA7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICBidXR0b24udHlwZSA9IFwiYnV0dG9uXCI7XG4gICAgYnV0dG9uLnRleHRDb250ZW50ID0gdGV4dDtcbiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2spO1xuICAgIHdyYXAuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcbiAgICByZXR1cm4gd3JhcDtcbiAgfTtcblxuICBsZXQgbW9kZSA9IG1vZGVzPy5jdXJyZW50ID8/IFwiXCI7XG4gIGNvbnN0IHdoZWVsID0gY3JlYXRlV2hlZWw8bnVtYmVyPihcImNob2ljZVwiLCB0aXRsZSk7XG4gIHdoZWVsLmZpbGwoaXRlbXMobW9kZSksIGN1cnJlbnQgPz8gaXRlbXMobW9kZSlbMF0hLnZhbHVlKTtcblxuICBjb25zdCBoZWFkaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImgxXCIpO1xuICBoZWFkaW5nLnRleHRDb250ZW50ID0gdGl0bGU7XG4gIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGhlYWRlci5jbGFzc05hbWUgPSBcInNucC1mbHlvdXQtaGVhZGVyXCI7XG4gIGhlYWRlci5hcHBlbmQoXG4gICAgYWN0aW9uKFwiQ2FuY2VsXCIsIFwibGVmdFwiLCBjbG9zZSksXG4gICAgaGVhZGluZyxcbiAgICBhY3Rpb24oXCJEb25lXCIsIFwicmlnaHRcIiwgKCkgPT4ge1xuICAgICAgY2xvc2UoKTtcbiAgICAgIG9uRG9uZSh3aGVlbC52YWx1ZSgpLCBtb2RlKTtcbiAgICB9KSxcbiAgKTtcbiAgY29uc3QgbW9kZVJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIG1vZGVSb3cuY2xhc3NOYW1lID0gXCJzbnAtZmx5b3V0LW1vZGVzXCI7XG4gIGNvbnN0IG1vZGVCdXR0b25zID0gKG1vZGVzPy5jaG9pY2VzID8/IFtdKS5tYXAoKGNob2ljZSkgPT4ge1xuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgYnV0dG9uLnR5cGUgPSBcImJ1dHRvblwiO1xuICAgIGJ1dHRvbi5kYXRhc2V0Lm1vZGUgPSBjaG9pY2UudmFsdWU7XG4gICAgYnV0dG9uLnRleHRDb250ZW50ID0gY2hvaWNlLmxhYmVsO1xuICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgbW9kZSA9IGNob2ljZS52YWx1ZTtcbiAgICAgIHN5bmNNb2RlcygpO1xuICAgICAgd2hlZWwuZmlsbChpdGVtcyhtb2RlKSwgd2hlZWwudmFsdWUoKSk7XG4gICAgICB3aGVlbC5yZXZlYWwoKTtcbiAgICB9KTtcbiAgICBtb2RlUm93LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgcmV0dXJuIGJ1dHRvbjtcbiAgfSk7XG4gIGNvbnN0IHN5bmNNb2RlcyA9ICgpOiB2b2lkID0+IHtcbiAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiBtb2RlQnV0dG9ucykge1xuICAgICAgY29uc3Qgb24gPSBidXR0b24uZGF0YXNldC5tb2RlID09PSBtb2RlO1xuICAgICAgYnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIiwgb24pO1xuICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtcHJlc3NlZFwiLCBTdHJpbmcob24pKTtcbiAgICB9XG4gIH07XG4gIHN5bmNNb2RlcygpO1xuICB3aGVlbC5lbC5xdWVyeVNlbGVjdG9yKFwicFwiKT8ucmVtb3ZlKCk7XG4gIGNvbnN0IHByb21wdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICBwcm9tcHQuY2xhc3NOYW1lID0gXCJzbnAtZmx5b3V0LXByb21wdFwiO1xuICBwcm9tcHQudGV4dENvbnRlbnQgPSBcIlNlbGVjdCBhIHZhbHVlOlwiO1xuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgYm9keS5jbGFzc05hbWUgPSBcInNucC13aGVlbC1jb250YWluZXJcIjtcbiAgYm9keS5hcHBlbmQod2hlZWwuZWwpO1xuICBzaGVldC5hcHBlbmQoaGVhZGVyLCAuLi4obW9kZUJ1dHRvbnMubGVuZ3RoID8gW21vZGVSb3ddIDogW10pLCBwcm9tcHQsIGJvZHkpO1xuXG4gIGJhY2tkcm9wLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBiYWNrZHJvcCkge1xuICAgICAgY2xvc2UoKTtcbiAgICB9XG4gIH0pO1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgW1wiY2xpY2tcIiwgXCJtb3VzZWRvd25cIiwgXCJwb2ludGVyZG93blwiLCBcInRvdWNoc3RhcnRcIl0pIHtcbiAgICBiYWNrZHJvcC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIChldmVudCkgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkpO1xuICB9XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIG9uS2V5KTtcblxuICAoaG9zdCA/PyBkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChiYWNrZHJvcCk7XG4gIHdoZWVsLnJldmVhbCgpO1xufTtcbiIsICIvLyBBbGwgdGhlIHNuaWZmaWVzLmNvbSBzZWxlY3RvcnMgdGhhdCB3ZSBkZXBlbmQgb25cbmV4cG9ydCBjb25zdCBTTklGRklFU19TRUxFQ1RPUlMgPSB7XG4gIC8qKiBNYXJrZXIgY29udGFpbmVyIGNhcnJ5aW5nIGRhdGEtd2l0aGluLXJhZGl1cyAqL1xuICBNQVJLRVJfQ09OVEFJTkVSX1NFTEVDVE9SOiAnW2RhdGEtdGVzdGlkPVwibWFya2VyVXNlckNvbnRhaW5lclwiXScsXG4gIC8qKiBNYXAgbWFya2VyIGF2YXRhciBpbWFnZSBcdTIwMTQgY2xpY2sgdGFyZ2V0IHRoYXQgcmVzb2x2ZXMgYSBwcm9maWxlJ3MgdXNlciBpZC4gKi9cbiAgTUFSS0VSX0FWQVRBUl9TRUxFQ1RPUjogJ1tkYXRhLXRlc3RpZD1cImN2LW1hcmtlci1hdmF0YXItaW1hZ2VcIl0nLFxuICAvKiogUHJvZmlsZSBwYW5lbCByb290LCBob3N0cyB0aGUgbmFtZSBsYWJlbCBhbmQgcGluIGJ1dHRvbi4gKi9cbiAgQVBQX1NDUkVFTl9TRUxFQ1RPUjogXCIjYXBwLXNjcmVlblwiLFxuICAvKiogQ3J1aXNlciBuYW1lIGxhYmVsIGluc2lkZSB0aGUgb3BlbiBwcm9maWxlIHBhbmVsLiAqL1xuICBOQU1FX0xBQkVMX1NFTEVDVE9SOiAnW2RhdGEtdGVzdGlkPVwiY3J1aXNlck5hbWVMYWJlbFwiXScsXG4gIC8qKiBQaW4tdXNlciBidXR0b24gXHUyMDE0IGl0cyBhcHBlYXJhbmNlIHNpZ25hbHMgYSAocmUpcmVuZGVyZWQgcHJvZmlsZSBwYW5lbC4gKi9cbiAgUElOX0JVVFRPTl9TRUxFQ1RPUjogJ1tkYXRhLXRlc3RpZD1cInBpblVzZXJCdXR0b25cIl0nLFxuICAvKiogUHJvZmlsZSB0aHJlZS1kb3Qgb3B0aW9ucyBtZW51IChvbmx5IGluIHRoZSBET00gd2hpbGUgb3BlbikgXHUyMDE0IHRoZSByZXBvcnQgYnV0dG9uIG1vdW50cyBpbnNpZGUgaXQuICovXG4gIFBST0ZJTEVfT1BUSU9OU19NRU5VX1NFTEVDVE9SOiAnW2RhdGEtdGVzdGlkPVwicHJvZmlsZU9wdGlvbnNDb250YWluZXJcIl0nLFxuICAvKiogTWFwJ3Mgb3duIHRyYXZlbC1tb2RlL2hpZGUtbWUvZmluZC1tZSBpY29uIHJvdyBcdTIwMTQgdGhlIEZBQidzIHByZWZlcnJlZCBtb3VudCB0YXJnZXQuICovXG4gIElDT05fSE9MREVSX1JJR0hUX0JPVFRPTV9TRUxFQ1RPUjogJ1tkYXRhLXRlc3RpZD1cImljb25Ib2xkZXJSaWdodEJvdHRvbVwiXScsXG4gIC8qKiBDb25maXJtIGJ1dHRvbiBpbiBTbmlmZmllcycgb3duIFRyYXZlbCBNb2RlIFVJIFx1MjAxNCBjbGlja2luZyBpdCBQVVRzIHRoZSBwaWNrZWQgcGluIHRvIHRoZSBsb2NhdGlvbiBBUEkuICovXG4gIFRSQVZFTF9IRVJFX0JVVFRPTl9TRUxFQ1RPUjogJ1tkYXRhLXRlc3RpZD1cInRyYXZlbEhlcmVCdXR0b25cIl0nLFxuICAvKiogVHJhdmVsIE1vZGUncyBjaXR5IHNlYXJjaCBib3ggXHUyMDE0IGFuY2hvcnMgdGhlIHBlbmRpbmctY2FwdHVyZSBzdGF0dXMgbWVzc2FnZSBuZXh0IHRvIGl0LiAqL1xuICBDSVRJRVNfSU5QVVRfU0VMRUNUT1I6ICdbZGF0YS10ZXN0aWQ9XCJjaXRpZXNJbnB1dFwiXScsXG4gIC8qKiBcIlByb2ZpbGUgVHlwZVwiIHJvdyBpbiB0aGUgTWFwIExheWVycyBcdTIxOTIgQ3J1aXNlcnMgZmlsdGVyIG1lbnUgKG9ubHkgaW4gdGhlIERPTSB3aGlsZSBvcGVuKSBcdTIwMTQgb3VyIGZpbHRlciByb3dzIG1vdW50IGFmdGVyIGl0LiAqL1xuICBQUk9GSUxFX1RZUEVfRklMVEVSX0xBQkVMX1NFTEVDVE9SOiAnbGFiZWxbZm9yPVwiSVNfUFJPRklMRV9UWVBFXCJdJyxcbiAgLyoqIFwiQ3J1aXNpbmcgTm93XCIgcm93IGluIHRoZSBzYW1lIG1lbnUgXHUyMDE0IG91ciBMYXN0IE9ubGluZSByb3cgbW91bnRzIGFmdGVyIGl0LiAqL1xuICBDT05ORUNURURfTk9XX0ZJTFRFUl9MQUJFTF9TRUxFQ1RPUjogJ2xhYmVsW2Zvcj1cIkNPTk5FQ1RFRF9OT1dcIl0nLFxuICAvKiogXCJFbmRvd21lbnRcIiBsaW5lIHVuZGVyIENydWlzZXIgU3RhdHMgaW4gdGhlIHN0YXRzIG1lbnUuIEhlaWdodCBhbmQgV2VpZ2h0IGxpbmVzIG1vdW50IGFmdGVyIGl0LiAqL1xuICBFTkRPV01FTlRfRklMVEVSX0xBQkVMX1NFTEVDVE9SOiAnbGFiZWxbZm9yPVwic3RhdHMuZW5kb3dtZW50XCJdJyxcbiAgLyoqIFNuaWZmaWVzJyBvd24gXCJIaWRlIFBob3RvXCIgdG9vbHRpcCBidXR0b24gb24gYSBzZW50IGNoYXQgcGhvdG8gKHBheXdhbGxlZCBmb3IgZnJlZSB1c2VycykuICovXG4gIEhJREVfUEhPVE9fQlVUVE9OX1NFTEVDVE9SOiAnW2FyaWEtbGFiZWw9XCJIaWRlIFBob3RvXCJdJyxcbiAgLyoqIEEgcGhvdG8gbWVzc2FnZSBpbiBhIGNoYXQuIEhvbGRzIHRoZSBwaG90byBjb250YWluZXIsIHdob3NlIGlkIGlzIGBtZXNzYWdlLTxtZXNzYWdlIF9pZD5gLiAqL1xuICBQSE9UT19NRVNTQUdFX1NFTEVDVE9SOiBcImNoYXQtcGhvdG8tbWVzc2FnZVwiLFxuICAvKiogXCJIaWRlIEFsbCBNeSBQaG90b3NcIiBpbiB0aGUgcHJvZmlsZSBvcHRpb25zIG1lbnUgXHUyMDE0IHBheXdhbGxlZCBmb3IgZnJlZSB1c2Vycy4gKi9cbiAgSElERV9BTExfUEhPVE9TX0JVVFRPTl9TRUxFQ1RPUjogJ1tkYXRhLXRlc3RpZD1cImhpZGVBbGxQaG90b3NCdXR0b25cIl0nLFxuICAvKiogXCJVbmhpZGUgQWxsIE15IFBob3Rvc1wiIGluIHRoZSBzYW1lIG1lbnUuICovXG4gIFVOSElERV9BTExfUEhPVE9TX0JVVFRPTl9TRUxFQ1RPUjogJ1tkYXRhLXRlc3RpZD1cInVuaGlkZUFsbFBob3Rvc0J1dHRvblwiXScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBTbmlmZmllc1NlbGVjdG9yTmFtZSA9IGtleW9mIHR5cGVvZiBTTklGRklFU19TRUxFQ1RPUlM7XG5cbmV4cG9ydCBjb25zdCB7XG4gIE1BUktFUl9DT05UQUlORVJfU0VMRUNUT1IsXG4gIE1BUktFUl9BVkFUQVJfU0VMRUNUT1IsXG4gIEFQUF9TQ1JFRU5fU0VMRUNUT1IsXG4gIE5BTUVfTEFCRUxfU0VMRUNUT1IsXG4gIFBJTl9CVVRUT05fU0VMRUNUT1IsXG4gIFBST0ZJTEVfT1BUSU9OU19NRU5VX1NFTEVDVE9SLFxuICBJQ09OX0hPTERFUl9SSUdIVF9CT1RUT01fU0VMRUNUT1IsXG4gIFRSQVZFTF9IRVJFX0JVVFRPTl9TRUxFQ1RPUixcbiAgQ0lUSUVTX0lOUFVUX1NFTEVDVE9SLFxuICBQUk9GSUxFX1RZUEVfRklMVEVSX0xBQkVMX1NFTEVDVE9SLFxuICBDT05ORUNURURfTk9XX0ZJTFRFUl9MQUJFTF9TRUxFQ1RPUixcbiAgRU5ET1dNRU5UX0ZJTFRFUl9MQUJFTF9TRUxFQ1RPUixcbiAgSElERV9QSE9UT19CVVRUT05fU0VMRUNUT1IsXG4gIFBIT1RPX01FU1NBR0VfU0VMRUNUT1IsXG4gIEhJREVfQUxMX1BIT1RPU19CVVRUT05fU0VMRUNUT1IsXG4gIFVOSElERV9BTExfUEhPVE9TX0JVVFRPTl9TRUxFQ1RPUixcbn0gPSBTTklGRklFU19TRUxFQ1RPUlM7XG4iLCAiaW1wb3J0IHR5cGUgeyBQcm9maWxlRmlsdGVyc01lbnVDb250cmFjdCB9IGZyb20gXCIuL2NvbnRyYWN0cy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4vbG9nLmpzXCI7XG5pbXBvcnQgRklMVEVSX01FTlVfQ1NTIGZyb20gXCIuL2ZpbHRlci1tZW51LmNzc1wiO1xuaW1wb3J0IHtcbiAgY2xvY2tUZXh0LFxuICBHRU5ERVJTLFxuICBIRUlHSFRfT1BUSU9OUyxcbiAgV0VJR0hUX09QVElPTlMsXG4gIGFsbG93ZWRHZW5kZXJzLFxuICBPTkxJTkVfTUlOVVRFUyxcbiAgb25saW5lS2V5LFxuICBvbmxpbmVMYWJlbCxcbiAgb25saW5lU2luY2VMYWJlbCxcbiAgcmFuZ2VLZXksXG4gIHJhbmdlTGFiZWwsXG4gIHR5cGUgR2VuZGVyLFxuICB0eXBlIFByb2ZpbGVGaWx0ZXJzLFxuICB0eXBlIFJhbmdlRmlsdGVyLFxuICB0eXBlIFJhbmdlT3B0aW9ucyxcbn0gZnJvbSBcIi4vcHJvZmlsZS1maWx0ZXIuanNcIjtcbmltcG9ydCB7IG9wZW5DaG9pY2VGbHlvdXQsIG9wZW5SYW5nZUZseW91dCB9IGZyb20gXCIuL3JhbmdlLWZseW91dC11aS5qc1wiO1xuaW1wb3J0IHtcbiAgQ09OTkVDVEVEX05PV19GSUxURVJfTEFCRUxfU0VMRUNUT1IsXG4gIEVORE9XTUVOVF9GSUxURVJfTEFCRUxfU0VMRUNUT1IsXG4gIFBST0ZJTEVfVFlQRV9GSUxURVJfTEFCRUxfU0VMRUNUT1IsXG59IGZyb20gXCIuL3NuaWZmaWVzLXNlbGVjdG9ycy5qc1wiO1xuXG5jb25zdCBTVFlMRV9JRCA9IFwic25wLWZpbHRlci1tZW51LXN0eWxlXCI7XG5cbmNvbnN0IFBBR0VfTE9BREVEX0FUID0gRGF0ZS5ub3coKTtcblxuaW50ZXJmYWNlIE1vdW50ZWRSb3cge1xuICByb290OiBIVE1MRWxlbWVudDtcbiAgLyoqIFJlLXJlYWRzIHRoZSBmaWx0ZXJzIGludG8gdGhlIHJvdy4gYG5lZWRzUmVsb2FkYDogdGhlIFwiUmVsb2FkIHRvIGFwcGx5XCIgYnV0dG9uIGlzIHNob3dpbmcuICovXG4gIHN5bmM6IChuZWVkc1JlbG9hZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgLyoqIHBsYWNlIHRoZSByb3cncyBcIlJlbG9hZCB0byBhcHBseVwiIGJ1dHRvbiAqL1xuICBwbGFjZUFwcGx5OiAoYXBwbHk6IEhUTUxFbGVtZW50KSA9PiB2b2lkO1xufVxuXG4vKiogT25lIHJvdyB3ZSBhZGQgdG8gU25pZmZpZXMnIENydWlzZXJzIGZpbHRlciBtZW51LiBBZGQgYW4gZW50cnkgdG8gUk9XUyBmb3IgYSBuZXcgZmlsdGVyLiAqL1xuaW50ZXJmYWNlIFJvdyB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgU25pZmZpZXMgcm93IHRoaXMgb25lIGlzIGNsb25lZCBmcm9tIGFuZCBwbGFjZWQgYWZ0ZXI7IG51bGwgd2hpbGUgaXQgaXNuJ3Qgb24gc2NyZWVuLiAqL1xuICBhbmNob3I6ICgpID0+IEVsZW1lbnQgfCBudWxsO1xuICAvKiogV2hhdCB0aGUgcm93IGN1cnJlbnRseSBmaWx0ZXJzIGZvciBcdTIwMTQgYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiBhdCBwYWdlIGxvYWQgbmVlZHMgYSByZWxvYWQuICovXG4gIGtleTogKGZpbHRlcnM6IFByb2ZpbGVGaWx0ZXJzKSA9PiBzdHJpbmc7XG4gIC8qKiBDbG9uZXMgYGFuY2hvcmAgaW50byBvdXIgcm93LiBJdHMgY29udHJvbHMgZWRpdCBgZmlsdGVyc2AgaW4gcGxhY2UsIHRoZW4gY2FsbCBgY2hhbmdlZGAuICovXG4gIGJ1aWxkOiAoYW5jaG9yOiBFbGVtZW50LCBmaWx0ZXJzOiBQcm9maWxlRmlsdGVycywgY2hhbmdlZDogKCkgPT4gdm9pZCkgPT4gTW91bnRlZFJvdyB8IG51bGw7XG59XG5cbmNvbnN0IHN0cmlwVGVzdElkcyA9IChyb290OiBFbGVtZW50KTogdm9pZCA9PiB7XG4gIGZvciAoY29uc3QgZWwgb2Ygcm9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdGVzdGlkXVwiKSkge1xuICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtdGVzdGlkXCIpO1xuICB9XG59O1xuXG4vLyBcdTI1MDBcdTI1MDAgR2VuZGVyOiBhIHN3aXRjaCByb3cgbGlrZSBcIlByb2ZpbGUgVHlwZVwiLCB3aXRoIG9uZSBvbi9vZmYgYnV0dG9uIHBlciBnZW5kZXIgXHUyNTAwXHUyNTAwXG5cbmNvbnN0IEdFTkRFUl9ST1dfSUQgPSBcInNucC1nZW5kZXItZmlsdGVyXCI7XG5cbmNvbnN0IEdFTkRFUl9MQUJFTFM6IFJlY29yZDxHZW5kZXIsIHN0cmluZz4gPSB7XG4gIG1hbGU6IFwiTWFsZVwiLFxuICBmZW1hbGU6IFwiRmVtYWxlXCIsXG4gIG5vbmJpbmFyeTogXCJOb25iaW5hcnlcIixcbiAgdW5kZWZpbmVkOiBcIk5vdCBzcGVjaWZpZWRcIixcbn07XG5cbmNvbnN0IGJ1aWxkR2VuZGVyUm93ID0gKFxuICBhbmNob3I6IEVsZW1lbnQsXG4gIGZpbHRlcnM6IFByb2ZpbGVGaWx0ZXJzLFxuICBjaGFuZ2VkOiAoKSA9PiB2b2lkLFxuKTogTW91bnRlZFJvdyB8IG51bGwgPT4ge1xuICAvLyBDbG9uaW5nIFNuaWZmaWVzIFwiUHJvZmlsZSBUeXBlXCIgcm93IGNhcnJpZXMgaXRzIChBbmd1bGFyLXNjb3BlZCkgc3R5bGluZyBhbG9uZy5cbiAgY29uc3Qgcm9vdCA9IGFuY2hvci5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gIGNvbnN0IGhlYWRlciA9IHJvb3QucXVlcnlTZWxlY3RvcihcIi5saXN0LWl0ZW0tbGV2ZWwtMlwiKTtcbiAgY29uc3QgbGFiZWwgPSByb290LnF1ZXJ5U2VsZWN0b3IoXCJsYWJlbFwiKTtcbiAgY29uc3QgdGl0bGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoXCJwXCIpO1xuICBjb25zdCB0b2dnbGUgPSByb290LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oJy50cmFpbGluZyBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgY29uc3Qgb3B0aW9uc0NvbnRhaW5lciA9IHJvb3QucXVlcnlTZWxlY3RvcihcIi5vcHRpb25zLWNvbnRhaW5lclwiKTtcbiAgaWYgKCFsYWJlbCB8fCAhdGl0bGUgfHwgIXRvZ2dsZSB8fCAhb3B0aW9uc0NvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJvb3QuY2xhc3NMaXN0LnJlbW92ZShcImxhc3RcIik7XG4gIHN0cmlwVGVzdElkcyhyb290KTtcblxuICB0b2dnbGUuaWQgPSBgJHtHRU5ERVJfUk9XX0lEfS1lbmFibGVkYDtcbiAgdG9nZ2xlLmRpc2FibGVkID0gZmFsc2U7XG4gIGxhYmVsLmh0bWxGb3IgPSB0b2dnbGUuaWQ7XG4gIGxhYmVsLnF1ZXJ5U2VsZWN0b3IoXCJpXCIpPy5jbGFzc0xpc3QucmVwbGFjZShcImZhLXVzZXJcIiwgXCJmYS12ZW51cy1tYXJzXCIpO1xuICB0aXRsZS50ZXh0Q29udGVudCA9IFwiIEdlbmRlclwiO1xuICB0b2dnbGUuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgZmlsdGVycy5nZW5kZXIuZW5hYmxlZCA9IHRvZ2dsZS5jaGVja2VkO1xuICAgIGNoYW5nZWQoKTtcbiAgfSk7XG5cbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGJvZHkuY2xhc3NOYW1lID0gXCJzbnAtZmlsdGVyLWJvZHlcIjtcbiAgY29uc3QgYnV0dG9ucyA9IEdFTkRFUlMubWFwKChnZW5kZXIpID0+IHtcbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICAgIGJ1dHRvbi50eXBlID0gXCJidXR0b25cIjtcbiAgICBidXR0b24uY2xhc3NOYW1lID0gXCJzbnAtZ2VuZGVyLW9wdGlvblwiO1xuICAgIGJ1dHRvbi5kYXRhc2V0LmdlbmRlciA9IGdlbmRlcjtcbiAgICBidXR0b24udGV4dENvbnRlbnQgPSBHRU5ERVJfTEFCRUxTW2dlbmRlcl07XG4gICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGdlbmRlcnMgfSA9IGZpbHRlcnMuZ2VuZGVyO1xuICAgICAgaWYgKCFnZW5kZXJzLmluY2x1ZGVzKGdlbmRlcikpIHtcbiAgICAgICAgZmlsdGVycy5nZW5kZXIuZ2VuZGVycyA9IEdFTkRFUlMuZmlsdGVyKChnKSA9PiBnID09PSBnZW5kZXIgfHwgZ2VuZGVycy5pbmNsdWRlcyhnKSk7XG4gICAgICB9IGVsc2UgaWYgKGdlbmRlcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBBdCBsZWFzdCBvbmUgZ2VuZGVyIGhhcyB0byBzdGF5IHNlbGVjdGVkLlxuICAgICAgICBmaWx0ZXJzLmdlbmRlci5nZW5kZXJzID0gZ2VuZGVycy5maWx0ZXIoKGcpID0+IGcgIT09IGdlbmRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgYm9keS5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHJldHVybiBidXR0b247XG4gIH0pO1xuICBvcHRpb25zQ29udGFpbmVyLnJlcGxhY2VDaGlsZHJlbihib2R5KTtcblxuICByZXR1cm4ge1xuICAgIHJvb3QsXG4gICAgcGxhY2VBcHBseTogKGFwcGx5KSA9PiBib2R5LmFwcGVuZENoaWxkKGFwcGx5KSxcbiAgICBzeW5jOiAoKSA9PiB7XG4gICAgICBjb25zdCB7IGVuYWJsZWQsIGdlbmRlcnMgfSA9IGZpbHRlcnMuZ2VuZGVyO1xuICAgICAgdG9nZ2xlLmNoZWNrZWQgPSBlbmFibGVkO1xuICAgICAgaGVhZGVyPy5jbGFzc0xpc3QudG9nZ2xlKFwiYWN0aXZlXCIsIGVuYWJsZWQpO1xuICAgICAgYm9keS5jbGFzc0xpc3QudG9nZ2xlKFwic25wLWZpbHRlci1vZmZcIiwgIWVuYWJsZWQpO1xuICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgYnV0dG9ucykge1xuICAgICAgICBjb25zdCBvbiA9IGdlbmRlcnMuaW5jbHVkZXMoYnV0dG9uLmRhdGFzZXQuZ2VuZGVyIGFzIEdlbmRlcik7XG4gICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKFwiYWN0aXZlXCIsIG9uKTtcbiAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtcHJlc3NlZFwiLCBTdHJpbmcob24pKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufTtcblxuY29uc3QgT05MSU5FX1JPV19JRCA9IFwic25wLW9ubGluZS1maWx0ZXJcIjtcblxuY29uc3QgYnVpbGRPbmxpbmVSb3cgPSAoXG4gIGFuY2hvcjogRWxlbWVudCxcbiAgZmlsdGVyczogUHJvZmlsZUZpbHRlcnMsXG4gIGNoYW5nZWQ6ICgpID0+IHZvaWQsXG4pOiBNb3VudGVkUm93IHwgbnVsbCA9PiB7XG4gIC8vIENsb25pbmcgXCJDcnVpc2luZyBOb3dcIiBjYXJyaWVzIGl0cyBzdHlsaW5nXG4gIGNvbnN0IHJvb3QgPSBhbmNob3IuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICBjb25zdCBoZWFkZXIgPSByb290LnF1ZXJ5U2VsZWN0b3IoXCIubGlzdC1pdGVtLWxldmVsLTJcIik7XG4gIGNvbnN0IHRpdGxlTGluZSA9IHJvb3QucXVlcnlTZWxlY3RvcihcIi5kZXRhaWxzLXRpdGxlXCIpO1xuICBjb25zdCBsYWJlbCA9IHJvb3QucXVlcnlTZWxlY3RvcihcImxhYmVsXCIpO1xuICBjb25zdCBpY29uID0gbGFiZWw/LnF1ZXJ5U2VsZWN0b3IoXCJpXCIpO1xuICBjb25zdCB0aXRsZSA9IHJvb3QucXVlcnlTZWxlY3RvcihcInBcIik7XG4gIGNvbnN0IHRvZ2dsZSA9IHJvb3QucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PignLnRyYWlsaW5nIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScpO1xuICBjb25zdCB0cmFpbGluZyA9IHJvb3QucXVlcnlTZWxlY3RvcihcIi50cmFpbGluZ1wiKTtcbiAgY29uc3Qgc3dpdGNoTGFiZWwgPSB0b2dnbGU/LmNsb3Nlc3QoXCJsYWJlbFwiKTtcbiAgaWYgKCFoZWFkZXIgfHwgIXRpdGxlTGluZSB8fCAhbGFiZWwgfHwgIWljb24gfHwgIXRpdGxlIHx8ICF0b2dnbGUgfHwgIXRyYWlsaW5nIHx8ICFzd2l0Y2hMYWJlbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHN0cmlwVGVzdElkcyhyb290KTtcblxuICB0b2dnbGUuaWQgPSBgJHtPTkxJTkVfUk9XX0lEfS1lbmFibGVkYDtcbiAgdG9nZ2xlLmRpc2FibGVkID0gZmFsc2U7XG4gIGxhYmVsLnJlbW92ZUF0dHJpYnV0ZShcImZvclwiKTtcbiAgaWNvbi5jbGFzc0xpc3QucmVwbGFjZShcImZhLXBsdWdcIiwgXCJmYS1jbG9ja1wiKTtcbiAgdGl0bGUudGV4dENvbnRlbnQgPSBcIiBPbmxpbmUgQWZ0ZXJcIjtcbiAgLy8gVGhlIGN1dG9mZiwgdW5kZXIgdGhlIHRpdGxlLlxuICBjb25zdCBzaW5jZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICBzaW5jZS5jbGFzc05hbWUgPSBcInNucC1vbmxpbmUtc2luY2VcIjtcbiAgdGl0bGVMaW5lLmFmdGVyKHNpbmNlKTtcblxuICBjb25zdCBvcGVuUGlja2VyID0gKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgb3BlbkNob2ljZUZseW91dChcbiAgICAgIFwiT25saW5lIEFmdGVyXCIsXG4gICAgICAvLyBTdGF0aWMgc2hvd3MgdGhlIHRpbWUgZWFjaCBvcHRpb24gd29ya3Mgb3V0IHRvIG5vdy5cbiAgICAgIChtb2RlKSA9PlxuICAgICAgICBPTkxJTkVfTUlOVVRFUy5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgbW9kZSA9PT0gXCJzdGF0aWNcIlxuICAgICAgICAgICAgICA/IGAke29ubGluZUxhYmVsKHZhbHVlKX0gKCR7Y2xvY2tUZXh0KG5vdyAtIHZhbHVlICogNjBfMDAwLCBub3cpfSlgXG4gICAgICAgICAgICAgIDogb25saW5lTGFiZWwodmFsdWUpLFxuICAgICAgICB9KSksXG4gICAgICBmaWx0ZXJzLm9ubGluZS5taW51dGVzLFxuICAgICAgKG1pbnV0ZXMsIG1vZGUpID0+IHtcbiAgICAgICAgZmlsdGVycy5vbmxpbmUgPSB7XG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBtaW51dGVzLFxuICAgICAgICAgIHBpY2tlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgIC4uLihtb2RlID09PSBcInN0YXRpY1wiICYmIHsgY3V0b2ZmOiBEYXRlLm5vdygpIC0gbWludXRlcyAqIDYwXzAwMCB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgY2hhbmdlZCgpO1xuICAgICAgfSxcbiAgICAgIHJvb3QuY2xvc2VzdChcInNtYXJ0LXNlbGVjdC1maWx0ZXJcIiksXG4gICAgICB7XG4gICAgICAgIGN1cnJlbnQ6IGZpbHRlcnMub25saW5lLmN1dG9mZiA9PT0gdW5kZWZpbmVkID8gXCJyb2xsaW5nXCIgOiBcInN0YXRpY1wiLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgeyB2YWx1ZTogXCJyb2xsaW5nXCIsIGxhYmVsOiBcIlJvbGxpbmdcIiB9LFxuICAgICAgICAgIHsgdmFsdWU6IFwic3RhdGljXCIsIGxhYmVsOiBcIlN0YXRpY1wiIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICk7XG4gIH07XG5cbiAgdG9nZ2xlLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgIGlmIChmaWx0ZXJzLm9ubGluZS5taW51dGVzID09PSBudWxsKSB7XG4gICAgICB0b2dnbGUuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgb3BlblBpY2tlcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaWx0ZXJzLm9ubGluZS5lbmFibGVkID0gdG9nZ2xlLmNoZWNrZWQ7XG4gICAgY2hhbmdlZCgpO1xuICB9KTtcblxuICBsYWJlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBvcGVuUGlja2VyKCk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcm9vdCxcbiAgICBwbGFjZUFwcGx5OiAoYXBwbHkpID0+IHRyYWlsaW5nLmFwcGVuZENoaWxkKGFwcGx5KSxcbiAgICBzeW5jOiAobmVlZHNSZWxvYWQpID0+IHtcbiAgICAgIGNvbnN0IHsgZW5hYmxlZCwgbWludXRlcyB9ID0gZmlsdGVycy5vbmxpbmU7XG4gICAgICBjb25zdCBvbiA9IGVuYWJsZWQgJiYgbWludXRlcyAhPT0gbnVsbDtcbiAgICAgIC8vIFNvbWV0aGluZyB0byBhcHBseTogXCJSZWxvYWQgdG8gYXBwbHlcIiBzdGFuZHMgaW4gZm9yIHRoZSBzd2l0Y2guXG4gICAgICBzd2l0Y2hMYWJlbC5zdHlsZS5kaXNwbGF5ID0gbmVlZHNSZWxvYWQgPyBcIm5vbmVcIiA6IFwiXCI7XG4gICAgICB0b2dnbGUuY2hlY2tlZCA9IG9uO1xuICAgICAgaGVhZGVyLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIiwgb24pO1xuICAgICAgLy8gVGhlIGFwcGxpZWQgY3V0b2ZmIGlzIGZpeGVkIGF0IHBhZ2UgbG9hZDsgYSBwZW5kaW5nIHBpY2sgY291bnRzIGJhY2sgZnJvbSB3aGVuIGl0IHdhcyBtYWRlLlxuICAgICAgY29uc3QgZnJvbSA9IG5lZWRzUmVsb2FkID8gKGZpbHRlcnMub25saW5lLnBpY2tlZEF0ID8/IERhdGUubm93KCkpIDogUEFHRV9MT0FERURfQVQ7XG4gICAgICBjb25zdCB7IGN1dG9mZiB9ID0gZmlsdGVycy5vbmxpbmU7XG4gICAgICBzaW5jZS50ZXh0Q29udGVudCA9ICFvblxuICAgICAgICA/IFwiXCJcbiAgICAgICAgOiBjdXRvZmYgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gb25saW5lU2luY2VMYWJlbChtaW51dGVzLCBmcm9tKVxuICAgICAgICAgIDogYENydWlzZXJzIG9ubGluZSBhZnRlciAke2Nsb2NrVGV4dChjdXRvZmYsIERhdGUubm93KCkpfWA7XG4gICAgICBzaW5jZS5zdHlsZS5kaXNwbGF5ID0gb24gPyBcIlwiIDogXCJub25lXCI7XG4gICAgfSxcbiAgfTtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMCBIZWlnaHQgLyB3ZWlnaHQgXHUyNTAwXHUyNTAwXG5cbmNvbnN0IGJ1aWxkU3RhdFJvdyA9XG4gICh0aXRsZTogc3RyaW5nLCBwaWNrOiAoZmlsdGVyczogUHJvZmlsZUZpbHRlcnMpID0+IFJhbmdlRmlsdGVyLCBvcHRpb25zOiBSYW5nZU9wdGlvbnMpID0+XG4gIChhbmNob3I6IEVsZW1lbnQsIGZpbHRlcnM6IFByb2ZpbGVGaWx0ZXJzLCBjaGFuZ2VkOiAoKSA9PiB2b2lkKTogTW91bnRlZFJvdyB8IG51bGwgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBhbmNob3IuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGdyb3VwID0gcm9vdC5xdWVyeVNlbGVjdG9yKFwiLm1lbnUtaXRlbS1ncm91cFwiKTtcbiAgICBjb25zdCBpdGVtID0gcm9vdC5xdWVyeVNlbGVjdG9yKFwiLmxpc3QtaXRlbVwiKTtcbiAgICBjb25zdCBsYWJlbCA9IHJvb3QucXVlcnlTZWxlY3RvcihcImxhYmVsXCIpO1xuICAgIGNvbnN0IGNoZWNrYm94ID0gbGFiZWw/LnF1ZXJ5U2VsZWN0b3IoXCJpXCIpO1xuICAgIGNvbnN0IG5hbWUgPSBsYWJlbD8ucXVlcnlTZWxlY3RvcihcInNwYW5cIik7XG4gICAgY29uc3Qgc3RhdEJ1dHRvbiA9IHJvb3QucXVlcnlTZWxlY3RvcihcIi5zdGF0LWJ1dHRvblwiKTtcbiAgICBjb25zdCBidXR0b24gPSBzdGF0QnV0dG9uPy5xdWVyeVNlbGVjdG9yKFwiYnV0dG9uXCIpO1xuICAgIGNvbnN0IHRleHQgPSBidXR0b24/LnF1ZXJ5U2VsZWN0b3IoXCIudGV4dC12YWx1ZVwiKTtcbiAgICBpZiAoIWdyb3VwIHx8ICFpdGVtIHx8ICFsYWJlbCB8fCAhY2hlY2tib3ggfHwgIW5hbWUgfHwgIXN0YXRCdXR0b24gfHwgIWJ1dHRvbiB8fCAhdGV4dCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHBpY2soZmlsdGVycyk7XG4gICAgc3RyaXBUZXN0SWRzKHJvb3QpO1xuXG4gICAgZ3JvdXAuY2xhc3NMaXN0LnJlbW92ZShcIm5vLWJvcmRlci1ib3R0b21cIik7XG4gICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKFwibGFzdFwiKTtcbiAgICBsYWJlbC5yZW1vdmVBdHRyaWJ1dGUoXCJmb3JcIik7XG4gICAgbmFtZS50ZXh0Q29udGVudCA9IHRpdGxlO1xuXG4gICAgY29uc3Qgb3BlblNoZWV0ID0gKCk6IHZvaWQgPT5cbiAgICAgIG9wZW5SYW5nZUZseW91dChcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgKG5leHQpID0+IHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGZpbHRlciwgbmV4dCk7XG4gICAgICAgICAgZmlsdGVyLmVuYWJsZWQgPSBuZXh0Lm1pbiAhPT0gbnVsbCB8fCBuZXh0Lm1heCAhPT0gbnVsbDtcbiAgICAgICAgICBjaGFuZ2VkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJvb3QuY2xvc2VzdChcInNtYXJ0LXNlbGVjdC1maWx0ZXJcIiksXG4gICAgICAgIGNoZWNrYm94LFxuICAgICAgKTtcbiAgICBjb25zdCBuYXRpdmVMaXN0ID0gYW5jaG9yLmNsb3Nlc3QoXCIuc21hcnQtb3B0aW9ucy1jb250YWluZXJcIik7XG4gICAgbGV0IHN1c3BlbmRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGZvbGxvd0NydWlzZXJTdGF0cyA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IG9uID0gbmF0aXZlTGlzdD8uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpID8/IHRydWU7XG4gICAgICBpdGVtLmNsYXNzTGlzdC50b2dnbGUoXCJwYXJlbnQtZW5hYmxlZFwiLCBvbik7XG4gICAgICBpZiAoIW9uICYmIGZpbHRlci5lbmFibGVkKSB7XG4gICAgICAgIHN1c3BlbmRlZCA9IHRydWU7XG4gICAgICAgIGZpbHRlci5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIGNoYW5nZWQoKTtcbiAgICAgIH0gZWxzZSBpZiAob24gJiYgc3VzcGVuZGVkKSB7XG4gICAgICAgIHN1c3BlbmRlZCA9IGZhbHNlO1xuICAgICAgICBmaWx0ZXIuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIGNoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChuYXRpdmVMaXN0KSB7XG4gICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmb2xsb3dDcnVpc2VyU3RhdHMpLm9ic2VydmUobmF0aXZlTGlzdCwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCJdLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZvbGxvd0NydWlzZXJTdGF0cygpO1xuXG4gICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICghaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoXCJwYXJlbnQtZW5hYmxlZFwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWZpbHRlci5lbmFibGVkICYmIGZpbHRlci5taW4gPT09IG51bGwgJiYgZmlsdGVyLm1heCA9PT0gbnVsbCkge1xuICAgICAgICBvcGVuU2hlZXQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZmlsdGVyLmVuYWJsZWQgPSAhZmlsdGVyLmVuYWJsZWQ7XG4gICAgICBjaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgc3RhdEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgaWYgKGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwicGFyZW50LWVuYWJsZWRcIikpIHtcbiAgICAgICAgb3BlblNoZWV0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcm9vdCxcbiAgICAgIC8vIFdoaWxlIHRoZXJlJ3Mgc29tZXRoaW5nIHRvIGFwcGx5LCB0aGUgYXBwbHkgYnV0dG9uIHRha2VzIHRoZSByYW5nZSBidXR0b24ncyBwbGFjZVxuICAgICAgcGxhY2VBcHBseTogKGFwcGx5KSA9PiBidXR0b24uYWZ0ZXIoYXBwbHkpLFxuICAgICAgc3luYzogKG5lZWRzUmVsb2FkKSA9PiB7XG4gICAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gbmVlZHNSZWxvYWQgPyBcIm5vbmVcIiA6IFwiXCI7XG4gICAgICAgIGxhYmVsLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIiwgZmlsdGVyLmVuYWJsZWQpO1xuICAgICAgICBjaGVja2JveC5jbGFzc0xpc3QudG9nZ2xlKFwiZmEtY2hlY2stc3F1YXJlXCIsIGZpbHRlci5lbmFibGVkKTtcbiAgICAgICAgY2hlY2tib3guY2xhc3NMaXN0LnRvZ2dsZShcImZhLXNxdWFyZVwiLCAhZmlsdGVyLmVuYWJsZWQpO1xuICAgICAgICBzdGF0QnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIiwgZmlsdGVyLmVuYWJsZWQpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJhbmdlTGFiZWwoZmlsdGVyLCBvcHRpb25zKTtcbiAgICAgICAgYnV0dG9uLmNsYXNzTmFtZSA9IHZhbHVlID8gXCJyYW5nZVwiIDogXCJzZWxlY3RcIjtcbiAgICAgICAgdGV4dC5jbGFzc0xpc3QudG9nZ2xlKFwicGxhY2Vob2xkZXJcIiwgIXZhbHVlKTtcbiAgICAgICAgdGV4dC50ZXh0Q29udGVudCA9IGAgJHt2YWx1ZSA/PyBcIlNlbGVjdFwifSBgO1xuICAgICAgfSxcbiAgICB9O1xuICB9O1xuXG5jb25zdCBwcm9maWxlVHlwZVJvdyA9ICgpOiBFbGVtZW50IHwgbnVsbCA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFBST0ZJTEVfVFlQRV9GSUxURVJfTEFCRUxfU0VMRUNUT1IpPy5jbG9zZXN0KFwiZmlsdGVyLXR5cGUtY29tcG9uZW50XCIpID8/XG4gIG51bGw7XG5jb25zdCBjcnVpc2luZ05vd1JvdyA9ICgpOiBFbGVtZW50IHwgbnVsbCA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKENPTk5FQ1RFRF9OT1dfRklMVEVSX0xBQkVMX1NFTEVDVE9SKT8uY2xvc2VzdChcInVpLWxpc3QtaXRlbS1sZXZlbC0yXCIpID8/XG4gIG51bGw7XG5jb25zdCBlbmRvd21lbnRMaW5lID0gKCk6IEVsZW1lbnQgfCBudWxsID0+XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoRU5ET1dNRU5UX0ZJTFRFUl9MQUJFTF9TRUxFQ1RPUik/LmNsb3Nlc3QoXCJ1aS1tZW51LWl0ZW0tZ3JvdXBcIikgPz8gbnVsbDtcblxuY29uc3QgUk9XUzogUm93W10gPSBbXG4gIHtcbiAgICBpZDogR0VOREVSX1JPV19JRCxcbiAgICBhbmNob3I6IHByb2ZpbGVUeXBlUm93LFxuICAgIGtleTogKGYpID0+IGFsbG93ZWRHZW5kZXJzKGYuZ2VuZGVyKS5qb2luKCksXG4gICAgYnVpbGQ6IGJ1aWxkR2VuZGVyUm93LFxuICB9LFxuICB7XG4gICAgaWQ6IE9OTElORV9ST1dfSUQsXG4gICAgYW5jaG9yOiBjcnVpc2luZ05vd1JvdyxcbiAgICBrZXk6IChmKSA9PiAob25saW5lS2V5KGYub25saW5lKSA/IGAke29ubGluZUtleShmLm9ubGluZSl9QCR7Zi5vbmxpbmUucGlja2VkQXQgPz8gXCJcIn1gIDogXCJcIiksXG4gICAgYnVpbGQ6IGJ1aWxkT25saW5lUm93LFxuICB9LFxuICB7XG4gICAgaWQ6IFwic25wLWhlaWdodC1maWx0ZXJcIixcbiAgICBhbmNob3I6IGVuZG93bWVudExpbmUsXG4gICAga2V5OiAoZikgPT4gcmFuZ2VLZXkoZi5oZWlnaHQpLFxuICAgIGJ1aWxkOiBidWlsZFN0YXRSb3coXCJIZWlnaHRcIiwgKGYpID0+IGYuaGVpZ2h0LCBIRUlHSFRfT1BUSU9OUyksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzbnAtd2VpZ2h0LWZpbHRlclwiLFxuICAgIGFuY2hvcjogZW5kb3dtZW50TGluZSxcbiAgICBrZXk6IChmKSA9PiByYW5nZUtleShmLndlaWdodCksXG4gICAgYnVpbGQ6IGJ1aWxkU3RhdFJvdyhcIldlaWdodFwiLCAoZikgPT4gZi53ZWlnaHQsIFdFSUdIVF9PUFRJT05TKSxcbiAgfSxcbl07XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcihcImZpbHRlci1tZW51XCIpO1xuY29uc3QgcmVwb3J0ZWRBbmNob3JzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5jb25zdCB3YXJuT25jZSA9IChrZXk6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGlmICghcmVwb3J0ZWRBbmNob3JzLmhhcyhrZXkpKSB7XG4gICAgcmVwb3J0ZWRBbmNob3JzLmFkZChrZXkpO1xuICAgIGxvZy53YXJuKGAke21lc3NhZ2V9OyBTbmlmZmllcyBtYXkgaGF2ZSBjaGFuZ2VkIGl0cyBtYXJrdXBgKTtcbiAgfVxufTtcbi8vIEFuZ3VsYXIgcmVuZGVycyB0aGUgbWVudSBpbiBwaWVjZXMsIHNvIGEgbWlzc2luZyBuZWlnaGJvdXIgb25seSBjb3VudHMgb25jZSBpdCBzdGF5cyBtaXNzaW5nLlxuY29uc3QgTkVJR0hCT1VSX0dSQUNFX01TID0gMjAwMDtcblxuZXhwb3J0IGNvbnN0IGluc3RhbGxQcm9maWxlRmlsdGVyc01lbnUgPSAob3B0aW9uczogUHJvZmlsZUZpbHRlcnNNZW51Q29udHJhY3QpOiAoKCkgPT4gdm9pZCkgPT4ge1xuICBjb25zdCBmaWx0ZXJzID0gc3RydWN0dXJlZENsb25lKG9wdGlvbnMuaW5pdGlhbCk7XG4gIGNvbnN0IHN5bmNzID0gbmV3IE1hcDxzdHJpbmcsICgpID0+IHZvaWQ+KCk7XG5cbiAgY29uc3QgY2hhbmdlZCA9ICgpOiB2b2lkID0+IHtcbiAgICBmb3IgKGNvbnN0IHN5bmMgb2Ygc3luY3MudmFsdWVzKCkpIHtcbiAgICAgIHN5bmMoKTtcbiAgICB9XG4gICAgUHJvbWlzZS5yZXNvbHZlKG9wdGlvbnMub25DaGFuZ2Uoc3RydWN0dXJlZENsb25lKGZpbHRlcnMpKSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBsb2cud2FybihcImNvdWxkbid0IHNhdmUgZmlsdGVyc1wiLCBlcnJvcik7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgYnVpbGQgPSAoYW5jaG9yOiBFbGVtZW50LCByb3c6IFJvdyk6IEhUTUxFbGVtZW50IHwgbnVsbCA9PiB7XG4gICAgY29uc3QgbW91bnRlZCA9IHJvdy5idWlsZChhbmNob3IsIGZpbHRlcnMsIGNoYW5nZWQpO1xuICAgIGlmICghbW91bnRlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIG1vdW50ZWQucm9vdC5pZCA9IHJvdy5pZDtcbiAgICBtb3VudGVkLnJvb3QuY2xhc3NMaXN0LmFkZChcInNucC1maWx0ZXItcm93XCIpO1xuXG4gICAgY29uc3QgYXBwbHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICAgIGFwcGx5LnR5cGUgPSBcImJ1dHRvblwiO1xuICAgIGFwcGx5LmNsYXNzTmFtZSA9IFwic25wLWZpbHRlci1hcHBseVwiO1xuICAgIGFwcGx5LnRleHRDb250ZW50ID0gXCJSZWxvYWQgdG8gYXBwbHlcIjtcbiAgICBhcHBseS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIChvcHRpb25zLnJlbG9hZFBhZ2UgPz8gKCgpID0+IGxvY2F0aW9uLnJlbG9hZCgpKSkoKTtcbiAgICB9KTtcbiAgICBtb3VudGVkLnBsYWNlQXBwbHkoYXBwbHkpO1xuXG4gICAgY29uc3Qgc3luYyA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGFwcGx5LmhpZGRlbiA9IHJvdy5rZXkoZmlsdGVycykgPT09IHJvdy5rZXkob3B0aW9ucy5hcHBsaWVkKTtcbiAgICAgIG1vdW50ZWQuc3luYyghYXBwbHkuaGlkZGVuKTtcbiAgICB9O1xuICAgIHN5bmNzLnNldChyb3cuaWQsIHN5bmMpO1xuICAgIHN5bmMoKTtcbiAgICByZXR1cm4gbW91bnRlZC5yb290O1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlciA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoUk9XUy5ldmVyeSgocm93KSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyb3cuaWQpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsYXN0QWZ0ZXIgPSBuZXcgTWFwPEVsZW1lbnQsIEVsZW1lbnQ+KCk7XG4gICAgZm9yIChjb25zdCByb3cgb2YgUk9XUykge1xuICAgICAgY29uc3QgYW5jaG9yID0gcm93LmFuY2hvcigpO1xuICAgICAgaWYgKCFhbmNob3IpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocm93LmlkKSA/PyBidWlsZChhbmNob3IsIHJvdyk7XG4gICAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgd2Fybk9uY2Uocm93LmlkLCBgJHtyb3cuaWR9OiBmb3VuZCBpdHMgYW5jaG9yIGJ1dCBub3QgdGhlIHBhcnRzIHRvIGNsb25lIGZyb20gaXRgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJvb3QuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTVFlMRV9JRCkpIHtcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgICAgICBzdHlsZS5pZCA9IFNUWUxFX0lEO1xuICAgICAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gRklMVEVSX01FTlVfQ1NTO1xuICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIChsYXN0QWZ0ZXIuZ2V0KGFuY2hvcikgPz8gYW5jaG9yKS5hZnRlcihyb290KTtcbiAgICAgIH1cbiAgICAgIGxhc3RBZnRlci5zZXQoYW5jaG9yLCByb290KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUHJvZmlsZSBUeXBlIGFuZCBDcnVpc2luZyBOb3cgc2l0IGluIHRoZSBzYW1lIG1lbnU6IG9uZSB3aXRob3V0IHRoZSBvdGhlciBtZWFucyBpdCBjaGFuZ2VkLlxuICBsZXQgbmVpZ2hib3VyQ2hlY2s6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICBjb25zdCBjaGVja05laWdoYm91cnMgPSAoKTogdm9pZCA9PiB7XG4gICAgY29uc3QgW3R5cGUsIGNydWlzaW5nXSA9IFtwcm9maWxlVHlwZVJvdygpLCBjcnVpc2luZ05vd1JvdygpXTtcbiAgICBpZiAoIXR5cGUgIT09ICFjcnVpc2luZykge1xuICAgICAgbmVpZ2hib3VyQ2hlY2sgPz89IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBuZWlnaGJvdXJDaGVjayA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgW3QsIGNdID0gW3Byb2ZpbGVUeXBlUm93KCksIGNydWlzaW5nTm93Um93KCldO1xuICAgICAgICBpZiAoIXQgIT09ICFjKSB7XG4gICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICBcIm1lbnUtbmVpZ2hib3Vyc1wiLFxuICAgICAgICAgICAgYGZpbHRlciBtZW51IGhhcyAke3QgPyBcIlByb2ZpbGUgVHlwZVwiIDogXCJDcnVpc2luZyBOb3dcIn0gYnV0IG5vdCAke3QgPyBcIkNydWlzaW5nIE5vd1wiIDogXCJQcm9maWxlIFR5cGVcIn1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sIE5FSUdIQk9VUl9HUkFDRV9NUyk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgIHJlbmRlcigpO1xuICAgIGNoZWNrTmVpZ2hib3VycygpO1xuICB9KTtcbiAgY29uc3Qgc3RhcnQgPSAoKTogdm9pZCA9PiB7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgICByZW5kZXIoKTtcbiAgfTtcbiAgaWYgKGRvY3VtZW50LmJvZHkpIHtcbiAgICBzdGFydCgpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIHN0YXJ0LCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuICgpID0+IHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBzdGFydCk7XG4gICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIGNsZWFyVGltZW91dChuZWlnaGJvdXJDaGVjayk7XG4gICAgZm9yIChjb25zdCByb3cgb2YgUk9XUykge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocm93LmlkKT8ucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xufTtcbiIsICJjb25zdCBQUk9QRVJUWSA9IFwibWF4U2VsZWN0aW9uc1wiO1xuY29uc3QgVU5MSU1JVEVEID0gOTk7XG4vLyBQb3NpdGlvbiBzZXRzIGl0cyBvd24gbWF4U2VsZWN0aW9ucyAoNCksIHNvIHRoZSBwcm90b3R5cGUgZmFsbGJhY2sgYmVsb3cgbmV2ZXIgc2VlcyBpdC5cbmNvbnN0IFBPU0lUSU9OX0tFWSA9IFwic2V4dWFsaXR5LmF0dGl0dWRlXCI7XG5cbmNvbnN0IG93bnMgPSAodGFyZ2V0OiBvYmplY3QsIGtleTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpO1xuXG5jb25zdCBpc1N0YXRGaWx0ZXJPcHRpb24gPSAodGFyZ2V0OiB1bmtub3duKTogYm9vbGVhbiA9PiB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiIHx8IHRhcmdldCA9PT0gbnVsbCB8fCAhb3ducyh0YXJnZXQsIFwia2V5XCIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHsgbmFtZSB9ID0gdGFyZ2V0IGFzIHsgbmFtZT86IHVua25vd24gfTtcbiAgcmV0dXJuIG93bnModGFyZ2V0LCBcIm5hbWVcIikgJiYgdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgJiYgbmFtZS5zdGFydHNXaXRoKFwiUFJPRklMRS5TVEFUUy5cIik7XG59O1xuXG5jb25zdCBpc1BpY2tlck1vZGVsID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgeyBtYXhTZWxlY3Rpb25zOiBudW1iZXIgfSA9PlxuICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgdmFsdWUgIT09IG51bGwgJiZcbiAgb3ducyh2YWx1ZSwgUFJPUEVSVFkpICYmXG4gIG93bnModmFsdWUsIFwiaGVhZGVyXCIpICYmXG4gIG93bnModmFsdWUsIFwiZGF0YVwiKTtcblxuY29uc3QgZGVmaW5lRGF0YSA9ICh0YXJnZXQ6IG9iamVjdCwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCA9PiB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgIHZhbHVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbn07XG5cbi8qKlxuICogTXVzdCBydW4gaW4gdGhlIHBhZ2UncyBvd24gSlMgd29ybGQuIGBpc0VuYWJsZWRgIGlzIHJlYWQgZWFjaCB0aW1lIFNuaWZmaWVzIGJ1aWxkcyBhIHBpY2tlcixcbiAqIHNvIGl0IGNhbiBjaGFuZ2Ugd2l0aG91dCBhIHJlbG9hZC5cbiAqXG4gKiBAcmV0dXJucyBmYWxzZSBpZiBhbHJlYWR5IGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc3RhbGxTZWxlY3Rpb25MaW1pdE92ZXJyaWRlID0gKGlzRW5hYmxlZDogKCkgPT4gYm9vbGVhbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCBQUk9QRVJUWSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBTZXh1YWxpdHkgLyBCb2R5IFR5cGVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsIFBST1BFUlRZLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCh0aGlzOiB1bmtub3duKSB7XG4gICAgICByZXR1cm4gaXNFbmFibGVkKCkgJiYgaXNTdGF0RmlsdGVyT3B0aW9uKHRoaXMpID8gVU5MSU1JVEVEIDogdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgc2V0KHRoaXM6IG9iamVjdCwgdmFsdWU6IHVua25vd24pIHtcbiAgICAgIGRlZmluZURhdGEodGhpcywgUFJPUEVSVFksIHZhbHVlKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBQb3NpdGlvblxuICBjb25zdCBsaWZ0ID0gKHZhbHVlOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gICAgaWYgKGlzRW5hYmxlZCgpICYmIGlzUGlja2VyTW9kZWwodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5tYXhTZWxlY3Rpb25zID0gVU5MSU1JVEVEO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCBQT1NJVElPTl9LRVksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHNldCh0aGlzOiBvYmplY3QsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgICBpZiAoIWlzUGlja2VyTW9kZWwodmFsdWUpKSB7XG4gICAgICAgIGRlZmluZURhdGEodGhpcywgUE9TSVRJT05fS0VZLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBjdXJyZW50ID0gbGlmdCh2YWx1ZSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgUE9TSVRJT05fS0VZLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiAoKSA9PiBjdXJyZW50LFxuICAgICAgICBzZXQ6IChuZXh0OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgY3VycmVudCA9IGxpZnQobmV4dCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHRydWU7XG59O1xuIiwgIiNzbnAtcHJvZmlsZS1maWx0ZXJzLXJvb3Qge1xuICBtYXJnaW46IDAgLTE2cHg7XG59XG5cbiNzbnAtcHJvZmlsZS1maWx0ZXJzLXJvb3QgLnNlY3Rpb24ge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDA7XG59XG5cbiNzbnAtcHJvZmlsZS1maWx0ZXJzLXJvb3QgLnNlY3Rpb24gaDIge1xuICBtYXJnaW46IDA7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBjb2xvcjogIzdhOTBhNDtcbn1cblxuI3NucC1wcm9maWxlLWZpbHRlcnMtcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHtcbiAgcGFkZGluZzogMDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbiNzbnAtcHJvZmlsZS1maWx0ZXJzLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZSBzdW1tYXJ5IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAwIDEycHg7XG4gIG1pbi1oZWlnaHQ6IDU2cHg7XG4gIGJhY2tncm91bmQ6ICMwZjFlMzU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTJweDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbiNzbnAtcHJvZmlsZS1maWx0ZXJzLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZSBzdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2VyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuI3NucC1wcm9maWxlLWZpbHRlcnMtcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHN1bW1hcnk6aG92ZXI6OmFmdGVyIHtcbiAgY29sb3I6ICM3NjhlYjg7XG59XG5cbiNzbnAtcHJvZmlsZS1maWx0ZXJzLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZSBzdW1tYXJ5OjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXHUyMDNBXCI7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogIzdhOTBhNDtcbiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICB0cmFuc2l0aW9uOlxuICAgIHRyYW5zZm9ybSAwLjE1cyxcbiAgICBjb2xvciAwLjI1cztcbn1cblxuI3NucC1wcm9maWxlLWZpbHRlcnMtcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlW29wZW5dIHN1bW1hcnk6OmFmdGVyIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbn1cblxuI3NucC1wcm9maWxlLWZpbHRlcnMtcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHN1bW1hcnkgaDIge1xuICBtYXJnaW46IDA7XG59XG5cbiNzbnAtcHJvZmlsZS1maWx0ZXJzLXJvb3QgLmNvbGxhcHNpYmxlLWJvZHkge1xuICBwYWRkaW5nOiAxMnB4IDEycHggMTJweCA1NnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDA7XG59XG5cbiNzbnAtcHJvZmlsZS1maWx0ZXJzLXJvb3QgLnJvdyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgY29sb3I6ICNmZmZmZmY7XG59XG5cbiNzbnAtcHJvZmlsZS1maWx0ZXJzLXJvb3QgLnJvdyBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBhY2NlbnQtY29sb3I6ICNmZjU1MDA7XG4gIHdpZHRoOiAxNHB4O1xuICBoZWlnaHQ6IDE0cHg7XG59XG5cbiNzbnAtcHJvZmlsZS1maWx0ZXJzLXJvb3QgLmhpbnQge1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAjYWViY2QwO1xuICBtYXJnaW46IDA7XG59XG4iLCAiLnNucC1zd2l0Y2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4OiBub25lO1xuICB3aWR0aDogMzJweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5zbnAtc3dpdGNoIGlucHV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBvcGFjaXR5OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnNucC1zd2l0Y2gtc2xpZGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgYmFja2dyb3VuZDogIzc2OGViODtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5zbnAtc3dpdGNoLXNsaWRlcjo6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDJweDtcbiAgbGVmdDogMnB4O1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJhY2tncm91bmQ6ICMwZjFlMzU7XG4gIGJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yNSkgMCA0cHggNHB4O1xufVxuXG4uc25wLXN3aXRjaCBpbnB1dDpjaGVja2VkICsgLnNucC1zd2l0Y2gtc2xpZGVyIHtcbiAgYmFja2dyb3VuZDogI2ZmNTUwMDtcbn1cblxuLnNucC1zd2l0Y2ggaW5wdXQ6Y2hlY2tlZCArIC5zbnAtc3dpdGNoLXNsaWRlcjo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEycHgpO1xufVxuXG4uc25wLXN3aXRjaCBpbnB1dDpmb2N1cy12aXNpYmxlICsgLnNucC1zd2l0Y2gtc2xpZGVyIHtcbiAgb3V0bGluZTogMnB4IHNvbGlkICNmZmZmZmY7XG4gIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi5zbnAtc3dpdGNoOmhhcyhpbnB1dDpkaXNhYmxlZCksXG4uc25wLXN3aXRjaCBpbnB1dDpkaXNhYmxlZCB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5zbnAtc3dpdGNoIGlucHV0OmRpc2FibGVkOmNoZWNrZWQgKyAuc25wLXN3aXRjaC1zbGlkZXIge1xuICBiYWNrZ3JvdW5kOiAjNDE1NTcxO1xufVxuXG4uc25wLXN3aXRjaCBpbnB1dDpkaXNhYmxlZCArIC5zbnAtc3dpdGNoLXNsaWRlciB7XG4gIG9wYWNpdHk6IDAuNjtcbn1cblxuLnNucC1sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAwO1xuICBmb250LWZhbWlseTogUm9ib3RvLCBSZWRhY3Rpb25TcXVhcmUsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGNvbG9yOiAjZDRkOWU0O1xuICB0cmFuc2l0aW9uOiBjb2xvciAwLjI1cztcbn1cblxuLnNucC1yb3c6aGFzKGlucHV0OmNoZWNrZWQpIC5zbnAtbGFiZWwge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLnNucC1yb3c6aGFzKGlucHV0KTpob3ZlciAuc25wLWxhYmVsLFxuLnNucC1kaXNhYmxlZCAuc25wLXJvdzpoYXMoaW5wdXQpIC5zbnAtbGFiZWwge1xuICBjb2xvcjogIzc2OGViODtcbn1cblxuLnNucC1kaXNhYmxlZCAuc25wLXJvdzpoYXMoaW5wdXQpIC5zbnAtbGFiZWwge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuIiwgIjxkZXRhaWxzIGNsYXNzPVwic2VjdGlvbiBjb2xsYXBzaWJsZVwiIGlkPVwicHJvZmlsZS1maWx0ZXJzLWRldGFpbHNcIj5cbiAgPHN1bW1hcnkgY2xhc3M9XCJzbnAtcm93XCI+XG4gICAgPGxhYmVsIGNsYXNzPVwic25wLXN3aXRjaFwiPlxuICAgICAgPGlucHV0IGlkPVwicHJvZmlsZS1maWx0ZXJzLWVuYWJsZWRcIiB0eXBlPVwiY2hlY2tib3hcIiBhcmlhLWxhYmVsPVwiRXhwYW5kZWQgZmlsdGVyc1wiIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cInNucC1zd2l0Y2gtc2xpZGVyXCI+PC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gICAgPHAgY2xhc3M9XCJzbnAtbGFiZWxcIj5FeHBhbmRlZCBGaWx0ZXJzPC9wPlxuICA8L3N1bW1hcnk+XG4gIDxkaXYgY2xhc3M9XCJjb2xsYXBzaWJsZS1ib2R5XCI+XG4gICAgPHAgY2xhc3M9XCJoaW50XCIgaWQ9XCJwcm9maWxlLWZpbHRlcnMtaGludFwiPlxuICAgICAgQWRkIEdlbmRlciwgSGVpZ2h0LCBhbmQgV2VpZ2h0IGZpbHRlcnMuIENob29zZSBhbiBhbnkgbnVtYmVyIG9mIG9wdGlvbnMgaW4gdGhlIFNleHVhbGl0eSBhbmRcbiAgICAgIEJvZHkgVHlwZSBmaWx0ZXJzLlxuICAgIDwvcD5cbiAgPC9kaXY+XG48L2RldGFpbHM+XG4iLCAiaW1wb3J0IHR5cGUgeyBQcm9maWxlRmlsdGVyc0Zvcm1Db250cmFjdCB9IGZyb20gXCIuL2NvbnRyYWN0cy5qc1wiO1xuaW1wb3J0IFJBV19DU1MgZnJvbSBcIi4vcHJvZmlsZS1maWx0ZXJzLmNzc1wiO1xuaW1wb3J0IFNXSVRDSF9DU1MgZnJvbSBcIi4vc3dpdGNoLmNzc1wiO1xuaW1wb3J0IFBST0ZJTEVfRklMVEVSU19IVE1MIGZyb20gXCIuL3Byb2ZpbGUtZmlsdGVycy5odG1sXCI7XG5cbmNvbnN0IFBST0ZJTEVfRklMVEVSU19DU1MgPSBTV0lUQ0hfQ1NTICsgUkFXX0NTUztcblxuZXhwb3J0IHsgUFJPRklMRV9GSUxURVJTX0NTUywgUFJPRklMRV9GSUxURVJTX0hUTUwgfTtcbmV4cG9ydCB0eXBlIHsgUHJvZmlsZUZpbHRlcnNGb3JtQ29udHJhY3QgfTtcblxuZXhwb3J0IGNvbnN0IHdpcmVQcm9maWxlRmlsdGVyc0Zvcm0gPSAoXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgb3B0aW9uczogUHJvZmlsZUZpbHRlcnNGb3JtQ29udHJhY3QsXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgZGV0YWlscyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yPEhUTUxEZXRhaWxzRWxlbWVudD4oXCIjcHJvZmlsZS1maWx0ZXJzLWRldGFpbHNcIik7XG4gIGNvbnN0IGVuYWJsZWRDaGVja2JveCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiI3Byb2ZpbGUtZmlsdGVycy1lbmFibGVkXCIpITtcblxuICBpZiAoZGV0YWlscykge1xuICAgIGRldGFpbHMub3BlbiA9IG9wdGlvbnMuaW5pdGlhbE9wZW47XG4gICAgZGV0YWlscy5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlXCIsICgpID0+IG9wdGlvbnMub25Ub2dnbGUoZGV0YWlscy5vcGVuKSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5oaW50KSB7XG4gICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjcHJvZmlsZS1maWx0ZXJzLWhpbnRcIikhLnRleHRDb250ZW50ID0gb3B0aW9ucy5oaW50O1xuICB9XG5cbiAgZW5hYmxlZENoZWNrYm94LmNoZWNrZWQgPSBvcHRpb25zLmluaXRpYWxFbmFibGVkO1xuICBlbmFibGVkQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgdm9pZCBvcHRpb25zLm9uVG9nZ2xlRW5hYmxlZChlbmFibGVkQ2hlY2tib3guY2hlY2tlZCk7XG4gIH0pO1xufTtcbiIsICJleHBvcnQgaW50ZXJmYWNlIEJsb2NrZWRCb3REYWlseUxvZyB7XG4gIFtkYXRlS2V5OiBzdHJpbmddOiBzdHJpbmdbXTtcbn1cblxuY29uc3QgZGF0ZUtleUZvciA9IChkYXRlOiBEYXRlKTogc3RyaW5nID0+IGRhdGUudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG5cbmNvbnN0IHllc3RlcmRheU9mID0gKGRhdGU6IERhdGUpOiBEYXRlID0+IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gMjQgKiA2MCAqIDYwICogMTAwMCk7XG5cbmV4cG9ydCBjb25zdCByZWNvcmRCbG9ja2VkQm90SWRzID0gKFxuICBsb2c6IEJsb2NrZWRCb3REYWlseUxvZyxcbiAgaWRzOiBzdHJpbmdbXSxcbiAgbm93OiBEYXRlID0gbmV3IERhdGUoKSxcbik6IEJsb2NrZWRCb3REYWlseUxvZyA9PiB7XG4gIGlmIChpZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGxvZztcbiAgfVxuICBjb25zdCB0b2RheUtleSA9IGRhdGVLZXlGb3Iobm93KTtcbiAgY29uc3QgeWVzdGVyZGF5S2V5ID0gZGF0ZUtleUZvcih5ZXN0ZXJkYXlPZihub3cpKTtcbiAgY29uc3QgdG9kYXkgPSBuZXcgU2V0KFsuLi4obG9nW3RvZGF5S2V5XSA/PyBbXSksIC4uLmlkc10pO1xuICBjb25zdCByZWNvcmQ6IEJsb2NrZWRCb3REYWlseUxvZyA9IHsgW3RvZGF5S2V5XTogWy4uLnRvZGF5XSB9O1xuICBpZiAobG9nW3llc3RlcmRheUtleV0pIHtcbiAgICByZWNvcmRbeWVzdGVyZGF5S2V5XSA9IGxvZ1t5ZXN0ZXJkYXlLZXldO1xuICB9XG4gIHJldHVybiByZWNvcmQ7XG59O1xuXG5leHBvcnQgY29uc3QgY291bnREaXN0aW5jdEJsb2NrZWRCb3RzTGFzdDI0aCA9IChcbiAgbG9nOiBCbG9ja2VkQm90RGFpbHlMb2csXG4gIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCksXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCB0b2RheUtleSA9IGRhdGVLZXlGb3Iobm93KTtcbiAgY29uc3QgeWVzdGVyZGF5S2V5ID0gZGF0ZUtleUZvcih5ZXN0ZXJkYXlPZihub3cpKTtcbiAgY29uc3QgdW5pb24gPSBuZXcgU2V0KFsuLi4obG9nW3RvZGF5S2V5XSA/PyBbXSksIC4uLihsb2dbeWVzdGVyZGF5S2V5XSA/PyBbXSldKTtcbiAgcmV0dXJuIHVuaW9uLnNpemU7XG59O1xuIiwgImltcG9ydCB0eXBlIHsgTG9nSW5pdE9wdGlvbnMgfSBmcm9tIFwiLi9jb250cmFjdHMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuL2xvZy5qc1wiO1xuXG4vKipcbiAqIFRlbGVtZXRyeSBwaW5nIGZpcmVkIG9uY2UgcGVyIGNsaWVudCBpbml0IHNvIHRoZSBzZXJ2ZXIgY2FuIHRyYWNrIHdoaWNoIHVzZXIgaWRzIGFyZSBydW5uaW5nIHdoaWNoIHZlcnNpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGxvZ0luaXQgPSBhc3luYyAob3B0aW9uczogTG9nSW5pdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKFwibG9nLWluaXRcIik7XG4gIGNvbnN0IHsgc2VydmVyQmFzZSwgY2xpZW50U2VjcmV0LCB1c2VySWQsIGNsaWVudFR5cGUsIHZlcnNpb24gfSA9IG9wdGlvbnM7XG4gIGlmICghc2VydmVyQmFzZSB8fCAhdXNlcklkKSB7XG4gICAgbG9nKFwic2tpcHBpbmcsIG1pc3Npbmcgc2VydmVyQmFzZSBvciB1c2VySWRcIiwgeyBzZXJ2ZXJCYXNlLCB1c2VySWQgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZyhcInNlbmRpbmcgaW5pdCBwaW5nXCIsIHsgdXNlcklkLCBjbGllbnRUeXBlLCB2ZXJzaW9uIH0pO1xuICB0cnkge1xuICAgIGNvbnN0IGJhc2UgPSBzZXJ2ZXJCYXNlLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7YmFzZX0vYXBpL2xvZ0luaXRgLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NsaWVudFNlY3JldH1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdXNlcklkLCBjbGllbnRUeXBlLCB2ZXJzaW9uIH0pLFxuICAgIH0pO1xuICAgIGlmIChyZXMub2spIHtcbiAgICAgIGxvZyhcImluaXQgcGluZyBzZW50XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZXJyb3IoXCJpbml0IHBpbmcgcmVqZWN0ZWRcIiwgcmVzLnN0YXR1cyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoXCJpbml0IHBpbmcgZmFpbGVkXCIsIGVycik7XG4gIH1cbn07XG4iLCAiPGRldGFpbHMgY2xhc3M9XCJzZWN0aW9uIGNvbGxhcHNpYmxlXCIgaWQ9XCJwcmVtaXVtLWRldGFpbHNcIj5cbiAgPHN1bW1hcnkgY2xhc3M9XCJzbnAtcm93XCI+XG4gICAgPGxhYmVsIGNsYXNzPVwic25wLXN3aXRjaFwiPlxuICAgICAgPGlucHV0IGlkPVwicHJlbWl1bS1lbmFibGVkXCIgdHlwZT1cImNoZWNrYm94XCIgYXJpYS1sYWJlbD1cIkVuYWJsZSBQcmVtaXVtIGZlYXR1cmVzXCIgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwic25wLXN3aXRjaC1zbGlkZXJcIj48L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgICA8cCBjbGFzcz1cInNucC1sYWJlbFwiPlByZW1pdW0gRmVhdHVyZXM8L3A+XG4gIDwvc3VtbWFyeT5cbiAgPGRpdiBjbGFzcz1cImNvbGxhcHNpYmxlLWJvZHlcIj5cbiAgICA8cCBpZD1cInByZW1pdW0tcGx1cy1ub3RpY2VcIiBjbGFzcz1cImhpbnQgbm90aWNlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgICBZb3UgaGF2ZSBTbmlmZmllcyBQbHVzLCBzbyB5b3UgZG9uJ3QgbmVlZCB0aGVzZSBmZWF0dXJlcy5cbiAgICA8L3A+XG4gICAgPHAgY2xhc3M9XCJoaW50XCI+XG4gICAgICBVbmxvY2tzIHRoaW5ncyBTbmlmZmllcyBub3JtYWxseSByZXNlcnZlcyBmb3IgUGx1czogbG9jYXRpb24gc3Bvb2ZpbmcsIG9wZW5pbmcgcHJvZmlsZXNcbiAgICAgIG91dHNpZGUgeW91ciBib3VuZGFyeSwgYW5kIGhpZGluZyBwaG90b3MgeW91J3ZlIHNlbnQuXG4gICAgPC9wPlxuICAgIDxkaXYgaWQ9XCJwcmVtaXVtLWNvbmZpZ1wiIGNsYXNzPVwicHJlbWl1bS1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGlkPVwicHJlbWl1bS1nZW9cIiBjbGFzcz1cInByZW1pdW0tZmVhdHVyZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJlbWl1bS1mZWF0dXJlLWhlYWQgc25wLXJvd1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNucC1zd2l0Y2hcIj5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInByZW1pdW0tZmxhZy1sb2NhdGlvblwiIHR5cGU9XCJjaGVja2JveFwiIGFyaWEtbGFiZWw9XCJMb2NhdGlvbiBzcG9vZmluZ1wiIC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNucC1zd2l0Y2gtc2xpZGVyXCI+PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByZW1pdW0tZmVhdHVyZS10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNucC1sYWJlbFwiPkxvY2F0aW9uIFNwb29maW5nPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByZW1pdW0tZmVhdHVyZS1ib2R5IHByZW1pdW0tc2VjdGlvblwiIGhpZGRlbj5cbiAgICAgICAgICA8cCBjbGFzcz1cImhpbnRcIj5cbiAgICAgICAgICAgIFVzZSB0aGUgYnVpbHQtaW4gU25pZmZpZXMgXCJUcmF2ZWwgTW9kZVwiIHRvIHNlbGVjdCBhIGxvY2F0aW9uIHRvIHRyYXZlbCB0by4gRnJvbSB0aGF0XG4gICAgICAgICAgICBtb2RlLCBzZWFyY2ggZm9yIGFueXdoZXJlIGFuZCBjbGljayBcIlRyYXZlbCBoZXJlXCIuIFRoaXMgY2FuIHBpY2sgdXAgYSBsb2NhdGlvbiB5b3VcbiAgICAgICAgICAgIHNlYXJjaCBmb3IgYnkgbmFtZSwgYnV0IG5vdCBvbmUgeW91IHJlYWNoIGJ5IG1hbnVhbGx5IGRyYWdnaW5nIHRoZSBtYXAuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiZ2VvLWNsZWFyXCIgY2xhc3M9XCJzZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCI+Q2xlYXIgbG9jYXRpb248L2J1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuIGlkPVwiZ2VvLXNhdmVkXCIgY2xhc3M9XCJoaW50XCIgYXJpYS1saXZlPVwicG9saXRlXCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cInByZW1pdW0tYm9yZGVyXCIgY2xhc3M9XCJwcmVtaXVtLWZlYXR1cmVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByZW1pdW0tZmVhdHVyZS1oZWFkIHNucC1yb3dcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbnAtc3dpdGNoXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJwcmVtaXVtLWZsYWctYm91bmRhcnlcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHJvZmlsZXMgb3V0c2lkZSBib3VuZGFyeVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbnAtc3dpdGNoLXNsaWRlclwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmVtaXVtLWZlYXR1cmUtdG9nZ2xlXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbnAtbGFiZWxcIj5Qcm9maWxlcyBPdXRzaWRlIEJvdW5kYXJ5PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByZW1pdW0tZmVhdHVyZS1ib2R5IHByZW1pdW0tc2VjdGlvblwiIGhpZGRlbj5cbiAgICAgICAgICA8cCBpZD1cInByb2ZpbGUtYm9yZGVyLWhpbnRcIiBjbGFzcz1cImhpbnRcIj5cbiAgICAgICAgICAgIFByb2ZpbGVzIG91dHNpZGUgeW91ciBib3VuZGFyeSBvcGVuIGRpcmVjdGx5LiBSZWNvbW1lbmQgb3BlbmluZyBpbiBhIG5ldyB0YWIsIGN1cnJlbnRcbiAgICAgICAgICAgIHRhYiB0cmlnZ2VycyBjdXJyZW50IHBhZ2UgcmVsb2FkLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8bGFiZWwgaWQ9XCJwcm9maWxlLWJvcmRlci10YWItZmllbGRcIiBjbGFzcz1cImZpZWxkXCI+XG4gICAgICAgICAgICA8c3Bhbj5PcGVuIGluPC9zcGFuPlxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cInByb2ZpbGUtYm9yZGVyLXRhYlwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY3VycmVudC10YWJcIj5DdXJyZW50IHRhYjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibmV3LXRhYlwiPk5ldyB0YWI8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJwcm9maWxlLWJvcmRlci1zYXZlXCIgY2xhc3M9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICAgICAgICBTYXZlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJwcmVtaXVtLXBob3Rvc1wiIGNsYXNzPVwicHJlbWl1bS1mZWF0dXJlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmVtaXVtLWZlYXR1cmUtaGVhZCBzbnAtcm93XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic25wLXN3aXRjaFwiPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicHJlbWl1bS1mbGFnLXBob3Rvc1wiIHR5cGU9XCJjaGVja2JveFwiIGFyaWEtbGFiZWw9XCJIaWRlIHNlbnQgcGhvdG9zXCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic25wLXN3aXRjaC1zbGlkZXJcIj48L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJlbWl1bS1mZWF0dXJlLXRvZ2dsZVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic25wLWxhYmVsXCI+SGlkZSBTZW50IFBob3Rvczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmVtaXVtLWZlYXR1cmUtYm9keSBwcmVtaXVtLXNlY3Rpb25cIiBoaWRkZW4+XG4gICAgICAgICAgPHAgY2xhc3M9XCJoaW50XCI+XG4gICAgICAgICAgICBBZGRzIFNuaWZmaWVzJyBIaWRlIFBob3RvIGFjdGlvbiB0byBwaG90b3MgeW91J3ZlIHNlbnQsIHNvIHlvdSBjYW4gaGlkZSB0aGVtIGFnYWluXG4gICAgICAgICAgICB3aXRob3V0IFBsdXMuIE5vdGhpbmcgdG8gY29uZmlndXJlLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2RldGFpbHM+XG4iLCAiI3NucC1wcmVtaXVtLXJvb3Qge1xuICBtYXJnaW46IDAgLTE2cHg7XG59XG5cbiNzbnAtcHJlbWl1bS1yb290IC5zZWN0aW9uIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgcGFkZGluZzogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAwO1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggIzBmMWUzNTtcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgLnNlY3Rpb24gaDIge1xuICBtYXJnaW46IDA7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBjb2xvcjogIzdhOTBhNDtcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZSB7XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHN1bW1hcnkge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmc6IDAgMTJweDtcbiAgbWluLWhlaWdodDogNTZweDtcbiAgYmFja2dyb3VuZDogIzBmMWUzNTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAxMnB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZSBzdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2VyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZSBzdW1tYXJ5OmhvdmVyOjphZnRlciB7XG4gIGNvbG9yOiAjNzY4ZWI4O1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHN1bW1hcnk6OmFmdGVyIHtcbiAgY29udGVudDogXCJcdTIwM0FcIjtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjZDRkOWU0O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIHRyYW5zaXRpb246XG4gICAgdHJhbnNmb3JtIDAuMTVzLFxuICAgIGNvbG9yIDAuMjVzO1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlW29wZW5dIHN1bW1hcnk6OmFmdGVyIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZSBzdW1tYXJ5IGgyIHtcbiAgbWFyZ2luOiAwO1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCAuY29sbGFwc2libGUtYm9keSB7XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMDtcbn1cblxuLyogRm9ybSBmaWVsZHMgXHUyMDE0IHNoYXJlZCB3aXRoIHBvcHVwLmNzcyAucm93LCAuaGludCwgLmZpZWxkLCBidXR0b24ucHJpbWFyeS9zZWNvbmRhcnksIC5hY3Rpb25zICovXG5cbiNzbnAtcHJlbWl1bS1yb290IC5yb3cge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDhweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCA+IC5zZWN0aW9uIC5jb2xsYXBzaWJsZS1ib2R5ID4gLmhpbnQsXG4jc25wLXByZW1pdW0tcm9vdCA+IC5zZWN0aW9uIC5jb2xsYXBzaWJsZS1ib2R5ID4gLm5vdGljZSB7XG4gIG1hcmdpbjogMTJweCAxMnB4IDEycHggNTZweDtcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgI3ByZW1pdW0tY29uZmlnIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMwZjFlMzU7XG4gIGdhcDogMDtcbiAgYmFja2dyb3VuZDogIzA3MTAxZTtcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgLnByZW1pdW0tZmVhdHVyZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMDtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4ICMwZjFlMzU7XG59XG5cbiNzbnAtcHJlbWl1bS1yb290IC5wcmVtaXVtLWZlYXR1cmUgLnNucC1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDIxcHg7XG59XG5cbiNzbnAtcHJlbWl1bS1yb290IC5wcmVtaXVtLWZlYXR1cmUtaGVhZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTJweDtcbiAgcGFkZGluZzogOHB4IDEycHggOHB4IDI0cHg7XG4gIG1pbi1oZWlnaHQ6IDQ5cHg7IC8qIDggKyAzMiArIDggKyAxcHggZGl2aWRlciwgYXMgdGhlIENydWlzZXIgU3RhdHMgcm93cyAqL1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCAucHJlbWl1bS1mZWF0dXJlLXRvZ2dsZSB7XG4gIGZsZXg6IDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNnB4O1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBmb250OiBpbmhlcml0O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbiNzbnAtcHJlbWl1bS1yb290IC5wcmVtaXVtLWZlYXR1cmUtaGVhZDpob3ZlciAucHJlbWl1bS1mZWF0dXJlLXRvZ2dsZTo6YWZ0ZXIge1xuICBjb2xvcjogIzc2OGViODtcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgLnByZW1pdW0tZmVhdHVyZS10b2dnbGU6OmFmdGVyIHtcbiAgY29udGVudDogXCJcdTIwM0FcIjtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjZDRkOWU0O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIHRyYW5zaXRpb246XG4gICAgdHJhbnNmb3JtIDAuMTVzLFxuICAgIGNvbG9yIDAuMjVzO1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCAucHJlbWl1bS1mZWF0dXJlLXRvZ2dsZVthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXTo6YWZ0ZXIge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCAucHJlbWl1bS1mZWF0dXJlLWJvZHkge1xuICBwYWRkaW5nOiAwIDEycHggMTJweCA3MnB4O1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCAucHJlbWl1bS1mZWF0dXJlLWJvZHlbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNzbnAtcHJlbWl1bS1yb290IC5oaW50IHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogI2FlYmNkMDtcbiAgbWFyZ2luOiAwO1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCBidXR0b24ucHJpbWFyeSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgcGFkZGluZzogN3B4IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIGJvcmRlcjogbm9uZTtcbiAgYmFja2dyb3VuZDogI2ZmNTUwMDtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cztcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgYnV0dG9uLnByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBiYWNrZ3JvdW5kOiAjZTA0YTAwO1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCBidXR0b24ucHJpbWFyeTpkaXNhYmxlZCB7XG4gIGJhY2tncm91bmQ6ICMwZjFlMzU7XG4gIGNvbG9yOiAjN2E5MGE0O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4jc25wLXByZW1pdW0tcm9vdCAuZmllbGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDRweDtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBjb2xvcjogIzdhOTBhNDtcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgLmZpZWxkIHNlbGVjdCB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgcGFkZGluZzogN3B4IDEwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzBmMWUzNTtcbiAgYmFja2dyb3VuZDogIzA4MGUxODtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cztcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgLmZpZWxkIHNlbGVjdDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogI2ZmNTUwMDtcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgLmFjdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgYnV0dG9uLnNlY29uZGFyeSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgcGFkZGluZzogN3B4IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwZjFlMzU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogIzdhOTBhNDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOlxuICAgIGJvcmRlci1jb2xvciAwLjE1cyxcbiAgICBjb2xvciAwLjE1cztcbn1cblxuI3NucC1wcmVtaXVtLXJvb3QgYnV0dG9uLnNlY29uZGFyeTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJvcmRlci1jb2xvcjogIzdhOTBhNDtcbiAgY29sb3I6ICNmZmZmZmY7XG59XG5cbiNzbnAtcHJlbWl1bS1yb290IC5wcmVtaXVtLXNlY3Rpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEwcHg7XG59XG5cbiNzbnAtcHJlbWl1bS1yb290IC5ub3RpY2Uge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgYmFja2dyb3VuZDogIzBmMWUzNTtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBwYWRkaW5nOiA4cHggMTBweDtcbn1cbiIsICJpbXBvcnQgUFJFTUlVTV9GRUFUVVJFU19IVE1MIGZyb20gXCIuL3ByZW1pdW0tZmVhdHVyZXMuaHRtbFwiO1xuaW1wb3J0IFJBV19DU1MgZnJvbSBcIi4vcHJlbWl1bS1mZWF0dXJlcy5jc3NcIjtcbmltcG9ydCBTV0lUQ0hfQ1NTIGZyb20gXCIuL3N3aXRjaC5jc3NcIjtcbmltcG9ydCB7IGhhc0NhcHR1cmVkQ29vcmRzLCB0eXBlIEdlb092ZXJyaWRlLCB0eXBlIFByb2ZpbGVCb3JkZXJPcGVuIH0gZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgUHJlbWl1bUZlYXR1cmVzRm9ybUNvbnRyYWN0IH0gZnJvbSBcIi4vY29udHJhY3RzLmpzXCI7XG5cbmNvbnN0IFBSRU1JVU1fRkVBVFVSRVNfQ1NTID0gU1dJVENIX0NTUyArIFJBV19DU1M7XG5cbmV4cG9ydCB7IFBSRU1JVU1fRkVBVFVSRVNfSFRNTCwgUFJFTUlVTV9GRUFUVVJFU19DU1MgfTtcbmV4cG9ydCB0eXBlIHsgUHJlbWl1bUZlYXR1cmVzRm9ybUNvbnRyYWN0IH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlbWl1bUZlYXR1cmVzRm9ybUhhbmRsZSB7XG4gIHNldE92ZXJyaWRlOiAobmV4dDogR2VvT3ZlcnJpZGUpID0+IHZvaWQ7XG59XG5cbmNvbnN0IFRBQl9MQUJFTFMgPSB7XG4gIGN1cnJlbnQ6IFwiQ3VycmVudCB0YWJcIixcbiAgY3VycmVudFNhdmVkOiBcIkN1cnJlbnQgdGFiIChzYXZlZClcIixcbiAgbmV3OiBcIk5ldyB0YWJcIixcbiAgbmV3U2F2ZWQ6IFwiTmV3IHRhYiAoc2F2ZWQpXCIsXG59IGFzIGNvbnN0O1xuXG5jb25zdCBkZXNjcmliZUxvY2F0aW9uID0gKG92ZXJyaWRlOiBHZW9PdmVycmlkZSk6IHN0cmluZyA9PlxuICBvdmVycmlkZS5sYWJlbCA/PyBgJHtvdmVycmlkZS5sYXRpdHVkZS50b0ZpeGVkKDUpfSwgJHtvdmVycmlkZS5sb25naXR1ZGUudG9GaXhlZCg1KX1gO1xuXG5leHBvcnQgY29uc3Qgd2lyZVByZW1pdW1GZWF0dXJlc0Zvcm0gPSAoXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgb3B0aW9uczogUHJlbWl1bUZlYXR1cmVzRm9ybUNvbnRyYWN0LFxuKTogUHJlbWl1bUZlYXR1cmVzRm9ybUhhbmRsZSA9PiB7XG4gIGNvbnN0IGVsID0gPFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4oaWQ6IHN0cmluZyk6IFQgPT4gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3I8VD4oYCMke2lkfWApIGFzIFQ7XG5cbiAgY29uc3QgZGV0YWlscyA9IGVsPEhUTUxEZXRhaWxzRWxlbWVudD4oXCJwcmVtaXVtLWRldGFpbHNcIik7XG4gIGRldGFpbHMub3BlbiA9IG9wdGlvbnMuaW5pdGlhbE9wZW47XG4gIGRldGFpbHMuYWRkRXZlbnRMaXN0ZW5lcihcInRvZ2dsZVwiLCAoKSA9PiBvcHRpb25zLm9uVG9nZ2xlKGRldGFpbHMub3BlbikpO1xuXG4gIGVsKFwicHJlbWl1bS1wbHVzLW5vdGljZVwiKS5zdHlsZS5kaXNwbGF5ID0gb3B0aW9ucy5oYXNQbHVzID09PSB0cnVlID8gXCJcIiA6IFwibm9uZVwiO1xuXG4gIGNvbnN0IGVuYWJsZWQgPSBlbDxIVE1MSW5wdXRFbGVtZW50PihcInByZW1pdW0tZW5hYmxlZFwiKTtcbiAgY29uc3QgY29uZmlnID0gZWwoXCJwcmVtaXVtLWNvbmZpZ1wiKTtcbiAgLy8gTWFzdGVyIG9mZjogdGhlIGZlYXR1cmUgbGlzdCBzdGF5cyB2aXNpYmxlIGJ1dCBpdHMgc3dpdGNoZXMgdHVybiBncmF5IGFuZCBjYW4ndCBiZSBjaGFuZ2VkLlxuICBjb25zdCBzeW5jRW5hYmxlZCA9ICgpOiB2b2lkID0+IHtcbiAgICBjb25maWcuY2xhc3NMaXN0LnRvZ2dsZShcInNucC1kaXNhYmxlZFwiLCAhZW5hYmxlZC5jaGVja2VkKTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGNvbmZpZy5xdWVyeVNlbGVjdG9yQWxsPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLnByZW1pdW0tZmVhdHVyZS1oZWFkIGlucHV0XCIpKSB7XG4gICAgICBpbnB1dC5kaXNhYmxlZCA9ICFlbmFibGVkLmNoZWNrZWQ7XG4gICAgfVxuICB9O1xuICBlbmFibGVkLmNoZWNrZWQgPSBvcHRpb25zLmluaXRpYWxFbmFibGVkO1xuICBzeW5jRW5hYmxlZCgpO1xuICBlbmFibGVkLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgIHN5bmNFbmFibGVkKCk7XG4gICAgdm9pZCBvcHRpb25zLm9uVG9nZ2xlRW5hYmxlZChlbmFibGVkLmNoZWNrZWQpO1xuICB9KTtcblxuICAvLyBQZXItZmVhdHVyZSBzd2l0Y2hlcyBhbmQgdGhlaXIgZXhwYW5kZXJzXG4gIGNvbnN0IEZMQUdfSU5QVVRTID0ge1xuICAgIGxvY2F0aW9uOiBcInByZW1pdW0tZmxhZy1sb2NhdGlvblwiLFxuICAgIGJvdW5kYXJ5OiBcInByZW1pdW0tZmxhZy1ib3VuZGFyeVwiLFxuICAgIHBob3RvczogXCJwcmVtaXVtLWZsYWctcGhvdG9zXCIsXG4gIH0gYXMgY29uc3Q7XG4gIGZvciAoY29uc3QgW2tleSwgaWRdIG9mIE9iamVjdC5lbnRyaWVzKEZMQUdfSU5QVVRTKSBhcyBba2V5b2YgdHlwZW9mIEZMQUdfSU5QVVRTLCBzdHJpbmddW10pIHtcbiAgICBjb25zdCBpbnB1dCA9IGVsPEhUTUxJbnB1dEVsZW1lbnQ+KGlkKTtcbiAgICBpbnB1dC5jaGVja2VkID0gb3B0aW9ucy5mbGFnc1trZXldO1xuICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgICAgdm9pZCBvcHRpb25zLm9uRmxhZ0NoYW5nZShrZXksIGlucHV0LmNoZWNrZWQpO1xuICAgIH0pO1xuICB9XG4gIGZvciAoY29uc3QgdG9nZ2xlIG9mIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsPEhUTUxCdXR0b25FbGVtZW50PihcIi5wcmVtaXVtLWZlYXR1cmUtdG9nZ2xlXCIpKSB7XG4gICAgY29uc3QgYm9keSA9IHRvZ2dsZVxuICAgICAgLmNsb3Nlc3QoXCIucHJlbWl1bS1mZWF0dXJlXCIpIVxuICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFwiLnByZW1pdW0tZmVhdHVyZS1ib2R5XCIpITtcbiAgICB0b2dnbGUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuICAgICAgYm9keS5oaWRkZW4gPSAhYm9keS5oaWRkZW47XG4gICAgICB0b2dnbGUuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBTdHJpbmcoIWJvZHkuaGlkZGVuKSk7XG4gICAgICBpZiAoZXZlbnQuZGV0YWlsID4gMCkge1xuICAgICAgICB0b2dnbGUuYmx1cigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTG9jYXRpb25cbiAgY29uc3QgZ2VvQ2xlYXIgPSBlbDxIVE1MQnV0dG9uRWxlbWVudD4oXCJnZW8tY2xlYXJcIik7XG4gIGNvbnN0IGdlb1NhdmVkID0gZWwoXCJnZW8tc2F2ZWRcIik7XG4gIGxldCBjdXJyZW50OiBHZW9PdmVycmlkZSB8IG51bGwgPSBvcHRpb25zLmdlbyA/IHsgLi4ub3B0aW9ucy5nZW8uaW5pdGlhbCB9IDogbnVsbDtcblxuICBjb25zdCBzZXRPdmVycmlkZSA9IChuZXh0OiBHZW9PdmVycmlkZSk6IHZvaWQgPT4ge1xuICAgIGN1cnJlbnQgPSB7IC4uLm5leHQgfTtcbiAgICByZW5kZXJHZW8oKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJHZW8gPSAoKTogdm9pZCA9PiB7XG4gICAgY29uc3QgY2FwdHVyZWQgPSBjdXJyZW50ICE9PSBudWxsICYmIGhhc0NhcHR1cmVkQ29vcmRzKGN1cnJlbnQpO1xuICAgIGdlb0NsZWFyLnN0eWxlLmRpc3BsYXkgPSBjYXB0dXJlZCA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgICBnZW9TYXZlZC50ZXh0Q29udGVudCA9IGNhcHR1cmVkID8gYFNhdmVkOiAke2Rlc2NyaWJlTG9jYXRpb24oY3VycmVudCEpfWAgOiBcIlwiO1xuICB9O1xuXG4gIGlmICghb3B0aW9ucy5nZW8pIHtcbiAgICBlbChcInByZW1pdW0tZ2VvXCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgfVxuICByZW5kZXJHZW8oKTtcblxuICBnZW9DbGVhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIGN1cnJlbnQgPSB7IC4uLmN1cnJlbnQhLCBsYXRpdHVkZTogMCwgbG9uZ2l0dWRlOiAwLCBsYWJlbDogdW5kZWZpbmVkIH07XG4gICAgcmVuZGVyR2VvKCk7XG4gICAgdm9pZCBvcHRpb25zLmdlbz8ub25DbGVhcihjdXJyZW50KTtcbiAgfSk7XG5cbiAgLy8gUHJvZmlsZXMgb3V0c2lkZSBib3VuZGFyeVxuICBjb25zdCBib3JkZXIgPSBvcHRpb25zLmJvcmRlcjtcbiAgaWYgKCFib3JkZXIpIHtcbiAgICBlbChcInByb2ZpbGUtYm9yZGVyLWhpbnRcIikudGV4dENvbnRlbnQgPSBcIlByb2ZpbGVzIG91dHNpZGUgeW91ciBib3VuZGFyeSBvcGVuIGxpa2UgYW55IG90aGVyLlwiO1xuICAgIGVsKFwicHJvZmlsZS1ib3JkZXItdGFiLWZpZWxkXCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICByZXR1cm4geyBzZXRPdmVycmlkZSB9O1xuICB9XG4gIGNvbnN0IHRhYlNlbGVjdCA9IGVsPEhUTUxTZWxlY3RFbGVtZW50PihcInByb2ZpbGUtYm9yZGVyLXRhYlwiKTtcbiAgY29uc3Qgb3B0aW9uQ3VycmVudCA9IHRhYlNlbGVjdC5xdWVyeVNlbGVjdG9yPEhUTUxPcHRpb25FbGVtZW50Pignb3B0aW9uW3ZhbHVlPVwiY3VycmVudC10YWJcIl0nKSE7XG4gIGNvbnN0IG9wdGlvbk5ldyA9IHRhYlNlbGVjdC5xdWVyeVNlbGVjdG9yPEhUTUxPcHRpb25FbGVtZW50Pignb3B0aW9uW3ZhbHVlPVwibmV3LXRhYlwiXScpITtcbiAgY29uc3Qgc2F2ZUJ0biA9IGVsPEhUTUxCdXR0b25FbGVtZW50PihcInByb2ZpbGUtYm9yZGVyLXNhdmVcIik7XG5cbiAgY29uc3QgYXBwbHlMYWJlbHMgPSAob3BlbkluTmV3VGFiOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgb3B0aW9uQ3VycmVudC50ZXh0ID0gb3BlbkluTmV3VGFiID8gVEFCX0xBQkVMUy5jdXJyZW50IDogVEFCX0xBQkVMUy5jdXJyZW50U2F2ZWQ7XG4gICAgb3B0aW9uTmV3LnRleHQgPSBvcGVuSW5OZXdUYWIgPyBUQUJfTEFCRUxTLm5ld1NhdmVkIDogVEFCX0xBQkVMUy5uZXc7XG4gIH07XG5cbiAgbGV0IHNhdmVkOiBQcm9maWxlQm9yZGVyT3BlbiA9IHsgLi4uYm9yZGVyLmluaXRpYWwgfTtcbiAgdGFiU2VsZWN0LnZhbHVlID0gc2F2ZWQub3BlbkluTmV3VGFiID8gXCJuZXctdGFiXCIgOiBcImN1cnJlbnQtdGFiXCI7XG4gIGFwcGx5TGFiZWxzKHNhdmVkLm9wZW5Jbk5ld1RhYik7XG4gIHNhdmVCdG4uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXG4gIHRhYlNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICBzYXZlQnRuLnN0eWxlLmRpc3BsYXkgPSAodGFiU2VsZWN0LnZhbHVlID09PSBcIm5ldy10YWJcIikgIT09IHNhdmVkLm9wZW5Jbk5ld1RhYiA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfSk7XG5cbiAgc2F2ZUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG5leHQgPSB7IC4uLnNhdmVkLCBvcGVuSW5OZXdUYWI6IHRhYlNlbGVjdC52YWx1ZSA9PT0gXCJuZXctdGFiXCIgfTtcbiAgICB2b2lkIFByb21pc2UucmVzb2x2ZShib3JkZXIub25TYXZlKG5leHQpKS50aGVuKCgpID0+IHtcbiAgICAgIHNhdmVkID0gbmV4dDtcbiAgICAgIGFwcGx5TGFiZWxzKG5leHQub3BlbkluTmV3VGFiKTtcbiAgICAgIHNhdmVCdG4uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4geyBzZXRPdmVycmlkZSB9O1xufTtcbiIsICJpbXBvcnQgeyBBVVRIRU5USUNBVEVfQ1VSUkVOVF9QQVRILCB0eXBlIEF1dGhlbnRpY2F0ZUN1cnJlbnRQYXlsb2FkIH0gZnJvbSBcIi4vc25pZmZpZXMtYXBpLmpzXCI7XG5cbi8qKiBUcnVlIHdoZW4gdGhlIGFjY291bnQgaGFzIGFuIGFjdGl2ZSBTbmlmZmllcyBQbHVzIG1lbWJlcnNoaXAgdGhhdCBoYXNuJ3QgZW5kZWQuICovXG5leHBvcnQgY29uc3QgaXNQbHVzTWVtYmVyc2hpcCA9IChib2R5OiBBdXRoZW50aWNhdGVDdXJyZW50UGF5bG9hZCwgbm93ID0gRGF0ZS5ub3coKSk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBtZW1iZXJzaGlwID0gYm9keS51c2VyPy5wcml2YXRlPy5hcHBzdG9yZU1lbWJlcnNoaXA7XG4gIGlmICghbWVtYmVyc2hpcCB8fCBtZW1iZXJzaGlwLnN1YnNjcmlwdGlvblN0YXR1cyAhPT0gXCJhY3RpdmVcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbWVtYmVyc2hpcC5lbmQgPT09IHVuZGVmaW5lZCB8fCBEYXRlLnBhcnNlKG1lbWJlcnNoaXAuZW5kKSA+IG5vdztcbn07XG5cbnR5cGUgUGF0Y2hlZFhIUlByb3RvdHlwZSA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUgJiB7IF9fc25pZmZpZXNQbHVzUGF0Y2hlZD86IGJvb2xlYW4gfTtcbnR5cGUgWGhyV2l0aFBsdXNGbGFnID0gWE1MSHR0cFJlcXVlc3QgJiB7IF9fc25pZmZpZXNJc0F1dGhDdXJyZW50PzogYm9vbGVhbiB9O1xuXG5jb25zdCByZXBvcnQgPSAodGV4dDogc3RyaW5nLCBvblJlc3VsdDogKGhhc1BsdXM6IGJvb2xlYW4pID0+IHZvaWQpOiB2b2lkID0+IHtcbiAgdHJ5IHtcbiAgICBvblJlc3VsdChpc1BsdXNNZW1iZXJzaGlwKEpTT04ucGFyc2UodGV4dCkgYXMgQXV0aGVudGljYXRlQ3VycmVudFBheWxvYWQpKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gVW5wYXJzZWFibGUgcmVzcG9uc2U6IHJlcG9ydCBub3RoaW5nIHJhdGhlciB0aGFuIGd1ZXNzLlxuICB9XG59O1xuXG4vKipcbiAqIFdhdGNoZXMgdGhlIFBPU1QgL2FwaS9hdXRoZW50aWNhdGUvY3VycmVudCByZXNwb25zZSAoZmV0Y2ggYW5kIFhIUikgYW5kIHJlcG9ydHMgd2hldGhlciB0aGVcbiAqIGFjY291bnQgaGFzIFNuaWZmaWVzIFBsdXMuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnN0YWxsUGx1c0hvb2sgPSAob25SZXN1bHQ6IChoYXNQbHVzOiBib29sZWFuKSA9PiB2b2lkKTogdm9pZCA9PiB7XG4gIGNvbnN0IHByb3RvID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlIGFzIFBhdGNoZWRYSFJQcm90b3R5cGU7XG4gIGlmIChwcm90by5fX3NuaWZmaWVzUGx1c1BhdGNoZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvdG8uX19zbmlmZmllc1BsdXNQYXRjaGVkID0gdHJ1ZTtcblxuICBjb25zdCBuYXRpdmVPcGVuID0gcHJvdG8ub3BlbjtcbiAgY29uc3QgbmF0aXZlU2VuZCA9IHByb3RvLnNlbmQ7XG4gIHByb3RvLm9wZW4gPSBmdW5jdGlvbiAoXG4gICAgdGhpczogWGhyV2l0aFBsdXNGbGFnLFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nIHwgVVJMLFxuICAgIC4uLnJlc3Q6IHVua25vd25bXVxuICApIHtcbiAgICB0aGlzLl9fc25pZmZpZXNJc0F1dGhDdXJyZW50ID0gdXJsLnRvU3RyaW5nKCkuaW5jbHVkZXMoQVVUSEVOVElDQVRFX0NVUlJFTlRfUEFUSCk7XG4gICAgcmV0dXJuIChuYXRpdmVPcGVuIGFzICguLi5hOiB1bmtub3duW10pID0+IHVua25vd24pLmFwcGx5KHRoaXMsIFttZXRob2QsIHVybCwgLi4ucmVzdF0pO1xuICB9IGFzIHR5cGVvZiBwcm90by5vcGVuO1xuICBwcm90by5zZW5kID0gZnVuY3Rpb24gKHRoaXM6IFhocldpdGhQbHVzRmxhZywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgaWYgKHRoaXMuX19zbmlmZmllc0lzQXV0aEN1cnJlbnQpIHtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4gcmVwb3J0KHRoaXMucmVzcG9uc2VUZXh0LCBvblJlc3VsdCkpO1xuICAgIH1cbiAgICByZXR1cm4gKG5hdGl2ZVNlbmQgYXMgKC4uLmE6IHVua25vd25bXSkgPT4gdW5rbm93bikuYXBwbHkodGhpcywgYXJncyk7XG4gIH0gYXMgdHlwZW9mIHByb3RvLnNlbmQ7XG5cbiAgY29uc3QgbmF0aXZlRmV0Y2ggPSB3aW5kb3cuZmV0Y2g7XG4gIHdpbmRvdy5mZXRjaCA9IGFzeW5jIChpbnB1dCwgaW5pdCkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmF0aXZlRmV0Y2guY2FsbCh3aW5kb3csIGlucHV0LCBpbml0KTtcbiAgICBjb25zdCB1cmwgPSB0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIgPyBpbnB1dCA6IGlucHV0IGluc3RhbmNlb2YgVVJMID8gaW5wdXQuaHJlZiA6IGlucHV0LnVybDtcbiAgICBpZiAodXJsLmluY2x1ZGVzKEFVVEhFTlRJQ0FURV9DVVJSRU5UX1BBVEgpKSB7XG4gICAgICB2b2lkIHJlc3BvbnNlXG4gICAgICAgIC5jbG9uZSgpXG4gICAgICAgIC50ZXh0KClcbiAgICAgICAgLnRoZW4oKHRleHQpID0+IHJlcG9ydCh0ZXh0LCBvblJlc3VsdCkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfTtcbn07XG4iLCAiaW1wb3J0IHsgSUNPTl9IT0xERVJfUklHSFRfQk9UVE9NX1NFTEVDVE9SIH0gZnJvbSBcIi4vc25pZmZpZXMtc2VsZWN0b3JzLmpzXCI7XG5cbi8vIGNsYXNzIGZvciBidXR0b25zIHRoYXQgc2hvdyB1cCBvbiB0aGUgbWFwXG5jb25zdCBJQ09OX0hPTERFUl9ST1dfQ0xBU1MgPSBcImxvd2VyLW1hcC1pY29uXCI7XG4vLyBjbGFzcyBmb3IgdGhlIGZhYiBidXR0b24gd2hlbiBtb3VudGVkIG9uIHRoZSBtYXBcbmNvbnN0IEZBQl9ET0NLRURfQ0xBU1MgPSBcInNucC1mYWItZG9ja2VkXCI7XG5jb25zdCBOR0NPTlRFTlRfQVRUUl9QUkVGSVggPSBcIl9uZ2NvbnRlbnQtXCI7XG5cbmNvbnN0IGNvcHlOZ0NvbnRlbnRBdHRyID0gKHRhcmdldDogRWxlbWVudCwgc291cmNlOiBFbGVtZW50KTogdm9pZCA9PiB7XG4gIGNvbnN0IGF0dHIgPSBBcnJheS5mcm9tKHNvdXJjZS5hdHRyaWJ1dGVzKS5maW5kKChhKSA9PiBhLm5hbWUuc3RhcnRzV2l0aChOR0NPTlRFTlRfQVRUUl9QUkVGSVgpKTtcbiAgaWYgKGF0dHIpIHtcbiAgICB0YXJnZXQuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBtb3VudEZhYiA9IChmYWI6IEhUTUxCdXR0b25FbGVtZW50KTogdm9pZCA9PiB7XG4gIGNvbnN0IHRyeUluc2VydEludG9JY29uSG9sZGVyID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGljb25Ib2xkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihJQ09OX0hPTERFUl9SSUdIVF9CT1RUT01fU0VMRUNUT1IpO1xuICAgIGlmICghaWNvbkhvbGRlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmFiLnBhcmVudEVsZW1lbnQgIT09IGljb25Ib2xkZXIpIHtcbiAgICAgIGljb25Ib2xkZXIucHJlcGVuZChmYWIpO1xuICAgICAgZmFiLmNsYXNzTGlzdC5hZGQoSUNPTl9IT0xERVJfUk9XX0NMQVNTLCBGQUJfRE9DS0VEX0NMQVNTKTtcbiAgICAgIGNvcHlOZ0NvbnRlbnRBdHRyKGZhYiwgaWNvbkhvbGRlcik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIEZhbGxiYWNrIGFuY2hvciwgdXNlZCB1bnRpbCB0aGUgaWNvbiByb3cgYWJvdmUgZmlyc3QgYXBwZWFycy5cbiAgaWYgKCF0cnlJbnNlcnRJbnRvSWNvbkhvbGRlcigpKSB7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmYWIpO1xuICB9XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgdHJ5SW5zZXJ0SW50b0ljb25Ib2xkZXIoKTtcbiAgfSk7XG4gIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG59O1xuIiwgIiNzbnAtZmFiIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBib3R0b206IGNhbGMoODBweCArIDV2aCk7XG4gIHJpZ2h0OiAxNnB4O1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ2O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDcsIDE2LCAzMCwgMC44NSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwZjFlMzU7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgd2lkdGg6IDQ0cHg7XG4gIGhlaWdodDogNDRweDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBmb250OiBpbmhlcml0O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgb3BhY2l0eTogMC45O1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzO1xuICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpO1xufVxuI3NucC1mYWI6aG92ZXIge1xuICBvcGFjaXR5OiAxO1xufVxuXG4jc25wLWZhYi5zbnAtZmFiLWRvY2tlZCB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGJvdHRvbTogYXV0bztcbiAgcmlnaHQ6IGF1dG87XG4gIHotaW5kZXg6IGF1dG87XG4gIHdpZHRoOiBhdXRvO1xuICBoZWlnaHQ6IGF1dG87XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIG9wYWNpdHk6IDE7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG4jc25wLWZhYi1pY29uIHtcbiAgYmFja2dyb3VuZC1zaXplOiAyNHB4IDI0cHg7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuXG4uc25wLWZhYi1pY29uLWJhc2Utc2l6ZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbn1cblxuI3NucC1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiA2MHB4O1xuICByaWdodDogMTJweDtcbiAgei1pbmRleDogMjE0NzQ4MzY0NztcbiAgd2lkdGg6IDMwMHB4O1xuICBiYWNrZ3JvdW5kOiAjMDcxMDFlO1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci10b3A6IDhweCBzb2xpZCAjNGI4NGU2O1xuICBib3JkZXItYm90dG9tOiA4cHggc29saWQgIzRiODRlNjtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBib3gtc2hhZG93OiAwIDRweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgZm9udC1mYW1pbHk6IFJvYm90bywgUmVkYWN0aW9uU3F1YXJlLCBzYW5zLXNlcmlmO1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgcGFkZGluZzogMTRweCAxNnB4IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDE2MHB4KTtcbiAgbWF4LWhlaWdodDogY2FsYygxMDBkdmggLSAxNjBweCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbn1cblxuI3NucC1wYW5lbDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDhweDtcbn1cbiNzbnAtcGFuZWw6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4jc25wLXBhbmVsOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuI3NucC1wYW5lbDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBiYWNrZ3JvdW5kOiAjYWViY2QwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbkBzdXBwb3J0cyBub3Qgc2VsZWN0b3IoOjotd2Via2l0LXNjcm9sbGJhcikge1xuICAjc25wLXBhbmVsIHtcbiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gICAgc2Nyb2xsYmFyLWNvbG9yOiAjYWViY2QwIHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi5zbnAtaGVhZGVyIHtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLnNucC10aXRsZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgZ2FwOiA2cHg7XG59XG4uc25wLWhlYWRlciBoMSB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luOiAwO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMWVtO1xufVxuXG4uc25wLWNsb3NlIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6ICM3YTkwYTQ7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBsaW5lLWhlaWdodDogMTtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXM7XG59XG4uc25wLWNsb3NlOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4vbG9nLmpzXCI7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcihcInVwZGF0ZS1jaGVja1wiKTtcblxuZXhwb3J0IHR5cGUgUmVsZWFzZUNoYW5uZWwgPSBcImNocm9tZVwiIHwgXCJ1c2Vyc2NyaXB0XCIgfCBcImJvb2ttYXJrbGV0XCI7XG5cbmNvbnN0IFJFTEVBU0VTX0FQSSA9IFwiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9kZWNrbWFzdGVyYmVhbS9TbmlmZmllc1Byb2plY3RzL3JlbGVhc2VzXCI7XG5cbmNvbnN0IENBQ0hFX0tFWV9QUkVGSVggPSBcInNucC1sYXRlc3QtdmVyc2lvbi1cIjtcbmNvbnN0IENBQ0hFX1RUTF9NUyA9IDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlIHtcbiAgdGFnX25hbWU6IHN0cmluZztcbn1cblxuY29uc3QgcGFyc2VWZXJzaW9uID0gKHZlcnNpb246IHN0cmluZyk6IG51bWJlcltdID0+IHZlcnNpb24uc3BsaXQoXCIuXCIpLm1hcCgobikgPT4gTnVtYmVyKG4pIHx8IDApO1xuXG4vKiogVHJ1ZSBpZiBgYmAgaXMgYSBuZXdlciB2ZXJzaW9uIHRoYW4gYGFgIChudW1lcmljLCBkb3Qtc2VwYXJhdGVkIGNvbXBhcmlzb24pLiAqL1xuZXhwb3J0IGNvbnN0IGlzTmV3ZXJWZXJzaW9uID0gKGE6IHN0cmluZywgYjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHBhcnRzQSA9IHBhcnNlVmVyc2lvbihhKTtcbiAgY29uc3QgcGFydHNCID0gcGFyc2VWZXJzaW9uKGIpO1xuICBjb25zdCBsZW4gPSBNYXRoLm1heChwYXJ0c0EubGVuZ3RoLCBwYXJ0c0IubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IHggPSBwYXJ0c0FbaV0gPz8gMDtcbiAgICBjb25zdCB5ID0gcGFydHNCW2ldID8/IDA7XG4gICAgaWYgKHkgIT09IHgpIHJldHVybiB5ID4geDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCByZWFkQ2FjaGUgPSAoY2hhbm5lbDogUmVsZWFzZUNoYW5uZWwpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDQUNIRV9LRVlfUFJFRklYICsgY2hhbm5lbCk7XG4gICAgY29uc3QgY2FjaGVkID0gcmF3ID8gKEpTT04ucGFyc2UocmF3KSBhcyB7IHZlcnNpb246IHN0cmluZzsgYXQ6IG51bWJlciB9KSA6IG51bGw7XG4gICAgcmV0dXJuIGNhY2hlZCAmJiBEYXRlLm5vdygpIC0gY2FjaGVkLmF0IDwgQ0FDSEVfVFRMX01TID8gY2FjaGVkLnZlcnNpb24gOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3Qgd3JpdGVDYWNoZSA9IChjaGFubmVsOiBSZWxlYXNlQ2hhbm5lbCwgdmVyc2lvbjogc3RyaW5nKTogdm9pZCA9PiB7XG4gIHRyeSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oQ0FDSEVfS0VZX1BSRUZJWCArIGNoYW5uZWwsIEpTT04uc3RyaW5naWZ5KHsgdmVyc2lvbiwgYXQ6IERhdGUubm93KCkgfSkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBTdG9yYWdlIHVuYXZhaWxhYmxlIFx1MjAxNCBqdXN0IHNraXAgY2FjaGluZy5cbiAgfVxufTtcblxuLyoqXG4gKiBGZXRjaGVzIHB1Ymxpc2hlZCBHaXRIdWIgcmVsZWFzZXMgYW5kIHJldHVybnMgdGhlIG5ld2VzdCB2ZXJzaW9uIHRhZ2dlZC4gQSBmb3VuZCB2ZXJzaW9uIGlzIGNhY2hlZCBmb3IgMjRoXG4gKi9cbmV4cG9ydCBjb25zdCBmZXRjaExhdGVzdFZlcnNpb24gPSBhc3luYyAoY2hhbm5lbDogUmVsZWFzZUNoYW5uZWwpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcbiAgY29uc3QgY2FjaGVkVmVyc2lvbiA9IHJlYWRDYWNoZShjaGFubmVsKTtcbiAgaWYgKGNhY2hlZFZlcnNpb24gIT09IG51bGwpIHtcbiAgICByZXR1cm4gY2FjaGVkVmVyc2lvbjtcbiAgfVxuICBjb25zdCBwcmVmaXggPSBgJHtjaGFubmVsfS1gO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFJFTEVBU0VTX0FQSSwge1xuICAgICAgaGVhZGVyczogeyBBY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uXCIgfSxcbiAgICB9KTtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgbG9nLmVycm9yKFwicmVsZWFzZXMgZmV0Y2ggcmVqZWN0ZWRcIiwgcmVzLnN0YXR1cyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcmVsZWFzZXMgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgR2l0SHViUmVsZWFzZVtdO1xuICAgIGxldCBsYXRlc3Q6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGZvciAoY29uc3QgcmVsZWFzZSBvZiByZWxlYXNlcykge1xuICAgICAgaWYgKCFyZWxlYXNlLnRhZ19uYW1lPy5zdGFydHNXaXRoKHByZWZpeCkpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgdmVyc2lvbiA9IHJlbGVhc2UudGFnX25hbWUuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gICAgICBpZiAobGF0ZXN0ID09PSBudWxsIHx8IGlzTmV3ZXJWZXJzaW9uKGxhdGVzdCwgdmVyc2lvbikpIHtcbiAgICAgICAgbGF0ZXN0ID0gdmVyc2lvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGxhdGVzdCAhPT0gbnVsbCkge1xuICAgICAgd3JpdGVDYWNoZShjaGFubmVsLCBsYXRlc3QpO1xuICAgIH1cbiAgICByZXR1cm4gbGF0ZXN0O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBcdTIwMTQgbmV0d29yay9DU1AgZmFpbHVyZXMgYXJlIG5vdCBhY3Rpb25hYmxlIGhlcmUuXG4gICAgbG9nLmVycm9yKFwicmVsZWFzZXMgZmV0Y2ggZmFpbGVkXCIsIGVycik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbi8qKiBUcnVlIGlmIGEgbmV3ZXIgYGNoYW5uZWxgIHJlbGVhc2UgdGhhbiBgY3VycmVudFZlcnNpb25gIGlzIHB1Ymxpc2hlZCBvbiBHaXRIdWIuICovXG5leHBvcnQgY29uc3QgaXNVcGRhdGVBdmFpbGFibGUgPSBhc3luYyAoXG4gIGNoYW5uZWw6IFJlbGVhc2VDaGFubmVsLFxuICBjdXJyZW50VmVyc2lvbjogc3RyaW5nLFxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGxhdGVzdCA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbihjaGFubmVsKTtcbiAgcmV0dXJuIGxhdGVzdCAhPT0gbnVsbCAmJiBpc05ld2VyVmVyc2lvbihjdXJyZW50VmVyc2lvbiwgbGF0ZXN0KTtcbn07XG4iLCAiPGRpdiBpZD1cInNucC11cGRhdGUtYmFubmVyXCIgY2xhc3M9XCJzbnAtdXBkYXRlLWJhbm5lclwiIGhpZGRlbj5cbiAgVGhpcyBleHRlbnNpb24gaXMgb3V0IG9mIGRhdGUuIGdvIHRvXG4gIDxhXG4gICAgaHJlZj1cImh0dHBzOi8vd3d3Lmpvc2hiYXJuZXR0LmRldi9wcm9qZWN0cy9zbmlmZmllcy1wcm9qZWN0L2luc3RhbGwvXCJcbiAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgID5odHRwczovL3d3dy5qb3NoYmFybmV0dC5kZXYvcHJvamVjdHMvc25pZmZpZXMtcHJvamVjdC9pbnN0YWxsLzwvYVxuICA+XG4gIHRvIHVwZGF0ZS5cbjwvZGl2PlxuIiwgIi5zbnAtdXBkYXRlLWJhbm5lciB7XG4gIG1hcmdpbjogOHB4IDA7XG4gIHBhZGRpbmc6IDhweCAxMHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJhY2tncm91bmQ6ICM0YTJhMDA7XG4gIGNvbG9yOiAjZmZjZjhhO1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi5zbnAtdXBkYXRlLWJhbm5lcltoaWRkZW5dIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLnNucC11cGRhdGUtYmFubmVyIGEge1xuICBjb2xvcjogI2ZmZTFiMDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cbiIsICJpbXBvcnQgVVBEQVRFX0JBTk5FUl9IVE1MIGZyb20gXCIuL3VwZGF0ZS1iYW5uZXIuaHRtbFwiO1xuaW1wb3J0IFVQREFURV9CQU5ORVJfQ1NTIGZyb20gXCIuL3VwZGF0ZS1iYW5uZXIuY3NzXCI7XG5pbXBvcnQgeyBpc1VwZGF0ZUF2YWlsYWJsZSwgdHlwZSBSZWxlYXNlQ2hhbm5lbCB9IGZyb20gXCIuL3VwZGF0ZS1jaGVjay5qc1wiO1xuXG5leHBvcnQgeyBVUERBVEVfQkFOTkVSX0hUTUwsIFVQREFURV9CQU5ORVJfQ1NTIH07XG5cbi8qKlxuICogQ2hlY2tzIEdpdEh1YiByZWxlYXNlcyBmb3IgYSBuZXdlciBgY2hhbm5lbGAgYnVpbGQgYW5kLCBpZiBvbmUgaXNcbiAqIHB1Ymxpc2hlZCwgdW4taGlkZXMgdGhlIGAjc25wLXVwZGF0ZS1iYW5uZXJgIGVsZW1lbnQgaW5zaWRlIGBjb250YWluZXJgLlxuICovXG5leHBvcnQgY29uc3Qgd2lyZVVwZGF0ZUJhbm5lciA9IChcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBjaGFubmVsOiBSZWxlYXNlQ2hhbm5lbCxcbiAgY3VycmVudFZlcnNpb246IHN0cmluZyxcbik6IHZvaWQgPT4ge1xuICBjb25zdCBlbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIiNzbnAtdXBkYXRlLWJhbm5lclwiKTtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICB2b2lkIGlzVXBkYXRlQXZhaWxhYmxlKGNoYW5uZWwsIGN1cnJlbnRWZXJzaW9uKS50aGVuKChvdXRPZkRhdGUpID0+IHtcbiAgICBpZiAob3V0T2ZEYXRlKSB7XG4gICAgICBlbC5oaWRkZW4gPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xufTtcbiIsICJpbXBvcnQge1xuICBERUZBVUxUX1BST0ZJTEVfQk9SREVSX09QRU4sXG4gIHBhcnNlUHJlbWl1bUZlYXR1cmVGbGFncyxcbiAgcmVzb2x2ZVByZW1pdW1GZWF0dXJlc0VuYWJsZWQsXG4gIHR5cGUgUHJlbWl1bUZlYXR1cmVGbGFncyxcbiAgdHlwZSBQcm9maWxlQm9yZGVyT3Blbixcbn0gZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcblxuLy8gQWxsIG9mIGNvcmUncyBsb2NhbFN0b3JhZ2Uga2V5cyBhbmQgdGhlaXIgZ2V0dGVycy9zZXR0ZXJzIGxpdmUgaGVyZVxuY29uc3QgUFJPRklMRV9CT1JERVJfU1RPUkFHRV9LRVkgPSBcInNuaWZmaWVzLXByb2ZpbGUtYm9yZGVyXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRQcm9maWxlQm9yZGVyT3BlbiA9ICgpOiBQcm9maWxlQm9yZGVyT3BlbiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oUFJPRklMRV9CT1JERVJfU1RPUkFHRV9LRVkpO1xuICAgIHJldHVybiByYXdcbiAgICAgID8geyAuLi5ERUZBVUxUX1BST0ZJTEVfQk9SREVSX09QRU4sIC4uLkpTT04ucGFyc2UocmF3KSB9XG4gICAgICA6IHsgLi4uREVGQVVMVF9QUk9GSUxFX0JPUkRFUl9PUEVOIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IC4uLkRFRkFVTFRfUFJPRklMRV9CT1JERVJfT1BFTiB9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0UHJvZmlsZUJvcmRlck9wZW4gPSAobmV4dDogUHJvZmlsZUJvcmRlck9wZW4pOiB2b2lkID0+IHtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oUFJPRklMRV9CT1JERVJfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KG5leHQpKTtcbn07XG5cbmNvbnN0IFBST0ZJTEVfRklMVEVSU19FTkFCTEVEX1NUT1JBR0VfS0VZID0gXCJzbmlmZmllcy1wcm9maWxlLWZpbHRlcnMtZW5hYmxlZFwiO1xuY29uc3QgUFJPRklMRV9GSUxURVJTX1NFQ1RJT05fT1BFTl9TVE9SQUdFX0tFWSA9IFwic25pZmZpZXMtcHJvZmlsZS1maWx0ZXJzLXNlY3Rpb24tb3BlblwiO1xuXG5leHBvcnQgY29uc3QgZ2V0UHJvZmlsZUZpbHRlcnNFbmFibGVkID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oUFJPRklMRV9GSUxURVJTX0VOQUJMRURfU1RPUkFHRV9LRVkpID09PSBcInRydWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRQcm9maWxlRmlsdGVyc0VuYWJsZWQgPSAoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShQUk9GSUxFX0ZJTFRFUlNfRU5BQkxFRF9TVE9SQUdFX0tFWSwgU3RyaW5nKGVuYWJsZWQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQcm9maWxlRmlsdGVyc1NlY3Rpb25PcGVuID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oUFJPRklMRV9GSUxURVJTX1NFQ1RJT05fT1BFTl9TVE9SQUdFX0tFWSkgPT09IFwidHJ1ZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFByb2ZpbGVGaWx0ZXJzU2VjdGlvbk9wZW4gPSAob3BlbjogYm9vbGVhbik6IHZvaWQgPT4ge1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShQUk9GSUxFX0ZJTFRFUlNfU0VDVElPTl9PUEVOX1NUT1JBR0VfS0VZLCBTdHJpbmcob3BlbikpO1xufTtcblxuY29uc3QgUFJFTUlVTV9GRUFUVVJFU19FTkFCTEVEX1NUT1JBR0VfS0VZID0gXCJzbmlmZmllcy1wcmVtaXVtLWZlYXR1cmVzLWVuYWJsZWRcIjtcbmNvbnN0IEdFT19TVE9SQUdFX0tFWSA9IFwic25pZmZpZXMtZ2VvXCI7XG5cbmNvbnN0IHJlYWRMZWdhY3lFbmFibGVkID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICByZXR1cm4gcmF3ID8gQm9vbGVhbihKU09OLnBhcnNlKHJhdyk/LmVuYWJsZWQpIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UHJlbWl1bUZlYXR1cmVzRW5hYmxlZCA9ICgpOiBib29sZWFuID0+IHtcbiAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oUFJFTUlVTV9GRUFUVVJFU19FTkFCTEVEX1NUT1JBR0VfS0VZKTtcbiAgcmV0dXJuIHJlc29sdmVQcmVtaXVtRmVhdHVyZXNFbmFibGVkKFxuICAgIHJhdyA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJhdyA9PT0gXCJ0cnVlXCIsXG4gICAgcmVhZExlZ2FjeUVuYWJsZWQoR0VPX1NUT1JBR0VfS0VZKSxcbiAgICByZWFkTGVnYWN5RW5hYmxlZChQUk9GSUxFX0JPUkRFUl9TVE9SQUdFX0tFWSksXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0UHJlbWl1bUZlYXR1cmVzRW5hYmxlZCA9IChlbmFibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFBSRU1JVU1fRkVBVFVSRVNfRU5BQkxFRF9TVE9SQUdFX0tFWSwgU3RyaW5nKGVuYWJsZWQpKTtcbn07XG5cbmNvbnN0IFBSRU1JVU1fRkxBR1NfU1RPUkFHRV9LRVkgPSBcInNuaWZmaWVzLXByZW1pdW0tZmVhdHVyZS1mbGFnc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0UHJlbWl1bUZlYXR1cmVGbGFncyA9ICgpOiBQcmVtaXVtRmVhdHVyZUZsYWdzID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VQcmVtaXVtRmVhdHVyZUZsYWdzKEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oUFJFTUlVTV9GTEFHU19TVE9SQUdFX0tFWSkhKSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBwYXJzZVByZW1pdW1GZWF0dXJlRmxhZ3MobnVsbCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRQcmVtaXVtRmVhdHVyZUZsYWdzID0gKGZsYWdzOiBQcmVtaXVtRmVhdHVyZUZsYWdzKTogdm9pZCA9PiB7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFBSRU1JVU1fRkxBR1NfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGZsYWdzKSk7XG59O1xuXG5jb25zdCBQUkVNSVVNX1NFQ1RJT05fT1BFTl9TVE9SQUdFX0tFWSA9IFwic25pZmZpZXMtcHJlbWl1bS1zZWN0aW9uLW9wZW5cIjtcbmNvbnN0IEhBU19QTFVTX1NUT1JBR0VfS0VZID0gXCJzbmlmZmllcy1oYXMtcGx1c1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0UHJlbWl1bVNlY3Rpb25PcGVuID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oUFJFTUlVTV9TRUNUSU9OX09QRU5fU1RPUkFHRV9LRVkpID09PSBcInRydWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRQcmVtaXVtU2VjdGlvbk9wZW4gPSAob3BlbjogYm9vbGVhbik6IHZvaWQgPT4ge1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShQUkVNSVVNX1NFQ1RJT05fT1BFTl9TVE9SQUdFX0tFWSwgU3RyaW5nKG9wZW4pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIYXNQbHVzID0gKCk6IGJvb2xlYW4gfCBudWxsID0+IHtcbiAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oSEFTX1BMVVNfU1RPUkFHRV9LRVkpO1xuICByZXR1cm4gcmF3ID09PSBudWxsID8gbnVsbCA6IHJhdyA9PT0gXCJ0cnVlXCI7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0SGFzUGx1cyA9IChoYXNQbHVzOiBib29sZWFuKTogdm9pZCA9PiB7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKEhBU19QTFVTX1NUT1JBR0VfS0VZLCBTdHJpbmcoaGFzUGx1cykpO1xufTtcbiIsICI8c3BhbiBpZD1cInNucC12ZXJzaW9uXCIgY2xhc3M9XCJzbnAtdmVyc2lvblwiPjwvc3Bhbj5cbiIsICIuc25wLXZlcnNpb24ge1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGNvbG9yOiAjN2E5MGE0O1xuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xufVxuIiwgImltcG9ydCBWRVJTSU9OX0JBREdFX0hUTUwgZnJvbSBcIi4vdmVyc2lvbi1iYWRnZS5odG1sXCI7XG5pbXBvcnQgVkVSU0lPTl9CQURHRV9DU1MgZnJvbSBcIi4vdmVyc2lvbi1iYWRnZS5jc3NcIjtcblxuZXhwb3J0IHsgVkVSU0lPTl9CQURHRV9IVE1MLCBWRVJTSU9OX0JBREdFX0NTUyB9O1xuXG4vKiogUmVuZGVycyBgdmVyc2lvbmAgaW50byB0aGUgYCNzbnAtdmVyc2lvbmAgZWxlbWVudCBpbnNpZGUgYGNvbnRhaW5lcmAuICovXG5leHBvcnQgY29uc3Qgd2lyZVZlcnNpb25CYWRnZSA9IChjb250YWluZXI6IEVsZW1lbnQsIHZlcnNpb246IHN0cmluZyk6IHZvaWQgPT4ge1xuICBjb25zdCBlbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIiNzbnAtdmVyc2lvblwiKTtcbiAgaWYgKGVsKSB7XG4gICAgZWwudGV4dENvbnRlbnQgPSBgdiR7dmVyc2lvbn1gO1xuICB9XG59O1xuIiwgImltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuL2xvZy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMb2NhdGlvblB1dEJvZHkgfSBmcm9tIFwiLi9zbmlmZmllcy1hcGkuanNcIjtcbmltcG9ydCB7IFRSQVZFTF9IRVJFX0JVVFRPTl9TRUxFQ1RPUiB9IGZyb20gXCIuL3NuaWZmaWVzLXNlbGVjdG9ycy5qc1wiO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoXCJ0cmF2ZWwtY2FwdHVyZVwiKTtcbmNvbnN0IEFSTV9USU1FT1VUX01TID0gNTAwMDtcblxuZXhwb3J0IGludGVyZmFjZSBUcmF2ZWxDbGlja0FybWVyIHtcbiAgY29uc3VtZTogKCkgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXYXRjaGVzIGZvciBjbGlja3Mgb24gU25pZmZpZXMnIG93biBcIlRyYXZlbCBoZXJlXCIgYnV0dG9uLlxuICogQHBhcmFtIG9uQ2xpY2sgRmlyZWQgc3luY2hyb25vdXNseSBvbiBldmVyeSBtYXRjaGluZyBjbGlja1xuICovXG5leHBvcnQgY29uc3QgaW5zdGFsbFRyYXZlbENsaWNrQXJtZXIgPSAob25DbGljaz86ICgpID0+IHZvaWQpOiBUcmF2ZWxDbGlja0FybWVyID0+IHtcbiAgbGV0IGFybWVkID0gZmFsc2U7XG4gIGxldCBkaXNhcm1UaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBkaXNhcm0gPSAoKTogdm9pZCA9PiB7XG4gICAgYXJtZWQgPSBmYWxzZTtcbiAgICBpZiAoZGlzYXJtVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dChkaXNhcm1UaW1lcik7XG4gICAgICBkaXNhcm1UaW1lciA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGxvZyhgd2F0Y2hpbmcgZm9yIGNsaWNrcyBtYXRjaGluZyAke1RSQVZFTF9IRVJFX0JVVFRPTl9TRUxFQ1RPUn1gKTtcblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgIFwiY2xpY2tcIixcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8ICF0YXJnZXQuY2xvc2VzdChUUkFWRUxfSEVSRV9CVVRUT05fU0VMRUNUT1IpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxvZyhcInRyYXZlbCBoZXJlIGNsaWNrZWQsIGFybWluZyBjYXB0dXJlIGZvclwiLCBBUk1fVElNRU9VVF9NUywgXCJtc1wiKTtcbiAgICAgIG9uQ2xpY2s/LigpO1xuICAgICAgYXJtZWQgPSB0cnVlO1xuICAgICAgaWYgKGRpc2FybVRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChkaXNhcm1UaW1lcik7XG4gICAgICB9XG4gICAgICBkaXNhcm1UaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsb2coXCJhcm1lZCB3aW5kb3cgZXhwaXJlZCB3aXRoIG5vIG1hdGNoaW5nIGxvY2F0aW9uIFBVVCBzZWVuXCIpO1xuICAgICAgICBkaXNhcm0oKTtcbiAgICAgIH0sIEFSTV9USU1FT1VUX01TKTtcbiAgICB9LFxuICAgIHRydWUsXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb25zdW1lOiAoKSA9PiB7XG4gICAgICBjb25zdCB3YXNBcm1lZCA9IGFybWVkO1xuICAgICAgbG9nKFwiY29uc3VtZSgpIGNhbGxlZCwgd2FzIGFybWVkOlwiLCB3YXNBcm1lZCk7XG4gICAgICBkaXNhcm0oKTtcbiAgICAgIHJldHVybiB3YXNBcm1lZDtcbiAgICB9LFxuICB9O1xufTtcblxuLyoqIEV4dHJhY3RzIHRoZSBkZXN0aW5hdGlvbiBjb29yZHMgZnJvbSAvYXBpL3Zpc2l0b3IvY3VycmVudC9sb2NhdGlvbiBQVVQgYm9keSAqL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RUcmF2ZWxEZXN0aW5hdGlvbiA9IChcbiAgYm9keTogdW5rbm93bixcbik6IHsgbGF0aXR1ZGU6IG51bWJlcjsgbG9uZ2l0dWRlOiBudW1iZXIgfSB8IG51bGwgPT4ge1xuICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsb2MgPSAoYm9keSBhcyBMb2NhdGlvblB1dEJvZHkpLnZpcnR1YWxMb2NhdGlvbjtcbiAgaWYgKCFsb2MgfHwgdHlwZW9mIGxvYy5sYXQgIT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIGxvYy5sbmcgIT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4geyBsYXRpdHVkZTogbG9jLmxhdCwgbG9uZ2l0dWRlOiBsb2MubG5nIH07XG59O1xuIiwgImltcG9ydCB7IENJVFlfRU5EUE9JTlRfUEFUVEVSTiwgdHlwZSBDaXR5UGF5bG9hZCB9IGZyb20gXCIuL3NuaWZmaWVzLWFwaS5qc1wiO1xuXG5leHBvcnQgY29uc3QgaXNDaXR5U2VhcmNoVXJsID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiBDSVRZX0VORFBPSU5UX1BBVFRFUk4udGVzdCh1cmwpO1xuXG5leHBvcnQgaW50ZXJmYWNlIENpdHlTZWFyY2hSZXN1bHQge1xuICBsYXRpdHVkZTogbnVtYmVyO1xuICBsb25naXR1ZGU6IG51bWJlcjtcbiAgbGFiZWw/OiBzdHJpbmc7XG59XG5cbi8qKiBFeHRyYWN0cyBjb29yZGluYXRlcyArIGEgZGlzcGxheSBsYWJlbCBmcm9tIGEgR0VUIC9hcGkvY2l0eS97aWR9IHJlc3BvbnNlIGJvZHksIGlmIHByZXNlbnQuICovXG5leHBvcnQgY29uc3QgZXh0cmFjdENpdHlTZWFyY2hSZXN1bHQgPSAoYm9keTogdW5rbm93bik6IENpdHlTZWFyY2hSZXN1bHQgfCBudWxsID0+IHtcbiAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgdHlwZWRCb2R5ID0gYm9keSBhcyBDaXR5UGF5bG9hZDtcbiAgY29uc3QgY29vcmRzID0gdHlwZWRCb2R5LmxvY2F0aW9uPy5jb29yZGluYXRlcztcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkcykgfHwgdHlwZW9mIGNvb3Jkc1swXSAhPT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgY29vcmRzWzFdICE9PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gR2VvSlNPTiBQb2ludCBvcmRlciBpcyBbbG5nLCBsYXRdLlxuICBjb25zdCBbbG9uZ2l0dWRlLCBsYXRpdHVkZV0gPSBjb29yZHM7XG4gIGNvbnN0IGNpdHkgPSB0eXBlb2YgdHlwZWRCb2R5LmNpdHkgPT09IFwic3RyaW5nXCIgPyB0eXBlZEJvZHkuY2l0eSA6IFwiXCI7XG4gIGNvbnN0IGFkbWluTmFtZSA9IHR5cGVvZiB0eXBlZEJvZHkuYWRtaW5fbmFtZSA9PT0gXCJzdHJpbmdcIiA/IHR5cGVkQm9keS5hZG1pbl9uYW1lIDogXCJcIjtcbiAgY29uc3QgbGFiZWwgPSBbY2l0eSwgYWRtaW5OYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiwgXCIpIHx8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHsgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgbGFiZWwgfTtcbn07XG5cbnR5cGUgUGF0Y2hlZFhIUlByb3RvdHlwZSA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUgJiB7XG4gIF9fc25pZmZpZXNDaXR5U2VhcmNoUGF0Y2hlZD86IGJvb2xlYW47XG59O1xudHlwZSBYaHJXaXRoQ2l0eUZsYWcgPSBYTUxIdHRwUmVxdWVzdCAmIHsgX19zbmlmZmllc0lzQ2l0eVNlYXJjaD86IGJvb2xlYW4gfTtcblxuLyoqIFdhdGNoZXMgZm9yIEdFVCAvYXBpL2NpdHkve2lkfSBYSFIgcmVzcG9uc2VzIGFuZCByZXBvcnRzIHRoZSBleHRyYWN0ZWQgcmVzdWx0ICovXG5leHBvcnQgY29uc3QgaW5zdGFsbENpdHlTZWFyY2hYaHJPYnNlcnZlciA9IChcbiAgb25SZXNwb25zZTogKHJlc3VsdDogQ2l0eVNlYXJjaFJlc3VsdCB8IG51bGwpID0+IHZvaWQsXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgcHJvdG8gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUgYXMgUGF0Y2hlZFhIUlByb3RvdHlwZTtcbiAgaWYgKHByb3RvLl9fc25pZmZpZXNDaXR5U2VhcmNoUGF0Y2hlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5hdGl2ZU9wZW4gPSBwcm90by5vcGVuO1xuICBjb25zdCBuYXRpdmVTZW5kID0gcHJvdG8uc2VuZDtcblxuICBwcm90by5vcGVuID0gZnVuY3Rpb24gKFxuICAgIHRoaXM6IFhocldpdGhDaXR5RmxhZyxcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyB8IFVSTCxcbiAgICAuLi5yZXN0OiB1bmtub3duW11cbiAgKSB7XG4gICAgdGhpcy5fX3NuaWZmaWVzSXNDaXR5U2VhcmNoID0gaXNDaXR5U2VhcmNoVXJsKHVybC50b1N0cmluZygpKTtcbiAgICByZXR1cm4gKG5hdGl2ZU9wZW4gYXMgKC4uLmE6IHVua25vd25bXSkgPT4gdW5rbm93bikuYXBwbHkodGhpcywgW21ldGhvZCwgdXJsLCAuLi5yZXN0XSk7XG4gIH0gYXMgdHlwZW9mIHByb3RvLm9wZW47XG5cbiAgcHJvdG8uc2VuZCA9IGZ1bmN0aW9uICh0aGlzOiBYaHJXaXRoQ2l0eUZsYWcsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgIGlmICh0aGlzLl9fc25pZmZpZXNJc0NpdHlTZWFyY2gpIHtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGJvZHk6IHVua25vd24gPSBKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICBvblJlc3BvbnNlKGV4dHJhY3RDaXR5U2VhcmNoUmVzdWx0KGJvZHkpKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgb25SZXNwb25zZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAobmF0aXZlU2VuZCBhcyAoLi4uYTogdW5rbm93bltdKSA9PiB1bmtub3duKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfSBhcyB0eXBlb2YgcHJvdG8uc2VuZDtcblxuICBwcm90by5fX3NuaWZmaWVzQ2l0eVNlYXJjaFBhdGNoZWQgPSB0cnVlO1xufTtcbiIsICJpbXBvcnQgeyBDSVRJRVNfSU5QVVRfU0VMRUNUT1IgfSBmcm9tIFwiLi9zbmlmZmllcy1zZWxlY3RvcnMuanNcIjtcblxuY29uc3QgU1RBVFVTX0VMRU1FTlRfSUQgPSBcInNucC1jaXR5LXNlYXJjaC1zdGF0dXNcIjtcblxuY29uc3QgREVGQVVMVF9OT1RFX1RFWFQgPVxuICAnTG9jYXRpb24gc3Bvb2Zpbmcgb25seSBwaWNrcyB1cCBjaXRpZXMgeW91IHNlYXJjaCBmb3IgaGVyZSBcdTIwMTQgbW92aW5nIHRoZSBtYXAgYmVmb3JlIHRhcHBpbmcgXCJUcmF2ZWwgaGVyZVwiIHdvblxcJ3QgYmUgY2FwdHVyZWQuJztcblxuY29uc3QgTk9URV9TVFlMRSA9IFtcIm1hcmdpbjo2cHggMCAwXCIsIFwicGFkZGluZzowXCIsIFwiZm9udC1zaXplOjExcHhcIiwgXCJjb2xvcjojN2E5MGE0XCJdLmpvaW4oXCI7XCIpO1xuXG5jb25zdCBQRU5ESU5HX1NUWUxFID0gW1xuICBcIm1hcmdpbjo2cHggMCAwXCIsXG4gIFwicGFkZGluZzowXCIsXG4gIFwiZm9udC1zaXplOjEycHhcIixcbiAgXCJmb250LXdlaWdodDo2MDBcIixcbiAgXCJjb2xvcjojZmY1NTAwXCIsXG5dLmpvaW4oXCI7XCIpO1xuXG5leHBvcnQgaW50ZXJmYWNlIENpdHlTZWFyY2hTdGF0dXNIYW5kbGUge1xuICBzaG93UGVuZGluZzogKGRlc2NyaXB0aW9uOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsZWFyOiAoKSA9PiB2b2lkO1xufVxuXG4vKiogTW91bnRzIGEgc3RhdHVzL2luc3RydWN0aW9uYWwgbWVzc2FnZSBuZXh0IHRvIFNuaWZmaWVzJyBvd24gVHJhdmVsIE1vZGUgY2l0eSBzZWFyY2ggYm94LiAqL1xuZXhwb3J0IGNvbnN0IGluc3RhbGxDaXR5U2VhcmNoU3RhdHVzVUkgPSAoKTogQ2l0eVNlYXJjaFN0YXR1c0hhbmRsZSA9PiB7XG4gIGxldCBwZW5kaW5nVGV4dDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgZmluZEFuY2hvciA9ICgpOiBFbGVtZW50IHwgbnVsbCA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKENJVElFU19JTlBVVF9TRUxFQ1RPUik7XG4gICAgcmV0dXJuIGlucHV0Py5jbG9zZXN0KFwiY2l0aWVzLWlucHV0XCIpID8/IG51bGw7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyID0gKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGFuY2hvciA9IGZpbmRBbmNob3IoKTtcbiAgICBpZiAoIWFuY2hvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTVEFUVVNfRUxFTUVOVF9JRCk7XG4gICAgaWYgKCFlbCkge1xuICAgICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICAgIGVsLmlkID0gU1RBVFVTX0VMRU1FTlRfSUQ7XG4gICAgICBhbmNob3IuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIH1cbiAgICBpZiAocGVuZGluZ1RleHQpIHtcbiAgICAgIGVsLnRleHRDb250ZW50ID0gcGVuZGluZ1RleHQ7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBQRU5ESU5HX1NUWUxFKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwudGV4dENvbnRlbnQgPSBERUZBVUxUX05PVEVfVEVYVDtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIE5PVEVfU1RZTEUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNUQVRVU19FTEVNRU5UX0lEKSkge1xuICAgICAgcmVuZGVyKCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RhcnRPYnNlcnZpbmcgPSAoKTogdm9pZCA9PiB7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgfTtcbiAgaWYgKGRvY3VtZW50LmJvZHkpIHtcbiAgICBzdGFydE9ic2VydmluZygpO1xuICAgIHJlbmRlcigpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcIkRPTUNvbnRlbnRMb2FkZWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgc3RhcnRPYnNlcnZpbmcoKTtcbiAgICAgICAgcmVuZGVyKCk7XG4gICAgICB9LFxuICAgICAgeyBvbmNlOiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2hvd1BlbmRpbmc6IChkZXNjcmlwdGlvbikgPT4ge1xuICAgICAgcGVuZGluZ1RleHQgPSBgQ2FwdHVyZWQgXCIke2Rlc2NyaXB0aW9ufVwiIFx1MjAxNCBwZW5kaW5nIHVudGlsIHlvdSBjbGljayBcIlRyYXZlbCBoZXJlXCIuYDtcbiAgICAgIHJlbmRlcigpO1xuICAgIH0sXG4gICAgY2xlYXI6ICgpID0+IHtcbiAgICAgIHBlbmRpbmdUZXh0ID0gbnVsbDtcbiAgICAgIHJlbmRlcigpO1xuICAgIH0sXG4gIH07XG59O1xuIiwgImltcG9ydCB0eXBlIHsgTG9jYXRpb25PdmVycmlkZUNvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSBcIi4vY29udHJhY3RzLmpzXCI7XG5pbXBvcnQgeyBpbnN0YWxsQ2l0eVNlYXJjaFhock9ic2VydmVyIH0gZnJvbSBcIi4vY2l0eS1zZWFyY2gtaG9vay5qc1wiO1xuaW1wb3J0IHsgaW5zdGFsbENpdHlTZWFyY2hTdGF0dXNVSSB9IGZyb20gXCIuL2NpdHktc2VhcmNoLXN0YXR1cy1ob29rLmpzXCI7XG5pbXBvcnQgeyBpbnN0YWxsR2VvSG9vayB9IGZyb20gXCIuL2dlby1ob29rLmpzXCI7XG5pbXBvcnQgeyBoYXNDYXB0dXJlZENvb3JkcywgdHlwZSBHZW9PdmVycmlkZSB9IGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBMT0NBVElPTl9QQVRILCB0eXBlIExvY2F0aW9uUHV0Qm9keSB9IGZyb20gXCIuL3NuaWZmaWVzLWFwaS5qc1wiO1xuaW1wb3J0IHsgZXh0cmFjdFRyYXZlbERlc3RpbmF0aW9uLCBpbnN0YWxsVHJhdmVsQ2xpY2tBcm1lciB9IGZyb20gXCIuL3RyYXZlbC1jYXB0dXJlLWhvb2suanNcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuL2xvZy5qc1wiO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoXCJsb2NhdGlvbi1vdmVycmlkZVwiKTtcblxuY29uc3QgUkVMT0FEX1NBRkVUWV9USU1FT1VUX01TID0gNDAwMDtcblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbk92ZXJyaWRlQ29udHJvbGxlciB7XG4gIGdldE92ZXJyaWRlOiAoKSA9PiBHZW9PdmVycmlkZTtcbiAgc2V0T3ZlcnJpZGU6IChuZXh0OiBHZW9PdmVycmlkZSkgPT4gdm9pZDtcbiAgc3luY092ZXJyaWRlOiAobmV4dDogR2VvT3ZlcnJpZGUpID0+IHZvaWQ7XG4gIHN1YnNjcmliZUNoYW5nZTogKGNiOiAobmV4dDogR2VvT3ZlcnJpZGUpID0+IHZvaWQpID0+IHZvaWQ7XG4gIHNlbmRMb2NhdGlvblVwZGF0ZTogKG92ZXJyaWRlOiBHZW9PdmVycmlkZSkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGNvbnN0IGluc3RhbGxMb2NhdGlvbk92ZXJyaWRlQ29udHJvbGxlciA9IChcbiAgb3B0aW9uczogTG9jYXRpb25PdmVycmlkZUNvbnRyb2xsZXJPcHRpb25zLFxuKTogTG9jYXRpb25PdmVycmlkZUNvbnRyb2xsZXIgPT4ge1xuICBjb25zdCByZWxvYWRQYWdlID0gb3B0aW9ucy5yZWxvYWRQYWdlID8/ICgoKSA9PiBsb2NhdGlvbi5yZWxvYWQoKSk7XG5cbiAgbGV0IGN1cnJlbnRPdmVycmlkZTogR2VvT3ZlcnJpZGUgPSBvcHRpb25zLmluaXRpYWxPdmVycmlkZTtcbiAgXG4gIGNvbnN0IGFjdGl2ZSA9ICgpOiBib29sZWFuID0+IG9wdGlvbnMuaXNQcmVtaXVtRW5hYmxlZCgpO1xuICBjb25zdCBob29rID0gaW5zdGFsbEdlb0hvb2soXG4gICAgKCkgPT4gKHsgLi4uY3VycmVudE92ZXJyaWRlLCBlbmFibGVkOiBhY3RpdmUoKSB9KSxcbiAgICBvcHRpb25zLm9uUG9zaXRpb24sXG4gICk7XG5cbiAgY29uc3QgbmF0aXZlRmV0Y2ggPSB3aW5kb3cuZmV0Y2guYmluZCh3aW5kb3cpO1xuICBsZXQgbGFzdExvY2F0aW9uUmVxdWVzdDogeyB1cmw6IHN0cmluZzsgaW5pdDogUmVxdWVzdEluaXQgfSB8IG51bGwgPSBudWxsO1xuICBsZXQgYXBpQmFzZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGxldCBvbkNoYW5nZTogKChuZXh0OiBHZW9PdmVycmlkZSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBub3RpZnkgPSAobmV4dDogR2VvT3ZlcnJpZGUpOiB2b2lkID0+IHtcbiAgICBjdXJyZW50T3ZlcnJpZGUgPSBuZXh0O1xuICAgIGhvb2s/LnJlZnJlc2hXYXRjaGVzKCk7XG4gICAgb25DaGFuZ2U/LihuZXh0KTtcbiAgfTtcblxuICBjb25zdCBzZXRPdmVycmlkZSA9IChuZXh0OiBHZW9PdmVycmlkZSk6IHZvaWQgPT4ge1xuICAgIG5vdGlmeShuZXh0KTtcbiAgICBvcHRpb25zLm9uT3ZlcnJpZGVDaGFuZ2VkKG5leHQpO1xuICB9O1xuXG4gIGNvbnN0IHN5bmNPdmVycmlkZSA9IChuZXh0OiBHZW9PdmVycmlkZSk6IHZvaWQgPT4ge1xuICAgIG5vdGlmeShuZXh0KTtcbiAgfTtcblxuICBjb25zdCBzZW5kTG9jYXRpb25VcGRhdGUgPSAob3ZlcnJpZGU6IEdlb092ZXJyaWRlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgc3Bvb2ZlZCA9IHsgbGF0OiBvdmVycmlkZS5sYXRpdHVkZSwgbG5nOiBvdmVycmlkZS5sb25naXR1ZGUgfTtcbiAgICBpZiAobGFzdExvY2F0aW9uUmVxdWVzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgKGxhc3RMb2NhdGlvblJlcXVlc3QuaW5pdC5ib2R5IGFzIHN0cmluZykgPz8gXCJ7fVwiLFxuICAgICAgICApIGFzIExvY2F0aW9uUHV0Qm9keTtcbiAgICAgICAgYm9keS52aXJ0dWFsTG9jYXRpb24gPSBzcG9vZmVkO1xuICAgICAgICBib2R5LnBoeXNpY2FsTG9jYXRpb24gPSBzcG9vZmVkO1xuICAgICAgICByZXR1cm4gbmF0aXZlRmV0Y2gobGFzdExvY2F0aW9uUmVxdWVzdC51cmwsIHtcbiAgICAgICAgICAuLi5sYXN0TG9jYXRpb25SZXF1ZXN0LmluaXQsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICAgIH0pLnRoZW4oKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gcHJvYWN0aXZlIHJlcXVlc3RcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFwaUJhc2UpIHtcbiAgICAgIHJldHVybiBuYXRpdmVGZXRjaChgJHthcGlCYXNlfSR7TE9DQVRJT05fUEFUSH0/c3RhdGU9bG9hZGVkYCwge1xuICAgICAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgdmlydHVhbExvY2F0aW9uOiBzcG9vZmVkLFxuICAgICAgICAgIHBoeXNpY2FsTG9jYXRpb246IHNwb29mZWQsXG4gICAgICAgICAgaG9tZURpc3RhbmNlSW5NaWxlczogbnVsbCxcbiAgICAgICAgfSBzYXRpc2ZpZXMgTG9jYXRpb25QdXRCb2R5KSxcbiAgICAgIH0pLnRoZW4oKCkgPT4gdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuXG4gIGxldCBwZW5kaW5nU2VhcmNoT3ZlcnJpZGU6IEdlb092ZXJyaWRlIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGNpdHlTZWFyY2hTdGF0dXNVSSA9IGluc3RhbGxDaXR5U2VhcmNoU3RhdHVzVUkoKTtcblxuICBjb25zdCBjb21taXRQZW5kaW5nU2VhcmNoT3ZlcnJpZGUgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCFwZW5kaW5nU2VhcmNoT3ZlcnJpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IHBlbmRpbmdTZWFyY2hPdmVycmlkZTtcbiAgICBwZW5kaW5nU2VhcmNoT3ZlcnJpZGUgPSBudWxsO1xuICAgIGNpdHlTZWFyY2hTdGF0dXNVSS5jbGVhcigpO1xuICAgIGxvZyhcInRyYXZlbCBoZXJlIGNsaWNrZWQgXHUyMDE0IGNvbW1pdHRpbmcgcGVuZGluZyBzZWFyY2ggbG9jYXRpb25cIiwgbmV4dCk7XG4gICAgc2V0T3ZlcnJpZGUobmV4dCk7XG5cbiAgICBjb25zdCBwdXNoZWQgPSBzZW5kTG9jYXRpb25VcGRhdGUobmV4dCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgbG9nKFwicHJvYWN0aXZlIGxvY2F0aW9uIHVwZGF0ZSBmYWlsZWRcIiwgZXJyKTtcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lZE91dCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIFJFTE9BRF9TQUZFVFlfVElNRU9VVF9NUykpO1xuICAgIHZvaWQgUHJvbWlzZS5yYWNlKFtwdXNoZWQsIHRpbWVkT3V0XSkudGhlbigoKSA9PiB7XG4gICAgICBsb2coXCJyZWxvYWRpbmcgdG8gc2hvdyB0aGUgbmV3bHkgY29uZmlybWVkIGxvY2F0aW9uXCIpO1xuICAgICAgcmVsb2FkUGFnZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHRyYXZlbEFybWVyID0gaW5zdGFsbFRyYXZlbENsaWNrQXJtZXIoY29tbWl0UGVuZGluZ1NlYXJjaE92ZXJyaWRlKTtcblxuICAvLyBDaXR5IHNlYXJjaCAoR0VUIC9hcGkvY2l0eS97aWR9KVxuICBpbnN0YWxsQ2l0eVNlYXJjaFhock9ic2VydmVyKChyZXN1bHQpID0+IHtcbiAgICBsb2coXCJjaXR5IHNlYXJjaCByZXNwb25zZSBzZWVuIChYSFIpXCIsIHsgcmVzdWx0LCBzcG9vZmluZ0VuYWJsZWQ6IGFjdGl2ZSgpIH0pO1xuICAgIGlmICghYWN0aXZlKCkpIHtcbiAgICAgIGxvZyhcInNwb29maW5nIG5vdCBlbmFibGVkIFx1MjAxNCBza2lwcGluZyBjaXR5IHNlYXJjaCBjYXB0dXJlXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBwZW5kaW5nU2VhcmNoT3ZlcnJpZGUgPSB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxhdGl0dWRlOiByZXN1bHQubGF0aXR1ZGUsXG4gICAgICAgIGxvbmdpdHVkZTogcmVzdWx0LmxvbmdpdHVkZSxcbiAgICAgICAgbGFiZWw6IHJlc3VsdC5sYWJlbCxcbiAgICAgIH07XG4gICAgICBsb2coXCJzdGFnZWQgcGVuZGluZyBzZWFyY2ggbG9jYXRpb25cIiwgcGVuZGluZ1NlYXJjaE92ZXJyaWRlKTtcbiAgICAgIGNpdHlTZWFyY2hTdGF0dXNVSS5zaG93UGVuZGluZyhyZXN1bHQubGFiZWwgPz8gYCR7cmVzdWx0LmxhdGl0dWRlfSwgJHtyZXN1bHQubG9uZ2l0dWRlfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2coXCJjaXR5IHNlYXJjaCByZXNwb25zZSBoYWQgbm8gdXNhYmxlIGxvY2F0aW9uIHRvIGNhcHR1cmVcIik7XG4gICAgfVxuICB9KTtcblxuICB3aW5kb3cuZmV0Y2ggPSBhc3luYyAoaW5wdXQsIGluaXQpID0+IHtcbiAgICBjb25zdCB1cmwgPVxuICAgICAgdHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gaW5wdXRcbiAgICAgICAgOiBpbnB1dCBpbnN0YW5jZW9mIFVSTFxuICAgICAgICAgID8gaW5wdXQuaHJlZlxuICAgICAgICAgIDogKGlucHV0IGFzIFJlcXVlc3QpLnVybDtcbiAgICBjb25zdCBiYXNlTWF0Y2ggPSB1cmwubWF0Y2goL14oaHR0cHM/OlxcL1xcL1teL10qc25pZmZpZXNcXC5jb20pLyk7XG4gICAgaWYgKGJhc2VNYXRjaCAmJiAhYXBpQmFzZSkge1xuICAgICAgYXBpQmFzZSA9IGJhc2VNYXRjaFsxXSA/PyBudWxsO1xuICAgIH1cbiAgICBpZiAodXJsLmluY2x1ZGVzKExPQ0FUSU9OX1BBVEgpKSB7XG4gICAgICBsYXN0TG9jYXRpb25SZXF1ZXN0ID0geyB1cmwsIGluaXQ6IHsgLi4uaW5pdCB9IH07XG4gICAgICBjb25zdCB3YXNBcm1lZCA9IHRyYXZlbEFybWVyLmNvbnN1bWUoKTtcblxuICAgICAgbG9nKFwibG9jYXRpb24gUFVUIHNlZW5cIiwgeyB1cmwsIHdhc0FybWVkLCBzcG9vZmluZ0VuYWJsZWQ6IGFjdGl2ZSgpIH0pO1xuXG4gICAgICBpZiAod2FzQXJtZWQgJiYgYWN0aXZlKCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZSgoaW5pdD8uYm9keSBhcyBzdHJpbmcpID8/IFwie31cIikgYXMgTG9jYXRpb25QdXRCb2R5O1xuICAgICAgICAgIGNvbnN0IGNhcHR1cmVkID0gZXh0cmFjdFRyYXZlbERlc3RpbmF0aW9uKGJvZHkpO1xuICAgICAgICAgIGxvZyhcInBhcnNlZCB0cmF2ZWwgUFVUIGJvZHlcIiwgeyBib2R5LCBjYXB0dXJlZCB9KTtcbiAgICAgICAgICBpZiAoY2FwdHVyZWQpIHtcbiAgICAgICAgICAgIHNldE92ZXJyaWRlKHsgZW5hYmxlZDogdHJ1ZSwgLi4uY2FwdHVyZWQgfSk7XG4gICAgICAgICAgICBsb2coXCJzYXZlZCBjYXB0dXJlZCBvdmVycmlkZVwiLCBjdXJyZW50T3ZlcnJpZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2coXCJhcm1lZCB0cmF2ZWwgY2xpY2sgYnV0IFBVVCBib2R5IGhhZCBubyB2aXJ0dWFsTG9jYXRpb24gdG8gY2FwdHVyZVwiLCBib2R5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZyhcImZhaWxlZCB0byBwYXJzZS9jYXB0dXJlIHRyYXZlbCBQVVQgYm9keVwiLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZSgpICYmIGhhc0NhcHR1cmVkQ29vcmRzKGN1cnJlbnRPdmVycmlkZSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZSgoaW5pdD8uYm9keSBhcyBzdHJpbmcpID8/IFwie31cIikgYXMgTG9jYXRpb25QdXRCb2R5O1xuICAgICAgICAgIGNvbnN0IHNwb29mZWQgPSB7IGxhdDogY3VycmVudE92ZXJyaWRlLmxhdGl0dWRlLCBsbmc6IGN1cnJlbnRPdmVycmlkZS5sb25naXR1ZGUgfTtcbiAgICAgICAgICBib2R5LnZpcnR1YWxMb2NhdGlvbiA9IHNwb29mZWQ7XG4gICAgICAgICAgYm9keS5waHlzaWNhbExvY2F0aW9uID0gc3Bvb2ZlZDtcbiAgICAgICAgICBpbml0ID0geyAuLi5pbml0LCBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSB9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBsZWF2ZSB1bm1vZGlmaWVkIGlmIHBhcnNpbmcgZmFpbHNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmF0aXZlRmV0Y2goaW5wdXQsIGluaXQpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgZ2V0T3ZlcnJpZGU6ICgpID0+IGN1cnJlbnRPdmVycmlkZSxcbiAgICBzZXRPdmVycmlkZSxcbiAgICBzeW5jT3ZlcnJpZGUsXG4gICAgc3Vic2NyaWJlQ2hhbmdlOiAoY2IpID0+IHtcbiAgICAgIG9uQ2hhbmdlID0gY2I7XG4gICAgfSxcbiAgICBzZW5kTG9jYXRpb25VcGRhdGUsXG4gIH07XG59O1xuIiwgIjxkaXYgaWQ9XCJzbnAtcmVwb3J0LWJhY2tkcm9wXCI+XG4gIDxkaXYgY2xhc3M9XCJzbnAtcmVwb3J0LW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCIgYXJpYS1sYWJlbGxlZGJ5PVwic25wLXJlcG9ydC10aXRsZVwiPlxuICAgIDxoMyBpZD1cInNucC1yZXBvcnQtdGl0bGVcIj5SZXBvcnQgcHJvZmlsZTwvaDM+XG4gICAgPHAgY2xhc3M9XCJoaW50XCI+RmxhZyB0aGlzIHByb2ZpbGUgYXMgYSBzdXNwZWN0ZWQgYm90IGZvciBtYW51YWwgcmV2aWV3LjwvcD5cbiAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZFwiPlxuICAgICAgPHNwYW4+TWVzc2FnZSAob3B0aW9uYWwpPC9zcGFuPlxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIGlkPVwic25wLXJlcG9ydC1tZXNzYWdlXCJcbiAgICAgICAgcm93cz1cIjNcIlxuICAgICAgICBtYXhsZW5ndGg9XCI1MDBcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkFueXRoaW5nIHRoYXQgd291bGQgaGVscCByZXZpZXcgdGhpcyByZXBvcnRcIlxuICAgICAgPjwvdGV4dGFyZWE+XG4gICAgPC9sYWJlbD5cbiAgICA8cCBpZD1cInNucC1yZXBvcnQtc3RhdHVzXCIgY2xhc3M9XCJoaW50XCIgYXJpYS1saXZlPVwicG9saXRlXCI+PC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIGlkPVwic25wLXJlcG9ydC1jYW5jZWxcIiBjbGFzcz1cInNlY29uZGFyeVwiIHR5cGU9XCJidXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gaWQ9XCJzbnAtcmVwb3J0LXN1Ym1pdFwiIGNsYXNzPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIj5SZXBvcnQgYm90PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iLCAiI3NucC1yZXBvcnQtYmFja2Ryb3Age1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ3O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDgsIDE0LCAyNCwgMC42NSk7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmb250LWZhbWlseTpcbiAgICBzeXN0ZW0tdWksXG4gICAgLWFwcGxlLXN5c3RlbSxcbiAgICBcIlNlZ29lIFVJXCIsXG4gICAgc2Fucy1zZXJpZjtcbn1cblxuI3NucC1yZXBvcnQtYmFja2Ryb3AgLnNucC1yZXBvcnQtbW9kYWwge1xuICB3aWR0aDogbWluKDMyMHB4LCBjYWxjKDEwMHZ3IC0gMzJweCkpO1xuICBiYWNrZ3JvdW5kOiAjMGUxODI1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMWMyYjNhO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTBweDtcbiAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuNCk7XG59XG5cbiNzbnAtcmVwb3J0LWJhY2tkcm9wIGgzIHtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxuXG4jc25wLXJlcG9ydC1iYWNrZHJvcCAuaGludCB7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgY29sb3I6ICM3YTkwYTQ7XG4gIG1hcmdpbjogMDtcbn1cblxuI3NucC1yZXBvcnQtYmFja2Ryb3AgLmhpbnQuZXJyb3Ige1xuICBjb2xvcjogI2ZmNGQ0Zjtcbn1cblxuI3NucC1yZXBvcnQtYmFja2Ryb3AgLmZpZWxkIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiA0cHg7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgY29sb3I6ICM3YTkwYTQ7XG59XG5cbiNzbnAtcmVwb3J0LWJhY2tkcm9wIC5maWVsZCB0ZXh0YXJlYSB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgcGFkZGluZzogN3B4IDEwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzFjMmIzYTtcbiAgYmFja2dyb3VuZDogIzA4MGUxODtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHJlc2l6ZTogdmVydGljYWw7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4xNXM7XG59XG5cbiNzbnAtcmVwb3J0LWJhY2tkcm9wIC5maWVsZCB0ZXh0YXJlYTpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogI2ZmNTUwMDtcbn1cblxuI3NucC1yZXBvcnQtYmFja2Ryb3AgLmFjdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cblxuI3NucC1yZXBvcnQtYmFja2Ryb3AgYnV0dG9uLnByaW1hcnkge1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHBhZGRpbmc6IDdweCAxNnB4O1xuICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICNmZjU1MDA7XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7XG59XG5cbiNzbnAtcmVwb3J0LWJhY2tkcm9wIGJ1dHRvbi5wcmltYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgYmFja2dyb3VuZDogI2UwNGEwMDtcbn1cblxuI3NucC1yZXBvcnQtYmFja2Ryb3AgYnV0dG9uLnByaW1hcnk6ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kOiAjMWMyYjNhO1xuICBjb2xvcjogIzdhOTBhNDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuI3NucC1yZXBvcnQtYmFja2Ryb3AgYnV0dG9uLnNlY29uZGFyeSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgcGFkZGluZzogN3B4IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMxYzJiM2E7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogIzdhOTBhNDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOlxuICAgIGJvcmRlci1jb2xvciAwLjE1cyxcbiAgICBjb2xvciAwLjE1cztcbn1cblxuI3NucC1yZXBvcnQtYmFja2Ryb3AgYnV0dG9uLnNlY29uZGFyeTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJvcmRlci1jb2xvcjogIzdhOTBhNDtcbiAgY29sb3I6ICNmZmZmZmY7XG59XG4iLCAiaW1wb3J0IFJFUE9SVF9NT0RBTF9IVE1MIGZyb20gXCIuL3JlcG9ydC1tb2RhbC5odG1sXCI7XG5pbXBvcnQgUkVQT1JUX01PREFMX0NTUyBmcm9tIFwiLi9yZXBvcnQtbW9kYWwuY3NzXCI7XG5pbXBvcnQgdHlwZSB7IFJlcG9ydEZvcm1Db250cmFjdCB9IGZyb20gXCIuL2NvbnRyYWN0cy5qc1wiO1xuXG5leHBvcnQgeyBSRVBPUlRfTU9EQUxfSFRNTCwgUkVQT1JUX01PREFMX0NTUyB9O1xuZXhwb3J0IHR5cGUgeyBSZXBvcnRGb3JtQ29udHJhY3QgfTtcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRNb2RhbEhhbmRsZSB7XG4gIG9wZW46ICgpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3Qgd2lyZVJlcG9ydE1vZGFsID0gKFxuICBjb250YWluZXI6IEVsZW1lbnQsXG4gIG9wdGlvbnM6IFJlcG9ydEZvcm1Db250cmFjdCxcbik6IFJlcG9ydE1vZGFsSGFuZGxlID0+IHtcbiAgY29uc3QgZWwgPSA8VCBleHRlbmRzIEVsZW1lbnQ+KGlkOiBzdHJpbmcpOiBUID0+IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yPFQ+KGAjJHtpZH1gKSBhcyBUO1xuXG4gIGNvbnN0IGJhY2tkcm9wID0gZWw8SFRNTEVsZW1lbnQ+KFwic25wLXJlcG9ydC1iYWNrZHJvcFwiKTtcbiAgY29uc3QgbWVzc2FnZUZpZWxkID0gZWw8SFRNTFRleHRBcmVhRWxlbWVudD4oXCJzbnAtcmVwb3J0LW1lc3NhZ2VcIik7XG4gIGNvbnN0IHN0YXR1c0VsID0gZWw8SFRNTEVsZW1lbnQ+KFwic25wLXJlcG9ydC1zdGF0dXNcIik7XG4gIGNvbnN0IGNhbmNlbEJ0biA9IGVsPEhUTUxCdXR0b25FbGVtZW50PihcInNucC1yZXBvcnQtY2FuY2VsXCIpO1xuICBjb25zdCBzdWJtaXRCdG4gPSBlbDxIVE1MQnV0dG9uRWxlbWVudD4oXCJzbnAtcmVwb3J0LXN1Ym1pdFwiKTtcblxuICBiYWNrZHJvcC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgY29uc3Qgc2V0U3RhdHVzID0gKHRleHQ6IHN0cmluZywgaXNFcnJvciA9IGZhbHNlKTogdm9pZCA9PiB7XG4gICAgc3RhdHVzRWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIHN0YXR1c0VsLmNsYXNzTGlzdC50b2dnbGUoXCJlcnJvclwiLCBpc0Vycm9yKTtcbiAgfTtcblxuICBsZXQgZ2VuZXJhdGlvbiA9IDA7XG5cbiAgY29uc3QgY2xvc2UgPSAoKTogdm9pZCA9PiB7XG4gICAgYmFja2Ryb3Auc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIG1lc3NhZ2VGaWVsZC52YWx1ZSA9IFwiXCI7XG4gICAgc2V0U3RhdHVzKFwiXCIpO1xuICAgIHN1Ym1pdEJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICB9O1xuXG4gIGNvbnN0IG9wZW4gPSAoKTogdm9pZCA9PiB7XG4gICAgZ2VuZXJhdGlvbiArPSAxO1xuICAgIGJhY2tkcm9wLnN0eWxlLmRpc3BsYXkgPSBcImZsZXhcIjtcbiAgICBzZXRTdGF0dXMoXCJcIik7XG4gICAgc3VibWl0QnRuLmRpc2FibGVkID0gZmFsc2U7XG4gICAgbWVzc2FnZUZpZWxkLmZvY3VzKCk7XG4gIH07XG5cbiAgY2FuY2VsQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgb3B0aW9ucy5vbkNhbmNlbD8uKCk7XG4gICAgY2xvc2UoKTtcbiAgfSk7XG5cbiAgYmFja2Ryb3AuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGJhY2tkcm9wKSB7XG4gICAgICBvcHRpb25zLm9uQ2FuY2VsPy4oKTtcbiAgICAgIGNsb3NlKCk7XG4gICAgfVxuICB9KTtcblxuICBzdWJtaXRCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICBjb25zdCBzdWJtaXR0ZWRHZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjtcbiAgICBzdWJtaXRCdG4uZGlzYWJsZWQgPSB0cnVlO1xuICAgIHNldFN0YXR1cyhcIlN1Ym1pdHRpbmdcdTIwMjZcIik7XG4gICAgUHJvbWlzZS5yZXNvbHZlKG9wdGlvbnMub25TdWJtaXQobWVzc2FnZUZpZWxkLnZhbHVlLnRyaW0oKSkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSBzdWJtaXR0ZWRHZW5lcmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldFN0YXR1cyhcIlJlcG9ydGVkLiBUaGFua3MuXCIpO1xuICAgICAgICBzZXRUaW1lb3V0KGNsb3NlLCAxMjAwKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gc3VibWl0dGVkR2VuZXJhdGlvbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRTdGF0dXMoXCJGYWlsZWQgdG8gc3VibWl0IHJlcG9ydC4gVHJ5IGFnYWluLlwiLCB0cnVlKTtcbiAgICAgICAgc3VibWl0QnRuLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgb3BlbiwgY2xvc2UgfTtcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBNYXJrZXJTZWxlY3Rpb24sIFJlcG9ydEJ1dHRvbkluamVjdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi9jb250cmFjdHMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuL2xvZy5qc1wiO1xuaW1wb3J0IHtcbiAgUkVQT1JUX01PREFMX0hUTUwsXG4gIFJFUE9SVF9NT0RBTF9DU1MsXG4gIHdpcmVSZXBvcnRNb2RhbCxcbiAgdHlwZSBSZXBvcnRNb2RhbEhhbmRsZSxcbn0gZnJvbSBcIi4vcmVwb3J0LXVpLmpzXCI7XG5pbXBvcnQge1xuICBNQVJLRVJfQVZBVEFSX1NFTEVDVE9SIGFzIE1BUktFUl9TRUxFQ1RPUixcbiAgQVBQX1NDUkVFTl9TRUxFQ1RPUixcbiAgTkFNRV9MQUJFTF9TRUxFQ1RPUixcbiAgUElOX0JVVFRPTl9TRUxFQ1RPUixcbiAgUFJPRklMRV9PUFRJT05TX01FTlVfU0VMRUNUT1IsXG59IGZyb20gXCIuL3NuaWZmaWVzLXNlbGVjdG9ycy5qc1wiO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoXCJyZXBvcnQtYnV0dG9uXCIpO1xuY29uc3QgUkVQT1JUX0lOSkVDVEVEX0FUVFIgPSBcImRhdGEtc25pZmZpZXMtcmVwb3J0LWluamVjdGlvblwiO1xuY29uc3QgUkVQT1JUX0JVVFRPTl9MQUJFTCA9IFwiU25pZmZpZXMgUHJvamVjdDogUmVwb3J0XCI7XG5jb25zdCBSRVBPUlRfTU9EQUxfUk9PVF9JRCA9IFwic25wLXJlcG9ydC1yb290XCI7XG5cbmNvbnN0IENMSUNLX1JFSU5KRUNUX1JFVFJZX1dJTkRPV19NUyA9IDEwMDA7XG5jb25zdCBDTElDS19SRUlOSkVDVF9SRVRSWV9JTlRFUlZBTF9NUyA9IDEwMDtcblxuY29uc3QgSU5JVElBTF9MT0FEX1JFSU5KRUNUX1JFVFJZX1dJTkRPV19NUyA9IDMwMDA7XG5jb25zdCBJTklUSUFMX0xPQURfUkVJTkpFQ1RfUkVUUllfSU5URVJWQUxfTVMgPSAzMDA7XG5cbmNvbnN0IGV4dHJhY3RVc2VySWRGcm9tVXJsID0gKHVybDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGNvbnN0IGZpcnN0ID0gcGFyc2VkLnBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbilbMF07XG4gICAgcmV0dXJuIGZpcnN0ICYmIC9eW2EtZjAtOV17MTYsfSQvaS50ZXN0KGZpcnN0KSA/IGZpcnN0IDogbnVsbDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbi8vIE1hdGNoZXMgL3Byb2ZpbGUvPGlkPlxuY29uc3QgZXh0cmFjdFVzZXJJZEZyb21Qcm9maWxlUGF0aCA9IChwYXRobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgaWQgPSBzZWdtZW50c1swXSA9PT0gXCJwcm9maWxlXCIgPyBzZWdtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGlkICYmIC9eW2EtZjAtOV17MTYsfSQvaS50ZXN0KGlkKSA/IGlkIDogbnVsbDtcbn07XG5cbmNvbnN0IGV4dHJhY3RGcm9tTWFya2VyID0gKGVsOiBIVE1MRWxlbWVudCk6IE1hcmtlclNlbGVjdGlvbiB8IG51bGwgPT4ge1xuICBjb25zdCBiZyA9IGVsLnN0eWxlLmJhY2tncm91bmRJbWFnZSB8fCBnZXRDb21wdXRlZFN0eWxlKGVsKS5iYWNrZ3JvdW5kSW1hZ2U7XG4gIGlmICghYmcgfHwgYmcgPT09IFwibm9uZVwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBiZy5tYXRjaCgvdXJsXFwoKFsnXCJdPykoLio/KVxcMVxcKS8pO1xuICBjb25zdCByYXdVcmwgPSBtYXRjaD8uWzJdO1xuICBpZiAoIXJhd1VybCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHVzZXJJZCA9IGV4dHJhY3RVc2VySWRGcm9tVXJsKHJhd1VybCk7XG4gIGlmICghdXNlcklkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHsgdXNlcklkLCBwcm9maWxlUGljVXJsOiByYXdVcmwgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnN0YWxsUmVwb3J0QnV0dG9uSW5qZWN0aW9uID0gKG9wdGlvbnM6IFJlcG9ydEJ1dHRvbkluamVjdGlvbk9wdGlvbnMpOiB2b2lkID0+IHtcbiAgbGV0IGxhc3RVc2VySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBsZXQgc2VsZWN0aW9uR2VuZXJhdGlvbiA9IDA7XG4gIGxldCByZXBvcnRNb2RhbDogUmVwb3J0TW9kYWxIYW5kbGUgfCBudWxsID0gbnVsbDtcbiAgbGV0IHJlcG9ydFRhcmdldDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3Qgc3VibWl0UmVwb3J0ID0gYXN5bmMgKHJlcG9ydGVkVXNlcklkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICghb3B0aW9ucy5zZXJ2ZXJCYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXJ2ZXIgbm90IGNvbmZpZ3VyZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke29wdGlvbnMuc2VydmVyQmFzZX0vYXBpL3JlcG9ydGAsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiBvcHRpb25zLmdldEF1dGhIZWFkZXJzKCksXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHJlcG9ydFR5cGU6IFwiYm90X3N1c3BlY3RlZFwiLFxuICAgICAgICByZXBvcnRlZFVzZXJJZCxcbiAgICAgICAgcmVwb3J0ZXJVc2VySWQ6IG9wdGlvbnMuZ2V0UmVwb3J0ZXJVc2VySWQoKSxcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCB1bmRlZmluZWQsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXBvcnQgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzLnN0YXR1c31gKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZW5zdXJlUmVwb3J0TW9kYWwgPSAoKTogUmVwb3J0TW9kYWxIYW5kbGUgPT4ge1xuICAgIGlmIChyZXBvcnRNb2RhbCkge1xuICAgICAgcmV0dXJuIHJlcG9ydE1vZGFsO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZS50ZXh0Q29udGVudCA9IFJFUE9SVF9NT0RBTF9DU1M7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cbiAgICBjb25zdCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICByb290LmlkID0gUkVQT1JUX01PREFMX1JPT1RfSUQ7XG4gICAgcm9vdC5pbm5lckhUTUwgPSBSRVBPUlRfTU9EQUxfSFRNTDtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpO1xuXG4gICAgcmVwb3J0TW9kYWwgPSB3aXJlUmVwb3J0TW9kYWwocm9vdCwge1xuICAgICAgb25TdWJtaXQ6IGFzeW5jIChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGlmICghcmVwb3J0VGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHN1Ym1pdFJlcG9ydChyZXBvcnRUYXJnZXQsIG1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7XG4gICAgICAgIHJlcG9ydFRhcmdldCA9IG51bGw7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiByZXBvcnRNb2RhbDtcbiAgfTtcblxuICBjb25zdCBjdXJyZW50UHJvZmlsZVVzZXJJZCA9ICgpOiBzdHJpbmcgfCBudWxsID0+XG4gICAgZXh0cmFjdFVzZXJJZEZyb21Qcm9maWxlUGF0aChsb2NhdGlvbi5wYXRobmFtZSkgPz8gbGFzdFVzZXJJZDtcblxuICAvLyBDbG9uZXMgb25lIG9mIHRoZSBtZW51J3Mgb3duIGJ1dHRvbnNcbiAgY29uc3QgYnVpbGRSZXBvcnRCdXR0b24gPSAodGVtcGxhdGU6IEhUTUxCdXR0b25FbGVtZW50KTogSFRNTEJ1dHRvbkVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGJ0biA9IHRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICBidG4ucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS10ZXN0aWRcIik7XG4gICAgYnRuLnNldEF0dHJpYnV0ZShSRVBPUlRfSU5KRUNURURfQVRUUiwgXCJcIik7XG4gICAgYnRuLnRpdGxlID0gXCJSZXBvcnQgYXMgc3VzcGVjdGVkIGJvdFwiO1xuICAgIGNvbnN0IGxhYmVsID0gYnRuLnF1ZXJ5U2VsZWN0b3IoXCJzcGFuXCIpID8/IGJ0bjtcbiAgICBjb25zdCBpY29uID0gbGFiZWwucXVlcnlTZWxlY3RvcihcImlcIik7XG4gICAgbGFiZWwudGV4dENvbnRlbnQgPSBSRVBPUlRfQlVUVE9OX0xBQkVMO1xuICAgIGlmIChpY29uKSB7XG4gICAgICBpY29uLmNsYXNzTmFtZSA9IGljb24uY2xhc3NOYW1lLnJlcGxhY2UoL1xcYmZhLVxcUysvLCBcImZhLWZsYWdcIik7XG4gICAgICBsYWJlbC5wcmVwZW5kKGljb24pO1xuICAgIH1cbiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAoIW9wdGlvbnMuZ2V0UmVwb3J0ZXJVc2VySWQoKSkge1xuICAgICAgICBsb2cud2FybihcIm5vIHNuaWZmaWVzIHVzZXIgaWQgb2JzZXJ2ZWQgeWV0IFx1MjAxNCBjYW5ub3QgcmVwb3J0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXJJZCA9IGN1cnJlbnRQcm9maWxlVXNlcklkKCk7XG4gICAgICBpZiAoIXVzZXJJZCkge1xuICAgICAgICBsb2cud2FybihcIm5vIHByb2ZpbGUgaWQgcmVzb2x2ZWQgXHUyMDE0IGNhbm5vdCByZXBvcnRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlcG9ydFRhcmdldCA9IHVzZXJJZDtcbiAgICAgIGVuc3VyZVJlcG9ydE1vZGFsKCkub3BlbigpO1xuICAgIH0pO1xuICAgIHJldHVybiBidG47XG4gIH07XG5cbiAgY29uc3QgbW91bnRSZXBvcnRCdXR0b24gPSAobWVudTogRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gbWVudS5xdWVyeVNlbGVjdG9yPEhUTUxCdXR0b25FbGVtZW50PihcImJ1dHRvbjpsYXN0LW9mLXR5cGVcIik7XG4gICAgaWYgKCF0ZW1wbGF0ZSB8fCBtZW51LnF1ZXJ5U2VsZWN0b3IoYFske1JFUE9SVF9JTkpFQ1RFRF9BVFRSfV1gKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBtZW51LmFwcGVuZChidWlsZFJlcG9ydEJ1dHRvbih0ZW1wbGF0ZSkpO1xuICB9O1xuXG4gIGNvbnN0IHJlc29sdmVQcm9maWxlID0gKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHNjcmVlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoQVBQX1NDUkVFTl9TRUxFQ1RPUik7XG4gICAgY29uc3QgdXNlcklkID0gY3VycmVudFByb2ZpbGVVc2VySWQoKTtcbiAgICBpZiAoc2NyZWVuICYmIHVzZXJJZCkge1xuICAgICAgb3B0aW9ucy5vblByb2ZpbGVSZXNvbHZlZD8uKHNjcmVlbiwgdXNlcklkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVzb2x2ZVByb2ZpbGVXaXRoUmV0cmllcyA9ICh3aW5kb3dNczogbnVtYmVyLCBpbnRlcnZhbE1zOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICBpZiAoIW9wdGlvbnMub25Qcm9maWxlUmVzb2x2ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VsZWN0aW9uR2VuZXJhdGlvbiArPSAxO1xuICAgIGNvbnN0IGdlbmVyYXRpb24gPSBzZWxlY3Rpb25HZW5lcmF0aW9uO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gcGVyZm9ybWFuY2Uubm93KCkgKyB3aW5kb3dNcztcbiAgICBjb25zdCBhdHRlbXB0ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHNlbGVjdGlvbkdlbmVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZVByb2ZpbGUoKTtcbiAgICAgIGlmIChwZXJmb3JtYW5jZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICAgIHNldFRpbWVvdXQoYXR0ZW1wdCwgaW50ZXJ2YWxNcyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBhdHRlbXB0KCk7XG4gIH07XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgZm9yIChjb25zdCBtIG9mIG11dGF0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG0uYWRkZWROb2Rlcykge1xuICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVudSA9IG5vZGUubWF0Y2hlcyhQUk9GSUxFX09QVElPTlNfTUVOVV9TRUxFQ1RPUilcbiAgICAgICAgICA/IG5vZGVcbiAgICAgICAgICA6IG5vZGUucXVlcnlTZWxlY3RvcihQUk9GSUxFX09QVElPTlNfTUVOVV9TRUxFQ1RPUik7XG4gICAgICAgIGlmIChtZW51ICYmIG9wdGlvbnMucmVwb3J0aW5nRW5hYmxlZCkge1xuICAgICAgICAgIG1vdW50UmVwb3J0QnV0dG9uKG1lbnUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBub2RlLm1hdGNoZXMoYCR7TkFNRV9MQUJFTF9TRUxFQ1RPUn0sICR7UElOX0JVVFRPTl9TRUxFQ1RPUn1gKSB8fFxuICAgICAgICAgIG5vZGUucXVlcnlTZWxlY3RvcihgJHtOQU1FX0xBQkVMX1NFTEVDVE9SfSwgJHtQSU5fQlVUVE9OX1NFTEVDVE9SfWApXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc29sdmVQcm9maWxlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHN0YXJ0T2JzZXJ2aW5nID0gKCk6IHZvaWQgPT4ge1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gIH07XG5cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBcImNsaWNrXCIsXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcmtlciA9IHRhcmdldC5jbG9zZXN0PEhUTUxFbGVtZW50PihNQVJLRVJfU0VMRUNUT1IpO1xuICAgICAgaWYgKCFtYXJrZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBleHRyYWN0RnJvbU1hcmtlcihtYXJrZXIpO1xuICAgICAgb3B0aW9ucy5vbk1hcmtlckNsaWNrPy4obWFya2VyLCBzZWxlY3Rpb24pO1xuICAgICAgbG9nKFxuICAgICAgICBzZWxlY3Rpb24gPyBcIm1hcmtlciBjbGlja2VkXCIgOiBcIm1hcmtlciBjbGlja2VkIGJ1dCBubyBpZCBpbiBpdHMgaW1hZ2UgXHUyMDE0IHJlc29sdmluZyBmcm9tIFVSTFwiLFxuICAgICAgICBzZWxlY3Rpb24gPz8gbWFya2VyLFxuICAgICAgKTtcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgbGFzdFVzZXJJZCA9IHNlbGVjdGlvbi51c2VySWQ7XG4gICAgICB9XG4gICAgICByZXNvbHZlUHJvZmlsZVdpdGhSZXRyaWVzKENMSUNLX1JFSU5KRUNUX1JFVFJZX1dJTkRPV19NUywgQ0xJQ0tfUkVJTkpFQ1RfUkVUUllfSU5URVJWQUxfTVMpO1xuICAgIH0sXG4gICAgdHJ1ZSxcbiAgKTtcblxuICBpZiAoZG9jdW1lbnQuYm9keSkge1xuICAgIHN0YXJ0T2JzZXJ2aW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgc3RhcnRPYnNlcnZpbmcsIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGNvbnN0IGluaXRpYWxQcm9maWxlVXNlcklkID0gZXh0cmFjdFVzZXJJZEZyb21Qcm9maWxlUGF0aChsb2NhdGlvbi5wYXRobmFtZSk7XG4gIGlmIChpbml0aWFsUHJvZmlsZVVzZXJJZCkge1xuICAgIGxvZyhcImluaXRpYWwgcGFnZSBsb2FkIG9uIGEgcHJvZmlsZSBVUkxcIiwgaW5pdGlhbFByb2ZpbGVVc2VySWQpO1xuICAgIHJlc29sdmVQcm9maWxlV2l0aFJldHJpZXMoXG4gICAgICBJTklUSUFMX0xPQURfUkVJTkpFQ1RfUkVUUllfV0lORE9XX01TLFxuICAgICAgSU5JVElBTF9MT0FEX1JFSU5KRUNUX1JFVFJZX0lOVEVSVkFMX01TLFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IGZldGNoQmxvY2tlZEJvdHMgPSBhc3luYyAoXG4gIHNlcnZlckJhc2U6IHN0cmluZyxcbiAgZ2V0QXV0aEhlYWRlcnM6ICgpID0+IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG9uUmVzdWx0OiAodXNlcklkczogc3RyaW5nW10sIGZldGNoZWRBdDogbnVtYmVyKSA9PiB2b2lkLFxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmICghc2VydmVyQmFzZSkge1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke3NlcnZlckJhc2V9L2FwaS9ibG9ja2VkLWJvdHNgLCB7IGhlYWRlcnM6IGdldEF1dGhIZWFkZXJzKCkgfSk7XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyB7IG9rOiBib29sZWFuOyB1c2VySWRzOiBzdHJpbmdbXSB9O1xuICAgIG9uUmVzdWx0KGRhdGEudXNlcklkcyA/PyBbXSwgRGF0ZS5ub3coKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcihcImZldGNoQmxvY2tlZEJvdHMgZmFpbGVkXCIsIGVycik7XG4gIH1cbn07XG5cbmNvbnN0IEJMT0NLRURfQk9UU19NQVhfQUdFX01TID0gMjQgKiA2MCAqIDYwICogMTAwMDtcblxuZXhwb3J0IGNvbnN0IHJlZnJlc2hCbG9ja2VkQm90c0lmU3RhbGUgPSAoXG4gIGJsb2NrZWRCb3RzRmV0Y2hlZEF0OiBudW1iZXIsXG4gIHNlcnZlckJhc2U6IHN0cmluZyxcbiAgZ2V0QXV0aEhlYWRlcnM6ICgpID0+IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG9uUmVzdWx0OiAodXNlcklkczogc3RyaW5nW10sIGZldGNoZWRBdDogbnVtYmVyKSA9PiB2b2lkLFxuKTogdm9pZCA9PiB7XG4gIGlmIChEYXRlLm5vdygpIC0gYmxvY2tlZEJvdHNGZXRjaGVkQXQgPiBCTE9DS0VEX0JPVFNfTUFYX0FHRV9NUykge1xuICAgIHZvaWQgZmV0Y2hCbG9ja2VkQm90cyhzZXJ2ZXJCYXNlLCBnZXRBdXRoSGVhZGVycywgb25SZXN1bHQpO1xuICB9XG59O1xuIiwgIiNzbnAtYm90LWJsb2NrLXJvb3Qge1xuICBtYXJnaW46IDAgLTE2cHg7XG59XG5cbiNzbnAtYm90LWJsb2NrLXJvb3QgLnNlY3Rpb24ge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDA7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCAjMGYxZTM1O1xufVxuXG4jc25wLWJvdC1ibG9jay1yb290IC5zZWN0aW9uIGgyIHtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjFlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgY29sb3I6ICM3YTkwYTQ7XG59XG5cbiNzbnAtYm90LWJsb2NrLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZSB7XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4jc25wLWJvdC1ibG9jay1yb290IGRldGFpbHMuY29sbGFwc2libGUgc3VtbWFyeSB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZzogMCAxMnB4O1xuICBtaW4taGVpZ2h0OiA1NnB4O1xuICBiYWNrZ3JvdW5kOiAjMGYxZTM1O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDEycHg7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4jc25wLWJvdC1ibG9jay1yb290IGRldGFpbHMuY29sbGFwc2libGUgc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNzbnAtYm90LWJsb2NrLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZSBzdW1tYXJ5OmhvdmVyOjphZnRlciB7XG4gIGNvbG9yOiAjNzY4ZWI4O1xufVxuXG4jc25wLWJvdC1ibG9jay1yb290IGRldGFpbHMuY29sbGFwc2libGUgc3VtbWFyeTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlx1MjAzQVwiO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICM3YTkwYTQ7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgdHJhbnNpdGlvbjpcbiAgICB0cmFuc2Zvcm0gMC4xNXMsXG4gICAgY29sb3IgMC4yNXM7XG59XG5cbiNzbnAtYm90LWJsb2NrLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZVtvcGVuXSBzdW1tYXJ5OjphZnRlciB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XG59XG5cbiNzbnAtYm90LWJsb2NrLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZSBzdW1tYXJ5IGgyIHtcbiAgbWFyZ2luOiAwO1xufVxuXG4jc25wLWJvdC1ibG9jay1yb290IC5jb2xsYXBzaWJsZS1ib2R5IHtcbiAgcGFkZGluZzogMTJweCAxMnB4IDEycHggNTZweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAwO1xufVxuXG4jc25wLWJvdC1ibG9jay1yb290IC5yb3cge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDhweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxuXG4jc25wLWJvdC1ibG9jay1yb290IC5yb3cgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgYWNjZW50LWNvbG9yOiAjZmY1NTAwO1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xufVxuXG4jc25wLWJvdC1ibG9jay1yb290IC5oaW50IHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogI2FlYmNkMDtcbiAgbWFyZ2luOiAwO1xufVxuXG4jc25wLWJvdC1ibG9jay1yb290IC5zdGF0IHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgbWFyZ2luOiAwO1xufVxuXG4jc25wLWJvdC1ibG9jay1yb290IC5zdGF0OmVtcHR5IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbiIsICI8ZGV0YWlscyBjbGFzcz1cInNlY3Rpb24gY29sbGFwc2libGVcIiBpZD1cImJvdC1ibG9jay1kZXRhaWxzXCI+XG4gIDxzdW1tYXJ5IGNsYXNzPVwic25wLXJvd1wiPlxuICAgIDxsYWJlbCBjbGFzcz1cInNucC1zd2l0Y2hcIj5cbiAgICAgIDxpbnB1dCBpZD1cImJvdC1ibG9jay1lbmFibGVkXCIgdHlwZT1cImNoZWNrYm94XCIgYXJpYS1sYWJlbD1cIkJsb2NrIGJvdCBhY2NvdW50c1wiIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cInNucC1zd2l0Y2gtc2xpZGVyXCI+PC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gICAgPHAgaWQ9XCJib3QtYmxvY2stZW5hYmxlLWxhYmVsXCIgY2xhc3M9XCJzbnAtbGFiZWxcIj5CbG9jayBCb3QgQWNjb3VudHM8L3A+XG4gIDwvc3VtbWFyeT5cbiAgPGRpdiBjbGFzcz1cImNvbGxhcHNpYmxlLWJvZHlcIj5cbiAgICA8cCBpZD1cImJvdC1ibG9jay1jb3VudFwiIGNsYXNzPVwic3RhdFwiPjwvcD5cbiAgICA8cCBpZD1cImJvdC1ibG9jay1oaW50XCIgY2xhc3M9XCJoaW50XCI+PC9wPlxuICA8L2Rpdj5cbjwvZGV0YWlscz5cbiIsICJpbXBvcnQgdHlwZSB7IEJvdEJsb2NrRm9ybUNvbnRyYWN0IH0gZnJvbSBcIi4vY29udHJhY3RzLmpzXCI7XG5pbXBvcnQgUkFXX0NTUyBmcm9tIFwiLi9ib3QtYmxvY2suY3NzXCI7XG5pbXBvcnQgU1dJVENIX0NTUyBmcm9tIFwiLi9zd2l0Y2guY3NzXCI7XG5pbXBvcnQgQk9UX0JMT0NLX0hUTUwgZnJvbSBcIi4vYm90LWJsb2NrLmh0bWxcIjtcblxuY29uc3QgQk9UX0JMT0NLX0NTUyA9IFNXSVRDSF9DU1MgKyBSQVdfQ1NTO1xuXG5leHBvcnQgeyBCT1RfQkxPQ0tfQ1NTLCBCT1RfQkxPQ0tfSFRNTCB9O1xuZXhwb3J0IHR5cGUgeyBCb3RCbG9ja0Zvcm1Db250cmFjdCB9O1xuXG5leHBvcnQgY29uc3Qgd2lyZUJvdEJsb2NrRm9ybSA9IChjb250YWluZXI6IEVsZW1lbnQsIG9wdGlvbnM6IEJvdEJsb2NrRm9ybUNvbnRyYWN0KTogdm9pZCA9PiB7XG4gIGNvbnN0IGVsID0gPFQgZXh0ZW5kcyBFbGVtZW50PihpZDogc3RyaW5nKTogVCA9PiBjb250YWluZXIucXVlcnlTZWxlY3RvcjxUPihgIyR7aWR9YCkgYXMgVDtcblxuICBjb25zdCBkZXRhaWxzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3I8SFRNTERldGFpbHNFbGVtZW50PihcIiNib3QtYmxvY2stZGV0YWlsc1wiKTtcbiAgY29uc3QgY291bnRFbCA9IGVsPEhUTUxFbGVtZW50PihcImJvdC1ibG9jay1jb3VudFwiKTtcbiAgY29uc3QgaGludEVsID0gZWw8SFRNTEVsZW1lbnQ+KFwiYm90LWJsb2NrLWhpbnRcIik7XG4gIGNvbnN0IGVuYWJsZWRDaGVja2JveCA9IGVsPEhUTUxJbnB1dEVsZW1lbnQ+KFwiYm90LWJsb2NrLWVuYWJsZWRcIik7XG4gIGNvbnN0IGVuYWJsZUxhYmVsID0gZWw8SFRNTEVsZW1lbnQ+KFwiYm90LWJsb2NrLWVuYWJsZS1sYWJlbFwiKTtcblxuICBpZiAoZGV0YWlscykge1xuICAgIGRldGFpbHMub3BlbiA9IG9wdGlvbnMuaW5pdGlhbE9wZW47XG4gICAgZGV0YWlscy5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlXCIsICgpID0+IG9wdGlvbnMub25Ub2dnbGUoZGV0YWlscy5vcGVuKSk7XG4gIH1cblxuICBpZiAoIW9wdGlvbnMucmVwb3J0aW5nRW5hYmxlZCkge1xuICAgIGVuYWJsZWRDaGVja2JveC5jaGVja2VkID0gZmFsc2U7XG4gICAgZW5hYmxlZENoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcbiAgICBoaW50RWwudGV4dENvbnRlbnQgPSBcIkNvbWluZyBzb29uIVwiO1xuICAgIGVuYWJsZUxhYmVsLnN0eWxlLnRleHREZWNvcmF0aW9uID0gXCJsaW5lLXRocm91Z2hcIjtcbiAgICByZXR1cm47XG4gIH1cblxuICBlbmFibGVkQ2hlY2tib3guY2hlY2tlZCA9IG9wdGlvbnMudXNlckVuYWJsZWRSZXBvcnRpbmc7XG4gIGhpbnRFbC50ZXh0Q29udGVudCA9XG4gICAgXCJIaWRlIHByb2ZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpcm1lZCBhcyBib3RzIGZyb20gdGhlIG1hcCBhbmQgbGl2ZSB1cGRhdGVzLlwiO1xuICBjb3VudEVsLnRleHRDb250ZW50ID1cbiAgICBvcHRpb25zLmluaXRpYWxDb3VudCA+IDBcbiAgICAgID8gYCR7b3B0aW9ucy5pbml0aWFsQ291bnR9IGJvdCR7b3B0aW9ucy5pbml0aWFsQ291bnQgPT09IDEgPyBcIlwiIDogXCJzXCJ9IGJsb2NrZWQgaW4gdGhlIGxhc3QgMjQgaG91cnNgXG4gICAgICA6IFwiXCI7XG5cbiAgZW5hYmxlZENoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgIHZvaWQgb3B0aW9ucy5vblRvZ2dsZUVuYWJsZWQoZW5hYmxlZENoZWNrYm94LmNoZWNrZWQpO1xuICB9KTtcbn07XG4iLCAiaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4vbG9nLmpzXCI7XG5pbXBvcnQge1xuICBBTExfUEhPVE9TX1ZJU0lCSUxJVFlfUEFUSCxcbiAgQ0hBVF9EQVRBX1BBVEgsXG4gIE1FU1NBR0VTX1BBVEgsXG4gIFBIT1RPX1ZJU0lCSUxJVFlfUEFUSCxcbiAgaXNTbmlmZmllc0FwaUhvc3QsXG4gIHR5cGUgQWxsUGhvdG9zVmlzaWJpbGl0eUJvZHksXG4gIHR5cGUgQ2hhdERhdGFQYXlsb2FkLFxuICB0eXBlIE1lc3NhZ2UsXG4gIHR5cGUgTWVzc2FnZXNQYXlsb2FkLFxuICB0eXBlIFBob3RvVmlzaWJpbGl0eUJvZHksXG59IGZyb20gXCIuL3NuaWZmaWVzLWFwaS5qc1wiO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoXCJzZW50LXBob3Rvc1wiKTtcblxuLyoqIFRoZSBtb3N0IHJlY2VudGx5IGxvYWRlZCBjaGF0IHRocmVhZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkU25hcHNob3Qge1xuICBhcGlPcmlnaW46IHN0cmluZztcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXTtcbiAgLyoqIFRoZSBwcm9maWxlIGNhcmRzIFNuaWZmaWVzIHNlbnQgd2l0aCB0aGUgdGhyZWFkOyB1c2VkIHRvIGZpbmQgdGhlIHJlY2lwaWVudC4gKi9cbiAgcGFydGlhbFVzZXJJZHM6IHN0cmluZ1tdO1xufVxuXG4vKiogRXZlcnl0aGluZyBhIGhpZGUgcmVxdWVzdCBuZWVkcyB0byBrbm93IGFib3V0IG9uZSBjaGF0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0IHtcbiAgYXBpT3JpZ2luOiBzdHJpbmc7XG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIG93bklkOiBzdHJpbmc7XG4gIHJlY2lwaWVudElkOiBzdHJpbmc7XG59XG5cbmNvbnN0IE5PX0NIQVRfRVJST1IgPSBcIkNvdWxkbid0IGZpbmQgdGhpcyBjaGF0LiBSZW9wZW4gaXQsIHRoZW4gdHJ5IGFnYWluLlwiO1xuXG5jb25zdCBmaW5kUmVjaXBpZW50ID0gKHRocmVhZDogVGhyZWFkU25hcHNob3QsIG93bklkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgdGhyZWFkLm1lc3NhZ2VzLmZpbmQoKG0pID0+IG0uYXV0aG9yICYmIG0uYXV0aG9yICE9PSBvd25JZCk/LmF1dGhvciA/P1xuICB0aHJlYWQucGFydGlhbFVzZXJJZHMuZmluZCgoaWQpID0+IGlkICE9PSBvd25JZCk7XG5cbmV4cG9ydCBjb25zdCBmaW5kQ29udmVyc2F0aW9uV2l0aCA9IChcbiAgcGF5bG9hZDogQ2hhdERhdGFQYXlsb2FkLFxuICBwcm9maWxlSWQ6IHN0cmluZyxcbik6IHsgY29udmVyc2F0aW9uSWQ6IHN0cmluZzsgb3duSWQ6IHN0cmluZyB9IHwgbnVsbCA9PiB7XG4gIGNvbnN0IHsgY29udmVyc2F0aW9ucyA9IFtdLCBwaW5uZWRDb252ZXJzYXRpb25zID0gW10gfSA9IHBheWxvYWQuY29udmVyc2F0aW9uRGF0YSA/PyB7fTtcbiAgZm9yIChjb25zdCBjIG9mIFsuLi5jb252ZXJzYXRpb25zLCAuLi5waW5uZWRDb252ZXJzYXRpb25zXSkge1xuICAgIGNvbnN0IG93bklkID0gYy5hdXRob3IxID09PSBwcm9maWxlSWQgPyBjLmF1dGhvcjIgOiBjLmF1dGhvcjIgPT09IHByb2ZpbGVJZCA/IGMuYXV0aG9yMSA6IG51bGw7XG4gICAgaWYgKG93bklkICYmIGMuX2lkKSB7XG4gICAgICByZXR1cm4geyBjb252ZXJzYXRpb25JZDogYy5faWQsIG93bklkIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvb2t1cENoYXQgPSBhc3luYyAoXG4gIGFwaU9yaWdpbjogc3RyaW5nLFxuICBwcm9maWxlSWQ6IHN0cmluZyxcbiAgZG9GZXRjaDogdHlwZW9mIGZldGNoID0gd2luZG93LmZldGNoLmJpbmQod2luZG93KSxcbik6IFByb21pc2U8Q2hhdCB8IG51bGw+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBkb0ZldGNoKGAke2FwaU9yaWdpbn0ke0NIQVRfREFUQV9QQVRIfWAsIHtcbiAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICAgIGhlYWRlcnM6IHsgXCJuZ3N3LWJ5cGFzc1wiOiBcInRydWVcIiB9LFxuICAgIH0pO1xuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZm91bmQgPSBmaW5kQ29udmVyc2F0aW9uV2l0aCgoYXdhaXQgcmVzLmpzb24oKSkgYXMgQ2hhdERhdGFQYXlsb2FkLCBwcm9maWxlSWQpO1xuICAgIHJldHVybiBmb3VuZCAmJiB7IGFwaU9yaWdpbiwgcmVjaXBpZW50SWQ6IHByb2ZpbGVJZCwgLi4uZm91bmQgfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oXCJjaGF0IGxpc3QgbG9va3VwIGZhaWxlZDpcIiwgZXJyKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3QgcG9zdFZpc2liaWxpdHkgPSBhc3luYyAoXG4gIGNoYXQ6IENoYXQsXG4gIHBhdGg6IHN0cmluZyxcbiAgYm9keTogUGhvdG9WaXNpYmlsaXR5Qm9keSB8IEFsbFBob3Rvc1Zpc2liaWxpdHlCb2R5LFxuICBkb0ZldGNoOiB0eXBlb2YgZmV0Y2gsXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBkb0ZldGNoKGAke2NoYXQuYXBpT3JpZ2lufSR7cGF0aH1gLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiwgXCJuZ3N3LWJ5cGFzc1wiOiBcInRydWVcIiB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcy5vayA/IG51bGwgOiBgU25pZmZpZXMgcmVqZWN0ZWQgYSByZXF1ZXN0ICgke3Jlcy5zdGF0dXN9KS5gO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihcImhpZGUgcmVxdWVzdCBmYWlsZWQ6XCIsIGVycik7XG4gICAgcmV0dXJuIFwiQSByZXF1ZXN0IGZhaWxlZDsgY2hlY2sgeW91ciBjb25uZWN0aW9uLlwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaGlkZU9uZVBob3RvID0gKFxuICBjaGF0OiBDaGF0LFxuICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgZG9GZXRjaDogdHlwZW9mIGZldGNoID0gd2luZG93LmZldGNoLmJpbmQod2luZG93KSxcbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4gPT5cbiAgcG9zdFZpc2liaWxpdHkoXG4gICAgY2hhdCxcbiAgICBQSE9UT19WSVNJQklMSVRZX1BBVEgsXG4gICAge1xuICAgICAgY29udmVyc2F0aW9uSWQ6IGNoYXQuY29udmVyc2F0aW9uSWQsXG4gICAgICBjb252ZXJzYXRpb25Mb2NhdGlvbjogbnVsbCxcbiAgICAgIHVzZXJJZEZyb206IGNoYXQub3duSWQsXG4gICAgICB1c2VySWRUbzogY2hhdC5yZWNpcGllbnRJZCxcbiAgICAgIG1lc3NhZ2VJZCxcbiAgICAgIGlzSGlkZGVuOiB0cnVlLFxuICAgICAgZmlsZTogbnVsbCxcbiAgICB9LFxuICAgIGRvRmV0Y2gsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBzZXRBbGxQaG90b3NIaWRkZW4gPSAoXG4gIGNoYXQ6IENoYXQsXG4gIGlzSGlkZGVuOiBib29sZWFuLFxuICBkb0ZldGNoOiB0eXBlb2YgZmV0Y2ggPSB3aW5kb3cuZmV0Y2guYmluZCh3aW5kb3cpLFxuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiA9PlxuICBwb3N0VmlzaWJpbGl0eShcbiAgICBjaGF0LFxuICAgIEFMTF9QSE9UT1NfVklTSUJJTElUWV9QQVRILFxuICAgIHtcbiAgICAgIGNvbnZlcnNhdGlvbklkOiBjaGF0LmNvbnZlcnNhdGlvbklkLFxuICAgICAgY29udmVyc2F0aW9uTG9jYXRpb246IG51bGwsXG4gICAgICB1c2VySWRGcm9tOiBjaGF0Lm93bklkLFxuICAgICAgdXNlcklkVG86IGNoYXQucmVjaXBpZW50SWQsXG4gICAgICBpc0hpZGRlbixcbiAgICB9LFxuICAgIGRvRmV0Y2gsXG4gICk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VudFBob3RvSGlkZXIge1xuICBoaWRlT25lOiAobWVzc2FnZUlkOiBzdHJpbmcsIHByb2ZpbGVJZDogc3RyaW5nIHwgbnVsbCkgPT4gUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgc2V0QWxsSGlkZGVuOiAocHJvZmlsZUlkOiBzdHJpbmcsIGlzSGlkZGVuOiBib29sZWFuKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xufVxuXG50eXBlIFBhdGNoZWRYSFJQcm90b3R5cGUgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlICYge1xuICBfX3NuaWZmaWVzU2VudFBob3Rvc1BhdGNoZWQ/OiBib29sZWFuO1xufTtcbnR5cGUgWGhyV2l0aFVybCA9IFhNTEh0dHBSZXF1ZXN0ICYgeyBfX3NuaWZmaWVzQXBpVXJsPzogVVJMIHwgbnVsbCB9O1xuXG5jb25zdCBwYXJzZUFwaVVybCA9ICh1cmw6IHN0cmluZyk6IFVSTCB8IG51bGwgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsLCBsb2NhdGlvbi5ocmVmKTtcbiAgICByZXR1cm4gaXNTbmlmZmllc0FwaUhvc3QocGFyc2VkLmhvc3QpICYmIHBhcnNlZC5wYXRobmFtZS5zdGFydHNXaXRoKFwiL2FwaS9cIikgPyBwYXJzZWQgOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFwaU9yaWdpbkZyb21QYXN0UmVxdWVzdHMgPSAoKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZShcInJlc291cmNlXCIpKSB7XG4gICAgY29uc3QgdXJsID0gcGFyc2VBcGlVcmwoZW50cnkubmFtZSk7XG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybC5vcmlnaW47XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc3RhbGxTZW50UGhvdG9IaWRlciA9IChnZXRPd25Vc2VySWQ6ICgpID0+IHN0cmluZyk6IFNlbnRQaG90b0hpZGVyID0+IHtcbiAgbGV0IHRocmVhZDogVGhyZWFkU25hcHNob3QgfCBudWxsID0gbnVsbDtcbiAgbGV0IGFwaU9yaWdpbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGxvb2tlZFVwID0gbmV3IE1hcDxzdHJpbmcsIENoYXQ+KCk7XG5cbiAgY29uc3QgcHJvdG8gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUgYXMgUGF0Y2hlZFhIUlByb3RvdHlwZTtcbiAgaWYgKCFwcm90by5fX3NuaWZmaWVzU2VudFBob3Rvc1BhdGNoZWQpIHtcbiAgICBwcm90by5fX3NuaWZmaWVzU2VudFBob3Rvc1BhdGNoZWQgPSB0cnVlO1xuICAgIGNvbnN0IG5hdGl2ZU9wZW4gPSBwcm90by5vcGVuO1xuICAgIGNvbnN0IG5hdGl2ZVNlbmQgPSBwcm90by5zZW5kO1xuXG4gICAgcHJvdG8ub3BlbiA9IGZ1bmN0aW9uIChcbiAgICAgIHRoaXM6IFhocldpdGhVcmwsXG4gICAgICBtZXRob2Q6IHN0cmluZyxcbiAgICAgIHVybDogc3RyaW5nIHwgVVJMLFxuICAgICAgLi4ucmVzdDogdW5rbm93bltdXG4gICAgKSB7XG4gICAgICB0aGlzLl9fc25pZmZpZXNBcGlVcmwgPSBwYXJzZUFwaVVybCh1cmwudG9TdHJpbmcoKSk7XG4gICAgICBpZiAodGhpcy5fX3NuaWZmaWVzQXBpVXJsKSB7XG4gICAgICAgIGFwaU9yaWdpbiA9IHRoaXMuX19zbmlmZmllc0FwaVVybC5vcmlnaW47XG4gICAgICB9XG4gICAgICByZXR1cm4gKG5hdGl2ZU9wZW4gYXMgKC4uLmE6IHVua25vd25bXSkgPT4gdW5rbm93bikuYXBwbHkodGhpcywgW21ldGhvZCwgdXJsLCAuLi5yZXN0XSk7XG4gICAgfSBhcyB0eXBlb2YgcHJvdG8ub3BlbjtcblxuICAgIHByb3RvLnNlbmQgPSBmdW5jdGlvbiAodGhpczogWGhyV2l0aFVybCwgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLl9fc25pZmZpZXNBcGlVcmw7XG4gICAgICBjb25zdCBjb252ZXJzYXRpb25JZCA9XG4gICAgICAgIHVybD8ucGF0aG5hbWUgPT09IE1FU1NBR0VTX1BBVEggPyB1cmwuc2VhcmNoUGFyYW1zLmdldChcImNvbnZlcnNhdGlvbklkXCIpIDogbnVsbDtcbiAgICAgIGlmICh1cmwgJiYgY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSAoXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VUeXBlID09PSBcImpzb25cIiA/IHRoaXMucmVzcG9uc2UgOiBKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgKSBhcyBNZXNzYWdlc1BheWxvYWQ7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF5bG9hZD8ubWVzc2FnZXMpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocmVhZCA9IHtcbiAgICAgICAgICAgICAgYXBpT3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcbiAgICAgICAgICAgICAgbWVzc2FnZXM6IHBheWxvYWQubWVzc2FnZXMsXG4gICAgICAgICAgICAgIHBhcnRpYWxVc2VySWRzOiAocGF5bG9hZC5wYXJ0aWFsVXNlcnMgPz8gW10pLm1hcCgodSkgPT4gdS5faWQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIG5vdCBhIHRocmVhZCB3ZSBjYW4gcmVhZDsga2VlcCB0aGUgcHJldmlvdXMgb25lXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAobmF0aXZlU2VuZCBhcyAoLi4uYTogdW5rbm93bltdKSA9PiB1bmtub3duKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IGFzIHR5cGVvZiBwcm90by5zZW5kO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZUNoYXQgPSBhc3luYyAocHJvZmlsZUlkOiBzdHJpbmcgfCBudWxsKTogUHJvbWlzZTxDaGF0IHwgbnVsbD4gPT4ge1xuICAgIGNvbnN0IG93bklkID0gZ2V0T3duVXNlcklkKCk7XG4gICAgaWYgKHRocmVhZCAmJiBvd25JZCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50SWQgPSBmaW5kUmVjaXBpZW50KHRocmVhZCwgb3duSWQpO1xuICAgICAgaWYgKHJlY2lwaWVudElkICYmICghcHJvZmlsZUlkIHx8IHJlY2lwaWVudElkID09PSBwcm9maWxlSWQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYXBpT3JpZ2luOiB0aHJlYWQuYXBpT3JpZ2luLFxuICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aHJlYWQuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgb3duSWQsXG4gICAgICAgICAgcmVjaXBpZW50SWQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpbiA9IHRocmVhZD8uYXBpT3JpZ2luID8/IGFwaU9yaWdpbiA/PyBhcGlPcmlnaW5Gcm9tUGFzdFJlcXVlc3RzKCk7XG4gICAgaWYgKCFwcm9maWxlSWQgfHwgIW9yaWdpbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGxldCBjaGF0ID0gbG9va2VkVXAuZ2V0KHByb2ZpbGVJZCkgPz8gbnVsbDtcbiAgICBpZiAoIWNoYXQpIHtcbiAgICAgIGNoYXQgPSBhd2FpdCBsb29rdXBDaGF0KG9yaWdpbiwgcHJvZmlsZUlkKTtcbiAgICAgIGlmIChjaGF0KSB7XG4gICAgICAgIGxvb2tlZFVwLnNldChwcm9maWxlSWQsIGNoYXQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhdDtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGhpZGVPbmU6IGFzeW5jIChtZXNzYWdlSWQsIHByb2ZpbGVJZCkgPT4ge1xuICAgICAgY29uc3QgY2hhdCA9IGF3YWl0IHJlc29sdmVDaGF0KHByb2ZpbGVJZCk7XG4gICAgICByZXR1cm4gY2hhdCA/IGhpZGVPbmVQaG90byhjaGF0LCBtZXNzYWdlSWQpIDogTk9fQ0hBVF9FUlJPUjtcbiAgICB9LFxuICAgIHNldEFsbEhpZGRlbjogYXN5bmMgKHByb2ZpbGVJZCwgaXNIaWRkZW4pID0+IHtcbiAgICAgIGNvbnN0IGNoYXQgPSBhd2FpdCByZXNvbHZlQ2hhdChwcm9maWxlSWQpO1xuICAgICAgcmV0dXJuIGNoYXQgPyBzZXRBbGxQaG90b3NIaWRkZW4oY2hhdCwgaXNIaWRkZW4pIDogTk9fQ0hBVF9FUlJPUjtcbiAgICB9LFxuICB9O1xufTtcbiIsICJpbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi9sb2cuanNcIjtcbmltcG9ydCB7XG4gIEhJREVfQUxMX1BIT1RPU19CVVRUT05fU0VMRUNUT1IsXG4gIEhJREVfUEhPVE9fQlVUVE9OX1NFTEVDVE9SLFxuICBQSE9UT19NRVNTQUdFX1NFTEVDVE9SLFxuICBVTkhJREVfQUxMX1BIT1RPU19CVVRUT05fU0VMRUNUT1IsXG59IGZyb20gXCIuL3NuaWZmaWVzLXNlbGVjdG9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZW50UGhvdG9IaWRlciB9IGZyb20gXCIuL3NlbnQtcGhvdG9zLmpzXCI7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcihcImhpZGUtcGhvdG9cIik7XG5cbmNvbnN0IE1FU1NBR0VfSURfUFJFRklYID0gXCJtZXNzYWdlLVwiO1xuXG4vKiogVGhlIG1lc3NhZ2UgYF9pZGAgb2YgdGhlIHBob3RvIGEgXCJIaWRlIFBob3RvXCIgYnV0dG9uIGJlbG9uZ3MgdG8sIHJlYWQgb2ZmIHRoZSBwaG90byBjb250YWluZXIncyBpZC4gKi9cbmNvbnN0IG1lc3NhZ2VJZEZvciA9IChidXR0b246IEVsZW1lbnQpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgcGhvdG8gPSBidXR0b24uY2xvc2VzdChQSE9UT19NRVNTQUdFX1NFTEVDVE9SKTtcbiAgY29uc3QgaWQgPSBwaG90bz8ucXVlcnlTZWxlY3RvcihgW2lkXj1cIiR7TUVTU0FHRV9JRF9QUkVGSVh9XCJdYCk/LmlkO1xuICByZXR1cm4gaWQgPyBpZC5zbGljZShNRVNTQUdFX0lEX1BSRUZJWC5sZW5ndGgpIDogbnVsbDtcbn07XG5cbi8qKiBUaGUgcHJvZmlsZSB0aGF0IGlzIG9wZW46IC9wcm9maWxlLzxpZD5bL2NoYXRdLiAqL1xuY29uc3Qgb3BlblByb2ZpbGVJZCA9ICgpOiBzdHJpbmcgfCBudWxsID0+XG4gIGxvY2F0aW9uLnBhdGhuYW1lLm1hdGNoKC9eXFwvcHJvZmlsZVxcLyhbYS1mMC05XXsxNix9KS9pKT8uWzFdID8/IG51bGw7XG5cbi8qKlxuICogVGFrZXMgb3ZlciBjbGlja3Mgb24gU25pZmZpZXMnIHBheXdhbGxlZCBwaG90by1oaWRpbmcgYnV0dG9uczogXCJIaWRlIFBob3RvXCIgb24gb25lIHBob3RvLCBhbmRcbiAqIFwiSGlkZSBBbGwgTXkgUGhvdG9zXCIgLyBcIlVuaGlkZSBBbGwgTXkgUGhvdG9zXCIgaW4gdGhlIHByb2ZpbGUgbWVudS4gVGhlIGNsaWNrIGlzIHN3YWxsb3dlZFxuICogYmVmb3JlIFNuaWZmaWVzJyBoYW5kbGVyIHJ1bnMgYW5kIHRoZSByZXF1ZXN0IGlzIG1hZGUgZGlyZWN0bHkuIEFmdGVyIGEgc3VjY2VzcyB0aGUgcGFnZVxuICogcmVsb2Fkcywgc2luY2UgU25pZmZpZXMgb25seSBzaG93cyBoaWRkZW4gc3RhdGUgb24gbG9hZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc3RhbGxIaWRlUGhvdG9DbGljayA9IChcbiAgaGlkZXI6IFBpY2s8U2VudFBob3RvSGlkZXIsIFwiaGlkZU9uZVwiIHwgXCJzZXRBbGxIaWRkZW5cIj4sXG4gIGlzRW5hYmxlZDogKCkgPT4gYm9vbGVhbixcbiAgcmVsb2FkOiAoKSA9PiB2b2lkID0gKCkgPT4gbG9jYXRpb24ucmVsb2FkKCksXG4gIG9uRXJyb3I6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAobWVzc2FnZSkgPT4gd2luZG93LmFsZXJ0KG1lc3NhZ2UpLFxuKTogKCgpID0+IHZvaWQpID0+IHtcbiAgY29uc3QgcmVzb2x2ZSA9ICh0YXJnZXQ6IEVsZW1lbnQpOiAoKCkgPT4gUHJvbWlzZTxzdHJpbmcgfCBudWxsPikgfCBudWxsID0+IHtcbiAgICBjb25zdCBoaWRlT25lID0gdGFyZ2V0LmNsb3Nlc3QoSElERV9QSE9UT19CVVRUT05fU0VMRUNUT1IpO1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IGhpZGVPbmUgJiYgbWVzc2FnZUlkRm9yKGhpZGVPbmUpO1xuICAgIGlmIChtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiAoKSA9PiBoaWRlci5oaWRlT25lKG1lc3NhZ2VJZCwgb3BlblByb2ZpbGVJZCgpKTtcbiAgICB9XG4gICAgY29uc3QgcHJvZmlsZUlkID0gb3BlblByb2ZpbGVJZCgpO1xuICAgIGlmIChwcm9maWxlSWQgJiYgdGFyZ2V0LmNsb3Nlc3QoSElERV9BTExfUEhPVE9TX0JVVFRPTl9TRUxFQ1RPUikpIHtcbiAgICAgIHJldHVybiAoKSA9PiBoaWRlci5zZXRBbGxIaWRkZW4ocHJvZmlsZUlkLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHByb2ZpbGVJZCAmJiB0YXJnZXQuY2xvc2VzdChVTkhJREVfQUxMX1BIT1RPU19CVVRUT05fU0VMRUNUT1IpKSB7XG4gICAgICByZXR1cm4gKCkgPT4gaGlkZXIuc2V0QWxsSGlkZGVuKHByb2ZpbGVJZCwgZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gaXNFbmFibGVkKCkgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCA/IHJlc29sdmUoZXZlbnQudGFyZ2V0KSA6IG51bGw7XG4gICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB2b2lkIGFjdGlvbigpLnRoZW4oKGVycm9yKSA9PiB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgbG9nLndhcm4oXCJjb3VsZG4ndCBjaGFuZ2UgcGhvdG8gdmlzaWJpbGl0eTpcIiwgZXJyb3IpO1xuICAgICAgICBvbkVycm9yKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVsb2FkKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZXIsIHRydWUpO1xuICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZXIsIHRydWUpO1xufTtcbiIsICJpbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi9sb2cuanNcIjtcbmltcG9ydCB7XG4gIEhJREVfQUxMX1BIT1RPU19CVVRUT05fU0VMRUNUT1IsXG4gIFBST0ZJTEVfT1BUSU9OU19NRU5VX1NFTEVDVE9SLFxuICBVTkhJREVfQUxMX1BIT1RPU19CVVRUT05fU0VMRUNUT1IsXG59IGZyb20gXCIuL3NuaWZmaWVzLXNlbGVjdG9ycy5qc1wiO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoXCJoaWRlLXBob3RvLW1lbnVcIik7XG5cbmNvbnN0IElOSkVDVEVEX0FUVFIgPSBcImRhdGEtc25pZmZpZXMtcGhvdG9zLWluamVjdGlvblwiO1xuY29uc3QgUkVQT1JUX0lOSkVDVEVEX0FUVFIgPSBcImRhdGEtc25pZmZpZXMtcmVwb3J0LWluamVjdGlvblwiO1xuXG5jb25zdCBNRU5VX0JVVFRPTlMgPSBbXG4gIHtcbiAgICBzZWxlY3RvcjogSElERV9BTExfUEhPVE9TX0JVVFRPTl9TRUxFQ1RPUixcbiAgICB0ZXN0SWQ6IFwiaGlkZUFsbFBob3Rvc0J1dHRvblwiLFxuICAgIGxhYmVsOiBcIkhpZGUgQWxsIE15IFBob3Rvc1wiLFxuICAgIGljb246IFwiZmEtZXllLXNsYXNoXCIsXG4gIH0sXG4gIHtcbiAgICBzZWxlY3RvcjogVU5ISURFX0FMTF9QSE9UT1NfQlVUVE9OX1NFTEVDVE9SLFxuICAgIHRlc3RJZDogXCJ1bmhpZGVBbGxQaG90b3NCdXR0b25cIixcbiAgICBsYWJlbDogXCJVbmhpZGUgQWxsIE15IFBob3Rvc1wiLFxuICAgIGljb246IFwiZmEtZXllXCIsXG4gIH0sXG5dIGFzIGNvbnN0O1xuXG4vKiogQ2xvbmVzIG9uZSBvZiB0aGUgbWVudSdzIG93biBidXR0b25zLCBzbyBpdCBwaWNrcyB1cCBTbmlmZmllcycgc3R5bGluZy4gKi9cbmNvbnN0IGJ1aWxkQnV0dG9uID0gKFxuICB0ZW1wbGF0ZTogSFRNTEJ1dHRvbkVsZW1lbnQsXG4gIHsgdGVzdElkLCBsYWJlbCwgaWNvbiB9OiAodHlwZW9mIE1FTlVfQlVUVE9OUylbbnVtYmVyXSxcbik6IEhUTUxCdXR0b25FbGVtZW50ID0+IHtcbiAgY29uc3QgYnRuID0gdGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xuICBidG4ucmVtb3ZlQXR0cmlidXRlKFJFUE9SVF9JTkpFQ1RFRF9BVFRSKTtcbiAgYnRuLnJlbW92ZUF0dHJpYnV0ZShcInRpdGxlXCIpO1xuICAvLyBUaGUgc2FtZSB0ZXN0IGlkIGFzIFNuaWZmaWVzJyBvd24gYnV0dG9uLCBzbyBpbnN0YWxsSGlkZVBob3RvQ2xpY2sgdGFrZXMgdGhlIGNsaWNrIG92ZXIuXG4gIGJ0bi5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRlc3RpZFwiLCB0ZXN0SWQpO1xuICBidG4uc2V0QXR0cmlidXRlKElOSkVDVEVEX0FUVFIsIFwiXCIpO1xuICBjb25zdCBzcGFuID0gYnRuLnF1ZXJ5U2VsZWN0b3IoXCJzcGFuXCIpID8/IGJ0bjtcbiAgY29uc3QgaWNvbkVsID0gc3Bhbi5xdWVyeVNlbGVjdG9yKFwiaVwiKTtcbiAgc3Bhbi50ZXh0Q29udGVudCA9IGxhYmVsO1xuICBpZiAoaWNvbkVsKSB7XG4gICAgaWNvbkVsLmNsYXNzTmFtZSA9IGljb25FbC5jbGFzc05hbWUucmVwbGFjZSgvXFxiZmEtXFxTKy8sIGljb24pO1xuICAgIHNwYW4ucHJlcGVuZChpY29uRWwpO1xuICB9XG4gIHJldHVybiBidG47XG59O1xuXG5jb25zdCBtb3VudEJ1dHRvbnMgPSAobWVudTogRWxlbWVudCk6IHZvaWQgPT4ge1xuICBjb25zdCB0ZW1wbGF0ZSA9IG1lbnUucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oXG4gICAgYGJ1dHRvbjpub3QoWyR7SU5KRUNURURfQVRUUn1dKTpub3QoWyR7UkVQT1JUX0lOSkVDVEVEX0FUVFJ9XSlgLFxuICApO1xuICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAoY29uc3Qgc3BlYyBvZiBNRU5VX0JVVFRPTlMpIHtcbiAgICAvLyBQYWlkIGFjY291bnRzIGFscmVhZHkgaGF2ZSBTbmlmZmllcycgb3duIGJ1dHRvbi5cbiAgICBpZiAoIW1lbnUucXVlcnlTZWxlY3RvcihzcGVjLnNlbGVjdG9yKSkge1xuICAgICAgbWVudS5hcHBlbmQoYnVpbGRCdXR0b24odGVtcGxhdGUsIHNwZWMpKTtcbiAgICAgIGxvZyhcImFkZGVkXCIsIHNwZWMubGFiZWwpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBBZGRzIEhpZGUgQWxsIE15IFBob3RvcyAvIFVuaGlkZSBBbGwgTXkgUGhvdG9zIHRvIHRoZSBwcm9maWxlIG9wdGlvbnMgbWVudSB3aGVuIFNuaWZmaWVzIGRpZG4ndFxuICogcmVuZGVyIHRoZW0gKGZyZWUgYWNjb3VudHMpLiBUaGUgY2xpY2tzIGFyZSBoYW5kbGVkIGJ5IGluc3RhbGxIaWRlUGhvdG9DbGljay5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc3RhbGxIaWRlUGhvdG9NZW51QnV0dG9ucyA9IChpc0VuYWJsZWQ6ICgpID0+IGJvb2xlYW4pOiAoKCkgPT4gdm9pZCkgPT4ge1xuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICBpZiAoIWlzRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgeyBhZGRlZE5vZGVzIH0gb2YgbXV0YXRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYWRkZWROb2Rlcykge1xuICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVudSA9IG5vZGUubWF0Y2hlcyhQUk9GSUxFX09QVElPTlNfTUVOVV9TRUxFQ1RPUilcbiAgICAgICAgICA/IG5vZGVcbiAgICAgICAgICA6IG5vZGUucXVlcnlTZWxlY3RvcihQUk9GSUxFX09QVElPTlNfTUVOVV9TRUxFQ1RPUik7XG4gICAgICAgIGlmIChtZW51KSB7XG4gICAgICAgICAgbW91bnRCdXR0b25zKG1lbnUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RhcnQgPSAoKTogdm9pZCA9PiBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICBpZiAoZG9jdW1lbnQuYm9keSkge1xuICAgIHN0YXJ0KCk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgc3RhcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xufTtcbiIsICI8ZGl2IGNsYXNzPVwic25wLWhlYWRlclwiPlxuICA8ZGl2IGNsYXNzPVwic25wLXRpdGxlXCI+XG4gICAgPGgxPlNuaWZmaWVzIFBsdWctaW5zPC9oMT5cbiAgICA8c3BhbiBpZD1cInNucC12ZXJzaW9uLXJvb3RcIj48L3NwYW4+XG4gIDwvZGl2PlxuICA8YnV0dG9uIGNsYXNzPVwic25wLWNsb3NlXCIgaWQ9XCJzbnAtY2xvc2VcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XHUyNzE1PC9idXR0b24+XG48L2Rpdj5cbjxkaXYgaWQ9XCJzbnAtdXBkYXRlLXJvb3RcIj48L2Rpdj5cbjxkaXYgaWQ9XCJzbnAtcHJlbWl1bS1yb290XCI+PC9kaXY+XG48ZGl2IGlkPVwic25wLWJvdC1ibG9jay1yb290XCI+PC9kaXY+XG48ZGl2IGlkPVwic25wLXByb2ZpbGUtZmlsdGVycy1yb290XCI+PC9kaXY+XG4iLCAiZGVjbGFyZSBjb25zdCBfX1NFUlZFUl9CQVNFX186IHN0cmluZztcbmRlY2xhcmUgY29uc3QgX19DTElFTlRfU0VDUkVUX186IHN0cmluZztcbmRlY2xhcmUgY29uc3QgX19WRVJTSU9OX186IHN0cmluZztcbmRlY2xhcmUgY29uc3QgX19SRVBPUlRJTkdfRU5BQkxFRF9fOiBib29sZWFuO1xuXG5leHBvcnQgY29uc3QgU0VSVkVSX0JBU0UgPSBfX1NFUlZFUl9CQVNFX187XG5leHBvcnQgY29uc3QgQ0xJRU5UX1NFQ1JFVCA9IF9fQ0xJRU5UX1NFQ1JFVF9fO1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBfX1ZFUlNJT05fXztcbmV4cG9ydCBjb25zdCBSRVBPUlRJTkdfRU5BQkxFRCA9IF9fUkVQT1JUSU5HX0VOQUJMRURfXztcbiIsICJpbXBvcnQge1xuICBCbG9ja2VkQm90RGFpbHlMb2csXG4gIERFRkFVTFRfR0VPX09WRVJSSURFLFxuICBHZW9PdmVycmlkZSxcbiAgcGFyc2VQcm9maWxlRmlsdGVycyxcbiAgUHJvZmlsZUZpbHRlcnMsXG4gIHJlY29yZEJsb2NrZWRCb3RJZHMsXG59IGZyb20gXCJAc25pZmZpZXMtcHJvamVjdHMvY29yZVwiO1xuXG5jb25zdCBHRU9fU1RPUkFHRV9LRVkgPSBcInNuaWZmaWVzLWdlb1wiO1xuY29uc3QgQkxPQ0tFRF9CT1RTX1NUT1JBR0VfS0VZID0gXCJzbmlmZmllcy1ibG9ja2VkLWJvdHNcIjtcbmNvbnN0IEJMT0NLRURfQk9UU19GRVRDSEVEX0FUX1NUT1JBR0VfS0VZID0gXCJzbmlmZmllcy1ibG9ja2VkLWJvdHMtZmV0Y2hlZC1hdFwiO1xuY29uc3QgQk9UX0JMT0NLSU5HX0VOQUJMRURfU1RPUkFHRV9LRVkgPSBcInNuaWZmaWVzLWJvdC1ibG9ja2luZy1lbmFibGVkXCI7XG5jb25zdCBCT1RfQkxPQ0tJTkdfU0VDVElPTl9PUEVOX1NUT1JBR0VfS0VZID0gXCJzbmlmZmllcy1ib3QtYmxvY2tpbmctc2VjdGlvbi1vcGVuXCI7XG5jb25zdCBCTE9DS0VEX0JPVF9FVkVOVFNfU1RPUkFHRV9LRVkgPSBcInNuaWZmaWVzLWJsb2NrZWQtYm90LWV2ZW50c1wiO1xuY29uc3QgUFJPRklMRV9GSUxURVJTX1NUT1JBR0VfS0VZID0gXCJzbmlmZmllcy1wcm9maWxlLWZpbHRlcnNcIjtcbmNvbnN0IFBST0ZJTEVfRklMVEVSU19FTkFCTEVEX1NUT1JBR0VfS0VZID0gXCJzbmlmZmllcy1wcm9maWxlLWZpbHRlcnMtZW5hYmxlZFwiO1xuY29uc3QgUFJPRklMRV9GSUxURVJTX1NFQ1RJT05fT1BFTl9TVE9SQUdFX0tFWSA9IFwic25pZmZpZXMtcHJvZmlsZS1maWx0ZXJzLXNlY3Rpb24tb3BlblwiO1xuXG5leHBvcnQgY29uc3QgZ2V0R2VvT3ZlcnJpZGUgPSAoKTogR2VvT3ZlcnJpZGUgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKEdFT19TVE9SQUdFX0tFWSk7XG4gICAgcmV0dXJuIHJhdyA/IHsgLi4uREVGQVVMVF9HRU9fT1ZFUlJJREUsIC4uLkpTT04ucGFyc2UocmF3KSB9IDogeyAuLi5ERUZBVUxUX0dFT19PVkVSUklERSB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyAuLi5ERUZBVUxUX0dFT19PVkVSUklERSB9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0R2VvT3ZlcnJpZGUgPSAobmV4dDogR2VvT3ZlcnJpZGUpOiB2b2lkID0+IHtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oR0VPX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShuZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmxvY2tlZEJvdHMgPSAoKTogc3RyaW5nW10gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKEJMT0NLRURfQk9UU19TVE9SQUdFX0tFWSk7XG4gICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gcmF3ID8gSlNPTi5wYXJzZShyYXcpIDogW107XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKSA/IHBhcnNlZC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIikgOiBbXTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmxvY2tlZEJvdHNGZXRjaGVkQXQgPSAoKTogbnVtYmVyID0+IHtcbiAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQkxPQ0tFRF9CT1RTX0ZFVENIRURfQVRfU1RPUkFHRV9LRVkpO1xuICBjb25zdCBwYXJzZWQgPSByYXcgPyBOdW1iZXIocmF3KSA6IDA7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IDA7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0QmxvY2tlZEJvdHMgPSAodXNlcklkczogc3RyaW5nW10sIGZldGNoZWRBdDogbnVtYmVyKTogdm9pZCA9PiB7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKEJMT0NLRURfQk9UU19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkodXNlcklkcykpO1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShCTE9DS0VEX0JPVFNfRkVUQ0hFRF9BVF9TVE9SQUdFX0tFWSwgU3RyaW5nKGZldGNoZWRBdCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJvdEJsb2NraW5nRW5hYmxlZCA9ICgpOiBib29sZWFuID0+IHtcbiAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQk9UX0JMT0NLSU5HX0VOQUJMRURfU1RPUkFHRV9LRVkpO1xuICByZXR1cm4gcmF3ID09PSBudWxsID8gdHJ1ZSA6IHJhdyA9PT0gXCJ0cnVlXCI7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Qm90QmxvY2tpbmdFbmFibGVkID0gKGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oQk9UX0JMT0NLSU5HX0VOQUJMRURfU1RPUkFHRV9LRVksIFN0cmluZyhlbmFibGVkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Qm90QmxvY2tpbmdTZWN0aW9uT3BlbiA9ICgpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKEJPVF9CTE9DS0lOR19TRUNUSU9OX09QRU5fU1RPUkFHRV9LRVkpID09PSBcInRydWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRCb3RCbG9ja2luZ1NlY3Rpb25PcGVuID0gKG9wZW46IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oQk9UX0JMT0NLSU5HX1NFQ1RJT05fT1BFTl9TVE9SQUdFX0tFWSwgU3RyaW5nKG9wZW4pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCbG9ja2VkQm90RXZlbnRzQnlEYXkgPSAoKTogQmxvY2tlZEJvdERhaWx5TG9nID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShCTE9DS0VEX0JPVF9FVkVOVFNfU1RPUkFHRV9LRVkpO1xuICAgIHJldHVybiByYXcgPyAoSlNPTi5wYXJzZShyYXcpIGFzIEJsb2NrZWRCb3REYWlseUxvZykgOiB7fTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVjb3JkQmxvY2tlZEJvdEV2ZW50ID0gKGlkczogc3RyaW5nW10pOiB2b2lkID0+IHtcbiAgY29uc3QgbmV4dCA9IHJlY29yZEJsb2NrZWRCb3RJZHMoZ2V0QmxvY2tlZEJvdEV2ZW50c0J5RGF5KCksIGlkcyk7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKEJMT0NLRURfQk9UX0VWRU5UU19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkobmV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFByb2ZpbGVGaWx0ZXJzID0gKCk6IFByb2ZpbGVGaWx0ZXJzID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VQcm9maWxlRmlsdGVycyhcbiAgICAgIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oUFJPRklMRV9GSUxURVJTX1NUT1JBR0VfS0VZKSA/PyBcIm51bGxcIiksXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHBhcnNlUHJvZmlsZUZpbHRlcnMobnVsbCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRQcm9maWxlRmlsdGVycyA9IChuZXh0OiBQcm9maWxlRmlsdGVycyk6IHZvaWQgPT4ge1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShQUk9GSUxFX0ZJTFRFUlNfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KG5leHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQcm9maWxlRmlsdGVyc0VuYWJsZWQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShQUk9GSUxFX0ZJTFRFUlNfRU5BQkxFRF9TVE9SQUdFX0tFWSkgPT09IFwidHJ1ZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFByb2ZpbGVGaWx0ZXJzRW5hYmxlZCA9IChlbmFibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFBST0ZJTEVfRklMVEVSU19FTkFCTEVEX1NUT1JBR0VfS0VZLCBTdHJpbmcoZW5hYmxlZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFByb2ZpbGVGaWx0ZXJzU2VjdGlvbk9wZW4gPSAoKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShQUk9GSUxFX0ZJTFRFUlNfU0VDVElPTl9PUEVOX1NUT1JBR0VfS0VZKSA9PT0gXCJ0cnVlXCI7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0UHJvZmlsZUZpbHRlcnNTZWN0aW9uT3BlbiA9IChvcGVuOiBib29sZWFuKTogdm9pZCA9PiB7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFBST0ZJTEVfRklMVEVSU19TRUNUSU9OX09QRU5fU1RPUkFHRV9LRVksIFN0cmluZyhvcGVuKSk7XG59O1xuIiwgImltcG9ydCB7XG4gIGJvdEJsb2NrUnVsZSxcbiAgZ2F0ZVByb2ZpbGVGaWx0ZXJzLFxuICBpbnN0YWxsUHJvZmlsZUZpbHRlckhvb2ssXG4gIGluc3RhbGxSZXBvcnRCdXR0b25JbmplY3Rpb24sXG4gIHJlZnJlc2hCbG9ja2VkQm90c0lmU3RhbGUgYXMgcmVmcmVzaEJsb2NrZWRCb3RzSWZTdGFsZVNoYXJlZCxcbiAgdHlwZSBCb3RCbG9ja1N0YXRlLFxuICBwcm9maWxlRmlsdGVyUnVsZXMsXG4gIHR5cGUgUHJvZmlsZUZpbHRlcnMsXG59IGZyb20gXCJAc25pZmZpZXMtcHJvamVjdHMvY29yZVwiO1xuaW1wb3J0IHsgQ0xJRU5UX1NFQ1JFVCwgUkVQT1JUSU5HX0VOQUJMRUQsIFNFUlZFUl9CQVNFIH0gZnJvbSBcIi4vc2hhcmVkL2Vudi5qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0QmxvY2tlZEJvdHMsXG4gIGdldEJsb2NrZWRCb3RzRmV0Y2hlZEF0LFxuICBnZXRCb3RCbG9ja2luZ0VuYWJsZWQsXG4gIGdldFByb2ZpbGVGaWx0ZXJzLFxuICBnZXRQcm9maWxlRmlsdGVyc0VuYWJsZWQsXG4gIHJlY29yZEJsb2NrZWRCb3RFdmVudCxcbiAgc2V0QmxvY2tlZEJvdHMsXG59IGZyb20gXCIuL3NoYXJlZC9sb2NhbC1zdG9yYWdlLmpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmVhdHVyZVN0YXRlIHtcbiAgY3VycmVudFNuaWZmaWVzVXNlcklkOiBzdHJpbmc7XG4gIGJvdEJsb2NrU3RhdGU6IEJvdEJsb2NrU3RhdGU7XG4gIC8qKiBUaGUgZmlsdGVycyB0aGUgbmV0d29yayBob29rIHJ1bnMgd2l0aCBmb3IgdGhpcyBwYWdlIGxvYWQuICovXG4gIGFwcGxpZWRQcm9maWxlRmlsdGVyczogUHJvZmlsZUZpbHRlcnM7XG59XG5cbmNvbnN0IGNsaWVudEhlYWRlcnMgPSAoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9PiAoe1xuICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke0NMSUVOVF9TRUNSRVR9YCxcbn0pO1xuXG4vKiogSW5zdGFsbHMgdGhlIHByb2ZpbGUtZmlsdGVyIG5ldHdvcmsgaG9vayAoYmxvY2tlZCBib3RzICsgdGhlIGZpbHRlciBtZW51J3MgZmlsdGVycykgKi9cbmV4cG9ydCBjb25zdCBpbnN0YWxsUmVwb3J0RmVhdHVyZSA9IChyYWlzZVJhZGl1cz86ICgpID0+IGJvb2xlYW4pOiBSZXBvcnRGZWF0dXJlU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZTogUmVwb3J0RmVhdHVyZVN0YXRlID0ge1xuICAgIGN1cnJlbnRTbmlmZmllc1VzZXJJZDogXCJcIixcbiAgICBib3RCbG9ja1N0YXRlOiB7IGJsb2NrZWRJZHM6IG5ldyBTZXQoZ2V0QmxvY2tlZEJvdHMoKSksIGVuYWJsZWQ6IGdldEJvdEJsb2NraW5nRW5hYmxlZCgpIH0sXG5cbiAgICBhcHBsaWVkUHJvZmlsZUZpbHRlcnM6IGdhdGVQcm9maWxlRmlsdGVycyhnZXRQcm9maWxlRmlsdGVycygpLCBnZXRQcm9maWxlRmlsdGVyc0VuYWJsZWQoKSksXG4gIH07XG5cbiAgaW5zdGFsbFByb2ZpbGVGaWx0ZXJIb29rKFxuICAgIFtcbiAgICAgIGJvdEJsb2NrUnVsZShcbiAgICAgICAgKCkgPT4gc3RhdGUuYm90QmxvY2tTdGF0ZSxcbiAgICAgICAgKGlkcykgPT4gcmVjb3JkQmxvY2tlZEJvdEV2ZW50KGlkcyksXG4gICAgICApLFxuICAgICAgLi4ucHJvZmlsZUZpbHRlclJ1bGVzKCgpID0+IHN0YXRlLmFwcGxpZWRQcm9maWxlRmlsdGVycyksXG4gICAgXSxcbiAgICByYWlzZVJhZGl1cyxcbiAgKTtcblxuICBpZiAoUkVQT1JUSU5HX0VOQUJMRUQpIHtcbiAgICBpbnN0YWxsUmVwb3J0QnV0dG9uSW5qZWN0aW9uKHtcbiAgICAgIHNlcnZlckJhc2U6IFNFUlZFUl9CQVNFLFxuICAgICAgZ2V0QXV0aEhlYWRlcnM6IGNsaWVudEhlYWRlcnMsXG4gICAgICByZXBvcnRpbmdFbmFibGVkOiB0cnVlLFxuICAgICAgZ2V0UmVwb3J0ZXJVc2VySWQ6ICgpID0+IHN0YXRlLmN1cnJlbnRTbmlmZmllc1VzZXJJZCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoQmxvY2tlZEJvdHNJZlN0YWxlID0gKHN0YXRlOiBSZXBvcnRGZWF0dXJlU3RhdGUpOiB2b2lkID0+IHtcbiAgaWYgKCFSRVBPUlRJTkdfRU5BQkxFRCkge1xuICAgIHJldHVybjtcbiAgfVxuICByZWZyZXNoQmxvY2tlZEJvdHNJZlN0YWxlU2hhcmVkKFxuICAgIGdldEJsb2NrZWRCb3RzRmV0Y2hlZEF0KCksXG4gICAgU0VSVkVSX0JBU0UsXG4gICAgY2xpZW50SGVhZGVycyxcbiAgICAodXNlcklkcywgZmV0Y2hlZEF0KSA9PiB7XG4gICAgICBzZXRCbG9ja2VkQm90cyh1c2VySWRzLCBmZXRjaGVkQXQpO1xuICAgICAgc3RhdGUuYm90QmxvY2tTdGF0ZSA9IHsgLi4uc3RhdGUuYm90QmxvY2tTdGF0ZSwgYmxvY2tlZElkczogbmV3IFNldCh1c2VySWRzKSB9O1xuICAgIH0sXG4gICk7XG59O1xuIiwgIi8vIEluc3RhbGxzIHRoZSBzaGFyZWQgdXNlci1pZCBob29rIGFuZCByZXBvcnRzIGNsaWVudCBpbml0IHRlbGVtZXRyeSB0byB0aGVcbi8vIHNlcnZlciBvbmNlIHBlciB1c2Vyc2NyaXB0IGxpZmV0aW1lLiBVbmxpa2UgdGhlIENocm9tZSBleHRlbnNpb24sIHRoZVxuLy8gdXNlcnNjcmlwdCBydW5zIGVudGlyZWx5IGluIHRoZSBwYWdlJ3Mgb3duIHdvcmxkLCBzbyB0aGUgb2JzZXJ2ZWQgdXNlcklkXG4vLyBjYW4gYmUgcmVwb3J0ZWQgZGlyZWN0bHkgXHUyMDE0IG5vIHBvc3RNZXNzYWdlIHJlbGF5IGlzIG5lZWRlZC5cblxuaW1wb3J0IHsgaW5zdGFsbFVzZXJJZEhvb2ssIGxvZ0luaXQsIGNyZWF0ZUxvZ2dlciB9IGZyb20gXCJAc25pZmZpZXMtcHJvamVjdHMvY29yZVwiO1xuaW1wb3J0IHsgQ0xJRU5UX1NFQ1JFVCwgU0VSVkVSX0JBU0UsIFZFUlNJT04gfSBmcm9tIFwiLi9zaGFyZWQvZW52LmpzXCI7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcihcInVzZXItaWQtbG9nZ2VyXCIpO1xuXG5leHBvcnQgY29uc3QgaW5zdGFsbFVzZXJJZExvZ2dpbmcgPSAob25Vc2VySWQ/OiAodXNlcklkOiBzdHJpbmcpID0+IHZvaWQpOiBib29sZWFuID0+IHtcbiAgbGV0IGluaXRMb2dnZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGluc3RhbGxVc2VySWRIb29rKCh1c2VySWQpID0+IHtcbiAgICBsb2coXCJ1c2VyIGlkIG9ic2VydmVkXCIsIHVzZXJJZCk7XG4gICAgb25Vc2VySWQ/Lih1c2VySWQpO1xuICAgIGlmIChpbml0TG9nZ2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluaXRMb2dnZWQgPSB0cnVlO1xuICAgIHZvaWQgbG9nSW5pdCh7XG4gICAgICBzZXJ2ZXJCYXNlOiBTRVJWRVJfQkFTRSxcbiAgICAgIGNsaWVudFNlY3JldDogQ0xJRU5UX1NFQ1JFVCxcbiAgICAgIHVzZXJJZCxcbiAgICAgIGNsaWVudFR5cGU6IFwidXNlcnNjcmlwdFwiLFxuICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICB9KTtcbiAgfSk7XG59O1xuIiwgImltcG9ydCB7XG4gIEJPVF9CTE9DS19DU1MsXG4gIEJPVF9CTE9DS19IVE1MLFxuICBjb3VudERpc3RpbmN0QmxvY2tlZEJvdHNMYXN0MjRoLFxuICBjcmVhdGVMb2dnZXIsXG4gIERFRkFVTFRfUFJPRklMRV9GSUxURVJTLFxuICBERUZBVUxUX0dFT19PVkVSUklERSxcbiAgZ2V0SGFzUGx1cyxcbiAgZ2V0UHJlbWl1bUZlYXR1cmVGbGFncyxcbiAgZ2V0UHJlbWl1bUZlYXR1cmVzRW5hYmxlZCxcbiAgZ2V0UHJlbWl1bVNlY3Rpb25PcGVuLFxuICBoYXNDYXB0dXJlZENvb3JkcyxcbiAgaW5zdGFsbEhpZGVQaG90b0NsaWNrLFxuICBpbnN0YWxsSGlkZVBob3RvTWVudUJ1dHRvbnMsXG4gIGluc3RhbGxTZW50UGhvdG9IaWRlcixcbiAgaW5zdGFsbFByb2ZpbGVGaWx0ZXJzTWVudSxcbiAgaW5zdGFsbFNlbGVjdGlvbkxpbWl0T3ZlcnJpZGUsXG4gIGluc3RhbGxMb2NhdGlvbk92ZXJyaWRlQ29udHJvbGxlcixcbiAgaW5zdGFsbFBsdXNIb29rLFxuICBtb3VudEZhYixcbiAgUEFORUxfQ1NTLFxuICBQUkVNSVVNX0ZFQVRVUkVTX0NTUyxcbiAgUFJFTUlVTV9GRUFUVVJFU19IVE1MLFxuICBQUk9GSUxFX0ZJTFRFUlNfQ1NTLFxuICBQUk9GSUxFX0ZJTFRFUlNfSFRNTCxcbiAgc2V0SGFzUGx1cyxcbiAgc2V0UHJlbWl1bUZlYXR1cmVGbGFncyxcbiAgc2V0UHJlbWl1bUZlYXR1cmVzRW5hYmxlZCxcbiAgc2V0UHJlbWl1bVNlY3Rpb25PcGVuLFxuICBWRVJTSU9OX0JBREdFX0NTUyxcbiAgVkVSU0lPTl9CQURHRV9IVE1MLFxuICB3aXJlQm90QmxvY2tGb3JtLFxuICB3aXJlUHJlbWl1bUZlYXR1cmVzRm9ybSxcbiAgd2lyZVByb2ZpbGVGaWx0ZXJzRm9ybSxcbiAgd2lyZVZlcnNpb25CYWRnZSxcbiAgVVBEQVRFX0JBTk5FUl9DU1MsXG4gIFVQREFURV9CQU5ORVJfSFRNTCxcbiAgd2lyZVVwZGF0ZUJhbm5lcixcbiAgdHlwZSBMb2NhdGlvbk92ZXJyaWRlQ29udHJvbGxlcixcbiAgdHlwZSBQcmVtaXVtRmVhdHVyZUZsYWdzLFxufSBmcm9tIFwiQHNuaWZmaWVzLXByb2plY3RzL2NvcmVcIjtcbmltcG9ydCBGQUJfSUNPTl9QTkcgZnJvbSBcIi4uLy4uL2NsaWVudC9pY29ucy9pY29uNDgucG5nXCI7XG5pbXBvcnQgUEFORUxfSFRNTCBmcm9tIFwiLi9wYW5lbC5odG1sXCI7XG5pbXBvcnQge1xuICBpbnN0YWxsUmVwb3J0RmVhdHVyZSxcbiAgcmVmcmVzaEJsb2NrZWRCb3RzSWZTdGFsZSxcbiAgdHlwZSBSZXBvcnRGZWF0dXJlU3RhdGUsXG59IGZyb20gXCIuL3JlcG9ydC5qc1wiO1xuaW1wb3J0IHsgUkVQT1JUSU5HX0VOQUJMRUQsIFZFUlNJT04gfSBmcm9tIFwiLi9zaGFyZWQvZW52LmpzXCI7XG5pbXBvcnQge1xuICBnZXRCbG9ja2VkQm90RXZlbnRzQnlEYXksXG4gIGdldEJvdEJsb2NraW5nRW5hYmxlZCxcbiAgZ2V0Qm90QmxvY2tpbmdTZWN0aW9uT3BlbixcbiAgZ2V0UHJvZmlsZUZpbHRlcnMsXG4gIGdldEdlb092ZXJyaWRlLFxuICBnZXRQcm9maWxlRmlsdGVyc0VuYWJsZWQsXG4gIGdldFByb2ZpbGVGaWx0ZXJzU2VjdGlvbk9wZW4sXG4gIHNldEJvdEJsb2NraW5nRW5hYmxlZCxcbiAgc2V0Qm90QmxvY2tpbmdTZWN0aW9uT3BlbixcbiAgc2V0UHJvZmlsZUZpbHRlcnMsXG4gIHNldEdlb092ZXJyaWRlLFxuICBzZXRQcm9maWxlRmlsdGVyc0VuYWJsZWQsXG4gIHNldFByb2ZpbGVGaWx0ZXJzU2VjdGlvbk9wZW4sXG59IGZyb20gXCIuL3NoYXJlZC9sb2NhbC1zdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpbnN0YWxsVXNlcklkTG9nZ2luZyB9IGZyb20gXCIuL3VzZXItaWQtbG9nZ2VyLmpzXCI7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcihcInRvb2xzXCIpO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fc25pZmZpZXNJbmplY3RlZD86IGJvb2xlYW47XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEhvb2tzIChydW5zIGF0IGRvY3VtZW50LXN0YXJ0LCBiZWZvcmUgcGFnZSBzY3JpcHRzKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuaW50ZXJmYWNlIFByZW1pdW1TdGF0ZSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGZsYWdzOiBQcmVtaXVtRmVhdHVyZUZsYWdzO1xufVxuXG5jb25zdCByZWFkUHJlbWl1bSA9ICgpOiBQcmVtaXVtU3RhdGUgPT4gKHtcbiAgZW5hYmxlZDogZ2V0UHJlbWl1bUZlYXR1cmVzRW5hYmxlZCgpLFxuICBmbGFnczogZ2V0UHJlbWl1bUZlYXR1cmVGbGFncygpLFxufSk7XG5cbmludGVyZmFjZSBIb29rU3RhdGUge1xuICBwcmVtaXVtOiBQcmVtaXVtU3RhdGU7XG4gIGdlb0NvbnRyb2xsZXI6IExvY2F0aW9uT3ZlcnJpZGVDb250cm9sbGVyO1xuICByZXBvcnRTdGF0ZTogUmVwb3J0RmVhdHVyZVN0YXRlO1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsSG9va3MoKTogSG9va1N0YXRlIHtcbiAgY29uc3QgcHJlbWl1bSA9IHJlYWRQcmVtaXVtKCk7XG4gIGNvbnN0IHJlcG9ydFN0YXRlID0gaW5zdGFsbFJlcG9ydEZlYXR1cmUoKCkgPT4gcHJlbWl1bS5lbmFibGVkICYmIHByZW1pdW0uZmxhZ3MuYm91bmRhcnkpO1xuICBpbnN0YWxsVXNlcklkTG9nZ2luZygodXNlcklkKSA9PiB7XG4gICAgcmVwb3J0U3RhdGUuY3VycmVudFNuaWZmaWVzVXNlcklkID0gdXNlcklkO1xuICB9KTtcbiAgcmVmcmVzaEJsb2NrZWRCb3RzSWZTdGFsZShyZXBvcnRTdGF0ZSk7XG4gIGluc3RhbGxTZWxlY3Rpb25MaW1pdE92ZXJyaWRlKGdldFByb2ZpbGVGaWx0ZXJzRW5hYmxlZCk7XG4gIGluc3RhbGxQbHVzSG9vayhzZXRIYXNQbHVzKTtcblxuICAvLyBFYWNoIHByZW1pdW0gaG9vayBpcyBsaXZlIG9ubHkgd2hpbGUgdGhlIG1hc3RlciBzd2l0Y2ggYW5kIGl0cyBvd24gc3dpdGNoIGFyZSBib3RoIG9uLlxuICBjb25zdCBpc1Bob3Rvc0VuYWJsZWQgPSAoKTogYm9vbGVhbiA9PiBwcmVtaXVtLmVuYWJsZWQgJiYgcHJlbWl1bS5mbGFncy5waG90b3M7XG4gIGluc3RhbGxIaWRlUGhvdG9DbGljayhcbiAgICBpbnN0YWxsU2VudFBob3RvSGlkZXIoKCkgPT4gcmVwb3J0U3RhdGUuY3VycmVudFNuaWZmaWVzVXNlcklkKSxcbiAgICBpc1Bob3Rvc0VuYWJsZWQsXG4gICk7XG4gIGluc3RhbGxIaWRlUGhvdG9NZW51QnV0dG9ucyhpc1Bob3Rvc0VuYWJsZWQpO1xuXG4gIGNvbnN0IGdlb0NvbnRyb2xsZXIgPSBpbnN0YWxsTG9jYXRpb25PdmVycmlkZUNvbnRyb2xsZXIoe1xuICAgIGluaXRpYWxPdmVycmlkZTogZ2V0R2VvT3ZlcnJpZGUoKSxcbiAgICBpc1ByZW1pdW1FbmFibGVkOiAoKSA9PiBwcmVtaXVtLmVuYWJsZWQgJiYgcHJlbWl1bS5mbGFncy5sb2NhdGlvbixcbiAgICBvbk92ZXJyaWRlQ2hhbmdlZDogc2V0R2VvT3ZlcnJpZGUsXG4gIH0pO1xuXG4gIGNvbnN0IGluaXRpYWxPdmVycmlkZSA9IGdlb0NvbnRyb2xsZXIuZ2V0T3ZlcnJpZGUoKTtcbiAgbG9nKFwiaW5pdFwiLCB7XG4gICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICByZXBvcnRpbmdCdWlsZEZsYWc6IFJFUE9SVElOR19FTkFCTEVELFxuICAgIHByZW1pdW1GZWF0dXJlczogcHJlbWl1bS5lbmFibGVkLFxuICAgIGdlb1Nwb29maW5nOiB7XG4gICAgICBoYXNMb2NhdGlvbjogaGFzQ2FwdHVyZWRDb29yZHMoaW5pdGlhbE92ZXJyaWRlKSxcbiAgICB9LFxuICAgIGJvdEJsb2NraW5nOiByZXBvcnRTdGF0ZS5ib3RCbG9ja1N0YXRlLmVuYWJsZWQsXG4gICAgcHJvZmlsZUZpbHRlcnM6IHJlcG9ydFN0YXRlLmFwcGxpZWRQcm9maWxlRmlsdGVycyxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBwcmVtaXVtLFxuICAgIGdlb0NvbnRyb2xsZXIsXG4gICAgcmVwb3J0U3RhdGUsXG4gIH07XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBVSSAocnVucyBhZnRlciBET01Db250ZW50TG9hZGVkKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGZ1bmN0aW9uIG1vdW50VUkoc3RhdGU6IEhvb2tTdGF0ZSB8IG51bGwpOiB2b2lkIHtcbiAgY29uc3QgcHJlbWl1bSA9IHN0YXRlPy5wcmVtaXVtID8/IHJlYWRQcmVtaXVtKCk7XG4gIGNvbnN0IGdlb0NvbnRyb2xsZXIgPSBzdGF0ZT8uZ2VvQ29udHJvbGxlciA/PyBudWxsO1xuICBjb25zdCByZXBvcnRTdGF0ZSA9IHN0YXRlPy5yZXBvcnRTdGF0ZSA/PyB7XG4gICAgY3VycmVudFNuaWZmaWVzVXNlcklkOiBcIlwiLFxuICAgIGJvdEJsb2NrU3RhdGU6IHsgYmxvY2tlZElkczogbmV3IFNldDxzdHJpbmc+KCksIGVuYWJsZWQ6IHRydWUgfSxcbiAgICBhcHBsaWVkUHJvZmlsZUZpbHRlcnM6IERFRkFVTFRfUFJPRklMRV9GSUxURVJTLFxuICB9O1xuXG4gIGNvbnN0IHNoZWxsU3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIHNoZWxsU3R5bGUudGV4dENvbnRlbnQgPSBQQU5FTF9DU1M7XG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2hlbGxTdHlsZSk7XG5cbiAgY29uc3QgcHJlbWl1bVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBwcmVtaXVtU3R5bGUudGV4dENvbnRlbnQgPSBQUkVNSVVNX0ZFQVRVUkVTX0NTUztcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwcmVtaXVtU3R5bGUpO1xuXG4gIGNvbnN0IGJvdEJsb2NrU3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIGJvdEJsb2NrU3R5bGUudGV4dENvbnRlbnQgPSBCT1RfQkxPQ0tfQ1NTO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGJvdEJsb2NrU3R5bGUpO1xuXG4gIGNvbnN0IHByb2ZpbGVGaWx0ZXJzU3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIHByb2ZpbGVGaWx0ZXJzU3R5bGUudGV4dENvbnRlbnQgPSBQUk9GSUxFX0ZJTFRFUlNfQ1NTO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHByb2ZpbGVGaWx0ZXJzU3R5bGUpO1xuXG4gIGNvbnN0IHZlcnNpb25TdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgdmVyc2lvblN0eWxlLnRleHRDb250ZW50ID0gVkVSU0lPTl9CQURHRV9DU1M7XG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodmVyc2lvblN0eWxlKTtcblxuICBjb25zdCB1cGRhdGVCYW5uZXJTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgdXBkYXRlQmFubmVyU3R5bGUudGV4dENvbnRlbnQgPSBVUERBVEVfQkFOTkVSX0NTUztcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh1cGRhdGVCYW5uZXJTdHlsZSk7XG5cbiAgY29uc3QgZmFiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgZmFiLmlkID0gXCJzbnAtZmFiXCI7XG4gIGZhYi50aXRsZSA9IFwiU25pZmZpZXMgVG9vbHNcIjtcbiAgY29uc3QgZmFiSWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpXCIpO1xuICBmYWJJY29uLmlkID0gXCJzbnAtZmFiLWljb25cIjtcbiAgZmFiSWNvbi5jbGFzc0xpc3QuYWRkKFwiZmFcIiwgXCJzbnAtZmFiLWljb24tYmFzZS1zaXplXCIpO1xuICBmYWJJY29uLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoXCIke0ZBQl9JQ09OX1BOR31cIilgO1xuICBmYWIuYXBwZW5kQ2hpbGQoZmFiSWNvbik7XG4gIG1vdW50RmFiKGZhYik7XG5cbiAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBwYW5lbC5pZCA9IFwic25wLXBhbmVsXCI7XG4gIHBhbmVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgcGFuZWwuaW5uZXJIVE1MID0gUEFORUxfSFRNTDtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwYW5lbCk7XG5cbiAgY29uc3QgdmVyc2lvblJvb3QgPSBwYW5lbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIiNzbnAtdmVyc2lvbi1yb290XCIpITtcbiAgdmVyc2lvblJvb3QuaW5uZXJIVE1MID0gVkVSU0lPTl9CQURHRV9IVE1MO1xuICB3aXJlVmVyc2lvbkJhZGdlKHZlcnNpb25Sb290LCBWRVJTSU9OKTtcblxuICBjb25zdCB1cGRhdGVSb290ID0gcGFuZWwucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXCIjc25wLXVwZGF0ZS1yb290XCIpITtcbiAgdXBkYXRlUm9vdC5pbm5lckhUTUwgPSBVUERBVEVfQkFOTkVSX0hUTUw7XG4gIHdpcmVVcGRhdGVCYW5uZXIodXBkYXRlUm9vdCwgXCJ1c2Vyc2NyaXB0XCIsIFZFUlNJT04pO1xuXG4gIGNvbnN0IHByZW1pdW1Sb290ID0gcGFuZWwucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXCIjc25wLXByZW1pdW0tcm9vdFwiKSE7XG4gIHByZW1pdW1Sb290LmlubmVySFRNTCA9IFBSRU1JVU1fRkVBVFVSRVNfSFRNTDtcblxuICAvLyBSZS1ydW4gdGhlIHNwb29mIChvciB1bi1zcG9vZikgb24gYW55IGFjdGl2ZSBsb2NhdGlvbiB3YXRjaGVzLlxuICBjb25zdCByZXN5bmNMb2NhdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoZ2VvQ29udHJvbGxlcikge1xuICAgICAgZ2VvQ29udHJvbGxlci5zeW5jT3ZlcnJpZGUoZ2VvQ29udHJvbGxlci5nZXRPdmVycmlkZSgpKTtcbiAgICAgIGlmIChcbiAgICAgICAgcHJlbWl1bS5lbmFibGVkICYmXG4gICAgICAgIHByZW1pdW0uZmxhZ3MubG9jYXRpb24gJiZcbiAgICAgICAgaGFzQ2FwdHVyZWRDb29yZHMoZ2VvQ29udHJvbGxlci5nZXRPdmVycmlkZSgpKVxuICAgICAgKSB7XG4gICAgICAgIHZvaWQgZ2VvQ29udHJvbGxlci5zZW5kTG9jYXRpb25VcGRhdGUoZ2VvQ29udHJvbGxlci5nZXRPdmVycmlkZSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcHJlbWl1bUZvcm1IYW5kbGUgPSB3aXJlUHJlbWl1bUZlYXR1cmVzRm9ybShwcmVtaXVtUm9vdCwge1xuICAgIGluaXRpYWxFbmFibGVkOiBwcmVtaXVtLmVuYWJsZWQsXG4gICAgb25Ub2dnbGVFbmFibGVkOiAoZW5hYmxlZCkgPT4ge1xuICAgICAgc2V0UHJlbWl1bUZlYXR1cmVzRW5hYmxlZChlbmFibGVkKTtcbiAgICAgIHByZW1pdW0uZW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICByZXN5bmNMb2NhdGlvbigpO1xuICAgIH0sXG4gICAgZmxhZ3M6IHByZW1pdW0uZmxhZ3MsXG4gICAgb25GbGFnQ2hhbmdlOiAoa2V5LCBlbmFibGVkKSA9PiB7XG4gICAgICBwcmVtaXVtLmZsYWdzID0geyAuLi5wcmVtaXVtLmZsYWdzLCBba2V5XTogZW5hYmxlZCB9O1xuICAgICAgc2V0UHJlbWl1bUZlYXR1cmVGbGFncyhwcmVtaXVtLmZsYWdzKTtcbiAgICAgIGlmIChrZXkgPT09IFwibG9jYXRpb25cIikge1xuICAgICAgICByZXN5bmNMb2NhdGlvbigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFzUGx1czogZ2V0SGFzUGx1cygpLFxuICAgIGdlbzoge1xuICAgICAgaW5pdGlhbDogZ2VvQ29udHJvbGxlcj8uZ2V0T3ZlcnJpZGUoKSA/PyB7IC4uLkRFRkFVTFRfR0VPX09WRVJSSURFIH0sXG4gICAgICBvbkNsZWFyOiAobmV4dCkgPT4gZ2VvQ29udHJvbGxlcj8uc2V0T3ZlcnJpZGUobmV4dCksXG4gICAgfSxcbiAgICBpbml0aWFsT3BlbjogZ2V0UHJlbWl1bVNlY3Rpb25PcGVuKCksXG4gICAgb25Ub2dnbGU6IHNldFByZW1pdW1TZWN0aW9uT3BlbixcbiAgfSk7XG5cbiAgZ2VvQ29udHJvbGxlcj8uc3Vic2NyaWJlQ2hhbmdlKChuZXh0KSA9PiB7XG4gICAgcHJlbWl1bUZvcm1IYW5kbGUuc2V0T3ZlcnJpZGUobmV4dCk7XG4gIH0pO1xuXG4gIGNvbnN0IGJvdEJsb2NrUm9vdCA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFwiI3NucC1ib3QtYmxvY2stcm9vdFwiKSE7XG4gIGJvdEJsb2NrUm9vdC5pbm5lckhUTUwgPSBCT1RfQkxPQ0tfSFRNTDtcblxuICB3aXJlQm90QmxvY2tGb3JtKGJvdEJsb2NrUm9vdCwge1xuICAgIHJlcG9ydGluZ0VuYWJsZWQ6IFJFUE9SVElOR19FTkFCTEVELFxuICAgIHVzZXJFbmFibGVkUmVwb3J0aW5nOiBnZXRCb3RCbG9ja2luZ0VuYWJsZWQoKSxcbiAgICBpbml0aWFsQ291bnQ6IGNvdW50RGlzdGluY3RCbG9ja2VkQm90c0xhc3QyNGgoZ2V0QmxvY2tlZEJvdEV2ZW50c0J5RGF5KCkpLFxuICAgIGluaXRpYWxPcGVuOiBnZXRCb3RCbG9ja2luZ1NlY3Rpb25PcGVuKCksXG4gICAgb25Ub2dnbGU6IHNldEJvdEJsb2NraW5nU2VjdGlvbk9wZW4sXG4gICAgb25Ub2dnbGVFbmFibGVkOiAoZW5hYmxlZCkgPT4ge1xuICAgICAgc2V0Qm90QmxvY2tpbmdFbmFibGVkKGVuYWJsZWQpO1xuICAgICAgcmVwb3J0U3RhdGUuYm90QmxvY2tTdGF0ZSA9IHsgLi4ucmVwb3J0U3RhdGUuYm90QmxvY2tTdGF0ZSwgZW5hYmxlZCB9O1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHByb2ZpbGVGaWx0ZXJzUm9vdCA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFwiI3NucC1wcm9maWxlLWZpbHRlcnMtcm9vdFwiKSE7XG4gIHByb2ZpbGVGaWx0ZXJzUm9vdC5pbm5lckhUTUwgPSBQUk9GSUxFX0ZJTFRFUlNfSFRNTDtcblxuICBsZXQgcmVtb3ZlRmlsdGVyc01lbnU6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBjb25zdCBzeW5jRmlsdGVyc01lbnUgPSAoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgIGlmIChlbmFibGVkICYmICFyZW1vdmVGaWx0ZXJzTWVudSkge1xuICAgICAgcmVtb3ZlRmlsdGVyc01lbnUgPSBpbnN0YWxsUHJvZmlsZUZpbHRlcnNNZW51KHtcbiAgICAgICAgaW5pdGlhbDogZ2V0UHJvZmlsZUZpbHRlcnMoKSxcbiAgICAgICAgYXBwbGllZDogcmVwb3J0U3RhdGUuYXBwbGllZFByb2ZpbGVGaWx0ZXJzLFxuICAgICAgICBvbkNoYW5nZTogc2V0UHJvZmlsZUZpbHRlcnMsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFlbmFibGVkICYmIHJlbW92ZUZpbHRlcnNNZW51KSB7XG4gICAgICByZW1vdmVGaWx0ZXJzTWVudSgpO1xuICAgICAgcmVtb3ZlRmlsdGVyc01lbnUgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgc3luY0ZpbHRlcnNNZW51KGdldFByb2ZpbGVGaWx0ZXJzRW5hYmxlZCgpKTtcblxuICB3aXJlUHJvZmlsZUZpbHRlcnNGb3JtKHByb2ZpbGVGaWx0ZXJzUm9vdCwge1xuICAgIGluaXRpYWxFbmFibGVkOiBnZXRQcm9maWxlRmlsdGVyc0VuYWJsZWQoKSxcbiAgICBvblRvZ2dsZUVuYWJsZWQ6IChlbmFibGVkKSA9PiB7XG4gICAgICBzZXRQcm9maWxlRmlsdGVyc0VuYWJsZWQoZW5hYmxlZCk7XG4gICAgICBzeW5jRmlsdGVyc01lbnUoZW5hYmxlZCk7XG4gICAgfSxcbiAgICBpbml0aWFsT3BlbjogZ2V0UHJvZmlsZUZpbHRlcnNTZWN0aW9uT3BlbigpLFxuICAgIG9uVG9nZ2xlOiBzZXRQcm9maWxlRmlsdGVyc1NlY3Rpb25PcGVuLFxuICB9KTtcblxuICBjb25zdCBjbG9zZUJ0biA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiI3NucC1jbG9zZVwiKSE7XG4gIGZhYi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIHBhbmVsLnN0eWxlLmRpc3BsYXkgPSBwYW5lbC5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiZmxleFwiIDogXCJub25lXCI7XG4gIH0pO1xuICBjbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIHBhbmVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFbnRyeSBwb2ludCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbi8vIE11c3QgcnVuIGFmdGVyIGFsbCBjb25zdCBkZWNsYXJhdGlvbnMgYWJvdmUgYXJlIGluaXRpYWxpemVkLlxuXG5pZiAod2luZG93Ll9fc25pZmZpZXNJbmplY3RlZCkge1xuICAvLyBBbHJlYWR5IGluc3RhbGxlZCBcdTIwMTQgbm90aGluZyB0byBkby5cbn0gZWxzZSB7XG4gIHdpbmRvdy5fX3NuaWZmaWVzSW5qZWN0ZWQgPSB0cnVlO1xuICBsZXQgaG9va1N0YXRlOiBIb29rU3RhdGUgfCBudWxsID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBob29rU3RhdGUgPSBpbnN0YWxsSG9va3MoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKFwiaG9vayBpbnN0YWxsIGZhaWxlZDpcIiwgZXJyKTtcbiAgfVxuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiBtb3VudFVJKGhvb2tTdGF0ZSksIHsgb25jZTogdHJ1ZSB9KTtc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O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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QUFDLEVBRXRGM0QsR0FBUTJELENBQVMsQ0FFckIiLAogICJuYW1lcyI6IFsiZm9ybWF0VGFnIiwgIm5hbWUiLCAiY3JlYXRlTG9nZ2VyIiwgInRhZyIsICJsb2ciLCAiYXJncyIsICJpc1NuaWZmaWVzQXBpSG9zdCIsICJob3N0IiwgIldTX0hPU1QiLCAiV1NfVVNFUl9JRF9QQVJBTSIsICJIRUlHSFRfTElNSVRTIiwgIldFSUdIVF9MSU1JVFMiLCAiQ01fUEVSX0lOQ0giLCAiTEJfUEVSX0tHIiwgIkFVVEhFTlRJQ0FURV9DVVJSRU5UX1BBVEgiLCAiUE9TVF9BVVRIX1BBVEgiLCAiU09GVF9SRUxPQURfUEFUSCIsICJDSEFUX0RBVEFfUEFUSCIsICJNRVNTQUdFU19QQVRIIiwgIlBIT1RPX1ZJU0lCSUxJVFlfUEFUSCIsICJBTExfUEhPVE9TX1ZJU0lCSUxJVFlfUEFUSCIsICJMT0NBVElPTl9QQVRIIiwgIkNJVFlfRU5EUE9JTlRfUEFUVEVSTiIsICJFWFBFQ1RFRF9QUk9GSUxFX1BBVEhTIiwgImhhc1BhdGgiLCAicm9vdCIsICJwYXRoIiwgIm5vZGUiLCAia2V5IiwgImxvZyIsICJjcmVhdGVMb2dnZXIiLCAicmVwb3J0ZWRHYXBzIiwgIndhcm5JZkluY29tcGxldGUiLCAicHJvZmlsZSIsICJjcmVhdGVQcm9maWxlTWF0Y2hlciIsICJydWxlcyIsICJzZWVuIiwgImhpZGRlbiIsICJzZWxmSWQiLCAiaGlkZXMiLCAiaW5DaGF0IiwgInJ1bGUiLCAiciIsICJjaGVja3MiLCAiaWQiLCAiX2lkIiwgImRhdGEiLCAia25vd24iLCAicmVzdWx0IiwgImlkcyIsICJib3RCbG9ja1J1bGUiLCAiZ2V0U3RhdGUiLCAib25GaWx0ZXJlZCIsICJHRU5ERVJTIiwgIkRFRkFVTFRfR0VOREVSX0ZJTFRFUiIsICJwYXJzZUdlbmRlckZpbHRlciIsICJ2YWx1ZSIsICJyYXciLCAiZ2VuZGVycyIsICJwaWNrZWQiLCAiZyIsICJhbGxvd2VkR2VuZGVycyIsICJmaWx0ZXIiLCAiV0lSRV9HRU5ERVJTIiwgInByb2ZpbGVHZW5kZXIiLCAiZ2VuZGVyUnVsZSIsICJnZXRGaWx0ZXIiLCAiZW5hYmxlZCIsICJnZW5kZXIiLCAicHJlZmVyc01ldHJpYyIsICJkZWZhdWx0UmFuZ2VGaWx0ZXIiLCAicGFyc2VSYW5nZUZpbHRlciIsICJib3VuZCIsICJ2IiwgInJhbmdlS2V5IiwgInJhbmdlUnVsZSIsICJuYW1lIiwgInJlYWQiLCAibWluIiwgIm1heCIsICJpbmNsdWRlVW5zcGVjaWZpZWQiLCAiREVGQVVMVF9PTkxJTkVfRklMVEVSIiwgIk9OTElORV9NSU5VVEVTIiwgIm9ubGluZUxhYmVsIiwgIm1pbnV0ZXMiLCAicGFyc2VPbmxpbmVGaWx0ZXIiLCAib25saW5lS2V5IiwgImNsb2NrVGV4dCIsICJ0aW1lIiwgIm5vdyIsICJhdCIsICJjbG9jayIsICJvbmxpbmVTaW5jZUxhYmVsIiwgImZyb20iLCAib25saW5lUnVsZSIsICJsb2FkZWRBdCIsICJzdGVwcyIsICJsaW1pdHMiLCAic3RlcCIsICJuIiwgIkhFSUdIVF9PUFRJT05TIiwgIkhFSUdIVF9MSU1JVFMiLCAiaW5jaGVzIiwgIkNNX1BFUl9JTkNIIiwgImNtIiwgIldFSUdIVF9PUFRJT05TIiwgIldFSUdIVF9MSU1JVFMiLCAibGIiLCAiTEJfUEVSX0tHIiwgImtnIiwgIm5lYXJlc3RDaG9pY2UiLCAiY2hvaWNlcyIsICJhIiwgImIiLCAicmFuZ2VMYWJlbCIsICJvcHRpb25zIiwgImxhYmVsIiwgIkRFRkFVTFRfUFJPRklMRV9GSUxURVJTIiwgInBhcnNlUHJvZmlsZUZpbHRlcnMiLCAiZ2F0ZVByb2ZpbGVGaWx0ZXJzIiwgImZpbHRlcnMiLCAicHJvZmlsZUZpbHRlclJ1bGVzIiwgImdldEZpbHRlcnMiLCAiREVGQVVMVF9HRU9fT1ZFUlJJREUiLCAiaGFzQ2FwdHVyZWRDb29yZHMiLCAib3ZlcnJpZGUiLCAiREVGQVVMVF9QUk9GSUxFX0JPUkRFUl9PUEVOIiwgIkRFRkFVTFRfUFJFTUlVTV9GRUFUVVJFX0ZMQUdTIiwgInBhcnNlUHJlbWl1bUZlYXR1cmVGbGFncyIsICJ2YWx1ZSIsICJyYXciLCAiREVGQVVMVF9MT0NBTF9TRVRUSU5HUyIsICJERUZBVUxUX0dFT19PVkVSUklERSIsICJERUZBVUxUX1BST0ZJTEVfQk9SREVSX09QRU4iLCAiREVGQVVMVF9QUk9GSUxFX0ZJTFRFUlMiLCAiREVGQVVMVF9QUkVNSVVNX0ZFQVRVUkVfRkxBR1MiLCAicmVzb2x2ZVByZW1pdW1GZWF0dXJlc0VuYWJsZWQiLCAic3RvcmVkIiwgImxlZ2FjeUdlb0VuYWJsZWQiLCAibGVnYWN5Qm9yZGVyRW5hYmxlZCIsICJpbnN0YWxsR2VvSG9vayIsICJnZXRPdmVycmlkZSIsICJvblBvc2l0aW9uIiwgImxvZyIsICJjcmVhdGVMb2dnZXIiLCAiZ2VvIiwgIm5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbiIsICJuYXRpdmVXYXRjaFBvc2l0aW9uIiwgIm5hdGl2ZUNsZWFyV2F0Y2giLCAiYWN0aXZlV2F0Y2hlcnMiLCAiYXBwbHlPdmVycmlkZSIsICJwb3NpdGlvbiIsICJvdiIsICJoYXNDYXB0dXJlZENvb3JkcyIsICJzcG9vZmVkIiwgIndyYXBTdWNjZXNzIiwgImNhbGxiYWNrIiwgIndyYXBFcnJvciIsICJlcnIiLCAic3VjY2VzcyIsICJlcnJvciIsICJvcHRpb25zIiwgIndyYXBwZWQiLCAiaWQiLCAicmVmcmVzaFdhdGNoZXMiLCAicG9zIiwgImNiIiwgImV4dHJhY3RVc2VySWQiLCAidXJsIiwgInBhcnNlZCIsICJXU19IT1NUIiwgIldTX1VTRVJfSURfUEFSQU0iLCAiaW5zdGFsbFVzZXJJZEhvb2siLCAib25Vc2VySWQiLCAibG9nIiwgImNyZWF0ZUxvZ2dlciIsICJOYXRpdmVXZWJTb2NrZXQiLCAiUGF0Y2hlZFdlYlNvY2tldCIsICJwcm90b2NvbHMiLCAidXNlcklkIiwgInNoYXBlTG9nIiwgImNyZWF0ZUxvZ2dlciIsICJyZXBvcnRlZFNoYXBlcyIsICJleHBlY3RTaGFwZSIsICJvayIsICJ3aGF0IiwgImZpbHRlclByb2ZpbGVzIiwgIml0ZW1zIiwgImNoZWNrcyIsICJpdGVtIiwgImZpbHRlclBvc3RBdXRoZW50aWNhdGlvblBheWxvYWQiLCAicGF5bG9hZCIsICJtYXRjaGVyIiwgIkFOVElQT0RFX01JTEVTIiwgInJhaXNlUmFkaXVzSW5QYXlsb2FkIiwgIm5lYXJieSIsICJmaWx0ZXJDaGF0RGF0YVBheWxvYWQiLCAiY2hhdCIsICJpc0hpZGRlbkNvbnZlcnNhdGlvbiIsICJjIiwgImhpZGRlbiIsICJpZCIsICJmaWx0ZXJNZXNzYWdlc1BheWxvYWQiLCAibSIsICJhcHBseUZpbHRlciIsICJraW5kIiwgImFzUHJvZmlsZSIsICJ2YWx1ZSIsICJwYXJzZVdzRnJhbWUiLCAicmF3IiwgIm9iaiIsICJqb2luZWQiLCAidXBkYXRlIiwgImF1dGhvciIsICJwYXJ0aWFsVXNlciIsICJoaWRlc0ZyYW1lIiwgImZyYW1lIiwgImNsYXNzaWZ5WGhyVXJsIiwgInVybCIsICJwYXJzZWQiLCAiaXNTbmlmZmllc0FwaUhvc3QiLCAiUE9TVF9BVVRIX1BBVEgiLCAiU09GVF9SRUxPQURfUEFUSCIsICJDSEFUX0RBVEFfUEFUSCIsICJNRVNTQUdFU19QQVRIIiwgImluc3RhbGxYaHJGaWx0ZXIiLCAibWF0Y2hlciIsICJsb2ciLCAicmFpc2VSYWRpdXMiLCAicHJvdG8iLCAibmF0aXZlT3BlbiIsICJuYXRpdmVTZW5kIiwgInJlc3BvbnNlVGV4dERlc2NyaXB0b3IiLCAicmVzcG9uc2VEZXNjcmlwdG9yIiwgIm1ldGhvZCIsICJyZXN0IiwgImFyZ3MiLCAia2luZCIsICJyZXNwb25zZVR5cGUiLCAiY2FjaGVkIiwgImNvbXB1dGUiLCAic2hvdWxkRmlsdGVyIiwgInNob3VsZFJhaXNlIiwgInNob3VsZFJld3JpdGUiLCAianNvbiIsICJ0ZXh0IiwgImFwcGx5RmlsdGVyIiwgInJ1bGUiLCAiaWRzIiwgInJhaXNlUmFkaXVzSW5QYXlsb2FkIiwgImlzV3NUYXJnZXRIb3N0IiwgIldTX0hPU1QiLCAicGF0Y2hTb2NrZXRJbnN0YW5jZSIsICJzb2NrZXQiLCAibmF0aXZlT25NZXNzYWdlRGVzY3JpcHRvciIsICJzaG91bGRTdXBwcmVzcyIsICJldmVudCIsICJmcmFtZSIsICJwYXJzZVdzRnJhbWUiLCAiaGlkZXNGcmFtZSIsICJuYXRpdmVBZGRFdmVudExpc3RlbmVyIiwgIm5hdGl2ZVJlbW92ZUV2ZW50TGlzdGVuZXIiLCAid3JhcHBlZExpc3RlbmVycyIsICJ3cmFwIiwgImxpc3RlbmVyIiwgImV4aXN0aW5nIiwgImhhbmRsZSIsICJ3cmFwcGVkIiwgInR5cGUiLCAib3B0aW9ucyIsICJjdXJyZW50SGFuZGxlciIsICJoYW5kbGVyIiwgImluc3RhbGxXZWJTb2NrZXRGaWx0ZXIiLCAiTmF0aXZlV2ViU29ja2V0IiwgIlBhdGNoZWRXZWJTb2NrZXQiLCAicHJvdG9jb2xzIiwgIldTX1VTRVJfSURfUEFSQU0iLCAiaW5zdGFsbFByb2ZpbGVGaWx0ZXJIb29rIiwgInJ1bGVzIiwgImNyZWF0ZUxvZ2dlciIsICJjcmVhdGVQcm9maWxlTWF0Y2hlciIsICJmaWx0ZXJfbWVudV9kZWZhdWx0IiwgIkZMWU9VVF9JRCIsICJJVEVNX0hFSUdIVCIsICJjcmVhdGVXaGVlbCIsICJuYW1lIiwgInRpdGxlIiwgIm9uQ2hhbmdlIiwgImVsIiwgImhlYWRpbmciLCAibGlzdCIsICJpdGVtcyIsICJpbmRleCIsICJzZWxlY3QiLCAibmV4dCIsICJjbGFtcGVkIiwgIm1vdmVkIiwgIm5vZGUiLCAiaSIsICJyZXZlYWwiLCAibmV4dEl0ZW1zIiwgInZhbHVlIiwgIml0ZW0iLCAib3BlblJhbmdlRmx5b3V0IiwgIm9wdGlvbnMiLCAiY3VycmVudCIsICJvbkRvbmUiLCAiaG9zdCIsICJjaGVja0ljb24iLCAiYmFja2Ryb3AiLCAic2hlZXQiLCAiY2xvc2UiLCAib25LZXkiLCAiZXZlbnQiLCAiYWN0aW9uIiwgInRleHQiLCAic2lkZSIsICJvbkNsaWNrIiwgIndyYXAiLCAiYnV0dG9uIiwgImNob2ljZXMiLCAibWV0cmljIiwgIndpdGhOb25lIiwgInRvcCIsICJwdXNoIiwgIm90aGVyIiwgInN0ZXAiLCAiZnJvbSIsICJ0byIsICJ1bml0IiwgImNob2ljZSIsICJtaW4iLCAibWF4IiwgImZpbGxCb3VuZHMiLCAibWluVmFsdWUiLCAibWF4VmFsdWUiLCAic25hcCIsICJuZWFyZXN0Q2hvaWNlIiwgImhlYWRlciIsICJ1bnNwZWNpZmllZCIsICJib2R5IiwgImJveCIsICJzeW5jQm94IiwgInVuc3BlY2lmaWVkTGFiZWwiLCAidHlwZSIsICJ3aGVlbCIsICJvcGVuQ2hvaWNlRmx5b3V0IiwgIm1vZGVzIiwgIm1vZGUiLCAibW9kZVJvdyIsICJtb2RlQnV0dG9ucyIsICJzeW5jTW9kZXMiLCAib24iLCAicHJvbXB0IiwgIlNOSUZGSUVTX1NFTEVDVE9SUyIsICJNQVJLRVJfQ09OVEFJTkVSX1NFTEVDVE9SIiwgIk1BUktFUl9BVkFUQVJfU0VMRUNUT1IiLCAiQVBQX1NDUkVFTl9TRUxFQ1RPUiIsICJOQU1FX0xBQkVMX1NFTEVDVE9SIiwgIlBJTl9CVVRUT05fU0VMRUNUT1IiLCAiUFJPRklMRV9PUFRJT05TX01FTlVfU0VMRUNUT1IiLCAiSUNPTl9IT0xERVJfUklHSFRfQk9UVE9NX1NFTEVDVE9SIiwgIlRSQVZFTF9IRVJFX0JVVFRPTl9TRUxFQ1RPUiIsICJDSVRJRVNfSU5QVVRfU0VMRUNUT1IiLCAiUFJPRklMRV9UWVBFX0ZJTFRFUl9MQUJFTF9TRUxFQ1RPUiIsICJDT05ORUNURURfTk9XX0ZJTFRFUl9MQUJFTF9TRUxFQ1RPUiIsICJFTkRPV01FTlRfRklMVEVSX0xBQkVMX1NFTEVDVE9SIiwgIkhJREVfUEhPVE9fQlVUVE9OX1NFTEVDVE9SIiwgIlBIT1RPX01FU1NBR0VfU0VMRUNUT1IiLCAiSElERV9BTExfUEhPVE9TX0JVVFRPTl9TRUxFQ1RPUiIsICJVTkhJREVfQUxMX1BIT1RPU19CVVRUT05fU0VMRUNUT1IiLCAiU1RZTEVfSUQiLCAiUEFHRV9MT0FERURfQVQiLCAic3RyaXBUZXN0SWRzIiwgInJvb3QiLCAiZWwiLCAiR0VOREVSX1JPV19JRCIsICJHRU5ERVJfTEFCRUxTIiwgImJ1aWxkR2VuZGVyUm93IiwgImFuY2hvciIsICJmaWx0ZXJzIiwgImNoYW5nZWQiLCAiaGVhZGVyIiwgImxhYmVsIiwgInRpdGxlIiwgInRvZ2dsZSIsICJvcHRpb25zQ29udGFpbmVyIiwgImJvZHkiLCAiYnV0dG9ucyIsICJHRU5ERVJTIiwgImdlbmRlciIsICJidXR0b24iLCAiZ2VuZGVycyIsICJhcHBseSIsICJlbmFibGVkIiwgIm9uIiwgIk9OTElORV9ST1dfSUQiLCAiYnVpbGRPbmxpbmVSb3ciLCAidGl0bGVMaW5lIiwgImljb24iLCAidHJhaWxpbmciLCAic3dpdGNoTGFiZWwiLCAic2luY2UiLCAib3BlblBpY2tlciIsICJub3ciLCAib3BlbkNob2ljZUZseW91dCIsICJtb2RlIiwgIk9OTElORV9NSU5VVEVTIiwgInZhbHVlIiwgIm9ubGluZUxhYmVsIiwgImNsb2NrVGV4dCIsICJtaW51dGVzIiwgImV2ZW50IiwgIm5lZWRzUmVsb2FkIiwgImZyb20iLCAiY3V0b2ZmIiwgIm9ubGluZVNpbmNlTGFiZWwiLCAiYnVpbGRTdGF0Um93IiwgInBpY2siLCAib3B0aW9ucyIsICJncm91cCIsICJpdGVtIiwgImNoZWNrYm94IiwgIm5hbWUiLCAic3RhdEJ1dHRvbiIsICJ0ZXh0IiwgImZpbHRlciIsICJvcGVuU2hlZXQiLCAib3BlblJhbmdlRmx5b3V0IiwgIm5leHQiLCAibmF0aXZlTGlzdCIsICJzdXNwZW5kZWQiLCAiZm9sbG93Q3J1aXNlclN0YXRzIiwgInJhbmdlTGFiZWwiLCAicHJvZmlsZVR5cGVSb3ciLCAiUFJPRklMRV9UWVBFX0ZJTFRFUl9MQUJFTF9TRUxFQ1RPUiIsICJjcnVpc2luZ05vd1JvdyIsICJDT05ORUNURURfTk9XX0ZJTFRFUl9MQUJFTF9TRUxFQ1RPUiIsICJlbmRvd21lbnRMaW5lIiwgIkVORE9XTUVOVF9GSUxURVJfTEFCRUxfU0VMRUNUT1IiLCAiUk9XUyIsICJmIiwgImFsbG93ZWRHZW5kZXJzIiwgIm9ubGluZUtleSIsICJyYW5nZUtleSIsICJIRUlHSFRfT1BUSU9OUyIsICJXRUlHSFRfT1BUSU9OUyIsICJsb2ciLCAiY3JlYXRlTG9nZ2VyIiwgInJlcG9ydGVkQW5jaG9ycyIsICJ3YXJuT25jZSIsICJrZXkiLCAibWVzc2FnZSIsICJORUlHSEJPVVJfR1JBQ0VfTVMiLCAiaW5zdGFsbFByb2ZpbGVGaWx0ZXJzTWVudSIsICJzeW5jcyIsICJzeW5jIiwgImVycm9yIiwgImJ1aWxkIiwgInJvdyIsICJtb3VudGVkIiwgInJlbmRlciIsICJsYXN0QWZ0ZXIiLCAic3R5bGUiLCAiZmlsdGVyX21lbnVfZGVmYXVsdCIsICJuZWlnaGJvdXJDaGVjayIsICJjaGVja05laWdoYm91cnMiLCAidHlwZSIsICJjcnVpc2luZyIsICJ0IiwgImMiLCAib2JzZXJ2ZXIiLCAic3RhcnQiLCAiUFJPUEVSVFkiLCAiUE9TSVRJT05fS0VZIiwgIm93bnMiLCAidGFyZ2V0IiwgImtleSIsICJpc1N0YXRGaWx0ZXJPcHRpb24iLCAibmFtZSIsICJpc1BpY2tlck1vZGVsIiwgInZhbHVlIiwgIlBST1BFUlRZIiwgImRlZmluZURhdGEiLCAiaW5zdGFsbFNlbGVjdGlvbkxpbWl0T3ZlcnJpZGUiLCAiaXNFbmFibGVkIiwgImxpZnQiLCAiY3VycmVudCIsICJuZXh0IiwgInByb2ZpbGVfZmlsdGVyc19kZWZhdWx0IiwgInN3aXRjaF9kZWZhdWx0IiwgInByb2ZpbGVfZmlsdGVyc19kZWZhdWx0IiwgIlBST0ZJTEVfRklMVEVSU19DU1MiLCAic3dpdGNoX2RlZmF1bHQiLCAicHJvZmlsZV9maWx0ZXJzX2RlZmF1bHQiLCAid2lyZVByb2ZpbGVGaWx0ZXJzRm9ybSIsICJjb250YWluZXIiLCAib3B0aW9ucyIsICJkZXRhaWxzIiwgImVuYWJsZWRDaGVja2JveCIsICJkYXRlS2V5Rm9yIiwgImRhdGUiLCAieWVzdGVyZGF5T2YiLCAicmVjb3JkQmxvY2tlZEJvdElkcyIsICJsb2ciLCAiaWRzIiwgIm5vdyIsICJ0b2RheUtleSIsICJ5ZXN0ZXJkYXlLZXkiLCAidG9kYXkiLCAicmVjb3JkIiwgImNvdW50RGlzdGluY3RCbG9ja2VkQm90c0xhc3QyNGgiLCAibG9nSW5pdCIsICJvcHRpb25zIiwgImxvZyIsICJjcmVhdGVMb2dnZXIiLCAic2VydmVyQmFzZSIsICJjbGllbnRTZWNyZXQiLCAidXNlcklkIiwgImNsaWVudFR5cGUiLCAidmVyc2lvbiIsICJiYXNlIiwgInJlcyIsICJlcnIiLCAicHJlbWl1bV9mZWF0dXJlc19kZWZhdWx0IiwgInByZW1pdW1fZmVhdHVyZXNfZGVmYXVsdCIsICJQUkVNSVVNX0ZFQVRVUkVTX0NTUyIsICJzd2l0Y2hfZGVmYXVsdCIsICJwcmVtaXVtX2ZlYXR1cmVzX2RlZmF1bHQiLCAiVEFCX0xBQkVMUyIsICJkZXNjcmliZUxvY2F0aW9uIiwgIm92ZXJyaWRlIiwgIndpcmVQcmVtaXVtRmVhdHVyZXNGb3JtIiwgImNvbnRhaW5lciIsICJvcHRpb25zIiwgImVsIiwgImlkIiwgImRldGFpbHMiLCAiZW5hYmxlZCIsICJjb25maWciLCAic3luY0VuYWJsZWQiLCAiaW5wdXQiLCAiRkxBR19JTlBVVFMiLCAia2V5IiwgInRvZ2dsZSIsICJib2R5IiwgImV2ZW50IiwgImdlb0NsZWFyIiwgImdlb1NhdmVkIiwgImN1cnJlbnQiLCAic2V0T3ZlcnJpZGUiLCAibmV4dCIsICJyZW5kZXJHZW8iLCAiY2FwdHVyZWQiLCAiaGFzQ2FwdHVyZWRDb29yZHMiLCAiYm9yZGVyIiwgInRhYlNlbGVjdCIsICJvcHRpb25DdXJyZW50IiwgIm9wdGlvbk5ldyIsICJzYXZlQnRuIiwgImFwcGx5TGFiZWxzIiwgIm9wZW5Jbk5ld1RhYiIsICJzYXZlZCIsICJpc1BsdXNNZW1iZXJzaGlwIiwgImJvZHkiLCAibm93IiwgIm1lbWJlcnNoaXAiLCAicmVwb3J0IiwgInRleHQiLCAib25SZXN1bHQiLCAiaW5zdGFsbFBsdXNIb29rIiwgInByb3RvIiwgIm5hdGl2ZU9wZW4iLCAibmF0aXZlU2VuZCIsICJtZXRob2QiLCAidXJsIiwgInJlc3QiLCAiQVVUSEVOVElDQVRFX0NVUlJFTlRfUEFUSCIsICJhcmdzIiwgIm5hdGl2ZUZldGNoIiwgImlucHV0IiwgImluaXQiLCAicmVzcG9uc2UiLCAiSUNPTl9IT0xERVJfUk9XX0NMQVNTIiwgIkZBQl9ET0NLRURfQ0xBU1MiLCAiTkdDT05URU5UX0FUVFJfUFJFRklYIiwgImNvcHlOZ0NvbnRlbnRBdHRyIiwgInRhcmdldCIsICJzb3VyY2UiLCAiYXR0ciIsICJhIiwgIm1vdW50RmFiIiwgImZhYiIsICJ0cnlJbnNlcnRJbnRvSWNvbkhvbGRlciIsICJpY29uSG9sZGVyIiwgIklDT05fSE9MREVSX1JJR0hUX0JPVFRPTV9TRUxFQ1RPUiIsICJwYW5lbF9kZWZhdWx0IiwgImxvZyIsICJjcmVhdGVMb2dnZXIiLCAiUkVMRUFTRVNfQVBJIiwgIkNBQ0hFX0tFWV9QUkVGSVgiLCAiQ0FDSEVfVFRMX01TIiwgInBhcnNlVmVyc2lvbiIsICJ2ZXJzaW9uIiwgIm4iLCAiaXNOZXdlclZlcnNpb24iLCAiYSIsICJiIiwgInBhcnRzQSIsICJwYXJ0c0IiLCAibGVuIiwgImkiLCAieCIsICJ5IiwgInJlYWRDYWNoZSIsICJjaGFubmVsIiwgInJhdyIsICJjYWNoZWQiLCAid3JpdGVDYWNoZSIsICJmZXRjaExhdGVzdFZlcnNpb24iLCAiY2FjaGVkVmVyc2lvbiIsICJwcmVmaXgiLCAicmVzIiwgInJlbGVhc2VzIiwgImxhdGVzdCIsICJyZWxlYXNlIiwgImVyciIsICJpc1VwZGF0ZUF2YWlsYWJsZSIsICJjdXJyZW50VmVyc2lvbiIsICJ1cGRhdGVfYmFubmVyX2RlZmF1bHQiLCAidXBkYXRlX2Jhbm5lcl9kZWZhdWx0IiwgIndpcmVVcGRhdGVCYW5uZXIiLCAiY29udGFpbmVyIiwgImNoYW5uZWwiLCAiY3VycmVudFZlcnNpb24iLCAiZWwiLCAiaXNVcGRhdGVBdmFpbGFibGUiLCAib3V0T2ZEYXRlIiwgIlBST0ZJTEVfQk9SREVSX1NUT1JBR0VfS0VZIiwgIlBSRU1JVU1fRkVBVFVSRVNfRU5BQkxFRF9TVE9SQUdFX0tFWSIsICJHRU9fU1RPUkFHRV9LRVkiLCAicmVhZExlZ2FjeUVuYWJsZWQiLCAia2V5IiwgInJhdyIsICJnZXRQcmVtaXVtRmVhdHVyZXNFbmFibGVkIiwgInJlc29sdmVQcmVtaXVtRmVhdHVyZXNFbmFibGVkIiwgIlBST0ZJTEVfQk9SREVSX1NUT1JBR0VfS0VZIiwgInNldFByZW1pdW1GZWF0dXJlc0VuYWJsZWQiLCAiZW5hYmxlZCIsICJQUkVNSVVNX0ZMQUdTX1NUT1JBR0VfS0VZIiwgImdldFByZW1pdW1GZWF0dXJlRmxhZ3MiLCAicGFyc2VQcmVtaXVtRmVhdHVyZUZsYWdzIiwgInNldFByZW1pdW1GZWF0dXJlRmxhZ3MiLCAiZmxhZ3MiLCAiUFJFTUlVTV9TRUNUSU9OX09QRU5fU1RPUkFHRV9LRVkiLCAiSEFTX1BMVVNfU1RPUkFHRV9LRVkiLCAiZ2V0UHJlbWl1bVNlY3Rpb25PcGVuIiwgInNldFByZW1pdW1TZWN0aW9uT3BlbiIsICJvcGVuIiwgImdldEhhc1BsdXMiLCAic2V0SGFzUGx1cyIsICJoYXNQbHVzIiwgInZlcnNpb25fYmFkZ2VfZGVmYXVsdCIsICJ2ZXJzaW9uX2JhZGdlX2RlZmF1bHQiLCAid2lyZVZlcnNpb25CYWRnZSIsICJjb250YWluZXIiLCAidmVyc2lvbiIsICJlbCIsICJsb2ciLCAiY3JlYXRlTG9nZ2VyIiwgIkFSTV9USU1FT1VUX01TIiwgImluc3RhbGxUcmF2ZWxDbGlja0FybWVyIiwgIm9uQ2xpY2siLCAiYXJtZWQiLCAiZGlzYXJtVGltZXIiLCAiZGlzYXJtIiwgIlRSQVZFTF9IRVJFX0JVVFRPTl9TRUxFQ1RPUiIsICJldmVudCIsICJ0YXJnZXQiLCAid2FzQXJtZWQiLCAiZXh0cmFjdFRyYXZlbERlc3RpbmF0aW9uIiwgImJvZHkiLCAibG9jIiwgImlzQ2l0eVNlYXJjaFVybCIsICJ1cmwiLCAiQ0lUWV9FTkRQT0lOVF9QQVRURVJOIiwgImV4dHJhY3RDaXR5U2VhcmNoUmVzdWx0IiwgImJvZHkiLCAidHlwZWRCb2R5IiwgImNvb3JkcyIsICJsb25naXR1ZGUiLCAibGF0aXR1ZGUiLCAiY2l0eSIsICJhZG1pbk5hbWUiLCAibGFiZWwiLCAiaW5zdGFsbENpdHlTZWFyY2hYaHJPYnNlcnZlciIsICJvblJlc3BvbnNlIiwgInByb3RvIiwgIm5hdGl2ZU9wZW4iLCAibmF0aXZlU2VuZCIsICJtZXRob2QiLCAicmVzdCIsICJhcmdzIiwgIlNUQVRVU19FTEVNRU5UX0lEIiwgIkRFRkFVTFRfTk9URV9URVhUIiwgIk5PVEVfU1RZTEUiLCAiUEVORElOR19TVFlMRSIsICJpbnN0YWxsQ2l0eVNlYXJjaFN0YXR1c1VJIiwgInBlbmRpbmdUZXh0IiwgImZpbmRBbmNob3IiLCAiQ0lUSUVTX0lOUFVUX1NFTEVDVE9SIiwgInJlbmRlciIsICJhbmNob3IiLCAiZWwiLCAib2JzZXJ2ZXIiLCAic3RhcnRPYnNlcnZpbmciLCAiZGVzY3JpcHRpb24iLCAibG9nIiwgImNyZWF0ZUxvZ2dlciIsICJSRUxPQURfU0FGRVRZX1RJTUVPVVRfTVMiLCAiaW5zdGFsbExvY2F0aW9uT3ZlcnJpZGVDb250cm9sbGVyIiwgIm9wdGlvbnMiLCAicmVsb2FkUGFnZSIsICJjdXJyZW50T3ZlcnJpZGUiLCAiYWN0aXZlIiwgImhvb2siLCAiaW5zdGFsbEdlb0hvb2siLCAibmF0aXZlRmV0Y2giLCAibGFzdExvY2F0aW9uUmVxdWVzdCIsICJhcGlCYXNlIiwgIm9uQ2hhbmdlIiwgIm5vdGlmeSIsICJuZXh0IiwgInNldE92ZXJyaWRlIiwgInN5bmNPdmVycmlkZSIsICJzZW5kTG9jYXRpb25VcGRhdGUiLCAib3ZlcnJpZGUiLCAic3Bvb2ZlZCIsICJib2R5IiwgIkxPQ0FUSU9OX1BBVEgiLCAicGVuZGluZ1NlYXJjaE92ZXJyaWRlIiwgImNpdHlTZWFyY2hTdGF0dXNVSSIsICJpbnN0YWxsQ2l0eVNlYXJjaFN0YXR1c1VJIiwgInRyYXZlbEFybWVyIiwgImluc3RhbGxUcmF2ZWxDbGlja0FybWVyIiwgInB1c2hlZCIsICJlcnIiLCAidGltZWRPdXQiLCAicmVzb2x2ZSIsICJpbnN0YWxsQ2l0eVNlYXJjaFhock9ic2VydmVyIiwgInJlc3VsdCIsICJpbnB1dCIsICJpbml0IiwgInVybCIsICJiYXNlTWF0Y2giLCAid2FzQXJtZWQiLCAiY2FwdHVyZWQiLCAiZXh0cmFjdFRyYXZlbERlc3RpbmF0aW9uIiwgImhhc0NhcHR1cmVkQ29vcmRzIiwgImNiIiwgInJlcG9ydF9tb2RhbF9kZWZhdWx0IiwgInJlcG9ydF9tb2RhbF9kZWZhdWx0IiwgIndpcmVSZXBvcnRNb2RhbCIsICJjb250YWluZXIiLCAib3B0aW9ucyIsICJlbCIsICJpZCIsICJiYWNrZHJvcCIsICJtZXNzYWdlRmllbGQiLCAic3RhdHVzRWwiLCAiY2FuY2VsQnRuIiwgInN1Ym1pdEJ0biIsICJzZXRTdGF0dXMiLCAidGV4dCIsICJpc0Vycm9yIiwgImdlbmVyYXRpb24iLCAiY2xvc2UiLCAib3BlbiIsICJldmVudCIsICJzdWJtaXR0ZWRHZW5lcmF0aW9uIiwgImxvZyIsICJjcmVhdGVMb2dnZXIiLCAiUkVQT1JUX0lOSkVDVEVEX0FUVFIiLCAiUkVQT1JUX0JVVFRPTl9MQUJFTCIsICJSRVBPUlRfTU9EQUxfUk9PVF9JRCIsICJDTElDS19SRUlOSkVDVF9SRVRSWV9XSU5ET1dfTVMiLCAiQ0xJQ0tfUkVJTkpFQ1RfUkVUUllfSU5URVJWQUxfTVMiLCAiSU5JVElBTF9MT0FEX1JFSU5KRUNUX1JFVFJZX1dJTkRPV19NUyIsICJJTklUSUFMX0xPQURfUkVJTkpFQ1RfUkVUUllfSU5URVJWQUxfTVMiLCAiZXh0cmFjdFVzZXJJZEZyb21VcmwiLCAidXJsIiwgImZpcnN0IiwgImV4dHJhY3RVc2VySWRGcm9tUHJvZmlsZVBhdGgiLCAicGF0aG5hbWUiLCAic2VnbWVudHMiLCAiaWQiLCAiZXh0cmFjdEZyb21NYXJrZXIiLCAiZWwiLCAiYmciLCAicmF3VXJsIiwgInVzZXJJZCIsICJpbnN0YWxsUmVwb3J0QnV0dG9uSW5qZWN0aW9uIiwgIm9wdGlvbnMiLCAibGFzdFVzZXJJZCIsICJzZWxlY3Rpb25HZW5lcmF0aW9uIiwgInJlcG9ydE1vZGFsIiwgInJlcG9ydFRhcmdldCIsICJzdWJtaXRSZXBvcnQiLCAicmVwb3J0ZWRVc2VySWQiLCAibWVzc2FnZSIsICJyZXMiLCAiZW5zdXJlUmVwb3J0TW9kYWwiLCAic3R5bGUiLCAicmVwb3J0X21vZGFsX2RlZmF1bHQiLCAicm9vdCIsICJ3aXJlUmVwb3J0TW9kYWwiLCAiY3VycmVudFByb2ZpbGVVc2VySWQiLCAiYnVpbGRSZXBvcnRCdXR0b24iLCAidGVtcGxhdGUiLCAiYnRuIiwgImxhYmVsIiwgImljb24iLCAiZXZlbnQiLCAibW91bnRSZXBvcnRCdXR0b24iLCAibWVudSIsICJyZXNvbHZlUHJvZmlsZSIsICJzY3JlZW4iLCAiQVBQX1NDUkVFTl9TRUxFQ1RPUiIsICJyZXNvbHZlUHJvZmlsZVdpdGhSZXRyaWVzIiwgIndpbmRvd01zIiwgImludGVydmFsTXMiLCAiZ2VuZXJhdGlvbiIsICJkZWFkbGluZSIsICJhdHRlbXB0IiwgIm9ic2VydmVyIiwgIm11dGF0aW9ucyIsICJtIiwgIm5vZGUiLCAiUFJPRklMRV9PUFRJT05TX01FTlVfU0VMRUNUT1IiLCAiTkFNRV9MQUJFTF9TRUxFQ1RPUiIsICJQSU5fQlVUVE9OX1NFTEVDVE9SIiwgInN0YXJ0T2JzZXJ2aW5nIiwgInRhcmdldCIsICJtYXJrZXIiLCAiTUFSS0VSX0FWQVRBUl9TRUxFQ1RPUiIsICJzZWxlY3Rpb24iLCAiaW5pdGlhbFByb2ZpbGVVc2VySWQiLCAiZmV0Y2hCbG9ja2VkQm90cyIsICJzZXJ2ZXJCYXNlIiwgImdldEF1dGhIZWFkZXJzIiwgIm9uUmVzdWx0IiwgImRhdGEiLCAiZXJyIiwgIkJMT0NLRURfQk9UU19NQVhfQUdFX01TIiwgInJlZnJlc2hCbG9ja2VkQm90c0lmU3RhbGUiLCAiYmxvY2tlZEJvdHNGZXRjaGVkQXQiLCAiYm90X2Jsb2NrX2RlZmF1bHQiLCAiYm90X2Jsb2NrX2RlZmF1bHQiLCAiQk9UX0JMT0NLX0NTUyIsICJzd2l0Y2hfZGVmYXVsdCIsICJib3RfYmxvY2tfZGVmYXVsdCIsICJ3aXJlQm90QmxvY2tGb3JtIiwgImNvbnRhaW5lciIsICJvcHRpb25zIiwgImVsIiwgImlkIiwgImRldGFpbHMiLCAiY291bnRFbCIsICJoaW50RWwiLCAiZW5hYmxlZENoZWNrYm94IiwgImVuYWJsZUxhYmVsIiwgImxvZyIsICJjcmVhdGVMb2dnZXIiLCAiTk9fQ0hBVF9FUlJPUiIsICJmaW5kUmVjaXBpZW50IiwgInRocmVhZCIsICJvd25JZCIsICJtIiwgImlkIiwgImZpbmRDb252ZXJzYXRpb25XaXRoIiwgInBheWxvYWQiLCAicHJvZmlsZUlkIiwgImNvbnZlcnNhdGlvbnMiLCAicGlubmVkQ29udmVyc2F0aW9ucyIsICJjIiwgImxvb2t1cENoYXQiLCAiYXBpT3JpZ2luIiwgImRvRmV0Y2giLCAicmVzIiwgIkNIQVRfREFUQV9QQVRIIiwgImZvdW5kIiwgImVyciIsICJwb3N0VmlzaWJpbGl0eSIsICJjaGF0IiwgInBhdGgiLCAiYm9keSIsICJoaWRlT25lUGhvdG8iLCAibWVzc2FnZUlkIiwgIlBIT1RPX1ZJU0lCSUxJVFlfUEFUSCIsICJzZXRBbGxQaG90b3NIaWRkZW4iLCAiaXNIaWRkZW4iLCAiQUxMX1BIT1RPU19WSVNJQklMSVRZX1BBVEgiLCAicGFyc2VBcGlVcmwiLCAidXJsIiwgInBhcnNlZCIsICJpc1NuaWZmaWVzQXBpSG9zdCIsICJhcGlPcmlnaW5Gcm9tUGFzdFJlcXVlc3RzIiwgImVudHJ5IiwgImluc3RhbGxTZW50UGhvdG9IaWRlciIsICJnZXRPd25Vc2VySWQiLCAibG9va2VkVXAiLCAicHJvdG8iLCAibmF0aXZlT3BlbiIsICJuYXRpdmVTZW5kIiwgIm1ldGhvZCIsICJyZXN0IiwgImFyZ3MiLCAiY29udmVyc2F0aW9uSWQiLCAiTUVTU0FHRVNfUEFUSCIsICJ1IiwgInJlc29sdmVDaGF0IiwgInJlY2lwaWVudElkIiwgIm9yaWdpbiIsICJsb2ciLCAiY3JlYXRlTG9nZ2VyIiwgIk1FU1NBR0VfSURfUFJFRklYIiwgIm1lc3NhZ2VJZEZvciIsICJidXR0b24iLCAiaWQiLCAiUEhPVE9fTUVTU0FHRV9TRUxFQ1RPUiIsICJvcGVuUHJvZmlsZUlkIiwgImluc3RhbGxIaWRlUGhvdG9DbGljayIsICJoaWRlciIsICJpc0VuYWJsZWQiLCAicmVsb2FkIiwgIm9uRXJyb3IiLCAibWVzc2FnZSIsICJyZXNvbHZlIiwgInRhcmdldCIsICJoaWRlT25lIiwgIkhJREVfUEhPVE9fQlVUVE9OX1NFTEVDVE9SIiwgIm1lc3NhZ2VJZCIsICJwcm9maWxlSWQiLCAiSElERV9BTExfUEhPVE9TX0JVVFRPTl9TRUxFQ1RPUiIsICJVTkhJREVfQUxMX1BIT1RPU19CVVRUT05fU0VMRUNUT1IiLCAiaGFuZGxlciIsICJldmVudCIsICJhY3Rpb24iLCAiZXJyb3IiLCAibG9nIiwgImNyZWF0ZUxvZ2dlciIsICJJTkpFQ1RFRF9BVFRSIiwgIlJFUE9SVF9JTkpFQ1RFRF9BVFRSIiwgIk1FTlVfQlVUVE9OUyIsICJISURFX0FMTF9QSE9UT1NfQlVUVE9OX1NFTEVDVE9SIiwgIlVOSElERV9BTExfUEhPVE9TX0JVVFRPTl9TRUxFQ1RPUiIsICJidWlsZEJ1dHRvbiIsICJ0ZW1wbGF0ZSIsICJ0ZXN0SWQiLCAibGFiZWwiLCAiaWNvbiIsICJidG4iLCAic3BhbiIsICJpY29uRWwiLCAibW91bnRCdXR0b25zIiwgIm1lbnUiLCAic3BlYyIsICJpbnN0YWxsSGlkZVBob3RvTWVudUJ1dHRvbnMiLCAiaXNFbmFibGVkIiwgIm9ic2VydmVyIiwgIm11dGF0aW9ucyIsICJhZGRlZE5vZGVzIiwgIm5vZGUiLCAiUFJPRklMRV9PUFRJT05TX01FTlVfU0VMRUNUT1IiLCAic3RhcnQiLCAicGFuZWxfZGVmYXVsdCIsICJTRVJWRVJfQkFTRSIsICJDTElFTlRfU0VDUkVUIiwgIlZFUlNJT04iLCAiR0VPX1NUT1JBR0VfS0VZIiwgIkJMT0NLRURfQk9UU19TVE9SQUdFX0tFWSIsICJCTE9DS0VEX0JPVFNfRkVUQ0hFRF9BVF9TVE9SQUdFX0tFWSIsICJCT1RfQkxPQ0tJTkdfRU5BQkxFRF9TVE9SQUdFX0tFWSIsICJCT1RfQkxPQ0tJTkdfU0VDVElPTl9PUEVOX1NUT1JBR0VfS0VZIiwgIkJMT0NLRURfQk9UX0VWRU5UU19TVE9SQUdFX0tFWSIsICJQUk9GSUxFX0ZJTFRFUlNfU1RPUkFHRV9LRVkiLCAiUFJPRklMRV9GSUxURVJTX0VOQUJMRURfU1RPUkFHRV9LRVkiLCAiUFJPRklMRV9GSUxURVJTX1NFQ1RJT05fT1BFTl9TVE9SQUdFX0tFWSIsICJnZXRHZW9PdmVycmlkZSIsICJyYXciLCAiREVGQVVMVF9HRU9fT1ZFUlJJREUiLCAic2V0R2VvT3ZlcnJpZGUiLCAibmV4dCIsICJnZXRCbG9ja2VkQm90cyIsICJwYXJzZWQiLCAiaWQiLCAiZ2V0QmxvY2tlZEJvdHNGZXRjaGVkQXQiLCAic2V0QmxvY2tlZEJvdHMiLCAidXNlcklkcyIsICJmZXRjaGVkQXQiLCAiZ2V0Qm90QmxvY2tpbmdFbmFibGVkIiwgInNldEJvdEJsb2NraW5nRW5hYmxlZCIsICJlbmFibGVkIiwgImdldEJvdEJsb2NraW5nU2VjdGlvbk9wZW4iLCAic2V0Qm90QmxvY2tpbmdTZWN0aW9uT3BlbiIsICJvcGVuIiwgImdldEJsb2NrZWRCb3RFdmVudHNCeURheSIsICJyZWNvcmRCbG9ja2VkQm90RXZlbnQiLCAiaWRzIiwgInJlY29yZEJsb2NrZWRCb3RJZHMiLCAiZ2V0UHJvZmlsZUZpbHRlcnMiLCAicGFyc2VQcm9maWxlRmlsdGVycyIsICJzZXRQcm9maWxlRmlsdGVycyIsICJnZXRQcm9maWxlRmlsdGVyc0VuYWJsZWQiLCAic2V0UHJvZmlsZUZpbHRlcnNFbmFibGVkIiwgImdldFByb2ZpbGVGaWx0ZXJzU2VjdGlvbk9wZW4iLCAic2V0UHJvZmlsZUZpbHRlcnNTZWN0aW9uT3BlbiIsICJjbGllbnRIZWFkZXJzIiwgIkNMSUVOVF9TRUNSRVQiLCAiaW5zdGFsbFJlcG9ydEZlYXR1cmUiLCAicmFpc2VSYWRpdXMiLCAic3RhdGUiLCAiZ2V0QmxvY2tlZEJvdHMiLCAiZ2V0Qm90QmxvY2tpbmdFbmFibGVkIiwgImdhdGVQcm9maWxlRmlsdGVycyIsICJnZXRQcm9maWxlRmlsdGVycyIsICJnZXRQcm9maWxlRmlsdGVyc0VuYWJsZWQiLCAiaW5zdGFsbFByb2ZpbGVGaWx0ZXJIb29rIiwgImJvdEJsb2NrUnVsZSIsICJpZHMiLCAicmVjb3JkQmxvY2tlZEJvdEV2ZW50IiwgInByb2ZpbGVGaWx0ZXJSdWxlcyIsICJpbnN0YWxsUmVwb3J0QnV0dG9uSW5qZWN0aW9uIiwgIlNFUlZFUl9CQVNFIiwgInJlZnJlc2hCbG9ja2VkQm90c0lmU3RhbGUiLCAiZ2V0QmxvY2tlZEJvdHNGZXRjaGVkQXQiLCAidXNlcklkcyIsICJmZXRjaGVkQXQiLCAic2V0QmxvY2tlZEJvdHMiLCAibG9nIiwgImNyZWF0ZUxvZ2dlciIsICJpbnN0YWxsVXNlcklkTG9nZ2luZyIsICJvblVzZXJJZCIsICJpbml0TG9nZ2VkIiwgImluc3RhbGxVc2VySWRIb29rIiwgInVzZXJJZCIsICJsb2dJbml0IiwgIlNFUlZFUl9CQVNFIiwgIkNMSUVOVF9TRUNSRVQiLCAiVkVSU0lPTiIsICJsb2ciLCAiY3JlYXRlTG9nZ2VyIiwgInJlYWRQcmVtaXVtIiwgImdldFByZW1pdW1GZWF0dXJlc0VuYWJsZWQiLCAiZ2V0UHJlbWl1bUZlYXR1cmVGbGFncyIsICJpbnN0YWxsSG9va3MiLCAicHJlbWl1bSIsICJyZXBvcnRTdGF0ZSIsICJpbnN0YWxsUmVwb3J0RmVhdHVyZSIsICJpbnN0YWxsVXNlcklkTG9nZ2luZyIsICJ1c2VySWQiLCAicmVmcmVzaEJsb2NrZWRCb3RzSWZTdGFsZSIsICJpbnN0YWxsU2VsZWN0aW9uTGltaXRPdmVycmlkZSIsICJnZXRQcm9maWxlRmlsdGVyc0VuYWJsZWQiLCAiaW5zdGFsbFBsdXNIb29rIiwgInNldEhhc1BsdXMiLCAiaXNQaG90b3NFbmFibGVkIiwgImluc3RhbGxIaWRlUGhvdG9DbGljayIsICJpbnN0YWxsU2VudFBob3RvSGlkZXIiLCAiaW5zdGFsbEhpZGVQaG90b01lbnVCdXR0b25zIiwgImdlb0NvbnRyb2xsZXIiLCAiaW5zdGFsbExvY2F0aW9uT3ZlcnJpZGVDb250cm9sbGVyIiwgImdldEdlb092ZXJyaWRlIiwgInNldEdlb092ZXJyaWRlIiwgImluaXRpYWxPdmVycmlkZSIsICJWRVJTSU9OIiwgImhhc0NhcHR1cmVkQ29vcmRzIiwgIm1vdW50VUkiLCAic3RhdGUiLCAiREVGQVVMVF9QUk9GSUxFX0ZJTFRFUlMiLCAic2hlbGxTdHlsZSIsICJwYW5lbF9kZWZhdWx0IiwgInByZW1pdW1TdHlsZSIsICJQUkVNSVVNX0ZFQVRVUkVTX0NTUyIsICJib3RCbG9ja1N0eWxlIiwgIkJPVF9CTE9DS19DU1MiLCAicHJvZmlsZUZpbHRlcnNTdHlsZSIsICJQUk9GSUxFX0ZJTFRFUlNfQ1NTIiwgInZlcnNpb25TdHlsZSIsICJ2ZXJzaW9uX2JhZGdlX2RlZmF1bHQiLCAidXBkYXRlQmFubmVyU3R5bGUiLCAidXBkYXRlX2Jhbm5lcl9kZWZhdWx0IiwgImZhYiIsICJmYWJJY29uIiwgImljb240OF9kZWZhdWx0IiwgIm1vdW50RmFiIiwgInBhbmVsIiwgInZlcnNpb25Sb290IiwgIndpcmVWZXJzaW9uQmFkZ2UiLCAidXBkYXRlUm9vdCIsICJ3aXJlVXBkYXRlQmFubmVyIiwgInByZW1pdW1Sb290IiwgInByZW1pdW1fZmVhdHVyZXNfZGVmYXVsdCIsICJyZXN5bmNMb2NhdGlvbiIsICJwcmVtaXVtRm9ybUhhbmRsZSIsICJ3aXJlUHJlbWl1bUZlYXR1cmVzRm9ybSIsICJlbmFibGVkIiwgInNldFByZW1pdW1GZWF0dXJlc0VuYWJsZWQiLCAia2V5IiwgInNldFByZW1pdW1GZWF0dXJlRmxhZ3MiLCAiZ2V0SGFzUGx1cyIsICJERUZBVUxUX0dFT19PVkVSUklERSIsICJuZXh0IiwgImdldFByZW1pdW1TZWN0aW9uT3BlbiIsICJzZXRQcmVtaXVtU2VjdGlvbk9wZW4iLCAiYm90QmxvY2tSb290IiwgImJvdF9ibG9ja19kZWZhdWx0IiwgIndpcmVCb3RCbG9ja0Zvcm0iLCAiZ2V0Qm90QmxvY2tpbmdFbmFibGVkIiwgImNvdW50RGlzdGluY3RCbG9ja2VkQm90c0xhc3QyNGgiLCAiZ2V0QmxvY2tlZEJvdEV2ZW50c0J5RGF5IiwgImdldEJvdEJsb2NraW5nU2VjdGlvbk9wZW4iLCAic2V0Qm90QmxvY2tpbmdTZWN0aW9uT3BlbiIsICJzZXRCb3RCbG9ja2luZ0VuYWJsZWQiLCAicHJvZmlsZUZpbHRlcnNSb290IiwgInByb2ZpbGVfZmlsdGVyc19kZWZhdWx0IiwgInJlbW92ZUZpbHRlcnNNZW51IiwgInN5bmNGaWx0ZXJzTWVudSIsICJpbnN0YWxsUHJvZmlsZUZpbHRlcnNNZW51IiwgImdldFByb2ZpbGVGaWx0ZXJzIiwgInNldFByb2ZpbGVGaWx0ZXJzIiwgIndpcmVQcm9maWxlRmlsdGVyc0Zvcm0iLCAic2V0UHJvZmlsZUZpbHRlcnNFbmFibGVkIiwgImdldFByb2ZpbGVGaWx0ZXJzU2VjdGlvbk9wZW4iLCAic2V0UHJvZmlsZUZpbHRlcnNTZWN0aW9uT3BlbiIsICJjbG9zZUJ0biIsICJob29rU3RhdGUiLCAiZXJyIl0KfQo=