serve-sim 0.1.30 → 0.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/serve-sim-bin +0 -0
- package/dist/middleware.js +1 -1
- package/dist/serve-sim.js +51 -33
- package/package.json +1 -1
package/dist/serve-sim.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as
|
|
2
|
+
import{createRequire as es}from"node:module";var Qt=Object.defineProperty;var Yt=(_)=>_;function _s(_,e){this[_]=Yt.bind(null,e)}var RS=(_,e)=>{for(var S in e)Qt(_,S,{get:e[S],enumerable:!0,configurable:!0,set:_s.bind(e,S)})};var Re=(_,e)=>()=>(_&&(e=_(_=0)),e);var Ss=es(import.meta.url);var z_="Accessibility unavailable on this simulator.";function hs(_){return _[0]?.frame??{x:0,y:0,width:1,height:1}}function ms(_,e){return Math.abs(_.x-e.x)<0.5&&Math.abs(_.y-e.y)<0.5&&Math.abs(_.width-e.width)<0.5&&Math.abs(_.height-e.height)<0.5}function Ls(_){let e=hs(_),S=[],t=(s,i)=>{if(S.length>=Fe)return;let C=s.frame;if(!ms(C,e))S.push({id:s.AXUniqueId??i,path:i,label:s.AXLabel??"",value:s.AXValue??"",role:s.role_description,type:s.type,enabled:s.enabled!==!1,frame:C});for(let r=0;r<s.children.length&&S.length<Fe;r++)t(s.children[r],`${i}.${r}`)};for(let s=0;s<_.length&&S.length<Fe;s++)t(_[s],String(s));return{screen:{width:e.width,height:e.height},elements:S}}async function Ws(_){let e=new AbortController,S=setTimeout(()=>e.abort(),Hs);try{let t=await fetch(`http://127.0.0.1:${_}/ax`,{signal:e.signal});if(t.status===503)return{screen:{width:1,height:1},elements:[],errors:[z_]};if(!t.ok)throw Error(`HTTP ${t.status} ${t.statusText}`);return Ls(await t.json())}finally{clearTimeout(S)}}function Ps(_){return _?.errors?.includes(z_)??!1}function Ms(_){return _.elements.length>0&&_.screen.width>1&&_.screen.height>1}async function Us(_){let e=[];try{let S=await Ws(_);if(S.errors?.length)return S;if(!Ms(S))throw Error(`helper returned ${S.elements.length} elements in ${S.screen.width}x${S.screen.height} AX space`);return{...S,errors:e}}catch(S){let t=S,s=t.cause?.code??t.code,i=t.message||String(S),C=s==="ECONNREFUSED"||s==="ECONNRESET"||/unable to connect|fetch failed|ECONNREFUSED/i.test(i);e.push(C?z_:i)}return{screen:{width:1,height:1},elements:[],errors:e}}function Gs(_){return`data: ${JSON.stringify(_)}
|
|
3
3
|
|
|
4
|
-
`}function
|
|
4
|
+
`}function qs({port:_}){let e=new Set,S=null,t=null,s=be,i=!1,C=_,o=()=>{if(e.size===0||S)return;S=setTimeout(r,s)},r=async()=>{if(S=null,i||e.size===0){o();return}i=!0;try{let A=await Us(C),B=Gs(A);if(B!==t){for(let R of e)R.write(B);s=be}else s=Math.min(s*2,Ns);if(t=B,Ps(A))s=Vs}finally{i=!1,o()}};return{setPort(A){if(A===C)return;if(C=A,t=null,s=be,S)clearTimeout(S),S=null;r()},addClient(A){if(e.add(A),t)A.write(t);return r(),()=>{if(e.delete(A),e.size===0&&S)clearTimeout(S),S=null}}}}function gS(){let _=new Map;return{get(e,S){let t=_.get(e);if(t)return t.setPort(S),t;let s=qs({port:S});return _.set(e,s),s}}}var Hs=3500,Fe=500,be=500,Ns=2000,Vs=15000;var dS=()=>{};var rt={};RS(rt,{startCdpServer:()=>yC,startBunCdpServer:()=>DC,listTargets:()=>TC,listDevices:()=>it});import{createRequire as Xs}from"node:module";import*as GS from"node:net";import*as kS from"node:net";import{spawnSync as ni}from"node:child_process";import*as zS from"node:tls";import*as YS from"node:http";function zs(_){return this[_]}function NS(_){return _.replace(/[&<>'"]/g,(e)=>e==="&"?"&":e==="<"?"<":e===">"?">":e==="'"?"'":""")}function ti(_){let e="";for(let S=0;S<_.length;S++)e+=String.fromCharCode(_[S]);return btoa(e)}function si(_){let e=atob(_.replace(/\s+/g,"")),S=new Uint8Array(e.length);for(let t=0;t<e.length;t++)S[t]=e.charCodeAt(t);return S}function we(_,e){if(_===null||_===void 0)return`${e}<string></string>`;if(typeof _==="boolean")return`${e}<${_?"true":"false"}/>`;if(typeof _==="string")return`${e}<string>${NS(_)}</string>`;if(typeof _==="number"){if(Number.isInteger(_))return`${e}<integer>${_}</integer>`;return`${e}<real>${_}</real>`}if(typeof _==="bigint")return`${e}<integer>${_.toString()}</integer>`;if(_ instanceof Uint8Array)return`${e}<data>${ti(_)}</data>`;if(_ instanceof Date)return`${e}<date>${_.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray(_)){if(_.length===0)return`${e}<array/>`;let s=_.map((i)=>we(i,e+"\t")).join(`
|
|
5
5
|
`);return`${e}<array>
|
|
6
6
|
${s}
|
|
7
|
-
${e}</array>`}let S=Object.keys(_);if(S.length===0)return`${e}<dict/>`;let t=S.map((s)=>`${e} <key>${
|
|
8
|
-
`+
|
|
7
|
+
${e}</array>`}let S=Object.keys(_);if(S.length===0)return`${e}<dict/>`;let t=S.map((s)=>`${e} <key>${NS(s)}</key>
|
|
8
|
+
`+we(_[s],e+"\t")).join(`
|
|
9
9
|
`);return`${e}<dict>
|
|
10
10
|
${t}
|
|
11
|
-
${e}</dict>`}function
|
|
12
|
-
`||_==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let e=this.src.indexOf("-->",this.pos+4);if(e<0)throw Error("unterminated comment");this.pos=e+3}else if(this.src.startsWith("<?",this.pos)){let e=this.src.indexOf("?>",this.pos+2);if(e<0)throw Error("unterminated processing instruction");this.pos=e+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let e=0;while(this.pos<this.src.length){let S=this.src[this.pos++];if(S==="[")e++;else if(S==="]")e--;else if(S===">"&&e===0)break}}else break}}nextTag(){if(this.skip(),this.pos>=this.src.length)return null;if(this.src[this.pos]!=="<")throw Error(`expected '<' at ${this.pos}`);let _=this.src.indexOf(">",this.pos);if(_<0)throw Error("unterminated tag");let e=this.src.slice(this.pos+1,_);this.pos=_+1;let S=e.startsWith("/"),t=e.endsWith("/");return{name:e.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:t,isClose:S}}readText(){let _=this.src.indexOf("<",this.pos),e=_<0?this.src.slice(this.pos):this.src.slice(this.pos,_);return this.pos=_<0?this.src.length:_,e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}}function
|
|
13
|
-
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(t))continue;if(!t.startsWith("webinspec"))continue;let s=t.split(/\s+/),i=Number(s[1]),C=s[s.length-1];if(C)S.set(C,i)}return Array.from(S,([t,s])=>({socketPath:t,pid:s}))}async function wS(_){let e=new x_;return new Promise((S,t)=>{let s=OS.createConnection({path:_}),i=(C)=>{e.close(C),t(C)};s.once("error",i),s.once("connect",()=>{s.off("error",i),Oe(s,e),S({socket:s,stream:e})})})}async function ae(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),t=await _.read(S);return K_(t)}function Re(_,e){let S=ue({Label:"inspect-webkit",...e}),t=new Uint8Array(4);new DataView(t.buffer).setUint32(0,S.length,!1),_.write(t),_.write(S)}function Be(_,e){if(_.Error)throw Error(`lockdown ${e} error: ${String(_.Error)}`);if(_.Request!==e)throw Error(`lockdown expected Request=${e}, got ${String(_.Request)}`)}function cS(_,e,S,t){return new Promise((s,i)=>{e();let C=new x_,o=dS.connect({socket:_,cert:Buffer.from(S.HostCertificate),key:Buffer.from(S.HostPrivateKey),ca:Buffer.from(S.RootCertificate),rejectUnauthorized:!1}),r=(A)=>{J(`${t} tls error:`,A),C.close(A),i(A)};o.once("error",r),o.once("secureConnect",()=>{J(`${t} tls handshake complete`),o.off("error",r);let A=Oe(o,C);s({socket:o,stream:C,detach:A})})})}class z_{socket;stream;pair;udid;deviceID;detach;constructor(_,e,S,t,s,i){this.socket=_,this.stream=e,this.pair=S,this.udid=t,this.deviceID=s,this.detach=i}static async open(_,e){J("connecting usbmux tunnel to lockdown port",BS);let{socket:S,stream:t,detach:s}=await RS(_.DeviceID,BS),i=new z_(S,t,e,_.Properties.SerialNumber,_.DeviceID,s);J("sending QueryType"),Re(S,{Request:"QueryType"});let C=await ae(t);if(J("QueryType reply:",C),Be(C,"QueryType"),C.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(C.Type)}`);return i}async startSession(){J("StartSession with HostID",this.pair.HostID),Re(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let _=await ae(this.stream);if(J("StartSession reply:",_),Be(_,"StartSession"),_.EnableSessionSSL){J("upgrading to TLS");let e=await cS(this.socket,this.detach,this.pair,"lockdown");this.socket=e.socket,this.stream=e.stream,this.detach=e.detach,J("TLS upgrade complete")}}async startService(_){J("StartService",_),Re(this.socket,{Request:"StartService",Service:_});let e=await ae(this.stream);return J("StartService reply:",e),Be(e,"StartService"),{port:e.Port,enableServiceSSL:Boolean(e.EnableServiceSSL),service:_}}async connectService(_){J("connecting service tunnel to port",_.port,"ssl=",_.enableServiceSSL);let{socket:e,stream:S,detach:t}=await RS(this.deviceID,_.port);if(!_.enableServiceSSL)return{socket:e,stream:S};let s=await cS(e,t,this.pair,"service");return{socket:s.socket,stream:s.stream}}close(){this.socket.end()}}async function gs(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),t=await _.read(S);return vs(t)}function Hs(_,e){let S=ue(e),t=new Uint8Array(4);new DataView(t.buffer).setUint32(0,S.length,!1),_.write(t),_.write(S)}function Ns(){let _=crypto.getRandomValues(new Uint8Array(16));_[6]=_[6]&15|64,_[8]=_[8]&63|128;let e=Array.from(_,(S)=>S.toString(16).padStart(2,"0")).join("");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}class h_{socket;stream;connectionId=Ns();subscribers=new Set;reading;constructor(_,e){this.socket=_,this.stream=e,this.reading=(async()=>{try{while(!e.closed){let S=await gs(e);for(let t of[...this.subscribers])try{t(S)}catch{}}}catch{}})()}subscribe(_){return this.subscribers.add(_),()=>this.subscribers.delete(_)}waitFor(_,e=5000){return new Promise((S,t)=>{let s=setTimeout(()=>{i(),t(Error(`timeout waiting for ${_} after ${e}ms`))},e),i=this.subscribe((C)=>{if(C.__selector===_)clearTimeout(s),i(),S(C)})})}send(_,e){Hs(this.socket,{__selector:_,__argument:{WIRConnectionIdentifierKey:this.connectionId,...e}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let _=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!_)return[];let S=_.__argument.WIRApplicationDictionaryKey??{},t=[];for(let[s,i]of Object.entries(S)){let C=i;t.push({appId:s,bundleId:C.WIRApplicationBundleIdentifierKey,name:C.WIRApplicationNameKey,isProxy:Boolean(C.WIRIsApplicationProxyKey),isActive:Boolean(C.WIRIsApplicationActiveKey),hostAppId:C.WIRHostApplicationIdentifierKey})}return t}async getListing(_){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:_});let e=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!e)return[];let t=e.__argument.WIRListingKey??{},s=[];for(let i of Object.values(t)){let C=i;s.push({pageId:Number(C.WIRPageIdentifierKey??0),title:C.WIRTitleKey??"",url:C.WIRURLKey??"",type:C.WIRTypeKey??""})}return s}get connection(){return this.connectionId}forwardSocketSetup(_,e,S){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S,WIRAutomaticallyPause:!1})}forwardSocketData(_,e,S,t){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S,WIRSocketDataKey:t})}forwardDidClose(_,e,S){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S})}onMessage(_){return this.subscribe(_)}close(){this.socket.end()}}class de{ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor(_,e,S,t,s){this.ws=_,this.wi=e,this.appId=S,this.pageId=t,this.senderKey=s}addMessageFilter(_,e){let S=this.filters.get(_);if(!S)this.filters.set(_,S=[]);S.push(e)}callTarget(_,e={}){return new Promise((S,t)=>{let s=--this.requestId;this.adapterRequestMap.set(s,{resolve:S,reject:t}),this.sendRaw(JSON.stringify({id:s,method:_,params:e}))})}fireEventToTools(_,e){this.sendToTools(JSON.stringify({method:_,params:e}))}fireResultToTools(_,e){this.sendToTools(JSON.stringify({id:_,result:e}))}fireErrorToTools(_,e){this.sendToTools(JSON.stringify({id:_,error:{code:e.code??-32000,message:e.message}}))}replyEmpty(_){if(typeof _.id==="number")this.fireResultToTools(_.id,{});return Promise.resolve(null)}async onMessageFromTools(_){let e;try{e=JSON.parse(_)}catch{return}if(typeof e.method==="string"&&typeof e.id==="number")this.toolRequestMap.set(e.id,e.method);let S=`tools::${e.method}`,t=this.filters.get(S),s=e;if(t)for(let i of t){if(!s)break;s=await i(s)}if(s)this.sendRaw(JSON.stringify(s))}async onMessageFromTarget(_){let e;try{e=JSON.parse(_)}catch{return}if(e.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let i=e.params?.targetInfo;if(i?.type==="page"&&!this.innerTargetId)this.innerTargetId=i.targetId,this.flushQueue();return}if(e.method==="Target.didCommitProvisionalTarget"){let i=e.params?.newTargetId;if(typeof i==="string")this.innerTargetId=i;return}if(e.method==="Target.targetDestroyed")return;if(e.method==="Target.dispatchMessageFromTarget"){let i=e.params?.message;if(typeof i==="string")return this.onMessageFromTarget(i);return}if(typeof e.id==="number"&&this.wrappedAckIds.has(e.id)){this.wrappedAckIds.delete(e.id);return}if(typeof e.id==="number"){let i=this.adapterRequestMap.get(e.id);if(i){if(this.adapterRequestMap.delete(e.id),"error"in e&&e.error)i.reject(e.error);else i.resolve(e.result??{});return}let C=this.toolRequestMap.get(e.id);if(C){this.toolRequestMap.delete(e.id);let o=`target::${C}`;if("error"in e&&this.filters.has("target::error"))o="target::error";let r=this.filters.get(o);if(!r)return this.sendToTools(_);let A=e;for(let B of r){if(!A)break;A=await B(A)}if(A)this.sendToTools(JSON.stringify(A));return}return this.sendToTools(_)}let S=`target::${e.method}`,t=this.filters.get(S);if(!t)return this.sendToTools(_);let s=e;for(let i of t){if(!s)break;s=await i(s)}if(s)this.sendToTools(JSON.stringify(s))}sendRaw(_){let e=null;try{e=JSON.parse(_)}catch{}let S=e&&typeof e.method==="string"&&e.method.startsWith("Target.");if(this.innerTargetId&&e&&!S){if(typeof e.id==="number")this.wrappedAckIds.add(e.id);let t={id:e.id,method:"Target.sendMessageToTarget",params:{id:e.id,message:_,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(t));return}if(!this.innerTargetId&&e&&!S){if(this.outgoingQueue.push(_),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let t=this.outgoingQueue;this.outgoingQueue=[];for(let s of t)this.writeFrame(s)}},250);return}this.writeFrame(_)}flushQueue(){if(this.outgoingQueue.length===0)return;let _=this.outgoingQueue;this.outgoingQueue=[];for(let e of _)this.sendRaw(e)}writeFrame(_){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode(_))}sendToTools(_){if(this.ws.readyState===1)this.ws.send(_)}}function hs(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function V(_,e,S){return _.fireResultToTools(e.id,S),Promise.resolve(null)}function ms(_,e){_.addMessageFilter("tools::Debugger.canSetScriptSource",(S)=>V(_,S,{result:!1})),_.addMessageFilter("tools::Debugger.setBlackboxPatterns",(S)=>V(_,S,{})),_.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(S)=>V(_,S,{})),_.addMessageFilter("target::Debugger.enable",(S)=>{return _.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),_.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(S)}),_.addMessageFilter("target::Debugger.scriptParsed",(S)=>{if(S.params?.scriptId)e.lastScriptEval.value=String(S.params.scriptId);return Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBreakpoint",(S)=>{let t=S.params??{};return S.params={location:t.location,options:t.condition?{condition:t.condition}:{}},Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBreakpointByUrl",(S)=>{let t=S.params??{};return S.params={lineNumber:t.lineNumber,url:t.url,urlRegex:t.urlRegex,columnNumber:t.columnNumber,options:t.condition?{condition:t.condition}:{}},Promise.resolve(S)});for(let S of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])_.addMessageFilter(`tools::Debugger.${S}`,(t)=>Promise.resolve(t));_.addMessageFilter("target::Debugger.paused",(S)=>{let t=S.params?.callFrames;if(Array.isArray(t))for(let s of t){if(s.functionName==null&&typeof s.name==="string")s.functionName=s.name;if(!s.location&&s.sourceCodeLocation)s.location={scriptId:String(s.sourceCodeLocation.scriptId??""),lineNumber:s.sourceCodeLocation.lineNumber??0,columnNumber:s.sourceCodeLocation.columnNumber??0};if(Array.isArray(s.scopeChain)){for(let i of s.scopeChain)if(!i.object&&i.value)i.object=i.value}}return Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBlackboxedRanges",(S)=>V(_,S,{})),_.addMessageFilter("tools::Debugger.setSkipAllPauses",(S)=>V(_,S,{})),_.addMessageFilter("tools::Debugger.setPauseOnExceptions",(S)=>{return Promise.resolve(S)})}function Ls(_,e){_.addMessageFilter("target::Runtime.executionContextCreated",(S)=>{let t=S.params?.context;if(t){if(!t.origin)t.origin=t.name??"";let s=Number(t.id),i=!!(t.isPageContext||t.type==="normal");if(Number.isFinite(s)&&s>0){if(!e.pageExecCtx.id||i&&!e.pageExecCtx.isPage)e.pageExecCtx.id=s,e.pageExecCtx.isPage=i}if(t.frameId)t.auxData={frameId:t.frameId,isDefault:!0},delete t.frameId}return Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.evaluate",(S)=>{let t=S.params;if(!t)return Promise.resolve(S);if("silent"in t)t.doNotPauseOnExceptionsAndMuteConsole=!!t.silent,delete t.silent;if("userGesture"in t)t.emulateUserGesture=!!t.userGesture,delete t.userGesture;return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.evaluate",(S)=>{let t=S.result;if(t?.wasThrown){if(t.result)t.result.subtype="error";t.exceptionDetails={exceptionId:0,text:t.result?.description??"Uncaught",url:"",scriptId:e.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:e.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:t.result}}return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.getProperties",(S)=>{let t=S.result;if(!t)return Promise.resolve(S);let s=Array.isArray(t.result)?t.result:Array.isArray(t.properties)?t.properties:null;if(s)t.result=s.filter((i)=>i.isOwn||i.nativeGetter).map((i)=>({...i,isOwn:!0})),delete t.properties;if(Array.isArray(t.internalProperties))t.internalProperties=t.internalProperties.map((i)=>({name:i.name,value:i.value}));return Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.compileScript",(S)=>V(_,S,{scriptId:null,exceptionDetails:null})),_.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(S)=>V(_,S,{names:[]})),_.addMessageFilter("tools::Runtime.terminateExecution",(S)=>V(_,S,{})),_.addMessageFilter("tools::Runtime.getIsolateId",(S)=>V(_,S,{id:"inspect-webkit"})),_.addMessageFilter("tools::Runtime.getHeapUsage",(S)=>V(_,S,{usedSize:0,totalSize:0})),_.addMessageFilter("tools::Runtime.discardConsoleEntries",(S)=>{return S.method="Console.clearMessages",Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(S)=>V(_,S,{})),_.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(S)=>V(_,S,{})),_.addMessageFilter("tools::Runtime.releaseObject",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.releaseObjectGroup",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.callFunctionOn",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.queryObjects",(S)=>Promise.resolve(S)),_.addMessageFilter("target::Debugger.globalObjectCleared",(S)=>{return _.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function Ws(_,e){_.addMessageFilter("tools::Log.startViolationsReport",(S)=>V(_,S,{})),_.addMessageFilter("tools::Log.stopViolationsReport",(S)=>V(_,S,{})),_.addMessageFilter("tools::Log.clear",(S)=>{return S.method="Console.clearMessages",Promise.resolve(S)}),_.addMessageFilter("tools::Log.disable",(S)=>{return S.method="Console.disable",Promise.resolve(S)}),_.addMessageFilter("tools::Log.enable",(S)=>{return S.method="Console.enable",Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.enable",(S)=>{return _.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(S)}),_.addMessageFilter("target::Console.messageAdded",(S)=>{let t=S.params?.message??{},i=(Array.isArray(t.stackTrace)?t.stackTrace:Array.isArray(t.stackTrace?.callFrames)?t.stackTrace.callFrames:[]).map((r)=>({functionName:r.functionName??"",scriptId:r.scriptId??"",url:r.url??"",lineNumber:Number(r.lineNumber??0),columnNumber:Number(r.columnNumber??0)})),C=i.length?{callFrames:i}:void 0,o=Date.now();if(t.source==="console-api"){let r=t.type==="log"?t.level??"log":t.type??"log",A=Ps(r),B=Array.isArray(t.parameters)&&t.parameters.length>0?t.parameters:[{type:"string",value:String(t.text??"")}],R={type:A,args:B,executionContextId:e.pageExecCtx.id||1,timestamp:o,stackTrace:C};return e.lastConsoleApiCalled.value=R,_.fireEventToTools("Runtime.consoleAPICalled",R),Promise.resolve(null)}if(t.source==="javascript"&&t.level==="error")return _.fireEventToTools("Runtime.exceptionThrown",{timestamp:o,exceptionDetails:{exceptionId:0,text:String(t.text??"Uncaught"),lineNumber:Number(t.line??0),columnNumber:Number(t.column??0),scriptId:e.lastScriptEval.value,url:t.url,stackTrace:C,exception:{type:"string",value:String(t.text??"")}}}),Promise.resolve(null);return _.fireEventToTools("Log.entryAdded",{entry:{source:t.source??"other",level:Ms(t.level??t.type??"log"),text:String(t.text??""),timestamp:o,url:t.url,lineNumber:t.line,stackTrace:C,networkRequestId:t.networkRequestId}}),Promise.resolve(null)}),_.addMessageFilter("target::Console.messagesCleared",()=>{return _.fireEventToTools("Log.entriesCleared",{}),_.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:e.pageExecCtx.id||1,timestamp:Date.now()}),e.lastConsoleApiCalled.value=null,Promise.resolve(null)}),_.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let S=e.lastConsoleApiCalled.value;if(S)_.fireEventToTools("Runtime.consoleAPICalled",{...S,timestamp:Date.now()});return Promise.resolve(null)}),_.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function Ps(_){switch(_){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return _;default:return"log"}}function Ms(_){switch(_){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function Us(_){let e=new Set;_.addMessageFilter("tools::DOM.enable",(S)=>V(_,S,{})),_.addMessageFilter("tools::DOM.setInspectMode",(S)=>{if(S.method="DOM.setInspectModeEnabled",S.params)S.params.enabled=S.params.mode==="searchForNode",delete S.params.mode,delete S.params.highlightConfig;return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.setInspectedNode",(S)=>{return S.method="Console.addInspectedNode",Promise.resolve(S)}),_.addMessageFilter("tools::DOM.performSearch",(S)=>{if(S.params)S.params={query:S.params.query,caseSensitive:!!S.params.caseSensitive};return Promise.resolve(S)}),_.addMessageFilter("target::DOM.performSearch",(S)=>{let t=S.result?.searchId;if(typeof t==="string")e.add(t);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.discardSearchResults",(S)=>{let t=S.params?.searchId;if(typeof t==="string")e.delete(t);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(S)=>{let t=S.params?.backendNodeIds??[],s=await Promise.all(t.map((i)=>_.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:i}).then((C)=>C.nodeId).catch(()=>i)));return _.fireResultToTools(S.id,{nodeIds:s}),null}),_.addMessageFilter("tools::DOM.getBoxModel",(S)=>{return _.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:S.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),_.addMessageFilter("tools::DOM.getNodeForLocation",async(S)=>{try{let s=(await _.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${S.params?.x},${S.params?.y})`})).result?.objectId;if(!s)return _.fireResultToTools(S.id,{nodeId:0}),null;let i=await _.callTarget("DOM.requestNode",{objectId:s});_.fireResultToTools(S.id,{nodeId:i.nodeId,backendNodeId:i.nodeId})}catch(t){_.fireErrorToTools(S.id,{message:t?.message??String(t)})}return null}),_.addMessageFilter("tools::DOM.resolveNode",(S)=>{if(S.params&&S.params.objectGroup===void 0)delete S.params.objectGroup;return Promise.resolve(S)})}function Gs(_){_.addMessageFilter("tools::DOMDebugger.getEventListeners",async(e)=>{try{let S=await _.callTarget("DOM.requestNode",{objectId:e.params?.objectId}),s=((await _.callTarget("DOM.getEventListenersForNode",{nodeId:S.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((i)=>({type:i.type,useCapture:!!i.useCapture,passive:!!i.passive,once:!!i.once,location:i.location,handler:i.handler}));_.fireResultToTools(e.id,{listeners:s})}catch(S){_.fireErrorToTools(e.id,{message:S?.message??String(S)})}return null}),_.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(e)=>V(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(e)=>V(_,e,{})),_.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(e)=>V(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(e)=>V(_,e,{}))}function Is(_,e){_.addMessageFilter("tools::Page.setOverlayMessage",(i)=>{return i.method="Debugger.setOverlayMessage",Promise.resolve(i)}),_.addMessageFilter("tools::Page.configureOverlay",(i)=>{return i.method="Debugger.setOverlayMessage",Promise.resolve(i)}),_.addMessageFilter("tools::Page.getNavigationHistory",async(i)=>{try{let C=await _.callTarget("Runtime.evaluate",{expression:"window.location.href"}),o=await _.callTarget("Runtime.evaluate",{expression:"document.title"});_.fireResultToTools(i.id,{currentIndex:0,entries:[{id:0,url:C.result?.value??"",userTypedURL:C.result?.value??"",title:o.result?.value??"",transitionType:"link"}]})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("target::Page.frameNavigated",(i)=>{return HS(i.params?.frame),Promise.resolve(i)}),_.addMessageFilter("target::Page.getResourceTree",(i)=>{return Fe(i.result?.frameTree),Promise.resolve(i)}),_.addMessageFilter("tools::Page.getFrameTree",async(i)=>{if(typeof i.id!=="number")return null;try{let C=await _.callTarget("Page.getResourceTree",{}),o=NS(C?.frameTree);Fe(o),_.fireResultToTools(i.id,{frameTree:o})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Page.createIsolatedWorld",(i)=>{if(typeof i.id!=="number")return Promise.resolve(null);return V(_,i,{executionContextId:e.pageExecCtx.id||1})});let S=1;_.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(i)=>V(_,i,{identifier:`pptr-${S++}`})),_.addMessageFilter("tools::WebMCP.enable",(i)=>V(_,i,{})),_.addMessageFilter("tools::WebMCP.disable",(i)=>V(_,i,{})),_.addMessageFilter("tools::Page.captureScreenshot",(i)=>{return _.fireErrorToTools(i.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),_.addMessageFilter("tools::Page.startScreencast",(i)=>V(_,i,{})),_.addMessageFilter("tools::Page.stopScreencast",(i)=>V(_,i,{})),_.addMessageFilter("tools::Page.screencastFrameAck",(i)=>V(_,i,{})),_.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(i)=>V(_,i,{}));let t="",s="0.1";_.addMessageFilter("target::Page.frameNavigated",(i)=>{let C=i.params?.frame;if(C)s=C.id??s,t=C.loaderId??t,_.fireEventToTools("Page.frameStartedLoading",{frameId:s}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"init",timestamp:0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"commit",timestamp:0});return Promise.resolve(i)}),_.addMessageFilter("target::Page.domContentEventFired",(i)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"DOMContentLoaded",timestamp:i.params?.timestamp??0}),Promise.resolve(i)}),_.addMessageFilter("target::Page.loadEventFired",(i)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"load",timestamp:i.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"networkAlmostIdle",timestamp:i.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"networkIdle",timestamp:i.params?.timestamp??0}),_.fireEventToTools("Page.frameStoppedLoading",{frameId:s}),Promise.resolve(i)})}function HS(_){if(!_)return;if(!_.securityOrigin)try{_.securityOrigin=new URL(_.url??"").origin}catch{_.securityOrigin="://"}if(!_.mimeType)_.mimeType="text/html"}function Fe(_){if(!_)return;if(HS(_.frame),Array.isArray(_.childFrames))_.childFrames.forEach(Fe)}function NS(_){if(!_)return _;let e={frame:_.frame};if(Array.isArray(_.childFrames))e.childFrames=_.childFrames.map(NS);return e}function qs(_){_.addMessageFilter("tools::Overlay.enable",(e)=>V(_,e,{})),_.addMessageFilter("tools::Overlay.disable",(e)=>V(_,e,{})),_.addMessageFilter("tools::Overlay.highlightNode",(e)=>{let S=e.params??{};return e.method="DOM.highlightNode",e.params={highlightConfig:S.highlightConfig,nodeId:S.nodeId,objectId:S.objectId},Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightFrame",(e)=>{return e.method="DOM.highlightFrame",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightQuad",(e)=>{return e.method="DOM.highlightQuad",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightRect",(e)=>{return e.method="DOM.highlightRect",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.hideHighlight",(e)=>{return e.method="DOM.hideHighlight",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setInspectMode",(e)=>{let S=e.params??{};return e.method="DOM.setInspectModeEnabled",e.params={enabled:typeof S.mode==="string"&&S.mode!=="none",highlightConfig:S.highlightConfig},Promise.resolve(e)})}function Xs(_){_.addMessageFilter("tools::Emulation.canEmulate",(e)=>V(_,e,{result:!0})),_.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(e)=>{return e.method="Page.setTouchEmulationEnabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(e)=>{return e.method="Page.setScriptExecutionDisabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setEmulatedMedia",(e)=>{return e.method="Page.setEmulatedMedia",Promise.resolve(e)}),_.addMessageFilter("tools::Rendering.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(e)=>V(_,e,{})),_.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(e)=>V(_,e,{})),_.addMessageFilter("tools::Emulation.setUserAgentOverride",(e)=>{let S=e.params?.userAgent??"";return e.method="Page.overrideUserAgent",e.params={value:S},Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(e)=>V(_,e,{})),_.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(e)=>V(_,e,{}))}function ce(_){switch(_){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return _;case"StyleSheet":return"Stylesheet";default:return"Other"}}function Qs(_){if(!_)return _;return{...Js,..._,hasPostData:_.postData!=null}}function Ys(_){if(!_)return _;let e=0,S=_.headers??{},t=S["Content-Length"]??S["content-length"];if(t!=null)e=Number(t)||0;return{...Zs,..._,fromDiskCache:_.source==="disk-cache",fromServiceWorker:_.source==="service-worker",encodedDataLength:e}}function _i(_,e){if(!_)return;for(let[S,t]of Object.entries(e))if(S in _&&!(t in _))_[t]=_[S],delete _[S]}function ei(_){let e=typeof _.size==="number"?_.size:(_.name?.length??0)+(_.value?.length??0);return{name:_.name,value:_.value,domain:_.domain,path:_.path,expires:_.expires??-1,size:e,httpOnly:!!_.httpOnly,secure:!!_.secure,session:!!_.session,..._.sameSite?{sameSite:_.sameSite}:{}}}function Si(_,e){let S=new Map,t=1024;for(let[i,C]of Object.entries(ks))_.addMessageFilter(`tools::${i}`,(o)=>{return o.method=C,Promise.resolve(o)});_.addMessageFilter("tools::Network.setCacheDisabled",(i)=>{if(i.params&&"cacheDisabled"in i.params)i.params={disabled:!!i.params.cacheDisabled};return Promise.resolve(i)});let s=async(i)=>{try{let C=await _.callTarget("Page.getCookies",{}),o=Array.isArray(C?.cookies)?C.cookies.map(ei):[];_.fireResultToTools(i.id,{cookies:o})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Network.getCookies",s),_.addMessageFilter("tools::Network.getAllCookies",s),_.addMessageFilter("tools::Network.setCookie",(i)=>{let C=i.params??{};return i.method="Page.setCookie",i.params={cookie:{name:C.name,value:C.value,domain:C.domain??"",path:C.path??"/",expires:C.expires??-1,session:!1,httpOnly:!!C.httpOnly,secure:!!C.secure,sameSite:C.sameSite??"None"}},Promise.resolve(i)}),_.addMessageFilter("tools::Network.setCookies",async(i)=>{let C=Array.isArray(i.params?.cookies)?i.params.cookies:[];try{await Promise.all(C.map((o)=>_.callTarget("Page.setCookie",{cookie:o}))),_.fireResultToTools(i.id,{})}catch(o){_.fireErrorToTools(i.id,{message:o?.message??String(o)})}return null}),_.addMessageFilter("tools::Network.deleteCookies",(i)=>{let C=i.params??{},o=C.url??`https://${(C.domain??"").replace(/^\./,"")}${C.path??"/"}`;return i.method="Page.deleteCookie",i.params={cookieName:C.name,url:o},Promise.resolve(i)}),_.addMessageFilter("tools::Network.deleteCookie",(i)=>{return i.method="Page.deleteCookie",Promise.resolve(i)}),_.addMessageFilter("tools::Network.clearBrowserCookies",async(i)=>{try{let C=await _.callTarget("Page.getCookies",{}),o=Array.isArray(C?.cookies)?C.cookies:[];await Promise.all(o.map((r)=>_.callTarget("Page.deleteCookie",{cookieName:r.name,url:`${r.secure?"https":"http"}://${(r.domain??"").replace(/^\./,"")}${r.path??"/"}`}).catch(()=>{}))),_.fireResultToTools(i.id,{})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Network.canEmulateNetworkConditions",(i)=>V(_,i,{result:!1})),_.addMessageFilter("tools::Network.setExtraHTTPHeaders",(i)=>V(_,i,{})),_.addMessageFilter("tools::Network.setBlockedURLs",(i)=>V(_,i,{})),_.addMessageFilter("tools::Network.emulateNetworkConditions",(i)=>V(_,i,{})),_.addMessageFilter("tools::Network.setMonitoringXHREnabled",(i)=>V(_,i,{})),_.addMessageFilter("tools::Network.getResponseBody",async(i)=>{let C=i.params?.requestId,o=typeof C==="string"?S.get(C):void 0;if(!o)return _.fireErrorToTools(i.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;try{let r=await _.callTarget("Network.loadResource",{frameId:o.frameId,url:o.url}),A=String(r?.content??""),B=String(r?.mimeType??""),R=/^(text\/|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))/.test(B),a=R?A:Buffer.from(A,"binary").toString("base64");_.fireResultToTools(i.id,{body:a,base64Encoded:!R})}catch(r){_.fireErrorToTools(i.id,{message:`Network.getResponseBody fallback (loadResource) failed: ${r?.message??String(r)}`})}return null});for(let[i,C]of Object.entries(Ks))_.addMessageFilter(`target::${i}`,(o)=>{return _i(o.params,C),Promise.resolve(o)});_.addMessageFilter("target::Network.requestWillBeSent",(i)=>{let C=i.params;if(C){if(Object.assign(C,{...xs,...C}),C.request=Qs(C.request),C.type=ce(C.type),typeof C.requestId==="string"&&typeof C.request?.url==="string"){if(S.size>=1024){let o=S.keys().next().value;if(o!==void 0)S.delete(o)}S.set(C.requestId,{url:C.request.url,frameId:C.frameId})}}return Promise.resolve(i)}),_.addMessageFilter("target::Network.responseReceived",(i)=>{let C=i.params;if(C)Object.assign(C,{...zs,...C}),C.response=Ys(C.response),C.type=ce(C.type);return Promise.resolve(i)}),_.addMessageFilter("target::Network.loadingFinished",(i)=>{let C=i.params;if(C){let o=C.metrics?.responseBodyBytesReceived;if(typeof o==="number"&&C.encodedDataLength==null)C.encodedDataLength=o;Object.assign(C,{...js,...C})}return Promise.resolve(i)}),_.addMessageFilter("target::Network.loadingFailed",(i)=>{let C=i.params;if(C){if(C.type=ce(C.type),!("canceled"in C))C.canceled=!1}return Promise.resolve(i)}),_.addMessageFilter("target::Network.requestServedFromMemoryCache",(i)=>{if(i.method="Network.requestServedFromCache",i.params)i.params={requestId:i.params.requestId};return Promise.resolve(i)}),_.addMessageFilter("tools::Network.loadNetworkResource",async(i)=>{let C=i.params??{};if(!e)return _.fireResultToTools(i.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let o=await _.callTarget("Network.loadResource",{frameId:C.frameId,url:C.url}),r=!!o?.content&&(o?.status??0)>=200&&(o?.status??0)<300,A;if(r)A=`network-resource:${C.frameId??""}:${C.url}`,e.set(A,String(o.content));_.fireResultToTools(i.id,{resource:{success:r,stream:A,httpStatusCode:o?.status,headers:o?.headers,mimeType:o?.mimeType}})}catch(o){_.fireResultToTools(i.id,{resource:{success:!1,netError:2,netErrorName:o?.message??"ERR_FAILED"}})}return null})}function ti(_){for(let e of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])_.addMessageFilter(`tools::${e}`,(S)=>V(_,S,{}))}function si(_){_.addMessageFilter("target::Inspector.inspect",(e)=>{if(e.method="DOM.inspectNodeRequested",e.params)e.params.backendNodeId=e.params.object?.objectId,delete e.params.object,delete e.params.hints;return Promise.resolve(e)})}function Ci(_){if(!_)return _;let e=_.origin==="inspector";return{styleSheetId:_.styleSheetId,frameId:_.frameId,sourceURL:_.sourceURL??"",origin:_.origin==="author"?"regular":_.origin,title:_.title??"",disabled:!!_.disabled,isInline:!!_.isInline,startLine:_.startLine??0,startColumn:_.startColumn??0,isMutable:e,isConstructed:e,length:_.length??0,endLine:_.endLine??0,endColumn:_.endColumn??0,hasSourceURL:!!_.sourceURL}}function be(_){if(!_)return _;let e={origin:_.origin==="author"?"regular":_.origin,style:o_(_.style),selectorList:Ai(_.selectorList)};if(_.ruleId?.styleSheetId)e.styleSheetId=_.ruleId.styleSheetId;if(Array.isArray(_.groupings))e.media=_.groupings.map((S)=>({text:S.text,sourceURL:S.sourceURL,source:$i[S.type]}));return e}function ni(_){let e={lastNodeId:0},S=new Map;async function t(s,i){let C=S.get(s);if(!C)try{if(C=(await _.callTarget("CSS.getStyleSheet",{styleSheetId:s}))?.styleSheet,C)S.set(s,C)}catch{}let o=C?.rules??[];for(let r=0;r<o.length;r++)if(ii(o[r]?.style?.range,i))return{styleSheetId:s,ordinal:r};return{styleSheetId:s,ordinal:0}}_.addMessageFilter("tools::CSS.enable",(s)=>{return _.fireResultToTools(s.id,{}),Promise.resolve(null)}),_.addMessageFilter("target::CSS.styleSheetAdded",(s)=>{if(s.params?.header)s.params.header=Ci(s.params.header);return Promise.resolve(s)}),_.addMessageFilter("target::CSS.getInlineStylesForNode",(s)=>{let i=s.result;if(i)s.result={inlineStyle:o_(i.inlineStyle),attributesStyle:o_(i.attributesStyle)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(s)=>{if(typeof s.params?.nodeId==="number")e.lastNodeId=s.params.nodeId;try{let[i,C]=await Promise.all([_.callTarget("CSS.getInlineStylesForNode",{nodeId:s.params.nodeId}),_.callTarget("CSS.getMatchedStylesForNode",{nodeId:s.params.nodeId,includePseudo:!0,includeInherited:!0})]);_.fireResultToTools(s.id,{inlineStyle:o_(i?.inlineStyle),attributesStyle:o_(i?.attributesStyle),matchedCSSRules:ge(C?.matchedCSSRules),pseudoElements:oi(C?.pseudoElements),inherited:yi(C?.inherited),cssKeyframesRules:[]})}catch(i){_.fireErrorToTools(s.id,{message:i?.message??String(i)})}return null}),_.addMessageFilter("tools::CSS.setStyleTexts",async(s)=>{let i=s.params?.edits??[],C=[];for(let o of i)try{let r=await t(o.styleSheetId,o.range),A=await _.callTarget("CSS.setStyleText",{styleId:r,text:o.text});C.push(o_(A?.style)),S.delete(o.styleSheetId),_.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:o.styleSheetId})}catch{C.push(null)}return _.fireResultToTools(s.id,{styles:C}),null}),_.addMessageFilter("tools::CSS.setRuleSelector",async(s)=>{let{styleSheetId:i,range:C,selector:o}=s.params??{};try{let r=await t(i,C);s.params={ruleId:r,selector:o}}catch(r){return _.fireErrorToTools(s.id,{message:r?.message??String(r)}),null}return s}),_.addMessageFilter("target::CSS.setRuleSelector",(s)=>{if(s.result?.rule)s.result={rule:be(s.result.rule)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.addRule",async(s)=>{let i=s.params??{},C=String(i.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let o=await _.callTarget("CSS.addRule",{contextNodeId:e.lastNodeId,styleSheetId:i.styleSheetId,selector:C});_.fireResultToTools(s.id,{rule:be(o?.rule)})}catch(o){_.fireErrorToTools(s.id,{message:o?.message??String(o)})}return null})}function Ri(_){_.addMessageFilter("tools::Browser.getVersion",(e)=>V(_,e,ai)),_.addMessageFilter("tools::Browser.getWindowForTarget",(e)=>V(_,e,{windowId:1,bounds:{}})),_.addMessageFilter("tools::Browser.setWindowBounds",(e)=>V(_,e,{}))}function ci(_){switch(_){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function Di(_){let e=async(S)=>{let t=S.params??{},s=ci(t.type);if(!s)return _.fireResultToTools(S.id,{}),null;let i=s==="click"?["mousedown","click","mouseup"]:[s];try{for(let C of i){let o={x:Number(t.x)||0,y:Number(t.y)||0,modifiers:Number(t.modifiers)||0,button:t.button??"none",type:C},r=`(${Bi}, __sd_simulate(${JSON.stringify(o)}))`;await _.callTarget("Runtime.evaluate",{expression:r})}_.fireResultToTools(S.id,{})}catch(C){_.fireErrorToTools(S.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Input.dispatchMouseEvent",e),_.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",e),_.addMessageFilter("tools::Input.setIgnoreInputEvents",(S)=>{return _.fireResultToTools(S.id,{}),Promise.resolve(null)})}function fi(_){let e=new Map;return _.addMessageFilter("tools::IO.read",(S)=>{let t=String(S.params?.handle??""),s=Number(S.params?.size)||Ti,i=Number(S.params?.offset)||0,C=e.get(t);if(C===void 0)return _.fireResultToTools(S.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let o=C.slice(i,i+s),r=i+s>=C.length;return _.fireResultToTools(S.id,{data:o,eof:r,base64Encoded:!1}),Promise.resolve(null)}),_.addMessageFilter("tools::IO.close",(S)=>{return e.delete(String(S.params?.handle??"")),_.fireResultToTools(S.id,{}),Promise.resolve(null)}),e}function Ei(_){_.addMessageFilter("tools::Accessibility.enable",(e)=>V(_,e,{})),_.addMessageFilter("tools::Accessibility.disable",(e)=>V(_,e,{})),_.addMessageFilter("tools::Accessibility.getPartialAXTree",async(e)=>{let S=e.params??{},t=S.nodeId??S.backendNodeId;if(typeof t!=="number")return _.fireResultToTools(e.id,{nodes:[]}),null;try{let i=(await _.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:t}))?.properties??{},C={nodeId:String(t),ignored:Boolean(i.ignored),role:i.role?{type:"role",value:String(i.role)}:void 0,name:i.label?{type:"computedString",value:String(i.label)}:void 0,backendDOMNodeId:t,childIds:[],properties:[]};_.fireResultToTools(e.id,{nodes:[C]})}catch(s){_.fireResultToTools(e.id,{nodes:[]})}return null})}function vi(_){for(let[S,t]of Object.entries(bi))_.addMessageFilter(`tools::${S}`,(s)=>V(_,s,t));for(let S of Fi)for(let t of["enable","disable"])_.addMessageFilter(`tools::${S}.${t}`,(s)=>V(_,s,{}));let e=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[S,t]of e)_.addMessageFilter(`tools::${S}`,(s)=>V(_,s,t))}function VS(_){let e=hs();vi(_);let S=fi(_);ms(_,e),Ls(_,e),Ws(_,e),Us(_),Gs(_),Is(_,e),qs(_),Xs(_),Si(_,S),ti(_),si(_),ni(_),Ri(_),Di(_),Ei(_)}function mS(_){let e=`${_.reqHost}/devtools/page/${_.id}`;return{description:_.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${e}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${e}`,id:_.id,title:_.title,type:_.type,url:_.url,webSocketDebuggerUrl:`ws://${e}`,faviconUrl:""}}function p_(_){return _.replace(/[&<>"']/g,(e)=>pi[e])}function LS(_){return hS.createServer((e,S)=>{let t=new URL(e.url??"/","http://placeholder"),s=e.headers.host??"";if(t.pathname==="/json/version"){let i=typeof _.version==="function"?_.version(s):_.version;return De(S,i)}if(t.pathname==="/json"||t.pathname==="/json/list")return De(S,_.listTargets(s));if(t.pathname==="/json/protocol")return De(S,{});if(t.pathname==="/")return ui(S,_,s);S.writeHead(404,{"content-type":"text/plain"}),S.end("not found")})}function De(_,e,S=200){_.writeHead(S,{"content-type":"application/json; charset=utf-8"}),_.end(JSON.stringify(e))}function ui(_,e,S){let t=e.listTargets(S),s=t.map((r)=>`<li><strong>${p_(r.title||r.url||r.id)}</strong><br><small>${p_(r.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${p_(r.devtoolsFrontendUrl)}</code></li>`).join(""),i=`inspect-webkit${e.brand?` (${e.brand})`:""}`,C=e.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${p_(S)}</code>.</p>`,o=`<!doctype html><meta charset=utf-8><title>${p_(i)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${p_(i)} — ${t.length} target${t.length===1?"":"s"}</h1>`+C+`<ul>${s}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';_.writeHead(200,{"content-type":"text/html; charset=utf-8"}),_.end(o)}function WS(_,e,S){return new Promise((t,s)=>{_.once("error",s);let i=e==="localhost"||e==="::1"||e==="127.0.0.1"?"::":e;_.listen({port:S,host:i,ipv6Only:!1},()=>{_.off("error",s),t()})})}function PS(_){let e=!process.env.NO_COLOR&&process.stderr.isTTY===!0,S=(r,A)=>e?`\x1B[${r}m${A}\x1B[0m`:A,t=(r)=>S("1",r),s=(r)=>S("2",r),i=(r)=>S("36",r),C=(r)=>S("32",r),o=`http://${_.host}:${_.port}`;console.error(`${C("●")} ${t(`${_.brand} CDP`)} ${i(o)}`),console.error(` ${s("chrome")} chrome://inspect → ${_.host}:${_.port}`),console.error(` ${s("vscode")} "type": "chrome", "port": ${_.port}`)}function Oi(_,e){let S=!!process.env.INSPECT_WEBKIT_DEBUG,t=new Map,s=!1,i=!1,C=!1,o=new Map,r=null;function A(T){if(_.readyState!==1)return;let f=JSON.stringify(T);if(S)console.error(`[browser] tools<< ${f.slice(0,240)}`);_.send(f)}function B(T,f){let b={method:T,params:f};if(r)b.sessionId=r;A(b)}function R(T,f){return{targetId:T.targetId,type:T.type==="page"?"page":T.type||"other",title:T.title||"",url:T.url||"",attached:f,canAccessOpener:!1,browserContextId:"default"}}function a(T){for(let f of t.values())if(f.targetId===T)return!0;return!1}function u(T,f){let b=e.listEntries().find((D)=>D.targetId===T);if(!b)return null;let y=crypto.randomUUID(),$=(D)=>{let w;try{w=JSON.parse(D)}catch{return}w.sessionId=y,A(w)},n=e.createPageSession(T,$);if(!n)return null;return t.set(y,{handle:n,targetId:T}),B("Target.attachedToTarget",{sessionId:y,targetInfo:R(b,!0),waitingForDebugger:f}),{sessionId:y,entry:b}}function v(T){let f=t.get(T);if(!f)return!1;try{f.handle.close()}catch{}return t.delete(T),B("Target.detachedFromTarget",{sessionId:T,targetId:f.targetId}),!0}function O(){let T=e.listEntries(),f=new Set;for(let b of T){f.add(b.targetId);let y=o.get(b.targetId);if(!y){if(o.set(b.targetId,b),s)B("Target.targetCreated",{targetInfo:R(b,a(b.targetId))});if(i&&!a(b.targetId))u(b.targetId,C)}else if(y.title!==b.title||y.url!==b.url){if(o.set(b.targetId,b),s)B("Target.targetInfoChanged",{targetInfo:R(b,a(b.targetId))})}}for(let b of[...o.keys()]){if(f.has(b))continue;o.delete(b);for(let[y,$]of t)if($.targetId===b)v(y);if(s)B("Target.targetDestroyed",{targetId:b})}}let p=setInterval(O,e.refreshMs??1000);function F(T,f){if(T)f.sessionId=T;A(f)}function E(T,f){let{id:b,method:y}=T,$=T.params??{};switch(y){case"Browser.getVersion":return F(f,{id:b,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!r)r=crypto.randomUUID();return F(f,{id:b,result:{sessionId:r}})}case"Target.setDiscoverTargets":{if(s=!!$.discover,s)for(let n of e.listEntries())o.set(n.targetId,n),B("Target.targetCreated",{targetInfo:R(n,a(n.targetId))});if(typeof b==="number")F(f,{id:b,result:{}});return}case"Target.getTargets":{let n=e.listEntries().map((D)=>R(D,a(D.targetId)));return F(f,{id:b,result:{targetInfos:n}})}case"Target.setAutoAttach":{if(i=!!$.autoAttach,C=!!$.waitForDebuggerOnStart,i){for(let n of e.listEntries())if(!a(n.targetId))u(n.targetId,C)}if(typeof b==="number")F(f,{id:b,result:{}});return}case"Target.attachToTarget":{for(let[D,w]of t)if(w.targetId===$.targetId){if(typeof b==="number")F(f,{id:b,result:{sessionId:D}});return}let n=u($.targetId,!1);if(!n){if(typeof b==="number")F(f,{id:b,error:{code:-32000,message:"No target with given id found"}});return}if(typeof b==="number")F(f,{id:b,result:{sessionId:n.sessionId}});return}case"Target.detachFromTarget":{if(v($.sessionId),typeof b==="number")F(f,{id:b,result:{}});return}case"Target.sendMessageToTarget":{let n=t.get($.sessionId);if(n)n.handle.onMessageFromTools($.message);if(typeof b==="number")F(f,{id:b,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof b==="number")F(f,{id:b,result:{}});return;case"Target.getBrowserContexts":{if(typeof b==="number")F(f,{id:b,result:{browserContextIds:["default"]}});return}}if(typeof b==="number")F(f,{id:b,error:{code:-32601,message:`Browser-level method '${y??"?"}' not implemented`}})}_.on("message",(T,f)=>{let b=f?new TextDecoder().decode(T):T.toString();if(S)console.error(`[browser] tools>> ${b.slice(0,240)}`);let y;try{y=JSON.parse(b)}catch{return}if(typeof y.sessionId==="string"){if(y.sessionId===r){let D={...y};return delete D.sessionId,E(D,y.sessionId)}let $=t.get(y.sessionId);if(!$){if(typeof y.id==="number")A({id:y.id,sessionId:y.sessionId,error:{code:-32000,message:`Session ${y.sessionId} not found`}});return}let n={...y};delete n.sessionId,$.handle.onMessageFromTools(JSON.stringify(n));return}E(y,void 0)}),_.on("close",()=>{clearInterval(p);for(let[,T]of t)try{T.handle.close()}catch{}t.clear()})}async function wi(_={}){let e=_.port??9222,S=_.host??"localhost",t=await di();if(t.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let s=new Map,i=new WeakMap,C=new Map;for(let p of t)C.set(p,[]),i.set(p,new Set),p.wi.subscribe((F)=>{let{__selector:E,__argument:T}=F;if(!E||!T)return;if(E==="_rpc_reportConnectedApplicationList:"){let f=T.WIRApplicationDictionaryKey??{},b=Object.entries(f).map(([$,n])=>({appId:$,bundleId:n.WIRApplicationBundleIdentifierKey,name:n.WIRApplicationNameKey??n.WIRApplicationBundleIdentifierKey??$,isProxy:Boolean(n.WIRIsApplicationProxyKey)}));C.set(p,b);let y=i.get(p);for(let $ of b){if($.isProxy||y.has($.appId))continue;y.add($.appId),p.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$.appId})}}else if(E==="_rpc_applicationConnected:"){let f=T,b=C.get(p)??[];if(!b.find((y)=>y.appId===f.WIRApplicationIdentifierKey))b.push({appId:f.WIRApplicationIdentifierKey,bundleId:f.WIRApplicationBundleIdentifierKey,name:f.WIRApplicationNameKey??f.WIRApplicationBundleIdentifierKey,isProxy:Boolean(f.WIRIsApplicationProxyKey)}),C.set(p,b);if(!f.WIRIsApplicationProxyKey){let y=i.get(p);if(!y.has(f.WIRApplicationIdentifierKey))y.add(f.WIRApplicationIdentifierKey),p.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:f.WIRApplicationIdentifierKey})}}else if(E==="_rpc_applicationDisconnected:"){let f=C.get(p)??[];C.set(p,f.filter((b)=>b.appId!==T.WIRApplicationIdentifierKey)),s.delete(`${p.id}:${T.WIRApplicationIdentifierKey}`)}else if(E==="_rpc_applicationSentListing:"){let f=T.WIRApplicationIdentifierKey,b=T.WIRListingKey??{},y=new Map;for(let[$,n]of Object.entries(b))y.set($,{pageId:Number(n.WIRPageIdentifierKey??0),title:n.WIRTitleKey??"",url:n.WIRURLKey??"",type:n.WIRTypeKey??""});s.set(`${p.id}:${f}`,y)}}),p.wi.send("_rpc_reportIdentifier:",{}),p.wi.send("_rpc_getConnectedApplications:",{});let o=setInterval(()=>{for(let p of t){let F=C.get(p)??[];for(let E of F){if(E.isProxy)continue;p.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:E.appId})}}},li),r=new Map;function A(){let p=[];for(let F of t){let E=C.get(F)??[];for(let T of E){if(T.isProxy)continue;let f=s.get(`${F.id}:${T.appId}`);if(!f)continue;for(let b of f.values())p.push({targetId:`${F.id}:${T.appId}:${b.pageId}`,source:F,appId:T.appId,appName:T.name,bundleId:T.bundleId,pageId:b.pageId,title:b.title,url:b.url,type:b.type})}}return p}let B=crypto.randomUUID(),R=LS({brand:"",version:(p)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${p}/devtools/browser/${B}`}),listTargets:(p)=>A().map((F)=>mS({reqHost:p,id:F.targetId,description:`${F.source.label}${F.bundleId?` (${F.bundleId})`:""}`,title:F.title||F.appName,url:/^https?:/i.test(F.url)?F.url:"about:blank",type:TS(F.type)}))}),a=new gS.default({noServer:!0}),u=`/devtools/browser/${B}`;R.on("upgrade",(p,F,E)=>{let T=new URL(p.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${T.pathname}`),T.pathname===u){a.handleUpgrade(p,F,E,(b)=>{Oi(b,{listEntries:()=>A().map((y)=>({targetId:y.targetId,type:TS(y.type),title:y.title||y.appName,url:y.url})),createPageSession:(y,$)=>{let n=A().find((D)=>D.targetId===y);if(!n)return null;return v(n,$)}})});return}if(!T.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${T.pathname}`),F.destroy();return}let f=decodeURIComponent(T.pathname.slice(15));a.handleUpgrade(p,F,E,(b)=>{O(b,f)})});function v(p,F){let E=crypto.randomUUID(),f=new de({readyState:1,send:($)=>F($)},p.source.wi,p.appId,p.pageId,E);VS(f),r.set(E,f);let b=!!process.env.INSPECT_WEBKIT_DEBUG,y=p.source.wi.subscribe(($)=>{if($.__selector!=="_rpc_applicationSentData:")return;let n=$.__argument;if(!n)return;if(n.WIRDestinationKey&&n.WIRDestinationKey!==E)return;if(n.WIRApplicationIdentifierKey!==p.appId)return;if(n.WIRPageIdentifierKey!==void 0&&Number(n.WIRPageIdentifierKey)!==p.pageId)return;let D=n.WIRMessageDataKey??n.WIRSocketDataKey;if(!D)return;let w=typeof D==="string"?D:new TextDecoder().decode(D);if(b)console.error(`[cdp] target>> ${w.slice(0,240)}`);f.onMessageFromTarget(w)});return p.source.wi.forwardSocketSetup(p.appId,p.pageId,E),console.error(`# devtools attached: ${p.source.label} :: ${p.appName} :: ${p.title||p.url}`),{onMessageFromTools($){if(b)console.error(`[cdp] tools>> ${$.slice(0,300)}`);f.onMessageFromTools($)},close(){y();try{f.wi.forwardDidClose(f.appId,f.pageId,f.senderKey)}catch{}r.delete(f.senderKey)}}}function O(p,F){let E=A().find((f)=>f.targetId===F);if(!E){console.error(`# ws closed: unknown target ${F} (known: ${A().map((f)=>f.targetId).join(", ")||"none"})`),p.close(1011,`unknown target ${F}`);return}let T=v(E,(f)=>{if(p.readyState===1)p.send(f)});p.on("message",(f,b)=>{let y=b?new TextDecoder().decode(f):f.toString();T.onMessageFromTools(y)}),p.on("close",()=>T.close())}return await WS(R,S,e),PS({brand:"safari",host:S,port:e}),{stop(){clearInterval(o),a.close(),R.close();for(let p of t)try{p.wi.close(),p.lockdown?.close()}catch{}},getTargets(){return A()}}}async function di(){let[_,e]=await Promise.all([gi(),Ni()]);return[..._,...e]}async function gi(){let _=[];try{_=await pS()}catch(S){return console.error(`warn: usbmux: ${S.message}`),[]}return(await Promise.all(_.map(Hi))).filter((S)=>S!==null)}async function Hi(_){try{let e=await uS(_.Properties.SerialNumber),S=await z_.open(_,e);await S.startSession();let t=await S.startService("com.apple.webinspector"),{socket:s,stream:i}=await S.connectService(t),C=new h_(s,i);return await C.reportIdentifier(),{kind:"device",id:`device:${_.Properties.SerialNumber}`,label:`device:${_.Properties.SerialNumber.slice(0,8)}`,wi:C,lockdown:S}}catch(e){return console.error(`warn: device ${_.Properties.SerialNumber}: ${e.message}`),null}}async function Ni(){let _=[];try{_=await lS()}catch(S){return console.error(`warn: simulator discovery: ${S.message}`),[]}return(await Promise.all(_.map(Vi))).filter((S)=>S!==null)}async function Vi(_){try{let{socket:e,stream:S}=await wS(_.socketPath),t=new h_(e,S);return await t.reportIdentifier(),{kind:"simulator",id:`sim:${_.pid}`,label:`sim:${_.pid}`,wi:t}}catch(e){return console.error(`warn: simulator ${_.socketPath}: ${e.message}`),null}}function TS(_){switch(_){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class MS{url;ws;handlers=new Set;openPromise;constructor(_){this.url=_,this.ws=new DS(_),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((e,S)=>{this.ws.once("open",()=>e()),this.ws.once("error",(t)=>S(t))}),this.ws.on("message",(e,S)=>{let t=S?new TextDecoder().decode(e):e.toString();for(let s of this.handlers)s(t)})}ready(){return this.openPromise}onFrame(_){return this.handlers.add(_),()=>this.handlers.delete(_)}forwardSocketData(_,e,S,t){if(this.ws.readyState!==DS.OPEN)return;this.ws.send(new TextDecoder().decode(t))}forwardDidClose(_,e,S){}close(){try{this.ws.close()}catch{}}}async function hi(_){let e=_.port??9223,S=_.host??"localhost",{upstreams:t}=_,s=LS({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(o)=>t.map((r)=>mS({reqHost:o,id:encodeURIComponent(r.url),description:r.label??"bun",title:r.label??r.url,url:r.url,type:"node"}))}),i=new gS.default({noServer:!0});s.on("upgrade",(o,r,A)=>{let B=new URL(o.url??"/","http://placeholder");if(!B.pathname.startsWith("/devtools/page/")){r.destroy();return}let R=decodeURIComponent(B.pathname.slice(15)),a=t.find((u)=>u.url===R);if(!a){r.destroy();return}i.handleUpgrade(o,r,A,(u)=>{C(u,a).catch((v)=>{console.error(`# bun attach failed: ${v.message}`);try{u.close(1011,v.message)}catch{}})})});async function C(o,r){let A=!!process.env.INSPECT_WEBKIT_DEBUG,B=new MS(r.url);await B.ready();let R=crypto.randomUUID(),a=new de(o,B,"bun",0,R);VS(a);let u=B.onFrame((v)=>{if(A)console.error(`[bun] target>> ${v.slice(0,240)}`);a.onMessageFromTarget(v)});o.on("message",(v,O)=>{let p=O?new TextDecoder().decode(v):v.toString();if(A)console.error(`[bun] tools>> ${p.slice(0,300)}`);a.onMessageFromTools(p)}),o.on("close",()=>{u(),B.close()}),console.error(`# devtools attached: ${r.label??r.url}`)}return await WS(s,S,e),PS({brand:"bun",host:S,port:e}),{stop(){i.close(),s.close()},getTargets(){return t.slice()}}}async function US(){return pS()}async function mi(){let[_,e]=await Promise.all([Li(),Wi()]);return[..._.flat(),...e.flat()]}async function Li(){let _=await US();return Promise.all(_.map(Pi))}async function Wi(){let _=await lS();return Promise.all(_.map(Mi))}async function Pi(_){let e=null;try{return e=await Ui(_),await GS(e.client,{source:"device",udid:_.Properties.SerialNumber,deviceID:_.DeviceID})}catch(S){return console.error(`warn: ${_.Properties.SerialNumber}: ${S.message}`),[]}finally{e?.client.close(),e?.lockdown.close()}}async function Mi(_){let e=null;try{let{socket:S,stream:t}=await wS(_.socketPath);return e=new h_(S,t),await e.reportIdentifier(),await GS(e,{source:"simulator",udid:`sim:${_.pid}`})}catch(S){return console.error(`warn: simulator (${_.socketPath}): ${S.message}`),[]}finally{e?.close()}}async function Ui(_){let e=await uS(_.Properties.SerialNumber),S=await z_.open(_,e);await S.startSession();let t=await S.startService("com.apple.webinspector"),{socket:s,stream:i}=await S.connectService(t),C=new h_(s,i);return await C.reportIdentifier(),{client:C,lockdown:S}}async function GS(_,e){let S=(await _.listApplications()).filter((i)=>!i.isProxy),t=await Promise.all(S.map((i)=>_.getListing(i.appId))),s=[];for(let i=0;i<S.length;i++){let C=S[i];for(let o of t[i])s.push({...e,appId:C.appId,appName:C.name??C.bundleId??C.appId,bundleId:C.bundleId,pageId:o.pageId,title:o.title,url:o.url,type:o.type})}return s}var rs,$s,nS,As,os,ns,as,i_=(_,e,S)=>{var t=_!=null&&typeof _==="object";if(t){var s=e?ns??=new WeakMap:as??=new WeakMap,i=s.get(_);if(i)return i}S=_!=null?rs($s(_)):{};let C=e||!_||!_.__esModule?nS(S,"default",{value:_,enumerable:!0}):S;for(let o of As(_))if(!os.call(C,o))nS(C,o,{get:ys.bind(_,o),enumerable:!0});if(t)s.set(_,C);return C},j=(_,e)=>()=>(e||_((e={exports:{}}).exports,e),e.exports),K,C_,k_,Rs,N_,V_,fS,ES,Bs,ve,pe,cs,FS,Ds,Ts=`<?xml version="1.0" encoding="UTF-8"?>
|
|
11
|
+
${e}</dict>`}function me(_){let e=we(_,"");return new TextEncoder().encode(ei+e+Si)}class qS{src;pos=0;constructor(_){this.src=_}skip(){while(this.pos<this.src.length){let _=this.src[this.pos];if(_===" "||_==="\t"||_===`
|
|
12
|
+
`||_==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let e=this.src.indexOf("-->",this.pos+4);if(e<0)throw Error("unterminated comment");this.pos=e+3}else if(this.src.startsWith("<?",this.pos)){let e=this.src.indexOf("?>",this.pos+2);if(e<0)throw Error("unterminated processing instruction");this.pos=e+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let e=0;while(this.pos<this.src.length){let S=this.src[this.pos++];if(S==="[")e++;else if(S==="]")e--;else if(S===">"&&e===0)break}}else break}}nextTag(){if(this.skip(),this.pos>=this.src.length)return null;if(this.src[this.pos]!=="<")throw Error(`expected '<' at ${this.pos}`);let _=this.src.indexOf(">",this.pos);if(_<0)throw Error("unterminated tag");let e=this.src.slice(this.pos+1,_);this.pos=_+1;let S=e.startsWith("/"),t=e.endsWith("/");return{name:e.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:t,isClose:S}}readText(){let _=this.src.indexOf("<",this.pos),e=_<0?this.src.slice(this.pos):this.src.slice(this.pos,_);return this.pos=_<0?this.src.length:_,e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}}function ge(_,e){let S=(t)=>{let s=_.nextTag();if(!s||!s.isClose||s.name!==t)throw Error(`expected </${t}>`)};switch(e){case"true":case"false":throw Error(`<${e}> must be self-closing`);case"string":case"key":{let t=_.readText();return S(e),t}case"integer":{let t=_.readText().trim();if(S("integer"),/^-?\d+$/.test(t)&&Math.abs(Number(t))<=Number.MAX_SAFE_INTEGER)return Number(t);return BigInt(t)}case"real":{let t=Number(_.readText().trim());return S("real"),t}case"data":{let t=si(_.readText());return S("data"),t}case"date":{let t=new Date(_.readText().trim());return S("date"),t}case"array":{let t=[];while(!0){let s=_.nextTag();if(!s)throw Error("unterminated <array>");if(s.isClose&&s.name==="array")return t;t.push(s.selfClose?de(s.name):ge(_,s.name))}}case"dict":{let t={};while(!0){let s=_.nextTag();if(!s)throw Error("unterminated <dict>");if(s.isClose&&s.name==="dict")return t;if(s.name!=="key")throw Error(`expected <key>, got <${s.name}>`);let i=_.readText();S("key");let C=_.nextTag();if(!C)throw Error("unterminated <dict>");t[i]=C.selfClose?de(C.name):ge(_,C.name)}}default:throw Error(`unknown plist tag <${e}>`)}}function de(_){if(_==="true")return!0;if(_==="false")return!1;if(_==="string")return"";if(_==="data")return new Uint8Array(0);if(_==="array")return[];if(_==="dict")return{};throw Error(`self-closing <${_}/> not supported`)}function J_(_){let e=typeof _==="string"?_:new TextDecoder().decode(_),S=new qS(e);while(!0){let s=S.nextTag();if(!s)throw Error("no <plist> root");if(s.name==="plist"&&!s.isClose)break}let t=S.nextTag();if(!t)throw Error("empty plist");return t.selfClose?de(t.name):ge(S,t.name)}function n_(_,e,S){let t=0;for(let s=0;s<S;s++)t=t*256+_[e+s];return t}function ii(_){if(_.length<41)throw Error("bplist too short");let e=new TextDecoder().decode(_.slice(0,8));if(e!=="bplist00")throw Error(`bad magic: ${e}`);let S=_.length-32,t=_[S+6],s=_[S+7],i=n_(_,S+8,8),C=n_(_,S+16,8),o=n_(_,S+24,8),r=Array(i);for(let R=0;R<i;R++)r[R]=n_(_,o+R*t,t);function A(R){return n_(_,R,s)}function B(R){let a=r[R],p=_[a],O=p>>4,u=p&15;function v(F){if(u!==15)return{len:u,next:F};let E=_[F];if((E&240)!==16)throw Error("expected int marker for length");let T=1<<(E&15);return{len:n_(_,F+1,T),next:F+1+T}}switch(O){case 0:if(u===0)return null;if(u===8)return!1;if(u===9)return!0;if(u===15)return null;throw Error(`unknown singleton ${u}`);case 1:{let F=1<<u,E=n_(_,a+1,F);if(F===8&&E>Number.MAX_SAFE_INTEGER)return BigInt(E);return E}case 2:{let F=1<<u,E=new DataView(_.buffer,_.byteOffset+a+1,F);return F===4?E.getFloat32(0,!1):E.getFloat64(0,!1)}case 3:{let E=new DataView(_.buffer,_.byteOffset+a+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+E*1000)}case 4:{let{len:F,next:E}=v(a+1);return _.slice(E,E+F)}case 5:{let{len:F,next:E}=v(a+1);return new TextDecoder("ascii").decode(_.slice(E,E+F))}case 6:{let{len:F,next:E}=v(a+1),T=_.slice(E,E+F*2),f=new Uint8Array(T.length);for(let b=0;b<T.length;b+=2)f[b]=T[b+1],f[b+1]=T[b];return new TextDecoder("utf-16le").decode(f)}case 10:{let{len:F,next:E}=v(a+1),T=[];for(let f=0;f<F;f++)T.push(B(A(E+f*s)));return T}case 13:{let{len:F,next:E}=v(a+1),T={};for(let f=0;f<F;f++){let b=B(A(E+f*s)),y=B(A(E+(F+f)*s));if(typeof b!=="string")throw Error(`non-string dict key: ${typeof b}`);T[b]=y}return T}default:throw Error(`unknown bplist marker 0x${p.toString(16)} at ${a}`)}}return B(C)}function Ci(_){if(_.length>=8){if(new TextDecoder().decode(_.slice(0,8))==="bplist00")return ii(_)}return J_(_)}class Z_{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push(_){if(_.length===0)return;this.chunks.push(_),this.size+=_.length,this.drain()}close(_){this.closed=!0,this.closeErr=_??null;for(let e of this.waiters)e.reject(_??Error("stream closed"));this.waiters=[]}read(_){return new Promise((e,S)=>{if(this.closed&&this.size<_){S(this.closeErr??Error("stream closed"));return}this.waiters.push({n:_,resolve:e,reject:S}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let _=this.waiters.shift(),e=new Uint8Array(_.n),S=0;while(S<_.n){let t=this.chunks[0],s=_.n-S;if(t.length<=s)e.set(t,S),S+=t.length,this.chunks.shift();else e.set(t.subarray(0,s),S),this.chunks[0]=t.subarray(s),S+=s}this.size-=_.n,_.resolve(e)}}}function Le(_,e){let S=(i)=>{e.push(new Uint8Array(i.buffer,i.byteOffset,i.byteLength))},t=()=>e.close(),s=(i)=>e.close(i);return _.on("data",S),_.on("close",t),_.on("error",s),()=>{_.off("data",S),_.off("close",t),_.off("error",s)}}async function We(){let _=new Z_;return new Promise((e,S)=>{let t=GS.createConnection({path:Ai}),s=(i)=>{_.close(i),S(i)};t.once("error",s),t.once("connect",()=>{t.off("error",s);let i=Le(t,_);e({socket:t,stream:_,detach:i})})})}async function oi(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!0);return(await _.read(S-4)).slice(12)}function yi(_,e,S){let t=16+S.length,s=new Uint8Array(16),i=new DataView(s.buffer);i.setUint32(0,t,!0),i.setUint32(4,ri,!0),i.setUint32(8,$i,!0),i.setUint32(12,e,!0),_.write(s),_.write(S)}async function Pe(_,e,S,t){let s=me({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...t});yi(_,S,s);let i=await oi(e);return J_(i)}async function XS(){let{socket:_,stream:e}=await We();try{return(await Pe(_,e,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{_.end()}}async function IS(_){let{socket:e,stream:S}=await We();try{let s=(await Pe(e,S,1,{MessageType:"ReadPairRecord",PairRecordID:_})).PairRecordData;if(!s)throw Error(`no pair record for ${_} — pair the device first (open Finder/iTunes, tap "Trust")`);return J_(s)}finally{e.end()}}async function VS(_,e){let{socket:S,stream:t,detach:s}=await We(),i=(e&255)<<8|e>>8&255,C=await Pe(S,t,1,{MessageType:"Connect",DeviceID:_,PortNumber:i});if(C.MessageType!=="Result"||C.Number!==0){S.end();let o=C.Number??"?";throw Error(`Connect to device ${_} port ${e} failed (code ${o})`)}return{socket:S,stream:t,detach:s}}async function KS(){let _=ni("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if(_.status!==0||!_.stdout)return[];let e=_.stdout.toString("utf8"),S=new Map;for(let t of e.split(`
|
|
13
|
+
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(t))continue;if(!t.startsWith("webinspec"))continue;let s=t.split(/\s+/),i=Number(s[1]),C=s[s.length-1];if(C)S.set(C,i)}return Array.from(S,([t,s])=>({socketPath:t,pid:s}))}async function xS(_){let e=new Z_;return new Promise((S,t)=>{let s=kS.createConnection({path:_}),i=(C)=>{e.close(C),t(C)};s.once("error",i),s.once("connect",()=>{s.off("error",i),Le(s,e),S({socket:s,stream:e})})})}async function Oe(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),t=await _.read(S);return J_(t)}function ve(_,e){let S=me({Label:"inspect-webkit",...e}),t=new Uint8Array(4);new DataView(t.buffer).setUint32(0,S.length,!1),_.write(t),_.write(S)}function pe(_,e){if(_.Error)throw Error(`lockdown ${e} error: ${String(_.Error)}`);if(_.Request!==e)throw Error(`lockdown expected Request=${e}, got ${String(_.Request)}`)}function mS(_,e,S,t){return new Promise((s,i)=>{e();let C=new Z_,o=zS.connect({socket:_,cert:Buffer.from(S.HostCertificate),key:Buffer.from(S.HostPrivateKey),ca:Buffer.from(S.RootCertificate),rejectUnauthorized:!1}),r=(A)=>{Z(`${t} tls error:`,A),C.close(A),i(A)};o.once("error",r),o.once("secureConnect",()=>{Z(`${t} tls handshake complete`),o.off("error",r);let A=Le(o,C);s({socket:o,stream:C,detach:A})})})}class Q_{socket;stream;pair;udid;deviceID;detach;constructor(_,e,S,t,s,i){this.socket=_,this.stream=e,this.pair=S,this.udid=t,this.deviceID=s,this.detach=i}static async open(_,e){Z("connecting usbmux tunnel to lockdown port",hS);let{socket:S,stream:t,detach:s}=await VS(_.DeviceID,hS),i=new Q_(S,t,e,_.Properties.SerialNumber,_.DeviceID,s);Z("sending QueryType"),ve(S,{Request:"QueryType"});let C=await Oe(t);if(Z("QueryType reply:",C),pe(C,"QueryType"),C.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(C.Type)}`);return i}async startSession(){Z("StartSession with HostID",this.pair.HostID),ve(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let _=await Oe(this.stream);if(Z("StartSession reply:",_),pe(_,"StartSession"),_.EnableSessionSSL){Z("upgrading to TLS");let e=await mS(this.socket,this.detach,this.pair,"lockdown");this.socket=e.socket,this.stream=e.stream,this.detach=e.detach,Z("TLS upgrade complete")}}async startService(_){Z("StartService",_),ve(this.socket,{Request:"StartService",Service:_});let e=await Oe(this.stream);return Z("StartService reply:",e),pe(e,"StartService"),{port:e.Port,enableServiceSSL:Boolean(e.EnableServiceSSL),service:_}}async connectService(_){Z("connecting service tunnel to port",_.port,"ssl=",_.enableServiceSSL);let{socket:e,stream:S,detach:t}=await VS(this.deviceID,_.port);if(!_.enableServiceSSL)return{socket:e,stream:S};let s=await mS(e,t,this.pair,"service");return{socket:s.socket,stream:s.stream}}close(){this.socket.end()}}async function ai(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),t=await _.read(S);return Ci(t)}function Ri(_,e){let S=me(e),t=new Uint8Array(4);new DataView(t.buffer).setUint32(0,S.length,!1),_.write(t),_.write(S)}function Bi(){let _=crypto.getRandomValues(new Uint8Array(16));_[6]=_[6]&15|64,_[8]=_[8]&63|128;let e=Array.from(_,(S)=>S.toString(16).padStart(2,"0")).join("");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}class P_{socket;stream;connectionId=Bi();subscribers=new Set;reading;constructor(_,e){this.socket=_,this.stream=e,this.reading=(async()=>{try{while(!e.closed){let S=await ai(e);for(let t of[...this.subscribers])try{t(S)}catch{}}}catch{}})()}subscribe(_){return this.subscribers.add(_),()=>this.subscribers.delete(_)}waitFor(_,e=5000){return new Promise((S,t)=>{let s=setTimeout(()=>{i(),t(Error(`timeout waiting for ${_} after ${e}ms`))},e),i=this.subscribe((C)=>{if(C.__selector===_)clearTimeout(s),i(),S(C)})})}send(_,e){Ri(this.socket,{__selector:_,__argument:{WIRConnectionIdentifierKey:this.connectionId,...e}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let _=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!_)return[];let S=_.__argument.WIRApplicationDictionaryKey??{},t=[];for(let[s,i]of Object.entries(S)){let C=i;t.push({appId:s,bundleId:C.WIRApplicationBundleIdentifierKey,name:C.WIRApplicationNameKey,isProxy:Boolean(C.WIRIsApplicationProxyKey),isActive:Boolean(C.WIRIsApplicationActiveKey),hostAppId:C.WIRHostApplicationIdentifierKey})}return t}async getListing(_){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:_});let e=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!e)return[];let t=e.__argument.WIRListingKey??{},s=[];for(let i of Object.values(t)){let C=i;s.push({pageId:Number(C.WIRPageIdentifierKey??0),title:C.WIRTitleKey??"",url:C.WIRURLKey??"",type:C.WIRTypeKey??""})}return s}get connection(){return this.connectionId}forwardSocketSetup(_,e,S){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S,WIRAutomaticallyPause:!1})}forwardSocketData(_,e,S,t){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S,WIRSocketDataKey:t})}forwardDidClose(_,e,S){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S})}onMessage(_){return this.subscribe(_)}close(){this.socket.end()}}class Me{ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor(_,e,S,t,s){this.ws=_,this.wi=e,this.appId=S,this.pageId=t,this.senderKey=s}addMessageFilter(_,e){let S=this.filters.get(_);if(!S)this.filters.set(_,S=[]);S.push(e)}callTarget(_,e={}){return new Promise((S,t)=>{let s=--this.requestId;this.adapterRequestMap.set(s,{resolve:S,reject:t}),this.sendRaw(JSON.stringify({id:s,method:_,params:e}))})}fireEventToTools(_,e){this.sendToTools(JSON.stringify({method:_,params:e}))}fireResultToTools(_,e){this.sendToTools(JSON.stringify({id:_,result:e}))}fireErrorToTools(_,e){this.sendToTools(JSON.stringify({id:_,error:{code:e.code??-32000,message:e.message}}))}replyEmpty(_){if(typeof _.id==="number")this.fireResultToTools(_.id,{});return Promise.resolve(null)}async onMessageFromTools(_){let e;try{e=JSON.parse(_)}catch{return}if(typeof e.method==="string"&&typeof e.id==="number")this.toolRequestMap.set(e.id,e.method);let S=`tools::${e.method}`,t=this.filters.get(S),s=e;if(t)for(let i of t){if(!s)break;s=await i(s)}if(s)this.sendRaw(JSON.stringify(s))}async onMessageFromTarget(_){let e;try{e=JSON.parse(_)}catch{return}if(e.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let i=e.params?.targetInfo;if(i?.type==="page"&&!this.innerTargetId)this.innerTargetId=i.targetId,this.flushQueue();return}if(e.method==="Target.didCommitProvisionalTarget"){let i=e.params?.newTargetId;if(typeof i==="string")this.innerTargetId=i;return}if(e.method==="Target.targetDestroyed")return;if(e.method==="Target.dispatchMessageFromTarget"){let i=e.params?.message;if(typeof i==="string")return this.onMessageFromTarget(i);return}if(typeof e.id==="number"&&this.wrappedAckIds.has(e.id)){this.wrappedAckIds.delete(e.id);return}if(typeof e.id==="number"){let i=this.adapterRequestMap.get(e.id);if(i){if(this.adapterRequestMap.delete(e.id),"error"in e&&e.error)i.reject(e.error);else i.resolve(e.result??{});return}let C=this.toolRequestMap.get(e.id);if(C){this.toolRequestMap.delete(e.id);let o=`target::${C}`;if("error"in e&&this.filters.has("target::error"))o="target::error";let r=this.filters.get(o);if(!r)return this.sendToTools(_);let A=e;for(let B of r){if(!A)break;A=await B(A)}if(A)this.sendToTools(JSON.stringify(A));return}return this.sendToTools(_)}let S=`target::${e.method}`,t=this.filters.get(S);if(!t)return this.sendToTools(_);let s=e;for(let i of t){if(!s)break;s=await i(s)}if(s)this.sendToTools(JSON.stringify(s))}sendRaw(_){let e=null;try{e=JSON.parse(_)}catch{}let S=e&&typeof e.method==="string"&&e.method.startsWith("Target.");if(this.innerTargetId&&e&&!S){if(typeof e.id==="number")this.wrappedAckIds.add(e.id);let t={id:e.id,method:"Target.sendMessageToTarget",params:{id:e.id,message:_,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(t));return}if(!this.innerTargetId&&e&&!S){if(this.outgoingQueue.push(_),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let t=this.outgoingQueue;this.outgoingQueue=[];for(let s of t)this.writeFrame(s)}},250);return}this.writeFrame(_)}flushQueue(){if(this.outgoingQueue.length===0)return;let _=this.outgoingQueue;this.outgoingQueue=[];for(let e of _)this.sendRaw(e)}writeFrame(_){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode(_))}sendToTools(_){if(this.ws.readyState===1)this.ws.send(_)}}function Di(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function V(_,e,S){return _.fireResultToTools(e.id,S),Promise.resolve(null)}function Ti(_,e){_.addMessageFilter("tools::Debugger.canSetScriptSource",(S)=>V(_,S,{result:!1})),_.addMessageFilter("tools::Debugger.setBlackboxPatterns",(S)=>V(_,S,{})),_.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(S)=>V(_,S,{})),_.addMessageFilter("target::Debugger.enable",(S)=>{return _.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),_.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(S)}),_.addMessageFilter("target::Debugger.scriptParsed",(S)=>{if(S.params?.scriptId)e.lastScriptEval.value=String(S.params.scriptId);return Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBreakpoint",(S)=>{let t=S.params??{};return S.params={location:t.location,options:t.condition?{condition:t.condition}:{}},Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBreakpointByUrl",(S)=>{let t=S.params??{};return S.params={lineNumber:t.lineNumber,url:t.url,urlRegex:t.urlRegex,columnNumber:t.columnNumber,options:t.condition?{condition:t.condition}:{}},Promise.resolve(S)});for(let S of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])_.addMessageFilter(`tools::Debugger.${S}`,(t)=>Promise.resolve(t));_.addMessageFilter("target::Debugger.paused",(S)=>{let t=S.params?.callFrames;if(Array.isArray(t))for(let s of t){if(s.functionName==null&&typeof s.name==="string")s.functionName=s.name;if(!s.location&&s.sourceCodeLocation)s.location={scriptId:String(s.sourceCodeLocation.scriptId??""),lineNumber:s.sourceCodeLocation.lineNumber??0,columnNumber:s.sourceCodeLocation.columnNumber??0};if(Array.isArray(s.scopeChain)){for(let i of s.scopeChain)if(!i.object&&i.value)i.object=i.value}}return Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBlackboxedRanges",(S)=>V(_,S,{})),_.addMessageFilter("tools::Debugger.setSkipAllPauses",(S)=>V(_,S,{})),_.addMessageFilter("tools::Debugger.setPauseOnExceptions",(S)=>{return Promise.resolve(S)})}function fi(_,e){_.addMessageFilter("target::Runtime.executionContextCreated",(S)=>{let t=S.params?.context;if(t){if(!t.origin)t.origin=t.name??"";let s=Number(t.id),i=!!(t.isPageContext||t.type==="normal");if(Number.isFinite(s)&&s>0){if(!e.pageExecCtx.id||i&&!e.pageExecCtx.isPage)e.pageExecCtx.id=s,e.pageExecCtx.isPage=i}if(t.frameId)t.auxData={frameId:t.frameId,isDefault:!0},delete t.frameId}return Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.evaluate",(S)=>{let t=S.params;if(!t)return Promise.resolve(S);if("silent"in t)t.doNotPauseOnExceptionsAndMuteConsole=!!t.silent,delete t.silent;if("userGesture"in t)t.emulateUserGesture=!!t.userGesture,delete t.userGesture;return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.evaluate",(S)=>{let t=S.result;if(t?.wasThrown){if(t.result)t.result.subtype="error";t.exceptionDetails={exceptionId:0,text:t.result?.description??"Uncaught",url:"",scriptId:e.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:e.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:t.result}}return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.getProperties",(S)=>{let t=S.result;if(!t)return Promise.resolve(S);let s=Array.isArray(t.result)?t.result:Array.isArray(t.properties)?t.properties:null;if(s)t.result=s.filter((i)=>i.isOwn||i.nativeGetter).map((i)=>({...i,isOwn:!0})),delete t.properties;if(Array.isArray(t.internalProperties))t.internalProperties=t.internalProperties.map((i)=>({name:i.name,value:i.value}));return Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.compileScript",(S)=>V(_,S,{scriptId:null,exceptionDetails:null})),_.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(S)=>V(_,S,{names:[]})),_.addMessageFilter("tools::Runtime.terminateExecution",(S)=>V(_,S,{})),_.addMessageFilter("tools::Runtime.getIsolateId",(S)=>V(_,S,{id:"inspect-webkit"})),_.addMessageFilter("tools::Runtime.getHeapUsage",(S)=>V(_,S,{usedSize:0,totalSize:0})),_.addMessageFilter("tools::Runtime.discardConsoleEntries",(S)=>{return S.method="Console.clearMessages",Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(S)=>V(_,S,{})),_.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(S)=>V(_,S,{})),_.addMessageFilter("tools::Runtime.releaseObject",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.releaseObjectGroup",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.callFunctionOn",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.queryObjects",(S)=>Promise.resolve(S)),_.addMessageFilter("target::Debugger.globalObjectCleared",(S)=>{return _.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function Ei(_,e){_.addMessageFilter("tools::Log.startViolationsReport",(S)=>V(_,S,{})),_.addMessageFilter("tools::Log.stopViolationsReport",(S)=>V(_,S,{})),_.addMessageFilter("tools::Log.clear",(S)=>{return S.method="Console.clearMessages",Promise.resolve(S)}),_.addMessageFilter("tools::Log.disable",(S)=>{return S.method="Console.disable",Promise.resolve(S)}),_.addMessageFilter("tools::Log.enable",(S)=>{return S.method="Console.enable",Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.enable",(S)=>{return _.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(S)}),_.addMessageFilter("target::Console.messageAdded",(S)=>{let t=S.params?.message??{},i=(Array.isArray(t.stackTrace)?t.stackTrace:Array.isArray(t.stackTrace?.callFrames)?t.stackTrace.callFrames:[]).map((r)=>({functionName:r.functionName??"",scriptId:r.scriptId??"",url:r.url??"",lineNumber:Number(r.lineNumber??0),columnNumber:Number(r.columnNumber??0)})),C=i.length?{callFrames:i}:void 0,o=Date.now();if(t.source==="console-api"){let r=t.type==="log"?t.level??"log":t.type??"log",A=Fi(r),B=Array.isArray(t.parameters)&&t.parameters.length>0?t.parameters:[{type:"string",value:String(t.text??"")}],R={type:A,args:B,executionContextId:e.pageExecCtx.id||1,timestamp:o,stackTrace:C};return e.lastConsoleApiCalled.value=R,_.fireEventToTools("Runtime.consoleAPICalled",R),Promise.resolve(null)}if(t.source==="javascript"&&t.level==="error")return _.fireEventToTools("Runtime.exceptionThrown",{timestamp:o,exceptionDetails:{exceptionId:0,text:String(t.text??"Uncaught"),lineNumber:Number(t.line??0),columnNumber:Number(t.column??0),scriptId:e.lastScriptEval.value,url:t.url,stackTrace:C,exception:{type:"string",value:String(t.text??"")}}}),Promise.resolve(null);return _.fireEventToTools("Log.entryAdded",{entry:{source:t.source??"other",level:bi(t.level??t.type??"log"),text:String(t.text??""),timestamp:o,url:t.url,lineNumber:t.line,stackTrace:C,networkRequestId:t.networkRequestId}}),Promise.resolve(null)}),_.addMessageFilter("target::Console.messagesCleared",()=>{return _.fireEventToTools("Log.entriesCleared",{}),_.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:e.pageExecCtx.id||1,timestamp:Date.now()}),e.lastConsoleApiCalled.value=null,Promise.resolve(null)}),_.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let S=e.lastConsoleApiCalled.value;if(S)_.fireEventToTools("Runtime.consoleAPICalled",{...S,timestamp:Date.now()});return Promise.resolve(null)}),_.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function Fi(_){switch(_){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return _;default:return"log"}}function bi(_){switch(_){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function Oi(_){let e=new Set;_.addMessageFilter("tools::DOM.enable",(S)=>V(_,S,{})),_.addMessageFilter("tools::DOM.setInspectMode",(S)=>{if(S.method="DOM.setInspectModeEnabled",S.params)S.params.enabled=S.params.mode==="searchForNode",delete S.params.mode,delete S.params.highlightConfig;return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.setInspectedNode",(S)=>{return S.method="Console.addInspectedNode",Promise.resolve(S)}),_.addMessageFilter("tools::DOM.performSearch",(S)=>{if(S.params)S.params={query:S.params.query,caseSensitive:!!S.params.caseSensitive};return Promise.resolve(S)}),_.addMessageFilter("target::DOM.performSearch",(S)=>{let t=S.result?.searchId;if(typeof t==="string")e.add(t);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.discardSearchResults",(S)=>{let t=S.params?.searchId;if(typeof t==="string")e.delete(t);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(S)=>{let t=S.params?.backendNodeIds??[],s=await Promise.all(t.map((i)=>_.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:i}).then((C)=>C.nodeId).catch(()=>i)));return _.fireResultToTools(S.id,{nodeIds:s}),null}),_.addMessageFilter("tools::DOM.getBoxModel",(S)=>{return _.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:S.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),_.addMessageFilter("tools::DOM.getNodeForLocation",async(S)=>{try{let s=(await _.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${S.params?.x},${S.params?.y})`})).result?.objectId;if(!s)return _.fireResultToTools(S.id,{nodeId:0}),null;let i=await _.callTarget("DOM.requestNode",{objectId:s});_.fireResultToTools(S.id,{nodeId:i.nodeId,backendNodeId:i.nodeId})}catch(t){_.fireErrorToTools(S.id,{message:t?.message??String(t)})}return null}),_.addMessageFilter("tools::DOM.resolveNode",(S)=>{if(S.params&&S.params.objectGroup===void 0)delete S.params.objectGroup;return Promise.resolve(S)})}function vi(_){_.addMessageFilter("tools::DOMDebugger.getEventListeners",async(e)=>{try{let S=await _.callTarget("DOM.requestNode",{objectId:e.params?.objectId}),s=((await _.callTarget("DOM.getEventListenersForNode",{nodeId:S.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((i)=>({type:i.type,useCapture:!!i.useCapture,passive:!!i.passive,once:!!i.once,location:i.location,handler:i.handler}));_.fireResultToTools(e.id,{listeners:s})}catch(S){_.fireErrorToTools(e.id,{message:S?.message??String(S)})}return null}),_.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(e)=>V(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(e)=>V(_,e,{})),_.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(e)=>V(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(e)=>V(_,e,{}))}function pi(_,e){_.addMessageFilter("tools::Page.setOverlayMessage",(i)=>{return i.method="Debugger.setOverlayMessage",Promise.resolve(i)}),_.addMessageFilter("tools::Page.configureOverlay",(i)=>{return i.method="Debugger.setOverlayMessage",Promise.resolve(i)}),_.addMessageFilter("tools::Page.getNavigationHistory",async(i)=>{try{let C=await _.callTarget("Runtime.evaluate",{expression:"window.location.href"}),o=await _.callTarget("Runtime.evaluate",{expression:"document.title"});_.fireResultToTools(i.id,{currentIndex:0,entries:[{id:0,url:C.result?.value??"",userTypedURL:C.result?.value??"",title:o.result?.value??"",transitionType:"link"}]})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("target::Page.frameNavigated",(i)=>{return JS(i.params?.frame),Promise.resolve(i)}),_.addMessageFilter("target::Page.getResourceTree",(i)=>{return He(i.result?.frameTree),Promise.resolve(i)}),_.addMessageFilter("tools::Page.getFrameTree",async(i)=>{if(typeof i.id!=="number")return null;try{let C=await _.callTarget("Page.getResourceTree",{}),o=ZS(C?.frameTree);He(o),_.fireResultToTools(i.id,{frameTree:o})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Page.createIsolatedWorld",(i)=>{if(typeof i.id!=="number")return Promise.resolve(null);return V(_,i,{executionContextId:e.pageExecCtx.id||1})});let S=1;_.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(i)=>V(_,i,{identifier:`pptr-${S++}`})),_.addMessageFilter("tools::WebMCP.enable",(i)=>V(_,i,{})),_.addMessageFilter("tools::WebMCP.disable",(i)=>V(_,i,{})),_.addMessageFilter("tools::Page.captureScreenshot",(i)=>{return _.fireErrorToTools(i.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),_.addMessageFilter("tools::Page.startScreencast",(i)=>V(_,i,{})),_.addMessageFilter("tools::Page.stopScreencast",(i)=>V(_,i,{})),_.addMessageFilter("tools::Page.screencastFrameAck",(i)=>V(_,i,{})),_.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(i)=>V(_,i,{}));let t="",s="0.1";_.addMessageFilter("target::Page.frameNavigated",(i)=>{let C=i.params?.frame;if(C)s=C.id??s,t=C.loaderId??t,_.fireEventToTools("Page.frameStartedLoading",{frameId:s}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"init",timestamp:0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"commit",timestamp:0});return Promise.resolve(i)}),_.addMessageFilter("target::Page.domContentEventFired",(i)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"DOMContentLoaded",timestamp:i.params?.timestamp??0}),Promise.resolve(i)}),_.addMessageFilter("target::Page.loadEventFired",(i)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"load",timestamp:i.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"networkAlmostIdle",timestamp:i.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"networkIdle",timestamp:i.params?.timestamp??0}),_.fireEventToTools("Page.frameStoppedLoading",{frameId:s}),Promise.resolve(i)})}function JS(_){if(!_)return;if(!_.securityOrigin)try{_.securityOrigin=new URL(_.url??"").origin}catch{_.securityOrigin="://"}if(!_.mimeType)_.mimeType="text/html"}function He(_){if(!_)return;if(JS(_.frame),Array.isArray(_.childFrames))_.childFrames.forEach(He)}function ZS(_){if(!_)return _;let e={frame:_.frame};if(Array.isArray(_.childFrames))e.childFrames=_.childFrames.map(ZS);return e}function ui(_){_.addMessageFilter("tools::Overlay.enable",(e)=>V(_,e,{})),_.addMessageFilter("tools::Overlay.disable",(e)=>V(_,e,{})),_.addMessageFilter("tools::Overlay.highlightNode",(e)=>{let S=e.params??{};return e.method="DOM.highlightNode",e.params={highlightConfig:S.highlightConfig,nodeId:S.nodeId,objectId:S.objectId},Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightFrame",(e)=>{return e.method="DOM.highlightFrame",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightQuad",(e)=>{return e.method="DOM.highlightQuad",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightRect",(e)=>{return e.method="DOM.highlightRect",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.hideHighlight",(e)=>{return e.method="DOM.hideHighlight",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setInspectMode",(e)=>{let S=e.params??{};return e.method="DOM.setInspectModeEnabled",e.params={enabled:typeof S.mode==="string"&&S.mode!=="none",highlightConfig:S.highlightConfig},Promise.resolve(e)})}function li(_){_.addMessageFilter("tools::Emulation.canEmulate",(e)=>V(_,e,{result:!0})),_.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(e)=>{return e.method="Page.setTouchEmulationEnabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(e)=>{return e.method="Page.setScriptExecutionDisabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setEmulatedMedia",(e)=>{return e.method="Page.setEmulatedMedia",Promise.resolve(e)}),_.addMessageFilter("tools::Rendering.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(e)=>V(_,e,{})),_.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(e)=>V(_,e,{})),_.addMessageFilter("tools::Emulation.setUserAgentOverride",(e)=>{let S=e.params?.userAgent??"";return e.method="Page.overrideUserAgent",e.params={value:S},Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(e)=>V(_,e,{})),_.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(e)=>V(_,e,{}))}function ue(_){switch(_){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return _;case"StyleSheet":return"Stylesheet";default:return"Other"}}function mi(_){if(!_)return _;return{...Vi,..._,hasPostData:_.postData!=null}}function Li(_){if(!_)return _;let e=0,S=_.headers??{},t=S["Content-Length"]??S["content-length"];if(t!=null)e=Number(t)||0;return{...hi,..._,fromDiskCache:_.source==="disk-cache",fromServiceWorker:_.source==="service-worker",encodedDataLength:e}}function Wi(_,e){if(!_)return;for(let[S,t]of Object.entries(e))if(S in _&&!(t in _))_[t]=_[S],delete _[S]}function Pi(_){let e=typeof _.size==="number"?_.size:(_.name?.length??0)+(_.value?.length??0);return{name:_.name,value:_.value,domain:_.domain,path:_.path,expires:_.expires??-1,size:e,httpOnly:!!_.httpOnly,secure:!!_.secure,session:!!_.session,..._.sameSite?{sameSite:_.sameSite}:{}}}function Mi(_,e){let S=new Map,t=1024;for(let[i,C]of Object.entries(wi))_.addMessageFilter(`tools::${i}`,(o)=>{return o.method=C,Promise.resolve(o)});_.addMessageFilter("tools::Network.setCacheDisabled",(i)=>{if(i.params&&"cacheDisabled"in i.params)i.params={disabled:!!i.params.cacheDisabled};return Promise.resolve(i)});let s=async(i)=>{try{let C=await _.callTarget("Page.getCookies",{}),o=Array.isArray(C?.cookies)?C.cookies.map(Pi):[];_.fireResultToTools(i.id,{cookies:o})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Network.getCookies",s),_.addMessageFilter("tools::Network.getAllCookies",s),_.addMessageFilter("tools::Network.setCookie",(i)=>{let C=i.params??{};return i.method="Page.setCookie",i.params={cookie:{name:C.name,value:C.value,domain:C.domain??"",path:C.path??"/",expires:C.expires??-1,session:!1,httpOnly:!!C.httpOnly,secure:!!C.secure,sameSite:C.sameSite??"None"}},Promise.resolve(i)}),_.addMessageFilter("tools::Network.setCookies",async(i)=>{let C=Array.isArray(i.params?.cookies)?i.params.cookies:[];try{await Promise.all(C.map((o)=>_.callTarget("Page.setCookie",{cookie:o}))),_.fireResultToTools(i.id,{})}catch(o){_.fireErrorToTools(i.id,{message:o?.message??String(o)})}return null}),_.addMessageFilter("tools::Network.deleteCookies",(i)=>{let C=i.params??{},o=C.url??`https://${(C.domain??"").replace(/^\./,"")}${C.path??"/"}`;return i.method="Page.deleteCookie",i.params={cookieName:C.name,url:o},Promise.resolve(i)}),_.addMessageFilter("tools::Network.deleteCookie",(i)=>{return i.method="Page.deleteCookie",Promise.resolve(i)}),_.addMessageFilter("tools::Network.clearBrowserCookies",async(i)=>{try{let C=await _.callTarget("Page.getCookies",{}),o=Array.isArray(C?.cookies)?C.cookies:[];await Promise.all(o.map((r)=>_.callTarget("Page.deleteCookie",{cookieName:r.name,url:`${r.secure?"https":"http"}://${(r.domain??"").replace(/^\./,"")}${r.path??"/"}`}).catch(()=>{}))),_.fireResultToTools(i.id,{})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Network.canEmulateNetworkConditions",(i)=>V(_,i,{result:!1})),_.addMessageFilter("tools::Network.setExtraHTTPHeaders",(i)=>V(_,i,{})),_.addMessageFilter("tools::Network.setBlockedURLs",(i)=>V(_,i,{})),_.addMessageFilter("tools::Network.emulateNetworkConditions",(i)=>V(_,i,{})),_.addMessageFilter("tools::Network.setMonitoringXHREnabled",(i)=>V(_,i,{})),_.addMessageFilter("tools::Network.getResponseBody",async(i)=>{let C=i.params?.requestId,o=typeof C==="string"?S.get(C):void 0;if(!o)return _.fireErrorToTools(i.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;try{let r=await _.callTarget("Network.loadResource",{frameId:o.frameId,url:o.url}),A=String(r?.content??""),B=String(r?.mimeType??""),R=/^(text\/|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))/.test(B),a=R?A:Buffer.from(A,"binary").toString("base64");_.fireResultToTools(i.id,{body:a,base64Encoded:!R})}catch(r){_.fireErrorToTools(i.id,{message:`Network.getResponseBody fallback (loadResource) failed: ${r?.message??String(r)}`})}return null});for(let[i,C]of Object.entries(gi))_.addMessageFilter(`target::${i}`,(o)=>{return Wi(o.params,C),Promise.resolve(o)});_.addMessageFilter("target::Network.requestWillBeSent",(i)=>{let C=i.params;if(C){if(Object.assign(C,{...di,...C}),C.request=mi(C.request),C.type=ue(C.type),typeof C.requestId==="string"&&typeof C.request?.url==="string"){if(S.size>=1024){let o=S.keys().next().value;if(o!==void 0)S.delete(o)}S.set(C.requestId,{url:C.request.url,frameId:C.frameId})}}return Promise.resolve(i)}),_.addMessageFilter("target::Network.responseReceived",(i)=>{let C=i.params;if(C)Object.assign(C,{...Hi,...C}),C.response=Li(C.response),C.type=ue(C.type);return Promise.resolve(i)}),_.addMessageFilter("target::Network.loadingFinished",(i)=>{let C=i.params;if(C){let o=C.metrics?.responseBodyBytesReceived;if(typeof o==="number"&&C.encodedDataLength==null)C.encodedDataLength=o;Object.assign(C,{...Ni,...C})}return Promise.resolve(i)}),_.addMessageFilter("target::Network.loadingFailed",(i)=>{let C=i.params;if(C){if(C.type=ue(C.type),!("canceled"in C))C.canceled=!1}return Promise.resolve(i)}),_.addMessageFilter("target::Network.requestServedFromMemoryCache",(i)=>{if(i.method="Network.requestServedFromCache",i.params)i.params={requestId:i.params.requestId};return Promise.resolve(i)}),_.addMessageFilter("tools::Network.loadNetworkResource",async(i)=>{let C=i.params??{};if(!e)return _.fireResultToTools(i.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let o=await _.callTarget("Network.loadResource",{frameId:C.frameId,url:C.url}),r=!!o?.content&&(o?.status??0)>=200&&(o?.status??0)<300,A;if(r)A=`network-resource:${C.frameId??""}:${C.url}`,e.set(A,String(o.content));_.fireResultToTools(i.id,{resource:{success:r,stream:A,httpStatusCode:o?.status,headers:o?.headers,mimeType:o?.mimeType}})}catch(o){_.fireResultToTools(i.id,{resource:{success:!1,netError:2,netErrorName:o?.message??"ERR_FAILED"}})}return null})}function Ui(_){for(let e of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])_.addMessageFilter(`tools::${e}`,(S)=>V(_,S,{}))}function Gi(_){_.addMessageFilter("target::Inspector.inspect",(e)=>{if(e.method="DOM.inspectNodeRequested",e.params)e.params.backendNodeId=e.params.object?.objectId,delete e.params.object,delete e.params.hints;return Promise.resolve(e)})}function Xi(_){if(!_)return _;let e=_.origin==="inspector";return{styleSheetId:_.styleSheetId,frameId:_.frameId,sourceURL:_.sourceURL??"",origin:_.origin==="author"?"regular":_.origin,title:_.title??"",disabled:!!_.disabled,isInline:!!_.isInline,startLine:_.startLine??0,startColumn:_.startColumn??0,isMutable:e,isConstructed:e,length:_.length??0,endLine:_.endLine??0,endColumn:_.endColumn??0,hasSourceURL:!!_.sourceURL}}function Ne(_){if(!_)return _;let e={origin:_.origin==="author"?"regular":_.origin,style:a_(_.style),selectorList:Ki(_.selectorList)};if(_.ruleId?.styleSheetId)e.styleSheetId=_.ruleId.styleSheetId;if(Array.isArray(_.groupings))e.media=_.groupings.map((S)=>({text:S.text,sourceURL:S.sourceURL,source:ki[S.type]}));return e}function ji(_){let e={lastNodeId:0},S=new Map;async function t(s,i){let C=S.get(s);if(!C)try{if(C=(await _.callTarget("CSS.getStyleSheet",{styleSheetId:s}))?.styleSheet,C)S.set(s,C)}catch{}let o=C?.rules??[];for(let r=0;r<o.length;r++)if(qi(o[r]?.style?.range,i))return{styleSheetId:s,ordinal:r};return{styleSheetId:s,ordinal:0}}_.addMessageFilter("tools::CSS.enable",(s)=>{return _.fireResultToTools(s.id,{}),Promise.resolve(null)}),_.addMessageFilter("target::CSS.styleSheetAdded",(s)=>{if(s.params?.header)s.params.header=Xi(s.params.header);return Promise.resolve(s)}),_.addMessageFilter("target::CSS.getInlineStylesForNode",(s)=>{let i=s.result;if(i)s.result={inlineStyle:a_(i.inlineStyle),attributesStyle:a_(i.attributesStyle)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(s)=>{if(typeof s.params?.nodeId==="number")e.lastNodeId=s.params.nodeId;try{let[i,C]=await Promise.all([_.callTarget("CSS.getInlineStylesForNode",{nodeId:s.params.nodeId}),_.callTarget("CSS.getMatchedStylesForNode",{nodeId:s.params.nodeId,includePseudo:!0,includeInherited:!0})]);_.fireResultToTools(s.id,{inlineStyle:a_(i?.inlineStyle),attributesStyle:a_(i?.attributesStyle),matchedCSSRules:Ue(C?.matchedCSSRules),pseudoElements:xi(C?.pseudoElements),inherited:zi(C?.inherited),cssKeyframesRules:[]})}catch(i){_.fireErrorToTools(s.id,{message:i?.message??String(i)})}return null}),_.addMessageFilter("tools::CSS.setStyleTexts",async(s)=>{let i=s.params?.edits??[],C=[];for(let o of i)try{let r=await t(o.styleSheetId,o.range),A=await _.callTarget("CSS.setStyleText",{styleId:r,text:o.text});C.push(a_(A?.style)),S.delete(o.styleSheetId),_.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:o.styleSheetId})}catch{C.push(null)}return _.fireResultToTools(s.id,{styles:C}),null}),_.addMessageFilter("tools::CSS.setRuleSelector",async(s)=>{let{styleSheetId:i,range:C,selector:o}=s.params??{};try{let r=await t(i,C);s.params={ruleId:r,selector:o}}catch(r){return _.fireErrorToTools(s.id,{message:r?.message??String(r)}),null}return s}),_.addMessageFilter("target::CSS.setRuleSelector",(s)=>{if(s.result?.rule)s.result={rule:Ne(s.result.rule)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.addRule",async(s)=>{let i=s.params??{},C=String(i.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let o=await _.callTarget("CSS.addRule",{contextNodeId:e.lastNodeId,styleSheetId:i.styleSheetId,selector:C});_.fireResultToTools(s.id,{rule:Ne(o?.rule)})}catch(o){_.fireErrorToTools(s.id,{message:o?.message??String(o)})}return null})}function Zi(_){_.addMessageFilter("tools::Browser.getVersion",(e)=>V(_,e,Ji)),_.addMessageFilter("tools::Browser.getWindowForTarget",(e)=>V(_,e,{windowId:1,bounds:{}})),_.addMessageFilter("tools::Browser.setWindowBounds",(e)=>V(_,e,{}))}function Yi(_){switch(_){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function _C(_){let e=async(S)=>{let t=S.params??{},s=Yi(t.type);if(!s)return _.fireResultToTools(S.id,{}),null;let i=s==="click"?["mousedown","click","mouseup"]:[s];try{for(let C of i){let o={x:Number(t.x)||0,y:Number(t.y)||0,modifiers:Number(t.modifiers)||0,button:t.button??"none",type:C},r=`(${Qi}, __sd_simulate(${JSON.stringify(o)}))`;await _.callTarget("Runtime.evaluate",{expression:r})}_.fireResultToTools(S.id,{})}catch(C){_.fireErrorToTools(S.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Input.dispatchMouseEvent",e),_.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",e),_.addMessageFilter("tools::Input.setIgnoreInputEvents",(S)=>{return _.fireResultToTools(S.id,{}),Promise.resolve(null)})}function SC(_){let e=new Map;return _.addMessageFilter("tools::IO.read",(S)=>{let t=String(S.params?.handle??""),s=Number(S.params?.size)||eC,i=Number(S.params?.offset)||0,C=e.get(t);if(C===void 0)return _.fireResultToTools(S.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let o=C.slice(i,i+s),r=i+s>=C.length;return _.fireResultToTools(S.id,{data:o,eof:r,base64Encoded:!1}),Promise.resolve(null)}),_.addMessageFilter("tools::IO.close",(S)=>{return e.delete(String(S.params?.handle??"")),_.fireResultToTools(S.id,{}),Promise.resolve(null)}),e}function tC(_){_.addMessageFilter("tools::Accessibility.enable",(e)=>V(_,e,{})),_.addMessageFilter("tools::Accessibility.disable",(e)=>V(_,e,{})),_.addMessageFilter("tools::Accessibility.getPartialAXTree",async(e)=>{let S=e.params??{},t=S.nodeId??S.backendNodeId;if(typeof t!=="number")return _.fireResultToTools(e.id,{nodes:[]}),null;try{let i=(await _.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:t}))?.properties??{},C={nodeId:String(t),ignored:Boolean(i.ignored),role:i.role?{type:"role",value:String(i.role)}:void 0,name:i.label?{type:"computedString",value:String(i.label)}:void 0,backendDOMNodeId:t,childIds:[],properties:[]};_.fireResultToTools(e.id,{nodes:[C]})}catch(s){_.fireResultToTools(e.id,{nodes:[]})}return null})}function CC(_){for(let[S,t]of Object.entries(iC))_.addMessageFilter(`tools::${S}`,(s)=>V(_,s,t));for(let S of sC)for(let t of["enable","disable"])_.addMessageFilter(`tools::${S}.${t}`,(s)=>V(_,s,{}));let e=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[S,t]of e)_.addMessageFilter(`tools::${S}`,(s)=>V(_,s,t))}function QS(_){let e=Di();CC(_);let S=SC(_);Ti(_,e),fi(_,e),Ei(_,e),Oi(_),vi(_),pi(_,e),ui(_),li(_),Mi(_,S),Ui(_),Gi(_),ji(_),Zi(_),_C(_),tC(_)}function _t(_){let e=`${_.reqHost}/devtools/page/${_.id}`;return{description:_.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${e}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${e}`,id:_.id,title:_.title,type:_.type,url:_.url,webSocketDebuggerUrl:`ws://${e}`,faviconUrl:""}}function l_(_){return _.replace(/[&<>"']/g,(e)=>rC[e])}function et(_){return YS.createServer((e,S)=>{let t=new URL(e.url??"/","http://placeholder"),s=e.headers.host??"";if(t.pathname==="/json/version"){let i=typeof _.version==="function"?_.version(s):_.version;return le(S,i)}if(t.pathname==="/json"||t.pathname==="/json/list")return le(S,_.listTargets(s));if(t.pathname==="/json/protocol")return le(S,{});if(t.pathname==="/")return $C(S,_,s);S.writeHead(404,{"content-type":"text/plain"}),S.end("not found")})}function le(_,e,S=200){_.writeHead(S,{"content-type":"application/json; charset=utf-8"}),_.end(JSON.stringify(e))}function $C(_,e,S){let t=e.listTargets(S),s=t.map((r)=>`<li><strong>${l_(r.title||r.url||r.id)}</strong><br><small>${l_(r.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${l_(r.devtoolsFrontendUrl)}</code></li>`).join(""),i=`inspect-webkit${e.brand?` (${e.brand})`:""}`,C=e.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${l_(S)}</code>.</p>`,o=`<!doctype html><meta charset=utf-8><title>${l_(i)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${l_(i)} — ${t.length} target${t.length===1?"":"s"}</h1>`+C+`<ul>${s}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';_.writeHead(200,{"content-type":"text/html; charset=utf-8"}),_.end(o)}function St(_,e,S){return new Promise((t,s)=>{_.once("error",s);let i=e==="localhost"||e==="::1"||e==="127.0.0.1"?"::":e;_.listen({port:S,host:i,ipv6Only:!1},()=>{_.off("error",s),t()})})}function tt(_){let e=!process.env.NO_COLOR&&process.stderr.isTTY===!0,S=(r,A)=>e?`\x1B[${r}m${A}\x1B[0m`:A,t=(r)=>S("1",r),s=(r)=>S("2",r),i=(r)=>S("36",r),C=(r)=>S("32",r),o=`http://${_.host}:${_.port}`;console.error(`${C("●")} ${t(`${_.brand} CDP`)} ${i(o)}`),console.error(` ${s("chrome")} chrome://inspect → ${_.host}:${_.port}`),console.error(` ${s("vscode")} "type": "chrome", "port": ${_.port}`)}function AC(_,e){let S=!!process.env.INSPECT_WEBKIT_DEBUG,t=new Map,s=!1,i=!1,C=!1,o=new Map,r=null;function A(T){if(_.readyState!==1)return;let f=JSON.stringify(T);if(S)console.error(`[browser] tools<< ${f.slice(0,240)}`);_.send(f)}function B(T,f){let b={method:T,params:f};if(r)b.sessionId=r;A(b)}function R(T,f){return{targetId:T.targetId,type:T.type==="page"?"page":T.type||"other",title:T.title||"",url:T.url||"",attached:f,canAccessOpener:!1,browserContextId:"default"}}function a(T){for(let f of t.values())if(f.targetId===T)return!0;return!1}function p(T,f){let b=e.listEntries().find((D)=>D.targetId===T);if(!b)return null;let y=crypto.randomUUID(),$=(D)=>{let w;try{w=JSON.parse(D)}catch{return}w.sessionId=y,A(w)},n=e.createPageSession(T,$);if(!n)return null;return t.set(y,{handle:n,targetId:T}),B("Target.attachedToTarget",{sessionId:y,targetInfo:R(b,!0),waitingForDebugger:f}),{sessionId:y,entry:b}}function O(T){let f=t.get(T);if(!f)return!1;try{f.handle.close()}catch{}return t.delete(T),B("Target.detachedFromTarget",{sessionId:T,targetId:f.targetId}),!0}function u(){let T=e.listEntries(),f=new Set;for(let b of T){f.add(b.targetId);let y=o.get(b.targetId);if(!y){if(o.set(b.targetId,b),s)B("Target.targetCreated",{targetInfo:R(b,a(b.targetId))});if(i&&!a(b.targetId))p(b.targetId,C)}else if(y.title!==b.title||y.url!==b.url){if(o.set(b.targetId,b),s)B("Target.targetInfoChanged",{targetInfo:R(b,a(b.targetId))})}}for(let b of[...o.keys()]){if(f.has(b))continue;o.delete(b);for(let[y,$]of t)if($.targetId===b)O(y);if(s)B("Target.targetDestroyed",{targetId:b})}}let v=setInterval(u,e.refreshMs??1000);function F(T,f){if(T)f.sessionId=T;A(f)}function E(T,f){let{id:b,method:y}=T,$=T.params??{};switch(y){case"Browser.getVersion":return F(f,{id:b,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!r)r=crypto.randomUUID();return F(f,{id:b,result:{sessionId:r}})}case"Target.setDiscoverTargets":{if(s=!!$.discover,s)for(let n of e.listEntries())o.set(n.targetId,n),B("Target.targetCreated",{targetInfo:R(n,a(n.targetId))});if(typeof b==="number")F(f,{id:b,result:{}});return}case"Target.getTargets":{let n=e.listEntries().map((D)=>R(D,a(D.targetId)));return F(f,{id:b,result:{targetInfos:n}})}case"Target.setAutoAttach":{if(i=!!$.autoAttach,C=!!$.waitForDebuggerOnStart,i){for(let n of e.listEntries())if(!a(n.targetId))p(n.targetId,C)}if(typeof b==="number")F(f,{id:b,result:{}});return}case"Target.attachToTarget":{for(let[D,w]of t)if(w.targetId===$.targetId){if(typeof b==="number")F(f,{id:b,result:{sessionId:D}});return}let n=p($.targetId,!1);if(!n){if(typeof b==="number")F(f,{id:b,error:{code:-32000,message:"No target with given id found"}});return}if(typeof b==="number")F(f,{id:b,result:{sessionId:n.sessionId}});return}case"Target.detachFromTarget":{if(O($.sessionId),typeof b==="number")F(f,{id:b,result:{}});return}case"Target.sendMessageToTarget":{let n=t.get($.sessionId);if(n)n.handle.onMessageFromTools($.message);if(typeof b==="number")F(f,{id:b,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof b==="number")F(f,{id:b,result:{}});return;case"Target.getBrowserContexts":{if(typeof b==="number")F(f,{id:b,result:{browserContextIds:["default"]}});return}}if(typeof b==="number")F(f,{id:b,error:{code:-32601,message:`Browser-level method '${y??"?"}' not implemented`}})}_.on("message",(T,f)=>{let b=f?new TextDecoder().decode(T):T.toString();if(S)console.error(`[browser] tools>> ${b.slice(0,240)}`);let y;try{y=JSON.parse(b)}catch{return}if(typeof y.sessionId==="string"){if(y.sessionId===r){let D={...y};return delete D.sessionId,E(D,y.sessionId)}let $=t.get(y.sessionId);if(!$){if(typeof y.id==="number")A({id:y.id,sessionId:y.sessionId,error:{code:-32000,message:`Session ${y.sessionId} not found`}});return}let n={...y};delete n.sessionId,$.handle.onMessageFromTools(JSON.stringify(n));return}E(y,void 0)}),_.on("close",()=>{clearInterval(v);for(let[,T]of t)try{T.handle.close()}catch{}t.clear()})}async function yC(_={}){let e=_.port??9222,S=_.host??"localhost",t=await nC();if(t.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let s=new Map,i=new WeakMap,C=new Map;for(let v of t)C.set(v,[]),i.set(v,new Set),v.wi.subscribe((F)=>{let{__selector:E,__argument:T}=F;if(!E||!T)return;if(E==="_rpc_reportConnectedApplicationList:"){let f=T.WIRApplicationDictionaryKey??{},b=Object.entries(f).map(([$,n])=>({appId:$,bundleId:n.WIRApplicationBundleIdentifierKey,name:n.WIRApplicationNameKey??n.WIRApplicationBundleIdentifierKey??$,isProxy:Boolean(n.WIRIsApplicationProxyKey)}));C.set(v,b);let y=i.get(v);for(let $ of b){if($.isProxy||y.has($.appId))continue;y.add($.appId),v.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$.appId})}}else if(E==="_rpc_applicationConnected:"){let f=T,b=C.get(v)??[];if(!b.find((y)=>y.appId===f.WIRApplicationIdentifierKey))b.push({appId:f.WIRApplicationIdentifierKey,bundleId:f.WIRApplicationBundleIdentifierKey,name:f.WIRApplicationNameKey??f.WIRApplicationBundleIdentifierKey,isProxy:Boolean(f.WIRIsApplicationProxyKey)}),C.set(v,b);if(!f.WIRIsApplicationProxyKey){let y=i.get(v);if(!y.has(f.WIRApplicationIdentifierKey))y.add(f.WIRApplicationIdentifierKey),v.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:f.WIRApplicationIdentifierKey})}}else if(E==="_rpc_applicationDisconnected:"){let f=C.get(v)??[];C.set(v,f.filter((b)=>b.appId!==T.WIRApplicationIdentifierKey)),s.delete(`${v.id}:${T.WIRApplicationIdentifierKey}`)}else if(E==="_rpc_applicationSentListing:"){let f=T.WIRApplicationIdentifierKey,b=T.WIRListingKey??{},y=new Map;for(let[$,n]of Object.entries(b))y.set($,{pageId:Number(n.WIRPageIdentifierKey??0),title:n.WIRTitleKey??"",url:n.WIRURLKey??"",type:n.WIRTypeKey??""});s.set(`${v.id}:${f}`,y)}}),v.wi.send("_rpc_reportIdentifier:",{}),v.wi.send("_rpc_getConnectedApplications:",{});let o=setInterval(()=>{for(let v of t){let F=C.get(v)??[];for(let E of F){if(E.isProxy)continue;v.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:E.appId})}}},oC),r=new Map;function A(){let v=[];for(let F of t){let E=C.get(F)??[];for(let T of E){if(T.isProxy)continue;let f=s.get(`${F.id}:${T.appId}`);if(!f)continue;for(let b of f.values())v.push({targetId:`${F.id}:${T.appId}:${b.pageId}`,source:F,appId:T.appId,appName:T.name,bundleId:T.bundleId,pageId:b.pageId,title:b.title,url:b.url,type:b.type})}}return v}let B=crypto.randomUUID(),R=et({brand:"",version:(v)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${v}/devtools/browser/${B}`}),listTargets:(v)=>A().map((F)=>_t({reqHost:v,id:F.targetId,description:`${F.source.label}${F.bundleId?` (${F.bundleId})`:""}`,title:F.title||F.appName,url:/^https?:/i.test(F.url)?F.url:"about:blank",type:WS(F.type)}))}),a=new jS.default({noServer:!0}),p=`/devtools/browser/${B}`;R.on("upgrade",(v,F,E)=>{let T=new URL(v.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${T.pathname}`),T.pathname===p){a.handleUpgrade(v,F,E,(b)=>{AC(b,{listEntries:()=>A().map((y)=>({targetId:y.targetId,type:WS(y.type),title:y.title||y.appName,url:y.url})),createPageSession:(y,$)=>{let n=A().find((D)=>D.targetId===y);if(!n)return null;return O(n,$)}})});return}if(!T.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${T.pathname}`),F.destroy();return}let f=decodeURIComponent(T.pathname.slice(15));a.handleUpgrade(v,F,E,(b)=>{u(b,f)})});function O(v,F){let E=crypto.randomUUID(),f=new Me({readyState:1,send:($)=>F($)},v.source.wi,v.appId,v.pageId,E);QS(f),r.set(E,f);let b=!!process.env.INSPECT_WEBKIT_DEBUG,y=v.source.wi.subscribe(($)=>{if($.__selector!=="_rpc_applicationSentData:")return;let n=$.__argument;if(!n)return;if(n.WIRDestinationKey&&n.WIRDestinationKey!==E)return;if(n.WIRApplicationIdentifierKey!==v.appId)return;if(n.WIRPageIdentifierKey!==void 0&&Number(n.WIRPageIdentifierKey)!==v.pageId)return;let D=n.WIRMessageDataKey??n.WIRSocketDataKey;if(!D)return;let w=typeof D==="string"?D:new TextDecoder().decode(D);if(b)console.error(`[cdp] target>> ${w.slice(0,240)}`);f.onMessageFromTarget(w)});return v.source.wi.forwardSocketSetup(v.appId,v.pageId,E),console.error(`# devtools attached: ${v.source.label} :: ${v.appName} :: ${v.title||v.url}`),{onMessageFromTools($){if(b)console.error(`[cdp] tools>> ${$.slice(0,300)}`);f.onMessageFromTools($)},close(){y();try{f.wi.forwardDidClose(f.appId,f.pageId,f.senderKey)}catch{}r.delete(f.senderKey)}}}function u(v,F){let E=A().find((f)=>f.targetId===F);if(!E){console.error(`# ws closed: unknown target ${F} (known: ${A().map((f)=>f.targetId).join(", ")||"none"})`),v.close(1011,`unknown target ${F}`);return}let T=O(E,(f)=>{if(v.readyState===1)v.send(f)});v.on("message",(f,b)=>{let y=b?new TextDecoder().decode(f):f.toString();T.onMessageFromTools(y)}),v.on("close",()=>T.close())}return await St(R,S,e),tt({brand:"safari",host:S,port:e}),{stop(){clearInterval(o),a.close(),R.close();for(let v of t)try{v.wi.close(),v.lockdown?.close()}catch{}},getTargets(){return A()}}}async function nC(){let[_,e]=await Promise.all([aC(),BC()]);return[..._,...e]}async function aC(){let _=[];try{_=await XS()}catch(S){return console.error(`warn: usbmux: ${S.message}`),[]}return(await Promise.all(_.map(RC))).filter((S)=>S!==null)}async function RC(_){try{let e=await IS(_.Properties.SerialNumber),S=await Q_.open(_,e);await S.startSession();let t=await S.startService("com.apple.webinspector"),{socket:s,stream:i}=await S.connectService(t),C=new P_(s,i);return await C.reportIdentifier(),{kind:"device",id:`device:${_.Properties.SerialNumber}`,label:`device:${_.Properties.SerialNumber.slice(0,8)}`,wi:C,lockdown:S}}catch(e){return console.error(`warn: device ${_.Properties.SerialNumber}: ${e.message}`),null}}async function BC(){let _=[];try{_=await KS()}catch(S){return console.error(`warn: simulator discovery: ${S.message}`),[]}return(await Promise.all(_.map(cC))).filter((S)=>S!==null)}async function cC(_){try{let{socket:e,stream:S}=await xS(_.socketPath),t=new P_(e,S);return await t.reportIdentifier(),{kind:"simulator",id:`sim:${_.pid}`,label:`sim:${_.pid}`,wi:t}}catch(e){return console.error(`warn: simulator ${_.socketPath}: ${e.message}`),null}}function WS(_){switch(_){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class st{url;ws;handlers=new Set;openPromise;constructor(_){this.url=_,this.ws=new LS(_),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((e,S)=>{this.ws.once("open",()=>e()),this.ws.once("error",(t)=>S(t))}),this.ws.on("message",(e,S)=>{let t=S?new TextDecoder().decode(e):e.toString();for(let s of this.handlers)s(t)})}ready(){return this.openPromise}onFrame(_){return this.handlers.add(_),()=>this.handlers.delete(_)}forwardSocketData(_,e,S,t){if(this.ws.readyState!==LS.OPEN)return;this.ws.send(new TextDecoder().decode(t))}forwardDidClose(_,e,S){}close(){try{this.ws.close()}catch{}}}async function DC(_){let e=_.port??9223,S=_.host??"localhost",{upstreams:t}=_,s=et({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(o)=>t.map((r)=>_t({reqHost:o,id:encodeURIComponent(r.url),description:r.label??"bun",title:r.label??r.url,url:r.url,type:"node"}))}),i=new jS.default({noServer:!0});s.on("upgrade",(o,r,A)=>{let B=new URL(o.url??"/","http://placeholder");if(!B.pathname.startsWith("/devtools/page/")){r.destroy();return}let R=decodeURIComponent(B.pathname.slice(15)),a=t.find((p)=>p.url===R);if(!a){r.destroy();return}i.handleUpgrade(o,r,A,(p)=>{C(p,a).catch((O)=>{console.error(`# bun attach failed: ${O.message}`);try{p.close(1011,O.message)}catch{}})})});async function C(o,r){let A=!!process.env.INSPECT_WEBKIT_DEBUG,B=new st(r.url);await B.ready();let R=crypto.randomUUID(),a=new Me(o,B,"bun",0,R);QS(a);let p=B.onFrame((O)=>{if(A)console.error(`[bun] target>> ${O.slice(0,240)}`);a.onMessageFromTarget(O)});o.on("message",(O,u)=>{let v=u?new TextDecoder().decode(O):O.toString();if(A)console.error(`[bun] tools>> ${v.slice(0,300)}`);a.onMessageFromTools(v)}),o.on("close",()=>{p(),B.close()}),console.error(`# devtools attached: ${r.label??r.url}`)}return await St(s,S,e),tt({brand:"bun",host:S,port:e}),{stop(){i.close(),s.close()},getTargets(){return t.slice()}}}async function it(){return XS()}async function TC(){let[_,e]=await Promise.all([fC(),EC()]);return[..._.flat(),...e.flat()]}async function fC(){let _=await it();return Promise.all(_.map(FC))}async function EC(){let _=await KS();return Promise.all(_.map(bC))}async function FC(_){let e=null;try{return e=await OC(_),await Ct(e.client,{source:"device",udid:_.Properties.SerialNumber,deviceID:_.DeviceID})}catch(S){return console.error(`warn: ${_.Properties.SerialNumber}: ${S.message}`),[]}finally{e?.client.close(),e?.lockdown.close()}}async function bC(_){let e=null;try{let{socket:S,stream:t}=await xS(_.socketPath);return e=new P_(S,t),await e.reportIdentifier(),await Ct(e,{source:"simulator",udid:`sim:${_.pid}`})}catch(S){return console.error(`warn: simulator (${_.socketPath}): ${S.message}`),[]}finally{e?.close()}}async function OC(_){let e=await IS(_.Properties.SerialNumber),S=await Q_.open(_,e);await S.startSession();let t=await S.startService("com.apple.webinspector"),{socket:s,stream:i}=await S.connectService(t),C=new P_(s,i);return await C.reportIdentifier(),{client:C,lockdown:S}}async function Ct(_,e){let S=(await _.listApplications()).filter((i)=>!i.isProxy),t=await Promise.all(S.map((i)=>_.getListing(i.appId))),s=[];for(let i=0;i<S.length;i++){let C=S[i];for(let o of t[i])s.push({...e,appId:C.appId,appName:C.name??C.bundleId??C.appId,bundleId:C.bundleId,pageId:o.pageId,title:o.title,url:o.url,type:o.type})}return s}var Is,ks,HS,Ks,xs,js,Js,r_=(_,e,S)=>{var t=_!=null&&typeof _==="object";if(t){var s=e?js??=new WeakMap:Js??=new WeakMap,i=s.get(_);if(i)return i}S=_!=null?Is(ks(_)):{};let C=e||!_||!_.__esModule?HS(S,"default",{value:_,enumerable:!0}):S;for(let o of Ks(_))if(!xs.call(C,o))HS(C,o,{get:zs.bind(_,o),enumerable:!0});if(t)s.set(_,C);return C},j=(_,e)=>()=>(e||_((e={exports:{}}).exports,e),e.exports),k,$_,j_,Zs,L_,W_,PS,MS,Qs,Ve,he,Ys,US,_i,ei=`<?xml version="1.0" encoding="UTF-8"?>
|
|
14
14
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
15
15
|
<plist version="1.0">
|
|
16
|
-
`,
|
|
16
|
+
`,Si=`
|
|
17
17
|
</plist>
|
|
18
|
-
`,
|
|
18
|
+
`,ri=1,$i=8,Ai="/var/run/usbmuxd",hS=62078,Z=(..._)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",..._)},C$,r$,$$,A$,o$,y$,ci,jS,LS,wi,gi,di,Hi,Ni,Vi,hi,qi=(_,e)=>!!_&&!!e&&_.startLine===e.startLine&&_.endLine===e.endLine&&_.startColumn===e.startColumn&&_.endColumn===e.endColumn,Ii=(_)=>_&&{name:_.name,value:_.value,text:_.text,implicit:_.implicit,parsedOk:_.parsedOk!==!1,important:!!_.priority,disabled:_.status==="disabled",range:_.range},a_=(_)=>_&&{styleSheetId:_.styleId?.styleSheetId,cssText:_.cssText,range:_.range,shorthandEntries:_.shorthandEntries??[],cssProperties:Array.isArray(_.cssProperties)?_.cssProperties.map(Ii):[]},ki,Ki=(_)=>_&&{text:_.text,selectors:Array.isArray(_.selectors)?_.selectors.map((e)=>({text:e.text,range:e.range??_.range})):[]},Ue=(_)=>Array.isArray(_)?_.map((e)=>({matchingSelectors:e.matchingSelectors,rule:Ne(e.rule)})):[],xi=(_)=>Array.isArray(_)?_.map((e)=>({pseudoType:e.pseudoId,matches:Ue(e.matches)})):[],zi=(_)=>Array.isArray(_)?_.map((e)=>({inlineStyle:a_(e.inlineStyle),matchedCSSRules:Ue(e.matchedCSSRules)})):[],Ji,Qi=`
|
|
19
19
|
function __sd_simulate(p){
|
|
20
20
|
var el = document.elementFromPoint(p.x, p.y);
|
|
21
21
|
if (!el) return false;
|
|
@@ -30,38 +30,49 @@ function __sd_simulate(p){
|
|
|
30
30
|
});
|
|
31
31
|
el.dispatchEvent(ev);
|
|
32
32
|
return true;
|
|
33
|
-
}`,Ti=65536,Fi,bi,pi,li=1500;var qS=oe(()=>{rs=Object.create,$s=Object.getPrototypeOf,nS=Object.defineProperty,As=Object.getOwnPropertyNames,os=Object.prototype.hasOwnProperty;K=Cs(import.meta.url),C_=j((_,e)=>{var S=["nodebuffer","arraybuffer","fragments"],t=typeof Blob<"u";if(t)S.push("blob");e.exports={BINARY_TYPES:S,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:t,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),k_=j((_,e)=>{var{EMPTY_BUFFER:S}=C_(),t=Buffer[Symbol.species];function s(A,B){if(A.length===0)return S;if(A.length===1)return A[0];let R=Buffer.allocUnsafe(B),a=0;for(let u=0;u<A.length;u++){let v=A[u];R.set(v,a),a+=v.length}if(a<B)return new t(R.buffer,R.byteOffset,a);return R}function i(A,B,R,a,u){for(let v=0;v<u;v++)R[a+v]=A[v]^B[v&3]}function C(A,B){for(let R=0;R<A.length;R++)A[R]^=B[R&3]}function o(A){if(A.length===A.buffer.byteLength)return A.buffer;return A.buffer.slice(A.byteOffset,A.byteOffset+A.length)}function r(A){if(r.readOnly=!0,Buffer.isBuffer(A))return A;let B;if(A instanceof ArrayBuffer)B=new t(A);else if(ArrayBuffer.isView(A))B=new t(A.buffer,A.byteOffset,A.byteLength);else B=Buffer.from(A),r.readOnly=!1;return B}if(e.exports={concat:s,mask:i,toArrayBuffer:o,toBuffer:r,unmask:C},!process.env.WS_NO_BUFFER_UTIL)try{let A=(()=>{throw Error("Cannot require module bufferutil")})();e.exports.mask=function(B,R,a,u,v){if(v<48)i(B,R,a,u,v);else A.mask(B,R,a,u,v)},e.exports.unmask=function(B,R){if(B.length<32)C(B,R);else A.unmask(B,R)}}catch(A){}}),Rs=j((_,e)=>{var S=Symbol("kDone"),t=Symbol("kRun");class s{constructor(i){this[S]=()=>{this.pending--,this[t]()},this.concurrency=i||1/0,this.jobs=[],this.pending=0}add(i){this.jobs.push(i),this[t]()}[t](){if(this.pending===this.concurrency)return;if(this.jobs.length){let i=this.jobs.shift();this.pending++,i(this[S])}}}e.exports=s}),N_=j((_,e)=>{var S=K("zlib"),t=k_(),s=Rs(),{kStatusCode:i}=C_(),C=Buffer[Symbol.species],o=Buffer.from([0,0,255,255]),r=Symbol("permessage-deflate"),A=Symbol("total-length"),B=Symbol("callback"),R=Symbol("buffers"),a=Symbol("error"),u;class v{constructor(E){if(this._options=E||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!u){let T=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;u=new s(T)}}static get extensionName(){return"permessage-deflate"}offer(){let E={};if(this._options.serverNoContextTakeover)E.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)E.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)E.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)E.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)E.client_max_window_bits=!0;return E}accept(E){return E=this.normalizeParams(E),this.params=this._isServer?this.acceptAsServer(E):this.acceptAsClient(E),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let E=this._deflate[B];if(this._deflate.close(),this._deflate=null,E)E(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(E){let T=this._options,f=E.find((b)=>{if(T.serverNoContextTakeover===!1&&b.server_no_context_takeover||b.server_max_window_bits&&(T.serverMaxWindowBits===!1||typeof T.serverMaxWindowBits==="number"&&T.serverMaxWindowBits>b.server_max_window_bits)||typeof T.clientMaxWindowBits==="number"&&!b.client_max_window_bits)return!1;return!0});if(!f)throw Error("None of the extension offers can be accepted");if(T.serverNoContextTakeover)f.server_no_context_takeover=!0;if(T.clientNoContextTakeover)f.client_no_context_takeover=!0;if(typeof T.serverMaxWindowBits==="number")f.server_max_window_bits=T.serverMaxWindowBits;if(typeof T.clientMaxWindowBits==="number")f.client_max_window_bits=T.clientMaxWindowBits;else if(f.client_max_window_bits===!0||T.clientMaxWindowBits===!1)delete f.client_max_window_bits;return f}acceptAsClient(E){let T=E[0];if(this._options.clientNoContextTakeover===!1&&T.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!T.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")T.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&T.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return T}normalizeParams(E){return E.forEach((T)=>{Object.keys(T).forEach((f)=>{let b=T[f];if(b.length>1)throw Error(`Parameter "${f}" must have only a single value`);if(b=b[0],f==="client_max_window_bits"){if(b!==!0){let y=+b;if(!Number.isInteger(y)||y<8||y>15)throw TypeError(`Invalid value for parameter "${f}": ${b}`);b=y}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${f}": ${b}`)}else if(f==="server_max_window_bits"){let y=+b;if(!Number.isInteger(y)||y<8||y>15)throw TypeError(`Invalid value for parameter "${f}": ${b}`);b=y}else if(f==="client_no_context_takeover"||f==="server_no_context_takeover"){if(b!==!0)throw TypeError(`Invalid value for parameter "${f}": ${b}`)}else throw Error(`Unknown parameter "${f}"`);T[f]=b})}),E}decompress(E,T,f){u.add((b)=>{this._decompress(E,T,(y,$)=>{b(),f(y,$)})})}compress(E,T,f){u.add((b)=>{this._compress(E,T,(y,$)=>{b(),f(y,$)})})}_decompress(E,T,f){let b=this._isServer?"client":"server";if(!this._inflate){let y=`${b}_max_window_bits`,$=typeof this.params[y]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[y];this._inflate=S.createInflateRaw({...this._options.zlibInflateOptions,windowBits:$}),this._inflate[r]=this,this._inflate[A]=0,this._inflate[R]=[],this._inflate.on("error",F),this._inflate.on("data",p)}if(this._inflate[B]=f,this._inflate.write(E),T)this._inflate.write(o);this._inflate.flush(()=>{let y=this._inflate[a];if(y){this._inflate.close(),this._inflate=null,f(y);return}let $=t.concat(this._inflate[R],this._inflate[A]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[A]=0,this._inflate[R]=[],T&&this.params[`${b}_no_context_takeover`])this._inflate.reset();f(null,$)})}_compress(E,T,f){let b=this._isServer?"server":"client";if(!this._deflate){let y=`${b}_max_window_bits`,$=typeof this.params[y]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[y];this._deflate=S.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:$}),this._deflate[A]=0,this._deflate[R]=[],this._deflate.on("data",O)}this._deflate[B]=f,this._deflate.write(E),this._deflate.flush(S.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let y=t.concat(this._deflate[R],this._deflate[A]);if(T)y=new C(y.buffer,y.byteOffset,y.length-4);if(this._deflate[B]=null,this._deflate[A]=0,this._deflate[R]=[],T&&this.params[`${b}_no_context_takeover`])this._deflate.reset();f(null,y)})}}e.exports=v;function O(E){this[R].push(E),this[A]+=E.length}function p(E){if(this[A]+=E.length,this[r]._maxPayload<1||this[A]<=this[r]._maxPayload){this[R].push(E);return}this[a]=RangeError("Max payload size exceeded"),this[a].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[a][i]=1009,this.removeListener("data",p),this.reset()}function F(E){if(this[r]._inflate=null,this[a]){this[B](this[a]);return}E[i]=1007,this[B](E)}}),V_=j((_,e)=>{var{isUtf8:S}=K("buffer"),{hasBlob:t}=C_(),s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function i(r){return r>=1000&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3000&&r<=4999}function C(r){let A=r.length,B=0;while(B<A)if((r[B]&128)===0)B++;else if((r[B]&224)===192){if(B+1===A||(r[B+1]&192)!==128||(r[B]&254)===192)return!1;B+=2}else if((r[B]&240)===224){if(B+2>=A||(r[B+1]&192)!==128||(r[B+2]&192)!==128||r[B]===224&&(r[B+1]&224)===128||r[B]===237&&(r[B+1]&224)===160)return!1;B+=3}else if((r[B]&248)===240){if(B+3>=A||(r[B+1]&192)!==128||(r[B+2]&192)!==128||(r[B+3]&192)!==128||r[B]===240&&(r[B+1]&240)===128||r[B]===244&&r[B+1]>143||r[B]>244)return!1;B+=4}else return!1;return!0}function o(r){return t&&typeof r==="object"&&typeof r.arrayBuffer==="function"&&typeof r.type==="string"&&typeof r.stream==="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}if(e.exports={isBlob:o,isValidStatusCode:i,isValidUTF8:C,tokenChars:s},S)e.exports.isValidUTF8=function(r){return r.length<24?C(r):S(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=(()=>{throw Error("Cannot require module utf-8-validate")})();e.exports.isValidUTF8=function(A){return A.length<32?C(A):r(A)}}catch(r){}}),fS=j((_,e)=>{var{Writable:S}=K("stream"),t=N_(),{BINARY_TYPES:s,EMPTY_BUFFER:i,kStatusCode:C,kWebSocket:o}=C_(),{concat:r,toArrayBuffer:A,unmask:B}=k_(),{isValidStatusCode:R,isValidUTF8:a}=V_(),u=Buffer[Symbol.species],v=0,O=1,p=2,F=3,E=4,T=5,f=6;class b extends S{constructor(y={}){super();this._allowSynchronousEvents=y.allowSynchronousEvents!==void 0?y.allowSynchronousEvents:!0,this._binaryType=y.binaryType||s[0],this._extensions=y.extensions||{},this._isServer=!!y.isServer,this._maxPayload=y.maxPayload|0,this._skipUTF8Validation=!!y.skipUTF8Validation,this[o]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=v}_write(y,$,n){if(this._opcode===8&&this._state==v)return n();this._bufferedBytes+=y.length,this._buffers.push(y),this.startLoop(n)}consume(y){if(this._bufferedBytes-=y,y===this._buffers[0].length)return this._buffers.shift();if(y<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new u(n.buffer,n.byteOffset+y,n.length-y),new u(n.buffer,n.byteOffset,y)}let $=Buffer.allocUnsafe(y);do{let n=this._buffers[0],D=$.length-y;if(y>=n.length)$.set(this._buffers.shift(),D);else $.set(new Uint8Array(n.buffer,n.byteOffset,y),D),this._buffers[0]=new u(n.buffer,n.byteOffset+y,n.length-y);y-=n.length}while(y>0);return $}startLoop(y){this._loop=!0;do switch(this._state){case v:this.getInfo(y);break;case O:this.getPayloadLength16(y);break;case p:this.getPayloadLength64(y);break;case F:this.getMask();break;case E:this.getData(y);break;case T:case f:this._loop=!1;return}while(this._loop);if(!this._errored)y()}getInfo(y){if(this._bufferedBytes<2){this._loop=!1;return}let $=this.consume(2);if(($[0]&48)!==0){let D=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");y(D);return}let n=($[0]&64)===64;if(n&&!this._extensions[t.extensionName]){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");y(D);return}if(this._fin=($[0]&128)===128,this._opcode=$[0]&15,this._payloadLength=$[1]&127,this._opcode===0){if(n){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");y(D);return}if(!this._fragmented){let D=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");y(D);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let D=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");y(D);return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let D=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");y(D);return}if(n){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");y(D);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let D=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");y(D);return}}else{let D=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");y(D);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=($[1]&128)===128,this._isServer){if(!this._masked){let D=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");y(D);return}}else if(this._masked){let D=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");y(D);return}if(this._payloadLength===126)this._state=O;else if(this._payloadLength===127)this._state=p;else this.haveLength(y)}getPayloadLength16(y){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(y)}getPayloadLength64(y){if(this._bufferedBytes<8){this._loop=!1;return}let $=this.consume(8),n=$.readUInt32BE(0);if(n>Math.pow(2,21)-1){let D=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");y(D);return}this._payloadLength=n*Math.pow(2,32)+$.readUInt32BE(4),this.haveLength(y)}haveLength(y){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let $=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");y($);return}}if(this._masked)this._state=F;else this._state=E}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=E}getData(y){let $=i;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if($=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)B($,this._mask)}if(this._opcode>7){this.controlMessage($,y);return}if(this._compressed){this._state=T,this.decompress($,y);return}if($.length)this._messageLength=this._totalPayloadLength,this._fragments.push($);this.dataMessage(y)}decompress(y,$){this._extensions[t.extensionName].decompress(y,this._fin,(D,w)=>{if(D)return $(D);if(w.length){if(this._messageLength+=w.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let d=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");$(d);return}this._fragments.push(w)}if(this.dataMessage($),this._state===v)this.startLoop($)})}dataMessage(y){if(!this._fin){this._state=v;return}let $=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let D;if(this._binaryType==="nodebuffer")D=r(n,$);else if(this._binaryType==="arraybuffer")D=A(r(n,$));else if(this._binaryType==="blob")D=new Blob(n);else D=n;if(this._allowSynchronousEvents)this.emit("message",D,!0),this._state=v;else this._state=f,setImmediate(()=>{this.emit("message",D,!0),this._state=v,this.startLoop(y)})}else{let D=r(n,$);if(!this._skipUTF8Validation&&!a(D)){let w=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");y(w);return}if(this._state===T||this._allowSynchronousEvents)this.emit("message",D,!1),this._state=v;else this._state=f,setImmediate(()=>{this.emit("message",D,!1),this._state=v,this.startLoop(y)})}}controlMessage(y,$){if(this._opcode===8){if(y.length===0)this._loop=!1,this.emit("conclude",1005,i),this.end();else{let n=y.readUInt16BE(0);if(!R(n)){let w=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");$(w);return}let D=new u(y.buffer,y.byteOffset+2,y.length-2);if(!this._skipUTF8Validation&&!a(D)){let w=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");$(w);return}this._loop=!1,this.emit("conclude",n,D),this.end()}this._state=v;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",y),this._state=v;else this._state=f,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",y),this._state=v,this.startLoop($)})}createError(y,$,n,D,w){this._loop=!1,this._errored=!0;let d=new y(n?`Invalid WebSocket frame: ${$}`:$);return Error.captureStackTrace(d,this.createError),d.code=w,d[C]=D,d}}e.exports=b}),ES=j((_,e)=>{var{Duplex:S}=K("stream"),{randomFillSync:t}=K("crypto"),s=N_(),{EMPTY_BUFFER:i,kWebSocket:C,NOOP:o}=C_(),{isBlob:r,isValidStatusCode:A}=V_(),{mask:B,toBuffer:R}=k_(),a=Symbol("kByteLength"),u=Buffer.alloc(4),v=8192,O,p=v,F=0,E=1,T=2;class f{constructor($,n,D){if(this._extensions=n||{},D)this._generateMask=D,this._maskBuffer=Buffer.alloc(4);this._socket=$,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=F,this.onerror=o,this[C]=void 0}static frame($,n){let D,w=!1,d=2,h=!1;if(n.mask){if(D=n.maskBuffer||u,n.generateMask)n.generateMask(D);else{if(p===v){if(O===void 0)O=Buffer.alloc(v);t(O,0,v),p=0}D[0]=O[p++],D[1]=O[p++],D[2]=O[p++],D[3]=O[p++]}h=(D[0]|D[1]|D[2]|D[3])===0,d=6}let m;if(typeof $==="string")if((!n.mask||h)&&n[a]!==void 0)m=n[a];else $=Buffer.from($),m=$.length;else m=$.length,w=n.mask&&n.readOnly&&!h;let I=m;if(m>=65536)d+=8,I=127;else if(m>125)d+=2,I=126;let L=Buffer.allocUnsafe(w?m+d:d);if(L[0]=n.fin?n.opcode|128:n.opcode,n.rsv1)L[0]|=64;if(L[1]=I,I===126)L.writeUInt16BE(m,2);else if(I===127)L[2]=L[3]=0,L.writeUIntBE(m,4,6);if(!n.mask)return[L,$];if(L[1]|=128,L[d-4]=D[0],L[d-3]=D[1],L[d-2]=D[2],L[d-1]=D[3],h)return[L,$];if(w)return B($,D,L,d,m),[L];return B($,D,$,0,m),[L,$]}close($,n,D,w){let d;if($===void 0)d=i;else if(typeof $!=="number"||!A($))throw TypeError("First argument must be a valid error code number");else if(n===void 0||!n.length)d=Buffer.allocUnsafe(2),d.writeUInt16BE($,0);else{let m=Buffer.byteLength(n);if(m>123)throw RangeError("The message must not be greater than 123 bytes");if(d=Buffer.allocUnsafe(2+m),d.writeUInt16BE($,0),typeof n==="string")d.write(n,2);else d.set(n,2)}let h={[a]:d.length,fin:!0,generateMask:this._generateMask,mask:D,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==F)this.enqueue([this.dispatch,d,!1,h,w]);else this.sendFrame(f.frame(d,h),w)}ping($,n,D){let w,d;if(typeof $==="string")w=Buffer.byteLength($),d=!1;else if(r($))w=$.size,d=!1;else $=R($),w=$.length,d=R.readOnly;if(w>125)throw RangeError("The data size must not be greater than 125 bytes");let h={[a]:w,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:d,rsv1:!1};if(r($))if(this._state!==F)this.enqueue([this.getBlobData,$,!1,h,D]);else this.getBlobData($,!1,h,D);else if(this._state!==F)this.enqueue([this.dispatch,$,!1,h,D]);else this.sendFrame(f.frame($,h),D)}pong($,n,D){let w,d;if(typeof $==="string")w=Buffer.byteLength($),d=!1;else if(r($))w=$.size,d=!1;else $=R($),w=$.length,d=R.readOnly;if(w>125)throw RangeError("The data size must not be greater than 125 bytes");let h={[a]:w,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:d,rsv1:!1};if(r($))if(this._state!==F)this.enqueue([this.getBlobData,$,!1,h,D]);else this.getBlobData($,!1,h,D);else if(this._state!==F)this.enqueue([this.dispatch,$,!1,h,D]);else this.sendFrame(f.frame($,h),D)}send($,n,D){let w=this._extensions[s.extensionName],d=n.binary?2:1,h=n.compress,m,I;if(typeof $==="string")m=Buffer.byteLength($),I=!1;else if(r($))m=$.size,I=!1;else $=R($),m=$.length,I=R.readOnly;if(this._firstFragment){if(this._firstFragment=!1,h&&w&&w.params[w._isServer?"server_no_context_takeover":"client_no_context_takeover"])h=m>=w._threshold;this._compress=h}else h=!1,d=0;if(n.fin)this._firstFragment=!0;let L={[a]:m,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:d,readOnly:I,rsv1:h};if(r($))if(this._state!==F)this.enqueue([this.getBlobData,$,this._compress,L,D]);else this.getBlobData($,this._compress,L,D);else if(this._state!==F)this.enqueue([this.dispatch,$,this._compress,L,D]);else this.dispatch($,this._compress,L,D)}getBlobData($,n,D,w){this._bufferedBytes+=D[a],this._state=T,$.arrayBuffer().then((d)=>{if(this._socket.destroyed){let m=Error("The socket was closed while the blob was being read");process.nextTick(b,this,m,w);return}this._bufferedBytes-=D[a];let h=R(d);if(!n)this._state=F,this.sendFrame(f.frame(h,D),w),this.dequeue();else this.dispatch(h,n,D,w)}).catch((d)=>{process.nextTick(y,this,d,w)})}dispatch($,n,D,w){if(!n){this.sendFrame(f.frame($,D),w);return}let d=this._extensions[s.extensionName];this._bufferedBytes+=D[a],this._state=E,d.compress($,D.fin,(h,m)=>{if(this._socket.destroyed){let I=Error("The socket was closed while data was being compressed");b(this,I,w);return}this._bufferedBytes-=D[a],this._state=F,D.readOnly=!1,this.sendFrame(f.frame(m,D),w),this.dequeue()})}dequeue(){while(this._state===F&&this._queue.length){let $=this._queue.shift();this._bufferedBytes-=$[3][a],Reflect.apply($[0],this,$.slice(1))}}enqueue($){this._bufferedBytes+=$[3][a],this._queue.push($)}sendFrame($,n){if($.length===2)this._socket.cork(),this._socket.write($[0]),this._socket.write($[1],n),this._socket.uncork();else this._socket.write($[0],n)}}e.exports=f;function b($,n,D){if(typeof D==="function")D(n);for(let w=0;w<$._queue.length;w++){let d=$._queue[w],h=d[d.length-1];if(typeof h==="function")h(n)}}function y($,n,D){b($,n,D),$.onerror(n)}}),Bs=j((_,e)=>{var{kForOnEventAttribute:S,kListener:t}=C_(),s=Symbol("kCode"),i=Symbol("kData"),C=Symbol("kError"),o=Symbol("kMessage"),r=Symbol("kReason"),A=Symbol("kTarget"),B=Symbol("kType"),R=Symbol("kWasClean");class a{constructor(E){this[A]=null,this[B]=E}get target(){return this[A]}get type(){return this[B]}}Object.defineProperty(a.prototype,"target",{enumerable:!0}),Object.defineProperty(a.prototype,"type",{enumerable:!0});class u extends a{constructor(E,T={}){super(E);this[s]=T.code===void 0?0:T.code,this[r]=T.reason===void 0?"":T.reason,this[R]=T.wasClean===void 0?!1:T.wasClean}get code(){return this[s]}get reason(){return this[r]}get wasClean(){return this[R]}}Object.defineProperty(u.prototype,"code",{enumerable:!0}),Object.defineProperty(u.prototype,"reason",{enumerable:!0}),Object.defineProperty(u.prototype,"wasClean",{enumerable:!0});class v extends a{constructor(E,T={}){super(E);this[C]=T.error===void 0?null:T.error,this[o]=T.message===void 0?"":T.message}get error(){return this[C]}get message(){return this[o]}}Object.defineProperty(v.prototype,"error",{enumerable:!0}),Object.defineProperty(v.prototype,"message",{enumerable:!0});class O extends a{constructor(E,T={}){super(E);this[i]=T.data===void 0?null:T.data}get data(){return this[i]}}Object.defineProperty(O.prototype,"data",{enumerable:!0});var p={addEventListener(E,T,f={}){for(let y of this.listeners(E))if(!f[S]&&y[t]===T&&!y[S])return;let b;if(E==="message")b=function($,n){let D=new O("message",{data:n?$:$.toString()});D[A]=this,F(T,this,D)};else if(E==="close")b=function($,n){let D=new u("close",{code:$,reason:n.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});D[A]=this,F(T,this,D)};else if(E==="error")b=function($){let n=new v("error",{error:$,message:$.message});n[A]=this,F(T,this,n)};else if(E==="open")b=function(){let $=new a("open");$[A]=this,F(T,this,$)};else return;if(b[S]=!!f[S],b[t]=T,f.once)this.once(E,b);else this.on(E,b)},removeEventListener(E,T){for(let f of this.listeners(E))if(f[t]===T&&!f[S]){this.removeListener(E,f);break}}};e.exports={CloseEvent:u,ErrorEvent:v,Event:a,EventTarget:p,MessageEvent:O};function F(E,T,f){if(typeof E==="object"&&E.handleEvent)E.handleEvent.call(E,f);else E.call(T,f)}}),ve=j((_,e)=>{var{tokenChars:S}=V_();function t(C,o,r){if(C[o]===void 0)C[o]=[r];else C[o].push(r)}function s(C){let o=Object.create(null),r=Object.create(null),A=!1,B=!1,R=!1,a,u,v=-1,O=-1,p=-1,F=0;for(;F<C.length;F++)if(O=C.charCodeAt(F),a===void 0)if(p===-1&&S[O]===1){if(v===-1)v=F}else if(F!==0&&(O===32||O===9)){if(p===-1&&v!==-1)p=F}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${F}`);if(p===-1)p=F;let T=C.slice(v,p);if(O===44)t(o,T,r),r=Object.create(null);else a=T;v=p=-1}else throw SyntaxError(`Unexpected character at index ${F}`);else if(u===void 0)if(p===-1&&S[O]===1){if(v===-1)v=F}else if(O===32||O===9){if(p===-1&&v!==-1)p=F}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${F}`);if(p===-1)p=F;if(t(r,C.slice(v,p),!0),O===44)t(o,a,r),r=Object.create(null),a=void 0;v=p=-1}else if(O===61&&v!==-1&&p===-1)u=C.slice(v,F),v=p=-1;else throw SyntaxError(`Unexpected character at index ${F}`);else if(B){if(S[O]!==1)throw SyntaxError(`Unexpected character at index ${F}`);if(v===-1)v=F;else if(!A)A=!0;B=!1}else if(R)if(S[O]===1){if(v===-1)v=F}else if(O===34&&v!==-1)R=!1,p=F;else if(O===92)B=!0;else throw SyntaxError(`Unexpected character at index ${F}`);else if(O===34&&C.charCodeAt(F-1)===61)R=!0;else if(p===-1&&S[O]===1){if(v===-1)v=F}else if(v!==-1&&(O===32||O===9)){if(p===-1)p=F}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${F}`);if(p===-1)p=F;let T=C.slice(v,p);if(A)T=T.replace(/\\/g,""),A=!1;if(t(r,u,T),O===44)t(o,a,r),r=Object.create(null),a=void 0;u=void 0,v=p=-1}else throw SyntaxError(`Unexpected character at index ${F}`);if(v===-1||R||O===32||O===9)throw SyntaxError("Unexpected end of input");if(p===-1)p=F;let E=C.slice(v,p);if(a===void 0)t(o,E,r);else{if(u===void 0)t(r,E,!0);else if(A)t(r,u,E.replace(/\\/g,""));else t(r,u,E);t(o,a,r)}return o}function i(C){return Object.keys(C).map((o)=>{let r=C[o];if(!Array.isArray(r))r=[r];return r.map((A)=>{return[o].concat(Object.keys(A).map((B)=>{let R=A[B];if(!Array.isArray(R))R=[R];return R.map((a)=>a===!0?B:`${B}=${a}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}e.exports={format:i,parse:s}}),pe=j((_,e)=>{var S=K("events"),t=K("https"),s=K("http"),i=K("net"),C=K("tls"),{randomBytes:o,createHash:r}=K("crypto"),{Duplex:A,Readable:B}=K("stream"),{URL:R}=K("url"),a=N_(),u=fS(),v=ES(),{isBlob:O}=V_(),{BINARY_TYPES:p,CLOSE_TIMEOUT:F,EMPTY_BUFFER:E,GUID:T,kForOnEventAttribute:f,kListener:b,kStatusCode:y,kWebSocket:$,NOOP:n}=C_(),{EventTarget:{addEventListener:D,removeEventListener:w}}=Bs(),{format:d,parse:h}=ve(),{toBuffer:m}=k_(),I=Symbol("kAborted"),L=[8,13],G=["CONNECTING","OPEN","CLOSING","CLOSED"],__=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class g extends S{constructor(c,l,N){super();if(this._binaryType=p[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=E,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=g.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,c!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,l===void 0)l=[];else if(!Array.isArray(l))if(typeof l==="object"&&l!==null)N=l,l=[];else l=[l];S_(this,c,l,N)}else this._autoPong=N.autoPong,this._closeTimeout=N.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(c){if(!p.includes(c))return;if(this._binaryType=c,this._receiver)this._receiver._binaryType=c}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(c,l,N){let W=new u({allowSynchronousEvents:N.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:N.maxPayload,skipUTF8Validation:N.skipUTF8Validation}),H=new v(c,this._extensions,N.generateMask);if(this._receiver=W,this._sender=H,this._socket=c,W[$]=this,H[$]=this,c[$]=this,W.on("conclude",ut),W.on("drain",Ot),W.on("error",lt),W.on("message",wt),W.on("ping",dt),W.on("pong",gt),H.onerror=Ht,c.setTimeout)c.setTimeout(0);if(c.setNoDelay)c.setNoDelay();if(l.length>0)c.unshift(l);c.on("close",je),c.on("data",M_),c.on("end",Je),c.on("error",Ze),this._readyState=g.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[a.extensionName])this._extensions[a.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(c,l){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){z(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===g.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=g.CLOSING,this._sender.close(c,l,!this._isServer,(N)=>{if(N)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),ze(this)}pause(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;this._paused=!0,this._socket.pause()}ping(c,l,N){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof c==="function")N=c,c=l=void 0;else if(typeof l==="function")N=l,l=void 0;if(typeof c==="number")c=c.toString();if(this.readyState!==g.OPEN){re(this,c,N);return}if(l===void 0)l=!this._isServer;this._sender.ping(c||E,l,N)}pong(c,l,N){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof c==="function")N=c,c=l=void 0;else if(typeof l==="function")N=l,l=void 0;if(typeof c==="number")c=c.toString();if(this.readyState!==g.OPEN){re(this,c,N);return}if(l===void 0)l=!this._isServer;this._sender.pong(c||E,l,N)}resume(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(c,l,N){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof l==="function")N=l,l={};if(typeof c==="number")c=c.toString();if(this.readyState!==g.OPEN){re(this,c,N);return}let W={binary:typeof c!=="string",mask:!this._isServer,compress:!0,fin:!0,...l};if(!this._extensions[a.extensionName])W.compress=!1;this._sender.send(c||E,W,N)}terminate(){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){z(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=g.CLOSING,this._socket.destroy()}}Object.defineProperty(g,"CONNECTING",{enumerable:!0,value:G.indexOf("CONNECTING")}),Object.defineProperty(g.prototype,"CONNECTING",{enumerable:!0,value:G.indexOf("CONNECTING")}),Object.defineProperty(g,"OPEN",{enumerable:!0,value:G.indexOf("OPEN")}),Object.defineProperty(g.prototype,"OPEN",{enumerable:!0,value:G.indexOf("OPEN")}),Object.defineProperty(g,"CLOSING",{enumerable:!0,value:G.indexOf("CLOSING")}),Object.defineProperty(g.prototype,"CLOSING",{enumerable:!0,value:G.indexOf("CLOSING")}),Object.defineProperty(g,"CLOSED",{enumerable:!0,value:G.indexOf("CLOSED")}),Object.defineProperty(g.prototype,"CLOSED",{enumerable:!0,value:G.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((c)=>{Object.defineProperty(g.prototype,c,{enumerable:!0})}),["open","error","close","message"].forEach((c)=>{Object.defineProperty(g.prototype,`on${c}`,{enumerable:!0,get(){for(let l of this.listeners(c))if(l[f])return l[b];return null},set(l){for(let N of this.listeners(c))if(N[f]){this.removeListener(c,N);break}if(typeof l!=="function")return;this.addEventListener(c,l,{[f]:!0})}})}),g.prototype.addEventListener=D,g.prototype.removeEventListener=w,e.exports=g;function S_(c,l,N,W){let H={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:F,protocolVersion:L[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...W,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(c._autoPong=H.autoPong,c._closeTimeout=H.closeTimeout,!L.includes(H.protocolVersion))throw RangeError(`Unsupported protocol version: ${H.protocolVersion} (supported versions: ${L.join(", ")})`);let U;if(l instanceof R)U=l;else try{U=new R(l)}catch{throw SyntaxError(`Invalid URL: ${l}`)}if(U.protocol==="http:")U.protocol="ws:";else if(U.protocol==="https:")U.protocol="wss:";c._url=U.href;let T_=U.protocol==="wss:",f_=U.protocol==="ws+unix:",l_;if(U.protocol!=="ws:"&&!T_&&!f_)l_=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(f_&&!U.pathname)l_="The URL's pathname is empty";else if(U.hash)l_="The URL contains a fragment identifier";if(l_){let P=SyntaxError(l_);if(c._redirects===0)throw P;else{$_(c,P);return}}let Qe=T_?443:80,Ye=o(16).toString("base64"),_S=T_?t.request:s.request,w_=new Set,d_;if(H.createConnection=H.createConnection||(T_?Ce:ie),H.defaultPort=H.defaultPort||Qe,H.port=U.port||Qe,H.host=U.hostname.startsWith("[")?U.hostname.slice(1,-1):U.hostname,H.headers={...H.headers,"Sec-WebSocket-Version":H.protocolVersion,"Sec-WebSocket-Key":Ye,Connection:"Upgrade",Upgrade:"websocket"},H.path=U.pathname+U.search,H.timeout=H.handshakeTimeout,H.perMessageDeflate)d_=new a({...H.perMessageDeflate,isServer:!1,maxPayload:H.maxPayload}),H.headers["Sec-WebSocket-Extensions"]=d({[a.extensionName]:d_.offer()});if(N.length){for(let P of N){if(typeof P!=="string"||!__.test(P)||w_.has(P))throw SyntaxError("An invalid or duplicated subprotocol was specified");w_.add(P)}H.headers["Sec-WebSocket-Protocol"]=N.join(",")}if(H.origin)if(H.protocolVersion<13)H.headers["Sec-WebSocket-Origin"]=H.origin;else H.headers.Origin=H.origin;if(U.username||U.password)H.auth=`${U.username}:${U.password}`;if(f_){let P=H.path.split(":");H.socketPath=P[0],H.path=P[1]}let k;if(H.followRedirects){if(c._redirects===0){c._originalIpc=f_,c._originalSecure=T_,c._originalHostOrSocketPath=f_?H.socketPath:U.host;let P=W&&W.headers;if(W={...W,headers:{}},P)for(let[x,E_]of Object.entries(P))W.headers[x.toLowerCase()]=E_}else if(c.listenerCount("redirect")===0){let P=f_?c._originalIpc?H.socketPath===c._originalHostOrSocketPath:!1:c._originalIpc?!1:U.host===c._originalHostOrSocketPath;if(!P||c._originalSecure&&!T_){if(delete H.headers.authorization,delete H.headers.cookie,!P)delete H.headers.host;H.auth=void 0}}if(H.auth&&!W.headers.authorization)W.headers.authorization="Basic "+Buffer.from(H.auth).toString("base64");if(k=c._req=_S(H),c._redirects)c.emit("redirect",c.url,k)}else k=c._req=_S(H);if(H.timeout)k.on("timeout",()=>{z(c,k,"Opening handshake has timed out")});if(k.on("error",(P)=>{if(k===null||k[I])return;k=c._req=null,$_(c,P)}),k.on("response",(P)=>{let x=P.headers.location,E_=P.statusCode;if(x&&H.followRedirects&&E_>=300&&E_<400){if(++c._redirects>H.maxRedirects){z(c,k,"Maximum redirects exceeded");return}k.abort();let g_;try{g_=new R(x,l)}catch(eS){let F_=SyntaxError(`Invalid URL: ${x}`);$_(c,F_);return}S_(c,g_,N,W)}else if(!c.emit("unexpected-response",k,P))z(c,k,`Unexpected server response: ${P.statusCode}`)}),k.on("upgrade",(P,x,E_)=>{if(c.emit("upgrade",P),c.readyState!==g.CONNECTING)return;k=c._req=null;let g_=P.headers.upgrade;if(g_===void 0||g_.toLowerCase()!=="websocket"){z(c,x,"Invalid Upgrade header");return}let eS=r("sha1").update(Ye+T).digest("base64");if(P.headers["sec-websocket-accept"]!==eS){z(c,x,"Invalid Sec-WebSocket-Accept header");return}let F_=P.headers["sec-websocket-protocol"],H_;if(F_!==void 0){if(!w_.size)H_="Server sent a subprotocol but none was requested";else if(!w_.has(F_))H_="Server sent an invalid subprotocol"}else if(w_.size)H_="Server sent no subprotocol";if(H_){z(c,x,H_);return}if(F_)c._protocol=F_;let SS=P.headers["sec-websocket-extensions"];if(SS!==void 0){if(!d_){z(c,x,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let $e;try{$e=h(SS)}catch(Ae){z(c,x,"Invalid Sec-WebSocket-Extensions header");return}let tS=Object.keys($e);if(tS.length!==1||tS[0]!==a.extensionName){z(c,x,"Server indicated an extension that was not requested");return}try{d_.accept($e[a.extensionName])}catch(Ae){z(c,x,"Invalid Sec-WebSocket-Extensions header");return}c._extensions[a.extensionName]=d_}c.setSocket(x,E_,{allowSynchronousEvents:H.allowSynchronousEvents,generateMask:H.generateMask,maxPayload:H.maxPayload,skipUTF8Validation:H.skipUTF8Validation})}),H.finishRequest)H.finishRequest(k,c);else k.end()}function $_(c,l){c._readyState=g.CLOSING,c._errorEmitted=!0,c.emit("error",l),c.emitClose()}function ie(c){return c.path=c.socketPath,i.connect(c)}function Ce(c){if(c.path=void 0,!c.servername&&c.servername!=="")c.servername=i.isIP(c.host)?"":c.host;return C.connect(c)}function z(c,l,N){c._readyState=g.CLOSING;let W=Error(N);if(Error.captureStackTrace(W,z),l.setHeader){if(l[I]=!0,l.abort(),l.socket&&!l.socket.destroyed)l.socket.destroy();process.nextTick($_,c,W)}else l.destroy(W),l.once("error",c.emit.bind(c,"error")),l.once("close",c.emitClose.bind(c))}function re(c,l,N){if(l){let W=O(l)?l.size:m(l).length;if(c._socket)c._sender._bufferedBytes+=W;else c._bufferedAmount+=W}if(N){let W=Error(`WebSocket is not open: readyState ${c.readyState} (${G[c.readyState]})`);process.nextTick(N,W)}}function ut(c,l){let N=this[$];if(N._closeFrameReceived=!0,N._closeMessage=l,N._closeCode=c,N._socket[$]===void 0)return;if(N._socket.removeListener("data",M_),process.nextTick(xe,N._socket),c===1005)N.close();else N.close(c,l)}function Ot(){let c=this[$];if(!c.isPaused)c._socket.resume()}function lt(c){let l=this[$];if(l._socket[$]!==void 0)l._socket.removeListener("data",M_),process.nextTick(xe,l._socket),l.close(c[y]);if(!l._errorEmitted)l._errorEmitted=!0,l.emit("error",c)}function Ke(){this[$].emitClose()}function wt(c,l){this[$].emit("message",c,l)}function dt(c){let l=this[$];if(l._autoPong)l.pong(c,!this._isServer,n);l.emit("ping",c)}function gt(c){this[$].emit("pong",c)}function xe(c){c.resume()}function Ht(c){let l=this[$];if(l.readyState===g.CLOSED)return;if(l.readyState===g.OPEN)l._readyState=g.CLOSING,ze(l);if(this._socket.end(),!l._errorEmitted)l._errorEmitted=!0,l.emit("error",c)}function ze(c){c._closeTimer=setTimeout(c._socket.destroy.bind(c._socket),c._closeTimeout)}function je(){let c=this[$];if(this.removeListener("close",je),this.removeListener("data",M_),this.removeListener("end",Je),c._readyState=g.CLOSING,!this._readableState.endEmitted&&!c._closeFrameReceived&&!c._receiver._writableState.errorEmitted&&this._readableState.length!==0){let l=this.read(this._readableState.length);c._receiver.write(l)}if(c._receiver.end(),this[$]=void 0,clearTimeout(c._closeTimer),c._receiver._writableState.finished||c._receiver._writableState.errorEmitted)c.emitClose();else c._receiver.on("error",Ke),c._receiver.on("finish",Ke)}function M_(c){if(!this[$]._receiver.write(c))this.pause()}function Je(){let c=this[$];c._readyState=g.CLOSING,c._receiver.end(),this.end()}function Ze(){let c=this[$];if(this.removeListener("error",Ze),this.on("error",n),c)c._readyState=g.CLOSING,this.destroy()}}),cs=j((_,e)=>{var S=pe(),{Duplex:t}=K("stream");function s(r){r.emit("close")}function i(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function C(r){if(this.removeListener("error",C),this.destroy(),this.listenerCount("error")===0)this.emit("error",r)}function o(r,A){let B=!0,R=new t({...A,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(u,v){let O=!v&&R._readableState.objectMode?u.toString():u;if(!R.push(O))r.pause()}),r.once("error",function(u){if(R.destroyed)return;B=!1,R.destroy(u)}),r.once("close",function(){if(R.destroyed)return;R.push(null)}),R._destroy=function(a,u){if(r.readyState===r.CLOSED){u(a),process.nextTick(s,R);return}let v=!1;if(r.once("error",function(p){v=!0,u(p)}),r.once("close",function(){if(!v)u(a);process.nextTick(s,R)}),B)r.terminate()},R._final=function(a){if(r.readyState===r.CONNECTING){r.once("open",function(){R._final(a)});return}if(r._socket===null)return;if(r._socket._writableState.finished){if(a(),R._readableState.endEmitted)R.destroy()}else r._socket.once("finish",function(){a()}),r.close()},R._read=function(){if(r.isPaused)r.resume()},R._write=function(a,u,v){if(r.readyState===r.CONNECTING){r.once("open",function(){R._write(a,u,v)});return}r.send(a,v)},R.on("end",i),R.on("error",C),R}e.exports=o}),FS=j((_,e)=>{var{tokenChars:S}=V_();function t(s){let i=new Set,C=-1,o=-1,r=0;for(r;r<s.length;r++){let B=s.charCodeAt(r);if(o===-1&&S[B]===1){if(C===-1)C=r}else if(r!==0&&(B===32||B===9)){if(o===-1&&C!==-1)o=r}else if(B===44){if(C===-1)throw SyntaxError(`Unexpected character at index ${r}`);if(o===-1)o=r;let R=s.slice(C,o);if(i.has(R))throw SyntaxError(`The "${R}" subprotocol is duplicated`);i.add(R),C=o=-1}else throw SyntaxError(`Unexpected character at index ${r}`)}if(C===-1||o!==-1)throw SyntaxError("Unexpected end of input");let A=s.slice(C,r);if(i.has(A))throw SyntaxError(`The "${A}" subprotocol is duplicated`);return i.add(A),i}e.exports={parse:t}}),Ds=j((_,e)=>{var S=K("events"),t=K("http"),{Duplex:s}=K("stream"),{createHash:i}=K("crypto"),C=ve(),o=N_(),r=FS(),A=pe(),{CLOSE_TIMEOUT:B,GUID:R,kWebSocket:a}=C_(),u=/^[+/0-9A-Za-z]{22}==$/,v=0,O=1,p=2;class F extends S{constructor($,n){super();if($={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:B,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:A,...$},$.port==null&&!$.server&&!$.noServer||$.port!=null&&($.server||$.noServer)||$.server&&$.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if($.port!=null)this._server=t.createServer((D,w)=>{let d=t.STATUS_CODES[426];w.writeHead(426,{"Content-Length":d.length,"Content-Type":"text/plain"}),w.end(d)}),this._server.listen($.port,$.host,$.backlog,n);else if($.server)this._server=$.server;if(this._server){let D=this.emit.bind(this,"connection");this._removeListeners=E(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(w,d,h)=>{this.handleUpgrade(w,d,h,D)}})}if($.perMessageDeflate===!0)$.perMessageDeflate={};if($.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=$,this._state=v}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close($){if(this._state===p){if($)this.once("close",()=>{$(Error("The server is not running"))});process.nextTick(T,this);return}if($)this.once("close",$);if(this._state===O)return;if(this._state=O,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(T,this);else this._shouldEmitClose=!0;else process.nextTick(T,this)}else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{T(this)})}}shouldHandle($){if(this.options.path){let n=$.url.indexOf("?");if((n!==-1?$.url.slice(0,n):$.url)!==this.options.path)return!1}return!0}handleUpgrade($,n,D,w){n.on("error",f);let d=$.headers["sec-websocket-key"],h=$.headers.upgrade,m=+$.headers["sec-websocket-version"];if($.method!=="GET"){y(this,$,n,405,"Invalid HTTP method");return}if(h===void 0||h.toLowerCase()!=="websocket"){y(this,$,n,400,"Invalid Upgrade header");return}if(d===void 0||!u.test(d)){y(this,$,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(m!==13&&m!==8){y(this,$,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle($)){b(n,400);return}let I=$.headers["sec-websocket-protocol"],L=new Set;if(I!==void 0)try{L=r.parse(I)}catch(g){y(this,$,n,400,"Invalid Sec-WebSocket-Protocol header");return}let G=$.headers["sec-websocket-extensions"],__={};if(this.options.perMessageDeflate&&G!==void 0){let g=new o({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let S_=C.parse(G);if(S_[o.extensionName])g.accept(S_[o.extensionName]),__[o.extensionName]=g}catch(S_){y(this,$,n,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let g={origin:$.headers[`${m===8?"sec-websocket-origin":"origin"}`],secure:!!($.socket.authorized||$.socket.encrypted),req:$};if(this.options.verifyClient.length===2){this.options.verifyClient(g,(S_,$_,ie,Ce)=>{if(!S_)return b(n,$_||401,ie,Ce);this.completeUpgrade(__,d,L,$,n,D,w)});return}if(!this.options.verifyClient(g))return b(n,401)}this.completeUpgrade(__,d,L,$,n,D,w)}completeUpgrade($,n,D,w,d,h,m){if(!d.readable||!d.writable)return d.destroy();if(d[a])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>v)return b(d,503);let L=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${i("sha1").update(n+R).digest("base64")}`],G=new this.options.WebSocket(null,void 0,this.options);if(D.size){let __=this.options.handleProtocols?this.options.handleProtocols(D,w):D.values().next().value;if(__)L.push(`Sec-WebSocket-Protocol: ${__}`),G._protocol=__}if($[o.extensionName]){let __=$[o.extensionName].params,g=C.format({[o.extensionName]:[__]});L.push(`Sec-WebSocket-Extensions: ${g}`),G._extensions=$}if(this.emit("headers",L,w),d.write(L.concat(`\r
|
|
33
|
+
}`,eC=65536,sC,iC,rC,oC=1500;var $t=Re(()=>{Is=Object.create,ks=Object.getPrototypeOf,HS=Object.defineProperty,Ks=Object.getOwnPropertyNames,xs=Object.prototype.hasOwnProperty;k=Xs(import.meta.url),$_=j((_,e)=>{var S=["nodebuffer","arraybuffer","fragments"],t=typeof Blob<"u";if(t)S.push("blob");e.exports={BINARY_TYPES:S,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:t,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),j_=j((_,e)=>{var{EMPTY_BUFFER:S}=$_(),t=Buffer[Symbol.species];function s(A,B){if(A.length===0)return S;if(A.length===1)return A[0];let R=Buffer.allocUnsafe(B),a=0;for(let p=0;p<A.length;p++){let O=A[p];R.set(O,a),a+=O.length}if(a<B)return new t(R.buffer,R.byteOffset,a);return R}function i(A,B,R,a,p){for(let O=0;O<p;O++)R[a+O]=A[O]^B[O&3]}function C(A,B){for(let R=0;R<A.length;R++)A[R]^=B[R&3]}function o(A){if(A.length===A.buffer.byteLength)return A.buffer;return A.buffer.slice(A.byteOffset,A.byteOffset+A.length)}function r(A){if(r.readOnly=!0,Buffer.isBuffer(A))return A;let B;if(A instanceof ArrayBuffer)B=new t(A);else if(ArrayBuffer.isView(A))B=new t(A.buffer,A.byteOffset,A.byteLength);else B=Buffer.from(A),r.readOnly=!1;return B}if(e.exports={concat:s,mask:i,toArrayBuffer:o,toBuffer:r,unmask:C},!process.env.WS_NO_BUFFER_UTIL)try{let A=(()=>{throw Error("Cannot require module bufferutil")})();e.exports.mask=function(B,R,a,p,O){if(O<48)i(B,R,a,p,O);else A.mask(B,R,a,p,O)},e.exports.unmask=function(B,R){if(B.length<32)C(B,R);else A.unmask(B,R)}}catch(A){}}),Zs=j((_,e)=>{var S=Symbol("kDone"),t=Symbol("kRun");class s{constructor(i){this[S]=()=>{this.pending--,this[t]()},this.concurrency=i||1/0,this.jobs=[],this.pending=0}add(i){this.jobs.push(i),this[t]()}[t](){if(this.pending===this.concurrency)return;if(this.jobs.length){let i=this.jobs.shift();this.pending++,i(this[S])}}}e.exports=s}),L_=j((_,e)=>{var S=k("zlib"),t=j_(),s=Zs(),{kStatusCode:i}=$_(),C=Buffer[Symbol.species],o=Buffer.from([0,0,255,255]),r=Symbol("permessage-deflate"),A=Symbol("total-length"),B=Symbol("callback"),R=Symbol("buffers"),a=Symbol("error"),p;class O{constructor(E){if(this._options=E||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!p){let T=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;p=new s(T)}}static get extensionName(){return"permessage-deflate"}offer(){let E={};if(this._options.serverNoContextTakeover)E.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)E.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)E.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)E.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)E.client_max_window_bits=!0;return E}accept(E){return E=this.normalizeParams(E),this.params=this._isServer?this.acceptAsServer(E):this.acceptAsClient(E),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let E=this._deflate[B];if(this._deflate.close(),this._deflate=null,E)E(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(E){let T=this._options,f=E.find((b)=>{if(T.serverNoContextTakeover===!1&&b.server_no_context_takeover||b.server_max_window_bits&&(T.serverMaxWindowBits===!1||typeof T.serverMaxWindowBits==="number"&&T.serverMaxWindowBits>b.server_max_window_bits)||typeof T.clientMaxWindowBits==="number"&&!b.client_max_window_bits)return!1;return!0});if(!f)throw Error("None of the extension offers can be accepted");if(T.serverNoContextTakeover)f.server_no_context_takeover=!0;if(T.clientNoContextTakeover)f.client_no_context_takeover=!0;if(typeof T.serverMaxWindowBits==="number")f.server_max_window_bits=T.serverMaxWindowBits;if(typeof T.clientMaxWindowBits==="number")f.client_max_window_bits=T.clientMaxWindowBits;else if(f.client_max_window_bits===!0||T.clientMaxWindowBits===!1)delete f.client_max_window_bits;return f}acceptAsClient(E){let T=E[0];if(this._options.clientNoContextTakeover===!1&&T.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!T.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")T.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&T.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return T}normalizeParams(E){return E.forEach((T)=>{Object.keys(T).forEach((f)=>{let b=T[f];if(b.length>1)throw Error(`Parameter "${f}" must have only a single value`);if(b=b[0],f==="client_max_window_bits"){if(b!==!0){let y=+b;if(!Number.isInteger(y)||y<8||y>15)throw TypeError(`Invalid value for parameter "${f}": ${b}`);b=y}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${f}": ${b}`)}else if(f==="server_max_window_bits"){let y=+b;if(!Number.isInteger(y)||y<8||y>15)throw TypeError(`Invalid value for parameter "${f}": ${b}`);b=y}else if(f==="client_no_context_takeover"||f==="server_no_context_takeover"){if(b!==!0)throw TypeError(`Invalid value for parameter "${f}": ${b}`)}else throw Error(`Unknown parameter "${f}"`);T[f]=b})}),E}decompress(E,T,f){p.add((b)=>{this._decompress(E,T,(y,$)=>{b(),f(y,$)})})}compress(E,T,f){p.add((b)=>{this._compress(E,T,(y,$)=>{b(),f(y,$)})})}_decompress(E,T,f){let b=this._isServer?"client":"server";if(!this._inflate){let y=`${b}_max_window_bits`,$=typeof this.params[y]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[y];this._inflate=S.createInflateRaw({...this._options.zlibInflateOptions,windowBits:$}),this._inflate[r]=this,this._inflate[A]=0,this._inflate[R]=[],this._inflate.on("error",F),this._inflate.on("data",v)}if(this._inflate[B]=f,this._inflate.write(E),T)this._inflate.write(o);this._inflate.flush(()=>{let y=this._inflate[a];if(y){this._inflate.close(),this._inflate=null,f(y);return}let $=t.concat(this._inflate[R],this._inflate[A]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[A]=0,this._inflate[R]=[],T&&this.params[`${b}_no_context_takeover`])this._inflate.reset();f(null,$)})}_compress(E,T,f){let b=this._isServer?"server":"client";if(!this._deflate){let y=`${b}_max_window_bits`,$=typeof this.params[y]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[y];this._deflate=S.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:$}),this._deflate[A]=0,this._deflate[R]=[],this._deflate.on("data",u)}this._deflate[B]=f,this._deflate.write(E),this._deflate.flush(S.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let y=t.concat(this._deflate[R],this._deflate[A]);if(T)y=new C(y.buffer,y.byteOffset,y.length-4);if(this._deflate[B]=null,this._deflate[A]=0,this._deflate[R]=[],T&&this.params[`${b}_no_context_takeover`])this._deflate.reset();f(null,y)})}}e.exports=O;function u(E){this[R].push(E),this[A]+=E.length}function v(E){if(this[A]+=E.length,this[r]._maxPayload<1||this[A]<=this[r]._maxPayload){this[R].push(E);return}this[a]=RangeError("Max payload size exceeded"),this[a].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[a][i]=1009,this.removeListener("data",v),this.reset()}function F(E){if(this[r]._inflate=null,this[a]){this[B](this[a]);return}E[i]=1007,this[B](E)}}),W_=j((_,e)=>{var{isUtf8:S}=k("buffer"),{hasBlob:t}=$_(),s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function i(r){return r>=1000&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3000&&r<=4999}function C(r){let A=r.length,B=0;while(B<A)if((r[B]&128)===0)B++;else if((r[B]&224)===192){if(B+1===A||(r[B+1]&192)!==128||(r[B]&254)===192)return!1;B+=2}else if((r[B]&240)===224){if(B+2>=A||(r[B+1]&192)!==128||(r[B+2]&192)!==128||r[B]===224&&(r[B+1]&224)===128||r[B]===237&&(r[B+1]&224)===160)return!1;B+=3}else if((r[B]&248)===240){if(B+3>=A||(r[B+1]&192)!==128||(r[B+2]&192)!==128||(r[B+3]&192)!==128||r[B]===240&&(r[B+1]&240)===128||r[B]===244&&r[B+1]>143||r[B]>244)return!1;B+=4}else return!1;return!0}function o(r){return t&&typeof r==="object"&&typeof r.arrayBuffer==="function"&&typeof r.type==="string"&&typeof r.stream==="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}if(e.exports={isBlob:o,isValidStatusCode:i,isValidUTF8:C,tokenChars:s},S)e.exports.isValidUTF8=function(r){return r.length<24?C(r):S(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=(()=>{throw Error("Cannot require module utf-8-validate")})();e.exports.isValidUTF8=function(A){return A.length<32?C(A):r(A)}}catch(r){}}),PS=j((_,e)=>{var{Writable:S}=k("stream"),t=L_(),{BINARY_TYPES:s,EMPTY_BUFFER:i,kStatusCode:C,kWebSocket:o}=$_(),{concat:r,toArrayBuffer:A,unmask:B}=j_(),{isValidStatusCode:R,isValidUTF8:a}=W_(),p=Buffer[Symbol.species],O=0,u=1,v=2,F=3,E=4,T=5,f=6;class b extends S{constructor(y={}){super();this._allowSynchronousEvents=y.allowSynchronousEvents!==void 0?y.allowSynchronousEvents:!0,this._binaryType=y.binaryType||s[0],this._extensions=y.extensions||{},this._isServer=!!y.isServer,this._maxPayload=y.maxPayload|0,this._skipUTF8Validation=!!y.skipUTF8Validation,this[o]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=O}_write(y,$,n){if(this._opcode===8&&this._state==O)return n();this._bufferedBytes+=y.length,this._buffers.push(y),this.startLoop(n)}consume(y){if(this._bufferedBytes-=y,y===this._buffers[0].length)return this._buffers.shift();if(y<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new p(n.buffer,n.byteOffset+y,n.length-y),new p(n.buffer,n.byteOffset,y)}let $=Buffer.allocUnsafe(y);do{let n=this._buffers[0],D=$.length-y;if(y>=n.length)$.set(this._buffers.shift(),D);else $.set(new Uint8Array(n.buffer,n.byteOffset,y),D),this._buffers[0]=new p(n.buffer,n.byteOffset+y,n.length-y);y-=n.length}while(y>0);return $}startLoop(y){this._loop=!0;do switch(this._state){case O:this.getInfo(y);break;case u:this.getPayloadLength16(y);break;case v:this.getPayloadLength64(y);break;case F:this.getMask();break;case E:this.getData(y);break;case T:case f:this._loop=!1;return}while(this._loop);if(!this._errored)y()}getInfo(y){if(this._bufferedBytes<2){this._loop=!1;return}let $=this.consume(2);if(($[0]&48)!==0){let D=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");y(D);return}let n=($[0]&64)===64;if(n&&!this._extensions[t.extensionName]){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");y(D);return}if(this._fin=($[0]&128)===128,this._opcode=$[0]&15,this._payloadLength=$[1]&127,this._opcode===0){if(n){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");y(D);return}if(!this._fragmented){let D=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");y(D);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let D=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");y(D);return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let D=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");y(D);return}if(n){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");y(D);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let D=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");y(D);return}}else{let D=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");y(D);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=($[1]&128)===128,this._isServer){if(!this._masked){let D=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");y(D);return}}else if(this._masked){let D=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");y(D);return}if(this._payloadLength===126)this._state=u;else if(this._payloadLength===127)this._state=v;else this.haveLength(y)}getPayloadLength16(y){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(y)}getPayloadLength64(y){if(this._bufferedBytes<8){this._loop=!1;return}let $=this.consume(8),n=$.readUInt32BE(0);if(n>Math.pow(2,21)-1){let D=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");y(D);return}this._payloadLength=n*Math.pow(2,32)+$.readUInt32BE(4),this.haveLength(y)}haveLength(y){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let $=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");y($);return}}if(this._masked)this._state=F;else this._state=E}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=E}getData(y){let $=i;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if($=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)B($,this._mask)}if(this._opcode>7){this.controlMessage($,y);return}if(this._compressed){this._state=T,this.decompress($,y);return}if($.length)this._messageLength=this._totalPayloadLength,this._fragments.push($);this.dataMessage(y)}decompress(y,$){this._extensions[t.extensionName].decompress(y,this._fin,(D,w)=>{if(D)return $(D);if(w.length){if(this._messageLength+=w.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let g=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");$(g);return}this._fragments.push(w)}if(this.dataMessage($),this._state===O)this.startLoop($)})}dataMessage(y){if(!this._fin){this._state=O;return}let $=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let D;if(this._binaryType==="nodebuffer")D=r(n,$);else if(this._binaryType==="arraybuffer")D=A(r(n,$));else if(this._binaryType==="blob")D=new Blob(n);else D=n;if(this._allowSynchronousEvents)this.emit("message",D,!0),this._state=O;else this._state=f,setImmediate(()=>{this.emit("message",D,!0),this._state=O,this.startLoop(y)})}else{let D=r(n,$);if(!this._skipUTF8Validation&&!a(D)){let w=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");y(w);return}if(this._state===T||this._allowSynchronousEvents)this.emit("message",D,!1),this._state=O;else this._state=f,setImmediate(()=>{this.emit("message",D,!1),this._state=O,this.startLoop(y)})}}controlMessage(y,$){if(this._opcode===8){if(y.length===0)this._loop=!1,this.emit("conclude",1005,i),this.end();else{let n=y.readUInt16BE(0);if(!R(n)){let w=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");$(w);return}let D=new p(y.buffer,y.byteOffset+2,y.length-2);if(!this._skipUTF8Validation&&!a(D)){let w=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");$(w);return}this._loop=!1,this.emit("conclude",n,D),this.end()}this._state=O;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",y),this._state=O;else this._state=f,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",y),this._state=O,this.startLoop($)})}createError(y,$,n,D,w){this._loop=!1,this._errored=!0;let g=new y(n?`Invalid WebSocket frame: ${$}`:$);return Error.captureStackTrace(g,this.createError),g.code=w,g[C]=D,g}}e.exports=b}),MS=j((_,e)=>{var{Duplex:S}=k("stream"),{randomFillSync:t}=k("crypto"),s=L_(),{EMPTY_BUFFER:i,kWebSocket:C,NOOP:o}=$_(),{isBlob:r,isValidStatusCode:A}=W_(),{mask:B,toBuffer:R}=j_(),a=Symbol("kByteLength"),p=Buffer.alloc(4),O=8192,u,v=O,F=0,E=1,T=2;class f{constructor($,n,D){if(this._extensions=n||{},D)this._generateMask=D,this._maskBuffer=Buffer.alloc(4);this._socket=$,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=F,this.onerror=o,this[C]=void 0}static frame($,n){let D,w=!1,g=2,h=!1;if(n.mask){if(D=n.maskBuffer||p,n.generateMask)n.generateMask(D);else{if(v===O){if(u===void 0)u=Buffer.alloc(O);t(u,0,O),v=0}D[0]=u[v++],D[1]=u[v++],D[2]=u[v++],D[3]=u[v++]}h=(D[0]|D[1]|D[2]|D[3])===0,g=6}let m;if(typeof $==="string")if((!n.mask||h)&&n[a]!==void 0)m=n[a];else $=Buffer.from($),m=$.length;else m=$.length,w=n.mask&&n.readOnly&&!h;let q=m;if(m>=65536)g+=8,q=127;else if(m>125)g+=2,q=126;let L=Buffer.allocUnsafe(w?m+g:g);if(L[0]=n.fin?n.opcode|128:n.opcode,n.rsv1)L[0]|=64;if(L[1]=q,q===126)L.writeUInt16BE(m,2);else if(q===127)L[2]=L[3]=0,L.writeUIntBE(m,4,6);if(!n.mask)return[L,$];if(L[1]|=128,L[g-4]=D[0],L[g-3]=D[1],L[g-2]=D[2],L[g-1]=D[3],h)return[L,$];if(w)return B($,D,L,g,m),[L];return B($,D,$,0,m),[L,$]}close($,n,D,w){let g;if($===void 0)g=i;else if(typeof $!=="number"||!A($))throw TypeError("First argument must be a valid error code number");else if(n===void 0||!n.length)g=Buffer.allocUnsafe(2),g.writeUInt16BE($,0);else{let m=Buffer.byteLength(n);if(m>123)throw RangeError("The message must not be greater than 123 bytes");if(g=Buffer.allocUnsafe(2+m),g.writeUInt16BE($,0),typeof n==="string")g.write(n,2);else g.set(n,2)}let h={[a]:g.length,fin:!0,generateMask:this._generateMask,mask:D,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==F)this.enqueue([this.dispatch,g,!1,h,w]);else this.sendFrame(f.frame(g,h),w)}ping($,n,D){let w,g;if(typeof $==="string")w=Buffer.byteLength($),g=!1;else if(r($))w=$.size,g=!1;else $=R($),w=$.length,g=R.readOnly;if(w>125)throw RangeError("The data size must not be greater than 125 bytes");let h={[a]:w,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:g,rsv1:!1};if(r($))if(this._state!==F)this.enqueue([this.getBlobData,$,!1,h,D]);else this.getBlobData($,!1,h,D);else if(this._state!==F)this.enqueue([this.dispatch,$,!1,h,D]);else this.sendFrame(f.frame($,h),D)}pong($,n,D){let w,g;if(typeof $==="string")w=Buffer.byteLength($),g=!1;else if(r($))w=$.size,g=!1;else $=R($),w=$.length,g=R.readOnly;if(w>125)throw RangeError("The data size must not be greater than 125 bytes");let h={[a]:w,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:g,rsv1:!1};if(r($))if(this._state!==F)this.enqueue([this.getBlobData,$,!1,h,D]);else this.getBlobData($,!1,h,D);else if(this._state!==F)this.enqueue([this.dispatch,$,!1,h,D]);else this.sendFrame(f.frame($,h),D)}send($,n,D){let w=this._extensions[s.extensionName],g=n.binary?2:1,h=n.compress,m,q;if(typeof $==="string")m=Buffer.byteLength($),q=!1;else if(r($))m=$.size,q=!1;else $=R($),m=$.length,q=R.readOnly;if(this._firstFragment){if(this._firstFragment=!1,h&&w&&w.params[w._isServer?"server_no_context_takeover":"client_no_context_takeover"])h=m>=w._threshold;this._compress=h}else h=!1,g=0;if(n.fin)this._firstFragment=!0;let L={[a]:m,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:g,readOnly:q,rsv1:h};if(r($))if(this._state!==F)this.enqueue([this.getBlobData,$,this._compress,L,D]);else this.getBlobData($,this._compress,L,D);else if(this._state!==F)this.enqueue([this.dispatch,$,this._compress,L,D]);else this.dispatch($,this._compress,L,D)}getBlobData($,n,D,w){this._bufferedBytes+=D[a],this._state=T,$.arrayBuffer().then((g)=>{if(this._socket.destroyed){let m=Error("The socket was closed while the blob was being read");process.nextTick(b,this,m,w);return}this._bufferedBytes-=D[a];let h=R(g);if(!n)this._state=F,this.sendFrame(f.frame(h,D),w),this.dequeue();else this.dispatch(h,n,D,w)}).catch((g)=>{process.nextTick(y,this,g,w)})}dispatch($,n,D,w){if(!n){this.sendFrame(f.frame($,D),w);return}let g=this._extensions[s.extensionName];this._bufferedBytes+=D[a],this._state=E,g.compress($,D.fin,(h,m)=>{if(this._socket.destroyed){let q=Error("The socket was closed while data was being compressed");b(this,q,w);return}this._bufferedBytes-=D[a],this._state=F,D.readOnly=!1,this.sendFrame(f.frame(m,D),w),this.dequeue()})}dequeue(){while(this._state===F&&this._queue.length){let $=this._queue.shift();this._bufferedBytes-=$[3][a],Reflect.apply($[0],this,$.slice(1))}}enqueue($){this._bufferedBytes+=$[3][a],this._queue.push($)}sendFrame($,n){if($.length===2)this._socket.cork(),this._socket.write($[0]),this._socket.write($[1],n),this._socket.uncork();else this._socket.write($[0],n)}}e.exports=f;function b($,n,D){if(typeof D==="function")D(n);for(let w=0;w<$._queue.length;w++){let g=$._queue[w],h=g[g.length-1];if(typeof h==="function")h(n)}}function y($,n,D){b($,n,D),$.onerror(n)}}),Qs=j((_,e)=>{var{kForOnEventAttribute:S,kListener:t}=$_(),s=Symbol("kCode"),i=Symbol("kData"),C=Symbol("kError"),o=Symbol("kMessage"),r=Symbol("kReason"),A=Symbol("kTarget"),B=Symbol("kType"),R=Symbol("kWasClean");class a{constructor(E){this[A]=null,this[B]=E}get target(){return this[A]}get type(){return this[B]}}Object.defineProperty(a.prototype,"target",{enumerable:!0}),Object.defineProperty(a.prototype,"type",{enumerable:!0});class p extends a{constructor(E,T={}){super(E);this[s]=T.code===void 0?0:T.code,this[r]=T.reason===void 0?"":T.reason,this[R]=T.wasClean===void 0?!1:T.wasClean}get code(){return this[s]}get reason(){return this[r]}get wasClean(){return this[R]}}Object.defineProperty(p.prototype,"code",{enumerable:!0}),Object.defineProperty(p.prototype,"reason",{enumerable:!0}),Object.defineProperty(p.prototype,"wasClean",{enumerable:!0});class O extends a{constructor(E,T={}){super(E);this[C]=T.error===void 0?null:T.error,this[o]=T.message===void 0?"":T.message}get error(){return this[C]}get message(){return this[o]}}Object.defineProperty(O.prototype,"error",{enumerable:!0}),Object.defineProperty(O.prototype,"message",{enumerable:!0});class u extends a{constructor(E,T={}){super(E);this[i]=T.data===void 0?null:T.data}get data(){return this[i]}}Object.defineProperty(u.prototype,"data",{enumerable:!0});var v={addEventListener(E,T,f={}){for(let y of this.listeners(E))if(!f[S]&&y[t]===T&&!y[S])return;let b;if(E==="message")b=function($,n){let D=new u("message",{data:n?$:$.toString()});D[A]=this,F(T,this,D)};else if(E==="close")b=function($,n){let D=new p("close",{code:$,reason:n.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});D[A]=this,F(T,this,D)};else if(E==="error")b=function($){let n=new O("error",{error:$,message:$.message});n[A]=this,F(T,this,n)};else if(E==="open")b=function(){let $=new a("open");$[A]=this,F(T,this,$)};else return;if(b[S]=!!f[S],b[t]=T,f.once)this.once(E,b);else this.on(E,b)},removeEventListener(E,T){for(let f of this.listeners(E))if(f[t]===T&&!f[S]){this.removeListener(E,f);break}}};e.exports={CloseEvent:p,ErrorEvent:O,Event:a,EventTarget:v,MessageEvent:u};function F(E,T,f){if(typeof E==="object"&&E.handleEvent)E.handleEvent.call(E,f);else E.call(T,f)}}),Ve=j((_,e)=>{var{tokenChars:S}=W_();function t(C,o,r){if(C[o]===void 0)C[o]=[r];else C[o].push(r)}function s(C){let o=Object.create(null),r=Object.create(null),A=!1,B=!1,R=!1,a,p,O=-1,u=-1,v=-1,F=0;for(;F<C.length;F++)if(u=C.charCodeAt(F),a===void 0)if(v===-1&&S[u]===1){if(O===-1)O=F}else if(F!==0&&(u===32||u===9)){if(v===-1&&O!==-1)v=F}else if(u===59||u===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${F}`);if(v===-1)v=F;let T=C.slice(O,v);if(u===44)t(o,T,r),r=Object.create(null);else a=T;O=v=-1}else throw SyntaxError(`Unexpected character at index ${F}`);else if(p===void 0)if(v===-1&&S[u]===1){if(O===-1)O=F}else if(u===32||u===9){if(v===-1&&O!==-1)v=F}else if(u===59||u===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${F}`);if(v===-1)v=F;if(t(r,C.slice(O,v),!0),u===44)t(o,a,r),r=Object.create(null),a=void 0;O=v=-1}else if(u===61&&O!==-1&&v===-1)p=C.slice(O,F),O=v=-1;else throw SyntaxError(`Unexpected character at index ${F}`);else if(B){if(S[u]!==1)throw SyntaxError(`Unexpected character at index ${F}`);if(O===-1)O=F;else if(!A)A=!0;B=!1}else if(R)if(S[u]===1){if(O===-1)O=F}else if(u===34&&O!==-1)R=!1,v=F;else if(u===92)B=!0;else throw SyntaxError(`Unexpected character at index ${F}`);else if(u===34&&C.charCodeAt(F-1)===61)R=!0;else if(v===-1&&S[u]===1){if(O===-1)O=F}else if(O!==-1&&(u===32||u===9)){if(v===-1)v=F}else if(u===59||u===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${F}`);if(v===-1)v=F;let T=C.slice(O,v);if(A)T=T.replace(/\\/g,""),A=!1;if(t(r,p,T),u===44)t(o,a,r),r=Object.create(null),a=void 0;p=void 0,O=v=-1}else throw SyntaxError(`Unexpected character at index ${F}`);if(O===-1||R||u===32||u===9)throw SyntaxError("Unexpected end of input");if(v===-1)v=F;let E=C.slice(O,v);if(a===void 0)t(o,E,r);else{if(p===void 0)t(r,E,!0);else if(A)t(r,p,E.replace(/\\/g,""));else t(r,p,E);t(o,a,r)}return o}function i(C){return Object.keys(C).map((o)=>{let r=C[o];if(!Array.isArray(r))r=[r];return r.map((A)=>{return[o].concat(Object.keys(A).map((B)=>{let R=A[B];if(!Array.isArray(R))R=[R];return R.map((a)=>a===!0?B:`${B}=${a}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}e.exports={format:i,parse:s}}),he=j((_,e)=>{var S=k("events"),t=k("https"),s=k("http"),i=k("net"),C=k("tls"),{randomBytes:o,createHash:r}=k("crypto"),{Duplex:A,Readable:B}=k("stream"),{URL:R}=k("url"),a=L_(),p=PS(),O=MS(),{isBlob:u}=W_(),{BINARY_TYPES:v,CLOSE_TIMEOUT:F,EMPTY_BUFFER:E,GUID:T,kForOnEventAttribute:f,kListener:b,kStatusCode:y,kWebSocket:$,NOOP:n}=$_(),{EventTarget:{addEventListener:D,removeEventListener:w}}=Qs(),{format:g,parse:h}=Ve(),{toBuffer:m}=j_(),q=Symbol("kAborted"),L=[8,13],G=["CONNECTING","OPEN","CLOSING","CLOSED"],e_=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class d extends S{constructor(c,l,N){super();if(this._binaryType=v[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=E,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=d.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,c!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,l===void 0)l=[];else if(!Array.isArray(l))if(typeof l==="object"&&l!==null)N=l,l=[];else l=[l];s_(this,c,l,N)}else this._autoPong=N.autoPong,this._closeTimeout=N.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(c){if(!v.includes(c))return;if(this._binaryType=c,this._receiver)this._receiver._binaryType=c}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(c,l,N){let W=new p({allowSynchronousEvents:N.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:N.maxPayload,skipUTF8Validation:N.skipUTF8Validation}),H=new O(c,this._extensions,N.generateMask);if(this._receiver=W,this._sender=H,this._socket=c,W[$]=this,H[$]=this,c[$]=this,W.on("conclude",It),W.on("drain",kt),W.on("error",Kt),W.on("message",xt),W.on("ping",zt),W.on("pong",jt),H.onerror=Jt,c.setTimeout)c.setTimeout(0);if(c.setNoDelay)c.setNoDelay();if(l.length>0)c.unshift(l);c.on("close",iS),c.on("data",X_),c.on("end",CS),c.on("error",rS),this._readyState=d.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=d.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[a.extensionName])this._extensions[a.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=d.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(c,l){if(this.readyState===d.CLOSED)return;if(this.readyState===d.CONNECTING){z(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===d.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=d.CLOSING,this._sender.close(c,l,!this._isServer,(N)=>{if(N)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),sS(this)}pause(){if(this.readyState===d.CONNECTING||this.readyState===d.CLOSED)return;this._paused=!0,this._socket.pause()}ping(c,l,N){if(this.readyState===d.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof c==="function")N=c,c=l=void 0;else if(typeof l==="function")N=l,l=void 0;if(typeof c==="number")c=c.toString();if(this.readyState!==d.OPEN){ye(this,c,N);return}if(l===void 0)l=!this._isServer;this._sender.ping(c||E,l,N)}pong(c,l,N){if(this.readyState===d.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof c==="function")N=c,c=l=void 0;else if(typeof l==="function")N=l,l=void 0;if(typeof c==="number")c=c.toString();if(this.readyState!==d.OPEN){ye(this,c,N);return}if(l===void 0)l=!this._isServer;this._sender.pong(c||E,l,N)}resume(){if(this.readyState===d.CONNECTING||this.readyState===d.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(c,l,N){if(this.readyState===d.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof l==="function")N=l,l={};if(typeof c==="number")c=c.toString();if(this.readyState!==d.OPEN){ye(this,c,N);return}let W={binary:typeof c!=="string",mask:!this._isServer,compress:!0,fin:!0,...l};if(!this._extensions[a.extensionName])W.compress=!1;this._sender.send(c||E,W,N)}terminate(){if(this.readyState===d.CLOSED)return;if(this.readyState===d.CONNECTING){z(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=d.CLOSING,this._socket.destroy()}}Object.defineProperty(d,"CONNECTING",{enumerable:!0,value:G.indexOf("CONNECTING")}),Object.defineProperty(d.prototype,"CONNECTING",{enumerable:!0,value:G.indexOf("CONNECTING")}),Object.defineProperty(d,"OPEN",{enumerable:!0,value:G.indexOf("OPEN")}),Object.defineProperty(d.prototype,"OPEN",{enumerable:!0,value:G.indexOf("OPEN")}),Object.defineProperty(d,"CLOSING",{enumerable:!0,value:G.indexOf("CLOSING")}),Object.defineProperty(d.prototype,"CLOSING",{enumerable:!0,value:G.indexOf("CLOSING")}),Object.defineProperty(d,"CLOSED",{enumerable:!0,value:G.indexOf("CLOSED")}),Object.defineProperty(d.prototype,"CLOSED",{enumerable:!0,value:G.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((c)=>{Object.defineProperty(d.prototype,c,{enumerable:!0})}),["open","error","close","message"].forEach((c)=>{Object.defineProperty(d.prototype,`on${c}`,{enumerable:!0,get(){for(let l of this.listeners(c))if(l[f])return l[b];return null},set(l){for(let N of this.listeners(c))if(N[f]){this.removeListener(c,N);break}if(typeof l!=="function")return;this.addEventListener(c,l,{[f]:!0})}})}),d.prototype.addEventListener=D,d.prototype.removeEventListener=w,e.exports=d;function s_(c,l,N,W){let H={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:F,protocolVersion:L[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...W,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(c._autoPong=H.autoPong,c._closeTimeout=H.closeTimeout,!L.includes(H.protocolVersion))throw RangeError(`Unsupported protocol version: ${H.protocolVersion} (supported versions: ${L.join(", ")})`);let U;if(l instanceof R)U=l;else try{U=new R(l)}catch{throw SyntaxError(`Invalid URL: ${l}`)}if(U.protocol==="http:")U.protocol="ws:";else if(U.protocol==="https:")U.protocol="wss:";c._url=U.href;let E_=U.protocol==="wss:",F_=U.protocol==="ws+unix:",d_;if(U.protocol!=="ws:"&&!E_&&!F_)d_=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(F_&&!U.pathname)d_="The URL's pathname is empty";else if(U.hash)d_="The URL contains a fragment identifier";if(d_){let P=SyntaxError(d_);if(c._redirects===0)throw P;else{o_(c,P);return}}let $S=E_?443:80,AS=o(16).toString("base64"),oS=E_?t.request:s.request,H_=new Set,N_;if(H.createConnection=H.createConnection||(E_?oe:Ae),H.defaultPort=H.defaultPort||$S,H.port=U.port||$S,H.host=U.hostname.startsWith("[")?U.hostname.slice(1,-1):U.hostname,H.headers={...H.headers,"Sec-WebSocket-Version":H.protocolVersion,"Sec-WebSocket-Key":AS,Connection:"Upgrade",Upgrade:"websocket"},H.path=U.pathname+U.search,H.timeout=H.handshakeTimeout,H.perMessageDeflate)N_=new a({...H.perMessageDeflate,isServer:!1,maxPayload:H.maxPayload}),H.headers["Sec-WebSocket-Extensions"]=g({[a.extensionName]:N_.offer()});if(N.length){for(let P of N){if(typeof P!=="string"||!e_.test(P)||H_.has(P))throw SyntaxError("An invalid or duplicated subprotocol was specified");H_.add(P)}H.headers["Sec-WebSocket-Protocol"]=N.join(",")}if(H.origin)if(H.protocolVersion<13)H.headers["Sec-WebSocket-Origin"]=H.origin;else H.headers.Origin=H.origin;if(U.username||U.password)H.auth=`${U.username}:${U.password}`;if(F_){let P=H.path.split(":");H.socketPath=P[0],H.path=P[1]}let I;if(H.followRedirects){if(c._redirects===0){c._originalIpc=F_,c._originalSecure=E_,c._originalHostOrSocketPath=F_?H.socketPath:U.host;let P=W&&W.headers;if(W={...W,headers:{}},P)for(let[x,b_]of Object.entries(P))W.headers[x.toLowerCase()]=b_}else if(c.listenerCount("redirect")===0){let P=F_?c._originalIpc?H.socketPath===c._originalHostOrSocketPath:!1:c._originalIpc?!1:U.host===c._originalHostOrSocketPath;if(!P||c._originalSecure&&!E_){if(delete H.headers.authorization,delete H.headers.cookie,!P)delete H.headers.host;H.auth=void 0}}if(H.auth&&!W.headers.authorization)W.headers.authorization="Basic "+Buffer.from(H.auth).toString("base64");if(I=c._req=oS(H),c._redirects)c.emit("redirect",c.url,I)}else I=c._req=oS(H);if(H.timeout)I.on("timeout",()=>{z(c,I,"Opening handshake has timed out")});if(I.on("error",(P)=>{if(I===null||I[q])return;I=c._req=null,o_(c,P)}),I.on("response",(P)=>{let x=P.headers.location,b_=P.statusCode;if(x&&H.followRedirects&&b_>=300&&b_<400){if(++c._redirects>H.maxRedirects){z(c,I,"Maximum redirects exceeded");return}I.abort();let V_;try{V_=new R(x,l)}catch(yS){let O_=SyntaxError(`Invalid URL: ${x}`);o_(c,O_);return}s_(c,V_,N,W)}else if(!c.emit("unexpected-response",I,P))z(c,I,`Unexpected server response: ${P.statusCode}`)}),I.on("upgrade",(P,x,b_)=>{if(c.emit("upgrade",P),c.readyState!==d.CONNECTING)return;I=c._req=null;let V_=P.headers.upgrade;if(V_===void 0||V_.toLowerCase()!=="websocket"){z(c,x,"Invalid Upgrade header");return}let yS=r("sha1").update(AS+T).digest("base64");if(P.headers["sec-websocket-accept"]!==yS){z(c,x,"Invalid Sec-WebSocket-Accept header");return}let O_=P.headers["sec-websocket-protocol"],h_;if(O_!==void 0){if(!H_.size)h_="Server sent a subprotocol but none was requested";else if(!H_.has(O_))h_="Server sent an invalid subprotocol"}else if(H_.size)h_="Server sent no subprotocol";if(h_){z(c,x,h_);return}if(O_)c._protocol=O_;let nS=P.headers["sec-websocket-extensions"];if(nS!==void 0){if(!N_){z(c,x,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let ne;try{ne=h(nS)}catch(ae){z(c,x,"Invalid Sec-WebSocket-Extensions header");return}let aS=Object.keys(ne);if(aS.length!==1||aS[0]!==a.extensionName){z(c,x,"Server indicated an extension that was not requested");return}try{N_.accept(ne[a.extensionName])}catch(ae){z(c,x,"Invalid Sec-WebSocket-Extensions header");return}c._extensions[a.extensionName]=N_}c.setSocket(x,b_,{allowSynchronousEvents:H.allowSynchronousEvents,generateMask:H.generateMask,maxPayload:H.maxPayload,skipUTF8Validation:H.skipUTF8Validation})}),H.finishRequest)H.finishRequest(I,c);else I.end()}function o_(c,l){c._readyState=d.CLOSING,c._errorEmitted=!0,c.emit("error",l),c.emitClose()}function Ae(c){return c.path=c.socketPath,i.connect(c)}function oe(c){if(c.path=void 0,!c.servername&&c.servername!=="")c.servername=i.isIP(c.host)?"":c.host;return C.connect(c)}function z(c,l,N){c._readyState=d.CLOSING;let W=Error(N);if(Error.captureStackTrace(W,z),l.setHeader){if(l[q]=!0,l.abort(),l.socket&&!l.socket.destroyed)l.socket.destroy();process.nextTick(o_,c,W)}else l.destroy(W),l.once("error",c.emit.bind(c,"error")),l.once("close",c.emitClose.bind(c))}function ye(c,l,N){if(l){let W=u(l)?l.size:m(l).length;if(c._socket)c._sender._bufferedBytes+=W;else c._bufferedAmount+=W}if(N){let W=Error(`WebSocket is not open: readyState ${c.readyState} (${G[c.readyState]})`);process.nextTick(N,W)}}function It(c,l){let N=this[$];if(N._closeFrameReceived=!0,N._closeMessage=l,N._closeCode=c,N._socket[$]===void 0)return;if(N._socket.removeListener("data",X_),process.nextTick(tS,N._socket),c===1005)N.close();else N.close(c,l)}function kt(){let c=this[$];if(!c.isPaused)c._socket.resume()}function Kt(c){let l=this[$];if(l._socket[$]!==void 0)l._socket.removeListener("data",X_),process.nextTick(tS,l._socket),l.close(c[y]);if(!l._errorEmitted)l._errorEmitted=!0,l.emit("error",c)}function SS(){this[$].emitClose()}function xt(c,l){this[$].emit("message",c,l)}function zt(c){let l=this[$];if(l._autoPong)l.pong(c,!this._isServer,n);l.emit("ping",c)}function jt(c){this[$].emit("pong",c)}function tS(c){c.resume()}function Jt(c){let l=this[$];if(l.readyState===d.CLOSED)return;if(l.readyState===d.OPEN)l._readyState=d.CLOSING,sS(l);if(this._socket.end(),!l._errorEmitted)l._errorEmitted=!0,l.emit("error",c)}function sS(c){c._closeTimer=setTimeout(c._socket.destroy.bind(c._socket),c._closeTimeout)}function iS(){let c=this[$];if(this.removeListener("close",iS),this.removeListener("data",X_),this.removeListener("end",CS),c._readyState=d.CLOSING,!this._readableState.endEmitted&&!c._closeFrameReceived&&!c._receiver._writableState.errorEmitted&&this._readableState.length!==0){let l=this.read(this._readableState.length);c._receiver.write(l)}if(c._receiver.end(),this[$]=void 0,clearTimeout(c._closeTimer),c._receiver._writableState.finished||c._receiver._writableState.errorEmitted)c.emitClose();else c._receiver.on("error",SS),c._receiver.on("finish",SS)}function X_(c){if(!this[$]._receiver.write(c))this.pause()}function CS(){let c=this[$];c._readyState=d.CLOSING,c._receiver.end(),this.end()}function rS(){let c=this[$];if(this.removeListener("error",rS),this.on("error",n),c)c._readyState=d.CLOSING,this.destroy()}}),Ys=j((_,e)=>{var S=he(),{Duplex:t}=k("stream");function s(r){r.emit("close")}function i(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function C(r){if(this.removeListener("error",C),this.destroy(),this.listenerCount("error")===0)this.emit("error",r)}function o(r,A){let B=!0,R=new t({...A,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(p,O){let u=!O&&R._readableState.objectMode?p.toString():p;if(!R.push(u))r.pause()}),r.once("error",function(p){if(R.destroyed)return;B=!1,R.destroy(p)}),r.once("close",function(){if(R.destroyed)return;R.push(null)}),R._destroy=function(a,p){if(r.readyState===r.CLOSED){p(a),process.nextTick(s,R);return}let O=!1;if(r.once("error",function(v){O=!0,p(v)}),r.once("close",function(){if(!O)p(a);process.nextTick(s,R)}),B)r.terminate()},R._final=function(a){if(r.readyState===r.CONNECTING){r.once("open",function(){R._final(a)});return}if(r._socket===null)return;if(r._socket._writableState.finished){if(a(),R._readableState.endEmitted)R.destroy()}else r._socket.once("finish",function(){a()}),r.close()},R._read=function(){if(r.isPaused)r.resume()},R._write=function(a,p,O){if(r.readyState===r.CONNECTING){r.once("open",function(){R._write(a,p,O)});return}r.send(a,O)},R.on("end",i),R.on("error",C),R}e.exports=o}),US=j((_,e)=>{var{tokenChars:S}=W_();function t(s){let i=new Set,C=-1,o=-1,r=0;for(r;r<s.length;r++){let B=s.charCodeAt(r);if(o===-1&&S[B]===1){if(C===-1)C=r}else if(r!==0&&(B===32||B===9)){if(o===-1&&C!==-1)o=r}else if(B===44){if(C===-1)throw SyntaxError(`Unexpected character at index ${r}`);if(o===-1)o=r;let R=s.slice(C,o);if(i.has(R))throw SyntaxError(`The "${R}" subprotocol is duplicated`);i.add(R),C=o=-1}else throw SyntaxError(`Unexpected character at index ${r}`)}if(C===-1||o!==-1)throw SyntaxError("Unexpected end of input");let A=s.slice(C,r);if(i.has(A))throw SyntaxError(`The "${A}" subprotocol is duplicated`);return i.add(A),i}e.exports={parse:t}}),_i=j((_,e)=>{var S=k("events"),t=k("http"),{Duplex:s}=k("stream"),{createHash:i}=k("crypto"),C=Ve(),o=L_(),r=US(),A=he(),{CLOSE_TIMEOUT:B,GUID:R,kWebSocket:a}=$_(),p=/^[+/0-9A-Za-z]{22}==$/,O=0,u=1,v=2;class F extends S{constructor($,n){super();if($={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:B,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:A,...$},$.port==null&&!$.server&&!$.noServer||$.port!=null&&($.server||$.noServer)||$.server&&$.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if($.port!=null)this._server=t.createServer((D,w)=>{let g=t.STATUS_CODES[426];w.writeHead(426,{"Content-Length":g.length,"Content-Type":"text/plain"}),w.end(g)}),this._server.listen($.port,$.host,$.backlog,n);else if($.server)this._server=$.server;if(this._server){let D=this.emit.bind(this,"connection");this._removeListeners=E(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(w,g,h)=>{this.handleUpgrade(w,g,h,D)}})}if($.perMessageDeflate===!0)$.perMessageDeflate={};if($.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=$,this._state=O}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close($){if(this._state===v){if($)this.once("close",()=>{$(Error("The server is not running"))});process.nextTick(T,this);return}if($)this.once("close",$);if(this._state===u)return;if(this._state=u,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(T,this);else this._shouldEmitClose=!0;else process.nextTick(T,this)}else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{T(this)})}}shouldHandle($){if(this.options.path){let n=$.url.indexOf("?");if((n!==-1?$.url.slice(0,n):$.url)!==this.options.path)return!1}return!0}handleUpgrade($,n,D,w){n.on("error",f);let g=$.headers["sec-websocket-key"],h=$.headers.upgrade,m=+$.headers["sec-websocket-version"];if($.method!=="GET"){y(this,$,n,405,"Invalid HTTP method");return}if(h===void 0||h.toLowerCase()!=="websocket"){y(this,$,n,400,"Invalid Upgrade header");return}if(g===void 0||!p.test(g)){y(this,$,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(m!==13&&m!==8){y(this,$,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle($)){b(n,400);return}let q=$.headers["sec-websocket-protocol"],L=new Set;if(q!==void 0)try{L=r.parse(q)}catch(d){y(this,$,n,400,"Invalid Sec-WebSocket-Protocol header");return}let G=$.headers["sec-websocket-extensions"],e_={};if(this.options.perMessageDeflate&&G!==void 0){let d=new o({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let s_=C.parse(G);if(s_[o.extensionName])d.accept(s_[o.extensionName]),e_[o.extensionName]=d}catch(s_){y(this,$,n,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let d={origin:$.headers[`${m===8?"sec-websocket-origin":"origin"}`],secure:!!($.socket.authorized||$.socket.encrypted),req:$};if(this.options.verifyClient.length===2){this.options.verifyClient(d,(s_,o_,Ae,oe)=>{if(!s_)return b(n,o_||401,Ae,oe);this.completeUpgrade(e_,g,L,$,n,D,w)});return}if(!this.options.verifyClient(d))return b(n,401)}this.completeUpgrade(e_,g,L,$,n,D,w)}completeUpgrade($,n,D,w,g,h,m){if(!g.readable||!g.writable)return g.destroy();if(g[a])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>O)return b(g,503);let L=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${i("sha1").update(n+R).digest("base64")}`],G=new this.options.WebSocket(null,void 0,this.options);if(D.size){let e_=this.options.handleProtocols?this.options.handleProtocols(D,w):D.values().next().value;if(e_)L.push(`Sec-WebSocket-Protocol: ${e_}`),G._protocol=e_}if($[o.extensionName]){let e_=$[o.extensionName].params,d=C.format({[o.extensionName]:[e_]});L.push(`Sec-WebSocket-Extensions: ${d}`),G._extensions=$}if(this.emit("headers",L,w),g.write(L.concat(`\r
|
|
34
34
|
`).join(`\r
|
|
35
|
-
`)),
|
|
36
|
-
`+Object.keys(w).map((
|
|
35
|
+
`)),g.removeListener("error",f),G.setSocket(g,h,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(G),G.on("close",()=>{if(this.clients.delete(G),this._shouldEmitClose&&!this.clients.size)process.nextTick(T,this)});m(G,w)}}e.exports=F;function E($,n){for(let D of Object.keys(n))$.on(D,n[D]);return function(){for(let w of Object.keys(n))$.removeListener(w,n[w])}}function T($){$._state=v,$.emit("close")}function f(){this.destroy()}function b($,n,D,w){D=D||t.STATUS_CODES[n],w={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(D),...w},$.once("finish",$.destroy),$.end(`HTTP/1.1 ${n} ${t.STATUS_CODES[n]}\r
|
|
36
|
+
`+Object.keys(w).map((g)=>`${g}: ${w[g]}`).join(`\r
|
|
37
37
|
`)+`\r
|
|
38
38
|
\r
|
|
39
|
-
`+D)}function y($,n,D,w,d,h){if($.listenerCount("wsClientError")){let m=Error(d);Error.captureStackTrace(m,y),$.emit("wsClientError",m,D,n)}else b(D,w,d,h)}});Br=i_(cs(),1),cr=i_(ve(),1),Dr=i_(N_(),1),Tr=i_(fS(),1),fr=i_(ES(),1),Er=i_(FS(),1),Vs=i_(pe(),1),gS=i_(Ds(),1),DS=Vs.default;ks={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},Ks={"Network.requestWillBeSent":{walltime:"wallTime"}},xs={hasUserGesture:!1,redirectHasExtraInfo:!1},zs={hasExtraInfo:!1},js={encodedDataLength:0,shouldReportCorbBlocking:!1},Js={initialPriority:"Medium",referrerPolicy:"origin"},Zs={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};$i={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};ai={protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"605.1.15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""};Fi=["Animation","Autofill","Audits","ServiceWorker","Profiler","HeapProfiler","Storage","Tethering","Tracing","BackgroundService","FedCm","DeviceAccess","WebAuthn","Cast","Database","ApplicationCache","BackgroundFetch","DeviceOrientation","EventBreakpoints","FileSystem","HeadlessExperimental","IndexedDB","Memory","PerformanceTimeline","Performance","Preload","Schema","Security","SystemInfo","WebAudio"],bi={"Inspector.enable":{},"Inspector.disable":{},"Network.setAttachDebugStack":{},"Network.emulateNetworkConditionsByRule":{ruleIds:[]},"Network.overrideNetworkState":{},"Network.clearAcceptedEncodingsOverride":{},"Network.setAcceptedEncodings":{},"Network.enableReportingApi":{},"Overlay.setShowHinge":{},"Overlay.setShowViewportSizeOnResize":{},"Overlay.setShowGridOverlays":{},"Overlay.setShowFlexOverlays":{},"Overlay.setShowScrollSnapOverlays":{},"Overlay.setShowContainerQueryOverlays":{},"Overlay.setShowIsolatedElements":{},"Overlay.setPausedInDebuggerMessage":{},"Overlay.setShowAdHighlights":{},"Overlay.setShowDebugBorders":{},"Overlay.setShowFPSCounter":{},"Overlay.setShowLayoutShiftRegions":{},"Overlay.setShowScrollBottleneckRects":{},"Overlay.setShowHitTestBorders":{},"Overlay.setShowWebVitals":{},"CSS.trackComputedStyleUpdates":{},"CSS.takeComputedStyleUpdates":{nodeIds:[]},"CSS.startRuleUsageTracking":{},"CSS.stopRuleUsageTracking":{ruleUsage:[]},"CSS.takeCoverageDelta":{coverage:[],timestamp:0},"Page.setAdBlockingEnabled":{},"Page.removeScriptToEvaluateOnNewDocument":{},"Page.setBypassCSP":{},"Page.setInterceptFileChooserDialog":{},"Page.setPrerenderingAllowed":{},"Page.setRPHRegistrationMode":{},"Page.setSPCTransactionMode":{},"Emulation.setEmulatedVisionDeficiency":{},"Emulation.setFocusEmulationEnabled":{},"Emulation.setAutoDarkModeOverride":{},"Emulation.setAutomationOverride":{},"Emulation.setLocaleOverride":{},"Emulation.setTimezoneOverride":{},"Emulation.setVisibleSize":{},"Emulation.setIdleOverride":{},"Emulation.clearIdleOverride":{},"Emulation.setGeolocationOverride":{},"Emulation.clearGeolocationOverride":{},"Emulation.setSensorOverrideEnabled":{},"Emulation.setSensorOverrideReadings":{},"Emulation.setHardwareConcurrencyOverride":{},"Emulation.setNavigatorOverrides":{},"Emulation.setPageScaleFactor":{},"Emulation.setScrollbarsHidden":{},"Emulation.setDocumentCookieDisabled":{},"DOMDebugger.setBreakOnCSPViolation":{},"Runtime.addBinding":{},"Runtime.removeBinding":{},"Debugger.setReturnValue":{},"Debugger.setBlackboxExecutionContexts":{},"Debugger.setInstrumentationBreakpoint":{},"DOM.markUndoableState":{},"DOM.undo":{},"DOM.redo":{},"DOM.copyTo":{nodeId:0},"DOM.collectClassNamesFromSubtree":{classNames:[]},"Accessibility.enable":{},"Accessibility.disable":{},"Accessibility.getFullAXTree":{nodes:[]},"Accessibility.getRootAXNode":{node:null},"Accessibility.getPartialAXTree":{nodes:[]},"Accessibility.queryAXTree":{nodes:[]},"Accessibility.getAXNodeAndAncestors":{nodes:[]},"Accessibility.getChildAXNodes":{nodes:[]}};pi={"&":"&","<":"<",">":">",'"':""","'":"'"}});var _t={};sS(_t,{simMiddleware:()=>RC,selectServeSimState:()=>a_,previewConfigForState:()=>he,parseForegroundAppLogMessage:()=>YS,matchInstalledAppByDisplayName:()=>Yi});import{readdirSync as Gi,readFileSync as Ii,existsSync as ZS,unlinkSync as XS}from"fs";import{execSync as R_,spawn as He,exec as qi,execFile as QS}from"child_process";import{tmpdir as Xi}from"os";import{join as me}from"path";import{createServer as ki}from"net";import{randomBytes as Ki,timingSafeEqual as xi}from"crypto";function KS(_){return!Qi.test(_)}function YS(_){let e=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(_);if(!e)return null;return{bundleId:e[1],pid:parseInt(e[2],10)}}function xS(_,e){if(Ji.has(e))return Promise.resolve(!0);return new Promise((S)=>{QS("xcrun",["simctl","get_app_container",_,e,"app"],{timeout:2000},(t,s)=>{if(t)return S(!1);let i=s.trim();if(!i)return S(!1);for(let C of Zi)if(ZS(me(i,C)))return S(!0);S(!1)})})}function zS(_){return _.trim().replace(/\s+/g," ").toLowerCase()}function Yi(_,e){let S=zS(e);if(!S)return null;for(let[t,s]of Object.entries(_))if([s.CFBundleDisplayName,s.CFBundleName,s.CFBundleExecutable].filter((C)=>typeof C==="string").some((C)=>zS(C)===S))return s.CFBundleIdentifier||t;return null}function _C(){let _=Date.now();if(m_.booted&&_-m_.at<1500)return m_.booted;try{let e=R_("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),S=JSON.parse(e),t=new Set;for(let s of Object.values(S.devices))for(let i of s)if(i.state==="Booted")t.add(i.udid);return m_={at:_,booted:t},t}catch{return null}}function n_(){let _;try{_=Gi(kS).filter((t)=>t.startsWith("server-")&&t.endsWith(".json"))}catch{return[]}let e=_C(),S=[];for(let t of _){let s=me(kS,t);try{let i=JSON.parse(Ii(s,"utf-8"));try{process.kill(i.pid,0)}catch{try{XS(s)}catch{}continue}if(e&&!e.has(i.device)){try{process.kill(i.pid,"SIGTERM")}catch{}try{XS(s)}catch{}continue}S.push(i)}catch{}}return S}function a_(_,e){if(e)return _.find((S)=>S.device===e)??null;return _[0]??null}function eC(_){let e=_.indexOf("?");if(e===-1)return null;return new URLSearchParams(_.slice(e+1)).get("device")}function J_(_,e,S){return`${`${_}${e}`}?device=${encodeURIComponent(S)}`}function he(_,e,S,t){let s=(e===""?"":e)+"/grid/api";return{..._,basePath:e,logsEndpoint:J_(e,"/logs",_.device),appStateEndpoint:J_(e,"/appstate",_.device),axEndpoint:J_(e,"/ax",_.device),devtoolsEndpoint:J_(e,"/devtools",_.device),serveSimBin:S,gridApiEndpoint:s,gridStartEndpoint:s+"/start",gridShutdownEndpoint:s+"/shutdown",gridMemoryEndpoint:s+"/memory",previewEndpoint:e===""?"/":e,execToken:t}}async function SC(_){return new Promise((e)=>{let S=ki();S.once("error",()=>e(!1)),S.once("listening",()=>S.close(()=>e(!0))),S.listen(_,"127.0.0.1")})}async function jS(_){let e=`http://127.0.0.1:${_}`;try{let S=await fetch(`${e}/json/version`);if(!S.ok)return null;if((await S.json()).Browser!=="Safari/inspect-webkit")return null;return{port:_,cdpUrl:e,async listTargets(){return(await(await fetch(`${e}/json/list`)).json()).filter((C)=>C.id.startsWith("sim:")).map((C)=>{let r=C.id.split(":")[1],A=C.description?.match(/\(([^)]+)\)/)?.[1];return{id:C.id,title:C.title||C.url||"Untitled",url:/^https?:/i.test(C.url)?C.url:"about:blank",type:C.type||"page",udid:r,bundleId:A}})}}}catch{return null}}async function Ne(){if(y_)try{return await(await y_).listTargets(),y_}catch{y_=null}return y_=(async()=>{let{startCdpServer:_}=await Promise.resolve().then(() => (qS(),IS));for(let e=j_;e<j_+50;e++){if(!await SC(e)){let S=await jS(e);if(S)return S;continue}try{let S=await _({host:"127.0.0.1",port:e});return{port:e,cdpUrl:`http://127.0.0.1:${e}`,async listTargets(){return S.getTargets().filter((t)=>t.source?.kind==="simulator").map((t)=>{let s=t.url??"";return{id:t.targetId,title:t.title||t.appName||s||"Untitled",url:/^https?:/i.test(s)?s:"about:blank",type:t.type||"page",appName:t.appName,bundleId:t.bundleId,udid:t.source?.id,inUseByOtherInspector:!!t.inUseByOtherInspector}})},highlightTarget:S.highlightTarget?.bind(S),releaseHighlight:S.releaseHighlight?.bind(S)}}catch(S){if(S?.code==="EADDRINUSE"){let t=await jS(e);if(t)return t;continue}throw S}}throw Error(`No available inspect-webkit port found in ${j_}-${j_+49}`)})().catch((_)=>{throw y_=null,_}),y_}function tC(_,e,S){let t=new URL(`${_}/inspector.html`,"http://serve-sim.local");return t.searchParams.set("ws",`${e}/devtools/page/${S}`),`${t.pathname}${t.search}`}function sC(_,e){return`127.0.0.1:${e}`}function JS(){try{let _=process.argv;if(_[1]&&ZS(_[1]))return _[1]}catch{}return"serve-sim"}function iC(){if(!Ve)Ve=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1ub3JtYWw6NDAwOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXdpZGU6LjAyNWVtOy0tbGVhZGluZy10aWdodDoxLjI1Oy0tcmFkaXVzLXhzOi4xMjVyZW07LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzojMTQxNDE2ZWI7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxNDE0MTZhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2VzczojNGFkZTgwOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLjV7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMVwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnJpZ2h0LTJcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5yaWdodC0ze3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnJpZ2h0LTR7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucmlnaHQtXFs5cHhcXXtyaWdodDo5cHh9LmJvdHRvbS0we2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5ib3R0b20tM3tib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uYm90dG9tLTR7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqNCl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LnotXFsyXF17ei1pbmRleDoyfS5jb2wtc3Bhbi1mdWxse2dyaWQtY29sdW1uOjEvLTF9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMTApfS5oLVxbM3B4XF17aGVpZ2h0OjNweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzIycHhcXXtoZWlnaHQ6MjJweH0uaC1cWzI2cHhcXXtoZWlnaHQ6MjZweH0uaC1cWzMwcHhcXXtoZWlnaHQ6MzBweH0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXB4e2hlaWdodDoxcHh9Lmgtc2NyZWVue2hlaWdodDoxMDB2aH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFs3MHZoXF17bWF4LWhlaWdodDo3MHZofS5tYXgtaC1cWzI2MHB4XF17bWF4LWhlaWdodDoyNjBweH0ubWF4LWgtXFszMjBweFxde21heC1oZWlnaHQ6MzIwcHh9Lm1heC1oLWZ1bGx7bWF4LWhlaWdodDoxMDAlfS5taW4taC0we21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLWgtXFsyMnB4XF17bWluLWhlaWdodDoyMnB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0udy01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnctNVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LnctNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS53LTd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0udy0xMHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0udy0yMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIxKX0udy1cWzIycHhcXXt3aWR0aDoyMnB4fS53LVxbMzBweFxde3dpZHRoOjMwcHh9LnctXFs0MFwlXF17d2lkdGg6NDAlfS53LVxbY2FsY1woMTAwXCVcKzhweFwpXF17d2lkdGg6Y2FsYygxMDAlICsgOHB4KX0udy1mdWxse3dpZHRoOjEwMCV9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzMyMHB4XF17bWF4LXdpZHRoOjMyMHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy02NXttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2NSl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0ucm90YXRlLTB7cm90YXRlOm5vbmV9LnJvdGF0ZS0xODB7cm90YXRlOjE4MGRlZ30udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5hdXRvLXJvd3MtXFttaW5tYXhcKDMwMHB4XCxhdXRvXClcXXtncmlkLWF1dG8tcm93czptaW5tYXgoMzAwcHgsYXV0byl9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDoxZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcn0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0b30uZ3JpZC1jb2xzLVxbcmVwZWF0XChhdXRvLWZpbGxcLG1pbm1heFwoMjAwcHhcLDFmclwpXClcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjAwcHgsMWZyKSl9LmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jb250ZW50LXN0YXJ0e2FsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnR9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtXFs1cHhcXXtnYXA6NXB4fS5nYXAtcHh7Z2FwOjFweH0uanVzdGlmeS1zZWxmLWVuZHtqdXN0aWZ5LXNlbGY6ZmxleC1lbmR9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC1cWzJweFxde2JvcmRlci1yYWRpdXM6MnB4fS5yb3VuZGVkLVxbM3B4XF17Ym9yZGVyLXJhZGl1czozcHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFsxMHB4XF17Ym9yZGVyLXJhZGl1czoxMHB4fS5yb3VuZGVkLVxbMTRweFxde2JvcmRlci1yYWRpdXM6MTRweH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLWxnKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlwhYm9yZGVyLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC42XClcXXtib3JkZXItY29sb3I6IzBhODRmZjk5IWltcG9ydGFudH0uYm9yZGVyLVxbXCMyYTJhMmFcXXtib3JkZXItY29sb3I6IzJhMmEyYX0uYm9yZGVyLVxbXCMyMjJcXXtib3JkZXItY29sb3I6IzIyMn0uYm9yZGVyLVxbXCMzMzNcXXtib3JkZXItY29sb3I6IzMzM30uYm9yZGVyLVxbXCM0NDRcXXtib3JkZXItY29sb3I6IzQ0NH0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTV7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzE1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMxYTFhMWFcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYTFhMWF9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCMxZDJhMWRcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxZDJhMWR9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMxMTFcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoMjBcLDIwXCwyMFwsMFwuODVcKVxde2JhY2tncm91bmQtY29sb3I6IzE0MTQxNGQ5fS5iZy1cW3JnYmFcKDIwXCwyMlwsMjhcLDBcLjc4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxNDE2MWNjN30uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjEyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjExZn0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtZGVlcHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWRlZXApfS5iZy1wYW5lbC1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtb3ZlcmxheSl9LmJnLXN1Y2Nlc3MtZW1lcmFsZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXN1Y2Nlc3MtZW1lcmFsZCl9LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6IzAwMDB9LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZiYmYyNDFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtMntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMil9LnAtM3twYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC00e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtXFs3cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo3cHg7cGFkZGluZy1pbmxpbmUtZW5kOjdweH0ucHktMFwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5weS0xe3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHktMVwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHktMntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMil9LnB5LTJcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHktcHh7cGFkZGluZy1ibG9jay1zdGFydDoxcHg7cGFkZGluZy1ibG9jay1lbmQ6MXB4fS5wdC0xe3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB0LTFcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wdC0ye3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLVxbMnB4XF17cGFkZGluZy1ib3R0b206MnB4fS5wbC0ye3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnBsLTZ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNil9LnBsLTd7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LnBsLVxbMjZweFxde3BhZGRpbmctbGVmdDoyNnB4fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0uXFtmb250LWZhbWlseVw6LWFwcGxlLXN5c3RlbVwsc3lzdGVtLXVpXCxzYW5zLXNlcmlmXF17Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxOb3RvIFNhbnMsVWJ1bnR1LENhbnRhcmVsbCxIZWx2ZXRpY2EgTmV1ZSxzYW5zLXNlcmlmfS5mb250LVxbaW5oZXJpdFxde2ZvbnQtZmFtaWx5OmluaGVyaXR9LmZvbnQtbW9ub3tmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pfS5mb250LXN5c3RlbXtmb250LWZhbWlseTp2YXIoLS1mb250LXN5c3RlbSl9LnRleHQtXFs5cHhcXXtmb250LXNpemU6OXB4fS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LVxbMTFcLjVweFxde2ZvbnQtc2l6ZToxMS41cHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtXFsxM3B4XF17Zm9udC1zaXplOjEzcHh9LnRleHQtXFsxNHB4XF17Zm9udC1zaXplOjE0cHh9LnRleHQtXFsxOHB4XF17Zm9udC1zaXplOjE4cHh9LnRleHQtXFsyOHB4XF17Zm9udC1zaXplOjI4cHh9LmxlYWRpbmctXFsxXC41XF17LS10dy1sZWFkaW5nOjEuNTtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctXFsxXC4zNVxdey0tdHctbGVhZGluZzoxLjM1O2xpbmUtaGVpZ2h0OjEuMzV9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXRpZ2h0ey0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXRpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXRpZ2h0KX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtbm9ybWFsey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctXFswXC4xZW1cXXstLXR3LXRyYWNraW5nOi4xZW07bGV0dGVyLXNwYWNpbmc6LjFlbX0udHJhY2tpbmctXFswXC4wMmVtXF17LS10dy10cmFja2luZzouMDJlbTtsZXR0ZXItc3BhY2luZzouMDJlbX0udHJhY2tpbmctXFswXC4wNGVtXF17LS10dy10cmFja2luZzouMDRlbTtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17LS10dy10cmFja2luZzouMDZlbTtsZXR0ZXItc3BhY2luZzouMDZlbX0udHJhY2tpbmctXFswXC4wOGVtXF17LS10dy10cmFja2luZzouMDhlbTtsZXR0ZXItc3BhY2luZzouMDhlbX0udHJhY2tpbmctd2lkZXstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXdpZGUpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGUpfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnRleHQtZWxsaXBzaXN7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5cIXRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpIWltcG9ydGFudH0udGV4dC1cW1wjMGEwYTBjXF17Y29sb3I6IzBhMGEwY30udGV4dC1cW1wjOGU4ZTkzXF17Y29sb3I6IzhlOGU5M30udGV4dC1cW1wjMDYyMDE4XF17Y29sb3I6IzA2MjAxOH0udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtaW5oZXJpdHtjb2xvcjppbmhlcml0fS50ZXh0LXN1Y2Nlc3N7Y29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcyl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5vcGFjaXR5LTB7b3BhY2l0eTowfS5vcGFjaXR5LTQwe29wYWNpdHk6LjR9Lm9wYWNpdHktNTB7b3BhY2l0eTouNX0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF80cHhfMTJweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDRweCAxMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMTJweF80MHB4X3JnYmFcKDBcLDBcLDBcLDBcLjU1XClcXXstLXR3LXNoYWRvdzowIDEycHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDhjKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmd7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDFweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoNzRcLDIyMlwsMTI4XCwwXC43XClcXXtib3gtc2hhZG93OjAgMCA2cHggIzRhZGU4MGIzfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoMjQ4XCwxMTNcLDExM1wsMFwuNTVcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjZjg3MTcxOGN9Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1ci1cWzJweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LnRyYW5zaXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10byxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLHRyYW5zbGF0ZSxzY2FsZSxyb3RhdGUsZmlsdGVyLC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyLGJhY2tkcm9wLWZpbHRlcixkaXNwbGF5LGNvbnRlbnQtdmlzaWJpbGl0eSxvdmVybGF5LHBvaW50ZXItZXZlbnRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFtib3JkZXItY29sb3JcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFt3aWR0aFwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6d2lkdGgsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0uZHVyYXRpb24tMTUwey0tdHctZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHstLXR3LWR1cmF0aW9uOi4yczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZHVyYXRpb24tMzAwey0tdHctZHVyYXRpb246LjNzO3RyYW5zaXRpb24tZHVyYXRpb246LjNzfS5lYXNlLW91dHstLXR3LWVhc2U6dmFyKC0tZWFzZS1vdXQpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2Utb3V0KX0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdC10ZXh0ey13ZWJraXQtdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0fS5cWy13ZWJraXQtYXBwZWFyYW5jZVw6bm9uZVxdey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5cWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyXDpibHVyXCgxMnB4XClcXXstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpfS5cW3Njcm9sbGJhci13aWR0aFw6dGhpblxde3Njcm9sbGJhci13aWR0aDp0aGlufS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMnNcLGJveC1zaGFkb3dfMFwuMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzLGJveC1zaGFkb3cgLjJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuM3NcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjNzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxib3JkZXItY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsYm9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJvcmRlci1jb2xvcl8xMjBtc1xde3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6Y29sb3JfMFwuM3NcXXt0cmFuc2l0aW9uOmNvbG9yIC4zc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDp0cmFuc2Zvcm1fMFwuMTVzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjF9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGU6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fX0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9fUBrZXlmcmFtZXMgZ3JpZC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDI1MCUpfX0uc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7YW5pbWF0aW9uOnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9LmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uZ3JpZC10aWxlOmhvdmVyIC5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjF9LmdyaWQtc2h1dGRvd24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNWExZDFkO2JvcmRlci1jb2xvcjojYTMzfS5ncmlkLXRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM1NTUhaW1wb3J0YW50fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZWFzZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKC13ZWJraXQtaHlwaGVuczogbm9uZSkgYW5kICggbm90IChtYXJnaW4tdHJpbTogaW5saW5lKSkpIG9yICgoLW1vei1vcmllbnQ6IGlubGluZSkgYW5kICggbm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpeyosOmJlZm9yZSw6YWZ0ZXIsOjpiYWNrZHJvcHstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctdHJhbnNsYXRlLXo6MDstLXR3LXJvdGF0ZS14OmluaXRpYWw7LS10dy1yb3RhdGUteTppbml0aWFsOy0tdHctcm90YXRlLXo6aW5pdGlhbDstLXR3LXNrZXcteDppbml0aWFsOy0tdHctc2tldy15OmluaXRpYWw7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBhMCxsLEI1LHM4LHIxLEc1LF81LGs1LEgyLGwwLEUwLEQ1LHcyLEEyLE8yLFU1LG8wPXt9LGQwPVtdLHQ4PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksSTA9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiB1MShDLCQpe2Zvcih2YXIgSyBpbiAkKUNbS109JFtLXTtyZXR1cm4gQ31mdW5jdGlvbiBiMihDKXtDJiZDLnBhcmVudE5vZGUmJkMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChDKX1mdW5jdGlvbiBwMShDLCQsSyl7dmFyIFgsUSxOLFo9e307Zm9yKE4gaW4gJClOPT0ia2V5Ij9YPSRbTl06Tj09InJlZiI/UT0kW05dOlpbTl09JFtOXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihaLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9hMC5jYWxsKGFyZ3VtZW50cywyKTpLKSx0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQy5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKE4gaW4gQy5kZWZhdWx0UHJvcHMpWltOXT09PXZvaWQgMCYmKFpbTl09Qy5kZWZhdWx0UHJvcHNbTl0pO3JldHVybiB1MChDLFosWCxRLG51bGwpfWZ1bmN0aW9uIHUwKEMsJCxLLFgsUSl7dmFyIE49e3R5cGU6Qyxwcm9wczokLGtleTpLLHJlZjpYLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpRPT1udWxsPysrQjU6USxfX2k6LTEsX191OjB9O3JldHVybiBRPT1udWxsJiZsLnZub2RlIT1udWxsJiZsLnZub2RlKE4pLE59ZnVuY3Rpb24gUTEoQyl7cmV0dXJuIEMuY2hpbGRyZW59ZnVuY3Rpb24gejEoQywkKXt0aGlzLnByb3BzPUMsdGhpcy5jb250ZXh0PSR9ZnVuY3Rpb24gQjAoQywkKXtpZigkPT1udWxsKXJldHVybiBDLl9fP0IwKEMuX18sQy5fX2krMSk6bnVsbDtmb3IodmFyIEs7JDxDLl9fay5sZW5ndGg7JCsrKWlmKChLPUMuX19rWyRdKSE9bnVsbCYmSy5fX2UhPW51bGwpcmV0dXJuIEsuX19lO3JldHVybiB0eXBlb2YgQy50eXBlPT0iZnVuY3Rpb24iP0IwKEMpOm51bGx9ZnVuY3Rpb24gZTgoQyl7aWYoQy5fX1AmJkMuX19kKXt2YXIgJD1DLl9fdixLPSQuX19lLFg9W10sUT1bXSxOPXUxKHt9LCQpO04uX192PSQuX192KzEsbC52bm9kZSYmbC52bm9kZShOKSxQMihDLl9fUCxOLCQsQy5fX24sQy5fX1AubmFtZXNwYWNlVVJJLDMyJiQuX191P1tLXTpudWxsLFgsSz09bnVsbD9CMCgkKTpLLCEhKDMyJiQuX191KSxRKSxOLl9fdj0kLl9fdixOLl9fLl9fa1tOLl9faV09TixBNShYLE4sUSksJC5fX2U9JC5fXz1udWxsLE4uX19lIT1LJiZGNShOKX19ZnVuY3Rpb24gRjUoQyl7aWYoKEM9Qy5fXykhPW51bGwmJkMuX19jIT1udWxsKXJldHVybiBDLl9fZT1DLl9fYy5iYXNlPW51bGwsQy5fX2suc29tZShmdW5jdGlvbigkKXtpZigkIT1udWxsJiYkLl9fZSE9bnVsbClyZXR1cm4gQy5fX2U9Qy5fX2MuYmFzZT0kLl9fZX0pLEY1KEMpfWZ1bmN0aW9uIFQyKEMpeyghQy5fX2QmJihDLl9fZD0hMCkmJnIxLnB1c2goQykmJiFjMC5fX3IrK3x8RzUhPWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKEc1PWwuZGVib3VuY2VSZW5kZXJpbmcpfHxfNSkoYzApfWZ1bmN0aW9uIGMwKCl7dHJ5e2Zvcih2YXIgQywkPTE7cjEubGVuZ3RoOylyMS5sZW5ndGg+JCYmcjEuc29ydChrNSksQz1yMS5zaGlmdCgpLCQ9cjEubGVuZ3RoLGU4KEMpfWZpbmFsbHl7cjEubGVuZ3RoPWMwLl9fcj0wfX1mdW5jdGlvbiB6NShDLCQsSyxYLFEsTixaLHEsRyxZLEIpe3ZhciBMLFUsRixULF8sayx6LHc9WCYmWC5fX2t8fGQwLEU9JC5sZW5ndGg7Zm9yKEc9QzkoSywkLHcsRyxFKSxMPTA7TDxFO0wrKykoRj1LLl9fa1tMXSkhPW51bGwmJihVPUYuX19pIT0tMSYmd1tGLl9faV18fG8wLEYuX19pPUwsaz1QMihDLEYsVSxRLE4sWixxLEcsWSxCKSxUPUYuX19lLEYucmVmJiZVLnJlZiE9Ri5yZWYmJihVLnJlZiYmVzIoVS5yZWYsbnVsbCxGKSxCLnB1c2goRi5yZWYsRi5fX2N8fFQsRikpLF89PW51bGwmJlQhPW51bGwmJihfPVQpLCh6PSEhKDQmRi5fX3UpKXx8VS5fX2s9PT1GLl9faz8oRz1INShGLEcsQyx6KSx6JiZVLl9fZSYmKFUuX19lPW51bGwpKTp0eXBlb2YgRi50eXBlPT0iZnVuY3Rpb24iJiZrIT09dm9pZCAwP0c9azpUJiYoRz1ULm5leHRTaWJsaW5nKSxGLl9fdSY9LTcpO3JldHVybiBLLl9fZT1fLEd9ZnVuY3Rpb24gQzkoQywkLEssWCxRKXt2YXIgTixaLHEsRyxZLEI9Sy5sZW5ndGgsTD1CLFU9MDtmb3IoQy5fX2s9QXJyYXkoUSksTj0wO048UTtOKyspKFo9JFtOXSkhPW51bGwmJnR5cGVvZiBaIT0iYm9vbGVhbiImJnR5cGVvZiBaIT0iZnVuY3Rpb24iPyh0eXBlb2YgWj09InN0cmluZyJ8fHR5cGVvZiBaPT0ibnVtYmVyInx8dHlwZW9mIFo9PSJiaWdpbnQifHxaLmNvbnN0cnVjdG9yPT1TdHJpbmc/Wj1DLl9fa1tOXT11MChudWxsLFosbnVsbCxudWxsLG51bGwpOkkwKFopP1o9Qy5fX2tbTl09dTAoUTEse2NoaWxkcmVuOlp9LG51bGwsbnVsbCxudWxsKTpaLmNvbnN0cnVjdG9yPT09dm9pZCAwJiZaLl9fYj4wP1o9Qy5fX2tbTl09dTAoWi50eXBlLFoucHJvcHMsWi5rZXksWi5yZWY/Wi5yZWY6bnVsbCxaLl9fdik6Qy5fX2tbTl09WixHPU4rVSxaLl9fPUMsWi5fX2I9Qy5fX2IrMSxxPW51bGwsKFk9Wi5fX2k9JDkoWixLLEcsTCkpIT0tMSYmKEwtLSwocT1LW1ldKSYmKHEuX191fD0yKSkscT09bnVsbHx8cS5fX3Y9PW51bGw/KFk9PS0xJiYoUT5CP1UtLTpRPEImJlUrKyksdHlwZW9mIFoudHlwZSE9ImZ1bmN0aW9uIiYmKFouX191fD00KSk6WSE9RyYmKFk9PUctMT9VLS06WT09RysxP1UrKzooWT5HP1UtLTpVKyssWi5fX3V8PTQpKSk6Qy5fX2tbTl09bnVsbDtpZihMKWZvcihOPTA7TjxCO04rKykocT1LW05dKSE9bnVsbCYmKDImcS5fX3UpPT0wJiYocS5fX2U9PVgmJihYPUIwKHEpKSxUNShxLHEpKTtyZXR1cm4gWH1mdW5jdGlvbiBINShDLCQsSyxYKXt2YXIgUSxOO2lmKHR5cGVvZiBDLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihRPUMuX19rLE49MDtRJiZOPFEubGVuZ3RoO04rKylRW05dJiYoUVtOXS5fXz1DLCQ9SDUoUVtOXSwkLEssWCkpO3JldHVybiAkfUMuX19lIT0kJiYoWCYmKCQmJkMudHlwZSYmISQucGFyZW50Tm9kZSYmKCQ9QjAoQykpLEsuaW5zZXJ0QmVmb3JlKEMuX19lLCR8fG51bGwpKSwkPUMuX19lKTtkbyAkPSQmJiQubmV4dFNpYmxpbmc7d2hpbGUoJCE9bnVsbCYmJC5ub2RlVHlwZT09OCk7cmV0dXJuICR9ZnVuY3Rpb24gbzEoQywkKXtyZXR1cm4gJD0kfHxbXSxDPT1udWxsfHx0eXBlb2YgQz09ImJvb2xlYW4ifHwoSTAoQyk/Qy5zb21lKGZ1bmN0aW9uKEspe28xKEssJCl9KTokLnB1c2goQykpLCR9ZnVuY3Rpb24gJDkoQywkLEssWCl7dmFyIFEsTixaLHE9Qy5rZXksRz1DLnR5cGUsWT0kW0tdLEI9WSE9bnVsbCYmKDImWS5fX3UpPT0wO2lmKFk9PT1udWxsJiZxPT1udWxsfHxCJiZxPT1ZLmtleSYmRz09WS50eXBlKXJldHVybiBLO2lmKFg+KEI/MTowKSl7Zm9yKFE9Sy0xLE49SysxO1E+PTB8fE48JC5sZW5ndGg7KWlmKChZPSRbWj1RPj0wP1EtLTpOKytdKSE9bnVsbCYmKDImWS5fX3UpPT0wJiZxPT1ZLmtleSYmRz09WS50eXBlKXJldHVybiBafXJldHVybi0xfWZ1bmN0aW9uIEw1KEMsJCxLKXskWzBdPT0iLSI/Qy5zZXRQcm9wZXJ0eSgkLEs9PW51bGw/IiI6Syk6Q1skXT1LPT1udWxsPyIiOnR5cGVvZiBLIT0ibnVtYmVyInx8dDgudGVzdCgkKT9LOksrInB4In1mdW5jdGlvbiBmMChDLCQsSyxYLFEpe3ZhciBOLFo7QzppZigkPT0ic3R5bGUiKWlmKHR5cGVvZiBLPT0ic3RyaW5nIilDLnN0eWxlLmNzc1RleHQ9SztlbHNle2lmKHR5cGVvZiBYPT0ic3RyaW5nIiYmKEMuc3R5bGUuY3NzVGV4dD1YPSIiKSxYKWZvcigkIGluIFgpSyYmJCBpbiBLfHxMNShDLnN0eWxlLCQsIiIpO2lmKEspZm9yKCQgaW4gSylYJiZLWyRdPT1YWyRdfHxMNShDLnN0eWxlLCQsS1skXSl9ZWxzZSBpZigkWzBdPT0ibyImJiRbMV09PSJuIilOPSQhPSgkPSQucmVwbGFjZShENSwiJDEiKSksWj0kLnRvTG93ZXJDYXNlKCksJD1aIGluIEN8fCQ9PSJvbkZvY3VzT3V0Inx8JD09Im9uRm9jdXNJbiI/Wi5zbGljZSgyKTokLnNsaWNlKDIpLEMubHx8KEMubD17fSksQy5sWyQrTl09SyxLP1g/S1tFMF09WFtFMF06KEtbRTBdPXcyLEMuYWRkRXZlbnRMaXN0ZW5lcigkLE4/TzI6QTIsTikpOkMucmVtb3ZlRXZlbnRMaXN0ZW5lcigkLE4/TzI6QTIsTik7ZWxzZXtpZihRPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKSQ9JC5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZigkIT0id2lkdGgiJiYkIT0iaGVpZ2h0IiYmJCE9ImhyZWYiJiYkIT0ibGlzdCImJiQhPSJmb3JtIiYmJCE9InRhYkluZGV4IiYmJCE9ImRvd25sb2FkIiYmJCE9InJvd1NwYW4iJiYkIT0iY29sU3BhbiImJiQhPSJyb2xlIiYmJCE9InBvcG92ZXIiJiYkIGluIEMpdHJ5e0NbJF09Sz09bnVsbD8iIjpLO2JyZWFrIEN9Y2F0Y2gocSl7fXR5cGVvZiBLPT0iZnVuY3Rpb24ifHwoSz09bnVsbHx8Sz09PSExJiYkWzRdIT0iLSI/Qy5yZW1vdmVBdHRyaWJ1dGUoJCk6Qy5zZXRBdHRyaWJ1dGUoJCwkPT0icG9wb3ZlciImJks9PTE/IiI6SykpfX1mdW5jdGlvbiBWNShDKXtyZXR1cm4gZnVuY3Rpb24oJCl7aWYodGhpcy5sKXt2YXIgSz10aGlzLmxbJC50eXBlK0NdO2lmKCRbbDBdPT1udWxsKSRbbDBdPXcyKys7ZWxzZSBpZigkW2wwXTxLW0UwXSlyZXR1cm47cmV0dXJuIEsobC5ldmVudD9sLmV2ZW50KCQpOiQpfX19ZnVuY3Rpb24gUDIoQywkLEssWCxRLE4sWixxLEcsWSl7dmFyIEIsTCxVLEYsVCxfLGsseix3LEUseSxjLFIsaCx4LHA9JC50eXBlO2lmKCQuY29uc3RydWN0b3IhPT12b2lkIDApcmV0dXJuIG51bGw7MTI4JksuX191JiYoRz0hISgzMiZLLl9fdSksTj1bcT0kLl9fZT1LLl9fZV0pLChCPWwuX19iKSYmQigkKTtDOmlmKHR5cGVvZiBwPT0iZnVuY3Rpb24iKXRyeXtpZih6PSQucHJvcHMsdz1wLnByb3RvdHlwZSYmcC5wcm90b3R5cGUucmVuZGVyLEU9KEI9cC5jb250ZXh0VHlwZSkmJlhbQi5fX2NdLHk9Qj9FP0UucHJvcHMudmFsdWU6Qi5fXzpYLEsuX19jP2s9KEw9JC5fX2M9Sy5fX2MpLl9fPUwuX19FOih3PyQuX19jPUw9bmV3IHAoeix5KTooJC5fX2M9TD1uZXcgejEoeix5KSxMLmNvbnN0cnVjdG9yPXAsTC5yZW5kZXI9WDkpLEUmJkUuc3ViKEwpLEwuc3RhdGV8fChMLnN0YXRlPXt9KSxMLl9fbj1YLFU9TC5fX2Q9ITAsTC5fX2g9W10sTC5fc2I9W10pLHcmJkwuX19zPT1udWxsJiYoTC5fX3M9TC5zdGF0ZSksdyYmcC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJihMLl9fcz09TC5zdGF0ZSYmKEwuX19zPXUxKHt9LEwuX19zKSksdTEoTC5fX3MscC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoeixMLl9fcykpKSxGPUwucHJvcHMsVD1MLnN0YXRlLEwuX192PSQsVSl3JiZwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmTC5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJkwuY29tcG9uZW50V2lsbE1vdW50KCksdyYmTC5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmTC5fX2gucHVzaChMLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKHcmJnAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZ6IT09RiYmTC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZMLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoeix5KSwkLl9fdj09Sy5fX3Z8fCFMLl9fZSYmTC5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJkwuc2hvdWxkQ29tcG9uZW50VXBkYXRlKHosTC5fX3MseSk9PT0hMSl7JC5fX3YhPUsuX192JiYoTC5wcm9wcz16LEwuc3RhdGU9TC5fX3MsTC5fX2Q9ITEpLCQuX19lPUsuX19lLCQuX19rPUsuX19rLCQuX19rLnNvbWUoZnVuY3Rpb24oZCl7ZCYmKGQuX189JCl9KSxkMC5wdXNoLmFwcGx5KEwuX19oLEwuX3NiKSxMLl9zYj1bXSxMLl9faC5sZW5ndGgmJloucHVzaChMKTticmVhayBDfUwuY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmTC5jb21wb25lbnRXaWxsVXBkYXRlKHosTC5fX3MseSksdyYmTC5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJkwuX19oLnB1c2goZnVuY3Rpb24oKXtMLmNvbXBvbmVudERpZFVwZGF0ZShGLFQsXyl9KX1pZihMLmNvbnRleHQ9eSxMLnByb3BzPXosTC5fX1A9QyxMLl9fZT0hMSxjPWwuX19yLFI9MCx3KUwuc3RhdGU9TC5fX3MsTC5fX2Q9ITEsYyYmYygkKSxCPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLGQwLnB1c2guYXBwbHkoTC5fX2gsTC5fc2IpLEwuX3NiPVtdO2Vsc2UgZG8gTC5fX2Q9ITEsYyYmYygkKSxCPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLEwuc3RhdGU9TC5fX3M7d2hpbGUoTC5fX2QmJisrUjwyNSk7TC5zdGF0ZT1MLl9fcyxMLmdldENoaWxkQ29udGV4dCE9bnVsbCYmKFg9dTEodTEoe30sWCksTC5nZXRDaGlsZENvbnRleHQoKSkpLHcmJiFVJiZMLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoXz1MLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKEYsVCkpLGg9QiE9bnVsbCYmQi50eXBlPT09UTEmJkIua2V5PT1udWxsP081KEIucHJvcHMuY2hpbGRyZW4pOkIscT16NShDLEkwKGgpP2g6W2hdLCQsSyxYLFEsTixaLHEsRyxZKSxMLmJhc2U9JC5fX2UsJC5fX3UmPS0xNjEsTC5fX2gubGVuZ3RoJiZaLnB1c2goTCksayYmKEwuX19FPUwuX189bnVsbCl9Y2F0Y2goZCl7aWYoJC5fX3Y9bnVsbCxHfHxOIT1udWxsKWlmKGQudGhlbil7Zm9yKCQuX191fD1HPzE2MDoxMjg7cSYmcS5ub2RlVHlwZT09OCYmcS5uZXh0U2libGluZzspcT1xLm5leHRTaWJsaW5nO05bTi5pbmRleE9mKHEpXT1udWxsLCQuX19lPXF9ZWxzZXtmb3IoeD1OLmxlbmd0aDt4LS07KWIyKE5beF0pO00yKCQpfWVsc2UgJC5fX2U9Sy5fX2UsJC5fX2s9Sy5fX2ssZC50aGVufHxNMigkKTtsLl9fZShkLCQsSyl9ZWxzZSBOPT1udWxsJiYkLl9fdj09Sy5fX3Y/KCQuX19rPUsuX19rLCQuX19lPUsuX19lKTpxPSQuX19lPUs5KEsuX19lLCQsSyxYLFEsTixaLEcsWSk7cmV0dXJuKEI9bC5kaWZmZWQpJiZCKCQpLDEyOCYkLl9fdT92b2lkIDA6cX1mdW5jdGlvbiBNMihDKXtDJiYoQy5fX2MmJihDLl9fYy5fX2U9ITApLEMuX19rJiZDLl9fay5zb21lKE0yKSl9ZnVuY3Rpb24gQTUoQywkLEspe2Zvcih2YXIgWD0wO1g8Sy5sZW5ndGg7WCsrKVcyKEtbWF0sS1srK1hdLEtbKytYXSk7bC5fX2MmJmwuX19jKCQsQyksQy5zb21lKGZ1bmN0aW9uKFEpe3RyeXtDPVEuX19oLFEuX19oPVtdLEMuc29tZShmdW5jdGlvbihOKXtOLmNhbGwoUSl9KX1jYXRjaChOKXtsLl9fZShOLFEuX192KX19KX1mdW5jdGlvbiBPNShDKXtyZXR1cm4gdHlwZW9mIEMhPSJvYmplY3QifHxDPT1udWxsfHxDLl9fYj4wP0M6STAoQyk/Qy5tYXAoTzUpOnUxKHt9LEMpfWZ1bmN0aW9uIEs5KEMsJCxLLFgsUSxOLFoscSxHKXt2YXIgWSxCLEwsVSxGLFQsXyxrPUsucHJvcHN8fG8wLHo9JC5wcm9wcyx3PSQudHlwZTtpZih3PT0ic3ZnIj9RPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6dz09Im1hdGgiP1E9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOlF8fChRPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksTiE9bnVsbCl7Zm9yKFk9MDtZPE4ubGVuZ3RoO1krKylpZigoRj1OW1ldKSYmInNldEF0dHJpYnV0ZSJpbiBGPT0hIXcmJih3P0YubG9jYWxOYW1lPT13OkYubm9kZVR5cGU9PTMpKXtDPUYsTltZXT1udWxsO2JyZWFrfX1pZihDPT1udWxsKXtpZih3PT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh6KTtDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhRLHcsei5pcyYmeikscSYmKGwuX19tJiZsLl9fbSgkLE4pLHE9ITEpLE49bnVsbH1pZih3PT1udWxsKWs9PT16fHxxJiZDLmRhdGE9PXp8fChDLmRhdGE9eik7ZWxzZXtpZihOPU4mJmEwLmNhbGwoQy5jaGlsZE5vZGVzKSwhcSYmTiE9bnVsbClmb3Ioaz17fSxZPTA7WTxDLmF0dHJpYnV0ZXMubGVuZ3RoO1krKylrWyhGPUMuYXR0cmlidXRlc1tZXSkubmFtZV09Ri52YWx1ZTtmb3IoWSBpbiBrKUY9a1tZXSxZPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0w9RjpZPT0iY2hpbGRyZW4ifHwoWSBpbiB6KXx8WT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4geil8fFk9PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiB6KXx8ZjAoQyxZLG51bGwsRixRKTtmb3IoWSBpbiB6KUY9eltZXSxZPT0iY2hpbGRyZW4iP1U9RjpZPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0I9RjpZPT0idmFsdWUiP1Q9RjpZPT0iY2hlY2tlZCI/Xz1GOnEmJnR5cGVvZiBGIT0iZnVuY3Rpb24ifHxrW1ldPT09Rnx8ZjAoQyxZLEYsa1tZXSxRKTtpZihCKXF8fEwmJihCLl9faHRtbD09TC5fX2h0bWx8fEIuX19odG1sPT1DLmlubmVySFRNTCl8fChDLmlubmVySFRNTD1CLl9faHRtbCksJC5fX2s9W107ZWxzZSBpZihMJiYoQy5pbm5lckhUTUw9IiIpLHo1KCQudHlwZT09InRlbXBsYXRlIj9DLmNvbnRlbnQ6QyxJMChVKT9VOltVXSwkLEssWCx3PT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOlEsTixaLE4/TlswXTpLLl9fayYmQjAoSywwKSxxLEcpLE4hPW51bGwpZm9yKFk9Ti5sZW5ndGg7WS0tOyliMihOW1ldKTtxfHwoWT0idmFsdWUiLHc9PSJwcm9ncmVzcyImJlQ9PW51bGw/Qy5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6VCE9bnVsbCYmKFQhPT1DW1ldfHx3PT0icHJvZ3Jlc3MiJiYhVHx8dz09Im9wdGlvbiImJlQhPWtbWV0pJiZmMChDLFksVCxrW1ldLFEpLFk9ImNoZWNrZWQiLF8hPW51bGwmJl8hPUNbWV0mJmYwKEMsWSxfLGtbWV0sUSkpfXJldHVybiBDfWZ1bmN0aW9uIFcyKEMsJCxLKXt0cnl7aWYodHlwZW9mIEM9PSJmdW5jdGlvbiIpe3ZhciBYPXR5cGVvZiBDLl9fdT09ImZ1bmN0aW9uIjtYJiZDLl9fdSgpLFgmJiQ9PW51bGx8fChDLl9fdT1DKCQpKX1lbHNlIEMuY3VycmVudD0kfWNhdGNoKFEpe2wuX19lKFEsSyl9fWZ1bmN0aW9uIFQ1KEMsJCxLKXt2YXIgWCxRO2lmKGwudW5tb3VudCYmbC51bm1vdW50KEMpLChYPUMucmVmKSYmKFguY3VycmVudCYmWC5jdXJyZW50IT1DLl9fZXx8VzIoWCxudWxsLCQpKSwoWD1DLl9fYykhPW51bGwpe2lmKFguY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e1guY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChOKXtsLl9fZShOLCQpfVguYmFzZT1YLl9fUD1udWxsfWlmKFg9Qy5fX2spZm9yKFE9MDtRPFgubGVuZ3RoO1ErKylYW1FdJiZUNShYW1FdLCQsS3x8dHlwZW9mIEMudHlwZSE9ImZ1bmN0aW9uIik7S3x8YjIoQy5fX2UpLEMuX19jPUMuX189Qy5fX2U9dm9pZCAwfWZ1bmN0aW9uIFg5KEMsJCxLKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcihDLEspfWZ1bmN0aW9uIGkwKEMsJCxLKXt2YXIgWCxRLE4sWjskPT1kb2N1bWVudCYmKCQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxsLl9fJiZsLl9fKEMsJCksUT0oWD10eXBlb2YgSz09ImZ1bmN0aW9uIik/bnVsbDpLJiZLLl9fa3x8JC5fX2ssTj1bXSxaPVtdLFAyKCQsQz0oIVgmJkt8fCQpLl9faz1wMShRMSxudWxsLFtDXSksUXx8bzAsbzAsJC5uYW1lc3BhY2VVUkksIVgmJks/W0tdOlE/bnVsbDokLmZpcnN0Q2hpbGQ/YTAuY2FsbCgkLmNoaWxkTm9kZXMpOm51bGwsTiwhWCYmSz9LOlE/US5fX2U6JC5maXJzdENoaWxkLFgsWiksQTUoTixDLFopfWZ1bmN0aW9uIGQxKEMpe2Z1bmN0aW9uICQoSyl7dmFyIFgsUTtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChYPW5ldyBTZXQsKFE9e30pWyQuX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFF9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKE4pe3RoaXMucHJvcHMudmFsdWUhPU4udmFsdWUmJlguZm9yRWFjaChmdW5jdGlvbihaKXtaLl9fZT0hMCxUMihaKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihOKXtYLmFkZChOKTt2YXIgWj1OLmNvbXBvbmVudFdpbGxVbm1vdW50O04uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYJiZYLmRlbGV0ZShOKSxaJiZaLmNhbGwoTil9fSksSy5jaGlsZHJlbn1yZXR1cm4gJC5fX2M9Il9fY0MiK1U1KyssJC5fXz1DLCQuUHJvdmlkZXI9JC5fX2w9KCQuQ29uc3VtZXI9ZnVuY3Rpb24oSyxYKXtyZXR1cm4gSy5jaGlsZHJlbihYKX0pLmNvbnRleHRUeXBlPSQsJH1hMD1kMC5zbGljZSxsPXtfX2U6ZnVuY3Rpb24oQywkLEssWCl7Zm9yKHZhciBRLE4sWjskPSQuX187KWlmKChRPSQuX19jKSYmIVEuX18pdHJ5e2lmKChOPVEuY29uc3RydWN0b3IpJiZOLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKFEuc2V0U3RhdGUoTi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoQykpLFo9US5fX2QpLFEuY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihRLmNvbXBvbmVudERpZENhdGNoKEMsWHx8e30pLFo9US5fX2QpLFopcmV0dXJuIFEuX19FPVF9Y2F0Y2gocSl7Qz1xfXRocm93IEN9fSxCNT0wLHM4PWZ1bmN0aW9uKEMpe3JldHVybiBDIT1udWxsJiZDLmNvbnN0cnVjdG9yPT09dm9pZCAwfSx6MS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oQywkKXt2YXIgSztLPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz11MSh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgQz09ImZ1bmN0aW9uIiYmKEM9Qyh1MSh7fSxLKSx0aGlzLnByb3BzKSksQyYmdTEoSyxDKSxDIT1udWxsJiZ0aGlzLl9fdiYmKCQmJnRoaXMuX3NiLnB1c2goJCksVDIodGhpcykpfSx6MS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oQyl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCxDJiZ0aGlzLl9faC5wdXNoKEMpLFQyKHRoaXMpKX0sejEucHJvdG90eXBlLnJlbmRlcj1RMSxyMT1bXSxfNT10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsazU9ZnVuY3Rpb24oQywkKXtyZXR1cm4gQy5fX3YuX19iLSQuX192Ll9fYn0sYzAuX19yPTAsSDI9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxsMD0iX19kIitIMixFMD0iX19hIitIMixENT0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSx3Mj0wLEEyPVY1KCExKSxPMj1WNSghMCksVTU9MDt2YXIgbjEsQjEseTIsTTUsUzA9MCxTNT1bXSxEMT1sLHc1PUQxLl9fYixiNT1EMS5fX3IsUDU9RDEuZGlmZmVkLFc1PUQxLl9fYyx5NT1EMS51bm1vdW50LEU1PUQxLl9fO2Z1bmN0aW9uIF8wKEMsJCl7RDEuX19oJiZEMS5fX2goQjEsQyxTMHx8JCksUzA9MDt2YXIgSz1CMS5fX0h8fChCMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiBDPj1LLl9fLmxlbmd0aCYmSy5fXy5wdXNoKHt9KSxLLl9fW0NdfWZ1bmN0aW9uIEEoQyl7cmV0dXJuIFMwPTEsSTIoaDUsQyl9ZnVuY3Rpb24gSTIoQywkLEspe3ZhciBYPV8wKG4xKyssMik7aWYoWC50PUMsIVguX19jJiYoWC5fXz1bSz9LKCQpOmg1KHZvaWQgMCwkKSxmdW5jdGlvbihxKXt2YXIgRz1YLl9fTj9YLl9fTlswXTpYLl9fWzBdLFk9WC50KEcscSk7RyE9PVkmJihYLl9fTj1bWSxYLl9fWzFdXSxYLl9fYy5zZXRTdGF0ZSh7fSkpfV0sWC5fX2M9QjEsIUIxLl9fZikpe3ZhciBRPWZ1bmN0aW9uKHEsRyxZKXtpZighWC5fX2MuX19IKXJldHVybiEwO3ZhciBCPVguX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0dXJuIFUuX19jfSk7aWYoQi5ldmVyeShmdW5jdGlvbihVKXtyZXR1cm4hVS5fX059KSlyZXR1cm4hTnx8Ti5jYWxsKHRoaXMscSxHLFkpO3ZhciBMPVguX19jLnByb3BzIT09cTtyZXR1cm4gQi5zb21lKGZ1bmN0aW9uKFUpe2lmKFUuX19OKXt2YXIgRj1VLl9fWzBdO1UuX189VS5fX04sVS5fX049dm9pZCAwLEYhPT1VLl9fWzBdJiYoTD0hMCl9fSksTiYmTi5jYWxsKHRoaXMscSxHLFkpfHxMfTtCMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpOLGNvbXBvbmVudFdpbGxVcGRhdGU6Wn09QjE7QjEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihxLEcsWSl7aWYodGhpcy5fX2Upe3ZhciBCPU47Tj12b2lkIDAsUShxLEcsWSksTj1CfVomJlouY2FsbCh0aGlzLHEsRyxZKX0sQjEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVF9cmV0dXJuIFguX19OfHxYLl9ffWZ1bmN0aW9uIFcoQywkKXt2YXIgSz1fMChuMSsrLDMpOyFEMS5fX3MmJlMyKEsuX19ILCQpJiYoSy5fXz1DLEsudT0kLEIxLl9fSC5fX2gucHVzaChLKSl9ZnVuY3Rpb24gbjAoQywkKXt2YXIgSz1fMChuMSsrLDQpOyFEMS5fX3MmJlMyKEsuX19ILCQpJiYoSy5fXz1DLEsudT0kLEIxLl9faC5wdXNoKEspKX1mdW5jdGlvbiB2KEMpe3JldHVybiBTMD01LEgxKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6Q319LFtdKX1mdW5jdGlvbiBIMShDLCQpe3ZhciBLPV8wKG4xKyssNyk7cmV0dXJuIFMyKEsuX19ILCQpJiYoSy5fXz1DKCksSy5fX0g9JCxLLl9faD1DKSxLLl9ffWZ1bmN0aW9uIFAoQywkKXtyZXR1cm4gUzA9OCxIMShmdW5jdGlvbigpe3JldHVybiBDfSwkKX1mdW5jdGlvbiBzMShDKXt2YXIgJD1CMS5jb250ZXh0W0MuX19jXSxLPV8wKG4xKyssOSk7cmV0dXJuIEsuYz1DLCQ/KEsuX189PW51bGwmJihLLl9fPSEwLCQuc3ViKEIxKSksJC5wcm9wcy52YWx1ZSk6Qy5fX31mdW5jdGlvbiBzMCgpe3ZhciBDPV8wKG4xKyssMTEpO2lmKCFDLl9fKXtmb3IodmFyICQ9QjEuX192OyQhPT1udWxsJiYhJC5fX20mJiQuX18hPT1udWxsOykkPSQuX187dmFyIEs9JC5fX218fCgkLl9fbT1bMCwwXSk7Qy5fXz0iUCIrS1swXSsiLSIrS1sxXSsrfXJldHVybiBDLl9ffWZ1bmN0aW9uIEo5KCl7Zm9yKHZhciBDO0M9UzUuc2hpZnQoKTspe3ZhciAkPUMuX19IO2lmKEMuX19QJiYkKXRyeXskLl9faC5zb21lKHIwKSwkLl9faC5zb21lKEUyKSwkLl9faD1bXX1jYXRjaChLKXskLl9faD1bXSxEMS5fX2UoSyxDLl9fdil9fX1EMS5fX2I9ZnVuY3Rpb24oQyl7QjE9bnVsbCx3NSYmdzUoQyl9LEQxLl9fPWZ1bmN0aW9uKEMsJCl7QyYmJC5fX2smJiQuX19rLl9fbSYmKEMuX19tPSQuX19rLl9fbSksRTUmJkU1KEMsJCl9LEQxLl9fcj1mdW5jdGlvbihDKXtiNSYmYjUoQyksbjE9MDt2YXIgJD0oQjE9Qy5fX2MpLl9fSDskJiYoeTI9PT1CMT8oJC5fX2g9W10sQjEuX19oPVtdLCQuX18uc29tZShmdW5jdGlvbihLKXtLLl9fTiYmKEsuX189Sy5fX04pLEsudT1LLl9fTj12b2lkIDB9KSk6KCQuX19oLnNvbWUocjApLCQuX19oLnNvbWUoRTIpLCQuX19oPVtdLG4xPTApKSx5Mj1CMX0sRDEuZGlmZmVkPWZ1bmN0aW9uKEMpe1A1JiZQNShDKTt2YXIgJD1DLl9fYzskJiYkLl9fSCYmKCQuX19ILl9faC5sZW5ndGgmJihTNS5wdXNoKCQpIT09MSYmTTU9PT1EMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoTTU9RDEucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8UTkpKEo5KSksJC5fX0guX18uc29tZShmdW5jdGlvbihLKXtLLnUmJihLLl9fSD1LLnUpLEsudT12b2lkIDB9KSkseTI9QjE9bnVsbH0sRDEuX19jPWZ1bmN0aW9uKEMsJCl7JC5zb21lKGZ1bmN0aW9uKEspe3RyeXtLLl9faC5zb21lKHIwKSxLLl9faD1LLl9faC5maWx0ZXIoZnVuY3Rpb24oWCl7cmV0dXJuIVguX198fEUyKFgpfSl9Y2F0Y2goWCl7JC5zb21lKGZ1bmN0aW9uKFEpe1EuX19oJiYoUS5fX2g9W10pfSksJD1bXSxEMS5fX2UoWCxLLl9fdil9fSksVzUmJlc1KEMsJCl9LEQxLnVubW91bnQ9ZnVuY3Rpb24oQyl7eTUmJnk1KEMpO3ZhciAkLEs9Qy5fX2M7SyYmSy5fX0gmJihLLl9fSC5fXy5zb21lKGZ1bmN0aW9uKFgpe3RyeXtyMChYKX1jYXRjaChRKXskPVF9fSksSy5fX0g9dm9pZCAwLCQmJkQxLl9fZSgkLEsuX192KSl9O3ZhciBJNT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iO2Z1bmN0aW9uIFE5KEMpe3ZhciAkLEs9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoWCksSTUmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKCQpLHNldFRpbWVvdXQoQyl9LFg9c2V0VGltZW91dChLLDM1KTtJNSYmKCQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEspKX1mdW5jdGlvbiByMChDKXt2YXIgJD1CMSxLPUMuX19jO3R5cGVvZiBLPT0iZnVuY3Rpb24iJiYoQy5fX2M9dm9pZCAwLEsoKSksQjE9JH1mdW5jdGlvbiBFMihDKXt2YXIgJD1CMTtDLl9fYz1DLl9fKCksQjE9JH1mdW5jdGlvbiBTMihDLCQpe3JldHVybiFDfHxDLmxlbmd0aCE9PSQubGVuZ3RofHwkLnNvbWUoZnVuY3Rpb24oSyxYKXtyZXR1cm4gSyE9PUNbWF19KX1mdW5jdGlvbiBoNShDLCQpe3JldHVybiB0eXBlb2YgJD09ImZ1bmN0aW9uIj8kKEMpOiR9ZnVuY3Rpb24gRzkoQywkKXtmb3IodmFyIEsgaW4gJClDW0tdPSRbS107cmV0dXJuIEN9ZnVuY3Rpb24geDUoQywkKXtmb3IodmFyIEsgaW4gQylpZihLIT09Il9fc291cmNlIiYmIShLIGluICQpKXJldHVybiEwO2Zvcih2YXIgWCBpbiAkKWlmKFghPT0iX19zb3VyY2UiJiZDW1hdIT09JFtYXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB2NShDLCQpe3RoaXMucHJvcHM9Qyx0aGlzLmNvbnRleHQ9JH0odjUucHJvdG90eXBlPW5ldyB6MSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsdjUucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihDLCQpe3JldHVybiB4NSh0aGlzLnByb3BzLEMpfHx4NSh0aGlzLnN0YXRlLCQpfTt2YXIgZzU9bC5fX2I7bC5fX2I9ZnVuY3Rpb24oQyl7Qy50eXBlJiZDLnR5cGUuX19mJiZDLnJlZiYmKEMucHJvcHMucmVmPUMucmVmLEMucmVmPW51bGwpLGc1JiZnNShDKX07dmFyIEw5PWwuX19lO2wuX19lPWZ1bmN0aW9uKEMsJCxLLFgpe2lmKEMudGhlbil7Zm9yKHZhciBRLE49JDtOPU4uX187KWlmKChRPU4uX19jKSYmUS5fX2MpcmV0dXJuICQuX19lPT1udWxsJiYoJC5fX2U9Sy5fX2UsJC5fX2s9Sy5fX2spLFEuX19jKEMsJCl9TDkoQywkLEssWCl9O3ZhciBSNT1sLnVubW91bnQ7ZnVuY3Rpb24gdTUoQywkLEspe3JldHVybiBDJiYoQy5fX2MmJkMuX19jLl9fSCYmKEMuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFgpe3R5cGVvZiBYLl9fYz09ImZ1bmN0aW9uIiYmWC5fX2MoKX0pLEMuX19jLl9fSD1udWxsKSwoQz1HOSh7fSxDKSkuX19jIT1udWxsJiYoQy5fX2MuX19QPT09SyYmKEMuX19jLl9fUD0kKSxDLl9fYy5fX2U9ITAsQy5fX2M9bnVsbCksQy5fX2s9Qy5fX2smJkMuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gdTUoWCwkLEspfSkpLEN9ZnVuY3Rpb24gbzUoQywkLEspe3JldHVybiBDJiZLJiYoQy5fX3Y9bnVsbCxDLl9faz1DLl9fayYmQy5fX2subWFwKGZ1bmN0aW9uKFgpe3JldHVybiBvNShYLCQsSyl9KSxDLl9fYyYmQy5fX2MuX19QPT09JCYmKEMuX19lJiZLLmFwcGVuZENoaWxkKEMuX19lKSxDLl9fYy5fX2U9ITAsQy5fX2MuX19QPUspKSxDfWZ1bmN0aW9uIGgyKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIGQ1KEMpe3ZhciAkPUMuX18mJkMuX18uX19jO3JldHVybiAkJiYkLl9fYSYmJC5fX2EoQyl9ZnVuY3Rpb24gdDAoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1sLnVubW91bnQ9ZnVuY3Rpb24oQyl7dmFyICQ9Qy5fX2M7JCYmKCQuX196PSEwKSwkJiYkLl9fUiYmJC5fX1IoKSwkJiYzMiZDLl9fdSYmKEMudHlwZT1udWxsKSxSNSYmUjUoQyl9LChoMi5wcm90b3R5cGU9bmV3IHoxKS5fX2M9ZnVuY3Rpb24oQywkKXt2YXIgSz0kLl9fYyxYPXRoaXM7WC5vPT1udWxsJiYoWC5vPVtdKSxYLm8ucHVzaChLKTt2YXIgUT1kNShYLl9fdiksTj0hMSxaPWZ1bmN0aW9uKCl7Tnx8WC5fX3p8fChOPSEwLEsuX19SPW51bGwsUT9RKEcpOkcoKSl9O0suX19SPVo7dmFyIHE9Sy5fX1A7Sy5fX1A9bnVsbDt2YXIgRz1mdW5jdGlvbigpe2lmKCEtLVguX191KXtpZihYLnN0YXRlLl9fYSl7dmFyIFk9WC5zdGF0ZS5fX2E7WC5fX3YuX19rWzBdPW81KFksWS5fX2MuX19QLFkuX19jLl9fTyl9dmFyIEI7Zm9yKFguc2V0U3RhdGUoe19fYTpYLl9fYj1udWxsfSk7Qj1YLm8ucG9wKCk7KUIuX19QPXEsQi5mb3JjZVVwZGF0ZSgpfX07WC5fX3UrK3x8MzImJC5fX3V8fFguc2V0U3RhdGUoe19fYTpYLl9fYj1YLl9fdi5fX2tbMF19KSxDLnRoZW4oWixaKX0saDIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxoMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMsJCl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWD10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT11NSh0aGlzLl9fYixLLFguX19PPVguX19QKX10aGlzLl9fYj1udWxsfXZhciBRPSQuX19hJiZwMShRMSxudWxsLEMuZmFsbGJhY2spO3JldHVybiBRJiYoUS5fX3UmPS0zMyksW3AxKFExLG51bGwsJC5fX2E/bnVsbDpDLmNoaWxkcmVuKSxRXX07dmFyIG01PWZ1bmN0aW9uKEMsJCxLKXtpZigrK0tbMV09PT1LWzBdJiZDLmwuZGVsZXRlKCQpLEMucHJvcHMucmV2ZWFsT3JkZXImJihDLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhQy5sLnNpemUpKWZvcihLPUMuaTtLOyl7Zm9yKDtLLmxlbmd0aD4zOylLLnBvcCgpKCk7aWYoS1sxXTxLWzBdKWJyZWFrO0MuaT1LPUtbMl19fTsodDAucHJvdG90eXBlPW5ldyB6MSkuX19hPWZ1bmN0aW9uKEMpe3ZhciAkPXRoaXMsSz1kNSgkLl9fdiksWD0kLmwuZ2V0KEMpO3JldHVybiBYWzBdKyssZnVuY3Rpb24oUSl7dmFyIE49ZnVuY3Rpb24oKXskLnByb3BzLnJldmVhbE9yZGVyPyhYLnB1c2goUSksbTUoJCxDLFgpKTpRKCl9O0s/SyhOKTpOKCl9fSx0MC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciAkPW8xKEMuY2hpbGRyZW4pO0MucmV2ZWFsT3JkZXImJkMucmV2ZWFsT3JkZXJbMF09PT0iYiImJiQucmV2ZXJzZSgpO2Zvcih2YXIgSz0kLmxlbmd0aDtLLS07KXRoaXMubC5zZXQoJFtLXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gQy5jaGlsZHJlbn0sdDAucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT10MC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgQz10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKCQsSyl7bTUoQyxLLCQpfSl9O3ZhciBWOT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxCOT0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sXzk9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxrOT0vW0EtWjAtOV0vZyxEOT10eXBlb2YgZG9jdW1lbnQ8InUiLFU5PWZ1bmN0aW9uKEMpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChDKX07ZnVuY3Rpb24gYzUoQywkLEspe3JldHVybiAkLl9faz09bnVsbCYmKCQudGV4dENvbnRlbnQ9IiIpLGkwKEMsJCksdHlwZW9mIEs9PSJmdW5jdGlvbiImJksoKSxDP0MuX19jOm51bGx9ejEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oQyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHoxLnByb3RvdHlwZSxDLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iK0NdfSxzZXQ6ZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsQyx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiR9KX19KX0pO3ZhciBqNT1sLmV2ZW50O2wuZXZlbnQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGo1JiYoQz1qNShDKSksQy5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxDLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxDLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LEMubmF0aXZlRXZlbnQ9Q307dmFyIGE1LEY5PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxwNT1sLnZub2RlO2wudm5vZGU9ZnVuY3Rpb24oQyl7dHlwZW9mIEMudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKCQpe3Zhcntwcm9wczpLLHR5cGU6WH09JCxRPXt9LE49WC5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgWiBpbiBLKXt2YXIgcT1LW1pdO2lmKCEoWj09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEspJiZxPT1udWxsfHxEOSYmWj09PSJjaGlsZHJlbiImJlg9PT0ibm9zY3JpcHQifHxaPT09ImNsYXNzInx8Wj09PSJjbGFzc05hbWUiKSl7dmFyIEc9Wi50b0xvd2VyQ2FzZSgpO1o9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIEsmJksudmFsdWU9PW51bGw/Wj0idmFsdWUiOlo9PT0iZG93bmxvYWQiJiZxPT09ITA/cT0iIjpHPT09InRyYW5zbGF0ZSImJnE9PT0ibm8iP3E9ITE6R1swXT09PSJvIiYmR1sxXT09PSJuIj9HPT09Im9uZG91YmxlY2xpY2siP1o9Im9uZGJsY2xpY2siOkchPT0ib25jaGFuZ2UifHxYIT09ImlucHV0IiYmWCE9PSJ0ZXh0YXJlYSJ8fFU5KEsudHlwZSk/Rz09PSJvbmZvY3VzIj9aPSJvbmZvY3VzaW4iOkc9PT0ib25ibHVyIj9aPSJvbmZvY3Vzb3V0IjpfOS50ZXN0KFopJiYoWj1HKTpHPVo9Im9uaW5wdXQiOk4mJkI5LnRlc3QoWik/Wj1aLnJlcGxhY2UoazksIi0kJiIpLnRvTG93ZXJDYXNlKCk6cT09PW51bGwmJihxPXZvaWQgMCksRz09PSJvbmlucHV0IiYmUVtaPUddJiYoWj0ib25pbnB1dENhcHR1cmUiKSxRW1pdPXF9fVg9PSJzZWxlY3QiJiYoUS5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShRLnZhbHVlKSYmKFEudmFsdWU9bzEoSy5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihZKXtZLnByb3BzLnNlbGVjdGVkPVEudmFsdWUuaW5kZXhPZihZLnByb3BzLnZhbHVlKSE9LTF9KSksUS5kZWZhdWx0VmFsdWUhPW51bGwmJihRLnZhbHVlPW8xKEsuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oWSl7WS5wcm9wcy5zZWxlY3RlZD1RLm11bHRpcGxlP1EuZGVmYXVsdFZhbHVlLmluZGV4T2YoWS5wcm9wcy52YWx1ZSkhPS0xOlEuZGVmYXVsdFZhbHVlPT1ZLnByb3BzLnZhbHVlfSkpKSxLLmNsYXNzJiYhSy5jbGFzc05hbWU/KFEuY2xhc3M9Sy5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoUSwiY2xhc3NOYW1lIixGOSkpOksuY2xhc3NOYW1lJiYoUS5jbGFzcz1RLmNsYXNzTmFtZT1LLmNsYXNzTmFtZSksJC5wcm9wcz1RfShDKSxDLiQkdHlwZW9mPVY5LHA1JiZwNShDKX07dmFyIGY1PWwuX19yO2wuX19yPWZ1bmN0aW9uKEMpe2Y1JiZmNShDKSxhNT1DLl9fY307dmFyIGw1PWwuZGlmZmVkO2wuZGlmZmVkPWZ1bmN0aW9uKEMpe2w1JiZsNShDKTt2YXJ7cHJvcHM6JCxfX2U6S309QztLIT1udWxsJiZDLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gJCYmJC52YWx1ZSE9PUsudmFsdWUmJihLLnZhbHVlPSQudmFsdWU9PW51bGw/IiI6JC52YWx1ZSksYTU9bnVsbH07ZnVuY3Rpb24gaTUoQyl7cmV0dXJuISFDLl9fayYmKGkwKG51bGwsQyksITApfWZ1bmN0aW9uIHI1KEMpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oJCl7YzUoJCxDKX0sdW5tb3VudDpmdW5jdGlvbigpe2k1KEMpfX19ZnVuY3Rpb24gSjMoQywkKXtmb3IodmFyIEsgaW4gJClDW0tdPSRbS107cmV0dXJuIEN9ZnVuY3Rpb24gZzIoQywkKXtmb3IodmFyIEsgaW4gQylpZihLIT09Il9fc291cmNlIiYmIShLIGluICQpKXJldHVybiEwO2Zvcih2YXIgWCBpbiAkKWlmKFghPT0iX19zb3VyY2UiJiZDW1hdIT09JFtYXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBuNShDLCQpe3RoaXMucHJvcHM9Qyx0aGlzLmNvbnRleHQ9JH1mdW5jdGlvbiBrMChDLCQpe2Z1bmN0aW9uIEsoUSl7dmFyIE49dGhpcy5wcm9wcy5yZWY7cmV0dXJuIE4hPVEucmVmJiZOJiYodHlwZW9mIE49PSJmdW5jdGlvbiI/TihudWxsKTpOLmN1cnJlbnQ9bnVsbCksJD8hJCh0aGlzLnByb3BzLFEpfHxOIT1RLnJlZjpnMih0aGlzLnByb3BzLFEpfWZ1bmN0aW9uIFgoUSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPUsscDEoQyxRKX1yZXR1cm4gWC5kaXNwbGF5TmFtZT0iTWVtbygiKyhDLmRpc3BsYXlOYW1lfHxDLm5hbWUpKyIpIixYLl9fZj1YLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFgudHlwZT1DLFh9KG41LnByb3RvdHlwZT1uZXcgejEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLG41LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oQywkKXtyZXR1cm4gZzIodGhpcy5wcm9wcyxDKXx8ZzIodGhpcy5zdGF0ZSwkKX07dmFyIHM1PWwuX19iO2wuX19iPWZ1bmN0aW9uKEMpe0MudHlwZSYmQy50eXBlLl9fZiYmQy5yZWYmJihDLnByb3BzLnJlZj1DLnJlZixDLnJlZj1udWxsKSxzNSYmczUoQyl9O3ZhciB6OT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiB0MShDKXtmdW5jdGlvbiAkKEspe3ZhciBYPUozKHt9LEspO3JldHVybiBkZWxldGUgWC5yZWYsQyhYLEsucmVmfHxudWxsKX1yZXR1cm4gJC4kJHR5cGVvZj16OSwkLnJlbmRlcj1DLCQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9JC5fX2Y9ITAsJC5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKyhDLmRpc3BsYXlOYW1lfHxDLm5hbWUpKyIpIiwkfXZhciBIOT1sLl9fZTtsLl9fZT1mdW5jdGlvbihDLCQsSyxYKXtpZihDLnRoZW4pe2Zvcih2YXIgUSxOPSQ7Tj1OLl9fOylpZigoUT1OLl9fYykmJlEuX19jKXJldHVybiAkLl9fZT09bnVsbCYmKCQuX19lPUsuX19lLCQuX19rPUsuX19rKSxRLl9fYyhDLCQpfUg5KEMsJCxLLFgpfTt2YXIgdDU9bC51bm1vdW50O2Z1bmN0aW9uIFEzKEMsJCxLKXtyZXR1cm4gQyYmKEMuX19jJiZDLl9fYy5fX0gmJihDLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihYKXt0eXBlb2YgWC5fX2M9PSJmdW5jdGlvbiImJlguX19jKCl9KSxDLl9fYy5fX0g9bnVsbCksKEM9SjMoe30sQykpLl9fYyE9bnVsbCYmKEMuX19jLl9fUD09PUsmJihDLl9fYy5fX1A9JCksQy5fX2MuX19lPSEwLEMuX19jPW51bGwpLEMuX19rPUMuX19rJiZDLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIFEzKFgsJCxLKX0pKSxDfWZ1bmN0aW9uIE4zKEMsJCxLKXtyZXR1cm4gQyYmSyYmKEMuX192PW51bGwsQy5fX2s9Qy5fX2smJkMuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gTjMoWCwkLEspfSksQy5fX2MmJkMuX19jLl9fUD09PSQmJihDLl9fZSYmSy5hcHBlbmRDaGlsZChDLl9fZSksQy5fX2MuX19lPSEwLEMuX19jLl9fUD1LKSksQ31mdW5jdGlvbiB2Migpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBaMyhDKXt2YXIgJD1DLl9fJiZDLl9fLl9fYztyZXR1cm4gJCYmJC5fX2EmJiQuX19hKEMpfWZ1bmN0aW9uIGUwKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9bC51bm1vdW50PWZ1bmN0aW9uKEMpe3ZhciAkPUMuX19jOyQmJigkLl9fej0hMCksJCYmJC5fX1ImJiQuX19SKCksJCYmMzImQy5fX3UmJihDLnR5cGU9bnVsbCksdDUmJnQ1KEMpfSwodjIucHJvdG90eXBlPW5ldyB6MSkuX19jPWZ1bmN0aW9uKEMsJCl7dmFyIEs9JC5fX2MsWD10aGlzO1gubz09bnVsbCYmKFgubz1bXSksWC5vLnB1c2goSyk7dmFyIFE9WjMoWC5fX3YpLE49ITEsWj1mdW5jdGlvbigpe058fFguX196fHwoTj0hMCxLLl9fUj1udWxsLFE/UShHKTpHKCkpfTtLLl9fUj1aO3ZhciBxPUsuX19QO0suX19QPW51bGw7dmFyIEc9ZnVuY3Rpb24oKXtpZighLS1YLl9fdSl7aWYoWC5zdGF0ZS5fX2Epe3ZhciBZPVguc3RhdGUuX19hO1guX192Ll9fa1swXT1OMyhZLFkuX19jLl9fUCxZLl9fYy5fX08pfXZhciBCO2ZvcihYLnNldFN0YXRlKHtfX2E6WC5fX2I9bnVsbH0pO0I9WC5vLnBvcCgpOylCLl9fUD1xLEIuZm9yY2VVcGRhdGUoKX19O1guX191Kyt8fDMyJiQuX191fHxYLnNldFN0YXRlKHtfX2E6WC5fX2I9WC5fX3YuX19rWzBdfSksQy50aGVuKFosWil9LHYyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sdjIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihDLCQpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFg9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09UTModGhpcy5fX2IsSyxYLl9fTz1YLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgUT0kLl9fYSYmcDEoUTEsbnVsbCxDLmZhbGxiYWNrKTtyZXR1cm4gUSYmKFEuX191Jj0tMzMpLFtwMShRMSxudWxsLCQuX19hP251bGw6Qy5jaGlsZHJlbiksUV19O3ZhciBlNT1mdW5jdGlvbihDLCQsSyl7aWYoKytLWzFdPT09S1swXSYmQy5sLmRlbGV0ZSgkKSxDLnByb3BzLnJldmVhbE9yZGVyJiYoQy5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8IUMubC5zaXplKSlmb3IoSz1DLmk7Szspe2Zvcig7Sy5sZW5ndGg+MzspSy5wb3AoKSgpO2lmKEtbMV08S1swXSlicmVhaztDLmk9Sz1LWzJdfX07KGUwLnByb3RvdHlwZT1uZXcgejEpLl9fYT1mdW5jdGlvbihDKXt2YXIgJD10aGlzLEs9WjMoJC5fX3YpLFg9JC5sLmdldChDKTtyZXR1cm4gWFswXSsrLGZ1bmN0aW9uKFEpe3ZhciBOPWZ1bmN0aW9uKCl7JC5wcm9wcy5yZXZlYWxPcmRlcj8oWC5wdXNoKFEpLGU1KCQsQyxYKSk6USgpfTtLP0soTik6TigpfX0sZTAucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihDKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgJD1vMShDLmNoaWxkcmVuKTtDLnJldmVhbE9yZGVyJiZDLnJldmVhbE9yZGVyWzBdPT09ImIiJiYkLnJldmVyc2UoKTtmb3IodmFyIEs9JC5sZW5ndGg7Sy0tOyl0aGlzLmwuc2V0KCRbS10sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuIEMuY2hpbGRyZW59LGUwLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZTAucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIEM9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbigkLEspe2U1KEMsSywkKX0pfTt2YXIgQTk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsTzk9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLFQ5PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sTTk9L1tBLVowLTldL2csdzk9dHlwZW9mIGRvY3VtZW50PCJ1IixiOT1mdW5jdGlvbihDKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoQyl9O3oxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKEMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6MS5wcm90b3R5cGUsQyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIitDXX0sc2V0OmZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLEMse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTokfSl9fSl9KTt2YXIgQzM9bC5ldmVudDtsLmV2ZW50PWZ1bmN0aW9uKEMpe3JldHVybiBDMyYmKEM9QzMoQykpLEMucGVyc2lzdD1mdW5jdGlvbigpe30sQy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sQy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSxDLm5hdGl2ZUV2ZW50PUN9O3ZhciBxMyxQOT17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sJDM9bC52bm9kZTtsLnZub2RlPWZ1bmN0aW9uKEMpe3R5cGVvZiBDLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbigkKXt2YXJ7cHJvcHM6Syx0eXBlOlh9PSQsUT17fSxOPVguaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIFogaW4gSyl7dmFyIHE9S1taXTtpZighKFo9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBLKSYmcT09bnVsbHx8dzkmJlo9PT0iY2hpbGRyZW4iJiZYPT09Im5vc2NyaXB0Inx8Wj09PSJjbGFzcyJ8fFo9PT0iY2xhc3NOYW1lIikpe3ZhciBHPVoudG9Mb3dlckNhc2UoKTtaPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBLJiZLLnZhbHVlPT1udWxsP1o9InZhbHVlIjpaPT09ImRvd25sb2FkIiYmcT09PSEwP3E9IiI6Rz09PSJ0cmFuc2xhdGUiJiZxPT09Im5vIj9xPSExOkdbMF09PT0ibyImJkdbMV09PT0ibiI/Rz09PSJvbmRvdWJsZWNsaWNrIj9aPSJvbmRibGNsaWNrIjpHIT09Im9uY2hhbmdlInx8WCE9PSJpbnB1dCImJlghPT0idGV4dGFyZWEifHxiOShLLnR5cGUpP0c9PT0ib25mb2N1cyI/Wj0ib25mb2N1c2luIjpHPT09Im9uYmx1ciI/Wj0ib25mb2N1c291dCI6VDkudGVzdChaKSYmKFo9Ryk6Rz1aPSJvbmlucHV0IjpOJiZPOS50ZXN0KFopP1o9Wi5yZXBsYWNlKE05LCItJCYiKS50b0xvd2VyQ2FzZSgpOnE9PT1udWxsJiYocT12b2lkIDApLEc9PT0ib25pbnB1dCImJlFbWj1HXSYmKFo9Im9uaW5wdXRDYXB0dXJlIiksUVtaXT1xfX1YPT0ic2VsZWN0IiYmKFEubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoUS52YWx1ZSkmJihRLnZhbHVlPW8xKEsuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oWSl7WS5wcm9wcy5zZWxlY3RlZD1RLnZhbHVlLmluZGV4T2YoWS5wcm9wcy52YWx1ZSkhPS0xfSkpLFEuZGVmYXVsdFZhbHVlIT1udWxsJiYoUS52YWx1ZT1vMShLLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKFkpe1kucHJvcHMuc2VsZWN0ZWQ9US5tdWx0aXBsZT9RLmRlZmF1bHRWYWx1ZS5pbmRleE9mKFkucHJvcHMudmFsdWUpIT0tMTpRLmRlZmF1bHRWYWx1ZT09WS5wcm9wcy52YWx1ZX0pKSksSy5jbGFzcyYmIUsuY2xhc3NOYW1lPyhRLmNsYXNzPUsuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KFEsImNsYXNzTmFtZSIsUDkpKTpLLmNsYXNzTmFtZSYmKFEuY2xhc3M9US5jbGFzc05hbWU9Sy5jbGFzc05hbWUpLCQucHJvcHM9UX0oQyksQy4kJHR5cGVvZj1BOSwkMyYmJDMoQyl9O3ZhciBLMz1sLl9fcjtsLl9fcj1mdW5jdGlvbihDKXtLMyYmSzMoQykscTM9Qy5fX2N9O3ZhciBYMz1sLmRpZmZlZDtsLmRpZmZlZD1mdW5jdGlvbihDKXtYMyYmWDMoQyk7dmFye3Byb3BzOiQsX19lOkt9PUM7SyE9bnVsbCYmQy50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluICQmJiQudmFsdWUhPT1LLnZhbHVlJiYoSy52YWx1ZT0kLnZhbHVlPT1udWxsPyIiOiQudmFsdWUpLHEzPW51bGx9O3ZhciBlMT0zO2Z1bmN0aW9uIFIyKEMpe3JldHVybiBDPT09ImxhbmRzY2FwZV9sZWZ0Inx8Qz09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIEQwKEMpe3JldHVybiEhQyYmKFIyKEMub3JpZW50YXRpb24pfHxDLndpZHRoPkMuaGVpZ2h0KX1mdW5jdGlvbiBVMChDKXtpZighQ3x8Qy53aWR0aDw9MHx8Qy5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0ICQ9UjIoQy5vcmllbnRhdGlvbil8fEMud2lkdGg+Qy5oZWlnaHQsSz0kP01hdGgubWF4KEMud2lkdGgsQy5oZWlnaHQpOk1hdGgubWluKEMud2lkdGgsQy5oZWlnaHQpLFg9JD9NYXRoLm1pbihDLndpZHRoLEMuaGVpZ2h0KTpNYXRoLm1heChDLndpZHRoLEMuaGVpZ2h0KTtpZihLPT09Qy53aWR0aCYmWD09PUMuaGVpZ2h0KXJldHVybiBDO3JldHVybnsuLi5DLHdpZHRoOkssaGVpZ2h0Olh9fWZ1bmN0aW9uIGgwKEMpe2xldCAkPVUwKEMpLEs9WTMoQz8ub3JpZW50YXRpb24pLFg9TWF0aC5hYnMoSyk9PT05MCxRPSEhQyYmQy53aWR0aD5DLmhlaWdodCxOPUs9PT0xODB8fFgmJiFRO3JldHVybntkaXNwbGF5Q29uZmlnOiQscm90YXRpb25EZWdyZWVzOk4/SzowLG5lZWRzQ3NzUm90YXRpb246TixpbnB1dE9yaWVudGF0aW9uOk4/Qz8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBZMyhDKXtzd2l0Y2goQyl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiB4MChDLCQsSyl7c3dpdGNoKEMpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OksseToxLSR9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLUsseTokfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLSQseToxLUt9O2RlZmF1bHQ6cmV0dXJue3g6JCx5Okt9fX1mdW5jdGlvbiBtMihDLCQpe3N3aXRjaChDKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goJCl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuICR9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaCgkKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gJH1jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goJCl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuICR9ZGVmYXVsdDpyZXR1cm4gJH19dmFyIFc5PTA7ZnVuY3Rpb24gSihDLCQsSyxYLFEsTil7JHx8KCQ9e30pO3ZhciBaLHEsRz0kO2lmKCJyZWYiaW4gRylmb3IocSBpbiBHPXt9LCQpcT09InJlZiI/Wj0kW3FdOkdbcV09JFtxXTt2YXIgWT17dHlwZTpDLHByb3BzOkcsa2V5OksscmVmOlosX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tVzksX19pOi0xLF9fdTowLF9fc291cmNlOlEsX19zZWxmOk59O2lmKHR5cGVvZiBDPT0iZnVuY3Rpb24iJiYoWj1DLmRlZmF1bHRQcm9wcykpZm9yKHEgaW4gWilHW3FdPT09dm9pZCAwJiYoR1txXT1aW3FdKTtyZXR1cm4gbC52bm9kZSYmbC52bm9kZShZKSxZfXZhciBHMz1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLHk5PTMsRTk9NCxJOT01O2Z1bmN0aW9uIEMyKHt1cmw6Qyx3c1VybDokLHN0eWxlOkssaW1hZ2VTdHlsZTpYLGNsYXNzTmFtZTpRLG9uSG9tZVByZXNzOk4sb25TdHJlYW1Ub3VjaDpaLG9uU3RyZWFtTXVsdGlUb3VjaDpxLG9uU3RyZWFtQnV0dG9uOkcsc3Vic2NyaWJlRnJhbWU6WSxzdHJlYW1GcmFtZTpCLHN0cmVhbUNvbmZpZzpMLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOlUsaGlkZUNvbnRyb2xzOkYsb25TdHJlYW1pbmdDaGFuZ2U6VCxjb25uZWN0aW9uUXVhbGl0eTpffSl7bGV0IGs9ISFaLHo9dihudWxsKSx3PXYobnVsbCksRT12KG51bGwpLHk9dihudWxsKSxbYyxSXT1BKCExKSxbaCx4XT1BKG51bGwpLFtwLGRdPUEobnVsbCksdT12KG51bGwpLCQxPXYoVSk7JDEuY3VycmVudD1VO2xldCBhPXYobnVsbCksW3IsZ109QShudWxsKTtXKCgpPT57bGV0IFY9YS5jdXJyZW50O2lmKCFWfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgRD1uZXcgUmVzaXplT2JzZXJ2ZXIoKE0pPT57bGV0IGI9TVswXT8uY29udGVudFJlY3Q7aWYoYilnKHt3aWR0aDpiLndpZHRoLGhlaWdodDpiLmhlaWdodH0pfSk7cmV0dXJuIEQub2JzZXJ2ZShWKSwoKT0+RC5kaXNjb25uZWN0KCl9LFtdKTtsZXRbSSxLMV09QSgwKSxuPXYoMCksW0oxLGVdPUEoITEpLHM9dihudWxsKTtXKCgpPT57aWYoXz09PSJwb29yIil7aWYoZSghMCkscy5jdXJyZW50KWNsZWFyVGltZW91dChzLmN1cnJlbnQpO3MuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57ZSghMSkscy5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYoZSghMSkscy5jdXJyZW50KWNsZWFyVGltZW91dChzLmN1cnJlbnQpLHMuY3VycmVudD1udWxsO3JldHVybigpPT57aWYocy5jdXJyZW50KWNsZWFyVGltZW91dChzLmN1cnJlbnQpfX0sW19dKTtsZXQgWDE9YCR7Q30vc3RyZWFtLm1qcGVnYDtXKCgpPT57dS5jdXJyZW50PW51bGwsZChudWxsKX0sW0NdKTtsZXQgTz1QKChWKT0+e2lmKCFWfHxWLndpZHRoPD0wfHxWLmhlaWdodDw9MClyZXR1cm47bGV0IEQ9dS5jdXJyZW50LE09Vi5vcmllbnRhdGlvbj09PXZvaWQgMCYmRD8ub3JpZW50YXRpb24/ey4uLlYsb3JpZW50YXRpb246RC5vcmllbnRhdGlvbn06VjtpZihEJiZELndpZHRoPT09TS53aWR0aCYmRC5oZWlnaHQ9PT1NLmhlaWdodCYmRC5vcmllbnRhdGlvbj09PU0ub3JpZW50YXRpb24pcmV0dXJuO3UuY3VycmVudD1NLGQoTSksJDEuY3VycmVudD8uKE0pfSxbXSksUz12KFQpO1MuY3VycmVudD1ULFcoKCk9PntTLmN1cnJlbnQ/LihjKX0sW2NdKSxXKCgpPT57aWYoayYmTClPKEwpfSxbayxMLE9dKTtsZXQgaj12KCExKTtqLmN1cnJlbnQ9YztsZXQgaT12KG51bGwpO1coKCk9PntpZigha3x8IVkpcmV0dXJuO2xldCBEPXNldFRpbWVvdXQoKCk9PntpZighai5jdXJyZW50KXgoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSxNPVkoKGIpPT57bi5jdXJyZW50KyssRjEuY3VycmVudD1EYXRlLm5vdygpO2xldCBmPXcuY3VycmVudDtpZihmKXtpZihpLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChpLmN1cnJlbnQpO2kuY3VycmVudD1iLGYuc3JjPWJ9aWYoIWouY3VycmVudCljbGVhclRpbWVvdXQoRCksUighMCkseChudWxsKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KEQpLE0/LigpLGkuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKGkuY3VycmVudCksaS5jdXJyZW50PW51bGx9fSxbayxZXSk7bGV0IHQ9UCgoVik9PntsZXQgRD1oMCh1LmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sTT14MChELFYueCxWLnkpLGI9Vi5lZGdlPT09dm9pZCAwP3ZvaWQgMDptMihELFYuZWRnZSksZj1iPT09dm9pZCAwP3t0eXBlOlYudHlwZSwuLi5NfTp7dHlwZTpWLnR5cGUsLi4uTSxlZGdlOmJ9O2lmKGspe1o/LihmKTtyZXR1cm59bGV0IEg9eS5jdXJyZW50O2lmKCFIfHxILnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IG09bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGYpKSxvPW5ldyBVaW50OEFycmF5KDErbS5sZW5ndGgpO29bMF09eTksby5zZXQobSwxKSxILnNlbmQobyl9LFtrLFpdKSxZMT1QKChWKT0+e2lmKGspe0c/LihWKTtyZXR1cm59bGV0IEQ9eS5jdXJyZW50O2lmKCFEfHxELnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IE09bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246Vn0pKSxiPW5ldyBVaW50OEFycmF5KDErTS5sZW5ndGgpO2JbMF09RTksYi5zZXQoTSwxKSxELnNlbmQoYil9LFtrLEddKSxaMT1QKChWKT0+e2xldCBEPWgwKHUuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixNPXgwKEQsVi54MSxWLnkxKSxiPXgwKEQsVi54MixWLnkyKSxmPXt0eXBlOlYudHlwZSx4MTpNLngseTE6TS55LHgyOmIueCx5MjpiLnl9O2lmKGspe3E/LihmKTtyZXR1cm59bGV0IEg9eS5jdXJyZW50O2lmKCFIfHxILnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IG09bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGYpKSxvPW5ldyBVaW50OEFycmF5KDErbS5sZW5ndGgpO29bMF09STksby5zZXQobSwxKSxILnNlbmQobyl9LFtrLHFdKTtXKCgpPT57aWYoaylyZXR1cm47bGV0IFY9bmV3IEFib3J0Q29udHJvbGxlcixEPSgpPT57ZmV0Y2goYCR7Q30vY29uZmlnYCx7c2lnbmFsOlYuc2lnbmFsfSkudGhlbigoazEpPT5rMS5qc29uKCkpLnRoZW4oKGsxKT0+e08oazEpfSkuY2F0Y2goKCk9Pnt9KX07RCgpO2xldCBNPXNldEludGVydmFsKEQsMTAwMCksYj0kPz9DLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixmPW5ldyBXZWJTb2NrZXQoYik7Zi5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIseS5jdXJyZW50PWYsZi5vbm9wZW49KCk9PntSKCEwKSx4KG51bGwpfSxmLm9uY2xvc2U9KCk9PntSKCExKX0sZi5vbmVycm9yPSgpPT57eCgiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIiksUighMSl9O2xldCBIPW5ldyBBYm9ydENvbnRyb2xsZXIsbT1zZXRJbnRlcnZhbCgoKT0+e0sxKG4uY3VycmVudCksbi5jdXJyZW50PTB9LDEwMDApLG89ITEsVjE9c2V0VGltZW91dCgoKT0+e2lmKCFvKXgoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtsZXQgXzE9KGF3YWl0IGZldGNoKFgxLHtzaWduYWw6SC5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIV8xKXJldHVybjtsZXQgYjE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOnAwLHZhbHVlOnkwfT1hd2FpdCBfMS5yZWFkKCk7aWYocDApYnJlYWs7aWYoeTApZm9yKGxldCBMMD0wO0wwPD15MC5sZW5ndGgtYjEubGVuZ3RoO0wwKyspe2xldCBGMj0hMDtmb3IobGV0IFYwPTA7VjA8YjEubGVuZ3RoO1YwKyspaWYoeTBbTDArVjBdIT09YjFbVjBdKXtGMj0hMTticmVha31pZihGMil7aWYobi5jdXJyZW50KyssIW8pbz0hMCxjbGVhclRpbWVvdXQoVjEpfX19fWNhdGNoe319KSgpLCgpPT57SC5hYm9ydCgpLFYuYWJvcnQoKSxjbGVhckludGVydmFsKE0pLGNsZWFySW50ZXJ2YWwobSksY2xlYXJUaW1lb3V0KFYxKSxmLmNsb3NlKCkseS5jdXJyZW50PW51bGx9fSxbQyxYMSxrLE8sJF0pO2xldCBGMT12KDApO1coKCk9PntpZighaylyZXR1cm47bGV0IFY9MjAwMCxEPSgpPT57bGV0IGY9RjEuY3VycmVudDtpZighZnx8IWouY3VycmVudClyZXR1cm47aWYoRGF0ZS5ub3coKS1mPlYpUighMSl9LE09c2V0SW50ZXJ2YWwoKCk9PntLMShuLmN1cnJlbnQpLG4uY3VycmVudD0wLEQoKX0sMTAwMCksYj0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4pRCgpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsYiksKCk9PntjbGVhckludGVydmFsKE0pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGIpfX0sW2tdKTtsZXQgUzE9UCgoKT0+e3JldHVybiBrP3cuY3VycmVudDp6LmN1cnJlbnR9LFtrXSksRzE9UCgoKT0+e3JldHVybiBFLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9TMSgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW1MxXSksUDE9UCgoVixEKT0+e2xldCBNPUcxKCk7aWYoIU0pcmV0dXJuO2xldCBiPShELmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLGY9KEQuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7dCh7dHlwZTpWLHg6Yix5OmZ9KX0sW0cxLHRdKSxDMT12KCExKSxxMT12KCExKSxoMT12KCExKSxSMT12KHtkeDowLGR5OjB9KSxXMT12KCExKSxbbTEscTBdPUEoITEpLHYxPXYoe3g6MC41LHk6MC41fSksW1QxLEExXT1BKG51bGwpO1coKCk9PntsZXQgVj0oTSk9PntpZihNLmtleT09PSJBbHQiKXEwKCEwKX0sRD0oTSk9PntpZihNLmtleT09PSJBbHQiKXtpZihxMCghMSksIXExLmN1cnJlbnQpQTEobnVsbCl9fTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLFYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsRCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsViksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixEKX19LFtdKSxXKCgpPT57aWYobTEmJiFxMS5jdXJyZW50KXtsZXQgVj12MS5jdXJyZW50O0ExKHt4MTpWLngseTE6Vi55LHgyOjEtVi54LHkyOjEtVi55fSl9ZWxzZSBpZighbTEmJiFxMS5jdXJyZW50KUExKG51bGwpfSxbbTFdKTtsZXQgajE9dihudWxsKSxDMD12KCExKSx5MT12KDApLCQwPVAoKFYsRCk9PntDMC5jdXJyZW50PSEwO2xldCBNPWoxLmN1cnJlbnQ7aWYoTSljYW5jZWxBbmltYXRpb25GcmFtZSh5MS5jdXJyZW50KSx5MS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e00uc3R5bGUubGVmdD1gJHtWKjEwMH0lYCxNLnN0eWxlLnRvcD1gJHtEKjEwMH0lYCxNLnN0eWxlLmRpc3BsYXk9ImJsb2NrIn0pfSxbXSksSzA9UCgoVixEKT0+e2lmKCFDMC5jdXJyZW50KXJldHVybjtsZXQgTT1qMS5jdXJyZW50O2lmKE0pY2FuY2VsQW5pbWF0aW9uRnJhbWUoeTEuY3VycmVudCkseTEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntNLnN0eWxlLmxlZnQ9YCR7VioxMDB9JWAsTS5zdHlsZS50b3A9YCR7RCoxMDB9JWB9KX0sW10pLGcxPVAoKCk9PntDMC5jdXJyZW50PSExO2xldCBWPWoxLmN1cnJlbnQ7aWYoViljYW5jZWxBbmltYXRpb25GcmFtZSh5MS5jdXJyZW50KSxWLnN0eWxlLmRpc3BsYXk9Im5vbmUifSxbXSksWTA9digwKSxNMT12KG51bGwpLEcwPVAoKCk9PntsZXQgVj1EYXRlLm5vdygpLEQ9Vi1ZMC5jdXJyZW50O2lmKFkwLmN1cnJlbnQ9VixEPDMwMCl7aWYoTTEuY3VycmVudCljbGVhclRpbWVvdXQoTTEuY3VycmVudCksTTEuY3VycmVudD1udWxsO2lmKE4pTigpO2Vsc2UgWTEoImFwcF9zd2l0Y2hlciIpfWVsc2UgTTEuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57aWYoTilOKCk7ZWxzZSBZMSgiaG9tZSIpO00xLmN1cnJlbnQ9bnVsbH0sMzAwKX0sW1kxLE5dKSxjMT1oMChwKSxOMT1jMS5kaXNwbGF5Q29uZmlnLHcxPSgoKT0+e2lmKCFOMXx8IXIpcmV0dXJuIG51bGw7aWYoci53aWR0aD09PTB8fHIuaGVpZ2h0PT09MClyZXR1cm4gbnVsbDtsZXQgVj1NYXRoLm1pbihyLndpZHRoL04xLndpZHRoLHIuaGVpZ2h0L04xLmhlaWdodCk7cmV0dXJue3dpZHRoOk4xLndpZHRoKlYsaGVpZ2h0Ok4xLmhlaWdodCpWfX0pKCksYTE9YzEucm90YXRpb25EZWdyZWVzLGwxPWMxLm5lZWRzQ3NzUm90YXRpb24mJk1hdGguYWJzKGExKT09PTkwLEUxPVgsWDA9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6bDEmJncxP2Ake3cxLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpsMSYmdzE/YCR7dzEud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7YTE9PT0wPyIiOmAgcm90YXRlKCR7YTF9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpHMyxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlgsLi4uYTE9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fTtyZXR1cm4gSigiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLkY/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLkt9LGNsYXNzTmFtZTpRLGNoaWxkcmVuOltKKCJkaXYiLHtyZWY6YSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsbWluSGVpZ2h0OjAsbWluV2lkdGg6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIifSxjaGlsZHJlbjpKKCJkaXYiLHtyZWY6RSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIix3aWR0aDp3MT9gJHt3MS53aWR0aH1weGA6IjEwMCUiLGhlaWdodDp3MT9gJHt3MS5oZWlnaHR9cHhgOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIixib3JkZXJSYWRpdXM6RTE/LmJvcmRlclJhZGl1cyxjb3JuZXJTaGFwZTpFMT8uY29ybmVyU2hhcGV9LGNoaWxkcmVuOltKKCJpbWciLHtyZWY6eixzcmM6az92b2lkIDA6WDEsZHJhZ2dhYmxlOiExLG9uTG9hZDooVik9PntsZXQgRD1WLmN1cnJlbnRUYXJnZXQ7aWYoRC5uYXR1cmFsV2lkdGg+MCYmRC5uYXR1cmFsSGVpZ2h0PjApTyh7d2lkdGg6RC5uYXR1cmFsV2lkdGgsaGVpZ2h0OkQubmF0dXJhbEhlaWdodH0pfSxzdHlsZTprP3tkaXNwbGF5OiJub25lIn06WDB9KSxrJiZKKCJpbWciLHtyZWY6dyxkcmFnZ2FibGU6ITEsb25Mb2FkOihWKT0+e2xldCBEPVYuY3VycmVudFRhcmdldDtpZihELm5hdHVyYWxXaWR0aD4wJiZELm5hdHVyYWxIZWlnaHQ+MClPKHt3aWR0aDpELm5hdHVyYWxXaWR0aCxoZWlnaHQ6RC5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOlgwfSksSigiZGl2Iix7c3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6RzMsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooVik9PntWLnByZXZlbnREZWZhdWx0KCk7bGV0IEQ9RzEoKTtpZighRClyZXR1cm47bGV0IE09KFYuY2xpZW50WC1ELmxlZnQpL0Qud2lkdGgsYj0oVi5jbGllbnRZLUQudG9wKS9ELmhlaWdodDtpZihWLmFsdEtleSl7cTEuY3VycmVudD0hMCxoMS5jdXJyZW50PVYuc2hpZnRLZXk7bGV0IGY9e3gxOk0seTE6Yix4MjoxLU0seTI6MS1ifTtSMS5jdXJyZW50PXtkeDoxLU0tTSxkeToxLWItYn0sQTEoZiksWjEoe3R5cGU6ImJlZ2luIiwuLi5mfSk7cmV0dXJufWlmKCQwKE0sYiksYj4wLjg4KUMxLmN1cnJlbnQ9ITAsdCh7dHlwZToiYmVnaW4iLHg6TSx5OmIsZWRnZTplMX0pO2Vsc2UgQzEuY3VycmVudD0hMSxQMSgiYmVnaW4iLFYpfSxvbk1vdXNlTW92ZTooVik9PntsZXQgRD1HMSgpO2lmKCFEKXJldHVybjtsZXQgTT0oVi5jbGllbnRYLUQubGVmdCkvRC53aWR0aCxiPShWLmNsaWVudFktRC50b3ApL0QuaGVpZ2h0O2lmKHYxLmN1cnJlbnQ9e3g6TSx5OmJ9LFYuYnV0dG9ucz09PTApe2lmKFYuYWx0S2V5KUExKHt4MTpNLHkxOmIseDI6MS1NLHkyOjEtYn0pO3JldHVybn1pZihxMS5jdXJyZW50KXtsZXQgZjtpZihoMS5jdXJyZW50KXtsZXQgSD1SMS5jdXJyZW50O2Y9e3gxOk0seTE6Yix4MjpNK0guZHgseTI6YitILmR5fX1lbHNlIGY9e3gxOk0seTE6Yix4MjoxLU0seTI6MS1ifTtBMShmKSxaMSh7dHlwZToibW92ZSIsLi4uZn0pO3JldHVybn1pZihLMChNLGIpLEMxLmN1cnJlbnQpdCh7dHlwZToibW92ZSIseDpNLHk6YixlZGdlOmUxfSk7ZWxzZSBQMSgibW92ZSIsVil9LG9uTW91c2VVcDooVik9PntpZihxMS5jdXJyZW50KXtsZXQgRD1HMSgpO2lmKEQpe2xldCBNPShWLmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLGI9KFYuY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQ7aWYoaDEuY3VycmVudCl7bGV0IGY9UjEuY3VycmVudDtaMSh7dHlwZToiZW5kIix4MTpNLHkxOmIseDI6TStmLmR4LHkyOmIrZi5keX0pfWVsc2UgWjEoe3R5cGU6ImVuZCIseDE6TSx5MTpiLHgyOjEtTSx5MjoxLWJ9KX1pZihxMS5jdXJyZW50PSExLCFWLmFsdEtleSlBMShudWxsKTtyZXR1cm59aWYoZzEoKSxDMS5jdXJyZW50KXtsZXQgRD1HMSgpO2lmKEQpe2xldCBNPShWLmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLGI9KFYuY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQ7dCh7dHlwZToiZW5kIix4Ok0seTpiLGVkZ2U6ZTF9KX1DMS5jdXJyZW50PSExO3JldHVybn1QMSgiZW5kIixWKX0sb25Nb3VzZUxlYXZlOihWKT0+e2lmKHExLmN1cnJlbnQpe2lmKFQxKVoxKHt0eXBlOiJlbmQiLC4uLlQxfSk7cTEuY3VycmVudD0hMSxBMShudWxsKTtyZXR1cm59aWYoZzEoKSxDMS5jdXJyZW50KXtsZXQgRD1HMSgpO2lmKEQpe2xldCBNPShWLmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLGI9KFYuY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQ7dCh7dHlwZToiZW5kIix4Ok0seTpiLGVkZ2U6ZTF9KX1DMS5jdXJyZW50PSExO3JldHVybn1pZihWLmJ1dHRvbnM+MClQMSgiZW5kIixWKTtBMShudWxsKX0sb25Ub3VjaFN0YXJ0OihWKT0+e1YucHJldmVudERlZmF1bHQoKTtsZXQgRD1HMSgpO2lmKCFEKXJldHVybjtpZihWLnRvdWNoZXMubGVuZ3RoPj0yKXtnMSgpO2xldCBIPVYudG91Y2hlc1swXSxtPVYudG91Y2hlc1sxXSxvPXt4MTooSC5jbGllbnRYLUQubGVmdCkvRC53aWR0aCx5MTooSC5jbGllbnRZLUQudG9wKS9ELmhlaWdodCx4MjoobS5jbGllbnRYLUQubGVmdCkvRC53aWR0aCx5MjoobS5jbGllbnRZLUQudG9wKS9ELmhlaWdodH07aWYoIVcxLmN1cnJlbnQmJiFDMS5jdXJyZW50KXQoe3R5cGU6ImVuZCIseDpvLngxLHk6by55MX0pO1cxLmN1cnJlbnQ9ITAscTEuY3VycmVudD0hMCxDMS5jdXJyZW50PSExLEExKG8pLFoxKHt0eXBlOiJiZWdpbiIsLi4ub30pO3JldHVybn1sZXQgTT1WLnRvdWNoZXNbMF07aWYoIU0pcmV0dXJuO2xldCBiPShNLmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLGY9KE0uY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQ7aWYoJDAoYixmKSxmPjAuODgpQzEuY3VycmVudD0hMCx0KHt0eXBlOiJiZWdpbiIseDpiLHk6ZixlZGdlOmUxfSk7ZWxzZSBDMS5jdXJyZW50PSExLHQoe3R5cGU6ImJlZ2luIix4OmIseTpmfSl9LG9uVG91Y2hNb3ZlOihWKT0+e1YucHJldmVudERlZmF1bHQoKTtsZXQgRD1HMSgpO2lmKCFEKXJldHVybjtpZihXMS5jdXJyZW50JiZWLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgSD1WLnRvdWNoZXNbMF0sbT1WLnRvdWNoZXNbMV0sbz17eDE6KEguY2xpZW50WC1ELmxlZnQpL0Qud2lkdGgseTE6KEguY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQseDI6KG0uY2xpZW50WC1ELmxlZnQpL0Qud2lkdGgseTI6KG0uY2xpZW50WS1ELnRvcCkvRC5oZWlnaHR9O0ExKG8pLFoxKHt0eXBlOiJtb3ZlIiwuLi5vfSk7cmV0dXJufWxldCBNPVYudG91Y2hlc1swXTtpZighTSlyZXR1cm47bGV0IGI9KE0uY2xpZW50WC1ELmxlZnQpL0Qud2lkdGgsZj0oTS5jbGllbnRZLUQudG9wKS9ELmhlaWdodDtpZihLMChiLGYpLEMxLmN1cnJlbnQpdCh7dHlwZToibW92ZSIseDpiLHk6ZixlZGdlOmUxfSk7ZWxzZSB0KHt0eXBlOiJtb3ZlIix4OmIseTpmfSl9LG9uVG91Y2hFbmQ6KFYpPT57Vi5wcmV2ZW50RGVmYXVsdCgpO2xldCBEPUcxKCk7aWYoIUQpcmV0dXJuO2lmKFcxLmN1cnJlbnQpe2lmKFYudG91Y2hlcy5sZW5ndGg8Mil7bGV0IEg9Vi5jaGFuZ2VkVG91Y2hlc1swXSxtPVQxO2lmKEgmJm0pWjEoe3R5cGU6ImVuZCIseDE6KEguY2xpZW50WC1ELmxlZnQpL0Qud2lkdGgseTE6KEguY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQseDI6bS54Mix5MjptLnkyfSk7ZWxzZSBpZihtKVoxKHt0eXBlOiJlbmQiLC4uLm19KTtXMS5jdXJyZW50PSExLHExLmN1cnJlbnQ9ITEsQTEobnVsbCl9cmV0dXJufWxldCBNPVYuY2hhbmdlZFRvdWNoZXNbMF07aWYoIU0pcmV0dXJuO2xldCBiPShNLmNsaWVudFgtRC5sZWZ0KS9ELndpZHRoLGY9KE0uY2xpZW50WS1ELnRvcCkvRC5oZWlnaHQ7aWYoZzEoKSxDMS5jdXJyZW50KXQoe3R5cGU6ImVuZCIseDpiLHk6ZixlZGdlOmUxfSksQzEuY3VycmVudD0hMTtlbHNlIHQoe3R5cGU6ImVuZCIseDpiLHk6Zn0pfX0pLEooImRpdiIse3JlZjpqMSwiZGF0YS10ZXN0aWQiOiJ0b3VjaC1pbmRpY2F0b3IiLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6Im5vbmUiLHdpZHRoOjI0LGhlaWdodDoyNCxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSg1OSwxMzAsMjQ2LDAuNSkiLGJveFNoYWRvdzoiMCAwIDhweCByZ2JhKDU5LDEzMCwyNDYsMC4zKSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLFQxJiZKKFExLHtjaGlsZHJlbjpbSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6QjMoVDEueDEsVDEueTEpfSksSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6QjMoVDEueDIsVDEueTIpfSldfSksIWMmJiFoJiZKKCJkaXYiLHtzdHlsZTp7Li4uTDMsLi4uWHx8e319LGNoaWxkcmVuOkooInNwYW4iLHtzdHlsZTp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0fSxjaGlsZHJlbjoiQ29ubmVjdGluZy4uLiJ9KX0pLGgmJkooImRpdiIse3N0eWxlOkwzLGNoaWxkcmVuOkooInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmNDQiLGZvbnRTaXplOjE0LHBhZGRpbmc6MjAsdGV4dEFsaWduOiJjZW50ZXIifSxjaGlsZHJlbjpofSl9KSxKMSYmSigiZGl2Iix7c3R5bGU6UzksY2hpbGRyZW46Sigic3BhbiIse3N0eWxlOntjb2xvcjoiI2ZiYmYyNCIsZm9udFNpemU6MTMsZm9udEZhbWlseToibW9ub3NwYWNlIn0sY2hpbGRyZW46IlNsb3cgY29ubmVjdGlvbiJ9KX0pXX0pfSksIUYmJkooImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI0cHggOHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sY2hpbGRyZW46W0ooImJ1dHRvbiIse29uQ2xpY2s6RzAsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLEooInNwYW4iLHtzdHlsZTp7Y29sb3I6ST4wPyIjNGY0IjoiIzg4OCIsZm9udFNpemU6MTIsZm9udEZhbWlseToibW9ub3NwYWNlIixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo2fSxjaGlsZHJlbjpbXyYmSigic3BhbiIseyJkYXRhLXRlc3RpZCI6InF1YWxpdHktZG90IixzdHlsZTp7d2lkdGg6OCxoZWlnaHQ6OCxib3JkZXJSYWRpdXM6IjUwJSIsZGlzcGxheToiaW5saW5lLWJsb2NrIixiYWNrZ3JvdW5kOl89PT0iZ29vZCI/IiM0YWRlODAiOl89PT0iZGVncmFkZWQiPyIjZmFjYzE1IjoiI2VmNDQ0NCJ9fSksSSwiIGZwcyJdfSldfSldfSl9dmFyIFM5PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sTDM9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LFYzPTIwO2Z1bmN0aW9uIEIzKEMsJCl7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHtDKjEwMH0lYCx0b3A6YCR7JCoxMDB9JWAsd2lkdGg6VjMsaGVpZ2h0OlYzLGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIEYwKEMpe2lmKCFDKXJldHVybiJpcGhvbmUiO2xldCAkPUMudG9Mb3dlckNhc2UoKTtpZigkLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKCQuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZigkLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgSTE9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LFQ2PUkxLmlwaG9uZS53aWR0aCxNNj1JMS5pcGhvbmUuaGVpZ2h0LHc2PUkxLmlwaG9uZS5iZXplbFgsYjY9STEuaXBob25lLmJlemVsWSxQNj1JMS5pcGhvbmUuaW5uZXJSYWRpdXMsXzM9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiAkMihDLCQpe2xldCBLPUMmJkMud2lkdGg+MCYmQy5oZWlnaHQ+MD9DOiQsWD1VMChLKTtpZihYKXJldHVybmAke1gud2lkdGh9IC8gJHtYLmhlaWdodH1gO3JldHVybmAke0kxLmlwaG9uZS53aWR0aC0yKkkxLmlwaG9uZS5iZXplbFh9IC8gJHtJMS5pcGhvbmUuaGVpZ2h0LTIqSTEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIEsyKEM9ImlwaG9uZSIsJCl7bGV0IEs9JD9fM1skXTpudWxsO2lmKEspcmV0dXJuIEs7bGV0IFg9STFbQ107cmV0dXJue3dpZHRoOlgud2lkdGgtMipYLmJlemVsWCxoZWlnaHQ6WC5oZWlnaHQtMipYLmJlemVsWX19ZnVuY3Rpb24gWDIoQz0iaXBob25lIiwkKXtpZihEMCgkKSlzd2l0Y2goQyl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaChDKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIEoyKEM9ImlwaG9uZSIsJCl7bGV0IEs9STFbQ10sWD1LLndpZHRoLTIqSy5iZXplbFgsUT1LLmhlaWdodC0yKksuYmV6ZWxZO2lmKFg8USYmRDAoJCkpcmV0dXJuYCR7Sy5pbm5lclJhZGl1cy9RKjEwMH0lIC8gJHtLLmlubmVyUmFkaXVzL1gqMTAwfSVgO3JldHVybmAke0suaW5uZXJSYWRpdXMvWCoxMDB9JSAvICR7Sy5pbm5lclJhZGl1cy9RKjEwMH0lYH1mdW5jdGlvbiBrMyhDKXtsZXQgJD1JMVtDLnR5cGVdLEs9JC53aWR0aC0yKiQuYmV6ZWxYLFg9JC5oZWlnaHQtMiokLmJlemVsWSxRLE47aWYoSzxYJiZEMChDLmNvbmZpZz8/bnVsbCkpUT0kLmlubmVyUmFkaXVzL1gsTj0kLmlubmVyUmFkaXVzL0s7ZWxzZSBRPSQuaW5uZXJSYWRpdXMvSyxOPSQuaW5uZXJSYWRpdXMvWDtsZXQgWj1RKkMuY29udGFpbmVyV2lkdGgscT1OKkMuY29udGFpbmVySGVpZ2h0LEc9TWF0aC5zcXJ0KE1hdGgubWF4KFoqcSwwKSk7cmV0dXJue3J4Oloscnk6cSxyR2VvbTpHfX12YXIgeDk9MTMsdjk9NjI7ZnVuY3Rpb24gajIoQyl7bGV0e2NvbnRhaW5lcldpZHRoOiQsY29udGFpbmVySGVpZ2h0Okt9PUMsWD0oayk9PmsudG9GaXhlZCgzKSxRPShrLHopPT57bGV0IHc9eixFPXoseT12OS8yKihNYXRoLlBJLzE4MCksYz0yMjUqTWF0aC5QSS8xODAsUj1jK3ksaD1jLXkseD13K2sqTWF0aC5jb3MoUikscD1FK2sqTWF0aC5zaW4oUiksZD13K2sqTWF0aC5jb3MoaCksdT1FK2sqTWF0aC5zaW4oaCksJDE9YE0gJHtYKHgpfSAke1gocCl9IEEgJHtYKGspfSAke1goayl9IDAgMCAxICR7WChkKX0gJHtYKHUpfWAsYT1gTSAke1goZCl9ICR7WCh1KX0gQSAke1goayl9ICR7WChrKX0gMCAwIDAgJHtYKHgpfSAke1gocCl9YDtyZXR1cm57ZDokMSxkRmlsbDphfX07aWYoISgkPjApfHwhKEs+MCkpe2xldCBrPXg5LHo9TWF0aC5jZWlsKGsrMTQpLHtkOncsZEZpbGw6RX09UShrLHopO3JldHVybntkOncsZEZpbGw6RSx2aWV3Qm94U2l6ZTp6fX1sZXR7ckdlb206Tn09azMoQyksWj1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKCQsSykpKSxxPU4qMC4zNCtaLEc9TWF0aC5taW4oJCxLKSxZPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLEcqMC4wNTIpKTtxPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLHEsWSkpO2xldCBGPU1hdGgubWF4KDI2LE1hdGguY2VpbChxKzEzKSkse2Q6VCxkRmlsbDpffT1RKHEsRik7cmV0dXJue2Q6VCxkRmlsbDpfLHZpZXdCb3hTaXplOkZ9fXZhciBwMj1kMShudWxsKTtmdW5jdGlvbiBRMihDKXtsZXQgJD1zMShwMik7aWYoISQpdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7Q30+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiAkfXZhciBtOT17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uIGo5KHtleGVjOkMsb25Sb3RhdGU6JCxvcmllbnRhdGlvbjpLLGRldmljZVVkaWQ6WCxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpOLHN0cmVhbWluZzpaPSExLGRpc2FibGVkOnE9ITEsY2hpbGRyZW46RyxzdHlsZTpZLC4uLkJ9KXtsZXQgTD1GMChRKSxGPXtleGVjOkMsb25Sb3RhdGU6JCxvcmllbnRhdGlvbjpLLGRldmljZVVkaWQ6WCxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpOLGRldmljZVR5cGU6TCxzdHJlYW1pbmc6WixkaXNhYmxlZDpxfHwhWHx8IVp9O3JldHVybiBKKHAyLlByb3ZpZGVyLHt2YWx1ZTpGLGNoaWxkcmVuOkooImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4ubTksLi4uWX0sLi4uQixjaGlsZHJlbjpHfSl9KX12YXIgcDk9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LGY5PXQxKGZ1bmN0aW9uKHtuYW1lOiQsc3VidGl0bGU6SyxoaWRlQ2hldnJvbjpYLHN0eWxlOlEsb25Nb3VzZUVudGVyOk4sb25Nb3VzZUxlYXZlOlosLi4ucX0sRyl7bGV0IFk9UTIoIlRpdGxlIiksW0IsTF09QSghMSksVT0kPz9ZLmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLEY9Sz8/KFkuZGV2aWNlUnVudGltZT9ZLmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBKKCJidXR0b24iLHtyZWY6Ryx0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KFQpPT57TCghMCksTj8uKFQpfSxvbk1vdXNlTGVhdmU6KFQpPT57TCghMSksWj8uKFQpfSxzdHlsZTp7Li4ucDksYmFja2dyb3VuZDpCPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uUX0sLi4ucSxjaGlsZHJlbjpbSigic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltVLCFYJiZKKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOkooInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLEooInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOkZ9KV19KX0pLGw5PXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH07ZnVuY3Rpb24gdTkoe3N0eWxlOkMsLi4uJH0pe3JldHVybiBKKCJkaXYiLHtzdHlsZTp7Li4ubDksLi4uQ30sLi4uJH0pfXZhciBvOT17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIscGFkZGluZzo2LGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZC1jb2xvciAwLjE1cywgY29sb3IgMC4xNXMifSxOMj10MShmdW5jdGlvbih7Zm9yY2VEaXNhYmxlZDokLHN0eWxlOkssZGlzYWJsZWQ6WCxvbk1vdXNlRW50ZXI6USxvbk1vdXNlTGVhdmU6TixjaGlsZHJlbjpaLC4uLnF9LEcpe2xldCBZPXMxKHAyKSxCPVh8fCR8fFk/LmRpc2FibGVkLFtMLFVdPUEoITEpO3JldHVybiBKKCJidXR0b24iLHtyZWY6Ryx0eXBlOiJidXR0b24iLGRpc2FibGVkOkIsb25Nb3VzZUVudGVyOihGKT0+e1UoITApLFE/LihGKX0sb25Nb3VzZUxlYXZlOihGKT0+e1UoITEpLE4/LihGKX0sc3R5bGU6ey4uLm85LGNvbG9yOkI/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6TCYmIUI/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6Qj8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5LfSwuLi5xLGNoaWxkcmVuOlp9KX0pO2Z1bmN0aW9uIGQ5KCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKCgkKT0+YC1lICckeyR9J2ApLnJlZHVjZSgoJCxLKT0+YCR7JH0gJHtLfWAsIm9zYXNjcmlwdCIpfXZhciBjOT17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxhOT1KKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksaTk9Sigic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMTQuNSA0aC01TDcgN0g0YTIgMiAwIDAgMC0yIDJ2OWEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJWOWEyIDIgMCAwIDAtMi0yaC0zeiJ9KSxKKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiNCJ9KV19KSxyOT1KKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTEyIDVINmEyIDIgMCAwIDAtMiAydjMifSksSigicGF0aCIse2Q6Im05IDggMy0zLTMtMyJ9KSxKKCJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn0pXX0pLG45PXQxKGZ1bmN0aW9uKHtvbkNsaWNrOiQsLi4uS30sWCl7bGV0IFE9UTIoIkhvbWVCdXR0b24iKTtyZXR1cm4gSihOMix7cmVmOlgsImFyaWEtbGFiZWwiOiJIb21lIixvbkNsaWNrOihOKT0+e2lmKCQ/LihOKSxOLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKFEuZGV2aWNlVHlwZT09PSJ3YXRjaCIpUS5leGVjKGQ5KCkpO2Vsc2UgUS5leGVjKCJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUiKX0sLi4uSyxjaGlsZHJlbjphOX0pfSksczk9dDEoZnVuY3Rpb24oe29uQ2xpY2s6JCwuLi5LfSxYKXtsZXQgUT1RMigiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBKKE4yLHtyZWY6WCwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KE4pPT57aWYoJD8uKE4pLE4uZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoUS5kZXZpY2VVZGlkKVEuZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7US5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uSyxjaGlsZHJlbjppOX0pfSksdDk9dDEoZnVuY3Rpb24oe29uQ2xpY2s6JCxmb3JjZURpc2FibGVkOkssLi4uWH0sUSl7bGV0IE49UTIoIlJvdGF0ZUJ1dHRvbiIpLFo9Ti5kZXZpY2VUeXBlPT09IndhdGNoInx8Ti5kZXZpY2VUeXBlPT09InZpc2lvbiIsW3EsR109QSgicG9ydHJhaXQiKTtyZXR1cm4gVygoKT0+e0coTi5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtOLmRldmljZVVkaWQsTi5vcmllbnRhdGlvbl0pLEooTjIse3JlZjpRLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpLfHxaLG9uQ2xpY2s6KFkpPT57aWYoJD8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIU4uZGV2aWNlVWRpZHx8WilyZXR1cm47bGV0IEI9YzlbTi5vcmllbnRhdGlvbj8/cV07aWYoRyhCKSxOLm9uUm90YXRlKU4ub25Sb3RhdGUoQik7ZWxzZSBOLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHtCfSAtZCAke04uZGV2aWNlVWRpZH1gKX0sLi4uWCxjaGlsZHJlbjpyOX0pfSksTzE9ajk7TzEuVGl0bGU9Zjk7TzEuQWN0aW9ucz11OTtPMS5CdXR0b249TjI7TzEuSG9tZUJ1dHRvbj1uOTtPMS5TY3JlZW5zaG90QnV0dG9uPXM5O08xLlJvdGF0ZUJ1dHRvbj10OTtmdW5jdGlvbiBmMSh7b3BlbjpDfSl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOmBsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIFt0cmFuc2l0aW9uOnRyYW5zZm9ybV8wLjE1cyxjb2xvcl8wLjEyc10gJHtDPyJyb3RhdGUtMTgwIjoicm90YXRlLTAifWAsY2hpbGRyZW46SigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gWjIoe2RpcjpDfSl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjpDPT09InVwIj9KKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6SigicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiB2MCgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpKKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIGYyKCl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltKKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksSigicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiBnMCgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gbDIoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiJ9KSxKKCJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6In0pXX0pfWZ1bmN0aW9uIHUyKCl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0IDIgOSAxMyIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNNi4wMDg1MiAxNC44MDU0QzUuODkxODEgMTQuOTM1IDUuNzU4MTUgMTQuOTk5OCA1LjYwNzU2IDE0Ljk5OThDNS40NTY5NiAxNS4wMDMzIDUuMzIzMyAxNC45NjEzIDUuMjA2NTkgMTQuODczN0M1LjA5MzY0IDE0Ljc4NjEgNS4wMjU4NyAxNC42NzIzIDUuMDAzMjggMTQuNTMyMkM0Ljk4NDQ2IDE0LjM5MjEgNS4wNDY1OCAxNC4yNDUgNS4xODk2NSAxNC4wOTA5TDYuOTQ1OTkgMTIuMTUyMkw3LjI0NTMgMTAuODc1NUw4LjE5OTcxIDExLjk4OTNMOC4wNTg1MyAxMi4zOTM5QzguMDIwODggMTIuNDk1NSA3Ljk4Njk5IDEyLjU3MDggNy45NTY4NyAxMi42MTk4QzcuOTMwNTIgMTIuNjY4OCA3Ljg3NDA0IDEyLjc0MDYgNy43ODc0NSAxMi44MzUyTDYuMDA4NTIgMTQuODA1NFpNMTAuMzQ1NyAxNC42NDI1TDkuMTAzMjkgMTIuMzA0NkM5LjA3Njk0IDEyLjI2MjUgOS4wNTQzNSAxMi4yMjIzIDkuMDM1NTMgMTIuMTgzN0M5LjAxNjcgMTIuMTQ1MiA4Ljk3NzE3IDEyLjA5MDkgOC45MTY5MyAxMi4wMjA5TDcuNzE5NjggMTAuNjE4MUM3LjQ5Mzc5IDEwLjM1NTQgNy4zMzc1NCAxMC4xMjk1IDcuMjUwOTUgOS45NDAzNEM3LjE2NDM1IDkuNzQ3NyA3LjEzNDI0IDkuNDk5MDEgNy4xNjA1OSA5LjE5NDI5TDcuMjYyMjQgNy45ODA2NUM3LjI2OTc3IDcuOTA3MSA3LjIzMjEyIDcuODU0NTYgNy4xNDkyOSA3LjgyMzA0QzcuMDY2NDcgNy43OTE1MSA2Ljk4NTUyIDcuODA5MDMgNi45MDY0NiA3Ljg3NTU3TDYuNDcxNjEgOC4yNDMzNEw2LjM0MTcyIDkuNjcyMzlDNi4zMjI4OSA5Ljg0NzUyIDYuMjY0NTQgOS45Nzg4NyA2LjE2NjY1IDEwLjA2NjRDNi4wNjg3NiAxMC4xNTQgNS45Mzg4NyAxMC4xOTI1IDUuNzc2OTggMTAuMTgyQzUuNjExMzIgMTAuMTc1IDUuNDgzMzEgMTAuMTE5IDUuMzkyOTUgMTAuMDEzOUM1LjMwNjM2IDkuOTA4ODIgNS4yNjg3MSA5Ljc3Mzk3IDUuMjgwMDEgOS42MDkzNUw1LjM4NzMxIDguMzA2MzlDNS40MDIzNyA4LjEyNzc2IDUuNDM4MTMgNy45NzU0IDUuNDk0NjEgNy44NDkzMUM1LjU1NDg1IDcuNzIzMjEgNS42NjAyNiA3LjU5MTg3IDUuODEwODYgNy40NTUyN0w2LjcxNDQ1IDYuNjI1MTZDNy4wMDQzNSA2LjM2MjQ3IDcuMjY5NzcgNi4xNjEwNyA3LjUxMDczIDYuMDIwOTZDNy43NTE2OCA1Ljg3NzM2IDguMDI4NDEgNS44MDU1NiA4LjM0MDkgNS44MDU1NkM4Ljc1ODggNS44MDU1NiA5LjA3ODgyIDUuOTMzNCA5LjMwMDk1IDYuMTg5MDlDOS41MjY4NSA2LjQ0NDc4IDkuNjI0NzQgNi43NjE3NiA5LjU5NDYyIDcuMTQwMDRMOS40NzYwMiA4LjczMTk1QzkuNDUzNDMgOS4wMTU2NiA5LjQxOTU1IDkuMjYyNTkgOS4zNzQzNyA5LjQ3Mjc1QzkuMzI5MTkgOS42ODI5IDkuMjUzODkgOS45Mjk4MyA5LjE0ODQ3IDEwLjIxMzVMOS4wOTIgMTAuMzYwNkw5Ljg2NTY5IDExLjM3OTlDOS45MjIxNyAxMS40NTM0IDkuOTgwNTIgMTEuNTM0IDEwLjA0MDggMTEuNjIxNkMxMC4xMDEgMTEuNzA5MSAxMC4xNTM3IDExLjc5NjcgMTAuMTk4OSAxMS44ODQzTDExLjQwNzQgMTQuMTY0NEMxMS41MDUzIDE0LjM1MDEgMTEuNTI0MSAxNC41MTEyIDExLjQ2MzkgMTQuNjQ3OEMxMS40MDM3IDE0Ljc4NDQgMTEuMzAyIDE0Ljg4MjUgMTEuMTU4OSAxNC45NDJDMTEuMDE5NiAxNS4wMDE1IDEwLjg3MDkgMTUuMDEwMyAxMC43MTI4IDE0Ljk2ODNDMTAuNTU4NCAxNC45MjYyIDEwLjQzNjEgMTQuODE3NyAxMC4zNDU3IDE0LjY0MjVaTTEyLjQwNyA3Ljk2NDg5QzEyLjU4NCA3Ljk2NDg5IDEyLjcyNyA4LjAxMDQyIDEyLjgzNjIgOC4xMDE0OUMxMi45NDU0IDguMTg5MDUgMTMgOC4zMDYzOSAxMyA4LjQ1MzVDMTMgOC42MTExMSAxMi45NDU0IDguNzMzNyAxMi44MzYyIDguODIxMjdDMTIuNzMwOCA4LjkwODgzIDEyLjU4NzcgOC45NTI2MSAxMi40MDcgOC45NTI2MUgxMS4xMzA3QzEwLjk1MzggOC45NTI2MSAxMC44MTQ1IDguOTM2ODUgMTAuNzEyOCA4LjkwNTMzQzEwLjYxMTIgOC44NzAzIDEwLjUxMzMgOC44MDcyNiAxMC40MTkxIDguNzE2MTlMMTAuMDUyMSA4LjM3OTk0TDEwLjE0MjQgNy4wNDAyMUwxMS4wMzQ3IDcuOTY0ODlIMTIuNDA3Wk05LjAwMTY0IDUuMzExNjlDOC43NzE5OCA1LjMxMTY5IDguNTYzMDMgNS4yNjA5MSA4LjM3NDc4IDUuMTU5MzNDOC4xODY1MyA1LjA1NDI2IDguMDM1OTQgNC45MTQxNSA3LjkyMjk5IDQuNzM5MDNDNy44MTM4MSA0LjU2MzkgNy43NTkyMSA0LjM2OTUgNy43NTkyMSA0LjE1NTg1QzcuNzU5MjEgMy45NDIxOSA3LjgxMzgxIDMuNzQ3OCA3LjkyMjk5IDMuNTcyNjdDOC4wMzU5NCAzLjM5NzU0IDguMTg2NTMgMy4yNTkxOSA4LjM3NDc4IDMuMTU3NjJDOC41NjMwMyAzLjA1MjU0IDguNzcxOTggMyA5LjAwMTY0IDNDOS4yMzEzIDMgOS40NDAyNiAzLjA1MjU0IDkuNjI4NSAzLjE1NzYyQzkuODE2NzUgMy4yNTkxOSA5Ljk2NTQ2IDMuMzk3NTQgMTAuMDc0NiAzLjU3MjY3QzEwLjE4NzYgMy43NDc4IDEwLjI0NDEgMy45NDIxOSAxMC4yNDQxIDQuMTU1ODVDMTAuMjQ0MSA0LjM2OTUgMTAuMTg3NiA0LjU2MzkgMTAuMDc0NiA0LjczOTAzQzkuOTY1NDYgNC45MTQxNSA5LjgxNjc1IDUuMDU0MjYgOS42Mjg1IDUuMTU5MzNDOS40NDAyNiA1LjI2MDkxIDkuMjMxMyA1LjMxMTY5IDkuMDAxNjQgNS4zMTE2OVoifSl9KX1mdW5jdGlvbiBvMigpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjI2IDEgMTIgMTQiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTMzLjI0MzcgNC41ODQ1OUMzMy4wMDA4IDQuNTg0NTkgMzIuNzgxNyA0LjUyNzI4IDMyLjU4NjYgNC40MTI2OEMzMi4zOTE1IDQuMjk0MTIgMzIuMjM0MiA0LjEzODAxIDMyLjExNDcgMy45NDQzN0MzMS45OTkyIDMuNzQ2NzcgMzEuOTQxNCAzLjUyOTQxIDMxLjk0MTQgMy4yOTIyOUMzMS45NDE0IDMuMDUxMjIgMzEuOTk5MiAyLjgzMzg3IDMyLjExNDcgMi42NDAyMkMzMi4yMzQyIDIuNDQ2NTcgMzIuMzkxNSAyLjI5MjQ1IDMyLjU4NjYgMi4xNzc4NEMzMi43ODE3IDIuMDU5MjggMzMuMDAwOCAyIDMzLjI0MzcgMkMzMy40ODI2IDIgMzMuNjk5NyAyLjA1OTI4IDMzLjg5NDggMi4xNzc4NEMzNC4wOTM5IDIuMjkyNDUgMzQuMjUxMiAyLjQ0NjU3IDM0LjM2NjcgMi42NDAyMkMzNC40ODYyIDIuODMzODcgMzQuNTQ1OSAzLjA1MTIyIDM0LjU0NTkgMy4yOTIyOUMzNC41NDU5IDMuNTI5NDEgMzQuNDg2MiAzLjc0Njc3IDM0LjM2NjcgMy45NDQzN0MzNC4yNTEyIDQuMTM4MDEgMzQuMDkzOSA0LjI5NDEyIDMzLjg5NDggNC40MTI2OEMzMy42OTk3IDQuNTI3MjggMzMuNDgyNiA0LjU4NDU5IDMzLjI0MzcgNC41ODQ1OVpNMzEuMjAwNyA5Ljc0MTkxQzMxLjA3MzMgOS42NzA3NyAzMC45NDE5IDkuNTk1NjggMzAuODA2NSA5LjUxNjY0QzMwLjY3NSA5LjQzNzYgMzAuNTU5NiA5LjM0Mjc2IDMwLjQ2IDkuMjMyMUMzMC4zNjA0IDkuMTE3NDkgMzAuMjkyNyA4Ljk3NzIgMzAuMjU2OSA4LjgxMTIyQzMwLjIyNSA4LjY0MTI4IDMwLjI0NDkgOC40Mjk4NSAzMC4zMTY2IDguMTc2OTNMMzAuODA2NSA2LjQ4MTUzQzMwLjgzODMgNi4zNjY5MiAzMC44MTg0IDYuMjc5OTggMzAuNzQ2NyA2LjIyMDdDMzAuNjc5IDYuMTU3NDcgMzAuNTk3NCA2LjEyOTgxIDMwLjUwMTggNi4xMzc3MUwyOS42NTk1IDYuMTk2OTlMMjkuNDAyNyA3LjkyMjAyQzI5LjM3ODggOC4xMDc3NyAyOS4zMTUxIDguMjQ2MDkgMjkuMjExNSA4LjMzNjk4QzI5LjEwOCA4LjQyNzg4IDI4Ljk3MjYgOC40NjU0MiAyOC44MDUzIDguNDQ5NjFDMjguNjQyIDguNDMzOCAyOC41MTg2IDguMzY2NjIgMjguNDM0OSA4LjI0ODA2QzI4LjM1MTMgOC4xMjk1IDI4LjMyMTQgNy45NzczNSAyOC4zNDUzIDcuNzkxNjFMMjguNjI2MSA1LjY4MTI2QzI4LjY1IDUuNTExMzIgMjguNzE1NyA1LjM3NDk4IDI4LjgyMzIgNS4yNzIyM0MyOC45MzA4IDUuMTY5NDggMjkuMDY4MSA1LjExMjE3IDI5LjIzNTQgNS4xMDAzMkwzMS4zMzIxIDQuOTUyMTJDMzEuODgxNyA0LjkxMjYgMzIuMzM1NyA0Ljk2OTkgMzIuNjk0MSA1LjEyNDAzQzMzLjA1MjUgNS4yNzgxNiAzMy4zNjcxIDUuNTM4OTkgMzMuNjM3OSA1LjkwNjUyTDM0LjY3MTQgNy4zMjMzTDM2LjE3MDggNi42NjUzQzM2LjMzOCA2LjU5MDIxIDM2LjQ4OTMgNi41NzQ0IDM2LjYyNDggNi42MTc4N0MzNi43NjAyIDYuNjU3MzkgMzYuODY1NyA2Ljc1MjI0IDM2Ljk0MTQgNi45MDI0MkMzNy4wMTMgNy4wNTI1OSAzNy4wMTkgNy4xOTQ4NiAzNi45NTkzIDcuMzI5MjNDMzYuOTAzNSA3LjQ2MzYgMzYuNzkyIDcuNTY4MzIgMzYuNjI0OCA3LjY0MzQxTDM0LjczMTEgOC40NzkyNUMzNC42MDM3IDguNTM4NTMgMzQuNDc0MyA4LjU1MDM5IDM0LjM0MjggOC41MTQ4MkMzNC4yMTU0IDguNDc1MyAzNC4xMTM4IDguNDAwMjEgMzQuMDM4MiA4LjI4OTU2TDMzLjM4MTEgNy4zMzUxNkMzMy4zMTM0IDcuMjQwMzEgMzMuMjI5OCA3LjE5ODgxIDMzLjEzMDIgNy4yMTA2N0MzMy4wMzA2IDcuMjIyNTMgMzIuOTY0OSA3LjI4Mzc4IDMyLjkzMzEgNy4zOTQ0NEwzMi40OTEgOC45Mjk3OEwzNC43MzExIDEwLjM4ODFDMzQuODQyNiAxMC40NTkyIDM0LjkyMjMgMTAuNTU2IDM0Ljk3MDEgMTAuNjc4NUMzNS4wMTc5IDEwLjgwMSAzNS4wMjk4IDEwLjkyNTUgMzUuMDA1OSAxMS4wNTJDMzQuOTg2IDExLjE3NDUgMzQuOTI4MiAxMS4yNzUzIDM0LjgzMjcgMTEuMzU0M0wzMi43NzE4IDEzLjA5NzFDMzIuNjA4NSAxMy4yMzU0IDMyLjQ0NTIgMTMuMjk4NyAzMi4yODE5IDEzLjI4NjhDMzIuMTIyNiAxMy4yNzUgMzEuOTkzMiAxMy4yMTM3IDMxLjg5MzcgMTMuMTAzMUMzMS43OTgxIDEyLjk5NjQgMzEuNzU0MyAxMi44NjU5IDMxLjc2MjIgMTIuNzExOEMzMS43NzAyIDEyLjU1MzcgMzEuODUzOCAxMi40MDc1IDMyLjAxMzEgMTIuMjczMUwzMy40ODg2IDExLjAxNjRMMzEuMjAwNyA5Ljc0MTkxWk0yNy4yMDQ0IDE0Ljg2MzdDMjcuMDg0OSAxNC43NTcgMjcuMDE3MiAxNC42MTg2IDI3LjAwMTMgMTQuNDQ4N0MyNi45ODkzIDE0LjI3ODggMjcuMDYxIDE0LjExNjcgMjcuMjE2MyAxMy45NjI2TDI5LjIyMzUgMTEuOTc2N0wyOS45MzQzIDkuNDgxMDhDMzAuMDQxOCA5LjYxNTQ0IDMwLjE3NTMgOS43NDU4NiAzMC4zMzQ1IDkuODcyMzJDMzAuNDk3OCA5Ljk5NDgzIDMwLjY5MyAxMC4xMTczIDMwLjkyIDEwLjIzOTlMMzEuMTE3MSAxMC4zNDY2TDMwLjMwNDcgMTIuNDMzMkMzMC4yNTI5IDEyLjU1NTcgMzAuMjA5MSAxMi42NDA3IDMwLjE3MzMgMTIuNjg4MUMzMC4xNDE0IDEyLjczNTUgMzAuMDg1NiAxMi43OTg4IDMwLjAwNiAxMi44Nzc4TDI4LjA3MDYgMTQuNzgwN0MyNy45MTkyIDE0LjkyNjkgMjcuNzYzOSAxNSAyNy42MDQ2IDE1QzI3LjQ0OTMgMTUgMjcuMzE1OSAxNC45NTQ2IDI3LjIwNDQgMTQuODYzN1oifSl9KX1mdW5jdGlvbiBkMigpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQ5IDMgMTYgMTIiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTU3LjAwMjggMTEuOTQ5QzU2Ljg0OCAxMS45NDkgNTYuNzE3MiAxMS44OTg3IDU2LjYxMDMgMTEuNzk4QzU2LjUwMzUgMTEuNjkzOSA1Ni40NTAxIDExLjU3MDcgNTYuNDUwMSAxMS40Mjg0VjkuMDI4NjNMNTQuNDIxNiA3LjEwNzc2QzU0LjIyMjcgNi45MjAzNSA1NC4wOTU1IDYuNjk4MjUgNTQuMDQwMyA2LjQ0MTQ0QzUzLjk4NSA2LjE4MTE2IDU0LjAxMDggNS45Mjc4MiA1NC4xMTc2IDUuNjgxNDJDNTQuMjI4MiA1LjQzODQ5IDU0LjM5NzcgNS4yNDQxNCA1NC42MjYxIDUuMDk4MzlDNTQuODU4MyA0Ljk0OTE2IDU1LjExNjIgNC44NzQ1NCA1NS4zOTk5IDQuODc0NTRINTguMTEzN0M1OC40MjMyIDQuODc0NTQgNTguNjg0OCA0Ljk3NjkyIDU4Ljg5ODUgNS4xODE2OEM1OS4xMTU5IDUuMzgyOTYgNTkuMjI0NiA1LjYyOTM2IDU5LjIyNDYgNS45MjA4N1Y3Ljc2MzY2SDYwLjg5OTNDNjEuMDUwNCA3Ljc2MzY2IDYxLjE3OTQgNy44MTM5OSA2MS4yODYyIDcuOTE0NjNDNjEuMzkzMSA4LjAxNTI3IDYxLjQ0NjUgOC4xMzg0NyA2MS40NDY1IDguMjg0MjNDNjEuNDQ2NSA4LjQyNjUxIDYxLjM5MzEgOC41NDc5OCA2MS4yODYyIDguNjQ4NjJDNjEuMTc5NCA4Ljc0OTI2IDYxLjA1MDQgOC43OTk1OCA2MC44OTkzIDguNzk5NThINTguNjcxOUM1OC41MjA5IDguNzk5NTggNTguMzkwMSA4Ljc0OTI2IDU4LjI3OTUgOC42NDg2MkM1OC4xNzI3IDguNTQ3OTggNTguMTE5MiA4LjQyNjUxIDU4LjExOTIgOC4yODQyM1Y2Ljk4ODAzQzU4LjExOTIgNi45MTg2MiA1OC4wOTkgNi44NTQ0MiA1OC4wNTg0IDYuNzk1NDJDNTguMDE3OSA2LjczMjk1IDU3Ljk0NDIgNi43MDE3MiA1Ny44MzczIDYuNzAxNzJINTYuMDYzMkM1NS45OTMyIDYuNzAxNzIgNTUuOTQ1MyA2LjcyOTQ4IDU1LjkxOTUgNi43ODUwMUM1NS44OTc0IDYuODM3MDYgNTUuOTA4NCA2Ljg4NzM5IDU1Ljk1MjYgNi45MzU5N0w1Ny40MDA3IDguNDU2MDFDNTcuNTAzOSA4LjU2MzYgNTcuNTU1NSA4LjY4MTU5IDU3LjU1NTUgOC44MDk5OVYxMS40Mjg0QzU3LjU1NTUgMTEuNTcwNyA1Ny41MDAyIDExLjY5MzkgNTcuMzg5NyAxMS43OThDNTcuMjgyOCAxMS44OTg3IDU3LjE1MzggMTEuOTQ5IDU3LjAwMjggMTEuOTQ5Wk01My4wMDEyIDE0QzUyLjU4NDggMTQgNTIuMTk0MiAxMy45MjcxIDUxLjgyOTUgMTMuNzgxNEM1MS40Njg0IDEzLjYzNTYgNTEuMTQ5NiAxMy40MzI2IDUwLjg3MzMgMTMuMTcyM0M1MC42MDA2IDEyLjkxMiA1MC4zODY5IDEyLjYxMTggNTAuMjMyMSAxMi4yNzE3QzUwLjA3NzQgMTEuOTI4MiA1MCAxMS41NjAzIDUwIDExLjE2ODFDNTAgMTAuNzc2IDUwLjA3NzQgMTAuNDA5OSA1MC4yMzIxIDEwLjA2OThDNTAuMzg2OSA5LjcyNjE4IDUwLjYwMDYgOS40MjQyNiA1MC44NzMzIDkuMTYzOThDNTEuMTQ5NiA4LjkwMzcgNTEuNDY4NCA4LjcwMDY4IDUxLjgyOTUgOC41NTQ5MkM1Mi4xOTQyIDguNDA5MTYgNTIuNTg0OCA4LjMzNjI4IDUzLjAwMTIgOC4zMzYyOEM1My40MjEyIDguMzM2MjggNTMuODExOCA4LjQwOTE2IDU0LjE3MjkgOC41NTQ5MkM1NC41Mzc3IDguNzAwNjggNTQuODU2NCA4LjkwMzcgNTUuMTI5MSA5LjE2Mzk4QzU1LjQwNTQgOS40MjQyNiA1NS42MjEgOS43MjYxOCA1NS43NzU4IDEwLjA2OThDNTUuOTMwNSAxMC40MDk5IDU2LjAwNzkgMTAuNzc2IDU2LjAwNzkgMTEuMTY4MUM1Ni4wMDc5IDExLjU2MDMgNTUuOTMwNSAxMS45MjgyIDU1Ljc3NTggMTIuMjcxN0M1NS42MjEgMTIuNjExOCA1NS40MDU0IDEyLjkxMiA1NS4xMjkxIDEzLjE3MjNDNTQuODU2NCAxMy40MzI2IDU0LjUzNzcgMTMuNjM1NiA1NC4xNzI5IDEzLjc4MTRDNTMuODExOCAxMy45MjcxIDUzLjQyMTIgMTQgNTMuMDAxMiAxNFpNNTMuMDAxMiAxMy4yNjZDNTMuNDEwMiAxMy4yNjYgNTMuNzgyMyAxMy4xNzA2IDU0LjExNzYgMTIuOTc5N0M1NC40NTY2IDEyLjc5MjMgNTQuNzI1NiAxMi41NDA3IDU0LjkyNDYgMTIuMjI0OUM1NS4xMjczIDExLjkwNTYgNTUuMjI4NiAxMS41NTM0IDU1LjIyODYgMTEuMTY4MUM1NS4yMjg2IDEwLjc4MjkgNTUuMTI3MyAxMC40MzI0IDU0LjkyNDYgMTAuMTE2NkM1NC43MjU2IDkuNzk3MzMgNTQuNDU2NiA5LjU0Mzk5IDU0LjExNzYgOS4zNTY1OUM1My43ODIzIDkuMTY1NzEgNTMuNDEwMiA5LjA3MDI4IDUzLjAwMTIgOS4wNzAyOEM1Mi41OTU5IDkuMDcwMjggNTIuMjIzNyA5LjE2NTcxIDUxLjg4NDcgOS4zNTY1OUM1MS41NDk0IDkuNTQzOTkgNTEuMjgwNCA5Ljc5NzMzIDUxLjA3NzggMTAuMTE2NkM1MC44Nzg4IDEwLjQzMjQgNTAuNzc5MyAxMC43ODI5IDUwLjc3OTMgMTEuMTY4MUM1MC43NzkzIDExLjU1MzQgNTAuODc4OCAxMS45MDU2IDUxLjA3NzggMTIuMjI0OUM1MS4yODA0IDEyLjU0MDcgNTEuNTQ5NCAxMi43OTIzIDUxLjg4NDcgMTIuOTc5N0M1Mi4yMjM3IDEzLjE3MDYgNTIuNTk1OSAxMy4yNjYgNTMuMDAxMiAxMy4yNjZaTTYyLjQ4MDEgOS42MTE2NkM2Mi4zNjIyIDkuNTE0NDkgNjIuMzAxNCA5LjQxNTU4IDYyLjI5NzcgOS4zMTQ5NEM2Mi4yOTc3IDkuMjEwODMgNjIuMzMwOCA5LjEyNDA3IDYyLjM5NzIgOS4wNTQ2NkM2Mi40NjcyIDguOTg1MjUgNjIuNTUzOCA4Ljk0NTM0IDYyLjY1NjkgOC45MzQ5M0M2Mi43NjM4IDguOTIxMDUgNjIuODY4OCA4Ljk1NTc1IDYyLjk3MiA5LjAzOTA0QzYzLjI4ODkgOS4zMDI3OSA2My41Mzk0IDkuNjE2ODcgNjMuNzIzNiA5Ljk4MTI2QzYzLjkwNzkgMTAuMzQ1NyA2NCAxMC43NDEzIDY0IDExLjE2ODFDNjQgMTEuNTYwMyA2My45MjI2IDExLjkyODIgNjMuNzY3OSAxMi4yNzE3QzYzLjYxMzEgMTIuNjExOCA2My4zOTc2IDEyLjkxMiA2My4xMjEyIDEzLjE3MjNDNjIuODQ4NSAxMy40MzI2IDYyLjUyOTggMTMuNjM1NiA2Mi4xNjUgMTMuNzgxNEM2MS44MDM5IDEzLjkyNzEgNjEuNDE1MiAxNCA2MC45OTg4IDE0QzYwLjU4MjQgMTQgNjAuMTkxOSAxMy45MjcxIDU5LjgyNzEgMTMuNzgxNEM1OS40NjIzIDEzLjYzNTYgNTkuMTQxNyAxMy40MzI2IDU4Ljg2NTQgMTMuMTcyM0M1OC41OTI3IDEyLjkxMiA1OC4zNzkgMTIuNjExOCA1OC4yMjQyIDEyLjI3MTdDNTguMDY5NSAxMS45MjgyIDU3Ljk5MjEgMTEuNTYwMyA1Ny45OTIxIDExLjE2ODFDNTcuOTkyMSAxMC45NjM0IDU4LjAxNDIgMTAuNzY1NiA1OC4wNTg0IDEwLjU3NDdDNTguMTA2MyAxMC4zODA0IDU4LjE3MjcgMTAuMTkzIDU4LjI1NzQgMTAuMDEyNUM1OC4zMDkgOS45MDE0NCA1OC4zODA4IDkuODMwMyA1OC40NzMgOS43OTkwNkM1OC41Njg4IDkuNzY0MzYgNTguNjYyNyA5Ljc2NDM2IDU4Ljc1NDggOS43OTkwNkM1OC44NTA2IDkuODMwMyA1OC45MjI1IDkuODkyNzYgNTguOTcwNCA5Ljk4NjQ3QzU5LjAxODMgMTAuMDgwMiA1OS4wMTA5IDEwLjE5ODIgNTguOTQ4MyAxMC4zNDA0QzU4LjgzMDQgMTAuNjAwNyA1OC43NzE0IDEwLjg3NjYgNTguNzcxNCAxMS4xNjgxQzU4Ljc3MTQgMTEuNTUzNCA1OC44NzA5IDExLjkwNTYgNTkuMDY5OSAxMi4yMjQ5QzU5LjI3MjUgMTIuNTQwNyA1OS41NDE1IDEyLjc5MjMgNTkuODc2OCAxMi45Nzk3QzYwLjIxNTggMTMuMTcwNiA2MC41ODk4IDEzLjI2NiA2MC45OTg4IDEzLjI2NkM2MS40MDc4IDEzLjI2NiA2MS43OCAxMy4xNzA2IDYyLjExNTMgMTIuOTc5N0M2Mi40NTA2IDEyLjc5MjMgNjIuNzE3NyAxMi41NDA3IDYyLjkxNjcgMTIuMjI0OUM2My4xMTk0IDExLjkwNTYgNjMuMjIwNyAxMS41NTM0IDYzLjIyMDcgMTEuMTY4MUM2My4yMjA3IDEwLjg1OTMgNjMuMTUyNSAxMC41NzEyIDYzLjAxNjIgMTAuMzA0QzYyLjg4MzUgMTAuMDMzMyA2Mi43MDQ4IDkuODAyNTMgNjIuNDgwMSA5LjYxMTY2Wk02MC45OTg4IDYuMjc0ODZDNjAuNzc0IDYuMjc0ODYgNjAuNTY5NSA2LjIyNDU0IDYwLjM4NTMgNi4xMjM4OUM2MC4yMDExIDYuMDE5NzggNjAuMDUzNyA1Ljg4MjcgNTkuOTQzMiA1LjcxMjY1QzU5LjgzNjMgNS41MzkxMyA1OS43ODI5IDUuMzQ2NTIgNTkuNzgyOSA1LjEzNDgzQzU5Ljc4MjkgNC45MjY2IDU5LjgzNjMgNC43Mzc0NiA1OS45NDMyIDQuNTY3NDFDNjAuMDUzNyA0LjM5Mzg5IDYwLjIwMTEgNC4yNTY4MSA2MC4zODUzIDQuMTU2MTdDNjAuNTY5NSA0LjA1MjA2IDYwLjc3NCA0IDYwLjk5ODggNEM2MS4yMTk5IDQgNjEuNDIwNyA0LjA1MjA2IDYxLjYwMTMgNC4xNTYxN0M2MS43ODE4IDQuMjU2ODEgNjEuOTI1NSA0LjM5Mzg5IDYyLjAzMjQgNC41Njc0MUM2Mi4xNDI5IDQuNzM3NDYgNjIuMTk4MiA0LjkyNjYgNjIuMTk4MiA1LjEzNDgzQzYyLjE5ODIgNS4zNDY1MiA2Mi4xNDI5IDUuNTM5MTMgNjIuMDMyNCA1LjcxMjY1QzYxLjkyNTUgNS44ODI3IDYxLjc4MTggNi4wMTk3OCA2MS42MDEzIDYuMTIzODlDNjEuNDIwNyA2LjIyNDU0IDYxLjIxOTkgNi4yNzQ4NiA2MC45OTg4IDYuMjc0ODZaIn0pfSl9ZnVuY3Rpb24gYzIoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI3MCA1IDE4IDkiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTg1LjU3MiAxMi4xMDM4Qzg2LjA2IDEyLjEwMzggODYuNDIwNyAxMS45ODkyIDg2LjY1NDIgMTEuNzYwMUM4Ni44ODQ3IDExLjUyODEgODcgMTEuMTY0MSA4NyAxMC42NjgxVjEwLjExMTJDODcgOS43NjkwMSA4Ni45MjA3IDkuNDYzMDIgODYuNzYyIDkuMTkzMjlDODYuNjAzMyA4LjkyMDY1IDg2LjM3NTggOC42OTczMyA4Ni4wNzk0IDguNTIzMzFDODUuNzgwMSA4LjM0OTI5IDg1LjQyMjMgOC4yMzc2MiA4NS4wMDYyIDguMTg4MzJMODMuMDE2OCA3Ljk1MzM5TDgxLjE5ODEgNi44NDgzNUM4MC45MjI3IDYuNjgwMTMgODAuNjYwOCA2LjU0MjM3IDgwLjQxMjMgNi40MzUwNUM4MC4xNjA4IDYuMzI0ODQgNzkuODk3NCA2LjIzNzgzIDc5LjYyMTkgNi4xNzQwMkM3OS4zNDY1IDYuMTEwMjEgNzkuMDM4MiA2LjA2NTI2IDc4LjY5NjkgNi4wMzkxNUM3OC4zNTI2IDYuMDEzMDUgNzcuOTUxNCA2IDc3LjQ5MzQgNkg3Ni44MTA4Qzc2LjM4ODcgNiA3NS45OTUgNi4wNDkzMSA3NS42Mjk4IDYuMTQ3OTJDNzUuMjYxNiA2LjI0MzYzIDc0LjkxODggNi4zNzEyNSA3NC42MDE1IDYuNTMwNzZDNzQuMjgxMSA2LjY5MDI4IDczLjk4NjIgNi44NjU3NiA3My43MTY4IDcuMDU3MThDNzMuNDQ0NCA3LjI0ODYgNzMuMTk1OSA3LjQzNzEyIDcyLjk3MTQgNy42MjI3NUw3Mi4yNTc0IDcuODUzMzNDNzEuODMyMyA3Ljk4Njc0IDcxLjUxNjQgOC4xODM5NyA3MS4zMDk5IDguNDQ1QzcxLjEwMzMgOC43MDMxMyA3MSA5LjAzMzc3IDcxIDkuNDM2OTJWMTAuNjQyQzcxIDExLjE0NjcgNzEuMTE1MyAxMS41MTY1IDcxLjM0NTggMTEuNzUxNEM3MS41NzYzIDExLjk4NjMgNzEuOTM3IDEyLjEwMzggNzIuNDI4IDEyLjEwMzhINzIuNzE1NEM3Mi43MDA0IDEyLjAzNzEgNzIuNjg4NSAxMS45NzA0IDcyLjY3OTUgMTEuOTAzN0M3Mi42NzA1IDExLjgzNDEgNzIuNjY2IDExLjc2NDUgNzIuNjY2IDExLjY5NDhDNzIuNjY2IDExLjM1NTUgNzIuNzQ5OCAxMS4wNDk1IDcyLjkxNzUgMTAuNzc2OUM3My4wODUxIDEwLjUwNDIgNzMuMzExMiAxMC4yODgyIDczLjU5NTYgMTAuMTI4N0M3My44NzcgOS45NjYyMyA3NC4xOTI4IDkuODg1MDIgNzQuNTQzMSA5Ljg4NTAyQzc0Ljg5MDQgOS44ODUwMiA3NS4yMDYyIDkuOTY2MjMgNzUuNDkwNiAxMC4xMjg3Qzc1Ljc3MiAxMC4yODgyIDc1Ljk5NjUgMTAuNTA0MiA3Ni4xNjQyIDEwLjc3NjlDNzYuMzMxOCAxMS4wNDk1IDc2LjQxNTcgMTEuMzU1NSA3Ni40MTU3IDExLjY5NDhDNzYuNDE1NyAxMS43NjQ1IDc2LjQxMTIgMTEuODM0MSA3Ni40MDIyIDExLjkwMzdDNzYuMzkzMiAxMS45NzA0IDc2LjM4MjcgMTIuMDM3MSA3Ni4zNzA4IDEyLjEwMzhIODEuNjM4MkM4MS42MjAzIDEyLjAzNzEgODEuNjA4MyAxMS45NzA0IDgxLjYwMjMgMTEuOTAzN0M4MS41OTMzIDExLjgzNDEgODEuNTg4OCAxMS43NjQ1IDgxLjU4ODggMTEuNjk0OEM4MS41ODg4IDExLjM1NTUgODEuNjcyNyAxMS4wNDk1IDgxLjg0MDMgMTAuNzc2OUM4Mi4wMDUgMTAuNTA0MiA4Mi4yMjk1IDEwLjI4ODIgODIuNTEzOSAxMC4xMjg3QzgyLjc5NTMgOS45NjYyMyA4My4xMTExIDkuODg1MDIgODMuNDYxNCA5Ljg4NTAyQzgzLjgxMTcgOS44ODUwMiA4NC4xMjkgOS45NjYyMyA4NC40MTM0IDEwLjEyODdDODQuNjk0OCAxMC4yODgyIDg0LjkxOTQgMTAuNTA0MiA4NS4wODcgMTAuNzc2OUM4NS4yNTE3IDExLjA0OTUgODUuMzM0IDExLjM1NTUgODUuMzM0IDExLjY5NDhDODUuMzM0IDExLjc2NDUgODUuMzMxIDExLjgzNDEgODUuMzI1IDExLjkwMzdDODUuMzE2IDExLjk3MDQgODUuMzA0MSAxMi4wMzcxIDg1LjI4OTEgMTIuMTAzOEg4NS41NzJaTTgzLjQ2MTQgMTNDODMuNzEyOSAxMyA4My45NDA0IDEyLjk0MiA4NC4xNDQgMTIuODI2Qzg0LjM0NzYgMTIuNzEgODQuNTA5MiAxMi41NTMzIDg0LjYyOSAxMi4zNTYxQzg0Ljc0ODcgMTIuMTU4OSA4NC44MDg2IDExLjkzODUgODQuODA4NiAxMS42OTQ4Qzg0LjgwODYgMTEuNDUxMiA4NC43NDg3IDExLjIzMDggODQuNjI5IDExLjAzMzZDODQuNTA5MiAxMC44MzYzIDg0LjM0NzYgMTAuNjc5NyA4NC4xNDQgMTAuNTYzN0M4My45NDA0IDEwLjQ0NzcgODMuNzEyOSAxMC4zODk3IDgzLjQ2MTQgMTAuMzg5N0M4My4yMDY5IDEwLjM4OTcgODIuOTc3OSAxMC40NDc3IDgyLjc3NDMgMTAuNTYzN0M4Mi41NzA4IDEwLjY3OTcgODIuNDA5MSAxMC44MzYzIDgyLjI4OTQgMTEuMDMzNkM4Mi4xNjk2IDExLjIzMDggODIuMTA5NyAxMS40NTEyIDgyLjEwOTcgMTEuNjk0OEM4Mi4xMDk3IDExLjkzODUgODIuMTY5NiAxMi4xNTg5IDgyLjI4OTQgMTIuMzU2MUM4Mi40MDkxIDEyLjU1MzMgODIuNTcwOCAxMi43MSA4Mi43NzQzIDEyLjgyNkM4Mi45Nzc5IDEyLjk0MiA4My4yMDY5IDEzIDgzLjQ2MTQgMTNaTTc0LjU0MzEgMTNDNzQuNzk0NiAxMyA3NS4wMjIxIDEyLjk0MiA3NS4yMjU3IDEyLjgyNkM3NS40MjkyIDEyLjcxIDc1LjU5MDkgMTIuNTUzMyA3NS43MTA2IDEyLjM1NjFDNzUuODMwNCAxMi4xNTg5IDc1Ljg5MDMgMTEuOTM4NSA3NS44OTAzIDExLjY5NDhDNzUuODkwMyAxMS40NTEyIDc1LjgzMDQgMTEuMjMwOCA3NS43MTA2IDExLjAzMzZDNzUuNTkwOSAxMC44MzYzIDc1LjQyOTIgMTAuNjc5NyA3NS4yMjU3IDEwLjU2MzdDNzUuMDIyMSAxMC40NDc3IDc0Ljc5NDYgMTAuMzg5NyA3NC41NDMxIDEwLjM4OTdDNzQuMjg4NiAxMC4zODk3IDc0LjA1OTYgMTAuNDQ3NyA3My44NTYgMTAuNTYzN0M3My42NTI0IDEwLjY3OTcgNzMuNDkwOCAxMC44MzYzIDczLjM3MSAxMS4wMzM2QzczLjI1MTMgMTEuMjMwOCA3My4xOTE0IDExLjQ1MTIgNzMuMTkxNCAxMS42OTQ4QzczLjE5MTQgMTEuOTM4NSA3My4yNTEzIDEyLjE1ODkgNzMuMzcxIDEyLjM1NjFDNzMuNDkwOCAxMi41NTMzIDczLjY1MjQgMTIuNzEgNzMuODU2IDEyLjgyNkM3NC4wNTk2IDEyLjk0MiA3NC4yODg2IDEzIDc0LjU0MzEgMTNaIn0pfSl9ZnVuY3Rpb24gSjAoe3NpemU6Qz0xOCxzdHJva2VXaWR0aDokPTJ9KXtyZXR1cm4gSigic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDpDLGhlaWdodDpDLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiQsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4In0pLEooInBhdGgiLHtkOiJNMyAzdjVoNSJ9KV19KX12YXIgRDM9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiBxMihDKXtyZXR1cm4gQz8uZXJyb3JzPy5pbmNsdWRlcyhEMyk/PyExfWZ1bmN0aW9uIFkyKEMsJCl7aWYoQz09PSQpcmV0dXJuITA7aWYoQy5pZCE9PSQuaWR8fEMucGF0aCE9PSQucGF0aHx8Qy5sYWJlbCE9PSQubGFiZWx8fEMudmFsdWUhPT0kLnZhbHVlfHxDLnJvbGUhPT0kLnJvbGV8fEMudHlwZSE9PSQudHlwZXx8Qy5lbmFibGVkIT09JC5lbmFibGVkKXJldHVybiExO2xldCBLPUMuZnJhbWUsWD0kLmZyYW1lO3JldHVybiBLPT09WHx8Sy54PT09WC54JiZLLnk9PT1YLnkmJksud2lkdGg9PT1YLndpZHRoJiZLLmhlaWdodD09PVguaGVpZ2h0fWZ1bmN0aW9uIEcyKEMsJCl7bGV0IEs9Qy5sYWJlbHx8Qy5yb2xlfHxgZWxlbWVudCAkeyQrMX1gLFg9Qy5yb2xlfHxDLnR5cGU7cmV0dXJue2lkOkMuaWQscGF0aDpDLnBhdGgsbGFiZWw6Syx2YWx1ZTpDLnZhbHVlLHJvbGU6WCx0eXBlOkMudHlwZSxlbmFibGVkOkMuZW5hYmxlZCxmcmFtZTpDLmZyYW1lfX1mdW5jdGlvbiBVMyhDLCQpe2xldCBLPU1hdGgubWF4KDAsQy54KSxYPU1hdGgubWF4KDAsQy55KSxRPU1hdGgubWluKCQud2lkdGgsQy54K0Mud2lkdGgpLE49TWF0aC5taW4oJC5oZWlnaHQsQy55K0MuaGVpZ2h0KSxaPU1hdGgubWF4KDAsUS1LKSxxPU1hdGgubWF4KDAsTi1YKTtyZXR1cm4gWj4wJiZxPjA/e3g6Syx5Olgsd2lkdGg6WixoZWlnaHQ6cX06bnVsbH1mdW5jdGlvbiBRMChDKXtyZXR1cm4gQy5pZH1mdW5jdGlvbiBhMihDKXtyZXR1cm5gJHtDLnh9LCR7Qy55fSAke0Mud2lkdGh9eCR7Qy5oZWlnaHR9YH1mdW5jdGlvbiBGMyhDKXtyZXR1cm5bYEFYIGxhYmVsOiAke0MubGFiZWx8fCJVbmxhYmVsZWQifWAsQy5yb2xlP2Byb2xlOiAke0Mucm9sZX1gOiIiLEMudHlwZT9gdHlwZTogJHtDLnR5cGV9YDoiIixDLnZhbHVlP2B2YWx1ZTogJHtDLnZhbHVlfWA6IiIsQy5pZD9gaWQ6ICR7Qy5pZH1gOiIiLGBwYXRoOiAke0MucGF0aH1gLGBmcmFtZTogJHthMihDLmZyYW1lKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbigiOyAiKX1mdW5jdGlvbiB6MyhDKXtsZXRbJCxLXT1BKG51bGwpLFtYLFFdPUEoIkFYIG9mZiIpO3JldHVybiBXKCgpPT57aWYoIUMpe0sobnVsbCksUSgiQVggb2ZmIik7cmV0dXJufUsobnVsbCksUSgiQVggd2FpdGluZyIpO2xldCBOPW5ldyBFdmVudFNvdXJjZShDKTtyZXR1cm4gTi5vbm1lc3NhZ2U9KFopPT57dHJ5e2xldCBxPUpTT04ucGFyc2UoWi5kYXRhKTtLKHEpLFEocTIocSk/IkFYIHVuYXZhaWxhYmxlIjpgJHtxLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtRKCJBWCBwYXJzZSBlcnJvciIpfX0sTi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PntRKCJBWCByZWNvbm5lY3RpbmciKX0pLCgpPT5OLmNsb3NlKCl9LFtDXSkse3NuYXBzaG90OiQsc3RhdHVzOlh9fXZhciBpMj1kMSh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxyMj1kMShudWxsKTtmdW5jdGlvbiB6MCgpe3JldHVybiBzMShpMil9ZnVuY3Rpb24gTDIoKXtsZXQgQz1zMShyMik7aWYoIUMpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuIEN9dmFyIEgzPWswKGZ1bmN0aW9uKHtlbGVtZW50OiQsaW5kZXg6SyxzY3JlZW46WCxoaWdobGlnaHRlZDpRLHNlbGVjdGVkOk4sb25IaWdobGlnaHQ6WixvblNlbGVjdDpxfSl7bGV0IEc9UTAoJCksWT1HMigkLEspLEI9VTMoJC5mcmFtZSxYKTtpZighQilyZXR1cm4gbnVsbDtsZXQgTD1GMyhZKTtyZXR1cm4gSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOkcsImRhdGEtYXgtaWQiOlkuaWQsImRhdGEtYXgtcGF0aCI6WS5wYXRoLCJkYXRhLWF4LWxhYmVsIjpZLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpZLnZhbHVlLCJkYXRhLWF4LXJvbGUiOlkucm9sZSwiZGF0YS1heC10eXBlIjpZLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKFkuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOmEyKFkuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoTiksImFyaWEtbGFiZWwiOiQubGFiZWx8fEwsdGl0bGU6TCxvbkNsaWNrOigpPT5xKEcpLG9uTW91c2VFbnRlcjooKT0+WihHKSxvbk1vdXNlTGVhdmU6KCk9PloobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtCLngvWC53aWR0aCoxMDB9JWAsdG9wOmAke0IueS9YLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7Qi53aWR0aC9YLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7Qi5oZWlnaHQvWC5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOk4/IiM2MGE1ZmEiOlE/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOk4/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6UT8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKEMsJCk9PkMuaW5kZXg9PT0kLmluZGV4JiZDLmhpZ2hsaWdodGVkPT09JC5oaWdobGlnaHRlZCYmQy5zZWxlY3RlZD09PSQuc2VsZWN0ZWQmJkMub25IaWdobGlnaHQ9PT0kLm9uSGlnaGxpZ2h0JiZDLm9uU2VsZWN0PT09JC5vblNlbGVjdCYmQy5zY3JlZW4ud2lkdGg9PT0kLnNjcmVlbi53aWR0aCYmQy5zY3JlZW4uaGVpZ2h0PT09JC5zY3JlZW4uaGVpZ2h0JiZZMihDLmVsZW1lbnQsJC5lbGVtZW50KSk7ZnVuY3Rpb24gQTMoKXtsZXR7c25hcHNob3Q6Q309ejAoKSx7aGlnaGxpZ2h0ZWRLZXk6JCxzZWxlY3RlZEtleTpLLHNldEhpZ2hsaWdodGVkS2V5Olgsc2V0U2VsZWN0ZWRLZXk6UX09TDIoKTtpZighQz8uc2NyZWVuLndpZHRofHwhQz8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOkMuZWxlbWVudHMubWFwKChOLFopPT57bGV0IHE9UTAoTik7cmV0dXJuIEooSDMse2VsZW1lbnQ6TixpbmRleDpaLHNjcmVlbjpDLnNjcmVlbixoaWdobGlnaHRlZDpxPT09JCxzZWxlY3RlZDpxPT09SyxvbkhpZ2hsaWdodDpYLG9uU2VsZWN0OlF9LHEpfSl9KX1mdW5jdGlvbiBPMyh7ZW5kcG9pbnQ6QyxjaGlsZHJlbjokfSl7bGV0e3NuYXBzaG90Okssc3RhdHVzOlh9PXozKEMpLFtRLE5dPUEobnVsbCksW1oscV09QShudWxsKTtXKCgpPT57aWYoIUMpTihudWxsKSxxKG51bGwpfSxbQ10pO2xldCBHPUgxKCgpPT4oe3NuYXBzaG90Okssc3RhdHVzOlh9KSxbSyxYXSksWT1IMSgoKT0+KHtoaWdobGlnaHRlZEtleTpRLHNlbGVjdGVkS2V5Olosc2V0SGlnaGxpZ2h0ZWRLZXk6TixzZXRTZWxlY3RlZEtleTpxfSksW1EsWl0pO3JldHVybiBKKGkyLHt2YWx1ZTpHLGNoaWxkcmVuOkoocjIse3ZhbHVlOlksY2hpbGRyZW46JH0pfSl9ZnVuY3Rpb24gVDMoe292ZXJsYXlFbmFibGVkOkMsc3RyZWFtaW5nOiQsb25Ub2dnbGVPdmVybGF5Okt9KXtsZXR7c3RhdHVzOlh9PXowKCksW1EsTl09QSghMSksWj1DJiYkO3JldHVybiBKKE8xLkJ1dHRvbix7ImFyaWEtbGFiZWwiOkM/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOkMsdGl0bGU6WCxvbkNsaWNrOkssb25Nb3VzZUVudGVyOigpPT5OKCEwKSxvbk1vdXNlTGVhdmU6KCk9Pk4oITEpLHN0eWxlOlo/e2JhY2tncm91bmQ6UT8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOiIxOSIsaGVpZ2h0OiIxOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6In0pLEooInBhdGgiLHtkOiJNMjEgMTFWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYifSldfSl9KX1mdW5jdGlvbiBNMyhDKXt0cnl7bGV0ICQ9SlNPTi5wYXJzZShDKSxLPVtdO2ZvcihsZXRbWCxRXW9mIE9iamVjdC5lbnRyaWVzKCQuZGV2aWNlcz8/e30pKXtsZXQgTj1YLnJlcGxhY2UoL15jb21cLmFwcGxlXC5Db3JlU2ltdWxhdG9yXC5TaW1SdW50aW1lXC4vLCIiKS5yZXBsYWNlKC8tL2csIi4iKTtmb3IobGV0IFogb2YgUSlpZihaLmlzQXZhaWxhYmxlKUsucHVzaCh7dWRpZDpaLnVkaWQsbmFtZTpaLm5hbWUsc3RhdGU6Wi5zdGF0ZSxydW50aW1lOk59KX1yZXR1cm4gS31jYXRjaHtyZXR1cm5bXX19ZnVuY3Rpb24gSDAoQyl7bGV0ICQ9Qy50b0xvd2VyQ2FzZSgpO2lmKCQuaW5jbHVkZXMoImlwaG9uZSIpKXJldHVybiAwO2lmKCQuaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4gMTtpZigkLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiAyO2lmKCQuaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiAzO3JldHVybiA0fWZ1bmN0aW9uIEEwKEMpe2xldCAkPUMudG9Mb3dlckNhc2UoKTtpZigkLnN0YXJ0c1dpdGgoImlvcyIpKXJldHVybiAwO2lmKCQuc3RhcnRzV2l0aCgiaXBhZG9zIikpcmV0dXJuIDE7aWYoJC5zdGFydHNXaXRoKCJ3YXRjaG9zIikpcmV0dXJuIDI7aWYoJC5zdGFydHNXaXRoKCJ2aXNpb25vcyIpfHwkLnN0YXJ0c1dpdGgoInhyb3MiKSlyZXR1cm4gMztyZXR1cm4gNH1mdW5jdGlvbiB4MShDKXtsZXQgSz13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIEs9PT0iLyI/YC8ke0N9YDpgJHtLfS8ke0N9YH1mdW5jdGlvbiB3Myh7ZGV2aWNlczpDLGxvYWRpbmc6JCxlcnJvcjpLLG9uUmVmcmVzaDpYfSl7bGV0W1EsTl09QShudWxsKSxbWixxXT1BKG51bGwpLEc9UChhc3luYyhMKT0+e2lmKFEpcmV0dXJuO04oTC51ZGlkKSxxKG51bGwpO3RyeXtsZXQgVT1gJHt4MSgiYXBpIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChMLnVkaWQpfWAsRj0oYXN5bmMoKT0+e2xldCB3PURhdGUubm93KCkrOTAwMDA7d2hpbGUoRGF0ZS5ub3coKTx3KXt0cnl7bGV0IEU9YXdhaXQgZmV0Y2goVSx7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKEUub2smJmF3YWl0IEUuanNvbigpKXtsZXQgeT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtyZXR1cm4geS5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLEwudWRpZCksd2luZG93LmxvY2F0aW9uLmFzc2lnbih5LnRvU3RyaW5nKCkpLCEwfX1jYXRjaHt9YXdhaXQgbmV3IFByb21pc2UoKEUpPT5zZXRUaW1lb3V0KEUsNDAwKSl9cmV0dXJuITF9KSgpLFQ9eDEoImdyaWQvYXBpL3N0YXJ0IiksXz1mZXRjaChULHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpMLnVkaWR9KX0pLnRoZW4oYXN5bmModyk9PntsZXQgRT1hd2FpdCB3Lmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIXcub2t8fCFFLm9rKXRocm93IEVycm9yKEUuZXJyb3I/P2BIVFRQICR7dy5zdGF0dXN9YCl9KTtpZihhd2FpdCBQcm9taXNlLnJhY2UoW0YsXy50aGVuKCgpPT4ic3RhcnRlZCIpXSk9PT0hMClyZXR1cm47aWYoYXdhaXQgRilyZXR1cm47dGhyb3cgRXJyb3IoInNlcnZlLXNpbSBzdGFydGVkIGJ1dCBubyBzdHJlYW0gc3RhdGUgYXBwZWFyZWQiKX1jYXRjaChVKXtxKFUgaW5zdGFuY2VvZiBFcnJvcj9VLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBzdHJlYW0iKSxOKG51bGwpfX0sW1FdKSxZPW5ldyBNYXA7Zm9yKGxldCBMIG9mIEMpe2xldCBVPVkuZ2V0KEwucnVudGltZSk7aWYoIVUpVT1bXSxZLnNldChMLnJ1bnRpbWUsVSk7VS5wdXNoKEwpfWZvcihsZXQgTCBvZiBZLnZhbHVlcygpKUwuc29ydCgoVSxGKT0+e2xldCBUPVUuc3RhdGU9PT0iQm9vdGVkIj8wOjEsXz1GLnN0YXRlPT09IkJvb3RlZCI/MDoxO2lmKFQhPT1fKXJldHVybiBULV87cmV0dXJuIEgwKFUubmFtZSktSDAoRi5uYW1lKXx8VS5uYW1lLmxvY2FsZUNvbXBhcmUoRi5uYW1lKX0pO2xldCBCPVsuLi5ZLmVudHJpZXMoKV0uc29ydCgoW0xdLFtVXSk9PkEwKEwpLUEwKFUpfHxMLmxvY2FsZUNvbXBhcmUoVSkpO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcC02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLGNoaWxkcmVuOkooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltKKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzZXJ2ZS1zaW0gc3RyZWFtIHJ1bm5pbmcifSksSigicCIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSB0ZXh0LVsxNHB4XSBtYXgtdy0xMjAiLGNoaWxkcmVuOlsiUGljayBhIHNpbXVsYXRvciB0byBib290LCBvciBzdGFydCBvbmUgeW91cnNlbGYgd2l0aCIsIiAiLEooImNvZGUiLHtjbGFzc05hbWU6ImJnLVsjMjIyXSBweC0xLjUgcHktMC41IHJvdW5kZWQgdGV4dC1bMTNweF0iLGNoaWxkcmVuOiJidW54IHNlcnZlLXNpbSAtLWRldGFjaCJ9KSwiLiJdfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJ3LWZ1bGwgbWF4LXctOTAgbXQtMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBmb250LW1vbm8gdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCB0ZXh0LWxlZnQgbWF4LWgtWzcwdmhdIG92ZXJmbG93LXktYXV0byBtaW4taC0wIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMi41IHB5LTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzY1IixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToiZm9udC1zZW1pYm9sZCIsY2hpbGRyZW46IlNpbXVsYXRvcnMifSksSigiYnV0dG9uIix7b25DbGljazpYLGRpc2FibGVkOiQsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LWFjY2VudCB0ZXh0LVsxMXB4XSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOiQ/Ii4uLiI6IlJlZnJlc2gifSldfSksSyYmSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHktMS41IHRleHQtZGFuZ2VyIHRleHQtWzExcHhdIixjaGlsZHJlbjpLfSksWiYmSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHktMS41IHRleHQtZGFuZ2VyIHRleHQtWzExcHhdIixjaGlsZHJlbjpafSksISQmJiFLJiZDLmxlbmd0aD09PTAmJkooImRpdiIse2NsYXNzTmFtZToicC0zIHRleHQtd2hpdGUvNDAgdGV4dC1bMTFweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOiJObyBhdmFpbGFibGUgc2ltdWxhdG9ycyBmb3VuZCJ9KSxCLm1hcCgoW0wsVV0pPT5KKCJkaXYiLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHQtMS41IHBiLTAuNSB0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpMfSksVS5tYXAoKEYpPT57bGV0IFQ9UT09PUYudWRpZCxfPVEhPT1udWxsJiYhVCxrPUYuc3RhdGU9PT0iQm9vdGVkIjtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgcHktMS41IHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtfPyJjdXJzb3ItZGVmYXVsdCBvcGFjaXR5LTUwIjoiY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvOCJ9YCxvbkNsaWNrOigpPT57aWYoIV8pRyhGKX0sY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6az8iIzRhZGU4MCI6IiM0NDQifX0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSB0ZXh0LWxlZnQiLGNoaWxkcmVuOkYubmFtZX0pLEooInNwYW4iLHtjbGFzc05hbWU6YHRleHQtWzEwcHhdICR7VD8idGV4dC1hY2NlbnQiOiJ0ZXh0LXdoaXRlLzU1In1gLGNoaWxkcmVuOlQ/az8iU3RhcnRpbmcuLi4iOiJCb290aW5nLi4uIjprPyJTdGFydCBzdHJlYW0iOiJCb290ICYgc3RyZWFtIn0pXX0sRi51ZGlkKX0pXX0sTCkpXX0pXX0pfSl9ZnVuY3Rpb24gYjMoe2RldmljZXM6QyxzZWxlY3RlZFVkaWQ6JCxsb2FkaW5nOkssZXJyb3I6WCxzdG9wcGluZ1VkaWRzOlEsb25SZWZyZXNoOk4sb25TZWxlY3Q6WixvblN0b3A6cSx0cmlnZ2VyOkd9KXtsZXRbWSxCXT1BKCExKSxMPXYobnVsbCk7VygoKT0+e2lmKCFZKXJldHVybjtsZXQgXz0oayk9PntpZighTC5jdXJyZW50Py5jb250YWlucyhrLnRhcmdldCkpQighMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyl9LFtZXSk7bGV0IFU9bmV3IE1hcDtmb3IobGV0IF8gb2YgQyl7aWYoXy51ZGlkPT09JCljb250aW51ZTtsZXQgaz1VLmdldChfLnJ1bnRpbWUpO2lmKCFrKWs9W10sVS5zZXQoXy5ydW50aW1lLGspO2sucHVzaChfKX1mb3IobGV0IF8gb2YgVS52YWx1ZXMoKSlfLnNvcnQoKGsseik9PkgwKGsubmFtZSktSDAoei5uYW1lKXx8ay5uYW1lLmxvY2FsZUNvbXBhcmUoei5uYW1lKSk7bGV0IEY9Wy4uLlUuZW50cmllcygpXS5zb3J0KChbX10sW2tdKT0+QTAoXyktQTAoayl8fF8ubG9jYWxlQ29tcGFyZShrKSksVD1DLmZpbmQoKF8pPT5fLnVkaWQ9PT0kKT8/bnVsbDtyZXR1cm4gSigiZGl2Iix7cmVmOkwsY2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W0ooImRpdiIse29uQ2xpY2s6KCk9PntpZighWSlOKCk7QigoXyk9PiFfKX0sY2hpbGRyZW46R30pLFkmJkooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIG1pbi13LTY1IG1heC1oLTkwIG92ZXJmbG93LXktYXV0byBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBmb250LW1vbm8gdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCB6LTIwIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMi41IHB5LTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzY1IixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToiZm9udC1zZW1pYm9sZCIsY2hpbGRyZW46IlNpbXVsYXRvcnMifSksSigiYnV0dG9uIix7b25DbGljazooXyk9PntfLnN0b3BQcm9wYWdhdGlvbigpLE4oKX0sZGlzYWJsZWQ6SyxjbGFzc05hbWU6ImJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtYWNjZW50IHRleHQtWzExcHhdIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46Sz8iLi4uIjoiUmVmcmVzaCJ9KV19KSxYJiZKKCJkaXYiLHtjbGFzc05hbWU6InB4LTIuNSBweS0xLjUgdGV4dC1kYW5nZXIgdGV4dC1bMTFweF0iLGNoaWxkcmVuOlh9KSxUJiZKKFExLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgcHktMS41IHJvdW5kZWQtbWQgdGV4dC1hY2NlbnQiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAiLHN0eWxlOntiYWNrZ3JvdW5kOlQuc3RhdGU9PT0iQm9vdGVkIj8iIzRhZGU4MCI6IiM0NDQifX0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSIsY2hpbGRyZW46VC5uYW1lfSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KV19KSxDLmxlbmd0aD09PTAmJiFLJiYhWCYmSigiZGl2Iix7Y2xhc3NOYW1lOiJwLTMgdGV4dC13aGl0ZS80MCB0ZXh0LVsxMXB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Ik5vIGF2YWlsYWJsZSBzaW11bGF0b3JzIGZvdW5kIn0pLEYubWFwKChbXyxrXSk9PkooImRpdiIse2NoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InB4LTIuNSBwdC0xLjUgcGItMC41IHRleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOl99KSxrLm1hcCgoeik9PntsZXQgdz1RLmhhcyh6LnVkaWQpLEU9ei5zdGF0ZT09PSJCb290ZWQiO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBweS0xLjUgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy13aGl0ZS84IixvbkNsaWNrOigpPT57Wih6KSxCKCExKX0sY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6RT8iIzRhZGU4MCI6IiM0NDQifX0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSIsY2hpbGRyZW46ei5uYW1lfSksRSYmSigic3BhbiIse3JvbGU6ImJ1dHRvbiIsb25DbGljazooeSk9PntpZih5LnN0b3BQcm9wYWdhdGlvbigpLCF3KXEoei51ZGlkKX0sY2xhc3NOYW1lOmB0ZXh0LVsxMHB4XSBweS1weCBweC0xLjUgcm91bmRlZCAke3c/InRleHQtd2hpdGUvNTUgYmctdHJhbnNwYXJlbnQgY3Vyc29yLWRlZmF1bHQiOiJ0ZXh0LWRhbmdlciBiZy1kYW5nZXIvMTAgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46dz8iU3RvcHBpbmcuLi4iOiJTdG9wIn0pXX0sei51ZGlkKX0pXX0sXykpXX0pXX0pfWZ1bmN0aW9uIE8wKHtvcGVuOkMsd2lkdGg6JCxjaGlsZHJlbjpLLHN0eWxlOlh9KXtyZXR1cm4gSigiYXNpZGUiLHtjbGFzc05hbWU6ImZpeGVkIHRvcC0zIHJpZ2h0LTMgYm90dG9tLTMgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLVsxNHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIGJnLXBhbmVsLWJnIHRleHQtd2hpdGUvOTAgc2hhZG93LVswXzEycHhfNDBweF9yZ2JhKDAsMCwwLDAuNTUpXSBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wiLHN0eWxlOnt3aWR0aDokLHRyYW5zZm9ybTpDPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6Qz8xOjAscG9pbnRlckV2ZW50czpDPyJhdXRvIjoibm9uZSIsLi4uWH0sImFyaWEtaGlkZGVuIjohQyxjaGlsZHJlbjpLfSl9ZnVuY3Rpb24gVDAoe2NoaWxkcmVuOkMsc3R5bGU6JH0pe3JldHVybiBKKCJoZWFkZXIiLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMi41IHB4LTIuNSBweS0xLjUgcGwtMyIsc3R5bGU6JCxjaGlsZHJlbjpDfSl9ZnVuY3Rpb24gVjIoe2NoaWxkcmVuOkN9KXtyZXR1cm4gSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1tZWRpdW0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46Q30pfWZ1bmN0aW9uIE0wKHtvbkNsaWNrOkMsYXJpYUxhYmVsOiQ9IkNsb3NlIHBhbmVsIix0aXRsZTpLLGljb25TaXplOlg9MTZ9KXtyZXR1cm4gSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkMsY2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIGJnLXRyYW5zcGFyZW50IHAtMSB0ZXh0LXdoaXRlLzY1IiwiYXJpYS1sYWJlbCI6JCx0aXRsZTpLLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOlgsaGVpZ2h0Olgsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSxKKCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KV19KX0pfWZ1bmN0aW9uIFAzKEMsJCxLKXtsZXRbWCxRXT1BKG51bGwpLFtOLFpdPUEoMCk7VygoKT0+e2lmKCEkfHwhQylyZXR1cm47bGV0IEc9ITEsWT1hc3luYygpPT57dHJ5e2xldCBVPWF3YWl0KGF3YWl0IGZldGNoKEMse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFHKVEoVS5kZXZpY2VzPz9bXSl9Y2F0Y2h7aWYoIUcpUShbXSl9fTtZKCk7bGV0IEI9c2V0SW50ZXJ2YWwoWSxLPzc1MDozMDAwKTtyZXR1cm4oKT0+e0c9ITAsY2xlYXJJbnRlcnZhbChCKX19LFtDLCQsTixLXSk7bGV0IHE9UCgoKT0+WigoRyk9PkcrMSksW10pO3JldHVybntkZXZpY2VzOlgscmVmcmVzaDpxfX1mdW5jdGlvbiBXMyhDLCQpe2xldFtLLFhdPUEobnVsbCk7cmV0dXJuIFcoKCk9PntpZighJHx8IUMpcmV0dXJuO2xldCBRPSExLE49YXN5bmMoKT0+e3RyeXtsZXQgRz1hd2FpdChhd2FpdCBmZXRjaChDLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighUSlYKEcpfWNhdGNoe319O04oKTtsZXQgWj1zZXRJbnRlcnZhbChOLDUwMDApO3JldHVybigpPT57UT0hMCxjbGVhckludGVydmFsKFopfX0sW0MsJF0pLEt9ZnVuY3Rpb24geTMoQyl7aWYoIU51bWJlci5pc0Zpbml0ZShDKXx8Qzw9MClyZXR1cm4iMCBCIjtsZXQgJD1DLzEwNzM3NDE4MjQ7aWYoJD49MSlyZXR1cm5gJHskLnRvRml4ZWQoJD49MTA/MDoxKX0gR0JgO3JldHVybmAkeyhDLzEwNDg1NzYpLnRvRml4ZWQoMCl9IE1CYH1mdW5jdGlvbiBSMChDLCQpe2xldCBLPUMuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iO3JldHVybmAke0N9JHtLfWRldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gfWZ1bmN0aW9uIEUzKHtyZXBvcnQ6Q30pe2lmKCFDfHxDLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOiQsYXZhaWxhYmxlQnl0ZXM6Syx0b3RhbEJ5dGVzOlgscnVubmluZ1NpbXVsYXRvcnM6UX09QyxOPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLUsvWCkpLFo9USskLHE9JD09PTA/IiNlNjYiOiQ8PTE/IiNlOWExM2IiOiIjM2IzIixHPU4+MC45PyIjZTY2IjpOPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6cX19KSxKKCJzcGFuIix7Y2hpbGRyZW46W1EsIi8iLFosIiBzaW1zIl19KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiwrcifSksSigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W3kzKEspLCIgZnJlZSJdfSksSigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46Sigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhOKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOkd9fSl9KV19KX1mdW5jdGlvbiBJMyh7ZGV2aWNlOkMsYWN0aXZlOiQscHJldmlld0VuZHBvaW50Okssc3RhcnRpbmc6WCxzaHV0dGluZ0Rvd246USxlcnJvcjpOLG9uU3RhcnQ6WixvblNodXRkb3duOnF9KXtsZXQgRz1DLmhlbHBlcixZPUMuc3RhdGU9PT0iQm9vdGVkIixCPUc/IuKXjyBsaXZlIjpYP1k/InN0YXJ0aW5nIGhlbHBlcuKApiI6ImJvb3RpbmcgJiBzdGFydGluZ+KApiI6UT8ic2h1dHRpbmcgZG93buKApiI6WT8iYm9vdGVkIChubyBzdHJlYW0pIjpDLnN0YXRlLnRvTG93ZXJDYXNlKCksTD1HPyIjM2IzIjoiIzg4OCIsVT0kPyJyZ2JhKDEwLDEzMiwyNTUsMC41NSkiOiJ0cmFuc3BhcmVudCIsRj1HPyJhIjoiZGl2IixUPUc/e2hyZWY6UjAoSyxDLmRldmljZSl9Ont9O3JldHVybiBKKEYsey4uLlQsY2xhc3NOYW1lOiJncmlkLXRpbGUgcmVsYXRpdmUgZmxleCBmbGV4LWNvbCBiZy1bIzExMV0gcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIG5vLXVuZGVybGluZSB0ZXh0LWluaGVyaXQgYm9yZGVyIGJvcmRlci1bIzJhMmEyYV0gW3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yXzEyMG1zXSIsc3R5bGU6e291dGxpbmU6YDFweCBzb2xpZCAke1V9YH0sY2hpbGRyZW46WyhHfHxZKSYmSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpRPyJTaHV0dGluZyBkb3du4oCmIjoiU2h1dGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXRkb3duIHNpbXVsYXRvciIsb25DbGljazooXyk9PntfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxxKCl9LGRpc2FibGVkOlEsY2xhc3NOYW1lOiJncmlkLXNodXRkb3duLWJ0biBhYnNvbHV0ZSB0b3AtMS41IHJpZ2h0LTEuNSB3LVsyMnB4XSBoLVsyMnB4XSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzQ0NF0gYmctW3JnYmEoMjAsMjAsMjAsMC44NSldIHRleHQtd2hpdGUvODAgdGV4dC1bMTNweF0gbGVhZGluZy1ub25lIGN1cnNvci1wb2ludGVyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMCB6LVsyXSBwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjoiw5cifSksRz9KKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiBiZy1ibGFjayBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpKKCJpbWciLHtzcmM6Ry5zdHJlYW1VcmwsYWx0OkMubmFtZSxkcmFnZ2FibGU6ITEsY2xhc3NOYW1lOiJtYXgtdy1mdWxsIG1heC1oLWZ1bGwgb2JqZWN0LWNvbnRhaW4ifSl9KTpKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMyBmbGV4LWNvbCBnYXAtMi41IHRleHQtd2hpdGUvNTUgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltYP0ooInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToidy01LjUgaC01LjUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8xNSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIixzdHlsZTp7Ym9yZGVyVG9wQ29sb3I6InJnYmEoMTU1LDIwMSwxNTUsMC45NSkifX0pOkooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMjhweF0gb3BhY2l0eS01MCIsY2hpbGRyZW46WT8i4pajIjoi4paiIn0pLE4/SigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWRhbmdlciB0ZXh0LVsxMXB4XSBmb250LW1vbm8iLGNoaWxkcmVuOk59KTpudWxsLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooXyk9PntfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxaKCl9LGRpc2FibGVkOlgsY2xhc3NOYW1lOmBweC0zIHB5LTEuNSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItWyMzMzNdIHRleHQtWzExcHhdIGZvbnQtbW9ubyAke1g/ImJnLVsjMWExYTFhXSB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctWyMxZDJhMWRdIHRleHQtc3VjY2VzcyBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpYP1k/IlN0YXJ0aW5n4oCmIjoiQm9vdGluZ+KApiI6WT8iU3RhcnQgc3RyZWFtIjoiQm9vdCAmIHN0YXJ0In0pXX0pLEooImRpdiIse2NsYXNzTmFtZToicHgtMi41IHB5LTEuNSBib3JkZXItdCBib3JkZXItWyMyMjJdIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzcwIGZsZXgganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkMubmFtZX0pLEooInNwYW4iLHtjbGFzc05hbWU6IndoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6TH0sY2hpbGRyZW46W0IsRz9KKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpbIiA6IixHLnBvcnRdfSk6bnVsbF19KV19KV19KX1mdW5jdGlvbiBTMyh7b3BlbjpDLG9uQ2xvc2U6JCxjdXJyZW50VWRpZDpLLHdpZHRoOlh9KXtsZXQgUT13aW5kb3cuX19TSU1fUFJFVklFV19fLE49UT8uZ3JpZEFwaUVuZHBvaW50LFo9UT8uZ3JpZFN0YXJ0RW5kcG9pbnQscT1RPy5ncmlkU2h1dGRvd25FbmRwb2ludCxHPVE/LmdyaWRNZW1vcnlFbmRwb2ludCxZPVE/LnByZXZpZXdFbmRwb2ludD8/Ii8iLFtCLExdPUEoe30pLFtVLEZdPUEoe30pLFtULF9dPUEoe30pLGs9T2JqZWN0LnZhbHVlcyhCKS5zb21lKEJvb2xlYW4pfHxPYmplY3QudmFsdWVzKFUpLnNvbWUoQm9vbGVhbikse2RldmljZXM6eixyZWZyZXNoOnd9PVAzKE4sQyxrKSxFPVczKEcsQykseT1QKGFzeW5jKGgseD0yMDAwMCk9PntpZighTilyZXR1cm4gbnVsbDtsZXQgcD1EYXRlLm5vdygpK3g7d2hpbGUoRGF0ZS5ub3coKTxwKXt0cnl7bGV0ICQxPSgoYXdhaXQoYXdhaXQgZmV0Y2goTix7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5maW5kKChhKT0+YS5kZXZpY2U9PT1oJiZhLmhlbHBlcik7aWYoJDEpcmV0dXJuICQxfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoZCk9PnNldFRpbWVvdXQoZCw0MDApKX1yZXR1cm4gbnVsbH0sW05dKSxjPVAoYXN5bmMoaCk9PntpZighWilyZXR1cm47TCgoeCk9Pih7Li4ueCxbaF06ITB9KSksXygoeCk9Pih7Li4ueCxbaF06bnVsbH0pKTt0cnl7bGV0IHg9YXdhaXQgZmV0Y2goWix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6aH0pfSkscD1hd2FpdCB4Lmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIXgub2t8fCFwLm9rKXtfKCh1KT0+KHsuLi51LFtoXTpwLmVycm9yPz9gSFRUUCAke3guc3RhdHVzfWB9KSk7cmV0dXJufWlmKGF3YWl0IHkoaCkpe3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24oUjAoWSxoKSk7cmV0dXJufV8oKHUpPT4oey4uLnUsW2hdOiJIZWxwZXIgZGlkIG5vdCByZWdpc3RlciBpbiB0aW1lIn0pKX1jYXRjaCh4KXtfKChwKT0+KHsuLi5wLFtoXTp4Py5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7TCgoeCk9Pih7Li4ueCxbaF06ITF9KSksdygpfX0sW1osdyx5LFldKTtXKCgpPT57aWYoIXp8fCFLKXJldHVybjtpZih6LmZpbmQoKHApPT5wLmRldmljZT09PUspPy5oZWxwZXIpcmV0dXJuO2xldCB4PXouZmluZCgocCk9PnAuaGVscGVyJiZwLmRldmljZSE9PUspO3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24oeD9SMChZLHguZGV2aWNlKTpZKX0sW3osSyxZXSk7bGV0IFI9UChhc3luYyhoKT0+e2lmKCFxKXJldHVybjtGKCh4KT0+KHsuLi54LFtoXTohMH0pKSxfKCh4KT0+KHsuLi54LFtoXTpudWxsfSkpO3RyeXtsZXQgeD1hd2FpdCBmZXRjaChxLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpofSl9KSxwPWF3YWl0IHguanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZigheC5va3x8IXAub2spXygoZCk9Pih7Li4uZCxbaF06cC5lcnJvcj8/YEhUVFAgJHt4LnN0YXR1c31gfSkpfWNhdGNoKHgpe18oKHApPT4oey4uLnAsW2hdOng/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtGKCh4KT0+KHsuLi54LFtoXTohMX0pKSx3KCl9fSxbcSx3XSk7cmV0dXJuIEooTzAse29wZW46Qyx3aWR0aDpYLGNoaWxkcmVuOltKKFQwLHtjaGlsZHJlbjpbSihWMix7Y2hpbGRyZW46IlNpbXVsYXRvcnMifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W0ooRTMse3JlcG9ydDpFfSksSihNMCx7b25DbGljazokfSldfSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcC0zLjUgZ3JpZCBhdXRvLXJvd3MtW21pbm1heCgzMDBweCxhdXRvKV0gZ2FwLTMgY29udGVudC1zdGFydCBncmlkLWNvbHMtW3JlcGVhdChhdXRvLWZpbGwsbWlubWF4KDIwMHB4LDFmcikpXSIsY2hpbGRyZW46ej09PW51bGw/bnVsbDp6Lmxlbmd0aD09PTA/SigiZGl2Iix7Y2xhc3NOYW1lOiJjb2wtc3Bhbi1mdWxsIGJnLXBhbmVsIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLVsxMHB4XSBwLTQgdGV4dC13aGl0ZS81MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6ei5tYXAoKGgpPT5KKEkzLHtkZXZpY2U6aCxhY3RpdmU6aC5kZXZpY2U9PT1LLHByZXZpZXdFbmRwb2ludDpZLHN0YXJ0aW5nOiEhQltoLmRldmljZV0sc2h1dHRpbmdEb3duOiEhVVtoLmRldmljZV0sZXJyb3I6VFtoLmRldmljZV0/P251bGwsb25TdGFydDooKT0+YyhoLmRldmljZSksb25TaHV0ZG93bjooKT0+UihoLmRldmljZSl9LGguZGV2aWNlKSl9KV19KX1mdW5jdGlvbiBCMih7cGFuZWxXaWR0aDpDLHZpc2libGU6JCxvblBvaW50ZXJEb3duOkssYXJpYUxhYmVsOlh9KXtsZXRbUSxOXT1BKCExKSxbWixxXT1BKCExKSxHPVF8fFosWT0xMitDLTk7cmV0dXJuIEooImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtbGFiZWwiOlgsImFyaWEtaGlkZGVuIjohJCxvblBvaW50ZXJEb3duOihCKT0+e3EoITApLEsoQil9LG9uUG9pbnRlclVwOigpPT5xKCExKSxvblBvaW50ZXJDYW5jZWw6KCk9PnEoITEpLG9uUG9pbnRlckVudGVyOigpPT5OKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+TighMSksY2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBib3R0b20tMyB3LTQgei0zNiBjdXJzb3ItY29sLXJlc2l6ZSB0b3VjaC1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgJHskPyJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIjoib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUifWAsc3R5bGU6e3JpZ2h0Oll9LGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Rz8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLEooImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Rz8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke1o/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIGgzKCl7bGV0W0MsJF09QSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIFcoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgSz13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWD0oKT0+JChLLm1hdGNoZXMpO3JldHVybiBYKCksSy5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpLCgpPT5LLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWCl9LFtdKSxDfWZ1bmN0aW9uIF8yKCl7bGV0W0MsJF09QSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gVygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBLPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFg9KCk9PiQoSy5tYXRjaGVzKTtyZXR1cm4gWCgpLEsuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixYKSwoKT0+Sy5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpfSxbXSksQ312YXIgeDM9MjgwO3ZhciBuMj0id2lkdGggNzBtcyBsaW5lYXIiLHMyPSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLHYzPSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsZzM9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixtMD0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsUjM9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsbTM9IjAuNXMiLGozPSIwLjQycyIscDM9NTgwLGYzPSJjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsbDM9NDQwLHQyPTUsdTM9e2lkbGU6MSxob3ZlcjoxLjA5LGRyYWc6MS4xMn0sbzM9e2lkbGU6InJnYmEoMjQ1LDI0NywyNTIsMC41NSkiLGhvdmVyOiJyZ2JhKDI0OCwyNTAsMjU1LDAuNykiLGRyYWc6InJnYmEoMjU1LDI1NSwyNTUsMC45NCkifSxkMz17aWRsZTozLjk1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxjMz17aWRsZTpbMC43NCwwLjU4XSxob3ZlcjpbMC44MiwwLjY4XSxkcmFnOlsxLDAuOTZdfSxhMz17aWRsZTowLjQsaG92ZXI6MC41LGRyYWc6MC44NX0saTM9e2lkbGU6MCxob3ZlcjowLjQ1LGRyYWc6MC42OH0sazI9bnVsbDtmdW5jdGlvbiByMygpe2lmKGsyIT1udWxsKXJldHVybiBrMjtpZih0eXBlb2YgQ1NTPiJ1Inx8dHlwZW9mIENTUy5zdXBwb3J0cyE9PSJmdW5jdGlvbiIpcmV0dXJuITE7cmV0dXJuIGsyPUNTUy5zdXBwb3J0cygiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsImxpbmVhcigwLCAxKSIpLGsyfWZ1bmN0aW9uIG4zKEMpe3JldHVybiBDLnJlcGxhY2UoL1teYS16QS1aMC05Xy1dL2csIiIpfXZhciBlOT00MCxzMz0xNCx0Mz0yNDAsZTM9MzAsQzg9MC4xNSxDND04MCwkOD0xNTAsSzg9MjUwLGUyPSJzZXJ2ZS1zaW06c2ltdWxhdG9yLWZyYW1lLXNjYWxlIjtmdW5jdGlvbiBDNShDLCQsSyxYKXtsZXQgUT1DKjMsTj0kPjA/TWF0aC5tYXgoMjgwLCQtNDgpOlEsWj1LPjAmJk51bWJlci5pc0Zpbml0ZShYKSYmWD4wP01hdGgubWF4KDI4MCwoSy0xMzYpKlgpOlE7cmV0dXJuIE1hdGgubWluKFEsTixaKX1mdW5jdGlvbiB3MChDLCQsSyxYLFEpe2xldCBOPUM1KCQsSyxYLFEpLFo9TWF0aC5taW4oMjgwLE4pO3JldHVybiBNYXRoLm1pbihOLE1hdGgubWF4KFosQykpfWZ1bmN0aW9uIEQyKEMpe2lmKCFOdW1iZXIuaXNGaW5pdGUoQykpcmV0dXJuIEM7bGV0ICQ9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5tYXgoMSx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk6MTtyZXR1cm4gTWF0aC5yb3VuZChDKiQpLyR9ZnVuY3Rpb24gJDUoQywkKXtpZihDPD0wfHwkPD0wKXJldHVybiAwO2xldCBLPTAuNTUsWD1DKiQqSy8oJCtLKkMpO3JldHVybiBNYXRoLm1pbihlOSxYKX1mdW5jdGlvbiBYOChDLCQsSyl7bGV0IFg9QyxRPUs7Zm9yKGxldCBOIG9mICQpe2xldCBaPU1hdGguYWJzKEMtTik7aWYoWjxRKVg9TixRPVp9cmV0dXJuIFh9ZnVuY3Rpb24gSjgoQyl7bGV0e2Zyb206JCx0bzpLLHZlbG9jaXR5Olgsc3RpZmZuZXNzOlEsZGFtcGluZzpOLG9uVXBkYXRlOlosb25Db21wbGV0ZTpxfT1DLEc9MC40LFk9MC4wMzMzMzMzMzMzMzMzMzMzMyxCPSQsTD1YLFU9cGVyZm9ybWFuY2Uubm93KCksRj0wLFQ9ITEsXz0oayk9PntpZihUKXJldHVybjtsZXQgej1NYXRoLm1pbigoay1VKS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO1U9aztsZXQgdz0tUSooQi1LKS1OKkw7aWYoTCs9dyp6LEIrPUwqeixNYXRoLmFicyhMKTwwLjQmJk1hdGguYWJzKEItSyk8MC40KXtaKEspLHE/LigpO3JldHVybn1aKEIpLEY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKF8pfTtyZXR1cm4gRj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoXyksKCk9PntpZihUPSEwLEYpY2FuY2VsQW5pbWF0aW9uRnJhbWUoRil9fWZ1bmN0aW9uIFE4KEMpe2lmKEMubGVuZ3RoPDIpcmV0dXJuIDA7bGV0ICQ9Q1tDLmxlbmd0aC0xXSxLPUNbMF07Zm9yKGxldCBRPUMubGVuZ3RoLTE7UT49MDtRLS0paWYoJC50LUNbUV0udD49QzQpe0s9Q1tRXTticmVha31sZXQgWD0oJC50LUsudCkvMTAwMDtyZXR1cm4gWD4wPygkLngtSy54KS9YOjB9dmFyIE44PSJkcm9wLXNoYWRvdygwIDAuNXB4IDFweCByZ2JhKDAsMCwwLDAuMSkpIGRyb3Atc2hhZG93KDAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMTMpKSIsWjg9ImRyb3Atc2hhZG93KDAgMXB4IDEuNXB4IHJnYmEoMCwwLDAsMC4xNikpIiwkND1bWzYsInJnYmEoMTYwLDIwNSwyNTUsMC40MikiXSxbNC41NSwicmdiYSgyNTUsMjU1LDI1NSwwLjk3KSJdXTtmdW5jdGlvbiBxOCh7ZEZpbGw6Qyx3OiQsY2xhc3NOYW1lOkssb25FbmQ6WH0pe3JldHVybiBKKFExLHtjaGlsZHJlbjokNC5tYXAoKFtRLE5dKT0+SigicGF0aCIse2NsYXNzTmFtZTpLLGQ6QyxmaWxsOiJub25lIixwYXRoTGVuZ3RoOjEsc3Ryb2tlOk4sc3Ryb2tlV2lkdGg6USokLHN0cm9rZUxpbmVjYXA6InJvdW5kIixvbkFuaW1hdGlvbkVuZDpYfSxRKSl9KX12YXIgSzQ9dDEoZnVuY3Rpb24oe2FyYzokLHBoYXNlOksscmVkdWNlZE1vdGlvbjpYLGhpZ2hDb250cmFzdDpRLGZvY3VzVmlzaWJsZTpOLG9uUG9pbnRlckRvd246WixvblBvaW50ZXJNb3ZlOnEsb25Qb2ludGVyVXA6RyxvblBvaW50ZXJDYW5jZWw6WSxvblBvaW50ZXJFbnRlcjpCLG9uUG9pbnRlckxlYXZlOkwsb25Nb3VzZURvd246VX0sRil7bGV0IFQ9czAoKSxfPW4zKFQpLGs9YHNlcnZlLXNpbS1yei1iaC0ke199YCx6PWBzZXJ2ZS1zaW0tcnotYmQtJHtffWAsdz1gc2VydmVTaW1SekRpc2NoYXJnZUtmJHtffWAsRT1gc2VydmVTaW1SekRpc2NoYXJnZSR7X31gLHk9SyE9PSJpZGxlIixjPXYoITEpLFI9dighMSksaD12KDApLFt4LHBdPUEoITEpLGQ9digwLjQ1KSx1PXYoMCk7aWYoeSYmIWMuY3VycmVudCloLmN1cnJlbnQrPTE7Yy5jdXJyZW50PXksbjAoKCk9PntpZihSLmN1cnJlbnQmJiF5KXUuY3VycmVudD0wLHAoITApO2lmKHkpcCghMSk7Ui5jdXJyZW50PXl9LFt5XSk7bGV0ICQxPWguY3VycmVudCxhPWBzZXJ2ZVNpbVJ6Q2hnXyR7X31fJHskMX1gLHI9YHNlcnZlU2ltUnpDaGdfJHtffV8keyQxfWAsZz1QKCgpPT57aWYodS5jdXJyZW50Kz0xLHUuY3VycmVudD49MilwKCExKSx1LmN1cnJlbnQ9MH0sW10pLEk9UT8xLjEyOjEsSzE9KDYrdDIqMikqSSxuPVg/MTp1M1tLXSxKMT1kM1tLXSpJLFtlLHNdPWMzW0tdLFgxPVE/ZTpzLE89YTNbS10sUz1pM1tLXSxqPUs9PT0iZHJhZyI/YHVybCgjJHt6fSlgOmB1cmwoIyR7a30pYDtXKCgpPT57aWYoeSlkLmN1cnJlbnQ9U30sW3ksU10pO2xldCBpPSFYJiYoeXx8eCksdD15P1M6ZC5jdXJyZW50LFkxPXk/bTM6ajMsWjE9eT9nMzptMCxGMT15JiZyMygpP1IzOloxLFMxPVg/Im5vbmUiOmB0cmFuc2Zvcm0gJHtZMX0gJHtGMX1gLEcxPVg/Im5vbmUiOmBvcGFjaXR5ICR7WTF9ICR7WjF9LCBzdHJva2Utd2lkdGggJHtZMX0gJHtaMX1gLFAxPVg/Im5vbmUiOmBvcGFjaXR5ICR7WTF9ICR7WjF9YCxDMT0kLnZpZXdCb3hTaXplLHExPSQuZCxoMT0hWCYmKHl8fHgpJiZ0PjAsUjE9e3RyYW5zZm9ybTpgdHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKCR7bn0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjpTMSx3aWxsQ2hhbmdlOlg/dm9pZCAwOiJ0cmFuc2Zvcm0iLGJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIixXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiJ9O3JldHVybiBKKCJzdmciLHtyZWY6Rix3aWR0aDpDMSxoZWlnaHQ6QzEsdmlld0JveDpgMCAwICR7QzF9ICR7QzF9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIn0sb25Qb2ludGVyRG93bjpaLG9uUG9pbnRlck1vdmU6cSxvblBvaW50ZXJVcDpHLG9uUG9pbnRlckNhbmNlbDpZLG9uTG9zdFBvaW50ZXJDYXB0dXJlOkcsb25Qb2ludGVyRW50ZXI6QixvblBvaW50ZXJMZWF2ZTpMLG9uTW91c2VEb3duOlUsY2hpbGRyZW46W0ooImRlZnMiLHtjaGlsZHJlbjpbSigiZmlsdGVyIix7aWQ6ayx4OiItNTAlIix5OiItNTAlIix3aWR0aDoiMjAwJSIsaGVpZ2h0OiIyMDAlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSigiZmVHYXVzc2lhbkJsdXIiLHtpbjoiU291cmNlR3JhcGhpYyIsc3RkRGV2aWF0aW9uOlE/MC44NToxLjA1LHJlc3VsdDoiYiJ9KSxKKCJmZU1lcmdlIix7Y2hpbGRyZW46SigiZmVNZXJnZU5vZGUiLHtpbjoiYiJ9KX0pXX0pLEooImZpbHRlciIse2lkOnoseDoiLTUyJSIseToiLTUyJSIsd2lkdGg6IjIwNCUiLGhlaWdodDoiMjA0JSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0ooImZlR2F1c3NpYW5CbHVyIix7aW46IlNvdXJjZUdyYXBoaWMiLHN0ZERldmlhdGlvbjpRPzEuMTU6MS40MixyZXN1bHQ6ImIifSksSigiZmVNZXJnZSIse2NoaWxkcmVuOkooImZlTWVyZ2VOb2RlIix7aW46ImIifSl9KV19KSxKKCJzdHlsZSIse3R5cGU6InRleHQvY3NzIixjaGlsZHJlbjpgCiAgICAgICAgICAgICR7eT9gCiAgICAgICAgICAgIEBrZXlmcmFtZXMgJHthfSB7CiAgICAgICAgICAgICAgZnJvbSB7IHN0cm9rZS1kYXNob2Zmc2V0OiAxOyB9CiAgICAgICAgICAgICAgdG8geyBzdHJva2UtZGFzaG9mZnNldDogMDsgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC4ke3J9IHsKICAgICAgICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAxOwogICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAxOwogICAgICAgICAgICAgIHZlY3Rvci1lZmZlY3Q6IG5vbmU7CiAgICAgICAgICAgICAgYW5pbWF0aW9uOiAke2F9ICR7cDN9bXMgJHtmM30gZm9yd2FyZHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgQGtleWZyYW1lcyAke3d9IHsKICAgICAgICAgICAgICBmcm9tIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IH0KICAgICAgICAgICAgICB0byB7IHN0cm9rZS1kYXNob2Zmc2V0OiAxOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLiR7RX0gewogICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDE7CiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7CiAgICAgICAgICAgICAgdmVjdG9yLWVmZmVjdDogbm9uZTsKICAgICAgICAgICAgICBhbmltYXRpb246ICR7d30gJHtsM31tcyAke20wfSBmb3J3YXJkczsKICAgICAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogICAgICAgICAgICB9CiAgICAgICAgICBgfSldfSksSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOnExLHN0cm9rZToicmdiYSgzMCwzMiwzOCwwLjUpIixzdHJva2VXaWR0aDo1Ljg1Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTowLjA4OTYwMDAwMDAwMDAwMDAxLGZpbHRlcjpaOH19KSxKKCJwYXRoIix7ZDpxMSxzdHJva2U6InJnYmEoMTYsMTcsMjIsMC4zOCkiLHN0cm9rZVdpZHRoOjQuNipJLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6MC41NSxmaWx0ZXI6Wjh9fSldfSksSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOnExLGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgxMCwgMTMyLCAyNTUsIDAuOTUpIixzdHJva2VXaWR0aDoodDIqMis2KSpJLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6Tj8wLjk1OjAsdHJhbnNpdGlvbjpYPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke20wfWAsZmlsdGVyOiJkcm9wLXNoYWRvdygwIDAgMnB4IHJnYmEoMTAsMTMyLDI1NSwwLjU1KSkgZHJvcC1zaGFkb3coMCAwIDRweCByZ2JhKDEwLDEzMiwyNTUsMC4zMikpIn19KSxKKCJwYXRoIix7ZDpxMSxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkiLHN0cm9rZVdpZHRoOjEuNSpJLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6Tj8wLjc6MCx0cmFuc2l0aW9uOlg/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7bTB9YH19KV19KSxKKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6UjEsY2hpbGRyZW46W0ooImciLHtzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltoMSYmSigicGF0aCIse2Q6cTEsc3Ryb2tlOiJyZ2JhKDIxMCwyMjgsMjU1LDAuNCkiLHN0cm9rZVdpZHRoOjQuMjUqSSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLGZpbHRlcjpqLHN0eWxlOntvcGFjaXR5OnQqMC44Mix0cmFuc2l0aW9uOlAxfX0pLFgmJlM+MCYmSigicGF0aCIse2Q6cTEsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuODIpIixzdHJva2VXaWR0aDo0LjE1Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixmaWx0ZXI6aixzdHlsZTp7b3BhY2l0eTpTLHRyYW5zaXRpb246UDF9fSksSigicGF0aCIse2Q6cTEsc3Ryb2tlOm8zW0tdLHN0cm9rZVdpZHRoOkoxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6WDEsdHJhbnNpdGlvbjpHMSxmaWx0ZXI6Tjh9fSksSigicGF0aCIse2Q6cTEsc3Ryb2tlOiJyZ2JhKDIzNiwyNDQsMjUyLDAuOTIpIixzdHJva2VXaWR0aDoxLjM4Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpPLHRyYW5zaXRpb246RzEsZmlsdGVyOk44fX0pLGkmJkooImciLHtzdHlsZTp7b3BhY2l0eTp0LHRyYW5zaXRpb246UDF9LGNoaWxkcmVuOlt5JiZKKCJnIix7Y2hpbGRyZW46SihxOCx7ZEZpbGw6JC5kRmlsbCx3OkksY2xhc3NOYW1lOnJ9KX0sYHJ6LWNoYXJnZS0keyQxfWApLHgmJiF5JiZKKCJnIix7Y2hpbGRyZW46SihxOCx7ZEZpbGw6JC5kRmlsbCx3OkksY2xhc3NOYW1lOkUsb25FbmQ6Z30pfSwicnotZGlzY2hhcmdlIildfSldfSksSigicGF0aCIse2Q6cTEsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDAsMCwwLDApIixzdHJva2VXaWR0aDpLMSxzdHJva2VMaW5lY2FwOiJyb3VuZCIscG9pbnRlckV2ZW50czoic3Ryb2tlIn0pXX0pXX0pfSk7ZnVuY3Rpb24gWTgoe3NpbXVsYXRvclJlc2l6ZTpDLGRldmljZVR5cGU6JCxzdHJlYW1Db25maWc6Syxjb250YWluZXJXaWR0aDpYLGNvbnRhaW5lckhlaWdodDpRfSl7bGV0IE49XzIoKSxaPWgzKCksW3EsR109QSghMSksWT1IMSgoKT0+ajIoe3R5cGU6JCxjb25maWc6Sz8/bnVsbCxjb250YWluZXJXaWR0aDpYLGNvbnRhaW5lckhlaWdodDpRfSksWyQsSyxYLFFdKSxCPUMuaXNSZXNpemluZ3x8Qy5pc0luZXJ0aWE/ImRyYWciOkMuaGFuZGxlSG92ZXJlZD8iaG92ZXIiOiJpZGxlIjtyZXR1cm4gSigiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1sYWJlbCI6IlJlc2l6ZSBzaW11bGF0b3Igd2lkdGguIERyYWcgdGhlIGNvcm5lciBvciB1c2UgTGVmdCBhbmQgUmlnaHQgQXJyb3cga2V5czsgaG9sZCBTaGlmdCBmb3IgbGFyZ2VyIHN0ZXBzLiIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtdmFsdWVtaW4iOk1hdGgucm91bmQoQy5taW5XaWR0aCksImFyaWEtdmFsdWVtYXgiOk1hdGgucm91bmQoQy5tYXhXaWR0aCksImFyaWEtdmFsdWVub3ciOk1hdGgucm91bmQoQy5jb21taXR0ZWRXaWR0aCksdGFiSW5kZXg6MCxvbktleURvd246Qy5vbktleURvd24sb25Gb2N1czooTCk9PntHKEwuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5HKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLHBvaW50ZXJFdmVudHM6Im5vbmUiLG91dGxpbmU6Im5vbmUiLHpJbmRleDoyNSxXZWJraXRUYXBIaWdobGlnaHRDb2xvcjoidHJhbnNwYXJlbnQifSxjaGlsZHJlbjpKKEs0LHtyZWY6Qy5oYW5kbGVSZWYsYXJjOlkscGhhc2U6QixyZWR1Y2VkTW90aW9uOk4saGlnaENvbnRyYXN0OlosZm9jdXNWaXNpYmxlOnEsb25Qb2ludGVyRG93bjpDLm9uUG9pbnRlckRvd24sb25Qb2ludGVyTW92ZTpDLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6Qy5vblBvaW50ZXJFbmQsb25Qb2ludGVyQ2FuY2VsOkMub25Qb2ludGVyRW5kLG9uUG9pbnRlckVudGVyOigpPT5DLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT5DLnNldEhhbmRsZUhvdmVyZWQoITEpfSl9KX1mdW5jdGlvbiBHOCh7d2lkdGg6QyxoZWlnaHQ6JCx2aXNpYmxlOkt9KXtyZXR1cm4gSigiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctW3JnYmEoMjAsMjIsMjgsMC43OCldIHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpXSBiYWNrZHJvcC1ibHVyLW1kIGJhY2tkcm9wLXNhdHVyYXRlLTE1MCB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e29wYWNpdHk6Sz8xOjAsdHJhbnNmb3JtOmB0cmFuc2xhdGVZKCR7Sz8wOjR9cHgpIHNjYWxlKCR7Sz8xOjAuOTZ9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246Im9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgdHJhbnNmb3JtIDIyMG1zIGN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIn0sY2hpbGRyZW46W01hdGgucm91bmQoQyksIiAiLEooInNwYW4iLHtjbGFzc05hbWU6Im9wYWNpdHktNjAgbXgtMC41IixjaGlsZHJlbjoiw5cifSksIiAiLE1hdGgucm91bmQoJCldfSl9ZnVuY3Rpb24gWDQoQywkLEspe2xldCBYPUsubGF0Kk1hdGguUEkvMTgwLFE9KEMtSy5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OigkLUsubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhYKSo2MzcxMDAwLHo6LVEqNjM3MTAwMH19ZnVuY3Rpb24gSjQoQywkLEspe2xldCBYPUsubGF0Kk1hdGguUEkvMTgwLFE9LSQvNjM3MTAwMCooMTgwL01hdGguUEkpLE49Qy8oNjM3MTAwMCpNYXRoLmNvcyhYKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OksubGF0K1EsbG5nOksubG5nK059fWZ1bmN0aW9uIFE0KEMsJCxLLFgsUSl7bGV0IE49USpRLFo9TipRLHE9KEcsWSxCLEwpPT4wLjUqKDIqWSsoLUcrQikqUSsoMipHLTUqWSs0KkItTCkqTisoLUcrMypZLTMqQitMKSpaKTtyZXR1cm57eDpxKEMueCwkLngsSy54LFgueCksejpxKEMueiwkLnosSy56LFgueikseTpxKEMueSwkLnksSy55LFgueSkscmF3QWx0OnEoQy5yYXdBbHQsJC5yYXdBbHQsSy5yYXdBbHQsWC5yYXdBbHQpfX1mdW5jdGlvbiBONChDLCQsSyl7aWYoQy5sZW5ndGg8MilyZXR1cm4gQy5zbGljZSgpO2xldCBYPVtdLFE9Qy5sZW5ndGgsTj1LP1E6US0xO2ZvcihsZXQgWj0wO1o8TjtaKyspe2xldCBxPUNbSz8oWi0xK1EpJVE6TWF0aC5tYXgoMCxaLTEpXSxHPUNbWiVRXSxZPUNbKForMSklUV0sQj1DW0s/KForMiklUTpNYXRoLm1pbihRLTEsWisyKV0sTD1ZLngtRy54LFU9WS56LUcueixGPU1hdGguaHlwb3QoTCxVKSxUPU1hdGgubWF4KDIsTWF0aC5jZWlsKEYvJCkpO2ZvcihsZXQgXz0wO188VDtfKyspe2xldCBrPV8vVDtYLnB1c2goUTQocSxHLFksQixrKSl9fWlmKCFLKVgucHVzaChDW1EtMV0pO3JldHVybiBYfWZ1bmN0aW9uIEw4KEMpe2lmKEMud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAke0MuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0ICQ9e2xhdDpDLndheXBvaW50cy5yZWR1Y2UoKF8sayk9Pl8ray5sYXQsMCkvQy53YXlwb2ludHMubGVuZ3RoLGxuZzpDLndheXBvaW50cy5yZWR1Y2UoKF8sayk9Pl8ray5sbmcsMCkvQy53YXlwb2ludHMubGVuZ3RofSxLPUMud2F5cG9pbnRzLm1hcCgoXyk9Pl8uYWx0Pz8wKSxYPU1hdGgubWluKC4uLkspLFE9TWF0aC5tYXgoLi4uSyksTj1DLndheXBvaW50cy5tYXAoKF8pPT57bGV0e3g6ayx6fT1YNChfLmxhdCxfLmxuZywkKSx3PV8uYWx0Pz8wO3JldHVybnt4Omsseix5OnctWCxyYXdBbHQ6d319KSxaPU40KE4sOCwhIUMubG9vcCkscT1bXSxHPTA7Zm9yKGxldCBfPTA7XzxaLmxlbmd0aDtfKyspe2xldCBrPVpbX107aWYoXz4wKXtsZXQgeT1aW18tMV07Rys9TWF0aC5oeXBvdChrLngteS54LGsuei15Lnosay55LXkueSl9bGV0e2xhdDp6LGxuZzp3fT1KNChrLngsay56LCQpLEU9TWF0aC5tYXgoMCxrLnkpO3EucHVzaCh7eDprLngsejprLnoseTpFLGFyYzpHLGxhdDp6LGxuZzp3fSl9bGV0IFk9MS8wLEI9LTEvMCxMPTEvMCxVPS0xLzAsRj0xLzAsVD0tMS8wO2ZvcihsZXQgXyBvZiBxKXtpZihfLng8WSlZPV8ueDtpZihfLng+QilCPV8ueDtpZihfLno8TClMPV8uejtpZihfLno+VSlVPV8uejtpZihfLnk8RilGPV8ueTtpZihfLnk+VClUPV8ueX1yZXR1cm57dHJhaWw6QyxvcmlnaW46JCxwb2ludHM6cSx0b3RhbERpc3RhbmNlOnFbcS5sZW5ndGgtMV0uYXJjLGJvdW5kczp7eDpbWSxCXSx5OltGLFRdLHo6W0wsVV19LHJhd01pbkFsdDpYLHJhd01heEFsdDpRfX1mdW5jdGlvbiBOMChDLCQpe2xldCBLPUMudG90YWxEaXN0YW5jZTtpZihLPT09MClyZXR1cm4gQy5wb2ludHNbMF07bGV0IFg9JDtpZihDLnRyYWlsLmxvb3ApWD0oWCVLK0spJUs7ZWxzZXtpZihYPD0wKXJldHVybiBDLnBvaW50c1swXTtpZihYPj1LKXJldHVybiBDLnBvaW50c1tDLnBvaW50cy5sZW5ndGgtMV19bGV0IFE9MCxOPUMucG9pbnRzLmxlbmd0aC0xO3doaWxlKFErMTxOKXtsZXQgQj1RK04+Pj4xO2lmKEMucG9pbnRzW0JdLmFyYzw9WClRPUI7ZWxzZSBOPUJ9bGV0IFo9Qy5wb2ludHNbUV0scT1DLnBvaW50c1tOXSxHPXEuYXJjLVouYXJjLFk9Rz09PTA/MDooWC1aLmFyYykvRztyZXR1cm57eDpaLngrKHEueC1aLngpKlksejpaLnorKHEuei1aLnopKlkseTpaLnkrKHEueS1aLnkpKlksYXJjOlgsbGF0OloubGF0KyhxLmxhdC1aLmxhdCkqWSxsbmc6Wi5sbmcrKHEubG5nLVoubG5nKSpZfX1mdW5jdGlvbiBLNShDKXtzd2l0Y2goQyl7Y2FzZSJ3YWxrIjpyZXR1cm4gMS40O2Nhc2UicnVuIjpyZXR1cm4gMztjYXNlImN5Y2xlIjpyZXR1cm4gNS41O2Nhc2UiZHJpdmUiOnJldHVybiAxMy40fX12YXIgWjQ9W3tsYXQ6MzcuMzMyNzIsbG5nOi0xMjIuMDA4MzMsYWx0OjQ5fSx7bGF0OjM3LjMzMzA5LGxuZzotMTIyLjAwNzM1LGFsdDo0OH0se2xhdDozNy4zMzM3Myxsbmc6LTEyMi4wMDY2MyxhbHQ6NDl9LHtsYXQ6MzcuMzM0NTQsbG5nOi0xMjIuMDA2MjcsYWx0OjQ5fSx7bGF0OjM3LjMzNTQsbG5nOi0xMjIuMDA2MzMsYWx0OjQ5fSx7bGF0OjM3LjMzNjE4LGxuZzotMTIyLjAwNjc5LGFsdDo0NX0se2xhdDozNy4zMzY3NSxsbmc6LTEyMi4wMDc1OSxhbHQ6NDV9LHtsYXQ6MzcuMzM3MDQsbG5nOi0xMjIuMDA4NjEsYWx0OjQ2fSx7bGF0OjM3LjMzNjk4LGxuZzotMTIyLjAwOTY5LGFsdDo0OH0se2xhdDozNy4zMzY2Mixsbmc6LTEyMi4wMTA2NixhbHQ6NDh9LHtsYXQ6MzcuMzM1OTgsbG5nOi0xMjIuMDExMzgsYWx0OjQ5fSx7bGF0OjM3LjMzNTE3LGxuZzotMTIyLjAxMTc0LGFsdDo1MH0se2xhdDozNy4zMzQzMSxsbmc6LTEyMi4wMTE2OSxhbHQ6NTB9LHtsYXQ6MzcuMzMzNTQsbG5nOi0xMjIuMDExMjIsYWx0OjUwfSx7bGF0OjM3LjMzMjk2LGxuZzotMTIyLjAxMDQyLGFsdDo1MX0se2xhdDozNy4zMzI2OCxsbmc6LTEyMi4wMDk0LGFsdDo1MH1dLHE0PVt7bGF0OjM3LjgzMjEyLGxuZzotMTIyLjQ4MDY1LGFsdDozMH0se2xhdDozNy44MjkzNyxsbmc6LTEyMi40Nzk3NCxhbHQ6MzB9LHtsYXQ6MzcuODI2NDksbG5nOi0xMjIuNDc5NCxhbHQ6MzB9LHtsYXQ6MzcuODIzNjIsbG5nOi0xMjIuNDc5MDcsYWx0OjQ1fSx7bGF0OjM3LjgyMDc0LGxuZzotMTIyLjQ3ODczLGFsdDo1OX0se2xhdDozNy44MTc4Nixsbmc6LTEyMi40NzgzOSxhbHQ6NjZ9LHtsYXQ6MzcuODE0OTgsbG5nOi0xMjIuNDc4MDYsYWx0OjY2fSx7bGF0OjM3LjgxMjExLGxuZzotMTIyLjQ3NzcyLGFsdDo1OH0se2xhdDozNy44MDkyMyxsbmc6LTEyMi40NzczNCxhbHQ6NDR9LHtsYXQ6MzcuODA5NDksbG5nOi0xMjIuNDc3MyxhbHQ6NDV9LHtsYXQ6MzcuODEyMzYsbG5nOi0xMjIuNDc3NjUsYWx0OjU5fSx7bGF0OjM3LjgxNTI0LGxuZzotMTIyLjQ3Nzk4LGFsdDo2Nn0se2xhdDozNy44MTgxMixsbmc6LTEyMi40NzgzMixhbHQ6NjZ9LHtsYXQ6MzcuODIxLGxuZzotMTIyLjQ3ODY2LGFsdDo1OH0se2xhdDozNy44MjM4Nyxsbmc6LTEyMi40NzksYWx0OjQ0fSx7bGF0OjM3LjgyNjc1LGxuZzotMTIyLjQ3OTMzLGFsdDozMH0se2xhdDozNy44Mjk2Myxsbmc6LTEyMi40Nzk2NyxhbHQ6MzB9LHtsYXQ6MzcuODMyMzMsbG5nOi0xMjIuNDgwNzIsYWx0OjMwfV0sWTQ9W3tsYXQ6MzcuODg2NjQsbG5nOi0xMjIuNjI1OTksYWx0OjEyMX0se2xhdDozNy44ODg4Nyxsbmc6LTEyMi42MjMzMixhbHQ6MTM1fSx7bGF0OjM3Ljg5MTE1LGxuZzotMTIyLjYyMTYsYWx0OjE2NH0se2xhdDozNy44OTM1Myxsbmc6LTEyMi42MTkyMSxhbHQ6MTgwfSx7bGF0OjM3Ljg5NDY2LGxuZzotMTIyLjYxNTc3LGFsdDoyMjB9LHtsYXQ6MzcuODk2MzEsbG5nOi0xMjIuNjEyNjgsYWx0OjI3M30se2xhdDozNy44OTkxNyxsbmc6LTEyMi42MTA5OCxhbHQ6MzEzfSx7bGF0OjM3LjkwMTY2LGxuZzotMTIyLjYwODU1LGFsdDozNDJ9LHtsYXQ6MzcuOTAxOTksbG5nOi0xMjIuNjA2MDEsYWx0OjQwOH0se2xhdDozNy45MDMzOSxsbmc6LTEyMi42MDQwMSxhbHQ6NDUwfSx7bGF0OjM3LjkwNjYyLGxuZzotMTIyLjYwMjkxLGFsdDo0NDB9LHtsYXQ6MzcuOTA5NzEsbG5nOi0xMjIuNjAxNzMsYWx0OjQzMn0se2xhdDozNy45MTIxMyxsbmc6LTEyMi42MDAwNyxhbHQ6NDM2fSx7bGF0OjM3LjkxNDM5LGxuZzotMTIyLjU5NzgsYWx0OjQxMH0se2xhdDozNy45MTI4NSxsbmc6LTEyMi41OTUwNCxhbHQ6NDIyfSx7bGF0OjM3LjkxMjc0LGxuZzotMTIyLjU5MjAyLGFsdDo0MjV9LHtsYXQ6MzcuOTE1LGxuZzotMTIyLjU5MDMyLGFsdDo0MTJ9LHtsYXQ6MzcuOTE2MzcsbG5nOi0xMjIuNTg5MDMsYWx0OjQwNn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODU5NSxhbHQ6MzgyfSx7bGF0OjM3LjkxNzQsbG5nOi0xMjIuNTgzOTgsYWx0OjM3Mn0se2xhdDozNy45MTY0Mixsbmc6LTEyMi41ODIzNixhbHQ6MzUyfSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4MDExLGFsdDozNDJ9XSxHND1be2xhdDo0MC43ODIxNixsbmc6LTczLjk2MjU0LGFsdDozN30se2xhdDo0MC43ODIyMSxsbmc6LTczLjk2MDk4LGFsdDozNn0se2xhdDo0MC43ODMyOCxsbmc6LTczLjk2MDEsYWx0OjM2fSx7bGF0OjQwLjc4NDQsbG5nOi03My45NTkzLGFsdDozNn0se2xhdDo0MC43ODU1LGxuZzotNzMuOTU4NDgsYWx0OjM2fSx7bGF0OjQwLjc4NjY0LGxuZzotNzMuOTU3NzQsYWx0OjM2fSx7bGF0OjQwLjc4NzksbG5nOi03My45NTc2NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg4OTgsbG5nOi03My45NTc5MixhbHQ6MzZ9LHtsYXQ6NDAuNzg4NjgsbG5nOi03My45NTk1MSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4OTcsbG5nOi03My45NjExMixhbHQ6MzZ9LHtsYXQ6NDAuNzg4MzMsbG5nOi03My45NjI1LGFsdDozN30se2xhdDo0MC43ODgyOCxsbmc6LTczLjk2NDE2LGFsdDozN30se2xhdDo0MC43ODgwNSxsbmc6LTczLjk2NTczLGFsdDozNn0se2xhdDo0MC43ODY5MSxsbmc6LTczLjk2NjM2LGFsdDozNn0se2xhdDo0MC43ODU2Nixsbmc6LTczLjk2NjY1LGFsdDozNn0se2xhdDo0MC43ODQ1OCxsbmc6LTczLjk2NjA4LGFsdDozNn0se2xhdDo0MC43ODQwMixsbmc6LTczLjk2NDU5LGFsdDozNn0se2xhdDo0MC43ODMyMixsbmc6LTczLjk2MzM0LGFsdDozN31dLEw0PVt7bGF0OjM3LjU5NjU5LGxuZzotMTIyLjUwMzE2LGFsdDo0fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODUwNSxsbmc6LTEyMi41MDY5OCxhbHQ6OTN9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fV0sWjA9W3tpZDoiYXBwbGUtcGFyay1sb29wIixuYW1lOiJBcHBsZSBQYXJrIExvb3AiLGRlc2NyaXB0aW9uOiJDdXBlcnRpbm8g4oCiIGZsYXQgcmluZyByb2FkIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6WjQsbG9vcDohMH0se2lkOiJnb2xkZW4tZ2F0ZSIsbmFtZToiR29sZGVuIEdhdGUgQ3Jvc3NpbmciLGRlc2NyaXB0aW9uOiJTYW4gRnJhbmNpc2NvIOKAoiBicmlkZ2Ugcm91bmQtdHJpcCIsbW9kZToicnVuIix3YXlwb2ludHM6cTQsbG9vcDohMH0se2lkOiJ0YW0tcmlkZ2UiLG5hbWU6Ik10LiBUYW0gUmlkZ2UiLGRlc2NyaXB0aW9uOiJTdGluc29uIEJlYWNoIOKAoiBTdGVlcCBSYXZpbmUgKyBNYXR0IERhdmlzIGxvb3AiLG1vZGU6IndhbGsiLHdheXBvaW50czpZNCxsb29wOiEwfSx7aWQ6ImNlbnRyYWwtcGFyayIsbmFtZToiUmVzZXJ2b2lyIExvb3AiLGRlc2NyaXB0aW9uOiJDZW50cmFsIFBhcmsg4oCiIDIuNSBrbSIsbW9kZToicnVuIix3YXlwb2ludHM6RzQsbG9vcDohMH0se2lkOiJwY2gtcGFjaWZpY2EiLG5hbWU6IlBhY2lmaWMgQ29hc3QgSHd5IixkZXNjcmlwdGlvbjoiUGFjaWZpY2Eg4oCiIERldmlsJ3MgU2xpZGUgcm91bmQtdHJpcCIsbW9kZToiZHJpdmUiLHdheXBvaW50czpMNCxsb29wOiEwfV07dmFyIFY0PTY1MCxCND1gCi5sZW0tdG9nZ2xlOmhvdmVyIHsgY29sb3I6ICNmZmY7IH0KLmxlbS10b2dnbGU6aG92ZXIgLmxlbS1jaGV2cm9uIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC44NSkgIWltcG9ydGFudDsgfQoubGVtLXNlbGVjdDpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjE2KTsgfQoubGVtLXNlbGVjdDpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjI0KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsgfQoubGVtLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkgeyBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wOCk7IH0KLmxlbS1wcmltYXJ5LW9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSAhaW1wb3J0YW50OyBmaWx0ZXI6IG5vbmU7IH0KLmxlbS1naG9zdDpob3Zlcjpub3QoOmRpc2FibGVkKSB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNik7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjIpOyBjb2xvcjogI2ZmZjsgfQoubGVtLWdob3N0OmRpc2FibGVkIHsgb3BhY2l0eTogMC40OyBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9Ci5sZW0tc2VnOmhvdmVyOm5vdChbYXJpYS1wcmVzc2VkPSJ0cnVlIl0pIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KSAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDkpOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xOCk7IGNvbG9yOiAjZmZmOyB9Ci5sZW0tc3BlZWQtb246aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuODgpICFpbXBvcnRhbnQ7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjg4KSAhaW1wb3J0YW50OyBjb2xvcjogIzBhMGEwYyAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjk3KTsgfQpgLFg1PVsxLDIsNSwyMF0sVjg9MTAwMCxKNT17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gRjgoe3VkaWQ6QyxleGVjOiR9KXtsZXRbSyxYXT1BKCExKSxbUSxOXT1BKFowWzBdLmlkKSxbWixxXT1BKFowWzBdLm1vZGUpLFtHLFldPUEoMSksW0IsTF09QShKNSksW1UsRl09QShudWxsKSxUPUgxKCgpPT5aMC5maW5kKChnKT0+Zy5pZD09PVEpPz9aMFswXSxbUV0pLF89SDEoKCk9Pkw4KFQpLFtUXSksaz12KDApLHo9digiaWRsZSIpLHc9dihLNShaKSpHKSxFPXYoMCkseT12KF8pLGM9dihudWxsKTtXKCgpPT57dy5jdXJyZW50PUs1KFopKkd9LFtaLEddKTtsZXQgUj12KG51bGwpO1coKCk9PntsZXQgZz15LmN1cnJlbnQsST1rLmN1cnJlbnQ7aWYoeS5jdXJyZW50PV8sZyYmZyE9PV8pUi5jdXJyZW50PUQ0KGcsSSxfLHBlcmZvcm1hbmNlLm5vdygpKTtrLmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MCx6LmN1cnJlbnQ9ImlkbGUiLGMuY3VycmVudD1udWxsLEwoSjUpfSxbX10pO2xldCBoPXYoMCkseD12KG51bGwpLHA9dihudWxsKTtXKCgpPT57bGV0IGc9MCxJPShLMSk9PntsZXQgbj14LmN1cnJlbnQsSjE9bj09bnVsbD8xNjpNYXRoLm1pbig2NCxLMS1uKTtpZih4LmN1cnJlbnQ9SzEsaC5jdXJyZW50PShoLmN1cnJlbnQrSjEqMC4wMDAxMiklKE1hdGguUEkqMiksei5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgcz13LmN1cnJlbnQqSjEvMTAwMDtrLmN1cnJlbnQrPXMsRS5jdXJyZW50Kz1KMTtsZXQgWDE9eS5jdXJyZW50LnRvdGFsRGlzdGFuY2U7aWYoIXkuY3VycmVudC50cmFpbC5sb29wJiZrLmN1cnJlbnQ+PVgxKWsuY3VycmVudD1YMSx6LmN1cnJlbnQ9InBhdXNlZCIsTCh7c3RhdHVzOiJwYXVzZWQiLGFyYzpYMSxlbGFwc2VkTXM6RS5jdXJyZW50fSl9bGV0IGU9cC5jdXJyZW50O2lmKGUpe2xldCBzPXkuY3VycmVudCxYMT1udWxsLE89Ui5jdXJyZW50O2lmKE8pe2xldCBTPShLMS1PLnN0YXJ0TXMpL1Y0O2lmKFM+PTEpUi5jdXJyZW50PW51bGw7ZWxzZXtsZXQgaj16NChTKTtzPUY0KE8saiksWDE9e3g6Ty5wcmV2TWFya2VyLngrKE8ubmV4dE1hcmtlci54LU8ucHJldk1hcmtlci54KSpqLHk6Ty5wcmV2TWFya2VyLnkrKE8ubmV4dE1hcmtlci55LU8ucHJldk1hcmtlci55KSpqLHo6Ty5wcmV2TWFya2VyLnorKE8ubmV4dE1hcmtlci56LU8ucHJldk1hcmtlci56KSpqfX19SDQoZSxzLGsuY3VycmVudCxoLmN1cnJlbnQsSzEsei5jdXJyZW50PT09InBsYXlpbmciLFgxKX1nPXJlcXVlc3RBbmltYXRpb25GcmFtZShJKX07cmV0dXJuIGc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEkpLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShnKX0sW10pLFcoKCk9PntsZXQgZz1zZXRJbnRlcnZhbCgoKT0+e2lmKHouY3VycmVudD09PSJwbGF5aW5nIilMKHtzdGF0dXM6InBsYXlpbmciLGFyYzprLmN1cnJlbnQsZWxhcHNlZE1zOkUuY3VycmVudH0pfSwyNTApO3JldHVybigpPT5jbGVhckludGVydmFsKGcpfSxbXSksVygoKT0+e2lmKEIuc3RhdHVzIT09InBsYXlpbmciKXJldHVybjtsZXQgZz0hMSxJPTAsSzE9bnVsbCxuPWFzeW5jKCk9PntpZihnfHxLMSlyZXR1cm47bGV0IGU9RGF0ZS5ub3coKTtpZihlLUk8VjgpcmV0dXJuO0k9ZTtsZXQgcz1OMCh5LmN1cnJlbnQsay5jdXJyZW50KSxYMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gc2V0ICR7cy5sYXQudG9GaXhlZCg3KX0sJHtzLmxuZy50b0ZpeGVkKDcpfWA7SzE9JChYMSkudGhlbigoTyk9PntpZihnKXJldHVybjtpZihPLmV4aXRDb2RlIT09MClGKFU4KE8uc3RkZXJyKXx8InNpbWN0bCBsb2NhdGlvbiBzZXQgZmFpbGVkIik7ZWxzZSBGKG51bGwpfSkuY2F0Y2goKE8pPT57aWYoIWcpRihPIGluc3RhbmNlb2YgRXJyb3I/Ty5tZXNzYWdlOlN0cmluZyhPKSl9KS5maW5hbGx5KCgpPT57SzE9bnVsbH0pfTtuKCk7bGV0IEoxPXNldEludGVydmFsKG4sVjgpO3JldHVybigpPT57Zz0hMCxjbGVhckludGVydmFsKEoxKX19LFtCLnN0YXR1cyxDLCRdKTtsZXQgZD1QKCgpPT57aWYoei5jdXJyZW50PT09InBsYXlpbmciKXt6LmN1cnJlbnQ9InBhdXNlZCIsTCgoZyk9Pih7Li4uZyxzdGF0dXM6InBhdXNlZCJ9KSk7cmV0dXJufWlmKGsuY3VycmVudD49eS5jdXJyZW50LnRvdGFsRGlzdGFuY2UmJiF5LmN1cnJlbnQudHJhaWwubG9vcClrLmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MDtpZihjLmN1cnJlbnQ9PW51bGwpe2xldCBnPU4wKHkuY3VycmVudCxrLmN1cnJlbnQpO2MuY3VycmVudD17bGF0OmcubGF0LGxuZzpnLmxuZ319ei5jdXJyZW50PSJwbGF5aW5nIixMKChnKT0+KHsuLi5nLHN0YXR1czoicGxheWluZyIsYXJjOmsuY3VycmVudCxlbGFwc2VkTXM6RS5jdXJyZW50fSkpfSxbXSksdT1QKCgpPT57ei5jdXJyZW50PSJpZGxlIixrLmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MCxMKEo1KTtsZXQgZz1jLmN1cnJlbnQ7Yy5jdXJyZW50PW51bGw7bGV0IEk9Zz9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gc2V0ICR7Zy5sYXQudG9GaXhlZCg3KX0sJHtnLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAke0N9IGNsZWFyYDskKEkpLnRoZW4oKEsxKT0+e2lmKEsxLmV4aXRDb2RlIT09MClGKFU4KEsxLnN0ZGVycil8fG51bGwpO2Vsc2UgRihudWxsKX0pfSxbJCxDXSksJDE9UCgoZyk9PntOKGcpO2xldCBJPVowLmZpbmQoKEsxKT0+SzEuaWQ9PT1nKTtpZihJKXEoSS5tb2RlKX0sW10pO1coKCk9PigpPT57aWYoei5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgZz1jLmN1cnJlbnQsST1nP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHtDfSBzZXQgJHtnLmxhdC50b0ZpeGVkKDcpfSwke2cubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gY2xlYXJgOyQoSSkuY2F0Y2goKCk9Pnt9KX0sWyQsQ10pO2xldCBhPUIuc3RhdHVzPT09InBsYXlpbmciLHI9YT9gJHtONShCLmFyYyl9IMK3ICR7azgoQi5lbGFwc2VkTXMpfWA6YCR7TjUoXy50b3RhbERpc3RhbmNlKX0gdG90YWxgO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHgtMyBweS0yIixjaGlsZHJlbjpbSigic3R5bGUiLHtjaGlsZHJlbjpCNH0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+WCgoZyk9PiFnKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOkssY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4ycyxib3gtc2hhZG93XzAuMnNdIixzdHlsZTp7YmFja2dyb3VuZDphPyIjNGFkZTgwIjpfLnRvdGFsRGlzdGFuY2U+MD8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoidHJhbnNwYXJlbnQiLGJveFNoYWRvdzphPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSkscl19KSxKKGYxLHtvcGVuOkt9KV19KSxLJiZKKFExLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBibG9jayIsY2hpbGRyZW46W0ooInNlbGVjdCIse3ZhbHVlOlEsb25DaGFuZ2U6KGcpPT4kMShnLnRhcmdldC52YWx1ZSksY2xhc3NOYW1lOiJsZW0tc2VsZWN0IGFwcGVhcmFuY2Utbm9uZSBbLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmVdIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIiwiYXJpYS1sYWJlbCI6IlRyYWlsIixjaGlsZHJlbjpaMC5tYXAoKGcpPT5KKCJvcHRpb24iLHt2YWx1ZTpnLmlkLGNoaWxkcmVuOmcubmFtZX0sZy5pZCkpfSksSigic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkooZjEse29wZW46ITF9KX0pXX0pLEooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46VC5kZXNjcmlwdGlvbn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltKKCJjYW52YXMiLHtyZWY6cCxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksSihrNCx7cHJlcGFyZWQ6X30pXX0pLEooImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbSihRNSx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpONShCLmFyYyl9KSxKKFE1LHtsYWJlbDoiUGFjZSIsdmFsdWU6TzQody5jdXJyZW50KX0pLEooUTUse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTprOChCLmVsYXBzZWRNcyl9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W0ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpkLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7YT8ibGVtLXByaW1hcnkgbGVtLXByaW1hcnktb24gYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUiOiJsZW0tcHJpbWFyeSBiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0ifWAsImFyaWEtcHJlc3NlZCI6YSx0aXRsZTphPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOlthP0ooZjIse30pOkoodjAse30pLEooInNwYW4iLHtjaGlsZHJlbjphPyJQYXVzZSI6IlBsYXkifSldfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOnUsY2xhc3NOYW1lOiJsZW0tZ2hvc3QgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0iLGRpc2FibGVkOkIuc3RhdHVzPT09ImlkbGUiJiZCLmFyYz09PTAsdGl0bGU6IlN0b3AgYW5kIGNsZWFyIHNpbXVsYXRlZCBsb2NhdGlvbiIsY2hpbGRyZW46W0ooZzAse30pLEooInNwYW4iLHtjaGlsZHJlbjoiU3RvcCJ9KV19KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46SihfNCx7YXJpYUxhYmVsOiJUcmFuc3BvcnQgbW9kZSIsdmFsdWU6WixvbkNoYW5nZTooZyk9PnEoZyksb3B0aW9uczpbe3ZhbHVlOiJ3YWxrIixsYWJlbDoiV2FsayIsaWNvbjpKKHUyLHt9KX0se3ZhbHVlOiJydW4iLGxhYmVsOiJSdW4iLGljb246SihvMix7fSl9LHt2YWx1ZToiY3ljbGUiLGxhYmVsOiJDeWNsZSIsaWNvbjpKKGQyLHt9KX0se3ZhbHVlOiJkcml2ZSIsbGFiZWw6IkRyaXZlIixpY29uOkooYzIse30pfV19KX0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e2xldCBnPVg1LmluZGV4T2YoRyksST1YNVsoZysxKSVYNS5sZW5ndGhdO1koSSl9LGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMi41IGJvcmRlciByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgbWluLXctWzU2cHhdICR7Rz4xPyJsZW0tc3BlZWQgbGVtLXNwZWVkLW9uIGJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSI6ImxlbS1zcGVlZCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7R33DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtHfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltKKGwyLHt9KSxHPjEmJkooInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W0csIsOXIl19KV19KV19KSxVJiZKKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOlV9KV19KV19KX12YXIgUTU9azAoZnVuY3Rpb24oe2xhYmVsOiQsdmFsdWU6S30pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjokfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46S30pXX0pfSk7ZnVuY3Rpb24gXzQoe3ZhbHVlOkMsb25DaGFuZ2U6JCxvcHRpb25zOkssYXJpYUxhYmVsOlh9KXtyZXR1cm4gSigiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46Sy5tYXAoKFEpPT57bGV0IE49US52YWx1ZT09PUM7cmV0dXJuIEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+JChRLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7Tj8ibGVtLXNlZyBsZW0tc2VnLWFjdGl2ZSBiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImxlbS1zZWcgYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS82MCJ9YCwiYXJpYS1wcmVzc2VkIjpOLCJhcmlhLWxhYmVsIjpRLmljb24/US5sYWJlbDp2b2lkIDAsdGl0bGU6US5pY29uP1EubGFiZWw6dm9pZCAwLGNoaWxkcmVuOlEuaWNvbj8/US5sYWJlbH0sUS52YWx1ZSl9KX0pfWZ1bmN0aW9uIGs0KHtwcmVwYXJlZDpDfSl7aWYoQy5yYXdNYXhBbHQtQy5yYXdNaW5BbHQ8NSlyZXR1cm4gbnVsbDtyZXR1cm4gSihRMSx7Y2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltKKFoyLHtkaXI6InVwIn0pLCIgIixEOChDLnJhd01heEFsdCldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiByaWdodC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltKKFoyLHtkaXI6ImRvd24ifSksIiAiLEQ4KEMucmF3TWluQWx0KV19KV19KX12YXIgQjg9MTQwO2Z1bmN0aW9uIF84KEMsJCl7bGV0IEs9QXJyYXkoJCk7Zm9yKGxldCBYPTA7WDwkO1grKyl7bGV0IFE9JD09PTE/MDpYLygkLTEpLE49TjAoQyxRKkMudG90YWxEaXN0YW5jZSk7S1tYXT17eDpOLngseTpOLnksejpOLnp9fXJldHVybiBLfWZ1bmN0aW9uIEQ0KEMsJCxLLFgpe2xldCBRPShDLmJvdW5kcy54WzBdK0MuYm91bmRzLnhbMV0pLzIsTj0oQy5ib3VuZHMuelswXStDLmJvdW5kcy56WzFdKS8yLFo9Qy5ib3VuZHMueVswXSxxPU1hdGgubWF4KDEsQy5ib3VuZHMueFsxXS1DLmJvdW5kcy54WzBdLEMuYm91bmRzLnpbMV0tQy5ib3VuZHMuelswXSksRz0oSy5ib3VuZHMueFswXStLLmJvdW5kcy54WzFdKS8yLFk9KEsuYm91bmRzLnpbMF0rSy5ib3VuZHMuelsxXSkvMixCPUsuYm91bmRzLnlbMF0sVT1NYXRoLm1heCgxLEsuYm91bmRzLnhbMV0tSy5ib3VuZHMueFswXSxLLmJvdW5kcy56WzFdLUsuYm91bmRzLnpbMF0pL3EsVD1fOChDLEI4KS5tYXAoKFIpPT4oe3g6KFIueC1RKSpVK0cseTooUi55LVopKlUrQix6OihSLnotTikqVStZfSkpLF89XzgoSyxCOCksaz0oQy50cmFpbC5sb29wfHxLLnRyYWlsLmxvb3ApPz8hMSx6PVU0KFQsXyxrKSx3PU4wKEMsJCksRT17eDoody54LVEpKlUrRyx5Oih3LnktWikqVStCLHo6KHcuei1OKSpVK1l9LHk9TjAoSywwKSxjPXt4OnkueCx5OnkueSx6Onkuen07cmV0dXJue2Zyb206Qyx0bzpLLGZyb21QdHM6VCx0b1B0czp6LHByZXZNYXJrZXI6RSxuZXh0TWFya2VyOmMsc3RhcnRNczpYfX1mdW5jdGlvbiBVNChDLCQsSyl7bGV0IFg9Qy5sZW5ndGgsUT0xLzAsTj0wLFo9ITEscT1bJCxbLi4uJF0ucmV2ZXJzZSgpXTtmb3IobGV0IEI9MDtCPHEubGVuZ3RoO0IrKyl7bGV0IEw9cVtCXSxVPUs/WDoxO2ZvcihsZXQgRj0wO0Y8VTtGKyspe2xldCBUPTA7Zm9yKGxldCBfPTA7XzxYO18rKyl7bGV0IGs9Q1tfXSx6PUxbKF8rRiklWF0sdz1rLngtei54LEU9ay55LXoueSx5PWsuei16Lno7aWYoVCs9dyp3K0UqRSt5KnksVD49USlicmVha31pZihUPFEpUT1ULE49RixaPUI9PT0xfX1sZXQgRz1aP1suLi4kXS5yZXZlcnNlKCk6JCxZPUFycmF5KFgpO2ZvcihsZXQgQj0wO0I8WDtCKyspWVtCXT1HWyhCK04pJVhdO3JldHVybiBZfWZ1bmN0aW9uIEY0KEMsJCl7bGV0IEs9Qy5mcm9tUHRzLmxlbmd0aCxYPUFycmF5KEspLFE9MCxOPW51bGwsWj0xLzAscT0tMS8wLEc9MS8wLFk9LTEvMCxCPTEvMCxMPS0xLzA7Zm9yKGxldCBVPTA7VTxLO1UrKyl7bGV0IEY9Qy5mcm9tUHRzW1VdLFQ9Qy50b1B0c1tVXSxfPUYueCsoVC54LUYueCkqJCxrPUYueSsoVC55LUYueSkqJCx6PUYueisoVC56LUYueikqJDtpZihOKXtsZXQgRT1fLU4ueCx5PWstTi55LGM9ei1OLno7USs9TWF0aC5zcXJ0KEUqRSt5KnkrYypjKX1sZXQgdz17eDpfLHk6ayx6LGFyYzpRLGxhdDowLGxuZzowfTtpZihYW1VdPXcsTj13LF88WilaPV87aWYoXz5xKXE9XztpZihrPEcpRz1rO2lmKGs+WSlZPWs7aWYoejxCKUI9ejtpZih6PkwpTD16fXJldHVybnt0cmFpbDpDLnRvLnRyYWlsLG9yaWdpbjpDLnRvLm9yaWdpbixwb2ludHM6WCx0b3RhbERpc3RhbmNlOlEsYm91bmRzOnt4OltaLHFdLHk6W0csWV0sejpbQixMXX0scmF3TWluQWx0OkMudG8ucmF3TWluQWx0KyhDLmZyb20ucmF3TWluQWx0LUMudG8ucmF3TWluQWx0KSooMS0kKSxyYXdNYXhBbHQ6Qy50by5yYXdNYXhBbHQrKEMuZnJvbS5yYXdNYXhBbHQtQy50by5yYXdNYXhBbHQpKigxLSQpfX1mdW5jdGlvbiB6NChDKXtyZXR1cm4gQzwwLjU/MipDKkM6MS1NYXRoLnBvdygtMipDKzIsMikvMn1mdW5jdGlvbiBINChDLCQsSyxYLFEsTixaKXtsZXQgcT1DLmdldENvbnRleHQoIjJkIik7aWYoIXEpcmV0dXJuO2xldHtjbGllbnRXaWR0aDpHLGNsaWVudEhlaWdodDpZfT1DO2lmKEc9PT0wfHxZPT09MClyZXR1cm47bGV0IEI9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE6MSxMPU1hdGgucm91bmQoRypCKSxVPU1hdGgucm91bmQoWSpCKTtpZihDLndpZHRoIT09THx8Qy5oZWlnaHQhPT1VKUMud2lkdGg9TCxDLmhlaWdodD1VO3Euc2V0VHJhbnNmb3JtKEIsMCwwLEIsMCwwKSxxLmNsZWFyUmVjdCgwLDAsRyxZKTtsZXQgRj1xLmNyZWF0ZVJhZGlhbEdyYWRpZW50KEcqMC41LFkqMC41NSxNYXRoLm1pbihHLFkpKjAuMixHKjAuNSxZKjAuNTUsTWF0aC5tYXgoRyxZKSowLjg1KTtGLmFkZENvbG9yU3RvcCgwLCIjMWExYTFkIiksRi5hZGRDb2xvclN0b3AoMSwiIzBhMGEwYyIpLHEuZmlsbFN0eWxlPUYscS5maWxsUmVjdCgwLDAsRyxZKSxBNChxLEcsWSk7bGV0e3BvaW50czpULGJvdW5kczpffT0kO2lmKFQubGVuZ3RoPDIpcmV0dXJuO2xldCBrPTI4Kk1hdGguUEkvMTgwLHo9TWF0aC5zaW4oayksdz1NYXRoLmNvcyhrKSxFPU1hdGguc2luKFgpLHk9TWF0aC5jb3MoWCksYz0oXy54WzBdK18ueFsxXSkvMixSPShfLnpbMF0rXy56WzFdKS8yLGg9Xy54WzFdLV8ueFswXSx4PV8uelsxXS1fLnpbMF0scD1fLnlbMV0tXy55WzBdLGQ9TWF0aC5tYXgoaCx4KSoxLjA1LHU9TWF0aC5tYXgoeCp3K3AqeixoKjAuNCkqMS4xNSwkMT1HKjAuMDgsYT1ZKjAuMTgscj1NYXRoLm1pbigoRy0kMSoyKS9kLChZLWEqMikvdSkqMS40NSxnPXA8MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCxwKSksST0oTyxTLGopPT57bGV0IGk9Ty1jLHQ9ai1SLFkxPWkqeSt0KkUsWjE9LWkqRSt0KnksRjE9UypnLFMxPUYxKnctWjEqeixHMT1GMSp6K1oxKnc7cmV0dXJue3N4OkcvMitZMSpyLHN5OlkqMC41NS1TMSpyLGRlcHRoOkcxfX0sSzE9Mzgsbj1ULm1hcCgoTyk9PntsZXQgUz1JKE8ueCxPLnksTy56KSxqPUkoTy54LDAsTy56KSxpPXtzeDpTLnN4LHN5Ok1hdGgubWF4KGouc3ksUy5zeStLMSksZGVwdGg6ai5kZXB0aH07cmV0dXJue3A6Tyx0b3A6Uyxib3Q6aX19KTtmb3IobGV0IE89MTtPPG4ubGVuZ3RoO08rKyl7bGV0IFM9bltPLTFdLGo9bltPXSxpPXEuY3JlYXRlTGluZWFyR3JhZGllbnQoKFMudG9wLnN4K2oudG9wLnN4KS8yLChTLnRvcC5zeStqLnRvcC5zeSkvMiwoUy5ib3Quc3grai5ib3Quc3gpLzIsKFMuYm90LnN5K2ouYm90LnN5KS8yKTtpLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIiksaS5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLGkuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSxpLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDAsMCwwLDApIikscS5maWxsU3R5bGU9aSxxLmJlZ2luUGF0aCgpLHEubW92ZVRvKFMudG9wLnN4LFMudG9wLnN5KSxxLmxpbmVUbyhqLnRvcC5zeCxqLnRvcC5zeSkscS5saW5lVG8oai5ib3Quc3gsai5ib3Quc3kpLHEubGluZVRvKFMuYm90LnN4LFMuYm90LnN5KSxxLmNsb3NlUGF0aCgpLHEuZmlsbCgpfXEuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLHEubGluZVdpZHRoPTEuNixxLmxpbmVDYXA9InJvdW5kIixxLmxpbmVKb2luPSJyb3VuZCIscS5iZWdpblBhdGgoKTtmb3IobGV0IE89MDtPPG4ubGVuZ3RoO08rKyl7bGV0e3RvcDpTfT1uW09dO2lmKE89PT0wKXEubW92ZVRvKFMuc3gsUy5zeSk7ZWxzZSBxLmxpbmVUbyhTLnN4LFMuc3kpfXEuc3Ryb2tlKCk7bGV0IEoxPUs7cS5zdHJva2VTdHlsZT0iI2Y5ZDJhNCIscS5saW5lV2lkdGg9Mi4yLHEuYmVnaW5QYXRoKCk7bGV0IGU9ITE7Zm9yKGxldCBPPTA7TzxuLmxlbmd0aDtPKyspe2xldHtwOlMsdG9wOmp9PW5bT107aWYoUy5hcmM+SjEpYnJlYWs7aWYoIWUpcS5tb3ZlVG8oai5zeCxqLnN5KSxlPSEwO2Vsc2UgcS5saW5lVG8oai5zeCxqLnN5KX1pZihlKXEuc3Ryb2tlKCk7bGV0IHM9Wj8/TjAoJCxLKSxYMT1JKHMueCxzLnkscy56KTtpZihOKXtsZXQgaj1RJTI2MDAvMjYwMCxpPTQrMjIqaix0PTAuMjIqKDEtaiksWTE9cS5jcmVhdGVSYWRpYWxHcmFkaWVudChYMS5zeCxYMS5zeSxpKjAuNSxYMS5zeCxYMS5zeSxpKTtZMS5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLFkxLmFkZENvbG9yU3RvcCgwLjcsYHJnYmEoMjU1LDI1NSwyNTUsJHt0LnRvRml4ZWQoMyl9KWApLFkxLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDI1NSwyNTUsMjU1LDApIikscS5maWxsU3R5bGU9WTEscS5iZWdpblBhdGgoKSxxLmFyYyhYMS5zeCxYMS5zeSxpLDAsTWF0aC5QSSoyKSxxLmZpbGwoKX1xLmZpbGxTdHlsZT0iI2ZmZiIscS5iZWdpblBhdGgoKSxxLmFyYyhYMS5zeCxYMS5zeSwzLjgsMCxNYXRoLlBJKjIpLHEuZmlsbCgpfWZ1bmN0aW9uIEE0KEMsJCxLKXtDLmZpbGxTdHlsZT0icmdiYSgyNTUsMjU1LDI1NSwwLjA2KSI7Zm9yKGxldCBOPTc7TjxLO04rPTE0KWZvcihsZXQgWj03O1o8JDtaKz0xNClDLmJlZ2luUGF0aCgpLEMuYXJjKFosTiwwLjcsMCxNYXRoLlBJKjIpLEMuZmlsbCgpfWZ1bmN0aW9uIE41KEMpe2lmKEM8MTAwMClyZXR1cm5gJHtDLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeyhDLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiBrOChDKXtsZXQgJD1NYXRoLmZsb29yKEMvMTAwMCksSz1NYXRoLmZsb29yKCQvMzYwMCksWD1NYXRoLmZsb29yKCQlMzYwMC82MCksUT0kJTYwO2lmKEs+MClyZXR1cm5gJHtLfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7US50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke1h9OiR7US50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIE80KEMpe2lmKEM8PTApcmV0dXJuIuKAlCI7aWYoQz43KXJldHVybmAkeyhDKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0ICQ9MTAwMC9DLEs9TWF0aC5mbG9vcigkLzYwKSxYPU1hdGgucm91bmQoJCU2MCk7cmV0dXJuYCR7S306JHtYLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gRDgoQyl7cmV0dXJuYCR7Qy50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiBVOChDKXtsZXQgJD1DLnRyaW0oKTtpZighJClyZXR1cm4iIjtsZXQgSz0kLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoSylyZXR1cm4gS1sxXTtyZXR1cm4gJC5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/JH1hc3luYyBmdW5jdGlvbiBMMShDKXtsZXQgJD13aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4sSz17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifTtpZigkKUsuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7JH1gO3JldHVybihhd2FpdCBmZXRjaCh4MSgiZXhlYyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6Syxib2R5OkpTT04uc3RyaW5naWZ5KHtjb21tYW5kOkN9KX0pKS5qc29uKCl9ZnVuY3Rpb24gVTEoQyl7cmV0dXJuYCcke0MucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWFzeW5jIGZ1bmN0aW9uIFo1KEMsJCxLKXtsZXQgWD1hd2FpdCBDKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHskfSAke1UxKEspfSBhcHBgKTtpZihYLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6WC5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgUT1YLnN0ZG91dC50cmltKCk7aWYoIVEpcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBOPWF3YWl0IEMoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtVMShRKyIvSW5mby5wbGlzdCIpfWApLFo9e307aWYoTi5leGl0Q29kZT09PTApdHJ5e1o9SlNPTi5wYXJzZShOLnN0ZG91dCl9Y2F0Y2h7fWxldCBxLFk9KFo/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P1o/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/Wj8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoWSYmWS5sZW5ndGg+MClxPVlbWS5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgWj8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKXE9Wi5DRkJ1bmRsZUljb25GaWxlO2xldCBCPW51bGw7aWYocSl7bGV0IEw9W2Ake3F9QDN4LnBuZ2AsYCR7cX1AMngucG5nYCxgJHtxfS5wbmdgLGAke3F9NjB4NjBAM3gucG5nYCxgJHtxfTYweDYwQDJ4LnBuZ2BdLEY9KGF3YWl0IEMoYGJhc2ggLWMgJHtVMShMLm1hcCgoVCk9PmBbIC1mICR7VTEoUSsiLyIrVCl9IF0gJiYgZWNobyAke1UxKFErIi8iK1QpfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKEYpe2xldCBUPWF3YWl0IEMoYGJhc2U2NCAtaSAke1UxKEYpfWApO2lmKFQuZXhpdENvZGU9PT0wKUI9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke1Quc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpRLGRpc3BsYXlOYW1lOlouQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/Wi5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOlouQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpaLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpaLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpaLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpCfX12YXIgYjA9bmV3IE1hcDtmdW5jdGlvbiB6OChDLCQsSyl7bGV0IFg9YCR7JH06JHtLfWAsUT1iMC5nZXQoWCk7aWYoUSE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFEpO2xldCBOPVo1KEMsJCxLKS50aGVuKChaKT0+e2xldCBxPVouaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIGIwLnNldChYLHEpLHF9KS5jYXRjaCgoKT0+e3JldHVybiBiMC5zZXQoWCxudWxsKSxudWxsfSk7cmV0dXJuIGIwLnNldChYLE4pLE59ZnVuY3Rpb24gSDgoe3VkaWQ6QyxjdXJyZW50QXBwOiR9KXtsZXRbSyxYXT1BKG51bGwpLFtRLE5dPUEoITEpO2lmKFcoKCk9PntpZighJCl7WChudWxsKTtyZXR1cm59bGV0IFo9ITE7cmV0dXJuIFgoe2J1bmRsZUlkOiQuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTokLmlzUmVhY3ROYXRpdmUscGlkOiQucGlkLGxvYWRpbmc6ITB9KSxaNShMMSxDLCQuYnVuZGxlSWQpLnRoZW4oKHEpPT57aWYoWilyZXR1cm47WCh7YnVuZGxlSWQ6JC5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOiQuaXNSZWFjdE5hdGl2ZSxwaWQ6JC5waWQsbG9hZGluZzohMSwuLi5xfSl9KSwoKT0+e1o9ITB9fSxbQywkLCQ/LmJ1bmRsZUlkLCQ/LnBpZCwkPy5pc1JlYWN0TmF0aXZlXSksIUspcmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtWzEwcHhdIHAtNCB0ZXh0LXdoaXRlLzUwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjoiV2FpdGluZyBmb3IgYW4gYXBwIHRvIGNvbWUgdG8gdGhlIGZvcmVncm91bmTigKYifSk7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGZsZXggZmxleC1jb2wgZ2FwLTIuNSBweC0zIHB5LTIiLGNoaWxkcmVuOltKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9Pk4oKFopPT4hWiksY2xhc3NOYW1lOiJsZW0tdG9nZ2xlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvOTAgcHktMiBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIiwiYXJpYS1leHBhbmRlZCI6USxjaGlsZHJlbjpbSy5pY29uRGF0YVVybD9KKCJpbWciLHtzcmM6Sy5pY29uRGF0YVVybCxjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pOkooImRpdiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSJ9KSxKKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46W0suZGlzcGxheU5hbWU/P0suYnVuZGxlSWQsSy5sb2FkaW5nJiZKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQ1IGZvbnQtbm9ybWFsIixjaGlsZHJlbjoiIOKApiJ9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTpLLmJ1bmRsZUlkLGNoaWxkcmVuOksuYnVuZGxlSWR9KV19KSxKKGYxLHtvcGVuOlF9KV19KSxRJiZKKFExLHtjaGlsZHJlbjpbSy5lcnJvciYmSigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpLLmVycm9yfSksSigiZGwiLHtjbGFzc05hbWU6Im0tMCBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltKKFAwLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6Sy5zaG9ydFZlcnNpb24/YCR7Sy5zaG9ydFZlcnNpb259ICgke0suYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6Sy5sb2FkaW5nPyLigKYiOiLigJQifSksSihQMCx7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOksubWluT1M/PyhLLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksSihQMCx7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOksuZXhlY3V0YWJsZT8/KEsubG9hZGluZz8i4oCmIjoi4oCUIil9KSxKKFAwLHtsYWJlbDoiUElEIix2YWx1ZTpLLnBpZCE9bnVsbD9TdHJpbmcoSy5waWQpOiLigJQifSksSy5pc1JlYWN0TmF0aXZlJiZKKFAwLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLEooUDAse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6Sy5hcHBQYXRoPz8oSy5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpLLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57TDEoYG9wZW4gLVIgJHtVMShLLmFwcFBhdGgpfWApfSxpY29uOkooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooImxpbmUiLHt4MToiNyIseTE6IjE3Iix4MjoiMTciLHkyOiI3In0pLEooInBvbHlsaW5lIix7cG9pbnRzOiIxMCA3IDE3IDcgMTcgMTQifSldfSl9OnZvaWQgMH0pXX0pXX0pXX0pfWZ1bmN0aW9uIFAwKHtsYWJlbDpDLHZhbHVlOiQsbW9ubzpLLGFjdGlvbjpYfSl7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiZ3JvdXAgZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbSigiZHQiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzUwIHctMjEgc2hyaW5rLTAiLGNoaWxkcmVuOkN9KSxKKCJkZCIse2NsYXNzTmFtZTpgbS0wIHRleHQtd2hpdGUvOTAgZmxleC0xIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgcmVsYXRpdmUgJHtLPyJmb250LW1vbm8gdGV4dC1bMTFweF0iOiJ0ZXh0LVsxMnB4XSJ9YCx0aXRsZTokLGNoaWxkcmVuOlskLFgmJkooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCBib3R0b20tMCBwbC03IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQscmdiYSgyOCwyOCwzMCwwKV8wJSwjMWMxYzFlXzU1JSldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSx0cmFuc2Zvcm1fMC4xNXNfZWFzZV0gb3BhY2l0eS0wIHRyYW5zbGF0ZS14LTEgcG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBncm91cC1ob3Zlcjp0cmFuc2xhdGUteC0wIGdyb3VwLWhvdmVyOnBvaW50ZXItZXZlbnRzLWF1dG8iLGNoaWxkcmVuOkooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpYLm9uQ2xpY2ssdGl0bGU6WC50aXRsZSwiYXJpYS1sYWJlbCI6WC50aXRsZSxjbGFzc05hbWU6InctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZCB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46WC5pY29ufSl9KV19KV19KX12YXIgQTg9W3trZXk6ImNhbWVyYSIsbGFiZWw6IkNhbWVyYSJ9LHtrZXk6Im1pY3JvcGhvbmUiLGxhYmVsOiJNaWNyb3Bob25lIn0se2tleToicGhvdG9zIixsYWJlbDoiUGhvdG9zIn0se2tleToicGhvdG9zLWFkZCIsbGFiZWw6IkFkZCB0byBQaG90b3MifSx7a2V5OiJjb250YWN0cyIsbGFiZWw6IkNvbnRhY3RzIn0se2tleToiY2FsZW5kYXIiLGxhYmVsOiJDYWxlbmRhciJ9LHtrZXk6InJlbWluZGVycyIsbGFiZWw6IlJlbWluZGVycyJ9LHtrZXk6ImxvY2F0aW9uIixsYWJlbDoiTG9jYXRpb24ifSx7a2V5OiJsb2NhdGlvbi1hbHdheXMiLGxhYmVsOiJMb2NhdGlvbiAoQWx3YXlzKSJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gTzgoe3VkaWQ6QyxidW5kbGVJZDokfSl7bGV0W0ssWF09QSh7fSksW1EsTl09QShudWxsKSxbWixxXT1BKG51bGwpLFtHLFldPUEoITEpO1coKCk9PntYKHt9KSxxKG51bGwpfSxbJF0pO2xldCBCPVAoYXN5bmMoVSxGKT0+e2lmKCEkKXJldHVybjtsZXQgVD1gJHtVfToke0Z9YDtOKFQpLHEobnVsbCk7dHJ5e2xldCBfPWF3YWl0IEwxKGB4Y3J1biBzaW1jdGwgcHJpdmFjeSAke0N9ICR7Rn0gJHtVfSAke1UxKCQpfWApO2lmKF8uZXhpdENvZGUhPT0wKXtxKF8uc3RkZXJyLnRyaW0oKXx8YHNpbWN0bCBwcml2YWN5IGZhaWxlZCAoZXhpdCAke18uZXhpdENvZGV9KWApO3JldHVybn1YKChrKT0+KHsuLi5rLFtVXTpGPT09InJlc2V0Ij92b2lkIDA6Rn0pKX1maW5hbGx5e04obnVsbCl9fSxbQywkXSksTD1QKGFzeW5jKCk9PntpZighJClyZXR1cm47TigiX19hbGxfXyIpLHEobnVsbCk7dHJ5e2xldCBVPWF3YWl0IEwxKGB4Y3J1biBzaW1jdGwgcHJpdmFjeSAke0N9IHJlc2V0IGFsbCAke1UxKCQpfWApO2lmKFUuZXhpdENvZGUhPT0wKXtxKFUuc3RkZXJyLnRyaW0oKXx8YHNpbWN0bCBwcml2YWN5IGZhaWxlZCAoZXhpdCAke1UuZXhpdENvZGV9KWApO3JldHVybn1YKHt9KX1maW5hbGx5e04obnVsbCl9fSxbQywkXSk7aWYoISQpcmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtWzEwcHhdIHAtNCB0ZXh0LXdoaXRlLzUwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMgYXBwZWFyIG9uY2UgYW4gYXBwIGlzIGluIHRoZSBmb3JlZ3JvdW5kLiJ9KTtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gZmxleCBmbGV4LWNvbCBnYXAtMi41IHB4LTMgcHktMiIsY2hpbGRyZW46W0ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+WSgoVSk9PiFVKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOkcsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLEooInNwYW4iLHt9KSxKKGYxLHtvcGVuOkd9KV19KSxHJiZaJiZKKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgbXQtMiIsY2hpbGRyZW46Wn0pLEcmJkooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgbXQtMiIsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToibWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbCBnYXAtMSBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOkE4Lm1hcCgoe2tleTpVLGxhYmVsOkZ9KT0+e2xldCBUPUtbVV07cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB4LTAuNSBweS0xIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46Rn0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMC41IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCBwLTAuNSIscm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpGLGNoaWxkcmVuOltKKHE1LHthY3RpdmU6VD09PSJncmFudCIscGVuZGluZzpRPT09YCR7VX06Z3JhbnRgLG9uQ2xpY2s6KCk9PkIoVSwiZ3JhbnQiKSx2YXJpYW50OiJncmFudCIsdGl0bGU6IkFsbG93IixjaGlsZHJlbjpKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpKKCJwb2x5bGluZSIse3BvaW50czoiNSAxMiAxMCAxNyAxOSA3In0pfSl9KSxKKHE1LHthY3RpdmU6VD09PSJyZXZva2UiLHBlbmRpbmc6UT09PWAke1V9OnJldm9rZWAsb25DbGljazooKT0+QihVLCJyZXZva2UiKSx2YXJpYW50OiJyZXZva2UiLHRpdGxlOiJEZW55IixjaGlsZHJlbjpKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSksSigibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSldfSl9KSxKKHE1LHthY3RpdmU6ITEscGVuZGluZzpRPT09YCR7VX06cmVzZXRgLG9uQ2xpY2s6KCk9PkIoVSwicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpKKEowLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxVKX0pfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KV19KSxHJiZKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQgcHQtMiIsY2hpbGRyZW46SigiYnV0dG9uIix7b25DbGljazpMLGRpc2FibGVkOlE9PT0iX19hbGxfXyIsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InhjcnVuIHNpbWN0bCBwcml2YWN5IHJlc2V0IGFsbCIsY2hpbGRyZW46UT09PSJfX2FsbF9fIj8i4oCmIjoiUmVzZXQgYWxsIn0pfSldfSl9ZnVuY3Rpb24gcTUoe2FjdGl2ZTpDLHBlbmRpbmc6JCxvbkNsaWNrOkssdmFyaWFudDpYLHRpdGxlOlEsY2hpbGRyZW46Tn0pe2xldCBaPVg9PT0iZ3JhbnQiPyIjNGFkZTgwIjpYPT09InJldm9rZSI/IiNmODcxNzEiOiIjYTViNGZjIjtyZXR1cm4gSigiYnV0dG9uIix7b25DbGljazpLLGRpc2FibGVkOiQsdGl0bGU6USwiYXJpYS1sYWJlbCI6USxjbGFzc05hbWU6InctNiBoLTUuNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkIHAtMCBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSIsc3R5bGU6e2JhY2tncm91bmQ6Qz9gJHtafTIyYDoidHJhbnNwYXJlbnQiLGNvbG9yOkM/WjoicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIsb3BhY2l0eTokPzAuNToxfSxjaGlsZHJlbjpOfSl9dmFyIFQ0PSJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0iLE00PSJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIG0tMCIsVDg9ImJnLXBhbmVsIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLVsxMHB4XSBwLTMgdGV4dC13aGl0ZS81MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciI7ZnVuY3Rpb24gTTgoe292ZXJsYXlFbmFibGVkOkMsb25Ub2dnbGVPdmVybGF5OiR9KXtsZXR7c25hcHNob3Q6S309ejAoKSx7aGlnaGxpZ2h0ZWRLZXk6WCxzZXRIaWdobGlnaHRlZEtleTpRfT1MMigpLE49Sz8uZWxlbWVudHM/P1tdLFo9cTIoSykscT1LPy5lcnJvcnM/LlswXT8/bnVsbDtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOmAke1Q0fSBweC0zIHB5LTJgLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6TTQsY2hpbGRyZW46IkFYIFRyZWUifSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOiQsImFyaWEtcHJlc3NlZCI6QyxjbGFzc05hbWU6ImJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bNXB4XSBiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzcwIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHB4LVs3cHhdIHB5LVszcHhdIixjaGlsZHJlbjpDPyJPdmVybGF5IG9uIjoiRW5hYmxlIG92ZXJsYXkifSldfSksIUM/bnVsbDpaP0ooImRpdiIse2NsYXNzTmFtZTpUOCxjaGlsZHJlbjoiQVggdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIn0pOk4ubGVuZ3RoPT09MD9KKCJkaXYiLHtjbGFzc05hbWU6VDgsY2hpbGRyZW46cT8/IldhaXRpbmcgZm9yIGFjY2Vzc2liaWxpdHkgZGF0YeKApiJ9KTpKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEgbXQtMiBweS0yIG1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLHJvbGU6Imxpc3QiLGNoaWxkcmVuOk4ubWFwKChHLFkpPT57bGV0IEI9UTAoRyk7cmV0dXJuIEoodzQse2VsZW1lbnQ6RyxpbmRleDpZLGFjdGl2ZTpCPT09WCxvbkhpZ2hsaWdodDpRfSxCKX0pfSldfSl9dmFyIHc0PWswKGZ1bmN0aW9uKHtlbGVtZW50OiQsaW5kZXg6SyxhY3RpdmU6WCxvbkhpZ2hsaWdodDpRfSl7bGV0IE49UTAoJCksWj1HMigkLEspLHE9YCR7TWF0aC5yb3VuZCgkLmZyYW1lLndpZHRoKX14JHtNYXRoLnJvdW5kKCQuZnJhbWUuaGVpZ2h0KX1gLEc9W1oubGFiZWwsWi5yb2xlfHxaLnR5cGV8fCJlbGVtZW50IixxXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybiBKKCJkaXYiLHtyb2xlOiJsaXN0aXRlbSIsdGFiSW5kZXg6MCwiZGF0YS1heC1rZXkiOk4sdGl0bGU6Ryxvbk1vdXNlRW50ZXI6KCk9PlEoTiksb25Nb3VzZUxlYXZlOigpPT5RKG51bGwpLG9uRm9jdXM6KCk9PlEoTiksb25CbHVyOigpPT5RKG51bGwpLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgcHktMSBweC0wLjUgbWluLXctMCAke1g/ImJnLXdoaXRlL1swLjA2XSI6IiJ9YCxjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46JC5sYWJlbHx8JC5yb2xlfHwiVW5sYWJlbGVkIn0pLEooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvNDUgZm9udC1tb25vIHRleHQtWzEwcHhdIixjaGlsZHJlbjokLnJvbGV8fCQudHlwZXx8ImVsZW1lbnQifSldfSksSigiY29kZSIse2NsYXNzTmFtZToic2hyaW5rLTAgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRleHQtWzEwcHhdIHB4LTEuNSBweS1bM3B4XSIsY2hpbGRyZW46cX0pXX0pfSwoQywkKT0+Qy5pbmRleD09PSQuaW5kZXgmJkMuYWN0aXZlPT09JC5hY3RpdmUmJkMub25IaWdobGlnaHQ9PT0kLm9uSGlnaGxpZ2h0JiZZMihDLmVsZW1lbnQsJC5lbGVtZW50KSk7dmFyIGI0PW5ldyBTZXQoWyJpbWFnZS9qcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvZ2lmIiwiaW1hZ2UvaGVpYyIsImltYWdlL2hlaWYiLCJpbWFnZS93ZWJwIiwidmlkZW8vbXA0IiwidmlkZW8vcXVpY2t0aW1lIl0pO2Z1bmN0aW9uIFcwKEMpe2xldCAkPUMubmFtZSxLPSQubGFzdEluZGV4T2YoIi4iKTtpZihLPj0wKXJldHVybiAkLnNsaWNlKEsrMSkudG9Mb3dlckNhc2UoKTtpZihDLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuIm1wNCI7cmV0dXJuImpwZyJ9ZnVuY3Rpb24gdzgoQyl7aWYoVzAoQyk9PT0iaXBhIilyZXR1cm4iaXBhIjtpZihiNC5oYXMoQy50eXBlKSlyZXR1cm4ibWVkaWEiO3JldHVybiBudWxsfWZ1bmN0aW9uIGI4KEMpe2xldCAkPW5ldyBVaW50OEFycmF5KEMpLEs9IiI7Zm9yKGxldCBYPTA7WDwkLmxlbmd0aDtYKyspSys9U3RyaW5nLmZyb21DaGFyQ29kZSgkW1hdKTtyZXR1cm4gYnRvYShLKX1hc3luYyBmdW5jdGlvbiBQOChDLCQsSyxYKXtpZihDLnNpemU+NTI0Mjg4MDAwKXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBRPWAvdG1wLyR7JH0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke0t9YCxOPWF3YWl0IEMuYXJyYXlCdWZmZXIoKSxaPWI4KE4pO2ZvcihsZXQgcT0wO3E8Wi5sZW5ndGg7cSs9MjYyMTQ0KXtsZXQgRz1aLnNsaWNlKHEscSsyNjIxNDQpLEI9YXdhaXQgWChgYmFzaCAtYyAnZWNobyAke0d9IHwgYmFzZTY0IC1kICR7cT09PTA/Ij4iOiI+PiJ9ICR7UX0nYCk7aWYoQi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoQi5zdGRlcnJ8fGBXcml0ZSBmYWlsZWQgKGV4aXQgJHtCLmV4aXRDb2RlfSlgKX1yZXR1cm4gUX1hc3luYyBmdW5jdGlvbiBXOChDLCQsSyxYLFEpe2lmKEMuc2l6ZT41MjQyODgwMDApdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IE49JD09PSJpcGEiPyJpcGEiOlcwKEMpLHE9YC90bXAvJHskPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtOfWA7dHJ5e1EoMCk7bGV0IEc9YXdhaXQgQy5hcnJheUJ1ZmZlcigpLFk9YjgoRyksQj0wO2ZvcihsZXQgRj0wO0Y8WS5sZW5ndGg7Ris9MjYyMTQ0KXtsZXQgVD1ZLnNsaWNlKEYsRisyNjIxNDQpLGs9YXdhaXQgSyhgYmFzaCAtYyAnZWNobyAke1R9IHwgYmFzZTY0IC1kICR7Rj09PTA/Ij4iOiI+PiJ9ICR7cX0nYCk7aWYoay5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3Ioay5zdGRlcnJ8fGBXcml0ZSBmYWlsZWQgKGV4aXQgJHtrLmV4aXRDb2RlfSlgKTtsZXQgej1NYXRoLm1pbihGKzI2MjE0NCxZLmxlbmd0aCksdz1NYXRoLmZsb29yKHovWS5sZW5ndGgqMTAwKTtpZih3IT09QilCPXcsUSh6L1kubGVuZ3RoKX1RKG51bGwpO2xldCBMPSQ9PT0iaXBhIj9geGNydW4gc2ltY3RsIGluc3RhbGwgJHtYfSAke3F9YDpgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7WH0gJHtxfWAsVT1hd2FpdCBLKEwpO2lmKFUuZXhpdENvZGUhPT0wKXtsZXQgRj0kPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoVS5zdGRlcnJ8fGAke0Z9IGZhaWxlZCAoZXhpdCAke1UuZXhpdENvZGV9KWApfX1maW5hbGx5e0soYGJhc2ggLWMgJ3JtIC1mICR7cX0nYCkuY2F0Y2goKCk9Pnt9KX19dmFyIFA0PTMwMDAsVzQ9MjA5NzE1MjAwLHk0PSJMYXJnZSB2aWRlbyAoPjIwMCBNQikg4oCUIG1heSBzdHV0dGVyIG9uIHNoYXJlZCBtZW1vcnkiLEU4PSJIRUlDIGRlY29kZSBmYWlsZWQg4oCUIGV4cG9ydCBhcyBKUEVHIG9yIFBORyBhbmQgcmV0cnkiO2Z1bmN0aW9uIEU0KEMsJCl7aWYoJClyZXR1cm4iYWN0aXZlIjtpZihDPT09ImFjdGl2ZSIpcmV0dXJuImRpc2Nvbm5lY3RlZCI7aWYoQz09PSJkaXNjb25uZWN0ZWQiKXJldHVybiJyZWFkeSI7cmV0dXJuIEN9ZnVuY3Rpb24gSTQoQyl7aWYoIUMuaW5qZWN0ZWQpcmV0dXJuInBsYXkiO2lmKEMuc291cmNlPT09InBsYWNlaG9sZGVyIilyZXR1cm4icGxheSI7aWYoQy5idW5kbGVJZCYmIUMuZm9yZWdyb3VuZElzSW5qZWN0ZWQpcmV0dXJuImF0dGFjaCI7cmV0dXJuInN0b3AifWZ1bmN0aW9uIFM0KEMpe3JldHVybiBDLnNwbGl0KGAKYCkubWFwKCgkKT0+JC50cmltKCkpLmZpbHRlcihCb29sZWFuKS5mbGF0TWFwKCgkKT0+e2xldCBLPSQuaW5kZXhPZigiXHQiKTtpZihLPD0wKXJldHVybltdO2xldCBYPSQuc2xpY2UoMCxLKS50cmltKCksUT0kLnNsaWNlKEsrMSkudHJpbSgpO2lmKCFYfHwhUSlyZXR1cm5bXTtyZXR1cm5be2lkOlgsbmFtZTpRfV19KX12YXIgaDQ9bmV3IFNldChbIm1wNCIsIm00diIsIm1vdiIsInF0IiwiYXZpIiwibWt2Iiwid2VibSIsIm1wZyIsIm1wZWciLCIzZ3AiLCIzZzIiLCJ0cyIsIndtdiJdKTtmdW5jdGlvbiBJOChDKXtpZihDLnR5cGUmJkMudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4hMDtsZXQgJD0oQy5uYW1lPz8iIikudG9Mb3dlckNhc2UoKSxLPSQubGFzdEluZGV4T2YoIi4iKTtpZihLPDApcmV0dXJuITE7cmV0dXJuIGg0LmhhcygkLnNsaWNlKEsrMSkpfWZ1bmN0aW9uIHg0KEMpe3JldHVybiBJOChDKSYmQy5zaXplPlc0fWZ1bmN0aW9uIHY0KEMpe2xldCAkPShDLnR5cGU/PyIiKS50b0xvd2VyQ2FzZSgpO2lmKCQ9PT0iaW1hZ2UvaGVpYyJ8fCQ9PT0iaW1hZ2UvaGVpZiIpcmV0dXJuITA7bGV0IEs9KEMubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIEsuZW5kc1dpdGgoIi5oZWljIil8fEsuZW5kc1dpdGgoIi5oZWlmIil9ZnVuY3Rpb24gZzQoe3Jhd01lc3NhZ2U6QyxsYXN0RmlsZUlzSGVpYzokLHNvdXJjZTpLfSl7aWYoJCYmKEs9PT0iaW1hZ2UifHxLPT09InZpZGVvIikpcmV0dXJuIEU4O3JldHVybiBDfWZ1bmN0aW9uIFI0KHtzdGF0ZTpDfSl7bGV0ICQ9Qz09PSJhY3RpdmUiPyJBY3RpdmUiOkM9PT0iZGlzY29ubmVjdGVkIj8iRGlzY29ubmVjdGVkIjoiUmVhZHkiLEs9Qz09PSJhY3RpdmUiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctc3VjY2Vzcy1lbWVyYWxkIFtib3gtc2hhZG93OjBfMF82cHhfcmdiYSg3NCwyMjIsMTI4LDAuNyldIjpDPT09ImRpc2Nvbm5lY3RlZCI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1kYW5nZXItc29mdCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoMjQ4LDExMywxMTMsMC41NSldIjpudWxsO3JldHVybiBKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBqdXN0aWZ5LXNlbGYtZW5kIGxlYWRpbmctbm9uZSIsImRhdGEtY2FtZXJhLXBpbGwtc3RhdGUiOkMsY2hpbGRyZW46W0smJkooInNwYW4iLHtjbGFzc05hbWU6S30pLCRdfSl9ZnVuY3Rpb24gbTQoKXtyZXR1cm4gSigicCIse2NsYXNzTmFtZToibS0wIHRleHQtY2VudGVyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsImRhdGEtY2FtZXJhLXRlc3QtcGF0dGVybi1oaW50IjohMCxjaGlsZHJlbjoiVGVzdC1wYXR0ZXJuIGZlZWQifSl9ZnVuY3Rpb24gajQoe21vZGU6QyxmaWxlTmFtZTokLHdlYmNhbU5hbWU6Syxzb3VyY2VLaW5kOlh9KXtpZihDPT09InVwbG9hZGluZyIpcmV0dXJuIEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiJVcGxvYWRpbmfigKYifSk7aWYoQz09PSJmaWxlIilyZXR1cm4gSihRMSx7Y2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjpYPT09InZpZGVvIj8iVmlkZW8iOiJJbWFnZSJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46JD8/IiJ9KV19KTtpZihDPT09IndlYmNhbSIpcmV0dXJuIEooUTEse2NoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46IldlYmNhbSJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46Sz8/IiJ9KV19KTtyZXR1cm4gSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS84NSBmb250LW1lZGl1bSIsY2hpbGRyZW46IlNlbGVjdCBvciBkcm9wIG1lZGlhIn0pfWZ1bmN0aW9uIHk4KHtraW5kOkMsbWVzc2FnZTokfSl7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZTpDPT09Indhcm5pbmciPyJiZy13YXJuaW5nLzEwIGJvcmRlciBib3JkZXItd2FybmluZy8yNSB0ZXh0LXdhcm5pbmctc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIjoiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyIsImRhdGEtY2FtZXJhLWJhbm5lci1raW5kIjpDLHJvbGU6Qz09PSJlcnJvciI/ImFsZXJ0Ijoic3RhdHVzIixjaGlsZHJlbjokfSl9ZnVuY3Rpb24gUzgoe3VkaWQ6QyxidW5kbGVJZDokfSl7bGV0W0ssWF09QSghMSksW1EsTl09QSgicGxhY2Vob2xkZXIiKSxbWixxXT1BKCIiKSxbRyxZXT1BKG51bGwpLFtCLExdPUEoITEpLFU9digwKSxbRixUXT1BKCExKSxbXyxrXT1BKCExKSx6PXYobnVsbCksW3csRV09QShbXSksW3ksY109QSghMSksW1IsaF09QSgiIiksW3gscF09QSgib2ZmIiksW2QsdV09QShudWxsKSxbJDEsYV09QShudWxsKSxyPWQhPT1udWxsfHwkMSE9PW51bGwsW2csSV09QShudWxsKSxbSzEsbl09QShudWxsKSxbLEoxXT1BKG51bGwpLFtlLHNdPUEoITEpLFtYMSxPXT1BKCJyZWFkeSIpLFtTLGpdPUEoKCk9Pm5ldyBTZXQpLFtpLHRdPUEobnVsbCksW1kxLFoxXT1BKG51bGwpLEYxPXYoITEpLFMxPXYoITEpLEcxPXYoIm9mZiIpLFAxPXYoITEpLEMxPUgxKCgpPT57bGV0IEg9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIUgpcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KEgpKXJldHVybmBidW4gJHtVMShIKX1gO2lmKC9cLmpzJC8udGVzdChIKSlyZXR1cm5gbm9kZSAke1UxKEgpfWA7cmV0dXJuIFUxKEgpfSxbXSkscTE9UChhc3luYygpPT57bGV0IEg9YXdhaXQgTDEoYCR7QzF9IGNhbWVyYSBzdGF0dXMgLWQgJHtDfWApO2lmKEguZXhpdENvZGUhPT0wKXJldHVybiBudWxsO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShILnN0ZG91dC50cmltKCkpfWNhdGNoe3JldHVybiBudWxsfX0sW0MxLENdKSxoMT12KGFzeW5jKCk9Pnt9KSxSMT12KCQpO1coKCk9PntSMS5jdXJyZW50PSR9LFskXSksVygoKT0+e2xldCBIPSExO3JldHVybihhc3luYygpPT57bGV0IG09YXdhaXQgcTEoKTtpZihIfHwhbXx8IW0uYWxpdmUpcmV0dXJuO1MxLmN1cnJlbnQ9ITA7bGV0IG89bS5zb3VyY2U7aWYobz09PSJwbGFjZWhvbGRlciJ8fG89PT0id2ViY2FtInx8bz09PSJpbWFnZSJ8fG89PT0idmlkZW8iKU4obyk7aWYoKG89PT0iaW1hZ2UifHxvPT09InZpZGVvIikmJm0uYXJnKXEobS5hcmcpLFkobS5hcmcuc3BsaXQoIi8iKS5wb3AoKT8/bnVsbCk7aWYobz09PSJ3ZWJjYW0iJiZtLmFyZyloKG0uYXJnKSxoMS5jdXJyZW50KCk7bGV0IFYxPW0ubWlycm9yPT09Im9uIj8ib24iOiJvZmYiO3AoVjEpLEcxLmN1cnJlbnQ9VjEsdChtLmhlbHBlclBpZD8/bnVsbCkscyghMCk7bGV0IGsxPUFycmF5LmlzQXJyYXkobS5idW5kbGVJZHMpP20uYnVuZGxlSWRzOltdO2lmKGsxLmxlbmd0aD4wKWoobmV3IFNldChrMSkpO2xldCBfMT1SMS5jdXJyZW50LGIxPW8mJm8hPT0icGxhY2Vob2xkZXIiO08oXzEmJmsxLmluY2x1ZGVzKF8xKSYmYjE/ImFjdGl2ZSI6InJlYWR5IiksSjEoYFJlYXR0YWNoZWQg4oaSICR7bz8/InJ1bm5pbmcgaGVscGVyIn0ke20uYXJnP2AgKCR7bS5hcmd9KWA6IiJ9YCl9KSgpLCgpPT57SD0hMH19LFtDLHExXSksVygoKT0+e2xldCBIPSExLG09ITEsbz1udWxsLFYxPWFzeW5jKCk9PntpZihIfHxtKXJldHVybjtpZih0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilyZXR1cm47bT0hMDt0cnl7bGV0IF8xPWF3YWl0IHExKCk7aWYoSClyZXR1cm47bGV0IGIxPSEhXzE/LmFsaXZlLHAwPUFycmF5LmlzQXJyYXkoXzE/LmJ1bmRsZUlkcyk/XzEuYnVuZGxlSWRzOm51bGwseTA9ISEkJiYocDA/cDAuaW5jbHVkZXMoJCk6Uy5oYXMoJCkpLEwwPV8xPy5zb3VyY2U/P251bGwsVjA9ZSYmYjEmJnkwJiYhIShMMCYmTDAhPT0icGxhY2Vob2xkZXIiKSYmKGk9PW51bGx8fF8xPy5oZWxwZXJQaWQ9PT1pKTtpZihPKChpMSk9PkU0KGkxLFYwKSksIWIxKXMoKGkxKT0+e2lmKCFpMSlyZXR1cm4gaTE7cmV0dXJuIGoobmV3IFNldCksdChudWxsKSxHMS5jdXJyZW50PSJvZmYiLCExfSk7ZWxzZSBpZihlJiZpIT1udWxsJiZfMT8uaGVscGVyUGlkIT09aSlzKCExKSxqKG5ldyBTZXQpLHQobnVsbCksRzEuY3VycmVudD0ib2ZmIjtlbHNlIGlmKGIxJiZBcnJheS5pc0FycmF5KF8xPy5idW5kbGVJZHMpKXtsZXQgaTE9XzEuYnVuZGxlSWRzO2ooKHoyKT0+e2lmKHoyLnNpemU9PT1pMS5sZW5ndGgmJmkxLmV2ZXJ5KChuOCk9PnoyLmhhcyhuOCkpKXJldHVybiB6MjtyZXR1cm4gbmV3IFNldChpMSl9KX19ZmluYWxseXttPSExfX07bz1zZXRJbnRlcnZhbCgoKT0+e1YxKCl9LFA0KTtsZXQgazE9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0idmlzaWJsZSIpVjEoKX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixrMSk7cmV0dXJuKCk9PntpZihIPSEwLG8pY2xlYXJJbnRlcnZhbChvKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGsxKX19LFtxMSxlLGksJCxTXSk7bGV0IFcxPVAoYXN5bmMoKT0+e2MoITApLEkobnVsbCk7dHJ5e2xldCBIPWF3YWl0IEwxKGAke0MxfSBjYW1lcmEgLS1saXN0LXdlYmNhbXNgKTtpZihILmV4aXRDb2RlIT09MCl7SShILnN0ZGVyci50cmltKCl8fGAtLWxpc3Qtd2ViY2FtcyBmYWlsZWQgKCR7SC5leGl0Q29kZX0pYCk7cmV0dXJufWxldCBtPVM0KEguc3Rkb3V0KTtpZihFKG0pLG0ubGVuZ3RoPjAmJiFSKWgobVswXS5pZCl9ZmluYWxseXtjKCExKX19LFtSLEMxXSk7VygoKT0+e2gxLmN1cnJlbnQ9VzF9LFtXMV0pLFcoKCk9PntpZihfJiZ3Lmxlbmd0aD09PTAmJiF5KVcxKCl9LFtfLHcubGVuZ3RoLHksVzFdKTtsZXQgbTE9UCgoSCk9PntJKGc0KHtyYXdNZXNzYWdlOkgsbGFzdEZpbGVJc0hlaWM6RjEuY3VycmVudCxzb3VyY2U6UX0pKX0sW1FdKSxxMD1QKGFzeW5jKEgsbSxvKT0+e2xldCBWMT1IPT09ImltYWdlInx8SD09PSJ2aWRlbyIsazE9WyJjYW1lcmEiLCJzd2l0Y2giLFYxPyJmaWxlIjpIXTtpZihIPT09IndlYmNhbSImJm0pazEucHVzaChVMShtKSk7aWYoVjEpe2lmKCFvLnRyaW0oKSlyZXR1cm4gSSgiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKSwhMTtrMS5wdXNoKFUxKG8udHJpbSgpKSl9azEucHVzaCgiLWQiLEMsIi0tcXVpZXQiKTtsZXQgXzE9YXdhaXQgTDEoYCR7QzF9ICR7azEuam9pbigiICIpfWApO2lmKF8xLmV4aXRDb2RlIT09MClyZXR1cm4gbTEoXzEuc3RkZXJyLnRyaW0oKXx8XzEuc3Rkb3V0LnRyaW0oKXx8YHN3aXRjaCBmYWlsZWQgKCR7XzEuZXhpdENvZGV9KWApLCExO0YxLmN1cnJlbnQ9ITE7dHJ5e2xldCBiMT1KU09OLnBhcnNlKF8xLnN0ZG91dC50cmltKCkpO0oxKGBTd2l0Y2hlZCDihpIgJHtiMS5zb3VyY2U/P0h9JHtiMS5hcmc/YCAoJHtiMS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7SjEoYFN3aXRjaGVkIOKGkiAke0h9YCl9cmV0dXJuITB9LFtDLEMxLG0xXSksdjE9UChhc3luYygpPT57aWYoISQpcmV0dXJuO3UoImluamVjdCIpLEkobnVsbCksSjEobnVsbCk7dHJ5e2xldCBIPVsiY2FtZXJhIixVMSgkKSwiLWQiLEMsIi0tcXVpZXQiXTtpZihRPT09ImltYWdlInx8UT09PSJ2aWRlbyIpe2lmKCFaLnRyaW0oKSl7SSgiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKTtyZXR1cm59SC5wdXNoKCItLWZpbGUiLFUxKFoudHJpbSgpKSl9ZWxzZSBpZihRPT09IndlYmNhbSIpaWYoUilILnB1c2goIi0td2ViY2FtIixVMShSKSk7ZWxzZSBILnB1c2goIi0td2ViY2FtIik7SC5wdXNoKCItLW1pcnJvciIseCk7bGV0IG09YXdhaXQgTDEoYCR7QzF9ICR7SC5qb2luKCIgIil9YCk7aWYobS5leGl0Q29kZSE9PTApe20xKG0uc3RkZXJyLnRyaW0oKXx8bS5zdGRvdXQudHJpbSgpfHxgaW5qZWN0IGZhaWxlZCAoJHttLmV4aXRDb2RlfSlgKTtyZXR1cm59RjEuY3VycmVudD0hMTtsZXQgbz1udWxsO3RyeXtsZXQgVjE9SlNPTi5wYXJzZShtLnN0ZG91dC50cmltKCkpO289VjEuaGVscGVyUGlkPz9udWxsO2xldCBrMT1WMS5oZWxwZXJSZWxhdW5jaGVkPT09ITE/IkF0dGFjaGVkIjoiSW5qZWN0ZWQiLF8xPVYxLnBpZD9gIHBpZCAke1YxLnBpZH1gOiIiLGIxPVYxLmhlbHBlclBpZD9gLCBoZWxwZXIgcGlkICR7VjEuaGVscGVyUGlkfWA6IiI7SjEoYCR7azF9ICR7VjEuc291cmNlPz9RfSBpbnRvICR7JH0ke18xfSR7YjF9YCl9Y2F0Y2h7SjEobS5zdGRvdXQudHJpbSgpfHwiSW5qZWN0ZWQuIil9cyghMCksTyhRPT09InBsYWNlaG9sZGVyIj8icmVhZHkiOiJhY3RpdmUiKSx0KG8pLGooKFYxKT0+VjEuaGFzKCQpP1YxOm5ldyBTZXQoVjEpLmFkZCgkKSksRzEuY3VycmVudD14fWZpbmFsbHl7dShudWxsKX19LFskLEMsUSxaLFIseCxDMSxtMV0pLFQxPWU/YCR7UX06OiR7UT09PSJ3ZWJjYW0iP1I6IiJ9Ojoke1E9PT0iaW1hZ2UifHxRPT09InZpZGVvIj9aOiIifWA6bnVsbCxBMT0hISQmJlMuaGFzKCQpLGoxPUExJiZRIT09InBsYWNlaG9sZGVyIjtXKCgpPT57aWYoIWoxKXtQMS5jdXJyZW50PSExO3JldHVybn1pZihQMS5jdXJyZW50KXJldHVybjtQMS5jdXJyZW50PSEwLFgoITApfSxbajFdKSxXKCgpPT57aWYoIVkxKXJldHVybjtpZighJHx8cnx8RilyZXR1cm47aWYoUSE9PSJ3ZWJjYW0ifHxSIT09WTEpcmV0dXJuO2lmKFoxKG51bGwpLGUpcmV0dXJuO3YxKCl9LFtZMSwkLHIsRixRLFIsZSx2MV0pLFcoKCk9PntpZighZSlyZXR1cm47aWYoKFE9PT0iaW1hZ2UifHxRPT09InZpZGVvIikmJiFaLnRyaW0oKSlyZXR1cm47aWYoUT09PSJ3ZWJjYW0iJiYhUilyZXR1cm47aWYoUzEuY3VycmVudCl7UzEuY3VycmVudD0hMTtyZXR1cm59bGV0IEg9ITE7cmV0dXJuKGFzeW5jKCk9PnthKCJzd2l0Y2giKSxJKG51bGwpO3RyeXtpZihIKXJldHVybjthd2FpdCBxMChRLFIsWil9ZmluYWxseXtpZighSClhKG51bGwpfX0pKCksKCk9PntIPSEwfX0sW1QxXSksVygoKT0+e2lmKCFlKXJldHVybjtpZihHMS5jdXJyZW50PT09eClyZXR1cm47bGV0IEg9eCxtPSExO3JldHVybihhc3luYygpPT57YSgibWlycm9yIiksSShudWxsKTt0cnl7bGV0IG89YXdhaXQgTDEoYCR7QzF9IGNhbWVyYSBtaXJyb3IgJHtIfSAtZCAke0N9IC0tcXVpZXRgKTtpZihtKXJldHVybjtpZihvLmV4aXRDb2RlIT09MCl7SShvLnN0ZGVyci50cmltKCl8fG8uc3Rkb3V0LnRyaW0oKXx8YG1pcnJvciBmYWlsZWQgKCR7by5leGl0Q29kZX0pYCk7cmV0dXJufUcxLmN1cnJlbnQ9SCxKMShgTWlycm9yIOKGkiAke0h9YCl9ZmluYWxseXtpZighbSlhKG51bGwpfX0pKCksKCk9PnttPSEwfX0sW3gsZV0pO2xldCBDMD1QKGFzeW5jKCk9Pnt1KCJzdG9wIiksSShudWxsKTt0cnl7bGV0IEg9YXdhaXQgTDEoYCR7QzF9IGNhbWVyYSAtLXN0b3Atd2ViY2FtIC1kICR7Q31gKTtpZihILmV4aXRDb2RlIT09MCl7SShILnN0ZGVyci50cmltKCl8fGBzdG9wLXdlYmNhbSBmYWlsZWQgKCR7SC5leGl0Q29kZX0pYCk7cmV0dXJufUoxKCJDYW1lcmEgaGVscGVyIHN0b3BwZWQuIikscyghMSksTygicmVhZHkiKSxqKG5ldyBTZXQpLEcxLmN1cnJlbnQ9Im9mZiJ9ZmluYWxseXt1KG51bGwpfX0sW0MsQzFdKSx5MT1QKGFzeW5jKEgpPT57bGV0IG09djQoe3R5cGU6SC50eXBlLG5hbWU6SC5uYW1lfSksbz1ILnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIil8fG0sVjE9SC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpfHxJOCh7dHlwZTpILnR5cGUsbmFtZTpILm5hbWV9KTtpZighbyYmIVYxKXtGMS5jdXJyZW50PSExLEkoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtILnR5cGV8fEgubmFtZX1gKTtyZXR1cm59aWYoVCghMCksSShudWxsKSxuKG51bGwpLHg0KHt0eXBlOkgudHlwZSxuYW1lOkgubmFtZSxzaXplOkguc2l6ZX0pKW4oeTQpO0YxLmN1cnJlbnQ9bTt0cnl7bGV0IGsxPVcwKEgpLF8xPWF3YWl0IFA4KEgsInNlcnZlLXNpbS1jYW1zcmMiLGsxLEwxKTtZKEgubmFtZSksTihWMT8idmlkZW8iOiJpbWFnZSIpLHEoXzEpLEoxKGBMb2FkZWQgJHtILm5hbWV9YCl9Y2F0Y2goazEpe2lmKEYxLmN1cnJlbnQpSShFOCk7ZWxzZSBJKGsxPy5tZXNzYWdlPz8iVXBsb2FkIGZhaWxlZCIpfWZpbmFsbHl7VCghMSl9fSxbXSksJDA9UChhc3luYyhIKT0+e0gucHJldmVudERlZmF1bHQoKSxILnN0b3BQcm9wYWdhdGlvbigpLFUuY3VycmVudD0wLEwoITEpO2xldCBtPUguZGF0YVRyYW5zZmVyPy5maWxlcz8uWzBdO2lmKG0pYXdhaXQgeTEobSl9LFt5MV0pLEswPVAoKCk9PntOKCJwbGFjZWhvbGRlciIpLHEoIiIpLFkobnVsbCksSShudWxsKSxuKG51bGwpLEYxLmN1cnJlbnQ9ITF9LFtdKSxnMT1QKCgpPT57ei5jdXJyZW50Py5jbGljaygpfSxbXSksWTA9UChhc3luYyhIKT0+e2xldCBtPUgudGFyZ2V0LG89bS5maWxlcz8uWzBdO2lmKG0udmFsdWU9IiIsbylhd2FpdCB5MShvKX0sW3kxXSk7VygoKT0+e2lmKCFfKXJldHVybjtsZXQgSD0obSk9PntsZXQgbz1tLnRhcmdldDtpZihvIGluc3RhbmNlb2YgRWxlbWVudCYmby5jbG9zZXN0KCJbZGF0YS1jYW1lcmEtc291cmNlLW1lbnVdIikpcmV0dXJuO2soITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsSCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEgpfSxbX10pO2xldCBNMT1QKChIKT0+e2lmKGgoSC5pZCksTigid2ViY2FtIiksWShudWxsKSxJKG51bGwpLEYxLmN1cnJlbnQ9ITEsayghMSksJClaMShILmlkKX0sWyRdKSxHMD1QKCgpPT57cCgoSCk9Pkg9PT0ib24iPyJvZmYiOiJvbiIpfSxbXSksYzE9IWV8fFE9PT0icGxhY2Vob2xkZXIiLE4xPVAoKEgpPT57aWYoSC5wcmV2ZW50RGVmYXVsdCgpLFUuY3VycmVudCsrLFUuY3VycmVudD09PTEpTCghMCl9LFtdKSx3MT1QKChIKT0+e2lmKEgucHJldmVudERlZmF1bHQoKSxILmRhdGFUcmFuc2ZlcilILmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW10pLGExPVAoKEgpPT57aWYoSC5wcmV2ZW50RGVmYXVsdCgpLFUuY3VycmVudC0tLFUuY3VycmVudDw9MClVLmN1cnJlbnQ9MCxMKCExKX0sW10pLGwxPUk0KHtidW5kbGVJZDokLGluamVjdGVkOmUsc291cmNlOlEsZm9yZWdyb3VuZElzSW5qZWN0ZWQ6QTF9KSxFMT1sMT09PSJzdG9wIj97bGFiZWw6ZD09PSJzdG9wIj8iU3RvcHBpbmfigKYiOiJTdG9wIixvbkNsaWNrOkMwLGtpbmQ6InN0b3AifTpsMT09PSJhdHRhY2giP3tsYWJlbDpkPT09ImluamVjdCI/IkluamVjdGluZ+KApiI6YEluamVjdCAkeyR9YCxvbkNsaWNrOnYxLGtpbmQ6ImF0dGFjaCJ9OntsYWJlbDpkPT09ImluamVjdCI/IlN0YXJ0aW5n4oCmIjoiUGxheSIsb25DbGljazp2MSxraW5kOiJwbGF5In0sWDA9bDE9PT0ic3RvcCI/Rnx8ZCE9PW51bGw6ISR8fEZ8fGQhPT1udWxsLFY9UT09PSJwbGFjZWhvbGRlciIsRD1RPT09IndlYmNhbSIsTT0oUT09PSJpbWFnZSJ8fFE9PT0idmlkZW8iKSYmISFHLGI9RD93LmZpbmQoKEgpPT5ILmlkPT09Uik/Lm5hbWU/P1I/PyJXZWJjYW0iOm51bGwsZj1GPyJ1cGxvYWRpbmciOk0/ImZpbGUiOkQ/IndlYmNhbSI6InBsYWNlaG9sZGVyIjtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gZmxleCBmbGV4LWNvbCBnYXAtMi41IHB4LTMgcHktMiIsY2hpbGRyZW46W0ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+WCgoSCk9PiFIKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOkssY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkNhbWVyYSJ9KSxKKFI0LHtzdGF0ZTpYMX0pLEooZjEse29wZW46S30pXX0pLEsmJkooImRpdiIse29uRHJhZ0VudGVyOk4xLG9uRHJhZ092ZXI6dzEsb25EcmFnTGVhdmU6YTEsb25Ecm9wOiQwLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMi41IixjaGlsZHJlbjpbSigicCIse2NsYXNzTmFtZToibS0wIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46IlJlcGxhY2VzIHRoZSBzaW11bGF0b3IncyBjYW1lcmEgZmVlZCBieSBpbmplY3RpbmcgYSBkeWxpYiBhdCBhcHAgbGF1bmNoIGFuZCBzdHJlYW1pbmcgZnJhbWVzIGludG8gc2hhcmVkIG1lbW9yeS4gUGljayBtZWRpYSBvciBhIHdlYmNhbSwgdGhlbiBQbGF5IHRvIGluamVjdCBpbnRvIHRoZSBmb3JlZ3JvdW5kIGFwcC4ifSksSigiaW5wdXQiLHtyZWY6eix0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyosdmlkZW8vKiIsY2xhc3NOYW1lOiJoaWRkZW4iLG9uQ2hhbmdlOlkwfSksSigiZGl2Iix7b25DbGljazooSCk9PntpZighVilyZXR1cm47aWYoSC50YXJnZXQuY2xvc2VzdCgiW2RhdGEtY2xlYXItbWVkaWFdIikpcmV0dXJuO2cxKCl9LHRpdGxlOlY/Ik5vIHNvdXJjZSBzZWxlY3RlZCDigJQgUGxheSB1c2VzIGEgdGVzdC1wYXR0ZXJuIGZlZWQuIENsaWNrIHRvIHBpY2sgYW4gaW1hZ2UvdmlkZW8sIG9yIGRyb3Agb25lIGhlcmUuIjpEP2BTb3VyY2U6ICR7Yn1gOmBTb3VyY2U6ICR7Rz8/UX1gLGNsYXNzTmFtZTpbInJlbGF0aXZlIG1pbi1oLVs0NHB4XSBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMi41IHB4LTMuNSBweS0yLjUgcm91bmRlZC1bN3B4XSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLVtib3JkZXItY29sb3IsYmFja2dyb3VuZF0gZHVyYXRpb24tMTUwIixWPyJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEyIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCIsQj8iIWJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4wOCldICFib3JkZXItW3JnYmEoMTAsMTMyLDI1NSwwLjYpXSI6IiIsRj8iY3Vyc29yLXByb2dyZXNzIjpWPyJjdXJzb3ItcG9pbnRlciI6ImN1cnNvci1kZWZhdWx0Il0uam9pbigiICIpLGNoaWxkcmVuOltKKGo0LHttb2RlOmYsZmlsZU5hbWU6Ryx3ZWJjYW1OYW1lOmIsc291cmNlS2luZDpRfSksIVYmJiFGJiZKKCJidXR0b24iLHsiZGF0YS1jbGVhci1tZWRpYSI6ITAsb25DbGljazooSCk9PntILnN0b3BQcm9wYWdhdGlvbigpLEswKCl9LGNsYXNzTmFtZToic2hyaW5rLTAgdy01IGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNvdXJjZSIsdGl0bGU6IkNsZWFyIOKGkiBwbGFjZWhvbGRlciIsY2hpbGRyZW46Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLEooImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pXX0pfSldfSksViYmIUYmJkoobTQse30pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIiwiZGF0YS1jYW1lcmEtc291cmNlLW1lbnUiOiEwLGNoaWxkcmVuOltKKCJidXR0b24iLHtvbkNsaWNrOigpPT5rKChIKT0+IUgpLGNsYXNzTmFtZToibGVtLWdob3N0IGgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvODUgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOl8sdGl0bGU6UT09PSJ3ZWJjYW0iP2BTb3VyY2U6IHdlYmNhbSR7Uj9gICgke3cuZmluZCgoSCk9PkguaWQ9PT1SKT8ubmFtZT8/Un0pYDoiIn0g4oCUIGNsaWNrIHRvIGNoYW5nZWA6YFNvdXJjZTogJHtRfSDigJQgY2xpY2sgdG8gcGljayBtZWRpYSBvciB3ZWJjYW1gLCJhcmlhLWxhYmVsIjoiQ2hvb3NlIGNhbWVyYSBzb3VyY2UiLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOiIyMCIsaGVpZ2h0OiIyMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiJ9KSxKKCJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiJ9KSxKKCJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IifSksSigicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIifSldfSl9KSxfJiZKKCJkaXYiLHtyb2xlOiJtZW51IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzZweCldIGxlZnQtMCB6LTEwIG1pbi13LVsyMDBweF0gZmxleCBmbGV4LWNvbCBnYXAtcHggcC0xIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNCldIixjaGlsZHJlbjpbSigiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZToidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvODUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixvbkNsaWNrOigpPT57ayghMSksZzEoKX0sdGl0bGU6IlBpY2sgYW4gaW1hZ2Ugb3IgdmlkZW8gZnJvbSBkaXNrIixjaGlsZHJlbjoiQnJvd3NlIG1lZGlh4oCmIn0pLEooImRpdiIse2NsYXNzTmFtZToiaC1weCBiZy13aGl0ZS84IG15LTEifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcGwtMi41IHByLTIgcHQtMSBwYi1bMnB4XSIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjp5PyJDYW1lcmFzIChsb2FkaW5n4oCmKSI6dy5sZW5ndGg9PT0wPyJObyBjYW1lcmFzIjoiQ2FtZXJhcyJ9KSxKKCJidXR0b24iLHtvbkNsaWNrOihIKT0+e0guc3RvcFByb3BhZ2F0aW9uKCksVzEoKX0sZGlzYWJsZWQ6eSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctWzIycHhdIGgtWzIycHhdIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCBkaXNhYmxlZDpvcGFjaXR5LTUwIiwiYXJpYS1sYWJlbCI6IlJlZnJlc2ggY2FtZXJhcyIsdGl0bGU6IlJlZnJlc2ggY2FtZXJhcyIsY2hpbGRyZW46SihKMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyfSl9KV19KSx3Lm1hcCgoSCk9PntsZXQgbT1RPT09IndlYmNhbSImJlI9PT1ILmlkO3JldHVybiBKKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOlsidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsbT8iIWJnLXdoaXRlL1swLjEyXSAhdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvODUiXS5qb2luKCIgIiksb25DbGljazooKT0+TTEoSCksdGl0bGU6SC5uYW1lLGNoaWxkcmVuOkgubmFtZX0sSC5pZCl9KV19KV19KSxKKCJidXR0b24iLHtvbkNsaWNrOkUxLm9uQ2xpY2ssZGlzYWJsZWQ6WDAsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIixFMS5raW5kPT09InN0b3AiPyJsZW0tcHJpbWFyeSBsZW0tcHJpbWFyeS1vbiBiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSI6ImxlbS1wcmltYXJ5IGJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSJdLmpvaW4oIiAiKSx0aXRsZTpFMS5raW5kPT09InN0b3AiPyJTdG9wIHRoZSBjYW1lcmEgaGVscGVyIGFuZCB0ZXJtaW5hdGUgaW5qZWN0ZWQgYXBwcyI6RTEua2luZD09PSJhdHRhY2giP2BJbmplY3QgJHskfSBzbyBpdCBqb2lucyB0aGUgY2FtZXJhIGZlZWRgOiEkPyJCcmluZyBhbiBhcHAgdG8gdGhlIGZvcmVncm91bmQgZmlyc3QiOiJTdGFydDogaW5qZWN0IHRoZSBkeWxpYiBhbmQgbGF1bmNoIHRoZSBmb3JlZ3JvdW5kIGFwcCB3aXRoIHRoZSBjaG9zZW4gc291cmNlIiwiYXJpYS1wcmVzc2VkIjpFMS5raW5kPT09InN0b3AiLCJhcmlhLWxhYmVsIjpFMS5raW5kPT09InN0b3AiPyJTdG9wIjoiUGxheSIsY2hpbGRyZW46W0UxLmtpbmQ9PT0ic3RvcCI/SihnMCx7fSk6Sih2MCx7fSksSigic3BhbiIse2NoaWxkcmVuOkUxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOkUxLmtpbmQ9PT0iYXR0YWNoIj8iSW5qZWN0IjoiUGxheSJ9KV19KSxKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6RzAsZGlzYWJsZWQ6YzEsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIG1pbi1oLVszNnB4XSBib3JkZXIgcm91bmRlZC1bN3B4XSBmb250LVtpbmhlcml0XSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCAke3g9PT0ib24iPyJsZW0tc3BlZWQgbGVtLXNwZWVkLW9uIGJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSBjdXJzb3ItcG9pbnRlciI6ImxlbS1zcGVlZCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciJ9YCwiYXJpYS1sYWJlbCI6YE1pcnJvcjogJHt4fSDigJQgdGFwIHRvIHRvZ2dsZWAsdGl0bGU6YzE/Ik1pcnJvciB0b2dnbGUgYXZhaWxhYmxlIG9uY2UgYSBzb3VyY2UgaXMgc3RyZWFtaW5nIjpgTWlycm9yOiAke3h9IOKAlCBjbGljayB0byB0b2dnbGVgLCJhcmlhLXByZXNzZWQiOng9PT0ib24iLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOiIyMCIsaGVpZ2h0OiIyMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOng9PT0ib24iPyJjdXJyZW50Q29sb3IiOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjcifSksSigicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyJ9KSxKKCJwYXRoIix7ZDoiTTEyIDIwdjIifSksSigicGF0aCIse2Q6Ik0xMiAxNHYyIn0pLEooInBhdGgiLHtkOiJNMTIgOHYyIn0pLEooInBhdGgiLHtkOiJNMTIgMnYyIn0pXX0pfSldfSksSzEmJkooeTgse2tpbmQ6Indhcm5pbmciLG1lc3NhZ2U6SzF9KSxnJiZKKHk4LHtraW5kOiJlcnJvciIsbWVzc2FnZTpnfSldfSldfSl9ZnVuY3Rpb24gaDgoe29wZW46QyxvbkNsb3NlOiQsdWRpZDpLLGN1cnJlbnRBcHA6WCxheE92ZXJsYXlFbmFibGVkOlEsb25Ub2dnbGVBeE92ZXJsYXk6Tix3aWR0aDpafSl7cmV0dXJuIEooTzAse29wZW46Qyx3aWR0aDpaLGNoaWxkcmVuOltKKFQwLHtjaGlsZHJlbjpbSihWMix7Y2hpbGRyZW46IlRvb2xzIn0pLEooTTAse29uQ2xpY2s6JH0pXX0pLEMmJkooImRpdiIse2NsYXNzTmFtZToicC0zLjUgb3ZlcmZsb3cteS1hdXRvIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0zIixjaGlsZHJlbjpbSihIOCx7dWRpZDpLLGN1cnJlbnRBcHA6WH0pLEooTTgse292ZXJsYXlFbmFibGVkOlEsb25Ub2dnbGVPdmVybGF5Ok59KSxKKFM4LHt1ZGlkOkssYnVuZGxlSWQ6WD8uYnVuZGxlSWQ/P251bGx9KSxKKEY4LHt1ZGlkOkssZXhlYzpMMX0pLEooTzgse3VkaWQ6SyxidW5kbGVJZDpYPy5idW5kbGVJZD8/bnVsbH0pXX0pXX0pfWZ1bmN0aW9uIGowKEMsJCl7ZmV0Y2goeDEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6QyxvbjokfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBZNSgpe2xldCBDPXgxKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0ICQ9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKEMsJCkpcmV0dXJufX1jYXRjaHt9ZmV0Y2goQyx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIHg4KEMpe2xldCAkPUMuY29udGVudERvY3VtZW50O2lmKCEkKXJldHVybjtsZXQgSz0oKT0+e2xldCBOPVskXTt3aGlsZShOLmxlbmd0aCl7bGV0IFo9Ti5wb3AoKSxxPVoucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IEcgb2YgcSl7bGV0IFk9Ry5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Ry50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KFkpKXJldHVybiBHfWZvcihsZXQgRyBvZiBaLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihHLnNoYWRvd1Jvb3QpTi5wdXNoKEcuc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFg9MCxRPSgpPT57WCsrO2xldCBOPUsoKTtpZihOJiZOLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtOLmNsaWNrKCk7cmV0dXJufWlmKFg8MjApc2V0VGltZW91dChRLDEwMCl9O1EoKX1mdW5jdGlvbiB2OChDKXtsZXQgJD1bXSxLPW5ldyBNYXA7Zm9yKGxldCBYIG9mIEMpe2xldCBRPVguYXBwTmFtZXx8WC5idW5kbGVJZHx8IlVua25vd24iLE49WC5idW5kbGVJZHx8USxaPUsuZ2V0KE4pO2lmKCFaKVo9e2tleTpOLGFwcE5hbWU6USxidW5kbGVJZDpYLmJ1bmRsZUlkLHRhcmdldHM6W119LEsuc2V0KE4sWiksJC5wdXNoKE4pO1oudGFyZ2V0cy5wdXNoKFgpfXJldHVybiAkLm1hcCgoWCk9PksuZ2V0KFgpKX1mdW5jdGlvbiBnOChDLCQpe2xldFtLLFhdPUEoe30pLFE9SDEoKCk9PiQuc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFskXSk7cmV0dXJuIFcoKCk9PntpZighQylyZXR1cm47bGV0IE49ITE7Zm9yKGxldCBaIG9mICQpe2lmKCFaKWNvbnRpbnVlO2xldCBxPWAke0N9OiR7Wn1gLEc9YjAuZ2V0KHEpO2lmKHR5cGVvZiBHPT09InN0cmluZyJ8fEc9PT1udWxsKXtYKChZKT0+WVtaXT09PUc/WTp7Li4uWSxbWl06R30pO2NvbnRpbnVlfXo4KEwxLEMsWikudGhlbigoWSk9PntpZihOKXJldHVybjtYKChCKT0+KHsuLi5CLFtaXTpZfSkpfSl9cmV0dXJuKCk9PntOPSEwfX0sW0MsUV0pLEt9ZnVuY3Rpb24gUjgoe3VkaWQ6Qyx0YXJnZXRzOiQsc2VsZWN0ZWQ6SyxvblNlbGVjdFRhcmdldDpYLG9uUmVmcmVzaDpRfSl7bGV0IE49djgoJCksWj1OLm1hcCgoXyk9Pl8uYnVuZGxlSWQpLmZpbHRlcigoXyk9PiEhXykscT1nOChDLFopLFtHLFldPUEoITEpLFtCLExdPUEobnVsbCksVT12KG51bGwpLEY9dihudWxsKTtXKCgpPT57aWYoIUcpcmV0dXJuO2xldCBfPShrKT0+e2lmKCFGLmN1cnJlbnQpcmV0dXJuO2lmKCFGLmN1cnJlbnQuY29udGFpbnMoay50YXJnZXQpKVkoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfKX0sW0ddKSxXKCgpPT57aWYoRylyZXR1cm47aWYoVS5jdXJyZW50KWowKFUuY3VycmVudCwhMSksVS5jdXJyZW50PW51bGw7WTUoKX0sW0ddKSxXKCgpPT57bGV0IF89KCk9Plk1KCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsXyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsXyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLF8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLF8pfX0sW10pO2xldCBUPUs/KEsudGl0bGV8fEsudXJsfHxLLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gSigiZGl2Iix7cmVmOkYsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W0ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e1koKF8pPT57aWYoIV8pUSgpO3JldHVybiFffSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtd2hpdGUvOTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLW1kIHRleHQtWzEycHhdIHB4LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1sZWZ0IiwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpHLCJhcmlhLWxhYmVsIjoiV2ViS2l0IHRhcmdldCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIG1pbi13LTAiLGNoaWxkcmVuOlR9KSxKKCJzdmciLHt3aWR0aDoiMTIiLGhlaWdodDoiMTIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpKKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSxHJiZKKCJ1bCIse3JvbGU6Imxpc3Rib3giLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNHB4KV0gbGVmdC0wIG0tMCBwLTEgbGlzdC1ub25lIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46Ti5tYXAoKF8pPT57bGV0IGs9Xy5idW5kbGVJZD9xW18uYnVuZGxlSWRdOm51bGw7cmV0dXJuIEooImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS9bMC45Ml0iLGNoaWxkcmVuOltrP0ooImltZyIse3NyYzprLGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6Sigic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46Xy5hcHBOYW1lfSldfSksSigidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOl8udGFyZ2V0cy5tYXAoKHopPT57bGV0IHc9Sz8uaWQ9PT16LmlkLEU9ISF6LmluVXNlQnlPdGhlckluc3BlY3RvciYmIXcseT0oei50aXRsZXx8ei51cmx8fHouYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCksYz1CPT09ei5pZCYmIUUsUj0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBKKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOncsImFyaWEtZGlzYWJsZWQiOkUsdGFiSW5kZXg6RT8tMTowLHRpdGxlOkU/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZihFKXJldHVybjtpZihVLmN1cnJlbnQmJlUuY3VycmVudCE9PXouaWQpajAoVS5jdXJyZW50LCExKTtVLmN1cnJlbnQ9ei5pZCxMKHouaWQpLGowKHouaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihVLmN1cnJlbnQ9PT16LmlkKWowKHouaWQsITEpLFUuY3VycmVudD1udWxsO0woKHgpPT54PT09ei5pZD9udWxsOngpfSxvbkNsaWNrOigpPT57aWYoRSlyZXR1cm47WCh6LmlkKSxZKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke0U/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LXdoaXRlLzg1IjpjPyJiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMjIpXSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjp3PyJiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6InRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjp5fSksei51cmwmJnoudXJsIT09ImFib3V0OmJsYW5rIiYmSigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvWzAuNDJdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjp6LnVybH0pXX0sei5pZCl9KX0pXX0sXy5rZXkpfSl9KV19KX1mdW5jdGlvbiBtOCh7b3BlbjpDLG9uQ2xvc2U6JCx1ZGlkOkssdGFyZ2V0czpYLHNlbGVjdGVkVGFyZ2V0SWQ6USxvblNlbGVjdFRhcmdldDpOLGxvYWRpbmc6WixlcnJvcjpxLG9uUmVmcmVzaDpHLHdpZHRoOll9KXtsZXQgQj1RP1guZmluZCgoTCk9PkwuaWQ9PT1RKT8/bnVsbDpudWxsO3JldHVybiBKKE8wLHtvcGVuOkMsd2lkdGg6WSxjaGlsZHJlbjpbSihUMCx7Y2hpbGRyZW46W1gubGVuZ3RoPjA/SihSOCx7dWRpZDpLLHRhcmdldHM6WCxzZWxlY3RlZDpCLG9uU2VsZWN0VGFyZ2V0Ok4sb25SZWZyZXNoOkd9KTpKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlL1swLjQ4XSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46Wj8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxKKE0wLHtvbkNsaWNrOiQsYXJpYUxhYmVsOiJDbG9zZSBXZWJLaXQgRGV2VG9vbHMiLHRpdGxlOiJDbG9zZSIsaWNvblNpemU6MTV9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGJnLXdoaXRlIHJlbGF0aXZlIixjaGlsZHJlbjpxP0ooImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpxfSk6QiYmQz9KKCJpZnJhbWUiLHtzcmM6Qi5kZXZ0b29sc0Zyb250ZW5kVXJsLHRpdGxlOmBXZWJLaXQgRGV2VG9vbHMgLSAke0IudGl0bGV8fEIudXJsfHxCLmlkfWAsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJvcmRlci1ub25lIGJsb2NrIGJnLXdoaXRlIixvbkxvYWQ6KEwpPT54OChMLmN1cnJlbnRUYXJnZXQpfSxCLmlkKTpKKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46Qj8iRGV2VG9vbHMgcGF1c2VkIOKAlCBvcGVuIHRoZSBwYW5lbCB0byByZWF0dGFjaC4iOiJPcGVuIFNhZmFyaSBvciBhbiBpbnNwZWN0YWJsZSBXS1dlYlZpZXcgaW4gdGhlIHNpbXVsYXRvci4ifSl9KV19KX1mdW5jdGlvbiBqOCh7ZXhlYzpDLHVkaWQ6JCxlbmFibGVkOkssb25VcGxvYWRTdGFydDpYLG9uVXBsb2FkUHJvZ3Jlc3M6USxvblVwbG9hZEVuZDpOLG9uVW5zdXBwb3J0ZWQ6Wn0pe2xldFtxLEddPUEoITEpLFk9digwKSxCPVAoYXN5bmMoVCk9PntpZihULnByZXZlbnREZWZhdWx0KCksVC5zdG9wUHJvcGFnYXRpb24oKSxZLmN1cnJlbnQ9MCxHKCExKSwhS3x8ISQpcmV0dXJuO2xldCBfPUFycmF5LmZyb20oVC5kYXRhVHJhbnNmZXIuZmlsZXMpO2lmKF8ubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBrIG9mIF8pe2xldCB6PXc4KGspO2lmKCF6KXtaKGspO2NvbnRpbnVlfWxldCB3PVgoay5uYW1lLHopO1c4KGsseixDLCQsKEUpPT5RKHcsRSkpLnRoZW4oKCk9Pk4odywhMCkpLmNhdGNoKChFKT0+Tih3LCExLEUgaW5zdGFuY2VvZiBFcnJvcj9FLm1lc3NhZ2U6IlVwbG9hZCBmYWlsZWQiKSl9fSxbSywkLEMsWCxRLE4sWl0pLEw9UCgoVCk9PntpZihULnByZXZlbnREZWZhdWx0KCksSylULmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW0tdKSxVPVAoKFQpPT57aWYoVC5wcmV2ZW50RGVmYXVsdCgpLCFLKXJldHVybjtpZihZLmN1cnJlbnQrKyxZLmN1cnJlbnQ9PT0xKUcoITApfSxbS10pLEY9UCgoVCk9PntpZihULnByZXZlbnREZWZhdWx0KCksWS5jdXJyZW50LS0sWS5jdXJyZW50PD0wKVkuY3VycmVudD0wLEcoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6cSxkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOkwsb25EcmFnRW50ZXI6VSxvbkRyYWdMZWF2ZTpGLG9uRHJvcDpCfX19ZnVuY3Rpb24gcDgoQyl7bGV0WyQsS109QShudWxsKSxYPXYobmV3IFNldCksUT1QKChOKT0+e3JldHVybiBYLmN1cnJlbnQuYWRkKE4pLCgpPT57WC5jdXJyZW50LmRlbGV0ZShOKX19LFtdKTtyZXR1cm4gVygoKT0+e2lmKCFDKXJldHVybjtsZXQgTj1uZXcgQWJvcnRDb250cm9sbGVyLFo9ITEscT1udWxsLEc9Qy5yZXBsYWNlKC9cL3N0cmVhbVwubWpwZWckLywiIiksWT0oayk9PntpZihrLndpZHRoPD0wfHxrLmhlaWdodDw9MClyZXR1cm47Sygoeik9PnomJnoud2lkdGg9PT1rLndpZHRoJiZ6LmhlaWdodD09PWsuaGVpZ2h0JiZ6Lm9yaWVudGF0aW9uPT09ay5vcmllbnRhdGlvbj96OmspfSxCPSgpPT57ZmV0Y2goYCR7R30vY29uZmlnYCx7c2lnbmFsOk4uc2lnbmFsfSkudGhlbigoayk9PmsuanNvbigpKS50aGVuKFkpLmNhdGNoKCgpPT57fSl9O0IoKTtsZXQgTD1zZXRJbnRlcnZhbChCLDEwMDApLFU9bmV3IFVSTChDKTtVLnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgRj1VLnRvU3RyaW5nKCksVD0oKT0+e2lmKFp8fE4uc2lnbmFsLmFib3J0ZWR8fHEpcmV0dXJuO3E9c2V0VGltZW91dCgoKT0+e3E9bnVsbCxfKCl9LDEwMDApfSxfPWFzeW5jKCk9Pnt0cnl7bGV0IHo9KGF3YWl0IGZldGNoKEYse3NpZ25hbDpOLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZigheil7VCgpO3JldHVybn1sZXQgdz1uZXcgVWludDhBcnJheSgwKTt3aGlsZSghMCl7bGV0e2RvbmU6RSx2YWx1ZTp5fT1hd2FpdCB6LnJlYWQoKTtpZihFKWJyZWFrO2xldCBjPW5ldyBVaW50OEFycmF5KHcubGVuZ3RoK3kubGVuZ3RoKTtjLnNldCh3KSxjLnNldCh5LHcubGVuZ3RoKSx3PWM7d2hpbGUoITApe2xldCBSPS0xO2ZvcihsZXQgdT0wO3U8dy5sZW5ndGgtMTt1KyspaWYod1t1XT09PTI1NSYmd1t1KzFdPT09MjE2KXtSPXU7YnJlYWt9aWYoUj09PS0xKWJyZWFrO2xldCBoPS0xO2ZvcihsZXQgdT1SKzI7dTx3Lmxlbmd0aC0xO3UrKylpZih3W3VdPT09MjU1JiZ3W3UrMV09PT0yMTcpe2g9dSsyO2JyZWFrfWlmKGg9PT0tMSlicmVhaztsZXQgeD13LnNsaWNlKFIsaCk7dz13LnNsaWNlKGgpO2xldCBwPW5ldyBCbG9iKFt4XSx7dHlwZToiaW1hZ2UvanBlZyJ9KSxkPVVSTC5jcmVhdGVPYmplY3RVUkwocCk7aWYoWC5jdXJyZW50LnNpemU9PT0wKXtVUkwucmV2b2tlT2JqZWN0VVJMKGQpO2NvbnRpbnVlfWZvcihsZXQgdSBvZiBYLmN1cnJlbnQpdShkKX19fWNhdGNoe31maW5hbGx5e1QoKX19O3JldHVybiBfKCksKCk9PntpZihaPSEwLHEpY2xlYXJUaW1lb3V0KHEpO04uYWJvcnQoKSxjbGVhckludGVydmFsKEwpfX0sW0NdKSx7c3Vic2NyaWJlRnJhbWU6USxmcmFtZTpudWxsLGNvbmZpZzokfX1mdW5jdGlvbiBVMihDLCQsSyxYKXtsZXQgUT1QKChCKT0+TWF0aC5tYXgoSyxNYXRoLm1pbihYLEIpKSxbSyxYXSksW04sWl09QSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiAkO2xldCBCPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShDKSxMPUIhPW51bGw/TnVtYmVyKEIpOk5hTjtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKEwpP1EoTCk6JH0pLHE9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5taW4oWCx3aW5kb3cuaW5uZXJXaWR0aC0zMik6WCxHPU1hdGgubWF4KEssTWF0aC5taW4ocSxOKSksWT1QKChCKT0+e0IucHJldmVudERlZmF1bHQoKTtsZXQgTD1CLmNsaWVudFgsVT1HLEY9Qi5jdXJyZW50VGFyZ2V0O0Yuc2V0UG9pbnRlckNhcHR1cmUoQi5wb2ludGVySWQpO2xldCBUPShrKT0+e2xldCB6PVEoVSsoTC1rLmNsaWVudFgpKTtaKHopfSxfPShrKT0+e0YucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGsucG9pbnRlcklkKSxGLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixUKSxGLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsXyksRi5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixfKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKEMsU3RyaW5nKFEoVSsoTC1rLmNsaWVudFgpKSkpfWNhdGNoe319O0YuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFQpLEYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixfKSxGLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLF8pfSxbUSxHLENdKTtyZXR1cm57d2lkdGg6RyxvblBvaW50ZXJEb3duOll9fWZ1bmN0aW9uIGw4KHtkZWZhdWx0V2lkdGg6Qyx2aWV3cG9ydFdpZHRoOiQsdmlld3BvcnRIZWlnaHQ6Syxhc3BlY3RSYXRpbzpYLG9uU3RhcnQ6UX0pe2xldCBOPV8yKCksW1oscV09QSghMSksW0csWV09QSghMSksW0IsTF09QSghMSksVT12KG51bGwpLEY9dihbXSksVD12KG51bGwpLF89dihudWxsKSxrPXYobnVsbCksej12KG51bGwpLHc9dihudWxsKSxFPUgxKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIEM7dHJ5e2xldCBPPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShlMiksUz1PIT1udWxsP051bWJlcihPKTpOYU47cmV0dXJuIE51bWJlci5pc0Zpbml0ZShTKT9DKlM6Q31jYXRjaHtyZXR1cm4gQ319LFtDXSksW3ksY109QShFKSxSPUM1KEMsJCxLLFgpLGg9TWF0aC5taW4oeDMsUikseD15Pz9DLHA9dzAoeCxDLCQsSyxYKSxkPVAoKE8pPT57bGV0IFM9RDIoTyk7ei5jdXJyZW50PVMsYyhTKX0sW10pLHU9UCgoTyk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8Qzw9MClyZXR1cm47bGV0IFM9dzAoTyxDLCQsSyxYKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGUyLFN0cmluZyhTL0MpKX1jYXRjaHt9fSxbWCxDLEssJF0pLCQxPVAoKE8pPT57aWYoay5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChrLmN1cnJlbnQpO2suY3VycmVudD1zZXRUaW1lb3V0KCgpPT57ay5jdXJyZW50PW51bGwsdShPKX0sSzgpfSxbdV0pO1coKCk9PntpZihafHxHKXJldHVybjtsZXQgTz16LmN1cnJlbnQ7aWYoTz09bnVsbClyZXR1cm47bGV0IFM9dzAoTyxDLCQsSyxYKTtpZihTIT09TylkKFMpfSxbWCxDLEcsWixLLCQsZF0pLFcoKCk9PntkKEUpfSxbRSxkXSksVygoKT0+e2lmKCFaJiYhRylyZXR1cm47bGV0IE89ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IsUz1kb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Qsaj1kb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q7cmV0dXJuIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPSJud3NlLXJlc2l6ZSIsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PSJub25lIixkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiLCgpPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Tyxkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9Uyxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9an19LFtaLEddKSxXKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuO2xldCBPPSgpPT57bGV0IGo9ei5jdXJyZW50O2lmKGo9PW51bGwpcmV0dXJuO2lmKGsuY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoay5jdXJyZW50KSxrLmN1cnJlbnQ9bnVsbDt1KGopfSxTPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpTygpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixPKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixTKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUyl9fSxbdV0pO2xldCBhPVAoKE8pPT57aWYoTz5SKXJldHVybiBSKyQ1KE8tUixSKTtpZihPPGgpcmV0dXJuIGgtJDUoaC1PLFIpO3JldHVybiBPfSxbUixoXSkscj1QKCgpPT57aWYoXy5jdXJyZW50KV8uY3VycmVudCgpLF8uY3VycmVudD1udWxsO1koITEpfSxbXSksZz1QKChPKT0+e2xldCBTPXBlcmZvcm1hbmNlLm5vdygpLGo9Ri5jdXJyZW50O2oucHVzaCh7dDpTLHg6T30pO3doaWxlKGoubGVuZ3RoPjEmJlMtalswXS50PiQ4KWouc2hpZnQoKX0sW10pLEk9UCgoTyk9PntsZXQgUz1hKE8pO2lmKFQuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShULmN1cnJlbnQpO1QuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntULmN1cnJlbnQ9bnVsbCxkKFMpLGcoUyl9KX0sW2EsZyxkXSksSzE9UCgoTyxTLGopPT57cigpO2xldCBpPXouY3VycmVudD8/QztVLmN1cnJlbnQ9e3BvaW50ZXJJZDpPLHN0YXJ0WDpTLHN0YXJ0WTpqLHN0YXJ0V2lkdGg6aX0sRi5jdXJyZW50PVt7dDpwZXJmb3JtYW5jZS5ub3coKSx4Oml9XSxRKCkscSghMCl9LFtyLEMsUV0pLG49UCgoKT0+e2xldCBPPVUuY3VycmVudDtpZihVLmN1cnJlbnQ9bnVsbCxULmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoVC5jdXJyZW50KSxULmN1cnJlbnQ9bnVsbDtpZihPJiZPLnBvaW50ZXJJZD49MCl7bGV0IFoxPXcuY3VycmVudDtpZihaMT8uaGFzUG9pbnRlckNhcHR1cmUoTy5wb2ludGVySWQpKVoxLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShPLnBvaW50ZXJJZCl9cSghMSk7bGV0IFM9ei5jdXJyZW50Pz9DLGo9UTgoRi5jdXJyZW50KTtGLmN1cnJlbnQ9W107bGV0IGk9dzAoUytqKkM4LEMsJCxLLFgpLHQ9RDIoWDgoaSxbQ10sczMpKSxZMT1NYXRoLmFicyhTLXQpPDAuNSYmTWF0aC5hYnMoaik8ODtpZihOfHxZMSl7ZCh0KSwkMSh0KTtyZXR1cm59WSghMCksXy5jdXJyZW50PUo4KHtmcm9tOlMsdG86dCx2ZWxvY2l0eTpqLHN0aWZmbmVzczp0MyxkYW1waW5nOmUzLG9uVXBkYXRlOmQsb25Db21wbGV0ZTooKT0+e18uY3VycmVudD1udWxsLFkoITEpLCQxKHQpfX0pfSxbWCxDLE4sJDEsSywkLGRdKTtXKCgpPT57cmV0dXJuKCk9PntpZihyKCksVC5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKFQuY3VycmVudCk7aWYoay5jdXJyZW50IT1udWxsKXtpZihjbGVhclRpbWVvdXQoay5jdXJyZW50KSx6LmN1cnJlbnQhPW51bGwpdSh6LmN1cnJlbnQpfX19LFtyLHVdKSxXKCgpPT57aWYoIVopcmV0dXJuO2xldCBPPSgpPT5uKCksUz0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKW4oKX0saj0oaSk9PntsZXQgdD1VLmN1cnJlbnQ7aWYoIXR8fHQucG9pbnRlcklkIT09aS5wb2ludGVySWQpcmV0dXJuO2kucHJldmVudERlZmF1bHQoKSxJKGY4KHQsaS5jbGllbnRYLGkuY2xpZW50WSxYKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsTyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixqLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixPLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsTywhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsTyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixqLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixPLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsTywhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUyl9fSxbWCxuLFosSV0pO2xldCBKMT1QKChPKT0+e2xldCBTPVUuY3VycmVudDtpZighU3x8Uy5wb2ludGVySWQhPT1PLnBvaW50ZXJJZClyZXR1cm47Ty5wcmV2ZW50RGVmYXVsdCgpLE8uc3RvcFByb3BhZ2F0aW9uKCksbigpfSxbbl0pLGU9UCgoTyk9PntpZihPLmJ1dHRvbiE9PTApcmV0dXJuO08ucHJldmVudERlZmF1bHQoKSxPLnN0b3BQcm9wYWdhdGlvbigpLE8uY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShPLnBvaW50ZXJJZCksSzEoTy5wb2ludGVySWQsTy5jbGllbnRYLE8uY2xpZW50WSl9LFtLMV0pLHM9UCgoTyk9PntsZXQgUz1VLmN1cnJlbnQ7aWYoIVN8fFMucG9pbnRlcklkIT09Ty5wb2ludGVySWQpcmV0dXJuO08ucHJldmVudERlZmF1bHQoKSxJKGY4KFMsTy5jbGllbnRYLE8uY2xpZW50WSxYKSl9LFtYLEldKSxYMT1QKChPKT0+e2xldCBTPU8ua2V5PT09IkFycm93UmlnaHQifHxPLmtleT09PSJBcnJvd0Rvd24iPzE6Ty5rZXk9PT0iQXJyb3dMZWZ0Inx8Ty5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihTPT09MClyZXR1cm47Ty5wcmV2ZW50RGVmYXVsdCgpLHIoKTtsZXQgaj1PLnNoaWZ0S2V5PzgwOjI0LGk9RDIodzAocCtTKmosQywkLEssWCkpO2QoaSksJDEoaSl9LFtYLHIscCxDLCQxLEssJCxkXSk7cmV0dXJue2hhbmRsZVJlZjp3LHdpZHRoOngsY29tbWl0dGVkV2lkdGg6cCxtaW5XaWR0aDpoLG1heFdpZHRoOlIsaXNSZXNpemluZzpaLGlzSW5lcnRpYTpHLGhhbmRsZUhvdmVyZWQ6QixoYW5kbGVBY3RpdmU6Qnx8Wnx8RyxzZXRIYW5kbGVIb3ZlcmVkOkwsb25Qb2ludGVyRG93bjplLG9uUG9pbnRlck1vdmU6cyxvblBvaW50ZXJFbmQ6SjEsb25LZXlEb3duOlgxfX1mdW5jdGlvbiBmOChDLCQsSyxYKXtsZXQgUT0kLUMuc3RhcnRYLE49KEstQy5zdGFydFkpKlg7cmV0dXJuIEMuc3RhcnRXaWR0aCsoTWF0aC5hYnMoUSk+PU1hdGguYWJzKE4pP1E6Til9ZnVuY3Rpb24gdTgoKXtsZXRbQywkXT1BKFtdKSxLPVAoKE4sWik9PntsZXQgcT1jcnlwdG8ucmFuZG9tVVVJRCgpO3JldHVybiAkKChHKT0+Wy4uLkcse2lkOnEsbmFtZTpOLGtpbmQ6WixzdGF0dXM6InVwbG9hZGluZyIscHJvZ3Jlc3M6MH1dKSxxfSxbXSksWD1QKChOLFopPT57aWYoJCgocSk9PnEubWFwKChHKT0+Ry5pZD09PU4/ey4uLkcsLi4uWn06RykpLFouc3RhdHVzPT09InN1Y2Nlc3MifHxaLnN0YXR1cz09PSJlcnJvciIpc2V0VGltZW91dCgoKT0+eyQoKHEpPT5xLmZpbHRlcigoRyk9PkcuaWQhPT1OKSl9LDMwMDApfSxbXSksUT1QKChOLFopPT57JCgocSk9PnEubWFwKChHKT0+Ry5pZD09PU4/ey4uLkcscHJvZ3Jlc3M6Wn06RykpfSxbXSk7cmV0dXJue3RvYXN0czpDLGFkZDpLLHVwZGF0ZTpYLHNldFByb2dyZXNzOlF9fWZ1bmN0aW9uIG84KEMsJCl7bGV0W0ssWF09QShbXSksW1EsTl09QShudWxsKSxbWixxXT1BKCExKSxHPVAoYXN5bmMoKT0+e2lmKCFDKXJldHVybjtxKCEwKSxOKG51bGwpO3RyeXtsZXQgWT1hd2FpdCBmZXRjaChDLHtjYWNoZToibm8tc3RvcmUifSksQj1hd2FpdCBZLmpzb24oKTtpZighWS5va3x8Qi5lcnJvcil0aHJvdyBFcnJvcihCLmVycm9yfHwiRmFpbGVkIHRvIGxpc3QgV2ViS2l0IHRhcmdldHMiKTtYKEIudGFyZ2V0cz8/W10pfWNhdGNoKFkpe04oWSBpbnN0YW5jZW9mIEVycm9yP1kubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IFdlYktpdCBEZXZUb29scyIpfWZpbmFsbHl7cSghMSl9fSxbQ10pO3JldHVybiBXKCgpPT57aWYoISQpcmV0dXJuO0coKTtsZXQgWT1zZXRJbnRlcnZhbCgoKT0+dm9pZCBHKCksMjUwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoWSl9LFskLEddKSx7dGFyZ2V0czpLLGVycm9yOlEsbG9hZGluZzpaLHJlZnJlc2g6R319dmFyIHA0PXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiBkOChDKXtyZXR1cm4gcDRbQ10/P251bGx9dmFyIGM4PTMyMCxhOD03NjAsaTg9NzIwO3ZhciBmND17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxsND17cG9ydHJhaXQ6ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXQifTtmdW5jdGlvbiByOChDKXtyZXR1cm4gQz9gJHtDLmRldmljZX06JHtDLnBpZH06JHtDLnN0cmVhbVVybH06JHtDLndzVXJsfWA6IiJ9ZnVuY3Rpb24gdTQoKXtsZXRbQywkXT1BKCgpPT53aW5kb3cuX19TSU1fUFJFVklFV19fPz9udWxsKSxbSyxYXT1BKCExKSxbUSxOXT1BKFtdKSxbWixxXT1BKCExKSxbRyxZXT1BKG51bGwpLFtCLExdPUEobmV3IFNldCksW1UsRl09QSghMSksW1QsX109QSghMSksW2ssel09QSghMSksW3csRV09QSghMSksW3ksY109QShudWxsKSxSPVAoYXN5bmMoKT0+e3EoITApLFkobnVsbCk7dHJ5e2xldCBoPWF3YWl0IEwxKCJ4Y3J1biBzaW1jdGwgbGlzdCBkZXZpY2VzIGF2YWlsYWJsZSAtaiIpO2lmKGguZXhpdENvZGUhPT0wKXRocm93IEVycm9yKGguc3RkZXJyfHwic2ltY3RsIGxpc3QgZmFpbGVkIik7TihNMyhoLnN0ZG91dCkpfWNhdGNoKGgpe1koaCBpbnN0YW5jZW9mIEVycm9yP2gubWVzc2FnZToiRmFpbGVkIHRvIGxpc3QgZGV2aWNlcyIpfWZpbmFsbHl7cSghMSl9fSxbXSk7aWYoVygoKT0+e1IoKX0sW1JdKSxXKCgpPT57bGV0IGg9bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImRldmljZSIpLHg9YCR7eDEoImFwaSIpfSR7aD9gP2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChoKX1gOiIifWAscD0hMSxkPWFzeW5jKCk9Pnt0cnl7bGV0ICQxPWF3YWl0IGZldGNoKHgse2NhY2hlOiJuby1zdG9yZSJ9KTtpZighJDEub2spcmV0dXJuO2xldCBhPWF3YWl0ICQxLmpzb24oKTtpZihwKXJldHVybjskKChyKT0+e2lmKHI4KHIpPT09cjgoYSkpcmV0dXJuIHI7aWYoYSl3aW5kb3cuX19TSU1fUFJFVklFV19fPWE7ZWxzZSBkZWxldGUgd2luZG93Ll9fU0lNX1BSRVZJRVdfXztyZXR1cm4gYX0pfWNhdGNoe319O2QoKTtsZXQgdT1zZXRJbnRlcnZhbChkLDE1MDApO3JldHVybigpPT57cD0hMCxjbGVhckludGVydmFsKHUpfX0sW10pLFcoKCk9PntpZighQz8ubG9nc0VuZHBvaW50KXJldHVybjtsZXQgaD1uZXcgRXZlbnRTb3VyY2UoQy5sb2dzRW5kcG9pbnQpLHg9bmV3IE1hcCxwPVsiIzhiZTlmZCIsIiM1MGZhN2IiLCIjZmZiODZjIiwiI2ZmNzljNiIsIiNiZDkzZjkiLCIjZjFmYThjIiwiIzYyNzJhNCIsIiNmZjU1NTUiLCIjNjlmZjk0IiwiI2Q2YWNmZiIsIiNmZmZmYTUiLCIjYTRmZmZmIiwiI2ZmNmU2ZSIsIiNjYWE5ZmEiLCIjNWFmNzhlIl07ZnVuY3Rpb24gZChhKXtsZXQgcj14LmdldChhKTtpZighcil7bGV0IGc9MDtmb3IobGV0IEk9MDtJPGEubGVuZ3RoO0krKylnPShnPDw1KS1nK2EuY2hhckNvZGVBdChJKXwwO3I9cFtNYXRoLmFicyhnKSVwLmxlbmd0aF0seC5zZXQoYSxyKX1yZXR1cm4gcn1sZXQgdT0iIiwkMT0hMTtyZXR1cm4gaC5vbm1lc3NhZ2U9KGEpPT57dHJ5e2xldCByPUpTT04ucGFyc2UoYS5kYXRhKSxnPXIucHJvY2Vzc0ltYWdlUGF0aD8uc3BsaXQoIi8iKS5wb3AoKT8/ci5zZW5kZXJJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/PyIiLEk9ci5zdWJzeXN0ZW0/PyIiLEsxPXIuY2F0ZWdvcnk/PyIiLG49ci5ldmVudE1lc3NhZ2U/PyIiO2lmKCFuKXJldHVybjtpZihnIT09dSl7aWYoJDEpY29uc29sZS5ncm91cEVuZCgpO2xldCBYMT1kKGcpO2NvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoYCVjJHtnfSR7ST9gICVjJHtJfSR7SzE/IjoiK0sxOiIifWA6IiJ9YCxgY29sb3I6JHtYMX07Zm9udC13ZWlnaHQ6Ym9sZGAsLi4uST9bImNvbG9yOiM4ODg7Zm9udC13ZWlnaHQ6bm9ybWFsIl06W10pLCQxPSEwLHU9Z31sZXQgSjE9KHIubWVzc2FnZVR5cGU/PyIiKS50b0xvd2VyQ2FzZSgpLGU9SSYmZz09PXU/YCVjJHtLMXx8SX0lYyBgOiIiLHM9ZT9bImNvbG9yOiM4ODg7Zm9udC1zdHlsZTppdGFsaWMiLCJjb2xvcjppbmhlcml0Il06W107aWYoSjE9PT0iZmF1bHQifHxKMT09PSJlcnJvciIpY29uc29sZS5sb2coYCR7ZX0lYyR7bn1gLC4uLnMsImNvbG9yOiNmZjU1NTUiKTtlbHNlIGlmKEoxPT09ImRlYnVnIiljb25zb2xlLmxvZyhgJHtlfSVjJHtufWAsLi4ucywiY29sb3I6IzYyNzJhNCIpO2Vsc2UgY29uc29sZS5sb2coYCR7ZX0lYyR7bn1gLC4uLnMsImNvbG9yOmluaGVyaXQiKX1jYXRjaHt9fSwoKT0+e2lmKCQxKWNvbnNvbGUuZ3JvdXBFbmQoKTtoLmNsb3NlKCl9fSxbQz8ubG9nc0VuZHBvaW50XSksIUMpcmV0dXJuIEoodzMse2RldmljZXM6USxsb2FkaW5nOlosZXJyb3I6RyxvblJlZnJlc2g6Un0pO3JldHVybiBKKG80LHtjb25maWc6QyxkZXZpY2VzOlEsZGV2aWNlc0xvYWRpbmc6WixkZXZpY2VzRXJyb3I6RyxzdG9wcGluZ1VkaWRzOkIsc2V0U3RvcHBpbmdVZGlkczpMLHN3aXRjaGluZzpVLHNldFN3aXRjaGluZzpGLGF4T3ZlcmxheUVuYWJsZWQ6VCxzZXRBeE92ZXJsYXlFbmFibGVkOl8sZGV2dG9vbHNPcGVuOmssc2V0RGV2dG9vbHNPcGVuOnosZ3JpZE9wZW46dyxzZXRHcmlkT3BlbjpFLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDp5LHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpjLHN0cmVhbWluZzpLLHNldFN0cmVhbWluZzpYLGZldGNoRGV2aWNlczpSfSl9ZnVuY3Rpb24gbzQoe2NvbmZpZzpDLGRldmljZXM6JCxkZXZpY2VzTG9hZGluZzpLLGRldmljZXNFcnJvcjpYLHN0b3BwaW5nVWRpZHM6USxzZXRTdG9wcGluZ1VkaWRzOk4sc3dpdGNoaW5nOlosc2V0U3dpdGNoaW5nOnEsYXhPdmVybGF5RW5hYmxlZDpHLHNldEF4T3ZlcmxheUVuYWJsZWQ6WSxkZXZ0b29sc09wZW46QixzZXREZXZ0b29sc09wZW46TCxncmlkT3BlbjpVLHNldEdyaWRPcGVuOkYsc2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOlQsc2V0U2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOl8sc3RyZWFtaW5nOmssc2V0U3RyZWFtaW5nOnosZmV0Y2hEZXZpY2VzOnd9KXtsZXQgRT0kLmZpbmQoKFYpPT5WLnVkaWQ9PT1DLmRldmljZSk/P251bGw7VygoKT0+e2RvY3VtZW50LnRpdGxlPUU/Lm5hbWU/YFNpbXVsYXRvciAtICR7RS5uYW1lfWA6IlNpbXVsYXRvciBQcmV2aWV3In0sW0U/Lm5hbWVdKTtsZXQgeT1GMChFPy5uYW1lKSxjPW84KEMuZGV2dG9vbHNFbmRwb2ludD8/eDEoImRldnRvb2xzIiksQik7VygoKT0+e2lmKCFCKXJldHVybjtpZihUJiZjLnRhcmdldHMuc29tZSgoVik9PlYuaWQ9PT1UKSlyZXR1cm47XyhjLnRhcmdldHMubGVuZ3RoPT09MT9jLnRhcmdldHNbMF0uaWQ6bnVsbCl9LFtCLGMudGFyZ2V0cyxULF9dKSxXKCgpPT57XyhudWxsKX0sW0MuZGV2aWNlLF9dKTtsZXQgUj1wOChDLnN0cmVhbVVybCksW2gseF09QShudWxsKSxwPWg/P1IuY29uZmlnPz9LMih5LEU/Lm5hbWUpLGQ9SjIoeSxwKSx1PVgyKHkscCksJDE9JDIocCksYT1VMChwKSxyPWE/YS53aWR0aC9hLmhlaWdodDoxLGc9dihudWxsKTtXKCgpPT57bGV0IFY9ITEsRD1udWxsLE09bnVsbCxiPSgpPT57aWYoVnx8RClyZXR1cm47RD1zZXRUaW1lb3V0KCgpPT57RD1udWxsLGYoKX0sMTAwMCl9LGY9KCk9PntsZXQgSD1uZXcgV2ViU29ja2V0KEMud3NVcmwpO0guYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLE09SCxnLmN1cnJlbnQ9SCxILm9uY2xvc2U9KCk9PntpZihnLmN1cnJlbnQ9PT1IKWcuY3VycmVudD1udWxsO2IoKX0sSC5vbmVycm9yPSgpPT57SC5jbG9zZSgpfX07cmV0dXJuIGYoKSwoKT0+e2lmKFY9ITAsRCljbGVhclRpbWVvdXQoRCk7aWYoZy5jdXJyZW50PT09TSlnLmN1cnJlbnQ9bnVsbDtNPy5jbG9zZSgpfX0sW0Mud3NVcmxdKTtsZXQgST1QKChWLEQpPT57bGV0IE09Zy5jdXJyZW50O2lmKCFNfHxNLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IGI9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEQpKSxmPW5ldyBVaW50OEFycmF5KDErYi5sZW5ndGgpO2ZbMF09VixmLnNldChiLDEpLE0uc2VuZChmKX0sW10pLEsxPVAoKFYpPT5JKDMsViksW0ldKSxuPVAoKFYpPT5JKDUsViksW0ldKSxKMT1QKChWKT0+SSg0LHtidXR0b246Vn0pLFtJXSksZT1QKChWKT0+e3goKEQpPT5EJiZELndpZHRoPT09Vi53aWR0aCYmRC5oZWlnaHQ9PT1WLmhlaWdodCYmRC5vcmllbnRhdGlvbj09PVYub3JpZW50YXRpb24/RDpWKX0sW10pLHM9UCgoVik9PntJKDcse29yaWVudGF0aW9uOlZ9KX0sW0ldKSxYMT1wLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiLE89eSE9PSJ3YXRjaCImJnkhPT0idmlzaW9uIixTPVAoKFYpPT57aWYoIU8pcmV0dXJuO2xldCBEPShWPT09ImxlZnQiP2Y0Omw0KVtYMV07cyhEKX0sW08sWDEsc10pO1coKCk9Pnt4KG51bGwpfSxbQy5zdHJlYW1VcmxdKSxXKCgpPT57bGV0IFY9Ui5jb25maWc7aWYoIVYpcmV0dXJuO3goKEQpPT5EJiZELndpZHRoPT09Vi53aWR0aCYmRC5oZWlnaHQ9PT1WLmhlaWdodCYmRC5vcmllbnRhdGlvbj09PVYub3JpZW50YXRpb24/RDpudWxsKX0sW1IuY29uZmlnLFIuY29uZmlnPy53aWR0aCxSLmNvbmZpZz8uaGVpZ2h0LFIuY29uZmlnPy5vcmllbnRhdGlvbl0pO2xldCBqPVAoKFYsRCk9PntJKDYse3R5cGU6Vix1c2FnZTpEfSl9LFtJXSksW2ksdF09QShudWxsKSxbWTEsWjFdPUEoITEpLHt3aWR0aDpGMSxvblBvaW50ZXJEb3duOlMxfT1VMigic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIixjOCwyNDAsNzIwKSx7d2lkdGg6RzEsb25Qb2ludGVyRG93bjpQMX09VTIoInNlcnZlLXNpbTpkZXZ0b29scy1wYW5lbC13aWR0aCIsYTgsNDIwLDE0MDApLHt3aWR0aDpDMSxvblBvaW50ZXJEb3duOnExfT1VMigic2VydmUtc2ltOmdyaWQtcGFuZWwtd2lkdGgiLGk4LDM2MCwxNDAwKSxbaDEsUjFdPUEoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lcldpZHRoOjApLFtXMSxtMV09QSgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO1coKCk9PntsZXQgVj0oKT0+e1IxKHdpbmRvdy5pbm5lcldpZHRoKSxtMSh3aW5kb3cuaW5uZXJIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsViksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLFYpfSxbXSksVygoKT0+e2xldCBWPW5ldyBFdmVudFNvdXJjZShDLmFwcFN0YXRlRW5kcG9pbnQ/P3gxKCJhcHBzdGF0ZSIpKSxEPW51bGw7cmV0dXJuIFYub25tZXNzYWdlPShNKT0+e3RyeXtsZXQgYj1KU09OLnBhcnNlKE0uZGF0YSk7aWYoRCljbGVhclRpbWVvdXQoRCk7bGV0IGY9Yj8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtEPXNldFRpbWVvdXQoKCk9PnQoYiksZil9Y2F0Y2h7fX0sKCk9PntpZihEKWNsZWFyVGltZW91dChEKTtWLmNsb3NlKCl9fSxbQy5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0IHEwPVAoYXN5bmMoKT0+e2ooImRvd24iLDIyNyksYXdhaXQgbmV3IFByb21pc2UoKE0pPT5zZXRUaW1lb3V0KE0sMzApKSxqKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKE0pPT5zZXRUaW1lb3V0KE0sMzApKSxqKCJ1cCIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChNKT0+c2V0VGltZW91dChNLDMwKSksaigidXAiLDIyNyl9LFtqXSksdjE9dihudWxsKSxbVDEsQTFdPUEoMCksW2oxLEMwXT1BKDApO1coKCk9PntsZXQgVj12MS5jdXJyZW50O2lmKCFWfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgRD1uZXcgUmVzaXplT2JzZXJ2ZXIoKE0pPT57bGV0IGI9TVswXT8uY29udGVudFJlY3Q7QTEoYj8ud2lkdGg/PzApLEMwKGI/LmhlaWdodD8/MCl9KTtyZXR1cm4gRC5vYnNlcnZlKFYpLCgpPT5ELmRpc2Nvbm5lY3QoKX0sW10pO2xldFt5MSwkMF09QSghMCksSzA9dighMCk7SzAuY3VycmVudD15MTtsZXQgZzE9dihuZXcgU2V0KTtXKCgpPT57bGV0IFY9KEQpPT57bGV0IE09ISF2MS5jdXJyZW50Py5jb250YWlucyhELnRhcmdldCk7JDAoTSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsViwhMCksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixWLCEwKX0sW10pLFcoKCk9PntpZih5MSlyZXR1cm47bGV0IFY9ZzEuY3VycmVudDtpZihWLnNpemU9PT0wKXJldHVybjtmb3IobGV0IEQgb2YgVilJKDYse3R5cGU6InVwIix1c2FnZTpEfSk7Vi5jbGVhcigpfSxbeTEsSV0pLFcoKCk9PntsZXQgVj0oYixmKT0+e2lmKCFLMC5jdXJyZW50KXJldHVybjtpZihiLmNvZGU9PT0iS2V5SCImJmIubWV0YUtleSYmYi5zaGlmdEtleSl7aWYoYi5wcmV2ZW50RGVmYXVsdCgpLGY9PT0iZG93biImJiFiLnJlcGVhdClJKDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoKGIuY29kZT09PSJBcnJvd0xlZnQifHxiLmNvZGU9PT0iQXJyb3dSaWdodCIpJiZiLm1ldGFLZXkmJiFiLnNoaWZ0S2V5JiYhYi5hbHRLZXkmJiFiLmN0cmxLZXkpe2lmKGIucHJldmVudERlZmF1bHQoKSxmPT09ImRvd24iJiYhYi5yZXBlYXQpUyhiLmNvZGU9PT0iQXJyb3dMZWZ0Ij8ibGVmdCI6InJpZ2h0Iik7cmV0dXJufWlmKGIuY29kZT09PSJLZXlBIiYmYi5tZXRhS2V5JiZiLnNoaWZ0S2V5KXtpZihiLnByZXZlbnREZWZhdWx0KCksZj09PSJkb3duIiYmIWIucmVwZWF0KUwxKGB4Y3J1biBzaW1jdGwgdWkgJHtDLmRldmljZX0gYXBwZWFyYW5jZWApLnRoZW4oKG0pPT57bGV0IG89bS5zdGRvdXQudHJpbSgpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsiO3JldHVybiBMMShgeGNydW4gc2ltY3RsIHVpICR7Qy5kZXZpY2V9IGFwcGVhcmFuY2UgJHtvfWApfSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm59bGV0IEg9ZDgoYi5jb2RlKTtpZihIPT1udWxsKXJldHVybjtpZihiLnByZXZlbnREZWZhdWx0KCksZj09PSJkb3duIilnMS5jdXJyZW50LmFkZChIKTtlbHNlIGcxLmN1cnJlbnQuZGVsZXRlKEgpO0koNix7dHlwZTpmLHVzYWdlOkh9KX0sRD0oYik9PlYoYiwiZG93biIpLE09KGIpPT5WKGIsInVwIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixEKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLE0pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsTSl9fSxbSSxDLmRldmljZSxTXSk7bGV0IFkwPVAoYXN5bmMoVik9PntpZihafHxWLnVkaWQ9PT1DLmRldmljZSlyZXR1cm47cSghMCk7dHJ5e2lmKFYuc3RhdGUhPT0iQm9vdGVkIilhd2FpdCBMMShgeGNydW4gc2ltY3RsIGJvb3QgJHtWLnVkaWR9YCk7bGV0IEQ9YXdhaXQgTDEoYGJ1bnggc2VydmUtc2ltIC0tZGV0YWNoICR7Vi51ZGlkfWApO2lmKEQuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKEQuc3RkZXJyfHwiRmFpbGVkIHRvIHN0YXJ0IHNlcnZlLXNpbSIpO2xldCBNPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO00uc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixWLnVkaWQpLHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oTS50b1N0cmluZygpKX1jYXRjaHtxKCExKX19LFtaLEMuZGV2aWNlLHFdKSxNMT11OCgpLEcwPWo4KHtleGVjOkwxLHVkaWQ6Qy5kZXZpY2UsZW5hYmxlZDprLG9uVXBsb2FkU3RhcnQ6TTEuYWRkLG9uVXBsb2FkUHJvZ3Jlc3M6TTEuc2V0UHJvZ3Jlc3Msb25VcGxvYWRFbmQ6KFYsRCxNKT0+TTEudXBkYXRlKFYse3N0YXR1czpEPyJzdWNjZXNzIjoiZXJyb3IiLG1lc3NhZ2U6TX0pLG9uVW5zdXBwb3J0ZWQ6KFYpPT57bGV0IEQ9TTEuYWRkKFYubmFtZSwibWVkaWEiKTtNMS51cGRhdGUoRCx7c3RhdHVzOiJlcnJvciIsbWVzc2FnZTpgVW5zdXBwb3J0ZWQ6ICR7Vi50eXBlfHxXMChWKX1gfSl9fSksYzE9UChhc3luYyhWKT0+e04oKEQpPT5uZXcgU2V0KEQpLmFkZChWKSk7dHJ5e2F3YWl0IEwxKGB4Y3J1biBzaW1jdGwgc2h1dGRvd24gJHtWfWApLGF3YWl0IHcoKX1maW5hbGx5e04oKEQpPT57bGV0IE09bmV3IFNldChEKTtyZXR1cm4gTS5kZWxldGUoViksTX0pfX0sW3csTl0pLE4xPWw4KHtkZWZhdWx0V2lkdGg6dSx2aWV3cG9ydFdpZHRoOmgxLHZpZXdwb3J0SGVpZ2h0OlcxLGFzcGVjdFJhdGlvOnIsb25TdGFydDooKT0+JDAoITEpfSksdzE9Qj9HMTpVP0MxOlkxP0YxOjAsYTE9MTIsbDE9MjQsRTE9dzE+MD93MStsMTowLFgwPTA7aWYodzE+MCl7bGV0IFY9aDEtYTEtdzEsRD1UMT4wP01hdGgubWluKFQxLE4xLndpZHRoKTpOMS53aWR0aCxiPWgxLzIrRC8yLShWLWwxKTtpZihiPjApe2xldCBmPTIqYjtYMD1mPD1FMT9mOjB9fXJldHVybiBKKE8zLHtlbmRwb2ludDpHP0M/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOkooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1zY3JlZW4gYmctcGFnZSBweS02IHBsLTYgZ2FwLTMgZm9udC1zeXN0ZW0gYm94LWJvcmRlciIsc3R5bGU6e3BhZGRpbmdSaWdodDoyNCtYMCx0cmFuc2l0aW9uOk4xLmlzUmVzaXppbmd8fE4xLmlzSW5lcnRpYT8ibm9uZSI6djN9LGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIG1pbi13LTAiLHN0eWxlOnt3aWR0aDpOMS53aWR0aCx0cmFuc2l0aW9uOk4xLmlzUmVzaXppbmd8fE4xLmlzSW5lcnRpYT9uMjpzMn0sY2hpbGRyZW46W0ooTzEse2V4ZWM6TDEsb25Sb3RhdGU6cyxvcmllbnRhdGlvbjpwLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6Qy5kZXZpY2UsZGV2aWNlTmFtZTpFPy5uYW1lPz9udWxsLGRldmljZVJ1bnRpbWU6RT8ucnVudGltZT8/bnVsbCxzdHJlYW1pbmc6ayxjaGlsZHJlbjpbSihiMyx7ZGV2aWNlczokLHNlbGVjdGVkVWRpZDpDLmRldmljZSxsb2FkaW5nOkssZXJyb3I6WCxzdG9wcGluZ1VkaWRzOlEsb25SZWZyZXNoOncsb25TZWxlY3Q6WTAsb25TdG9wOmMxLHRyaWdnZXI6SihPMS5UaXRsZSx7fSl9KSxKKE8xLkFjdGlvbnMse2NoaWxkcmVuOltpPy5pc1JlYWN0TmF0aXZlJiZKKE8xLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiJSZWxvYWQgUmVhY3QgTmF0aXZlIGJ1bmRsZSIsdGl0bGU6IlJlbG9hZCAoQ21kK1IpIixvbkNsaWNrOigpPT52b2lkIHEwKCksY2hpbGRyZW46SihKMCx7fSl9KSxKKE8xLkhvbWVCdXR0b24se29uQ2xpY2s6KFYpPT57Vi5wcmV2ZW50RGVmYXVsdCgpLEoxKCJob21lIil9fSksSihUMyx7b3ZlcmxheUVuYWJsZWQ6RyxzdHJlYW1pbmc6ayxvblRvZ2dsZU92ZXJsYXk6KCk9PlkoKFYpPT4hVil9KSxKKE8xLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSldfSldfSksSigiZGl2Iix7cmVmOnYxLGNsYXNzTmFtZToicmVsYXRpdmUgbWF4LWgtZnVsbCIsc3R5bGU6e3dpZHRoOk4xLndpZHRoLGFzcGVjdFJhdGlvOiQxLHRyYW5zaXRpb246TjEuaXNSZXNpemluZ3x8TjEuaXNJbmVydGlhP24yOnMyLHdpbGxDaGFuZ2U6TjEuaXNSZXNpemluZ3x8TjEuaXNJbmVydGlhPyJ3aWR0aCI6dm9pZCAwfSwuLi5HMC5kcm9wWm9uZVByb3BzLGNoaWxkcmVuOltKKEMyLHt1cmw6Qy51cmwsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGJvcmRlcjoibm9uZSIscG9pbnRlckV2ZW50czpOMS5pc1Jlc2l6aW5nfHxOMS5pc0luZXJ0aWE/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOmQsY29ybmVyU2hhcGU6InN1cGVyZWxsaXBzZSgxLjMpIixib3JkZXJXaWR0aDoiMXB4Iixib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikifSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6eixvblN0cmVhbVRvdWNoOksxLG9uU3RyZWFtTXVsdGlUb3VjaDpuLG9uU3RyZWFtQnV0dG9uOkoxLHN1YnNjcmliZUZyYW1lOlIuc3Vic2NyaWJlRnJhbWUsc3RyZWFtRnJhbWU6Ui5mcmFtZSxzdHJlYW1Db25maWc6cCxvblNjcmVlbkNvbmZpZ0NoYW5nZTplfSksRyYmSihBMyx7fSksRzAuaXNEcmFnT3ZlciYmSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIGJvcmRlci0yIGJvcmRlci1kYXNoZWQgYm9yZGVyLWFjY2VudCBiZy1bcmdiYSg5OSwxMDIsMjQxLDAuMTIpXSBiYWNrZHJvcC1ibHVyLVsycHhdIHRleHQtYWNjZW50IHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpkfSxjaGlsZHJlbjpbSigic3ZnIix7d2lkdGg6IjMyIixoZWlnaHQ6IjMyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00In0pLEooInBvbHlsaW5lIix7cG9pbnRzOiIxNyA4IDEyIDMgNyA4In0pLEooImxpbmUiLHt4MToiMTIiLHkxOiIzIix4MjoiMTIiLHkyOiIxNSJ9KV19KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46IkRyb3AgbWVkaWEgb3IgLmlwYSJ9KV19KSxKKFk4LHtzaW11bGF0b3JSZXNpemU6TjEsZGV2aWNlVHlwZTp5LHN0cmVhbUNvbmZpZzpwLGNvbnRhaW5lcldpZHRoOlQxfHxOMS53aWR0aCxjb250YWluZXJIZWlnaHQ6ajF8fChyPjA/TjEud2lkdGgvcjowKX0pLEooRzgse3dpZHRoOlQxfHxOMS53aWR0aCxoZWlnaHQ6ajF8fChyPjA/TjEud2lkdGgvcjowKSx2aXNpYmxlOk4xLmlzUmVzaXppbmd8fE4xLmlzSW5lcnRpYX0pXX0pXX0pLE0xLnRvYXN0cy5sZW5ndGg+MCYmSigiZGl2Iix7Y2xhc3NOYW1lOiJmaXhlZCBib3R0b20tNCByaWdodC00IGZsZXggZmxleC1jb2wgZ2FwLTEuNSBtYXgtdy1bMzIwcHhdIHotMzAiLGNoaWxkcmVuOk0xLnRvYXN0cy5tYXAoKFYpPT57bGV0IEQ9Vi5zdGF0dXM9PT0iZXJyb3IiLE09Vi5zdGF0dXM9PT0idXBsb2FkaW5nIixiPU0mJlYucHJvZ3Jlc3MhPT1udWxsLGY9Vi5wcm9ncmVzcyE9bnVsbD9NYXRoLnJvdW5kKFYucHJvZ3Jlc3MqMTAwKTowO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6YGZsZXggZmxleC1jb2wgZ2FwLTEuNSBweC0zIHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tb25vIHNoYWRvdy1bMF80cHhfMTJweF9yZ2JhKDAsMCwwLDAuNCldICR7RD8ic2VsZWN0LXRleHQgY3Vyc29yLXRleHQiOiJzZWxlY3Qtbm9uZSBjdXJzb3ItZGVmYXVsdCJ9YCxjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuM3NdIixzdHlsZTp7YmFja2dyb3VuZDpNPyIjYTViNGZjIjpWLnN0YXR1cz09PSJzdWNjZXNzIj8iIzRhZGU4MCI6IiNmODcxNzEifX0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W00mJmImJmBVcGxvYWRpbmcgJHtWLm5hbWV94oCmICR7Zn0lYCxNJiYhYiYmKFYua2luZD09PSJpcGEiP2BJbnN0YWxsaW5nICR7Vi5uYW1lfeKApmA6YEFkZGluZyAke1YubmFtZX3igKZgKSxWLnN0YXR1cz09PSJzdWNjZXNzIiYmKFYua2luZD09PSJpcGEiP2BJbnN0YWxsZWQgJHtWLm5hbWV9YDpgQWRkZWQgJHtWLm5hbWV9IHRvIFBob3Rvc2ApLEQmJmAke1YubmFtZX06ICR7Vi5tZXNzYWdlPz8iVXBsb2FkIGZhaWxlZCJ9YF19KV19KSxNJiZKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGgtWzNweF0gdy1mdWxsIGJnLXdoaXRlLzggcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4iLGNoaWxkcmVuOmI/SigiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgYmctYWNjZW50IHJvdW5kZWQtWzJweF0gW3RyYW5zaXRpb246d2lkdGhfMTIwbXNfbGluZWFyXSIsc3R5bGU6e3dpZHRoOmAke2Z9JWB9fSk6SigiZGl2Iix7Y2xhc3NOYW1lOiJzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaC1mdWxsIHctWzQwJV0gYmctYWNjZW50IHJvdW5kZWQtWzJweF0ifSl9KV19LFYuaWQpfSl9KSxKKCJkaXYiLHtjbGFzc05hbWU6YGZpeGVkIHRvcC0zIHJpZ2h0LTMgZmxleCBmbGV4LWNvbCBnYXAtMSBwLTEgYmctcGFuZWwtYmcgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGJhY2tkcm9wLWJsdXItWzEycHhdIFstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMThzX2Vhc2VdIHotNDAgJHtZMXx8Qnx8VT8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOltKKCJidXR0b24iLHtvbkNsaWNrOigpPT57TCghMSksRighMSksWjEoKFYpPT4hVil9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOlkxLHRpdGxlOiJUb29scyIsY2hpbGRyZW46Sigic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS43NSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInJlY3QiLHt4OiIzIix5OiI0Iix3aWR0aDoiMTgiLGhlaWdodDoiMTYiLHJ4OiIyLjUifSksSigibGluZSIse3gxOiIxNSIseTE6IjQiLHgyOiIxNSIseTI6IjIwIn0pXX0pfSksSigiYnV0dG9uIix7b25DbGljazooKT0+e1oxKCExKSxGKCExKSxMKChWKT0+IVYpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIFdlYktpdCBEZXZUb29scyIsImFyaWEtcHJlc3NlZCI6Qix0aXRsZToiV2ViS2l0IERldlRvb2xzIixjaGlsZHJlbjpKKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjc1IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn0pLEooInBhdGgiLHtkOiJNMTIgMmExNC41IDE0LjUgMCAwIDAgMCAyMCAxNC41IDE0LjUgMCAwIDAgMC0yMCJ9KSxKKCJwYXRoIix7ZDoiTTIgMTJoMjAifSldfSl9KSxKKCJidXR0b24iLHtvbkNsaWNrOigpPT57WjEoITEpLEwoITEpLEYoKFYpPT4hVil9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gc2ltdWxhdG9yIGdyaWQiLCJhcmlhLXByZXNzZWQiOlUsdGl0bGU6IlNpbXVsYXRvcnMiLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNzUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjciLGhlaWdodDoiNyIscng6IjEuNSJ9KSxKKCJyZWN0Iix7eDoiMTQiLHk6IjMiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxLjUifSksSigicmVjdCIse3g6IjMiLHk6IjE0Iix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMS41In0pLEooInJlY3QiLHt4OiIxNCIseToiMTQiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxLjUifSldfSl9KV19KSxKKGg4LHtvcGVuOlkxLG9uQ2xvc2U6KCk9PloxKCExKSx1ZGlkOkMuZGV2aWNlLGN1cnJlbnRBcHA6aSxheE92ZXJsYXlFbmFibGVkOkcsb25Ub2dnbGVBeE92ZXJsYXk6KCk9PlkoKFYpPT4hViksd2lkdGg6RjF9KSxKKEIyLHtwYW5lbFdpZHRoOkYxLHZpc2libGU6WTEsb25Qb2ludGVyRG93bjpTMSxhcmlhTGFiZWw6IlJlc2l6ZSB0b29scyBwYW5lbCJ9KSxKKFMzLHtvcGVuOlUsb25DbG9zZTooKT0+RighMSksY3VycmVudFVkaWQ6Qy5kZXZpY2Usd2lkdGg6QzF9KSxKKEIyLHtwYW5lbFdpZHRoOkMxLHZpc2libGU6VSxvblBvaW50ZXJEb3duOnExLGFyaWFMYWJlbDoiUmVzaXplIHNpbXVsYXRvcnMgcGFuZWwifSksSihtOCx7b3BlbjpCLG9uQ2xvc2U6KCk9PkwoITEpLHVkaWQ6Qy5kZXZpY2UsdGFyZ2V0czpjLnRhcmdldHMsc2VsZWN0ZWRUYXJnZXRJZDpULG9uU2VsZWN0VGFyZ2V0Ol8sbG9hZGluZzpjLmxvYWRpbmcsZXJyb3I6Yy5lcnJvcixvblJlZnJlc2g6KCk9PnZvaWQgYy5yZWZyZXNoKCksd2lkdGg6RzF9KSxKKEIyLHtwYW5lbFdpZHRoOkcxLHZpc2libGU6QixvblBvaW50ZXJEb3duOlAxLGFyaWFMYWJlbDoiUmVzaXplIFdlYktpdCBEZXZUb29scyBwYW5lbCJ9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgdGV4dC1bMTJweF0gZm9udC1tb25vIHRleHQtd2hpdGUvNDAiLGNoaWxkcmVuOkooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC1bNXB4XSBbdHJhbnNpdGlvbjpjb2xvcl8wLjNzXSIsc3R5bGU6e2NvbG9yOms/IiM0YWRlODAiOiIjNjY2In0sY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuM3NdIixzdHlsZTp7YmFja2dyb3VuZDprPyIjNGFkZTgwIjoiIzY2NiJ9fSksaz8ibGl2ZSI6ImNvbm5lY3RpbmciXX0pfSldfSl9KX1yNShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoSih1NCx7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return Ve}function CC(){try{let _=R_("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),e=JSON.parse(_),S=[];for(let[t,s]of Object.entries(e.devices)){if(!/SimRuntime\.iOS-/i.test(t))continue;for(let i of s){if(i.isAvailable===!1)continue;S.push({...i,runtime:t.replace(/^.*SimRuntime\./,"")})}}return S}catch{return[]}}function $C(){try{let _=Number(R_("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),e=Number(R_("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),S=R_("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),t=(i)=>{let C=S.match(i);return C?Number(C[1]):0},s=t(/Pages free:\s+(\d+)/)+t(/Pages inactive:\s+(\d+)/)+t(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(_)?_:0,availableBytes:s*(Number.isFinite(e)?e:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function AC(){try{let _=R_("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),e={},S=0,t=/\/Devices\/([0-9A-F-]{36})\//i;for(let s of _.split(`
|
|
40
|
-
`)){let i=s.trimStart();if(!i)continue;let C=t.exec(i);if(!C)continue;let o=Number(i.split(/\s+/,1)[0]);if(!Number.isFinite(o))continue;let r=o*1024,A=C[1].toUpperCase();e[A]=(e[A]??0)+r,S+=r}return{perUdid:e,totalBytes:S}}catch{return{perUdid:{},totalBytes:0}}}function
|
|
39
|
+
`+D)}function y($,n,D,w,g,h){if($.listenerCount("wsClientError")){let m=Error(g);Error.captureStackTrace(m,y),$.emit("wsClientError",m,D,n)}else b(D,w,g,h)}});C$=r_(Ys(),1),r$=r_(Ve(),1),$$=r_(L_(),1),A$=r_(PS(),1),o$=r_(MS(),1),y$=r_(US(),1),ci=r_(he(),1),jS=r_(_i(),1),LS=ci.default;wi={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},gi={"Network.requestWillBeSent":{walltime:"wallTime"}},di={hasUserGesture:!1,redirectHasExtraInfo:!1},Hi={hasExtraInfo:!1},Ni={encodedDataLength:0,shouldReportCorbBlocking:!1},Vi={initialPriority:"Medium",referrerPolicy:"origin"},hi={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};ki={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};Ji={protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"605.1.15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""};sC=["Animation","Autofill","Audits","ServiceWorker","Profiler","HeapProfiler","Storage","Tethering","Tracing","BackgroundService","FedCm","DeviceAccess","WebAuthn","Cast","Database","ApplicationCache","BackgroundFetch","DeviceOrientation","EventBreakpoints","FileSystem","HeadlessExperimental","IndexedDB","Memory","PerformanceTimeline","Performance","Preload","Schema","Security","SystemInfo","WebAudio"],iC={"Inspector.enable":{},"Inspector.disable":{},"Network.setAttachDebugStack":{},"Network.emulateNetworkConditionsByRule":{ruleIds:[]},"Network.overrideNetworkState":{},"Network.clearAcceptedEncodingsOverride":{},"Network.setAcceptedEncodings":{},"Network.enableReportingApi":{},"Overlay.setShowHinge":{},"Overlay.setShowViewportSizeOnResize":{},"Overlay.setShowGridOverlays":{},"Overlay.setShowFlexOverlays":{},"Overlay.setShowScrollSnapOverlays":{},"Overlay.setShowContainerQueryOverlays":{},"Overlay.setShowIsolatedElements":{},"Overlay.setPausedInDebuggerMessage":{},"Overlay.setShowAdHighlights":{},"Overlay.setShowDebugBorders":{},"Overlay.setShowFPSCounter":{},"Overlay.setShowLayoutShiftRegions":{},"Overlay.setShowScrollBottleneckRects":{},"Overlay.setShowHitTestBorders":{},"Overlay.setShowWebVitals":{},"CSS.trackComputedStyleUpdates":{},"CSS.takeComputedStyleUpdates":{nodeIds:[]},"CSS.startRuleUsageTracking":{},"CSS.stopRuleUsageTracking":{ruleUsage:[]},"CSS.takeCoverageDelta":{coverage:[],timestamp:0},"Page.setAdBlockingEnabled":{},"Page.removeScriptToEvaluateOnNewDocument":{},"Page.setBypassCSP":{},"Page.setInterceptFileChooserDialog":{},"Page.setPrerenderingAllowed":{},"Page.setRPHRegistrationMode":{},"Page.setSPCTransactionMode":{},"Emulation.setEmulatedVisionDeficiency":{},"Emulation.setFocusEmulationEnabled":{},"Emulation.setAutoDarkModeOverride":{},"Emulation.setAutomationOverride":{},"Emulation.setLocaleOverride":{},"Emulation.setTimezoneOverride":{},"Emulation.setVisibleSize":{},"Emulation.setIdleOverride":{},"Emulation.clearIdleOverride":{},"Emulation.setGeolocationOverride":{},"Emulation.clearGeolocationOverride":{},"Emulation.setSensorOverrideEnabled":{},"Emulation.setSensorOverrideReadings":{},"Emulation.setHardwareConcurrencyOverride":{},"Emulation.setNavigatorOverrides":{},"Emulation.setPageScaleFactor":{},"Emulation.setScrollbarsHidden":{},"Emulation.setDocumentCookieDisabled":{},"DOMDebugger.setBreakOnCSPViolation":{},"Runtime.addBinding":{},"Runtime.removeBinding":{},"Debugger.setReturnValue":{},"Debugger.setBlackboxExecutionContexts":{},"Debugger.setInstrumentationBreakpoint":{},"DOM.markUndoableState":{},"DOM.undo":{},"DOM.redo":{},"DOM.copyTo":{nodeId:0},"DOM.collectClassNamesFromSubtree":{classNames:[]},"Accessibility.enable":{},"Accessibility.disable":{},"Accessibility.getFullAXTree":{nodes:[]},"Accessibility.getRootAXNode":{node:null},"Accessibility.getPartialAXTree":{nodes:[]},"Accessibility.queryAXTree":{nodes:[]},"Accessibility.getAXNodeAndAncestors":{nodes:[]},"Accessibility.getChildAXNodes":{nodes:[]}};rC={"&":"&","<":"<",">":">",'"':""","'":"'"}});var ft={};RS(ft,{simMiddleware:()=>ZC,selectServeSimState:()=>c_,previewConfigForState:()=>Ie,parseForegroundAppLogMessage:()=>Tt,matchInstalledAppByDisplayName:()=>LC});import{readdirSync as vC,readFileSync as pC,existsSync as ct,unlinkSync as At}from"fs";import{execSync as D_,spawn as Ge,exec as uC,execFile as Dt}from"child_process";import{tmpdir as lC}from"os";import{join as ke}from"path";import{createServer as wC}from"net";import{randomBytes as gC,timingSafeEqual as dC}from"crypto";function yt(_){return!mC.test(_)}function Tt(_){let e=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(_);if(!e)return null;return{bundleId:e[1],pid:parseInt(e[2],10)}}function nt(_,e){if(VC.has(e))return Promise.resolve(!0);return new Promise((S)=>{Dt("xcrun",["simctl","get_app_container",_,e,"app"],{timeout:2000},(t,s)=>{if(t)return S(!1);let i=s.trim();if(!i)return S(!1);for(let C of hC)if(ct(ke(i,C)))return S(!0);S(!1)})})}function at(_){return _.trim().replace(/\s+/g," ").toLowerCase()}function LC(_,e){let S=at(e);if(!S)return null;for(let[t,s]of Object.entries(_))if([s.CFBundleDisplayName,s.CFBundleName,s.CFBundleExecutable].filter((C)=>typeof C==="string").some((C)=>at(C)===S))return s.CFBundleIdentifier||t;return null}function WC(){let _=Date.now();if(M_.booted&&_-M_.at<1500)return M_.booted;try{let e=D_("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),S=JSON.parse(e),t=new Set;for(let s of Object.values(S.devices))for(let i of s)if(i.state==="Booted")t.add(i.udid);return M_={at:_,booted:t},t}catch{return null}}function B_(){let _;try{_=vC(ot).filter((t)=>t.startsWith("server-")&&t.endsWith(".json"))}catch{return[]}let e=WC(),S=[];for(let t of _){let s=ke(ot,t);try{let i=JSON.parse(pC(s,"utf-8"));try{process.kill(i.pid,0)}catch{try{At(s)}catch{}continue}if(e&&!e.has(i.device)){try{process.kill(i.pid,"SIGTERM")}catch{}try{At(s)}catch{}continue}S.push(i)}catch{}}return S}function c_(_,e){if(e)return _.find((S)=>S.device===e)??null;return _[0]??null}function PC(_){let e=_.indexOf("?");if(e===-1)return null;return new URLSearchParams(_.slice(e+1)).get("device")}function _e(_,e,S){return`${`${_}${e}`}?device=${encodeURIComponent(S)}`}function Ie(_,e,S,t){let s=(e===""?"":e)+"/grid/api";return{..._,basePath:e,logsEndpoint:_e(e,"/logs",_.device),appStateEndpoint:_e(e,"/appstate",_.device),axEndpoint:_e(e,"/ax",_.device),devtoolsEndpoint:_e(e,"/devtools",_.device),serveSimBin:S,gridApiEndpoint:s,gridStartEndpoint:s+"/start",gridShutdownEndpoint:s+"/shutdown",gridMemoryEndpoint:s+"/memory",previewEndpoint:e===""?"/":e,execToken:t}}async function MC(_){return new Promise((e)=>{let S=wC();S.once("error",()=>e(!1)),S.once("listening",()=>S.close(()=>e(!0))),S.listen(_,"127.0.0.1")})}async function Rt(_){let e=`http://127.0.0.1:${_}`;try{let S=await fetch(`${e}/json/version`);if(!S.ok)return null;if((await S.json()).Browser!=="Safari/inspect-webkit")return null;return{port:_,cdpUrl:e,async listTargets(){return(await(await fetch(`${e}/json/list`)).json()).filter((C)=>C.id.startsWith("sim:")).map((C)=>{let r=C.id.split(":")[1],A=C.description?.match(/\(([^)]+)\)/)?.[1];return{id:C.id,title:C.title||C.url||"Untitled",url:/^https?:/i.test(C.url)?C.url:"about:blank",type:C.type||"page",udid:r,bundleId:A}})}}}catch{return null}}async function qe(){if(R_)try{return await(await R_).listTargets(),R_}catch{R_=null}return R_=(async()=>{let{startCdpServer:_}=await Promise.resolve().then(() => ($t(),rt));for(let e=Y_;e<Y_+50;e++){if(!await MC(e)){let S=await Rt(e);if(S)return S;continue}try{let S=await _({host:"127.0.0.1",port:e});return{port:e,cdpUrl:`http://127.0.0.1:${e}`,async listTargets(){return S.getTargets().filter((t)=>t.source?.kind==="simulator").map((t)=>{let s=t.url??"";return{id:t.targetId,title:t.title||t.appName||s||"Untitled",url:/^https?:/i.test(s)?s:"about:blank",type:t.type||"page",appName:t.appName,bundleId:t.bundleId,udid:t.source?.id,inUseByOtherInspector:!!t.inUseByOtherInspector}})},highlightTarget:S.highlightTarget?.bind(S),releaseHighlight:S.releaseHighlight?.bind(S)}}catch(S){if(S?.code==="EADDRINUSE"){let t=await Rt(e);if(t)return t;continue}throw S}}throw Error(`No available inspect-webkit port found in ${Y_}-${Y_+49}`)})().catch((_)=>{throw R_=null,_}),R_}function UC(_,e,S){let t=new URL(`${_}/inspector.html`,"http://serve-sim.local");return t.searchParams.set("ws",`${e}/devtools/page/${S}`),`${t.pathname}${t.search}`}function GC(_,e){return`127.0.0.1:${e}`}function Bt(){try{let _=process.argv;if(_[1]&&ct(_[1]))return _[1]}catch{}return"serve-sim"}function qC(){if(!Xe)Xe=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1ub3JtYWw6NDAwOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXdpZGU6LjAyNWVtOy0tbGVhZGluZy10aWdodDoxLjI1Oy0tcmFkaXVzLXhzOi4xMjVyZW07LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzojMTQxNDE2ZWI7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxNDE0MTZhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2VzczojNGFkZTgwOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLjV7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMVwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnJpZ2h0LTJcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5yaWdodC0ze3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnJpZ2h0LTR7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucmlnaHQtXFs5cHhcXXtyaWdodDo5cHh9LmJvdHRvbS0we2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5ib3R0b20tM3tib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uYm90dG9tLTR7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqNCl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LnotXFsyXF17ei1pbmRleDoyfS5jb2wtc3Bhbi1mdWxse2dyaWQtY29sdW1uOjEvLTF9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMTApfS5oLVxbM3B4XF17aGVpZ2h0OjNweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzIycHhcXXtoZWlnaHQ6MjJweH0uaC1cWzI2cHhcXXtoZWlnaHQ6MjZweH0uaC1cWzMwcHhcXXtoZWlnaHQ6MzBweH0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXB4e2hlaWdodDoxcHh9Lmgtc2NyZWVue2hlaWdodDoxMDB2aH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFs3MHZoXF17bWF4LWhlaWdodDo3MHZofS5tYXgtaC1cWzI2MHB4XF17bWF4LWhlaWdodDoyNjBweH0ubWF4LWgtXFszMjBweFxde21heC1oZWlnaHQ6MzIwcHh9Lm1heC1oLWZ1bGx7bWF4LWhlaWdodDoxMDAlfS5taW4taC0we21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLWgtXFsyMnB4XF17bWluLWhlaWdodDoyMnB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0udy01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnctNVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LnctNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS53LTd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0udy0xMHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0udy0yMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIxKX0udy1cWzIycHhcXXt3aWR0aDoyMnB4fS53LVxbMzBweFxde3dpZHRoOjMwcHh9LnctXFs0MFwlXF17d2lkdGg6NDAlfS53LVxbY2FsY1woMTAwXCVcKzhweFwpXF17d2lkdGg6Y2FsYygxMDAlICsgOHB4KX0udy1mdWxse3dpZHRoOjEwMCV9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzMyMHB4XF17bWF4LXdpZHRoOjMyMHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy02NXttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2NSl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0ucm90YXRlLTB7cm90YXRlOm5vbmV9LnJvdGF0ZS0xODB7cm90YXRlOjE4MGRlZ30udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5hdXRvLXJvd3MtXFttaW5tYXhcKDMwMHB4XCxhdXRvXClcXXtncmlkLWF1dG8tcm93czptaW5tYXgoMzAwcHgsYXV0byl9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDoxZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcn0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0b30uZ3JpZC1jb2xzLVxbcmVwZWF0XChhdXRvLWZpbGxcLG1pbm1heFwoMjAwcHhcLDFmclwpXClcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjAwcHgsMWZyKSl9LmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jb250ZW50LXN0YXJ0e2FsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnR9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtXFs1cHhcXXtnYXA6NXB4fS5nYXAtcHh7Z2FwOjFweH0uanVzdGlmeS1zZWxmLWVuZHtqdXN0aWZ5LXNlbGY6ZmxleC1lbmR9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC1cWzJweFxde2JvcmRlci1yYWRpdXM6MnB4fS5yb3VuZGVkLVxbM3B4XF17Ym9yZGVyLXJhZGl1czozcHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFsxMHB4XF17Ym9yZGVyLXJhZGl1czoxMHB4fS5yb3VuZGVkLVxbMTRweFxde2JvcmRlci1yYWRpdXM6MTRweH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLWxnKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlwhYm9yZGVyLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC42XClcXXtib3JkZXItY29sb3I6IzBhODRmZjk5IWltcG9ydGFudH0uYm9yZGVyLVxbXCMyYTJhMmFcXXtib3JkZXItY29sb3I6IzJhMmEyYX0uYm9yZGVyLVxbXCMyMjJcXXtib3JkZXItY29sb3I6IzIyMn0uYm9yZGVyLVxbXCMzMzNcXXtib3JkZXItY29sb3I6IzMzM30uYm9yZGVyLVxbXCM0NDRcXXtib3JkZXItY29sb3I6IzQ0NH0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTV7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzE1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMxYTFhMWFcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYTFhMWF9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCMxZDJhMWRcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxZDJhMWR9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMxMTFcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoMjBcLDIwXCwyMFwsMFwuODVcKVxde2JhY2tncm91bmQtY29sb3I6IzE0MTQxNGQ5fS5iZy1cW3JnYmFcKDIwXCwyMlwsMjhcLDBcLjc4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxNDE2MWNjN30uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjEyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjExZn0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtZGVlcHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWRlZXApfS5iZy1wYW5lbC1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtb3ZlcmxheSl9LmJnLXN1Y2Nlc3MtZW1lcmFsZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXN1Y2Nlc3MtZW1lcmFsZCl9LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6IzAwMDB9LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZiYmYyNDFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtMntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMil9LnAtM3twYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC00e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtXFs3cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo3cHg7cGFkZGluZy1pbmxpbmUtZW5kOjdweH0ucHktMFwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5weS0xe3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHktMVwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHktMntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMil9LnB5LTJcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHktcHh7cGFkZGluZy1ibG9jay1zdGFydDoxcHg7cGFkZGluZy1ibG9jay1lbmQ6MXB4fS5wdC0xe3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB0LTFcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wdC0ye3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLVxbMnB4XF17cGFkZGluZy1ib3R0b206MnB4fS5wbC0ye3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnBsLTZ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNil9LnBsLTd7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LnBsLVxbMjZweFxde3BhZGRpbmctbGVmdDoyNnB4fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0uXFtmb250LWZhbWlseVw6LWFwcGxlLXN5c3RlbVwsc3lzdGVtLXVpXCxzYW5zLXNlcmlmXF17Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxOb3RvIFNhbnMsVWJ1bnR1LENhbnRhcmVsbCxIZWx2ZXRpY2EgTmV1ZSxzYW5zLXNlcmlmfS5mb250LVxbaW5oZXJpdFxde2ZvbnQtZmFtaWx5OmluaGVyaXR9LmZvbnQtbW9ub3tmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pfS5mb250LXN5c3RlbXtmb250LWZhbWlseTp2YXIoLS1mb250LXN5c3RlbSl9LnRleHQtXFs5cHhcXXtmb250LXNpemU6OXB4fS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LVxbMTFcLjVweFxde2ZvbnQtc2l6ZToxMS41cHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtXFsxM3B4XF17Zm9udC1zaXplOjEzcHh9LnRleHQtXFsxNHB4XF17Zm9udC1zaXplOjE0cHh9LnRleHQtXFsxOHB4XF17Zm9udC1zaXplOjE4cHh9LnRleHQtXFsyOHB4XF17Zm9udC1zaXplOjI4cHh9LmxlYWRpbmctXFsxXC41XF17LS10dy1sZWFkaW5nOjEuNTtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctXFsxXC4zNVxdey0tdHctbGVhZGluZzoxLjM1O2xpbmUtaGVpZ2h0OjEuMzV9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXRpZ2h0ey0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXRpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXRpZ2h0KX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtbm9ybWFsey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctXFswXC4xZW1cXXstLXR3LXRyYWNraW5nOi4xZW07bGV0dGVyLXNwYWNpbmc6LjFlbX0udHJhY2tpbmctXFswXC4wMmVtXF17LS10dy10cmFja2luZzouMDJlbTtsZXR0ZXItc3BhY2luZzouMDJlbX0udHJhY2tpbmctXFswXC4wNGVtXF17LS10dy10cmFja2luZzouMDRlbTtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17LS10dy10cmFja2luZzouMDZlbTtsZXR0ZXItc3BhY2luZzouMDZlbX0udHJhY2tpbmctXFswXC4wOGVtXF17LS10dy10cmFja2luZzouMDhlbTtsZXR0ZXItc3BhY2luZzouMDhlbX0udHJhY2tpbmctd2lkZXstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXdpZGUpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGUpfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnRleHQtZWxsaXBzaXN7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5cIXRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpIWltcG9ydGFudH0udGV4dC1cW1wjMGEwYTBjXF17Y29sb3I6IzBhMGEwY30udGV4dC1cW1wjOGU4ZTkzXF17Y29sb3I6IzhlOGU5M30udGV4dC1cW1wjMDYyMDE4XF17Y29sb3I6IzA2MjAxOH0udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtaW5oZXJpdHtjb2xvcjppbmhlcml0fS50ZXh0LXN1Y2Nlc3N7Y29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcyl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5vcGFjaXR5LTB7b3BhY2l0eTowfS5vcGFjaXR5LTQwe29wYWNpdHk6LjR9Lm9wYWNpdHktNTB7b3BhY2l0eTouNX0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF80cHhfMTJweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDRweCAxMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMTJweF80MHB4X3JnYmFcKDBcLDBcLDBcLDBcLjU1XClcXXstLXR3LXNoYWRvdzowIDEycHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDhjKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmd7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDFweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoNzRcLDIyMlwsMTI4XCwwXC43XClcXXtib3gtc2hhZG93OjAgMCA2cHggIzRhZGU4MGIzfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoMjQ4XCwxMTNcLDExM1wsMFwuNTVcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjZjg3MTcxOGN9Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1ci1cWzJweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LnRyYW5zaXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10byxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLHRyYW5zbGF0ZSxzY2FsZSxyb3RhdGUsZmlsdGVyLC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyLGJhY2tkcm9wLWZpbHRlcixkaXNwbGF5LGNvbnRlbnQtdmlzaWJpbGl0eSxvdmVybGF5LHBvaW50ZXItZXZlbnRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFtib3JkZXItY29sb3JcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFt3aWR0aFwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6d2lkdGgsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0uZHVyYXRpb24tMTUwey0tdHctZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHstLXR3LWR1cmF0aW9uOi4yczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZHVyYXRpb24tMzAwey0tdHctZHVyYXRpb246LjNzO3RyYW5zaXRpb24tZHVyYXRpb246LjNzfS5lYXNlLW91dHstLXR3LWVhc2U6dmFyKC0tZWFzZS1vdXQpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2Utb3V0KX0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdC10ZXh0ey13ZWJraXQtdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0fS5cWy13ZWJraXQtYXBwZWFyYW5jZVw6bm9uZVxdey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5cWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyXDpibHVyXCgxMnB4XClcXXstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpfS5cW3Njcm9sbGJhci13aWR0aFw6dGhpblxde3Njcm9sbGJhci13aWR0aDp0aGlufS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMnNcLGJveC1zaGFkb3dfMFwuMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzLGJveC1zaGFkb3cgLjJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuM3NcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjNzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxib3JkZXItY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsYm9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJvcmRlci1jb2xvcl8xMjBtc1xde3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6Y29sb3JfMFwuM3NcXXt0cmFuc2l0aW9uOmNvbG9yIC4zc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDp0cmFuc2Zvcm1fMFwuMTVzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjF9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGU6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fX0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9fUBrZXlmcmFtZXMgZ3JpZC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDI1MCUpfX0uc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7YW5pbWF0aW9uOnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9LmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uZ3JpZC10aWxlOmhvdmVyIC5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjF9LmdyaWQtc2h1dGRvd24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNWExZDFkO2JvcmRlci1jb2xvcjojYTMzfS5ncmlkLXRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM1NTUhaW1wb3J0YW50fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZWFzZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKC13ZWJraXQtaHlwaGVuczogbm9uZSkgYW5kICggbm90IChtYXJnaW4tdHJpbTogaW5saW5lKSkpIG9yICgoLW1vei1vcmllbnQ6IGlubGluZSkgYW5kICggbm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpeyosOmJlZm9yZSw6YWZ0ZXIsOjpiYWNrZHJvcHstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctdHJhbnNsYXRlLXo6MDstLXR3LXJvdGF0ZS14OmluaXRpYWw7LS10dy1yb3RhdGUteTppbml0aWFsOy0tdHctcm90YXRlLXo6aW5pdGlhbDstLXR3LXNrZXcteDppbml0aWFsOy0tdHctc2tldy15OmluaXRpYWw7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBhMCxsLEI1LHM4LHIxLEc1LF81LGs1LEgyLGwwLEUwLEQ1LHcyLEEyLE8yLFU1LG8wPXt9LGQwPVtdLHQ4PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksSTA9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiB1MShDLCQpe2Zvcih2YXIgSyBpbiAkKUNbS109JFtLXTtyZXR1cm4gQ31mdW5jdGlvbiBiMihDKXtDJiZDLnBhcmVudE5vZGUmJkMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChDKX1mdW5jdGlvbiBwMShDLCQsSyl7dmFyIFgsTixRLFo9e307Zm9yKFEgaW4gJClRPT0ia2V5Ij9YPSRbUV06UT09InJlZiI/Tj0kW1FdOlpbUV09JFtRXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihaLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9hMC5jYWxsKGFyZ3VtZW50cywyKTpLKSx0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQy5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFEgaW4gQy5kZWZhdWx0UHJvcHMpWltRXT09PXZvaWQgMCYmKFpbUV09Qy5kZWZhdWx0UHJvcHNbUV0pO3JldHVybiB1MChDLFosWCxOLG51bGwpfWZ1bmN0aW9uIHUwKEMsJCxLLFgsTil7dmFyIFE9e3R5cGU6Qyxwcm9wczokLGtleTpLLHJlZjpYLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpOPT1udWxsPysrQjU6TixfX2k6LTEsX191OjB9O3JldHVybiBOPT1udWxsJiZsLnZub2RlIT1udWxsJiZsLnZub2RlKFEpLFF9ZnVuY3Rpb24gTjEoQyl7cmV0dXJuIEMuY2hpbGRyZW59ZnVuY3Rpb24gSDEoQywkKXt0aGlzLnByb3BzPUMsdGhpcy5jb250ZXh0PSR9ZnVuY3Rpb24gQjAoQywkKXtpZigkPT1udWxsKXJldHVybiBDLl9fP0IwKEMuX18sQy5fX2krMSk6bnVsbDtmb3IodmFyIEs7JDxDLl9fay5sZW5ndGg7JCsrKWlmKChLPUMuX19rWyRdKSE9bnVsbCYmSy5fX2UhPW51bGwpcmV0dXJuIEsuX19lO3JldHVybiB0eXBlb2YgQy50eXBlPT0iZnVuY3Rpb24iP0IwKEMpOm51bGx9ZnVuY3Rpb24gZTgoQyl7aWYoQy5fX1AmJkMuX19kKXt2YXIgJD1DLl9fdixLPSQuX19lLFg9W10sTj1bXSxRPXUxKHt9LCQpO1EuX192PSQuX192KzEsbC52bm9kZSYmbC52bm9kZShRKSxQMihDLl9fUCxRLCQsQy5fX24sQy5fX1AubmFtZXNwYWNlVVJJLDMyJiQuX191P1tLXTpudWxsLFgsSz09bnVsbD9CMCgkKTpLLCEhKDMyJiQuX191KSxOKSxRLl9fdj0kLl9fdixRLl9fLl9fa1tRLl9faV09USxBNShYLFEsTiksJC5fX2U9JC5fXz1udWxsLFEuX19lIT1LJiZGNShRKX19ZnVuY3Rpb24gRjUoQyl7aWYoKEM9Qy5fXykhPW51bGwmJkMuX19jIT1udWxsKXJldHVybiBDLl9fZT1DLl9fYy5iYXNlPW51bGwsQy5fX2suc29tZShmdW5jdGlvbigkKXtpZigkIT1udWxsJiYkLl9fZSE9bnVsbClyZXR1cm4gQy5fX2U9Qy5fX2MuYmFzZT0kLl9fZX0pLEY1KEMpfWZ1bmN0aW9uIFQyKEMpeyghQy5fX2QmJihDLl9fZD0hMCkmJnIxLnB1c2goQykmJiFjMC5fX3IrK3x8RzUhPWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKEc1PWwuZGVib3VuY2VSZW5kZXJpbmcpfHxfNSkoYzApfWZ1bmN0aW9uIGMwKCl7dHJ5e2Zvcih2YXIgQywkPTE7cjEubGVuZ3RoOylyMS5sZW5ndGg+JCYmcjEuc29ydChrNSksQz1yMS5zaGlmdCgpLCQ9cjEubGVuZ3RoLGU4KEMpfWZpbmFsbHl7cjEubGVuZ3RoPWMwLl9fcj0wfX1mdW5jdGlvbiB6NShDLCQsSyxYLE4sUSxaLHEsRyxZLEIpe3ZhciBMLEYsayxBLF8sRCx6LHc9WCYmWC5fX2t8fGQwLEU9JC5sZW5ndGg7Zm9yKEc9QzkoSywkLHcsRyxFKSxMPTA7TDxFO0wrKykoaz1LLl9fa1tMXSkhPW51bGwmJihGPWsuX19pIT0tMSYmd1trLl9faV18fG8wLGsuX19pPUwsRD1QMihDLGssRixOLFEsWixxLEcsWSxCKSxBPWsuX19lLGsucmVmJiZGLnJlZiE9ay5yZWYmJihGLnJlZiYmVzIoRi5yZWYsbnVsbCxrKSxCLnB1c2goay5yZWYsay5fX2N8fEEsaykpLF89PW51bGwmJkEhPW51bGwmJihfPUEpLCh6PSEhKDQmay5fX3UpKXx8Ri5fX2s9PT1rLl9faz8oRz1INShrLEcsQyx6KSx6JiZGLl9fZSYmKEYuX19lPW51bGwpKTp0eXBlb2Ygay50eXBlPT0iZnVuY3Rpb24iJiZEIT09dm9pZCAwP0c9RDpBJiYoRz1BLm5leHRTaWJsaW5nKSxrLl9fdSY9LTcpO3JldHVybiBLLl9fZT1fLEd9ZnVuY3Rpb24gQzkoQywkLEssWCxOKXt2YXIgUSxaLHEsRyxZLEI9Sy5sZW5ndGgsTD1CLEY9MDtmb3IoQy5fX2s9QXJyYXkoTiksUT0wO1E8TjtRKyspKFo9JFtRXSkhPW51bGwmJnR5cGVvZiBaIT0iYm9vbGVhbiImJnR5cGVvZiBaIT0iZnVuY3Rpb24iPyh0eXBlb2YgWj09InN0cmluZyJ8fHR5cGVvZiBaPT0ibnVtYmVyInx8dHlwZW9mIFo9PSJiaWdpbnQifHxaLmNvbnN0cnVjdG9yPT1TdHJpbmc/Wj1DLl9fa1tRXT11MChudWxsLFosbnVsbCxudWxsLG51bGwpOkkwKFopP1o9Qy5fX2tbUV09dTAoTjEse2NoaWxkcmVuOlp9LG51bGwsbnVsbCxudWxsKTpaLmNvbnN0cnVjdG9yPT09dm9pZCAwJiZaLl9fYj4wP1o9Qy5fX2tbUV09dTAoWi50eXBlLFoucHJvcHMsWi5rZXksWi5yZWY/Wi5yZWY6bnVsbCxaLl9fdik6Qy5fX2tbUV09WixHPVErRixaLl9fPUMsWi5fX2I9Qy5fX2IrMSxxPW51bGwsKFk9Wi5fX2k9JDkoWixLLEcsTCkpIT0tMSYmKEwtLSwocT1LW1ldKSYmKHEuX191fD0yKSkscT09bnVsbHx8cS5fX3Y9PW51bGw/KFk9PS0xJiYoTj5CP0YtLTpOPEImJkYrKyksdHlwZW9mIFoudHlwZSE9ImZ1bmN0aW9uIiYmKFouX191fD00KSk6WSE9RyYmKFk9PUctMT9GLS06WT09RysxP0YrKzooWT5HP0YtLTpGKyssWi5fX3V8PTQpKSk6Qy5fX2tbUV09bnVsbDtpZihMKWZvcihRPTA7UTxCO1ErKykocT1LW1FdKSE9bnVsbCYmKDImcS5fX3UpPT0wJiYocS5fX2U9PVgmJihYPUIwKHEpKSxUNShxLHEpKTtyZXR1cm4gWH1mdW5jdGlvbiBINShDLCQsSyxYKXt2YXIgTixRO2lmKHR5cGVvZiBDLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihOPUMuX19rLFE9MDtOJiZRPE4ubGVuZ3RoO1ErKylOW1FdJiYoTltRXS5fXz1DLCQ9SDUoTltRXSwkLEssWCkpO3JldHVybiAkfUMuX19lIT0kJiYoWCYmKCQmJkMudHlwZSYmISQucGFyZW50Tm9kZSYmKCQ9QjAoQykpLEsuaW5zZXJ0QmVmb3JlKEMuX19lLCR8fG51bGwpKSwkPUMuX19lKTtkbyAkPSQmJiQubmV4dFNpYmxpbmc7d2hpbGUoJCE9bnVsbCYmJC5ub2RlVHlwZT09OCk7cmV0dXJuICR9ZnVuY3Rpb24gbzEoQywkKXtyZXR1cm4gJD0kfHxbXSxDPT1udWxsfHx0eXBlb2YgQz09ImJvb2xlYW4ifHwoSTAoQyk/Qy5zb21lKGZ1bmN0aW9uKEspe28xKEssJCl9KTokLnB1c2goQykpLCR9ZnVuY3Rpb24gJDkoQywkLEssWCl7dmFyIE4sUSxaLHE9Qy5rZXksRz1DLnR5cGUsWT0kW0tdLEI9WSE9bnVsbCYmKDImWS5fX3UpPT0wO2lmKFk9PT1udWxsJiZxPT1udWxsfHxCJiZxPT1ZLmtleSYmRz09WS50eXBlKXJldHVybiBLO2lmKFg+KEI/MTowKSl7Zm9yKE49Sy0xLFE9SysxO04+PTB8fFE8JC5sZW5ndGg7KWlmKChZPSRbWj1OPj0wP04tLTpRKytdKSE9bnVsbCYmKDImWS5fX3UpPT0wJiZxPT1ZLmtleSYmRz09WS50eXBlKXJldHVybiBafXJldHVybi0xfWZ1bmN0aW9uIEw1KEMsJCxLKXskWzBdPT0iLSI/Qy5zZXRQcm9wZXJ0eSgkLEs9PW51bGw/IiI6Syk6Q1skXT1LPT1udWxsPyIiOnR5cGVvZiBLIT0ibnVtYmVyInx8dDgudGVzdCgkKT9LOksrInB4In1mdW5jdGlvbiBmMChDLCQsSyxYLE4pe3ZhciBRLFo7QzppZigkPT0ic3R5bGUiKWlmKHR5cGVvZiBLPT0ic3RyaW5nIilDLnN0eWxlLmNzc1RleHQ9SztlbHNle2lmKHR5cGVvZiBYPT0ic3RyaW5nIiYmKEMuc3R5bGUuY3NzVGV4dD1YPSIiKSxYKWZvcigkIGluIFgpSyYmJCBpbiBLfHxMNShDLnN0eWxlLCQsIiIpO2lmKEspZm9yKCQgaW4gSylYJiZLWyRdPT1YWyRdfHxMNShDLnN0eWxlLCQsS1skXSl9ZWxzZSBpZigkWzBdPT0ibyImJiRbMV09PSJuIilRPSQhPSgkPSQucmVwbGFjZShENSwiJDEiKSksWj0kLnRvTG93ZXJDYXNlKCksJD1aIGluIEN8fCQ9PSJvbkZvY3VzT3V0Inx8JD09Im9uRm9jdXNJbiI/Wi5zbGljZSgyKTokLnNsaWNlKDIpLEMubHx8KEMubD17fSksQy5sWyQrUV09SyxLP1g/S1tFMF09WFtFMF06KEtbRTBdPXcyLEMuYWRkRXZlbnRMaXN0ZW5lcigkLFE/TzI6QTIsUSkpOkMucmVtb3ZlRXZlbnRMaXN0ZW5lcigkLFE/TzI6QTIsUSk7ZWxzZXtpZihOPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKSQ9JC5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZigkIT0id2lkdGgiJiYkIT0iaGVpZ2h0IiYmJCE9ImhyZWYiJiYkIT0ibGlzdCImJiQhPSJmb3JtIiYmJCE9InRhYkluZGV4IiYmJCE9ImRvd25sb2FkIiYmJCE9InJvd1NwYW4iJiYkIT0iY29sU3BhbiImJiQhPSJyb2xlIiYmJCE9InBvcG92ZXIiJiYkIGluIEMpdHJ5e0NbJF09Sz09bnVsbD8iIjpLO2JyZWFrIEN9Y2F0Y2gocSl7fXR5cGVvZiBLPT0iZnVuY3Rpb24ifHwoSz09bnVsbHx8Sz09PSExJiYkWzRdIT0iLSI/Qy5yZW1vdmVBdHRyaWJ1dGUoJCk6Qy5zZXRBdHRyaWJ1dGUoJCwkPT0icG9wb3ZlciImJks9PTE/IiI6SykpfX1mdW5jdGlvbiBWNShDKXtyZXR1cm4gZnVuY3Rpb24oJCl7aWYodGhpcy5sKXt2YXIgSz10aGlzLmxbJC50eXBlK0NdO2lmKCRbbDBdPT1udWxsKSRbbDBdPXcyKys7ZWxzZSBpZigkW2wwXTxLW0UwXSlyZXR1cm47cmV0dXJuIEsobC5ldmVudD9sLmV2ZW50KCQpOiQpfX19ZnVuY3Rpb24gUDIoQywkLEssWCxOLFEsWixxLEcsWSl7dmFyIEIsTCxGLGssQSxfLEQseix3LEUseSxjLFIsaCx4LHA9JC50eXBlO2lmKCQuY29uc3RydWN0b3IhPT12b2lkIDApcmV0dXJuIG51bGw7MTI4JksuX191JiYoRz0hISgzMiZLLl9fdSksUT1bcT0kLl9fZT1LLl9fZV0pLChCPWwuX19iKSYmQigkKTtDOmlmKHR5cGVvZiBwPT0iZnVuY3Rpb24iKXRyeXtpZih6PSQucHJvcHMsdz1wLnByb3RvdHlwZSYmcC5wcm90b3R5cGUucmVuZGVyLEU9KEI9cC5jb250ZXh0VHlwZSkmJlhbQi5fX2NdLHk9Qj9FP0UucHJvcHMudmFsdWU6Qi5fXzpYLEsuX19jP0Q9KEw9JC5fX2M9Sy5fX2MpLl9fPUwuX19FOih3PyQuX19jPUw9bmV3IHAoeix5KTooJC5fX2M9TD1uZXcgSDEoeix5KSxMLmNvbnN0cnVjdG9yPXAsTC5yZW5kZXI9WDkpLEUmJkUuc3ViKEwpLEwuc3RhdGV8fChMLnN0YXRlPXt9KSxMLl9fbj1YLEY9TC5fX2Q9ITAsTC5fX2g9W10sTC5fc2I9W10pLHcmJkwuX19zPT1udWxsJiYoTC5fX3M9TC5zdGF0ZSksdyYmcC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJihMLl9fcz09TC5zdGF0ZSYmKEwuX19zPXUxKHt9LEwuX19zKSksdTEoTC5fX3MscC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoeixMLl9fcykpKSxrPUwucHJvcHMsQT1MLnN0YXRlLEwuX192PSQsRil3JiZwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmTC5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJkwuY29tcG9uZW50V2lsbE1vdW50KCksdyYmTC5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmTC5fX2gucHVzaChMLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKHcmJnAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZ6IT09ayYmTC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZMLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoeix5KSwkLl9fdj09Sy5fX3Z8fCFMLl9fZSYmTC5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJkwuc2hvdWxkQ29tcG9uZW50VXBkYXRlKHosTC5fX3MseSk9PT0hMSl7JC5fX3YhPUsuX192JiYoTC5wcm9wcz16LEwuc3RhdGU9TC5fX3MsTC5fX2Q9ITEpLCQuX19lPUsuX19lLCQuX19rPUsuX19rLCQuX19rLnNvbWUoZnVuY3Rpb24oZCl7ZCYmKGQuX189JCl9KSxkMC5wdXNoLmFwcGx5KEwuX19oLEwuX3NiKSxMLl9zYj1bXSxMLl9faC5sZW5ndGgmJloucHVzaChMKTticmVhayBDfUwuY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmTC5jb21wb25lbnRXaWxsVXBkYXRlKHosTC5fX3MseSksdyYmTC5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJkwuX19oLnB1c2goZnVuY3Rpb24oKXtMLmNvbXBvbmVudERpZFVwZGF0ZShrLEEsXyl9KX1pZihMLmNvbnRleHQ9eSxMLnByb3BzPXosTC5fX1A9QyxMLl9fZT0hMSxjPWwuX19yLFI9MCx3KUwuc3RhdGU9TC5fX3MsTC5fX2Q9ITEsYyYmYygkKSxCPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLGQwLnB1c2guYXBwbHkoTC5fX2gsTC5fc2IpLEwuX3NiPVtdO2Vsc2UgZG8gTC5fX2Q9ITEsYyYmYygkKSxCPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLEwuc3RhdGU9TC5fX3M7d2hpbGUoTC5fX2QmJisrUjwyNSk7TC5zdGF0ZT1MLl9fcyxMLmdldENoaWxkQ29udGV4dCE9bnVsbCYmKFg9dTEodTEoe30sWCksTC5nZXRDaGlsZENvbnRleHQoKSkpLHcmJiFGJiZMLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoXz1MLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGssQSkpLGg9QiE9bnVsbCYmQi50eXBlPT09TjEmJkIua2V5PT1udWxsP081KEIucHJvcHMuY2hpbGRyZW4pOkIscT16NShDLEkwKGgpP2g6W2hdLCQsSyxYLE4sUSxaLHEsRyxZKSxMLmJhc2U9JC5fX2UsJC5fX3UmPS0xNjEsTC5fX2gubGVuZ3RoJiZaLnB1c2goTCksRCYmKEwuX19FPUwuX189bnVsbCl9Y2F0Y2goZCl7aWYoJC5fX3Y9bnVsbCxHfHxRIT1udWxsKWlmKGQudGhlbil7Zm9yKCQuX191fD1HPzE2MDoxMjg7cSYmcS5ub2RlVHlwZT09OCYmcS5uZXh0U2libGluZzspcT1xLm5leHRTaWJsaW5nO1FbUS5pbmRleE9mKHEpXT1udWxsLCQuX19lPXF9ZWxzZXtmb3IoeD1RLmxlbmd0aDt4LS07KWIyKFFbeF0pO00yKCQpfWVsc2UgJC5fX2U9Sy5fX2UsJC5fX2s9Sy5fX2ssZC50aGVufHxNMigkKTtsLl9fZShkLCQsSyl9ZWxzZSBRPT1udWxsJiYkLl9fdj09Sy5fX3Y/KCQuX19rPUsuX19rLCQuX19lPUsuX19lKTpxPSQuX19lPUs5KEsuX19lLCQsSyxYLE4sUSxaLEcsWSk7cmV0dXJuKEI9bC5kaWZmZWQpJiZCKCQpLDEyOCYkLl9fdT92b2lkIDA6cX1mdW5jdGlvbiBNMihDKXtDJiYoQy5fX2MmJihDLl9fYy5fX2U9ITApLEMuX19rJiZDLl9fay5zb21lKE0yKSl9ZnVuY3Rpb24gQTUoQywkLEspe2Zvcih2YXIgWD0wO1g8Sy5sZW5ndGg7WCsrKVcyKEtbWF0sS1srK1hdLEtbKytYXSk7bC5fX2MmJmwuX19jKCQsQyksQy5zb21lKGZ1bmN0aW9uKE4pe3RyeXtDPU4uX19oLE4uX19oPVtdLEMuc29tZShmdW5jdGlvbihRKXtRLmNhbGwoTil9KX1jYXRjaChRKXtsLl9fZShRLE4uX192KX19KX1mdW5jdGlvbiBPNShDKXtyZXR1cm4gdHlwZW9mIEMhPSJvYmplY3QifHxDPT1udWxsfHxDLl9fYj4wP0M6STAoQyk/Qy5tYXAoTzUpOnUxKHt9LEMpfWZ1bmN0aW9uIEs5KEMsJCxLLFgsTixRLFoscSxHKXt2YXIgWSxCLEwsRixrLEEsXyxEPUsucHJvcHN8fG8wLHo9JC5wcm9wcyx3PSQudHlwZTtpZih3PT0ic3ZnIj9OPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6dz09Im1hdGgiP049Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOk58fChOPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksUSE9bnVsbCl7Zm9yKFk9MDtZPFEubGVuZ3RoO1krKylpZigoaz1RW1ldKSYmInNldEF0dHJpYnV0ZSJpbiBrPT0hIXcmJih3P2subG9jYWxOYW1lPT13Omsubm9kZVR5cGU9PTMpKXtDPWssUVtZXT1udWxsO2JyZWFrfX1pZihDPT1udWxsKXtpZih3PT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh6KTtDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhOLHcsei5pcyYmeikscSYmKGwuX19tJiZsLl9fbSgkLFEpLHE9ITEpLFE9bnVsbH1pZih3PT1udWxsKUQ9PT16fHxxJiZDLmRhdGE9PXp8fChDLmRhdGE9eik7ZWxzZXtpZihRPVEmJmEwLmNhbGwoQy5jaGlsZE5vZGVzKSwhcSYmUSE9bnVsbClmb3IoRD17fSxZPTA7WTxDLmF0dHJpYnV0ZXMubGVuZ3RoO1krKylEWyhrPUMuYXR0cmlidXRlc1tZXSkubmFtZV09ay52YWx1ZTtmb3IoWSBpbiBEKWs9RFtZXSxZPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0w9azpZPT0iY2hpbGRyZW4ifHwoWSBpbiB6KXx8WT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4geil8fFk9PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiB6KXx8ZjAoQyxZLG51bGwsayxOKTtmb3IoWSBpbiB6KWs9eltZXSxZPT0iY2hpbGRyZW4iP0Y9azpZPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0I9azpZPT0idmFsdWUiP0E9azpZPT0iY2hlY2tlZCI/Xz1rOnEmJnR5cGVvZiBrIT0iZnVuY3Rpb24ifHxEW1ldPT09a3x8ZjAoQyxZLGssRFtZXSxOKTtpZihCKXF8fEwmJihCLl9faHRtbD09TC5fX2h0bWx8fEIuX19odG1sPT1DLmlubmVySFRNTCl8fChDLmlubmVySFRNTD1CLl9faHRtbCksJC5fX2s9W107ZWxzZSBpZihMJiYoQy5pbm5lckhUTUw9IiIpLHo1KCQudHlwZT09InRlbXBsYXRlIj9DLmNvbnRlbnQ6QyxJMChGKT9GOltGXSwkLEssWCx3PT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOk4sUSxaLFE/UVswXTpLLl9fayYmQjAoSywwKSxxLEcpLFEhPW51bGwpZm9yKFk9US5sZW5ndGg7WS0tOyliMihRW1ldKTtxfHwoWT0idmFsdWUiLHc9PSJwcm9ncmVzcyImJkE9PW51bGw/Qy5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6QSE9bnVsbCYmKEEhPT1DW1ldfHx3PT0icHJvZ3Jlc3MiJiYhQXx8dz09Im9wdGlvbiImJkEhPURbWV0pJiZmMChDLFksQSxEW1ldLE4pLFk9ImNoZWNrZWQiLF8hPW51bGwmJl8hPUNbWV0mJmYwKEMsWSxfLERbWV0sTikpfXJldHVybiBDfWZ1bmN0aW9uIFcyKEMsJCxLKXt0cnl7aWYodHlwZW9mIEM9PSJmdW5jdGlvbiIpe3ZhciBYPXR5cGVvZiBDLl9fdT09ImZ1bmN0aW9uIjtYJiZDLl9fdSgpLFgmJiQ9PW51bGx8fChDLl9fdT1DKCQpKX1lbHNlIEMuY3VycmVudD0kfWNhdGNoKE4pe2wuX19lKE4sSyl9fWZ1bmN0aW9uIFQ1KEMsJCxLKXt2YXIgWCxOO2lmKGwudW5tb3VudCYmbC51bm1vdW50KEMpLChYPUMucmVmKSYmKFguY3VycmVudCYmWC5jdXJyZW50IT1DLl9fZXx8VzIoWCxudWxsLCQpKSwoWD1DLl9fYykhPW51bGwpe2lmKFguY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e1guY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChRKXtsLl9fZShRLCQpfVguYmFzZT1YLl9fUD1udWxsfWlmKFg9Qy5fX2spZm9yKE49MDtOPFgubGVuZ3RoO04rKylYW05dJiZUNShYW05dLCQsS3x8dHlwZW9mIEMudHlwZSE9ImZ1bmN0aW9uIik7S3x8YjIoQy5fX2UpLEMuX19jPUMuX189Qy5fX2U9dm9pZCAwfWZ1bmN0aW9uIFg5KEMsJCxLKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcihDLEspfWZ1bmN0aW9uIGkwKEMsJCxLKXt2YXIgWCxOLFEsWjskPT1kb2N1bWVudCYmKCQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxsLl9fJiZsLl9fKEMsJCksTj0oWD10eXBlb2YgSz09ImZ1bmN0aW9uIik/bnVsbDpLJiZLLl9fa3x8JC5fX2ssUT1bXSxaPVtdLFAyKCQsQz0oIVgmJkt8fCQpLl9faz1wMShOMSxudWxsLFtDXSksTnx8bzAsbzAsJC5uYW1lc3BhY2VVUkksIVgmJks/W0tdOk4/bnVsbDokLmZpcnN0Q2hpbGQ/YTAuY2FsbCgkLmNoaWxkTm9kZXMpOm51bGwsUSwhWCYmSz9LOk4/Ti5fX2U6JC5maXJzdENoaWxkLFgsWiksQTUoUSxDLFopfWZ1bmN0aW9uIGQxKEMpe2Z1bmN0aW9uICQoSyl7dmFyIFgsTjtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChYPW5ldyBTZXQsKE49e30pWyQuX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIE59LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFEpe3RoaXMucHJvcHMudmFsdWUhPVEudmFsdWUmJlguZm9yRWFjaChmdW5jdGlvbihaKXtaLl9fZT0hMCxUMihaKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihRKXtYLmFkZChRKTt2YXIgWj1RLmNvbXBvbmVudFdpbGxVbm1vdW50O1EuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYJiZYLmRlbGV0ZShRKSxaJiZaLmNhbGwoUSl9fSksSy5jaGlsZHJlbn1yZXR1cm4gJC5fX2M9Il9fY0MiK1U1KyssJC5fXz1DLCQuUHJvdmlkZXI9JC5fX2w9KCQuQ29uc3VtZXI9ZnVuY3Rpb24oSyxYKXtyZXR1cm4gSy5jaGlsZHJlbihYKX0pLmNvbnRleHRUeXBlPSQsJH1hMD1kMC5zbGljZSxsPXtfX2U6ZnVuY3Rpb24oQywkLEssWCl7Zm9yKHZhciBOLFEsWjskPSQuX187KWlmKChOPSQuX19jKSYmIU4uX18pdHJ5e2lmKChRPU4uY29uc3RydWN0b3IpJiZRLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKE4uc2V0U3RhdGUoUS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoQykpLFo9Ti5fX2QpLE4uY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihOLmNvbXBvbmVudERpZENhdGNoKEMsWHx8e30pLFo9Ti5fX2QpLFopcmV0dXJuIE4uX19FPU59Y2F0Y2gocSl7Qz1xfXRocm93IEN9fSxCNT0wLHM4PWZ1bmN0aW9uKEMpe3JldHVybiBDIT1udWxsJiZDLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxIMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oQywkKXt2YXIgSztLPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz11MSh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgQz09ImZ1bmN0aW9uIiYmKEM9Qyh1MSh7fSxLKSx0aGlzLnByb3BzKSksQyYmdTEoSyxDKSxDIT1udWxsJiZ0aGlzLl9fdiYmKCQmJnRoaXMuX3NiLnB1c2goJCksVDIodGhpcykpfSxIMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oQyl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCxDJiZ0aGlzLl9faC5wdXNoKEMpLFQyKHRoaXMpKX0sSDEucHJvdG90eXBlLnJlbmRlcj1OMSxyMT1bXSxfNT10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsazU9ZnVuY3Rpb24oQywkKXtyZXR1cm4gQy5fX3YuX19iLSQuX192Ll9fYn0sYzAuX19yPTAsSDI9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxsMD0iX19kIitIMixFMD0iX19hIitIMixENT0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSx3Mj0wLEEyPVY1KCExKSxPMj1WNSghMCksVTU9MDt2YXIgbjEsXzEseTIsTTUsUzA9MCxTNT1bXSxVMT1sLHc1PVUxLl9fYixiNT1VMS5fX3IsUDU9VTEuZGlmZmVkLFc1PVUxLl9fYyx5NT1VMS51bm1vdW50LEU1PVUxLl9fO2Z1bmN0aW9uIF8wKEMsJCl7VTEuX19oJiZVMS5fX2goXzEsQyxTMHx8JCksUzA9MDt2YXIgSz1fMS5fX0h8fChfMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiBDPj1LLl9fLmxlbmd0aCYmSy5fXy5wdXNoKHt9KSxLLl9fW0NdfWZ1bmN0aW9uIE8oQyl7cmV0dXJuIFMwPTEsSTIoaDUsQyl9ZnVuY3Rpb24gSTIoQywkLEspe3ZhciBYPV8wKG4xKyssMik7aWYoWC50PUMsIVguX19jJiYoWC5fXz1bSz9LKCQpOmg1KHZvaWQgMCwkKSxmdW5jdGlvbihxKXt2YXIgRz1YLl9fTj9YLl9fTlswXTpYLl9fWzBdLFk9WC50KEcscSk7RyE9PVkmJihYLl9fTj1bWSxYLl9fWzFdXSxYLl9fYy5zZXRTdGF0ZSh7fSkpfV0sWC5fX2M9XzEsIV8xLl9fZikpe3ZhciBOPWZ1bmN0aW9uKHEsRyxZKXtpZighWC5fX2MuX19IKXJldHVybiEwO3ZhciBCPVguX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oRil7cmV0dXJuIEYuX19jfSk7aWYoQi5ldmVyeShmdW5jdGlvbihGKXtyZXR1cm4hRi5fX059KSlyZXR1cm4hUXx8US5jYWxsKHRoaXMscSxHLFkpO3ZhciBMPVguX19jLnByb3BzIT09cTtyZXR1cm4gQi5zb21lKGZ1bmN0aW9uKEYpe2lmKEYuX19OKXt2YXIgaz1GLl9fWzBdO0YuX189Ri5fX04sRi5fX049dm9pZCAwLGshPT1GLl9fWzBdJiYoTD0hMCl9fSksUSYmUS5jYWxsKHRoaXMscSxHLFkpfHxMfTtfMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpRLGNvbXBvbmVudFdpbGxVcGRhdGU6Wn09XzE7XzEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihxLEcsWSl7aWYodGhpcy5fX2Upe3ZhciBCPVE7UT12b2lkIDAsTihxLEcsWSksUT1CfVomJlouY2FsbCh0aGlzLHEsRyxZKX0sXzEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPU59cmV0dXJuIFguX19OfHxYLl9ffWZ1bmN0aW9uIFcoQywkKXt2YXIgSz1fMChuMSsrLDMpOyFVMS5fX3MmJlMyKEsuX19ILCQpJiYoSy5fXz1DLEsudT0kLF8xLl9fSC5fX2gucHVzaChLKSl9ZnVuY3Rpb24gbjAoQywkKXt2YXIgSz1fMChuMSsrLDQpOyFVMS5fX3MmJlMyKEsuX19ILCQpJiYoSy5fXz1DLEsudT0kLF8xLl9faC5wdXNoKEspKX1mdW5jdGlvbiB2KEMpe3JldHVybiBTMD01LHoxKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6Q319LFtdKX1mdW5jdGlvbiB6MShDLCQpe3ZhciBLPV8wKG4xKyssNyk7cmV0dXJuIFMyKEsuX19ILCQpJiYoSy5fXz1DKCksSy5fX0g9JCxLLl9faD1DKSxLLl9ffWZ1bmN0aW9uIFAoQywkKXtyZXR1cm4gUzA9OCx6MShmdW5jdGlvbigpe3JldHVybiBDfSwkKX1mdW5jdGlvbiBzMShDKXt2YXIgJD1fMS5jb250ZXh0W0MuX19jXSxLPV8wKG4xKyssOSk7cmV0dXJuIEsuYz1DLCQ/KEsuX189PW51bGwmJihLLl9fPSEwLCQuc3ViKF8xKSksJC5wcm9wcy52YWx1ZSk6Qy5fX31mdW5jdGlvbiBzMCgpe3ZhciBDPV8wKG4xKyssMTEpO2lmKCFDLl9fKXtmb3IodmFyICQ9XzEuX192OyQhPT1udWxsJiYhJC5fX20mJiQuX18hPT1udWxsOykkPSQuX187dmFyIEs9JC5fX218fCgkLl9fbT1bMCwwXSk7Qy5fXz0iUCIrS1swXSsiLSIrS1sxXSsrfXJldHVybiBDLl9ffWZ1bmN0aW9uIEo5KCl7Zm9yKHZhciBDO0M9UzUuc2hpZnQoKTspe3ZhciAkPUMuX19IO2lmKEMuX19QJiYkKXRyeXskLl9faC5zb21lKHIwKSwkLl9faC5zb21lKEUyKSwkLl9faD1bXX1jYXRjaChLKXskLl9faD1bXSxVMS5fX2UoSyxDLl9fdil9fX1VMS5fX2I9ZnVuY3Rpb24oQyl7XzE9bnVsbCx3NSYmdzUoQyl9LFUxLl9fPWZ1bmN0aW9uKEMsJCl7QyYmJC5fX2smJiQuX19rLl9fbSYmKEMuX19tPSQuX19rLl9fbSksRTUmJkU1KEMsJCl9LFUxLl9fcj1mdW5jdGlvbihDKXtiNSYmYjUoQyksbjE9MDt2YXIgJD0oXzE9Qy5fX2MpLl9fSDskJiYoeTI9PT1fMT8oJC5fX2g9W10sXzEuX19oPVtdLCQuX18uc29tZShmdW5jdGlvbihLKXtLLl9fTiYmKEsuX189Sy5fX04pLEsudT1LLl9fTj12b2lkIDB9KSk6KCQuX19oLnNvbWUocjApLCQuX19oLnNvbWUoRTIpLCQuX19oPVtdLG4xPTApKSx5Mj1fMX0sVTEuZGlmZmVkPWZ1bmN0aW9uKEMpe1A1JiZQNShDKTt2YXIgJD1DLl9fYzskJiYkLl9fSCYmKCQuX19ILl9faC5sZW5ndGgmJihTNS5wdXNoKCQpIT09MSYmTTU9PT1VMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoTTU9VTEucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8TjkpKEo5KSksJC5fX0guX18uc29tZShmdW5jdGlvbihLKXtLLnUmJihLLl9fSD1LLnUpLEsudT12b2lkIDB9KSkseTI9XzE9bnVsbH0sVTEuX19jPWZ1bmN0aW9uKEMsJCl7JC5zb21lKGZ1bmN0aW9uKEspe3RyeXtLLl9faC5zb21lKHIwKSxLLl9faD1LLl9faC5maWx0ZXIoZnVuY3Rpb24oWCl7cmV0dXJuIVguX198fEUyKFgpfSl9Y2F0Y2goWCl7JC5zb21lKGZ1bmN0aW9uKE4pe04uX19oJiYoTi5fX2g9W10pfSksJD1bXSxVMS5fX2UoWCxLLl9fdil9fSksVzUmJlc1KEMsJCl9LFUxLnVubW91bnQ9ZnVuY3Rpb24oQyl7eTUmJnk1KEMpO3ZhciAkLEs9Qy5fX2M7SyYmSy5fX0gmJihLLl9fSC5fXy5zb21lKGZ1bmN0aW9uKFgpe3RyeXtyMChYKX1jYXRjaChOKXskPU59fSksSy5fX0g9dm9pZCAwLCQmJlUxLl9fZSgkLEsuX192KSl9O3ZhciBJNT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iO2Z1bmN0aW9uIE45KEMpe3ZhciAkLEs9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoWCksSTUmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKCQpLHNldFRpbWVvdXQoQyl9LFg9c2V0VGltZW91dChLLDM1KTtJNSYmKCQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEspKX1mdW5jdGlvbiByMChDKXt2YXIgJD1fMSxLPUMuX19jO3R5cGVvZiBLPT0iZnVuY3Rpb24iJiYoQy5fX2M9dm9pZCAwLEsoKSksXzE9JH1mdW5jdGlvbiBFMihDKXt2YXIgJD1fMTtDLl9fYz1DLl9fKCksXzE9JH1mdW5jdGlvbiBTMihDLCQpe3JldHVybiFDfHxDLmxlbmd0aCE9PSQubGVuZ3RofHwkLnNvbWUoZnVuY3Rpb24oSyxYKXtyZXR1cm4gSyE9PUNbWF19KX1mdW5jdGlvbiBoNShDLCQpe3JldHVybiB0eXBlb2YgJD09ImZ1bmN0aW9uIj8kKEMpOiR9ZnVuY3Rpb24gRzkoQywkKXtmb3IodmFyIEsgaW4gJClDW0tdPSRbS107cmV0dXJuIEN9ZnVuY3Rpb24geDUoQywkKXtmb3IodmFyIEsgaW4gQylpZihLIT09Il9fc291cmNlIiYmIShLIGluICQpKXJldHVybiEwO2Zvcih2YXIgWCBpbiAkKWlmKFghPT0iX19zb3VyY2UiJiZDW1hdIT09JFtYXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB2NShDLCQpe3RoaXMucHJvcHM9Qyx0aGlzLmNvbnRleHQ9JH0odjUucHJvdG90eXBlPW5ldyBIMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsdjUucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihDLCQpe3JldHVybiB4NSh0aGlzLnByb3BzLEMpfHx4NSh0aGlzLnN0YXRlLCQpfTt2YXIgZzU9bC5fX2I7bC5fX2I9ZnVuY3Rpb24oQyl7Qy50eXBlJiZDLnR5cGUuX19mJiZDLnJlZiYmKEMucHJvcHMucmVmPUMucmVmLEMucmVmPW51bGwpLGc1JiZnNShDKX07dmFyIEw5PWwuX19lO2wuX19lPWZ1bmN0aW9uKEMsJCxLLFgpe2lmKEMudGhlbil7Zm9yKHZhciBOLFE9JDtRPVEuX187KWlmKChOPVEuX19jKSYmTi5fX2MpcmV0dXJuICQuX19lPT1udWxsJiYoJC5fX2U9Sy5fX2UsJC5fX2s9Sy5fX2spLE4uX19jKEMsJCl9TDkoQywkLEssWCl9O3ZhciBSNT1sLnVubW91bnQ7ZnVuY3Rpb24gdTUoQywkLEspe3JldHVybiBDJiYoQy5fX2MmJkMuX19jLl9fSCYmKEMuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFgpe3R5cGVvZiBYLl9fYz09ImZ1bmN0aW9uIiYmWC5fX2MoKX0pLEMuX19jLl9fSD1udWxsKSwoQz1HOSh7fSxDKSkuX19jIT1udWxsJiYoQy5fX2MuX19QPT09SyYmKEMuX19jLl9fUD0kKSxDLl9fYy5fX2U9ITAsQy5fX2M9bnVsbCksQy5fX2s9Qy5fX2smJkMuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gdTUoWCwkLEspfSkpLEN9ZnVuY3Rpb24gbzUoQywkLEspe3JldHVybiBDJiZLJiYoQy5fX3Y9bnVsbCxDLl9faz1DLl9fayYmQy5fX2subWFwKGZ1bmN0aW9uKFgpe3JldHVybiBvNShYLCQsSyl9KSxDLl9fYyYmQy5fX2MuX19QPT09JCYmKEMuX19lJiZLLmFwcGVuZENoaWxkKEMuX19lKSxDLl9fYy5fX2U9ITAsQy5fX2MuX19QPUspKSxDfWZ1bmN0aW9uIGgyKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIGQ1KEMpe3ZhciAkPUMuX18mJkMuX18uX19jO3JldHVybiAkJiYkLl9fYSYmJC5fX2EoQyl9ZnVuY3Rpb24gdDAoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1sLnVubW91bnQ9ZnVuY3Rpb24oQyl7dmFyICQ9Qy5fX2M7JCYmKCQuX196PSEwKSwkJiYkLl9fUiYmJC5fX1IoKSwkJiYzMiZDLl9fdSYmKEMudHlwZT1udWxsKSxSNSYmUjUoQyl9LChoMi5wcm90b3R5cGU9bmV3IEgxKS5fX2M9ZnVuY3Rpb24oQywkKXt2YXIgSz0kLl9fYyxYPXRoaXM7WC5vPT1udWxsJiYoWC5vPVtdKSxYLm8ucHVzaChLKTt2YXIgTj1kNShYLl9fdiksUT0hMSxaPWZ1bmN0aW9uKCl7UXx8WC5fX3p8fChRPSEwLEsuX19SPW51bGwsTj9OKEcpOkcoKSl9O0suX19SPVo7dmFyIHE9Sy5fX1A7Sy5fX1A9bnVsbDt2YXIgRz1mdW5jdGlvbigpe2lmKCEtLVguX191KXtpZihYLnN0YXRlLl9fYSl7dmFyIFk9WC5zdGF0ZS5fX2E7WC5fX3YuX19rWzBdPW81KFksWS5fX2MuX19QLFkuX19jLl9fTyl9dmFyIEI7Zm9yKFguc2V0U3RhdGUoe19fYTpYLl9fYj1udWxsfSk7Qj1YLm8ucG9wKCk7KUIuX19QPXEsQi5mb3JjZVVwZGF0ZSgpfX07WC5fX3UrK3x8MzImJC5fX3V8fFguc2V0U3RhdGUoe19fYTpYLl9fYj1YLl9fdi5fX2tbMF19KSxDLnRoZW4oWixaKX0saDIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxoMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMsJCl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWD10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT11NSh0aGlzLl9fYixLLFguX19PPVguX19QKX10aGlzLl9fYj1udWxsfXZhciBOPSQuX19hJiZwMShOMSxudWxsLEMuZmFsbGJhY2spO3JldHVybiBOJiYoTi5fX3UmPS0zMyksW3AxKE4xLG51bGwsJC5fX2E/bnVsbDpDLmNoaWxkcmVuKSxOXX07dmFyIG01PWZ1bmN0aW9uKEMsJCxLKXtpZigrK0tbMV09PT1LWzBdJiZDLmwuZGVsZXRlKCQpLEMucHJvcHMucmV2ZWFsT3JkZXImJihDLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhQy5sLnNpemUpKWZvcihLPUMuaTtLOyl7Zm9yKDtLLmxlbmd0aD4zOylLLnBvcCgpKCk7aWYoS1sxXTxLWzBdKWJyZWFrO0MuaT1LPUtbMl19fTsodDAucHJvdG90eXBlPW5ldyBIMSkuX19hPWZ1bmN0aW9uKEMpe3ZhciAkPXRoaXMsSz1kNSgkLl9fdiksWD0kLmwuZ2V0KEMpO3JldHVybiBYWzBdKyssZnVuY3Rpb24oTil7dmFyIFE9ZnVuY3Rpb24oKXskLnByb3BzLnJldmVhbE9yZGVyPyhYLnB1c2goTiksbTUoJCxDLFgpKTpOKCl9O0s/SyhRKTpRKCl9fSx0MC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciAkPW8xKEMuY2hpbGRyZW4pO0MucmV2ZWFsT3JkZXImJkMucmV2ZWFsT3JkZXJbMF09PT0iYiImJiQucmV2ZXJzZSgpO2Zvcih2YXIgSz0kLmxlbmd0aDtLLS07KXRoaXMubC5zZXQoJFtLXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gQy5jaGlsZHJlbn0sdDAucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT10MC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgQz10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKCQsSyl7bTUoQyxLLCQpfSl9O3ZhciBWOT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxCOT0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sXzk9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxrOT0vW0EtWjAtOV0vZyxEOT10eXBlb2YgZG9jdW1lbnQ8InUiLFU5PWZ1bmN0aW9uKEMpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChDKX07ZnVuY3Rpb24gYzUoQywkLEspe3JldHVybiAkLl9faz09bnVsbCYmKCQudGV4dENvbnRlbnQ9IiIpLGkwKEMsJCksdHlwZW9mIEs9PSJmdW5jdGlvbiImJksoKSxDP0MuX19jOm51bGx9SDEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oQyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEgxLnByb3RvdHlwZSxDLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iK0NdfSxzZXQ6ZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsQyx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiR9KX19KX0pO3ZhciBqNT1sLmV2ZW50O2wuZXZlbnQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGo1JiYoQz1qNShDKSksQy5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxDLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxDLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LEMubmF0aXZlRXZlbnQ9Q307dmFyIGE1LEY5PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxwNT1sLnZub2RlO2wudm5vZGU9ZnVuY3Rpb24oQyl7dHlwZW9mIEMudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKCQpe3Zhcntwcm9wczpLLHR5cGU6WH09JCxOPXt9LFE9WC5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgWiBpbiBLKXt2YXIgcT1LW1pdO2lmKCEoWj09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEspJiZxPT1udWxsfHxEOSYmWj09PSJjaGlsZHJlbiImJlg9PT0ibm9zY3JpcHQifHxaPT09ImNsYXNzInx8Wj09PSJjbGFzc05hbWUiKSl7dmFyIEc9Wi50b0xvd2VyQ2FzZSgpO1o9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIEsmJksudmFsdWU9PW51bGw/Wj0idmFsdWUiOlo9PT0iZG93bmxvYWQiJiZxPT09ITA/cT0iIjpHPT09InRyYW5zbGF0ZSImJnE9PT0ibm8iP3E9ITE6R1swXT09PSJvIiYmR1sxXT09PSJuIj9HPT09Im9uZG91YmxlY2xpY2siP1o9Im9uZGJsY2xpY2siOkchPT0ib25jaGFuZ2UifHxYIT09ImlucHV0IiYmWCE9PSJ0ZXh0YXJlYSJ8fFU5KEsudHlwZSk/Rz09PSJvbmZvY3VzIj9aPSJvbmZvY3VzaW4iOkc9PT0ib25ibHVyIj9aPSJvbmZvY3Vzb3V0IjpfOS50ZXN0KFopJiYoWj1HKTpHPVo9Im9uaW5wdXQiOlEmJkI5LnRlc3QoWik/Wj1aLnJlcGxhY2UoazksIi0kJiIpLnRvTG93ZXJDYXNlKCk6cT09PW51bGwmJihxPXZvaWQgMCksRz09PSJvbmlucHV0IiYmTltaPUddJiYoWj0ib25pbnB1dENhcHR1cmUiKSxOW1pdPXF9fVg9PSJzZWxlY3QiJiYoTi5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShOLnZhbHVlKSYmKE4udmFsdWU9bzEoSy5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihZKXtZLnByb3BzLnNlbGVjdGVkPU4udmFsdWUuaW5kZXhPZihZLnByb3BzLnZhbHVlKSE9LTF9KSksTi5kZWZhdWx0VmFsdWUhPW51bGwmJihOLnZhbHVlPW8xKEsuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oWSl7WS5wcm9wcy5zZWxlY3RlZD1OLm11bHRpcGxlP04uZGVmYXVsdFZhbHVlLmluZGV4T2YoWS5wcm9wcy52YWx1ZSkhPS0xOk4uZGVmYXVsdFZhbHVlPT1ZLnByb3BzLnZhbHVlfSkpKSxLLmNsYXNzJiYhSy5jbGFzc05hbWU/KE4uY2xhc3M9Sy5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoTiwiY2xhc3NOYW1lIixGOSkpOksuY2xhc3NOYW1lJiYoTi5jbGFzcz1OLmNsYXNzTmFtZT1LLmNsYXNzTmFtZSksJC5wcm9wcz1OfShDKSxDLiQkdHlwZW9mPVY5LHA1JiZwNShDKX07dmFyIGY1PWwuX19yO2wuX19yPWZ1bmN0aW9uKEMpe2Y1JiZmNShDKSxhNT1DLl9fY307dmFyIGw1PWwuZGlmZmVkO2wuZGlmZmVkPWZ1bmN0aW9uKEMpe2w1JiZsNShDKTt2YXJ7cHJvcHM6JCxfX2U6S309QztLIT1udWxsJiZDLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gJCYmJC52YWx1ZSE9PUsudmFsdWUmJihLLnZhbHVlPSQudmFsdWU9PW51bGw/IiI6JC52YWx1ZSksYTU9bnVsbH07ZnVuY3Rpb24gaTUoQyl7cmV0dXJuISFDLl9fayYmKGkwKG51bGwsQyksITApfWZ1bmN0aW9uIHI1KEMpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oJCl7YzUoJCxDKX0sdW5tb3VudDpmdW5jdGlvbigpe2k1KEMpfX19ZnVuY3Rpb24gSjMoQywkKXtmb3IodmFyIEsgaW4gJClDW0tdPSRbS107cmV0dXJuIEN9ZnVuY3Rpb24gZzIoQywkKXtmb3IodmFyIEsgaW4gQylpZihLIT09Il9fc291cmNlIiYmIShLIGluICQpKXJldHVybiEwO2Zvcih2YXIgWCBpbiAkKWlmKFghPT0iX19zb3VyY2UiJiZDW1hdIT09JFtYXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBuNShDLCQpe3RoaXMucHJvcHM9Qyx0aGlzLmNvbnRleHQ9JH1mdW5jdGlvbiBrMChDLCQpe2Z1bmN0aW9uIEsoTil7dmFyIFE9dGhpcy5wcm9wcy5yZWY7cmV0dXJuIFEhPU4ucmVmJiZRJiYodHlwZW9mIFE9PSJmdW5jdGlvbiI/UShudWxsKTpRLmN1cnJlbnQ9bnVsbCksJD8hJCh0aGlzLnByb3BzLE4pfHxRIT1OLnJlZjpnMih0aGlzLnByb3BzLE4pfWZ1bmN0aW9uIFgoTil7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPUsscDEoQyxOKX1yZXR1cm4gWC5kaXNwbGF5TmFtZT0iTWVtbygiKyhDLmRpc3BsYXlOYW1lfHxDLm5hbWUpKyIpIixYLl9fZj1YLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFgudHlwZT1DLFh9KG41LnByb3RvdHlwZT1uZXcgSDEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLG41LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oQywkKXtyZXR1cm4gZzIodGhpcy5wcm9wcyxDKXx8ZzIodGhpcy5zdGF0ZSwkKX07dmFyIHM1PWwuX19iO2wuX19iPWZ1bmN0aW9uKEMpe0MudHlwZSYmQy50eXBlLl9fZiYmQy5yZWYmJihDLnByb3BzLnJlZj1DLnJlZixDLnJlZj1udWxsKSxzNSYmczUoQyl9O3ZhciB6OT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiB0MShDKXtmdW5jdGlvbiAkKEspe3ZhciBYPUozKHt9LEspO3JldHVybiBkZWxldGUgWC5yZWYsQyhYLEsucmVmfHxudWxsKX1yZXR1cm4gJC4kJHR5cGVvZj16OSwkLnJlbmRlcj1DLCQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9JC5fX2Y9ITAsJC5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKyhDLmRpc3BsYXlOYW1lfHxDLm5hbWUpKyIpIiwkfXZhciBIOT1sLl9fZTtsLl9fZT1mdW5jdGlvbihDLCQsSyxYKXtpZihDLnRoZW4pe2Zvcih2YXIgTixRPSQ7UT1RLl9fOylpZigoTj1RLl9fYykmJk4uX19jKXJldHVybiAkLl9fZT09bnVsbCYmKCQuX19lPUsuX19lLCQuX19rPUsuX19rKSxOLl9fYyhDLCQpfUg5KEMsJCxLLFgpfTt2YXIgdDU9bC51bm1vdW50O2Z1bmN0aW9uIE4zKEMsJCxLKXtyZXR1cm4gQyYmKEMuX19jJiZDLl9fYy5fX0gmJihDLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihYKXt0eXBlb2YgWC5fX2M9PSJmdW5jdGlvbiImJlguX19jKCl9KSxDLl9fYy5fX0g9bnVsbCksKEM9SjMoe30sQykpLl9fYyE9bnVsbCYmKEMuX19jLl9fUD09PUsmJihDLl9fYy5fX1A9JCksQy5fX2MuX19lPSEwLEMuX19jPW51bGwpLEMuX19rPUMuX19rJiZDLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIE4zKFgsJCxLKX0pKSxDfWZ1bmN0aW9uIFEzKEMsJCxLKXtyZXR1cm4gQyYmSyYmKEMuX192PW51bGwsQy5fX2s9Qy5fX2smJkMuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gUTMoWCwkLEspfSksQy5fX2MmJkMuX19jLl9fUD09PSQmJihDLl9fZSYmSy5hcHBlbmRDaGlsZChDLl9fZSksQy5fX2MuX19lPSEwLEMuX19jLl9fUD1LKSksQ31mdW5jdGlvbiB2Migpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBaMyhDKXt2YXIgJD1DLl9fJiZDLl9fLl9fYztyZXR1cm4gJCYmJC5fX2EmJiQuX19hKEMpfWZ1bmN0aW9uIGUwKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9bC51bm1vdW50PWZ1bmN0aW9uKEMpe3ZhciAkPUMuX19jOyQmJigkLl9fej0hMCksJCYmJC5fX1ImJiQuX19SKCksJCYmMzImQy5fX3UmJihDLnR5cGU9bnVsbCksdDUmJnQ1KEMpfSwodjIucHJvdG90eXBlPW5ldyBIMSkuX19jPWZ1bmN0aW9uKEMsJCl7dmFyIEs9JC5fX2MsWD10aGlzO1gubz09bnVsbCYmKFgubz1bXSksWC5vLnB1c2goSyk7dmFyIE49WjMoWC5fX3YpLFE9ITEsWj1mdW5jdGlvbigpe1F8fFguX196fHwoUT0hMCxLLl9fUj1udWxsLE4/TihHKTpHKCkpfTtLLl9fUj1aO3ZhciBxPUsuX19QO0suX19QPW51bGw7dmFyIEc9ZnVuY3Rpb24oKXtpZighLS1YLl9fdSl7aWYoWC5zdGF0ZS5fX2Epe3ZhciBZPVguc3RhdGUuX19hO1guX192Ll9fa1swXT1RMyhZLFkuX19jLl9fUCxZLl9fYy5fX08pfXZhciBCO2ZvcihYLnNldFN0YXRlKHtfX2E6WC5fX2I9bnVsbH0pO0I9WC5vLnBvcCgpOylCLl9fUD1xLEIuZm9yY2VVcGRhdGUoKX19O1guX191Kyt8fDMyJiQuX191fHxYLnNldFN0YXRlKHtfX2E6WC5fX2I9WC5fX3YuX19rWzBdfSksQy50aGVuKFosWil9LHYyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sdjIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihDLCQpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFg9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09TjModGhpcy5fX2IsSyxYLl9fTz1YLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgTj0kLl9fYSYmcDEoTjEsbnVsbCxDLmZhbGxiYWNrKTtyZXR1cm4gTiYmKE4uX191Jj0tMzMpLFtwMShOMSxudWxsLCQuX19hP251bGw6Qy5jaGlsZHJlbiksTl19O3ZhciBlNT1mdW5jdGlvbihDLCQsSyl7aWYoKytLWzFdPT09S1swXSYmQy5sLmRlbGV0ZSgkKSxDLnByb3BzLnJldmVhbE9yZGVyJiYoQy5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8IUMubC5zaXplKSlmb3IoSz1DLmk7Szspe2Zvcig7Sy5sZW5ndGg+MzspSy5wb3AoKSgpO2lmKEtbMV08S1swXSlicmVhaztDLmk9Sz1LWzJdfX07KGUwLnByb3RvdHlwZT1uZXcgSDEpLl9fYT1mdW5jdGlvbihDKXt2YXIgJD10aGlzLEs9WjMoJC5fX3YpLFg9JC5sLmdldChDKTtyZXR1cm4gWFswXSsrLGZ1bmN0aW9uKE4pe3ZhciBRPWZ1bmN0aW9uKCl7JC5wcm9wcy5yZXZlYWxPcmRlcj8oWC5wdXNoKE4pLGU1KCQsQyxYKSk6TigpfTtLP0soUSk6USgpfX0sZTAucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihDKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgJD1vMShDLmNoaWxkcmVuKTtDLnJldmVhbE9yZGVyJiZDLnJldmVhbE9yZGVyWzBdPT09ImIiJiYkLnJldmVyc2UoKTtmb3IodmFyIEs9JC5sZW5ndGg7Sy0tOyl0aGlzLmwuc2V0KCRbS10sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuIEMuY2hpbGRyZW59LGUwLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZTAucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIEM9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbigkLEspe2U1KEMsSywkKX0pfTt2YXIgQTk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsTzk9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLFQ5PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sTTk9L1tBLVowLTldL2csdzk9dHlwZW9mIGRvY3VtZW50PCJ1IixiOT1mdW5jdGlvbihDKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoQyl9O0gxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKEMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShIMS5wcm90b3R5cGUsQyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIitDXX0sc2V0OmZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLEMse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTokfSl9fSl9KTt2YXIgQzM9bC5ldmVudDtsLmV2ZW50PWZ1bmN0aW9uKEMpe3JldHVybiBDMyYmKEM9QzMoQykpLEMucGVyc2lzdD1mdW5jdGlvbigpe30sQy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sQy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSxDLm5hdGl2ZUV2ZW50PUN9O3ZhciBxMyxQOT17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sJDM9bC52bm9kZTtsLnZub2RlPWZ1bmN0aW9uKEMpe3R5cGVvZiBDLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbigkKXt2YXJ7cHJvcHM6Syx0eXBlOlh9PSQsTj17fSxRPVguaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIFogaW4gSyl7dmFyIHE9S1taXTtpZighKFo9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBLKSYmcT09bnVsbHx8dzkmJlo9PT0iY2hpbGRyZW4iJiZYPT09Im5vc2NyaXB0Inx8Wj09PSJjbGFzcyJ8fFo9PT0iY2xhc3NOYW1lIikpe3ZhciBHPVoudG9Mb3dlckNhc2UoKTtaPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBLJiZLLnZhbHVlPT1udWxsP1o9InZhbHVlIjpaPT09ImRvd25sb2FkIiYmcT09PSEwP3E9IiI6Rz09PSJ0cmFuc2xhdGUiJiZxPT09Im5vIj9xPSExOkdbMF09PT0ibyImJkdbMV09PT0ibiI/Rz09PSJvbmRvdWJsZWNsaWNrIj9aPSJvbmRibGNsaWNrIjpHIT09Im9uY2hhbmdlInx8WCE9PSJpbnB1dCImJlghPT0idGV4dGFyZWEifHxiOShLLnR5cGUpP0c9PT0ib25mb2N1cyI/Wj0ib25mb2N1c2luIjpHPT09Im9uYmx1ciI/Wj0ib25mb2N1c291dCI6VDkudGVzdChaKSYmKFo9Ryk6Rz1aPSJvbmlucHV0IjpRJiZPOS50ZXN0KFopP1o9Wi5yZXBsYWNlKE05LCItJCYiKS50b0xvd2VyQ2FzZSgpOnE9PT1udWxsJiYocT12b2lkIDApLEc9PT0ib25pbnB1dCImJk5bWj1HXSYmKFo9Im9uaW5wdXRDYXB0dXJlIiksTltaXT1xfX1YPT0ic2VsZWN0IiYmKE4ubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoTi52YWx1ZSkmJihOLnZhbHVlPW8xKEsuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oWSl7WS5wcm9wcy5zZWxlY3RlZD1OLnZhbHVlLmluZGV4T2YoWS5wcm9wcy52YWx1ZSkhPS0xfSkpLE4uZGVmYXVsdFZhbHVlIT1udWxsJiYoTi52YWx1ZT1vMShLLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKFkpe1kucHJvcHMuc2VsZWN0ZWQ9Ti5tdWx0aXBsZT9OLmRlZmF1bHRWYWx1ZS5pbmRleE9mKFkucHJvcHMudmFsdWUpIT0tMTpOLmRlZmF1bHRWYWx1ZT09WS5wcm9wcy52YWx1ZX0pKSksSy5jbGFzcyYmIUsuY2xhc3NOYW1lPyhOLmNsYXNzPUsuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KE4sImNsYXNzTmFtZSIsUDkpKTpLLmNsYXNzTmFtZSYmKE4uY2xhc3M9Ti5jbGFzc05hbWU9Sy5jbGFzc05hbWUpLCQucHJvcHM9Tn0oQyksQy4kJHR5cGVvZj1BOSwkMyYmJDMoQyl9O3ZhciBLMz1sLl9fcjtsLl9fcj1mdW5jdGlvbihDKXtLMyYmSzMoQykscTM9Qy5fX2N9O3ZhciBYMz1sLmRpZmZlZDtsLmRpZmZlZD1mdW5jdGlvbihDKXtYMyYmWDMoQyk7dmFye3Byb3BzOiQsX19lOkt9PUM7SyE9bnVsbCYmQy50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluICQmJiQudmFsdWUhPT1LLnZhbHVlJiYoSy52YWx1ZT0kLnZhbHVlPT1udWxsPyIiOiQudmFsdWUpLHEzPW51bGx9O3ZhciBlMT0zO2Z1bmN0aW9uIFIyKEMpe3JldHVybiBDPT09ImxhbmRzY2FwZV9sZWZ0Inx8Qz09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIEQwKEMpe3JldHVybiEhQyYmKFIyKEMub3JpZW50YXRpb24pfHxDLndpZHRoPkMuaGVpZ2h0KX1mdW5jdGlvbiBVMChDKXtpZighQ3x8Qy53aWR0aDw9MHx8Qy5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0ICQ9UjIoQy5vcmllbnRhdGlvbil8fEMud2lkdGg+Qy5oZWlnaHQsSz0kP01hdGgubWF4KEMud2lkdGgsQy5oZWlnaHQpOk1hdGgubWluKEMud2lkdGgsQy5oZWlnaHQpLFg9JD9NYXRoLm1pbihDLndpZHRoLEMuaGVpZ2h0KTpNYXRoLm1heChDLndpZHRoLEMuaGVpZ2h0KTtpZihLPT09Qy53aWR0aCYmWD09PUMuaGVpZ2h0KXJldHVybiBDO3JldHVybnsuLi5DLHdpZHRoOkssaGVpZ2h0Olh9fWZ1bmN0aW9uIGgwKEMpe2xldCAkPVUwKEMpLEs9WTMoQz8ub3JpZW50YXRpb24pLFg9TWF0aC5hYnMoSyk9PT05MCxOPSEhQyYmQy53aWR0aD5DLmhlaWdodCxRPUs9PT0xODB8fFgmJiFOO3JldHVybntkaXNwbGF5Q29uZmlnOiQscm90YXRpb25EZWdyZWVzOlE/SzowLG5lZWRzQ3NzUm90YXRpb246USxpbnB1dE9yaWVudGF0aW9uOlE/Qz8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBZMyhDKXtzd2l0Y2goQyl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiB4MChDLCQsSyl7c3dpdGNoKEMpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OksseToxLSR9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLUsseTokfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLSQseToxLUt9O2RlZmF1bHQ6cmV0dXJue3g6JCx5Okt9fX1mdW5jdGlvbiBtMihDLCQpe3N3aXRjaChDKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goJCl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuICR9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaCgkKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gJH1jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goJCl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuICR9ZGVmYXVsdDpyZXR1cm4gJH19dmFyIFc5PTA7ZnVuY3Rpb24gSihDLCQsSyxYLE4sUSl7JHx8KCQ9e30pO3ZhciBaLHEsRz0kO2lmKCJyZWYiaW4gRylmb3IocSBpbiBHPXt9LCQpcT09InJlZiI/Wj0kW3FdOkdbcV09JFtxXTt2YXIgWT17dHlwZTpDLHByb3BzOkcsa2V5OksscmVmOlosX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tVzksX19pOi0xLF9fdTowLF9fc291cmNlOk4sX19zZWxmOlF9O2lmKHR5cGVvZiBDPT0iZnVuY3Rpb24iJiYoWj1DLmRlZmF1bHRQcm9wcykpZm9yKHEgaW4gWilHW3FdPT09dm9pZCAwJiYoR1txXT1aW3FdKTtyZXR1cm4gbC52bm9kZSYmbC52bm9kZShZKSxZfXZhciBHMz1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLHk5PTMsRTk9NCxJOT01O2Z1bmN0aW9uIEMyKHt1cmw6Qyx3c1VybDokLHN0eWxlOkssaW1hZ2VTdHlsZTpYLGNsYXNzTmFtZTpOLG9uSG9tZVByZXNzOlEsb25TdHJlYW1Ub3VjaDpaLG9uU3RyZWFtTXVsdGlUb3VjaDpxLG9uU3RyZWFtQnV0dG9uOkcsc3Vic2NyaWJlRnJhbWU6WSxzdHJlYW1GcmFtZTpCLHN0cmVhbUNvbmZpZzpMLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOkYsaGlkZUNvbnRyb2xzOmssb25TdHJlYW1pbmdDaGFuZ2U6QSxjb25uZWN0aW9uUXVhbGl0eTpffSl7bGV0IEQ9ISFaLHo9dihudWxsKSx3PXYobnVsbCksRT12KG51bGwpLHk9dihudWxsKSxbYyxSXT1PKCExKSxbaCx4XT1PKG51bGwpLFtwLGRdPU8obnVsbCksdT12KG51bGwpLCQxPXYoRik7JDEuY3VycmVudD1GO2xldCBhPXYobnVsbCksW3IsZ109TyhudWxsKTtXKCgpPT57bGV0IFY9YS5jdXJyZW50O2lmKCFWfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgVT1uZXcgUmVzaXplT2JzZXJ2ZXIoKE0pPT57bGV0IGI9TVswXT8uY29udGVudFJlY3Q7aWYoYilnKHt3aWR0aDpiLndpZHRoLGhlaWdodDpiLmhlaWdodH0pfSk7cmV0dXJuIFUub2JzZXJ2ZShWKSwoKT0+VS5kaXNjb25uZWN0KCl9LFtdKTtsZXRbSSxLMV09TygwKSxuPXYoMCksW0oxLGVdPU8oITEpLHM9dihudWxsKTtXKCgpPT57aWYoXz09PSJwb29yIil7aWYoZSghMCkscy5jdXJyZW50KWNsZWFyVGltZW91dChzLmN1cnJlbnQpO3MuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57ZSghMSkscy5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYoZSghMSkscy5jdXJyZW50KWNsZWFyVGltZW91dChzLmN1cnJlbnQpLHMuY3VycmVudD1udWxsO3JldHVybigpPT57aWYocy5jdXJyZW50KWNsZWFyVGltZW91dChzLmN1cnJlbnQpfX0sW19dKTtsZXQgWDE9YCR7Q30vc3RyZWFtLm1qcGVnYDtXKCgpPT57dS5jdXJyZW50PW51bGwsZChudWxsKX0sW0NdKTtsZXQgVD1QKChWKT0+e2lmKCFWfHxWLndpZHRoPD0wfHxWLmhlaWdodDw9MClyZXR1cm47bGV0IFU9dS5jdXJyZW50LE09Vi5vcmllbnRhdGlvbj09PXZvaWQgMCYmVT8ub3JpZW50YXRpb24/ey4uLlYsb3JpZW50YXRpb246VS5vcmllbnRhdGlvbn06VjtpZihVJiZVLndpZHRoPT09TS53aWR0aCYmVS5oZWlnaHQ9PT1NLmhlaWdodCYmVS5vcmllbnRhdGlvbj09PU0ub3JpZW50YXRpb24pcmV0dXJuO3UuY3VycmVudD1NLGQoTSksJDEuY3VycmVudD8uKE0pfSxbXSksUz12KEEpO1MuY3VycmVudD1BLFcoKCk9PntTLmN1cnJlbnQ/LihjKX0sW2NdKSxXKCgpPT57aWYoRCYmTClUKEwpfSxbRCxMLFRdKTtsZXQgaj12KCExKTtqLmN1cnJlbnQ9YztsZXQgaT12KG51bGwpO1coKCk9PntpZighRHx8IVkpcmV0dXJuO2xldCBVPXNldFRpbWVvdXQoKCk9PntpZighai5jdXJyZW50KXgoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSxNPVkoKGIpPT57bi5jdXJyZW50KyssRjEuY3VycmVudD1EYXRlLm5vdygpO2xldCBmPXcuY3VycmVudDtpZihmKXtpZihpLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChpLmN1cnJlbnQpO2kuY3VycmVudD1iLGYuc3JjPWJ9aWYoIWouY3VycmVudCljbGVhclRpbWVvdXQoVSksUighMCkseChudWxsKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KFUpLE0/LigpLGkuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKGkuY3VycmVudCksaS5jdXJyZW50PW51bGx9fSxbRCxZXSk7bGV0IHQ9UCgoVik9PntsZXQgVT1oMCh1LmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sTT14MChVLFYueCxWLnkpLGI9Vi5lZGdlPT09dm9pZCAwP3ZvaWQgMDptMihVLFYuZWRnZSksZj1iPT09dm9pZCAwP3t0eXBlOlYudHlwZSwuLi5NfTp7dHlwZTpWLnR5cGUsLi4uTSxlZGdlOmJ9O2lmKEQpe1o/LihmKTtyZXR1cm59bGV0IEg9eS5jdXJyZW50O2lmKCFIfHxILnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IG09bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGYpKSxvPW5ldyBVaW50OEFycmF5KDErbS5sZW5ndGgpO29bMF09eTksby5zZXQobSwxKSxILnNlbmQobyl9LFtELFpdKSxZMT1QKChWKT0+e2lmKEQpe0c/LihWKTtyZXR1cm59bGV0IFU9eS5jdXJyZW50O2lmKCFVfHxVLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IE09bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246Vn0pKSxiPW5ldyBVaW50OEFycmF5KDErTS5sZW5ndGgpO2JbMF09RTksYi5zZXQoTSwxKSxVLnNlbmQoYil9LFtELEddKSxaMT1QKChWKT0+e2xldCBVPWgwKHUuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixNPXgwKFUsVi54MSxWLnkxKSxiPXgwKFUsVi54MixWLnkyKSxmPXt0eXBlOlYudHlwZSx4MTpNLngseTE6TS55LHgyOmIueCx5MjpiLnl9O2lmKEQpe3E/LihmKTtyZXR1cm59bGV0IEg9eS5jdXJyZW50O2lmKCFIfHxILnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IG09bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGYpKSxvPW5ldyBVaW50OEFycmF5KDErbS5sZW5ndGgpO29bMF09STksby5zZXQobSwxKSxILnNlbmQobyl9LFtELHFdKTtXKCgpPT57aWYoRClyZXR1cm47bGV0IFY9bmV3IEFib3J0Q29udHJvbGxlcixVPSgpPT57ZmV0Y2goYCR7Q30vY29uZmlnYCx7c2lnbmFsOlYuc2lnbmFsfSkudGhlbigoRDEpPT5EMS5qc29uKCkpLnRoZW4oKEQxKT0+e1QoRDEpfSkuY2F0Y2goKCk9Pnt9KX07VSgpO2xldCBNPXNldEludGVydmFsKFUsMTAwMCksYj0kPz9DLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixmPW5ldyBXZWJTb2NrZXQoYik7Zi5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIseS5jdXJyZW50PWYsZi5vbm9wZW49KCk9PntSKCEwKSx4KG51bGwpfSxmLm9uY2xvc2U9KCk9PntSKCExKX0sZi5vbmVycm9yPSgpPT57eCgiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIiksUighMSl9O2xldCBIPW5ldyBBYm9ydENvbnRyb2xsZXIsbT1zZXRJbnRlcnZhbCgoKT0+e0sxKG4uY3VycmVudCksbi5jdXJyZW50PTB9LDEwMDApLG89ITEsVjE9c2V0VGltZW91dCgoKT0+e2lmKCFvKXgoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtsZXQgazE9KGF3YWl0IGZldGNoKFgxLHtzaWduYWw6SC5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIWsxKXJldHVybjtsZXQgYjE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOnAwLHZhbHVlOnkwfT1hd2FpdCBrMS5yZWFkKCk7aWYocDApYnJlYWs7aWYoeTApZm9yKGxldCBMMD0wO0wwPD15MC5sZW5ndGgtYjEubGVuZ3RoO0wwKyspe2xldCBGMj0hMDtmb3IobGV0IFYwPTA7VjA8YjEubGVuZ3RoO1YwKyspaWYoeTBbTDArVjBdIT09YjFbVjBdKXtGMj0hMTticmVha31pZihGMil7aWYobi5jdXJyZW50KyssIW8pbz0hMCxjbGVhclRpbWVvdXQoVjEpfX19fWNhdGNoe319KSgpLCgpPT57SC5hYm9ydCgpLFYuYWJvcnQoKSxjbGVhckludGVydmFsKE0pLGNsZWFySW50ZXJ2YWwobSksY2xlYXJUaW1lb3V0KFYxKSxmLmNsb3NlKCkseS5jdXJyZW50PW51bGx9fSxbQyxYMSxELFQsJF0pO2xldCBGMT12KDApO1coKCk9PntpZighRClyZXR1cm47bGV0IFY9MjAwMCxVPSgpPT57bGV0IGY9RjEuY3VycmVudDtpZighZnx8IWouY3VycmVudClyZXR1cm47aWYoRGF0ZS5ub3coKS1mPlYpUighMSl9LE09c2V0SW50ZXJ2YWwoKCk9PntLMShuLmN1cnJlbnQpLG4uY3VycmVudD0wLFUoKX0sMTAwMCksYj0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4pVSgpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsYiksKCk9PntjbGVhckludGVydmFsKE0pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGIpfX0sW0RdKTtsZXQgUzE9UCgoKT0+e3JldHVybiBEP3cuY3VycmVudDp6LmN1cnJlbnR9LFtEXSksRzE9UCgoKT0+e3JldHVybiBFLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9TMSgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW1MxXSksUDE9UCgoVixVKT0+e2xldCBNPUcxKCk7aWYoIU0pcmV0dXJuO2xldCBiPShVLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLGY9KFUuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7dCh7dHlwZTpWLHg6Yix5OmZ9KX0sW0cxLHRdKSxDMT12KCExKSxxMT12KCExKSxoMT12KCExKSxSMT12KHtkeDowLGR5OjB9KSxXMT12KCExKSxbbTEscTBdPU8oITEpLHYxPXYoe3g6MC41LHk6MC41fSksW1QxLEExXT1PKG51bGwpO1coKCk9PntsZXQgVj0oTSk9PntpZihNLmtleT09PSJBbHQiKXEwKCEwKX0sVT0oTSk9PntpZihNLmtleT09PSJBbHQiKXtpZihxMCghMSksIXExLmN1cnJlbnQpQTEobnVsbCl9fTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLFYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsVSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsViksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixVKX19LFtdKSxXKCgpPT57aWYobTEmJiFxMS5jdXJyZW50KXtsZXQgVj12MS5jdXJyZW50O0ExKHt4MTpWLngseTE6Vi55LHgyOjEtVi54LHkyOjEtVi55fSl9ZWxzZSBpZighbTEmJiFxMS5jdXJyZW50KUExKG51bGwpfSxbbTFdKTtsZXQgajE9dihudWxsKSxDMD12KCExKSx5MT12KDApLCQwPVAoKFYsVSk9PntDMC5jdXJyZW50PSEwO2xldCBNPWoxLmN1cnJlbnQ7aWYoTSljYW5jZWxBbmltYXRpb25GcmFtZSh5MS5jdXJyZW50KSx5MS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e00uc3R5bGUubGVmdD1gJHtWKjEwMH0lYCxNLnN0eWxlLnRvcD1gJHtVKjEwMH0lYCxNLnN0eWxlLmRpc3BsYXk9ImJsb2NrIn0pfSxbXSksSzA9UCgoVixVKT0+e2lmKCFDMC5jdXJyZW50KXJldHVybjtsZXQgTT1qMS5jdXJyZW50O2lmKE0pY2FuY2VsQW5pbWF0aW9uRnJhbWUoeTEuY3VycmVudCkseTEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntNLnN0eWxlLmxlZnQ9YCR7VioxMDB9JWAsTS5zdHlsZS50b3A9YCR7VSoxMDB9JWB9KX0sW10pLGcxPVAoKCk9PntDMC5jdXJyZW50PSExO2xldCBWPWoxLmN1cnJlbnQ7aWYoViljYW5jZWxBbmltYXRpb25GcmFtZSh5MS5jdXJyZW50KSxWLnN0eWxlLmRpc3BsYXk9Im5vbmUifSxbXSksWTA9digwKSxNMT12KG51bGwpLEcwPVAoKCk9PntsZXQgVj1EYXRlLm5vdygpLFU9Vi1ZMC5jdXJyZW50O2lmKFkwLmN1cnJlbnQ9VixVPDMwMCl7aWYoTTEuY3VycmVudCljbGVhclRpbWVvdXQoTTEuY3VycmVudCksTTEuY3VycmVudD1udWxsO2lmKFEpUSgpO2Vsc2UgWTEoImFwcF9zd2l0Y2hlciIpfWVsc2UgTTEuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57aWYoUSlRKCk7ZWxzZSBZMSgiaG9tZSIpO00xLmN1cnJlbnQ9bnVsbH0sMzAwKX0sW1kxLFFdKSxjMT1oMChwKSxRMT1jMS5kaXNwbGF5Q29uZmlnLHcxPSgoKT0+e2lmKCFRMXx8IXIpcmV0dXJuIG51bGw7aWYoci53aWR0aD09PTB8fHIuaGVpZ2h0PT09MClyZXR1cm4gbnVsbDtsZXQgVj1NYXRoLm1pbihyLndpZHRoL1ExLndpZHRoLHIuaGVpZ2h0L1ExLmhlaWdodCk7cmV0dXJue3dpZHRoOlExLndpZHRoKlYsaGVpZ2h0OlExLmhlaWdodCpWfX0pKCksYTE9YzEucm90YXRpb25EZWdyZWVzLGwxPWMxLm5lZWRzQ3NzUm90YXRpb24mJk1hdGguYWJzKGExKT09PTkwLEUxPVgsWDA9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6bDEmJncxP2Ake3cxLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpsMSYmdzE/YCR7dzEud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7YTE9PT0wPyIiOmAgcm90YXRlKCR7YTF9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpHMyxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlgsLi4uYTE9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fTtyZXR1cm4gSigiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLms/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLkt9LGNsYXNzTmFtZTpOLGNoaWxkcmVuOltKKCJkaXYiLHtyZWY6YSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsbWluSGVpZ2h0OjAsbWluV2lkdGg6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIifSxjaGlsZHJlbjpKKCJkaXYiLHtyZWY6RSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIix3aWR0aDp3MT9gJHt3MS53aWR0aH1weGA6IjEwMCUiLGhlaWdodDp3MT9gJHt3MS5oZWlnaHR9cHhgOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIixib3JkZXJSYWRpdXM6RTE/LmJvcmRlclJhZGl1cyxjb3JuZXJTaGFwZTpFMT8uY29ybmVyU2hhcGV9LGNoaWxkcmVuOltKKCJpbWciLHtyZWY6eixzcmM6RD92b2lkIDA6WDEsZHJhZ2dhYmxlOiExLG9uTG9hZDooVik9PntsZXQgVT1WLmN1cnJlbnRUYXJnZXQ7aWYoVS5uYXR1cmFsV2lkdGg+MCYmVS5uYXR1cmFsSGVpZ2h0PjApVCh7d2lkdGg6VS5uYXR1cmFsV2lkdGgsaGVpZ2h0OlUubmF0dXJhbEhlaWdodH0pfSxzdHlsZTpEP3tkaXNwbGF5OiJub25lIn06WDB9KSxEJiZKKCJpbWciLHtyZWY6dyxkcmFnZ2FibGU6ITEsb25Mb2FkOihWKT0+e2xldCBVPVYuY3VycmVudFRhcmdldDtpZihVLm5hdHVyYWxXaWR0aD4wJiZVLm5hdHVyYWxIZWlnaHQ+MClUKHt3aWR0aDpVLm5hdHVyYWxXaWR0aCxoZWlnaHQ6VS5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOlgwfSksSigiZGl2Iix7c3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6RzMsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooVik9PntWLnByZXZlbnREZWZhdWx0KCk7bGV0IFU9RzEoKTtpZighVSlyZXR1cm47bGV0IE09KFYuY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgsYj0oVi5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZihWLmFsdEtleSl7cTEuY3VycmVudD0hMCxoMS5jdXJyZW50PVYuc2hpZnRLZXk7bGV0IGY9e3gxOk0seTE6Yix4MjoxLU0seTI6MS1ifTtSMS5jdXJyZW50PXtkeDoxLU0tTSxkeToxLWItYn0sQTEoZiksWjEoe3R5cGU6ImJlZ2luIiwuLi5mfSk7cmV0dXJufWlmKCQwKE0sYiksYj4wLjg4KUMxLmN1cnJlbnQ9ITAsdCh7dHlwZToiYmVnaW4iLHg6TSx5OmIsZWRnZTplMX0pO2Vsc2UgQzEuY3VycmVudD0hMSxQMSgiYmVnaW4iLFYpfSxvbk1vdXNlTW92ZTooVik9PntsZXQgVT1HMSgpO2lmKCFVKXJldHVybjtsZXQgTT0oVi5jbGllbnRYLVUubGVmdCkvVS53aWR0aCxiPShWLmNsaWVudFktVS50b3ApL1UuaGVpZ2h0O2lmKHYxLmN1cnJlbnQ9e3g6TSx5OmJ9LFYuYnV0dG9ucz09PTApe2lmKFYuYWx0S2V5KUExKHt4MTpNLHkxOmIseDI6MS1NLHkyOjEtYn0pO3JldHVybn1pZihxMS5jdXJyZW50KXtsZXQgZjtpZihoMS5jdXJyZW50KXtsZXQgSD1SMS5jdXJyZW50O2Y9e3gxOk0seTE6Yix4MjpNK0guZHgseTI6YitILmR5fX1lbHNlIGY9e3gxOk0seTE6Yix4MjoxLU0seTI6MS1ifTtBMShmKSxaMSh7dHlwZToibW92ZSIsLi4uZn0pO3JldHVybn1pZihLMChNLGIpLEMxLmN1cnJlbnQpdCh7dHlwZToibW92ZSIseDpNLHk6YixlZGdlOmUxfSk7ZWxzZSBQMSgibW92ZSIsVil9LG9uTW91c2VVcDooVik9PntpZihxMS5jdXJyZW50KXtsZXQgVT1HMSgpO2lmKFUpe2xldCBNPShWLmNsaWVudFgtVS5sZWZ0KS9VLndpZHRoLGI9KFYuY2xpZW50WS1VLnRvcCkvVS5oZWlnaHQ7aWYoaDEuY3VycmVudCl7bGV0IGY9UjEuY3VycmVudDtaMSh7dHlwZToiZW5kIix4MTpNLHkxOmIseDI6TStmLmR4LHkyOmIrZi5keX0pfWVsc2UgWjEoe3R5cGU6ImVuZCIseDE6TSx5MTpiLHgyOjEtTSx5MjoxLWJ9KX1pZihxMS5jdXJyZW50PSExLCFWLmFsdEtleSlBMShudWxsKTtyZXR1cm59aWYoZzEoKSxDMS5jdXJyZW50KXtsZXQgVT1HMSgpO2lmKFUpe2xldCBNPShWLmNsaWVudFgtVS5sZWZ0KS9VLndpZHRoLGI9KFYuY2xpZW50WS1VLnRvcCkvVS5oZWlnaHQ7dCh7dHlwZToiZW5kIix4Ok0seTpiLGVkZ2U6ZTF9KX1DMS5jdXJyZW50PSExO3JldHVybn1QMSgiZW5kIixWKX0sb25Nb3VzZUxlYXZlOihWKT0+e2lmKHExLmN1cnJlbnQpe2lmKFQxKVoxKHt0eXBlOiJlbmQiLC4uLlQxfSk7cTEuY3VycmVudD0hMSxBMShudWxsKTtyZXR1cm59aWYoZzEoKSxDMS5jdXJyZW50KXtsZXQgVT1HMSgpO2lmKFUpe2xldCBNPShWLmNsaWVudFgtVS5sZWZ0KS9VLndpZHRoLGI9KFYuY2xpZW50WS1VLnRvcCkvVS5oZWlnaHQ7dCh7dHlwZToiZW5kIix4Ok0seTpiLGVkZ2U6ZTF9KX1DMS5jdXJyZW50PSExO3JldHVybn1pZihWLmJ1dHRvbnM+MClQMSgiZW5kIixWKTtBMShudWxsKX0sb25Ub3VjaFN0YXJ0OihWKT0+e1YucHJldmVudERlZmF1bHQoKTtsZXQgVT1HMSgpO2lmKCFVKXJldHVybjtpZihWLnRvdWNoZXMubGVuZ3RoPj0yKXtnMSgpO2xldCBIPVYudG91Y2hlc1swXSxtPVYudG91Y2hlc1sxXSxvPXt4MTooSC5jbGllbnRYLVUubGVmdCkvVS53aWR0aCx5MTooSC5jbGllbnRZLVUudG9wKS9VLmhlaWdodCx4MjoobS5jbGllbnRYLVUubGVmdCkvVS53aWR0aCx5MjoobS5jbGllbnRZLVUudG9wKS9VLmhlaWdodH07aWYoIVcxLmN1cnJlbnQmJiFDMS5jdXJyZW50KXQoe3R5cGU6ImVuZCIseDpvLngxLHk6by55MX0pO1cxLmN1cnJlbnQ9ITAscTEuY3VycmVudD0hMCxDMS5jdXJyZW50PSExLEExKG8pLFoxKHt0eXBlOiJiZWdpbiIsLi4ub30pO3JldHVybn1sZXQgTT1WLnRvdWNoZXNbMF07aWYoIU0pcmV0dXJuO2xldCBiPShNLmNsaWVudFgtVS5sZWZ0KS9VLndpZHRoLGY9KE0uY2xpZW50WS1VLnRvcCkvVS5oZWlnaHQ7aWYoJDAoYixmKSxmPjAuODgpQzEuY3VycmVudD0hMCx0KHt0eXBlOiJiZWdpbiIseDpiLHk6ZixlZGdlOmUxfSk7ZWxzZSBDMS5jdXJyZW50PSExLHQoe3R5cGU6ImJlZ2luIix4OmIseTpmfSl9LG9uVG91Y2hNb3ZlOihWKT0+e1YucHJldmVudERlZmF1bHQoKTtsZXQgVT1HMSgpO2lmKCFVKXJldHVybjtpZihXMS5jdXJyZW50JiZWLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgSD1WLnRvdWNoZXNbMF0sbT1WLnRvdWNoZXNbMV0sbz17eDE6KEguY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgseTE6KEguY2xpZW50WS1VLnRvcCkvVS5oZWlnaHQseDI6KG0uY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgseTI6KG0uY2xpZW50WS1VLnRvcCkvVS5oZWlnaHR9O0ExKG8pLFoxKHt0eXBlOiJtb3ZlIiwuLi5vfSk7cmV0dXJufWxldCBNPVYudG91Y2hlc1swXTtpZighTSlyZXR1cm47bGV0IGI9KE0uY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgsZj0oTS5jbGllbnRZLVUudG9wKS9VLmhlaWdodDtpZihLMChiLGYpLEMxLmN1cnJlbnQpdCh7dHlwZToibW92ZSIseDpiLHk6ZixlZGdlOmUxfSk7ZWxzZSB0KHt0eXBlOiJtb3ZlIix4OmIseTpmfSl9LG9uVG91Y2hFbmQ6KFYpPT57Vi5wcmV2ZW50RGVmYXVsdCgpO2xldCBVPUcxKCk7aWYoIVUpcmV0dXJuO2lmKFcxLmN1cnJlbnQpe2lmKFYudG91Y2hlcy5sZW5ndGg8Mil7bGV0IEg9Vi5jaGFuZ2VkVG91Y2hlc1swXSxtPVQxO2lmKEgmJm0pWjEoe3R5cGU6ImVuZCIseDE6KEguY2xpZW50WC1VLmxlZnQpL1Uud2lkdGgseTE6KEguY2xpZW50WS1VLnRvcCkvVS5oZWlnaHQseDI6bS54Mix5MjptLnkyfSk7ZWxzZSBpZihtKVoxKHt0eXBlOiJlbmQiLC4uLm19KTtXMS5jdXJyZW50PSExLHExLmN1cnJlbnQ9ITEsQTEobnVsbCl9cmV0dXJufWxldCBNPVYuY2hhbmdlZFRvdWNoZXNbMF07aWYoIU0pcmV0dXJuO2xldCBiPShNLmNsaWVudFgtVS5sZWZ0KS9VLndpZHRoLGY9KE0uY2xpZW50WS1VLnRvcCkvVS5oZWlnaHQ7aWYoZzEoKSxDMS5jdXJyZW50KXQoe3R5cGU6ImVuZCIseDpiLHk6ZixlZGdlOmUxfSksQzEuY3VycmVudD0hMTtlbHNlIHQoe3R5cGU6ImVuZCIseDpiLHk6Zn0pfX0pLEooImRpdiIse3JlZjpqMSwiZGF0YS10ZXN0aWQiOiJ0b3VjaC1pbmRpY2F0b3IiLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6Im5vbmUiLHdpZHRoOjI0LGhlaWdodDoyNCxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSg1OSwxMzAsMjQ2LDAuNSkiLGJveFNoYWRvdzoiMCAwIDhweCByZ2JhKDU5LDEzMCwyNDYsMC4zKSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLFQxJiZKKE4xLHtjaGlsZHJlbjpbSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6QjMoVDEueDEsVDEueTEpfSksSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6QjMoVDEueDIsVDEueTIpfSldfSksIWMmJiFoJiZKKCJkaXYiLHtzdHlsZTp7Li4uTDMsLi4uWHx8e319LGNoaWxkcmVuOkooInNwYW4iLHtzdHlsZTp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0fSxjaGlsZHJlbjoiQ29ubmVjdGluZy4uLiJ9KX0pLGgmJkooImRpdiIse3N0eWxlOkwzLGNoaWxkcmVuOkooInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmNDQiLGZvbnRTaXplOjE0LHBhZGRpbmc6MjAsdGV4dEFsaWduOiJjZW50ZXIifSxjaGlsZHJlbjpofSl9KSxKMSYmSigiZGl2Iix7c3R5bGU6UzksY2hpbGRyZW46Sigic3BhbiIse3N0eWxlOntjb2xvcjoiI2ZiYmYyNCIsZm9udFNpemU6MTMsZm9udEZhbWlseToibW9ub3NwYWNlIn0sY2hpbGRyZW46IlNsb3cgY29ubmVjdGlvbiJ9KX0pXX0pfSksIWsmJkooImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI0cHggOHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sY2hpbGRyZW46W0ooImJ1dHRvbiIse29uQ2xpY2s6RzAsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLEooInNwYW4iLHtzdHlsZTp7Y29sb3I6ST4wPyIjNGY0IjoiIzg4OCIsZm9udFNpemU6MTIsZm9udEZhbWlseToibW9ub3NwYWNlIixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo2fSxjaGlsZHJlbjpbXyYmSigic3BhbiIseyJkYXRhLXRlc3RpZCI6InF1YWxpdHktZG90IixzdHlsZTp7d2lkdGg6OCxoZWlnaHQ6OCxib3JkZXJSYWRpdXM6IjUwJSIsZGlzcGxheToiaW5saW5lLWJsb2NrIixiYWNrZ3JvdW5kOl89PT0iZ29vZCI/IiM0YWRlODAiOl89PT0iZGVncmFkZWQiPyIjZmFjYzE1IjoiI2VmNDQ0NCJ9fSksSSwiIGZwcyJdfSldfSldfSl9dmFyIFM5PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sTDM9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LFYzPTIwO2Z1bmN0aW9uIEIzKEMsJCl7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHtDKjEwMH0lYCx0b3A6YCR7JCoxMDB9JWAsd2lkdGg6VjMsaGVpZ2h0OlYzLGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIEYwKEMpe2lmKCFDKXJldHVybiJpcGhvbmUiO2xldCAkPUMudG9Mb3dlckNhc2UoKTtpZigkLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKCQuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZigkLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgSTE9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LFQ2PUkxLmlwaG9uZS53aWR0aCxNNj1JMS5pcGhvbmUuaGVpZ2h0LHc2PUkxLmlwaG9uZS5iZXplbFgsYjY9STEuaXBob25lLmJlemVsWSxQNj1JMS5pcGhvbmUuaW5uZXJSYWRpdXMsXzM9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiAkMihDLCQpe2xldCBLPUMmJkMud2lkdGg+MCYmQy5oZWlnaHQ+MD9DOiQsWD1VMChLKTtpZihYKXJldHVybmAke1gud2lkdGh9IC8gJHtYLmhlaWdodH1gO3JldHVybmAke0kxLmlwaG9uZS53aWR0aC0yKkkxLmlwaG9uZS5iZXplbFh9IC8gJHtJMS5pcGhvbmUuaGVpZ2h0LTIqSTEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIEsyKEM9ImlwaG9uZSIsJCl7bGV0IEs9JD9fM1skXTpudWxsO2lmKEspcmV0dXJuIEs7bGV0IFg9STFbQ107cmV0dXJue3dpZHRoOlgud2lkdGgtMipYLmJlemVsWCxoZWlnaHQ6WC5oZWlnaHQtMipYLmJlemVsWX19ZnVuY3Rpb24gWDIoQz0iaXBob25lIiwkKXtpZihEMCgkKSlzd2l0Y2goQyl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaChDKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIEoyKEM9ImlwaG9uZSIsJCl7bGV0IEs9STFbQ10sWD1LLndpZHRoLTIqSy5iZXplbFgsTj1LLmhlaWdodC0yKksuYmV6ZWxZO2lmKFg8TiYmRDAoJCkpcmV0dXJuYCR7Sy5pbm5lclJhZGl1cy9OKjEwMH0lIC8gJHtLLmlubmVyUmFkaXVzL1gqMTAwfSVgO3JldHVybmAke0suaW5uZXJSYWRpdXMvWCoxMDB9JSAvICR7Sy5pbm5lclJhZGl1cy9OKjEwMH0lYH1mdW5jdGlvbiBrMyhDKXtsZXQgJD1JMVtDLnR5cGVdLEs9JC53aWR0aC0yKiQuYmV6ZWxYLFg9JC5oZWlnaHQtMiokLmJlemVsWSxOLFE7aWYoSzxYJiZEMChDLmNvbmZpZz8/bnVsbCkpTj0kLmlubmVyUmFkaXVzL1gsUT0kLmlubmVyUmFkaXVzL0s7ZWxzZSBOPSQuaW5uZXJSYWRpdXMvSyxRPSQuaW5uZXJSYWRpdXMvWDtsZXQgWj1OKkMuY29udGFpbmVyV2lkdGgscT1RKkMuY29udGFpbmVySGVpZ2h0LEc9TWF0aC5zcXJ0KE1hdGgubWF4KFoqcSwwKSk7cmV0dXJue3J4Oloscnk6cSxyR2VvbTpHfX12YXIgeDk9MTMsdjk9NjI7ZnVuY3Rpb24gajIoQyl7bGV0e2NvbnRhaW5lcldpZHRoOiQsY29udGFpbmVySGVpZ2h0Okt9PUMsWD0oRCk9PkQudG9GaXhlZCgzKSxOPShELHopPT57bGV0IHc9eixFPXoseT12OS8yKihNYXRoLlBJLzE4MCksYz0yMjUqTWF0aC5QSS8xODAsUj1jK3ksaD1jLXkseD13K0QqTWF0aC5jb3MoUikscD1FK0QqTWF0aC5zaW4oUiksZD13K0QqTWF0aC5jb3MoaCksdT1FK0QqTWF0aC5zaW4oaCksJDE9YE0gJHtYKHgpfSAke1gocCl9IEEgJHtYKEQpfSAke1goRCl9IDAgMCAxICR7WChkKX0gJHtYKHUpfWAsYT1gTSAke1goZCl9ICR7WCh1KX0gQSAke1goRCl9ICR7WChEKX0gMCAwIDAgJHtYKHgpfSAke1gocCl9YDtyZXR1cm57ZDokMSxkRmlsbDphfX07aWYoISgkPjApfHwhKEs+MCkpe2xldCBEPXg5LHo9TWF0aC5jZWlsKEQrMTQpLHtkOncsZEZpbGw6RX09TihELHopO3JldHVybntkOncsZEZpbGw6RSx2aWV3Qm94U2l6ZTp6fX1sZXR7ckdlb206UX09azMoQyksWj1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKCQsSykpKSxxPVEqMC4zNCtaLEc9TWF0aC5taW4oJCxLKSxZPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLEcqMC4wNTIpKTtxPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLHEsWSkpO2xldCBrPU1hdGgubWF4KDI2LE1hdGguY2VpbChxKzEzKSkse2Q6QSxkRmlsbDpffT1OKHEsayk7cmV0dXJue2Q6QSxkRmlsbDpfLHZpZXdCb3hTaXplOmt9fXZhciBwMj1kMShudWxsKTtmdW5jdGlvbiBOMihDKXtsZXQgJD1zMShwMik7aWYoISQpdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7Q30+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiAkfXZhciBtOT17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uIGo5KHtleGVjOkMsb25Sb3RhdGU6JCxvcmllbnRhdGlvbjpLLGRldmljZVVkaWQ6WCxkZXZpY2VOYW1lOk4sZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpaPSExLGRpc2FibGVkOnE9ITEsY2hpbGRyZW46RyxzdHlsZTpZLC4uLkJ9KXtsZXQgTD1GMChOKSxrPXtleGVjOkMsb25Sb3RhdGU6JCxvcmllbnRhdGlvbjpLLGRldmljZVVkaWQ6WCxkZXZpY2VOYW1lOk4sZGV2aWNlUnVudGltZTpRLGRldmljZVR5cGU6TCxzdHJlYW1pbmc6WixkaXNhYmxlZDpxfHwhWHx8IVp9O3JldHVybiBKKHAyLlByb3ZpZGVyLHt2YWx1ZTprLGNoaWxkcmVuOkooImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4ubTksLi4uWX0sLi4uQixjaGlsZHJlbjpHfSl9KX12YXIgcDk9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LGY5PXQxKGZ1bmN0aW9uKHtuYW1lOiQsc3VidGl0bGU6SyxoaWRlQ2hldnJvbjpYLHN0eWxlOk4sb25Nb3VzZUVudGVyOlEsb25Nb3VzZUxlYXZlOlosLi4ucX0sRyl7bGV0IFk9TjIoIlRpdGxlIiksW0IsTF09TyghMSksRj0kPz9ZLmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLGs9Sz8/KFkuZGV2aWNlUnVudGltZT9ZLmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBKKCJidXR0b24iLHtyZWY6Ryx0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KEEpPT57TCghMCksUT8uKEEpfSxvbk1vdXNlTGVhdmU6KEEpPT57TCghMSksWj8uKEEpfSxzdHlsZTp7Li4ucDksYmFja2dyb3VuZDpCPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uTn0sLi4ucSxjaGlsZHJlbjpbSigic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltGLCFYJiZKKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOkooInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLEooInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOmt9KV19KX0pLGw5PXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH07ZnVuY3Rpb24gdTkoe3N0eWxlOkMsLi4uJH0pe3JldHVybiBKKCJkaXYiLHtzdHlsZTp7Li4ubDksLi4uQ30sLi4uJH0pfXZhciBvOT17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIscGFkZGluZzo2LGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZC1jb2xvciAwLjE1cywgY29sb3IgMC4xNXMifSxRMj10MShmdW5jdGlvbih7Zm9yY2VEaXNhYmxlZDokLHN0eWxlOkssZGlzYWJsZWQ6WCxvbk1vdXNlRW50ZXI6Tixvbk1vdXNlTGVhdmU6USxjaGlsZHJlbjpaLC4uLnF9LEcpe2xldCBZPXMxKHAyKSxCPVh8fCR8fFk/LmRpc2FibGVkLFtMLEZdPU8oITEpO3JldHVybiBKKCJidXR0b24iLHtyZWY6Ryx0eXBlOiJidXR0b24iLGRpc2FibGVkOkIsb25Nb3VzZUVudGVyOihrKT0+e0YoITApLE4/LihrKX0sb25Nb3VzZUxlYXZlOihrKT0+e0YoITEpLFE/LihrKX0sc3R5bGU6ey4uLm85LGNvbG9yOkI/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6TCYmIUI/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6Qj8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5LfSwuLi5xLGNoaWxkcmVuOlp9KX0pO2Z1bmN0aW9uIGQ5KCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKCgkKT0+YC1lICckeyR9J2ApLnJlZHVjZSgoJCxLKT0+YCR7JH0gJHtLfWAsIm9zYXNjcmlwdCIpfXZhciBjOT17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxhOT1KKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksaTk9Sigic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMTQuNSA0aC01TDcgN0g0YTIgMiAwIDAgMC0yIDJ2OWEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJWOWEyIDIgMCAwIDAtMi0yaC0zeiJ9KSxKKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiNCJ9KV19KSxyOT1KKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTEyIDVINmEyIDIgMCAwIDAtMiAydjMifSksSigicGF0aCIse2Q6Im05IDggMy0zLTMtMyJ9KSxKKCJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn0pXX0pLG45PXQxKGZ1bmN0aW9uKHtvbkNsaWNrOiQsLi4uS30sWCl7bGV0IE49TjIoIkhvbWVCdXR0b24iKTtyZXR1cm4gSihRMix7cmVmOlgsImFyaWEtbGFiZWwiOiJIb21lIixvbkNsaWNrOihRKT0+e2lmKCQ/LihRKSxRLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKE4uZGV2aWNlVHlwZT09PSJ3YXRjaCIpTi5leGVjKGQ5KCkpO2Vsc2UgTi5leGVjKCJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUiKX0sLi4uSyxjaGlsZHJlbjphOX0pfSksczk9dDEoZnVuY3Rpb24oe29uQ2xpY2s6JCwuLi5LfSxYKXtsZXQgTj1OMigiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBKKFEyLHtyZWY6WCwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KFEpPT57aWYoJD8uKFEpLFEuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoTi5kZXZpY2VVZGlkKU4uZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7Ti5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uSyxjaGlsZHJlbjppOX0pfSksdDk9dDEoZnVuY3Rpb24oe29uQ2xpY2s6JCxmb3JjZURpc2FibGVkOkssLi4uWH0sTil7bGV0IFE9TjIoIlJvdGF0ZUJ1dHRvbiIpLFo9US5kZXZpY2VUeXBlPT09IndhdGNoInx8US5kZXZpY2VUeXBlPT09InZpc2lvbiIsW3EsR109TygicG9ydHJhaXQiKTtyZXR1cm4gVygoKT0+e0coUS5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtRLmRldmljZVVkaWQsUS5vcmllbnRhdGlvbl0pLEooUTIse3JlZjpOLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpLfHxaLG9uQ2xpY2s6KFkpPT57aWYoJD8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIVEuZGV2aWNlVWRpZHx8WilyZXR1cm47bGV0IEI9YzlbUS5vcmllbnRhdGlvbj8/cV07aWYoRyhCKSxRLm9uUm90YXRlKVEub25Sb3RhdGUoQik7ZWxzZSBRLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHtCfSAtZCAke1EuZGV2aWNlVWRpZH1gKX0sLi4uWCxjaGlsZHJlbjpyOX0pfSksTzE9ajk7TzEuVGl0bGU9Zjk7TzEuQWN0aW9ucz11OTtPMS5CdXR0b249UTI7TzEuSG9tZUJ1dHRvbj1uOTtPMS5TY3JlZW5zaG90QnV0dG9uPXM5O08xLlJvdGF0ZUJ1dHRvbj10OTtmdW5jdGlvbiBmMSh7b3BlbjpDfSl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOmBsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIFt0cmFuc2l0aW9uOnRyYW5zZm9ybV8wLjE1cyxjb2xvcl8wLjEyc10gJHtDPyJyb3RhdGUtMTgwIjoicm90YXRlLTAifWAsY2hpbGRyZW46SigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gWjIoe2RpcjpDfSl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjpDPT09InVwIj9KKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6SigicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiB2MCgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpKKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIGYyKCl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltKKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksSigicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiBnMCgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gbDIoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiJ9KSxKKCJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6In0pXX0pfWZ1bmN0aW9uIHUyKCl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0IDIgOSAxMyIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNNi4wMDg1MiAxNC44MDU0QzUuODkxODEgMTQuOTM1IDUuNzU4MTUgMTQuOTk5OCA1LjYwNzU2IDE0Ljk5OThDNS40NTY5NiAxNS4wMDMzIDUuMzIzMyAxNC45NjEzIDUuMjA2NTkgMTQuODczN0M1LjA5MzY0IDE0Ljc4NjEgNS4wMjU4NyAxNC42NzIzIDUuMDAzMjggMTQuNTMyMkM0Ljk4NDQ2IDE0LjM5MjEgNS4wNDY1OCAxNC4yNDUgNS4xODk2NSAxNC4wOTA5TDYuOTQ1OTkgMTIuMTUyMkw3LjI0NTMgMTAuODc1NUw4LjE5OTcxIDExLjk4OTNMOC4wNTg1MyAxMi4zOTM5QzguMDIwODggMTIuNDk1NSA3Ljk4Njk5IDEyLjU3MDggNy45NTY4NyAxMi42MTk4QzcuOTMwNTIgMTIuNjY4OCA3Ljg3NDA0IDEyLjc0MDYgNy43ODc0NSAxMi44MzUyTDYuMDA4NTIgMTQuODA1NFpNMTAuMzQ1NyAxNC42NDI1TDkuMTAzMjkgMTIuMzA0NkM5LjA3Njk0IDEyLjI2MjUgOS4wNTQzNSAxMi4yMjIzIDkuMDM1NTMgMTIuMTgzN0M5LjAxNjcgMTIuMTQ1MiA4Ljk3NzE3IDEyLjA5MDkgOC45MTY5MyAxMi4wMjA5TDcuNzE5NjggMTAuNjE4MUM3LjQ5Mzc5IDEwLjM1NTQgNy4zMzc1NCAxMC4xMjk1IDcuMjUwOTUgOS45NDAzNEM3LjE2NDM1IDkuNzQ3NyA3LjEzNDI0IDkuNDk5MDEgNy4xNjA1OSA5LjE5NDI5TDcuMjYyMjQgNy45ODA2NUM3LjI2OTc3IDcuOTA3MSA3LjIzMjEyIDcuODU0NTYgNy4xNDkyOSA3LjgyMzA0QzcuMDY2NDcgNy43OTE1MSA2Ljk4NTUyIDcuODA5MDMgNi45MDY0NiA3Ljg3NTU3TDYuNDcxNjEgOC4yNDMzNEw2LjM0MTcyIDkuNjcyMzlDNi4zMjI4OSA5Ljg0NzUyIDYuMjY0NTQgOS45Nzg4NyA2LjE2NjY1IDEwLjA2NjRDNi4wNjg3NiAxMC4xNTQgNS45Mzg4NyAxMC4xOTI1IDUuNzc2OTggMTAuMTgyQzUuNjExMzIgMTAuMTc1IDUuNDgzMzEgMTAuMTE5IDUuMzkyOTUgMTAuMDEzOUM1LjMwNjM2IDkuOTA4ODIgNS4yNjg3MSA5Ljc3Mzk3IDUuMjgwMDEgOS42MDkzNUw1LjM4NzMxIDguMzA2MzlDNS40MDIzNyA4LjEyNzc2IDUuNDM4MTMgNy45NzU0IDUuNDk0NjEgNy44NDkzMUM1LjU1NDg1IDcuNzIzMjEgNS42NjAyNiA3LjU5MTg3IDUuODEwODYgNy40NTUyN0w2LjcxNDQ1IDYuNjI1MTZDNy4wMDQzNSA2LjM2MjQ3IDcuMjY5NzcgNi4xNjEwNyA3LjUxMDczIDYuMDIwOTZDNy43NTE2OCA1Ljg3NzM2IDguMDI4NDEgNS44MDU1NiA4LjM0MDkgNS44MDU1NkM4Ljc1ODggNS44MDU1NiA5LjA3ODgyIDUuOTMzNCA5LjMwMDk1IDYuMTg5MDlDOS41MjY4NSA2LjQ0NDc4IDkuNjI0NzQgNi43NjE3NiA5LjU5NDYyIDcuMTQwMDRMOS40NzYwMiA4LjczMTk1QzkuNDUzNDMgOS4wMTU2NiA5LjQxOTU1IDkuMjYyNTkgOS4zNzQzNyA5LjQ3Mjc1QzkuMzI5MTkgOS42ODI5IDkuMjUzODkgOS45Mjk4MyA5LjE0ODQ3IDEwLjIxMzVMOS4wOTIgMTAuMzYwNkw5Ljg2NTY5IDExLjM3OTlDOS45MjIxNyAxMS40NTM0IDkuOTgwNTIgMTEuNTM0IDEwLjA0MDggMTEuNjIxNkMxMC4xMDEgMTEuNzA5MSAxMC4xNTM3IDExLjc5NjcgMTAuMTk4OSAxMS44ODQzTDExLjQwNzQgMTQuMTY0NEMxMS41MDUzIDE0LjM1MDEgMTEuNTI0MSAxNC41MTEyIDExLjQ2MzkgMTQuNjQ3OEMxMS40MDM3IDE0Ljc4NDQgMTEuMzAyIDE0Ljg4MjUgMTEuMTU4OSAxNC45NDJDMTEuMDE5NiAxNS4wMDE1IDEwLjg3MDkgMTUuMDEwMyAxMC43MTI4IDE0Ljk2ODNDMTAuNTU4NCAxNC45MjYyIDEwLjQzNjEgMTQuODE3NyAxMC4zNDU3IDE0LjY0MjVaTTEyLjQwNyA3Ljk2NDg5QzEyLjU4NCA3Ljk2NDg5IDEyLjcyNyA4LjAxMDQyIDEyLjgzNjIgOC4xMDE0OUMxMi45NDU0IDguMTg5MDUgMTMgOC4zMDYzOSAxMyA4LjQ1MzVDMTMgOC42MTExMSAxMi45NDU0IDguNzMzNyAxMi44MzYyIDguODIxMjdDMTIuNzMwOCA4LjkwODgzIDEyLjU4NzcgOC45NTI2MSAxMi40MDcgOC45NTI2MUgxMS4xMzA3QzEwLjk1MzggOC45NTI2MSAxMC44MTQ1IDguOTM2ODUgMTAuNzEyOCA4LjkwNTMzQzEwLjYxMTIgOC44NzAzIDEwLjUxMzMgOC44MDcyNiAxMC40MTkxIDguNzE2MTlMMTAuMDUyMSA4LjM3OTk0TDEwLjE0MjQgNy4wNDAyMUwxMS4wMzQ3IDcuOTY0ODlIMTIuNDA3Wk05LjAwMTY0IDUuMzExNjlDOC43NzE5OCA1LjMxMTY5IDguNTYzMDMgNS4yNjA5MSA4LjM3NDc4IDUuMTU5MzNDOC4xODY1MyA1LjA1NDI2IDguMDM1OTQgNC45MTQxNSA3LjkyMjk5IDQuNzM5MDNDNy44MTM4MSA0LjU2MzkgNy43NTkyMSA0LjM2OTUgNy43NTkyMSA0LjE1NTg1QzcuNzU5MjEgMy45NDIxOSA3LjgxMzgxIDMuNzQ3OCA3LjkyMjk5IDMuNTcyNjdDOC4wMzU5NCAzLjM5NzU0IDguMTg2NTMgMy4yNTkxOSA4LjM3NDc4IDMuMTU3NjJDOC41NjMwMyAzLjA1MjU0IDguNzcxOTggMyA5LjAwMTY0IDNDOS4yMzEzIDMgOS40NDAyNiAzLjA1MjU0IDkuNjI4NSAzLjE1NzYyQzkuODE2NzUgMy4yNTkxOSA5Ljk2NTQ2IDMuMzk3NTQgMTAuMDc0NiAzLjU3MjY3QzEwLjE4NzYgMy43NDc4IDEwLjI0NDEgMy45NDIxOSAxMC4yNDQxIDQuMTU1ODVDMTAuMjQ0MSA0LjM2OTUgMTAuMTg3NiA0LjU2MzkgMTAuMDc0NiA0LjczOTAzQzkuOTY1NDYgNC45MTQxNSA5LjgxNjc1IDUuMDU0MjYgOS42Mjg1IDUuMTU5MzNDOS40NDAyNiA1LjI2MDkxIDkuMjMxMyA1LjMxMTY5IDkuMDAxNjQgNS4zMTE2OVoifSl9KX1mdW5jdGlvbiBvMigpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjI2IDEgMTIgMTQiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTMzLjI0MzcgNC41ODQ1OUMzMy4wMDA4IDQuNTg0NTkgMzIuNzgxNyA0LjUyNzI4IDMyLjU4NjYgNC40MTI2OEMzMi4zOTE1IDQuMjk0MTIgMzIuMjM0MiA0LjEzODAxIDMyLjExNDcgMy45NDQzN0MzMS45OTkyIDMuNzQ2NzcgMzEuOTQxNCAzLjUyOTQxIDMxLjk0MTQgMy4yOTIyOUMzMS45NDE0IDMuMDUxMjIgMzEuOTk5MiAyLjgzMzg3IDMyLjExNDcgMi42NDAyMkMzMi4yMzQyIDIuNDQ2NTcgMzIuMzkxNSAyLjI5MjQ1IDMyLjU4NjYgMi4xNzc4NEMzMi43ODE3IDIuMDU5MjggMzMuMDAwOCAyIDMzLjI0MzcgMkMzMy40ODI2IDIgMzMuNjk5NyAyLjA1OTI4IDMzLjg5NDggMi4xNzc4NEMzNC4wOTM5IDIuMjkyNDUgMzQuMjUxMiAyLjQ0NjU3IDM0LjM2NjcgMi42NDAyMkMzNC40ODYyIDIuODMzODcgMzQuNTQ1OSAzLjA1MTIyIDM0LjU0NTkgMy4yOTIyOUMzNC41NDU5IDMuNTI5NDEgMzQuNDg2MiAzLjc0Njc3IDM0LjM2NjcgMy45NDQzN0MzNC4yNTEyIDQuMTM4MDEgMzQuMDkzOSA0LjI5NDEyIDMzLjg5NDggNC40MTI2OEMzMy42OTk3IDQuNTI3MjggMzMuNDgyNiA0LjU4NDU5IDMzLjI0MzcgNC41ODQ1OVpNMzEuMjAwNyA5Ljc0MTkxQzMxLjA3MzMgOS42NzA3NyAzMC45NDE5IDkuNTk1NjggMzAuODA2NSA5LjUxNjY0QzMwLjY3NSA5LjQzNzYgMzAuNTU5NiA5LjM0Mjc2IDMwLjQ2IDkuMjMyMUMzMC4zNjA0IDkuMTE3NDkgMzAuMjkyNyA4Ljk3NzIgMzAuMjU2OSA4LjgxMTIyQzMwLjIyNSA4LjY0MTI4IDMwLjI0NDkgOC40Mjk4NSAzMC4zMTY2IDguMTc2OTNMMzAuODA2NSA2LjQ4MTUzQzMwLjgzODMgNi4zNjY5MiAzMC44MTg0IDYuMjc5OTggMzAuNzQ2NyA2LjIyMDdDMzAuNjc5IDYuMTU3NDcgMzAuNTk3NCA2LjEyOTgxIDMwLjUwMTggNi4xMzc3MUwyOS42NTk1IDYuMTk2OTlMMjkuNDAyNyA3LjkyMjAyQzI5LjM3ODggOC4xMDc3NyAyOS4zMTUxIDguMjQ2MDkgMjkuMjExNSA4LjMzNjk4QzI5LjEwOCA4LjQyNzg4IDI4Ljk3MjYgOC40NjU0MiAyOC44MDUzIDguNDQ5NjFDMjguNjQyIDguNDMzOCAyOC41MTg2IDguMzY2NjIgMjguNDM0OSA4LjI0ODA2QzI4LjM1MTMgOC4xMjk1IDI4LjMyMTQgNy45NzczNSAyOC4zNDUzIDcuNzkxNjFMMjguNjI2MSA1LjY4MTI2QzI4LjY1IDUuNTExMzIgMjguNzE1NyA1LjM3NDk4IDI4LjgyMzIgNS4yNzIyM0MyOC45MzA4IDUuMTY5NDggMjkuMDY4MSA1LjExMjE3IDI5LjIzNTQgNS4xMDAzMkwzMS4zMzIxIDQuOTUyMTJDMzEuODgxNyA0LjkxMjYgMzIuMzM1NyA0Ljk2OTkgMzIuNjk0MSA1LjEyNDAzQzMzLjA1MjUgNS4yNzgxNiAzMy4zNjcxIDUuNTM4OTkgMzMuNjM3OSA1LjkwNjUyTDM0LjY3MTQgNy4zMjMzTDM2LjE3MDggNi42NjUzQzM2LjMzOCA2LjU5MDIxIDM2LjQ4OTMgNi41NzQ0IDM2LjYyNDggNi42MTc4N0MzNi43NjAyIDYuNjU3MzkgMzYuODY1NyA2Ljc1MjI0IDM2Ljk0MTQgNi45MDI0MkMzNy4wMTMgNy4wNTI1OSAzNy4wMTkgNy4xOTQ4NiAzNi45NTkzIDcuMzI5MjNDMzYuOTAzNSA3LjQ2MzYgMzYuNzkyIDcuNTY4MzIgMzYuNjI0OCA3LjY0MzQxTDM0LjczMTEgOC40NzkyNUMzNC42MDM3IDguNTM4NTMgMzQuNDc0MyA4LjU1MDM5IDM0LjM0MjggOC41MTQ4MkMzNC4yMTU0IDguNDc1MyAzNC4xMTM4IDguNDAwMjEgMzQuMDM4MiA4LjI4OTU2TDMzLjM4MTEgNy4zMzUxNkMzMy4zMTM0IDcuMjQwMzEgMzMuMjI5OCA3LjE5ODgxIDMzLjEzMDIgNy4yMTA2N0MzMy4wMzA2IDcuMjIyNTMgMzIuOTY0OSA3LjI4Mzc4IDMyLjkzMzEgNy4zOTQ0NEwzMi40OTEgOC45Mjk3OEwzNC43MzExIDEwLjM4ODFDMzQuODQyNiAxMC40NTkyIDM0LjkyMjMgMTAuNTU2IDM0Ljk3MDEgMTAuNjc4NUMzNS4wMTc5IDEwLjgwMSAzNS4wMjk4IDEwLjkyNTUgMzUuMDA1OSAxMS4wNTJDMzQuOTg2IDExLjE3NDUgMzQuOTI4MiAxMS4yNzUzIDM0LjgzMjcgMTEuMzU0M0wzMi43NzE4IDEzLjA5NzFDMzIuNjA4NSAxMy4yMzU0IDMyLjQ0NTIgMTMuMjk4NyAzMi4yODE5IDEzLjI4NjhDMzIuMTIyNiAxMy4yNzUgMzEuOTkzMiAxMy4yMTM3IDMxLjg5MzcgMTMuMTAzMUMzMS43OTgxIDEyLjk5NjQgMzEuNzU0MyAxMi44NjU5IDMxLjc2MjIgMTIuNzExOEMzMS43NzAyIDEyLjU1MzcgMzEuODUzOCAxMi40MDc1IDMyLjAxMzEgMTIuMjczMUwzMy40ODg2IDExLjAxNjRMMzEuMjAwNyA5Ljc0MTkxWk0yNy4yMDQ0IDE0Ljg2MzdDMjcuMDg0OSAxNC43NTcgMjcuMDE3MiAxNC42MTg2IDI3LjAwMTMgMTQuNDQ4N0MyNi45ODkzIDE0LjI3ODggMjcuMDYxIDE0LjExNjcgMjcuMjE2MyAxMy45NjI2TDI5LjIyMzUgMTEuOTc2N0wyOS45MzQzIDkuNDgxMDhDMzAuMDQxOCA5LjYxNTQ0IDMwLjE3NTMgOS43NDU4NiAzMC4zMzQ1IDkuODcyMzJDMzAuNDk3OCA5Ljk5NDgzIDMwLjY5MyAxMC4xMTczIDMwLjkyIDEwLjIzOTlMMzEuMTE3MSAxMC4zNDY2TDMwLjMwNDcgMTIuNDMzMkMzMC4yNTI5IDEyLjU1NTcgMzAuMjA5MSAxMi42NDA3IDMwLjE3MzMgMTIuNjg4MUMzMC4xNDE0IDEyLjczNTUgMzAuMDg1NiAxMi43OTg4IDMwLjAwNiAxMi44Nzc4TDI4LjA3MDYgMTQuNzgwN0MyNy45MTkyIDE0LjkyNjkgMjcuNzYzOSAxNSAyNy42MDQ2IDE1QzI3LjQ0OTMgMTUgMjcuMzE1OSAxNC45NTQ2IDI3LjIwNDQgMTQuODYzN1oifSl9KX1mdW5jdGlvbiBkMigpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQ5IDMgMTYgMTIiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTU3LjAwMjggMTEuOTQ5QzU2Ljg0OCAxMS45NDkgNTYuNzE3MiAxMS44OTg3IDU2LjYxMDMgMTEuNzk4QzU2LjUwMzUgMTEuNjkzOSA1Ni40NTAxIDExLjU3MDcgNTYuNDUwMSAxMS40Mjg0VjkuMDI4NjNMNTQuNDIxNiA3LjEwNzc2QzU0LjIyMjcgNi45MjAzNSA1NC4wOTU1IDYuNjk4MjUgNTQuMDQwMyA2LjQ0MTQ0QzUzLjk4NSA2LjE4MTE2IDU0LjAxMDggNS45Mjc4MiA1NC4xMTc2IDUuNjgxNDJDNTQuMjI4MiA1LjQzODQ5IDU0LjM5NzcgNS4yNDQxNCA1NC42MjYxIDUuMDk4MzlDNTQuODU4MyA0Ljk0OTE2IDU1LjExNjIgNC44NzQ1NCA1NS4zOTk5IDQuODc0NTRINTguMTEzN0M1OC40MjMyIDQuODc0NTQgNTguNjg0OCA0Ljk3NjkyIDU4Ljg5ODUgNS4xODE2OEM1OS4xMTU5IDUuMzgyOTYgNTkuMjI0NiA1LjYyOTM2IDU5LjIyNDYgNS45MjA4N1Y3Ljc2MzY2SDYwLjg5OTNDNjEuMDUwNCA3Ljc2MzY2IDYxLjE3OTQgNy44MTM5OSA2MS4yODYyIDcuOTE0NjNDNjEuMzkzMSA4LjAxNTI3IDYxLjQ0NjUgOC4xMzg0NyA2MS40NDY1IDguMjg0MjNDNjEuNDQ2NSA4LjQyNjUxIDYxLjM5MzEgOC41NDc5OCA2MS4yODYyIDguNjQ4NjJDNjEuMTc5NCA4Ljc0OTI2IDYxLjA1MDQgOC43OTk1OCA2MC44OTkzIDguNzk5NThINTguNjcxOUM1OC41MjA5IDguNzk5NTggNTguMzkwMSA4Ljc0OTI2IDU4LjI3OTUgOC42NDg2MkM1OC4xNzI3IDguNTQ3OTggNTguMTE5MiA4LjQyNjUxIDU4LjExOTIgOC4yODQyM1Y2Ljk4ODAzQzU4LjExOTIgNi45MTg2MiA1OC4wOTkgNi44NTQ0MiA1OC4wNTg0IDYuNzk1NDJDNTguMDE3OSA2LjczMjk1IDU3Ljk0NDIgNi43MDE3MiA1Ny44MzczIDYuNzAxNzJINTYuMDYzMkM1NS45OTMyIDYuNzAxNzIgNTUuOTQ1MyA2LjcyOTQ4IDU1LjkxOTUgNi43ODUwMUM1NS44OTc0IDYuODM3MDYgNTUuOTA4NCA2Ljg4NzM5IDU1Ljk1MjYgNi45MzU5N0w1Ny40MDA3IDguNDU2MDFDNTcuNTAzOSA4LjU2MzYgNTcuNTU1NSA4LjY4MTU5IDU3LjU1NTUgOC44MDk5OVYxMS40Mjg0QzU3LjU1NTUgMTEuNTcwNyA1Ny41MDAyIDExLjY5MzkgNTcuMzg5NyAxMS43OThDNTcuMjgyOCAxMS44OTg3IDU3LjE1MzggMTEuOTQ5IDU3LjAwMjggMTEuOTQ5Wk01My4wMDEyIDE0QzUyLjU4NDggMTQgNTIuMTk0MiAxMy45MjcxIDUxLjgyOTUgMTMuNzgxNEM1MS40Njg0IDEzLjYzNTYgNTEuMTQ5NiAxMy40MzI2IDUwLjg3MzMgMTMuMTcyM0M1MC42MDA2IDEyLjkxMiA1MC4zODY5IDEyLjYxMTggNTAuMjMyMSAxMi4yNzE3QzUwLjA3NzQgMTEuOTI4MiA1MCAxMS41NjAzIDUwIDExLjE2ODFDNTAgMTAuNzc2IDUwLjA3NzQgMTAuNDA5OSA1MC4yMzIxIDEwLjA2OThDNTAuMzg2OSA5LjcyNjE4IDUwLjYwMDYgOS40MjQyNiA1MC44NzMzIDkuMTYzOThDNTEuMTQ5NiA4LjkwMzcgNTEuNDY4NCA4LjcwMDY4IDUxLjgyOTUgOC41NTQ5MkM1Mi4xOTQyIDguNDA5MTYgNTIuNTg0OCA4LjMzNjI4IDUzLjAwMTIgOC4zMzYyOEM1My40MjEyIDguMzM2MjggNTMuODExOCA4LjQwOTE2IDU0LjE3MjkgOC41NTQ5MkM1NC41Mzc3IDguNzAwNjggNTQuODU2NCA4LjkwMzcgNTUuMTI5MSA5LjE2Mzk4QzU1LjQwNTQgOS40MjQyNiA1NS42MjEgOS43MjYxOCA1NS43NzU4IDEwLjA2OThDNTUuOTMwNSAxMC40MDk5IDU2LjAwNzkgMTAuNzc2IDU2LjAwNzkgMTEuMTY4MUM1Ni4wMDc5IDExLjU2MDMgNTUuOTMwNSAxMS45MjgyIDU1Ljc3NTggMTIuMjcxN0M1NS42MjEgMTIuNjExOCA1NS40MDU0IDEyLjkxMiA1NS4xMjkxIDEzLjE3MjNDNTQuODU2NCAxMy40MzI2IDU0LjUzNzcgMTMuNjM1NiA1NC4xNzI5IDEzLjc4MTRDNTMuODExOCAxMy45MjcxIDUzLjQyMTIgMTQgNTMuMDAxMiAxNFpNNTMuMDAxMiAxMy4yNjZDNTMuNDEwMiAxMy4yNjYgNTMuNzgyMyAxMy4xNzA2IDU0LjExNzYgMTIuOTc5N0M1NC40NTY2IDEyLjc5MjMgNTQuNzI1NiAxMi41NDA3IDU0LjkyNDYgMTIuMjI0OUM1NS4xMjczIDExLjkwNTYgNTUuMjI4NiAxMS41NTM0IDU1LjIyODYgMTEuMTY4MUM1NS4yMjg2IDEwLjc4MjkgNTUuMTI3MyAxMC40MzI0IDU0LjkyNDYgMTAuMTE2NkM1NC43MjU2IDkuNzk3MzMgNTQuNDU2NiA5LjU0Mzk5IDU0LjExNzYgOS4zNTY1OUM1My43ODIzIDkuMTY1NzEgNTMuNDEwMiA5LjA3MDI4IDUzLjAwMTIgOS4wNzAyOEM1Mi41OTU5IDkuMDcwMjggNTIuMjIzNyA5LjE2NTcxIDUxLjg4NDcgOS4zNTY1OUM1MS41NDk0IDkuNTQzOTkgNTEuMjgwNCA5Ljc5NzMzIDUxLjA3NzggMTAuMTE2NkM1MC44Nzg4IDEwLjQzMjQgNTAuNzc5MyAxMC43ODI5IDUwLjc3OTMgMTEuMTY4MUM1MC43NzkzIDExLjU1MzQgNTAuODc4OCAxMS45MDU2IDUxLjA3NzggMTIuMjI0OUM1MS4yODA0IDEyLjU0MDcgNTEuNTQ5NCAxMi43OTIzIDUxLjg4NDcgMTIuOTc5N0M1Mi4yMjM3IDEzLjE3MDYgNTIuNTk1OSAxMy4yNjYgNTMuMDAxMiAxMy4yNjZaTTYyLjQ4MDEgOS42MTE2NkM2Mi4zNjIyIDkuNTE0NDkgNjIuMzAxNCA5LjQxNTU4IDYyLjI5NzcgOS4zMTQ5NEM2Mi4yOTc3IDkuMjEwODMgNjIuMzMwOCA5LjEyNDA3IDYyLjM5NzIgOS4wNTQ2NkM2Mi40NjcyIDguOTg1MjUgNjIuNTUzOCA4Ljk0NTM0IDYyLjY1NjkgOC45MzQ5M0M2Mi43NjM4IDguOTIxMDUgNjIuODY4OCA4Ljk1NTc1IDYyLjk3MiA5LjAzOTA0QzYzLjI4ODkgOS4zMDI3OSA2My41Mzk0IDkuNjE2ODcgNjMuNzIzNiA5Ljk4MTI2QzYzLjkwNzkgMTAuMzQ1NyA2NCAxMC43NDEzIDY0IDExLjE2ODFDNjQgMTEuNTYwMyA2My45MjI2IDExLjkyODIgNjMuNzY3OSAxMi4yNzE3QzYzLjYxMzEgMTIuNjExOCA2My4zOTc2IDEyLjkxMiA2My4xMjEyIDEzLjE3MjNDNjIuODQ4NSAxMy40MzI2IDYyLjUyOTggMTMuNjM1NiA2Mi4xNjUgMTMuNzgxNEM2MS44MDM5IDEzLjkyNzEgNjEuNDE1MiAxNCA2MC45OTg4IDE0QzYwLjU4MjQgMTQgNjAuMTkxOSAxMy45MjcxIDU5LjgyNzEgMTMuNzgxNEM1OS40NjIzIDEzLjYzNTYgNTkuMTQxNyAxMy40MzI2IDU4Ljg2NTQgMTMuMTcyM0M1OC41OTI3IDEyLjkxMiA1OC4zNzkgMTIuNjExOCA1OC4yMjQyIDEyLjI3MTdDNTguMDY5NSAxMS45MjgyIDU3Ljk5MjEgMTEuNTYwMyA1Ny45OTIxIDExLjE2ODFDNTcuOTkyMSAxMC45NjM0IDU4LjAxNDIgMTAuNzY1NiA1OC4wNTg0IDEwLjU3NDdDNTguMTA2MyAxMC4zODA0IDU4LjE3MjcgMTAuMTkzIDU4LjI1NzQgMTAuMDEyNUM1OC4zMDkgOS45MDE0NCA1OC4zODA4IDkuODMwMyA1OC40NzMgOS43OTkwNkM1OC41Njg4IDkuNzY0MzYgNTguNjYyNyA5Ljc2NDM2IDU4Ljc1NDggOS43OTkwNkM1OC44NTA2IDkuODMwMyA1OC45MjI1IDkuODkyNzYgNTguOTcwNCA5Ljk4NjQ3QzU5LjAxODMgMTAuMDgwMiA1OS4wMTA5IDEwLjE5ODIgNTguOTQ4MyAxMC4zNDA0QzU4LjgzMDQgMTAuNjAwNyA1OC43NzE0IDEwLjg3NjYgNTguNzcxNCAxMS4xNjgxQzU4Ljc3MTQgMTEuNTUzNCA1OC44NzA5IDExLjkwNTYgNTkuMDY5OSAxMi4yMjQ5QzU5LjI3MjUgMTIuNTQwNyA1OS41NDE1IDEyLjc5MjMgNTkuODc2OCAxMi45Nzk3QzYwLjIxNTggMTMuMTcwNiA2MC41ODk4IDEzLjI2NiA2MC45OTg4IDEzLjI2NkM2MS40MDc4IDEzLjI2NiA2MS43OCAxMy4xNzA2IDYyLjExNTMgMTIuOTc5N0M2Mi40NTA2IDEyLjc5MjMgNjIuNzE3NyAxMi41NDA3IDYyLjkxNjcgMTIuMjI0OUM2My4xMTk0IDExLjkwNTYgNjMuMjIwNyAxMS41NTM0IDYzLjIyMDcgMTEuMTY4MUM2My4yMjA3IDEwLjg1OTMgNjMuMTUyNSAxMC41NzEyIDYzLjAxNjIgMTAuMzA0QzYyLjg4MzUgMTAuMDMzMyA2Mi43MDQ4IDkuODAyNTMgNjIuNDgwMSA5LjYxMTY2Wk02MC45OTg4IDYuMjc0ODZDNjAuNzc0IDYuMjc0ODYgNjAuNTY5NSA2LjIyNDU0IDYwLjM4NTMgNi4xMjM4OUM2MC4yMDExIDYuMDE5NzggNjAuMDUzNyA1Ljg4MjcgNTkuOTQzMiA1LjcxMjY1QzU5LjgzNjMgNS41MzkxMyA1OS43ODI5IDUuMzQ2NTIgNTkuNzgyOSA1LjEzNDgzQzU5Ljc4MjkgNC45MjY2IDU5LjgzNjMgNC43Mzc0NiA1OS45NDMyIDQuNTY3NDFDNjAuMDUzNyA0LjM5Mzg5IDYwLjIwMTEgNC4yNTY4MSA2MC4zODUzIDQuMTU2MTdDNjAuNTY5NSA0LjA1MjA2IDYwLjc3NCA0IDYwLjk5ODggNEM2MS4yMTk5IDQgNjEuNDIwNyA0LjA1MjA2IDYxLjYwMTMgNC4xNTYxN0M2MS43ODE4IDQuMjU2ODEgNjEuOTI1NSA0LjM5Mzg5IDYyLjAzMjQgNC41Njc0MUM2Mi4xNDI5IDQuNzM3NDYgNjIuMTk4MiA0LjkyNjYgNjIuMTk4MiA1LjEzNDgzQzYyLjE5ODIgNS4zNDY1MiA2Mi4xNDI5IDUuNTM5MTMgNjIuMDMyNCA1LjcxMjY1QzYxLjkyNTUgNS44ODI3IDYxLjc4MTggNi4wMTk3OCA2MS42MDEzIDYuMTIzODlDNjEuNDIwNyA2LjIyNDU0IDYxLjIxOTkgNi4yNzQ4NiA2MC45OTg4IDYuMjc0ODZaIn0pfSl9ZnVuY3Rpb24gYzIoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI3MCA1IDE4IDkiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTg1LjU3MiAxMi4xMDM4Qzg2LjA2IDEyLjEwMzggODYuNDIwNyAxMS45ODkyIDg2LjY1NDIgMTEuNzYwMUM4Ni44ODQ3IDExLjUyODEgODcgMTEuMTY0MSA4NyAxMC42NjgxVjEwLjExMTJDODcgOS43NjkwMSA4Ni45MjA3IDkuNDYzMDIgODYuNzYyIDkuMTkzMjlDODYuNjAzMyA4LjkyMDY1IDg2LjM3NTggOC42OTczMyA4Ni4wNzk0IDguNTIzMzFDODUuNzgwMSA4LjM0OTI5IDg1LjQyMjMgOC4yMzc2MiA4NS4wMDYyIDguMTg4MzJMODMuMDE2OCA3Ljk1MzM5TDgxLjE5ODEgNi44NDgzNUM4MC45MjI3IDYuNjgwMTMgODAuNjYwOCA2LjU0MjM3IDgwLjQxMjMgNi40MzUwNUM4MC4xNjA4IDYuMzI0ODQgNzkuODk3NCA2LjIzNzgzIDc5LjYyMTkgNi4xNzQwMkM3OS4zNDY1IDYuMTEwMjEgNzkuMDM4MiA2LjA2NTI2IDc4LjY5NjkgNi4wMzkxNUM3OC4zNTI2IDYuMDEzMDUgNzcuOTUxNCA2IDc3LjQ5MzQgNkg3Ni44MTA4Qzc2LjM4ODcgNiA3NS45OTUgNi4wNDkzMSA3NS42Mjk4IDYuMTQ3OTJDNzUuMjYxNiA2LjI0MzYzIDc0LjkxODggNi4zNzEyNSA3NC42MDE1IDYuNTMwNzZDNzQuMjgxMSA2LjY5MDI4IDczLjk4NjIgNi44NjU3NiA3My43MTY4IDcuMDU3MThDNzMuNDQ0NCA3LjI0ODYgNzMuMTk1OSA3LjQzNzEyIDcyLjk3MTQgNy42MjI3NUw3Mi4yNTc0IDcuODUzMzNDNzEuODMyMyA3Ljk4Njc0IDcxLjUxNjQgOC4xODM5NyA3MS4zMDk5IDguNDQ1QzcxLjEwMzMgOC43MDMxMyA3MSA5LjAzMzc3IDcxIDkuNDM2OTJWMTAuNjQyQzcxIDExLjE0NjcgNzEuMTE1MyAxMS41MTY1IDcxLjM0NTggMTEuNzUxNEM3MS41NzYzIDExLjk4NjMgNzEuOTM3IDEyLjEwMzggNzIuNDI4IDEyLjEwMzhINzIuNzE1NEM3Mi43MDA0IDEyLjAzNzEgNzIuNjg4NSAxMS45NzA0IDcyLjY3OTUgMTEuOTAzN0M3Mi42NzA1IDExLjgzNDEgNzIuNjY2IDExLjc2NDUgNzIuNjY2IDExLjY5NDhDNzIuNjY2IDExLjM1NTUgNzIuNzQ5OCAxMS4wNDk1IDcyLjkxNzUgMTAuNzc2OUM3My4wODUxIDEwLjUwNDIgNzMuMzExMiAxMC4yODgyIDczLjU5NTYgMTAuMTI4N0M3My44NzcgOS45NjYyMyA3NC4xOTI4IDkuODg1MDIgNzQuNTQzMSA5Ljg4NTAyQzc0Ljg5MDQgOS44ODUwMiA3NS4yMDYyIDkuOTY2MjMgNzUuNDkwNiAxMC4xMjg3Qzc1Ljc3MiAxMC4yODgyIDc1Ljk5NjUgMTAuNTA0MiA3Ni4xNjQyIDEwLjc3NjlDNzYuMzMxOCAxMS4wNDk1IDc2LjQxNTcgMTEuMzU1NSA3Ni40MTU3IDExLjY5NDhDNzYuNDE1NyAxMS43NjQ1IDc2LjQxMTIgMTEuODM0MSA3Ni40MDIyIDExLjkwMzdDNzYuMzkzMiAxMS45NzA0IDc2LjM4MjcgMTIuMDM3MSA3Ni4zNzA4IDEyLjEwMzhIODEuNjM4MkM4MS42MjAzIDEyLjAzNzEgODEuNjA4MyAxMS45NzA0IDgxLjYwMjMgMTEuOTAzN0M4MS41OTMzIDExLjgzNDEgODEuNTg4OCAxMS43NjQ1IDgxLjU4ODggMTEuNjk0OEM4MS41ODg4IDExLjM1NTUgODEuNjcyNyAxMS4wNDk1IDgxLjg0MDMgMTAuNzc2OUM4Mi4wMDUgMTAuNTA0MiA4Mi4yMjk1IDEwLjI4ODIgODIuNTEzOSAxMC4xMjg3QzgyLjc5NTMgOS45NjYyMyA4My4xMTExIDkuODg1MDIgODMuNDYxNCA5Ljg4NTAyQzgzLjgxMTcgOS44ODUwMiA4NC4xMjkgOS45NjYyMyA4NC40MTM0IDEwLjEyODdDODQuNjk0OCAxMC4yODgyIDg0LjkxOTQgMTAuNTA0MiA4NS4wODcgMTAuNzc2OUM4NS4yNTE3IDExLjA0OTUgODUuMzM0IDExLjM1NTUgODUuMzM0IDExLjY5NDhDODUuMzM0IDExLjc2NDUgODUuMzMxIDExLjgzNDEgODUuMzI1IDExLjkwMzdDODUuMzE2IDExLjk3MDQgODUuMzA0MSAxMi4wMzcxIDg1LjI4OTEgMTIuMTAzOEg4NS41NzJaTTgzLjQ2MTQgMTNDODMuNzEyOSAxMyA4My45NDA0IDEyLjk0MiA4NC4xNDQgMTIuODI2Qzg0LjM0NzYgMTIuNzEgODQuNTA5MiAxMi41NTMzIDg0LjYyOSAxMi4zNTYxQzg0Ljc0ODcgMTIuMTU4OSA4NC44MDg2IDExLjkzODUgODQuODA4NiAxMS42OTQ4Qzg0LjgwODYgMTEuNDUxMiA4NC43NDg3IDExLjIzMDggODQuNjI5IDExLjAzMzZDODQuNTA5MiAxMC44MzYzIDg0LjM0NzYgMTAuNjc5NyA4NC4xNDQgMTAuNTYzN0M4My45NDA0IDEwLjQ0NzcgODMuNzEyOSAxMC4zODk3IDgzLjQ2MTQgMTAuMzg5N0M4My4yMDY5IDEwLjM4OTcgODIuOTc3OSAxMC40NDc3IDgyLjc3NDMgMTAuNTYzN0M4Mi41NzA4IDEwLjY3OTcgODIuNDA5MSAxMC44MzYzIDgyLjI4OTQgMTEuMDMzNkM4Mi4xNjk2IDExLjIzMDggODIuMTA5NyAxMS40NTEyIDgyLjEwOTcgMTEuNjk0OEM4Mi4xMDk3IDExLjkzODUgODIuMTY5NiAxMi4xNTg5IDgyLjI4OTQgMTIuMzU2MUM4Mi40MDkxIDEyLjU1MzMgODIuNTcwOCAxMi43MSA4Mi43NzQzIDEyLjgyNkM4Mi45Nzc5IDEyLjk0MiA4My4yMDY5IDEzIDgzLjQ2MTQgMTNaTTc0LjU0MzEgMTNDNzQuNzk0NiAxMyA3NS4wMjIxIDEyLjk0MiA3NS4yMjU3IDEyLjgyNkM3NS40MjkyIDEyLjcxIDc1LjU5MDkgMTIuNTUzMyA3NS43MTA2IDEyLjM1NjFDNzUuODMwNCAxMi4xNTg5IDc1Ljg5MDMgMTEuOTM4NSA3NS44OTAzIDExLjY5NDhDNzUuODkwMyAxMS40NTEyIDc1LjgzMDQgMTEuMjMwOCA3NS43MTA2IDExLjAzMzZDNzUuNTkwOSAxMC44MzYzIDc1LjQyOTIgMTAuNjc5NyA3NS4yMjU3IDEwLjU2MzdDNzUuMDIyMSAxMC40NDc3IDc0Ljc5NDYgMTAuMzg5NyA3NC41NDMxIDEwLjM4OTdDNzQuMjg4NiAxMC4zODk3IDc0LjA1OTYgMTAuNDQ3NyA3My44NTYgMTAuNTYzN0M3My42NTI0IDEwLjY3OTcgNzMuNDkwOCAxMC44MzYzIDczLjM3MSAxMS4wMzM2QzczLjI1MTMgMTEuMjMwOCA3My4xOTE0IDExLjQ1MTIgNzMuMTkxNCAxMS42OTQ4QzczLjE5MTQgMTEuOTM4NSA3My4yNTEzIDEyLjE1ODkgNzMuMzcxIDEyLjM1NjFDNzMuNDkwOCAxMi41NTMzIDczLjY1MjQgMTIuNzEgNzMuODU2IDEyLjgyNkM3NC4wNTk2IDEyLjk0MiA3NC4yODg2IDEzIDc0LjU0MzEgMTNaIn0pfSl9ZnVuY3Rpb24gSjAoe3NpemU6Qz0xOCxzdHJva2VXaWR0aDokPTJ9KXtyZXR1cm4gSigic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDpDLGhlaWdodDpDLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiQsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4In0pLEooInBhdGgiLHtkOiJNMyAzdjVoNSJ9KV19KX12YXIgRDM9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiBxMihDKXtyZXR1cm4gQz8uZXJyb3JzPy5pbmNsdWRlcyhEMyk/PyExfWZ1bmN0aW9uIFkyKEMsJCl7aWYoQz09PSQpcmV0dXJuITA7aWYoQy5pZCE9PSQuaWR8fEMucGF0aCE9PSQucGF0aHx8Qy5sYWJlbCE9PSQubGFiZWx8fEMudmFsdWUhPT0kLnZhbHVlfHxDLnJvbGUhPT0kLnJvbGV8fEMudHlwZSE9PSQudHlwZXx8Qy5lbmFibGVkIT09JC5lbmFibGVkKXJldHVybiExO2xldCBLPUMuZnJhbWUsWD0kLmZyYW1lO3JldHVybiBLPT09WHx8Sy54PT09WC54JiZLLnk9PT1YLnkmJksud2lkdGg9PT1YLndpZHRoJiZLLmhlaWdodD09PVguaGVpZ2h0fWZ1bmN0aW9uIEcyKEMsJCl7bGV0IEs9Qy5sYWJlbHx8Qy5yb2xlfHxgZWxlbWVudCAkeyQrMX1gLFg9Qy5yb2xlfHxDLnR5cGU7cmV0dXJue2lkOkMuaWQscGF0aDpDLnBhdGgsbGFiZWw6Syx2YWx1ZTpDLnZhbHVlLHJvbGU6WCx0eXBlOkMudHlwZSxlbmFibGVkOkMuZW5hYmxlZCxmcmFtZTpDLmZyYW1lfX1mdW5jdGlvbiBVMyhDLCQpe2xldCBLPU1hdGgubWF4KDAsQy54KSxYPU1hdGgubWF4KDAsQy55KSxOPU1hdGgubWluKCQud2lkdGgsQy54K0Mud2lkdGgpLFE9TWF0aC5taW4oJC5oZWlnaHQsQy55K0MuaGVpZ2h0KSxaPU1hdGgubWF4KDAsTi1LKSxxPU1hdGgubWF4KDAsUS1YKTtyZXR1cm4gWj4wJiZxPjA/e3g6Syx5Olgsd2lkdGg6WixoZWlnaHQ6cX06bnVsbH1mdW5jdGlvbiBOMChDKXtyZXR1cm4gQy5pZH1mdW5jdGlvbiBhMihDKXtyZXR1cm5gJHtDLnh9LCR7Qy55fSAke0Mud2lkdGh9eCR7Qy5oZWlnaHR9YH1mdW5jdGlvbiBGMyhDKXtyZXR1cm5bYEFYIGxhYmVsOiAke0MubGFiZWx8fCJVbmxhYmVsZWQifWAsQy5yb2xlP2Byb2xlOiAke0Mucm9sZX1gOiIiLEMudHlwZT9gdHlwZTogJHtDLnR5cGV9YDoiIixDLnZhbHVlP2B2YWx1ZTogJHtDLnZhbHVlfWA6IiIsQy5pZD9gaWQ6ICR7Qy5pZH1gOiIiLGBwYXRoOiAke0MucGF0aH1gLGBmcmFtZTogJHthMihDLmZyYW1lKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbigiOyAiKX1mdW5jdGlvbiB6MyhDKXtsZXRbJCxLXT1PKG51bGwpLFtYLE5dPU8oIkFYIG9mZiIpO3JldHVybiBXKCgpPT57aWYoIUMpe0sobnVsbCksTigiQVggb2ZmIik7cmV0dXJufUsobnVsbCksTigiQVggd2FpdGluZyIpO2xldCBRPW5ldyBFdmVudFNvdXJjZShDKTtyZXR1cm4gUS5vbm1lc3NhZ2U9KFopPT57dHJ5e2xldCBxPUpTT04ucGFyc2UoWi5kYXRhKTtLKHEpLE4ocTIocSk/IkFYIHVuYXZhaWxhYmxlIjpgJHtxLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtOKCJBWCBwYXJzZSBlcnJvciIpfX0sUS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PntOKCJBWCByZWNvbm5lY3RpbmciKX0pLCgpPT5RLmNsb3NlKCl9LFtDXSkse3NuYXBzaG90OiQsc3RhdHVzOlh9fXZhciBpMj1kMSh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxyMj1kMShudWxsKTtmdW5jdGlvbiB6MCgpe3JldHVybiBzMShpMil9ZnVuY3Rpb24gTDIoKXtsZXQgQz1zMShyMik7aWYoIUMpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuIEN9dmFyIEgzPWswKGZ1bmN0aW9uKHtlbGVtZW50OiQsaW5kZXg6SyxzY3JlZW46WCxoaWdobGlnaHRlZDpOLHNlbGVjdGVkOlEsb25IaWdobGlnaHQ6WixvblNlbGVjdDpxfSl7bGV0IEc9TjAoJCksWT1HMigkLEspLEI9VTMoJC5mcmFtZSxYKTtpZighQilyZXR1cm4gbnVsbDtsZXQgTD1GMyhZKTtyZXR1cm4gSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOkcsImRhdGEtYXgtaWQiOlkuaWQsImRhdGEtYXgtcGF0aCI6WS5wYXRoLCJkYXRhLWF4LWxhYmVsIjpZLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpZLnZhbHVlLCJkYXRhLWF4LXJvbGUiOlkucm9sZSwiZGF0YS1heC10eXBlIjpZLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKFkuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOmEyKFkuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoUSksImFyaWEtbGFiZWwiOiQubGFiZWx8fEwsdGl0bGU6TCxvbkNsaWNrOigpPT5xKEcpLG9uTW91c2VFbnRlcjooKT0+WihHKSxvbk1vdXNlTGVhdmU6KCk9PloobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtCLngvWC53aWR0aCoxMDB9JWAsdG9wOmAke0IueS9YLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7Qi53aWR0aC9YLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7Qi5oZWlnaHQvWC5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOlE/IiM2MGE1ZmEiOk4/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOlE/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6Tj8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKEMsJCk9PkMuaW5kZXg9PT0kLmluZGV4JiZDLmhpZ2hsaWdodGVkPT09JC5oaWdobGlnaHRlZCYmQy5zZWxlY3RlZD09PSQuc2VsZWN0ZWQmJkMub25IaWdobGlnaHQ9PT0kLm9uSGlnaGxpZ2h0JiZDLm9uU2VsZWN0PT09JC5vblNlbGVjdCYmQy5zY3JlZW4ud2lkdGg9PT0kLnNjcmVlbi53aWR0aCYmQy5zY3JlZW4uaGVpZ2h0PT09JC5zY3JlZW4uaGVpZ2h0JiZZMihDLmVsZW1lbnQsJC5lbGVtZW50KSk7ZnVuY3Rpb24gQTMoKXtsZXR7c25hcHNob3Q6Q309ejAoKSx7aGlnaGxpZ2h0ZWRLZXk6JCxzZWxlY3RlZEtleTpLLHNldEhpZ2hsaWdodGVkS2V5Olgsc2V0U2VsZWN0ZWRLZXk6Tn09TDIoKTtpZighQz8uc2NyZWVuLndpZHRofHwhQz8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOkMuZWxlbWVudHMubWFwKChRLFopPT57bGV0IHE9TjAoUSk7cmV0dXJuIEooSDMse2VsZW1lbnQ6USxpbmRleDpaLHNjcmVlbjpDLnNjcmVlbixoaWdobGlnaHRlZDpxPT09JCxzZWxlY3RlZDpxPT09SyxvbkhpZ2hsaWdodDpYLG9uU2VsZWN0Ok59LHEpfSl9KX1mdW5jdGlvbiBPMyh7ZW5kcG9pbnQ6QyxjaGlsZHJlbjokfSl7bGV0e3NuYXBzaG90Okssc3RhdHVzOlh9PXozKEMpLFtOLFFdPU8obnVsbCksW1oscV09TyhudWxsKTtXKCgpPT57aWYoIUMpUShudWxsKSxxKG51bGwpfSxbQ10pO2xldCBHPXoxKCgpPT4oe3NuYXBzaG90Okssc3RhdHVzOlh9KSxbSyxYXSksWT16MSgoKT0+KHtoaWdobGlnaHRlZEtleTpOLHNlbGVjdGVkS2V5Olosc2V0SGlnaGxpZ2h0ZWRLZXk6USxzZXRTZWxlY3RlZEtleTpxfSksW04sWl0pO3JldHVybiBKKGkyLHt2YWx1ZTpHLGNoaWxkcmVuOkoocjIse3ZhbHVlOlksY2hpbGRyZW46JH0pfSl9ZnVuY3Rpb24gVDMoe292ZXJsYXlFbmFibGVkOkMsc3RyZWFtaW5nOiQsb25Ub2dnbGVPdmVybGF5Okt9KXtsZXR7c3RhdHVzOlh9PXowKCksW04sUV09TyghMSksWj1DJiYkO3JldHVybiBKKE8xLkJ1dHRvbix7ImFyaWEtbGFiZWwiOkM/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOkMsdGl0bGU6WCxvbkNsaWNrOkssb25Nb3VzZUVudGVyOigpPT5RKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlEoITEpLHN0eWxlOlo/e2JhY2tncm91bmQ6Tj8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOiIxOSIsaGVpZ2h0OiIxOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6In0pLEooInBhdGgiLHtkOiJNMjEgMTFWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYifSldfSl9KX1mdW5jdGlvbiBNMyhDKXt0cnl7bGV0ICQ9SlNPTi5wYXJzZShDKSxLPVtdO2ZvcihsZXRbWCxOXW9mIE9iamVjdC5lbnRyaWVzKCQuZGV2aWNlcz8/e30pKXtsZXQgUT1YLnJlcGxhY2UoL15jb21cLmFwcGxlXC5Db3JlU2ltdWxhdG9yXC5TaW1SdW50aW1lXC4vLCIiKS5yZXBsYWNlKC8tL2csIi4iKTtmb3IobGV0IFogb2YgTilpZihaLmlzQXZhaWxhYmxlKUsucHVzaCh7dWRpZDpaLnVkaWQsbmFtZTpaLm5hbWUsc3RhdGU6Wi5zdGF0ZSxydW50aW1lOlF9KX1yZXR1cm4gS31jYXRjaHtyZXR1cm5bXX19ZnVuY3Rpb24gSDAoQyl7bGV0ICQ9Qy50b0xvd2VyQ2FzZSgpO2lmKCQuaW5jbHVkZXMoImlwaG9uZSIpKXJldHVybiAwO2lmKCQuaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4gMTtpZigkLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiAyO2lmKCQuaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiAzO3JldHVybiA0fWZ1bmN0aW9uIEEwKEMpe2xldCAkPUMudG9Mb3dlckNhc2UoKTtpZigkLnN0YXJ0c1dpdGgoImlvcyIpKXJldHVybiAwO2lmKCQuc3RhcnRzV2l0aCgiaXBhZG9zIikpcmV0dXJuIDE7aWYoJC5zdGFydHNXaXRoKCJ3YXRjaG9zIikpcmV0dXJuIDI7aWYoJC5zdGFydHNXaXRoKCJ2aXNpb25vcyIpfHwkLnN0YXJ0c1dpdGgoInhyb3MiKSlyZXR1cm4gMztyZXR1cm4gNH1mdW5jdGlvbiB4MShDKXtsZXQgSz13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIEs9PT0iLyI/YC8ke0N9YDpgJHtLfS8ke0N9YH1mdW5jdGlvbiB3Myh7ZGV2aWNlczpDLGxvYWRpbmc6JCxlcnJvcjpLLG9uUmVmcmVzaDpYfSl7bGV0W04sUV09TyhudWxsKSxbWixxXT1PKG51bGwpLEc9UChhc3luYyhMKT0+e2lmKE4pcmV0dXJuO1EoTC51ZGlkKSxxKG51bGwpO3RyeXtsZXQgRj1gJHt4MSgiYXBpIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChMLnVkaWQpfWAsaz0oYXN5bmMoKT0+e2xldCB3PURhdGUubm93KCkrOTAwMDA7d2hpbGUoRGF0ZS5ub3coKTx3KXt0cnl7bGV0IEU9YXdhaXQgZmV0Y2goRix7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKEUub2smJmF3YWl0IEUuanNvbigpKXtsZXQgeT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtyZXR1cm4geS5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLEwudWRpZCksd2luZG93LmxvY2F0aW9uLmFzc2lnbih5LnRvU3RyaW5nKCkpLCEwfX1jYXRjaHt9YXdhaXQgbmV3IFByb21pc2UoKEUpPT5zZXRUaW1lb3V0KEUsNDAwKSl9cmV0dXJuITF9KSgpLEE9eDEoImdyaWQvYXBpL3N0YXJ0IiksXz1mZXRjaChBLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpMLnVkaWR9KX0pLnRoZW4oYXN5bmModyk9PntsZXQgRT1hd2FpdCB3Lmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIXcub2t8fCFFLm9rKXRocm93IEVycm9yKEUuZXJyb3I/P2BIVFRQICR7dy5zdGF0dXN9YCl9KTtpZihhd2FpdCBQcm9taXNlLnJhY2UoW2ssXy50aGVuKCgpPT4ic3RhcnRlZCIpXSk9PT0hMClyZXR1cm47aWYoYXdhaXQgaylyZXR1cm47dGhyb3cgRXJyb3IoInNlcnZlLXNpbSBzdGFydGVkIGJ1dCBubyBzdHJlYW0gc3RhdGUgYXBwZWFyZWQiKX1jYXRjaChGKXtxKEYgaW5zdGFuY2VvZiBFcnJvcj9GLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBzdHJlYW0iKSxRKG51bGwpfX0sW05dKSxZPW5ldyBNYXA7Zm9yKGxldCBMIG9mIEMpe2xldCBGPVkuZ2V0KEwucnVudGltZSk7aWYoIUYpRj1bXSxZLnNldChMLnJ1bnRpbWUsRik7Ri5wdXNoKEwpfWZvcihsZXQgTCBvZiBZLnZhbHVlcygpKUwuc29ydCgoRixrKT0+e2xldCBBPUYuc3RhdGU9PT0iQm9vdGVkIj8wOjEsXz1rLnN0YXRlPT09IkJvb3RlZCI/MDoxO2lmKEEhPT1fKXJldHVybiBBLV87cmV0dXJuIEgwKEYubmFtZSktSDAoay5uYW1lKXx8Ri5uYW1lLmxvY2FsZUNvbXBhcmUoay5uYW1lKX0pO2xldCBCPVsuLi5ZLmVudHJpZXMoKV0uc29ydCgoW0xdLFtGXSk9PkEwKEwpLUEwKEYpfHxMLmxvY2FsZUNvbXBhcmUoRikpO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcC02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLGNoaWxkcmVuOkooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltKKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzZXJ2ZS1zaW0gc3RyZWFtIHJ1bm5pbmcifSksSigicCIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSB0ZXh0LVsxNHB4XSBtYXgtdy0xMjAiLGNoaWxkcmVuOlsiUGljayBhIHNpbXVsYXRvciB0byBib290LCBvciBzdGFydCBvbmUgeW91cnNlbGYgd2l0aCIsIiAiLEooImNvZGUiLHtjbGFzc05hbWU6ImJnLVsjMjIyXSBweC0xLjUgcHktMC41IHJvdW5kZWQgdGV4dC1bMTNweF0iLGNoaWxkcmVuOiJidW54IHNlcnZlLXNpbSAtLWRldGFjaCJ9KSwiLiJdfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJ3LWZ1bGwgbWF4LXctOTAgbXQtMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBmb250LW1vbm8gdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCB0ZXh0LWxlZnQgbWF4LWgtWzcwdmhdIG92ZXJmbG93LXktYXV0byBtaW4taC0wIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMi41IHB5LTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzY1IixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToiZm9udC1zZW1pYm9sZCIsY2hpbGRyZW46IlNpbXVsYXRvcnMifSksSigiYnV0dG9uIix7b25DbGljazpYLGRpc2FibGVkOiQsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LWFjY2VudCB0ZXh0LVsxMXB4XSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOiQ/Ii4uLiI6IlJlZnJlc2gifSldfSksSyYmSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHktMS41IHRleHQtZGFuZ2VyIHRleHQtWzExcHhdIixjaGlsZHJlbjpLfSksWiYmSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHktMS41IHRleHQtZGFuZ2VyIHRleHQtWzExcHhdIixjaGlsZHJlbjpafSksISQmJiFLJiZDLmxlbmd0aD09PTAmJkooImRpdiIse2NsYXNzTmFtZToicC0zIHRleHQtd2hpdGUvNDAgdGV4dC1bMTFweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOiJObyBhdmFpbGFibGUgc2ltdWxhdG9ycyBmb3VuZCJ9KSxCLm1hcCgoW0wsRl0pPT5KKCJkaXYiLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHQtMS41IHBiLTAuNSB0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpMfSksRi5tYXAoKGspPT57bGV0IEE9Tj09PWsudWRpZCxfPU4hPT1udWxsJiYhQSxEPWsuc3RhdGU9PT0iQm9vdGVkIjtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgcHktMS41IHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtfPyJjdXJzb3ItZGVmYXVsdCBvcGFjaXR5LTUwIjoiY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvOCJ9YCxvbkNsaWNrOigpPT57aWYoIV8pRyhrKX0sY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6RD8iIzRhZGU4MCI6IiM0NDQifX0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSB0ZXh0LWxlZnQiLGNoaWxkcmVuOmsubmFtZX0pLEooInNwYW4iLHtjbGFzc05hbWU6YHRleHQtWzEwcHhdICR7QT8idGV4dC1hY2NlbnQiOiJ0ZXh0LXdoaXRlLzU1In1gLGNoaWxkcmVuOkE/RD8iU3RhcnRpbmcuLi4iOiJCb290aW5nLi4uIjpEPyJTdGFydCBzdHJlYW0iOiJCb290ICYgc3RyZWFtIn0pXX0say51ZGlkKX0pXX0sTCkpXX0pXX0pfSl9ZnVuY3Rpb24gYjMoe2RldmljZXM6QyxzZWxlY3RlZFVkaWQ6JCxsb2FkaW5nOkssZXJyb3I6WCxzdG9wcGluZ1VkaWRzOk4sb25SZWZyZXNoOlEsb25TZWxlY3Q6WixvblN0b3A6cSx0cmlnZ2VyOkd9KXtsZXRbWSxCXT1PKCExKSxMPXYobnVsbCk7VygoKT0+e2lmKCFZKXJldHVybjtsZXQgXz0oRCk9PntpZighTC5jdXJyZW50Py5jb250YWlucyhELnRhcmdldCkpQighMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyl9LFtZXSk7bGV0IEY9bmV3IE1hcDtmb3IobGV0IF8gb2YgQyl7aWYoXy51ZGlkPT09JCljb250aW51ZTtsZXQgRD1GLmdldChfLnJ1bnRpbWUpO2lmKCFEKUQ9W10sRi5zZXQoXy5ydW50aW1lLEQpO0QucHVzaChfKX1mb3IobGV0IF8gb2YgRi52YWx1ZXMoKSlfLnNvcnQoKEQseik9PkgwKEQubmFtZSktSDAoei5uYW1lKXx8RC5uYW1lLmxvY2FsZUNvbXBhcmUoei5uYW1lKSk7bGV0IGs9Wy4uLkYuZW50cmllcygpXS5zb3J0KChbX10sW0RdKT0+QTAoXyktQTAoRCl8fF8ubG9jYWxlQ29tcGFyZShEKSksQT1DLmZpbmQoKF8pPT5fLnVkaWQ9PT0kKT8/bnVsbDtyZXR1cm4gSigiZGl2Iix7cmVmOkwsY2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W0ooImRpdiIse29uQ2xpY2s6KCk9PntpZighWSlRKCk7QigoXyk9PiFfKX0sY2hpbGRyZW46R30pLFkmJkooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIG1pbi13LTY1IG1heC1oLTkwIG92ZXJmbG93LXktYXV0byBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBmb250LW1vbm8gdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCB6LTIwIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMi41IHB5LTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzY1IixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToiZm9udC1zZW1pYm9sZCIsY2hpbGRyZW46IlNpbXVsYXRvcnMifSksSigiYnV0dG9uIix7b25DbGljazooXyk9PntfLnN0b3BQcm9wYWdhdGlvbigpLFEoKX0sZGlzYWJsZWQ6SyxjbGFzc05hbWU6ImJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtYWNjZW50IHRleHQtWzExcHhdIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46Sz8iLi4uIjoiUmVmcmVzaCJ9KV19KSxYJiZKKCJkaXYiLHtjbGFzc05hbWU6InB4LTIuNSBweS0xLjUgdGV4dC1kYW5nZXIgdGV4dC1bMTFweF0iLGNoaWxkcmVuOlh9KSxBJiZKKE4xLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgcHktMS41IHJvdW5kZWQtbWQgdGV4dC1hY2NlbnQiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAiLHN0eWxlOntiYWNrZ3JvdW5kOkEuc3RhdGU9PT0iQm9vdGVkIj8iIzRhZGU4MCI6IiM0NDQifX0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSIsY2hpbGRyZW46QS5uYW1lfSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KV19KSxDLmxlbmd0aD09PTAmJiFLJiYhWCYmSigiZGl2Iix7Y2xhc3NOYW1lOiJwLTMgdGV4dC13aGl0ZS80MCB0ZXh0LVsxMXB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Ik5vIGF2YWlsYWJsZSBzaW11bGF0b3JzIGZvdW5kIn0pLGsubWFwKChbXyxEXSk9PkooImRpdiIse2NoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InB4LTIuNSBwdC0xLjUgcGItMC41IHRleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOl99KSxELm1hcCgoeik9PntsZXQgdz1OLmhhcyh6LnVkaWQpLEU9ei5zdGF0ZT09PSJCb290ZWQiO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBweS0xLjUgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy13aGl0ZS84IixvbkNsaWNrOigpPT57Wih6KSxCKCExKX0sY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6RT8iIzRhZGU4MCI6IiM0NDQifX0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSIsY2hpbGRyZW46ei5uYW1lfSksRSYmSigic3BhbiIse3JvbGU6ImJ1dHRvbiIsb25DbGljazooeSk9PntpZih5LnN0b3BQcm9wYWdhdGlvbigpLCF3KXEoei51ZGlkKX0sY2xhc3NOYW1lOmB0ZXh0LVsxMHB4XSBweS1weCBweC0xLjUgcm91bmRlZCAke3c/InRleHQtd2hpdGUvNTUgYmctdHJhbnNwYXJlbnQgY3Vyc29yLWRlZmF1bHQiOiJ0ZXh0LWRhbmdlciBiZy1kYW5nZXIvMTAgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46dz8iU3RvcHBpbmcuLi4iOiJTdG9wIn0pXX0sei51ZGlkKX0pXX0sXykpXX0pXX0pfWZ1bmN0aW9uIE8wKHtvcGVuOkMsd2lkdGg6JCxjaGlsZHJlbjpLLHN0eWxlOlh9KXtyZXR1cm4gSigiYXNpZGUiLHtjbGFzc05hbWU6ImZpeGVkIHRvcC0zIHJpZ2h0LTMgYm90dG9tLTMgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLVsxNHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIGJnLXBhbmVsLWJnIHRleHQtd2hpdGUvOTAgc2hhZG93LVswXzEycHhfNDBweF9yZ2JhKDAsMCwwLDAuNTUpXSBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wiLHN0eWxlOnt3aWR0aDokLHRyYW5zZm9ybTpDPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6Qz8xOjAscG9pbnRlckV2ZW50czpDPyJhdXRvIjoibm9uZSIsLi4uWH0sImFyaWEtaGlkZGVuIjohQyxjaGlsZHJlbjpLfSl9ZnVuY3Rpb24gVDAoe2NoaWxkcmVuOkMsc3R5bGU6JH0pe3JldHVybiBKKCJoZWFkZXIiLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMi41IHB4LTIuNSBweS0xLjUgcGwtMyIsc3R5bGU6JCxjaGlsZHJlbjpDfSl9ZnVuY3Rpb24gVjIoe2NoaWxkcmVuOkN9KXtyZXR1cm4gSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1tZWRpdW0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46Q30pfWZ1bmN0aW9uIE0wKHtvbkNsaWNrOkMsYXJpYUxhYmVsOiQ9IkNsb3NlIHBhbmVsIix0aXRsZTpLLGljb25TaXplOlg9MTZ9KXtyZXR1cm4gSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkMsY2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIGJnLXRyYW5zcGFyZW50IHAtMSB0ZXh0LXdoaXRlLzY1IiwiYXJpYS1sYWJlbCI6JCx0aXRsZTpLLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOlgsaGVpZ2h0Olgsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSxKKCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KV19KX0pfWZ1bmN0aW9uIFAzKEMsJCxLKXtsZXRbWCxOXT1PKG51bGwpLFtRLFpdPU8oMCk7VygoKT0+e2lmKCEkfHwhQylyZXR1cm47bGV0IEc9ITEsWT1hc3luYygpPT57dHJ5e2xldCBGPWF3YWl0KGF3YWl0IGZldGNoKEMse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFHKU4oRi5kZXZpY2VzPz9bXSl9Y2F0Y2h7aWYoIUcpTihbXSl9fTtZKCk7bGV0IEI9c2V0SW50ZXJ2YWwoWSxLPzc1MDozMDAwKTtyZXR1cm4oKT0+e0c9ITAsY2xlYXJJbnRlcnZhbChCKX19LFtDLCQsUSxLXSk7bGV0IHE9UCgoKT0+WigoRyk9PkcrMSksW10pO3JldHVybntkZXZpY2VzOlgscmVmcmVzaDpxfX1mdW5jdGlvbiBXMyhDLCQpe2xldFtLLFhdPU8obnVsbCk7cmV0dXJuIFcoKCk9PntpZighJHx8IUMpcmV0dXJuO2xldCBOPSExLFE9YXN5bmMoKT0+e3RyeXtsZXQgRz1hd2FpdChhd2FpdCBmZXRjaChDLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighTilYKEcpfWNhdGNoe319O1EoKTtsZXQgWj1zZXRJbnRlcnZhbChRLDUwMDApO3JldHVybigpPT57Tj0hMCxjbGVhckludGVydmFsKFopfX0sW0MsJF0pLEt9ZnVuY3Rpb24geTMoQyl7aWYoIU51bWJlci5pc0Zpbml0ZShDKXx8Qzw9MClyZXR1cm4iMCBCIjtsZXQgJD1DLzEwNzM3NDE4MjQ7aWYoJD49MSlyZXR1cm5gJHskLnRvRml4ZWQoJD49MTA/MDoxKX0gR0JgO3JldHVybmAkeyhDLzEwNDg1NzYpLnRvRml4ZWQoMCl9IE1CYH1mdW5jdGlvbiBSMChDLCQpe2xldCBLPUMuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iO3JldHVybmAke0N9JHtLfWRldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gfWZ1bmN0aW9uIEUzKHtyZXBvcnQ6Q30pe2lmKCFDfHxDLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOiQsYXZhaWxhYmxlQnl0ZXM6Syx0b3RhbEJ5dGVzOlgscnVubmluZ1NpbXVsYXRvcnM6Tn09QyxRPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLUsvWCkpLFo9TiskLHE9JD09PTA/IiNlNjYiOiQ8PTE/IiNlOWExM2IiOiIjM2IzIixHPVE+MC45PyIjZTY2IjpRPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6cX19KSxKKCJzcGFuIix7Y2hpbGRyZW46W04sIi8iLFosIiBzaW1zIl19KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiwrcifSksSigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W3kzKEspLCIgZnJlZSJdfSksSigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46Sigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhRKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOkd9fSl9KV19KX1mdW5jdGlvbiBJMyh7ZGV2aWNlOkMsYWN0aXZlOiQscHJldmlld0VuZHBvaW50Okssc3RhcnRpbmc6WCxzaHV0dGluZ0Rvd246TixlcnJvcjpRLG9uU3RhcnQ6WixvblNodXRkb3duOnF9KXtsZXQgRz1DLmhlbHBlcixZPUMuc3RhdGU9PT0iQm9vdGVkIixCPUc/IuKXjyBsaXZlIjpYP1k/InN0YXJ0aW5nIGhlbHBlcuKApiI6ImJvb3RpbmcgJiBzdGFydGluZ+KApiI6Tj8ic2h1dHRpbmcgZG93buKApiI6WT8iYm9vdGVkIChubyBzdHJlYW0pIjpDLnN0YXRlLnRvTG93ZXJDYXNlKCksTD1HPyIjM2IzIjoiIzg4OCIsRj0kPyJyZ2JhKDEwLDEzMiwyNTUsMC41NSkiOiJ0cmFuc3BhcmVudCIsaz1HPyJhIjoiZGl2IixBPUc/e2hyZWY6UjAoSyxDLmRldmljZSl9Ont9O3JldHVybiBKKGssey4uLkEsY2xhc3NOYW1lOiJncmlkLXRpbGUgcmVsYXRpdmUgZmxleCBmbGV4LWNvbCBiZy1bIzExMV0gcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIG5vLXVuZGVybGluZSB0ZXh0LWluaGVyaXQgYm9yZGVyIGJvcmRlci1bIzJhMmEyYV0gW3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yXzEyMG1zXSIsc3R5bGU6e291dGxpbmU6YDFweCBzb2xpZCAke0Z9YH0sY2hpbGRyZW46WyhHfHxZKSYmSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpOPyJTaHV0dGluZyBkb3du4oCmIjoiU2h1dGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXRkb3duIHNpbXVsYXRvciIsb25DbGljazooXyk9PntfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxxKCl9LGRpc2FibGVkOk4sY2xhc3NOYW1lOiJncmlkLXNodXRkb3duLWJ0biBhYnNvbHV0ZSB0b3AtMS41IHJpZ2h0LTEuNSB3LVsyMnB4XSBoLVsyMnB4XSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzQ0NF0gYmctW3JnYmEoMjAsMjAsMjAsMC44NSldIHRleHQtd2hpdGUvODAgdGV4dC1bMTNweF0gbGVhZGluZy1ub25lIGN1cnNvci1wb2ludGVyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMCB6LVsyXSBwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjoiw5cifSksRz9KKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiBiZy1ibGFjayBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpKKCJpbWciLHtzcmM6Ry5zdHJlYW1VcmwsYWx0OkMubmFtZSxkcmFnZ2FibGU6ITEsY2xhc3NOYW1lOiJtYXgtdy1mdWxsIG1heC1oLWZ1bGwgb2JqZWN0LWNvbnRhaW4ifSl9KTpKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMyBmbGV4LWNvbCBnYXAtMi41IHRleHQtd2hpdGUvNTUgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltYP0ooInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToidy01LjUgaC01LjUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8xNSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIixzdHlsZTp7Ym9yZGVyVG9wQ29sb3I6InJnYmEoMTU1LDIwMSwxNTUsMC45NSkifX0pOkooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMjhweF0gb3BhY2l0eS01MCIsY2hpbGRyZW46WT8i4pajIjoi4paiIn0pLFE/SigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWRhbmdlciB0ZXh0LVsxMXB4XSBmb250LW1vbm8iLGNoaWxkcmVuOlF9KTpudWxsLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooXyk9PntfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxaKCl9LGRpc2FibGVkOlgsY2xhc3NOYW1lOmBweC0zIHB5LTEuNSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItWyMzMzNdIHRleHQtWzExcHhdIGZvbnQtbW9ubyAke1g/ImJnLVsjMWExYTFhXSB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctWyMxZDJhMWRdIHRleHQtc3VjY2VzcyBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpYP1k/IlN0YXJ0aW5n4oCmIjoiQm9vdGluZ+KApiI6WT8iU3RhcnQgc3RyZWFtIjoiQm9vdCAmIHN0YXJ0In0pXX0pLEooImRpdiIse2NsYXNzTmFtZToicHgtMi41IHB5LTEuNSBib3JkZXItdCBib3JkZXItWyMyMjJdIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzcwIGZsZXgganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkMubmFtZX0pLEooInNwYW4iLHtjbGFzc05hbWU6IndoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6TH0sY2hpbGRyZW46W0IsRz9KKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpbIiA6IixHLnBvcnRdfSk6bnVsbF19KV19KV19KX1mdW5jdGlvbiBTMyh7b3BlbjpDLG9uQ2xvc2U6JCxjdXJyZW50VWRpZDpLLHdpZHRoOlh9KXtsZXQgTj13aW5kb3cuX19TSU1fUFJFVklFV19fLFE9Tj8uZ3JpZEFwaUVuZHBvaW50LFo9Tj8uZ3JpZFN0YXJ0RW5kcG9pbnQscT1OPy5ncmlkU2h1dGRvd25FbmRwb2ludCxHPU4/LmdyaWRNZW1vcnlFbmRwb2ludCxZPU4/LnByZXZpZXdFbmRwb2ludD8/Ii8iLFtCLExdPU8oe30pLFtGLGtdPU8oe30pLFtBLF9dPU8oe30pLEQ9T2JqZWN0LnZhbHVlcyhCKS5zb21lKEJvb2xlYW4pfHxPYmplY3QudmFsdWVzKEYpLnNvbWUoQm9vbGVhbikse2RldmljZXM6eixyZWZyZXNoOnd9PVAzKFEsQyxEKSxFPVczKEcsQykseT1QKGFzeW5jKGgseD0yMDAwMCk9PntpZighUSlyZXR1cm4gbnVsbDtsZXQgcD1EYXRlLm5vdygpK3g7d2hpbGUoRGF0ZS5ub3coKTxwKXt0cnl7bGV0ICQxPSgoYXdhaXQoYXdhaXQgZmV0Y2goUSx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5maW5kKChhKT0+YS5kZXZpY2U9PT1oJiZhLmhlbHBlcik7aWYoJDEpcmV0dXJuICQxfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoZCk9PnNldFRpbWVvdXQoZCw0MDApKX1yZXR1cm4gbnVsbH0sW1FdKSxjPVAoYXN5bmMoaCk9PntpZighWilyZXR1cm47TCgoeCk9Pih7Li4ueCxbaF06ITB9KSksXygoeCk9Pih7Li4ueCxbaF06bnVsbH0pKTt0cnl7bGV0IHg9YXdhaXQgZmV0Y2goWix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6aH0pfSkscD1hd2FpdCB4Lmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIXgub2t8fCFwLm9rKXtfKCh1KT0+KHsuLi51LFtoXTpwLmVycm9yPz9gSFRUUCAke3guc3RhdHVzfWB9KSk7cmV0dXJufWlmKGF3YWl0IHkoaCkpe3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24oUjAoWSxoKSk7cmV0dXJufV8oKHUpPT4oey4uLnUsW2hdOiJIZWxwZXIgZGlkIG5vdCByZWdpc3RlciBpbiB0aW1lIn0pKX1jYXRjaCh4KXtfKChwKT0+KHsuLi5wLFtoXTp4Py5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7TCgoeCk9Pih7Li4ueCxbaF06ITF9KSksdygpfX0sW1osdyx5LFldKTtXKCgpPT57aWYoIXp8fCFLKXJldHVybjtpZih6LmZpbmQoKHApPT5wLmRldmljZT09PUspPy5oZWxwZXIpcmV0dXJuO2xldCB4PXouZmluZCgocCk9PnAuaGVscGVyJiZwLmRldmljZSE9PUspO3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24oeD9SMChZLHguZGV2aWNlKTpZKX0sW3osSyxZXSk7bGV0IFI9UChhc3luYyhoKT0+e2lmKCFxKXJldHVybjtrKCh4KT0+KHsuLi54LFtoXTohMH0pKSxfKCh4KT0+KHsuLi54LFtoXTpudWxsfSkpO3RyeXtsZXQgeD1hd2FpdCBmZXRjaChxLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpofSl9KSxwPWF3YWl0IHguanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZigheC5va3x8IXAub2spXygoZCk9Pih7Li4uZCxbaF06cC5lcnJvcj8/YEhUVFAgJHt4LnN0YXR1c31gfSkpfWNhdGNoKHgpe18oKHApPT4oey4uLnAsW2hdOng/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtrKCh4KT0+KHsuLi54LFtoXTohMX0pKSx3KCl9fSxbcSx3XSk7cmV0dXJuIEooTzAse29wZW46Qyx3aWR0aDpYLGNoaWxkcmVuOltKKFQwLHtjaGlsZHJlbjpbSihWMix7Y2hpbGRyZW46IlNpbXVsYXRvcnMifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W0ooRTMse3JlcG9ydDpFfSksSihNMCx7b25DbGljazokfSldfSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcC0zLjUgZ3JpZCBhdXRvLXJvd3MtW21pbm1heCgzMDBweCxhdXRvKV0gZ2FwLTMgY29udGVudC1zdGFydCBncmlkLWNvbHMtW3JlcGVhdChhdXRvLWZpbGwsbWlubWF4KDIwMHB4LDFmcikpXSIsY2hpbGRyZW46ej09PW51bGw/bnVsbDp6Lmxlbmd0aD09PTA/SigiZGl2Iix7Y2xhc3NOYW1lOiJjb2wtc3Bhbi1mdWxsIGJnLXBhbmVsIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLVsxMHB4XSBwLTQgdGV4dC13aGl0ZS81MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6ei5tYXAoKGgpPT5KKEkzLHtkZXZpY2U6aCxhY3RpdmU6aC5kZXZpY2U9PT1LLHByZXZpZXdFbmRwb2ludDpZLHN0YXJ0aW5nOiEhQltoLmRldmljZV0sc2h1dHRpbmdEb3duOiEhRltoLmRldmljZV0sZXJyb3I6QVtoLmRldmljZV0/P251bGwsb25TdGFydDooKT0+YyhoLmRldmljZSksb25TaHV0ZG93bjooKT0+UihoLmRldmljZSl9LGguZGV2aWNlKSl9KV19KX1mdW5jdGlvbiBCMih7cGFuZWxXaWR0aDpDLHZpc2libGU6JCxvblBvaW50ZXJEb3duOkssYXJpYUxhYmVsOlh9KXtsZXRbTixRXT1PKCExKSxbWixxXT1PKCExKSxHPU58fFosWT0xMitDLTk7cmV0dXJuIEooImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtbGFiZWwiOlgsImFyaWEtaGlkZGVuIjohJCxvblBvaW50ZXJEb3duOihCKT0+e3EoITApLEsoQil9LG9uUG9pbnRlclVwOigpPT5xKCExKSxvblBvaW50ZXJDYW5jZWw6KCk9PnEoITEpLG9uUG9pbnRlckVudGVyOigpPT5RKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+USghMSksY2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBib3R0b20tMyB3LTQgei0zNiBjdXJzb3ItY29sLXJlc2l6ZSB0b3VjaC1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgJHskPyJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIjoib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUifWAsc3R5bGU6e3JpZ2h0Oll9LGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Rz8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLEooImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Rz8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke1o/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIGgzKCl7bGV0W0MsJF09TygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIFcoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgSz13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWD0oKT0+JChLLm1hdGNoZXMpO3JldHVybiBYKCksSy5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpLCgpPT5LLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWCl9LFtdKSxDfWZ1bmN0aW9uIF8yKCl7bGV0W0MsJF09TygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gVygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBLPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFg9KCk9PiQoSy5tYXRjaGVzKTtyZXR1cm4gWCgpLEsuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixYKSwoKT0+Sy5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpfSxbXSksQ312YXIgeDM9MjgwO3ZhciBuMj0id2lkdGggNzBtcyBsaW5lYXIiLHMyPSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLHYzPSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsZzM9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixtMD0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsUjM9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsbTM9IjAuNXMiLGozPSIwLjQycyIscDM9NTgwLGYzPSJjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsbDM9NDQwLHQyPTUsdTM9e2lkbGU6MSxob3ZlcjoxLjA5LGRyYWc6MS4xMn0sbzM9e2lkbGU6InJnYmEoMjQ1LDI0NywyNTIsMC41NSkiLGhvdmVyOiJyZ2JhKDI0OCwyNTAsMjU1LDAuNykiLGRyYWc6InJnYmEoMjU1LDI1NSwyNTUsMC45NCkifSxkMz17aWRsZTozLjk1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxjMz17aWRsZTpbMC43NCwwLjU4XSxob3ZlcjpbMC44MiwwLjY4XSxkcmFnOlsxLDAuOTZdfSxhMz17aWRsZTowLjQsaG92ZXI6MC41LGRyYWc6MC44NX0saTM9e2lkbGU6MCxob3ZlcjowLjQ1LGRyYWc6MC42OH0sazI9bnVsbDtmdW5jdGlvbiByMygpe2lmKGsyIT1udWxsKXJldHVybiBrMjtpZih0eXBlb2YgQ1NTPiJ1Inx8dHlwZW9mIENTUy5zdXBwb3J0cyE9PSJmdW5jdGlvbiIpcmV0dXJuITE7cmV0dXJuIGsyPUNTUy5zdXBwb3J0cygiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsImxpbmVhcigwLCAxKSIpLGsyfWZ1bmN0aW9uIG4zKEMpe3JldHVybiBDLnJlcGxhY2UoL1teYS16QS1aMC05Xy1dL2csIiIpfXZhciBlOT00MCxzMz0xNCx0Mz0yNDAsZTM9MzAsQzg9MC4xNSxDND04MCwkOD0xNTAsSzg9MjUwLGUyPSJzZXJ2ZS1zaW06c2ltdWxhdG9yLWZyYW1lLXNjYWxlIjtmdW5jdGlvbiBDNShDLCQsSyxYKXtsZXQgTj1DKjMsUT0kPjA/TWF0aC5tYXgoMjgwLCQtNDgpOk4sWj1LPjAmJk51bWJlci5pc0Zpbml0ZShYKSYmWD4wP01hdGgubWF4KDI4MCwoSy0xMzYpKlgpOk47cmV0dXJuIE1hdGgubWluKE4sUSxaKX1mdW5jdGlvbiB3MChDLCQsSyxYLE4pe2xldCBRPUM1KCQsSyxYLE4pLFo9TWF0aC5taW4oMjgwLFEpO3JldHVybiBNYXRoLm1pbihRLE1hdGgubWF4KFosQykpfWZ1bmN0aW9uIEQyKEMpe2lmKCFOdW1iZXIuaXNGaW5pdGUoQykpcmV0dXJuIEM7bGV0ICQ9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5tYXgoMSx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk6MTtyZXR1cm4gTWF0aC5yb3VuZChDKiQpLyR9ZnVuY3Rpb24gJDUoQywkKXtpZihDPD0wfHwkPD0wKXJldHVybiAwO2xldCBLPTAuNTUsWD1DKiQqSy8oJCtLKkMpO3JldHVybiBNYXRoLm1pbihlOSxYKX1mdW5jdGlvbiBYOChDLCQsSyl7bGV0IFg9QyxOPUs7Zm9yKGxldCBRIG9mICQpe2xldCBaPU1hdGguYWJzKEMtUSk7aWYoWjxOKVg9USxOPVp9cmV0dXJuIFh9ZnVuY3Rpb24gSjgoQyl7bGV0e2Zyb206JCx0bzpLLHZlbG9jaXR5Olgsc3RpZmZuZXNzOk4sZGFtcGluZzpRLG9uVXBkYXRlOlosb25Db21wbGV0ZTpxfT1DLEc9MC40LFk9MC4wMzMzMzMzMzMzMzMzMzMzMyxCPSQsTD1YLEY9cGVyZm9ybWFuY2Uubm93KCksaz0wLEE9ITEsXz0oRCk9PntpZihBKXJldHVybjtsZXQgej1NYXRoLm1pbigoRC1GKS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO0Y9RDtsZXQgdz0tTiooQi1LKS1RKkw7aWYoTCs9dyp6LEIrPUwqeixNYXRoLmFicyhMKTwwLjQmJk1hdGguYWJzKEItSyk8MC40KXtaKEspLHE/LigpO3JldHVybn1aKEIpLGs9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKF8pfTtyZXR1cm4gaz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoXyksKCk9PntpZihBPSEwLGspY2FuY2VsQW5pbWF0aW9uRnJhbWUoayl9fWZ1bmN0aW9uIE44KEMpe2lmKEMubGVuZ3RoPDIpcmV0dXJuIDA7bGV0ICQ9Q1tDLmxlbmd0aC0xXSxLPUNbMF07Zm9yKGxldCBOPUMubGVuZ3RoLTE7Tj49MDtOLS0paWYoJC50LUNbTl0udD49QzQpe0s9Q1tOXTticmVha31sZXQgWD0oJC50LUsudCkvMTAwMDtyZXR1cm4gWD4wPygkLngtSy54KS9YOjB9dmFyIFE4PSJkcm9wLXNoYWRvdygwIDAuNXB4IDFweCByZ2JhKDAsMCwwLDAuMSkpIGRyb3Atc2hhZG93KDAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMTMpKSIsWjg9ImRyb3Atc2hhZG93KDAgMXB4IDEuNXB4IHJnYmEoMCwwLDAsMC4xNikpIiwkND1bWzYsInJnYmEoMTYwLDIwNSwyNTUsMC40MikiXSxbNC41NSwicmdiYSgyNTUsMjU1LDI1NSwwLjk3KSJdXTtmdW5jdGlvbiBxOCh7ZEZpbGw6Qyx3OiQsY2xhc3NOYW1lOkssb25FbmQ6WH0pe3JldHVybiBKKE4xLHtjaGlsZHJlbjokNC5tYXAoKFtOLFFdKT0+SigicGF0aCIse2NsYXNzTmFtZTpLLGQ6QyxmaWxsOiJub25lIixwYXRoTGVuZ3RoOjEsc3Ryb2tlOlEsc3Ryb2tlV2lkdGg6TiokLHN0cm9rZUxpbmVjYXA6InJvdW5kIixvbkFuaW1hdGlvbkVuZDpYfSxOKSl9KX12YXIgSzQ9dDEoZnVuY3Rpb24oe2FyYzokLHBoYXNlOksscmVkdWNlZE1vdGlvbjpYLGhpZ2hDb250cmFzdDpOLGZvY3VzVmlzaWJsZTpRLG9uUG9pbnRlckRvd246WixvblBvaW50ZXJNb3ZlOnEsb25Qb2ludGVyVXA6RyxvblBvaW50ZXJDYW5jZWw6WSxvblBvaW50ZXJFbnRlcjpCLG9uUG9pbnRlckxlYXZlOkwsb25Nb3VzZURvd246Rn0sayl7bGV0IEE9czAoKSxfPW4zKEEpLEQ9YHNlcnZlLXNpbS1yei1iaC0ke199YCx6PWBzZXJ2ZS1zaW0tcnotYmQtJHtffWAsdz1gc2VydmVTaW1SekRpc2NoYXJnZUtmJHtffWAsRT1gc2VydmVTaW1SekRpc2NoYXJnZSR7X31gLHk9SyE9PSJpZGxlIixjPXYoITEpLFI9dighMSksaD12KDApLFt4LHBdPU8oITEpLGQ9digwLjQ1KSx1PXYoMCk7aWYoeSYmIWMuY3VycmVudCloLmN1cnJlbnQrPTE7Yy5jdXJyZW50PXksbjAoKCk9PntpZihSLmN1cnJlbnQmJiF5KXUuY3VycmVudD0wLHAoITApO2lmKHkpcCghMSk7Ui5jdXJyZW50PXl9LFt5XSk7bGV0ICQxPWguY3VycmVudCxhPWBzZXJ2ZVNpbVJ6Q2hnXyR7X31fJHskMX1gLHI9YHNlcnZlU2ltUnpDaGdfJHtffV8keyQxfWAsZz1QKCgpPT57aWYodS5jdXJyZW50Kz0xLHUuY3VycmVudD49MilwKCExKSx1LmN1cnJlbnQ9MH0sW10pLEk9Tj8xLjEyOjEsSzE9KDYrdDIqMikqSSxuPVg/MTp1M1tLXSxKMT1kM1tLXSpJLFtlLHNdPWMzW0tdLFgxPU4/ZTpzLFQ9YTNbS10sUz1pM1tLXSxqPUs9PT0iZHJhZyI/YHVybCgjJHt6fSlgOmB1cmwoIyR7RH0pYDtXKCgpPT57aWYoeSlkLmN1cnJlbnQ9U30sW3ksU10pO2xldCBpPSFYJiYoeXx8eCksdD15P1M6ZC5jdXJyZW50LFkxPXk/bTM6ajMsWjE9eT9nMzptMCxGMT15JiZyMygpP1IzOloxLFMxPVg/Im5vbmUiOmB0cmFuc2Zvcm0gJHtZMX0gJHtGMX1gLEcxPVg/Im5vbmUiOmBvcGFjaXR5ICR7WTF9ICR7WjF9LCBzdHJva2Utd2lkdGggJHtZMX0gJHtaMX1gLFAxPVg/Im5vbmUiOmBvcGFjaXR5ICR7WTF9ICR7WjF9YCxDMT0kLnZpZXdCb3hTaXplLHExPSQuZCxoMT0hWCYmKHl8fHgpJiZ0PjAsUjE9e3RyYW5zZm9ybTpgdHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKCR7bn0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjpTMSx3aWxsQ2hhbmdlOlg/dm9pZCAwOiJ0cmFuc2Zvcm0iLGJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIixXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiJ9O3JldHVybiBKKCJzdmciLHtyZWY6ayx3aWR0aDpDMSxoZWlnaHQ6QzEsdmlld0JveDpgMCAwICR7QzF9ICR7QzF9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIn0sb25Qb2ludGVyRG93bjpaLG9uUG9pbnRlck1vdmU6cSxvblBvaW50ZXJVcDpHLG9uUG9pbnRlckNhbmNlbDpZLG9uTG9zdFBvaW50ZXJDYXB0dXJlOkcsb25Qb2ludGVyRW50ZXI6QixvblBvaW50ZXJMZWF2ZTpMLG9uTW91c2VEb3duOkYsY2hpbGRyZW46W0ooImRlZnMiLHtjaGlsZHJlbjpbSigiZmlsdGVyIix7aWQ6RCx4OiItNTAlIix5OiItNTAlIix3aWR0aDoiMjAwJSIsaGVpZ2h0OiIyMDAlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSigiZmVHYXVzc2lhbkJsdXIiLHtpbjoiU291cmNlR3JhcGhpYyIsc3RkRGV2aWF0aW9uOk4/MC44NToxLjA1LHJlc3VsdDoiYiJ9KSxKKCJmZU1lcmdlIix7Y2hpbGRyZW46SigiZmVNZXJnZU5vZGUiLHtpbjoiYiJ9KX0pXX0pLEooImZpbHRlciIse2lkOnoseDoiLTUyJSIseToiLTUyJSIsd2lkdGg6IjIwNCUiLGhlaWdodDoiMjA0JSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0ooImZlR2F1c3NpYW5CbHVyIix7aW46IlNvdXJjZUdyYXBoaWMiLHN0ZERldmlhdGlvbjpOPzEuMTU6MS40MixyZXN1bHQ6ImIifSksSigiZmVNZXJnZSIse2NoaWxkcmVuOkooImZlTWVyZ2VOb2RlIix7aW46ImIifSl9KV19KSxKKCJzdHlsZSIse3R5cGU6InRleHQvY3NzIixjaGlsZHJlbjpgCiAgICAgICAgICAgICR7eT9gCiAgICAgICAgICAgIEBrZXlmcmFtZXMgJHthfSB7CiAgICAgICAgICAgICAgZnJvbSB7IHN0cm9rZS1kYXNob2Zmc2V0OiAxOyB9CiAgICAgICAgICAgICAgdG8geyBzdHJva2UtZGFzaG9mZnNldDogMDsgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC4ke3J9IHsKICAgICAgICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAxOwogICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAxOwogICAgICAgICAgICAgIHZlY3Rvci1lZmZlY3Q6IG5vbmU7CiAgICAgICAgICAgICAgYW5pbWF0aW9uOiAke2F9ICR7cDN9bXMgJHtmM30gZm9yd2FyZHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgQGtleWZyYW1lcyAke3d9IHsKICAgICAgICAgICAgICBmcm9tIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IH0KICAgICAgICAgICAgICB0byB7IHN0cm9rZS1kYXNob2Zmc2V0OiAxOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLiR7RX0gewogICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDE7CiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7CiAgICAgICAgICAgICAgdmVjdG9yLWVmZmVjdDogbm9uZTsKICAgICAgICAgICAgICBhbmltYXRpb246ICR7d30gJHtsM31tcyAke20wfSBmb3J3YXJkczsKICAgICAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogICAgICAgICAgICB9CiAgICAgICAgICBgfSldfSksSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOnExLHN0cm9rZToicmdiYSgzMCwzMiwzOCwwLjUpIixzdHJva2VXaWR0aDo1Ljg1Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTowLjA4OTYwMDAwMDAwMDAwMDAxLGZpbHRlcjpaOH19KSxKKCJwYXRoIix7ZDpxMSxzdHJva2U6InJnYmEoMTYsMTcsMjIsMC4zOCkiLHN0cm9rZVdpZHRoOjQuNipJLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6MC41NSxmaWx0ZXI6Wjh9fSldfSksSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOnExLGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgxMCwgMTMyLCAyNTUsIDAuOTUpIixzdHJva2VXaWR0aDoodDIqMis2KSpJLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6UT8wLjk1OjAsdHJhbnNpdGlvbjpYPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke20wfWAsZmlsdGVyOiJkcm9wLXNoYWRvdygwIDAgMnB4IHJnYmEoMTAsMTMyLDI1NSwwLjU1KSkgZHJvcC1zaGFkb3coMCAwIDRweCByZ2JhKDEwLDEzMiwyNTUsMC4zMikpIn19KSxKKCJwYXRoIix7ZDpxMSxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkiLHN0cm9rZVdpZHRoOjEuNSpJLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6UT8wLjc6MCx0cmFuc2l0aW9uOlg/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7bTB9YH19KV19KSxKKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6UjEsY2hpbGRyZW46W0ooImciLHtzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltoMSYmSigicGF0aCIse2Q6cTEsc3Ryb2tlOiJyZ2JhKDIxMCwyMjgsMjU1LDAuNCkiLHN0cm9rZVdpZHRoOjQuMjUqSSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLGZpbHRlcjpqLHN0eWxlOntvcGFjaXR5OnQqMC44Mix0cmFuc2l0aW9uOlAxfX0pLFgmJlM+MCYmSigicGF0aCIse2Q6cTEsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuODIpIixzdHJva2VXaWR0aDo0LjE1Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixmaWx0ZXI6aixzdHlsZTp7b3BhY2l0eTpTLHRyYW5zaXRpb246UDF9fSksSigicGF0aCIse2Q6cTEsc3Ryb2tlOm8zW0tdLHN0cm9rZVdpZHRoOkoxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6WDEsdHJhbnNpdGlvbjpHMSxmaWx0ZXI6UTh9fSksSigicGF0aCIse2Q6cTEsc3Ryb2tlOiJyZ2JhKDIzNiwyNDQsMjUyLDAuOTIpIixzdHJva2VXaWR0aDoxLjM4Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpULHRyYW5zaXRpb246RzEsZmlsdGVyOlE4fX0pLGkmJkooImciLHtzdHlsZTp7b3BhY2l0eTp0LHRyYW5zaXRpb246UDF9LGNoaWxkcmVuOlt5JiZKKCJnIix7Y2hpbGRyZW46SihxOCx7ZEZpbGw6JC5kRmlsbCx3OkksY2xhc3NOYW1lOnJ9KX0sYHJ6LWNoYXJnZS0keyQxfWApLHgmJiF5JiZKKCJnIix7Y2hpbGRyZW46SihxOCx7ZEZpbGw6JC5kRmlsbCx3OkksY2xhc3NOYW1lOkUsb25FbmQ6Z30pfSwicnotZGlzY2hhcmdlIildfSldfSksSigicGF0aCIse2Q6cTEsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDAsMCwwLDApIixzdHJva2VXaWR0aDpLMSxzdHJva2VMaW5lY2FwOiJyb3VuZCIscG9pbnRlckV2ZW50czoic3Ryb2tlIn0pXX0pXX0pfSk7ZnVuY3Rpb24gWTgoe3NpbXVsYXRvclJlc2l6ZTpDLGRldmljZVR5cGU6JCxzdHJlYW1Db25maWc6Syxjb250YWluZXJXaWR0aDpYLGNvbnRhaW5lckhlaWdodDpOfSl7bGV0IFE9XzIoKSxaPWgzKCksW3EsR109TyghMSksWT16MSgoKT0+ajIoe3R5cGU6JCxjb25maWc6Sz8/bnVsbCxjb250YWluZXJXaWR0aDpYLGNvbnRhaW5lckhlaWdodDpOfSksWyQsSyxYLE5dKSxCPUMuaXNSZXNpemluZ3x8Qy5pc0luZXJ0aWE/ImRyYWciOkMuaGFuZGxlSG92ZXJlZD8iaG92ZXIiOiJpZGxlIjtyZXR1cm4gSigiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1sYWJlbCI6IlJlc2l6ZSBzaW11bGF0b3Igd2lkdGguIERyYWcgdGhlIGNvcm5lciBvciB1c2UgTGVmdCBhbmQgUmlnaHQgQXJyb3cga2V5czsgaG9sZCBTaGlmdCBmb3IgbGFyZ2VyIHN0ZXBzLiIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtdmFsdWVtaW4iOk1hdGgucm91bmQoQy5taW5XaWR0aCksImFyaWEtdmFsdWVtYXgiOk1hdGgucm91bmQoQy5tYXhXaWR0aCksImFyaWEtdmFsdWVub3ciOk1hdGgucm91bmQoQy5jb21taXR0ZWRXaWR0aCksdGFiSW5kZXg6MCxvbktleURvd246Qy5vbktleURvd24sb25Gb2N1czooTCk9PntHKEwuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5HKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLHBvaW50ZXJFdmVudHM6Im5vbmUiLG91dGxpbmU6Im5vbmUiLHpJbmRleDoyNSxXZWJraXRUYXBIaWdobGlnaHRDb2xvcjoidHJhbnNwYXJlbnQifSxjaGlsZHJlbjpKKEs0LHtyZWY6Qy5oYW5kbGVSZWYsYXJjOlkscGhhc2U6QixyZWR1Y2VkTW90aW9uOlEsaGlnaENvbnRyYXN0OlosZm9jdXNWaXNpYmxlOnEsb25Qb2ludGVyRG93bjpDLm9uUG9pbnRlckRvd24sb25Qb2ludGVyTW92ZTpDLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6Qy5vblBvaW50ZXJFbmQsb25Qb2ludGVyQ2FuY2VsOkMub25Qb2ludGVyRW5kLG9uUG9pbnRlckVudGVyOigpPT5DLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT5DLnNldEhhbmRsZUhvdmVyZWQoITEpfSl9KX1mdW5jdGlvbiBHOCh7d2lkdGg6QyxoZWlnaHQ6JCx2aXNpYmxlOkt9KXtyZXR1cm4gSigiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctW3JnYmEoMjAsMjIsMjgsMC43OCldIHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpXSBiYWNrZHJvcC1ibHVyLW1kIGJhY2tkcm9wLXNhdHVyYXRlLTE1MCB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e29wYWNpdHk6Sz8xOjAsdHJhbnNmb3JtOmB0cmFuc2xhdGVZKCR7Sz8wOjR9cHgpIHNjYWxlKCR7Sz8xOjAuOTZ9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246Im9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgdHJhbnNmb3JtIDIyMG1zIGN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIn0sY2hpbGRyZW46W01hdGgucm91bmQoQyksIiAiLEooInNwYW4iLHtjbGFzc05hbWU6Im9wYWNpdHktNjAgbXgtMC41IixjaGlsZHJlbjoiw5cifSksIiAiLE1hdGgucm91bmQoJCldfSl9ZnVuY3Rpb24gWDQoQywkLEspe2xldCBYPUsubGF0Kk1hdGguUEkvMTgwLE49KEMtSy5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OigkLUsubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhYKSo2MzcxMDAwLHo6LU4qNjM3MTAwMH19ZnVuY3Rpb24gSjQoQywkLEspe2xldCBYPUsubGF0Kk1hdGguUEkvMTgwLE49LSQvNjM3MTAwMCooMTgwL01hdGguUEkpLFE9Qy8oNjM3MTAwMCpNYXRoLmNvcyhYKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OksubGF0K04sbG5nOksubG5nK1F9fWZ1bmN0aW9uIE40KEMsJCxLLFgsTil7bGV0IFE9TipOLFo9USpOLHE9KEcsWSxCLEwpPT4wLjUqKDIqWSsoLUcrQikqTisoMipHLTUqWSs0KkItTCkqUSsoLUcrMypZLTMqQitMKSpaKTtyZXR1cm57eDpxKEMueCwkLngsSy54LFgueCksejpxKEMueiwkLnosSy56LFgueikseTpxKEMueSwkLnksSy55LFgueSkscmF3QWx0OnEoQy5yYXdBbHQsJC5yYXdBbHQsSy5yYXdBbHQsWC5yYXdBbHQpfX1mdW5jdGlvbiBRNChDLCQsSyl7aWYoQy5sZW5ndGg8MilyZXR1cm4gQy5zbGljZSgpO2xldCBYPVtdLE49Qy5sZW5ndGgsUT1LP046Ti0xO2ZvcihsZXQgWj0wO1o8UTtaKyspe2xldCBxPUNbSz8oWi0xK04pJU46TWF0aC5tYXgoMCxaLTEpXSxHPUNbWiVOXSxZPUNbKForMSklTl0sQj1DW0s/KForMiklTjpNYXRoLm1pbihOLTEsWisyKV0sTD1ZLngtRy54LEY9WS56LUcueixrPU1hdGguaHlwb3QoTCxGKSxBPU1hdGgubWF4KDIsTWF0aC5jZWlsKGsvJCkpO2ZvcihsZXQgXz0wO188QTtfKyspe2xldCBEPV8vQTtYLnB1c2goTjQocSxHLFksQixEKSl9fWlmKCFLKVgucHVzaChDW04tMV0pO3JldHVybiBYfWZ1bmN0aW9uIEw4KEMpe2lmKEMud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAke0MuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0ICQ9e2xhdDpDLndheXBvaW50cy5yZWR1Y2UoKF8sRCk9Pl8rRC5sYXQsMCkvQy53YXlwb2ludHMubGVuZ3RoLGxuZzpDLndheXBvaW50cy5yZWR1Y2UoKF8sRCk9Pl8rRC5sbmcsMCkvQy53YXlwb2ludHMubGVuZ3RofSxLPUMud2F5cG9pbnRzLm1hcCgoXyk9Pl8uYWx0Pz8wKSxYPU1hdGgubWluKC4uLkspLE49TWF0aC5tYXgoLi4uSyksUT1DLndheXBvaW50cy5tYXAoKF8pPT57bGV0e3g6RCx6fT1YNChfLmxhdCxfLmxuZywkKSx3PV8uYWx0Pz8wO3JldHVybnt4OkQseix5OnctWCxyYXdBbHQ6d319KSxaPVE0KFEsOCwhIUMubG9vcCkscT1bXSxHPTA7Zm9yKGxldCBfPTA7XzxaLmxlbmd0aDtfKyspe2xldCBEPVpbX107aWYoXz4wKXtsZXQgeT1aW18tMV07Rys9TWF0aC5oeXBvdChELngteS54LEQuei15LnosRC55LXkueSl9bGV0e2xhdDp6LGxuZzp3fT1KNChELngsRC56LCQpLEU9TWF0aC5tYXgoMCxELnkpO3EucHVzaCh7eDpELngsejpELnoseTpFLGFyYzpHLGxhdDp6LGxuZzp3fSl9bGV0IFk9MS8wLEI9LTEvMCxMPTEvMCxGPS0xLzAsaz0xLzAsQT0tMS8wO2ZvcihsZXQgXyBvZiBxKXtpZihfLng8WSlZPV8ueDtpZihfLng+QilCPV8ueDtpZihfLno8TClMPV8uejtpZihfLno+RilGPV8uejtpZihfLnk8aylrPV8ueTtpZihfLnk+QSlBPV8ueX1yZXR1cm57dHJhaWw6QyxvcmlnaW46JCxwb2ludHM6cSx0b3RhbERpc3RhbmNlOnFbcS5sZW5ndGgtMV0uYXJjLGJvdW5kczp7eDpbWSxCXSx5OltrLEFdLHo6W0wsRl19LHJhd01pbkFsdDpYLHJhd01heEFsdDpOfX1mdW5jdGlvbiBRMChDLCQpe2xldCBLPUMudG90YWxEaXN0YW5jZTtpZihLPT09MClyZXR1cm4gQy5wb2ludHNbMF07bGV0IFg9JDtpZihDLnRyYWlsLmxvb3ApWD0oWCVLK0spJUs7ZWxzZXtpZihYPD0wKXJldHVybiBDLnBvaW50c1swXTtpZihYPj1LKXJldHVybiBDLnBvaW50c1tDLnBvaW50cy5sZW5ndGgtMV19bGV0IE49MCxRPUMucG9pbnRzLmxlbmd0aC0xO3doaWxlKE4rMTxRKXtsZXQgQj1OK1E+Pj4xO2lmKEMucG9pbnRzW0JdLmFyYzw9WClOPUI7ZWxzZSBRPUJ9bGV0IFo9Qy5wb2ludHNbTl0scT1DLnBvaW50c1tRXSxHPXEuYXJjLVouYXJjLFk9Rz09PTA/MDooWC1aLmFyYykvRztyZXR1cm57eDpaLngrKHEueC1aLngpKlksejpaLnorKHEuei1aLnopKlkseTpaLnkrKHEueS1aLnkpKlksYXJjOlgsbGF0OloubGF0KyhxLmxhdC1aLmxhdCkqWSxsbmc6Wi5sbmcrKHEubG5nLVoubG5nKSpZfX1mdW5jdGlvbiBLNShDKXtzd2l0Y2goQyl7Y2FzZSJ3YWxrIjpyZXR1cm4gMS40O2Nhc2UicnVuIjpyZXR1cm4gMztjYXNlImN5Y2xlIjpyZXR1cm4gNS41O2Nhc2UiZHJpdmUiOnJldHVybiAxMy40fX12YXIgWjQ9W3tsYXQ6MzcuMzMyNzIsbG5nOi0xMjIuMDA4MzMsYWx0OjQ5fSx7bGF0OjM3LjMzMzA5LGxuZzotMTIyLjAwNzM1LGFsdDo0OH0se2xhdDozNy4zMzM3Myxsbmc6LTEyMi4wMDY2MyxhbHQ6NDl9LHtsYXQ6MzcuMzM0NTQsbG5nOi0xMjIuMDA2MjcsYWx0OjQ5fSx7bGF0OjM3LjMzNTQsbG5nOi0xMjIuMDA2MzMsYWx0OjQ5fSx7bGF0OjM3LjMzNjE4LGxuZzotMTIyLjAwNjc5LGFsdDo0NX0se2xhdDozNy4zMzY3NSxsbmc6LTEyMi4wMDc1OSxhbHQ6NDV9LHtsYXQ6MzcuMzM3MDQsbG5nOi0xMjIuMDA4NjEsYWx0OjQ2fSx7bGF0OjM3LjMzNjk4LGxuZzotMTIyLjAwOTY5LGFsdDo0OH0se2xhdDozNy4zMzY2Mixsbmc6LTEyMi4wMTA2NixhbHQ6NDh9LHtsYXQ6MzcuMzM1OTgsbG5nOi0xMjIuMDExMzgsYWx0OjQ5fSx7bGF0OjM3LjMzNTE3LGxuZzotMTIyLjAxMTc0LGFsdDo1MH0se2xhdDozNy4zMzQzMSxsbmc6LTEyMi4wMTE2OSxhbHQ6NTB9LHtsYXQ6MzcuMzMzNTQsbG5nOi0xMjIuMDExMjIsYWx0OjUwfSx7bGF0OjM3LjMzMjk2LGxuZzotMTIyLjAxMDQyLGFsdDo1MX0se2xhdDozNy4zMzI2OCxsbmc6LTEyMi4wMDk0LGFsdDo1MH1dLHE0PVt7bGF0OjM3LjgzMjEyLGxuZzotMTIyLjQ4MDY1LGFsdDozMH0se2xhdDozNy44MjkzNyxsbmc6LTEyMi40Nzk3NCxhbHQ6MzB9LHtsYXQ6MzcuODI2NDksbG5nOi0xMjIuNDc5NCxhbHQ6MzB9LHtsYXQ6MzcuODIzNjIsbG5nOi0xMjIuNDc5MDcsYWx0OjQ1fSx7bGF0OjM3LjgyMDc0LGxuZzotMTIyLjQ3ODczLGFsdDo1OX0se2xhdDozNy44MTc4Nixsbmc6LTEyMi40NzgzOSxhbHQ6NjZ9LHtsYXQ6MzcuODE0OTgsbG5nOi0xMjIuNDc4MDYsYWx0OjY2fSx7bGF0OjM3LjgxMjExLGxuZzotMTIyLjQ3NzcyLGFsdDo1OH0se2xhdDozNy44MDkyMyxsbmc6LTEyMi40NzczNCxhbHQ6NDR9LHtsYXQ6MzcuODA5NDksbG5nOi0xMjIuNDc3MyxhbHQ6NDV9LHtsYXQ6MzcuODEyMzYsbG5nOi0xMjIuNDc3NjUsYWx0OjU5fSx7bGF0OjM3LjgxNTI0LGxuZzotMTIyLjQ3Nzk4LGFsdDo2Nn0se2xhdDozNy44MTgxMixsbmc6LTEyMi40NzgzMixhbHQ6NjZ9LHtsYXQ6MzcuODIxLGxuZzotMTIyLjQ3ODY2LGFsdDo1OH0se2xhdDozNy44MjM4Nyxsbmc6LTEyMi40NzksYWx0OjQ0fSx7bGF0OjM3LjgyNjc1LGxuZzotMTIyLjQ3OTMzLGFsdDozMH0se2xhdDozNy44Mjk2Myxsbmc6LTEyMi40Nzk2NyxhbHQ6MzB9LHtsYXQ6MzcuODMyMzMsbG5nOi0xMjIuNDgwNzIsYWx0OjMwfV0sWTQ9W3tsYXQ6MzcuODg2NjQsbG5nOi0xMjIuNjI1OTksYWx0OjEyMX0se2xhdDozNy44ODg4Nyxsbmc6LTEyMi42MjMzMixhbHQ6MTM1fSx7bGF0OjM3Ljg5MTE1LGxuZzotMTIyLjYyMTYsYWx0OjE2NH0se2xhdDozNy44OTM1Myxsbmc6LTEyMi42MTkyMSxhbHQ6MTgwfSx7bGF0OjM3Ljg5NDY2LGxuZzotMTIyLjYxNTc3LGFsdDoyMjB9LHtsYXQ6MzcuODk2MzEsbG5nOi0xMjIuNjEyNjgsYWx0OjI3M30se2xhdDozNy44OTkxNyxsbmc6LTEyMi42MTA5OCxhbHQ6MzEzfSx7bGF0OjM3LjkwMTY2LGxuZzotMTIyLjYwODU1LGFsdDozNDJ9LHtsYXQ6MzcuOTAxOTksbG5nOi0xMjIuNjA2MDEsYWx0OjQwOH0se2xhdDozNy45MDMzOSxsbmc6LTEyMi42MDQwMSxhbHQ6NDUwfSx7bGF0OjM3LjkwNjYyLGxuZzotMTIyLjYwMjkxLGFsdDo0NDB9LHtsYXQ6MzcuOTA5NzEsbG5nOi0xMjIuNjAxNzMsYWx0OjQzMn0se2xhdDozNy45MTIxMyxsbmc6LTEyMi42MDAwNyxhbHQ6NDM2fSx7bGF0OjM3LjkxNDM5LGxuZzotMTIyLjU5NzgsYWx0OjQxMH0se2xhdDozNy45MTI4NSxsbmc6LTEyMi41OTUwNCxhbHQ6NDIyfSx7bGF0OjM3LjkxMjc0LGxuZzotMTIyLjU5MjAyLGFsdDo0MjV9LHtsYXQ6MzcuOTE1LGxuZzotMTIyLjU5MDMyLGFsdDo0MTJ9LHtsYXQ6MzcuOTE2MzcsbG5nOi0xMjIuNTg5MDMsYWx0OjQwNn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODU5NSxhbHQ6MzgyfSx7bGF0OjM3LjkxNzQsbG5nOi0xMjIuNTgzOTgsYWx0OjM3Mn0se2xhdDozNy45MTY0Mixsbmc6LTEyMi41ODIzNixhbHQ6MzUyfSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4MDExLGFsdDozNDJ9XSxHND1be2xhdDo0MC43ODIxNixsbmc6LTczLjk2MjU0LGFsdDozN30se2xhdDo0MC43ODIyMSxsbmc6LTczLjk2MDk4LGFsdDozNn0se2xhdDo0MC43ODMyOCxsbmc6LTczLjk2MDEsYWx0OjM2fSx7bGF0OjQwLjc4NDQsbG5nOi03My45NTkzLGFsdDozNn0se2xhdDo0MC43ODU1LGxuZzotNzMuOTU4NDgsYWx0OjM2fSx7bGF0OjQwLjc4NjY0LGxuZzotNzMuOTU3NzQsYWx0OjM2fSx7bGF0OjQwLjc4NzksbG5nOi03My45NTc2NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg4OTgsbG5nOi03My45NTc5MixhbHQ6MzZ9LHtsYXQ6NDAuNzg4NjgsbG5nOi03My45NTk1MSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4OTcsbG5nOi03My45NjExMixhbHQ6MzZ9LHtsYXQ6NDAuNzg4MzMsbG5nOi03My45NjI1LGFsdDozN30se2xhdDo0MC43ODgyOCxsbmc6LTczLjk2NDE2LGFsdDozN30se2xhdDo0MC43ODgwNSxsbmc6LTczLjk2NTczLGFsdDozNn0se2xhdDo0MC43ODY5MSxsbmc6LTczLjk2NjM2LGFsdDozNn0se2xhdDo0MC43ODU2Nixsbmc6LTczLjk2NjY1LGFsdDozNn0se2xhdDo0MC43ODQ1OCxsbmc6LTczLjk2NjA4LGFsdDozNn0se2xhdDo0MC43ODQwMixsbmc6LTczLjk2NDU5LGFsdDozNn0se2xhdDo0MC43ODMyMixsbmc6LTczLjk2MzM0LGFsdDozN31dLEw0PVt7bGF0OjM3LjU5NjU5LGxuZzotMTIyLjUwMzE2LGFsdDo0fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODUwNSxsbmc6LTEyMi41MDY5OCxhbHQ6OTN9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fV0sWjA9W3tpZDoiYXBwbGUtcGFyay1sb29wIixuYW1lOiJBcHBsZSBQYXJrIExvb3AiLGRlc2NyaXB0aW9uOiJDdXBlcnRpbm8g4oCiIGZsYXQgcmluZyByb2FkIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6WjQsbG9vcDohMH0se2lkOiJnb2xkZW4tZ2F0ZSIsbmFtZToiR29sZGVuIEdhdGUgQ3Jvc3NpbmciLGRlc2NyaXB0aW9uOiJTYW4gRnJhbmNpc2NvIOKAoiBicmlkZ2Ugcm91bmQtdHJpcCIsbW9kZToicnVuIix3YXlwb2ludHM6cTQsbG9vcDohMH0se2lkOiJ0YW0tcmlkZ2UiLG5hbWU6Ik10LiBUYW0gUmlkZ2UiLGRlc2NyaXB0aW9uOiJTdGluc29uIEJlYWNoIOKAoiBTdGVlcCBSYXZpbmUgKyBNYXR0IERhdmlzIGxvb3AiLG1vZGU6IndhbGsiLHdheXBvaW50czpZNCxsb29wOiEwfSx7aWQ6ImNlbnRyYWwtcGFyayIsbmFtZToiUmVzZXJ2b2lyIExvb3AiLGRlc2NyaXB0aW9uOiJDZW50cmFsIFBhcmsg4oCiIDIuNSBrbSIsbW9kZToicnVuIix3YXlwb2ludHM6RzQsbG9vcDohMH0se2lkOiJwY2gtcGFjaWZpY2EiLG5hbWU6IlBhY2lmaWMgQ29hc3QgSHd5IixkZXNjcmlwdGlvbjoiUGFjaWZpY2Eg4oCiIERldmlsJ3MgU2xpZGUgcm91bmQtdHJpcCIsbW9kZToiZHJpdmUiLHdheXBvaW50czpMNCxsb29wOiEwfV07dmFyIFY0PTY1MCxCND1gCi5sZW0tdG9nZ2xlOmhvdmVyIHsgY29sb3I6ICNmZmY7IH0KLmxlbS10b2dnbGU6aG92ZXIgLmxlbS1jaGV2cm9uIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC44NSkgIWltcG9ydGFudDsgfQoubGVtLXNlbGVjdDpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjE2KTsgfQoubGVtLXNlbGVjdDpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjI0KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsgfQoubGVtLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkgeyBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wOCk7IH0KLmxlbS1wcmltYXJ5LW9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSAhaW1wb3J0YW50OyBmaWx0ZXI6IG5vbmU7IH0KLmxlbS1naG9zdDpob3Zlcjpub3QoOmRpc2FibGVkKSB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNik7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjIpOyBjb2xvcjogI2ZmZjsgfQoubGVtLWdob3N0OmRpc2FibGVkIHsgb3BhY2l0eTogMC40OyBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9Ci5sZW0tc2VnOmhvdmVyOm5vdChbYXJpYS1wcmVzc2VkPSJ0cnVlIl0pIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KSAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDkpOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xOCk7IGNvbG9yOiAjZmZmOyB9Ci5sZW0tc3BlZWQtb246aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuODgpICFpbXBvcnRhbnQ7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjg4KSAhaW1wb3J0YW50OyBjb2xvcjogIzBhMGEwYyAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjk3KTsgfQpgLFg1PVsxLDIsNSwyMF0sVjg9MTAwMCxKNT17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gRjgoe3VkaWQ6QyxleGVjOiR9KXtsZXRbSyxYXT1PKCExKSxbTixRXT1PKFowWzBdLmlkKSxbWixxXT1PKFowWzBdLm1vZGUpLFtHLFldPU8oMSksW0IsTF09TyhKNSksW0Ysa109TyhudWxsKSxBPXoxKCgpPT5aMC5maW5kKChnKT0+Zy5pZD09PU4pPz9aMFswXSxbTl0pLF89ejEoKCk9Pkw4KEEpLFtBXSksRD12KDApLHo9digiaWRsZSIpLHc9dihLNShaKSpHKSxFPXYoMCkseT12KF8pLGM9dihudWxsKTtXKCgpPT57dy5jdXJyZW50PUs1KFopKkd9LFtaLEddKTtsZXQgUj12KG51bGwpO1coKCk9PntsZXQgZz15LmN1cnJlbnQsST1ELmN1cnJlbnQ7aWYoeS5jdXJyZW50PV8sZyYmZyE9PV8pUi5jdXJyZW50PUQ0KGcsSSxfLHBlcmZvcm1hbmNlLm5vdygpKTtELmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MCx6LmN1cnJlbnQ9ImlkbGUiLGMuY3VycmVudD1udWxsLEwoSjUpfSxbX10pO2xldCBoPXYoMCkseD12KG51bGwpLHA9dihudWxsKTtXKCgpPT57bGV0IGc9MCxJPShLMSk9PntsZXQgbj14LmN1cnJlbnQsSjE9bj09bnVsbD8xNjpNYXRoLm1pbig2NCxLMS1uKTtpZih4LmN1cnJlbnQ9SzEsaC5jdXJyZW50PShoLmN1cnJlbnQrSjEqMC4wMDAxMiklKE1hdGguUEkqMiksei5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgcz13LmN1cnJlbnQqSjEvMTAwMDtELmN1cnJlbnQrPXMsRS5jdXJyZW50Kz1KMTtsZXQgWDE9eS5jdXJyZW50LnRvdGFsRGlzdGFuY2U7aWYoIXkuY3VycmVudC50cmFpbC5sb29wJiZELmN1cnJlbnQ+PVgxKUQuY3VycmVudD1YMSx6LmN1cnJlbnQ9InBhdXNlZCIsTCh7c3RhdHVzOiJwYXVzZWQiLGFyYzpYMSxlbGFwc2VkTXM6RS5jdXJyZW50fSl9bGV0IGU9cC5jdXJyZW50O2lmKGUpe2xldCBzPXkuY3VycmVudCxYMT1udWxsLFQ9Ui5jdXJyZW50O2lmKFQpe2xldCBTPShLMS1ULnN0YXJ0TXMpL1Y0O2lmKFM+PTEpUi5jdXJyZW50PW51bGw7ZWxzZXtsZXQgaj16NChTKTtzPUY0KFQsaiksWDE9e3g6VC5wcmV2TWFya2VyLngrKFQubmV4dE1hcmtlci54LVQucHJldk1hcmtlci54KSpqLHk6VC5wcmV2TWFya2VyLnkrKFQubmV4dE1hcmtlci55LVQucHJldk1hcmtlci55KSpqLHo6VC5wcmV2TWFya2VyLnorKFQubmV4dE1hcmtlci56LVQucHJldk1hcmtlci56KSpqfX19SDQoZSxzLEQuY3VycmVudCxoLmN1cnJlbnQsSzEsei5jdXJyZW50PT09InBsYXlpbmciLFgxKX1nPXJlcXVlc3RBbmltYXRpb25GcmFtZShJKX07cmV0dXJuIGc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEkpLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShnKX0sW10pLFcoKCk9PntsZXQgZz1zZXRJbnRlcnZhbCgoKT0+e2lmKHouY3VycmVudD09PSJwbGF5aW5nIilMKHtzdGF0dXM6InBsYXlpbmciLGFyYzpELmN1cnJlbnQsZWxhcHNlZE1zOkUuY3VycmVudH0pfSwyNTApO3JldHVybigpPT5jbGVhckludGVydmFsKGcpfSxbXSksVygoKT0+e2lmKEIuc3RhdHVzIT09InBsYXlpbmciKXJldHVybjtsZXQgZz0hMSxJPTAsSzE9bnVsbCxuPWFzeW5jKCk9PntpZihnfHxLMSlyZXR1cm47bGV0IGU9RGF0ZS5ub3coKTtpZihlLUk8VjgpcmV0dXJuO0k9ZTtsZXQgcz1RMCh5LmN1cnJlbnQsRC5jdXJyZW50KSxYMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gc2V0ICR7cy5sYXQudG9GaXhlZCg3KX0sJHtzLmxuZy50b0ZpeGVkKDcpfWA7SzE9JChYMSkudGhlbigoVCk9PntpZihnKXJldHVybjtpZihULmV4aXRDb2RlIT09MClrKFU4KFQuc3RkZXJyKXx8InNpbWN0bCBsb2NhdGlvbiBzZXQgZmFpbGVkIik7ZWxzZSBrKG51bGwpfSkuY2F0Y2goKFQpPT57aWYoIWcpayhUIGluc3RhbmNlb2YgRXJyb3I/VC5tZXNzYWdlOlN0cmluZyhUKSl9KS5maW5hbGx5KCgpPT57SzE9bnVsbH0pfTtuKCk7bGV0IEoxPXNldEludGVydmFsKG4sVjgpO3JldHVybigpPT57Zz0hMCxjbGVhckludGVydmFsKEoxKX19LFtCLnN0YXR1cyxDLCRdKTtsZXQgZD1QKCgpPT57aWYoei5jdXJyZW50PT09InBsYXlpbmciKXt6LmN1cnJlbnQ9InBhdXNlZCIsTCgoZyk9Pih7Li4uZyxzdGF0dXM6InBhdXNlZCJ9KSk7cmV0dXJufWlmKEQuY3VycmVudD49eS5jdXJyZW50LnRvdGFsRGlzdGFuY2UmJiF5LmN1cnJlbnQudHJhaWwubG9vcClELmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MDtpZihjLmN1cnJlbnQ9PW51bGwpe2xldCBnPVEwKHkuY3VycmVudCxELmN1cnJlbnQpO2MuY3VycmVudD17bGF0OmcubGF0LGxuZzpnLmxuZ319ei5jdXJyZW50PSJwbGF5aW5nIixMKChnKT0+KHsuLi5nLHN0YXR1czoicGxheWluZyIsYXJjOkQuY3VycmVudCxlbGFwc2VkTXM6RS5jdXJyZW50fSkpfSxbXSksdT1QKCgpPT57ei5jdXJyZW50PSJpZGxlIixELmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MCxMKEo1KTtsZXQgZz1jLmN1cnJlbnQ7Yy5jdXJyZW50PW51bGw7bGV0IEk9Zz9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gc2V0ICR7Zy5sYXQudG9GaXhlZCg3KX0sJHtnLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAke0N9IGNsZWFyYDskKEkpLnRoZW4oKEsxKT0+e2lmKEsxLmV4aXRDb2RlIT09MClrKFU4KEsxLnN0ZGVycil8fG51bGwpO2Vsc2UgayhudWxsKX0pfSxbJCxDXSksJDE9UCgoZyk9PntRKGcpO2xldCBJPVowLmZpbmQoKEsxKT0+SzEuaWQ9PT1nKTtpZihJKXEoSS5tb2RlKX0sW10pO1coKCk9PigpPT57aWYoei5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgZz1jLmN1cnJlbnQsST1nP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHtDfSBzZXQgJHtnLmxhdC50b0ZpeGVkKDcpfSwke2cubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gY2xlYXJgOyQoSSkuY2F0Y2goKCk9Pnt9KX0sWyQsQ10pO2xldCBhPUIuc3RhdHVzPT09InBsYXlpbmciLHI9YT9gJHtRNShCLmFyYyl9IMK3ICR7azgoQi5lbGFwc2VkTXMpfWA6YCR7UTUoXy50b3RhbERpc3RhbmNlKX0gdG90YWxgO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHgtMyBweS0yIixjaGlsZHJlbjpbSigic3R5bGUiLHtjaGlsZHJlbjpCNH0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+WCgoZyk9PiFnKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOkssY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4ycyxib3gtc2hhZG93XzAuMnNdIixzdHlsZTp7YmFja2dyb3VuZDphPyIjNGFkZTgwIjpfLnRvdGFsRGlzdGFuY2U+MD8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoidHJhbnNwYXJlbnQiLGJveFNoYWRvdzphPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSkscl19KSxKKGYxLHtvcGVuOkt9KV19KSxLJiZKKE4xLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBibG9jayIsY2hpbGRyZW46W0ooInNlbGVjdCIse3ZhbHVlOk4sb25DaGFuZ2U6KGcpPT4kMShnLnRhcmdldC52YWx1ZSksY2xhc3NOYW1lOiJsZW0tc2VsZWN0IGFwcGVhcmFuY2Utbm9uZSBbLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmVdIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIiwiYXJpYS1sYWJlbCI6IlRyYWlsIixjaGlsZHJlbjpaMC5tYXAoKGcpPT5KKCJvcHRpb24iLHt2YWx1ZTpnLmlkLGNoaWxkcmVuOmcubmFtZX0sZy5pZCkpfSksSigic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkooZjEse29wZW46ITF9KX0pXX0pLEooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46QS5kZXNjcmlwdGlvbn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltKKCJjYW52YXMiLHtyZWY6cCxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksSihrNCx7cHJlcGFyZWQ6X30pXX0pLEooImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbSihONSx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpRNShCLmFyYyl9KSxKKE41LHtsYWJlbDoiUGFjZSIsdmFsdWU6TzQody5jdXJyZW50KX0pLEooTjUse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTprOChCLmVsYXBzZWRNcyl9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W0ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpkLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7YT8ibGVtLXByaW1hcnkgbGVtLXByaW1hcnktb24gYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUiOiJsZW0tcHJpbWFyeSBiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0ifWAsImFyaWEtcHJlc3NlZCI6YSx0aXRsZTphPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOlthP0ooZjIse30pOkoodjAse30pLEooInNwYW4iLHtjaGlsZHJlbjphPyJQYXVzZSI6IlBsYXkifSldfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOnUsY2xhc3NOYW1lOiJsZW0tZ2hvc3QgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0iLGRpc2FibGVkOkIuc3RhdHVzPT09ImlkbGUiJiZCLmFyYz09PTAsdGl0bGU6IlN0b3AgYW5kIGNsZWFyIHNpbXVsYXRlZCBsb2NhdGlvbiIsY2hpbGRyZW46W0ooZzAse30pLEooInNwYW4iLHtjaGlsZHJlbjoiU3RvcCJ9KV19KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46SihfNCx7YXJpYUxhYmVsOiJUcmFuc3BvcnQgbW9kZSIsdmFsdWU6WixvbkNoYW5nZTooZyk9PnEoZyksb3B0aW9uczpbe3ZhbHVlOiJ3YWxrIixsYWJlbDoiV2FsayIsaWNvbjpKKHUyLHt9KX0se3ZhbHVlOiJydW4iLGxhYmVsOiJSdW4iLGljb246SihvMix7fSl9LHt2YWx1ZToiY3ljbGUiLGxhYmVsOiJDeWNsZSIsaWNvbjpKKGQyLHt9KX0se3ZhbHVlOiJkcml2ZSIsbGFiZWw6IkRyaXZlIixpY29uOkooYzIse30pfV19KX0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e2xldCBnPVg1LmluZGV4T2YoRyksST1YNVsoZysxKSVYNS5sZW5ndGhdO1koSSl9LGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMi41IGJvcmRlciByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgbWluLXctWzU2cHhdICR7Rz4xPyJsZW0tc3BlZWQgbGVtLXNwZWVkLW9uIGJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSI6ImxlbS1zcGVlZCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7R33DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtHfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltKKGwyLHt9KSxHPjEmJkooInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W0csIsOXIl19KV19KV19KSxGJiZKKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkZ9KV19KV19KX12YXIgTjU9azAoZnVuY3Rpb24oe2xhYmVsOiQsdmFsdWU6S30pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjokfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46S30pXX0pfSk7ZnVuY3Rpb24gXzQoe3ZhbHVlOkMsb25DaGFuZ2U6JCxvcHRpb25zOkssYXJpYUxhYmVsOlh9KXtyZXR1cm4gSigiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46Sy5tYXAoKE4pPT57bGV0IFE9Ti52YWx1ZT09PUM7cmV0dXJuIEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+JChOLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7UT8ibGVtLXNlZyBsZW0tc2VnLWFjdGl2ZSBiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImxlbS1zZWcgYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS82MCJ9YCwiYXJpYS1wcmVzc2VkIjpRLCJhcmlhLWxhYmVsIjpOLmljb24/Ti5sYWJlbDp2b2lkIDAsdGl0bGU6Ti5pY29uP04ubGFiZWw6dm9pZCAwLGNoaWxkcmVuOk4uaWNvbj8/Ti5sYWJlbH0sTi52YWx1ZSl9KX0pfWZ1bmN0aW9uIGs0KHtwcmVwYXJlZDpDfSl7aWYoQy5yYXdNYXhBbHQtQy5yYXdNaW5BbHQ8NSlyZXR1cm4gbnVsbDtyZXR1cm4gSihOMSx7Y2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltKKFoyLHtkaXI6InVwIn0pLCIgIixEOChDLnJhd01heEFsdCldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiByaWdodC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltKKFoyLHtkaXI6ImRvd24ifSksIiAiLEQ4KEMucmF3TWluQWx0KV19KV19KX12YXIgQjg9MTQwO2Z1bmN0aW9uIF84KEMsJCl7bGV0IEs9QXJyYXkoJCk7Zm9yKGxldCBYPTA7WDwkO1grKyl7bGV0IE49JD09PTE/MDpYLygkLTEpLFE9UTAoQyxOKkMudG90YWxEaXN0YW5jZSk7S1tYXT17eDpRLngseTpRLnksejpRLnp9fXJldHVybiBLfWZ1bmN0aW9uIEQ0KEMsJCxLLFgpe2xldCBOPShDLmJvdW5kcy54WzBdK0MuYm91bmRzLnhbMV0pLzIsUT0oQy5ib3VuZHMuelswXStDLmJvdW5kcy56WzFdKS8yLFo9Qy5ib3VuZHMueVswXSxxPU1hdGgubWF4KDEsQy5ib3VuZHMueFsxXS1DLmJvdW5kcy54WzBdLEMuYm91bmRzLnpbMV0tQy5ib3VuZHMuelswXSksRz0oSy5ib3VuZHMueFswXStLLmJvdW5kcy54WzFdKS8yLFk9KEsuYm91bmRzLnpbMF0rSy5ib3VuZHMuelsxXSkvMixCPUsuYm91bmRzLnlbMF0sRj1NYXRoLm1heCgxLEsuYm91bmRzLnhbMV0tSy5ib3VuZHMueFswXSxLLmJvdW5kcy56WzFdLUsuYm91bmRzLnpbMF0pL3EsQT1fOChDLEI4KS5tYXAoKFIpPT4oe3g6KFIueC1OKSpGK0cseTooUi55LVopKkYrQix6OihSLnotUSkqRitZfSkpLF89XzgoSyxCOCksRD0oQy50cmFpbC5sb29wfHxLLnRyYWlsLmxvb3ApPz8hMSx6PVU0KEEsXyxEKSx3PVEwKEMsJCksRT17eDoody54LU4pKkYrRyx5Oih3LnktWikqRitCLHo6KHcuei1RKSpGK1l9LHk9UTAoSywwKSxjPXt4OnkueCx5OnkueSx6Onkuen07cmV0dXJue2Zyb206Qyx0bzpLLGZyb21QdHM6QSx0b1B0czp6LHByZXZNYXJrZXI6RSxuZXh0TWFya2VyOmMsc3RhcnRNczpYfX1mdW5jdGlvbiBVNChDLCQsSyl7bGV0IFg9Qy5sZW5ndGgsTj0xLzAsUT0wLFo9ITEscT1bJCxbLi4uJF0ucmV2ZXJzZSgpXTtmb3IobGV0IEI9MDtCPHEubGVuZ3RoO0IrKyl7bGV0IEw9cVtCXSxGPUs/WDoxO2ZvcihsZXQgaz0wO2s8RjtrKyspe2xldCBBPTA7Zm9yKGxldCBfPTA7XzxYO18rKyl7bGV0IEQ9Q1tfXSx6PUxbKF8rayklWF0sdz1ELngtei54LEU9RC55LXoueSx5PUQuei16Lno7aWYoQSs9dyp3K0UqRSt5KnksQT49TilicmVha31pZihBPE4pTj1BLFE9ayxaPUI9PT0xfX1sZXQgRz1aP1suLi4kXS5yZXZlcnNlKCk6JCxZPUFycmF5KFgpO2ZvcihsZXQgQj0wO0I8WDtCKyspWVtCXT1HWyhCK1EpJVhdO3JldHVybiBZfWZ1bmN0aW9uIEY0KEMsJCl7bGV0IEs9Qy5mcm9tUHRzLmxlbmd0aCxYPUFycmF5KEspLE49MCxRPW51bGwsWj0xLzAscT0tMS8wLEc9MS8wLFk9LTEvMCxCPTEvMCxMPS0xLzA7Zm9yKGxldCBGPTA7RjxLO0YrKyl7bGV0IGs9Qy5mcm9tUHRzW0ZdLEE9Qy50b1B0c1tGXSxfPWsueCsoQS54LWsueCkqJCxEPWsueSsoQS55LWsueSkqJCx6PWsueisoQS56LWsueikqJDtpZihRKXtsZXQgRT1fLVEueCx5PUQtUS55LGM9ei1RLno7Tis9TWF0aC5zcXJ0KEUqRSt5KnkrYypjKX1sZXQgdz17eDpfLHk6RCx6LGFyYzpOLGxhdDowLGxuZzowfTtpZihYW0ZdPXcsUT13LF88WilaPV87aWYoXz5xKXE9XztpZihEPEcpRz1EO2lmKEQ+WSlZPUQ7aWYoejxCKUI9ejtpZih6PkwpTD16fXJldHVybnt0cmFpbDpDLnRvLnRyYWlsLG9yaWdpbjpDLnRvLm9yaWdpbixwb2ludHM6WCx0b3RhbERpc3RhbmNlOk4sYm91bmRzOnt4OltaLHFdLHk6W0csWV0sejpbQixMXX0scmF3TWluQWx0OkMudG8ucmF3TWluQWx0KyhDLmZyb20ucmF3TWluQWx0LUMudG8ucmF3TWluQWx0KSooMS0kKSxyYXdNYXhBbHQ6Qy50by5yYXdNYXhBbHQrKEMuZnJvbS5yYXdNYXhBbHQtQy50by5yYXdNYXhBbHQpKigxLSQpfX1mdW5jdGlvbiB6NChDKXtyZXR1cm4gQzwwLjU/MipDKkM6MS1NYXRoLnBvdygtMipDKzIsMikvMn1mdW5jdGlvbiBINChDLCQsSyxYLE4sUSxaKXtsZXQgcT1DLmdldENvbnRleHQoIjJkIik7aWYoIXEpcmV0dXJuO2xldHtjbGllbnRXaWR0aDpHLGNsaWVudEhlaWdodDpZfT1DO2lmKEc9PT0wfHxZPT09MClyZXR1cm47bGV0IEI9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE6MSxMPU1hdGgucm91bmQoRypCKSxGPU1hdGgucm91bmQoWSpCKTtpZihDLndpZHRoIT09THx8Qy5oZWlnaHQhPT1GKUMud2lkdGg9TCxDLmhlaWdodD1GO3Euc2V0VHJhbnNmb3JtKEIsMCwwLEIsMCwwKSxxLmNsZWFyUmVjdCgwLDAsRyxZKTtsZXQgaz1xLmNyZWF0ZVJhZGlhbEdyYWRpZW50KEcqMC41LFkqMC41NSxNYXRoLm1pbihHLFkpKjAuMixHKjAuNSxZKjAuNTUsTWF0aC5tYXgoRyxZKSowLjg1KTtrLmFkZENvbG9yU3RvcCgwLCIjMWExYTFkIiksay5hZGRDb2xvclN0b3AoMSwiIzBhMGEwYyIpLHEuZmlsbFN0eWxlPWsscS5maWxsUmVjdCgwLDAsRyxZKSxBNChxLEcsWSk7bGV0e3BvaW50czpBLGJvdW5kczpffT0kO2lmKEEubGVuZ3RoPDIpcmV0dXJuO2xldCBEPTI4Kk1hdGguUEkvMTgwLHo9TWF0aC5zaW4oRCksdz1NYXRoLmNvcyhEKSxFPU1hdGguc2luKFgpLHk9TWF0aC5jb3MoWCksYz0oXy54WzBdK18ueFsxXSkvMixSPShfLnpbMF0rXy56WzFdKS8yLGg9Xy54WzFdLV8ueFswXSx4PV8uelsxXS1fLnpbMF0scD1fLnlbMV0tXy55WzBdLGQ9TWF0aC5tYXgoaCx4KSoxLjA1LHU9TWF0aC5tYXgoeCp3K3AqeixoKjAuNCkqMS4xNSwkMT1HKjAuMDgsYT1ZKjAuMTgscj1NYXRoLm1pbigoRy0kMSoyKS9kLChZLWEqMikvdSkqMS40NSxnPXA8MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCxwKSksST0oVCxTLGopPT57bGV0IGk9VC1jLHQ9ai1SLFkxPWkqeSt0KkUsWjE9LWkqRSt0KnksRjE9UypnLFMxPUYxKnctWjEqeixHMT1GMSp6K1oxKnc7cmV0dXJue3N4OkcvMitZMSpyLHN5OlkqMC41NS1TMSpyLGRlcHRoOkcxfX0sSzE9Mzgsbj1BLm1hcCgoVCk9PntsZXQgUz1JKFQueCxULnksVC56KSxqPUkoVC54LDAsVC56KSxpPXtzeDpTLnN4LHN5Ok1hdGgubWF4KGouc3ksUy5zeStLMSksZGVwdGg6ai5kZXB0aH07cmV0dXJue3A6VCx0b3A6Uyxib3Q6aX19KTtmb3IobGV0IFQ9MTtUPG4ubGVuZ3RoO1QrKyl7bGV0IFM9bltULTFdLGo9bltUXSxpPXEuY3JlYXRlTGluZWFyR3JhZGllbnQoKFMudG9wLnN4K2oudG9wLnN4KS8yLChTLnRvcC5zeStqLnRvcC5zeSkvMiwoUy5ib3Quc3grai5ib3Quc3gpLzIsKFMuYm90LnN5K2ouYm90LnN5KS8yKTtpLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIiksaS5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLGkuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSxpLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDAsMCwwLDApIikscS5maWxsU3R5bGU9aSxxLmJlZ2luUGF0aCgpLHEubW92ZVRvKFMudG9wLnN4LFMudG9wLnN5KSxxLmxpbmVUbyhqLnRvcC5zeCxqLnRvcC5zeSkscS5saW5lVG8oai5ib3Quc3gsai5ib3Quc3kpLHEubGluZVRvKFMuYm90LnN4LFMuYm90LnN5KSxxLmNsb3NlUGF0aCgpLHEuZmlsbCgpfXEuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLHEubGluZVdpZHRoPTEuNixxLmxpbmVDYXA9InJvdW5kIixxLmxpbmVKb2luPSJyb3VuZCIscS5iZWdpblBhdGgoKTtmb3IobGV0IFQ9MDtUPG4ubGVuZ3RoO1QrKyl7bGV0e3RvcDpTfT1uW1RdO2lmKFQ9PT0wKXEubW92ZVRvKFMuc3gsUy5zeSk7ZWxzZSBxLmxpbmVUbyhTLnN4LFMuc3kpfXEuc3Ryb2tlKCk7bGV0IEoxPUs7cS5zdHJva2VTdHlsZT0iI2Y5ZDJhNCIscS5saW5lV2lkdGg9Mi4yLHEuYmVnaW5QYXRoKCk7bGV0IGU9ITE7Zm9yKGxldCBUPTA7VDxuLmxlbmd0aDtUKyspe2xldHtwOlMsdG9wOmp9PW5bVF07aWYoUy5hcmM+SjEpYnJlYWs7aWYoIWUpcS5tb3ZlVG8oai5zeCxqLnN5KSxlPSEwO2Vsc2UgcS5saW5lVG8oai5zeCxqLnN5KX1pZihlKXEuc3Ryb2tlKCk7bGV0IHM9Wj8/UTAoJCxLKSxYMT1JKHMueCxzLnkscy56KTtpZihRKXtsZXQgaj1OJTI2MDAvMjYwMCxpPTQrMjIqaix0PTAuMjIqKDEtaiksWTE9cS5jcmVhdGVSYWRpYWxHcmFkaWVudChYMS5zeCxYMS5zeSxpKjAuNSxYMS5zeCxYMS5zeSxpKTtZMS5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLFkxLmFkZENvbG9yU3RvcCgwLjcsYHJnYmEoMjU1LDI1NSwyNTUsJHt0LnRvRml4ZWQoMyl9KWApLFkxLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDI1NSwyNTUsMjU1LDApIikscS5maWxsU3R5bGU9WTEscS5iZWdpblBhdGgoKSxxLmFyYyhYMS5zeCxYMS5zeSxpLDAsTWF0aC5QSSoyKSxxLmZpbGwoKX1xLmZpbGxTdHlsZT0iI2ZmZiIscS5iZWdpblBhdGgoKSxxLmFyYyhYMS5zeCxYMS5zeSwzLjgsMCxNYXRoLlBJKjIpLHEuZmlsbCgpfWZ1bmN0aW9uIEE0KEMsJCxLKXtDLmZpbGxTdHlsZT0icmdiYSgyNTUsMjU1LDI1NSwwLjA2KSI7Zm9yKGxldCBRPTc7UTxLO1ErPTE0KWZvcihsZXQgWj03O1o8JDtaKz0xNClDLmJlZ2luUGF0aCgpLEMuYXJjKFosUSwwLjcsMCxNYXRoLlBJKjIpLEMuZmlsbCgpfWZ1bmN0aW9uIFE1KEMpe2lmKEM8MTAwMClyZXR1cm5gJHtDLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeyhDLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiBrOChDKXtsZXQgJD1NYXRoLmZsb29yKEMvMTAwMCksSz1NYXRoLmZsb29yKCQvMzYwMCksWD1NYXRoLmZsb29yKCQlMzYwMC82MCksTj0kJTYwO2lmKEs+MClyZXR1cm5gJHtLfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Ti50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke1h9OiR7Ti50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIE80KEMpe2lmKEM8PTApcmV0dXJuIuKAlCI7aWYoQz43KXJldHVybmAkeyhDKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0ICQ9MTAwMC9DLEs9TWF0aC5mbG9vcigkLzYwKSxYPU1hdGgucm91bmQoJCU2MCk7cmV0dXJuYCR7S306JHtYLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gRDgoQyl7cmV0dXJuYCR7Qy50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiBVOChDKXtsZXQgJD1DLnRyaW0oKTtpZighJClyZXR1cm4iIjtsZXQgSz0kLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoSylyZXR1cm4gS1sxXTtyZXR1cm4gJC5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/JH1hc3luYyBmdW5jdGlvbiBMMShDKXtsZXQgJD13aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4sSz17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifTtpZigkKUsuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7JH1gO3JldHVybihhd2FpdCBmZXRjaCh4MSgiZXhlYyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6Syxib2R5OkpTT04uc3RyaW5naWZ5KHtjb21tYW5kOkN9KX0pKS5qc29uKCl9ZnVuY3Rpb24gQjEoQyl7cmV0dXJuYCcke0MucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWFzeW5jIGZ1bmN0aW9uIFo1KEMsJCxLKXtsZXQgWD1hd2FpdCBDKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHskfSAke0IxKEspfSBhcHBgKTtpZihYLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6WC5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgTj1YLnN0ZG91dC50cmltKCk7aWYoIU4pcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBRPWF3YWl0IEMoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtCMShOKyIvSW5mby5wbGlzdCIpfWApLFo9e307aWYoUS5leGl0Q29kZT09PTApdHJ5e1o9SlNPTi5wYXJzZShRLnN0ZG91dCl9Y2F0Y2h7fWxldCBxLFk9KFo/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P1o/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/Wj8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoWSYmWS5sZW5ndGg+MClxPVlbWS5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgWj8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKXE9Wi5DRkJ1bmRsZUljb25GaWxlO2xldCBCPW51bGw7aWYocSl7bGV0IEw9W2Ake3F9QDN4LnBuZ2AsYCR7cX1AMngucG5nYCxgJHtxfS5wbmdgLGAke3F9NjB4NjBAM3gucG5nYCxgJHtxfTYweDYwQDJ4LnBuZ2BdLGs9KGF3YWl0IEMoYGJhc2ggLWMgJHtCMShMLm1hcCgoQSk9PmBbIC1mICR7QjEoTisiLyIrQSl9IF0gJiYgZWNobyAke0IxKE4rIi8iK0EpfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKGspe2xldCBBPWF3YWl0IEMoYGJhc2U2NCAtaSAke0IxKGspfWApO2lmKEEuZXhpdENvZGU9PT0wKUI9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke0Euc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpOLGRpc3BsYXlOYW1lOlouQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/Wi5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOlouQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpaLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpaLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpaLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpCfX12YXIgYjA9bmV3IE1hcDtmdW5jdGlvbiB6OChDLCQsSyl7bGV0IFg9YCR7JH06JHtLfWAsTj1iMC5nZXQoWCk7aWYoTiE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKE4pO2xldCBRPVo1KEMsJCxLKS50aGVuKChaKT0+e2xldCBxPVouaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIGIwLnNldChYLHEpLHF9KS5jYXRjaCgoKT0+e3JldHVybiBiMC5zZXQoWCxudWxsKSxudWxsfSk7cmV0dXJuIGIwLnNldChYLFEpLFF9ZnVuY3Rpb24gSDgoe3VkaWQ6QyxjdXJyZW50QXBwOiR9KXtsZXRbSyxYXT1PKG51bGwpLFtOLFFdPU8oITEpO2lmKFcoKCk9PntpZighJCl7WChudWxsKTtyZXR1cm59bGV0IFo9ITE7cmV0dXJuIFgoe2J1bmRsZUlkOiQuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTokLmlzUmVhY3ROYXRpdmUscGlkOiQucGlkLGxvYWRpbmc6ITB9KSxaNShMMSxDLCQuYnVuZGxlSWQpLnRoZW4oKHEpPT57aWYoWilyZXR1cm47WCh7YnVuZGxlSWQ6JC5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOiQuaXNSZWFjdE5hdGl2ZSxwaWQ6JC5waWQsbG9hZGluZzohMSwuLi5xfSl9KSwoKT0+e1o9ITB9fSxbQywkLCQ/LmJ1bmRsZUlkLCQ/LnBpZCwkPy5pc1JlYWN0TmF0aXZlXSksIUspcmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtWzEwcHhdIHAtNCB0ZXh0LXdoaXRlLzUwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjoiV2FpdGluZyBmb3IgYW4gYXBwIHRvIGNvbWUgdG8gdGhlIGZvcmVncm91bmTigKYifSk7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGZsZXggZmxleC1jb2wgZ2FwLTIuNSBweC0zIHB5LTIiLGNoaWxkcmVuOltKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PlEoKFopPT4hWiksY2xhc3NOYW1lOiJsZW0tdG9nZ2xlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvOTAgcHktMiBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIiwiYXJpYS1leHBhbmRlZCI6TixjaGlsZHJlbjpbSy5pY29uRGF0YVVybD9KKCJpbWciLHtzcmM6Sy5pY29uRGF0YVVybCxjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pOkooImRpdiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSJ9KSxKKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46W0suZGlzcGxheU5hbWU/P0suYnVuZGxlSWQsSy5sb2FkaW5nJiZKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQ1IGZvbnQtbm9ybWFsIixjaGlsZHJlbjoiIOKApiJ9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTpLLmJ1bmRsZUlkLGNoaWxkcmVuOksuYnVuZGxlSWR9KV19KSxKKGYxLHtvcGVuOk59KV19KSxOJiZKKE4xLHtjaGlsZHJlbjpbSy5lcnJvciYmSigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpLLmVycm9yfSksSigiZGwiLHtjbGFzc05hbWU6Im0tMCBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltKKFAwLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6Sy5zaG9ydFZlcnNpb24/YCR7Sy5zaG9ydFZlcnNpb259ICgke0suYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6Sy5sb2FkaW5nPyLigKYiOiLigJQifSksSihQMCx7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOksubWluT1M/PyhLLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksSihQMCx7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOksuZXhlY3V0YWJsZT8/KEsubG9hZGluZz8i4oCmIjoi4oCUIil9KSxKKFAwLHtsYWJlbDoiUElEIix2YWx1ZTpLLnBpZCE9bnVsbD9TdHJpbmcoSy5waWQpOiLigJQifSksSy5pc1JlYWN0TmF0aXZlJiZKKFAwLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLEooUDAse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6Sy5hcHBQYXRoPz8oSy5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpLLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57TDEoYG9wZW4gLVIgJHtCMShLLmFwcFBhdGgpfWApfSxpY29uOkooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooImxpbmUiLHt4MToiNyIseTE6IjE3Iix4MjoiMTciLHkyOiI3In0pLEooInBvbHlsaW5lIix7cG9pbnRzOiIxMCA3IDE3IDcgMTcgMTQifSldfSl9OnZvaWQgMH0pXX0pXX0pXX0pfWZ1bmN0aW9uIFAwKHtsYWJlbDpDLHZhbHVlOiQsbW9ubzpLLGFjdGlvbjpYfSl7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiZ3JvdXAgZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbSigiZHQiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzUwIHctMjEgc2hyaW5rLTAiLGNoaWxkcmVuOkN9KSxKKCJkZCIse2NsYXNzTmFtZTpgbS0wIHRleHQtd2hpdGUvOTAgZmxleC0xIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgcmVsYXRpdmUgJHtLPyJmb250LW1vbm8gdGV4dC1bMTFweF0iOiJ0ZXh0LVsxMnB4XSJ9YCx0aXRsZTokLGNoaWxkcmVuOlskLFgmJkooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCBib3R0b20tMCBwbC03IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQscmdiYSgyOCwyOCwzMCwwKV8wJSwjMWMxYzFlXzU1JSldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSx0cmFuc2Zvcm1fMC4xNXNfZWFzZV0gb3BhY2l0eS0wIHRyYW5zbGF0ZS14LTEgcG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBncm91cC1ob3Zlcjp0cmFuc2xhdGUteC0wIGdyb3VwLWhvdmVyOnBvaW50ZXItZXZlbnRzLWF1dG8iLGNoaWxkcmVuOkooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpYLm9uQ2xpY2ssdGl0bGU6WC50aXRsZSwiYXJpYS1sYWJlbCI6WC50aXRsZSxjbGFzc05hbWU6InctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZCB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46WC5pY29ufSl9KV19KV19KX12YXIgQTg9W3trZXk6ImNhbWVyYSIsbGFiZWw6IkNhbWVyYSJ9LHtrZXk6Im1pY3JvcGhvbmUiLGxhYmVsOiJNaWNyb3Bob25lIn0se2tleToicGhvdG9zIixsYWJlbDoiUGhvdG9zIn0se2tleToicGhvdG9zLWFkZCIsbGFiZWw6IkFkZCB0byBQaG90b3MifSx7a2V5OiJjb250YWN0cyIsbGFiZWw6IkNvbnRhY3RzIn0se2tleToiY2FsZW5kYXIiLGxhYmVsOiJDYWxlbmRhciJ9LHtrZXk6InJlbWluZGVycyIsbGFiZWw6IlJlbWluZGVycyJ9LHtrZXk6ImxvY2F0aW9uIixsYWJlbDoiTG9jYXRpb24ifSx7a2V5OiJsb2NhdGlvbi1hbHdheXMiLGxhYmVsOiJMb2NhdGlvbiAoQWx3YXlzKSJ9LHtrZXk6Im5vdGlmaWNhdGlvbnMiLGxhYmVsOiJOb3RpZmljYXRpb25zIn0se2tleToibW90aW9uIixsYWJlbDoiTW90aW9uIn0se2tleToibWVkaWEtbGlicmFyeSIsbGFiZWw6Ik1lZGlhIExpYnJhcnkifSx7a2V5OiJzaXJpIixsYWJlbDoiU2lyaSJ9XTtmdW5jdGlvbiBPOCh7dWRpZDpDLGJ1bmRsZUlkOiR9KXtsZXRbSyxYXT1PKHt9KSxbTixRXT1PKG51bGwpLFtaLHFdPU8obnVsbCksW0csWV09TyghMSksQj16MSgoKT0+e2xldCBrPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFrKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChrKSlyZXR1cm5gYnVuICR7QjEoayl9YDtpZigvXC5qcyQvLnRlc3QoaykpcmV0dXJuYG5vZGUgJHtCMShrKX1gO3JldHVybiBCMShrKX0sW10pO1coKCk9PntYKHt9KSxxKG51bGwpfSxbJF0pO2xldCBMPVAoYXN5bmMoayxBKT0+e2lmKCEkKXJldHVybjtsZXQgXz1gJHtrfToke0F9YDtRKF8pLHEobnVsbCk7dHJ5e2xldCBEPWF3YWl0IEwxKGAke0J9IHBlcm1pc3Npb25zICR7QX0gJHtrfSAke0IxKCQpfSAtZCAke0IxKEMpfWApO2lmKEQuZXhpdENvZGUhPT0wKXtxKEQuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtELmV4aXRDb2RlfSlgKTtyZXR1cm59WCgoeik9Pih7Li4ueixba106QT09PSJyZXNldCI/dm9pZCAwOkF9KSl9ZmluYWxseXtRKG51bGwpfX0sW0IsQywkXSksRj1QKGFzeW5jKCk9PntpZighJClyZXR1cm47USgiX19hbGxfXyIpLHEobnVsbCk7dHJ5e2xldCBrPWF3YWl0IEwxKGAke0J9IHBlcm1pc3Npb25zIHJlc2V0IGFsbCAke0IxKCQpfSAtZCAke0IxKEMpfWApO2lmKGsuZXhpdENvZGUhPT0wKXtxKGsuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtrLmV4aXRDb2RlfSlgKTtyZXR1cm59WCh7fSl9ZmluYWxseXtRKG51bGwpfX0sW0IsQywkXSk7aWYoISQpcmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtWzEwcHhdIHAtNCB0ZXh0LXdoaXRlLzUwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMgYXBwZWFyIG9uY2UgYW4gYXBwIGlzIGluIHRoZSBmb3JlZ3JvdW5kLiJ9KTtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gZmxleCBmbGV4LWNvbCBnYXAtMi41IHB4LTMgcHktMiIsY2hpbGRyZW46W0ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+WSgoayk9PiFrKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOkcsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLEooInNwYW4iLHt9KSxKKGYxLHtvcGVuOkd9KV19KSxHJiZaJiZKKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgbXQtMiIsY2hpbGRyZW46Wn0pLEcmJkooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgbXQtMiIsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToibWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbCBnYXAtMSBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOkE4Lm1hcCgoe2tleTprLGxhYmVsOkF9KT0+e2xldCBfPUtba107cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB4LTAuNSBweS0xIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46QX0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMC41IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCBwLTAuNSIscm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpBLGNoaWxkcmVuOltKKHE1LHthY3RpdmU6Xz09PSJncmFudCIscGVuZGluZzpOPT09YCR7a306Z3JhbnRgLG9uQ2xpY2s6KCk9PkwoaywiZ3JhbnQiKSx2YXJpYW50OiJncmFudCIsdGl0bGU6IkFsbG93IixjaGlsZHJlbjpKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpKKCJwb2x5bGluZSIse3BvaW50czoiNSAxMiAxMCAxNyAxOSA3In0pfSl9KSxKKHE1LHthY3RpdmU6Xz09PSJyZXZva2UiLHBlbmRpbmc6Tj09PWAke2t9OnJldm9rZWAsb25DbGljazooKT0+TChrLCJyZXZva2UiKSx2YXJpYW50OiJyZXZva2UiLHRpdGxlOiJEZW55IixjaGlsZHJlbjpKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSksSigibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSldfSl9KSxKKHE1LHthY3RpdmU6ITEscGVuZGluZzpOPT09YCR7a306cmVzZXRgLG9uQ2xpY2s6KCk9PkwoaywicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpKKEowLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxrKX0pfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KV19KSxHJiZKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQgcHQtMiIsY2hpbGRyZW46SigiYnV0dG9uIix7b25DbGljazpGLGRpc2FibGVkOk49PT0iX19hbGxfXyIsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InNlcnZlLXNpbSBwZXJtaXNzaW9ucyByZXNldCBhbGwiLGNoaWxkcmVuOk49PT0iX19hbGxfXyI/IuKApiI6IlJlc2V0IGFsbCJ9KX0pXX0pfWZ1bmN0aW9uIHE1KHthY3RpdmU6QyxwZW5kaW5nOiQsb25DbGljazpLLHZhcmlhbnQ6WCx0aXRsZTpOLGNoaWxkcmVuOlF9KXtsZXQgWj1YPT09ImdyYW50Ij8iIzRhZGU4MCI6WD09PSJyZXZva2UiPyIjZjg3MTcxIjoiI2E1YjRmYyI7cmV0dXJuIEooImJ1dHRvbiIse29uQ2xpY2s6SyxkaXNhYmxlZDokLHRpdGxlOk4sImFyaWEtbGFiZWwiOk4sY2xhc3NOYW1lOiJ3LTYgaC01LjUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLW5vbmUgcm91bmRlZCBwLTAgY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10iLHN0eWxlOntiYWNrZ3JvdW5kOkM/YCR7Wn0yMmA6InRyYW5zcGFyZW50Iixjb2xvcjpDP1o6InJnYmEoMjU1LDI1NSwyNTUsMC41NSkiLG9wYWNpdHk6JD8wLjU6MX0sY2hpbGRyZW46UX0pfXZhciBUND0iYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIixNND0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiLFQ4PSJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItd2hpdGUvMTAgcm91bmRlZC1bMTBweF0gcC0zIHRleHQtd2hpdGUvNTAgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiO2Z1bmN0aW9uIE04KHtvdmVybGF5RW5hYmxlZDpDLG9uVG9nZ2xlT3ZlcmxheTokfSl7bGV0e3NuYXBzaG90Okt9PXowKCkse2hpZ2hsaWdodGVkS2V5Olgsc2V0SGlnaGxpZ2h0ZWRLZXk6Tn09TDIoKSxRPUs/LmVsZW1lbnRzPz9bXSxaPXEyKEspLHE9Sz8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZTpgJHtUNH0gcHgtMyBweS0yYCxjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOk00LGNoaWxkcmVuOiJBWCBUcmVlIn0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazokLCJhcmlhLXByZXNzZWQiOkMsY2xhc3NOYW1lOiJib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzVweF0gYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS83MCBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMHB4XSBweC1bN3B4XSBweS1bM3B4XSIsY2hpbGRyZW46Qz8iT3ZlcmxheSBvbiI6IkVuYWJsZSBvdmVybGF5In0pXX0pLCFDP251bGw6Wj9KKCJkaXYiLHtjbGFzc05hbWU6VDgsY2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpRLmxlbmd0aD09PTA/SigiZGl2Iix7Y2xhc3NOYW1lOlQ4LGNoaWxkcmVuOnE/PyJXYWl0aW5nIGZvciBhY2Nlc3NpYmlsaXR5IGRhdGHigKYifSk6SigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIG10LTIgcHktMiBtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpRLm1hcCgoRyxZKT0+e2xldCBCPU4wKEcpO3JldHVybiBKKHc0LHtlbGVtZW50OkcsaW5kZXg6WSxhY3RpdmU6Qj09PVgsb25IaWdobGlnaHQ6Tn0sQil9KX0pXX0pfXZhciB3ND1rMChmdW5jdGlvbih7ZWxlbWVudDokLGluZGV4OkssYWN0aXZlOlgsb25IaWdobGlnaHQ6Tn0pe2xldCBRPU4wKCQpLFo9RzIoJCxLKSxxPWAke01hdGgucm91bmQoJC5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZCgkLmZyYW1lLmhlaWdodCl9YCxHPVtaLmxhYmVsLFoucm9sZXx8Wi50eXBlfHwiZWxlbWVudCIscV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gSigiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpRLHRpdGxlOkcsb25Nb3VzZUVudGVyOigpPT5OKFEpLG9uTW91c2VMZWF2ZTooKT0+TihudWxsKSxvbkZvY3VzOigpPT5OKFEpLG9uQmx1cjooKT0+TihudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtYPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOiQubGFiZWx8fCQucm9sZXx8IlVubGFiZWxlZCJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46JC5yb2xlfHwkLnR5cGV8fCJlbGVtZW50In0pXX0pLEooImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOnF9KV19KX0sKEMsJCk9PkMuaW5kZXg9PT0kLmluZGV4JiZDLmFjdGl2ZT09PSQuYWN0aXZlJiZDLm9uSGlnaGxpZ2h0PT09JC5vbkhpZ2hsaWdodCYmWTIoQy5lbGVtZW50LCQuZWxlbWVudCkpO3ZhciBiND1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKTtmdW5jdGlvbiBXMChDKXtsZXQgJD1DLm5hbWUsSz0kLmxhc3RJbmRleE9mKCIuIik7aWYoSz49MClyZXR1cm4gJC5zbGljZShLKzEpLnRvTG93ZXJDYXNlKCk7aWYoQy50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiJtcDQiO3JldHVybiJqcGcifWZ1bmN0aW9uIHc4KEMpe2lmKFcwKEMpPT09ImlwYSIpcmV0dXJuImlwYSI7aWYoYjQuaGFzKEMudHlwZSkpcmV0dXJuIm1lZGlhIjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBiOChDKXtsZXQgJD1uZXcgVWludDhBcnJheShDKSxLPSIiO2ZvcihsZXQgWD0wO1g8JC5sZW5ndGg7WCsrKUsrPVN0cmluZy5mcm9tQ2hhckNvZGUoJFtYXSk7cmV0dXJuIGJ0b2EoSyl9YXN5bmMgZnVuY3Rpb24gUDgoQywkLEssWCl7aWYoQy5zaXplPjUyNDI4ODAwMCl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgTj1gL3RtcC8keyR9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtLfWAsUT1hd2FpdCBDLmFycmF5QnVmZmVyKCksWj1iOChRKTtmb3IobGV0IHE9MDtxPFoubGVuZ3RoO3ErPTI2MjE0NCl7bGV0IEc9Wi5zbGljZShxLHErMjYyMTQ0KSxCPWF3YWl0IFgoYGJhc2ggLWMgJ2VjaG8gJHtHfSB8IGJhc2U2NCAtZCAke3E9PT0wPyI+IjoiPj4ifSAke059J2ApO2lmKEIuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKEIuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7Qi5leGl0Q29kZX0pYCl9cmV0dXJuIE59YXN5bmMgZnVuY3Rpb24gVzgoQywkLEssWCxOKXtpZihDLnNpemU+NTI0Mjg4MDAwKXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBRPSQ9PT0iaXBhIj8iaXBhIjpXMChDKSxxPWAvdG1wLyR7JD09PSJpcGEiPyJzZXJ2ZS1zaW0taW5zdGFsbCI6InNlcnZlLXNpbS11cGxvYWQifS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7UX1gO3RyeXtOKDApO2xldCBHPWF3YWl0IEMuYXJyYXlCdWZmZXIoKSxZPWI4KEcpLEI9MDtmb3IobGV0IGs9MDtrPFkubGVuZ3RoO2srPTI2MjE0NCl7bGV0IEE9WS5zbGljZShrLGsrMjYyMTQ0KSxEPWF3YWl0IEsoYGJhc2ggLWMgJ2VjaG8gJHtBfSB8IGJhc2U2NCAtZCAke2s9PT0wPyI+IjoiPj4ifSAke3F9J2ApO2lmKEQuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKEQuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7RC5leGl0Q29kZX0pYCk7bGV0IHo9TWF0aC5taW4oaysyNjIxNDQsWS5sZW5ndGgpLHc9TWF0aC5mbG9vcih6L1kubGVuZ3RoKjEwMCk7aWYodyE9PUIpQj13LE4oei9ZLmxlbmd0aCl9TihudWxsKTtsZXQgTD0kPT09ImlwYSI/YHhjcnVuIHNpbWN0bCBpbnN0YWxsICR7WH0gJHtxfWA6YHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke1h9ICR7cX1gLEY9YXdhaXQgSyhMKTtpZihGLmV4aXRDb2RlIT09MCl7bGV0IGs9JD09PSJpcGEiPyJpbnN0YWxsIjoiYWRkbWVkaWEiO3Rocm93IEVycm9yKEYuc3RkZXJyfHxgJHtrfSBmYWlsZWQgKGV4aXQgJHtGLmV4aXRDb2RlfSlgKX19ZmluYWxseXtLKGBiYXNoIC1jICdybSAtZiAke3F9J2ApLmNhdGNoKCgpPT57fSl9fXZhciBQND0zMDAwLFc0PTIwOTcxNTIwMCx5ND0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5IixFOD0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiBFNChDLCQpe2lmKCQpcmV0dXJuImFjdGl2ZSI7aWYoQz09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKEM9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiBDfWZ1bmN0aW9uIEk0KEMpe2lmKCFDLmluamVjdGVkKXJldHVybiJwbGF5IjtpZihDLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKEMuYnVuZGxlSWQmJiFDLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBTNChDKXtyZXR1cm4gQy5zcGxpdChgCmApLm1hcCgoJCk9PiQudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoJCk9PntsZXQgSz0kLmluZGV4T2YoIlx0Iik7aWYoSzw9MClyZXR1cm5bXTtsZXQgWD0kLnNsaWNlKDAsSykudHJpbSgpLE49JC5zbGljZShLKzEpLnRyaW0oKTtpZighWHx8IU4pcmV0dXJuW107cmV0dXJuW3tpZDpYLG5hbWU6Tn1dfSl9dmFyIGg0PW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gSTgoQyl7aWYoQy50eXBlJiZDLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0ICQ9KEMubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksSz0kLmxhc3RJbmRleE9mKCIuIik7aWYoSzwwKXJldHVybiExO3JldHVybiBoNC5oYXMoJC5zbGljZShLKzEpKX1mdW5jdGlvbiB4NChDKXtyZXR1cm4gSTgoQykmJkMuc2l6ZT5XNH1mdW5jdGlvbiB2NChDKXtsZXQgJD0oQy50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZigkPT09ImltYWdlL2hlaWMifHwkPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBLPShDLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBLLmVuZHNXaXRoKCIuaGVpYyIpfHxLLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIGc0KHtyYXdNZXNzYWdlOkMsbGFzdEZpbGVJc0hlaWM6JCxzb3VyY2U6S30pe2lmKCQmJihLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpKXJldHVybiBFODtyZXR1cm4gQ31mdW5jdGlvbiBSNCh7c3RhdGU6Q30pe2xldCAkPUM9PT0iYWN0aXZlIj8iQWN0aXZlIjpDPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixLPUM9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6Qz09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjpDLGNoaWxkcmVuOltLJiZKKCJzcGFuIix7Y2xhc3NOYW1lOkt9KSwkXX0pfWZ1bmN0aW9uIG00KCl7cmV0dXJuIEooInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIGo0KHttb2RlOkMsZmlsZU5hbWU6JCx3ZWJjYW1OYW1lOkssc291cmNlS2luZDpYfSl7aWYoQz09PSJ1cGxvYWRpbmciKXJldHVybiBKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKEM9PT0iZmlsZSIpcmV0dXJuIEooTjEse2NoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46WD09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksSigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOiQ/PyIifSldfSk7aWYoQz09PSJ3ZWJjYW0iKXJldHVybiBKKE4xLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOiJXZWJjYW0ifSksSigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOks/PyIifSldfSk7cmV0dXJuIEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvODUgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJTZWxlY3Qgb3IgZHJvcCBtZWRpYSJ9KX1mdW5jdGlvbiB5OCh7a2luZDpDLG1lc3NhZ2U6JH0pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6Qz09PSJ3YXJuaW5nIj8iYmctd2FybmluZy8xMCBib3JkZXIgYm9yZGVyLXdhcm5pbmcvMjUgdGV4dC13YXJuaW5nLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyI6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiLCJkYXRhLWNhbWVyYS1iYW5uZXIta2luZCI6Qyxyb2xlOkM9PT0iZXJyb3IiPyJhbGVydCI6InN0YXR1cyIsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIFM4KHt1ZGlkOkMsYnVuZGxlSWQ6JH0pe2xldFtLLFhdPU8oITEpLFtOLFFdPU8oInBsYWNlaG9sZGVyIiksW1oscV09TygiIiksW0csWV09TyhudWxsKSxbQixMXT1PKCExKSxGPXYoMCksW2ssQV09TyghMSksW18sRF09TyghMSksej12KG51bGwpLFt3LEVdPU8oW10pLFt5LGNdPU8oITEpLFtSLGhdPU8oIiIpLFt4LHBdPU8oIm9mZiIpLFtkLHVdPU8obnVsbCksWyQxLGFdPU8obnVsbCkscj1kIT09bnVsbHx8JDEhPT1udWxsLFtnLEldPU8obnVsbCksW0sxLG5dPU8obnVsbCksWyxKMV09TyhudWxsKSxbZSxzXT1PKCExKSxbWDEsVF09TygicmVhZHkiKSxbUyxqXT1PKCgpPT5uZXcgU2V0KSxbaSx0XT1PKG51bGwpLFtZMSxaMV09TyhudWxsKSxGMT12KCExKSxTMT12KCExKSxHMT12KCJvZmYiKSxQMT12KCExKSxDMT16MSgoKT0+e2xldCBIPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFIKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChIKSlyZXR1cm5gYnVuICR7QjEoSCl9YDtpZigvXC5qcyQvLnRlc3QoSCkpcmV0dXJuYG5vZGUgJHtCMShIKX1gO3JldHVybiBCMShIKX0sW10pLHExPVAoYXN5bmMoKT0+e2xldCBIPWF3YWl0IEwxKGAke0MxfSBjYW1lcmEgc3RhdHVzIC1kICR7Q31gKTtpZihILmV4aXRDb2RlIT09MClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEpTT04ucGFyc2UoSC5zdGRvdXQudHJpbSgpKX1jYXRjaHtyZXR1cm4gbnVsbH19LFtDMSxDXSksaDE9dihhc3luYygpPT57fSksUjE9digkKTtXKCgpPT57UjEuY3VycmVudD0kfSxbJF0pLFcoKCk9PntsZXQgSD0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCBtPWF3YWl0IHExKCk7aWYoSHx8IW18fCFtLmFsaXZlKXJldHVybjtTMS5jdXJyZW50PSEwO2xldCBvPW0uc291cmNlO2lmKG89PT0icGxhY2Vob2xkZXIifHxvPT09IndlYmNhbSJ8fG89PT0iaW1hZ2UifHxvPT09InZpZGVvIilRKG8pO2lmKChvPT09ImltYWdlInx8bz09PSJ2aWRlbyIpJiZtLmFyZylxKG0uYXJnKSxZKG0uYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKG89PT0id2ViY2FtIiYmbS5hcmcpaChtLmFyZyksaDEuY3VycmVudCgpO2xldCBWMT1tLm1pcnJvcj09PSJvbiI/Im9uIjoib2ZmIjtwKFYxKSxHMS5jdXJyZW50PVYxLHQobS5oZWxwZXJQaWQ/P251bGwpLHMoITApO2xldCBEMT1BcnJheS5pc0FycmF5KG0uYnVuZGxlSWRzKT9tLmJ1bmRsZUlkczpbXTtpZihEMS5sZW5ndGg+MClqKG5ldyBTZXQoRDEpKTtsZXQgazE9UjEuY3VycmVudCxiMT1vJiZvIT09InBsYWNlaG9sZGVyIjtUKGsxJiZEMS5pbmNsdWRlcyhrMSkmJmIxPyJhY3RpdmUiOiJyZWFkeSIpLEoxKGBSZWF0dGFjaGVkIOKGkiAke28/PyJydW5uaW5nIGhlbHBlciJ9JHttLmFyZz9gICgke20uYXJnfSlgOiIifWApfSkoKSwoKT0+e0g9ITB9fSxbQyxxMV0pLFcoKCk9PntsZXQgSD0hMSxtPSExLG89bnVsbCxWMT1hc3luYygpPT57aWYoSHx8bSlyZXR1cm47aWYodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpcmV0dXJuO209ITA7dHJ5e2xldCBrMT1hd2FpdCBxMSgpO2lmKEgpcmV0dXJuO2xldCBiMT0hIWsxPy5hbGl2ZSxwMD1BcnJheS5pc0FycmF5KGsxPy5idW5kbGVJZHMpP2sxLmJ1bmRsZUlkczpudWxsLHkwPSEhJCYmKHAwP3AwLmluY2x1ZGVzKCQpOlMuaGFzKCQpKSxMMD1rMT8uc291cmNlPz9udWxsLFYwPWUmJmIxJiZ5MCYmISEoTDAmJkwwIT09InBsYWNlaG9sZGVyIikmJihpPT1udWxsfHxrMT8uaGVscGVyUGlkPT09aSk7aWYoVCgoaTEpPT5FNChpMSxWMCkpLCFiMSlzKChpMSk9PntpZighaTEpcmV0dXJuIGkxO3JldHVybiBqKG5ldyBTZXQpLHQobnVsbCksRzEuY3VycmVudD0ib2ZmIiwhMX0pO2Vsc2UgaWYoZSYmaSE9bnVsbCYmazE/LmhlbHBlclBpZCE9PWkpcyghMSksaihuZXcgU2V0KSx0KG51bGwpLEcxLmN1cnJlbnQ9Im9mZiI7ZWxzZSBpZihiMSYmQXJyYXkuaXNBcnJheShrMT8uYnVuZGxlSWRzKSl7bGV0IGkxPWsxLmJ1bmRsZUlkcztqKCh6Mik9PntpZih6Mi5zaXplPT09aTEubGVuZ3RoJiZpMS5ldmVyeSgobjgpPT56Mi5oYXMobjgpKSlyZXR1cm4gejI7cmV0dXJuIG5ldyBTZXQoaTEpfSl9fWZpbmFsbHl7bT0hMX19O289c2V0SW50ZXJ2YWwoKCk9PntWMSgpfSxQNCk7bGV0IEQxPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiKVYxKCl9O2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsRDEpO3JldHVybigpPT57aWYoSD0hMCxvKWNsZWFySW50ZXJ2YWwobyk7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixEMSl9fSxbcTEsZSxpLCQsU10pO2xldCBXMT1QKGFzeW5jKCk9PntjKCEwKSxJKG51bGwpO3RyeXtsZXQgSD1hd2FpdCBMMShgJHtDMX0gY2FtZXJhIC0tbGlzdC13ZWJjYW1zYCk7aWYoSC5leGl0Q29kZSE9PTApe0koSC5zdGRlcnIudHJpbSgpfHxgLS1saXN0LXdlYmNhbXMgZmFpbGVkICgke0guZXhpdENvZGV9KWApO3JldHVybn1sZXQgbT1TNChILnN0ZG91dCk7aWYoRShtKSxtLmxlbmd0aD4wJiYhUiloKG1bMF0uaWQpfWZpbmFsbHl7YyghMSl9fSxbUixDMV0pO1coKCk9PntoMS5jdXJyZW50PVcxfSxbVzFdKSxXKCgpPT57aWYoXyYmdy5sZW5ndGg9PT0wJiYheSlXMSgpfSxbXyx3Lmxlbmd0aCx5LFcxXSk7bGV0IG0xPVAoKEgpPT57SShnNCh7cmF3TWVzc2FnZTpILGxhc3RGaWxlSXNIZWljOkYxLmN1cnJlbnQsc291cmNlOk59KSl9LFtOXSkscTA9UChhc3luYyhILG0sbyk9PntsZXQgVjE9SD09PSJpbWFnZSJ8fEg9PT0idmlkZW8iLEQxPVsiY2FtZXJhIiwic3dpdGNoIixWMT8iZmlsZSI6SF07aWYoSD09PSJ3ZWJjYW0iJiZtKUQxLnB1c2goQjEobSkpO2lmKFYxKXtpZighby50cmltKCkpcmV0dXJuIEkoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIiksITE7RDEucHVzaChCMShvLnRyaW0oKSkpfUQxLnB1c2goIi1kIixDLCItLXF1aWV0Iik7bGV0IGsxPWF3YWl0IEwxKGAke0MxfSAke0QxLmpvaW4oIiAiKX1gKTtpZihrMS5leGl0Q29kZSE9PTApcmV0dXJuIG0xKGsxLnN0ZGVyci50cmltKCl8fGsxLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke2sxLmV4aXRDb2RlfSlgKSwhMTtGMS5jdXJyZW50PSExO3RyeXtsZXQgYjE9SlNPTi5wYXJzZShrMS5zdGRvdXQudHJpbSgpKTtKMShgU3dpdGNoZWQg4oaSICR7YjEuc291cmNlPz9IfSR7YjEuYXJnP2AgKCR7YjEuYXJnfSlgOiIifWApfWNhdGNoe0oxKGBTd2l0Y2hlZCDihpIgJHtIfWApfXJldHVybiEwfSxbQyxDMSxtMV0pLHYxPVAoYXN5bmMoKT0+e2lmKCEkKXJldHVybjt1KCJpbmplY3QiKSxJKG51bGwpLEoxKG51bGwpO3RyeXtsZXQgSD1bImNhbWVyYSIsQjEoJCksIi1kIixDLCItLXF1aWV0Il07aWYoTj09PSJpbWFnZSJ8fE49PT0idmlkZW8iKXtpZighWi50cmltKCkpe0koIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufUgucHVzaCgiLS1maWxlIixCMShaLnRyaW0oKSkpfWVsc2UgaWYoTj09PSJ3ZWJjYW0iKWlmKFIpSC5wdXNoKCItLXdlYmNhbSIsQjEoUikpO2Vsc2UgSC5wdXNoKCItLXdlYmNhbSIpO0gucHVzaCgiLS1taXJyb3IiLHgpO2xldCBtPWF3YWl0IEwxKGAke0MxfSAke0guam9pbigiICIpfWApO2lmKG0uZXhpdENvZGUhPT0wKXttMShtLnN0ZGVyci50cmltKCl8fG0uc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7bS5leGl0Q29kZX0pYCk7cmV0dXJufUYxLmN1cnJlbnQ9ITE7bGV0IG89bnVsbDt0cnl7bGV0IFYxPUpTT04ucGFyc2UobS5zdGRvdXQudHJpbSgpKTtvPVYxLmhlbHBlclBpZD8/bnVsbDtsZXQgRDE9VjEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixrMT1WMS5waWQ/YCBwaWQgJHtWMS5waWR9YDoiIixiMT1WMS5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke1YxLmhlbHBlclBpZH1gOiIiO0oxKGAke0QxfSAke1YxLnNvdXJjZT8/Tn0gaW50byAkeyR9JHtrMX0ke2IxfWApfWNhdGNoe0oxKG0uc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfXMoITApLFQoTj09PSJwbGFjZWhvbGRlciI/InJlYWR5IjoiYWN0aXZlIiksdChvKSxqKChWMSk9PlYxLmhhcygkKT9WMTpuZXcgU2V0KFYxKS5hZGQoJCkpLEcxLmN1cnJlbnQ9eH1maW5hbGx5e3UobnVsbCl9fSxbJCxDLE4sWixSLHgsQzEsbTFdKSxUMT1lP2Ake059Ojoke049PT0id2ViY2FtIj9SOiIifTo6JHtOPT09ImltYWdlInx8Tj09PSJ2aWRlbyI/WjoiIn1gOm51bGwsQTE9ISEkJiZTLmhhcygkKSxqMT1BMSYmTiE9PSJwbGFjZWhvbGRlciI7VygoKT0+e2lmKCFqMSl7UDEuY3VycmVudD0hMTtyZXR1cm59aWYoUDEuY3VycmVudClyZXR1cm47UDEuY3VycmVudD0hMCxYKCEwKX0sW2oxXSksVygoKT0+e2lmKCFZMSlyZXR1cm47aWYoISR8fHJ8fGspcmV0dXJuO2lmKE4hPT0id2ViY2FtInx8UiE9PVkxKXJldHVybjtpZihaMShudWxsKSxlKXJldHVybjt2MSgpfSxbWTEsJCxyLGssTixSLGUsdjFdKSxXKCgpPT57aWYoIWUpcmV0dXJuO2lmKChOPT09ImltYWdlInx8Tj09PSJ2aWRlbyIpJiYhWi50cmltKCkpcmV0dXJuO2lmKE49PT0id2ViY2FtIiYmIVIpcmV0dXJuO2lmKFMxLmN1cnJlbnQpe1MxLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBIPSExO3JldHVybihhc3luYygpPT57YSgic3dpdGNoIiksSShudWxsKTt0cnl7aWYoSClyZXR1cm47YXdhaXQgcTAoTixSLFopfWZpbmFsbHl7aWYoIUgpYShudWxsKX19KSgpLCgpPT57SD0hMH19LFtUMV0pLFcoKCk9PntpZighZSlyZXR1cm47aWYoRzEuY3VycmVudD09PXgpcmV0dXJuO2xldCBIPXgsbT0hMTtyZXR1cm4oYXN5bmMoKT0+e2EoIm1pcnJvciIpLEkobnVsbCk7dHJ5e2xldCBvPWF3YWl0IEwxKGAke0MxfSBjYW1lcmEgbWlycm9yICR7SH0gLWQgJHtDfSAtLXF1aWV0YCk7aWYobSlyZXR1cm47aWYoby5leGl0Q29kZSE9PTApe0koby5zdGRlcnIudHJpbSgpfHxvLnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke28uZXhpdENvZGV9KWApO3JldHVybn1HMS5jdXJyZW50PUgsSjEoYE1pcnJvciDihpIgJHtIfWApfWZpbmFsbHl7aWYoIW0pYShudWxsKX19KSgpLCgpPT57bT0hMH19LFt4LGVdKTtsZXQgQzA9UChhc3luYygpPT57dSgic3RvcCIpLEkobnVsbCk7dHJ5e2xldCBIPWF3YWl0IEwxKGAke0MxfSBjYW1lcmEgLS1zdG9wLXdlYmNhbSAtZCAke0N9YCk7aWYoSC5leGl0Q29kZSE9PTApe0koSC5zdGRlcnIudHJpbSgpfHxgc3RvcC13ZWJjYW0gZmFpbGVkICgke0guZXhpdENvZGV9KWApO3JldHVybn1KMSgiQ2FtZXJhIGhlbHBlciBzdG9wcGVkLiIpLHMoITEpLFQoInJlYWR5IiksaihuZXcgU2V0KSxHMS5jdXJyZW50PSJvZmYifWZpbmFsbHl7dShudWxsKX19LFtDLEMxXSkseTE9UChhc3luYyhIKT0+e2xldCBtPXY0KHt0eXBlOkgudHlwZSxuYW1lOkgubmFtZX0pLG89SC50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpfHxtLFYxPUgudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKXx8STgoe3R5cGU6SC50eXBlLG5hbWU6SC5uYW1lfSk7aWYoIW8mJiFWMSl7RjEuY3VycmVudD0hMSxJKGBVbnN1cHBvcnRlZCBmaWxlIHR5cGU6ICR7SC50eXBlfHxILm5hbWV9YCk7cmV0dXJufWlmKEEoITApLEkobnVsbCksbihudWxsKSx4NCh7dHlwZTpILnR5cGUsbmFtZTpILm5hbWUsc2l6ZTpILnNpemV9KSluKHk0KTtGMS5jdXJyZW50PW07dHJ5e2xldCBEMT1XMChIKSxrMT1hd2FpdCBQOChILCJzZXJ2ZS1zaW0tY2Ftc3JjIixEMSxMMSk7WShILm5hbWUpLFEoVjE/InZpZGVvIjoiaW1hZ2UiKSxxKGsxKSxKMShgTG9hZGVkICR7SC5uYW1lfWApfWNhdGNoKEQxKXtpZihGMS5jdXJyZW50KUkoRTgpO2Vsc2UgSShEMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e0EoITEpfX0sW10pLCQwPVAoYXN5bmMoSCk9PntILnByZXZlbnREZWZhdWx0KCksSC5zdG9wUHJvcGFnYXRpb24oKSxGLmN1cnJlbnQ9MCxMKCExKTtsZXQgbT1ILmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZihtKWF3YWl0IHkxKG0pfSxbeTFdKSxLMD1QKCgpPT57USgicGxhY2Vob2xkZXIiKSxxKCIiKSxZKG51bGwpLEkobnVsbCksbihudWxsKSxGMS5jdXJyZW50PSExfSxbXSksZzE9UCgoKT0+e3ouY3VycmVudD8uY2xpY2soKX0sW10pLFkwPVAoYXN5bmMoSCk9PntsZXQgbT1ILnRhcmdldCxvPW0uZmlsZXM/LlswXTtpZihtLnZhbHVlPSIiLG8pYXdhaXQgeTEobyl9LFt5MV0pO1coKCk9PntpZighXylyZXR1cm47bGV0IEg9KG0pPT57bGV0IG89bS50YXJnZXQ7aWYobyBpbnN0YW5jZW9mIEVsZW1lbnQmJm8uY2xvc2VzdCgiW2RhdGEtY2FtZXJhLXNvdXJjZS1tZW51XSIpKXJldHVybjtEKCExKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEgpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixIKX0sW19dKTtsZXQgTTE9UCgoSCk9PntpZihoKEguaWQpLFEoIndlYmNhbSIpLFkobnVsbCksSShudWxsKSxGMS5jdXJyZW50PSExLEQoITEpLCQpWjEoSC5pZCl9LFskXSksRzA9UCgoKT0+e3AoKEgpPT5IPT09Im9uIj8ib2ZmIjoib24iKX0sW10pLGMxPSFlfHxOPT09InBsYWNlaG9sZGVyIixRMT1QKChIKT0+e2lmKEgucHJldmVudERlZmF1bHQoKSxGLmN1cnJlbnQrKyxGLmN1cnJlbnQ9PT0xKUwoITApfSxbXSksdzE9UCgoSCk9PntpZihILnByZXZlbnREZWZhdWx0KCksSC5kYXRhVHJhbnNmZXIpSC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtdKSxhMT1QKChIKT0+e2lmKEgucHJldmVudERlZmF1bHQoKSxGLmN1cnJlbnQtLSxGLmN1cnJlbnQ8PTApRi5jdXJyZW50PTAsTCghMSl9LFtdKSxsMT1JNCh7YnVuZGxlSWQ6JCxpbmplY3RlZDplLHNvdXJjZTpOLGZvcmVncm91bmRJc0luamVjdGVkOkExfSksRTE9bDE9PT0ic3RvcCI/e2xhYmVsOmQ9PT0ic3RvcCI/IlN0b3BwaW5n4oCmIjoiU3RvcCIsb25DbGljazpDMCxraW5kOiJzdG9wIn06bDE9PT0iYXR0YWNoIj97bGFiZWw6ZD09PSJpbmplY3QiPyJJbmplY3RpbmfigKYiOmBJbmplY3QgJHskfWAsb25DbGljazp2MSxraW5kOiJhdHRhY2gifTp7bGFiZWw6ZD09PSJpbmplY3QiPyJTdGFydGluZ+KApiI6IlBsYXkiLG9uQ2xpY2s6djEsa2luZDoicGxheSJ9LFgwPWwxPT09InN0b3AiP2t8fGQhPT1udWxsOiEkfHxrfHxkIT09bnVsbCxWPU49PT0icGxhY2Vob2xkZXIiLFU9Tj09PSJ3ZWJjYW0iLE09KE49PT0iaW1hZ2UifHxOPT09InZpZGVvIikmJiEhRyxiPVU/dy5maW5kKChIKT0+SC5pZD09PVIpPy5uYW1lPz9SPz8iV2ViY2FtIjpudWxsLGY9az8idXBsb2FkaW5nIjpNPyJmaWxlIjpVPyJ3ZWJjYW0iOiJwbGFjZWhvbGRlciI7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGZsZXggZmxleC1jb2wgZ2FwLTIuNSBweC0zIHB5LTIiLGNoaWxkcmVuOltKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PlgoKEgpPT4hSCksY2xhc3NOYW1lOiJsZW0tdG9nZ2xlIGdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS85MCBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSBjdXJzb3ItcG9pbnRlciB3LVtjYWxjKDEwMCUrOHB4KV0gdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUiLCJhcmlhLWV4cGFuZGVkIjpLLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJDYW1lcmEifSksSihSNCx7c3RhdGU6WDF9KSxKKGYxLHtvcGVuOkt9KV19KSxLJiZKKCJkaXYiLHtvbkRyYWdFbnRlcjpRMSxvbkRyYWdPdmVyOncxLG9uRHJhZ0xlYXZlOmExLG9uRHJvcDokMCxjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTIuNSIsY2hpbGRyZW46W0ooInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOiJSZXBsYWNlcyB0aGUgc2ltdWxhdG9yJ3MgY2FtZXJhIGZlZWQgYnkgaW5qZWN0aW5nIGEgZHlsaWIgYXQgYXBwIGxhdW5jaCBhbmQgc3RyZWFtaW5nIGZyYW1lcyBpbnRvIHNoYXJlZCBtZW1vcnkuIFBpY2sgbWVkaWEgb3IgYSB3ZWJjYW0sIHRoZW4gUGxheSB0byBpbmplY3QgaW50byB0aGUgZm9yZWdyb3VuZCBhcHAuIn0pLEooImlucHV0Iix7cmVmOnosdHlwZToiZmlsZSIsYWNjZXB0OiJpbWFnZS8qLHZpZGVvLyoiLGNsYXNzTmFtZToiaGlkZGVuIixvbkNoYW5nZTpZMH0pLEooImRpdiIse29uQ2xpY2s6KEgpPT57aWYoIVYpcmV0dXJuO2lmKEgudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWNsZWFyLW1lZGlhXSIpKXJldHVybjtnMSgpfSx0aXRsZTpWPyJObyBzb3VyY2Ugc2VsZWN0ZWQg4oCUIFBsYXkgdXNlcyBhIHRlc3QtcGF0dGVybiBmZWVkLiBDbGljayB0byBwaWNrIGFuIGltYWdlL3ZpZGVvLCBvciBkcm9wIG9uZSBoZXJlLiI6VT9gU291cmNlOiAke2J9YDpgU291cmNlOiAke0c/P059YCxjbGFzc05hbWU6WyJyZWxhdGl2ZSBtaW4taC1bNDRweF0gZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIuNSBweC0zLjUgcHktMi41IHJvdW5kZWQtWzdweF0gdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1bYm9yZGVyLWNvbG9yLGJhY2tncm91bmRdIGR1cmF0aW9uLTE1MCIsVj8iYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMiI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLEI/IiFiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMDgpXSAhYm9yZGVyLVtyZ2JhKDEwLDEzMiwyNTUsMC42KV0iOiIiLGs/ImN1cnNvci1wcm9ncmVzcyI6Vj8iY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3ItZGVmYXVsdCJdLmpvaW4oIiAiKSxjaGlsZHJlbjpbSihqNCx7bW9kZTpmLGZpbGVOYW1lOkcsd2ViY2FtTmFtZTpiLHNvdXJjZUtpbmQ6Tn0pLCFWJiYhayYmSigiYnV0dG9uIix7ImRhdGEtY2xlYXItbWVkaWEiOiEwLG9uQ2xpY2s6KEgpPT57SC5zdG9wUHJvcGFnYXRpb24oKSxLMCgpfSxjbGFzc05hbWU6InNocmluay0wIHctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtbGFiZWwiOiJDbGVhciBzb3VyY2UiLHRpdGxlOiJDbGVhciDihpIgcGxhY2Vob2xkZXIiLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSxKKCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KV19KX0pXX0pLFYmJiFrJiZKKG00LHt9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsImRhdGEtY2FtZXJhLXNvdXJjZS1tZW51IjohMCxjaGlsZHJlbjpbSigiYnV0dG9uIix7b25DbGljazooKT0+RCgoSCk9PiFIKSxjbGFzc05hbWU6ImxlbS1naG9zdCBoLWZ1bGwgbWluLWgtWzM2cHhdIHctMTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzg1IHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgcC0wIiwiYXJpYS1oYXNwb3B1cCI6Im1lbnUiLCJhcmlhLWV4cGFuZGVkIjpfLHRpdGxlOk49PT0id2ViY2FtIj9gU291cmNlOiB3ZWJjYW0ke1I/YCAoJHt3LmZpbmQoKEgpPT5ILmlkPT09Uik/Lm5hbWU/P1J9KWA6IiJ9IOKAlCBjbGljayB0byBjaGFuZ2VgOmBTb3VyY2U6ICR7Tn0g4oCUIGNsaWNrIHRvIHBpY2sgbWVkaWEgb3Igd2ViY2FtYCwiYXJpYS1sYWJlbCI6IkNob29zZSBjYW1lcmEgc291cmNlIixjaGlsZHJlbjpKKCJzdmciLHt3aWR0aDoiMjAiLGhlaWdodDoiMjAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigicGF0aCIse2Q6Im0yMiAxMS0xLjI5Ni0xLjI5NmEyLjQgMi40IDAgMCAwLTMuNDA4IDBMMTEgMTYifSksSigicGF0aCIse2Q6Ik00IDhhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTIifSksSigiY2lyY2xlIix7Y3g6IjEzIixjeToiNyIscjoiMSIsZmlsbDoiY3VycmVudENvbG9yIn0pLEooInJlY3QiLHt4OiI4Iix5OiIyIix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIyIn0pXX0pfSksXyYmSigiZGl2Iix7cm9sZToibWVudSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs2cHgpXSBsZWZ0LTAgei0xMCBtaW4tdy1bMjAwcHhdIGZsZXggZmxleC1jb2wgZ2FwLXB4IHAtMSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQpXSIsY2hpbGRyZW46W0ooImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6InRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsb25DbGljazooKT0+e0QoITEpLGcxKCl9LHRpdGxlOiJQaWNrIGFuIGltYWdlIG9yIHZpZGVvIGZyb20gZGlzayIsY2hpbGRyZW46IkJyb3dzZSBtZWRpYeKApiJ9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImgtcHggYmctd2hpdGUvOCBteS0xIn0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHBsLTIuNSBwci0yIHB0LTEgcGItWzJweF0iLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSIsY2hpbGRyZW46eT8iQ2FtZXJhcyAobG9hZGluZ+KApikiOncubGVuZ3RoPT09MD8iTm8gY2FtZXJhcyI6IkNhbWVyYXMifSksSigiYnV0dG9uIix7b25DbGljazooSCk9PntILnN0b3BQcm9wYWdhdGlvbigpLFcxKCl9LGRpc2FibGVkOnksY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LVsyMnB4XSBoLVsyMnB4XSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAgZGlzYWJsZWQ6b3BhY2l0eS01MCIsImFyaWEtbGFiZWwiOiJSZWZyZXNoIGNhbWVyYXMiLHRpdGxlOiJSZWZyZXNoIGNhbWVyYXMiLGNoaWxkcmVuOkooSjAse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mn0pfSldfSksdy5tYXAoKEgpPT57bGV0IG09Tj09PSJ3ZWJjYW0iJiZSPT09SC5pZDtyZXR1cm4gSigiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZTpbInRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLG0/IiFiZy13aGl0ZS9bMC4xMl0gIXRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzg1Il0uam9pbigiICIpLG9uQ2xpY2s6KCk9Pk0xKEgpLHRpdGxlOkgubmFtZSxjaGlsZHJlbjpILm5hbWV9LEguaWQpfSldfSldfSksSigiYnV0dG9uIix7b25DbGljazpFMS5vbkNsaWNrLGRpc2FibGVkOlgwLGNsYXNzTmFtZTpbImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMi41IGJvcmRlci1ub25lIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpvcGFjaXR5LTUwIG1pbi1oLVszNnB4XSIsRTEua2luZD09PSJzdG9wIj8ibGVtLXByaW1hcnkgbGVtLXByaW1hcnktb24gYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUiOiJsZW0tcHJpbWFyeSBiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0iXS5qb2luKCIgIiksdGl0bGU6RTEua2luZD09PSJzdG9wIj8iU3RvcCB0aGUgY2FtZXJhIGhlbHBlciBhbmQgdGVybWluYXRlIGluamVjdGVkIGFwcHMiOkUxLmtpbmQ9PT0iYXR0YWNoIj9gSW5qZWN0ICR7JH0gc28gaXQgam9pbnMgdGhlIGNhbWVyYSBmZWVkYDohJD8iQnJpbmcgYW4gYXBwIHRvIHRoZSBmb3JlZ3JvdW5kIGZpcnN0IjoiU3RhcnQ6IGluamVjdCB0aGUgZHlsaWIgYW5kIGxhdW5jaCB0aGUgZm9yZWdyb3VuZCBhcHAgd2l0aCB0aGUgY2hvc2VuIHNvdXJjZSIsImFyaWEtcHJlc3NlZCI6RTEua2luZD09PSJzdG9wIiwiYXJpYS1sYWJlbCI6RTEua2luZD09PSJzdG9wIj8iU3RvcCI6IlBsYXkiLGNoaWxkcmVuOltFMS5raW5kPT09InN0b3AiP0ooZzAse30pOkoodjAse30pLEooInNwYW4iLHtjaGlsZHJlbjpFMS5raW5kPT09InN0b3AiPyJTdG9wIjpFMS5raW5kPT09ImF0dGFjaCI/IkluamVjdCI6IlBsYXkifSldfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkcwLGRpc2FibGVkOmMxLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xMCBtaW4taC1bMzZweF0gYm9yZGVyIHJvdW5kZWQtWzdweF0gZm9udC1baW5oZXJpdF0gZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgJHt4PT09Im9uIj8ibGVtLXNwZWVkIGxlbS1zcGVlZC1vbiBiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gY3Vyc29yLXBvaW50ZXIiOiJsZW0tc3BlZWQgYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsImFyaWEtbGFiZWwiOmBNaXJyb3I6ICR7eH0g4oCUIHRhcCB0byB0b2dnbGVgLHRpdGxlOmMxPyJNaXJyb3IgdG9nZ2xlIGF2YWlsYWJsZSBvbmNlIGEgc291cmNlIGlzIHN0cmVhbWluZyI6YE1pcnJvcjogJHt4fSDigJQgY2xpY2sgdG8gdG9nZ2xlYCwiYXJpYS1wcmVzc2VkIjp4PT09Im9uIixjaGlsZHJlbjpKKCJzdmciLHt3aWR0aDoiMjAiLGhlaWdodDoiMjAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDp4PT09Im9uIj8iY3VycmVudENvbG9yIjoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3In0pLEooInBhdGgiLHtkOiJtMjEgNy01IDUgNSA1VjcifSksSigicGF0aCIse2Q6Ik0xMiAyMHYyIn0pLEooInBhdGgiLHtkOiJNMTIgMTR2MiJ9KSxKKCJwYXRoIix7ZDoiTTEyIDh2MiJ9KSxKKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KV19KX0pXX0pLEsxJiZKKHk4LHtraW5kOiJ3YXJuaW5nIixtZXNzYWdlOksxfSksZyYmSih5OCx7a2luZDoiZXJyb3IiLG1lc3NhZ2U6Z30pXX0pXX0pfWZ1bmN0aW9uIGg4KHtvcGVuOkMsb25DbG9zZTokLHVkaWQ6SyxjdXJyZW50QXBwOlgsYXhPdmVybGF5RW5hYmxlZDpOLG9uVG9nZ2xlQXhPdmVybGF5OlEsd2lkdGg6Wn0pe3JldHVybiBKKE8wLHtvcGVuOkMsd2lkdGg6WixjaGlsZHJlbjpbSihUMCx7Y2hpbGRyZW46W0ooVjIse2NoaWxkcmVuOiJUb29scyJ9KSxKKE0wLHtvbkNsaWNrOiR9KV19KSxDJiZKKCJkaXYiLHtjbGFzc05hbWU6InAtMy41IG92ZXJmbG93LXktYXV0byBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMyIsY2hpbGRyZW46W0ooSDgse3VkaWQ6SyxjdXJyZW50QXBwOlh9KSxKKE04LHtvdmVybGF5RW5hYmxlZDpOLG9uVG9nZ2xlT3ZlcmxheTpRfSksSihTOCx7dWRpZDpLLGJ1bmRsZUlkOlg/LmJ1bmRsZUlkPz9udWxsfSksSihGOCx7dWRpZDpLLGV4ZWM6TDF9KSxKKE84LHt1ZGlkOkssYnVuZGxlSWQ6WD8uYnVuZGxlSWQ/P251bGx9KV19KV19KX1mdW5jdGlvbiBqMChDLCQpe2ZldGNoKHgxKCJkZXZ0b29scy9oaWdobGlnaHQiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3RhcmdldElkOkMsb246JH0pLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gWTUoKXtsZXQgQz14MSgiZGV2dG9vbHMvcmVsZWFzZSIpO3RyeXtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNlbmRCZWFjb24pe2xldCAkPW5ldyBCbG9iKFsie30iXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KTtpZihuYXZpZ2F0b3Iuc2VuZEJlYWNvbihDLCQpKXJldHVybn19Y2F0Y2h7fWZldGNoKEMse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OiJ7fSIsa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiB4OChDKXtsZXQgJD1DLmNvbnRlbnREb2N1bWVudDtpZighJClyZXR1cm47bGV0IEs9KCk9PntsZXQgUT1bJF07d2hpbGUoUS5sZW5ndGgpe2xldCBaPVEucG9wKCkscT1aLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxhYmVsXSxbdGl0bGVdIik7Zm9yKGxldCBHIG9mIHEpe2xldCBZPUcuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fEcudGl0bGV8fCIiO2lmKC9edG9nZ2xlIHNjcmVlbmNhc3QkL2kudGVzdChZKSlyZXR1cm4gR31mb3IobGV0IEcgb2YgWi5xdWVyeVNlbGVjdG9yQWxsKCIqIikpaWYoRy5zaGFkb3dSb290KVEucHVzaChHLnNoYWRvd1Jvb3QpfXJldHVybiBudWxsfSxYPTAsTj0oKT0+e1grKztsZXQgUT1LKCk7aWYoUSYmUS5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09ImZhbHNlIil7US5jbGljaygpO3JldHVybn1pZihYPDIwKXNldFRpbWVvdXQoTiwxMDApfTtOKCl9ZnVuY3Rpb24gdjgoQyl7bGV0ICQ9W10sSz1uZXcgTWFwO2ZvcihsZXQgWCBvZiBDKXtsZXQgTj1YLmFwcE5hbWV8fFguYnVuZGxlSWR8fCJVbmtub3duIixRPVguYnVuZGxlSWR8fE4sWj1LLmdldChRKTtpZighWilaPXtrZXk6USxhcHBOYW1lOk4sYnVuZGxlSWQ6WC5idW5kbGVJZCx0YXJnZXRzOltdfSxLLnNldChRLFopLCQucHVzaChRKTtaLnRhcmdldHMucHVzaChYKX1yZXR1cm4gJC5tYXAoKFgpPT5LLmdldChYKSl9ZnVuY3Rpb24gZzgoQywkKXtsZXRbSyxYXT1PKHt9KSxOPXoxKCgpPT4kLnNsaWNlKCkuc29ydCgpLmpvaW4oInwiKSxbJF0pO3JldHVybiBXKCgpPT57aWYoIUMpcmV0dXJuO2xldCBRPSExO2ZvcihsZXQgWiBvZiAkKXtpZighWiljb250aW51ZTtsZXQgcT1gJHtDfToke1p9YCxHPWIwLmdldChxKTtpZih0eXBlb2YgRz09PSJzdHJpbmcifHxHPT09bnVsbCl7WCgoWSk9PllbWl09PT1HP1k6ey4uLlksW1pdOkd9KTtjb250aW51ZX16OChMMSxDLFopLnRoZW4oKFkpPT57aWYoUSlyZXR1cm47WCgoQik9Pih7Li4uQixbWl06WX0pKX0pfXJldHVybigpPT57UT0hMH19LFtDLE5dKSxLfWZ1bmN0aW9uIFI4KHt1ZGlkOkMsdGFyZ2V0czokLHNlbGVjdGVkOkssb25TZWxlY3RUYXJnZXQ6WCxvblJlZnJlc2g6Tn0pe2xldCBRPXY4KCQpLFo9US5tYXAoKF8pPT5fLmJ1bmRsZUlkKS5maWx0ZXIoKF8pPT4hIV8pLHE9ZzgoQyxaKSxbRyxZXT1PKCExKSxbQixMXT1PKG51bGwpLEY9dihudWxsKSxrPXYobnVsbCk7VygoKT0+e2lmKCFHKXJldHVybjtsZXQgXz0oRCk9PntpZighay5jdXJyZW50KXJldHVybjtpZighay5jdXJyZW50LmNvbnRhaW5zKEQudGFyZ2V0KSlZKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyl9LFtHXSksVygoKT0+e2lmKEcpcmV0dXJuO2lmKEYuY3VycmVudClqMChGLmN1cnJlbnQsITEpLEYuY3VycmVudD1udWxsO1k1KCl9LFtHXSksVygoKT0+e2xldCBfPSgpPT5ZNSgpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLF8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLF8pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixfKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixfKX19LFtdKTtsZXQgQT1LPyhLLnRpdGxlfHxLLnVybHx8Sy5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKToiU2VsZWN0IHRhcmdldCI7cmV0dXJuIEooImRpdiIse3JlZjprLGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIG1pbi13LTAiLGNoaWxkcmVuOltKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntZKChfKT0+e2lmKCFfKU4oKTtyZXR1cm4hX30pfSxjbGFzc05hbWU6InctZnVsbCBtaW4tdy0wIGgtWzI2cHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBiZy1wYW5lbCB0ZXh0LXdoaXRlLzkwIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1tZCB0ZXh0LVsxMnB4XSBweC0yIGN1cnNvci1wb2ludGVyIHRleHQtbGVmdCIsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6RywiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBtaW4tdy0wIixjaGlsZHJlbjpBfSksSigic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46SigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksRyYmSigidWwiLHtyb2xlOiJsaXN0Ym94IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzRweCldIGxlZnQtMCBtLTAgcC0xIGxpc3Qtbm9uZSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gbWluLXctWzIyMHB4XSBtYXgtdy1bMzYwcHhdIG1heC1oLVszMjBweF0gb3ZlcmZsb3cteS1hdXRvIHotNTAiLGNoaWxkcmVuOlEubWFwKChfKT0+e2xldCBEPV8uYnVuZGxlSWQ/cVtfLmJ1bmRsZUlkXTpudWxsO3JldHVybiBKKCJsaSIse2NsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTEuNSBwdC0xIHBiLTAuNSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvWzAuOTJdIixjaGlsZHJlbjpbRD9KKCJpbWciLHtzcmM6RCxhbHQ6IiIsY2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIn0pOkooInNwYW4iLHtjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksSigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOl8uYXBwTmFtZX0pXX0pLEooInVsIix7cm9sZToiZ3JvdXAiLGNsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAgcGwtWzI2cHhdIixjaGlsZHJlbjpfLnRhcmdldHMubWFwKCh6KT0+e2xldCB3PUs/LmlkPT09ei5pZCxFPSEhei5pblVzZUJ5T3RoZXJJbnNwZWN0b3ImJiF3LHk9KHoudGl0bGV8fHoudXJsfHx6LmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApLGM9Qj09PXouaWQmJiFFLFI9ImZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdIjtyZXR1cm4gSigibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjp3LCJhcmlhLWRpc2FibGVkIjpFLHRhYkluZGV4OkU/LTE6MCx0aXRsZTpFPyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYoRSlyZXR1cm47aWYoRi5jdXJyZW50JiZGLmN1cnJlbnQhPT16LmlkKWowKEYuY3VycmVudCwhMSk7Ri5jdXJyZW50PXouaWQsTCh6LmlkKSxqMCh6LmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoRi5jdXJyZW50PT09ei5pZClqMCh6LmlkLCExKSxGLmN1cnJlbnQ9bnVsbDtMKCh4KT0+eD09PXouaWQ/bnVsbDp4KX0sb25DbGljazooKT0+e2lmKEUpcmV0dXJuO1goei5pZCksWSghMSl9LGNsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0gJHtFPyJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBpdGFsaWMgdGV4dC13aGl0ZS84NSI6Yz8iYmctW3JnYmEoMTAsMTMyLDI1NSwwLjIyKV0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6dz8iYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOiJ0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46eX0pLHoudXJsJiZ6LnVybCE9PSJhYm91dDpibGFuayImJkooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlL1swLjQyXSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46ei51cmx9KV19LHouaWQpfSl9KV19LF8ua2V5KX0pfSldfSl9ZnVuY3Rpb24gbTgoe29wZW46QyxvbkNsb3NlOiQsdWRpZDpLLHRhcmdldHM6WCxzZWxlY3RlZFRhcmdldElkOk4sb25TZWxlY3RUYXJnZXQ6USxsb2FkaW5nOlosZXJyb3I6cSxvblJlZnJlc2g6Ryx3aWR0aDpZfSl7bGV0IEI9Tj9YLmZpbmQoKEwpPT5MLmlkPT09Tik/P251bGw6bnVsbDtyZXR1cm4gSihPMCx7b3BlbjpDLHdpZHRoOlksY2hpbGRyZW46W0ooVDAse2NoaWxkcmVuOltYLmxlbmd0aD4wP0ooUjgse3VkaWQ6Syx0YXJnZXRzOlgsc2VsZWN0ZWQ6QixvblNlbGVjdFRhcmdldDpRLG9uUmVmcmVzaDpHfSk6Sigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS9bMC40OF0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOlo/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksSihNMCx7b25DbGljazokLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46cT9KKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46cX0pOkImJkM/SigiaWZyYW1lIix7c3JjOkIuZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtCLnRpdGxlfHxCLnVybHx8Qi5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOihMKT0+eDgoTC5jdXJyZW50VGFyZ2V0KX0sQi5pZCk6SigiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOkI/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24gajgoe2V4ZWM6Qyx1ZGlkOiQsZW5hYmxlZDpLLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOk4sb25VcGxvYWRFbmQ6USxvblVuc3VwcG9ydGVkOlp9KXtsZXRbcSxHXT1PKCExKSxZPXYoMCksQj1QKGFzeW5jKEEpPT57aWYoQS5wcmV2ZW50RGVmYXVsdCgpLEEuc3RvcFByb3BhZ2F0aW9uKCksWS5jdXJyZW50PTAsRyghMSksIUt8fCEkKXJldHVybjtsZXQgXz1BcnJheS5mcm9tKEEuZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihfLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgRCBvZiBfKXtsZXQgej13OChEKTtpZigheil7WihEKTtjb250aW51ZX1sZXQgdz1YKEQubmFtZSx6KTtXOChELHosQywkLChFKT0+Tih3LEUpKS50aGVuKCgpPT5RKHcsITApKS5jYXRjaCgoRSk9PlEodywhMSxFIGluc3RhbmNlb2YgRXJyb3I/RS5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW0ssJCxDLFgsTixRLFpdKSxMPVAoKEEpPT57aWYoQS5wcmV2ZW50RGVmYXVsdCgpLEspQS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtLXSksRj1QKChBKT0+e2lmKEEucHJldmVudERlZmF1bHQoKSwhSylyZXR1cm47aWYoWS5jdXJyZW50KyssWS5jdXJyZW50PT09MSlHKCEwKX0sW0tdKSxrPVAoKEEpPT57aWYoQS5wcmV2ZW50RGVmYXVsdCgpLFkuY3VycmVudC0tLFkuY3VycmVudDw9MClZLmN1cnJlbnQ9MCxHKCExKX0sW10pO3JldHVybntpc0RyYWdPdmVyOnEsZHJvcFpvbmVQcm9wczp7b25EcmFnT3ZlcjpMLG9uRHJhZ0VudGVyOkYsb25EcmFnTGVhdmU6ayxvbkRyb3A6Qn19fWZ1bmN0aW9uIHA4KEMpe2xldFskLEtdPU8obnVsbCksWD12KG5ldyBTZXQpLE49UCgoUSk9PntyZXR1cm4gWC5jdXJyZW50LmFkZChRKSwoKT0+e1guY3VycmVudC5kZWxldGUoUSl9fSxbXSk7cmV0dXJuIFcoKCk9PntpZighQylyZXR1cm47bGV0IFE9bmV3IEFib3J0Q29udHJvbGxlcixaPSExLHE9bnVsbCxHPUMucmVwbGFjZSgvXC9zdHJlYW1cLm1qcGVnJC8sIiIpLFk9KEQpPT57aWYoRC53aWR0aDw9MHx8RC5oZWlnaHQ8PTApcmV0dXJuO0soKHopPT56JiZ6LndpZHRoPT09RC53aWR0aCYmei5oZWlnaHQ9PT1ELmhlaWdodCYmei5vcmllbnRhdGlvbj09PUQub3JpZW50YXRpb24/ejpEKX0sQj0oKT0+e2ZldGNoKGAke0d9L2NvbmZpZ2Ase3NpZ25hbDpRLnNpZ25hbH0pLnRoZW4oKEQpPT5ELmpzb24oKSkudGhlbihZKS5jYXRjaCgoKT0+e30pfTtCKCk7bGV0IEw9c2V0SW50ZXJ2YWwoQiwxMDAwKSxGPW5ldyBVUkwoQyk7Ri5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IGs9Ri50b1N0cmluZygpLEE9KCk9PntpZihafHxRLnNpZ25hbC5hYm9ydGVkfHxxKXJldHVybjtxPXNldFRpbWVvdXQoKCk9PntxPW51bGwsXygpfSwxMDAwKX0sXz1hc3luYygpPT57dHJ5e2xldCB6PShhd2FpdCBmZXRjaChrLHtzaWduYWw6US5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIXope0EoKTtyZXR1cm59bGV0IHc9bmV3IFVpbnQ4QXJyYXkoMCk7d2hpbGUoITApe2xldHtkb25lOkUsdmFsdWU6eX09YXdhaXQgei5yZWFkKCk7aWYoRSlicmVhaztsZXQgYz1uZXcgVWludDhBcnJheSh3Lmxlbmd0aCt5Lmxlbmd0aCk7Yy5zZXQodyksYy5zZXQoeSx3Lmxlbmd0aCksdz1jO3doaWxlKCEwKXtsZXQgUj0tMTtmb3IobGV0IHU9MDt1PHcubGVuZ3RoLTE7dSsrKWlmKHdbdV09PT0yNTUmJndbdSsxXT09PTIxNil7Uj11O2JyZWFrfWlmKFI9PT0tMSlicmVhaztsZXQgaD0tMTtmb3IobGV0IHU9UisyO3U8dy5sZW5ndGgtMTt1KyspaWYod1t1XT09PTI1NSYmd1t1KzFdPT09MjE3KXtoPXUrMjticmVha31pZihoPT09LTEpYnJlYWs7bGV0IHg9dy5zbGljZShSLGgpO3c9dy5zbGljZShoKTtsZXQgcD1uZXcgQmxvYihbeF0se3R5cGU6ImltYWdlL2pwZWcifSksZD1VUkwuY3JlYXRlT2JqZWN0VVJMKHApO2lmKFguY3VycmVudC5zaXplPT09MCl7VVJMLnJldm9rZU9iamVjdFVSTChkKTtjb250aW51ZX1mb3IobGV0IHUgb2YgWC5jdXJyZW50KXUoZCl9fX1jYXRjaHt9ZmluYWxseXtBKCl9fTtyZXR1cm4gXygpLCgpPT57aWYoWj0hMCxxKWNsZWFyVGltZW91dChxKTtRLmFib3J0KCksY2xlYXJJbnRlcnZhbChMKX19LFtDXSkse3N1YnNjcmliZUZyYW1lOk4sZnJhbWU6bnVsbCxjb25maWc6JH19ZnVuY3Rpb24gVTIoQywkLEssWCl7bGV0IE49UCgoQik9Pk1hdGgubWF4KEssTWF0aC5taW4oWCxCKSksW0ssWF0pLFtRLFpdPU8oKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gJDtsZXQgQj13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oQyksTD1CIT1udWxsP051bWJlcihCKTpOYU47cmV0dXJuIE51bWJlci5pc0Zpbml0ZShMKT9OKEwpOiR9KSxxPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWluKFgsd2luZG93LmlubmVyV2lkdGgtMzIpOlgsRz1NYXRoLm1heChLLE1hdGgubWluKHEsUSkpLFk9UCgoQik9PntCLnByZXZlbnREZWZhdWx0KCk7bGV0IEw9Qi5jbGllbnRYLEY9RyxrPUIuY3VycmVudFRhcmdldDtrLnNldFBvaW50ZXJDYXB0dXJlKEIucG9pbnRlcklkKTtsZXQgQT0oRCk9PntsZXQgej1OKEYrKEwtRC5jbGllbnRYKSk7Wih6KX0sXz0oRCk9PntrLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShELnBvaW50ZXJJZCksay5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsQSksay5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLF8pLGsucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsXyk7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShDLFN0cmluZyhOKEYrKEwtRC5jbGllbnRYKSkpKX1jYXRjaHt9fTtrLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixBKSxrLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsXyksay5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixfKX0sW04sRyxDXSk7cmV0dXJue3dpZHRoOkcsb25Qb2ludGVyRG93bjpZfX1mdW5jdGlvbiBsOCh7ZGVmYXVsdFdpZHRoOkMsdmlld3BvcnRXaWR0aDokLHZpZXdwb3J0SGVpZ2h0OkssYXNwZWN0UmF0aW86WCxvblN0YXJ0Ok59KXtsZXQgUT1fMigpLFtaLHFdPU8oITEpLFtHLFldPU8oITEpLFtCLExdPU8oITEpLEY9dihudWxsKSxrPXYoW10pLEE9dihudWxsKSxfPXYobnVsbCksRD12KG51bGwpLHo9dihudWxsKSx3PXYobnVsbCksRT16MSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBDO3RyeXtsZXQgVD13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oZTIpLFM9VCE9bnVsbD9OdW1iZXIoVCk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoUyk/QypTOkN9Y2F0Y2h7cmV0dXJuIEN9fSxbQ10pLFt5LGNdPU8oRSksUj1DNShDLCQsSyxYKSxoPU1hdGgubWluKHgzLFIpLHg9eT8/QyxwPXcwKHgsQywkLEssWCksZD1QKChUKT0+e2xldCBTPUQyKFQpO3ouY3VycmVudD1TLGMoUyl9LFtdKSx1PVAoKFQpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fEM8PTApcmV0dXJuO2xldCBTPXcwKFQsQywkLEssWCk7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShlMixTdHJpbmcoUy9DKSl9Y2F0Y2h7fX0sW1gsQyxLLCRdKSwkMT1QKChUKT0+e2lmKEQuY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoRC5jdXJyZW50KTtELmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0QuY3VycmVudD1udWxsLHUoVCl9LEs4KX0sW3VdKTtXKCgpPT57aWYoWnx8RylyZXR1cm47bGV0IFQ9ei5jdXJyZW50O2lmKFQ9PW51bGwpcmV0dXJuO2xldCBTPXcwKFQsQywkLEssWCk7aWYoUyE9PVQpZChTKX0sW1gsQyxHLFosSywkLGRdKSxXKCgpPT57ZChFKX0sW0UsZF0pLFcoKCk9PntpZighWiYmIUcpcmV0dXJuO2xldCBUPWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yLFM9ZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0LGo9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0O3JldHVybiBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0ibndzZS1yZXNpemUiLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIiwoKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPVQsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PVMsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PWp9fSxbWixHXSksVygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgVD0oKT0+e2xldCBqPXouY3VycmVudDtpZihqPT1udWxsKXJldHVybjtpZihELmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KEQuY3VycmVudCksRC5jdXJyZW50PW51bGw7dShqKX0sUz0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKVQoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsVCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLFQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFMpfX0sW3VdKTtsZXQgYT1QKChUKT0+e2lmKFQ+UilyZXR1cm4gUiskNShULVIsUik7aWYoVDxoKXJldHVybiBoLSQ1KGgtVCxSKTtyZXR1cm4gVH0sW1IsaF0pLHI9UCgoKT0+e2lmKF8uY3VycmVudClfLmN1cnJlbnQoKSxfLmN1cnJlbnQ9bnVsbDtZKCExKX0sW10pLGc9UCgoVCk9PntsZXQgUz1wZXJmb3JtYW5jZS5ub3coKSxqPWsuY3VycmVudDtqLnB1c2goe3Q6Uyx4OlR9KTt3aGlsZShqLmxlbmd0aD4xJiZTLWpbMF0udD4kOClqLnNoaWZ0KCl9LFtdKSxJPVAoKFQpPT57bGV0IFM9YShUKTtpZihBLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQS5jdXJyZW50KTtBLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57QS5jdXJyZW50PW51bGwsZChTKSxnKFMpfSl9LFthLGcsZF0pLEsxPVAoKFQsUyxqKT0+e3IoKTtsZXQgaT16LmN1cnJlbnQ/P0M7Ri5jdXJyZW50PXtwb2ludGVySWQ6VCxzdGFydFg6UyxzdGFydFk6aixzdGFydFdpZHRoOml9LGsuY3VycmVudD1be3Q6cGVyZm9ybWFuY2Uubm93KCkseDppfV0sTigpLHEoITApfSxbcixDLE5dKSxuPVAoKCk9PntsZXQgVD1GLmN1cnJlbnQ7aWYoRi5jdXJyZW50PW51bGwsQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCksQS5jdXJyZW50PW51bGw7aWYoVCYmVC5wb2ludGVySWQ+PTApe2xldCBaMT13LmN1cnJlbnQ7aWYoWjE/Lmhhc1BvaW50ZXJDYXB0dXJlKFQucG9pbnRlcklkKSlaMS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoVC5wb2ludGVySWQpfXEoITEpO2xldCBTPXouY3VycmVudD8/QyxqPU44KGsuY3VycmVudCk7ay5jdXJyZW50PVtdO2xldCBpPXcwKFMraipDOCxDLCQsSyxYKSx0PUQyKFg4KGksW0NdLHMzKSksWTE9TWF0aC5hYnMoUy10KTwwLjUmJk1hdGguYWJzKGopPDg7aWYoUXx8WTEpe2QodCksJDEodCk7cmV0dXJufVkoITApLF8uY3VycmVudD1KOCh7ZnJvbTpTLHRvOnQsdmVsb2NpdHk6aixzdGlmZm5lc3M6dDMsZGFtcGluZzplMyxvblVwZGF0ZTpkLG9uQ29tcGxldGU6KCk9PntfLmN1cnJlbnQ9bnVsbCxZKCExKSwkMSh0KX19KX0sW1gsQyxRLCQxLEssJCxkXSk7VygoKT0+e3JldHVybigpPT57aWYocigpLEEuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShBLmN1cnJlbnQpO2lmKEQuY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KEQuY3VycmVudCksei5jdXJyZW50IT1udWxsKXUoei5jdXJyZW50KX19fSxbcix1XSksVygoKT0+e2lmKCFaKXJldHVybjtsZXQgVD0oKT0+bigpLFM9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIiluKCl9LGo9KGkpPT57bGV0IHQ9Ri5jdXJyZW50O2lmKCF0fHx0LnBvaW50ZXJJZCE9PWkucG9pbnRlcklkKXJldHVybjtpLnByZXZlbnREZWZhdWx0KCksSShmOCh0LGkuY2xpZW50WCxpLmNsaWVudFksWCkpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLFQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsaix7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsVCwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLFQsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFMpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLFQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsaiwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsVCwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLFQsITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFMpfX0sW1gsbixaLEldKTtsZXQgSjE9UCgoVCk9PntsZXQgUz1GLmN1cnJlbnQ7aWYoIVN8fFMucG9pbnRlcklkIT09VC5wb2ludGVySWQpcmV0dXJuO1QucHJldmVudERlZmF1bHQoKSxULnN0b3BQcm9wYWdhdGlvbigpLG4oKX0sW25dKSxlPVAoKFQpPT57aWYoVC5idXR0b24hPT0wKXJldHVybjtULnByZXZlbnREZWZhdWx0KCksVC5zdG9wUHJvcGFnYXRpb24oKSxULmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoVC5wb2ludGVySWQpLEsxKFQucG9pbnRlcklkLFQuY2xpZW50WCxULmNsaWVudFkpfSxbSzFdKSxzPVAoKFQpPT57bGV0IFM9Ri5jdXJyZW50O2lmKCFTfHxTLnBvaW50ZXJJZCE9PVQucG9pbnRlcklkKXJldHVybjtULnByZXZlbnREZWZhdWx0KCksSShmOChTLFQuY2xpZW50WCxULmNsaWVudFksWCkpfSxbWCxJXSksWDE9UCgoVCk9PntsZXQgUz1ULmtleT09PSJBcnJvd1JpZ2h0Inx8VC5rZXk9PT0iQXJyb3dEb3duIj8xOlQua2V5PT09IkFycm93TGVmdCJ8fFQua2V5PT09IkFycm93VXAiPy0xOjA7aWYoUz09PTApcmV0dXJuO1QucHJldmVudERlZmF1bHQoKSxyKCk7bGV0IGo9VC5zaGlmdEtleT84MDoyNCxpPUQyKHcwKHArUypqLEMsJCxLLFgpKTtkKGkpLCQxKGkpfSxbWCxyLHAsQywkMSxLLCQsZF0pO3JldHVybntoYW5kbGVSZWY6dyx3aWR0aDp4LGNvbW1pdHRlZFdpZHRoOnAsbWluV2lkdGg6aCxtYXhXaWR0aDpSLGlzUmVzaXppbmc6Wixpc0luZXJ0aWE6RyxoYW5kbGVIb3ZlcmVkOkIsaGFuZGxlQWN0aXZlOkJ8fFp8fEcsc2V0SGFuZGxlSG92ZXJlZDpMLG9uUG9pbnRlckRvd246ZSxvblBvaW50ZXJNb3ZlOnMsb25Qb2ludGVyRW5kOkoxLG9uS2V5RG93bjpYMX19ZnVuY3Rpb24gZjgoQywkLEssWCl7bGV0IE49JC1DLnN0YXJ0WCxRPShLLUMuc3RhcnRZKSpYO3JldHVybiBDLnN0YXJ0V2lkdGgrKE1hdGguYWJzKE4pPj1NYXRoLmFicyhRKT9OOlEpfWZ1bmN0aW9uIHU4KCl7bGV0W0MsJF09TyhbXSksSz1QKChRLFopPT57bGV0IHE9Y3J5cHRvLnJhbmRvbVVVSUQoKTtyZXR1cm4gJCgoRyk9PlsuLi5HLHtpZDpxLG5hbWU6USxraW5kOlosc3RhdHVzOiJ1cGxvYWRpbmciLHByb2dyZXNzOjB9XSkscX0sW10pLFg9UCgoUSxaKT0+e2lmKCQoKHEpPT5xLm1hcCgoRyk9PkcuaWQ9PT1RP3suLi5HLC4uLlp9OkcpKSxaLnN0YXR1cz09PSJzdWNjZXNzInx8Wi5zdGF0dXM9PT0iZXJyb3IiKXNldFRpbWVvdXQoKCk9PnskKChxKT0+cS5maWx0ZXIoKEcpPT5HLmlkIT09USkpfSwzMDAwKX0sW10pLE49UCgoUSxaKT0+eyQoKHEpPT5xLm1hcCgoRyk9PkcuaWQ9PT1RP3suLi5HLHByb2dyZXNzOlp9OkcpKX0sW10pO3JldHVybnt0b2FzdHM6QyxhZGQ6Syx1cGRhdGU6WCxzZXRQcm9ncmVzczpOfX1mdW5jdGlvbiBvOChDLCQpe2xldFtLLFhdPU8oW10pLFtOLFFdPU8obnVsbCksW1oscV09TyghMSksRz1QKGFzeW5jKCk9PntpZighQylyZXR1cm47cSghMCksUShudWxsKTt0cnl7bGV0IFk9YXdhaXQgZmV0Y2goQyx7Y2FjaGU6Im5vLXN0b3JlIn0pLEI9YXdhaXQgWS5qc29uKCk7aWYoIVkub2t8fEIuZXJyb3IpdGhyb3cgRXJyb3IoQi5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7WChCLnRhcmdldHM/P1tdKX1jYXRjaChZKXtRKFkgaW5zdGFuY2VvZiBFcnJvcj9ZLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e3EoITEpfX0sW0NdKTtyZXR1cm4gVygoKT0+e2lmKCEkKXJldHVybjtHKCk7bGV0IFk9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgRygpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKFkpfSxbJCxHXSkse3RhcmdldHM6SyxlcnJvcjpOLGxvYWRpbmc6WixyZWZyZXNoOkd9fXZhciBwND17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gZDgoQyl7cmV0dXJuIHA0W0NdPz9udWxsfXZhciBjOD0zMjAsYTg9NzYwLGk4PTcyMDt2YXIgZjQ9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0sbDQ9e3BvcnRyYWl0OiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0In07ZnVuY3Rpb24gcjgoQyl7cmV0dXJuIEM/YCR7Qy5kZXZpY2V9OiR7Qy5waWR9OiR7Qy5zdHJlYW1Vcmx9OiR7Qy53c1VybH1gOiIifWZ1bmN0aW9uIHU0KCl7bGV0W0MsJF09TygoKT0+d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8/bnVsbCksW0ssWF09TyghMSksW04sUV09TyhbXSksW1oscV09TyghMSksW0csWV09TyhudWxsKSxbQixMXT1PKG5ldyBTZXQpLFtGLGtdPU8oITEpLFtBLF9dPU8oITEpLFtELHpdPU8oITEpLFt3LEVdPU8oITEpLFt5LGNdPU8obnVsbCksUj1QKGFzeW5jKCk9PntxKCEwKSxZKG51bGwpO3RyeXtsZXQgaD1hd2FpdCBMMSgieGNydW4gc2ltY3RsIGxpc3QgZGV2aWNlcyBhdmFpbGFibGUgLWoiKTtpZihoLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihoLnN0ZGVycnx8InNpbWN0bCBsaXN0IGZhaWxlZCIpO1EoTTMoaC5zdGRvdXQpKX1jYXRjaChoKXtZKGggaW5zdGFuY2VvZiBFcnJvcj9oLm1lc3NhZ2U6IkZhaWxlZCB0byBsaXN0IGRldmljZXMiKX1maW5hbGx5e3EoITEpfX0sW10pO2lmKFcoKCk9PntSKCl9LFtSXSksVygoKT0+e2xldCBoPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJkZXZpY2UiKSx4PWAke3gxKCJhcGkiKX0ke2g/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoaCl9YDoiIn1gLHA9ITEsZD1hc3luYygpPT57dHJ5e2xldCAkMT1hd2FpdCBmZXRjaCh4LHtjYWNoZToibm8tc3RvcmUifSk7aWYoISQxLm9rKXJldHVybjtsZXQgYT1hd2FpdCAkMS5qc29uKCk7aWYocClyZXR1cm47JCgocik9PntpZihyOChyKT09PXI4KGEpKXJldHVybiByO2lmKGEpd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1hO2Vsc2UgZGVsZXRlIHdpbmRvdy5fX1NJTV9QUkVWSUVXX187cmV0dXJuIGF9KX1jYXRjaHt9fTtkKCk7bGV0IHU9c2V0SW50ZXJ2YWwoZCwxNTAwKTtyZXR1cm4oKT0+e3A9ITAsY2xlYXJJbnRlcnZhbCh1KX19LFtdKSxXKCgpPT57aWYoIUM/LmxvZ3NFbmRwb2ludClyZXR1cm47bGV0IGg9bmV3IEV2ZW50U291cmNlKEMubG9nc0VuZHBvaW50KSx4PW5ldyBNYXAscD1bIiM4YmU5ZmQiLCIjNTBmYTdiIiwiI2ZmYjg2YyIsIiNmZjc5YzYiLCIjYmQ5M2Y5IiwiI2YxZmE4YyIsIiM2MjcyYTQiLCIjZmY1NTU1IiwiIzY5ZmY5NCIsIiNkNmFjZmYiLCIjZmZmZmE1IiwiI2E0ZmZmZiIsIiNmZjZlNmUiLCIjY2FhOWZhIiwiIzVhZjc4ZSJdO2Z1bmN0aW9uIGQoYSl7bGV0IHI9eC5nZXQoYSk7aWYoIXIpe2xldCBnPTA7Zm9yKGxldCBJPTA7STxhLmxlbmd0aDtJKyspZz0oZzw8NSktZythLmNoYXJDb2RlQXQoSSl8MDtyPXBbTWF0aC5hYnMoZyklcC5sZW5ndGhdLHguc2V0KGEscil9cmV0dXJuIHJ9bGV0IHU9IiIsJDE9ITE7cmV0dXJuIGgub25tZXNzYWdlPShhKT0+e3RyeXtsZXQgcj1KU09OLnBhcnNlKGEuZGF0YSksZz1yLnByb2Nlc3NJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/P3Iuc2VuZGVySW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz8iIixJPXIuc3Vic3lzdGVtPz8iIixLMT1yLmNhdGVnb3J5Pz8iIixuPXIuZXZlbnRNZXNzYWdlPz8iIjtpZighbilyZXR1cm47aWYoZyE9PXUpe2lmKCQxKWNvbnNvbGUuZ3JvdXBFbmQoKTtsZXQgWDE9ZChnKTtjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGAlYyR7Z30ke0k/YCAlYyR7SX0ke0sxPyI6IitLMToiIn1gOiIifWAsYGNvbG9yOiR7WDF9O2ZvbnQtd2VpZ2h0OmJvbGRgLC4uLkk/WyJjb2xvcjojODg4O2ZvbnQtd2VpZ2h0Om5vcm1hbCJdOltdKSwkMT0hMCx1PWd9bGV0IEoxPShyLm1lc3NhZ2VUeXBlPz8iIikudG9Mb3dlckNhc2UoKSxlPUkmJmc9PT11P2AlYyR7SzF8fEl9JWMgYDoiIixzPWU/WyJjb2xvcjojODg4O2ZvbnQtc3R5bGU6aXRhbGljIiwiY29sb3I6aW5oZXJpdCJdOltdO2lmKEoxPT09ImZhdWx0Inx8SjE9PT0iZXJyb3IiKWNvbnNvbGUubG9nKGAke2V9JWMke259YCwuLi5zLCJjb2xvcjojZmY1NTU1Iik7ZWxzZSBpZihKMT09PSJkZWJ1ZyIpY29uc29sZS5sb2coYCR7ZX0lYyR7bn1gLC4uLnMsImNvbG9yOiM2MjcyYTQiKTtlbHNlIGNvbnNvbGUubG9nKGAke2V9JWMke259YCwuLi5zLCJjb2xvcjppbmhlcml0Iil9Y2F0Y2h7fX0sKCk9PntpZigkMSljb25zb2xlLmdyb3VwRW5kKCk7aC5jbG9zZSgpfX0sW0M/LmxvZ3NFbmRwb2ludF0pLCFDKXJldHVybiBKKHczLHtkZXZpY2VzOk4sbG9hZGluZzpaLGVycm9yOkcsb25SZWZyZXNoOlJ9KTtyZXR1cm4gSihvNCx7Y29uZmlnOkMsZGV2aWNlczpOLGRldmljZXNMb2FkaW5nOlosZGV2aWNlc0Vycm9yOkcsc3RvcHBpbmdVZGlkczpCLHNldFN0b3BwaW5nVWRpZHM6TCxzd2l0Y2hpbmc6RixzZXRTd2l0Y2hpbmc6ayxheE92ZXJsYXlFbmFibGVkOkEsc2V0QXhPdmVybGF5RW5hYmxlZDpfLGRldnRvb2xzT3BlbjpELHNldERldnRvb2xzT3Blbjp6LGdyaWRPcGVuOncsc2V0R3JpZE9wZW46RSxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6eSxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6YyxzdHJlYW1pbmc6SyxzZXRTdHJlYW1pbmc6WCxmZXRjaERldmljZXM6Un0pfWZ1bmN0aW9uIG80KHtjb25maWc6QyxkZXZpY2VzOiQsZGV2aWNlc0xvYWRpbmc6SyxkZXZpY2VzRXJyb3I6WCxzdG9wcGluZ1VkaWRzOk4sc2V0U3RvcHBpbmdVZGlkczpRLHN3aXRjaGluZzpaLHNldFN3aXRjaGluZzpxLGF4T3ZlcmxheUVuYWJsZWQ6RyxzZXRBeE92ZXJsYXlFbmFibGVkOlksZGV2dG9vbHNPcGVuOkIsc2V0RGV2dG9vbHNPcGVuOkwsZ3JpZE9wZW46RixzZXRHcmlkT3BlbjprLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpBLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpfLHN0cmVhbWluZzpELHNldFN0cmVhbWluZzp6LGZldGNoRGV2aWNlczp3fSl7bGV0IEU9JC5maW5kKChWKT0+Vi51ZGlkPT09Qy5kZXZpY2UpPz9udWxsO1coKCk9Pntkb2N1bWVudC50aXRsZT1FPy5uYW1lP2BTaW11bGF0b3IgLSAke0UubmFtZX1gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtFPy5uYW1lXSk7bGV0IHk9RjAoRT8ubmFtZSksYz1vOChDLmRldnRvb2xzRW5kcG9pbnQ/P3gxKCJkZXZ0b29scyIpLEIpO1coKCk9PntpZighQilyZXR1cm47aWYoQSYmYy50YXJnZXRzLnNvbWUoKFYpPT5WLmlkPT09QSkpcmV0dXJuO18oYy50YXJnZXRzLmxlbmd0aD09PTE/Yy50YXJnZXRzWzBdLmlkOm51bGwpfSxbQixjLnRhcmdldHMsQSxfXSksVygoKT0+e18obnVsbCl9LFtDLmRldmljZSxfXSk7bGV0IFI9cDgoQy5zdHJlYW1VcmwpLFtoLHhdPU8obnVsbCkscD1oPz9SLmNvbmZpZz8/SzIoeSxFPy5uYW1lKSxkPUoyKHkscCksdT1YMih5LHApLCQxPSQyKHApLGE9VTAocCkscj1hP2Eud2lkdGgvYS5oZWlnaHQ6MSxnPXYobnVsbCk7VygoKT0+e2xldCBWPSExLFU9bnVsbCxNPW51bGwsYj0oKT0+e2lmKFZ8fFUpcmV0dXJuO1U9c2V0VGltZW91dCgoKT0+e1U9bnVsbCxmKCl9LDEwMDApfSxmPSgpPT57bGV0IEg9bmV3IFdlYlNvY2tldChDLndzVXJsKTtILmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIixNPUgsZy5jdXJyZW50PUgsSC5vbmNsb3NlPSgpPT57aWYoZy5jdXJyZW50PT09SClnLmN1cnJlbnQ9bnVsbDtiKCl9LEgub25lcnJvcj0oKT0+e0guY2xvc2UoKX19O3JldHVybiBmKCksKCk9PntpZihWPSEwLFUpY2xlYXJUaW1lb3V0KFUpO2lmKGcuY3VycmVudD09PU0pZy5jdXJyZW50PW51bGw7TT8uY2xvc2UoKX19LFtDLndzVXJsXSk7bGV0IEk9UCgoVixVKT0+e2xldCBNPWcuY3VycmVudDtpZighTXx8TS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBiPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShVKSksZj1uZXcgVWludDhBcnJheSgxK2IubGVuZ3RoKTtmWzBdPVYsZi5zZXQoYiwxKSxNLnNlbmQoZil9LFtdKSxLMT1QKChWKT0+SSgzLFYpLFtJXSksbj1QKChWKT0+SSg1LFYpLFtJXSksSjE9UCgoVik9PkkoNCx7YnV0dG9uOlZ9KSxbSV0pLGU9UCgoVik9Pnt4KChVKT0+VSYmVS53aWR0aD09PVYud2lkdGgmJlUuaGVpZ2h0PT09Vi5oZWlnaHQmJlUub3JpZW50YXRpb249PT1WLm9yaWVudGF0aW9uP1U6Vil9LFtdKSxzPVAoKFYpPT57SSg3LHtvcmllbnRhdGlvbjpWfSl9LFtJXSksWDE9cC5vcmllbnRhdGlvbj8/InBvcnRyYWl0IixUPXkhPT0id2F0Y2giJiZ5IT09InZpc2lvbiIsUz1QKChWKT0+e2lmKCFUKXJldHVybjtsZXQgVT0oVj09PSJsZWZ0Ij9mNDpsNClbWDFdO3MoVSl9LFtULFgxLHNdKTtXKCgpPT57eChudWxsKX0sW0Muc3RyZWFtVXJsXSksVygoKT0+e2xldCBWPVIuY29uZmlnO2lmKCFWKXJldHVybjt4KChVKT0+VSYmVS53aWR0aD09PVYud2lkdGgmJlUuaGVpZ2h0PT09Vi5oZWlnaHQmJlUub3JpZW50YXRpb249PT1WLm9yaWVudGF0aW9uP1U6bnVsbCl9LFtSLmNvbmZpZyxSLmNvbmZpZz8ud2lkdGgsUi5jb25maWc/LmhlaWdodCxSLmNvbmZpZz8ub3JpZW50YXRpb25dKTtsZXQgaj1QKChWLFUpPT57SSg2LHt0eXBlOlYsdXNhZ2U6VX0pfSxbSV0pLFtpLHRdPU8obnVsbCksW1kxLFoxXT1PKCExKSx7d2lkdGg6RjEsb25Qb2ludGVyRG93bjpTMX09VTIoInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIsYzgsMjQwLDcyMCkse3dpZHRoOkcxLG9uUG9pbnRlckRvd246UDF9PVUyKCJzZXJ2ZS1zaW06ZGV2dG9vbHMtcGFuZWwtd2lkdGgiLGE4LDQyMCwxNDAwKSx7d2lkdGg6QzEsb25Qb2ludGVyRG93bjpxMX09VTIoInNlcnZlLXNpbTpncmlkLXBhbmVsLXdpZHRoIixpOCwzNjAsMTQwMCksW2gxLFIxXT1PKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbVzEsbTFdPU8oKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTtXKCgpPT57bGV0IFY9KCk9PntSMSh3aW5kb3cuaW5uZXJXaWR0aCksbTEod2luZG93LmlubmVySGVpZ2h0KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFYpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixWKX0sW10pLFcoKCk9PntsZXQgVj1uZXcgRXZlbnRTb3VyY2UoQy5hcHBTdGF0ZUVuZHBvaW50Pz94MSgiYXBwc3RhdGUiKSksVT1udWxsO3JldHVybiBWLm9ubWVzc2FnZT0oTSk9Pnt0cnl7bGV0IGI9SlNPTi5wYXJzZShNLmRhdGEpO2lmKFUpY2xlYXJUaW1lb3V0KFUpO2xldCBmPWI/LmlzUmVhY3ROYXRpdmU/MDo2MDA7VT1zZXRUaW1lb3V0KCgpPT50KGIpLGYpfWNhdGNoe319LCgpPT57aWYoVSljbGVhclRpbWVvdXQoVSk7Vi5jbG9zZSgpfX0sW0MuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBxMD1QKGFzeW5jKCk9PntqKCJkb3duIiwyMjcpLGF3YWl0IG5ldyBQcm9taXNlKChNKT0+c2V0VGltZW91dChNLDMwKSksaigiZG93biIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChNKT0+c2V0VGltZW91dChNLDMwKSksaigidXAiLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgoTSk9PnNldFRpbWVvdXQoTSwzMCkpLGooInVwIiwyMjcpfSxbal0pLHYxPXYobnVsbCksW1QxLEExXT1PKDApLFtqMSxDMF09TygwKTtXKCgpPT57bGV0IFY9djEuY3VycmVudDtpZighVnx8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IFU9bmV3IFJlc2l6ZU9ic2VydmVyKChNKT0+e2xldCBiPU1bMF0/LmNvbnRlbnRSZWN0O0ExKGI/LndpZHRoPz8wKSxDMChiPy5oZWlnaHQ/PzApfSk7cmV0dXJuIFUub2JzZXJ2ZShWKSwoKT0+VS5kaXNjb25uZWN0KCl9LFtdKTtsZXRbeTEsJDBdPU8oITApLEswPXYoITApO0swLmN1cnJlbnQ9eTE7bGV0IGcxPXYobmV3IFNldCk7VygoKT0+e2xldCBWPShVKT0+e2xldCBNPSEhdjEuY3VycmVudD8uY29udGFpbnMoVS50YXJnZXQpOyQwKE0pfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFYsITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsViwhMCl9LFtdKSxXKCgpPT57aWYoeTEpcmV0dXJuO2xldCBWPWcxLmN1cnJlbnQ7aWYoVi5zaXplPT09MClyZXR1cm47Zm9yKGxldCBVIG9mIFYpSSg2LHt0eXBlOiJ1cCIsdXNhZ2U6VX0pO1YuY2xlYXIoKX0sW3kxLEldKSxXKCgpPT57bGV0IFY9KGIsZik9PntpZighSzAuY3VycmVudClyZXR1cm47aWYoYi5jb2RlPT09IktleUgiJiZiLm1ldGFLZXkmJmIuc2hpZnRLZXkpe2lmKGIucHJldmVudERlZmF1bHQoKSxmPT09ImRvd24iJiYhYi5yZXBlYXQpSSg0LHtidXR0b246ImhvbWUifSk7cmV0dXJufWlmKChiLmNvZGU9PT0iQXJyb3dMZWZ0Inx8Yi5jb2RlPT09IkFycm93UmlnaHQiKSYmYi5tZXRhS2V5JiYhYi5zaGlmdEtleSYmIWIuYWx0S2V5JiYhYi5jdHJsS2V5KXtpZihiLnByZXZlbnREZWZhdWx0KCksZj09PSJkb3duIiYmIWIucmVwZWF0KVMoYi5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZihiLmNvZGU9PT0iS2V5QSImJmIubWV0YUtleSYmYi5zaGlmdEtleSl7aWYoYi5wcmV2ZW50RGVmYXVsdCgpLGY9PT0iZG93biImJiFiLnJlcGVhdClMMShgeGNydW4gc2ltY3RsIHVpICR7Qy5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChtKT0+e2xldCBvPW0uc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4gTDEoYHhjcnVuIHNpbWN0bCB1aSAke0MuZGV2aWNlfSBhcHBlYXJhbmNlICR7b31gKX0pLmNhdGNoKCgpPT57fSk7cmV0dXJufWxldCBIPWQ4KGIuY29kZSk7aWYoSD09bnVsbClyZXR1cm47aWYoYi5wcmV2ZW50RGVmYXVsdCgpLGY9PT0iZG93biIpZzEuY3VycmVudC5hZGQoSCk7ZWxzZSBnMS5jdXJyZW50LmRlbGV0ZShIKTtJKDYse3R5cGU6Zix1c2FnZTpIfSl9LFU9KGIpPT5WKGIsImRvd24iKSxNPShiKT0+VihiLCJ1cCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixNKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixVKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLE0pfX0sW0ksQy5kZXZpY2UsU10pO2xldCBZMD1QKGFzeW5jKFYpPT57aWYoWnx8Vi51ZGlkPT09Qy5kZXZpY2UpcmV0dXJuO3EoITApO3RyeXtpZihWLnN0YXRlIT09IkJvb3RlZCIpYXdhaXQgTDEoYHhjcnVuIHNpbWN0bCBib290ICR7Vi51ZGlkfWApO2xldCBVPWF3YWl0IEwxKGBidW54IHNlcnZlLXNpbSAtLWRldGFjaCAke1YudWRpZH1gKTtpZihVLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihVLnN0ZGVycnx8IkZhaWxlZCB0byBzdGFydCBzZXJ2ZS1zaW0iKTtsZXQgTT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtNLnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsVi51ZGlkKSx3aW5kb3cubG9jYXRpb24uYXNzaWduKE0udG9TdHJpbmcoKSl9Y2F0Y2h7cSghMSl9fSxbWixDLmRldmljZSxxXSksTTE9dTgoKSxHMD1qOCh7ZXhlYzpMMSx1ZGlkOkMuZGV2aWNlLGVuYWJsZWQ6RCxvblVwbG9hZFN0YXJ0Ok0xLmFkZCxvblVwbG9hZFByb2dyZXNzOk0xLnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOihWLFUsTSk9Pk0xLnVwZGF0ZShWLHtzdGF0dXM6VT8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOk19KSxvblVuc3VwcG9ydGVkOihWKT0+e2xldCBVPU0xLmFkZChWLm5hbWUsIm1lZGlhIik7TTEudXBkYXRlKFUse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke1YudHlwZXx8VzAoVil9YH0pfX0pLGMxPVAoYXN5bmMoVik9PntRKChVKT0+bmV3IFNldChVKS5hZGQoVikpO3RyeXthd2FpdCBMMShgeGNydW4gc2ltY3RsIHNodXRkb3duICR7Vn1gKSxhd2FpdCB3KCl9ZmluYWxseXtRKChVKT0+e2xldCBNPW5ldyBTZXQoVSk7cmV0dXJuIE0uZGVsZXRlKFYpLE19KX19LFt3LFFdKSxRMT1sOCh7ZGVmYXVsdFdpZHRoOnUsdmlld3BvcnRXaWR0aDpoMSx2aWV3cG9ydEhlaWdodDpXMSxhc3BlY3RSYXRpbzpyLG9uU3RhcnQ6KCk9PiQwKCExKX0pLHcxPUI/RzE6Rj9DMTpZMT9GMTowLGExPTEyLGwxPTI0LEUxPXcxPjA/dzErbDE6MCxYMD0wO2lmKHcxPjApe2xldCBWPWgxLWExLXcxLFU9VDE+MD9NYXRoLm1pbihUMSxRMS53aWR0aCk6UTEud2lkdGgsYj1oMS8yK1UvMi0oVi1sMSk7aWYoYj4wKXtsZXQgZj0yKmI7WDA9Zjw9RTE/ZjowfX1yZXR1cm4gSihPMyx7ZW5kcG9pbnQ6Rz9DPy5heEVuZHBvaW50OnZvaWQgMCxjaGlsZHJlbjpKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcHktNiBwbC02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLHN0eWxlOntwYWRkaW5nUmlnaHQ6MjQrWDAsdHJhbnNpdGlvbjpRMS5pc1Jlc2l6aW5nfHxRMS5pc0luZXJ0aWE/Im5vbmUiOnYzfSxjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6UTEud2lkdGgsdHJhbnNpdGlvbjpRMS5pc1Jlc2l6aW5nfHxRMS5pc0luZXJ0aWE/bjI6czJ9LGNoaWxkcmVuOltKKE8xLHtleGVjOkwxLG9uUm90YXRlOnMsb3JpZW50YXRpb246cC5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOkMuZGV2aWNlLGRldmljZU5hbWU6RT8ubmFtZT8/bnVsbCxkZXZpY2VSdW50aW1lOkU/LnJ1bnRpbWU/P251bGwsc3RyZWFtaW5nOkQsY2hpbGRyZW46W0ooYjMse2RldmljZXM6JCxzZWxlY3RlZFVkaWQ6Qy5kZXZpY2UsbG9hZGluZzpLLGVycm9yOlgsc3RvcHBpbmdVZGlkczpOLG9uUmVmcmVzaDp3LG9uU2VsZWN0OlkwLG9uU3RvcDpjMSx0cmlnZ2VyOkooTzEuVGl0bGUse30pfSksSihPMS5BY3Rpb25zLHtjaGlsZHJlbjpbaT8uaXNSZWFjdE5hdGl2ZSYmSihPMS5CdXR0b24seyJhcmlhLWxhYmVsIjoiUmVsb2FkIFJlYWN0IE5hdGl2ZSBidW5kbGUiLHRpdGxlOiJSZWxvYWQgKENtZCtSKSIsb25DbGljazooKT0+dm9pZCBxMCgpLGNoaWxkcmVuOkooSjAse30pfSksSihPMS5Ib21lQnV0dG9uLHtvbkNsaWNrOihWKT0+e1YucHJldmVudERlZmF1bHQoKSxKMSgiaG9tZSIpfX0pLEooVDMse292ZXJsYXlFbmFibGVkOkcsc3RyZWFtaW5nOkQsb25Ub2dnbGVPdmVybGF5OigpPT5ZKChWKT0+IVYpfSksSihPMS5Sb3RhdGVCdXR0b24se3RpdGxlOiJSb3RhdGUgZGV2aWNlIn0pXX0pXX0pLEooImRpdiIse3JlZjp2MSxjbGFzc05hbWU6InJlbGF0aXZlIG1heC1oLWZ1bGwiLHN0eWxlOnt3aWR0aDpRMS53aWR0aCxhc3BlY3RSYXRpbzokMSx0cmFuc2l0aW9uOlExLmlzUmVzaXppbmd8fFExLmlzSW5lcnRpYT9uMjpzMix3aWxsQ2hhbmdlOlExLmlzUmVzaXppbmd8fFExLmlzSW5lcnRpYT8id2lkdGgiOnZvaWQgMH0sLi4uRzAuZHJvcFpvbmVQcm9wcyxjaGlsZHJlbjpbSihDMix7dXJsOkMudXJsLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixib3JkZXI6Im5vbmUiLHBvaW50ZXJFdmVudHM6UTEuaXNSZXNpemluZ3x8UTEuaXNJbmVydGlhPyJub25lIjp2b2lkIDB9LGltYWdlU3R5bGU6e2JvcmRlclJhZGl1czpkLGNvcm5lclNoYXBlOiJzdXBlcmVsbGlwc2UoMS4zKSIsYm9yZGVyV2lkdGg6IjFweCIsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJDb2xvcjoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIn0saGlkZUNvbnRyb2xzOiEwLG9uU3RyZWFtaW5nQ2hhbmdlOnosb25TdHJlYW1Ub3VjaDpLMSxvblN0cmVhbU11bHRpVG91Y2g6bixvblN0cmVhbUJ1dHRvbjpKMSxzdWJzY3JpYmVGcmFtZTpSLnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOlIuZnJhbWUsc3RyZWFtQ29uZmlnOnAsb25TY3JlZW5Db25maWdDaGFuZ2U6ZX0pLEcmJkooQTMse30pLEcwLmlzRHJhZ092ZXImJkooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1hY2NlbnQgYmctW3JnYmEoOTksMTAyLDI0MSwwLjEyKV0gYmFja2Ryb3AtYmx1ci1bMnB4XSB0ZXh0LWFjY2VudCBwb2ludGVyLWV2ZW50cy1ub25lIHotMjAiLHN0eWxlOntib3JkZXJSYWRpdXM6ZH0sY2hpbGRyZW46W0ooInN2ZyIse3dpZHRoOiIzMiIsaGVpZ2h0OiIzMiIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCJ9KSxKKCJwb2x5bGluZSIse3BvaW50czoiMTcgOCAxMiAzIDcgOCJ9KSxKKCJsaW5lIix7eDE6IjEyIix5MToiMyIseDI6IjEyIix5MjoiMTUifSldfSksSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSksSihZOCx7c2ltdWxhdG9yUmVzaXplOlExLGRldmljZVR5cGU6eSxzdHJlYW1Db25maWc6cCxjb250YWluZXJXaWR0aDpUMXx8UTEud2lkdGgsY29udGFpbmVySGVpZ2h0OmoxfHwocj4wP1ExLndpZHRoL3I6MCl9KSxKKEc4LHt3aWR0aDpUMXx8UTEud2lkdGgsaGVpZ2h0OmoxfHwocj4wP1ExLndpZHRoL3I6MCksdmlzaWJsZTpRMS5pc1Jlc2l6aW5nfHxRMS5pc0luZXJ0aWF9KV19KV19KSxNMS50b2FzdHMubGVuZ3RoPjAmJkooImRpdiIse2NsYXNzTmFtZToiZml4ZWQgYm90dG9tLTQgcmlnaHQtNCBmbGV4IGZsZXgtY29sIGdhcC0xLjUgbWF4LXctWzMyMHB4XSB6LTMwIixjaGlsZHJlbjpNMS50b2FzdHMubWFwKChWKT0+e2xldCBVPVYuc3RhdHVzPT09ImVycm9yIixNPVYuc3RhdHVzPT09InVwbG9hZGluZyIsYj1NJiZWLnByb2dyZXNzIT09bnVsbCxmPVYucHJvZ3Jlc3MhPW51bGw/TWF0aC5yb3VuZChWLnByb2dyZXNzKjEwMCk6MDtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIGdhcC0xLjUgcHgtMyBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbW9ubyBzaGFkb3ctWzBfNHB4XzEycHhfcmdiYSgwLDAsMCwwLjQpXSAke1U/InNlbGVjdC10ZXh0IGN1cnNvci10ZXh0Ijoic2VsZWN0LW5vbmUgY3Vyc29yLWRlZmF1bHQifWAsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6TT8iI2E1YjRmYyI6Vi5zdGF0dXM9PT0ic3VjY2VzcyI/IiM0YWRlODAiOiIjZjg3MTcxIn19KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOltNJiZiJiZgVXBsb2FkaW5nICR7Vi5uYW1lfeKApiAke2Z9JWAsTSYmIWImJihWLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGluZyAke1YubmFtZX3igKZgOmBBZGRpbmcgJHtWLm5hbWV94oCmYCksVi5zdGF0dXM9PT0ic3VjY2VzcyImJihWLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGVkICR7Vi5uYW1lfWA6YEFkZGVkICR7Vi5uYW1lfSB0byBQaG90b3NgKSxVJiZgJHtWLm5hbWV9OiAke1YubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQifWBdfSldfSksTSYmSigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBoLVszcHhdIHctZnVsbCBiZy13aGl0ZS84IHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIixjaGlsZHJlbjpiP0ooImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIFt0cmFuc2l0aW9uOndpZHRoXzEyMG1zX2xpbmVhcl0iLHN0eWxlOnt3aWR0aDpgJHtmfSVgfX0pOkooImRpdiIse2NsYXNzTmFtZToic2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGgtZnVsbCB3LVs0MCVdIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIn0pfSldfSxWLmlkKX0pfSksSigiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyByaWdodC0zIGZsZXggZmxleC1jb2wgZ2FwLTEgcC0xIGJnLXBhbmVsLWJnIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBiYWNrZHJvcC1ibHVyLVsxMnB4XSBbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7WTF8fEJ8fEY/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbSigiYnV0dG9uIix7b25DbGljazooKT0+e0woITEpLGsoITEpLFoxKChWKT0+IVYpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHRvb2xzIHBhbmVsIiwiYXJpYS1wcmVzc2VkIjpZMSx0aXRsZToiVG9vbHMiLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNzUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJyZWN0Iix7eDoiMyIseToiNCIsd2lkdGg6IjE4IixoZWlnaHQ6IjE2IixyeDoiMi41In0pLEooImxpbmUiLHt4MToiMTUiLHkxOiI0Iix4MjoiMTUiLHkyOiIyMCJ9KV19KX0pLEooImJ1dHRvbiIse29uQ2xpY2s6KCk9PntaMSghMSksayghMSksTCgoVik9PiFWKX0sY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiBXZWJLaXQgRGV2VG9vbHMiLCJhcmlhLXByZXNzZWQiOkIsdGl0bGU6IldlYktpdCBEZXZUb29scyIsY2hpbGRyZW46Sigic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS43NSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxKKCJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAifSksSigicGF0aCIse2Q6Ik0yIDEyaDIwIn0pXX0pfSksSigiYnV0dG9uIix7b25DbGljazooKT0+e1oxKCExKSxMKCExKSxrKChWKT0+IVYpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHNpbXVsYXRvciBncmlkIiwiYXJpYS1wcmVzc2VkIjpGLHRpdGxlOiJTaW11bGF0b3JzIixjaGlsZHJlbjpKKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjc1IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigicmVjdCIse3g6IjMiLHk6IjMiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxLjUifSksSigicmVjdCIse3g6IjE0Iix5OiIzIix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMS41In0pLEooInJlY3QiLHt4OiIzIix5OiIxNCIsd2lkdGg6IjciLGhlaWdodDoiNyIscng6IjEuNSJ9KSxKKCJyZWN0Iix7eDoiMTQiLHk6IjE0Iix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMS41In0pXX0pfSldfSksSihoOCx7b3BlbjpZMSxvbkNsb3NlOigpPT5aMSghMSksdWRpZDpDLmRldmljZSxjdXJyZW50QXBwOmksYXhPdmVybGF5RW5hYmxlZDpHLG9uVG9nZ2xlQXhPdmVybGF5OigpPT5ZKChWKT0+IVYpLHdpZHRoOkYxfSksSihCMix7cGFuZWxXaWR0aDpGMSx2aXNpYmxlOlkxLG9uUG9pbnRlckRvd246UzEsYXJpYUxhYmVsOiJSZXNpemUgdG9vbHMgcGFuZWwifSksSihTMyx7b3BlbjpGLG9uQ2xvc2U6KCk9PmsoITEpLGN1cnJlbnRVZGlkOkMuZGV2aWNlLHdpZHRoOkMxfSksSihCMix7cGFuZWxXaWR0aDpDMSx2aXNpYmxlOkYsb25Qb2ludGVyRG93bjpxMSxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHBhbmVsIn0pLEoobTgse29wZW46QixvbkNsb3NlOigpPT5MKCExKSx1ZGlkOkMuZGV2aWNlLHRhcmdldHM6Yy50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6QSxvblNlbGVjdFRhcmdldDpfLGxvYWRpbmc6Yy5sb2FkaW5nLGVycm9yOmMuZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIGMucmVmcmVzaCgpLHdpZHRoOkcxfSksSihCMix7cGFuZWxXaWR0aDpHMSx2aXNpYmxlOkIsb25Qb2ludGVyRG93bjpQMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpKKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzVweF0gW3RyYW5zaXRpb246Y29sb3JfMC4zc10iLHN0eWxlOntjb2xvcjpEPyIjNGFkZTgwIjoiIzY2NiJ9LGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6RD8iIzRhZGU4MCI6IiM2NjYifX0pLEQ/ImxpdmUiOiJjb25uZWN0aW5nIl19KX0pXX0pfSl9cjUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKEoodTQse30pKTsKPC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+","base64").toString("utf-8");return Xe}function XC(){try{let _=D_("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),e=JSON.parse(_),S=[];for(let[t,s]of Object.entries(e.devices)){if(!/SimRuntime\.iOS-/i.test(t))continue;for(let i of s){if(i.isAvailable===!1)continue;S.push({...i,runtime:t.replace(/^.*SimRuntime\./,"")})}}return S}catch{return[]}}function kC(){try{let _=Number(D_("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),e=Number(D_("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),S=D_("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),t=(i)=>{let C=S.match(i);return C?Number(C[1]):0},s=t(/Pages free:\s+(\d+)/)+t(/Pages inactive:\s+(\d+)/)+t(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(_)?_:0,availableBytes:s*(Number.isFinite(e)?e:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function KC(){try{let _=D_("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),e={},S=0,t=/\/Devices\/([0-9A-F-]{36})\//i;for(let s of _.split(`
|
|
40
|
+
`)){let i=s.trimStart();if(!i)continue;let C=t.exec(i);if(!C)continue;let o=Number(i.split(/\s+/,1)[0]);if(!Number.isFinite(o))continue;let r=o*1024,A=C[1].toUpperCase();e[A]=(e[A]??0)+r,S+=r}return{perUdid:e,totalBytes:S}}catch{return{perUdid:{},totalBytes:0}}}function xC(){let{totalBytes:_,availableBytes:e}=kC(),S=KC(),t=Object.keys(S.perUdid).length,s=t>0?S.totalBytes/t:0,i=s>=268435456?"measured":"estimated",C=i==="measured"?s:IC,o=C>0?Math.max(0,Math.floor(e/C)):0;return{totalBytes:_,availableBytes:e,runningSimulators:t,perSimAvgBytes:C,perSimSource:i,estimatedAdditional:o}}function zC(){if(process.argv[0]&&/(^|\/)serve-sim$/.test(process.argv[0]))return{command:process.argv[0],baseArgs:[]};if(process.argv[1]&&/(^|\/)serve-sim\.js$/.test(process.argv[1]))return{command:process.argv[0],baseArgs:[process.argv[1]]};try{let _=D_("command -v serve-sim",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim();if(_)return{command:_,baseArgs:[]}}catch{}return null}function jC(_,e){let S=Buffer.from(_),t=Buffer.from(e);if(S.length!==t.length)return!1;return dC(S,t)}function JC(_){if(!_)return!1;return _.split(";",1)[0].trim().toLowerCase()==="application/json"}function ZC(_){let e=(_?.basePath??"/.sim").replace(/\/+$/,""),S=_?.execToken??gC(32).toString("base64url");return(t,s,i)=>{let C=t.url??"",o=C.indexOf("?"),r=o===-1?C:C.slice(0,o),A=PC(C)??_?.device??null,B=e==="/"?"/devtools-frontend":`${e}/devtools-frontend`;if(r===B||r.startsWith(`${B}/`)){(async()=>{let R=r===B?"inspector.html":r.slice(B.length+1);if(R.split("/").some((a)=>a==="..")){s.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),s.end("Invalid asset path");return}try{let a=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${HC}/${R}${o===-1?"":C.slice(o)}`),p={"Cache-Control":"public, max-age=604800"},O=a.headers.get("content-type");if(O)p["Content-Type"]=O;s.writeHead(a.status,p),s.end(Buffer.from(await a.arrayBuffer()))}catch(a){s.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),s.end(a instanceof Error?a.message:"Failed to load DevTools frontend")}})();return}if(r===e||r===e+"/"){let R=B_(),a=c_(R,A),p=qC();if(!a){let O=JSON.stringify({basePath:e,execToken:S});p=p.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${O}</script>`)}if(a){let u=`<script>window.__SIM_PREVIEW__=${JSON.stringify(Ie(a,e,Bt(),S))}</script>`;p=p.replace("<!--__SIM_PREVIEW_CONFIG__-->",u)}s.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),s.end(p);return}if(r===e+"/grid/api/memory"){s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify(xC()));return}if(r===e+"/grid/api"){let R=B_(),a=new Map(R.map((F)=>[F.device,F])),O=XC().map((F)=>{let E=a.get(F.udid);return{device:F.udid,name:F.name,runtime:F.runtime,state:F.state,helper:E?{port:E.port,url:E.url,streamUrl:E.streamUrl,wsUrl:E.wsUrl}:null}}),u=(F)=>{if(/iphone/i.test(F))return 0;if(/ipad/i.test(F))return 1;if(/watch/i.test(F))return 2;if(/(apple\s*tv|^tv\b)/i.test(F))return 3;if(/vision|reality/i.test(F))return 4;return 5},v=(F)=>F.helper?0:F.state==="Booted"?1:2;O.sort((F,E)=>u(F.name)-u(E.name)||v(F)-v(E)||F.name.localeCompare(E.name)),s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify({devices:O}));return}if(r===e+"/grid/api/shutdown"&&t.method==="POST"){let R="";t.on("data",(a)=>{R+=typeof a==="string"?a:a.toString()}),t.on("end",()=>{let a="";try{a=JSON.parse(R).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(a)){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}M_={at:0,booted:null},Dt("xcrun",["simctl","shutdown",a],{timeout:30000},(p,O,u)=>{if(p){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:u?.toString().trim()||p.message}));return}s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!0}))})});return}if(r===e+"/grid/api/start"&&t.method==="POST"){let R="";t.on("data",(a)=>{R+=typeof a==="string"?a:a.toString()}),t.on("end",()=>{let a="";try{a=JSON.parse(R).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(a)){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let p=zC();if(!p){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:"serve-sim CLI not found in PATH. Install it (npm i -g serve-sim) and retry."}));return}let O=Ge(p.command,[...p.baseArgs,"--detach",a],{stdio:["ignore","pipe","pipe"],detached:!1}),u="",v="";O.stdout?.on("data",(E)=>{u+=E.toString()}),O.stderr?.on("data",(E)=>{v+=E.toString()});let F=setTimeout(()=>{try{O.kill("SIGTERM")}catch{}},180000);O.on("close",(E)=>{if(clearTimeout(F),E===0)s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!0,stdout:u.trim()}));else s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:v.trim()||u.trim()||`serve-sim exited with code ${E}`}))})});return}if(r===e+"/devtools"){(async()=>{let R=B_();if(!c_(R,A)){s.writeHead(404,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:"No serve-sim device"}));return}try{let p=await qe(),O=await p.listTargets(),u=GC(t.headers?.host,p.port),v=O.map((F)=>({...F,webSocketDebuggerUrl:`ws://${u}/devtools/page/${encodeURIComponent(F.id)}`,devtoolsFrontendUrl:UC(B,u,F.id)}));s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify({port:p.port,targets:v}))}catch(p){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:p instanceof Error?p.message:"Failed to start inspect-webkit"}))}})();return}if(r===e+"/devtools/release"&&t.method==="POST"){let R="";t.on("data",(a)=>R+=a),t.on("end",async()=>{try{let a=R?JSON.parse(R):{};(await qe()).releaseHighlight?.(a.targetId),s.writeHead(200,{"Content-Type":"application/json"}),s.end("{}")}catch(a){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:a instanceof Error?a.message:"Failed to release"}))}});return}if(r===e+"/devtools/highlight"&&t.method==="POST"){let R="";t.on("data",(a)=>R+=a),t.on("end",async()=>{try{let{targetId:a,on:p}=JSON.parse(R||"{}");if(!a){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:"Missing targetId"}));return}let O=await qe();if(!O.highlightTarget){s.writeHead(501,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await O.highlightTarget(a,!!p),s.writeHead(200,{"Content-Type":"application/json"}),s.end("{}")}catch(a){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:a instanceof Error?a.message:"Failed to highlight target"}))}});return}if(r===e+"/api"){let R=B_(),a=c_(R,A);s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify(a?Ie(a,e,Bt(),S):null));return}if(r===e+"/ax"){let R=B_(),a=c_(R,A);if(!a){s.writeHead(404),s.end("No serve-sim device");return}s.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),s.write(`:
|
|
41
41
|
|
|
42
|
-
`);let
|
|
42
|
+
`);let O=NC.get(a.device,a.port).addClient(s);t.on("close",O);return}if((r===e+"/exec"||r===e+"/exec/")&&t.method==="POST"){if(!JC(t.headers["content-type"])){s.writeHead(415,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let R=t.headers.origin;if(R)try{if(new URL(R).host!==t.headers.host){s.writeHead(403,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{s.writeHead(403,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let a=t.headers.authorization??"",p=/^Bearer\s+(.+)$/i.exec(a);if(!p||!jC(p[1].trim(),S)){s.writeHead(401,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let O="",u=!1;t.on("data",(v)=>{if(O+=typeof v==="string"?v:v.toString(),O.length>4194304)u=!0,s.writeHead(413,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),t.destroy()}),t.on("end",()=>{if(u)return;let v="";try{v=JSON.parse(O).command??""}catch{}if(!v){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}uC(v,{maxBuffer:16777216},(F,E,T)=>{s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:E.toString(),stderr:T.toString(),exitCode:F?F.code??1:0}))})});return}if(r===e+"/logs"){let R=B_(),a=c_(R,A);if(!a){s.writeHead(404),s.end("No serve-sim device");return}let p=a.device;s.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),s.write(`:
|
|
43
43
|
|
|
44
|
-
`);let
|
|
45
|
-
`))!==-1){let E=
|
|
44
|
+
`);let O=Ge("xcrun",["simctl","spawn",p,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),u="";O.stdout.on("data",(v)=>{u+=v.toString();let F;while((F=u.indexOf(`
|
|
45
|
+
`))!==-1){let E=u.slice(0,F).trim();if(u=u.slice(F+1),E)s.write("data: "+E+`
|
|
46
46
|
|
|
47
|
-
`)}}),
|
|
47
|
+
`)}}),O.on("close",()=>s.end()),t.on("close",()=>O.kill());return}if(r===e+"/appstate"){let R=B_(),a=c_(R,A);if(!a){s.writeHead(404),s.end("No serve-sim device");return}let p=a.device;s.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),s.write(`:
|
|
48
48
|
|
|
49
|
-
`);let
|
|
49
|
+
`);let O="";(async()=>{try{let T=new AbortController,f=setTimeout(()=>T.abort(),1500),b=await fetch(`http://127.0.0.1:${a.port}/foreground`,{signal:T.signal});if(clearTimeout(f),!b.ok)return;let y=await b.json();if(!y.bundleId||!yt(y.bundleId))return;if(s.writableEnded)return;O=y.bundleId;let $=await nt(p,y.bundleId);if(s.writableEnded)return;s.write("data: "+JSON.stringify({bundleId:y.bundleId,pid:y.pid,isReactNative:$})+`
|
|
50
50
|
|
|
51
|
-
`)}catch{}})();let
|
|
51
|
+
`)}catch{}})();let u=Ge("xcrun",["simctl","spawn",p,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),v=!1,F=async(T,f)=>{if(!yt(T))return;if(T===O)return;O=T;let b=await nt(p,T);if(!v)s.write("data: "+JSON.stringify({bundleId:T,pid:f,isReactNative:b})+`
|
|
52
52
|
|
|
53
|
-
`)},E="";
|
|
54
|
-
`))!==-1){let b=E.slice(0,f).trim();if(E=E.slice(f+1),!b)continue;let y;try{y=JSON.parse(b).eventMessage??""}catch{continue}let $=
|
|
55
|
-
`]={usage:40,shift:!1},_["\t"]={usage:43,shift:!1},_}var
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
53
|
+
`)},E="";u.stdout.on("data",(T)=>{E+=T.toString();let f;while((f=E.indexOf(`
|
|
54
|
+
`))!==-1){let b=E.slice(0,f).trim();if(E=E.slice(f+1),!b)continue;let y;try{y=JSON.parse(b).eventMessage??""}catch{continue}let $=Tt(y);if(!$)continue;F($.bundleId,$.pid)}}),u.on("close",()=>s.end()),t.on("close",()=>{v=!0,u.kill()});return}if(i)i()}}var ot,HC="854a02be78c7ffea104cb523636efa991bef5c5b",Y_=9222,NC,R_=null,VC,hC,mC,M_,Xe=null,IC=1610612736;var Et=Re(()=>{dS();ot=ke(lC(),"serve-sim"),NC=gS(),VC=new Set(["host.exp.Exponent","dev.expo.Exponent"]),hC=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],mC=/(WidgetRenderer|ExtensionHost|\.extension(\.|$)|Service|PlaceholderApp|InCallService|CallUI|InCallUI|com\.apple\.Preferences\.Cellular|com\.apple\.purplebuddy|com\.apple\.chrono|com\.apple\.shuttle|com\.apple\.usernotificationsui)/i;M_={at:0,booted:null}});import{execSync as K,spawn as Je}from"child_process";import{chmodSync as QC,existsSync as X,mkdirSync as se,openSync as ie,closeSync as Ce,readSync as YC,readFileSync as Y,unlinkSync as w_,writeFileSync as re}from"fs";import{createHash as Ze}from"crypto";import{homedir as _r,networkInterfaces as er}from"os";import{join as Q,resolve as t_}from"path";import{tmpdir as ts}from"os";import{join as I_}from"path";import{readdirSync as ss}from"fs";var i_=I_(ts(),"serve-sim"),Pr=I_(i_,"server.json");function k_(_){return I_(i_,`server-${_}.json`)}function K_(){try{return ss(i_).filter((_)=>_.startsWith("server-")&&_.endsWith(".json")).map((_)=>I_(i_,_))}catch{return[]}}function is(){let _={};for(let s=0;s<26;s++){let i=4+s;_[String.fromCharCode(97+s)]={usage:i,shift:!1},_[String.fromCharCode(65+s)]={usage:i,shift:!0}}let e="1234567890",S="!@#$%^&*()";for(let s=0;s<10;s++){let i=30+s;_[e[s]]={usage:i,shift:!1},_[S[s]]={usage:i,shift:!0}}let t=[["-","_",45],["=","+",46],["[","{",47],["]","}",48],["\\","|",49],[";",":",51],["'",'"',52],["`","~",53],[",","<",54],[".",">",55],["/","?",56]];for(let[s,i,C]of t)_[s]={usage:C,shift:!1},_[i]={usage:C,shift:!0};return _[" "]={usage:44,shift:!1},_[`
|
|
55
|
+
`]={usage:40,shift:!1},_["\t"]={usage:43,shift:!1},_}var Cs=is();class x_ extends Error{char;constructor(_){super(`Unsupported character: ${JSON.stringify(_)}`);this.char=_}}async function BS(_,e,S=4){return new Promise((t,s)=>{let i=new WebSocket(_);i.binaryType="arraybuffer",i.onopen=async()=>{try{for(let C of e){let o=new TextEncoder().encode(JSON.stringify(C)),r=new Uint8Array(1+o.length);if(r[0]=6,r.set(o,1),i.send(r),S>0)await new Promise((A)=>setTimeout(A,S))}setTimeout(()=>{i.close(),t()},50)}catch(C){i.close(),s(C)}},i.onerror=()=>{s(Error(`WebSocket connection failed: ${_}`))}})}function cS(_){let e=[];for(let S of _){if(S==="\r")continue;let t=Cs[S];if(!t)throw new x_(S);if(t.shift)e.push({type:"down",usage:225});if(e.push({type:"down",usage:t.usage}),e.push({type:"up",usage:t.usage}),t.shift)e.push({type:"up",usage:225})}return e}import{fileURLToPath as rs}from"url";import{dirname as $s}from"path";import{createServer as As}from"http";import{createServer as os}from"net";function DS(_){return $s(rs(_))}function v_(_){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,_)}async function TS(_){return new Promise((e)=>{let S=os();S.once("error",()=>e(!1)),S.once("listening",()=>S.close(()=>e(!0))),S.listen(_)})}async function fS(_){let e=As((S,t)=>{_.middleware(S,t,()=>{if(!t.headersSent)t.statusCode=404;t.end("Not found")})});return e.keepAliveTimeout=0,e.headersTimeout=0,e.requestTimeout=0,e.timeout=0,await new Promise((S,t)=>{let s=(C)=>{e.removeListener("listening",i),t(C)},i=()=>{e.removeListener("error",s),S()};e.once("error",s),e.once("listening",i),e.listen(_.port,_.host??"127.0.0.1")}),{stop:()=>e.close()}}import{execSync as ES}from"child_process";function S_(){try{let _=ES("xcrun simctl list devices booted -j",{encoding:"utf-8"}),e=JSON.parse(_),S=null;for(let[t,s]of Object.entries(e.devices))for(let i of s){if(i.state!=="Booted")continue;if(/iOS/i.test(t))return i.udid;S??=i.udid}return S}catch{}return null}function J(_){if(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(_))return _;try{let e=ES("xcrun simctl list devices -j",{encoding:"utf-8"}),S=JSON.parse(e);for(let t of Object.values(S.devices))for(let s of t)if(s.name.toLowerCase()===_.toLowerCase())return s.udid}catch{}console.error(`Could not resolve device: ${_}`),process.exit(1)}import{execFileSync as p_}from"child_process";import{chmodSync as ys,existsSync as y_,mkdtempSync as ns,rmSync as bS,writeFileSync as OS}from"fs";import{homedir as as,tmpdir as Rs}from"os";import{join as C_}from"path";var fe={camera:"kTCCServiceCamera",microphone:"kTCCServiceMicrophone",photos:"kTCCServicePhotos","photos-add":"kTCCServicePhotosAdd",contacts:"kTCCServiceAddressBook",calendar:"kTCCServiceCalendar",reminders:"kTCCServiceReminders",motion:"kTCCServiceMotion","media-library":"kTCCServiceMediaLibrary",siri:"kTCCServiceSiri",speech:"kTCCServiceSpeechRecognition",faceid:"kTCCServiceFaceID","user-tracking":"kTCCServiceUserTracking",homekit:"kTCCServiceWillow"},Bs={push:{permission:"notifications"},notification:{permission:"notifications"},"photo-library":{permission:"photos"},photo:{permission:"photos"},"location-always":{permission:"location",value:"always"},"location-in-use":{permission:"location",value:"inuse"},"location-inuse":{permission:"location",value:"inuse"},mic:{permission:"microphone"}};function vS(_){if(_==="notifications")return{kind:"notifications",values:["critical"]};if(_==="location")return{kind:"location",values:["always","inuse","never"]};let e=fe[_];if(e)return{kind:"tcc",tccService:e,tccAuthVersion:_==="photos"?2:1,values:_==="photos"?["limited"]:void 0};return null}function ce(){return["notifications","location",...Object.keys(fe)]}var Be=/^[A-Za-z0-9][A-Za-z0-9.-]*$/;function cs(_){let e,S,t=[];for(let B=0;B<_.length;B++){let R=_[B];if(R===void 0)continue;if(R==="-d"||R==="--device"){if(e=_[++B],!e)return{error:"Missing value for -d/--device"}}else if(R==="--value"){if(S=_[++B],S===void 0)return{error:"Missing value for --value"}}else if(R.startsWith("--value="))S=R.slice(8);else if(R.startsWith("-"))return{error:`Unknown flag: ${R}`};else t.push(R)}let s=t[0];if(!s)return{error:"Missing subcommand: grant | revoke | reset | list"};let i={grant:"grant",revoke:"revoke",deny:"revoke",reset:"reset",list:"list"}[s];if(!i)return{error:`Unknown subcommand: ${s}`};if(i==="list"){let B=t[1];if(B&&!Be.test(B))return{error:`Invalid bundle id: ${B}`};return{verb:i,bundleId:B,device:e}}let C=t[1];if(!C)return{error:`Missing permission name for "${i}"`};if(i==="reset"&&C==="all"){let B=t[2];if(!B)return{error:"Missing bundle id for `reset all`"};if(!Be.test(B))return{error:`Invalid bundle id: ${B}`};return{verb:i,permission:"all",bundleId:B,device:e}}let o=Bs[C];if(o){if(C=o.permission,o.value&&!S)S=o.value}let r=vS(C);if(!r)return{error:`Unknown permission: ${t[1]}
|
|
56
|
+
Supported: ${ce().join(", ")}`};let A=t[2];if(!A)return{error:`Missing bundle id for "${i} ${C}"`};if(!Be.test(A))return{error:`Invalid bundle id: ${A}`};if(!S&&t[3])S=t[3];if(S!==void 0){if(!r.values||!r.values.includes(S)){let B=r.values?r.values.join(", "):"(none)";return{error:`Invalid --value "${S}" for ${C}. Allowed: ${B}`}}}return{verb:i,permission:C,value:S,bundleId:A,device:e}}function Ee(_){return C_(as(),"Library/Developer/CoreSimulator/Devices",_,"data/Library")}function pS(_){return C_(Ee(_),"TCC/TCC.db")}function Ds(_){return C_(Ee(_),"BulletinBoard")}function Ts(_){return C_(Ee(_),"Caches/locationd/clients.plist")}function fs(_){let e=Date.now()+5000;for(;;)try{return _()}catch(S){let t=String(S?.stderr??S?.message??S);if(Date.now()<e&&/database is locked|database is busy/i.test(t)){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,200);continue}throw S}}function De(_,e){return fs(()=>p_("sqlite3",[_,e],{encoding:"utf-8"}))}function Es(_,e,S,t,s){let i=pS(_);if(!y_(i))throw Error(`TCC.db not found for ${_}. Is the simulator booted?
|
|
57
|
+
${i}`);if(De(i,`DELETE FROM access WHERE service='${e}' AND client='${t}' AND client_type=0;`),s!=="delete")De(i,`INSERT INTO access (service, client, client_type, auth_value, auth_reason, auth_version, flags) VALUES ('${e}', '${t}', 0, ${s}, 2, ${S}, 0);`)}var Fs=Object.fromEntries(Object.entries(fe).map(([_,e])=>[e,_]));function bs(_,e){let S=pS(_);if(!y_(S))return{};let t=e?` WHERE client='${e}'`:"",s=De(S,`SELECT service, auth_value FROM access${t};`),i={};for(let C of s.split(`
|
|
58
|
+
`)){let[o,r]=C.split("|");if(o)i[Fs[o]??o]=Number(r)}return i}function m_(_){return p_("plutil",_,{encoding:"utf-8"})}function Te(_,e,S={}){let t=[];for(let s of e)t.push("-c",s);t.push(_);try{return p_("/usr/libexec/PlistBuddy",t,{encoding:"utf-8",stdio:["ignore","pipe","pipe"]})}catch(s){if(S.ignoreErrors)return String(s?.stdout??"");throw Error(String(s?.stderr??s?.stdout??s?.message??s).trim())}}function uS(){return ns(C_(Rs(),"serve-sim-perm-"))}function Os(_,e,S,t){let s="grant",i="location";if(S==="reset")s="reset";else if(S==="revoke"||t==="never")s="revoke";else if(t==="always")i="location-always";try{p_("xcrun",["simctl","privacy",_,s,i,e],{stdio:["ignore","ignore","pipe"]})}catch(C){throw Error(`simctl privacy ${s} ${i} failed: `+String(C?.stderr??C?.message??C).trim())}}function vs(_,e){if(!e)return null;let S=Ts(_);if(!y_(S))return null;let t;try{t=m_(["-convert","xml1","-o","-",S])}catch{return null}let s=t.match(new RegExp(`<key>i${e.replace(/[.-]/g,"\\$&")}:</key>\\s*<dict>[\\s\\S]*?<key>Authorization</key>\\s*<integer>(\\d+)</integer>`));return s?{Authorization:Number(s[1])}:null}var ps="YnBsaXN0MDDUAQIDBAUGTU5YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCDAxQUgfSVUkbnVsbN8QFQkKCwwNDg8QERITFBUWFxgZGhscHR4fHiEiIx4jJicfHygjIh8jIyMjI18QFHN1cHByZXNzRnJvbVNldHRpbmdzXxASc3VwcHJlc3NlZFNldHRpbmdzWmhpZGVXZWVBcHBZc2VjdGlvbklEW2Rpc3BsYXlOYW1lVGljb25fEBlkaXNwbGF5c0NyaXRpY2FsQnVsbGV0aW5zW3N1YnNlY3Rpb25zXxATc2VjdGlvbkluZm9TZXR0aW5nc1YkY2xhc3NfEA9zZWN0aW9uQ2F0ZWdvcnlfEBJzdWJzZWN0aW9uUHJpb3JpdHlXdmVyc2lvbl8QGm1hbmFnZWRTZWN0aW9uSW5mb1NldHRpbmdzV2FwcE5hbWVbc2VjdGlvblR5cGVfEBBmYWN0b3J5U2VjdGlvbklEXxAPZGF0YVByb3ZpZGVySURzXHN1YnNlY3Rpb25JRFdmaWx0ZXJzXxAYcGF0aFRvV2VlQXBwUGx1Z2luQnVuZGxlCBAACIACgAWAAAiAAIADgAeABoAAgAWAAIAAgACAAIAAXxAmY29tLkxlb05hdGFuLkxOUG9wdXBDb250cm9sbGVyRXhhbXBsZS3ZMjM0NTY3Ejg5Ojs7Ox8fPjtAXHB1c2hTZXR0aW5nc18QGXNob3dzSW5Ob3RpZmljYXRpb25DZW50ZXJfEBNhbGxvd3NOb3RpZmljYXRpb25zXxAWc2hvd3NPbkV4dGVybmFsRGV2aWNlc18QFWNvbnRlbnRQcmV2aWV3U2V0dGluZ15jYXJQbGF5U2V0dGluZ18QEXNob3dzSW5Mb2NrU2NyZWVuWWFsZXJ0VHlwZRA/CQkJgAQJEAHSQkNERVokY2xhc3NuYW1lWCRjbGFzc2VzXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzokZHXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzWE5TT2JqZWN0V0xOUG9wdXDSQkNKS11CQlNlY3Rpb25JbmZvokxHXUJCU2VjdGlvbkluZm9fEA9OU0tleWVkQXJjaGl2ZXLRT1BUcm9vdIABAAgAEQAaACMALQAyADcAQABGAHMAigCfAKoAtADAAMUA4QDtAQMBCgEcATEBOQFWAV4BagF9AY8BnAGkAb8BwAHCAcMBxQHHAckBygHMAc4B0AHSAdQB1gHYAdoB3AHeAeACCQIcAikCRQJbAnQCjAKbAq8CuQK7ArwCvQK+AsACwQLDAsgC0wLcAvQC9wMPAxgDIAMlAzMDNgNEA1YDWQNeAAAAAAAAAgEAAAAAAAAAUQAAAAAAAAAAAAAAAAAAA2A=";function lS(_){return C_(Ds(_),"VersionedSectionInfo.plist")}function us(_,e,S,t){let s=C_(_,"section-info.plist");return OS(s,Buffer.from(ps,"base64")),Te(s,[`Set :$objects:2 ${e}`,`Set :$objects:3:allowsNotifications ${S?"true":"false"}`,`Add :$objects:3:criticalAlertSetting integer ${t?2:0}`,`Set :$objects:5 ${e}`,"Save"]),m_(["-convert","binary1",s]),s}function ls(_,e,S){let t=lS(_);if(!y_(t)){if(S==="reset")return;let i=Date.now()+5000;while(!y_(t)&&Date.now()<i)Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250);if(!y_(t))throw Error(`BulletinBoard plist not found for ${_}. The simulator may still `+`be booting — wait for it to finish and retry.
|
|
59
|
+
${t}`)}try{p_("chflags",["nouchg",t])}catch{}let s=uS();try{if(Te(t,[`Delete :sectionInfo:${e}`,"Save"],{ignoreErrors:!0}),S!=="reset"){let i=us(s,e,S!=="revoke",S==="critical");Te(t,[`Import :sectionInfo:${e} ${i}`,"Save"])}m_(["-convert","binary1",t])}finally{bS(s,{recursive:!0,force:!0});try{ys(t,420),p_("chflags",["uchg",t])}catch{}}}function ws(_,e){if(!e)return null;let S=lS(_);if(!y_(S))return null;let t;try{t=m_(["-extract","sectionInfo","xml1","-o","-",S])}catch{return null}let s=t.match(new RegExp(`<key>${e.replace(/[.-]/g,"\\$&")}</key>\\s*<data>([\\s\\S]*?)</data>`));if(!s?.[1])return null;let i=uS();try{let C=C_(i,"section-info.plist");OS(C,Buffer.from(s[1].replace(/\s/g,""),"base64"));let o=m_(["-convert","xml1","-o","-",C]);return{allowsNotifications:/<key>allowsNotifications<\/key>\s*<true\/>/.test(o),critical:/<key>criticalAlertSetting<\/key>\s*<integer>2<\/integer>/.test(o)}}catch{return null}finally{bS(i,{recursive:!0,force:!0})}}function FS(_,e,S,t,s){let i=vS(S);if(i.kind==="tcc"){let C=e==="reset"?"delete":e==="revoke"?0:t==="limited"?3:2;Es(_,i.tccService,i.tccAuthVersion,s,C)}else if(i.kind==="notifications")ls(_,s,e==="reset"?"reset":e==="revoke"?"revoke":t==="critical"?"critical":"grant");else Os(_,s,e,t)}async function wS(_){let e=_.includes("-q")||_.includes("--quiet"),S=_.filter((C)=>C!=="-q"&&C!=="--quiet"),t=cs(S);if("error"in t)console.error(t.error),console.error(`
|
|
60
|
+
Usage:
|
|
61
|
+
serve-sim permissions grant <permission> <bundle-id> [--value <v>] [-d <udid|name>]
|
|
62
|
+
serve-sim permissions revoke <permission> <bundle-id> [-d <udid|name>]
|
|
63
|
+
serve-sim permissions reset <permission|all> <bundle-id> [-d <udid|name>]
|
|
64
|
+
serve-sim permissions list [bundle-id] [-d <udid|name>]
|
|
65
|
+
|
|
66
|
+
Permissions: ${ce().join(", ")}`),process.exit(1);let s=t.device?J(t.device):S_();if(!s)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);if(t.verb==="list"){let C={udid:s,bundleId:t.bundleId??null,tcc:bs(s,t.bundleId),location:vs(s,t.bundleId),notifications:ws(s,t.bundleId)};console.log(JSON.stringify(C,null,e?0:2)),process.exit(0)}let i=t.bundleId;try{if(t.permission==="all")for(let C of ce())FS(s,"reset",C,void 0,i);else FS(s,t.verb,t.permission,t.value,i)}catch(C){console.error(C?.message??String(C)),process.exit(1)}if(e)console.log(JSON.stringify({udid:s,verb:t.verb,permission:t.permission,value:t.value??null,bundleId:i}));else{let C=t.value?` (${t.value})`:"";console.log(`\uD83D\uDD10 ${t.verb} ${t.permission}${C} for ${i} on ${s}`)}process.exit(0)}var u_="./serve-sim-bin-y7tthc3e.";var A_=DS(import.meta.url);function Qe(){if(!X(i_))se(i_,{recursive:!0})}function __(_){if(_)return Ke(k_(_));for(let e of K_()){let S=Ke(e);if(S)return S}return null}var ee={at:0,booted:null};function Sr(){let _=Date.now();if(ee.booted&&_-ee.at<1000)return ee.booted;try{let e=K("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),S=JSON.parse(e),t=new Set;for(let s of Object.values(S.devices))for(let i of s)if(i.state==="Booted")t.add(i.udid);return ee={at:_,booted:t},t}catch{return null}}function Ke(_){try{if(!X(_))return null;let e=JSON.parse(Y(_,"utf-8"));try{process.kill(e.pid,0)}catch{return w_(_),null}let S=Sr();if(S&&!S.has(e.device)){console.error(`[serve-sim] Helper pid ${e.pid} is bound to device ${e.device} which is no longer booted — killing stale helper.`);try{process.kill(e.pid,"SIGTERM")}catch{}try{w_(_)}catch{}return null}return e}catch{return null}}function $e(){let _=[];for(let e of K_()){let S=Ke(e);if(S)_.push(S)}return _}function Ft(_){Qe(),re(k_(_.device),JSON.stringify(_,null,2))}function q_(_){if(_)try{w_(k_(_))}catch{}else for(let e of K_())try{w_(e)}catch{}}function tr(){let _=u_.startsWith("/$bunfs/");if(!_&&X(u_))return u_;if(!_){let i=t_(A_,"../bin/serve-sim-bin");if(X(i))return i;throw Error(`serve-sim-bin not found. Run 'bun run build:swift' first.
|
|
67
|
+
Checked: ${u_}, ${i}`)}let e=Y(u_),S=Ze("sha256").update(e).digest("hex").slice(0,16),t=t_(_r(),"Library/Caches/serve-sim");se(t,{recursive:!0});let s=t_(t,`serve-sim-bin-${S}`);if(!X(s)){re(s,e),QC(s,493);try{K(`codesign -s - -f ${JSON.stringify(s)}`,{stdio:"ignore"})}catch{}}return s}function Ot(){let _=null;try{_=K("xcode-select -p",{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{}if(!_)return process.env;let e=`${_}/Library/PrivateFrameworks`;return{...process.env,DYLD_FRAMEWORK_PATH:process.env.DYLD_FRAMEWORK_PATH?`${e}:${process.env.DYLD_FRAMEWORK_PATH}`:e}}function vt(){try{let _=K("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse(_),S=Object.keys(e.devices).filter((t)=>/SimRuntime\.iOS-/i.test(t)).sort((t,s)=>{let i=(t.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),C=(s.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(C[0]??0)-(i[0]??0)||(C[1]??0)-(i[1]??0)});for(let t of S){let i=(e.devices[t]??[]).find((C)=>C.isAvailable!==!1&&/^iPhone\b/i.test(C.name));if(i)return{udid:i.udid,name:i.name}}}catch{}return null}function bt(_){try{let e=K("xcrun simctl list devices -j",{encoding:"utf-8"}),S=JSON.parse(e);for(let t of Object.values(S.devices))for(let s of t)if(s.udid===_)return s.name}catch{}return null}function pt(_){try{let e=K("xcrun simctl list devices -j",{encoding:"utf-8"}),S=JSON.parse(e);for(let t of Object.values(S.devices))for(let s of t)if(s.udid===_)return s.state==="Booted"}catch{}return!1}function f_(_){try{return process.kill(_,0),!0}catch{return!1}}function xe(_){try{process.kill(_,"SIGTERM")}catch{return}let e=Date.now()+500;while(Date.now()<e)try{process.kill(_,0),v_(25)}catch{return}try{process.kill(_,"SIGKILL")}catch{}let S=Date.now()+500;while(Date.now()<S)try{process.kill(_,0),v_(25)}catch{return}}function sr(_){try{let e=K(`lsof -ti tcp:${_}`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!e)return[];let S=process.pid;return e.split(`
|
|
68
|
+
`).map((t)=>parseInt(t,10)).filter((t)=>Number.isFinite(t)&&t!==S)}catch{return[]}}function ir(_){let e=sr(_);if(e.length===0)return;console.log(`\x1B[90mPort ${_} busy, killing holder pid(s): ${e.join(", ")}\x1B[0m`);for(let S of e)try{process.kill(S,"SIGKILL")}catch{}v_(100)}function Cr(_){if(!pt(_))try{K(`xcrun simctl boot ${_}`,{encoding:"utf-8",stdio:"pipe"})}catch(e){let S=(e.stderr??e.message??"").toLowerCase();if(!S.includes("booted")&&!S.includes("current state"))throw Error(`Failed to boot device ${_}: ${e.stderr||e.message}`)}try{K("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function rr(){let _=er();for(let e of Object.values(_))for(let S of e??[])if(S.family==="IPv4"&&!S.internal)return S.address;return null}async function ut(_){let e=new Set($e().map((S)=>S.port));for(let S=_;S<_+100;S++){if(e.has(S))continue;if(await TS(S))return S}throw Error(`No available port found in range ${_}-${_+99}`)}async function $r(_){Cr(_);try{K(`xcrun simctl bootstatus ${_} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch(e){if(!pt(_))console.error(`Device ${_} failed to reach booted state: ${e.stderr||e.message}`),process.exit(1)}}async function lt(_,e,S,t){let s=!1;for(let C=0;C<30;C++){if(!t())break;try{if((await fetch(`${e}/health`)).ok){s=!0;break}}catch{}await new Promise((o)=>setTimeout(o,100))}if(s){let C=Date.now()+8000;while(Date.now()<C){if(await new Promise((o)=>setTimeout(o,200)),!t()){s=!1;break}try{if(Y(S,"utf-8").includes("Capture started"))break}catch{}}}let i="";try{i=Y(S,"utf-8").trim()}catch{}return{ready:s,log:i}}async function Ar(_){let{helperPath:e,udid:S,port:t,host:s,logFile:i}=_,C=`http://${s}:${t}`;Qe();let o=ie(i,"w"),r=Je(e,[S,"--port",String(t)],{detached:!0,stdio:["ignore",o,o],env:Ot()});r.unref(),Ce(o);let A=r.pid,B=!1;r.once("exit",()=>{B=!0});let{ready:R,log:a}=await lt(A,C,i,()=>!B&&f_(A));return{ready:R,pid:A,exited:B||!f_(A),log:a}}async function or(_){let{helperPath:e,udid:S,port:t,host:s,logFile:i}=_,C=`http://${s}:${t}`;Qe();let o=ie(i,"w"),r=Je(e,[S,"--port",String(t)],{detached:!1,stdio:["ignore",o,o],env:Ot()});Ce(o);let A=r.pid,B=!1;r.once("exit",()=>{B=!0});let{ready:R,log:a}=await lt(A,C,i,()=>!B&&f_(A));return{ready:R,child:r,log:a}}async function wt(_,e,S){await $r(_);let t="127.0.0.1",s=tr(),i=Q(i_,`server-${_}.log`),C={helperPath:s,udid:_,port:e,host:t,logFile:i},o="",r=2;for(let B=1;B<=r;B++){if(ir(e),S.detach){let R=await Ar(C);if(R.ready){let a={pid:R.pid,port:e,device:_,url:`http://${t}:${e}`,streamUrl:`http://${t}:${e}/stream.mjpeg`,wsUrl:`ws://${t}:${e}/ws`};return Ft(a),{pid:R.pid}}xe(R.pid),o=R.log}else{let R=await or(C);if(R.ready){let a={pid:R.child.pid,port:e,device:_,url:`http://${t}:${e}`,streamUrl:`http://${t}:${e}/stream.mjpeg`,wsUrl:`ws://${t}:${e}/ws`};return Ft(a),{pid:R.child.pid,child:R.child}}xe(R.child.pid),o=R.log}if(B<r)await new Promise((R)=>setTimeout(R,500))}let A=o?`Helper failed:
|
|
69
|
+
${o}`:"Helper process failed to start";console.error(A),process.exit(1)}async function yr(_,e,S){let t=_.length>0?_.map(J):(()=>{let A=S_();if(A)return[A];let B=vt();if(!B)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!S)console.log(`No booted simulator — booting ${B.name}...`);return[B.udid]})(),s=new Map,i=[],C=e;for(let A of t){let B=__(A);if(B){if(!S){let u=bt(A)??A;if(t.length>1)console.log(`
|
|
70
|
+
==> ${u} (${A}) <==`);console.log(` Already running on port ${B.port}`),console.log(` Stream: ${B.streamUrl}`),console.log(` WebSocket: ${B.wsUrl}`)}i.push(B);continue}C=await ut(C);let{pid:R,child:a}=await wt(A,C,{detach:!1});if(a)s.set(A,a);let p="127.0.0.1",O={pid:R,port:C,device:A,url:`http://${p}:${C}`,streamUrl:`http://${p}:${C}/stream.mjpeg`,wsUrl:`ws://${p}:${C}/ws`};if(i.push(O),!S){let u=bt(A)??A;if(t.length>1)console.log(`
|
|
71
|
+
==> ${u} (${A}) <==`);console.log(` Stream: ${O.streamUrl}`),console.log(` WebSocket: ${O.wsUrl}`),console.log(` Port: ${C}`)}C++}if(i.length===1){let A=i[0];console.log(JSON.stringify({url:A.url,streamUrl:A.streamUrl,wsUrl:A.wsUrl,port:A.port,device:A.device}))}else console.log(JSON.stringify({devices:i.map((A)=>({url:A.url,streamUrl:A.streamUrl,wsUrl:A.wsUrl,port:A.port,device:A.device}))}));if(s.size===0)return;let o=!1,r=(A)=>{if(o)return;if(o=!0,!S)console.log(`
|
|
72
|
+
Shutting down...`);for(let[B,R]of s){let a=R.pid;if(a)xe(a);q_(B)}s.clear(),process.exit(A)};for(let[A,B]of s)B.on("exit",(R)=>{if(o)return;if(!S)console.error(`[${A}] Helper exited (code ${R})`);if(q_(A),s.delete(A),s.size===0)r(R??1)});process.on("SIGINT",()=>r(0)),process.on("SIGTERM",()=>r(0)),process.on("SIGHUP",()=>r(0)),process.on("exit",()=>{for(let[A,B]of s){try{if(B.pid)process.kill(B.pid,"SIGTERM")}catch{}try{q_(A)}catch{}}}),await new Promise(()=>{})}async function ze(_,e){let S=_.length>0?_.map(J):(()=>{let i=S_();if(i)return[i];let C=vt();if(!C)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[C.udid]})(),t=[],s=e;for(let i of S){let C=__(i);if(C){t.push(C);continue}s=await ut(s),await wt(i,s,{detach:!0});let o="127.0.0.1";t.push({pid:__(i).pid,port:s,device:i,url:`http://${o}:${s}`,streamUrl:`http://${o}:${s}/stream.mjpeg`,wsUrl:`ws://${o}:${s}/ws`}),s++}return t}function nr(_){if(_.length===1){let e=_[0];console.log(JSON.stringify({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}else console.log(JSON.stringify({devices:_.map((e)=>({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}))}function ar(_){if(_){let S=J(_),t=__(S);if(!t)console.log(JSON.stringify({running:!1,device:S}));else console.log(JSON.stringify({running:!0,url:t.url,streamUrl:t.streamUrl,wsUrl:t.wsUrl,port:t.port,device:t.device,pid:t.pid}));return}let e=$e();if(e.length===0)console.log(JSON.stringify({running:!1}));else if(e.length===1){let S=e[0];console.log(JSON.stringify({running:!0,url:S.url,streamUrl:S.streamUrl,wsUrl:S.wsUrl,port:S.port,device:S.device,pid:S.pid}))}else console.log(JSON.stringify({running:!0,streams:e.map((S)=>({url:S.url,streamUrl:S.streamUrl,wsUrl:S.wsUrl,port:S.port,device:S.device,pid:S.pid}))}))}function Rr(_){if(_){let e=J(_),S=__(e);if(!S){console.log(JSON.stringify({disconnected:!0,device:e}));return}try{process.kill(S.pid,"SIGTERM")}catch{}q_(e),console.log(JSON.stringify({disconnected:!0,device:S.device}))}else{let e=$e();if(e.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let S=[];for(let t of e){try{process.kill(t.pid,"SIGTERM")}catch{}S.push(t.device)}q_(),console.log(JSON.stringify({disconnected:!0,devices:S}))}}async function Br(_){let e,S=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else S.push(_[C]);let t=__(e);if(!t)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let s=S[0];if(!s)console.error("Usage: serve-sim gesture '<json>'"),console.error(`Example: serve-sim gesture '{"type":"begin","x":0.5,"y":0.5}'`),process.exit(1);let i;try{i=JSON.parse(s)}catch{console.error("Invalid JSON:",s),process.exit(1)}return new Promise((C,o)=>{let r=new WebSocket(t.wsUrl);r.binaryType="arraybuffer",r.onopen=()=>{let A=new TextEncoder().encode(JSON.stringify(i)),B=new Uint8Array(1+A.length);B[0]=3,B.set(A,1),r.send(B),setTimeout(()=>{r.close(),C()},50)},r.onerror=()=>{console.error("Failed to connect to serve-sim server at",t.wsUrl),o(Error("WebSocket connection failed"))}})}async function cr(_){let e,S=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else S.push(_[C]);let t=S[0]!==void 0?Number(S[0]):NaN,s=S[1]!==void 0?Number(S[1]):NaN;if(!Number.isFinite(t)||!Number.isFinite(s)||t<0||t>1||s<0||s>1)console.error("Usage: serve-sim tap <x> <y> [-d udid]"),console.error(" x, y are normalized 0..1 of the simulator screen"),console.error(" Example: serve-sim tap 0.5 0.9 # near bottom-center"),process.exit(1);let i=__(e);if(!i)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((C,o)=>{let r=new WebSocket(i.wsUrl);r.binaryType="arraybuffer";let A=(B)=>{let R=new TextEncoder().encode(JSON.stringify({type:B,x:t,y:s})),a=new Uint8Array(1+R.length);a[0]=3,a.set(R,1),r.send(a)};r.onopen=()=>{A("begin"),setTimeout(()=>{A("end"),setTimeout(()=>{r.close(),C()},50)},40)},r.onerror=()=>{console.error("Failed to connect to serve-sim server at",i.wsUrl),o(Error("WebSocket connection failed"))}})}async function Dr(_){let e,S=!1,t,s=[];for(let A=0;A<_.length;A++){let B=_[A];if(B==="--device"||B==="-d")e=_[++A];else if(B==="--stdin")S=!0;else if(B==="--file")t=_[++A];else s.push(B)}let i=[s.length>0,S,t!=null].filter(Boolean).length;if(i===0||i>1)console.error("Usage: serve-sim type <text> [-d udid]"),console.error(" serve-sim type --stdin [-d udid]"),console.error(" serve-sim type --file <path> [-d udid]"),console.error(""),console.error("Only US-keyboard ASCII characters are supported (A-Z, a-z, 0-9,"),console.error("space, newline, tab, and standard punctuation)."),process.exit(1);let C;if(S)C=Y(0,"utf8");else if(t)try{C=Y(t,"utf8")}catch(A){console.error(`Failed to read file '${t}': ${A.message}`),process.exit(1)}else C=s.join(" ");let o;try{o=cS(C)}catch(A){if(A instanceof x_)console.error(A.message),console.error("Supported: A-Z, a-z, 0-9, space, newline, tab, and standard punctuation."),process.exit(1);throw A}let r=__(e);if(!r)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);await BS(r.wsUrl,o)}async function Tr(_){let e,S=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else S.push(_[C]);let t=__(e);if(!t)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let s=S[0],i=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!s||!i.has(s))console.error(`Usage: serve-sim rotate <${[...i].join("|")}> [-d udid]`),process.exit(1);return new Promise((C,o)=>{let r=new WebSocket(t.wsUrl);r.binaryType="arraybuffer",r.onopen=()=>{let A=new TextEncoder().encode(JSON.stringify({orientation:s})),B=new Uint8Array(1+A.length);B[0]=7,B.set(A,1),r.send(B),setTimeout(()=>{r.close(),C()},50)},r.onerror=()=>{console.error("Failed to connect to serve-sim server at",t.wsUrl),o(Error("WebSocket connection failed"))}})}async function fr(_){let e,S=[];for(let i=0;i<_.length;i++)if(_[i]==="--device"||_[i]==="-d")e=_[++i];else S.push(_[i]);let t=__(e);if(!t)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let s=S[0]??"home";return new Promise((i,C)=>{let o=new WebSocket(t.wsUrl);o.binaryType="arraybuffer",o.onopen=()=>{let r=new TextEncoder().encode(JSON.stringify({button:s})),A=new Uint8Array(1+r.length);A[0]=4,A.set(r,1),o.send(A),setTimeout(()=>{o.close(),i()},50)},o.onerror=()=>{console.error("Failed to connect to serve-sim server at",t.wsUrl),C(Error("WebSocket connection failed"))}})}async function Er(_){let e,S=[];for(let A=0;A<_.length;A++)if(_[A]==="--device"||_[A]==="-d")e=_[++A];else S.push(_[A]);let t=S[0],s=(S[1]??"").toLowerCase(),i=s==="on"||s==="1"||s==="true",C={blended:"debug_color_blended",copies:"debug_color_copies",copied:"debug_color_copies",misaligned:"debug_color_misaligned",offscreen:"debug_color_offscreen","slow-animations":"debug_slow_animations",slow:"debug_slow_animations"},o=t?C[t]??t:void 0;if(!o||!["on","off","1","0","true","false"].includes(s))console.error(`Usage: serve-sim ca-debug <option> <on|off> [-d udid]
|
|
73
|
+
option shortcuts: ${Object.keys(C).join(", ")}`),process.exit(1);let r=__(e);if(!r)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((A,B)=>{let R=new WebSocket(r.wsUrl);R.binaryType="arraybuffer",R.onopen=()=>{let a=new TextEncoder().encode(JSON.stringify({option:o,enabled:i})),p=new Uint8Array(1+a.length);p[0]=8,p.set(a,1),R.send(p),setTimeout(()=>{R.close(),A()},50)},R.onerror=()=>{console.error("Failed to connect to serve-sim server at",r.wsUrl),B(Error("WebSocket connection failed"))}})}async function Fr(_){let e;for(let t=0;t<_.length;t++)if(_[t]==="--device"||_[t]==="-d")e=_[++t];let S=__(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((t,s)=>{let i=new WebSocket(S.wsUrl);i.binaryType="arraybuffer",i.onopen=()=>{i.send(new Uint8Array([9])),setTimeout(()=>{i.close(),t()},50)},i.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),s(Error("WebSocket connection failed"))}})}function gt(){let _=[Q(A_,"..","dist","simcam","libSimCameraInjector.dylib"),Q(A_,"simcam","libSimCameraInjector.dylib"),Q(A_,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let e of _)if(X(e))return t_(e);return null}function br(){let _=Q(A_,"..","Sources","SimCameraInjector","build.sh");if(!X(_))throw Error("SimCameraInjector source not found — this build of serve-sim does not "+"include camera support sources. Reinstall from a recent release.");console.error("[serve-sim] building libSimCameraInjector.dylib (one-time)…"),K(`bash "${_}"`,{stdio:"inherit"});let e=gt();if(!e)throw Error("Build succeeded but dylib not found.");return e}function Ye(){let _=[Q(A_,"..","dist","simcam","serve-sim-camera-helper"),Q(A_,"simcam","serve-sim-camera-helper")];for(let e of _)if(X(e))return t_(e);return null}function dt(){let _=Q(A_,"..","Sources","SimCameraHelper","build.sh");if(!X(_))throw Error("SimCameraHelper source not found — webcam support requires building "+"from a checkout that includes Sources/SimCameraHelper.");console.error("[serve-sim] building serve-sim-camera-helper (one-time)…"),K(`bash "${_}"`,{stdio:"inherit"});let e=Ye();if(!e)throw Error("Build succeeded but helper binary not found.");return e}var T_=Q(i_,"simcam");function Or(_){return`/serve-sim-cam-${Ze("sha1").update(_).digest("hex").slice(0,8)}`}function g_(_){return Q(T_,`${_}.pid`)}function _S(_){return Q(T_,`${_}.bundles.json`)}function eS(_){return`/tmp/serve-sim-cam-${Ze("sha1").update(_).digest("hex").slice(0,12)}.sock`}async function U_(_,e){let S=eS(_);if(!X(S))throw Error("camera helper socket not found");let t=await import("net");return await new Promise((s,i)=>{let C=t.createConnection(S),o="",r=!1;C.on("data",(A)=>{o+=A.toString();let B=o.indexOf(`
|
|
63
74
|
`);if(B>=0&&!r){r=!0;try{s(JSON.parse(o.slice(0,B)))}catch(R){i(R)}C.end()}}),C.on("error",(A)=>{if(!r)r=!0,i(A)}),C.on("close",()=>{if(!r)r=!0,i(Error("socket closed"))}),C.write(JSON.stringify(e)+`
|
|
64
|
-
`),setTimeout(()=>{if(!r)r=!0,C.destroy(),i(Error("helper timeout"))},3000)})}function
|
|
75
|
+
`),setTimeout(()=>{if(!r)r=!0,C.destroy(),i(Error("helper timeout"))},3000)})}function Se(_){let e=g_(_);if(!X(e))return!1;let S=Number(Y(e,"utf-8").trim());return Number.isFinite(S)&&f_(S)&&X(eS(_))}function je(_){let e=_S(_);if(!X(e))return[];let S;try{S=JSON.parse(Y(e,"utf-8"))}catch{return[]}let t=null;try{t=Number(Y(g_(_),"utf-8").trim())||null}catch{}if(t==null||S.helperPid!==t)return[];return Array.isArray(S.bundleIds)?S.bundleIds:[]}function vr(_,e,S){let t=je(_),s=t.includes(e)?t:[...t,e],i={helperPid:S,bundleIds:s};if(!X(T_))se(T_,{recursive:!0});re(_S(_),JSON.stringify(i))}function Ht(_){try{w_(_S(_))}catch{}}function Nt(_){let e=g_(_);if(!X(e))return;let S=Number(Y(e,"utf-8").trim());if(Number.isFinite(S)&&f_(S)){try{process.kill(S,"SIGTERM")}catch{}let t=Date.now();while(f_(S)&&Date.now()-t<1500)v_(50)}try{w_(e)}catch{}Ht(_)}function pr(_){if(!X(T_))se(T_,{recursive:!0});let e=Q(T_,`${_.udid}.log`),S=ie(e,"a"),t=["--shm",_.shmName,"--socket",_.socketPath,"--source",_.source];if(_.arg)t.push("--arg",_.arg);if(_.width)t.push("--width",String(_.width));if(_.height)t.push("--height",String(_.height));let s=Je(_.helperBin,t,{detached:!0,stdio:["ignore",S,S]});if(s.unref(),Ce(S),!s.pid)throw Error("failed to spawn camera helper");re(g_(_.udid),String(s.pid)),Ht(_.udid);let i=Date.now();while(Date.now()-i<3000){if(!f_(s.pid))throw Error(`camera helper exited early — see log at ${e}`);if(X(_.socketPath))break;v_(50)}return s.pid}var ur=new Set(["mp4","m4v","mov","qt","avi","mkv","webm","mpg","mpeg","3gp","3g2","ts","wmv"]),lr=new Set(["png","jpg","jpeg","gif","heic","heif","webp","bmp","tif","tiff"]);function Vt(_){let e=_.toLowerCase().split(".").pop()??"";if(ur.has(e))return"video";if(lr.has(e))return"image";let S;try{let t=ie(_,"r");S=Buffer.alloc(16),YC(t,S,0,S.length,0),Ce(t)}catch{return null}if(S.length>=8&&S.slice(4,8).toString("ascii")==="ftyp")return"video";if(S.slice(0,4).toString("ascii")==="RIFF"&&S.length>=12){let t=S.slice(8,12).toString("ascii");if(t==="AVI ")return"video";if(t==="WEBP")return"image"}if(S[0]===26&&S[1]===69&&S[2]===223&&S[3]===163)return"video";if(S[0]===137&&S[1]===80&&S[2]===78&&S[3]===71)return"image";if(S[0]===255&&S[1]===216&&S[2]===255)return"image";if(S.slice(0,6).toString("ascii").startsWith("GIF8"))return"image";if(S[0]===66&&S[1]===77)return"image";return null}function wr(_){if(_.file){let e=t_(_.file),S=Vt(e);if(!S)throw Error(`Could not detect image/video type for: ${e}`);return{kind:S,arg:e}}if(_.webcam)return{kind:"webcam",arg:typeof _.webcam==="string"?_.webcam:void 0};return{kind:"placeholder"}}async function gr(_){let e=Or(_.udid),S=eS(_.udid);if(Se(_.udid)){let i=await U_(_.udid,{action:"switch",source:_.source.kind,arg:_.source.arg});if(!i.ok)throw Error(i.error||"helper rejected switch");return{helperPid:Number(Y(g_(_.udid),"utf-8").trim()),shmName:e,relaunched:!1}}Nt(_.udid);let t=!_.forceBuild&&Ye()||dt();return{helperPid:pr({udid:_.udid,helperBin:t,shmName:e,socketPath:S,source:_.source.kind,arg:_.source.arg}),shmName:e,relaunched:!0}}async function dr(_){let e,S,t,s=!1,i=!1,C=!1,o=!1,r="auto",A=[];for(let y=0;y<_.length;y++){let $=_[y];if($==="--device"||$==="-d"){e=_[++y];continue}if($==="--file"||$==="-f"||$==="--image"||$==="-i"||$==="--video"){S=_[++y];continue}if($==="--webcam"){let n=_[y+1];if(n&&!n.startsWith("-"))t=n,y++;else t=!0;continue}if($==="--list-webcams"){i=!0;continue}if($==="--stop-webcam"){s=!0;continue}if($==="--build"){C=!0;continue}if($==="--quiet"||$==="-q"){o=!0;continue}if($==="--mirror"){let n=_[y+1];if(n==="on"||n==="off"||n==="auto")r=n,y++;else r="on";continue}if($==="--no-mirror"){r="off";continue}if($==="--help"||$==="-h"){console.log(`Usage: serve-sim camera <bundle-id> [-d udid] [source-options] [--build]
|
|
65
76
|
serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]
|
|
66
77
|
serve-sim camera mirror <auto|on|off> [-d udid]
|
|
67
78
|
serve-sim camera --list-webcams
|
|
@@ -99,7 +110,7 @@ Examples:
|
|
|
99
110
|
serve-sim camera switch placeholder # back to placeholder
|
|
100
111
|
serve-sim camera switch ~/Movies/loop.mp4 # hot-swap to file
|
|
101
112
|
serve-sim camera --list-webcams
|
|
102
|
-
serve-sim camera --stop-webcam`);return}A.push($)}if(i){let y=
|
|
113
|
+
serve-sim camera --stop-webcam`);return}A.push($)}if(i){let y=Ye()??dt();K(`"${y}" --list`,{stdio:"inherit"});return}if(s){let y=e?J(e):S_();if(!y)console.error("No booted simulator."),process.exit(1);let $=je(y),n=[];for(let D of $)try{K(`xcrun simctl terminate "${y}" "${D}"`,{stdio:"ignore"}),n.push(D)}catch{}if(Nt(y),o)console.log(JSON.stringify({udid:y,stopped:!0,terminated:n}));else if(console.log(`Stopped camera helper for ${y}`),n.length>0)console.log(`Terminated injected apps: ${n.join(", ")}`);return}if(A[0]==="mirror"){let y=e?J(e):S_();if(!y)console.error("No booted simulator."),process.exit(1);let $=A[1];if($!=="auto"&&$!=="on"&&$!=="off")console.error("Usage: serve-sim camera mirror <auto|on|off> [-d udid]"),process.exit(1);if(!Se(y))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let n=await U_(y,{action:"setMirror",mode:$});if(!n.ok)console.error(`mirror failed: ${n.error??"?"}`),process.exit(1);if(o)console.log(JSON.stringify({udid:y,mirror:$,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${$} on ${y}`)}catch(n){console.error(`mirror failed: ${n?.message??n}`),process.exit(1)}return}if(A[0]==="switch"){let y=e?J(e):S_();if(!y)console.error("No booted simulator."),process.exit(1);let $=A[1],n=A[2];if($&&$!=="placeholder"&&$!=="webcam"&&$!=="image"&&$!=="video"&&$!=="file"){let D=t_($);if(X(D))n=D,$="file"}if($==="file"){if(!n)console.error("camera switch file <path>"),process.exit(1);n=t_(n);let D=Vt(n);if(!D)console.error(`Could not detect image/video type for: ${n}`),process.exit(1);$=D}if(!$||$!=="placeholder"&&$!=="webcam"&&$!=="image"&&$!=="video")console.error("Usage: serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]"),process.exit(1);if(($==="image"||$==="video")&&n)n=t_(n);if(!Se(y))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let D=await U_(y,{action:"switch",source:$,arg:n});if(!D.ok)console.error(`switch failed: ${D.error??"?"}`),process.exit(1);if(o)console.log(JSON.stringify({udid:y,...D}));else console.log(`\uD83D\uDCF7 Switched ${y} → ${D.source}${D.arg?` (${D.arg})`:""}`)}catch(D){console.error(`switch failed: ${D?.message??D}`),process.exit(1)}return}if(A[0]==="status"){let y=e?J(e):S_();if(!y){console.log(JSON.stringify({alive:!1,error:"no booted simulator"}));return}if(!Se(y)){console.log(JSON.stringify({udid:y,alive:!1}));return}let $=null;try{$=Number(Y(g_(y),"utf-8").trim())||null}catch{}let n=je(y);try{let D=await U_(y,{action:"status"});console.log(JSON.stringify({udid:y,alive:!0,helperPid:$,bundleIds:n,...D}))}catch(D){console.log(JSON.stringify({udid:y,alive:!0,helperPid:$,bundleIds:n,error:D?.message??String(D)}))}return}let B=A[0];if(!B)console.error("Usage: serve-sim camera <bundle-id> [--image <path>] [-d udid]"),process.exit(1);let R=e?J(e):S_();if(!R)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);let a=C?null:gt();if(!a)try{a=br()}catch(y){console.error(`Failed to obtain camera dylib: ${y?.message??y}`),process.exit(1)}if(S&&t)console.error("Pick one source: --file or --webcam, not both."),process.exit(1);if(S){if(S=t_(S),!X(S))console.error(`File not found: ${S}`),process.exit(1)}let p;try{p=wr({file:S,webcam:t})}catch(y){console.error(y?.message??String(y)),process.exit(1)}let O=await gr({udid:R,source:p,forceBuild:C}),u=O.shmName,v=O.helperPid;if(r!=="auto"||!O.relaunched)try{await U_(R,{action:"setMirror",mode:r})}catch{}try{K(`xcrun simctl privacy "${R}" grant camera "${B}"`,{stdio:"ignore"})}catch{}try{K(`xcrun simctl terminate "${R}" "${B}"`,{stdio:"ignore"})}catch{}let F={...process.env,SIMCTL_CHILD_DYLD_INSERT_LIBRARIES:a,SIMCTL_CHILD_SIMCAM_SHM_NAME:u,...r!=="auto"?{SIMCTL_CHILD_SIMCAM_MIRROR_MODE:r}:{}},E="";try{E=K(`xcrun simctl launch "${R}" "${B}"`,{env:F,encoding:"utf-8"})}catch(y){console.error(`simctl launch failed: ${y?.stderr??y?.message??y}`),process.exit(1)}let T=E.trim().match(/:\s*(\d+)\s*$/),f=T?Number(T[1]):null;if(v)vr(R,B,v);let b={udid:R,bundleId:B,pid:f,dylib:a,source:p.kind,arg:p.arg??null,shm:u,helperPid:v,mirror:r,hotSwapped:!1,helperRelaunched:O.relaunched};if(o)console.log(JSON.stringify(b));else{let y=O.relaunched?"Injected":"Attached";if(console.log(`\uD83D\uDCF7 ${y} camera into ${B} (pid ${f??"?"}) on ${R}`),console.log(` source: ${p.kind}${p.arg?` (${p.arg})`:""}`),v)console.log(` helper pid: ${v} (shm ${u})`);console.log(` dylib: ${a}`)}}async function Hr(_,e,S,t){let s;if(e.length>0)s=(await ze(e,3100))[0]?.device;else{let p=$e();if(p.length>0)s=p[0]?.device;else console.log("Starting simulator stream..."),s=(await ze(e,3100))[0]?.device}let{simMiddleware:i}=await Promise.resolve().then(() => (Et(),ft)),C=i({basePath:"/",device:s}),o=S?1:50,r=_,A,B=!1;for(let p=0;p<o;p++){let O=_+p;try{await Nr(O,C,t),r=O,B=!0;break}catch(u){if(A=u,u?.code!=="EADDRINUSE")break}}if(!B){if(A?.code==="EADDRINUSE")if(S)console.error(`Port ${_} is already in use. Pass a different --port or stop the other process.`);else console.error(`No available port found in range ${_}-${_+o-1}.`);else console.error(`Failed to start preview server: ${A?.message??A}`);process.exit(1)}let R=t!=="127.0.0.1"&&t!=="localhost"&&t!=="::1",a=rr();if(console.log(""),console.log(` - Local: http://localhost:${r}`),R&&a)console.log(` - Network: http://${a}:${r}`);else if(a)console.log(` - Network: \x1B[2muse --host 0.0.0.0 to expose on http://${a}:${r}\x1B[0m`);else console.log(" - Network: \x1B[2muse --host 0.0.0.0 to expose on the LAN\x1B[0m");console.log(""),process.on("SIGINT",()=>process.exit(0)),process.on("SIGTERM",()=>process.exit(0)),await new Promise(()=>{})}function Nr(_,e,S){return fS({port:_,middleware:e,host:S})}function ht(){console.log(`
|
|
103
114
|
serve-sim - Stream iOS Simulator to the browser
|
|
104
115
|
|
|
105
116
|
Usage:
|
|
@@ -120,6 +131,13 @@ Usage:
|
|
|
120
131
|
serve-sim camera <bundle-id> [-d udid] [--image <path>] [--build]
|
|
121
132
|
Inject a synthetic camera feed and
|
|
122
133
|
launch the app (no build-time changes)
|
|
134
|
+
serve-sim permissions <grant|revoke|reset|list> <permission> <bundle-id>
|
|
135
|
+
Manage app permissions (camera, photos,
|
|
136
|
+
location, notifications, contacts, …).
|
|
137
|
+
grant location <id> --value always
|
|
138
|
+
reset all <id> clears every permission.
|
|
139
|
+
Manages the permission only, not push
|
|
140
|
+
delivery (use xcrun simctl push).
|
|
123
141
|
|
|
124
142
|
Options:
|
|
125
143
|
-p, --port <port> Starting port (preview default: 3200, stream default: 3100)
|
|
@@ -141,4 +159,4 @@ Examples:
|
|
|
141
159
|
serve-sim --detach Start streaming in background (daemon)
|
|
142
160
|
serve-sim --list Show all running streams
|
|
143
161
|
serve-sim --kill Stop all streams
|
|
144
|
-
`)}var M=process.argv.slice(2);if(M[0]==="gesture")await
|
|
162
|
+
`)}var M=process.argv.slice(2);if(M[0]==="gesture")await Br(M.slice(1)),process.exit(0);if(M[0]==="tap")await cr(M.slice(1)),process.exit(0);if(M[0]==="button")await fr(M.slice(1)),process.exit(0);if(M[0]==="type")await Dr(M.slice(1)),process.exit(0);if(M[0]==="rotate")await Tr(M.slice(1)),process.exit(0);if(M[0]==="ca-debug")await Er(M.slice(1)),process.exit(0);if(M[0]==="memory-warning")await Fr(M.slice(1)),process.exit(0);if(M[0]==="camera")await dr(M.slice(1)),process.exit(0);if(M[0]==="permissions")await wS(M.slice(1)),process.exit(0);var G_,mt=!1,Lt=!1,Wt=!1,Pt=!1,Mt=!1,Ut=!1,Gt="127.0.0.1",te=[],qt,Xt;for(let _=0;_<M.length;_++){let e=M[_];switch(e){case"--port":case"-p":G_=parseInt(M[++_]??"3100",10);break;case"--host":Gt=M[++_]??"127.0.0.1";break;case"--detach":case"-d":mt=!0;break;case"--quiet":case"-q":Lt=!0;break;case"--no-preview":Ut=!0;break;case"--list":case"-l":if(Wt=!0,M[_+1]&&!M[_+1].startsWith("-"))qt=M[++_];break;case"--kill":case"-k":if(Pt=!0,M[_+1]&&!M[_+1].startsWith("-"))Xt=M[++_];break;case"--help":case"-h":case"help":Mt=!0;break;default:if(!e.startsWith("-"))te.push(e);else console.error(`Unknown flag: ${e}`),ht(),process.exit(1)}}if(Mt)ht(),process.exit(0);if(Wt)ar(qt),process.exit(0);if(Pt)Rr(Xt),process.exit(0);if(mt){let _=await ze(te,G_??3100);nr(_)}else if(Ut)await yr(te,G_??3100,Lt);else await Hr(G_??3200,te,G_!==void 0,Gt);
|