serve-sim 0.1.48 → 0.1.49-beta.131.1
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/README.md +39 -8
- package/dist/middleware.js +82 -54
- package/dist/serve-sim.js +109 -80
- package/package.json +1 -1
- package/src/middleware.ts +383 -81
- package/src/state.ts +75 -1
package/dist/middleware.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import{createRequire as
|
|
1
|
+
import{createRequire as m4}from"node:module";var x4=Object.create;var{getPrototypeOf:w4,defineProperty:K8,getOwnPropertyNames:S4}=Object;var k4=Object.prototype.hasOwnProperty;function y4($){return this[$]}var f4,b4,v4=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?f4??=new WeakMap:b4??=new WeakMap,G=Y.get($);if(G)return G}Z=$!=null?x4(w4($)):{};let X=Q||!$||!$.__esModule?K8(Z,"default",{value:$,enumerable:!0}):Z;for(let z of S4($))if(!k4.call(X,z))K8(X,z,{get:y4.bind($,z),enumerable:!0});if(J)Y.set($,X);return X};var W7=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports);var h4=($)=>$;function u4($,Q){this[$]=h4.bind(null,Q)}var g4=($,Q)=>{for(var Z in Q)K8($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:u4.bind(Q,Z)})};var c4=($,Q)=>()=>($&&(Q=$($=0)),Q);var q7=m4(import.meta.url);var _$=W7((NY,j$)=>{var a6=1000,r6=a6*60,t6=r6*60,w6=t6*24,UQ=w6*7,jQ=w6*365.25;j$.exports=function($,Q){Q=Q||{};var Z=typeof $;if(Z==="string"&&$.length>0)return _Q($);else if(Z==="number"&&isFinite($))return Q.long?TQ($):AQ($);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify($))};function _Q($){if($=String($),$.length>100)return;var Q=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec($);if(!Q)return;var Z=parseFloat(Q[1]),J=(Q[2]||"ms").toLowerCase();switch(J){case"years":case"year":case"yrs":case"yr":case"y":return Z*jQ;case"weeks":case"week":case"w":return Z*UQ;case"days":case"day":case"d":return Z*w6;case"hours":case"hour":case"hrs":case"hr":case"h":return Z*t6;case"minutes":case"minute":case"mins":case"min":case"m":return Z*r6;case"seconds":case"second":case"secs":case"sec":case"s":return Z*a6;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return Z;default:return}}function AQ($){var Q=Math.abs($);if(Q>=w6)return Math.round($/w6)+"d";if(Q>=t6)return Math.round($/t6)+"h";if(Q>=r6)return Math.round($/r6)+"m";if(Q>=a6)return Math.round($/a6)+"s";return $+"ms"}function TQ($){var Q=Math.abs($);if(Q>=w6)return u7($,Q,w6,"day");if(Q>=t6)return u7($,Q,t6,"hour");if(Q>=r6)return u7($,Q,r6,"minute");if(Q>=a6)return u7($,Q,a6,"second");return $+" ms"}function u7($,Q,Z,J){var Y=Q>=Z*1.5;return Math.round($/Z)+" "+J+(Y?"s":"")}});var k8=W7((FY,A$)=>{function DQ($){Z.debug=Z,Z.default=Z,Z.coerce=K,Z.disable=X,Z.enable=Y,Z.enabled=z,Z.humanize=_$(),Z.destroy=V,Object.keys($).forEach((W)=>{Z[W]=$[W]}),Z.names=[],Z.skips=[],Z.formatters={};function Q(W){let M=0;for(let B=0;B<W.length;B++)M=(M<<5)-M+W.charCodeAt(B),M|=0;return Z.colors[Math.abs(M)%Z.colors.length]}Z.selectColor=Q;function Z(W){let M,B=null,L,A;function D(...q){if(!D.enabled)return;let j=D,T=Number(new Date),_=T-(M||T);if(j.diff=_,j.prev=M,j.curr=T,M=T,q[0]=Z.coerce(q[0]),typeof q[0]!=="string")q.unshift("%O");let E=0;q[0]=q[0].replace(/%([a-zA-Z%])/g,(N,H)=>{if(N==="%%")return"%";E++;let R=Z.formatters[H];if(typeof R==="function"){let C=q[E];N=R.call(j,C),q.splice(E,1),E--}return N}),Z.formatArgs.call(j,q),(j.log||Z.log).apply(j,q)}if(D.namespace=W,D.useColors=Z.useColors(),D.color=Z.selectColor(W),D.extend=J,D.destroy=Z.destroy,Object.defineProperty(D,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(B!==null)return B;if(L!==Z.namespaces)L=Z.namespaces,A=Z.enabled(W);return A},set:(q)=>{B=q}}),typeof Z.init==="function")Z.init(D);return D}function J(W,M){let B=Z(this.namespace+(typeof M>"u"?":":M)+W);return B.log=this.log,B}function Y(W){Z.save(W),Z.namespaces=W,Z.names=[],Z.skips=[];let M=(typeof W==="string"?W:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let B of M)if(B[0]==="-")Z.skips.push(B.slice(1));else Z.names.push(B)}function G(W,M){let B=0,L=0,A=-1,D=0;while(B<W.length)if(L<M.length&&(M[L]===W[B]||M[L]==="*"))if(M[L]==="*")A=L,D=B,L++;else B++,L++;else if(A!==-1)L=A+1,D++,B=D;else return!1;while(L<M.length&&M[L]==="*")L++;return L===M.length}function X(){let W=[...Z.names,...Z.skips.map((M)=>"-"+M)].join(",");return Z.enable(""),W}function z(W){for(let M of Z.skips)if(G(W,M))return!1;for(let M of Z.names)if(G(W,M))return!0;return!1}function K(W){if(W instanceof Error)return W.stack||W.message;return W}function V(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return Z.enable(Z.load()),Z}A$.exports=DQ});var D$=W7((T$,g7)=>{T$.formatArgs=PQ;T$.save=qQ;T$.load=IQ;T$.useColors=EQ;T$.storage=xQ();T$.destroy=(()=>{let $=!1;return()=>{if(!$)$=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();T$.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function EQ(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let $;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&($=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt($[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function PQ($){if($[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+$[0]+(this.useColors?"%c ":" ")+"+"+g7.exports.humanize(this.diff),!this.useColors)return;let Q="color: "+this.color;$.splice(1,0,Q,"color: inherit");let Z=0,J=0;$[0].replace(/%[a-zA-Z%]/g,(Y)=>{if(Y==="%%")return;if(Z++,Y==="%c")J=Z}),$.splice(J,0,Q)}T$.log=console.debug||console.log||(()=>{});function qQ($){try{if($)T$.storage.setItem("debug",$);else T$.storage.removeItem("debug")}catch(Q){}}function IQ(){let $;try{$=T$.storage.getItem("debug")||T$.storage.getItem("DEBUG")}catch(Q){}if(!$&&typeof process<"u"&&"env"in process)$=process.env.DEBUG;return $}function xQ(){try{return localStorage}catch($){}}g7.exports=k8()(T$);var{formatters:wQ}=g7.exports;wQ.j=function($){try{return JSON.stringify($)}catch(Q){return"[UnexpectedJSONParseError]: "+Q.message}}});var I$=W7((P$,m7)=>{var uQ=q7("tty"),c7=q7("util");P$.init=nQ;P$.log=lQ;P$.formatArgs=cQ;P$.save=pQ;P$.load=dQ;P$.useColors=gQ;P$.destroy=c7.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");P$.colors=[6,2,3,4,5,1];try{let $=(()=>{throw new Error("Cannot require module "+"supports-color");})();if($&&($.stderr||$).level>=2)P$.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch($){}P$.inspectOpts=Object.keys(process.env).filter(($)=>{return/^debug_/i.test($)}).reduce(($,Q)=>{let Z=Q.substring(6).toLowerCase().replace(/_([a-z])/g,(Y,G)=>{return G.toUpperCase()}),J=process.env[Q];if(/^(yes|on|true|enabled)$/i.test(J))J=!0;else if(/^(no|off|false|disabled)$/i.test(J))J=!1;else if(J==="null")J=null;else J=Number(J);return $[Z]=J,$},{});function gQ(){return"colors"in P$.inspectOpts?Boolean(P$.inspectOpts.colors):uQ.isatty(process.stderr.fd)}function cQ($){let{namespace:Q,useColors:Z}=this;if(Z){let J=this.color,Y="\x1B[3"+(J<8?J:"8;5;"+J),G=` ${Y};1m${Q} \x1B[0m`;$[0]=G+$[0].split(`
|
|
2
2
|
`).join(`
|
|
3
|
-
`+
|
|
4
|
-
`)}function
|
|
5
|
-
`).map((
|
|
6
|
-
`);return`${
|
|
3
|
+
`+G),$.push(Y+"m+"+m7.exports.humanize(this.diff)+"\x1B[0m")}else $[0]=mQ()+Q+" "+$[0]}function mQ(){if(P$.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function lQ(...$){return process.stderr.write(c7.formatWithOptions(P$.inspectOpts,...$)+`
|
|
4
|
+
`)}function pQ($){if($)process.env.DEBUG=$;else delete process.env.DEBUG}function dQ(){return process.env.DEBUG}function nQ($){$.inspectOpts={};let Q=Object.keys(P$.inspectOpts);for(let Z=0;Z<Q.length;Z++)$.inspectOpts[Q[Z]]=P$.inspectOpts[Q[Z]]}m7.exports=k8()(P$);var{formatters:E$}=m7.exports;E$.o=function($){return this.inspectOpts.colors=this.useColors,c7.inspect($,this.inspectOpts).split(`
|
|
5
|
+
`).map((Q)=>Q.trim()).join(" ")};E$.O=function($){return this.inspectOpts.colors=this.useColors,c7.inspect($,this.inspectOpts)}});var x$=W7((OY,y8)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)y8.exports=D$();else y8.exports=I$()});var K4={};g4(K4,{startCdpServer:()=>s1,startBunCdpServer:()=>YJ,listTargets:()=>GJ,listDevices:()=>X4});import{createRequire as x2}from"node:module";import*as l0 from"node:net";import*as i0 from"node:net";import{spawnSync as e2}from"node:child_process";import*as r0 from"node:tls";import*as $4 from"node:http";function f2($){return this[$]}function y0($){return $.replace(/[&<>'"]/g,(Q)=>Q==="&"?"&":Q==="<"?"<":Q===">"?">":Q==="'"?"'":""")}function p2($){let Q="";for(let Z=0;Z<$.length;Z++)Q+=String.fromCharCode($[Z]);return btoa(Q)}function d2($){let Q=atob($.replace(/\s+/g,"")),Z=new Uint8Array(Q.length);for(let J=0;J<Q.length;J++)Z[J]=Q.charCodeAt(J);return Z}function W9($,Q){if($===null||$===void 0)return`${Q}<string></string>`;if(typeof $==="boolean")return`${Q}<${$?"true":"false"}/>`;if(typeof $==="string")return`${Q}<string>${y0($)}</string>`;if(typeof $==="number"){if(Number.isInteger($))return`${Q}<integer>${$}</integer>`;return`${Q}<real>${$}</real>`}if(typeof $==="bigint")return`${Q}<integer>${$.toString()}</integer>`;if($ instanceof Uint8Array)return`${Q}<data>${p2($)}</data>`;if($ instanceof Date)return`${Q}<date>${$.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray($)){if($.length===0)return`${Q}<array/>`;let Y=$.map((G)=>W9(G,Q+"\t")).join(`
|
|
6
|
+
`);return`${Q}<array>
|
|
7
7
|
${Y}
|
|
8
|
-
${
|
|
9
|
-
`+
|
|
10
|
-
`);return`${
|
|
8
|
+
${Q}</array>`}let Z=Object.keys($);if(Z.length===0)return`${Q}<dict/>`;let J=Z.map((Y)=>`${Q} <key>${y0(Y)}</key>
|
|
9
|
+
`+W9($[Y],Q+"\t")).join(`
|
|
10
|
+
`);return`${Q}<dict>
|
|
11
11
|
${J}
|
|
12
|
-
${
|
|
13
|
-
|
|
14
|
-
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(J))continue;let Y=J.split(/\s+/),X=Number(Y[1]),G=Y[Y.length-1];if(G)Z.set(G,X)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function J9(Q){let $=new TQ;return new Promise((Z,J)=>{let Y=$9.createConnection({path:Q}),X=(G)=>{$.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),h5(Y,$),Z({socket:Y,stream:$})})})}async function E5(Q){let $=await Q.read(4),Z=new DataView($.buffer,$.byteOffset,4).getUint32(0,!1),J=await Q.read(Z);return EQ(J)}function T5(Q,$){let Z=v5({Label:"inspect-webkit",...$}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),Q.write(J),Q.write(Z)}function D5(Q,$){if(Q.Error)throw Error(`lockdown ${$} error: ${String(Q.Error)}`);if(Q.Request!==$)throw Error(`lockdown expected Request=${$}, got ${String(Q.Request)}`)}function d8(Q,$,Z,J){return new Promise((Y,X)=>{$();let G=new TQ,N=Y9.connect({socket:Q,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),K=(V)=>{Q7(`${J} tls error:`,V),G.close(V),X(V)};N.once("error",K),N.once("secureConnect",()=>{Q7(`${J} tls handshake complete`),N.off("error",K);let V=h5(N,G);Y({socket:N,stream:G,detach:V})})})}class DQ{socket;stream;pair;udid;deviceID;detach;constructor(Q,$,Z,J,Y,X){this.socket=Q,this.stream=$,this.pair=Z,this.udid=J,this.deviceID=Y,this.detach=X}static async open(Q,$){Q7("connecting usbmux tunnel to lockdown port",m8);let{socket:Z,stream:J,detach:Y}=await l8(Q.DeviceID,m8),X=new DQ(Z,J,$,Q.Properties.SerialNumber,Q.DeviceID,Y);Q7("sending QueryType"),T5(Z,{Request:"QueryType"});let G=await E5(J);if(Q7("QueryType reply:",G),D5(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){Q7("StartSession with HostID",this.pair.HostID),T5(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let Q=await E5(this.stream);if(Q7("StartSession reply:",Q),D5(Q,"StartSession"),Q.EnableSessionSSL){Q7("upgrading to TLS");let $=await d8(this.socket,this.detach,this.pair,"lockdown");this.socket=$.socket,this.stream=$.stream,this.detach=$.detach,Q7("TLS upgrade complete")}}async startService(Q){Q7("StartService",Q),T5(this.socket,{Request:"StartService",Service:Q});let $=await E5(this.stream);return Q7("StartService reply:",$),D5($,"StartService"),{port:$.Port,enableServiceSSL:Boolean($.EnableServiceSSL),service:Q}}async connectService(Q){Q7("connecting service tunnel to port",Q.port,"ssl=",Q.enableServiceSSL);let{socket:$,stream:Z,detach:J}=await l8(this.deviceID,Q.port);if(!Q.enableServiceSSL)return{socket:$,stream:Z};let Y=await d8($,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function qZ(Q){let $=await Q.read(4),Z=new DataView($.buffer,$.byteOffset,4).getUint32(0,!1),J=await Q.read(Z);return AZ(J)}function IZ(Q,$){let Z=v5($),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),Q.write(J),Q.write(Z)}function xZ(){let Q=crypto.getRandomValues(new Uint8Array(16));Q[6]=Q[6]&15|64,Q[8]=Q[8]&63|128;let $=Array.from(Q,(Z)=>Z.toString(16).padStart(2,"0")).join("");return`${$.slice(0,8)}-${$.slice(8,12)}-${$.slice(12,16)}-${$.slice(16,20)}-${$.slice(20)}`}class r7{socket;stream;connectionId=xZ();subscribers=new Set;reading;constructor(Q,$){this.socket=Q,this.stream=$,this.reading=(async()=>{try{while(!$.closed){let Z=await qZ($);for(let J of[...this.subscribers])try{J(Z)}catch{}}}catch{}})()}subscribe(Q){return this.subscribers.add(Q),()=>this.subscribers.delete(Q)}waitFor(Q,$=5000){return new Promise((Z,J)=>{let Y=setTimeout(()=>{X(),J(Error(`timeout waiting for ${Q} after ${$}ms`))},$),X=this.subscribe((G)=>{if(G.__selector===Q)clearTimeout(Y),X(),Z(G)})})}send(Q,$){IZ(this.socket,{__selector:Q,__argument:{WIRConnectionIdentifierKey:this.connectionId,...$}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let Q=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!Q)return[];let Z=Q.__argument.WIRApplicationDictionaryKey??{},J=[];for(let[Y,X]of Object.entries(Z)){let G=X;J.push({appId:Y,bundleId:G.WIRApplicationBundleIdentifierKey,name:G.WIRApplicationNameKey,isProxy:Boolean(G.WIRIsApplicationProxyKey),isActive:Boolean(G.WIRIsApplicationActiveKey),hostAppId:G.WIRHostApplicationIdentifierKey})}return J}async getListing(Q){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:Q});let $=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!$)return[];let J=$.__argument.WIRListingKey??{},Y=[];for(let X of Object.values(J)){let G=X;Y.push({pageId:Number(G.WIRPageIdentifierKey??0),title:G.WIRTitleKey??"",url:G.WIRURLKey??"",type:G.WIRTypeKey??""})}return Y}get connection(){return this.connectionId}forwardSocketSetup(Q,$,Z){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:Q,WIRPageIdentifierKey:$,WIRSenderKey:Z,WIRAutomaticallyPause:!1})}forwardSocketData(Q,$,Z,J){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:Q,WIRPageIdentifierKey:$,WIRSenderKey:Z,WIRSocketDataKey:J})}forwardDidClose(Q,$,Z){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:Q,WIRPageIdentifierKey:$,WIRSenderKey:Z})}onMessage(Q){return this.subscribe(Q)}close(){this.socket.end()}}class LQ{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(Q,$,Z,J,Y){this.ws=Q,this.wi=$,this.appId=Z,this.pageId=J,this.senderKey=Y}addMessageFilter(Q,$){let Z=this.filters.get(Q);if(!Z)this.filters.set(Q,Z=[]);Z.push($)}callTarget(Q,$={}){return new Promise((Z,J)=>{let Y=--this.requestId;this.adapterRequestMap.set(Y,{resolve:Z,reject:J}),this.sendRaw(JSON.stringify({id:Y,method:Q,params:$}))})}fireEventToTools(Q,$){this.sendToTools(JSON.stringify({method:Q,params:$}))}fireResultToTools(Q,$){this.sendToTools(JSON.stringify({id:Q,result:$}))}fireErrorToTools(Q,$){this.sendToTools(JSON.stringify({id:Q,error:{code:$.code??-32000,message:$.message}}))}replyEmpty(Q){if(typeof Q.id==="number")this.fireResultToTools(Q.id,{});return Promise.resolve(null)}async onMessageFromTools(Q){let $;try{$=JSON.parse(Q)}catch{return}if(typeof $.method==="string"&&typeof $.id==="number")this.toolRequestMap.set($.id,$.method);let Z=`tools::${$.method}`,J=this.filters.get(Z),Y=$;if(J)for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendRaw(JSON.stringify(Y))}async onMessageFromTarget(Q){let $;try{$=JSON.parse(Q)}catch{return}if($.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let X=$.params?.targetInfo;if(X?.type==="page"&&!this.innerTargetId)this.innerTargetId=X.targetId,this.flushQueue();return}if($.method==="Target.didCommitProvisionalTarget"){let X=$.params?.newTargetId;if(typeof X==="string")this.innerTargetId=X;return}if($.method==="Target.targetDestroyed")return;if($.method==="Target.dispatchMessageFromTarget"){let X=$.params?.message;if(typeof X==="string")return this.onMessageFromTarget(X);return}if(typeof $.id==="number"&&this.wrappedAckIds.has($.id)){this.wrappedAckIds.delete($.id);return}if(typeof $.id==="number"){let X=this.adapterRequestMap.get($.id);if(X){if(this.adapterRequestMap.delete($.id),"error"in $&&$.error)X.reject($.error);else X.resolve($.result??{});return}let G=this.toolRequestMap.get($.id);if(G){this.toolRequestMap.delete($.id);let N=`target::${G}`;if("error"in $&&this.filters.has("target::error"))N="target::error";let K=this.filters.get(N);if(!K)return this.sendToTools(Q);let V=$;for(let z of K){if(!V)break;V=await z(V)}if(V)this.sendToTools(JSON.stringify(V));return}return this.sendToTools(Q)}let Z=`target::${$.method}`,J=this.filters.get(Z);if(!J)return this.sendToTools(Q);let Y=$;for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendToTools(JSON.stringify(Y))}sendRaw(Q){let $=null;try{$=JSON.parse(Q)}catch{}let Z=$&&typeof $.method==="string"&&$.method.startsWith("Target.");if(this.innerTargetId&&$&&!Z){if(typeof $.id==="number")this.wrappedAckIds.add($.id);let J={id:$.id,method:"Target.sendMessageToTarget",params:{id:$.id,message:Q,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(J));return}if(!this.innerTargetId&&$&&!Z){if(this.outgoingQueue.push(Q),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let J=this.outgoingQueue;this.outgoingQueue=[];for(let Y of J)this.writeFrame(Y)}},250);return}this.writeFrame(Q)}flushQueue(){if(this.outgoingQueue.length===0)return;let Q=this.outgoingQueue;this.outgoingQueue=[];for(let $ of Q)this.sendRaw($)}writeFrame(Q){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode(Q))}sendToTools(Q){if(this.ws.readyState===1)this.ws.send(Q)}}function SZ(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function v(Q,$,Z){return Q.fireResultToTools($.id,Z),Promise.resolve(null)}function kZ(Q,$){Q.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>v(Q,Z,{result:!1})),Q.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>v(Q,Z,{})),Q.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>v(Q,Z,{})),Q.addMessageFilter("target::Debugger.enable",(Z)=>{return Q.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),Q.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(Z)}),Q.addMessageFilter("target::Debugger.scriptParsed",(Z)=>{if(Z.params?.scriptId)$.lastScriptEval.value=String(Z.params.scriptId);return Promise.resolve(Z)}),Q.addMessageFilter("tools::Debugger.setBreakpoint",(Z)=>{let J=Z.params??{};return Z.params={location:J.location,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)}),Q.addMessageFilter("tools::Debugger.setBreakpointByUrl",(Z)=>{let J=Z.params??{};return Z.params={lineNumber:J.lineNumber,url:J.url,urlRegex:J.urlRegex,columnNumber:J.columnNumber,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)});for(let Z of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])Q.addMessageFilter(`tools::Debugger.${Z}`,(J)=>Promise.resolve(J));Q.addMessageFilter("target::Debugger.paused",(Z)=>{let J=Z.params?.callFrames;if(Array.isArray(J))for(let Y of J){if(Y.functionName==null&&typeof Y.name==="string")Y.functionName=Y.name;if(!Y.location&&Y.sourceCodeLocation)Y.location={scriptId:String(Y.sourceCodeLocation.scriptId??""),lineNumber:Y.sourceCodeLocation.lineNumber??0,columnNumber:Y.sourceCodeLocation.columnNumber??0};if(Array.isArray(Y.scopeChain)){for(let X of Y.scopeChain)if(!X.object&&X.value)X.object=X.value}}return Promise.resolve(Z)}),Q.addMessageFilter("tools::Debugger.setBlackboxedRanges",(Z)=>v(Q,Z,{})),Q.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>v(Q,Z,{})),Q.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function yZ(Q,$){Q.addMessageFilter("target::Runtime.executionContextCreated",(Z)=>{let J=Z.params?.context;if(J){if(!J.origin)J.origin=J.name??"";let Y=Number(J.id),X=!!(J.isPageContext||J.type==="normal");if(Number.isFinite(Y)&&Y>0){if(!$.pageExecCtx.id||X&&!$.pageExecCtx.isPage)$.pageExecCtx.id=Y,$.pageExecCtx.isPage=X}if(J.frameId)J.auxData={frameId:J.frameId,isDefault:!0},delete J.frameId}return Promise.resolve(Z)}),Q.addMessageFilter("tools::Runtime.evaluate",(Z)=>{let J=Z.params;if(!J)return Promise.resolve(Z);if(J.throwOnSideEffect)return v(Q,Z,{result:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"},exceptionDetails:{exceptionId:0,text:"EvalError: Possible side-effect in debug-evaluate",lineNumber:0,columnNumber:0,url:"",exception:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"}}});if("silent"in J)J.doNotPauseOnExceptionsAndMuteConsole=!!J.silent,delete J.silent;if("userGesture"in J)J.emulateUserGesture=!!J.userGesture,delete J.userGesture;return Promise.resolve(Z)}),Q.addMessageFilter("target::Runtime.evaluate",(Z)=>{let J=Z.result;if(J?.wasThrown){if(J.result)J.result.subtype="error";J.exceptionDetails={exceptionId:0,text:J.result?.description??"Uncaught",url:"",scriptId:$.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:$.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:J.result}}return Promise.resolve(Z)}),Q.addMessageFilter("target::Runtime.getProperties",(Z)=>{let J=Z.result;if(!J)return Promise.resolve(Z);let Y=Array.isArray(J.result)?J.result:Array.isArray(J.properties)?J.properties:null;if(Y)J.result=Y.filter((X)=>X.isOwn||X.nativeGetter).map((X)=>({...X,isOwn:!0})),delete J.properties;if(Array.isArray(J.internalProperties))J.internalProperties=J.internalProperties.map((X)=>({name:X.name,value:X.value}));return Promise.resolve(Z)}),Q.addMessageFilter("tools::Runtime.compileScript",(Z)=>v(Q,Z,{scriptId:null,exceptionDetails:null})),Q.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>v(Q,Z,{names:[]})),Q.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>v(Q,Z,{})),Q.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>v(Q,Z,{id:"inspect-webkit"})),Q.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>v(Q,Z,{usedSize:0,totalSize:0})),Q.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),Q.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>v(Q,Z,{})),Q.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>v(Q,Z,{})),Q.addMessageFilter("tools::Runtime.releaseObject",(Z)=>Promise.resolve(Z)),Q.addMessageFilter("tools::Runtime.releaseObjectGroup",(Z)=>Promise.resolve(Z)),Q.addMessageFilter("tools::Runtime.callFunctionOn",(Z)=>Promise.resolve(Z)),Q.addMessageFilter("tools::Runtime.queryObjects",(Z)=>Promise.resolve(Z)),Q.addMessageFilter("target::Debugger.globalObjectCleared",(Z)=>{return Q.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function fZ(Q,$){Q.addMessageFilter("tools::Log.startViolationsReport",(Z)=>v(Q,Z,{})),Q.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>v(Q,Z,{})),Q.addMessageFilter("tools::Log.clear",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),Q.addMessageFilter("tools::Log.disable",(Z)=>{return Z.method="Console.disable",Promise.resolve(Z)}),Q.addMessageFilter("tools::Log.enable",(Z)=>{return Z.method="Console.enable",Promise.resolve(Z)}),Q.addMessageFilter("tools::Runtime.enable",(Z)=>{return Q.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(Z)}),Q.addMessageFilter("target::Console.messageAdded",(Z)=>{let J=Z.params?.message??{},X=(Array.isArray(J.stackTrace)?J.stackTrace:Array.isArray(J.stackTrace?.callFrames)?J.stackTrace.callFrames:[]).map((K)=>({functionName:K.functionName??"",scriptId:K.scriptId??"",url:K.url??"",lineNumber:Number(K.lineNumber??0),columnNumber:Number(K.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,N=Date.now();if(J.source==="console-api"){let K=J.type==="log"?J.level??"log":J.type??"log",V=bZ(K),z=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],F={type:V,args:z,executionContextId:$.pageExecCtx.id||1,timestamp:N,stackTrace:G};return $.lastConsoleApiCalled.value=F,Q.fireEventToTools("Runtime.consoleAPICalled",F),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return Q.fireEventToTools("Runtime.exceptionThrown",{timestamp:N,exceptionDetails:{exceptionId:0,text:String(J.text??"Uncaught"),lineNumber:Number(J.line??0),columnNumber:Number(J.column??0),scriptId:$.lastScriptEval.value,url:J.url,stackTrace:G,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return Q.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:vZ(J.level??J.type??"log"),text:String(J.text??""),timestamp:N,url:J.url,lineNumber:J.line,stackTrace:G,networkRequestId:J.networkRequestId}}),Promise.resolve(null)}),Q.addMessageFilter("target::Console.messagesCleared",()=>{return Q.fireEventToTools("Log.entriesCleared",{}),Q.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:$.pageExecCtx.id||1,timestamp:Date.now()}),$.lastConsoleApiCalled.value=null,Promise.resolve(null)}),Q.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let Z=$.lastConsoleApiCalled.value;if(Z)Q.fireEventToTools("Runtime.consoleAPICalled",{...Z,timestamp:Date.now()});return Promise.resolve(null)}),Q.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function bZ(Q){switch(Q){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 Q;default:return"log"}}function vZ(Q){switch(Q){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function hZ(Q){let $=new Set;Q.addMessageFilter("tools::DOM.enable",(Z)=>v(Q,Z,{})),Q.addMessageFilter("tools::DOM.setInspectMode",(Z)=>{if(Z.method="DOM.setInspectModeEnabled",Z.params)Z.params.enabled=Z.params.mode==="searchForNode",delete Z.params.mode,delete Z.params.highlightConfig;return Promise.resolve(Z)}),Q.addMessageFilter("tools::DOM.setInspectedNode",(Z)=>{return Z.method="Console.addInspectedNode",Promise.resolve(Z)}),Q.addMessageFilter("tools::DOM.performSearch",(Z)=>{if(Z.params)Z.params={query:Z.params.query,caseSensitive:!!Z.params.caseSensitive};return Promise.resolve(Z)}),Q.addMessageFilter("target::DOM.performSearch",(Z)=>{let J=Z.result?.searchId;if(typeof J==="string")$.add(J);return Promise.resolve(Z)}),Q.addMessageFilter("tools::DOM.discardSearchResults",(Z)=>{let J=Z.params?.searchId;if(typeof J==="string")$.delete(J);return Promise.resolve(Z)}),Q.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(Z)=>{let J=Z.params?.backendNodeIds??[],Y=await Promise.all(J.map((X)=>Q.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:X}).then((G)=>G.nodeId).catch(()=>X)));return Q.fireResultToTools(Z.id,{nodeIds:Y}),null}),Q.addMessageFilter("tools::DOM.getBoxModel",(Z)=>{return Q.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:Z.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),Q.addMessageFilter("tools::DOM.getNodeForLocation",async(Z)=>{try{let Y=(await Q.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${Z.params?.x},${Z.params?.y})`})).result?.objectId;if(!Y)return Q.fireResultToTools(Z.id,{nodeId:0}),null;let X=await Q.callTarget("DOM.requestNode",{objectId:Y});Q.fireResultToTools(Z.id,{nodeId:X.nodeId,backendNodeId:X.nodeId})}catch(J){Q.fireErrorToTools(Z.id,{message:J?.message??String(J)})}return null}),Q.addMessageFilter("tools::DOM.resolveNode",(Z)=>{if(Z.params&&Z.params.objectGroup===void 0)delete Z.params.objectGroup;return Promise.resolve(Z)})}function uZ(Q){Q.addMessageFilter("tools::DOMDebugger.getEventListeners",async($)=>{try{let Z=await Q.callTarget("DOM.requestNode",{objectId:$.params?.objectId}),Y=((await Q.callTarget("DOM.getEventListenersForNode",{nodeId:Z.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((X)=>({type:X.type,useCapture:!!X.useCapture,passive:!!X.passive,once:!!X.once,location:X.location,handler:X.handler}));Q.fireResultToTools($.id,{listeners:Y})}catch(Z){Q.fireErrorToTools($.id,{message:Z?.message??String(Z)})}return null}),Q.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",($)=>v(Q,$,{})),Q.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",($)=>v(Q,$,{})),Q.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",($)=>v(Q,$,{})),Q.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",($)=>v(Q,$,{}))}function gZ(Q,$){Q.addMessageFilter("tools::Page.setOverlayMessage",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),Q.addMessageFilter("tools::Page.configureOverlay",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),Q.addMessageFilter("tools::Page.getNavigationHistory",async(X)=>{try{let G=await Q.callTarget("Runtime.evaluate",{expression:"window.location.href"}),N=await Q.callTarget("Runtime.evaluate",{expression:"document.title"});Q.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:G.result?.value??"",userTypedURL:G.result?.value??"",title:N.result?.value??"",transitionType:"link"}]})}catch(G){Q.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),Q.addMessageFilter("target::Page.frameNavigated",(X)=>{return G9(X.params?.frame),Promise.resolve(X)}),Q.addMessageFilter("target::Page.getResourceTree",(X)=>{return S5(X.result?.frameTree),Promise.resolve(X)}),Q.addMessageFilter("tools::Page.getFrameTree",async(X)=>{if(typeof X.id!=="number")return null;try{let G=await Q.callTarget("Page.getResourceTree",{}),N=K9(G?.frameTree);S5(N),Q.fireResultToTools(X.id,{frameTree:N})}catch(G){Q.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),Q.addMessageFilter("tools::Page.createIsolatedWorld",(X)=>{if(typeof X.id!=="number")return Promise.resolve(null);return v(Q,X,{executionContextId:$.pageExecCtx.id||1})});let Z=1;Q.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(X)=>v(Q,X,{identifier:`pptr-${Z++}`})),Q.addMessageFilter("tools::WebMCP.enable",(X)=>v(Q,X,{})),Q.addMessageFilter("tools::WebMCP.disable",(X)=>v(Q,X,{})),Q.addMessageFilter("tools::Page.captureScreenshot",(X)=>{return Q.fireErrorToTools(X.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),Q.addMessageFilter("tools::Page.startScreencast",(X)=>v(Q,X,{})),Q.addMessageFilter("tools::Page.stopScreencast",(X)=>v(Q,X,{})),Q.addMessageFilter("tools::Page.screencastFrameAck",(X)=>v(Q,X,{})),Q.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(X)=>v(Q,X,{}));let J="",Y="0.1";Q.addMessageFilter("target::Page.frameNavigated",(X)=>{let G=X.params?.frame;if(G)Y=G.id??Y,J=G.loaderId??J,Q.fireEventToTools("Page.frameStartedLoading",{frameId:Y}),Q.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"init",timestamp:0}),Q.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"commit",timestamp:0});return Promise.resolve(X)}),Q.addMessageFilter("target::Page.domContentEventFired",(X)=>{return Q.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"DOMContentLoaded",timestamp:X.params?.timestamp??0}),Promise.resolve(X)}),Q.addMessageFilter("target::Page.loadEventFired",(X)=>{return Q.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"load",timestamp:X.params?.timestamp??0}),Q.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkAlmostIdle",timestamp:X.params?.timestamp??0}),Q.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkIdle",timestamp:X.params?.timestamp??0}),Q.fireEventToTools("Page.frameStoppedLoading",{frameId:Y}),Promise.resolve(X)})}function G9(Q){if(!Q)return;if(!Q.securityOrigin)try{Q.securityOrigin=new URL(Q.url??"").origin}catch{Q.securityOrigin="://"}if(!Q.mimeType)Q.mimeType="text/html"}function S5(Q){if(!Q)return;if(G9(Q.frame),Array.isArray(Q.childFrames))Q.childFrames.forEach(S5)}function K9(Q){if(!Q)return Q;let $={frame:Q.frame};if(Array.isArray(Q.childFrames))$.childFrames=Q.childFrames.map(K9);return $}function pZ(Q){Q.addMessageFilter("tools::Overlay.enable",($)=>v(Q,$,{})),Q.addMessageFilter("tools::Overlay.disable",($)=>v(Q,$,{})),Q.addMessageFilter("tools::Overlay.highlightNode",($)=>{let Z=$.params??{};return $.method="DOM.highlightNode",$.params={highlightConfig:Z.highlightConfig,nodeId:Z.nodeId,objectId:Z.objectId},Promise.resolve($)}),Q.addMessageFilter("tools::Overlay.highlightFrame",($)=>{return $.method="DOM.highlightFrame",Promise.resolve($)}),Q.addMessageFilter("tools::Overlay.highlightQuad",($)=>{return $.method="DOM.highlightQuad",Promise.resolve($)}),Q.addMessageFilter("tools::Overlay.highlightRect",($)=>{return $.method="DOM.highlightRect",Promise.resolve($)}),Q.addMessageFilter("tools::Overlay.hideHighlight",($)=>{return $.method="DOM.hideHighlight",Promise.resolve($)}),Q.addMessageFilter("tools::Overlay.setShowPaintRects",($)=>{return $.method="Page.setShowPaintRects",Promise.resolve($)}),Q.addMessageFilter("tools::Overlay.setInspectMode",($)=>{let Z=$.params??{};return $.method="DOM.setInspectModeEnabled",$.params={enabled:typeof Z.mode==="string"&&Z.mode!=="none",highlightConfig:Z.highlightConfig},Promise.resolve($)})}function cZ(Q){Q.addMessageFilter("tools::Emulation.canEmulate",($)=>v(Q,$,{result:!0})),Q.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",($)=>{return $.method="Page.setTouchEmulationEnabled",Promise.resolve($)}),Q.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",($)=>{return $.method="Page.setScriptExecutionDisabled",Promise.resolve($)}),Q.addMessageFilter("tools::Emulation.setEmulatedMedia",($)=>{return $.method="Page.setEmulatedMedia",Promise.resolve($)}),Q.addMessageFilter("tools::Rendering.setShowPaintRects",($)=>{return $.method="Page.setShowPaintRects",Promise.resolve($)}),Q.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",($)=>v(Q,$,{})),Q.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",($)=>v(Q,$,{})),Q.addMessageFilter("tools::Emulation.setUserAgentOverride",($)=>{let Z=$.params?.userAgent??"";return $.method="Page.overrideUserAgent",$.params={value:Z},Promise.resolve($)}),Q.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",($)=>v(Q,$,{})),Q.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",($)=>v(Q,$,{}))}function P5(Q){switch(Q){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return Q;case"StyleSheet":return"Stylesheet";default:return"Other"}}function rZ(Q){if(!Q)return Q;return{...oZ,...Q,hasPostData:Q.postData!=null}}function tZ(Q){if(!Q)return Q;let $=0,Z=Q.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)$=Number(J)||0;return{...aZ,...Q,fromDiskCache:Q.source==="disk-cache",fromServiceWorker:Q.source==="service-worker",encodedDataLength:$}}function sZ(Q,$){if(!Q)return;for(let[Z,J]of Object.entries($))if(Z in Q&&!(J in Q))Q[J]=Q[Z],delete Q[Z]}function eZ(Q){let $=typeof Q.size==="number"?Q.size:(Q.name?.length??0)+(Q.value?.length??0);return{name:Q.name,value:Q.value,domain:Q.domain,path:Q.path,expires:Q.expires??-1,size:$,httpOnly:!!Q.httpOnly,secure:!!Q.secure,session:!!Q.session,...Q.sameSite?{sameSite:Q.sameSite}:{}}}function QJ(Q,$){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),N=(V)=>{let z=G.then(V,V);return G=z.catch(()=>{}),z};for(let[V,z]of Object.entries(lZ))Q.addMessageFilter(`tools::${V}`,(F)=>{return F.method=z,Promise.resolve(F)});Q.addMessageFilter("tools::Network.setCacheDisabled",(V)=>{if(V.params&&"cacheDisabled"in V.params)V.params={disabled:!!V.params.cacheDisabled};return Promise.resolve(V)});let K=async(V)=>{try{let z=await Q.callTarget("Page.getCookies",{}),F=Array.isArray(z?.cookies)?z.cookies.map(eZ):[];Q.fireResultToTools(V.id,{cookies:F})}catch(z){Q.fireErrorToTools(V.id,{message:z?.message??String(z)})}return null};Q.addMessageFilter("tools::Network.getCookies",K),Q.addMessageFilter("tools::Network.getAllCookies",K),Q.addMessageFilter("tools::Network.setCookie",(V)=>{let z=V.params??{};return V.method="Page.setCookie",V.params={cookie:{name:z.name,value:z.value,domain:z.domain??"",path:z.path??"/",expires:z.expires??-1,session:!1,httpOnly:!!z.httpOnly,secure:!!z.secure,sameSite:z.sameSite??"None"}},Promise.resolve(V)}),Q.addMessageFilter("tools::Network.setCookies",async(V)=>{let z=Array.isArray(V.params?.cookies)?V.params.cookies:[];try{await Promise.all(z.map((F)=>Q.callTarget("Page.setCookie",{cookie:F}))),Q.fireResultToTools(V.id,{})}catch(F){Q.fireErrorToTools(V.id,{message:F?.message??String(F)})}return null}),Q.addMessageFilter("tools::Network.deleteCookies",(V)=>{let z=V.params??{},F=z.url??`https://${(z.domain??"").replace(/^\./,"")}${z.path??"/"}`;return V.method="Page.deleteCookie",V.params={cookieName:z.name,url:F},Promise.resolve(V)}),Q.addMessageFilter("tools::Network.deleteCookie",(V)=>{return V.method="Page.deleteCookie",Promise.resolve(V)}),Q.addMessageFilter("tools::Network.clearBrowserCookies",async(V)=>{try{let z=await Q.callTarget("Page.getCookies",{}),F=Array.isArray(z?.cookies)?z.cookies:[];await Promise.all(F.map((H)=>Q.callTarget("Page.deleteCookie",{cookieName:H.name,url:`${H.secure?"https":"http"}://${(H.domain??"").replace(/^\./,"")}${H.path??"/"}`}).catch(()=>{}))),Q.fireResultToTools(V.id,{})}catch(z){Q.fireErrorToTools(V.id,{message:z?.message??String(z)})}return null}),Q.addMessageFilter("tools::Network.canEmulateNetworkConditions",(V)=>v(Q,V,{result:!1})),Q.addMessageFilter("tools::Network.setExtraHTTPHeaders",(V)=>v(Q,V,{})),Q.addMessageFilter("tools::Network.setBlockedURLs",(V)=>v(Q,V,{})),Q.addMessageFilter("tools::Network.emulateNetworkConditions",(V)=>v(Q,V,{})),Q.addMessageFilter("tools::Network.setMonitoringXHREnabled",(V)=>v(Q,V,{})),Q.addMessageFilter("tools::Network.getResponseBody",async(V)=>{let z=V.params?.requestId,F=typeof z==="string"?Z.get(z):void 0;if(!F)return Q.fireErrorToTools(V.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(F.method&&F.method.toUpperCase()!=="GET")return Q.fireErrorToTools(V.id,{message:`Network.getResponseBody: cannot recover ${F.method} response body (bridge re-fetch is GET-only)`}),null;if(F.bytes===0)return Q.fireResultToTools(V.id,{body:"",base64Encoded:!1}),null;return N(async()=>{try{let H={};for(let[_,M]of Object.entries(F.headers??{})){let W=_.toLowerCase();if(W==="if-none-match"||W==="if-modified-since"||W==="host"||W==="connection")continue;H[_]=String(M)}let L=new AbortController,U=setTimeout(()=>L.abort(),1e4),T;try{T=await fetch(F.url,{headers:H,redirect:"follow",signal:L.signal})}finally{clearTimeout(U)}let q=Number(T.headers.get("content-length")??"");if(Number.isFinite(q)&&q>4194304){Q.fireErrorToTools(V.id,{message:`Network.getResponseBody: response too large (${q} bytes > ${"4194304"}) — skipped re-fetch`});try{await T.arrayBuffer()}catch{}return}let P=Buffer.from(await T.arrayBuffer());if(P.byteLength>4194304){Q.fireErrorToTools(V.id,{message:`Network.getResponseBody: response too large (${P.byteLength} bytes > 4194304)`});return}let A=((T.headers.get("content-type")??"").split(";")[0]??"").trim(),C=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(A),j=C?P.toString("utf8"):P.toString("base64");Q.fireResultToTools(V.id,{body:j,base64Encoded:!C})}catch(H){Q.fireErrorToTools(V.id,{message:`Network.getResponseBody re-fetch failed: ${H?.message??String(H)}`})}}),null});for(let[V,z]of Object.entries(mZ))Q.addMessageFilter(`target::${V}`,(F)=>{return sZ(F.params,z),Promise.resolve(F)});Q.addMessageFilter("target::Network.requestWillBeSent",(V)=>{let z=V.params;if(z){if(Object.assign(z,{...dZ,...z}),z.request=rZ(z.request),z.type=P5(z.type),typeof z.requestId==="string"&&typeof z.request?.url==="string"){if(Z.size>=1024){let F=Z.keys().next().value;if(F!==void 0)Z.delete(F)}Z.set(z.requestId,{url:z.request.url,method:z.request.method,headers:z.request.headers,frameId:z.frameId,bytes:0})}}return Promise.resolve(V)}),Q.addMessageFilter("target::Network.responseReceived",(V)=>{let z=V.params;if(z)Object.assign(z,{...nZ,...z}),z.response=tZ(z.response),z.type=P5(z.type);return Promise.resolve(V)}),Q.addMessageFilter("target::Network.loadingFinished",(V)=>{let z=V.params;if(z){let F=z.metrics?.responseBodyBytesReceived;if(typeof F==="number"&&z.encodedDataLength==null)z.encodedDataLength=F;if(Object.assign(z,{...iZ,...z}),typeof z.requestId==="string"&&typeof F==="number"){let H=Z.get(z.requestId);if(H&&F>H.bytes)H.bytes=F}}return Promise.resolve(V)}),Q.addMessageFilter("target::Network.dataReceived",(V)=>{let z=V.params;if(z&&typeof z.requestId==="string"){let F=Z.get(z.requestId);if(F){let H=Number(z.dataLength)||0;F.bytes+=H}}return Promise.resolve(V)}),Q.addMessageFilter("target::Network.loadingFailed",(V)=>{let z=V.params;if(z){if(z.type=P5(z.type),!("canceled"in z))z.canceled=!1}return Promise.resolve(V)}),Q.addMessageFilter("target::Network.requestServedFromMemoryCache",(V)=>{if(V.method="Network.requestServedFromCache",V.params)V.params={requestId:V.params.requestId};return Promise.resolve(V)}),Q.addMessageFilter("tools::Network.loadNetworkResource",async(V)=>{let z=V.params??{};if(!$)return Q.fireResultToTools(V.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let F=await Q.callTarget("Network.loadResource",{frameId:z.frameId,url:z.url}),H=!!F?.content&&(F?.status??0)>=200&&(F?.status??0)<300,L;if(H)L=`network-resource:${z.frameId??""}:${z.url}`,$.set(L,String(F.content));Q.fireResultToTools(V.id,{resource:{success:H,stream:L,httpStatusCode:F?.status,headers:F?.headers,mimeType:F?.mimeType}})}catch(F){Q.fireResultToTools(V.id,{resource:{success:!1,netError:2,netErrorName:F?.message??"ERR_FAILED"}})}return null})}function $J(Q){for(let $ of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])Q.addMessageFilter(`tools::${$}`,(Z)=>v(Q,Z,{}))}function ZJ(Q){Q.addMessageFilter("target::Inspector.inspect",async($)=>{let Z=$.params?.object?.objectId;if(typeof Z!=="string")return null;try{let Y=(await Q.callTarget("DOM.requestNode",{objectId:Z}))?.nodeId;if(typeof Y==="number")Q.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:Y}),Q.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:Y})}catch{}return null})}function YJ(Q){if(!Q)return Q;let $=Q.origin==="inspector";return{styleSheetId:Q.styleSheetId,frameId:Q.frameId,sourceURL:Q.sourceURL??"",origin:Q.origin==="author"?"regular":Q.origin,title:Q.title??"",disabled:!!Q.disabled,isInline:!!Q.isInline,startLine:Q.startLine??0,startColumn:Q.startColumn??0,isMutable:$,isConstructed:$,length:Q.length??0,endLine:Q.endLine??0,endColumn:Q.endColumn??0,hasSourceURL:!!Q.sourceURL}}function k5(Q){if(!Q)return Q;let $={origin:Q.origin==="author"?"regular":Q.origin,style:F7(Q.style),selectorList:KJ(Q.selectorList)};if(Q.ruleId?.styleSheetId)$.styleSheetId=Q.ruleId.styleSheetId;if(Array.isArray(Q.groupings))$.media=Q.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:GJ[Z.type]}));return $}function zJ(Q){let $={lastNodeId:0},Z=new Map;async function J(Y,X){let G=Z.get(Y);if(!G)try{if(G=(await Q.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,G)Z.set(Y,G)}catch{}let N=G?.rules??[];for(let K=0;K<N.length;K++)if(JJ(N[K]?.style?.range,X))return{styleSheetId:Y,ordinal:K};return{styleSheetId:Y,ordinal:0}}Q.addMessageFilter("tools::CSS.enable",(Y)=>{return Q.fireResultToTools(Y.id,{}),Promise.resolve(null)}),Q.addMessageFilter("target::CSS.styleSheetAdded",(Y)=>{if(Y.params?.header)Y.params.header=YJ(Y.params.header);return Promise.resolve(Y)}),Q.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:F7(X.inlineStyle),attributesStyle:F7(X.attributesStyle)};return Promise.resolve(Y)}),Q.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(Y)=>{if(typeof Y.params?.nodeId==="number")$.lastNodeId=Y.params.nodeId;try{let[X,G]=await Promise.all([Q.callTarget("CSS.getInlineStylesForNode",{nodeId:Y.params.nodeId}),Q.callTarget("CSS.getMatchedStylesForNode",{nodeId:Y.params.nodeId,includePseudo:!0,includeInherited:!0})]);Q.fireResultToTools(Y.id,{inlineStyle:F7(X?.inlineStyle),attributesStyle:F7(X?.attributesStyle),matchedCSSRules:p5(G?.matchedCSSRules),pseudoElements:VJ(G?.pseudoElements),inherited:WJ(G?.inherited),cssKeyframesRules:[]})}catch(X){Q.fireErrorToTools(Y.id,{message:X?.message??String(X)})}return null}),Q.addMessageFilter("tools::CSS.setStyleTexts",async(Y)=>{let X=Y.params?.edits??[],G=[];for(let N of X)try{let K=await J(N.styleSheetId,N.range),V=await Q.callTarget("CSS.setStyleText",{styleId:K,text:N.text});G.push(F7(V?.style)),Z.delete(N.styleSheetId),Q.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:N.styleSheetId})}catch{G.push(null)}return Q.fireResultToTools(Y.id,{styles:G}),null}),Q.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:G,selector:N}=Y.params??{};try{let K=await J(X,G);Y.params={ruleId:K,selector:N}}catch(K){return Q.fireErrorToTools(Y.id,{message:K?.message??String(K)}),null}return Y}),Q.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:k5(Y.result.rule)};return Promise.resolve(Y)}),Q.addMessageFilter("tools::CSS.addRule",async(Y)=>{let X=Y.params??{},G=String(X.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let N=await Q.callTarget("CSS.addRule",{contextNodeId:$.lastNodeId,styleSheetId:X.styleSheetId,selector:G});Q.fireResultToTools(Y.id,{rule:k5(N?.rule)})}catch(N){Q.fireErrorToTools(Y.id,{message:N?.message??String(N)})}return null})}function NJ(Q){Q.addMessageFilter("tools::Browser.getVersion",($)=>v(Q,$,HJ)),Q.addMessageFilter("tools::Browser.getWindowForTarget",($)=>v(Q,$,{windowId:1,bounds:{}})),Q.addMessageFilter("tools::Browser.setWindowBounds",($)=>v(Q,$,{}))}function FJ(Q){switch(Q){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function BJ(Q){let $=async(Z)=>{let J=Z.params??{},Y=FJ(J.type);if(!Y)return Q.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let G of X){let N={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},K=`(${MJ}, __sd_simulate(${JSON.stringify(N)}))`;await Q.callTarget("Runtime.evaluate",{expression:K})}Q.fireResultToTools(Z.id,{})}catch(G){Q.fireErrorToTools(Z.id,{message:G?.message??String(G)})}return null};Q.addMessageFilter("tools::Input.dispatchMouseEvent",$),Q.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",$),Q.addMessageFilter("tools::Input.setIgnoreInputEvents",(Z)=>{return Q.fireResultToTools(Z.id,{}),Promise.resolve(null)})}function OJ(Q){let $=new Map;return Q.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||RJ,X=Number(Z.params?.offset)||0,G=$.get(J);if(G===void 0)return Q.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let N=G.slice(X,X+Y),K=X+Y>=G.length;return Q.fireResultToTools(Z.id,{data:N,eof:K,base64Encoded:!1}),Promise.resolve(null)}),Q.addMessageFilter("tools::IO.close",(Z)=>{return $.delete(String(Z.params?.handle??"")),Q.fireResultToTools(Z.id,{}),Promise.resolve(null)}),$}function _J(Q){Q.addMessageFilter("tools::Accessibility.enable",($)=>v(Q,$,{})),Q.addMessageFilter("tools::Accessibility.disable",($)=>v(Q,$,{})),Q.addMessageFilter("tools::Accessibility.getPartialAXTree",async($)=>{let Z=$.params??{},J=Z.nodeId??Z.backendNodeId;if(typeof J!=="number")return Q.fireResultToTools($.id,{nodes:[]}),null;try{let X=(await Q.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:J}))?.properties??{},G={nodeId:String(J),ignored:Boolean(X.ignored),role:X.role?{type:"role",value:String(X.role)}:void 0,name:X.label?{type:"computedString",value:String(X.label)}:void 0,backendDOMNodeId:J,childIds:[],properties:[]};Q.fireResultToTools($.id,{nodes:[G]})}catch(Y){Q.fireResultToTools($.id,{nodes:[]})}return null})}function AJ(Q){for(let[Z,J]of Object.entries(UJ))Q.addMessageFilter(`tools::${Z}`,(Y)=>v(Q,Y,J));for(let Z of CJ)for(let J of["enable","disable"])Q.addMessageFilter(`tools::${Z}.${J}`,(Y)=>v(Q,Y,{}));let $=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[Z,J]of $)Q.addMessageFilter(`tools::${Z}`,(Y)=>v(Q,Y,J))}function y5(Q){let $=SZ();AJ(Q);let Z=OJ(Q);kZ(Q,$),yZ(Q,$),fZ(Q,$),hZ(Q),uZ(Q),gZ(Q,$),pZ(Q),cZ(Q),QJ(Q,Z),$J(Q),ZJ(Q),zJ(Q),NJ(Q),BJ(Q),_J(Q)}function W9(Q){let $=`${Q.reqHost}/devtools/page/${Q.id}`;return{description:Q.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${$}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${$}`,id:Q.id,title:Q.title,type:Q.type,url:Q.url,webSocketDebuggerUrl:`ws://${$}`,faviconUrl:""}}function I7(Q){return Q.replace(/[&<>"']/g,($)=>LJ[$])}function z9(Q){return V9.createServer(($,Z)=>{let J=new URL($.url??"/","http://placeholder"),Y=$.headers.host??"";if(J.pathname==="/json/version"){let X=typeof Q.version==="function"?Q.version(Y):Q.version;return q5(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return q5(Z,Q.listTargets(Y));if(J.pathname==="/json/protocol")return q5(Z,{});if(J.pathname==="/")return jJ(Z,Q,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function q5(Q,$,Z=200){Q.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),Q.end(JSON.stringify($))}function jJ(Q,$,Z){let J=$.listTargets(Z),Y=J.map((K)=>`<li><strong>${I7(K.title||K.url||K.id)}</strong><br><small>${I7(K.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${I7(K.devtoolsFrontendUrl)}</code></li>`).join(""),X=`inspect-webkit${$.brand?` (${$.brand})`:""}`,G=$.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${I7(Z)}</code>.</p>`,N=`<!doctype html><meta charset=utf-8><title>${I7(X)}</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>${I7(X)} — ${J.length} target${J.length===1?"":"s"}</h1>`+G+`<ul>${Y}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';Q.writeHead(200,{"content-type":"text/html; charset=utf-8"}),Q.end(N)}function H9(Q,$,Z){return new Promise((J,Y)=>{Q.once("error",(G)=>{if(G.port==null)G.port=Z;if(G.host==null)G.host=$;Y(G)});let X=$==="localhost"||$==="::1"||$==="127.0.0.1"?"::":$;Q.listen({port:Z,host:X,ipv6Only:!1},()=>{Q.off("error",Y),J()})})}function N9(Q){let $=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(K,V)=>$?`\x1B[${K}m${V}\x1B[0m`:V,J=(K)=>Z("1",K),Y=(K)=>Z("2",K),X=(K)=>Z("36",K),G=(K)=>Z("32",K),N=`http://${Q.host}:${Q.port}`;console.error(`${G("●")} ${J(`${Q.brand} CDP`)} ${X(N)}`),console.error(` ${Y("chrome")} chrome://inspect → ${Q.host}:${Q.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${Q.port}`)}function EJ(Q,$){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,N=new Map,K=null;function V(C){if(Q.readyState!==1)return;let j=JSON.stringify(C);if(Z)console.error(`[browser] tools<< ${j.slice(0,240)}`);Q.send(j)}function z(C,j){let _={method:C,params:j};if(K)_.sessionId=K;V(_)}function F(C,j){return{targetId:C.targetId,type:C.type==="page"?"page":C.type||"other",title:C.title||"",url:C.url||"",attached:j,canAccessOpener:!1,browserContextId:"default"}}function H(C){for(let j of J.values())if(j.targetId===C)return!0;return!1}function L(C,j){let _=$.listEntries().find((R)=>R.targetId===C);if(!_)return null;let M=crypto.randomUUID(),W=(R)=>{let E;try{E=JSON.parse(R)}catch{return}E.sessionId=M,V(E)},B=$.createPageSession(C,W);if(!B)return null;return J.set(M,{handle:B,targetId:C}),z("Target.attachedToTarget",{sessionId:M,targetInfo:F(_,!0),waitingForDebugger:j}),{sessionId:M,entry:_}}function U(C){let j=J.get(C);if(!j)return!1;try{j.handle.close()}catch{}return J.delete(C),z("Target.detachedFromTarget",{sessionId:C,targetId:j.targetId}),!0}function T(){let C=$.listEntries(),j=new Set;for(let _ of C){j.add(_.targetId);let M=N.get(_.targetId);if(!M){if(N.set(_.targetId,_),Y)z("Target.targetCreated",{targetInfo:F(_,H(_.targetId))});if(X&&!H(_.targetId))L(_.targetId,G)}else if(M.title!==_.title||M.url!==_.url){if(N.set(_.targetId,_),Y)z("Target.targetInfoChanged",{targetInfo:F(_,H(_.targetId))})}}for(let _ of[...N.keys()]){if(j.has(_))continue;N.delete(_);for(let[M,W]of J)if(W.targetId===_)U(M);if(Y)z("Target.targetDestroyed",{targetId:_})}}let q=setInterval(T,$.refreshMs??1000);function P(C,j){if(C)j.sessionId=C;V(j)}function A(C,j){let{id:_,method:M}=C,W=C.params??{};switch(M){case"Browser.getVersion":return P(j,{id:_,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(!K)K=crypto.randomUUID();return P(j,{id:_,result:{sessionId:K}})}case"Target.setDiscoverTargets":{if(Y=!!W.discover,Y)for(let B of $.listEntries())N.set(B.targetId,B),z("Target.targetCreated",{targetInfo:F(B,H(B.targetId))});if(typeof _==="number")P(j,{id:_,result:{}});return}case"Target.getTargets":{let B=$.listEntries().map((R)=>F(R,H(R.targetId)));return P(j,{id:_,result:{targetInfos:B}})}case"Target.setAutoAttach":{if(X=!!W.autoAttach,G=!!W.waitForDebuggerOnStart,X){for(let B of $.listEntries())if(!H(B.targetId))L(B.targetId,G)}if(typeof _==="number")P(j,{id:_,result:{}});return}case"Target.attachToTarget":{for(let[R,E]of J)if(E.targetId===W.targetId){if(typeof _==="number")P(j,{id:_,result:{sessionId:R}});return}let B=L(W.targetId,!1);if(!B){if(typeof _==="number")P(j,{id:_,error:{code:-32000,message:"No target with given id found"}});return}if(typeof _==="number")P(j,{id:_,result:{sessionId:B.sessionId}});return}case"Target.detachFromTarget":{if(U(W.sessionId),typeof _==="number")P(j,{id:_,result:{}});return}case"Target.sendMessageToTarget":{let B=J.get(W.sessionId);if(B)B.handle.onMessageFromTools(W.message);if(typeof _==="number")P(j,{id:_,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof _==="number")P(j,{id:_,result:{}});return;case"Target.getBrowserContexts":{if(typeof _==="number")P(j,{id:_,result:{browserContextIds:["default"]}});return}}if(typeof _==="number")P(j,{id:_,error:{code:-32601,message:`Browser-level method '${M??"?"}' not implemented`}})}Q.on("message",(C,j)=>{let _=j?new TextDecoder().decode(C):C.toString();if(Z)console.error(`[browser] tools>> ${_.slice(0,240)}`);let M;try{M=JSON.parse(_)}catch{return}if(typeof M.sessionId==="string"){if(M.sessionId===K){let R={...M};return delete R.sessionId,A(R,M.sessionId)}let W=J.get(M.sessionId);if(!W){if(typeof M.id==="number")V({id:M.id,sessionId:M.sessionId,error:{code:-32000,message:`Session ${M.sessionId} not found`}});return}let B={...M};delete B.sessionId,W.handle.onMessageFromTools(JSON.stringify(B));return}A(M,void 0)}),Q.on("close",()=>{clearInterval(q);for(let[,C]of J)try{C.handle.close()}catch{}J.clear()})}async function DJ(Q={}){let $=Q.port??9222,Z=Q.host??"localhost",J=await PJ();if(J.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 Y=new Map,X=new WeakMap,G=new Map;for(let M of J)G.set(M,[]),X.set(M,new Set),M.wi.subscribe((W)=>{let{__selector:B,__argument:R}=W;if(!B||!R)return;if(B==="_rpc_reportConnectedApplicationList:"){let E=R.WIRApplicationDictionaryKey??{},D=Object.entries(E).map(([w,k])=>({appId:w,bundleId:k.WIRApplicationBundleIdentifierKey,name:k.WIRApplicationNameKey??k.WIRApplicationBundleIdentifierKey??w,isProxy:Boolean(k.WIRIsApplicationProxyKey)}));G.set(M,D);let I=X.get(M);for(let w of D){if(w.isProxy||I.has(w.appId))continue;I.add(w.appId),M.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:w.appId})}}else if(B==="_rpc_applicationConnected:"){let E=R,D=G.get(M)??[];if(!D.find((I)=>I.appId===E.WIRApplicationIdentifierKey))D.push({appId:E.WIRApplicationIdentifierKey,bundleId:E.WIRApplicationBundleIdentifierKey,name:E.WIRApplicationNameKey??E.WIRApplicationBundleIdentifierKey,isProxy:Boolean(E.WIRIsApplicationProxyKey)}),G.set(M,D);if(!E.WIRIsApplicationProxyKey){let I=X.get(M);if(!I.has(E.WIRApplicationIdentifierKey))I.add(E.WIRApplicationIdentifierKey),M.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:E.WIRApplicationIdentifierKey})}}else if(B==="_rpc_applicationDisconnected:"){let E=G.get(M)??[];G.set(M,E.filter((D)=>D.appId!==R.WIRApplicationIdentifierKey)),Y.delete(`${M.id}:${R.WIRApplicationIdentifierKey}`)}else if(B==="_rpc_applicationSentListing:"){let E=R.WIRApplicationIdentifierKey,D=R.WIRListingKey??{},I=new Map;for(let[w,k]of Object.entries(D))I.set(w,{pageId:Number(k.WIRPageIdentifierKey??0),title:k.WIRTitleKey??"",url:k.WIRURLKey??"",type:k.WIRTypeKey??"",connectionId:typeof k.WIRConnectionIdentifierKey==="string"?k.WIRConnectionIdentifierKey:null});Y.set(`${M.id}:${E}`,I)}}),M.wi.send("_rpc_reportIdentifier:",{}),M.wi.send("_rpc_getConnectedApplications:",{});let N=setInterval(()=>{for(let M of J){let W=G.get(M)??[];for(let B of W){if(B.isProxy)continue;M.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:B.appId})}}},TJ),K=new Map;function V(){let M=[];for(let W of J){let B=G.get(W)??[];for(let R of B){if(R.isProxy)continue;let E=Y.get(`${W.id}:${R.appId}`);if(!E)continue;for(let D of E.values()){let I=!!D.connectionId&&D.connectionId!==W.wi.connection;M.push({targetId:`${W.id}:${R.appId}:${D.pageId}`,source:W,appId:R.appId,appName:R.name,bundleId:R.bundleId,pageId:D.pageId,title:D.title,url:D.url,type:D.type,inUseByOtherInspector:I})}}}return M}let z=crypto.randomUUID(),F=z9({brand:"",version:(M)=>({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://${M}/devtools/browser/${z}`}),listTargets:(M)=>V().map((W)=>W9({reqHost:M,id:W.targetId,description:`${W.source.label}${W.bundleId?` (${W.bundleId})`:""}`,title:W.title||W.appName,url:/^https?:/i.test(W.url)?W.url:"about:blank",type:i8(W.type)}))}),H=new X9.default({noServer:!0}),L=`/devtools/browser/${z}`;F.on("upgrade",(M,W,B)=>{let R=new URL(M.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${R.pathname}`),R.pathname===L){H.handleUpgrade(M,W,B,(D)=>{EJ(D,{listEntries:()=>V().map((I)=>({targetId:I.targetId,type:i8(I.type),title:I.title||I.appName,url:I.url})),createPageSession:(I,w)=>{let k=V().find((y)=>y.targetId===I);if(!k)return null;return U(k,w)}})});return}if(!R.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${R.pathname}`),W.destroy();return}let E=decodeURIComponent(R.pathname.slice(15));H.handleUpgrade(M,W,B,(D)=>{_(D,E)})});function U(M,W){let B=crypto.randomUUID(),E=new LQ({readyState:1,send:(w)=>W(w)},M.source.wi,M.appId,M.pageId,B);y5(E),K.set(B,E);let D=!!process.env.INSPECT_WEBKIT_DEBUG,I=M.source.wi.subscribe((w)=>{if(w.__selector!=="_rpc_applicationSentData:")return;let k=w.__argument;if(!k)return;if(k.WIRDestinationKey&&k.WIRDestinationKey!==B)return;if(k.WIRApplicationIdentifierKey!==M.appId)return;if(k.WIRPageIdentifierKey!==void 0&&Number(k.WIRPageIdentifierKey)!==M.pageId)return;let y=k.WIRMessageDataKey??k.WIRSocketDataKey;if(!y)return;let u=typeof y==="string"?y:new TextDecoder().decode(y);if(D)console.error(`[cdp] target>> ${u.slice(0,240)}`);E.onMessageFromTarget(u)});return M.source.wi.forwardSocketSetup(M.appId,M.pageId,B),console.error(`# devtools attached: ${M.source.label} :: ${M.appName} :: ${M.title||M.url}`),{onMessageFromTools(w){if(D)console.error(`[cdp] tools>> ${w.slice(0,300)}`);E.onMessageFromTools(w)},close(){I();try{E.wi.forwardDidClose(E.appId,E.pageId,E.senderKey)}catch{}K.delete(E.senderKey)}}}let T=new Map,q=8000;function P(M){let W=T.get(M);if(W)return W;let B=V().find((y)=>y.targetId===M);if(!B)return null;let R=crypto.randomUUID(),D=new LQ({readyState:1,send:()=>{}},B.source.wi,B.appId,B.pageId,R);y5(D),K.set(R,D);let I=B.source.wi.subscribe((y)=>{if(y.__selector!=="_rpc_applicationSentData:")return;let u=y.__argument;if(!u)return;if(u.WIRDestinationKey&&u.WIRDestinationKey!==R)return;if(u.WIRApplicationIdentifierKey!==B.appId)return;if(u.WIRPageIdentifierKey!==void 0&&Number(u.WIRPageIdentifierKey)!==B.pageId)return;let b=u.WIRMessageDataKey??u.WIRSocketDataKey;if(!b)return;let S=typeof b==="string"?b:new TextDecoder().decode(b);D.onMessageFromTarget(S)});B.source.wi.forwardSocketSetup(B.appId,B.pageId,R);let w=Promise.race([D.callTarget("DOM.getDocument",{depth:0}).then((y)=>y?.root?.nodeId),new Promise((y,u)=>setTimeout(()=>u(Error("DOM.getDocument timeout")),5000))]),k={cdp:D,rootNodeIdPromise:w,idleTimer:null,close(){if(k.idleTimer)clearTimeout(k.idleTimer);I();try{D.wi.forwardDidClose(D.appId,D.pageId,D.senderKey)}catch{}K.delete(R),T.delete(M)}};return T.set(M,k),w.catch(()=>k.close()),k}function A(M){if(M.idleTimer)clearTimeout(M.idleTimer);M.idleTimer=setTimeout(()=>M.close(),q)}function C(M){if(M){T.get(M)?.close();return}for(let W of T.values())W.close()}async function j(M,W){let B=P(M);if(!B)return;A(B);try{if(W){let R=await B.rootNodeIdPromise;if(!R)return;await B.cdp.callTarget("DOM.highlightNode",{nodeId:R,highlightConfig:{showInfo:!1,contentColor:{r:111,g:168,b:220,a:0.55},paddingColor:{r:147,g:196,b:125,a:0},borderColor:{r:255,g:229,b:153,a:0},marginColor:{r:246,g:178,b:107,a:0}}})}else await B.cdp.callTarget("DOM.hideHighlight",{})}catch{B.close()}}function _(M,W){let B=V().find((I)=>I.targetId===W);if(!B){console.error(`# ws closed: unknown target ${W} (known: ${V().map((I)=>I.targetId).join(", ")||"none"})`),M.close(1011,`unknown target ${W}`);return}let R=U(B,(I)=>{if(M.readyState===1)M.send(I)}),E=!0;M.on("pong",()=>{E=!0});let D=setInterval(()=>{if(!E){try{M.terminate()}catch{}return}E=!1;try{M.ping()}catch{}},15000);M.on("message",(I,w)=>{let k=w?new TextDecoder().decode(I):I.toString();R.onMessageFromTools(k)}),M.on("close",()=>{clearInterval(D),R.close()})}return await H9(F,Z,$),N9({brand:"safari",host:Z,port:$}),{stop(){clearInterval(N);for(let M of T.values())M.close();H.close(),F.close();for(let M of J)try{M.wi.close(),M.lockdown?.close()}catch{}},getTargets(){return V()},highlightTarget(M,W){return j(M,W)},releaseHighlight(M){C(M)}}}async function PJ(){let[Q,$]=await Promise.all([qJ(),xJ()]);return[...Q,...$]}async function qJ(){let Q=[];try{Q=await e8()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all(Q.map(IJ))).filter((Z)=>Z!==null)}async function IJ(Q){try{let $=await Q9(Q.Properties.SerialNumber),Z=await DQ.open(Q,$);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new r7(Y,X);return await G.reportIdentifier(),{kind:"device",id:`device:${Q.Properties.SerialNumber}`,label:`device:${Q.Properties.SerialNumber.slice(0,8)}`,wi:G,lockdown:Z}}catch($){return console.error(`warn: device ${Q.Properties.SerialNumber}: ${$.message}`),null}}async function xJ(){let Q=[];try{Q=await Z9()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all(Q.map(wJ))).filter((Z)=>Z!==null)}async function wJ(Q){try{let{socket:$,stream:Z}=await J9(Q.socketPath),J=new r7($,Z);return await J.reportIdentifier(),{kind:"simulator",id:`sim:${Q.pid}`,label:`sim:${Q.pid}`,wi:J}}catch($){return console.error(`warn: simulator ${Q.socketPath}: ${$.message}`),null}}function i8(Q){switch(Q){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class M9{url;ws;handlers=new Set;openPromise;constructor(Q){this.url=Q,this.ws=new n8(Q),this.ws.binaryType="nodebuffer",this.openPromise=new Promise(($,Z)=>{this.ws.once("open",()=>$()),this.ws.once("error",(J)=>Z(J))}),this.ws.on("message",($,Z)=>{let J=Z?new TextDecoder().decode($):$.toString();for(let Y of this.handlers)Y(J)})}ready(){return this.openPromise}onFrame(Q){return this.handlers.add(Q),()=>this.handlers.delete(Q)}forwardSocketData(Q,$,Z,J){if(this.ws.readyState!==n8.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose(Q,$,Z){}close(){try{this.ws.close()}catch{}}}async function SJ(Q){let $=Q.port??9223,Z=Q.host??"localhost",{upstreams:J}=Q,Y=z9({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(N)=>J.map((K)=>W9({reqHost:N,id:encodeURIComponent(K.url),description:K.label??"bun",title:K.label??K.url,url:K.url,type:"node"}))}),X=new X9.default({noServer:!0});Y.on("upgrade",(N,K,V)=>{let z=new URL(N.url??"/","http://placeholder");if(!z.pathname.startsWith("/devtools/page/")){K.destroy();return}let F=decodeURIComponent(z.pathname.slice(15)),H=J.find((L)=>L.url===F);if(!H){K.destroy();return}X.handleUpgrade(N,K,V,(L)=>{G(L,H).catch((U)=>{console.error(`# bun attach failed: ${U.message}`);try{L.close(1011,U.message)}catch{}})})});async function G(N,K){let V=!!process.env.INSPECT_WEBKIT_DEBUG,z=new M9(K.url);await z.ready();let F=crypto.randomUUID(),H=new LQ(N,z,"bun",0,F);y5(H);let L=z.onFrame((U)=>{if(V)console.error(`[bun] target>> ${U.slice(0,240)}`);H.onMessageFromTarget(U)});N.on("message",(U,T)=>{let q=T?new TextDecoder().decode(U):U.toString();if(V)console.error(`[bun] tools>> ${q.slice(0,300)}`);H.onMessageFromTools(q)}),N.on("close",()=>{L(),z.close()}),console.error(`# devtools attached: ${K.label??K.url}`)}return await H9(Y,Z,$),N9({brand:"bun",host:Z,port:$}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function F9(){return e8()}async function kJ(){let[Q,$]=await Promise.all([yJ(),fJ()]);return[...Q.flat(),...$.flat()]}async function yJ(){let Q=await F9();return Promise.all(Q.map(bJ))}async function fJ(){let Q=await Z9();return Promise.all(Q.map(vJ))}async function bJ(Q){let $=null;try{return $=await hJ(Q),await B9($.client,{source:"device",udid:Q.Properties.SerialNumber,deviceID:Q.DeviceID})}catch(Z){return console.error(`warn: ${Q.Properties.SerialNumber}: ${Z.message}`),[]}finally{$?.client.close(),$?.lockdown.close()}}async function vJ(Q){let $=null;try{let{socket:Z,stream:J}=await J9(Q.socketPath);return $=new r7(Z,J),await $.reportIdentifier(),await B9($,{source:"simulator",udid:`sim:${Q.pid}`})}catch(Z){return console.error(`warn: simulator (${Q.socketPath}): ${Z.message}`),[]}finally{$?.close()}}async function hJ(Q){let $=await Q9(Q.Properties.SerialNumber),Z=await DQ.open(Q,$);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new r7(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function B9(Q,$){let Z=(await Q.listApplications()).filter((X)=>!X.isProxy),J=await Promise.all(Z.map((X)=>Q.getListing(X.appId))),Y=[];for(let X=0;X<Z.length;X++){let G=Z[X];for(let N of J[X])Y.push({...$,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:N.pageId,title:N.title,url:N.url,type:N.type})}return Y}var XZ,GZ,p8,KZ,VZ,zZ,HZ,K7=(Q,$,Z)=>{var J=Q!=null&&typeof Q==="object";if(J){var Y=$?zZ??=new WeakMap:HZ??=new WeakMap,X=Y.get(Q);if(X)return X}Z=Q!=null?XZ(GZ(Q)):{};let G=$||!Q||!Q.__esModule?p8(Z,"default",{value:Q,enumerable:!0}):Z;for(let N of KZ(Q))if(!VZ.call(G,N))p8(G,N,{get:WZ.bind(Q,N),enumerable:!0});if(J)Y.set(Q,G);return G},t=(Q,$)=>()=>($||Q(($={exports:{}}).exports,$),$.exports),d,V7,jQ,NZ,o7,a7,o8,a8,MZ,f5,b5,FZ,r8,BZ,RZ=`<?xml version="1.0" encoding="UTF-8"?>
|
|
12
|
+
${Q}</dict>`}function F9($){let Q=W9($,"");return new TextEncoder().encode(m2+Q+l2)}class p0{src;pos=0;constructor($){this.src=$}skip(){while(this.pos<this.src.length){let $=this.src[this.pos];if($===" "||$==="\t"||$===`
|
|
13
|
+
`||$==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let Q=this.src.indexOf("-->",this.pos+4);if(Q<0)throw Error("unterminated comment");this.pos=Q+3}else if(this.src.startsWith("<?",this.pos)){let Q=this.src.indexOf("?>",this.pos+2);if(Q<0)throw Error("unterminated processing instruction");this.pos=Q+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let Q=0;while(this.pos<this.src.length){let Z=this.src[this.pos++];if(Z==="[")Q++;else if(Z==="]")Q--;else if(Z===">"&&Q===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 Q=this.src.slice(this.pos+1,$);this.pos=$+1;let Z=Q.startsWith("/"),J=Q.endsWith("/");return{name:Q.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:J,isClose:Z}}readText(){let $=this.src.indexOf("<",this.pos),Q=$<0?this.src.slice(this.pos):this.src.slice(this.pos,$);return this.pos=$<0?this.src.length:$,Q.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}}function K9($,Q){let Z=(J)=>{let Y=$.nextTag();if(!Y||!Y.isClose||Y.name!==J)throw Error(`expected </${J}>`)};switch(Q){case"true":case"false":throw Error(`<${Q}> must be self-closing`);case"string":case"key":{let J=$.readText();return Z(Q),J}case"integer":{let J=$.readText().trim();if(Z("integer"),/^-?\d+$/.test(J)&&Math.abs(Number(J))<=Number.MAX_SAFE_INTEGER)return Number(J);return BigInt(J)}case"real":{let J=Number($.readText().trim());return Z("real"),J}case"data":{let J=d2($.readText());return Z("data"),J}case"date":{let J=new Date($.readText().trim());return Z("date"),J}case"array":{let J=[];while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <array>");if(Y.isClose&&Y.name==="array")return J;J.push(Y.selfClose?V9(Y.name):K9($,Y.name))}}case"dict":{let J={};while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <dict>");if(Y.isClose&&Y.name==="dict")return J;if(Y.name!=="key")throw Error(`expected <key>, got <${Y.name}>`);let G=$.readText();Z("key");let X=$.nextTag();if(!X)throw Error("unterminated <dict>");J[G]=X.selfClose?V9(X.name):K9($,X.name)}}default:throw Error(`unknown plist tag <${Q}>`)}}function V9($){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 $8($){let Q=typeof $==="string"?$:new TextDecoder().decode($),Z=new p0(Q);while(!0){let Y=Z.nextTag();if(!Y)throw Error("no <plist> root");if(Y.name==="plist"&&!Y.isClose)break}let J=Z.nextTag();if(!J)throw Error("empty plist");return J.selfClose?V9(J.name):K9(Z,J.name)}function y6($,Q,Z){let J=0;for(let Y=0;Y<Z;Y++)J=J*256+$[Q+Y];return J}function n2($){if($.length<41)throw Error("bplist too short");let Q=new TextDecoder().decode($.slice(0,8));if(Q!=="bplist00")throw Error(`bad magic: ${Q}`);let Z=$.length-32,J=$[Z+6],Y=$[Z+7],G=y6($,Z+8,8),X=y6($,Z+16,8),z=y6($,Z+24,8),K=Array(G);for(let M=0;M<G;M++)K[M]=y6($,z+M*J,J);function V(M){return y6($,M,Y)}function W(M){let B=K[M],L=$[B],A=L>>4,D=L&15;function q(j){if(D!==15)return{len:D,next:j};let T=$[j];if((T&240)!==16)throw Error("expected int marker for length");let _=1<<(T&15);return{len:y6($,j+1,_),next:j+1+_}}switch(A){case 0:if(D===0)return null;if(D===8)return!1;if(D===9)return!0;if(D===15)return null;throw Error(`unknown singleton ${D}`);case 1:{let j=1<<D,T=y6($,B+1,j);if(j===8&&T>Number.MAX_SAFE_INTEGER)return BigInt(T);return T}case 2:{let j=1<<D,T=new DataView($.buffer,$.byteOffset+B+1,j);return j===4?T.getFloat32(0,!1):T.getFloat64(0,!1)}case 3:{let T=new DataView($.buffer,$.byteOffset+B+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+T*1000)}case 4:{let{len:j,next:T}=q(B+1);return $.slice(T,T+j)}case 5:{let{len:j,next:T}=q(B+1);return new TextDecoder("ascii").decode($.slice(T,T+j))}case 6:{let{len:j,next:T}=q(B+1),_=$.slice(T,T+j*2),E=new Uint8Array(_.length);for(let P=0;P<_.length;P+=2)E[P]=_[P+1],E[P+1]=_[P];return new TextDecoder("utf-16le").decode(E)}case 10:{let{len:j,next:T}=q(B+1),_=[];for(let E=0;E<j;E++)_.push(W(V(T+E*Y)));return _}case 13:{let{len:j,next:T}=q(B+1),_={};for(let E=0;E<j;E++){let P=W(V(T+E*Y)),N=W(V(T+(j+E)*Y));if(typeof P!=="string")throw Error(`non-string dict key: ${typeof P}`);_[P]=N}return _}default:throw Error(`unknown bplist marker 0x${L.toString(16)} at ${B}`)}}return W(X)}function i2($){if($.length>=8){if(new TextDecoder().decode($.slice(0,8))==="bplist00")return n2($)}return $8($)}class Q8{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 Q of this.waiters)Q.reject($??Error("stream closed"));this.waiters=[]}read($){return new Promise((Q,Z)=>{if(this.closed&&this.size<$){Z(this.closeErr??Error("stream closed"));return}this.waiters.push({n:$,resolve:Q,reject:Z}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let $=this.waiters.shift(),Q=new Uint8Array($.n),Z=0;while(Z<$.n){let J=this.chunks[0],Y=$.n-Z;if(J.length<=Y)Q.set(J,Z),Z+=J.length,this.chunks.shift();else Q.set(J.subarray(0,Y),Z),this.chunks[0]=J.subarray(Y),Z+=Y}this.size-=$.n,$.resolve(Q)}}}function R9($,Q){let Z=(G)=>{Q.push(new Uint8Array(G.buffer,G.byteOffset,G.byteLength))},J=()=>Q.close(),Y=(G)=>Q.close(G);return $.on("data",Z),$.on("close",J),$.on("error",Y),()=>{$.off("data",Z),$.off("close",J),$.off("error",Y)}}async function C9(){let $=new Q8;return new Promise((Q,Z)=>{let J=l0.createConnection({path:r2}),Y=(G)=>{$.close(G),Z(G)};J.once("error",Y),J.once("connect",()=>{J.off("error",Y);let G=R9(J,$);Q({socket:J,stream:$,detach:G})})})}async function t2($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!0);return(await $.read(Z-4)).slice(12)}function s2($,Q,Z){let J=16+Z.length,Y=new Uint8Array(16),G=new DataView(Y.buffer);G.setUint32(0,J,!0),G.setUint32(4,o2,!0),G.setUint32(8,a2,!0),G.setUint32(12,Q,!0),$.write(Y),$.write(Z)}async function O9($,Q,Z,J){let Y=F9({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...J});s2($,Z,Y);let G=await t2(Q);return $8(G)}async function d0(){let{socket:$,stream:Q}=await C9();try{return(await O9($,Q,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{$.end()}}async function n0($){let{socket:Q,stream:Z}=await C9();try{let Y=(await O9(Q,Z,1,{MessageType:"ReadPairRecord",PairRecordID:$})).PairRecordData;if(!Y)throw Error(`no pair record for ${$} — pair the device first (open Finder/iTunes, tap "Trust")`);return $8(Y)}finally{Q.end()}}async function f0($,Q){let{socket:Z,stream:J,detach:Y}=await C9(),G=(Q&255)<<8|Q>>8&255,X=await O9(Z,J,1,{MessageType:"Connect",DeviceID:$,PortNumber:G});if(X.MessageType!=="Result"||X.Number!==0){Z.end();let z=X.Number??"?";throw Error(`Connect to device ${$} port ${Q} failed (code ${z})`)}return{socket:Z,stream:J,detach:Y}}async function o0(){let $=e2("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if($.status!==0||!$.stdout)return[];let Q=$.stdout.toString("utf8"),Z=new Map;for(let J of Q.split(`
|
|
14
|
+
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(J))continue;let Y=J.split(/\s+/),G=Number(Y[1]),X=Y[Y.length-1];if(X)Z.set(X,G)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function a0($){let Q=new Q8;return new Promise((Z,J)=>{let Y=i0.createConnection({path:$}),G=(X)=>{Q.close(X),J(X)};Y.once("error",G),Y.once("connect",()=>{Y.off("error",G),R9(Y,Q),Z({socket:Y,stream:Q})})})}async function Z9($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return $8(J)}function J9($,Q){let Z=F9({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function Y9($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function v0($,Q,Z,J){return new Promise((Y,G)=>{Q();let X=new Q8,z=r0.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),K=(V)=>{C6(`${J} tls error:`,V),X.close(V),G(V)};z.once("error",K),z.once("secureConnect",()=>{C6(`${J} tls handshake complete`),z.off("error",K);let V=R9(z,X);Y({socket:z,stream:X,detach:V})})})}class Z8{socket;stream;pair;udid;deviceID;detach;constructor($,Q,Z,J,Y,G){this.socket=$,this.stream=Q,this.pair=Z,this.udid=J,this.deviceID=Y,this.detach=G}static async open($,Q){C6("connecting usbmux tunnel to lockdown port",b0);let{socket:Z,stream:J,detach:Y}=await f0($.DeviceID,b0),G=new Z8(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);C6("sending QueryType"),J9(Z,{Request:"QueryType"});let X=await Z9(J);if(C6("QueryType reply:",X),Y9(X,"QueryType"),X.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(X.Type)}`);return G}async startSession(){C6("StartSession with HostID",this.pair.HostID),J9(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await Z9(this.stream);if(C6("StartSession reply:",$),Y9($,"StartSession"),$.EnableSessionSSL){C6("upgrading to TLS");let Q=await v0(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,C6("TLS upgrade complete")}}async startService($){C6("StartService",$),J9(this.socket,{Request:"StartService",Service:$});let Q=await Z9(this.stream);return C6("StartService reply:",Q),Y9(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){C6("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await f0(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await v0(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function $1($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return i2(J)}function Q1($,Q){let Z=F9(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function Z1(){let $=crypto.getRandomValues(new Uint8Array(16));$[6]=$[6]&15|64,$[8]=$[8]&63|128;let Q=Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("");return`${Q.slice(0,8)}-${Q.slice(8,12)}-${Q.slice(12,16)}-${Q.slice(16,20)}-${Q.slice(20)}`}class j7{socket;stream;connectionId=Z1();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await $1(Q);for(let J of[...this.subscribers])try{J(Z)}catch{}}}catch{}})()}subscribe($){return this.subscribers.add($),()=>this.subscribers.delete($)}waitFor($,Q=5000){return new Promise((Z,J)=>{let Y=setTimeout(()=>{G(),J(Error(`timeout waiting for ${$} after ${Q}ms`))},Q),G=this.subscribe((X)=>{if(X.__selector===$)clearTimeout(Y),G(),Z(X)})})}send($,Q){Q1(this.socket,{__selector:$,__argument:{WIRConnectionIdentifierKey:this.connectionId,...Q}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let $=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!$)return[];let Z=$.__argument.WIRApplicationDictionaryKey??{},J=[];for(let[Y,G]of Object.entries(Z)){let X=G;J.push({appId:Y,bundleId:X.WIRApplicationBundleIdentifierKey,name:X.WIRApplicationNameKey,isProxy:Boolean(X.WIRIsApplicationProxyKey),isActive:Boolean(X.WIRIsApplicationActiveKey),hostAppId:X.WIRHostApplicationIdentifierKey})}return J}async getListing($){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$});let Q=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!Q)return[];let J=Q.__argument.WIRListingKey??{},Y=[];for(let G of Object.values(J)){let X=G;Y.push({pageId:Number(X.WIRPageIdentifierKey??0),title:X.WIRTitleKey??"",url:X.WIRURLKey??"",type:X.WIRTypeKey??""})}return Y}get connection(){return this.connectionId}forwardSocketSetup($,Q,Z){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRAutomaticallyPause:!1})}forwardSocketData($,Q,Z,J){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRSocketDataKey:J})}forwardDidClose($,Q,Z){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z})}onMessage($){return this.subscribe($)}close(){this.socket.end()}}class s7{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($,Q,Z,J,Y){this.ws=$,this.wi=Q,this.appId=Z,this.pageId=J,this.senderKey=Y}addMessageFilter($,Q){let Z=this.filters.get($);if(!Z)this.filters.set($,Z=[]);Z.push(Q)}callTarget($,Q={}){return new Promise((Z,J)=>{let Y=--this.requestId;this.adapterRequestMap.set(Y,{resolve:Z,reject:J}),this.sendRaw(JSON.stringify({id:Y,method:$,params:Q}))})}fireEventToTools($,Q){this.sendToTools(JSON.stringify({method:$,params:Q}))}fireResultToTools($,Q){this.sendToTools(JSON.stringify({id:$,result:Q}))}fireErrorToTools($,Q){this.sendToTools(JSON.stringify({id:$,error:{code:Q.code??-32000,message:Q.message}}))}replyEmpty($){if(typeof $.id==="number")this.fireResultToTools($.id,{});return Promise.resolve(null)}async onMessageFromTools($){let Q;try{Q=JSON.parse($)}catch{return}if(typeof Q.method==="string"&&typeof Q.id==="number")this.toolRequestMap.set(Q.id,Q.method);let Z=`tools::${Q.method}`,J=this.filters.get(Z),Y=Q;if(J)for(let G of J){if(!Y)break;Y=await G(Y)}if(Y)this.sendRaw(JSON.stringify(Y))}async onMessageFromTarget($){let Q;try{Q=JSON.parse($)}catch{return}if(Q.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let G=Q.params?.targetInfo;if(G?.type==="page"&&!this.innerTargetId)this.innerTargetId=G.targetId,this.flushQueue();return}if(Q.method==="Target.didCommitProvisionalTarget"){let G=Q.params?.newTargetId;if(typeof G==="string")this.innerTargetId=G;return}if(Q.method==="Target.targetDestroyed")return;if(Q.method==="Target.dispatchMessageFromTarget"){let G=Q.params?.message;if(typeof G==="string")return this.onMessageFromTarget(G);return}if(typeof Q.id==="number"&&this.wrappedAckIds.has(Q.id)){this.wrappedAckIds.delete(Q.id);return}if(typeof Q.id==="number"){let G=this.adapterRequestMap.get(Q.id);if(G){if(this.adapterRequestMap.delete(Q.id),"error"in Q&&Q.error)G.reject(Q.error);else G.resolve(Q.result??{});return}let X=this.toolRequestMap.get(Q.id);if(X){this.toolRequestMap.delete(Q.id);let z=`target::${X}`;if("error"in Q&&this.filters.has("target::error"))z="target::error";let K=this.filters.get(z);if(!K)return this.sendToTools($);let V=Q;for(let W of K){if(!V)break;V=await W(V)}if(V)this.sendToTools(JSON.stringify(V));return}return this.sendToTools($)}let Z=`target::${Q.method}`,J=this.filters.get(Z);if(!J)return this.sendToTools($);let Y=Q;for(let G of J){if(!Y)break;Y=await G(Y)}if(Y)this.sendToTools(JSON.stringify(Y))}sendRaw($){let Q=null;try{Q=JSON.parse($)}catch{}let Z=Q&&typeof Q.method==="string"&&Q.method.startsWith("Target.");if(this.innerTargetId&&Q&&!Z){if(typeof Q.id==="number")this.wrappedAckIds.add(Q.id);let J={id:Q.id,method:"Target.sendMessageToTarget",params:{id:Q.id,message:$,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(J));return}if(!this.innerTargetId&&Q&&!Z){if(this.outgoingQueue.push($),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let J=this.outgoingQueue;this.outgoingQueue=[];for(let Y of J)this.writeFrame(Y)}},250);return}this.writeFrame($)}flushQueue(){if(this.outgoingQueue.length===0)return;let $=this.outgoingQueue;this.outgoingQueue=[];for(let Q of $)this.sendRaw(Q)}writeFrame($){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode($))}sendToTools($){if(this.ws.readyState===1)this.ws.send($)}}function Y1(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function h($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function G1($,Q){$.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>h($,Z,{result:!1})),$.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>h($,Z,{})),$.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>h($,Z,{})),$.addMessageFilter("target::Debugger.enable",(Z)=>{return $.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),$.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Debugger.scriptParsed",(Z)=>{if(Z.params?.scriptId)Q.lastScriptEval.value=String(Z.params.scriptId);return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpoint",(Z)=>{let J=Z.params??{};return Z.params={location:J.location,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpointByUrl",(Z)=>{let J=Z.params??{};return Z.params={lineNumber:J.lineNumber,url:J.url,urlRegex:J.urlRegex,columnNumber:J.columnNumber,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)});for(let Z of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])$.addMessageFilter(`tools::Debugger.${Z}`,(J)=>Promise.resolve(J));$.addMessageFilter("target::Debugger.paused",(Z)=>{let J=Z.params?.callFrames;if(Array.isArray(J))for(let Y of J){if(Y.functionName==null&&typeof Y.name==="string")Y.functionName=Y.name;if(!Y.location&&Y.sourceCodeLocation)Y.location={scriptId:String(Y.sourceCodeLocation.scriptId??""),lineNumber:Y.sourceCodeLocation.lineNumber??0,columnNumber:Y.sourceCodeLocation.columnNumber??0};if(Array.isArray(Y.scopeChain)){for(let G of Y.scopeChain)if(!G.object&&G.value)G.object=G.value}}return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBlackboxedRanges",(Z)=>h($,Z,{})),$.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>h($,Z,{})),$.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function X1($,Q){$.addMessageFilter("target::Runtime.executionContextCreated",(Z)=>{let J=Z.params?.context;if(J){if(!J.origin)J.origin=J.name??"";let Y=Number(J.id),G=!!(J.isPageContext||J.type==="normal");if(Number.isFinite(Y)&&Y>0){if(!Q.pageExecCtx.id||G&&!Q.pageExecCtx.isPage)Q.pageExecCtx.id=Y,Q.pageExecCtx.isPage=G}if(J.frameId)J.auxData={frameId:J.frameId,isDefault:!0},delete J.frameId}return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.evaluate",(Z)=>{let J=Z.params;if(!J)return Promise.resolve(Z);if(J.throwOnSideEffect)return h($,Z,{result:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"},exceptionDetails:{exceptionId:0,text:"EvalError: Possible side-effect in debug-evaluate",lineNumber:0,columnNumber:0,url:"",exception:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"}}});if("silent"in J)J.doNotPauseOnExceptionsAndMuteConsole=!!J.silent,delete J.silent;if("userGesture"in J)J.emulateUserGesture=!!J.userGesture,delete J.userGesture;return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.evaluate",(Z)=>{let J=Z.result;if(J?.wasThrown){if(J.result)J.result.subtype="error";J.exceptionDetails={exceptionId:0,text:J.result?.description??"Uncaught",url:"",scriptId:Q.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:Q.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:J.result}}return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.getProperties",(Z)=>{let J=Z.result;if(!J)return Promise.resolve(Z);let Y=Array.isArray(J.result)?J.result:Array.isArray(J.properties)?J.properties:null;if(Y)J.result=Y.filter((G)=>G.isOwn||G.nativeGetter).map((G)=>({...G,isOwn:!0})),delete J.properties;if(Array.isArray(J.internalProperties))J.internalProperties=J.internalProperties.map((G)=>({name:G.name,value:G.value}));return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.compileScript",(Z)=>h($,Z,{scriptId:null,exceptionDetails:null})),$.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>h($,Z,{names:[]})),$.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>h($,Z,{})),$.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>h($,Z,{id:"inspect-webkit"})),$.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>h($,Z,{usedSize:0,totalSize:0})),$.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>h($,Z,{})),$.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>h($,Z,{})),$.addMessageFilter("tools::Runtime.releaseObject",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.releaseObjectGroup",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.callFunctionOn",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.queryObjects",(Z)=>Promise.resolve(Z)),$.addMessageFilter("target::Debugger.globalObjectCleared",(Z)=>{return $.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function W1($,Q){$.addMessageFilter("tools::Log.startViolationsReport",(Z)=>h($,Z,{})),$.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>h($,Z,{})),$.addMessageFilter("tools::Log.clear",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.disable",(Z)=>{return Z.method="Console.disable",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.enable",(Z)=>{return Z.method="Console.enable",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.enable",(Z)=>{return $.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Console.messageAdded",(Z)=>{let J=Z.params?.message??{},G=(Array.isArray(J.stackTrace)?J.stackTrace:Array.isArray(J.stackTrace?.callFrames)?J.stackTrace.callFrames:[]).map((K)=>({functionName:K.functionName??"",scriptId:K.scriptId??"",url:K.url??"",lineNumber:Number(K.lineNumber??0),columnNumber:Number(K.columnNumber??0)})),X=G.length?{callFrames:G}:void 0,z=Date.now();if(J.source==="console-api"){let K=J.type==="log"?J.level??"log":J.type??"log",V=K1(K),W=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],M={type:V,args:W,executionContextId:Q.pageExecCtx.id||1,timestamp:z,stackTrace:X};return Q.lastConsoleApiCalled.value=M,$.fireEventToTools("Runtime.consoleAPICalled",M),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:z,exceptionDetails:{exceptionId:0,text:String(J.text??"Uncaught"),lineNumber:Number(J.line??0),columnNumber:Number(J.column??0),scriptId:Q.lastScriptEval.value,url:J.url,stackTrace:X,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return $.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:V1(J.level??J.type??"log"),text:String(J.text??""),timestamp:z,url:J.url,lineNumber:J.line,stackTrace:X,networkRequestId:J.networkRequestId}}),Promise.resolve(null)}),$.addMessageFilter("target::Console.messagesCleared",()=>{return $.fireEventToTools("Log.entriesCleared",{}),$.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:Q.pageExecCtx.id||1,timestamp:Date.now()}),Q.lastConsoleApiCalled.value=null,Promise.resolve(null)}),$.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let Z=Q.lastConsoleApiCalled.value;if(Z)$.fireEventToTools("Runtime.consoleAPICalled",{...Z,timestamp:Date.now()});return Promise.resolve(null)}),$.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function K1($){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 V1($){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 z1($){let Q=new Set;$.addMessageFilter("tools::DOM.enable",(Z)=>h($,Z,{})),$.addMessageFilter("tools::DOM.setInspectMode",(Z)=>{if(Z.method="DOM.setInspectModeEnabled",Z.params)Z.params.enabled=Z.params.mode==="searchForNode",delete Z.params.mode,delete Z.params.highlightConfig;return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.setInspectedNode",(Z)=>{return Z.method="Console.addInspectedNode",Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.performSearch",(Z)=>{if(Z.params)Z.params={query:Z.params.query,caseSensitive:!!Z.params.caseSensitive};return Promise.resolve(Z)}),$.addMessageFilter("target::DOM.performSearch",(Z)=>{let J=Z.result?.searchId;if(typeof J==="string")Q.add(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.discardSearchResults",(Z)=>{let J=Z.params?.searchId;if(typeof J==="string")Q.delete(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(Z)=>{let J=Z.params?.backendNodeIds??[],Y=await Promise.all(J.map((G)=>$.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:G}).then((X)=>X.nodeId).catch(()=>G)));return $.fireResultToTools(Z.id,{nodeIds:Y}),null}),$.addMessageFilter("tools::DOM.getBoxModel",(Z)=>{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:Z.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),$.addMessageFilter("tools::DOM.getNodeForLocation",async(Z)=>{try{let Y=(await $.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${Z.params?.x},${Z.params?.y})`})).result?.objectId;if(!Y)return $.fireResultToTools(Z.id,{nodeId:0}),null;let G=await $.callTarget("DOM.requestNode",{objectId:Y});$.fireResultToTools(Z.id,{nodeId:G.nodeId,backendNodeId:G.nodeId})}catch(J){$.fireErrorToTools(Z.id,{message:J?.message??String(J)})}return null}),$.addMessageFilter("tools::DOM.resolveNode",(Z)=>{if(Z.params&&Z.params.objectGroup===void 0)delete Z.params.objectGroup;return Promise.resolve(Z)})}function H1($){$.addMessageFilter("tools::DOMDebugger.getEventListeners",async(Q)=>{try{let Z=await $.callTarget("DOM.requestNode",{objectId:Q.params?.objectId}),Y=((await $.callTarget("DOM.getEventListenersForNode",{nodeId:Z.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((G)=>({type:G.type,useCapture:!!G.useCapture,passive:!!G.passive,once:!!G.once,location:G.location,handler:G.handler}));$.fireResultToTools(Q.id,{listeners:Y})}catch(Z){$.fireErrorToTools(Q.id,{message:Z?.message??String(Z)})}return null}),$.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(Q)=>h($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(Q)=>h($,Q,{})),$.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(Q)=>h($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(Q)=>h($,Q,{}))}function M1($,Q){$.addMessageFilter("tools::Page.setOverlayMessage",(G)=>{return G.method="Debugger.setOverlayMessage",Promise.resolve(G)}),$.addMessageFilter("tools::Page.configureOverlay",(G)=>{return G.method="Debugger.setOverlayMessage",Promise.resolve(G)}),$.addMessageFilter("tools::Page.getNavigationHistory",async(G)=>{try{let X=await $.callTarget("Runtime.evaluate",{expression:"window.location.href"}),z=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(G.id,{currentIndex:0,entries:[{id:0,url:X.result?.value??"",userTypedURL:X.result?.value??"",title:z.result?.value??"",transitionType:"link"}]})}catch(X){$.fireErrorToTools(G.id,{message:X?.message??String(X)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(G)=>{return s0(G.params?.frame),Promise.resolve(G)}),$.addMessageFilter("target::Page.getResourceTree",(G)=>{return z9(G.result?.frameTree),Promise.resolve(G)}),$.addMessageFilter("tools::Page.getFrameTree",async(G)=>{if(typeof G.id!=="number")return null;try{let X=await $.callTarget("Page.getResourceTree",{}),z=e0(X?.frameTree);z9(z),$.fireResultToTools(G.id,{frameTree:z})}catch(X){$.fireErrorToTools(G.id,{message:X?.message??String(X)})}return null}),$.addMessageFilter("tools::Page.createIsolatedWorld",(G)=>{if(typeof G.id!=="number")return Promise.resolve(null);return h($,G,{executionContextId:Q.pageExecCtx.id||1})});let Z=1;$.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(G)=>h($,G,{identifier:`pptr-${Z++}`})),$.addMessageFilter("tools::WebMCP.enable",(G)=>h($,G,{})),$.addMessageFilter("tools::WebMCP.disable",(G)=>h($,G,{})),$.addMessageFilter("tools::Page.captureScreenshot",(G)=>{return $.fireErrorToTools(G.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),$.addMessageFilter("tools::Page.startScreencast",(G)=>h($,G,{})),$.addMessageFilter("tools::Page.stopScreencast",(G)=>h($,G,{})),$.addMessageFilter("tools::Page.screencastFrameAck",(G)=>h($,G,{})),$.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(G)=>h($,G,{}));let J="",Y="0.1";$.addMessageFilter("target::Page.frameNavigated",(G)=>{let X=G.params?.frame;if(X)Y=X.id??Y,J=X.loaderId??J,$.fireEventToTools("Page.frameStartedLoading",{frameId:Y}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"init",timestamp:0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"commit",timestamp:0});return Promise.resolve(G)}),$.addMessageFilter("target::Page.domContentEventFired",(G)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"DOMContentLoaded",timestamp:G.params?.timestamp??0}),Promise.resolve(G)}),$.addMessageFilter("target::Page.loadEventFired",(G)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"load",timestamp:G.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkAlmostIdle",timestamp:G.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkIdle",timestamp:G.params?.timestamp??0}),$.fireEventToTools("Page.frameStoppedLoading",{frameId:Y}),Promise.resolve(G)})}function s0($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function z9($){if(!$)return;if(s0($.frame),Array.isArray($.childFrames))$.childFrames.forEach(z9)}function e0($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(e0);return Q}function B1($){$.addMessageFilter("tools::Overlay.enable",(Q)=>h($,Q,{})),$.addMessageFilter("tools::Overlay.disable",(Q)=>h($,Q,{})),$.addMessageFilter("tools::Overlay.highlightNode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.highlightNode",Q.params={highlightConfig:Z.highlightConfig,nodeId:Z.nodeId,objectId:Z.objectId},Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightFrame",(Q)=>{return Q.method="DOM.highlightFrame",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightQuad",(Q)=>{return Q.method="DOM.highlightQuad",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightRect",(Q)=>{return Q.method="DOM.highlightRect",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.hideHighlight",(Q)=>{return Q.method="DOM.hideHighlight",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setInspectMode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.setInspectModeEnabled",Q.params={enabled:typeof Z.mode==="string"&&Z.mode!=="none",highlightConfig:Z.highlightConfig},Promise.resolve(Q)})}function N1($){$.addMessageFilter("tools::Emulation.canEmulate",(Q)=>h($,Q,{result:!0})),$.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(Q)=>{return Q.method="Page.setTouchEmulationEnabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(Q)=>{return Q.method="Page.setScriptExecutionDisabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setEmulatedMedia",(Q)=>{return Q.method="Page.setEmulatedMedia",Promise.resolve(Q)}),$.addMessageFilter("tools::Rendering.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(Q)=>h($,Q,{})),$.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(Q)=>h($,Q,{})),$.addMessageFilter("tools::Emulation.setUserAgentOverride",(Q)=>{let Z=Q.params?.userAgent??"";return Q.method="Page.overrideUserAgent",Q.params={value:Z},Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(Q)=>h($,Q,{})),$.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(Q)=>h($,Q,{}))}function G9($){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 _1($){if(!$)return $;return{...U1,...$,hasPostData:$.postData!=null}}function A1($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...j1,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function T1($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function D1($){let Q=typeof $.size==="number"?$.size:($.name?.length??0)+($.value?.length??0);return{name:$.name,value:$.value,domain:$.domain,path:$.path,expires:$.expires??-1,size:Q,httpOnly:!!$.httpOnly,secure:!!$.secure,session:!!$.session,...$.sameSite?{sameSite:$.sameSite}:{}}}function E1($,Q){let Z=new Map,J=1e4,Y=1024,G=4194304,X=Promise.resolve(),z=(V)=>{let W=X.then(V,V);return X=W.catch(()=>{}),W};for(let[V,W]of Object.entries(F1))$.addMessageFilter(`tools::${V}`,(M)=>{return M.method=W,Promise.resolve(M)});$.addMessageFilter("tools::Network.setCacheDisabled",(V)=>{if(V.params&&"cacheDisabled"in V.params)V.params={disabled:!!V.params.cacheDisabled};return Promise.resolve(V)});let K=async(V)=>{try{let W=await $.callTarget("Page.getCookies",{}),M=Array.isArray(W?.cookies)?W.cookies.map(D1):[];$.fireResultToTools(V.id,{cookies:M})}catch(W){$.fireErrorToTools(V.id,{message:W?.message??String(W)})}return null};$.addMessageFilter("tools::Network.getCookies",K),$.addMessageFilter("tools::Network.getAllCookies",K),$.addMessageFilter("tools::Network.setCookie",(V)=>{let W=V.params??{};return V.method="Page.setCookie",V.params={cookie:{name:W.name,value:W.value,domain:W.domain??"",path:W.path??"/",expires:W.expires??-1,session:!1,httpOnly:!!W.httpOnly,secure:!!W.secure,sameSite:W.sameSite??"None"}},Promise.resolve(V)}),$.addMessageFilter("tools::Network.setCookies",async(V)=>{let W=Array.isArray(V.params?.cookies)?V.params.cookies:[];try{await Promise.all(W.map((M)=>$.callTarget("Page.setCookie",{cookie:M}))),$.fireResultToTools(V.id,{})}catch(M){$.fireErrorToTools(V.id,{message:M?.message??String(M)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(V)=>{let W=V.params??{},M=W.url??`https://${(W.domain??"").replace(/^\./,"")}${W.path??"/"}`;return V.method="Page.deleteCookie",V.params={cookieName:W.name,url:M},Promise.resolve(V)}),$.addMessageFilter("tools::Network.deleteCookie",(V)=>{return V.method="Page.deleteCookie",Promise.resolve(V)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(V)=>{try{let W=await $.callTarget("Page.getCookies",{}),M=Array.isArray(W?.cookies)?W.cookies:[];await Promise.all(M.map((B)=>$.callTarget("Page.deleteCookie",{cookieName:B.name,url:`${B.secure?"https":"http"}://${(B.domain??"").replace(/^\./,"")}${B.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(V.id,{})}catch(W){$.fireErrorToTools(V.id,{message:W?.message??String(W)})}return null}),$.addMessageFilter("tools::Network.canEmulateNetworkConditions",(V)=>h($,V,{result:!1})),$.addMessageFilter("tools::Network.setExtraHTTPHeaders",(V)=>h($,V,{})),$.addMessageFilter("tools::Network.setBlockedURLs",(V)=>h($,V,{})),$.addMessageFilter("tools::Network.emulateNetworkConditions",(V)=>h($,V,{})),$.addMessageFilter("tools::Network.setMonitoringXHREnabled",(V)=>h($,V,{})),$.addMessageFilter("tools::Network.getResponseBody",async(V)=>{let W=V.params?.requestId,M=typeof W==="string"?Z.get(W):void 0;if(!M)return $.fireErrorToTools(V.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(M.method&&M.method.toUpperCase()!=="GET")return $.fireErrorToTools(V.id,{message:`Network.getResponseBody: cannot recover ${M.method} response body (bridge re-fetch is GET-only)`}),null;if(M.bytes===0)return $.fireResultToTools(V.id,{body:"",base64Encoded:!1}),null;return z(async()=>{try{let B={};for(let[P,N]of Object.entries(M.headers??{})){let H=P.toLowerCase();if(H==="if-none-match"||H==="if-modified-since"||H==="host"||H==="connection")continue;B[P]=String(N)}let L=new AbortController,A=setTimeout(()=>L.abort(),1e4),D;try{D=await fetch(M.url,{headers:B,redirect:"follow",signal:L.signal})}finally{clearTimeout(A)}let q=Number(D.headers.get("content-length")??"");if(Number.isFinite(q)&&q>4194304){$.fireErrorToTools(V.id,{message:`Network.getResponseBody: response too large (${q} bytes > ${"4194304"}) — skipped re-fetch`});try{await D.arrayBuffer()}catch{}return}let j=Buffer.from(await D.arrayBuffer());if(j.byteLength>4194304){$.fireErrorToTools(V.id,{message:`Network.getResponseBody: response too large (${j.byteLength} bytes > 4194304)`});return}let T=((D.headers.get("content-type")??"").split(";")[0]??"").trim(),_=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(T),E=_?j.toString("utf8"):j.toString("base64");$.fireResultToTools(V.id,{body:E,base64Encoded:!_})}catch(B){$.fireErrorToTools(V.id,{message:`Network.getResponseBody re-fetch failed: ${B?.message??String(B)}`})}}),null});for(let[V,W]of Object.entries(R1))$.addMessageFilter(`target::${V}`,(M)=>{return T1(M.params,W),Promise.resolve(M)});$.addMessageFilter("target::Network.requestWillBeSent",(V)=>{let W=V.params;if(W){if(Object.assign(W,{...C1,...W}),W.request=_1(W.request),W.type=G9(W.type),typeof W.requestId==="string"&&typeof W.request?.url==="string"){if(Z.size>=1024){let M=Z.keys().next().value;if(M!==void 0)Z.delete(M)}Z.set(W.requestId,{url:W.request.url,method:W.request.method,headers:W.request.headers,frameId:W.frameId,bytes:0})}}return Promise.resolve(V)}),$.addMessageFilter("target::Network.responseReceived",(V)=>{let W=V.params;if(W)Object.assign(W,{...O1,...W}),W.response=A1(W.response),W.type=G9(W.type);return Promise.resolve(V)}),$.addMessageFilter("target::Network.loadingFinished",(V)=>{let W=V.params;if(W){let M=W.metrics?.responseBodyBytesReceived;if(typeof M==="number"&&W.encodedDataLength==null)W.encodedDataLength=M;if(Object.assign(W,{...L1,...W}),typeof W.requestId==="string"&&typeof M==="number"){let B=Z.get(W.requestId);if(B&&M>B.bytes)B.bytes=M}}return Promise.resolve(V)}),$.addMessageFilter("target::Network.dataReceived",(V)=>{let W=V.params;if(W&&typeof W.requestId==="string"){let M=Z.get(W.requestId);if(M){let B=Number(W.dataLength)||0;M.bytes+=B}}return Promise.resolve(V)}),$.addMessageFilter("target::Network.loadingFailed",(V)=>{let W=V.params;if(W){if(W.type=G9(W.type),!("canceled"in W))W.canceled=!1}return Promise.resolve(V)}),$.addMessageFilter("target::Network.requestServedFromMemoryCache",(V)=>{if(V.method="Network.requestServedFromCache",V.params)V.params={requestId:V.params.requestId};return Promise.resolve(V)}),$.addMessageFilter("tools::Network.loadNetworkResource",async(V)=>{let W=V.params??{};if(!Q)return $.fireResultToTools(V.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let M=await $.callTarget("Network.loadResource",{frameId:W.frameId,url:W.url}),B=!!M?.content&&(M?.status??0)>=200&&(M?.status??0)<300,L;if(B)L=`network-resource:${W.frameId??""}:${W.url}`,Q.set(L,String(M.content));$.fireResultToTools(V.id,{resource:{success:B,stream:L,httpStatusCode:M?.status,headers:M?.headers,mimeType:M?.mimeType}})}catch(M){$.fireResultToTools(V.id,{resource:{success:!1,netError:2,netErrorName:M?.message??"ERR_FAILED"}})}return null})}function P1($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>h($,Z,{}))}function q1($){$.addMessageFilter("target::Inspector.inspect",async(Q)=>{let Z=Q.params?.object?.objectId;if(typeof Z!=="string")return null;try{let Y=(await $.callTarget("DOM.requestNode",{objectId:Z}))?.nodeId;if(typeof Y==="number")$.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:Y}),$.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:Y})}catch{}return null})}function x1($){if(!$)return $;let Q=$.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:Q,isConstructed:Q,length:$.length??0,endLine:$.endLine??0,endColumn:$.endColumn??0,hasSourceURL:!!$.sourceURL}}function H9($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:f6($.style),selectorList:k1($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:S1[Z.type]}));return Q}function b1($){let Q={lastNodeId:0},Z=new Map;async function J(Y,G){let X=Z.get(Y);if(!X)try{if(X=(await $.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,X)Z.set(Y,X)}catch{}let z=X?.rules??[];for(let K=0;K<z.length;K++)if(I1(z[K]?.style?.range,G))return{styleSheetId:Y,ordinal:K};return{styleSheetId:Y,ordinal:0}}$.addMessageFilter("tools::CSS.enable",(Y)=>{return $.fireResultToTools(Y.id,{}),Promise.resolve(null)}),$.addMessageFilter("target::CSS.styleSheetAdded",(Y)=>{if(Y.params?.header)Y.params.header=x1(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let G=Y.result;if(G)Y.result={inlineStyle:f6(G.inlineStyle),attributesStyle:f6(G.attributesStyle)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(Y)=>{if(typeof Y.params?.nodeId==="number")Q.lastNodeId=Y.params.nodeId;try{let[G,X]=await Promise.all([$.callTarget("CSS.getInlineStylesForNode",{nodeId:Y.params.nodeId}),$.callTarget("CSS.getMatchedStylesForNode",{nodeId:Y.params.nodeId,includePseudo:!0,includeInherited:!0})]);$.fireResultToTools(Y.id,{inlineStyle:f6(G?.inlineStyle),attributesStyle:f6(G?.attributesStyle),matchedCSSRules:L9(X?.matchedCSSRules),pseudoElements:y1(X?.pseudoElements),inherited:f1(X?.inherited),cssKeyframesRules:[]})}catch(G){$.fireErrorToTools(Y.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("tools::CSS.setStyleTexts",async(Y)=>{let G=Y.params?.edits??[],X=[];for(let z of G)try{let K=await J(z.styleSheetId,z.range),V=await $.callTarget("CSS.setStyleText",{styleId:K,text:z.text});X.push(f6(V?.style)),Z.delete(z.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:z.styleSheetId})}catch{X.push(null)}return $.fireResultToTools(Y.id,{styles:X}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:G,range:X,selector:z}=Y.params??{};try{let K=await J(G,X);Y.params={ruleId:K,selector:z}}catch(K){return $.fireErrorToTools(Y.id,{message:K?.message??String(K)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:H9(Y.result.rule)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.addRule",async(Y)=>{let G=Y.params??{},X=String(G.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let z=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:G.styleSheetId,selector:X});$.fireResultToTools(Y.id,{rule:H9(z?.rule)})}catch(z){$.fireErrorToTools(Y.id,{message:z?.message??String(z)})}return null})}function h1($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>h($,Q,v1)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>h($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>h($,Q,{}))}function g1($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function c1($){let Q=async(Z)=>{let J=Z.params??{},Y=g1(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let G=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let X of G){let z={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:X},K=`(${u1}, __sd_simulate(${JSON.stringify(z)}))`;await $.callTarget("Runtime.evaluate",{expression:K})}$.fireResultToTools(Z.id,{})}catch(X){$.fireErrorToTools(Z.id,{message:X?.message??String(X)})}return null};$.addMessageFilter("tools::Input.dispatchMouseEvent",Q),$.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",Q),$.addMessageFilter("tools::Input.setIgnoreInputEvents",(Z)=>{return $.fireResultToTools(Z.id,{}),Promise.resolve(null)})}function l1($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||m1,G=Number(Z.params?.offset)||0,X=Q.get(J);if(X===void 0)return $.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let z=X.slice(G,G+Y),K=G+Y>=X.length;return $.fireResultToTools(Z.id,{data:z,eof:K,base64Encoded:!1}),Promise.resolve(null)}),$.addMessageFilter("tools::IO.close",(Z)=>{return Q.delete(String(Z.params?.handle??"")),$.fireResultToTools(Z.id,{}),Promise.resolve(null)}),Q}function p1($){$.addMessageFilter("tools::Accessibility.enable",(Q)=>h($,Q,{})),$.addMessageFilter("tools::Accessibility.disable",(Q)=>h($,Q,{})),$.addMessageFilter("tools::Accessibility.getPartialAXTree",async(Q)=>{let Z=Q.params??{},J=Z.nodeId??Z.backendNodeId;if(typeof J!=="number")return $.fireResultToTools(Q.id,{nodes:[]}),null;try{let G=(await $.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:J}))?.properties??{},X={nodeId:String(J),ignored:Boolean(G.ignored),role:G.role?{type:"role",value:String(G.role)}:void 0,name:G.label?{type:"computedString",value:String(G.label)}:void 0,backendDOMNodeId:J,childIds:[],properties:[]};$.fireResultToTools(Q.id,{nodes:[X]})}catch(Y){$.fireResultToTools(Q.id,{nodes:[]})}return null})}function i1($){for(let[Z,J]of Object.entries(n1))$.addMessageFilter(`tools::${Z}`,(Y)=>h($,Y,J));for(let Z of d1)for(let J of["enable","disable"])$.addMessageFilter(`tools::${Z}.${J}`,(Y)=>h($,Y,{}));let Q=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[Z,J]of Q)$.addMessageFilter(`tools::${Z}`,(Y)=>h($,Y,J))}function M9($){let Q=Y1();i1($);let Z=l1($);G1($,Q),X1($,Q),W1($,Q),z1($),H1($),M1($,Q),B1($),N1($),E1($,Z),P1($),q1($),b1($),h1($),c1($),p1($)}function Q4($){let Q=`${$.reqHost}/devtools/page/${$.id}`;return{description:$.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${Q}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${Q}`,id:$.id,title:$.title,type:$.type,url:$.url,webSocketDebuggerUrl:`ws://${Q}`,faviconUrl:""}}function $7($){return $.replace(/[&<>"']/g,(Q)=>o1[Q])}function Z4($){return $4.createServer((Q,Z)=>{let J=new URL(Q.url??"/","http://placeholder"),Y=Q.headers.host??"";if(J.pathname==="/json/version"){let G=typeof $.version==="function"?$.version(Y):$.version;return X9(Z,G)}if(J.pathname==="/json"||J.pathname==="/json/list")return X9(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return X9(Z,{});if(J.pathname==="/")return a1(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function X9($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function a1($,Q,Z){let J=Q.listTargets(Z),Y=J.map((K)=>`<li><strong>${$7(K.title||K.url||K.id)}</strong><br><small>${$7(K.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${$7(K.devtoolsFrontendUrl)}</code></li>`).join(""),G=`inspect-webkit${Q.brand?` (${Q.brand})`:""}`,X=Q.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${$7(Z)}</code>.</p>`,z=`<!doctype html><meta charset=utf-8><title>${$7(G)}</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>${$7(G)} — ${J.length} target${J.length===1?"":"s"}</h1>`+X+`<ul>${Y}</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(z)}function J4($,Q,Z){return new Promise((J,Y)=>{$.once("error",(X)=>{if(X.port==null)X.port=Z;if(X.host==null)X.host=Q;Y(X)});let G=Q==="localhost"||Q==="::1"||Q==="127.0.0.1"?"::":Q;$.listen({port:Z,host:G,ipv6Only:!1},()=>{$.off("error",Y),J()})})}function Y4($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(K,V)=>Q?`\x1B[${K}m${V}\x1B[0m`:V,J=(K)=>Z("1",K),Y=(K)=>Z("2",K),G=(K)=>Z("36",K),X=(K)=>Z("32",K),z=`http://${$.host}:${$.port}`;console.error(`${X("●")} ${J(`${$.brand} CDP`)} ${G(z)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function r1($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,G=!1,X=!1,z=new Map,K=null;function V(_){if($.readyState!==1)return;let E=JSON.stringify(_);if(Z)console.error(`[browser] tools<< ${E.slice(0,240)}`);$.send(E)}function W(_,E){let P={method:_,params:E};if(K)P.sessionId=K;V(P)}function M(_,E){return{targetId:_.targetId,type:_.type==="page"?"page":_.type||"other",title:_.title||"",url:_.url||"",attached:E,canAccessOpener:!1,browserContextId:"default"}}function B(_){for(let E of J.values())if(E.targetId===_)return!0;return!1}function L(_,E){let P=Q.listEntries().find((C)=>C.targetId===_);if(!P)return null;let N=crypto.randomUUID(),H=(C)=>{let I;try{I=JSON.parse(C)}catch{return}I.sessionId=N,V(I)},R=Q.createPageSession(_,H);if(!R)return null;return J.set(N,{handle:R,targetId:_}),W("Target.attachedToTarget",{sessionId:N,targetInfo:M(P,!0),waitingForDebugger:E}),{sessionId:N,entry:P}}function A(_){let E=J.get(_);if(!E)return!1;try{E.handle.close()}catch{}return J.delete(_),W("Target.detachedFromTarget",{sessionId:_,targetId:E.targetId}),!0}function D(){let _=Q.listEntries(),E=new Set;for(let P of _){E.add(P.targetId);let N=z.get(P.targetId);if(!N){if(z.set(P.targetId,P),Y)W("Target.targetCreated",{targetInfo:M(P,B(P.targetId))});if(G&&!B(P.targetId))L(P.targetId,X)}else if(N.title!==P.title||N.url!==P.url){if(z.set(P.targetId,P),Y)W("Target.targetInfoChanged",{targetInfo:M(P,B(P.targetId))})}}for(let P of[...z.keys()]){if(E.has(P))continue;z.delete(P);for(let[N,H]of J)if(H.targetId===P)A(N);if(Y)W("Target.targetDestroyed",{targetId:P})}}let q=setInterval(D,Q.refreshMs??1000);function j(_,E){if(_)E.sessionId=_;V(E)}function T(_,E){let{id:P,method:N}=_,H=_.params??{};switch(N){case"Browser.getVersion":return j(E,{id:P,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(!K)K=crypto.randomUUID();return j(E,{id:P,result:{sessionId:K}})}case"Target.setDiscoverTargets":{if(Y=!!H.discover,Y)for(let R of Q.listEntries())z.set(R.targetId,R),W("Target.targetCreated",{targetInfo:M(R,B(R.targetId))});if(typeof P==="number")j(E,{id:P,result:{}});return}case"Target.getTargets":{let R=Q.listEntries().map((C)=>M(C,B(C.targetId)));return j(E,{id:P,result:{targetInfos:R}})}case"Target.setAutoAttach":{if(G=!!H.autoAttach,X=!!H.waitForDebuggerOnStart,G){for(let R of Q.listEntries())if(!B(R.targetId))L(R.targetId,X)}if(typeof P==="number")j(E,{id:P,result:{}});return}case"Target.attachToTarget":{for(let[C,I]of J)if(I.targetId===H.targetId){if(typeof P==="number")j(E,{id:P,result:{sessionId:C}});return}let R=L(H.targetId,!1);if(!R){if(typeof P==="number")j(E,{id:P,error:{code:-32000,message:"No target with given id found"}});return}if(typeof P==="number")j(E,{id:P,result:{sessionId:R.sessionId}});return}case"Target.detachFromTarget":{if(A(H.sessionId),typeof P==="number")j(E,{id:P,result:{}});return}case"Target.sendMessageToTarget":{let R=J.get(H.sessionId);if(R)R.handle.onMessageFromTools(H.message);if(typeof P==="number")j(E,{id:P,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof P==="number")j(E,{id:P,result:{}});return;case"Target.getBrowserContexts":{if(typeof P==="number")j(E,{id:P,result:{browserContextIds:["default"]}});return}}if(typeof P==="number")j(E,{id:P,error:{code:-32601,message:`Browser-level method '${N??"?"}' not implemented`}})}$.on("message",(_,E)=>{let P=E?new TextDecoder().decode(_):_.toString();if(Z)console.error(`[browser] tools>> ${P.slice(0,240)}`);let N;try{N=JSON.parse(P)}catch{return}if(typeof N.sessionId==="string"){if(N.sessionId===K){let C={...N};return delete C.sessionId,T(C,N.sessionId)}let H=J.get(N.sessionId);if(!H){if(typeof N.id==="number")V({id:N.id,sessionId:N.sessionId,error:{code:-32000,message:`Session ${N.sessionId} not found`}});return}let R={...N};delete R.sessionId,H.handle.onMessageFromTools(JSON.stringify(R));return}T(N,void 0)}),$.on("close",()=>{clearInterval(q);for(let[,_]of J)try{_.handle.close()}catch{}J.clear()})}async function s1($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await e1();if(J.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 Y=new Map,G=new WeakMap,X=new Map;for(let N of J)X.set(N,[]),G.set(N,new Set),N.wi.subscribe((H)=>{let{__selector:R,__argument:C}=H;if(!R||!C)return;if(R==="_rpc_reportConnectedApplicationList:"){let I=C.WIRApplicationDictionaryKey??{},x=Object.entries(I).map(([F,k])=>({appId:F,bundleId:k.WIRApplicationBundleIdentifierKey,name:k.WIRApplicationNameKey??k.WIRApplicationBundleIdentifierKey??F,isProxy:Boolean(k.WIRIsApplicationProxyKey)}));X.set(N,x);let U=G.get(N);for(let F of x){if(F.isProxy||U.has(F.appId))continue;U.add(F.appId),N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:F.appId})}}else if(R==="_rpc_applicationConnected:"){let I=C,x=X.get(N)??[];if(!x.find((U)=>U.appId===I.WIRApplicationIdentifierKey))x.push({appId:I.WIRApplicationIdentifierKey,bundleId:I.WIRApplicationBundleIdentifierKey,name:I.WIRApplicationNameKey??I.WIRApplicationBundleIdentifierKey,isProxy:Boolean(I.WIRIsApplicationProxyKey)}),X.set(N,x);if(!I.WIRIsApplicationProxyKey){let U=G.get(N);if(!U.has(I.WIRApplicationIdentifierKey))U.add(I.WIRApplicationIdentifierKey),N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:I.WIRApplicationIdentifierKey})}}else if(R==="_rpc_applicationDisconnected:"){let I=X.get(N)??[];X.set(N,I.filter((x)=>x.appId!==C.WIRApplicationIdentifierKey)),Y.delete(`${N.id}:${C.WIRApplicationIdentifierKey}`)}else if(R==="_rpc_applicationSentListing:"){let I=C.WIRApplicationIdentifierKey,x=C.WIRListingKey??{},U=new Map;for(let[F,k]of Object.entries(x))U.set(F,{pageId:Number(k.WIRPageIdentifierKey??0),title:k.WIRTitleKey??"",url:k.WIRURLKey??"",type:k.WIRTypeKey??"",connectionId:typeof k.WIRConnectionIdentifierKey==="string"?k.WIRConnectionIdentifierKey:null});Y.set(`${N.id}:${I}`,U)}}),N.wi.send("_rpc_reportIdentifier:",{}),N.wi.send("_rpc_getConnectedApplications:",{});let z=setInterval(()=>{for(let N of J){let H=X.get(N)??[];for(let R of H){if(R.isProxy)continue;N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:R.appId})}}},t1),K=new Map;function V(){let N=[];for(let H of J){let R=X.get(H)??[];for(let C of R){if(C.isProxy)continue;let I=Y.get(`${H.id}:${C.appId}`);if(!I)continue;for(let x of I.values()){let U=!!x.connectionId&&x.connectionId!==H.wi.connection;N.push({targetId:`${H.id}:${C.appId}:${x.pageId}`,source:H,appId:C.appId,appName:C.name,bundleId:C.bundleId,pageId:x.pageId,title:x.title,url:x.url,type:x.type,inUseByOtherInspector:U})}}}return N}let W=crypto.randomUUID(),M=Z4({brand:"",version:(N)=>({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://${N}/devtools/browser/${W}`}),listTargets:(N)=>V().map((H)=>Q4({reqHost:N,id:H.targetId,description:`${H.source.label}${H.bundleId?` (${H.bundleId})`:""}`,title:H.title||H.appName,url:/^https?:/i.test(H.url)?H.url:"about:blank",type:u0(H.type)}))}),B=new t0.default({noServer:!0}),L=`/devtools/browser/${W}`;M.on("upgrade",(N,H,R)=>{let C=new URL(N.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${C.pathname}`),C.pathname===L){B.handleUpgrade(N,H,R,(x)=>{r1(x,{listEntries:()=>V().map((U)=>({targetId:U.targetId,type:u0(U.type),title:U.title||U.appName,url:U.url})),createPageSession:(U,F)=>{let k=V().find((S)=>S.targetId===U);if(!k)return null;return A(k,F)}})});return}if(!C.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${C.pathname}`),H.destroy();return}let I=decodeURIComponent(C.pathname.slice(15));B.handleUpgrade(N,H,R,(x)=>{P(x,I)})});function A(N,H){let R=crypto.randomUUID(),I=new s7({readyState:1,send:(F)=>H(F)},N.source.wi,N.appId,N.pageId,R);M9(I),K.set(R,I);let x=!!process.env.INSPECT_WEBKIT_DEBUG,U=N.source.wi.subscribe((F)=>{if(F.__selector!=="_rpc_applicationSentData:")return;let k=F.__argument;if(!k)return;if(k.WIRDestinationKey&&k.WIRDestinationKey!==R)return;if(k.WIRApplicationIdentifierKey!==N.appId)return;if(k.WIRPageIdentifierKey!==void 0&&Number(k.WIRPageIdentifierKey)!==N.pageId)return;let S=k.WIRMessageDataKey??k.WIRSocketDataKey;if(!S)return;let u=typeof S==="string"?S:new TextDecoder().decode(S);if(x)console.error(`[cdp] target>> ${u.slice(0,240)}`);I.onMessageFromTarget(u)});return N.source.wi.forwardSocketSetup(N.appId,N.pageId,R),console.error(`# devtools attached: ${N.source.label} :: ${N.appName} :: ${N.title||N.url}`),{onMessageFromTools(F){if(x)console.error(`[cdp] tools>> ${F.slice(0,300)}`);I.onMessageFromTools(F)},close(){U();try{I.wi.forwardDidClose(I.appId,I.pageId,I.senderKey)}catch{}K.delete(I.senderKey)}}}let D=new Map,q=8000;function j(N){let H=D.get(N);if(H)return H;let R=V().find((S)=>S.targetId===N);if(!R)return null;let C=crypto.randomUUID(),x=new s7({readyState:1,send:()=>{}},R.source.wi,R.appId,R.pageId,C);M9(x),K.set(C,x);let U=R.source.wi.subscribe((S)=>{if(S.__selector!=="_rpc_applicationSentData:")return;let u=S.__argument;if(!u)return;if(u.WIRDestinationKey&&u.WIRDestinationKey!==C)return;if(u.WIRApplicationIdentifierKey!==R.appId)return;if(u.WIRPageIdentifierKey!==void 0&&Number(u.WIRPageIdentifierKey)!==R.pageId)return;let g=u.WIRMessageDataKey??u.WIRSocketDataKey;if(!g)return;let f=typeof g==="string"?g:new TextDecoder().decode(g);x.onMessageFromTarget(f)});R.source.wi.forwardSocketSetup(R.appId,R.pageId,C);let F=Promise.race([x.callTarget("DOM.getDocument",{depth:0}).then((S)=>S?.root?.nodeId),new Promise((S,u)=>setTimeout(()=>u(Error("DOM.getDocument timeout")),5000))]),k={cdp:x,rootNodeIdPromise:F,idleTimer:null,close(){if(k.idleTimer)clearTimeout(k.idleTimer);U();try{x.wi.forwardDidClose(x.appId,x.pageId,x.senderKey)}catch{}K.delete(C),D.delete(N)}};return D.set(N,k),F.catch(()=>k.close()),k}function T(N){if(N.idleTimer)clearTimeout(N.idleTimer);N.idleTimer=setTimeout(()=>N.close(),q)}function _(N){if(N){D.get(N)?.close();return}for(let H of D.values())H.close()}async function E(N,H){let R=j(N);if(!R)return;T(R);try{if(H){let C=await R.rootNodeIdPromise;if(!C)return;await R.cdp.callTarget("DOM.highlightNode",{nodeId:C,highlightConfig:{showInfo:!1,contentColor:{r:111,g:168,b:220,a:0.55},paddingColor:{r:147,g:196,b:125,a:0},borderColor:{r:255,g:229,b:153,a:0},marginColor:{r:246,g:178,b:107,a:0}}})}else await R.cdp.callTarget("DOM.hideHighlight",{})}catch{R.close()}}function P(N,H){let R=V().find((U)=>U.targetId===H);if(!R){console.error(`# ws closed: unknown target ${H} (known: ${V().map((U)=>U.targetId).join(", ")||"none"})`),N.close(1011,`unknown target ${H}`);return}let C=A(R,(U)=>{if(N.readyState===1)N.send(U)}),I=!0;N.on("pong",()=>{I=!0});let x=setInterval(()=>{if(!I){try{N.terminate()}catch{}return}I=!1;try{N.ping()}catch{}},15000);N.on("message",(U,F)=>{let k=F?new TextDecoder().decode(U):U.toString();C.onMessageFromTools(k)}),N.on("close",()=>{clearInterval(x),C.close()})}return await J4(M,Z,Q),Y4({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(z);for(let N of D.values())N.close();B.close(),M.close();for(let N of J)try{N.wi.close(),N.lockdown?.close()}catch{}},getTargets(){return V()},highlightTarget(N,H){return E(N,H)},releaseHighlight(N){_(N)}}}async function e1(){let[$,Q]=await Promise.all([$J(),ZJ()]);return[...$,...Q]}async function $J(){let $=[];try{$=await d0()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(QJ))).filter((Z)=>Z!==null)}async function QJ($){try{let Q=await n0($.Properties.SerialNumber),Z=await Z8.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:G}=await Z.connectService(J),X=new j7(Y,G);return await X.reportIdentifier(),{kind:"device",id:`device:${$.Properties.SerialNumber}`,label:`device:${$.Properties.SerialNumber.slice(0,8)}`,wi:X,lockdown:Z}}catch(Q){return console.error(`warn: device ${$.Properties.SerialNumber}: ${Q.message}`),null}}async function ZJ(){let $=[];try{$=await o0()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(JJ))).filter((Z)=>Z!==null)}async function JJ($){try{let{socket:Q,stream:Z}=await a0($.socketPath),J=new j7(Q,Z);return await J.reportIdentifier(),{kind:"simulator",id:`sim:${$.pid}`,label:`sim:${$.pid}`,wi:J}}catch(Q){return console.error(`warn: simulator ${$.socketPath}: ${Q.message}`),null}}function u0($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class G4{url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new h0($),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((Q,Z)=>{this.ws.once("open",()=>Q()),this.ws.once("error",(J)=>Z(J))}),this.ws.on("message",(Q,Z)=>{let J=Z?new TextDecoder().decode(Q):Q.toString();for(let Y of this.handlers)Y(J)})}ready(){return this.openPromise}onFrame($){return this.handlers.add($),()=>this.handlers.delete($)}forwardSocketData($,Q,Z,J){if(this.ws.readyState!==h0.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function YJ($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=Z4({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(z)=>J.map((K)=>Q4({reqHost:z,id:encodeURIComponent(K.url),description:K.label??"bun",title:K.label??K.url,url:K.url,type:"node"}))}),G=new t0.default({noServer:!0});Y.on("upgrade",(z,K,V)=>{let W=new URL(z.url??"/","http://placeholder");if(!W.pathname.startsWith("/devtools/page/")){K.destroy();return}let M=decodeURIComponent(W.pathname.slice(15)),B=J.find((L)=>L.url===M);if(!B){K.destroy();return}G.handleUpgrade(z,K,V,(L)=>{X(L,B).catch((A)=>{console.error(`# bun attach failed: ${A.message}`);try{L.close(1011,A.message)}catch{}})})});async function X(z,K){let V=!!process.env.INSPECT_WEBKIT_DEBUG,W=new G4(K.url);await W.ready();let M=crypto.randomUUID(),B=new s7(z,W,"bun",0,M);M9(B);let L=W.onFrame((A)=>{if(V)console.error(`[bun] target>> ${A.slice(0,240)}`);B.onMessageFromTarget(A)});z.on("message",(A,D)=>{let q=D?new TextDecoder().decode(A):A.toString();if(V)console.error(`[bun] tools>> ${q.slice(0,300)}`);B.onMessageFromTools(q)}),z.on("close",()=>{L(),W.close()}),console.error(`# devtools attached: ${K.label??K.url}`)}return await J4(Y,Z,Q),Y4({brand:"bun",host:Z,port:Q}),{stop(){G.close(),Y.close()},getTargets(){return J.slice()}}}async function X4(){return d0()}async function GJ(){let[$,Q]=await Promise.all([XJ(),WJ()]);return[...$.flat(),...Q.flat()]}async function XJ(){let $=await X4();return Promise.all($.map(KJ))}async function WJ(){let $=await o0();return Promise.all($.map(VJ))}async function KJ($){let Q=null;try{return Q=await zJ($),await W4(Q.client,{source:"device",udid:$.Properties.SerialNumber,deviceID:$.DeviceID})}catch(Z){return console.error(`warn: ${$.Properties.SerialNumber}: ${Z.message}`),[]}finally{Q?.client.close(),Q?.lockdown.close()}}async function VJ($){let Q=null;try{let{socket:Z,stream:J}=await a0($.socketPath);return Q=new j7(Z,J),await Q.reportIdentifier(),await W4(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function zJ($){let Q=await n0($.Properties.SerialNumber),Z=await Z8.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:G}=await Z.connectService(J),X=new j7(Y,G);return await X.reportIdentifier(),{client:X,lockdown:Z}}async function W4($,Q){let Z=(await $.listApplications()).filter((G)=>!G.isProxy),J=await Promise.all(Z.map((G)=>$.getListing(G.appId))),Y=[];for(let G=0;G<Z.length;G++){let X=Z[G];for(let z of J[G])Y.push({...Q,appId:X.appId,appName:X.name??X.bundleId??X.appId,bundleId:X.bundleId,pageId:z.pageId,title:z.title,url:z.url,type:z.type})}return Y}var w2,S2,k0,k2,y2,b2,v2,P6=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?b2??=new WeakMap:v2??=new WeakMap,G=Y.get($);if(G)return G}Z=$!=null?w2(S2($)):{};let X=Q||!$||!$.__esModule?k0(Z,"default",{value:$,enumerable:!0}):Z;for(let z of k2($))if(!y2.call(X,z))k0(X,z,{get:f2.bind($,z),enumerable:!0});if(J)Y.set($,X);return X},F6=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),J6,q6,e7,h2,L7,U7,g0,c0,u2,B9,N9,g2,m0,c2,m2=`<?xml version="1.0" encoding="UTF-8"?>
|
|
15
15
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
16
16
|
<plist version="1.0">
|
|
17
|
-
`,
|
|
17
|
+
`,l2=`
|
|
18
18
|
</plist>
|
|
19
|
-
`,
|
|
19
|
+
`,o2=1,a2=8,r2="/var/run/usbmuxd",b0=62078,C6=(...$)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...$)},CG,OG,LG,UG,jG,_G,J1,t0,h0,F1,R1,C1,O1,L1,U1,j1,I1=($,Q)=>!!$&&!!Q&&$.startLine===Q.startLine&&$.endLine===Q.endLine&&$.startColumn===Q.startColumn&&$.endColumn===Q.endColumn,w1=($)=>$&&{name:$.name,value:$.value,text:$.text,implicit:$.implicit,parsedOk:$.parsedOk!==!1,important:!!$.priority,disabled:$.status==="disabled",range:$.range},f6=($)=>$&&{styleSheetId:$.styleId?.styleSheetId,cssText:$.cssText,range:$.range,shorthandEntries:$.shorthandEntries??[],cssProperties:Array.isArray($.cssProperties)?$.cssProperties.map(w1):[]},S1,k1=($)=>$&&{text:$.text,selectors:Array.isArray($.selectors)?$.selectors.map((Q)=>({text:Q.text,range:Q.range??$.range})):[]},L9=($)=>Array.isArray($)?$.map((Q)=>({matchingSelectors:Q.matchingSelectors,rule:H9(Q.rule)})):[],y1=($)=>Array.isArray($)?$.map((Q)=>({pseudoType:Q.pseudoId,matches:L9(Q.matches)})):[],f1=($)=>Array.isArray($)?$.map((Q)=>({inlineStyle:f6(Q.inlineStyle),matchedCSSRules:L9(Q.matchedCSSRules)})):[],v1,u1=`
|
|
20
20
|
function __sd_simulate(p){
|
|
21
21
|
var el = document.elementFromPoint(p.x, p.y);
|
|
22
22
|
if (!el) return false;
|
|
@@ -31,34 +31,34 @@ function __sd_simulate(p){
|
|
|
31
31
|
});
|
|
32
32
|
el.dispatchEvent(ev);
|
|
33
33
|
return true;
|
|
34
|
-
}`,RJ=65536,CJ,UJ,LJ,TJ=1500;var O9=Q$(()=>{XZ=Object.create,GZ=Object.getPrototypeOf,p8=Object.defineProperty,KZ=Object.getOwnPropertyNames,VZ=Object.prototype.hasOwnProperty;d=YZ(import.meta.url),V7=t((Q,$)=>{var Z=["nodebuffer","arraybuffer","fragments"],J=typeof Blob<"u";if(J)Z.push("blob");$.exports={BINARY_TYPES:Z,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:J,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),jQ=t((Q,$)=>{var{EMPTY_BUFFER:Z}=V7(),J=Buffer[Symbol.species];function Y(V,z){if(V.length===0)return Z;if(V.length===1)return V[0];let F=Buffer.allocUnsafe(z),H=0;for(let L=0;L<V.length;L++){let U=V[L];F.set(U,H),H+=U.length}if(H<z)return new J(F.buffer,F.byteOffset,H);return F}function X(V,z,F,H,L){for(let U=0;U<L;U++)F[H+U]=V[U]^z[U&3]}function G(V,z){for(let F=0;F<V.length;F++)V[F]^=z[F&3]}function N(V){if(V.length===V.buffer.byteLength)return V.buffer;return V.buffer.slice(V.byteOffset,V.byteOffset+V.length)}function K(V){if(K.readOnly=!0,Buffer.isBuffer(V))return V;let z;if(V instanceof ArrayBuffer)z=new J(V);else if(ArrayBuffer.isView(V))z=new J(V.buffer,V.byteOffset,V.byteLength);else z=Buffer.from(V),K.readOnly=!1;return z}if($.exports={concat:Y,mask:X,toArrayBuffer:N,toBuffer:K,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let V=(()=>{throw Error("Cannot require module bufferutil")})();$.exports.mask=function(z,F,H,L,U){if(U<48)X(z,F,H,L,U);else V.mask(z,F,H,L,U)},$.exports.unmask=function(z,F){if(z.length<32)G(z,F);else V.unmask(z,F)}}catch(V){}}),NZ=t((Q,$)=>{var Z=Symbol("kDone"),J=Symbol("kRun");class Y{constructor(X){this[Z]=()=>{this.pending--,this[J]()},this.concurrency=X||1/0,this.jobs=[],this.pending=0}add(X){this.jobs.push(X),this[J]()}[J](){if(this.pending===this.concurrency)return;if(this.jobs.length){let X=this.jobs.shift();this.pending++,X(this[Z])}}}$.exports=Y}),o7=t((Q,$)=>{var Z=d("zlib"),J=jQ(),Y=NZ(),{kStatusCode:X}=V7(),G=Buffer[Symbol.species],N=Buffer.from([0,0,255,255]),K=Symbol("permessage-deflate"),V=Symbol("total-length"),z=Symbol("callback"),F=Symbol("buffers"),H=Symbol("error"),L;class U{constructor(A){if(this._options=A||{},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,!L){let C=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;L=new Y(C)}}static get extensionName(){return"permessage-deflate"}offer(){let A={};if(this._options.serverNoContextTakeover)A.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)A.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)A.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)A.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)A.client_max_window_bits=!0;return A}accept(A){return A=this.normalizeParams(A),this.params=this._isServer?this.acceptAsServer(A):this.acceptAsClient(A),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let A=this._deflate[z];if(this._deflate.close(),this._deflate=null,A)A(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(A){let C=this._options,j=A.find((_)=>{if(C.serverNoContextTakeover===!1&&_.server_no_context_takeover||_.server_max_window_bits&&(C.serverMaxWindowBits===!1||typeof C.serverMaxWindowBits==="number"&&C.serverMaxWindowBits>_.server_max_window_bits)||typeof C.clientMaxWindowBits==="number"&&!_.client_max_window_bits)return!1;return!0});if(!j)throw Error("None of the extension offers can be accepted");if(C.serverNoContextTakeover)j.server_no_context_takeover=!0;if(C.clientNoContextTakeover)j.client_no_context_takeover=!0;if(typeof C.serverMaxWindowBits==="number")j.server_max_window_bits=C.serverMaxWindowBits;if(typeof C.clientMaxWindowBits==="number")j.client_max_window_bits=C.clientMaxWindowBits;else if(j.client_max_window_bits===!0||C.clientMaxWindowBits===!1)delete j.client_max_window_bits;return j}acceptAsClient(A){let C=A[0];if(this._options.clientNoContextTakeover===!1&&C.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!C.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")C.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&C.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return C}normalizeParams(A){return A.forEach((C)=>{Object.keys(C).forEach((j)=>{let _=C[j];if(_.length>1)throw Error(`Parameter "${j}" must have only a single value`);if(_=_[0],j==="client_max_window_bits"){if(_!==!0){let M=+_;if(!Number.isInteger(M)||M<8||M>15)throw TypeError(`Invalid value for parameter "${j}": ${_}`);_=M}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${j}": ${_}`)}else if(j==="server_max_window_bits"){let M=+_;if(!Number.isInteger(M)||M<8||M>15)throw TypeError(`Invalid value for parameter "${j}": ${_}`);_=M}else if(j==="client_no_context_takeover"||j==="server_no_context_takeover"){if(_!==!0)throw TypeError(`Invalid value for parameter "${j}": ${_}`)}else throw Error(`Unknown parameter "${j}"`);C[j]=_})}),A}decompress(A,C,j){L.add((_)=>{this._decompress(A,C,(M,W)=>{_(),j(M,W)})})}compress(A,C,j){L.add((_)=>{this._compress(A,C,(M,W)=>{_(),j(M,W)})})}_decompress(A,C,j){let _=this._isServer?"client":"server";if(!this._inflate){let M=`${_}_max_window_bits`,W=typeof this.params[M]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[M];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:W}),this._inflate[K]=this,this._inflate[V]=0,this._inflate[F]=[],this._inflate.on("error",P),this._inflate.on("data",q)}if(this._inflate[z]=j,this._inflate.write(A),C)this._inflate.write(N);this._inflate.flush(()=>{let M=this._inflate[H];if(M){this._inflate.close(),this._inflate=null,j(M);return}let W=J.concat(this._inflate[F],this._inflate[V]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[V]=0,this._inflate[F]=[],C&&this.params[`${_}_no_context_takeover`])this._inflate.reset();j(null,W)})}_compress(A,C,j){let _=this._isServer?"server":"client";if(!this._deflate){let M=`${_}_max_window_bits`,W=typeof this.params[M]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[M];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:W}),this._deflate[V]=0,this._deflate[F]=[],this._deflate.on("data",T)}this._deflate[z]=j,this._deflate.write(A),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let M=J.concat(this._deflate[F],this._deflate[V]);if(C)M=new G(M.buffer,M.byteOffset,M.length-4);if(this._deflate[z]=null,this._deflate[V]=0,this._deflate[F]=[],C&&this.params[`${_}_no_context_takeover`])this._deflate.reset();j(null,M)})}}$.exports=U;function T(A){this[F].push(A),this[V]+=A.length}function q(A){if(this[V]+=A.length,this[K]._maxPayload<1||this[V]<=this[K]._maxPayload){this[F].push(A);return}this[H]=RangeError("Max payload size exceeded"),this[H].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[H][X]=1009,this.removeListener("data",q),this.reset()}function P(A){if(this[K]._inflate=null,this[H]){this[z](this[H]);return}A[X]=1007,this[z](A)}}),a7=t((Q,$)=>{var{isUtf8:Z}=d("buffer"),{hasBlob:J}=V7(),Y=[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 X(K){return K>=1000&&K<=1014&&K!==1004&&K!==1005&&K!==1006||K>=3000&&K<=4999}function G(K){let V=K.length,z=0;while(z<V)if((K[z]&128)===0)z++;else if((K[z]&224)===192){if(z+1===V||(K[z+1]&192)!==128||(K[z]&254)===192)return!1;z+=2}else if((K[z]&240)===224){if(z+2>=V||(K[z+1]&192)!==128||(K[z+2]&192)!==128||K[z]===224&&(K[z+1]&224)===128||K[z]===237&&(K[z+1]&224)===160)return!1;z+=3}else if((K[z]&248)===240){if(z+3>=V||(K[z+1]&192)!==128||(K[z+2]&192)!==128||(K[z+3]&192)!==128||K[z]===240&&(K[z+1]&240)===128||K[z]===244&&K[z+1]>143||K[z]>244)return!1;z+=4}else return!1;return!0}function N(K){return J&&typeof K==="object"&&typeof K.arrayBuffer==="function"&&typeof K.type==="string"&&typeof K.stream==="function"&&(K[Symbol.toStringTag]==="Blob"||K[Symbol.toStringTag]==="File")}if($.exports={isBlob:N,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)$.exports.isValidUTF8=function(K){return K.length<24?G(K):Z(K)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let K=(()=>{throw Error("Cannot require module utf-8-validate")})();$.exports.isValidUTF8=function(V){return V.length<32?G(V):K(V)}}catch(K){}}),o8=t((Q,$)=>{var{Writable:Z}=d("stream"),J=o7(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:N}=V7(),{concat:K,toArrayBuffer:V,unmask:z}=jQ(),{isValidStatusCode:F,isValidUTF8:H}=a7(),L=Buffer[Symbol.species],U=0,T=1,q=2,P=3,A=4,C=5,j=6;class _ extends Z{constructor(M={}){super();this._allowSynchronousEvents=M.allowSynchronousEvents!==void 0?M.allowSynchronousEvents:!0,this._binaryType=M.binaryType||Y[0],this._extensions=M.extensions||{},this._isServer=!!M.isServer,this._maxPayload=M.maxPayload|0,this._skipUTF8Validation=!!M.skipUTF8Validation,this[N]=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=U}_write(M,W,B){if(this._opcode===8&&this._state==U)return B();this._bufferedBytes+=M.length,this._buffers.push(M),this.startLoop(B)}consume(M){if(this._bufferedBytes-=M,M===this._buffers[0].length)return this._buffers.shift();if(M<this._buffers[0].length){let B=this._buffers[0];return this._buffers[0]=new L(B.buffer,B.byteOffset+M,B.length-M),new L(B.buffer,B.byteOffset,M)}let W=Buffer.allocUnsafe(M);do{let B=this._buffers[0],R=W.length-M;if(M>=B.length)W.set(this._buffers.shift(),R);else W.set(new Uint8Array(B.buffer,B.byteOffset,M),R),this._buffers[0]=new L(B.buffer,B.byteOffset+M,B.length-M);M-=B.length}while(M>0);return W}startLoop(M){this._loop=!0;do switch(this._state){case U:this.getInfo(M);break;case T:this.getPayloadLength16(M);break;case q:this.getPayloadLength64(M);break;case P:this.getMask();break;case A:this.getData(M);break;case C:case j:this._loop=!1;return}while(this._loop);if(!this._errored)M()}getInfo(M){if(this._bufferedBytes<2){this._loop=!1;return}let W=this.consume(2);if((W[0]&48)!==0){let R=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");M(R);return}let B=(W[0]&64)===64;if(B&&!this._extensions[J.extensionName]){let R=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");M(R);return}if(this._fin=(W[0]&128)===128,this._opcode=W[0]&15,this._payloadLength=W[1]&127,this._opcode===0){if(B){let R=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");M(R);return}if(!this._fragmented){let R=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");M(R);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let R=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");M(R);return}this._compressed=B}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let R=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");M(R);return}if(B){let R=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");M(R);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let R=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");M(R);return}}else{let R=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");M(R);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(W[1]&128)===128,this._isServer){if(!this._masked){let R=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");M(R);return}}else if(this._masked){let R=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");M(R);return}if(this._payloadLength===126)this._state=T;else if(this._payloadLength===127)this._state=q;else this.haveLength(M)}getPayloadLength16(M){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(M)}getPayloadLength64(M){if(this._bufferedBytes<8){this._loop=!1;return}let W=this.consume(8),B=W.readUInt32BE(0);if(B>Math.pow(2,21)-1){let R=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");M(R);return}this._payloadLength=B*Math.pow(2,32)+W.readUInt32BE(4),this.haveLength(M)}haveLength(M){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let W=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");M(W);return}}if(this._masked)this._state=P;else this._state=A}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=A}getData(M){let W=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(W=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)z(W,this._mask)}if(this._opcode>7){this.controlMessage(W,M);return}if(this._compressed){this._state=C,this.decompress(W,M);return}if(W.length)this._messageLength=this._totalPayloadLength,this._fragments.push(W);this.dataMessage(M)}decompress(M,W){this._extensions[J.extensionName].decompress(M,this._fin,(R,E)=>{if(R)return W(R);if(E.length){if(this._messageLength+=E.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let D=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");W(D);return}this._fragments.push(E)}if(this.dataMessage(W),this._state===U)this.startLoop(W)})}dataMessage(M){if(!this._fin){this._state=U;return}let W=this._messageLength,B=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let R;if(this._binaryType==="nodebuffer")R=K(B,W);else if(this._binaryType==="arraybuffer")R=V(K(B,W));else if(this._binaryType==="blob")R=new Blob(B);else R=B;if(this._allowSynchronousEvents)this.emit("message",R,!0),this._state=U;else this._state=j,setImmediate(()=>{this.emit("message",R,!0),this._state=U,this.startLoop(M)})}else{let R=K(B,W);if(!this._skipUTF8Validation&&!H(R)){let E=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");M(E);return}if(this._state===C||this._allowSynchronousEvents)this.emit("message",R,!1),this._state=U;else this._state=j,setImmediate(()=>{this.emit("message",R,!1),this._state=U,this.startLoop(M)})}}controlMessage(M,W){if(this._opcode===8){if(M.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let B=M.readUInt16BE(0);if(!F(B)){let E=this.createError(RangeError,`invalid status code ${B}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");W(E);return}let R=new L(M.buffer,M.byteOffset+2,M.length-2);if(!this._skipUTF8Validation&&!H(R)){let E=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");W(E);return}this._loop=!1,this.emit("conclude",B,R),this.end()}this._state=U;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",M),this._state=U;else this._state=j,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",M),this._state=U,this.startLoop(W)})}createError(M,W,B,R,E){this._loop=!1,this._errored=!0;let D=new M(B?`Invalid WebSocket frame: ${W}`:W);return Error.captureStackTrace(D,this.createError),D.code=E,D[G]=R,D}}$.exports=_}),a8=t((Q,$)=>{var{Duplex:Z}=d("stream"),{randomFillSync:J}=d("crypto"),Y=o7(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:N}=V7(),{isBlob:K,isValidStatusCode:V}=a7(),{mask:z,toBuffer:F}=jQ(),H=Symbol("kByteLength"),L=Buffer.alloc(4),U=8192,T,q=U,P=0,A=1,C=2;class j{constructor(W,B,R){if(this._extensions=B||{},R)this._generateMask=R,this._maskBuffer=Buffer.alloc(4);this._socket=W,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=P,this.onerror=N,this[G]=void 0}static frame(W,B){let R,E=!1,D=2,I=!1;if(B.mask){if(R=B.maskBuffer||L,B.generateMask)B.generateMask(R);else{if(q===U){if(T===void 0)T=Buffer.alloc(U);J(T,0,U),q=0}R[0]=T[q++],R[1]=T[q++],R[2]=T[q++],R[3]=T[q++]}I=(R[0]|R[1]|R[2]|R[3])===0,D=6}let w;if(typeof W==="string")if((!B.mask||I)&&B[H]!==void 0)w=B[H];else W=Buffer.from(W),w=W.length;else w=W.length,E=B.mask&&B.readOnly&&!I;let k=w;if(w>=65536)D+=8,k=127;else if(w>125)D+=2,k=126;let y=Buffer.allocUnsafe(E?w+D:D);if(y[0]=B.fin?B.opcode|128:B.opcode,B.rsv1)y[0]|=64;if(y[1]=k,k===126)y.writeUInt16BE(w,2);else if(k===127)y[2]=y[3]=0,y.writeUIntBE(w,4,6);if(!B.mask)return[y,W];if(y[1]|=128,y[D-4]=R[0],y[D-3]=R[1],y[D-2]=R[2],y[D-1]=R[3],I)return[y,W];if(E)return z(W,R,y,D,w),[y];return z(W,R,W,0,w),[y,W]}close(W,B,R,E){let D;if(W===void 0)D=X;else if(typeof W!=="number"||!V(W))throw TypeError("First argument must be a valid error code number");else if(B===void 0||!B.length)D=Buffer.allocUnsafe(2),D.writeUInt16BE(W,0);else{let w=Buffer.byteLength(B);if(w>123)throw RangeError("The message must not be greater than 123 bytes");if(D=Buffer.allocUnsafe(2+w),D.writeUInt16BE(W,0),typeof B==="string")D.write(B,2);else D.set(B,2)}let I={[H]:D.length,fin:!0,generateMask:this._generateMask,mask:R,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==P)this.enqueue([this.dispatch,D,!1,I,E]);else this.sendFrame(j.frame(D,I),E)}ping(W,B,R){let E,D;if(typeof W==="string")E=Buffer.byteLength(W),D=!1;else if(K(W))E=W.size,D=!1;else W=F(W),E=W.length,D=F.readOnly;if(E>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[H]:E,fin:!0,generateMask:this._generateMask,mask:B,maskBuffer:this._maskBuffer,opcode:9,readOnly:D,rsv1:!1};if(K(W))if(this._state!==P)this.enqueue([this.getBlobData,W,!1,I,R]);else this.getBlobData(W,!1,I,R);else if(this._state!==P)this.enqueue([this.dispatch,W,!1,I,R]);else this.sendFrame(j.frame(W,I),R)}pong(W,B,R){let E,D;if(typeof W==="string")E=Buffer.byteLength(W),D=!1;else if(K(W))E=W.size,D=!1;else W=F(W),E=W.length,D=F.readOnly;if(E>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[H]:E,fin:!0,generateMask:this._generateMask,mask:B,maskBuffer:this._maskBuffer,opcode:10,readOnly:D,rsv1:!1};if(K(W))if(this._state!==P)this.enqueue([this.getBlobData,W,!1,I,R]);else this.getBlobData(W,!1,I,R);else if(this._state!==P)this.enqueue([this.dispatch,W,!1,I,R]);else this.sendFrame(j.frame(W,I),R)}send(W,B,R){let E=this._extensions[Y.extensionName],D=B.binary?2:1,I=B.compress,w,k;if(typeof W==="string")w=Buffer.byteLength(W),k=!1;else if(K(W))w=W.size,k=!1;else W=F(W),w=W.length,k=F.readOnly;if(this._firstFragment){if(this._firstFragment=!1,I&&E&&E.params[E._isServer?"server_no_context_takeover":"client_no_context_takeover"])I=w>=E._threshold;this._compress=I}else I=!1,D=0;if(B.fin)this._firstFragment=!0;let y={[H]:w,fin:B.fin,generateMask:this._generateMask,mask:B.mask,maskBuffer:this._maskBuffer,opcode:D,readOnly:k,rsv1:I};if(K(W))if(this._state!==P)this.enqueue([this.getBlobData,W,this._compress,y,R]);else this.getBlobData(W,this._compress,y,R);else if(this._state!==P)this.enqueue([this.dispatch,W,this._compress,y,R]);else this.dispatch(W,this._compress,y,R)}getBlobData(W,B,R,E){this._bufferedBytes+=R[H],this._state=C,W.arrayBuffer().then((D)=>{if(this._socket.destroyed){let w=Error("The socket was closed while the blob was being read");process.nextTick(_,this,w,E);return}this._bufferedBytes-=R[H];let I=F(D);if(!B)this._state=P,this.sendFrame(j.frame(I,R),E),this.dequeue();else this.dispatch(I,B,R,E)}).catch((D)=>{process.nextTick(M,this,D,E)})}dispatch(W,B,R,E){if(!B){this.sendFrame(j.frame(W,R),E);return}let D=this._extensions[Y.extensionName];this._bufferedBytes+=R[H],this._state=A,D.compress(W,R.fin,(I,w)=>{if(this._socket.destroyed){let k=Error("The socket was closed while data was being compressed");_(this,k,E);return}this._bufferedBytes-=R[H],this._state=P,R.readOnly=!1,this.sendFrame(j.frame(w,R),E),this.dequeue()})}dequeue(){while(this._state===P&&this._queue.length){let W=this._queue.shift();this._bufferedBytes-=W[3][H],Reflect.apply(W[0],this,W.slice(1))}}enqueue(W){this._bufferedBytes+=W[3][H],this._queue.push(W)}sendFrame(W,B){if(W.length===2)this._socket.cork(),this._socket.write(W[0]),this._socket.write(W[1],B),this._socket.uncork();else this._socket.write(W[0],B)}}$.exports=j;function _(W,B,R){if(typeof R==="function")R(B);for(let E=0;E<W._queue.length;E++){let D=W._queue[E],I=D[D.length-1];if(typeof I==="function")I(B)}}function M(W,B,R){_(W,B,R),W.onerror(B)}}),MZ=t((Q,$)=>{var{kForOnEventAttribute:Z,kListener:J}=V7(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),N=Symbol("kMessage"),K=Symbol("kReason"),V=Symbol("kTarget"),z=Symbol("kType"),F=Symbol("kWasClean");class H{constructor(A){this[V]=null,this[z]=A}get target(){return this[V]}get type(){return this[z]}}Object.defineProperty(H.prototype,"target",{enumerable:!0}),Object.defineProperty(H.prototype,"type",{enumerable:!0});class L extends H{constructor(A,C={}){super(A);this[Y]=C.code===void 0?0:C.code,this[K]=C.reason===void 0?"":C.reason,this[F]=C.wasClean===void 0?!1:C.wasClean}get code(){return this[Y]}get reason(){return this[K]}get wasClean(){return this[F]}}Object.defineProperty(L.prototype,"code",{enumerable:!0}),Object.defineProperty(L.prototype,"reason",{enumerable:!0}),Object.defineProperty(L.prototype,"wasClean",{enumerable:!0});class U extends H{constructor(A,C={}){super(A);this[G]=C.error===void 0?null:C.error,this[N]=C.message===void 0?"":C.message}get error(){return this[G]}get message(){return this[N]}}Object.defineProperty(U.prototype,"error",{enumerable:!0}),Object.defineProperty(U.prototype,"message",{enumerable:!0});class T extends H{constructor(A,C={}){super(A);this[X]=C.data===void 0?null:C.data}get data(){return this[X]}}Object.defineProperty(T.prototype,"data",{enumerable:!0});var q={addEventListener(A,C,j={}){for(let M of this.listeners(A))if(!j[Z]&&M[J]===C&&!M[Z])return;let _;if(A==="message")_=function(W,B){let R=new T("message",{data:B?W:W.toString()});R[V]=this,P(C,this,R)};else if(A==="close")_=function(W,B){let R=new L("close",{code:W,reason:B.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});R[V]=this,P(C,this,R)};else if(A==="error")_=function(W){let B=new U("error",{error:W,message:W.message});B[V]=this,P(C,this,B)};else if(A==="open")_=function(){let W=new H("open");W[V]=this,P(C,this,W)};else return;if(_[Z]=!!j[Z],_[J]=C,j.once)this.once(A,_);else this.on(A,_)},removeEventListener(A,C){for(let j of this.listeners(A))if(j[J]===C&&!j[Z]){this.removeListener(A,j);break}}};$.exports={CloseEvent:L,ErrorEvent:U,Event:H,EventTarget:q,MessageEvent:T};function P(A,C,j){if(typeof A==="object"&&A.handleEvent)A.handleEvent.call(A,j);else A.call(C,j)}}),f5=t((Q,$)=>{var{tokenChars:Z}=a7();function J(G,N,K){if(G[N]===void 0)G[N]=[K];else G[N].push(K)}function Y(G){let N=Object.create(null),K=Object.create(null),V=!1,z=!1,F=!1,H,L,U=-1,T=-1,q=-1,P=0;for(;P<G.length;P++)if(T=G.charCodeAt(P),H===void 0)if(q===-1&&Z[T]===1){if(U===-1)U=P}else if(P!==0&&(T===32||T===9)){if(q===-1&&U!==-1)q=P}else if(T===59||T===44){if(U===-1)throw SyntaxError(`Unexpected character at index ${P}`);if(q===-1)q=P;let C=G.slice(U,q);if(T===44)J(N,C,K),K=Object.create(null);else H=C;U=q=-1}else throw SyntaxError(`Unexpected character at index ${P}`);else if(L===void 0)if(q===-1&&Z[T]===1){if(U===-1)U=P}else if(T===32||T===9){if(q===-1&&U!==-1)q=P}else if(T===59||T===44){if(U===-1)throw SyntaxError(`Unexpected character at index ${P}`);if(q===-1)q=P;if(J(K,G.slice(U,q),!0),T===44)J(N,H,K),K=Object.create(null),H=void 0;U=q=-1}else if(T===61&&U!==-1&&q===-1)L=G.slice(U,P),U=q=-1;else throw SyntaxError(`Unexpected character at index ${P}`);else if(z){if(Z[T]!==1)throw SyntaxError(`Unexpected character at index ${P}`);if(U===-1)U=P;else if(!V)V=!0;z=!1}else if(F)if(Z[T]===1){if(U===-1)U=P}else if(T===34&&U!==-1)F=!1,q=P;else if(T===92)z=!0;else throw SyntaxError(`Unexpected character at index ${P}`);else if(T===34&&G.charCodeAt(P-1)===61)F=!0;else if(q===-1&&Z[T]===1){if(U===-1)U=P}else if(U!==-1&&(T===32||T===9)){if(q===-1)q=P}else if(T===59||T===44){if(U===-1)throw SyntaxError(`Unexpected character at index ${P}`);if(q===-1)q=P;let C=G.slice(U,q);if(V)C=C.replace(/\\/g,""),V=!1;if(J(K,L,C),T===44)J(N,H,K),K=Object.create(null),H=void 0;L=void 0,U=q=-1}else throw SyntaxError(`Unexpected character at index ${P}`);if(U===-1||F||T===32||T===9)throw SyntaxError("Unexpected end of input");if(q===-1)q=P;let A=G.slice(U,q);if(H===void 0)J(N,A,K);else{if(L===void 0)J(K,A,!0);else if(V)J(K,L,A.replace(/\\/g,""));else J(K,L,A);J(N,H,K)}return N}function X(G){return Object.keys(G).map((N)=>{let K=G[N];if(!Array.isArray(K))K=[K];return K.map((V)=>{return[N].concat(Object.keys(V).map((z)=>{let F=V[z];if(!Array.isArray(F))F=[F];return F.map((H)=>H===!0?z:`${z}=${H}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}$.exports={format:X,parse:Y}}),b5=t((Q,$)=>{var Z=d("events"),J=d("https"),Y=d("http"),X=d("net"),G=d("tls"),{randomBytes:N,createHash:K}=d("crypto"),{Duplex:V,Readable:z}=d("stream"),{URL:F}=d("url"),H=o7(),L=o8(),U=a8(),{isBlob:T}=a7(),{BINARY_TYPES:q,CLOSE_TIMEOUT:P,EMPTY_BUFFER:A,GUID:C,kForOnEventAttribute:j,kListener:_,kStatusCode:M,kWebSocket:W,NOOP:B}=V7(),{EventTarget:{addEventListener:R,removeEventListener:E}}=MZ(),{format:D,parse:I}=f5(),{toBuffer:w}=jQ(),k=Symbol("kAborted"),y=[8,13],u=["CONNECTING","OPEN","CLOSING","CLOSED"],b=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class S extends Z{constructor(O,x,h){super();if(this._binaryType=q[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=A,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=S.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,O!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,x===void 0)x=[];else if(!Array.isArray(x))if(typeof x==="object"&&x!==null)h=x,x=[];else x=[x];n(this,O,x,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(O){if(!q.includes(O))return;if(this._binaryType=O,this._receiver)this._receiver._binaryType=O}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(O,x,h){let g=new L({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),f=new U(O,this._extensions,h.generateMask);if(this._receiver=g,this._sender=f,this._socket=O,g[W]=this,f[W]=this,O[W]=this,g.on("conclude",f9),g.on("drain",b9),g.on("error",v9),g.on("message",h9),g.on("ping",u9),g.on("pong",g9),f.onerror=p9,O.setTimeout)O.setTimeout(0);if(O.setNoDelay)O.setNoDelay();if(x.length>0)O.unshift(x);O.on("close",s5),O.on("data",ZQ),O.on("end",e5),O.on("error",Q6),this._readyState=S.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=S.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[H.extensionName])this._extensions[H.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=S.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(O,x){if(this.readyState===S.CLOSED)return;if(this.readyState===S.CONNECTING){r(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===S.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=S.CLOSING,this._sender.close(O,x,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),t5(this)}pause(){if(this.readyState===S.CONNECTING||this.readyState===S.CLOSED)return;this._paused=!0,this._socket.pause()}ping(O,x,h){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")h=O,O=x=void 0;else if(typeof x==="function")h=x,x=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==S.OPEN){SQ(this,O,h);return}if(x===void 0)x=!this._isServer;this._sender.ping(O||A,x,h)}pong(O,x,h){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")h=O,O=x=void 0;else if(typeof x==="function")h=x,x=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==S.OPEN){SQ(this,O,h);return}if(x===void 0)x=!this._isServer;this._sender.pong(O||A,x,h)}resume(){if(this.readyState===S.CONNECTING||this.readyState===S.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(O,x,h){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof x==="function")h=x,x={};if(typeof O==="number")O=O.toString();if(this.readyState!==S.OPEN){SQ(this,O,h);return}let g={binary:typeof O!=="string",mask:!this._isServer,compress:!0,fin:!0,...x};if(!this._extensions[H.extensionName])g.compress=!1;this._sender.send(O||A,g,h)}terminate(){if(this.readyState===S.CLOSED)return;if(this.readyState===S.CONNECTING){r(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=S.CLOSING,this._socket.destroy()}}Object.defineProperty(S,"CONNECTING",{enumerable:!0,value:u.indexOf("CONNECTING")}),Object.defineProperty(S.prototype,"CONNECTING",{enumerable:!0,value:u.indexOf("CONNECTING")}),Object.defineProperty(S,"OPEN",{enumerable:!0,value:u.indexOf("OPEN")}),Object.defineProperty(S.prototype,"OPEN",{enumerable:!0,value:u.indexOf("OPEN")}),Object.defineProperty(S,"CLOSING",{enumerable:!0,value:u.indexOf("CLOSING")}),Object.defineProperty(S.prototype,"CLOSING",{enumerable:!0,value:u.indexOf("CLOSING")}),Object.defineProperty(S,"CLOSED",{enumerable:!0,value:u.indexOf("CLOSED")}),Object.defineProperty(S.prototype,"CLOSED",{enumerable:!0,value:u.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((O)=>{Object.defineProperty(S.prototype,O,{enumerable:!0})}),["open","error","close","message"].forEach((O)=>{Object.defineProperty(S.prototype,`on${O}`,{enumerable:!0,get(){for(let x of this.listeners(O))if(x[j])return x[_];return null},set(x){for(let h of this.listeners(O))if(h[j]){this.removeListener(O,h);break}if(typeof x!=="function")return;this.addEventListener(O,x,{[j]:!0})}})}),S.prototype.addEventListener=R,S.prototype.removeEventListener=E,$.exports=S;function n(O,x,h,g){let f={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:P,protocolVersion:y[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...g,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(O._autoPong=f.autoPong,O._closeTimeout=f.closeTimeout,!y.includes(f.protocolVersion))throw RangeError(`Unsupported protocol version: ${f.protocolVersion} (supported versions: ${y.join(", ")})`);let c;if(x instanceof F)c=x;else try{c=new F(x)}catch{throw SyntaxError(`Invalid URL: ${x}`)}if(c.protocol==="http:")c.protocol="ws:";else if(c.protocol==="https:")c.protocol="wss:";O._url=c.href;let _7=c.protocol==="wss:",C7=c.protocol==="ws+unix:",w7;if(c.protocol!=="ws:"&&!_7&&!C7)w7=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(C7&&!c.pathname)w7="The URL's pathname is empty";else if(c.hash)w7="The URL contains a fragment identifier";if(w7){let p=SyntaxError(w7);if(O._redirects===0)throw p;else{s(O,p);return}}let $6=_7?443:80,Z6=N(16).toString("base64"),J6=_7?J.request:Y.request,S7=new Set,k7;if(f.createConnection=f.createConnection||(_7?wQ:xQ),f.defaultPort=f.defaultPort||$6,f.port=c.port||$6,f.host=c.hostname.startsWith("[")?c.hostname.slice(1,-1):c.hostname,f.headers={...f.headers,"Sec-WebSocket-Version":f.protocolVersion,"Sec-WebSocket-Key":Z6,Connection:"Upgrade",Upgrade:"websocket"},f.path=c.pathname+c.search,f.timeout=f.handshakeTimeout,f.perMessageDeflate)k7=new H({...f.perMessageDeflate,isServer:!1,maxPayload:f.maxPayload}),f.headers["Sec-WebSocket-Extensions"]=D({[H.extensionName]:k7.offer()});if(h.length){for(let p of h){if(typeof p!=="string"||!b.test(p)||S7.has(p))throw SyntaxError("An invalid or duplicated subprotocol was specified");S7.add(p)}f.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(f.origin)if(f.protocolVersion<13)f.headers["Sec-WebSocket-Origin"]=f.origin;else f.headers.Origin=f.origin;if(c.username||c.password)f.auth=`${c.username}:${c.password}`;if(C7){let p=f.path.split(":");f.socketPath=p[0],f.path=p[1]}let m;if(f.followRedirects){if(O._redirects===0){O._originalIpc=C7,O._originalSecure=_7,O._originalHostOrSocketPath=C7?f.socketPath:c.host;let p=g&&g.headers;if(g={...g,headers:{}},p)for(let[a,U7]of Object.entries(p))g.headers[a.toLowerCase()]=U7}else if(O.listenerCount("redirect")===0){let p=C7?O._originalIpc?f.socketPath===O._originalHostOrSocketPath:!1:O._originalIpc?!1:c.host===O._originalHostOrSocketPath;if(!p||O._originalSecure&&!_7){if(delete f.headers.authorization,delete f.headers.cookie,!p)delete f.headers.host;f.auth=void 0}}if(f.auth&&!g.headers.authorization)g.headers.authorization="Basic "+Buffer.from(f.auth).toString("base64");if(m=O._req=J6(f),O._redirects)O.emit("redirect",O.url,m)}else m=O._req=J6(f);if(f.timeout)m.on("timeout",()=>{r(O,m,"Opening handshake has timed out")});if(m.on("error",(p)=>{if(m===null||m[k])return;m=O._req=null,s(O,p)}),m.on("response",(p)=>{let a=p.headers.location,U7=p.statusCode;if(a&&f.followRedirects&&U7>=300&&U7<400){if(++O._redirects>f.maxRedirects){r(O,m,"Maximum redirects exceeded");return}m.abort();let y7;try{y7=new F(a,x)}catch(Y6){let A7=SyntaxError(`Invalid URL: ${a}`);s(O,A7);return}n(O,y7,h,g)}else if(!O.emit("unexpected-response",m,p))r(O,m,`Unexpected server response: ${p.statusCode}`)}),m.on("upgrade",(p,a,U7)=>{if(O.emit("upgrade",p),O.readyState!==S.CONNECTING)return;m=O._req=null;let y7=p.headers.upgrade;if(y7===void 0||y7.toLowerCase()!=="websocket"){r(O,a,"Invalid Upgrade header");return}let Y6=K("sha1").update(Z6+C).digest("base64");if(p.headers["sec-websocket-accept"]!==Y6){r(O,a,"Invalid Sec-WebSocket-Accept header");return}let A7=p.headers["sec-websocket-protocol"],f7;if(A7!==void 0){if(!S7.size)f7="Server sent a subprotocol but none was requested";else if(!S7.has(A7))f7="Server sent an invalid subprotocol"}else if(S7.size)f7="Server sent no subprotocol";if(f7){r(O,a,f7);return}if(A7)O._protocol=A7;let X6=p.headers["sec-websocket-extensions"];if(X6!==void 0){if(!k7){r(O,a,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let kQ;try{kQ=I(X6)}catch(yQ){r(O,a,"Invalid Sec-WebSocket-Extensions header");return}let G6=Object.keys(kQ);if(G6.length!==1||G6[0]!==H.extensionName){r(O,a,"Server indicated an extension that was not requested");return}try{k7.accept(kQ[H.extensionName])}catch(yQ){r(O,a,"Invalid Sec-WebSocket-Extensions header");return}O._extensions[H.extensionName]=k7}O.setSocket(a,U7,{allowSynchronousEvents:f.allowSynchronousEvents,generateMask:f.generateMask,maxPayload:f.maxPayload,skipUTF8Validation:f.skipUTF8Validation})}),f.finishRequest)f.finishRequest(m,O);else m.end()}function s(O,x){O._readyState=S.CLOSING,O._errorEmitted=!0,O.emit("error",x),O.emitClose()}function xQ(O){return O.path=O.socketPath,X.connect(O)}function wQ(O){if(O.path=void 0,!O.servername&&O.servername!=="")O.servername=X.isIP(O.host)?"":O.host;return G.connect(O)}function r(O,x,h){O._readyState=S.CLOSING;let g=Error(h);if(Error.captureStackTrace(g,r),x.setHeader){if(x[k]=!0,x.abort(),x.socket&&!x.socket.destroyed)x.socket.destroy();process.nextTick(s,O,g)}else x.destroy(g),x.once("error",O.emit.bind(O,"error")),x.once("close",O.emitClose.bind(O))}function SQ(O,x,h){if(x){let g=T(x)?x.size:w(x).length;if(O._socket)O._sender._bufferedBytes+=g;else O._bufferedAmount+=g}if(h){let g=Error(`WebSocket is not open: readyState ${O.readyState} (${u[O.readyState]})`);process.nextTick(h,g)}}function f9(O,x){let h=this[W];if(h._closeFrameReceived=!0,h._closeMessage=x,h._closeCode=O,h._socket[W]===void 0)return;if(h._socket.removeListener("data",ZQ),process.nextTick(r5,h._socket),O===1005)h.close();else h.close(O,x)}function b9(){let O=this[W];if(!O.isPaused)O._socket.resume()}function v9(O){let x=this[W];if(x._socket[W]!==void 0)x._socket.removeListener("data",ZQ),process.nextTick(r5,x._socket),x.close(O[M]);if(!x._errorEmitted)x._errorEmitted=!0,x.emit("error",O)}function a5(){this[W].emitClose()}function h9(O,x){this[W].emit("message",O,x)}function u9(O){let x=this[W];if(x._autoPong)x.pong(O,!this._isServer,B);x.emit("ping",O)}function g9(O){this[W].emit("pong",O)}function r5(O){O.resume()}function p9(O){let x=this[W];if(x.readyState===S.CLOSED)return;if(x.readyState===S.OPEN)x._readyState=S.CLOSING,t5(x);if(this._socket.end(),!x._errorEmitted)x._errorEmitted=!0,x.emit("error",O)}function t5(O){O._closeTimer=setTimeout(O._socket.destroy.bind(O._socket),O._closeTimeout)}function s5(){let O=this[W];if(this.removeListener("close",s5),this.removeListener("data",ZQ),this.removeListener("end",e5),O._readyState=S.CLOSING,!this._readableState.endEmitted&&!O._closeFrameReceived&&!O._receiver._writableState.errorEmitted&&this._readableState.length!==0){let x=this.read(this._readableState.length);O._receiver.write(x)}if(O._receiver.end(),this[W]=void 0,clearTimeout(O._closeTimer),O._receiver._writableState.finished||O._receiver._writableState.errorEmitted)O.emitClose();else O._receiver.on("error",a5),O._receiver.on("finish",a5)}function ZQ(O){if(!this[W]._receiver.write(O))this.pause()}function e5(){let O=this[W];O._readyState=S.CLOSING,O._receiver.end(),this.end()}function Q6(){let O=this[W];if(this.removeListener("error",Q6),this.on("error",B),O)O._readyState=S.CLOSING,this.destroy()}}),FZ=t((Q,$)=>{var Z=b5(),{Duplex:J}=d("stream");function Y(K){K.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(K){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",K)}function N(K,V){let z=!0,F=new J({...V,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return K.on("message",function(L,U){let T=!U&&F._readableState.objectMode?L.toString():L;if(!F.push(T))K.pause()}),K.once("error",function(L){if(F.destroyed)return;z=!1,F.destroy(L)}),K.once("close",function(){if(F.destroyed)return;F.push(null)}),F._destroy=function(H,L){if(K.readyState===K.CLOSED){L(H),process.nextTick(Y,F);return}let U=!1;if(K.once("error",function(q){U=!0,L(q)}),K.once("close",function(){if(!U)L(H);process.nextTick(Y,F)}),z)K.terminate()},F._final=function(H){if(K.readyState===K.CONNECTING){K.once("open",function(){F._final(H)});return}if(K._socket===null)return;if(K._socket._writableState.finished){if(H(),F._readableState.endEmitted)F.destroy()}else K._socket.once("finish",function(){H()}),K.close()},F._read=function(){if(K.isPaused)K.resume()},F._write=function(H,L,U){if(K.readyState===K.CONNECTING){K.once("open",function(){F._write(H,L,U)});return}K.send(H,U)},F.on("end",X),F.on("error",G),F}$.exports=N}),r8=t((Q,$)=>{var{tokenChars:Z}=a7();function J(Y){let X=new Set,G=-1,N=-1,K=0;for(K;K<Y.length;K++){let z=Y.charCodeAt(K);if(N===-1&&Z[z]===1){if(G===-1)G=K}else if(K!==0&&(z===32||z===9)){if(N===-1&&G!==-1)N=K}else if(z===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${K}`);if(N===-1)N=K;let F=Y.slice(G,N);if(X.has(F))throw SyntaxError(`The "${F}" subprotocol is duplicated`);X.add(F),G=N=-1}else throw SyntaxError(`Unexpected character at index ${K}`)}if(G===-1||N!==-1)throw SyntaxError("Unexpected end of input");let V=Y.slice(G,K);if(X.has(V))throw SyntaxError(`The "${V}" subprotocol is duplicated`);return X.add(V),X}$.exports={parse:J}}),BZ=t((Q,$)=>{var Z=d("events"),J=d("http"),{Duplex:Y}=d("stream"),{createHash:X}=d("crypto"),G=f5(),N=o7(),K=r8(),V=b5(),{CLOSE_TIMEOUT:z,GUID:F,kWebSocket:H}=V7(),L=/^[+/0-9A-Za-z]{22}==$/,U=0,T=1,q=2;class P extends Z{constructor(W,B){super();if(W={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:z,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:V,...W},W.port==null&&!W.server&&!W.noServer||W.port!=null&&(W.server||W.noServer)||W.server&&W.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(W.port!=null)this._server=J.createServer((R,E)=>{let D=J.STATUS_CODES[426];E.writeHead(426,{"Content-Length":D.length,"Content-Type":"text/plain"}),E.end(D)}),this._server.listen(W.port,W.host,W.backlog,B);else if(W.server)this._server=W.server;if(this._server){let R=this.emit.bind(this,"connection");this._removeListeners=A(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(E,D,I)=>{this.handleUpgrade(E,D,I,R)}})}if(W.perMessageDeflate===!0)W.perMessageDeflate={};if(W.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=W,this._state=U}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(W){if(this._state===q){if(W)this.once("close",()=>{W(Error("The server is not running"))});process.nextTick(C,this);return}if(W)this.once("close",W);if(this._state===T)return;if(this._state=T,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(C,this);else this._shouldEmitClose=!0;else process.nextTick(C,this)}else{let B=this._server;this._removeListeners(),this._removeListeners=this._server=null,B.close(()=>{C(this)})}}shouldHandle(W){if(this.options.path){let B=W.url.indexOf("?");if((B!==-1?W.url.slice(0,B):W.url)!==this.options.path)return!1}return!0}handleUpgrade(W,B,R,E){B.on("error",j);let D=W.headers["sec-websocket-key"],I=W.headers.upgrade,w=+W.headers["sec-websocket-version"];if(W.method!=="GET"){M(this,W,B,405,"Invalid HTTP method");return}if(I===void 0||I.toLowerCase()!=="websocket"){M(this,W,B,400,"Invalid Upgrade header");return}if(D===void 0||!L.test(D)){M(this,W,B,400,"Missing or invalid Sec-WebSocket-Key header");return}if(w!==13&&w!==8){M(this,W,B,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(W)){_(B,400);return}let k=W.headers["sec-websocket-protocol"],y=new Set;if(k!==void 0)try{y=K.parse(k)}catch(S){M(this,W,B,400,"Invalid Sec-WebSocket-Protocol header");return}let u=W.headers["sec-websocket-extensions"],b={};if(this.options.perMessageDeflate&&u!==void 0){let S=new N({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let n=G.parse(u);if(n[N.extensionName])S.accept(n[N.extensionName]),b[N.extensionName]=S}catch(n){M(this,W,B,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let S={origin:W.headers[`${w===8?"sec-websocket-origin":"origin"}`],secure:!!(W.socket.authorized||W.socket.encrypted),req:W};if(this.options.verifyClient.length===2){this.options.verifyClient(S,(n,s,xQ,wQ)=>{if(!n)return _(B,s||401,xQ,wQ);this.completeUpgrade(b,D,y,W,B,R,E)});return}if(!this.options.verifyClient(S))return _(B,401)}this.completeUpgrade(b,D,y,W,B,R,E)}completeUpgrade(W,B,R,E,D,I,w){if(!D.readable||!D.writable)return D.destroy();if(D[H])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>U)return _(D,503);let y=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(B+F).digest("base64")}`],u=new this.options.WebSocket(null,void 0,this.options);if(R.size){let b=this.options.handleProtocols?this.options.handleProtocols(R,E):R.values().next().value;if(b)y.push(`Sec-WebSocket-Protocol: ${b}`),u._protocol=b}if(W[N.extensionName]){let b=W[N.extensionName].params,S=G.format({[N.extensionName]:[b]});y.push(`Sec-WebSocket-Extensions: ${S}`),u._extensions=W}if(this.emit("headers",y,E),D.write(y.concat(`\r
|
|
34
|
+
}`,m1=65536,d1,n1,o1,t1=1500;var V4=c4(()=>{w2=Object.create,S2=Object.getPrototypeOf,k0=Object.defineProperty,k2=Object.getOwnPropertyNames,y2=Object.prototype.hasOwnProperty;J6=x2(import.meta.url),q6=F6(($,Q)=>{var Z=["nodebuffer","arraybuffer","fragments"],J=typeof Blob<"u";if(J)Z.push("blob");Q.exports={BINARY_TYPES:Z,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:J,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),e7=F6(($,Q)=>{var{EMPTY_BUFFER:Z}=q6(),J=Buffer[Symbol.species];function Y(V,W){if(V.length===0)return Z;if(V.length===1)return V[0];let M=Buffer.allocUnsafe(W),B=0;for(let L=0;L<V.length;L++){let A=V[L];M.set(A,B),B+=A.length}if(B<W)return new J(M.buffer,M.byteOffset,B);return M}function G(V,W,M,B,L){for(let A=0;A<L;A++)M[B+A]=V[A]^W[A&3]}function X(V,W){for(let M=0;M<V.length;M++)V[M]^=W[M&3]}function z(V){if(V.length===V.buffer.byteLength)return V.buffer;return V.buffer.slice(V.byteOffset,V.byteOffset+V.length)}function K(V){if(K.readOnly=!0,Buffer.isBuffer(V))return V;let W;if(V instanceof ArrayBuffer)W=new J(V);else if(ArrayBuffer.isView(V))W=new J(V.buffer,V.byteOffset,V.byteLength);else W=Buffer.from(V),K.readOnly=!1;return W}if(Q.exports={concat:Y,mask:G,toArrayBuffer:z,toBuffer:K,unmask:X},!process.env.WS_NO_BUFFER_UTIL)try{let V=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(W,M,B,L,A){if(A<48)G(W,M,B,L,A);else V.mask(W,M,B,L,A)},Q.exports.unmask=function(W,M){if(W.length<32)X(W,M);else V.unmask(W,M)}}catch(V){}}),h2=F6(($,Q)=>{var Z=Symbol("kDone"),J=Symbol("kRun");class Y{constructor(G){this[Z]=()=>{this.pending--,this[J]()},this.concurrency=G||1/0,this.jobs=[],this.pending=0}add(G){this.jobs.push(G),this[J]()}[J](){if(this.pending===this.concurrency)return;if(this.jobs.length){let G=this.jobs.shift();this.pending++,G(this[Z])}}}Q.exports=Y}),L7=F6(($,Q)=>{var Z=J6("zlib"),J=e7(),Y=h2(),{kStatusCode:G}=q6(),X=Buffer[Symbol.species],z=Buffer.from([0,0,255,255]),K=Symbol("permessage-deflate"),V=Symbol("total-length"),W=Symbol("callback"),M=Symbol("buffers"),B=Symbol("error"),L;class A{constructor(T){if(this._options=T||{},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,!L){let _=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;L=new Y(_)}}static get extensionName(){return"permessage-deflate"}offer(){let T={};if(this._options.serverNoContextTakeover)T.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)T.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)T.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)T.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)T.client_max_window_bits=!0;return T}accept(T){return T=this.normalizeParams(T),this.params=this._isServer?this.acceptAsServer(T):this.acceptAsClient(T),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let T=this._deflate[W];if(this._deflate.close(),this._deflate=null,T)T(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(T){let _=this._options,E=T.find((P)=>{if(_.serverNoContextTakeover===!1&&P.server_no_context_takeover||P.server_max_window_bits&&(_.serverMaxWindowBits===!1||typeof _.serverMaxWindowBits==="number"&&_.serverMaxWindowBits>P.server_max_window_bits)||typeof _.clientMaxWindowBits==="number"&&!P.client_max_window_bits)return!1;return!0});if(!E)throw Error("None of the extension offers can be accepted");if(_.serverNoContextTakeover)E.server_no_context_takeover=!0;if(_.clientNoContextTakeover)E.client_no_context_takeover=!0;if(typeof _.serverMaxWindowBits==="number")E.server_max_window_bits=_.serverMaxWindowBits;if(typeof _.clientMaxWindowBits==="number")E.client_max_window_bits=_.clientMaxWindowBits;else if(E.client_max_window_bits===!0||_.clientMaxWindowBits===!1)delete E.client_max_window_bits;return E}acceptAsClient(T){let _=T[0];if(this._options.clientNoContextTakeover===!1&&_.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!_.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")_.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&_.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return _}normalizeParams(T){return T.forEach((_)=>{Object.keys(_).forEach((E)=>{let P=_[E];if(P.length>1)throw Error(`Parameter "${E}" must have only a single value`);if(P=P[0],E==="client_max_window_bits"){if(P!==!0){let N=+P;if(!Number.isInteger(N)||N<8||N>15)throw TypeError(`Invalid value for parameter "${E}": ${P}`);P=N}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${E}": ${P}`)}else if(E==="server_max_window_bits"){let N=+P;if(!Number.isInteger(N)||N<8||N>15)throw TypeError(`Invalid value for parameter "${E}": ${P}`);P=N}else if(E==="client_no_context_takeover"||E==="server_no_context_takeover"){if(P!==!0)throw TypeError(`Invalid value for parameter "${E}": ${P}`)}else throw Error(`Unknown parameter "${E}"`);_[E]=P})}),T}decompress(T,_,E){L.add((P)=>{this._decompress(T,_,(N,H)=>{P(),E(N,H)})})}compress(T,_,E){L.add((P)=>{this._compress(T,_,(N,H)=>{P(),E(N,H)})})}_decompress(T,_,E){let P=this._isServer?"client":"server";if(!this._inflate){let N=`${P}_max_window_bits`,H=typeof this.params[N]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[N];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:H}),this._inflate[K]=this,this._inflate[V]=0,this._inflate[M]=[],this._inflate.on("error",j),this._inflate.on("data",q)}if(this._inflate[W]=E,this._inflate.write(T),_)this._inflate.write(z);this._inflate.flush(()=>{let N=this._inflate[B];if(N){this._inflate.close(),this._inflate=null,E(N);return}let H=J.concat(this._inflate[M],this._inflate[V]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[V]=0,this._inflate[M]=[],_&&this.params[`${P}_no_context_takeover`])this._inflate.reset();E(null,H)})}_compress(T,_,E){let P=this._isServer?"server":"client";if(!this._deflate){let N=`${P}_max_window_bits`,H=typeof this.params[N]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[N];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:H}),this._deflate[V]=0,this._deflate[M]=[],this._deflate.on("data",D)}this._deflate[W]=E,this._deflate.write(T),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let N=J.concat(this._deflate[M],this._deflate[V]);if(_)N=new X(N.buffer,N.byteOffset,N.length-4);if(this._deflate[W]=null,this._deflate[V]=0,this._deflate[M]=[],_&&this.params[`${P}_no_context_takeover`])this._deflate.reset();E(null,N)})}}Q.exports=A;function D(T){this[M].push(T),this[V]+=T.length}function q(T){if(this[V]+=T.length,this[K]._maxPayload<1||this[V]<=this[K]._maxPayload){this[M].push(T);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][G]=1009,this.removeListener("data",q),this.reset()}function j(T){if(this[K]._inflate=null,this[B]){this[W](this[B]);return}T[G]=1007,this[W](T)}}),U7=F6(($,Q)=>{var{isUtf8:Z}=J6("buffer"),{hasBlob:J}=q6(),Y=[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 G(K){return K>=1000&&K<=1014&&K!==1004&&K!==1005&&K!==1006||K>=3000&&K<=4999}function X(K){let V=K.length,W=0;while(W<V)if((K[W]&128)===0)W++;else if((K[W]&224)===192){if(W+1===V||(K[W+1]&192)!==128||(K[W]&254)===192)return!1;W+=2}else if((K[W]&240)===224){if(W+2>=V||(K[W+1]&192)!==128||(K[W+2]&192)!==128||K[W]===224&&(K[W+1]&224)===128||K[W]===237&&(K[W+1]&224)===160)return!1;W+=3}else if((K[W]&248)===240){if(W+3>=V||(K[W+1]&192)!==128||(K[W+2]&192)!==128||(K[W+3]&192)!==128||K[W]===240&&(K[W+1]&240)===128||K[W]===244&&K[W+1]>143||K[W]>244)return!1;W+=4}else return!1;return!0}function z(K){return J&&typeof K==="object"&&typeof K.arrayBuffer==="function"&&typeof K.type==="string"&&typeof K.stream==="function"&&(K[Symbol.toStringTag]==="Blob"||K[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:z,isValidStatusCode:G,isValidUTF8:X,tokenChars:Y},Z)Q.exports.isValidUTF8=function(K){return K.length<24?X(K):Z(K)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let K=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(V){return V.length<32?X(V):K(V)}}catch(K){}}),g0=F6(($,Q)=>{var{Writable:Z}=J6("stream"),J=L7(),{BINARY_TYPES:Y,EMPTY_BUFFER:G,kStatusCode:X,kWebSocket:z}=q6(),{concat:K,toArrayBuffer:V,unmask:W}=e7(),{isValidStatusCode:M,isValidUTF8:B}=U7(),L=Buffer[Symbol.species],A=0,D=1,q=2,j=3,T=4,_=5,E=6;class P extends Z{constructor(N={}){super();this._allowSynchronousEvents=N.allowSynchronousEvents!==void 0?N.allowSynchronousEvents:!0,this._binaryType=N.binaryType||Y[0],this._extensions=N.extensions||{},this._isServer=!!N.isServer,this._maxPayload=N.maxPayload|0,this._skipUTF8Validation=!!N.skipUTF8Validation,this[z]=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=A}_write(N,H,R){if(this._opcode===8&&this._state==A)return R();this._bufferedBytes+=N.length,this._buffers.push(N),this.startLoop(R)}consume(N){if(this._bufferedBytes-=N,N===this._buffers[0].length)return this._buffers.shift();if(N<this._buffers[0].length){let R=this._buffers[0];return this._buffers[0]=new L(R.buffer,R.byteOffset+N,R.length-N),new L(R.buffer,R.byteOffset,N)}let H=Buffer.allocUnsafe(N);do{let R=this._buffers[0],C=H.length-N;if(N>=R.length)H.set(this._buffers.shift(),C);else H.set(new Uint8Array(R.buffer,R.byteOffset,N),C),this._buffers[0]=new L(R.buffer,R.byteOffset+N,R.length-N);N-=R.length}while(N>0);return H}startLoop(N){this._loop=!0;do switch(this._state){case A:this.getInfo(N);break;case D:this.getPayloadLength16(N);break;case q:this.getPayloadLength64(N);break;case j:this.getMask();break;case T:this.getData(N);break;case _:case E:this._loop=!1;return}while(this._loop);if(!this._errored)N()}getInfo(N){if(this._bufferedBytes<2){this._loop=!1;return}let H=this.consume(2);if((H[0]&48)!==0){let C=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");N(C);return}let R=(H[0]&64)===64;if(R&&!this._extensions[J.extensionName]){let C=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(C);return}if(this._fin=(H[0]&128)===128,this._opcode=H[0]&15,this._payloadLength=H[1]&127,this._opcode===0){if(R){let C=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(C);return}if(!this._fragmented){let C=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");N(C);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let C=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");N(C);return}this._compressed=R}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let C=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");N(C);return}if(R){let C=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(C);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let C=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");N(C);return}}else{let C=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");N(C);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(H[1]&128)===128,this._isServer){if(!this._masked){let C=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");N(C);return}}else if(this._masked){let C=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");N(C);return}if(this._payloadLength===126)this._state=D;else if(this._payloadLength===127)this._state=q;else this.haveLength(N)}getPayloadLength16(N){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(N)}getPayloadLength64(N){if(this._bufferedBytes<8){this._loop=!1;return}let H=this.consume(8),R=H.readUInt32BE(0);if(R>Math.pow(2,21)-1){let C=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");N(C);return}this._payloadLength=R*Math.pow(2,32)+H.readUInt32BE(4),this.haveLength(N)}haveLength(N){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let H=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");N(H);return}}if(this._masked)this._state=j;else this._state=T}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=T}getData(N){let H=G;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(H=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)W(H,this._mask)}if(this._opcode>7){this.controlMessage(H,N);return}if(this._compressed){this._state=_,this.decompress(H,N);return}if(H.length)this._messageLength=this._totalPayloadLength,this._fragments.push(H);this.dataMessage(N)}decompress(N,H){this._extensions[J.extensionName].decompress(N,this._fin,(C,I)=>{if(C)return H(C);if(I.length){if(this._messageLength+=I.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let x=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");H(x);return}this._fragments.push(I)}if(this.dataMessage(H),this._state===A)this.startLoop(H)})}dataMessage(N){if(!this._fin){this._state=A;return}let H=this._messageLength,R=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let C;if(this._binaryType==="nodebuffer")C=K(R,H);else if(this._binaryType==="arraybuffer")C=V(K(R,H));else if(this._binaryType==="blob")C=new Blob(R);else C=R;if(this._allowSynchronousEvents)this.emit("message",C,!0),this._state=A;else this._state=E,setImmediate(()=>{this.emit("message",C,!0),this._state=A,this.startLoop(N)})}else{let C=K(R,H);if(!this._skipUTF8Validation&&!B(C)){let I=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");N(I);return}if(this._state===_||this._allowSynchronousEvents)this.emit("message",C,!1),this._state=A;else this._state=E,setImmediate(()=>{this.emit("message",C,!1),this._state=A,this.startLoop(N)})}}controlMessage(N,H){if(this._opcode===8){if(N.length===0)this._loop=!1,this.emit("conclude",1005,G),this.end();else{let R=N.readUInt16BE(0);if(!M(R)){let I=this.createError(RangeError,`invalid status code ${R}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");H(I);return}let C=new L(N.buffer,N.byteOffset+2,N.length-2);if(!this._skipUTF8Validation&&!B(C)){let I=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");H(I);return}this._loop=!1,this.emit("conclude",R,C),this.end()}this._state=A;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",N),this._state=A;else this._state=E,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",N),this._state=A,this.startLoop(H)})}createError(N,H,R,C,I){this._loop=!1,this._errored=!0;let x=new N(R?`Invalid WebSocket frame: ${H}`:H);return Error.captureStackTrace(x,this.createError),x.code=I,x[X]=C,x}}Q.exports=P}),c0=F6(($,Q)=>{var{Duplex:Z}=J6("stream"),{randomFillSync:J}=J6("crypto"),Y=L7(),{EMPTY_BUFFER:G,kWebSocket:X,NOOP:z}=q6(),{isBlob:K,isValidStatusCode:V}=U7(),{mask:W,toBuffer:M}=e7(),B=Symbol("kByteLength"),L=Buffer.alloc(4),A=8192,D,q=A,j=0,T=1,_=2;class E{constructor(H,R,C){if(this._extensions=R||{},C)this._generateMask=C,this._maskBuffer=Buffer.alloc(4);this._socket=H,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=j,this.onerror=z,this[X]=void 0}static frame(H,R){let C,I=!1,x=2,U=!1;if(R.mask){if(C=R.maskBuffer||L,R.generateMask)R.generateMask(C);else{if(q===A){if(D===void 0)D=Buffer.alloc(A);J(D,0,A),q=0}C[0]=D[q++],C[1]=D[q++],C[2]=D[q++],C[3]=D[q++]}U=(C[0]|C[1]|C[2]|C[3])===0,x=6}let F;if(typeof H==="string")if((!R.mask||U)&&R[B]!==void 0)F=R[B];else H=Buffer.from(H),F=H.length;else F=H.length,I=R.mask&&R.readOnly&&!U;let k=F;if(F>=65536)x+=8,k=127;else if(F>125)x+=2,k=126;let S=Buffer.allocUnsafe(I?F+x:x);if(S[0]=R.fin?R.opcode|128:R.opcode,R.rsv1)S[0]|=64;if(S[1]=k,k===126)S.writeUInt16BE(F,2);else if(k===127)S[2]=S[3]=0,S.writeUIntBE(F,4,6);if(!R.mask)return[S,H];if(S[1]|=128,S[x-4]=C[0],S[x-3]=C[1],S[x-2]=C[2],S[x-1]=C[3],U)return[S,H];if(I)return W(H,C,S,x,F),[S];return W(H,C,H,0,F),[S,H]}close(H,R,C,I){let x;if(H===void 0)x=G;else if(typeof H!=="number"||!V(H))throw TypeError("First argument must be a valid error code number");else if(R===void 0||!R.length)x=Buffer.allocUnsafe(2),x.writeUInt16BE(H,0);else{let F=Buffer.byteLength(R);if(F>123)throw RangeError("The message must not be greater than 123 bytes");if(x=Buffer.allocUnsafe(2+F),x.writeUInt16BE(H,0),typeof R==="string")x.write(R,2);else x.set(R,2)}let U={[B]:x.length,fin:!0,generateMask:this._generateMask,mask:C,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==j)this.enqueue([this.dispatch,x,!1,U,I]);else this.sendFrame(E.frame(x,U),I)}ping(H,R,C){let I,x;if(typeof H==="string")I=Buffer.byteLength(H),x=!1;else if(K(H))I=H.size,x=!1;else H=M(H),I=H.length,x=M.readOnly;if(I>125)throw RangeError("The data size must not be greater than 125 bytes");let U={[B]:I,fin:!0,generateMask:this._generateMask,mask:R,maskBuffer:this._maskBuffer,opcode:9,readOnly:x,rsv1:!1};if(K(H))if(this._state!==j)this.enqueue([this.getBlobData,H,!1,U,C]);else this.getBlobData(H,!1,U,C);else if(this._state!==j)this.enqueue([this.dispatch,H,!1,U,C]);else this.sendFrame(E.frame(H,U),C)}pong(H,R,C){let I,x;if(typeof H==="string")I=Buffer.byteLength(H),x=!1;else if(K(H))I=H.size,x=!1;else H=M(H),I=H.length,x=M.readOnly;if(I>125)throw RangeError("The data size must not be greater than 125 bytes");let U={[B]:I,fin:!0,generateMask:this._generateMask,mask:R,maskBuffer:this._maskBuffer,opcode:10,readOnly:x,rsv1:!1};if(K(H))if(this._state!==j)this.enqueue([this.getBlobData,H,!1,U,C]);else this.getBlobData(H,!1,U,C);else if(this._state!==j)this.enqueue([this.dispatch,H,!1,U,C]);else this.sendFrame(E.frame(H,U),C)}send(H,R,C){let I=this._extensions[Y.extensionName],x=R.binary?2:1,U=R.compress,F,k;if(typeof H==="string")F=Buffer.byteLength(H),k=!1;else if(K(H))F=H.size,k=!1;else H=M(H),F=H.length,k=M.readOnly;if(this._firstFragment){if(this._firstFragment=!1,U&&I&&I.params[I._isServer?"server_no_context_takeover":"client_no_context_takeover"])U=F>=I._threshold;this._compress=U}else U=!1,x=0;if(R.fin)this._firstFragment=!0;let S={[B]:F,fin:R.fin,generateMask:this._generateMask,mask:R.mask,maskBuffer:this._maskBuffer,opcode:x,readOnly:k,rsv1:U};if(K(H))if(this._state!==j)this.enqueue([this.getBlobData,H,this._compress,S,C]);else this.getBlobData(H,this._compress,S,C);else if(this._state!==j)this.enqueue([this.dispatch,H,this._compress,S,C]);else this.dispatch(H,this._compress,S,C)}getBlobData(H,R,C,I){this._bufferedBytes+=C[B],this._state=_,H.arrayBuffer().then((x)=>{if(this._socket.destroyed){let F=Error("The socket was closed while the blob was being read");process.nextTick(P,this,F,I);return}this._bufferedBytes-=C[B];let U=M(x);if(!R)this._state=j,this.sendFrame(E.frame(U,C),I),this.dequeue();else this.dispatch(U,R,C,I)}).catch((x)=>{process.nextTick(N,this,x,I)})}dispatch(H,R,C,I){if(!R){this.sendFrame(E.frame(H,C),I);return}let x=this._extensions[Y.extensionName];this._bufferedBytes+=C[B],this._state=T,x.compress(H,C.fin,(U,F)=>{if(this._socket.destroyed){let k=Error("The socket was closed while data was being compressed");P(this,k,I);return}this._bufferedBytes-=C[B],this._state=j,C.readOnly=!1,this.sendFrame(E.frame(F,C),I),this.dequeue()})}dequeue(){while(this._state===j&&this._queue.length){let H=this._queue.shift();this._bufferedBytes-=H[3][B],Reflect.apply(H[0],this,H.slice(1))}}enqueue(H){this._bufferedBytes+=H[3][B],this._queue.push(H)}sendFrame(H,R){if(H.length===2)this._socket.cork(),this._socket.write(H[0]),this._socket.write(H[1],R),this._socket.uncork();else this._socket.write(H[0],R)}}Q.exports=E;function P(H,R,C){if(typeof C==="function")C(R);for(let I=0;I<H._queue.length;I++){let x=H._queue[I],U=x[x.length-1];if(typeof U==="function")U(R)}}function N(H,R,C){P(H,R,C),H.onerror(R)}}),u2=F6(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=q6(),Y=Symbol("kCode"),G=Symbol("kData"),X=Symbol("kError"),z=Symbol("kMessage"),K=Symbol("kReason"),V=Symbol("kTarget"),W=Symbol("kType"),M=Symbol("kWasClean");class B{constructor(T){this[V]=null,this[W]=T}get target(){return this[V]}get type(){return this[W]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class L extends B{constructor(T,_={}){super(T);this[Y]=_.code===void 0?0:_.code,this[K]=_.reason===void 0?"":_.reason,this[M]=_.wasClean===void 0?!1:_.wasClean}get code(){return this[Y]}get reason(){return this[K]}get wasClean(){return this[M]}}Object.defineProperty(L.prototype,"code",{enumerable:!0}),Object.defineProperty(L.prototype,"reason",{enumerable:!0}),Object.defineProperty(L.prototype,"wasClean",{enumerable:!0});class A extends B{constructor(T,_={}){super(T);this[X]=_.error===void 0?null:_.error,this[z]=_.message===void 0?"":_.message}get error(){return this[X]}get message(){return this[z]}}Object.defineProperty(A.prototype,"error",{enumerable:!0}),Object.defineProperty(A.prototype,"message",{enumerable:!0});class D extends B{constructor(T,_={}){super(T);this[G]=_.data===void 0?null:_.data}get data(){return this[G]}}Object.defineProperty(D.prototype,"data",{enumerable:!0});var q={addEventListener(T,_,E={}){for(let N of this.listeners(T))if(!E[Z]&&N[J]===_&&!N[Z])return;let P;if(T==="message")P=function(H,R){let C=new D("message",{data:R?H:H.toString()});C[V]=this,j(_,this,C)};else if(T==="close")P=function(H,R){let C=new L("close",{code:H,reason:R.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});C[V]=this,j(_,this,C)};else if(T==="error")P=function(H){let R=new A("error",{error:H,message:H.message});R[V]=this,j(_,this,R)};else if(T==="open")P=function(){let H=new B("open");H[V]=this,j(_,this,H)};else return;if(P[Z]=!!E[Z],P[J]=_,E.once)this.once(T,P);else this.on(T,P)},removeEventListener(T,_){for(let E of this.listeners(T))if(E[J]===_&&!E[Z]){this.removeListener(T,E);break}}};Q.exports={CloseEvent:L,ErrorEvent:A,Event:B,EventTarget:q,MessageEvent:D};function j(T,_,E){if(typeof T==="object"&&T.handleEvent)T.handleEvent.call(T,E);else T.call(_,E)}}),B9=F6(($,Q)=>{var{tokenChars:Z}=U7();function J(X,z,K){if(X[z]===void 0)X[z]=[K];else X[z].push(K)}function Y(X){let z=Object.create(null),K=Object.create(null),V=!1,W=!1,M=!1,B,L,A=-1,D=-1,q=-1,j=0;for(;j<X.length;j++)if(D=X.charCodeAt(j),B===void 0)if(q===-1&&Z[D]===1){if(A===-1)A=j}else if(j!==0&&(D===32||D===9)){if(q===-1&&A!==-1)q=j}else if(D===59||D===44){if(A===-1)throw SyntaxError(`Unexpected character at index ${j}`);if(q===-1)q=j;let _=X.slice(A,q);if(D===44)J(z,_,K),K=Object.create(null);else B=_;A=q=-1}else throw SyntaxError(`Unexpected character at index ${j}`);else if(L===void 0)if(q===-1&&Z[D]===1){if(A===-1)A=j}else if(D===32||D===9){if(q===-1&&A!==-1)q=j}else if(D===59||D===44){if(A===-1)throw SyntaxError(`Unexpected character at index ${j}`);if(q===-1)q=j;if(J(K,X.slice(A,q),!0),D===44)J(z,B,K),K=Object.create(null),B=void 0;A=q=-1}else if(D===61&&A!==-1&&q===-1)L=X.slice(A,j),A=q=-1;else throw SyntaxError(`Unexpected character at index ${j}`);else if(W){if(Z[D]!==1)throw SyntaxError(`Unexpected character at index ${j}`);if(A===-1)A=j;else if(!V)V=!0;W=!1}else if(M)if(Z[D]===1){if(A===-1)A=j}else if(D===34&&A!==-1)M=!1,q=j;else if(D===92)W=!0;else throw SyntaxError(`Unexpected character at index ${j}`);else if(D===34&&X.charCodeAt(j-1)===61)M=!0;else if(q===-1&&Z[D]===1){if(A===-1)A=j}else if(A!==-1&&(D===32||D===9)){if(q===-1)q=j}else if(D===59||D===44){if(A===-1)throw SyntaxError(`Unexpected character at index ${j}`);if(q===-1)q=j;let _=X.slice(A,q);if(V)_=_.replace(/\\/g,""),V=!1;if(J(K,L,_),D===44)J(z,B,K),K=Object.create(null),B=void 0;L=void 0,A=q=-1}else throw SyntaxError(`Unexpected character at index ${j}`);if(A===-1||M||D===32||D===9)throw SyntaxError("Unexpected end of input");if(q===-1)q=j;let T=X.slice(A,q);if(B===void 0)J(z,T,K);else{if(L===void 0)J(K,T,!0);else if(V)J(K,L,T.replace(/\\/g,""));else J(K,L,T);J(z,B,K)}return z}function G(X){return Object.keys(X).map((z)=>{let K=X[z];if(!Array.isArray(K))K=[K];return K.map((V)=>{return[z].concat(Object.keys(V).map((W)=>{let M=V[W];if(!Array.isArray(M))M=[M];return M.map((B)=>B===!0?W:`${W}=${B}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:G,parse:Y}}),N9=F6(($,Q)=>{var Z=J6("events"),J=J6("https"),Y=J6("http"),G=J6("net"),X=J6("tls"),{randomBytes:z,createHash:K}=J6("crypto"),{Duplex:V,Readable:W}=J6("stream"),{URL:M}=J6("url"),B=L7(),L=g0(),A=c0(),{isBlob:D}=U7(),{BINARY_TYPES:q,CLOSE_TIMEOUT:j,EMPTY_BUFFER:T,GUID:_,kForOnEventAttribute:E,kListener:P,kStatusCode:N,kWebSocket:H,NOOP:R}=q6(),{EventTarget:{addEventListener:C,removeEventListener:I}}=u2(),{format:x,parse:U}=B9(),{toBuffer:F}=e7(),k=Symbol("kAborted"),S=[8,13],u=["CONNECTING","OPEN","CLOSING","CLOSED"],g=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class f extends Z{constructor(O,w,c){super();if(this._binaryType=q[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=T,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=f.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,O!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,w===void 0)w=[];else if(!Array.isArray(w))if(typeof w==="object"&&w!==null)c=w,w=[];else w=[w];e(this,O,w,c)}else this._autoPong=c.autoPong,this._closeTimeout=c.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(O){if(!q.includes(O))return;if(this._binaryType=O,this._receiver)this._receiver._binaryType=O}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(O,w,c){let i=new L({allowSynchronousEvents:c.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:c.maxPayload,skipUTF8Validation:c.skipUTF8Validation}),v=new A(O,this._extensions,c.generateMask);if(this._receiver=i,this._sender=v,this._socket=O,i[H]=this,v[H]=this,O[H]=this,i.on("conclude",y),i.on("drain",b),i.on("error",p),i.on("message",$6),i.on("ping",Q6),i.on("pong",a),v.onerror=K6,O.setTimeout)O.setTimeout(0);if(O.setNoDelay)O.setNoDelay();if(w.length>0)O.unshift(w);O.on("close",O6),O.on("data",l),O.on("end",V6),O.on("error",L6),this._readyState=f.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=f.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=f.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(O,w){if(this.readyState===f.CLOSED)return;if(this.readyState===f.CONNECTING){G6(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===f.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=f.CLOSING,this._sender.close(O,w,!this._isServer,(c)=>{if(c)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),M6(this)}pause(){if(this.readyState===f.CONNECTING||this.readyState===f.CLOSED)return;this._paused=!0,this._socket.pause()}ping(O,w,c){if(this.readyState===f.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")c=O,O=w=void 0;else if(typeof w==="function")c=w,w=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==f.OPEN){m(this,O,c);return}if(w===void 0)w=!this._isServer;this._sender.ping(O||T,w,c)}pong(O,w,c){if(this.readyState===f.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")c=O,O=w=void 0;else if(typeof w==="function")c=w,w=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==f.OPEN){m(this,O,c);return}if(w===void 0)w=!this._isServer;this._sender.pong(O||T,w,c)}resume(){if(this.readyState===f.CONNECTING||this.readyState===f.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(O,w,c){if(this.readyState===f.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof w==="function")c=w,w={};if(typeof O==="number")O=O.toString();if(this.readyState!==f.OPEN){m(this,O,c);return}let i={binary:typeof O!=="string",mask:!this._isServer,compress:!0,fin:!0,...w};if(!this._extensions[B.extensionName])i.compress=!1;this._sender.send(O||T,i,c)}terminate(){if(this.readyState===f.CLOSED)return;if(this.readyState===f.CONNECTING){G6(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=f.CLOSING,this._socket.destroy()}}Object.defineProperty(f,"CONNECTING",{enumerable:!0,value:u.indexOf("CONNECTING")}),Object.defineProperty(f.prototype,"CONNECTING",{enumerable:!0,value:u.indexOf("CONNECTING")}),Object.defineProperty(f,"OPEN",{enumerable:!0,value:u.indexOf("OPEN")}),Object.defineProperty(f.prototype,"OPEN",{enumerable:!0,value:u.indexOf("OPEN")}),Object.defineProperty(f,"CLOSING",{enumerable:!0,value:u.indexOf("CLOSING")}),Object.defineProperty(f.prototype,"CLOSING",{enumerable:!0,value:u.indexOf("CLOSING")}),Object.defineProperty(f,"CLOSED",{enumerable:!0,value:u.indexOf("CLOSED")}),Object.defineProperty(f.prototype,"CLOSED",{enumerable:!0,value:u.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((O)=>{Object.defineProperty(f.prototype,O,{enumerable:!0})}),["open","error","close","message"].forEach((O)=>{Object.defineProperty(f.prototype,`on${O}`,{enumerable:!0,get(){for(let w of this.listeners(O))if(w[E])return w[P];return null},set(w){for(let c of this.listeners(O))if(c[E]){this.removeListener(O,c);break}if(typeof w!=="function")return;this.addEventListener(O,w,{[E]:!0})}})}),f.prototype.addEventListener=C,f.prototype.removeEventListener=I,Q.exports=f;function e(O,w,c,i){let v={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:j,protocolVersion:S[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...i,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(O._autoPong=v.autoPong,O._closeTimeout=v.closeTimeout,!S.includes(v.protocolVersion))throw RangeError(`Unsupported protocol version: ${v.protocolVersion} (supported versions: ${S.join(", ")})`);let r;if(w instanceof M)r=w;else try{r=new M(w)}catch{throw SyntaxError(`Invalid URL: ${w}`)}if(r.protocol==="http:")r.protocol="ws:";else if(r.protocol==="https:")r.protocol="wss:";O._url=r.href;let u6=r.protocol==="wss:",g6=r.protocol==="ws+unix:",Z7;if(r.protocol!=="ws:"&&!u6&&!g6)Z7=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(g6&&!r.pathname)Z7="The URL's pathname is empty";else if(r.hash)Z7="The URL contains a fragment identifier";if(Z7){let o=SyntaxError(Z7);if(O._redirects===0)throw o;else{t(O,o);return}}let P9=u6?443:80,q9=z(16).toString("base64"),I9=u6?J.request:Y.request,J7=new Set,Y7;if(v.createConnection=v.createConnection||(u6?Y6:W6),v.defaultPort=v.defaultPort||P9,v.port=r.port||P9,v.host=r.hostname.startsWith("[")?r.hostname.slice(1,-1):r.hostname,v.headers={...v.headers,"Sec-WebSocket-Version":v.protocolVersion,"Sec-WebSocket-Key":q9,Connection:"Upgrade",Upgrade:"websocket"},v.path=r.pathname+r.search,v.timeout=v.handshakeTimeout,v.perMessageDeflate)Y7=new B({...v.perMessageDeflate,isServer:!1,maxPayload:v.maxPayload}),v.headers["Sec-WebSocket-Extensions"]=x({[B.extensionName]:Y7.offer()});if(c.length){for(let o of c){if(typeof o!=="string"||!g.test(o)||J7.has(o))throw SyntaxError("An invalid or duplicated subprotocol was specified");J7.add(o)}v.headers["Sec-WebSocket-Protocol"]=c.join(",")}if(v.origin)if(v.protocolVersion<13)v.headers["Sec-WebSocket-Origin"]=v.origin;else v.headers.Origin=v.origin;if(r.username||r.password)v.auth=`${r.username}:${r.password}`;if(g6){let o=v.path.split(":");v.socketPath=o[0],v.path=o[1]}let Z6;if(v.followRedirects){if(O._redirects===0){O._originalIpc=g6,O._originalSecure=u6,O._originalHostOrSocketPath=g6?v.socketPath:r.host;let o=i&&i.headers;if(i={...i,headers:{}},o)for(let[B6,c6]of Object.entries(o))i.headers[B6.toLowerCase()]=c6}else if(O.listenerCount("redirect")===0){let o=g6?O._originalIpc?v.socketPath===O._originalHostOrSocketPath:!1:O._originalIpc?!1:r.host===O._originalHostOrSocketPath;if(!o||O._originalSecure&&!u6){if(delete v.headers.authorization,delete v.headers.cookie,!o)delete v.headers.host;v.auth=void 0}}if(v.auth&&!i.headers.authorization)i.headers.authorization="Basic "+Buffer.from(v.auth).toString("base64");if(Z6=O._req=I9(v),O._redirects)O.emit("redirect",O.url,Z6)}else Z6=O._req=I9(v);if(v.timeout)Z6.on("timeout",()=>{G6(O,Z6,"Opening handshake has timed out")});if(Z6.on("error",(o)=>{if(Z6===null||Z6[k])return;Z6=O._req=null,t(O,o)}),Z6.on("response",(o)=>{let B6=o.headers.location,c6=o.statusCode;if(B6&&v.followRedirects&&c6>=300&&c6<400){if(++O._redirects>v.maxRedirects){G6(O,Z6,"Maximum redirects exceeded");return}Z6.abort();let G7;try{G7=new M(B6,w)}catch(x9){let m6=SyntaxError(`Invalid URL: ${B6}`);t(O,m6);return}e(O,G7,c,i)}else if(!O.emit("unexpected-response",Z6,o))G6(O,Z6,`Unexpected server response: ${o.statusCode}`)}),Z6.on("upgrade",(o,B6,c6)=>{if(O.emit("upgrade",o),O.readyState!==f.CONNECTING)return;Z6=O._req=null;let G7=o.headers.upgrade;if(G7===void 0||G7.toLowerCase()!=="websocket"){G6(O,B6,"Invalid Upgrade header");return}let x9=K("sha1").update(q9+_).digest("base64");if(o.headers["sec-websocket-accept"]!==x9){G6(O,B6,"Invalid Sec-WebSocket-Accept header");return}let m6=o.headers["sec-websocket-protocol"],X7;if(m6!==void 0){if(!J7.size)X7="Server sent a subprotocol but none was requested";else if(!J7.has(m6))X7="Server sent an invalid subprotocol"}else if(J7.size)X7="Server sent no subprotocol";if(X7){G6(O,B6,X7);return}if(m6)O._protocol=m6;let w9=o.headers["sec-websocket-extensions"];if(w9!==void 0){if(!Y7){G6(O,B6,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let X8;try{X8=U(w9)}catch(W8){G6(O,B6,"Invalid Sec-WebSocket-Extensions header");return}let S9=Object.keys(X8);if(S9.length!==1||S9[0]!==B.extensionName){G6(O,B6,"Server indicated an extension that was not requested");return}try{Y7.accept(X8[B.extensionName])}catch(W8){G6(O,B6,"Invalid Sec-WebSocket-Extensions header");return}O._extensions[B.extensionName]=Y7}O.setSocket(B6,c6,{allowSynchronousEvents:v.allowSynchronousEvents,generateMask:v.generateMask,maxPayload:v.maxPayload,skipUTF8Validation:v.skipUTF8Validation})}),v.finishRequest)v.finishRequest(Z6,O);else Z6.end()}function t(O,w){O._readyState=f.CLOSING,O._errorEmitted=!0,O.emit("error",w),O.emitClose()}function W6(O){return O.path=O.socketPath,G.connect(O)}function Y6(O){if(O.path=void 0,!O.servername&&O.servername!=="")O.servername=G.isIP(O.host)?"":O.host;return X.connect(O)}function G6(O,w,c){O._readyState=f.CLOSING;let i=Error(c);if(Error.captureStackTrace(i,G6),w.setHeader){if(w[k]=!0,w.abort(),w.socket&&!w.socket.destroyed)w.socket.destroy();process.nextTick(t,O,i)}else w.destroy(i),w.once("error",O.emit.bind(O,"error")),w.once("close",O.emitClose.bind(O))}function m(O,w,c){if(w){let i=D(w)?w.size:F(w).length;if(O._socket)O._sender._bufferedBytes+=i;else O._bufferedAmount+=i}if(c){let i=Error(`WebSocket is not open: readyState ${O.readyState} (${u[O.readyState]})`);process.nextTick(c,i)}}function y(O,w){let c=this[H];if(c._closeFrameReceived=!0,c._closeMessage=w,c._closeCode=O,c._socket[H]===void 0)return;if(c._socket.removeListener("data",l),process.nextTick(n,c._socket),O===1005)c.close();else c.close(O,w)}function b(){let O=this[H];if(!O.isPaused)O._socket.resume()}function p(O){let w=this[H];if(w._socket[H]!==void 0)w._socket.removeListener("data",l),process.nextTick(n,w._socket),w.close(O[N]);if(!w._errorEmitted)w._errorEmitted=!0,w.emit("error",O)}function d(){this[H].emitClose()}function $6(O,w){this[H].emit("message",O,w)}function Q6(O){let w=this[H];if(w._autoPong)w.pong(O,!this._isServer,R);w.emit("ping",O)}function a(O){this[H].emit("pong",O)}function n(O){O.resume()}function K6(O){let w=this[H];if(w.readyState===f.CLOSED)return;if(w.readyState===f.OPEN)w._readyState=f.CLOSING,M6(w);if(this._socket.end(),!w._errorEmitted)w._errorEmitted=!0,w.emit("error",O)}function M6(O){O._closeTimer=setTimeout(O._socket.destroy.bind(O._socket),O._closeTimeout)}function O6(){let O=this[H];if(this.removeListener("close",O6),this.removeListener("data",l),this.removeListener("end",V6),O._readyState=f.CLOSING,!this._readableState.endEmitted&&!O._closeFrameReceived&&!O._receiver._writableState.errorEmitted&&this._readableState.length!==0){let w=this.read(this._readableState.length);O._receiver.write(w)}if(O._receiver.end(),this[H]=void 0,clearTimeout(O._closeTimer),O._receiver._writableState.finished||O._receiver._writableState.errorEmitted)O.emitClose();else O._receiver.on("error",d),O._receiver.on("finish",d)}function l(O){if(!this[H]._receiver.write(O))this.pause()}function V6(){let O=this[H];O._readyState=f.CLOSING,O._receiver.end(),this.end()}function L6(){let O=this[H];if(this.removeListener("error",L6),this.on("error",R),O)O._readyState=f.CLOSING,this.destroy()}}),g2=F6(($,Q)=>{var Z=N9(),{Duplex:J}=J6("stream");function Y(K){K.emit("close")}function G(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function X(K){if(this.removeListener("error",X),this.destroy(),this.listenerCount("error")===0)this.emit("error",K)}function z(K,V){let W=!0,M=new J({...V,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return K.on("message",function(L,A){let D=!A&&M._readableState.objectMode?L.toString():L;if(!M.push(D))K.pause()}),K.once("error",function(L){if(M.destroyed)return;W=!1,M.destroy(L)}),K.once("close",function(){if(M.destroyed)return;M.push(null)}),M._destroy=function(B,L){if(K.readyState===K.CLOSED){L(B),process.nextTick(Y,M);return}let A=!1;if(K.once("error",function(q){A=!0,L(q)}),K.once("close",function(){if(!A)L(B);process.nextTick(Y,M)}),W)K.terminate()},M._final=function(B){if(K.readyState===K.CONNECTING){K.once("open",function(){M._final(B)});return}if(K._socket===null)return;if(K._socket._writableState.finished){if(B(),M._readableState.endEmitted)M.destroy()}else K._socket.once("finish",function(){B()}),K.close()},M._read=function(){if(K.isPaused)K.resume()},M._write=function(B,L,A){if(K.readyState===K.CONNECTING){K.once("open",function(){M._write(B,L,A)});return}K.send(B,A)},M.on("end",G),M.on("error",X),M}Q.exports=z}),m0=F6(($,Q)=>{var{tokenChars:Z}=U7();function J(Y){let G=new Set,X=-1,z=-1,K=0;for(K;K<Y.length;K++){let W=Y.charCodeAt(K);if(z===-1&&Z[W]===1){if(X===-1)X=K}else if(K!==0&&(W===32||W===9)){if(z===-1&&X!==-1)z=K}else if(W===44){if(X===-1)throw SyntaxError(`Unexpected character at index ${K}`);if(z===-1)z=K;let M=Y.slice(X,z);if(G.has(M))throw SyntaxError(`The "${M}" subprotocol is duplicated`);G.add(M),X=z=-1}else throw SyntaxError(`Unexpected character at index ${K}`)}if(X===-1||z!==-1)throw SyntaxError("Unexpected end of input");let V=Y.slice(X,K);if(G.has(V))throw SyntaxError(`The "${V}" subprotocol is duplicated`);return G.add(V),G}Q.exports={parse:J}}),c2=F6(($,Q)=>{var Z=J6("events"),J=J6("http"),{Duplex:Y}=J6("stream"),{createHash:G}=J6("crypto"),X=B9(),z=L7(),K=m0(),V=N9(),{CLOSE_TIMEOUT:W,GUID:M,kWebSocket:B}=q6(),L=/^[+/0-9A-Za-z]{22}==$/,A=0,D=1,q=2;class j extends Z{constructor(H,R){super();if(H={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:W,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:V,...H},H.port==null&&!H.server&&!H.noServer||H.port!=null&&(H.server||H.noServer)||H.server&&H.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(H.port!=null)this._server=J.createServer((C,I)=>{let x=J.STATUS_CODES[426];I.writeHead(426,{"Content-Length":x.length,"Content-Type":"text/plain"}),I.end(x)}),this._server.listen(H.port,H.host,H.backlog,R);else if(H.server)this._server=H.server;if(this._server){let C=this.emit.bind(this,"connection");this._removeListeners=T(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(I,x,U)=>{this.handleUpgrade(I,x,U,C)}})}if(H.perMessageDeflate===!0)H.perMessageDeflate={};if(H.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=H,this._state=A}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(H){if(this._state===q){if(H)this.once("close",()=>{H(Error("The server is not running"))});process.nextTick(_,this);return}if(H)this.once("close",H);if(this._state===D)return;if(this._state=D,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(_,this);else this._shouldEmitClose=!0;else process.nextTick(_,this)}else{let R=this._server;this._removeListeners(),this._removeListeners=this._server=null,R.close(()=>{_(this)})}}shouldHandle(H){if(this.options.path){let R=H.url.indexOf("?");if((R!==-1?H.url.slice(0,R):H.url)!==this.options.path)return!1}return!0}handleUpgrade(H,R,C,I){R.on("error",E);let x=H.headers["sec-websocket-key"],U=H.headers.upgrade,F=+H.headers["sec-websocket-version"];if(H.method!=="GET"){N(this,H,R,405,"Invalid HTTP method");return}if(U===void 0||U.toLowerCase()!=="websocket"){N(this,H,R,400,"Invalid Upgrade header");return}if(x===void 0||!L.test(x)){N(this,H,R,400,"Missing or invalid Sec-WebSocket-Key header");return}if(F!==13&&F!==8){N(this,H,R,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(H)){P(R,400);return}let k=H.headers["sec-websocket-protocol"],S=new Set;if(k!==void 0)try{S=K.parse(k)}catch(f){N(this,H,R,400,"Invalid Sec-WebSocket-Protocol header");return}let u=H.headers["sec-websocket-extensions"],g={};if(this.options.perMessageDeflate&&u!==void 0){let f=new z({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let e=X.parse(u);if(e[z.extensionName])f.accept(e[z.extensionName]),g[z.extensionName]=f}catch(e){N(this,H,R,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={origin:H.headers[`${F===8?"sec-websocket-origin":"origin"}`],secure:!!(H.socket.authorized||H.socket.encrypted),req:H};if(this.options.verifyClient.length===2){this.options.verifyClient(f,(e,t,W6,Y6)=>{if(!e)return P(R,t||401,W6,Y6);this.completeUpgrade(g,x,S,H,R,C,I)});return}if(!this.options.verifyClient(f))return P(R,401)}this.completeUpgrade(g,x,S,H,R,C,I)}completeUpgrade(H,R,C,I,x,U,F){if(!x.readable||!x.writable)return x.destroy();if(x[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>A)return P(x,503);let S=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${G("sha1").update(R+M).digest("base64")}`],u=new this.options.WebSocket(null,void 0,this.options);if(C.size){let g=this.options.handleProtocols?this.options.handleProtocols(C,I):C.values().next().value;if(g)S.push(`Sec-WebSocket-Protocol: ${g}`),u._protocol=g}if(H[z.extensionName]){let g=H[z.extensionName].params,f=X.format({[z.extensionName]:[g]});S.push(`Sec-WebSocket-Extensions: ${f}`),u._extensions=H}if(this.emit("headers",S,I),x.write(S.concat(`\r
|
|
35
35
|
`).join(`\r
|
|
36
|
-
`)),
|
|
37
|
-
`+Object.keys(
|
|
36
|
+
`)),x.removeListener("error",E),u.setSocket(x,U,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(u),u.on("close",()=>{if(this.clients.delete(u),this._shouldEmitClose&&!this.clients.size)process.nextTick(_,this)});F(u,I)}}Q.exports=j;function T(H,R){for(let C of Object.keys(R))H.on(C,R[C]);return function(){for(let I of Object.keys(R))H.removeListener(I,R[I])}}function _(H){H._state=q,H.emit("close")}function E(){this.destroy()}function P(H,R,C,I){C=C||J.STATUS_CODES[R],I={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(C),...I},H.once("finish",H.destroy),H.end(`HTTP/1.1 ${R} ${J.STATUS_CODES[R]}\r
|
|
37
|
+
`+Object.keys(I).map((x)=>`${x}: ${I[x]}`).join(`\r
|
|
38
38
|
`)+`\r
|
|
39
39
|
\r
|
|
40
|
-
`+
|
|
41
|
-
${
|
|
40
|
+
`+C)}function N(H,R,C,I,x,U){if(H.listenerCount("wsClientError")){let F=Error(x);Error.captureStackTrace(F,N),H.emit("wsClientError",F,C,R)}else P(C,I,x,U)}});CG=P6(g2(),1),OG=P6(B9(),1),LG=P6(L7(),1),UG=P6(g0(),1),jG=P6(c0(),1),_G=P6(m0(),1),J1=P6(N9(),1),t0=P6(c2(),1),h0=J1.default;F1={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},R1={"Network.requestWillBeSent":{walltime:"wallTime"}},C1={hasUserGesture:!1,redirectHasExtraInfo:!1},O1={hasExtraInfo:!1},L1={encodedDataLength:0,shouldReportCorbBlocking:!1},U1={initialPriority:"Medium",referrerPolicy:"origin"},j1={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};S1={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};v1={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:""};d1=["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"],n1={"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:[]}};o1={"&":"&","<":"<",">":">",'"':""","'":"'"}});import{readdirSync as HJ,readFileSync as MJ,existsSync as A4,unlinkSync as BJ,watch as NJ}from"fs";import{execSync as D7,spawn as FJ,exec as RJ,execFile as h6}from"child_process";import{tmpdir as CJ}from"os";import{dirname as OJ,join as P7}from"path";import{fileURLToPath as LJ}from"url";import{createServer as UJ}from"net";import{createHash as jJ,randomBytes as _J,timingSafeEqual as AJ}from"crypto";import{WebSocket as z4}from"ws";var V8="Accessibility unavailable on this simulator.";import{createRequire as l4}from"module";import{dirname as I7,join as x7}from"path";import{existsSync as p4}from"fs";import{fileURLToPath as k9}from"url";var d4=l4(import.meta.url),n4=0,i4=1,o4=1,a4=2,K7={portrait:1,portraitUpsideDown:2,landscapeRight:3,landscapeLeft:4};function y9(){let $=[x7(I7(process.execPath),"native","serve-sim-native.node"),x7(I7(k9(import.meta.url)),"native","serve-sim-native.node"),x7(I7(k9(import.meta.url)),"..","dist","native","serve-sim-native.node")];for(let Q of $)if(p4(Q))return Q;throw Error(`serve-sim-native.node not found. Looked in:
|
|
41
|
+
${$.join(`
|
|
42
42
|
`)}
|
|
43
|
-
Run \`bun run build.ts\` to build the native addon.`)}var
|
|
43
|
+
Run \`bun run build.ts\` to build the native addon.`)}var z8;function w7(){if(!z8)z8=d4(y9());return z8}class H8{handle;constructor($){this.handle=new(w7()).SimHID($,x7(I7(y9()),"..","simduo","serve-sim-duo-hid"))}async guard($,Q,Z){try{return await Q()}catch(J){return console.error(`[hid] ${$} ignored bad input:`,J instanceof Error?J.message:J),Z}}touch($,Q,Z,J,Y,G=0){return this.guard("touch",()=>this.handle.touch($,Q,Z,J,Y,G),void 0)}multiTouch($,Q,Z,J,Y,G,X){return this.guard("multiTouch",()=>this.handle.multiTouch($,Q,Z,J,Y,G,X),void 0)}button($){return this.guard("button",()=>this.handle.button($),void 0)}buttonHid($,Q,Z="press"){return this.guard("buttonHid",()=>this.handle.buttonHid($,Q,Z),void 0)}key($,Q){return this.guard("key",()=>this.handle.key($,Q),void 0)}scroll($,Q,Z,J,Y,G){return this.guard("scroll",()=>this.handle.scroll($,Q,Y??NaN,G??NaN,Z,J),void 0)}digitalCrown($){return this.guard("digitalCrown",()=>this.handle.digitalCrown($),void 0)}orientation($){return this.guard("orientation",()=>this.handle.orientation($),!1)}memoryWarning(){return this.guard("memoryWarning",()=>this.handle.memoryWarning(),void 0)}softwareKeyboard(){return this.guard("softwareKeyboard",()=>this.handle.softwareKeyboard(),void 0)}caDebug($,Q){return this.guard("caDebug",()=>this.handle.caDebug($,Q),!1)}isFoldable(){return this.guard("isFoldable",()=>this.handle.isFoldable(),!1)}close(){return this.guard("close",()=>this.handle.close(),void 0)}pose($,Q){return this.guard("pose",()=>this.handle.pose($,Q),!1)}hinge($){return this.guard("hinge",()=>this.handle.hinge($),!1)}}class M8{handle;constructor($){this.handle=new(w7()).SimCapture($)}start(){return this.handle.start()}setPreferredScreenSize($,Q){return this.handle.setPreferredScreenSize($,Q)}subscribeMjpeg($){return this.handle.subscribe(n4,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J})})}subscribeAvcc($){return this.handle.subscribe(i4,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J,isDescription:(Y&o4)!==0,isKeyframe:(Y&a4)!==0})})}stop(){return this.handle.stop()}}function S7($){return w7().axDescribe($)}function k7($){return w7().axFrontmost($)}var B8=500,f9=500,r4=2000,t4=15000;function s4($){return $[0]?.frame??{x:0,y:0,width:1,height:1}}function e4($,Q){return Math.abs($.x-Q.x)<0.5&&Math.abs($.y-Q.y)<0.5&&Math.abs($.width-Q.width)<0.5&&Math.abs($.height-Q.height)<0.5}function $5($){let Q=s4($),Z=[],J=(Y,G)=>{if(Z.length>=B8)return;let X=Y.frame;if(!e4(X,Q))Z.push({id:Y.AXUniqueId??G,path:G,label:Y.AXLabel??"",value:Y.AXValue??"",role:Y.role_description,type:Y.type,enabled:Y.enabled!==!1,frame:X});for(let K=0;K<Y.children.length&&Z.length<B8;K++)J(Y.children[K],`${G}.${K}`)};for(let Y=0;Y<$.length&&Z.length<B8;Y++)J($[Y],String(Y));return{screen:{width:Q.width,height:Q.height},elements:Z}}async function Q5($){let Q;try{Q=JSON.parse(await S7($))}catch{return{screen:{width:1,height:1},elements:[],errors:[V8]}}return $5(Q)}function Z5($){return $?.errors?.includes(V8)??!1}function J5($){return $.elements.length>0&&$.screen.width>1&&$.screen.height>1}async function Y5($){let Q=[];try{let Z=await Q5($);if(Z.errors?.length)return Z;if(!J5(Z))throw Error(`native AX returned ${Z.elements.length} elements in ${Z.screen.width}x${Z.screen.height} AX space`);return{...Z,errors:Q}}catch(Z){Q.push(Z.message||String(Z))}return{screen:{width:1,height:1},elements:[],errors:Q}}function G5($){return`data: ${JSON.stringify($)}
|
|
44
44
|
|
|
45
|
-
`}function
|
|
46
|
-
`);if(
|
|
47
|
-
`)})}function
|
|
48
|
-
`,"ascii");function
|
|
45
|
+
`}function X5({udid:$}){let Q=new Set,Z=null,J=null,Y=f9,G=!1,X=!1,z=()=>{if(X||Q.size===0||Z)return;Z=setTimeout(K,Y)},K=async()=>{if(Z=null,X||G||Q.size===0){z();return}G=!0;try{let V=await Y5($),W=G5(V);if(W!==J){for(let M of Q)M.write(W);Y=f9}else Y=Math.min(Y*2,r4);if(J=W,Z5(V))Y=t4}finally{G=!1,z()}};return{addClient(V){if(X)return()=>{};if(Q.add(V),J)V.write(J);return K(),()=>{if(Q.delete(V),Q.size===0&&Z)clearTimeout(Z),Z=null}},dispose(){if(X)return;if(X=!0,Z)clearTimeout(Z),Z=null;Q.clear(),J=null}}}function b9(){let $=new Map;return{get(Q){let Z=$.get(Q);if(Z)return Z;let J=X5({udid:Q});return $.set(Q,J),J},prune(Q){let Z=Q instanceof Set?Q:new Set(Q);for(let[J,Y]of $)if(!Z.has(J))Y.dispose(),$.delete(J)},size(){return $.size}}}import{createHash as M5}from"crypto";import{existsSync as h9,readFileSync as u9}from"fs";import{join as N8}from"path";import{tmpdir as W5}from"os";import{join as y7}from"path";import{chmodSync as L3,closeSync as U3,lstatSync as j3,mkdirSync as K5,openSync as _3,readdirSync as A3,readFileSync as T3,renameSync as V5,unlinkSync as D3,writeFileSync as z5,writeSync as E3}from"fs";var l6=y7(W5(),"serve-sim"),P3=y7(l6,"server.json");function H5($){return y7(l6,`server-${$}.json`)}function v9($,Q,Z="/",J="127.0.0.1"){let Y=J==="0.0.0.0"||J==="::"?"127.0.0.1":J,G=Z.replace(/^\/+/,"").replace(/\/+$/,""),X=G===""?"":`/${G}`;return{pid:process.pid,port:Q,device:$,url:`http://${Y}:${Q}`,streamUrl:`http://${Y}:${Q}${X}/helper/${$}/stream.mjpeg`,wsUrl:`ws://${Y}:${Q}${X}/helper/${$}/ws`}}function f7($){K5(l6,{recursive:!0});let Q=H5($.device),Z=`${Q}.${process.pid}.tmp`;z5(Z,JSON.stringify($,null,2)),V5(Z,Q)}var q3=y7(l6,"exec-tokens");var g9=N8(l6,"simcam"),B5=3000;function N5($){return N8(g9,`${$}.pid`)}function F5($){return N8(g9,`${$}.bundles.json`)}function c9($){return`/tmp/serve-sim-cam-${M5("sha1").update($).digest("hex").slice(0,12)}.sock`}function R5($){try{return process.kill($,0),!0}catch{return!1}}function F8($){try{let Q=Number(u9(N5($),"utf-8").trim());return Number.isInteger(Q)&&Q>0?Q:null}catch{return null}}function C5($){if(!$||typeof $!=="object"||Array.isArray($))throw Error("invalid camera helper reply");return $}async function O5($,Q){let Z=c9($);if(!h9(Z))throw Error("camera helper socket not found");let J=await import("net");return new Promise((Y,G)=>{let X=J.createConnection(Z);X.setEncoding("utf8");let z="",K=!1,V,W=(M,B)=>{if(K)return;if(K=!0,V)clearTimeout(V);if(M)G(M);else Y(B??{})};X.on("data",(M)=>{z+=M;let B=z.indexOf(`
|
|
46
|
+
`);if(B<0)return;try{W(void 0,C5(JSON.parse(z.slice(0,B))))}catch(L){W(L)}X.end()}),X.on("error",W),X.on("close",()=>W(Error("socket closed"))),V=setTimeout(()=>{X.destroy(),W(Error("helper timeout"))},B5),X.write(JSON.stringify(Q)+`
|
|
47
|
+
`)})}function L5($){let Q=F8($);return Q!==null&&R5(Q)&&h9(c9($))}function U5($){let Q;try{let J=JSON.parse(u9(F5($),"utf-8"));if(!J||typeof J!=="object"||Array.isArray(J))return[];let Y=J;if(typeof Y.helperPid!=="number"||!Array.isArray(Y.bundleIds))return[];Q={helperPid:Y.helperPid,bundleIds:Y.bundleIds}}catch{return[]}let Z=F8($);if(Z===null||Q.helperPid!==Z)return[];return Q.bundleIds.filter((J)=>typeof J==="string")}async function m9($){if(!L5($))return{udid:$,alive:!1};let Q=F8($),Z=U5($);try{return{...await O5($,{action:"status"}),udid:$,alive:!0,helperPid:Q,bundleIds:Z}}catch(J){return{udid:$,alive:!0,helperPid:Q,bundleIds:Z,error:J instanceof Error?J.message:String(J)}}}import{execFile as j5}from"node:child_process";import{promisify as _5}from"node:util";var A5=_5(j5),T5=async($)=>(await A5("/usr/bin/xcrun",$,{timeout:5000})).stdout,l9="com.apple.coredevice.dtuhidd.active";function D5($){return $.trim()===`${l9} 1`}async function p9($,Q=T5){try{if(D5(await Q(["simctl","spawn",$,"notifyutil","-g",l9])))console.warn(`[hid] Device Hub has disconnected legacy input. Run serve-sim repair-input -d ${$} before using touch or keyboard. Repair restarts SpringBoard and closes running apps.`)}catch{}}function d9($){let Q="prefix",Z=Buffer.allocUnsafe(4),J=Z,Y=0,G;return{push(X){let z=0;while(z<X.length){let K=Math.min(X.length-z,J.length-Y);if(X.copy(J,Y,z,z+K),z+=K,Y+=K,Y!==J.length)continue;if(Y=0,Q==="prefix"){let V=Z.readUInt32BE(0);if(V<1||V>65536)throw Error("Invalid Duo render header");J=Buffer.allocUnsafe(V),Q="header"}else if(Q==="header"){let{jpegLength:V,...W}=JSON.parse(J.toString());if(!Number.isInteger(V)||V<1||V>32000000)throw Error("Invalid Duo render frame");G=W,J=Buffer.allocUnsafe(V),Q="frame"}else{let V=J;J=Z,Q="prefix",$({jpeg:V,projection:G})}}}}}import{spawn as E5,execFileSync as P5}from"node:child_process";import{existsSync as n9}from"node:fs";import{dirname as i9,join as V7}from"node:path";import{fileURLToPath as q5}from"node:url";class R8{child;pending;closed=!1;constructor(){let $=V7("simduo","serve-sim-duo-render"),Q=i9(q5(import.meta.url)),Z=[V7(i9(process.execPath),$),V7(Q,$),V7(Q,"..","dist",$)].find(n9);if(!Z)throw Error("Duo renderer is missing. Rebuild serve-sim.");let J=process.env.DEVELOPER_DIR??P5("/usr/bin/xcode-select",["-p"],{encoding:"utf8"}).trim(),Y=V7(J,"..","SharedFrameworks/DeviceKit.framework/Versions/A/PlugIns/CoreDevicePopDeviceKitExtension.devicekitplugin/Contents/Resources/V68.usdz");if(!n9(Y))throw Error("The selected Xcode does not include the iPhone Duo 3D model.");this.child=E5(Z,[Y],{stdio:"pipe"}),this.child.stderr.on("data",(X)=>console.error("[duo-renderer]",X.toString().trim())),this.child.on("error",(X)=>this.fail(X)),this.child.stdin.on("error",(X)=>this.fail(X)),this.child.on("exit",()=>this.fail(Error("Duo renderer exited")));let G=d9((X)=>{let z=this.pending;if(this.pending=void 0,z)clearTimeout(z.timer),z.resolve(X)});this.child.stdout.on("data",(X)=>{try{G.push(X)}catch(z){this.fail(z instanceof Error?z:Error(String(z)))}})}render($,Q,Z,J,Y=!1){if(this.closed||this.pending)return Promise.reject(Error("Duo renderer is unavailable or busy"));return new Promise((G,X)=>{let z=setTimeout(()=>this.fail(Error("Duo renderer timed out")),1e4);this.pending={resolve:G,reject:X,timer:z};let K=Buffer.from(JSON.stringify({jpegLength:$.length,panel:Q,hingeDegrees:Z,rollDegrees:J,fullResolution:Y})),V=Buffer.alloc(4);V.writeUInt32BE(K.length),this.child.stdin.write(Buffer.concat([V,K,$]))})}fail($){let Q=this.pending;if(this.pending=void 0,Q)clearTimeout(Q.timer),Q.reject($);this.close()}close(){if(this.closed)return;this.closed=!0,this.child.stdin.end(),this.child.kill();let $=this.pending;if(this.pending=void 0,$)clearTimeout($.timer),$.reject(Error("Duo renderer closed"))}}var C8=800,I5=300,o9=180,x5=Buffer.from(`\r
|
|
48
|
+
`,"ascii");function w5($){let Q=new Uint8Array($.byteLength);return Q.set($),Q}function S5($,Q){if($.byteLength!==Q.byteLength)return!1;return Buffer.from($.buffer,$.byteOffset,$.byteLength).equals(Buffer.from(Q.buffer,Q.byteOffset,Q.byteLength))}function k5($,Q,Z=C8){let J=Math.min(1,Math.max(0,(Q-$.began)/Z));if(J>=1)return $.target;return $.from+($.target-$.from)*(1-(1-J)**3)}class O8{options;renderer;projection;busy=!1;pending=!1;pendingSharpen=!1;settleTimer;rendering;cached;delivered=new WeakSet;foldTimer;rotationTimer;fold;hingeDegrees;viewRoll=0;viewOrientation="portrait";panel="cover";jpeg=null;closed=!1;responses=new Set;constructor($){this.options=$}get hinge(){return this.hingeDegrees}get viewOrientationName(){return this.viewOrientation}noteHinge($,Q=performance.now()){this.hingeDegrees=$;let Z=this.fold;if(Z&&Q>=Z.began+C8&&Math.abs($-Z.target)<0.6)this.fold=void 0}beginPose($,Q,Z=performance.now()){clearTimeout(this.foldTimer),this.fold={from:$,target:Q,began:Z},this.tickFold(Z)}cancelPose(){clearTimeout(this.foldTimer),this.fold=void 0,this.requestFrame()}finishPose($){clearTimeout(this.foldTimer),this.fold=void 0,this.hingeDegrees=$,this.requestFrame()}displayAngle($=performance.now()){let Q=this.fold;if(!Q)return this.hingeDegrees??0;return k5(Q,$)}setPanel($){this.panel=$}onCapturedFrame($){this.jpeg=$,this.requestFrame()}projectionFrame(){if(!this.projection)return null;return Buffer.concat([Buffer.from([131]),Buffer.from(JSON.stringify(this.projection))])}animateRotation($){clearTimeout(this.rotationTimer),this.viewOrientation=$;let Q={portrait:0,landscape_left:-90,portrait_upside_down:-180,landscape_right:90}[$]??0,Z=this.viewRoll,J=(Q-Z+540)%360-180,Y=performance.now(),G=()=>{if(this.closed)return;let X=Math.min(1,(performance.now()-Y)/I5),z=X*X*(3-2*X);if(this.viewRoll=X===1?Q:Z+J*z,this.requestFrame(),X<1)this.rotationTimer=setTimeout(G,16)};G()}attach($){if(!this.renderer)this.renderer=this.options.createRenderer(),this.busy=!1;this.responses.add($),this.requestFrame()}detach($){if(this.responses.delete($),this.responses.size)return;clearTimeout(this.settleTimer),this.settleTimer=void 0,this.renderer?.close(),this.renderer=void 0}close(){this.closed=!0,clearTimeout(this.settleTimer),this.settleTimer=void 0,clearTimeout(this.foldTimer),clearTimeout(this.rotationTimer),this.fold=void 0,this.cached=void 0,this.renderer?.close(),this.renderer=void 0,this.responses.clear()}requestFrame($=!1){let Q=this.renderer,Z=this.jpeg;if(this.closed||!this.responses.size||!Q||!Z||this.hingeDegrees==null&&!this.fold)return;let J=this.panel,Y=this.viewRoll,G=this.displayAngle(),X=this.sameFrame(Z,J,G,Y,this.cached)||this.sameFrame(Z,J,G,Y,this.rendering),z=this.cached?.sharpened===!0&&this.sameFrame(Z,J,G,Y,this.cached);if(z)clearTimeout(this.settleTimer),this.settleTimer=void 0;else if(!$&&!X)clearTimeout(this.settleTimer),this.settleTimer=setTimeout(()=>this.requestFrame(!0),o9),this.settleTimer.unref?.();else if(!$&&!this.settleTimer)this.settleTimer=setTimeout(()=>this.requestFrame(!0),o9),this.settleTimer.unref?.();if(!this.busy&&this.sameFrame(Z,J,G,Y,this.cached)&&(z||!$)){this.publishCached();return}if(this.busy){if(this.pending=!0,$)this.pendingSharpen=!0;else if(!X)this.pendingSharpen=!1;return}if(this.busy=!0,this.pending=!1,this.pendingSharpen=!1,$)clearTimeout(this.settleTimer),this.settleTimer=void 0;let K=w5(Z);this.rendering={jpeg:K,panel:J,angle:G,roll:Y},Q.render(K,J,G,Y,$).then(({jpeg:V,projection:W})=>{if(this.closed||this.renderer!==Q)return;if(JSON.stringify(this.projection)!==JSON.stringify(W))this.projection=W,this.options.onProjection(Buffer.concat([Buffer.from([131]),Buffer.from(JSON.stringify(W))]));this.cached={jpeg:K,panel:J,angle:G,roll:Y,png:V,sharpened:$},this.delivered=new WeakSet,this.publishCached()}).catch((V)=>{if(this.renderer!==Q)return;for(let W of this.responses)this.options.onStreamError(W,V);Q.close(),this.renderer=void 0}).finally(()=>{if(this.renderer!==Q)return;if(this.rendering=void 0,this.busy=!1,this.pending){let V=this.pendingSharpen;this.pending=!1,this.pendingSharpen=!1,this.requestFrame(V)}})}sameFrame($,Q,Z,J,Y){return Y!=null&&Y.panel===Q&&Y.angle===Z&&Y.roll===J&&S5(Y.jpeg,$)}publishCached(){let $=this.cached?.png;if(!$)return;for(let Q of this.responses){if(this.delivered.has(Q))continue;if(!Q.destroyed&&!Q.writableEnded&&Q.writableLength===0)this.writeFrame(Q,$),this.delivered.add(Q)}}tickFold($=performance.now()){if(clearTimeout(this.foldTimer),this.closed||!this.fold)return;if(this.requestFrame(),$<this.fold.began+C8)this.foldTimer=setTimeout(()=>this.tickFold(),16),this.foldTimer.unref?.()}writeFrame($,Q){let Z=Buffer.from(`--frame\r
|
|
49
49
|
Content-Type: image/png\r
|
|
50
|
-
Content-Length: ${
|
|
50
|
+
Content-Length: ${Q.length}\r
|
|
51
51
|
\r
|
|
52
|
-
`,"ascii")
|
|
53
|
-
`);Y=
|
|
54
|
-
`).reverse().find((K)=>
|
|
55
|
-
`)
|
|
56
|
-
`,"ascii"),
|
|
52
|
+
`,"ascii");$.write(Z),$.write(Q),$.write(x5)}}import{execFile as a9,spawn as r9}from"node:child_process";function y5($){if(!/AngleValid:Y\b/.test($))return null;let Q=/\bAngle:\s*(-?[\d.]+)°/.exec($),Z=Q?Number(Q[1]):NaN;return Number.isFinite(Z)&&Z>=0&&Z<=180?Z:null}function f5($){let Q={},Z={Portrait:"portrait","Portrait Upside Down":"portrait_upside_down","Landscape Left":"landscape_left","Landscape Right":"landscape_right"};for(let J of $.split(/(?=^\s*\(\d+\)[^\n]*:)/m)){if(!/^\s*Screen Type:\s*Integrated\s*$/m.test(J))continue;let Y=/^\s*Device Name:\s*(\S+)/m.exec(J)?.[1],G=Z[/^\s*UI Orientation:\s*([^\r\n]+)/m.exec(J)?.[1]?.trim()??""];if(!G)continue;if(Y==="primary")Q.cover=G;if(Y==="primary-1")Q.inner=G}return Q}function L8($){if(!/\[(?:com\.apple\.SpringBoard:)?DisplayContentMode\]/.test($))return null;if(/\.cover:pri\b/.test($))return"cover";if(/\.inner:pri\b/.test($))return"inner";return null}class U8{udid;onState;stopped=!1;monitor;enumeration;panelMonitor;panelSeed;panelRetry;retry;poll;state={orientations:{}};constructor($,Q){this.udid=$;this.onState=Q;this.watchPanels(),this.watchHinge(),this.refreshOrientation()}refreshOrientation(){if(this.stopped||this.enumeration)return;if(this.poll)clearTimeout(this.poll);this.enumeration=a9("/usr/bin/xcrun",["simctl","io",this.udid,"enumerate"],{timeout:3000,maxBuffer:1048576},($,Q)=>{if(this.enumeration=void 0,this.stopped)return;if(!$){let Z=f5(Q);if(JSON.stringify(Z)!==JSON.stringify(this.state.orientations))this.state={...this.state,orientations:Z},this.onState(this.state)}this.poll=setTimeout(()=>this.refreshOrientation(),1000),this.poll.unref()})}watchPanels(){if(this.stopped)return;let $='process == "SpringBoard" AND category == "DisplayContentMode" AND (eventMessage CONTAINS ".cover:pri" OR eventMessage CONTAINS ".inner:pri")',Q=!1,Z=(G)=>{let X=L8(G);if(!X||this.stopped)return;if(X===this.state.primaryPanel)return;this.state={...this.state,primaryPanel:X},this.onState(this.state),this.refreshOrientation()},J=r9("/usr/bin/xcrun",["simctl","spawn",this.udid,"log","stream","--style","compact","--predicate",$],{stdio:["ignore","pipe","ignore"]});this.panelMonitor=J;let Y="";J.stdout.setEncoding("utf8"),J.stdout.on("data",(G)=>{Y+=G;let X=Y.split(`
|
|
53
|
+
`);Y=X.pop().slice(-4096);for(let z of X){if(L8(z))Q=!0;Z(z)}}),this.panelSeed=a9("/usr/bin/xcrun",["simctl","spawn",this.udid,"log","show","--last","boot","--style","compact","--predicate",$],{timeout:1e4,maxBuffer:4194304},(G,X)=>{if(this.panelSeed=void 0,!G&&!Q){let z=X.split(`
|
|
54
|
+
`).reverse().find((K)=>L8(K));if(z)Z(z)}}),J.on("error",()=>{}),J.once("close",()=>{if(this.panelMonitor===J)this.panelMonitor=void 0;if(this.stopped)return;this.panelRetry=setTimeout(()=>this.watchPanels(),1000),this.panelRetry.unref()})}watchHinge(){if(this.stopped)return;let $=r9("/usr/bin/xcrun",["devicectl","device","motion","hinge-angle","--device",this.udid,"--session-timeout","60","--timeout","65","--change-threshold","0.5"],{stdio:["ignore","pipe","ignore"]});this.monitor=$;let Q="";$.stdout.setEncoding("utf8"),$.stdout.on("data",(Z)=>{Q+=Z;let J=Q.split(`
|
|
55
|
+
`);Q=J.pop().slice(-4096);for(let Y of J){let G=y5(Y);if(this.stopped||G==null||G===this.state.hingeDegrees)continue;this.state={...this.state,hingeDegrees:G},this.onState(this.state),this.refreshOrientation()}}),$.on("error",()=>{}),$.once("close",()=>{if(this.monitor===$)this.monitor=void 0;if(this.stopped)return;this.retry=setTimeout(()=>this.watchHinge(),1000),this.retry.unref()})}close(){this.stopped=!0,clearTimeout(this.panelRetry),this.panelMonitor?.kill(),this.panelSeed?.kill(),clearTimeout(this.retry),clearTimeout(this.poll),this.monitor?.kill(),this.enumeration?.kill()}}var t9={width:1398,height:2034},s9={width:2007,height:2853};var b5=[["closed","Closed",0],["tent","Tent",80],["tabletop","Table",100],["book","Book",130],["open","Open",180]].map(([$,Q,Z])=>v5($,Q,Z));function v5($,Q,Z){let J=Z<90,Y=J?t9:s9;return{id:$,label:Q,hingeDegrees:Z,coverActive:J,width:Y.width,height:Y.height}}function b7($){let Q=$.trim().toLowerCase();if(Q==="cover")return b7("closed");if(Q==="inner"||Q==="openflat"||Q==="flat")return b7("open");return b5.find((Z)=>Z.id===Q)??null}function e9($){if($.primaryPanel)return $.primaryPanel;return($.hingeDegrees??0)<90?"cover":"inner"}function $$($){let Q=$==="cover",Z=Q?t9:s9;return{coverActive:Q,width:Z.width,height:Z.height}}var h5={40:"Enter",41:"Escape",42:"Backspace",43:"Tab",44:"Space",45:"-",46:"=",47:"[",48:"]",49:"\\",50:"#",51:";",52:"'",53:"`",54:",",55:".",56:"/",57:"CapsLock",58:"F1",59:"F2",60:"F3",61:"F4",62:"F5",63:"F6",64:"F7",65:"F8",66:"F9",67:"F10",68:"F11",69:"F12",70:"PrintScreen",71:"ScrollLock",72:"Pause",73:"Insert",74:"Home",75:"PageUp",76:"Delete",77:"End",78:"PageDown",79:"ArrowRight",80:"ArrowLeft",81:"ArrowDown",82:"ArrowUp",83:"NumLock",84:"NumpadDivide",85:"NumpadMultiply",86:"NumpadSubtract",87:"NumpadAdd",88:"NumpadEnter",89:"Numpad1",90:"Numpad2",91:"Numpad3",92:"Numpad4",93:"Numpad5",94:"Numpad6",95:"Numpad7",96:"Numpad8",97:"Numpad9",98:"Numpad0",99:"NumpadDecimal",224:"ControlLeft",225:"ShiftLeft",226:"AltLeft",227:"MetaLeft",228:"ControlRight",229:"ShiftRight",230:"AltRight",231:"MetaRight"},u5=1,U6=[],_8=new Set;function Z$($){for(let Q of _8)try{Q($)}catch{}}function A6($){let Q={...$,id:u5++,timestamp:$.timestamp??new Date().toISOString(),msg:$.msg??$.summary};if(U6.push(Q),U6.length>500)U6=U6.slice(U6.length-500);return Z$(Q),Q}function T8($,Q,Z={}){let J=U6.findIndex((G)=>G.id===$);if(J<0)return null;let Y={...U6[J],...Q,id:$,...Q.summary!=null&&Q.msg==null?{msg:Q.summary}:{}};if(U6[J]=Y,Z.notify!==!1)Z$(Y);return Y}function D8($={}){let{device:Q,sinceId:Z}=$,J=g5($.limit),Y=U6.filter((G)=>{if(Q&&G.device!==Q)return!1;if(Z!=null&&G.id<=Z)return!1;return!0});return Y.slice(Math.max(0,Y.length-J))}function J$($){return _8.add($),()=>_8.delete($)}function Y$($,Q,Z,J){let Y=c5(Z);if(!Y)return null;switch(Q){case 3:{let G=I6(Y.type),X=p6(Y.x),z=p6(Y.y);if(!G||X==null||z==null)return null;return{device:$,source:"hid",kind:"touch",action:G,summary:`Touch ${G} ${d6(X,z)}`,details:j8({...Y,x:X,y:z},J)}}case 4:{let G=I6(Y.button);if(!G)return null;let X=I6(Y.phase)??"press";return{device:$,source:"hid",kind:"button",action:G,summary:X==="press"?`Button ${G}`:`Button ${G} ${X}`,details:{...Y,phase:X}}}case 5:{let G=I6(Y.type);if(!G)return null;return{device:$,source:"hid",kind:"multi-touch",action:G,summary:`Multi-touch ${G}`,details:j8(Y,J)}}case 6:{let G=I6(Y.type),X=p6(Y.usage);if(!G||X==null)return null;let z=l5(X),K=p5(X),V={...Y};if(K)delete V.usage,V.key="character",V.redacted=!0;else V.usage=X,V.key=z;return{device:$,source:"hid",kind:"key",action:G,summary:K?`Key ${G} character`:`Key ${G} ${z}`,details:V}}case 7:{let G=I6(Y.orientation);if(!G)return null;return{device:$,source:"hid",kind:"rotate",action:G,summary:`Rotate ${G}`,details:Y}}case 8:{let G=I6(Y.option),X=m5(Y.enabled);if(!G||X==null)return null;return{device:$,source:"hid",kind:"ca-debug",action:G,summary:`CoreAnimation ${G} ${X?"on":"off"}`,details:{...Y,enabled:X}}}case 9:return{device:$,source:"hid",kind:"memory-warning",action:"trigger",summary:"Memory warning"};case 10:{let G=p6(Y.delta);if(G==null)return null;return{device:$,source:"hid",kind:"digital-crown",action:"rotate",summary:`Digital Crown ${G>0?"up":"down"}`,details:{...Y,delta:G}}}case 11:{let G=p6(Y.dx),X=p6(Y.dy);if(G==null||X==null)return null;return{device:$,source:"hid",kind:"scroll",action:"wheel",summary:`Scroll ${d5(G,X)}`,details:j8({...Y,dx:G,dy:X},J)}}case 12:return{device:$,source:"hid",kind:"software-keyboard",action:"toggle",summary:"Software keyboard"};default:return null}}function G$($,Q){let Z=i5($);if(Z.length===0)return null;if(o5(Z))return null;let J=X$(Q?.exitCode),Y=n5(Q),G=a5(Z);if(G){let{verb:z,args:K}=G;if(z==="install"&&K.length>=2){let[V]=K;return{device:V,source:"exec",kind:"app",action:"install",status:J,summary:"Install app",details:Y}}if(z==="addmedia"&&K.length>=2){let[V]=K;return{device:V,source:"exec",kind:"media",action:"addmedia",status:J,summary:"Add media",details:Y}}if(z==="launch"&&K.length>=2){let[V,W]=K,M=W==="com.apple.springboard";return{device:V,source:"exec",kind:M?"button":"app",action:M?"home":"launch",status:J,summary:M?"Home":`Launch ${W}`,details:{...Y,bundleId:W}}}if(z==="terminate"&&K.length>=2){let[V,W]=K;return{device:V,source:"exec",kind:"app",action:"terminate",status:J,summary:`Terminate ${W}`,details:{...Y,bundleId:W}}}if(z==="io"&&K.length>=2&&K[1]==="screenshot")return{device:K[0],source:"exec",kind:"screenshot",action:"capture",status:J,summary:"Screenshot",details:Y}}let X=r5(Z);if(X){let{verb:z,args:K}=X,V=t5(K);if(z==="button"){let W=z7(K)??"home";return{device:V,source:"exec",kind:"button",action:W,status:J,summary:`Button ${W}`,details:Y}}if(z==="tap"){let[W,M]=K;return{device:V,source:"exec",kind:"tap",action:"tap",status:J,summary:`Tap ${d6(Number(W),Number(M))}`,details:Y}}if(z==="gesture")return{device:V,source:"exec",kind:"gesture",action:"send",status:J,summary:"Gesture",details:Y};if(z==="rotate"){let W=z7(K);return{device:V,source:"exec",kind:"rotate",action:W,status:J,summary:W?`Rotate ${W}`:"Rotate",details:Y}}if(z==="memory-warning")return{device:V,source:"exec",kind:"memory-warning",action:"trigger",status:J,summary:"Memory warning",details:Y};if(z==="ca-debug"){let W=z7(K),M=K.find((B)=>B==="on"||B==="off");return{device:V,source:"exec",kind:"ca-debug",action:W,status:J,summary:`CoreAnimation ${W??"debug"}${M?` ${M}`:""}`,details:Y}}if(z==="camera"){let W=e5(K);if(W==="status"||W==="list-webcams")return null;return{device:V,source:"exec",kind:"camera",action:W??"start",status:J,summary:W?`Camera ${W}`:"Camera",details:Y}}if(z==="ui"){let W=z7(K);return{device:V,source:"exec",kind:"ui-setting",action:W,status:J,summary:W?`UI ${W}`:"UI setting",details:Y}}}if(Z[0]==="osascript"&&$.includes('menu item "Home"'))return{source:"exec",kind:"button",action:"home",status:J,summary:"Home",details:Y};return null}function g5($){if(!Number.isFinite($??NaN))return 500;return Math.min(500,Math.max(1,Math.floor($)))}function c5($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function I6($){return typeof $==="string"&&$.length>0?$:null}function p6($){return typeof $==="number"&&Number.isFinite($)?$:null}function m5($){return typeof $==="boolean"?$:null}function l5($){if($>=4&&$<=29)return String.fromCharCode(97+$-4);if($>=30&&$<=38)return String($-29);if($===39)return"0";return h5[$]??`usage ${$}`}function p5($){return $>=4&&$<=39||$>=44&&$<=56||$>=84&&$<=87||$>=89&&$<=99}function j8($,Q){if(!Q||Q.width<=0||Q.height<=0)return $;return{...$,screen:Q}}function d6($,Q){if(!Number.isFinite($)||!Number.isFinite(Q))return"";return`${A8($)},${A8(Q)}`}function d5($,Q){return`${Q$($)},${Q$(Q)}`}function A8($){return $.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function Q$($){let Q=A8($);return $>0?`+${Q}`:Q}function X$($){if($==null)return;return $===0?"ok":"error"}function n5($){return X$($?.exitCode)?{exitCode:$?.exitCode}:{}}function i5($){let Q=[],Z="",J=null,Y=!1;for(let G of $){if(Y){Z+=G,Y=!1;continue}if(G==="\\"&&J!=="'"){Y=!0;continue}if((G==="'"||G==='"')&&J===null){J=G;continue}if(G===J){J=null;continue}if(/\s/.test(G)&&J===null){if(Z)Q.push(Z),Z="";continue}Z+=G}if(Z)Q.push(Z);return Q}function o5($){if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("echo "))return!0;if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("rm -f "))return!0;if($[0]==="rm"&&$[1]==="-f")return!0;return!1}function a5($){let Q=$.findIndex((J)=>J==="simctl");if(Q<0||$[Q-1]!=="xcrun")return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function r5($){let Q=$.findIndex((J)=>J==="serve-sim"||/(?:^|\/)serve-sim(?:\.js)?$/.test(J));if(Q<0)return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function t5($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if((Z==="-d"||Z==="--device")&&$[Q+1])return $[Q+1]}return}function z7($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if(Z==="-d"||Z==="--device"){Q++;continue}if(Z.startsWith("-"))continue;return Z}return}function s5($){if($.includes("--list-webcams"))return"list-webcams";if($.includes("--stop-webcam"))return"stop-webcam";return z7($)}function e5($){let Q=s5($);if(Q==="status"||Q==="list-webcams"||Q==="stop-webcam")return Q;return"start"}var $Q=4,QQ=130,ZQ=Buffer.from(`\r
|
|
56
|
+
`,"ascii"),W$=1000,JQ=0.004;function v7($){return`Drag ${d6($.startX,$.startY)} -> ${d6($.lastX,$.lastY)}`}function K$($){let Q=$.lastX-$.startX,Z=$.lastY-$.startY;return Math.hypot(Q,Z)>JQ}function V$($){return{startX:$.x,startY:$.y,lastX:$.x,lastY:$.y,moveCount:0,edge:$.edge}}function YQ($){return Buffer.from(`--frame\r
|
|
57
57
|
Content-Type: image/jpeg\r
|
|
58
|
-
Content-Length: ${
|
|
58
|
+
Content-Length: ${$}\r
|
|
59
59
|
\r
|
|
60
|
-
`,"ascii")}function _0(Q){let $=Buffer.allocUnsafe(5+Q.length);return $.writeUInt32BE(Q.length+1,0),$[4]=M0,$.set(Q,5),$}var C0={portrait:v7.portrait,portrait_upside_down:v7.portraitUpsideDown,landscape_left:v7.landscapeLeft,landscape_right:v7.landscapeRight};function h6(Q){if(Q.writableEnded||Q.destroyed||!Q.writableNeedDrain)return Promise.resolve();return new Promise(($)=>{let Z=()=>{J(),$()},J=()=>{Q.off("drain",Z),Q.off("close",Z),Q.off("error",Z)};Q.once("drain",Z),Q.once("close",Z),Q.once("error",Z)})}async function u6(Q,$){if(await h6(Q),Q.writableEnded||Q.destroyed)return!1;if(!$()||Q.writableNeedDrain)await h6(Q);return!Q.writableEnded&&!Q.destroyed}class g6{udid;dependencies;capture;hid;unsubscribeMjpeg;phase="unstarted";startPromise;width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;duo;duoMonitor;followedCover;primaryDuoPanel;poseQueue=Promise.resolve();duoStateQueue=Promise.resolve();streamResponses=new Set;touchGestureLog;constructor(Q,$){this.udid=Q;this.dependencies=$;this.hid=$?.hid??new hQ(Q),this.capture=$?.capture??new uQ(Q),this.duo=new nQ({createRenderer:()=>$?.createDuoRenderer?.()??new mQ,onProjection:(Z)=>{for(let J of this.hidSockets)J.send(Z)},onStreamError:(Z,J)=>this.handleStreamError(Z,J)})}start(){if(this.phase==="stopped")return Promise.reject(Error(`Device session ${this.udid} is closed`));if(this.startPromise)return this.startPromise;this.phase="starting";let Q=(async()=>{if(await this.capture.start(),this.isStopped())throw Error(`Device session ${this.udid} closed while starting`);let $=await this.capture.subscribeMjpeg((Z)=>this.onSharedMjpegFrame(Z));if(this.isStopped())throw await $(),Error(`Device session ${this.udid} closed while starting`);if(this.unsubscribeMjpeg=$,this.phase="running",await this.hid.isFoldable?.()&&!this.isStopped()){if(!this.dependencies?.createDuoMonitor)_6(this.udid);let Z=this.dependencies?.createDuoMonitor??((J,Y)=>new oQ(J,Y));this.duoMonitor=Z(this.udid,(J)=>{this.followDuoState(J).catch((Y)=>{console.error("[duo] State update failed:",Y)})})}})().catch(($)=>{if(this.phase==="starting")this.phase="failed";throw $});return Q.catch(()=>{}),this.startPromise=Q,Q}isStopped(){return this.phase==="stopped"}close(){if(this.phase==="stopped")return;this.phase="stopped",this.duo.close(),this.duoMonitor?.close();for(let Q of this.hidSockets)this.runCleanup("HID socket close",()=>Q.close());for(let Q of this.streamResponses)this.runCleanup("stream response close",()=>{Q.destroy()});if(this.streamResponses.clear(),this.unsubscribeMjpeg)this.runCleanup("shared MJPEG unsubscribe",this.unsubscribeMjpeg);this.hidSockets.clear(),this.runCleanup("HID close",()=>this.hid.close?.()),this.runCleanup("capture stop",()=>this.capture.stop())}followDuoState(Q){let $=this.duoStateQueue.then(()=>this.applyDuoState(Q));return this.duoStateQueue=$.catch(()=>{}),$}activePanel(){return P6({primaryPanel:this.primaryDuoPanel,hingeDegrees:this.duo.hinge})}async applyDuoState(Q){if(this.isStopped())return;if(Q.hingeDegrees!=null)this.duo.noteHinge(Q.hingeDegrees);if(Q.primaryPanel)this.primaryDuoPanel=Q.primaryPanel;let $=this.activePanel(),Z=q6($);if((Q.hingeDegrees!=null||Q.primaryPanel)&&$==="cover"!==this.followedCover)await this.capture.setPreferredScreenSize(Z.width,Z.height),this.followedCover=$==="cover";let J=Q.orientations[$];if(J)this.orientation=J;this.duo.setPanel($),this.broadcastConfig(),this.duo.requestFrame()}async onSharedMjpegFrame(Q){let{width:$,height:Z,data:J}=Q;if($!==this.width||Z!==this.height)this.width=$,this.height=Z,this.broadcastConfig();if(!this.latestJpegBuffer||this.latestJpegBuffer.length<J.length){let X=this.latestJpegBuffer?.length??0;this.latestJpegBuffer=Buffer.allocUnsafe(Math.max(J.length,X*2))}this.latestJpegBuffer.set(J,0),this.latestJpegLength=J.length;let Y=this.latestJpeg();if(Y)this.duo.onCapturedFrame(Y)}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}writeMjpegFrame(Q,$){let Z=Q.write(O0($.length)),J=Q.write($),Y=Q.write(B0);return Z&&J&&Y}handleDuoMjpeg(Q,$){(async()=>{if(await this.start(),$.destroyed||$.writableEnded)return;if(!await this.hid.isFoldable?.()){this.sendJson($,400,{error:"This device has no Duo model"});return}let Z=new URL(Q.url??"","http://x").searchParams.get("raw")==="1";$.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-store",...HQ}),this.trackStreamResponse($),this.duo.setPanel(this.activePanel()),this.duo.attach($),$.once("close",()=>this.duo.detach($))})().catch((Z)=>this.handleStreamError($,Z))}handleMjpeg(Q,$){this.serveMjpeg(Q,$).catch((Z)=>this.handleStreamError($,Z))}async serveMjpeg(Q,$){if(await this.start(),$.writableEnded||$.destroyed)return;let Z=new URL(Q.url??"","http://x").searchParams.get("raw")==="1";if($.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...HQ}),!this.trackStreamResponse($))return;let J=!1,Y=0,X=async(V)=>{if(J||$.writableEnded||$.destroyed)return;J=!0;try{if(await u6($,()=>this.writeMjpegFrame($,V)))Y=Date.now()}catch(z){if(!$.destroyed)$.destroy(z instanceof Error?z:Error(String(z)))}finally{J=!1}},G=this.latestJpeg();if(G)await X(Buffer.from(G));let N=await this.capture.subscribeMjpeg(async(V)=>{await X(V.data)}),K=setInterval(()=>{if($.writableEnded||$.destroyed)return;if(Date.now()-Y<f6)return;let V=this.latestJpeg();if(V)X(Buffer.from(V))},f6);this.bindSubscription($,async()=>{clearInterval(K),await N()})}handleAvcc(Q,$){this.serveAvcc($).catch((Z)=>this.handleStreamError($,Z))}async serveAvcc(Q){if(await this.start(),Q.writableEnded||Q.destroyed)return;if(Q.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...HQ}),!this.trackStreamResponse(Q))return;let $=this.latestJpeg();if($)Q.write(_0($));let Z=await this.capture.subscribeAvcc(async(J)=>{await u6(Q,()=>Q.write(J.data))});this.bindSubscription(Q,Z)}handleConfig(Q,$){this.sendJson($,200,this.screenConfig())}handleHealth(Q,$){this.sendJson($,200,{status:"ok"})}handleAx(Q,$){return this.serveAxJson($,()=>KQ(this.udid),"ax_unavailable")}handleForeground(Q,$){return this.serveAxJson($,()=>VQ(this.udid),"foreground_unavailable")}async serveAxJson(Q,$,Z){try{let J=await $();if(Q.writableEnded)return;this.sendJsonString(Q,200,J)}catch(J){if(Q.writableEnded)return;this.sendJson(Q,503,{error:Z,message:J instanceof Error?J.message:String(J)})}}attachHidSocket(Q){this.hidSockets.add(Q);let $=this.configFrame(),Z=this.duo.projectionFrame();if(Z)Q.send(Z);if($)Q.send($);Q.on("message",(J)=>{let Y=Buffer.isBuffer(J)?J:Buffer.from(J);if(Y[0]===14)this.poseQueue=this.poseQueue.then(async()=>{if(this.isStopped())return;let X=!1;try{X=await this.handleHidMessage(Y)===!0}catch(G){console.error("[hid] Pose failed:",G)}if(this.hidSockets.has(Q))Q.send(Buffer.concat([Buffer.from([14]),Buffer.from(JSON.stringify({ok:X}))]))}).catch((X)=>{console.error("[hid] Pose reply failed:",X)});else this.handleHidMessage(Y).catch((X)=>{console.error("[hid] Input failed:",X)})}),Q.on("close",()=>this.hidSockets.delete(Q)),Q.on("error",()=>this.hidSockets.delete(Q))}async handleHidMessage(Q){if(Q.length<1)return;let $=Q[0],Z=Q.length>1?Q.subarray(1):null,J=()=>{if(!Z)return null;try{return JSON.parse(Z.toString("utf8"))}catch{return null}},Y=this.width,X=this.height;switch($){case 3:{let G=J();if(G)this.recordTouchEvent(G),this.hid.touch(G.type,G.x,G.y,Y,X,G.edge??0);break}case 4:{let G=J();if(!G)break;if(this.recordHidEvent($,G),G.page!=null&&G.usage!=null)this.hid.buttonHid(G.page,G.usage,G.phase??"press");else this.hid.button(G.button);break}case 5:{let G=J();if(G)this.recordHidEvent($,G),this.hid.multiTouch(G.type,G.x1,G.y1,G.x2,G.y2,Y,X);break}case 6:{let G=J();if(G)this.recordHidEvent($,G),this.hid.key(G.type,G.usage);break}case 7:{let G=J();if(!G)break;let N=C0[G.orientation];if(N!=null&&await this.hid.orientation(N)){if(this.recordHidEvent($,G),G.orientation!==this.orientation||G.orientation!==this.duo.viewOrientationName){if(this.duo.hinge==null)this.orientation=G.orientation;this.duo.animateRotation(G.orientation),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame()}}break}case 8:{let G=J();if(G)this.recordHidEvent($,G),this.hid.caDebug(G.option,G.enabled);break}case 9:this.recordHidEvent($,{}),this.hid.memoryWarning();break;case 10:{let G=J();if(G)this.recordHidEvent($,G),this.hid.digitalCrown(G.delta);break}case 11:{let G=J();if(G)this.recordHidEvent($,G),this.hid.scroll(G.dx*Y,G.dy*X,Y,X,G.x,G.y);break}case 12:this.recordHidEvent($,{}),this.hid.softwareKeyboard();break;case 13:{let G=J();if(!G)break;let N=Number(G.width),K=Number(G.height);if(!Number.isFinite(N)||!Number.isFinite(K))break;this.recordHidEvent($,G),await this.capture.setPreferredScreenSize(Math.round(N),Math.round(K));break}case 14:{let G=J();if(!G)break;if(this.recordHidEvent($,G),typeof G.pose==="string"&&G.pose.trim()){let N=zQ(G.pose);if(!N)break;let K=this.duo.displayAngle();if(this.duo.beginPose(K,N.hingeDegrees),!await this.hid.pose(G.pose,K)){this.duo.cancelPose();break}return this.duo.finishPose(N.hingeDegrees),await this.followDuoState({hingeDegrees:N.hingeDegrees,orientations:{}}),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame(),!0}else if(typeof G.hinge==="number"&&Number.isFinite(G.hinge)&&G.hinge>=0&&G.hinge<=180){if(!await this.hid.hinge(G.hinge))break;return this.duo.cancelPose(),await this.followDuoState({hingeDegrees:G.hinge,orientations:{}}),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame(),!0}break}}}recordTouchEvent(Q){if(Q.type==="begin"){this.touchGestureLog=v6(Q);return}if(Q.type==="move"){let $=this.touchGestureLog;if(!$)$=v6(Q),this.touchGestureLog=$;if($.lastX=Q.x,$.lastY=Q.y,$.moveCount++,Q.edge!=null)$.edge=Q.edge;if(b6($))if($.eventId==null){let Z=Y7({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:NQ($),details:this.touchGestureDetails($,"drag","move")});$.eventId=Z.id}else sQ($.eventId,{kind:"drag",action:"drag",summary:NQ($),details:this.touchGestureDetails($,"drag","move")},{notify:!1});return}if(Q.type==="end"){let $=this.touchGestureLog;if($){if($.lastX=Q.x,$.lastY=Q.y,Q.edge!=null)$.edge=Q.edge;if($.moveCount>0&&b6($))if($.eventId==null)Y7({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:NQ($),details:this.touchGestureDetails($,"drag","end")});else sQ($.eventId,{kind:"drag",action:"drag",summary:NQ($),details:this.touchGestureDetails($,"drag","end")});else Y7({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${j7(Q.x,Q.y)}`,details:this.touchGestureDetails($,"tap")});this.touchGestureLog=void 0;return}}this.recordHidEvent(3,Q)}eventLogScreen(){return this.width>0&&this.height>0?{width:this.width,height:this.height}:void 0}touchGestureDetails(Q,$,Z){return{type:$,...Z?{phase:Z}:{},start:{x:Q.startX,y:Q.startY},current:{x:Q.lastX,y:Q.lastY},moveCount:Q.moveCount,...Q.edge!=null?{edge:Q.edge}:{},...this.eventLogScreen()?{screen:this.eventLogScreen()}:{}}}recordHidEvent(Q,$){let Z=S6(this.udid,Q,$,this.eventLogScreen());if(Z)Y7(Z)}screenConfig(){let Q=this.duo.hinge;return{width:this.width,height:this.height,orientation:this.orientation,...Q==null?{}:{hingeDegrees:Q,duoViewOrientation:this.duo.viewOrientationName}}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([F0]),Buffer.from(JSON.stringify(this.screenConfig()))])}broadcastConfig(){let Q=this.configFrame();if(!Q)return;for(let $ of this.hidSockets)$.send(Q)}bindSubscription(Q,$){let Z=!1,J=()=>{if(Z)return;Z=!0,this.streamResponses.delete(Q),this.runCleanup("stream unsubscribe",$)};if(Q.writableEnded||Q.destroyed){J();return}Q.once("close",J),Q.once("error",J)}trackStreamResponse(Q){if(this.isStopped()||Q.writableEnded||Q.destroyed){if(!Q.writableEnded&&!Q.destroyed)Q.destroy();return!1}this.streamResponses.add(Q);let $=()=>{Q.off("close",$),Q.off("error",$),this.streamResponses.delete(Q)};return Q.once("close",$),Q.once("error",$),!0}runCleanup(Q,$){try{Promise.resolve($()).catch((Z)=>this.logCleanupError(Q,Z))}catch(Z){this.logCleanupError(Q,Z)}}logCleanupError(Q,$){console.error(`[capture] ${Q} failed for ${this.udid}:`,$ instanceof Error?$.message:$)}handleStreamError(Q,$){if(Q.writableEnded||Q.destroyed)return;if(Q.headersSent){Q.destroy($ instanceof Error?$:Error(String($)));return}this.sendJson(Q,503,{error:"capture_unavailable",message:$ instanceof Error?$.message:String($)})}sendJson(Q,$,Z){this.sendJsonString(Q,$,JSON.stringify(Z))}sendJsonString(Q,$,Z){let J=Buffer.from(Z,"utf8");Q.writeHead($,{"Content-Type":"application/json","Cache-Control":"no-cache, no-store","Content-Length":String(J.length),...HQ}),Q.end(J)}}var E7=new Map;function Q5(Q){let $=E7.get(Q);if(!$){let Z=new g6(Q);$=Z,E7.set(Q,Z),Z.start().catch(()=>{if(E7.get(Q)!==Z)return;E7.delete(Q),Z.close()})}return $}function $5(Q){let $=E7.get(Q);if($)$.close(),E7.delete(Q)}import{execFileSync as X4}from"child_process";import{readFileSync as G4,unlinkSync as f1}from"fs";import{fileURLToPath as U0}from"url";import{dirname as A0}from"path";function p6(Q){return A0(U0(Q))}import{execSync as j0}from"child_process";function c6(Q){try{let $=j0(`lsof -ti tcp:${Q} -sTCP:LISTEN`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!$)return[];let Z=process.pid;return $.split(`
|
|
61
|
-
`).map((J)=>parseInt(J,10)).filter((J)=>Number.isFinite(J)&&J!==Z)}catch{return[]}}var c7=r9(s6(),1),w1=c7.default("serve-sim:cli"),Y4=c7.default("serve-sim:helper"),Y5=c7.default("serve-sim:state"),l7=c7.default("serve-sim:mw");var K4=/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i;function V4(Q){return K4.test(Q)}function W4(Q){if(!Number.isInteger(Q)||Q<=0)return!1;try{return process.kill(Q,0),!0}catch{return!1}}function z4(Q){return/serve-sim(?:-bin)?/.test(Q)}function H4(Q){try{return G4(`/proc/${Q}/cmdline`,"utf8").split(String.fromCharCode(0)).join(" ").trim()}catch{}try{return X4("ps",["-p",String(Q),"-o","args="],{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:1000}).trim()}catch{return null}}function e6(Q,$={}){let Z=$.isAlive??W4,J=$.portHolders??c6,Y=$.commandLine??H4;if(Z(Q.pid))return Q;for(let X of J(Q.port)){if(X===process.pid||!Z(X))continue;let G=Y(X);if(G==null||!z4(G))continue;return Y5("recovered helper for %s via port %d pid %d (recorded pid %d was dead)",Q.device,Q.port,X,Q.pid),{...Q,pid:X}}return null}function Q8(Q){try{WQ(Q)}catch($){Y5("failed to rewrite recovered state for %s: %o",Q.device,$)}}function $8(Q,$,Z){if($&&V4(Q.device)&&!$.has(Q.device))return Q.pid===Z?"recycle-self":"recycle-helper";return"keep"}import{execFileSync as OQ}from"child_process";import{createHash as N8}from"crypto";import{existsSync as o,mkdirSync as M8,readdirSync as N4,readFileSync as J7,renameSync as F8,statSync as B8,unlinkSync as G8}from"fs";import{tmpdir as R8}from"os";import{basename as O8,dirname as _Q,join as l}from"path";import{inflateSync as M4}from"zlib";function Z8(Q){if(Q.length===0)return null;return Q.reduce(($,Z)=>Z.width*Z.height<$.width*$.height?Z:$)}function J8(Q){if(Q.length!==2)return Q.map(()=>"display");return Q[0]<=Q[1]?["cover","inner"]:["inner","cover"]}function Y8(Q,$="Display"){switch(Q){case"cover":return"Cover";case"inner":return"Inner";default:return $}}function X8(Q){let $=G5(G5(Q).capabilities??Q),Z=Array.isArray($.displays)?$.displays:[],J=[];for(let Y of Z){let X=G5(Y);if(m7(X.displayType)!=="integrated")continue;if(X.hasDigitizer!==!0)continue;let G=m7(X.chromeIdentifier);if(!G)continue;let N=X5(X.width),K=X5(X.height);if(!N||!K||N<=0||K<=0)continue;let V=X5(X.scale),z=m7(X.deviceName)??(typeof X.screenID==="number"?`screen-${X.screenID}`:`display-${J.length}`);J.push({id:z,label:m7(X.displayName)??z,chromeIdentifier:G,mask:m7(X.framebufferMaskIdentifier),width:N,height:K,logicalScreenSize:V&&V>0?{width:N/V,height:K/V}:null})}return J}function X5(Q){if(typeof Q==="number"&&Number.isFinite(Q))return Q;if(typeof Q==="string"&&Q.trim()){let $=Number(Q);return Number.isFinite($)?$:null}return null}function m7(Q){return typeof Q==="string"&&Q?Q:null}function G5(Q){return Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{}}var B5="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",_8="/Library/Developer/DeviceKit/Chrome",K8="com.apple.dt.devicekit.chrome.",V8=l(R8(),"serve-sim-devicekit-chrome"),W8=l(R8(),"serve-sim-device-placeholder-assets"),X7="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",F4="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",z8={"vision-pro":{paths:[l(X7,"com.apple.vision-pro.icns"),l(F4,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[l(X7,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[l(X7,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[l(X7,"com.apple.ipad-air-m3-1.icns")]}},K5=null,V5=new Map,W5=new Map,z5=new Map,H5=new Map,N5=null,M5=new Map;function n7(Q){return Q.startsWith(K8)?Q.slice(K8.length):Q}function R5(Q){let $=typeof Q==="string"?Q:Q.toString("latin1"),Z=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec($)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec($);if(!Z)return null;let J=Number(Z[1]),Y=Number(Z[2]),X=Number(Z[3]),G=Number(Z[4]),N=Math.abs(X-J),K=Math.abs(G-Y);return N>0&&K>0?{width:N,height:K}:null}function B4(Q,$){let Z=w4(Q);if(Z)return Z;let J=typeof Q.framebufferMask==="string"?Q.framebufferMask:null;if(!J)return null;let Y=typeof Q.__profileDir==="string"?Q.__profileDir:null;if(!Y)return null;let X=l(Y,`${J}.pdf`);if(!o(X))return null;let G=R5(J7(X));if(!G)return null;let N=S4($);return{width:G.width/N,height:G.height/N}}function O5(Q){let $=UQ(Q);if(z5.has($))return z5.get($)??[];let Z=C4($);return z5.set($,Z),Z}function C8(Q){let $=O5(Q);if($.length>0)return Z8($)?.chrome??null;let Z=UQ(Q),J=Z;if(W5.has(J))return W5.get(J)??null;let Y=U4(Z);return W5.set(J,Y),Y}function U8(Q){let $=UQ(Q);if(H5.has($))return H5.get($)??null;let Z=R4(Q);return H5.set($,Z),Z}function R4(Q){let $=L4(Q),Z=$?T8($):null,J=j4(Z)??E4(Q.name);if(!J)return null;let Y=j8(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function A8(Q,$){let Z=n7(Q.searchParams.get("chrome")??""),J=Q.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){q7($,400,"Invalid chrome asset request");return}let Y=q8(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){q7($,404,"Chrome asset not found");return}let X=C5(Z,J);if(!o(X)){q7($,404,"Chrome asset not found");return}try{let G=I8(Z,J,X),N=J7(G);$.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(N.byteLength)}),$.end(N)}catch(G){q7($,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function L8(Q,$){let Z=Q.searchParams.get("name")??"";try{let J=j8(Z);if(!J){q7($,404,"Placeholder asset not found");return}let Y=J7(J.pngPath);$.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),$.end(Y)}catch(J){q7($,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function j8(Q){if(!/^[A-Za-z0-9._-]+$/.test(Q))return null;if(M5.has(Q))return M5.get(Q)??null;let $=O4(Q),Z=$?k4(Q,$):null;return M5.set(Q,Z),Z}function O4(Q){let Z=_4(Q)?.paths.find((Y)=>o(Y));if(Z)return Z;if(!P8().some((Y)=>Y.iconName===Q))return null;let J=l(X7,`${Q}.icns`);return o(J)?J:null}function _4(Q){return Object.prototype.hasOwnProperty.call(z8,Q)?z8[Q]:null}function C4(Q){let $=_5(Q);if(!o($))return[];let Z=_Q($),J=d7(l(Z,"capabilities.plist")),Y=X8(J);if(Y.length===0)return[];let X=J8(Y.map((N)=>N.width*N.height)),G=[];for(let N=0;N<Y.length;N++){let K=Y[N],V=E8(n7(K.chromeIdentifier),D8(Z,K.mask),K.logicalScreenSize);if(!V)continue;let z=X[N]??"display";G.push({id:K.id,role:z,name:Y8(z,K.label),width:K.width,height:K.height,chrome:V})}return G}function U4(Q){let $=_5(Q);if(!o($))return null;let Z=T8($);if(!Z?.chromeIdentifier)return null;return E8(Z.chromeIdentifier,Z.framebufferMaskSize,Z.screenSize)}function E8(Q,$,Z){let J=q8(Q);if(!J)return null;let Y=null;if(J.compositeImage)Y=F5(J.identifier,J.compositeImage);let X=J.compositeImage?b4(J.identifier,J.compositeImage):null,G=(X&&$?f4($,X):null)??Z??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!G||G.width<=0||G.height<=0)return null;let N=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},K={x:J.devicePadding.left,y:J.devicePadding.top,width:N.width,height:N.height},V={width:N.width+J.devicePadding.left+J.devicePadding.right,height:N.height+J.devicePadding.top+J.devicePadding.bottom},z={x:K.x+(N.width-G.width)/2,y:K.y+(N.height-G.height)/2,width:G.width,height:G.height},F=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,H=J.slice?F5(J.identifier,J.slice.topLeft):null,L=J.identifier.startsWith("watch"),U=J.buttons.flatMap((T)=>{let q=F5(J.identifier,T.image);if(!q)return[];let P=q4(T,q,N,J.devicePadding),A={x:q.width>0?(T.rolloverOffset.x-T.normalOffset.x)/q.width:0,y:q.height>0?(T.rolloverOffset.y-T.normalOffset.y)/q.height:0};return[{name:T.name,image:T.image,imageDown:T.imageDown,onTop:T.onTop||L,frame:{...P,...q},hover:A,usagePage:T.usagePage,usage:T.usage}]});return{identifier:J.identifier,frame:V,body:K,screen:z,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:F,compositeImage:J.compositeImage,slice:J.slice,corner:H,buttons:U}}function T8(Q){let $=d7(Q);if(!$)return null;let Z=typeof $.chromeIdentifier==="string"?$.chromeIdentifier:null,J=Z?n7(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof $.modelIdentifier==="string"?$.modelIdentifier:null,productClass:typeof $.productClass==="string"?$.productClass:null,screenSize:J?B4({...$,__profileDir:_Q(Q)},J):null,framebufferMaskSize:A4({...$,__profileDir:_Q(Q)})}}function A4(Q){let $=typeof Q.framebufferMask==="string"?Q.framebufferMask:null,Z=typeof Q.__profileDir==="string"?Q.__profileDir:null;if(!$||!Z)return null;return D8(Z,$)}function D8(Q,$){if(!$)return null;let Z=l(Q,`${$}.pdf`);if(!o(Z))return null;return R5(J7(Z))}function UQ(Q){return I4(Q.deviceTypeIdentifier)??Q.name}function L4(Q){let $=_5(UQ(Q));return o($)?$:null}function _5(Q){return l(B5,`${Q}.simdevicetype`,"Contents","Resources","profile.plist")}function j4(Q){if(!Q)return null;let $=new Set;if(Q.modelIdentifier)$.add(Q.modelIdentifier);if(Q.productClass)$.add(Q.productClass),$.add(`${Q.productClass}AP`);if($.size===0)return null;for(let Z of P8())if(Z.modelCodes.some((J)=>$.has(J)))return Z.iconName;return null}function E4(Q){let $=Q.toLowerCase();if($.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test($))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test($))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test($))return"ipad-air-13-inch-m4";return null}function P8(){if(N5)return N5;let Q=d7(l(X7,"MobileDevices-Info.plist"))??d7(l(_Q(X7),"Info.plist")),$=Array.isArray(Q?.UTExportedTypeDeclarations)?Q.UTExportedTypeDeclarations:[],Z=[];for(let J of $){let Y=e(J),X=i(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=l(X7,X);if(!o(G))continue;let K=e(Y.UTTypeTagSpecification)["com.apple.device-model-code"],V=Array.isArray(K)?K.filter((z)=>typeof z==="string"&&z.length>0):[];if(V.length===0)continue;Z.push({description:i(Y.UTTypeDescription)??"",iconFile:X,iconName:O8(X,".icns"),modelCodes:V})}return N5=Z,Z}function q8(Q){let $=n7(Q);if(!/^[A-Za-z0-9_-]+$/.test($))return null;if(V5.has($))return V5.get($)??null;let Z=l(_8,`${$}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(J7(Z,"utf-8"));J=T4(Y)}catch{J=null}return V5.set($,J),J}function T4(Q){let $=typeof Q.identifier==="string"?Q.identifier:null;if(!$)return null;let Z=n7($),J=e(Q.images),Y=e(J.sizing),X=e(Q.paths),G=Z7(e(X.simpleOutsideBorder).cornerRadiusX),N={top:Z7(Y.topHeight),left:Z7(Y.leftWidth),bottom:Z7(Y.bottomHeight),right:Z7(Y.rightWidth)},K=e(J.devicePadding),V={top:Z7(K.top),left:Z7(K.left),bottom:Z7(K.bottom),right:Z7(K.right)},z=typeof J.composite==="string"?J.composite:null,F=D4(J),H=Array.isArray(Q.inputs)?Q.inputs.flatMap((U)=>{let T=P4(e(U));return T?[T]:[]}):[],L=new Set;for(let U of Object.values(J))if(typeof U==="string")L.add(U);for(let U of H)L.add(U.image);if(Array.isArray(Q.inputs))for(let U of Q.inputs){let T=e(U);if(typeof T.imageDown==="string")L.add(T.imageDown)}return{identifier:Z,insets:N,devicePadding:V,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(N.left,N.top),0),compositeImage:z,slice:F,buttons:H,allowedImages:L}}function D4(Q){let $=i(Q.topLeft),Z=i(Q.top),J=i(Q.topRight),Y=i(Q.right),X=i(Q.bottomRight),G=i(Q.bottom),N=i(Q.bottomLeft),K=i(Q.left);if(!$||!Z||!J||!Y||!X||!G||!N||!K)return null;return{topLeft:$,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:N,left:K}}function P4(Q){let $=i(Q.name),Z=i(Q.image);if(!$||!Z)return null;let J=i(Q.anchor),Y=i(Q.align),X=e(Q.offsets),G=H8(e(X.normal)),N=H8(e(X.rollover));return{name:$,image:Z,imageDown:i(Q.imageDown),onTop:Q.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??N??{x:0,y:0},rolloverOffset:N??G??{x:0,y:0},usagePage:G7(Q.usagePage),usage:G7(Q.usage)}}function q4(Q,$,Z,J){let{left:Y,top:X}=J,G=2*Q.normalOffset.x-Q.rolloverOffset.x,N=2*Q.normalOffset.y-Q.rolloverOffset.y,K=Q.align==="trailing"?Y+Z.width+G-$.width:Y+G;switch(Q.anchor){case"left":return{x:Y+Q.rolloverOffset.x-$.width/2,y:X+Q.rolloverOffset.y};case"right":return{x:Y+Z.width+G,y:X+N};case"top":return{x:K,y:X+N-$.height};case"bottom":return{x:K,y:X+Z.height+N}}}function I4(Q){if(!Q)return null;if(!K5)K5=x4();return K5.get(Q)??null}function x4(){let Q=new Map;try{for(let $ of N4(B5)){if(!$.endsWith(".simdevicetype"))continue;let Z=l(B5,$),J=d7(l(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:O8($,".simdevicetype");if(Y)Q.set(Y,X)}}catch{}return Q}function d7(Q){try{let $=OQ("plutil",["-convert","json","-o","-",Q],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse($)}catch{return null}}function w4(Q){let $=G7(Q.mainScreenWidth),Z=G7(Q.mainScreenHeight),J=G7(Q.mainScreenScale);if(!$||!Z||!J||J<=0)return null;return{width:$/J,height:Z/J}}function S4(Q){if(Q.startsWith("phone"))return 3;if(Q.startsWith("tablet"))return 2;if(Q.startsWith("watch"))return 2;return 1}function F5(Q,$){let Z=C5(Q,$);if(!o(Z))return null;return R5(J7(Z))}function C5(Q,$){return l(_8,`${Q}.devicechrome`,"Contents","Resources",`${$}.pdf`)}function I8(Q,$,Z){M8(V8,{recursive:!0});let J=B8(Z),Y=N8("sha1").update(Q).update("\x00").update($).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=l(V8,`${Q}-${Y}.png`);if(o(X))return X;let G=`${X}.${process.pid}.tmp`;return OQ("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),F8(G,X),X}function k4(Q,$){M8(W8,{recursive:!0});let Z=B8($),J=N8("sha1").update(Q).update("\x00").update($).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=l(W8,`${Q}-${J}.png`);if(o(Y)){let N=CQ(J7(Y));return{sourcePath:$,pngPath:Y,width:N.width,height:N.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{OQ("sips",["-s","format","png",$,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let N=J7(G),K=y4(N)??{x:0,y:0,...CQ(N)};return OQ("sips",["-c",String(K.height),String(K.width),"--cropOffset",String(K.y),String(K.x),"-s","format","png",$,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),F8(X,Y),{sourcePath:$,pngPath:Y,width:K.width,height:K.height}}finally{try{if(o(G))G8(G)}catch{}try{if(o(X))G8(X)}catch{}}}function CQ(Q){if(Q.byteLength<24||Q[0]!==137||Q.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:Q.readUInt32BE(16),height:Q.readUInt32BE(20)}}function x8(Q,$){let{width:Z,height:J}=CQ(Q),Y=8,X=0,G=0,N=[];while(Y<Q.byteLength){let T=Q.readUInt32BE(Y);Y+=4;let q=Q.toString("ascii",Y,Y+4);Y+=4;let P=Q.subarray(Y,Y+T);if(Y+=T+4,q==="IHDR")X=P[8]??0,G=P[9]??0;else if(q==="IDAT")N.push(P);else if(q==="IEND")break}let K=G===6?4:G===4?2:0;if(X!==8||K===0||N.length===0)return null;let V=G===6,z=M4(Buffer.concat(N)),F=Z*K,H=new Uint8Array(Z*J),L=Buffer.alloc(F),U=0;for(let T=0;T<J;T++){let q=z[U++]??0,P=Buffer.from(z.subarray(U,U+F));U+=F,h4(P,L,K,q);for(let A=0;A<Z;A++){let C=A*K,j=P[C]??0,_=V?P[C+1]??0:j,M=V?P[C+2]??0:j,W=P[C+K-1]??0;if($(j,_,M,W))H[T*Z+A]=1}L=P}return{width:Z,height:J,mask:H}}function y4(Q){let{width:$,height:Z}=CQ(Q),J=x8(Q,(K,V,z,F)=>F>0);if(!J)return{x:0,y:0,width:$,height:Z};let Y=$,X=Z,G=-1,N=-1;for(let K=0;K<Z;K++)for(let V=0;V<$;V++){if(!J.mask[K*$+V])continue;if(V<Y)Y=V;if(K<X)X=K;if(V>G)G=V;if(K>N)N=K}if(G<Y||N<X)return{x:0,y:0,width:$,height:Z};return{x:Y,y:X,width:G-Y+1,height:N-X+1}}function f4(Q,$){if($.width<=0)return null;let Z=Math.max(1,Math.round(Q.width/$.width));return{width:Q.width/Z,height:Q.height/Z}}function b4(Q,$){let Z=v4(Q,$);if(!Z)return null;let J=x8(Z,(A,C,j,_)=>_>200&&A<30&&C<30&&j<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,N=Math.floor(Y/2),K=Math.floor(X/2),V=(A,C)=>A>=0&&C>=0&&A<Y&&C<X&&G[C*Y+A]===1;if(!V(N,K))return null;let z=N;while(z>0&&V(z-1,K))z--;let F=N;while(F<Y-1&&V(F+1,K))F++;let H=K;while(H>0&&V(N,H-1))H--;let L=K;while(L<X-1&&V(N,L+1))L++;let U=L-H,T=(A,C)=>{let j=0;while(j<U&&!V(A,C?H+j:L-j))j++;return j},q=[T(z,!0),T(F,!0),T(z,!1),T(F,!1)],P=q.reduce((A,C)=>A+C,0)/q.length;return{x:z,y:H,width:F-z+1,height:L-H+1,radius:P}}function v4(Q,$){let Z=C5(Q,$);if(!o(Z))return null;try{return J7(I8(Q,$,Z))}catch{return null}}function h4(Q,$,Z,J){for(let Y=0;Y<Q.byteLength;Y++){let X=Y>=Z?Q[Y-Z]:0,G=$[Y]??0,N=Y>=Z?$[Y-Z]:0;switch(J){case 0:break;case 1:Q[Y]=Q[Y]+X&255;break;case 2:Q[Y]=Q[Y]+G&255;break;case 3:Q[Y]=Q[Y]+Math.floor((X+G)/2)&255;break;case 4:Q[Y]=Q[Y]+u4(X,G,N)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function u4(Q,$,Z){let J=Q+$-Z,Y=Math.abs(J-Q),X=Math.abs(J-$),G=Math.abs(J-Z);if(Y<=X&&Y<=G)return Q;return X<=G?$:Z}function q7(Q,$,Z){Q.writeHead($,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({ok:!1,error:Z}))}function Z7(Q){return G7(Q)??0}function G7(Q){if(typeof Q==="number"&&Number.isFinite(Q))return Q;if(typeof Q==="string"&&Q.trim()){let $=Number(Q);return Number.isFinite($)?$:null}return null}function i(Q){return typeof Q==="string"&&Q?Q:null}function e(Q){return Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{}}function H8(Q){let $=G7(Q.x),Z=G7(Q.y);return $===null||Z===null?null:{x:$,y:Z}}import{exec as g4}from"child_process";import{createHash as w8,timingSafeEqual as p4}from"crypto";import{request as c4}from"http";import{WebSocketServer as l4}from"ws";var m4=1e4,d4=4194304;function n4(Q,$){let Z=w8("sha256").update(Q).digest(),J=w8("sha256").update($).digest();return p4(Z,J)}function i4(Q,$,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(V)=>{if(Q.readyState===Q.OPEN)Q.send(JSON.stringify(V))},N=setTimeout(()=>{if(!J)Q.close()},m4);N.unref?.();let K=(V,z)=>{if(Y.has(V))return;let F=z.split("?")[0];if(!z.startsWith("/")||!X.some((L)=>F===L)){G({sub:V,end:!0,error:"path not allowed"});return}if(!$){G({sub:V,end:!0,error:"no local port"});return}let H=c4({host:"127.0.0.1",port:$,path:z,headers:{accept:"text/event-stream"}},(L)=>{L.on("data",(U)=>G({sub:V,data:U.toString("utf-8")})),L.on("end",()=>{Y.delete(V),G({sub:V,end:!0})})});H.on("error",()=>{Y.delete(V),G({sub:V,end:!0})}),H.end(),Y.set(V,{destroy:()=>H.destroy()})};Q.on("message",(V)=>{let z;try{z=JSON.parse(V.toString())}catch{return}if(!J){if(typeof z.token==="string"&&n4(z.token,Z.execToken))J=!0,clearTimeout(N),G({ready:!0});else Q.close();return}if(typeof z.unsub==="number"){Y.get(z.unsub)?.destroy(),Y.delete(z.unsub);return}if(typeof z.sub==="number"&&typeof z.path==="string"){K(z.sub,z.path);return}if(typeof z.id==="number"&&z.ui!==void 0){let{id:L}=z;if(!Z.onUiRequest){G({id:L,error:"ui requests not supported"});return}Z.onUiRequest(z.ui).then((U)=>G({id:L,...U})).catch((U)=>G({id:L,error:U instanceof Error?U.message:String(U)}));return}if(typeof z.id!=="number"||typeof z.command!=="string"||!z.command)return;let{id:F,command:H}=z;g4(H,{maxBuffer:16777216},(L,U,T)=>{let q={id:F,stdout:U.toString(),stderr:T.toString(),exitCode:L?L.code??1:0};try{Z.onCommandResult?.(H,q)}catch{}G(q)})}),Q.on("error",()=>Q.close()),Q.on("close",()=>{clearTimeout(N);for(let V of Y.values())V.destroy();Y.clear()})}function S8(Q){let $=new l4({noServer:!0,maxPayload:d4});return function(J,Y,X){let G=J.url??"",N=G.indexOf("?"),K=N===-1?G:G.slice(0,N);if(K!==Q.path&&K!==`${Q.path}/`)return!1;let V=J.headers.origin;if(V)try{if(new URL(V).host!==J.headers.host)return Y.destroy(),!0}catch{return Y.destroy(),!0}let z=Y.localPort;if(!z){let F=Number((J.headers.host??"").split(":")[1]);if(Number.isFinite(F)&&F>0)z=F}return $.handleUpgrade(J,Y,X,(F)=>{i4(F,z,Q)}),!0}}import{execFile as o4}from"child_process";import{existsSync as y8}from"fs";import{join as U5,resolve as a4}from"path";var A5=p6(import.meta.url),f8=["extra-small","small","medium","large","extra-large","extra-extra-large","extra-extra-extra-large","accessibility-medium","accessibility-large","accessibility-extra-large","accessibility-extra-extra-large","accessibility-extra-extra-extra-large"],r4=["none","grayscale","red-green","green-red","blue-yellow"],t4={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},i7=["on","off"],s4=new Set(["on","true","enabled","1","yes"]),e4=new Set(["off","false","disabled","0","no"]),N7={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:r4,aliases:t4},"text-size":{via:"content_size",values:f8,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:i7,toggle:!0},"increase-contrast":{via:"increase_contrast",values:i7,toggle:!0},"show-borders":{via:"ax",values:i7,toggle:!0},"reduce-transparency":{via:"ax",values:i7,toggle:!0},voiceover:{via:"ax",values:i7,toggle:!0}};function b8(Q,$){let Z=N7[Q];if(!Z)return null;let J=$.toLowerCase();if(Z.toggle){if(s4.has(J))return"on";if(e4.has(J))return"off";return null}let Y=Z.aliases?.[J]??J;if(Z.values.includes(Y))return Y;if(Z.extraValues?.includes(Y))return Y;return null}function k8(){let Q=[U5(A5,"..","dist","simax","serve-sim-ax-settings"),U5(A5,"simax","serve-sim-ax-settings")];for(let $ of Q)if(y8($))return a4($);return null}var AQ=null;function QZ(){return AQ??=(async()=>{let Q=k8();if(Q)return Q;let $=U5(A5,"..","Sources","SimAXSettings","build.sh");if(!y8($))throw Error("sim-ax-settings binary not found — this build of serve-sim does not "+"include the simulator settings helper. Reinstall from a recent release.");console.error("[serve-sim] building sim-ax-settings (one-time)…"),await L5("bash",[$]);let Z=k8();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),AQ.catch(()=>{AQ=null}),AQ}function L5(Q,$){return new Promise((Z,J)=>{o4(Q,$,{encoding:"utf-8",maxBuffer:4194304},(Y,X,G)=>{if(Y)J(Error(String(G).trim()||Y.message));else Z(String(X).trim())})})}function v8(Q,$,Z){let J=["simctl","ui",Q,$];if(Z!==void 0)J.push(Z);return L5("xcrun",J)}async function j5(Q,...$){let Z=await QZ();return L5("xcrun",["simctl","spawn",Q,Z,...$])}function $Z(Q){return Q==="enabled"?"on":"off"}function ZZ(Q){return Q==="on"?"enabled":"disabled"}async function JZ(Q,$){let Z=N7[$];if(!Z)throw Error(`unknown option: ${$}`);if(Z.via==="ax")return j5(Q,"get",$);let J=(await v8(Q,Z.via)).toLowerCase();return Z.toggle?$Z(J):J}async function h8(Q,$,Z){let J=N7[$];if(!J)throw Error(`unknown option: ${$}`);if(J.via==="ax"){await j5(Q,"set",$,Z);return}await v8(Q,J.via,J.toggle?ZZ(Z):Z)}async function u8(Q){let $=Object.entries(N7).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([j5(Q,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...$.map(([X])=>JZ(Q,X).catch(()=>"unsupported"))]),Y={};for(let[X,G]of Object.entries(N7))if(G.via==="ax")Y[X]=Z[X]??"unsupported";return $.forEach(([X],G)=>{Y[X]=J[G]}),Y}var W3=`Usage: serve-sim ui [status] [--json] [-d udid]
|
|
60
|
+
`,"ascii")}function GQ($){let Q=Buffer.allocUnsafe(5+$.length);return Q.writeUInt32BE($.length+1,0),Q[4]=$Q,Q.set($,5),Q}var XQ={portrait:K7.portrait,portrait_upside_down:K7.portraitUpsideDown,landscape_left:K7.landscapeLeft,landscape_right:K7.landscapeRight};function z$($){if($.writableEnded||$.destroyed||!$.writableNeedDrain)return Promise.resolve();return new Promise((Q)=>{let Z=()=>{J(),Q()},J=()=>{$.off("drain",Z),$.off("close",Z),$.off("error",Z)};$.once("drain",Z),$.once("close",Z),$.once("error",Z)})}async function H$($,Q){if(await z$($),$.writableEnded||$.destroyed)return!1;if(!Q()||$.writableNeedDrain)await z$($);return!$.writableEnded&&!$.destroyed}class M${udid;dependencies;capture;hid;unsubscribeMjpeg;phase="unstarted";startPromise;width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;duo;duoMonitor;followedCover;primaryDuoPanel;poseQueue=Promise.resolve();duoStateQueue=Promise.resolve();streamResponses=new Set;touchGestureLog;constructor($,Q){this.udid=$;this.dependencies=Q;this.hid=Q?.hid??new H8($),this.capture=Q?.capture??new M8($),this.duo=new O8({createRenderer:()=>Q?.createDuoRenderer?.()??new R8,onProjection:(Z)=>{for(let J of this.hidSockets)J.send(Z)},onStreamError:(Z,J)=>this.handleStreamError(Z,J)})}start(){if(this.phase==="stopped")return Promise.reject(Error(`Device session ${this.udid} is closed`));if(this.startPromise)return this.startPromise;this.phase="starting";let $=(async()=>{if(await this.capture.start(),this.isStopped())throw Error(`Device session ${this.udid} closed while starting`);let Q=await this.capture.subscribeMjpeg((Z)=>this.onSharedMjpegFrame(Z));if(this.isStopped())throw await Q(),Error(`Device session ${this.udid} closed while starting`);if(this.unsubscribeMjpeg=Q,this.phase="running",await this.hid.isFoldable?.()&&!this.isStopped()){if(!this.dependencies?.createDuoMonitor)p9(this.udid);let Z=this.dependencies?.createDuoMonitor??((J,Y)=>new U8(J,Y));this.duoMonitor=Z(this.udid,(J)=>{this.followDuoState(J).catch((Y)=>{console.error("[duo] State update failed:",Y)})})}})().catch((Q)=>{if(this.phase==="starting")this.phase="failed";throw Q});return $.catch(()=>{}),this.startPromise=$,$}isStopped(){return this.phase==="stopped"}close(){if(this.phase==="stopped")return;this.phase="stopped",this.duo.close(),this.duoMonitor?.close();for(let $ of this.hidSockets)this.runCleanup("HID socket close",()=>$.close());for(let $ of this.streamResponses)this.runCleanup("stream response close",()=>{$.destroy()});if(this.streamResponses.clear(),this.unsubscribeMjpeg)this.runCleanup("shared MJPEG unsubscribe",this.unsubscribeMjpeg);this.hidSockets.clear(),this.runCleanup("HID close",()=>this.hid.close?.()),this.runCleanup("capture stop",()=>this.capture.stop())}followDuoState($){let Q=this.duoStateQueue.then(()=>this.applyDuoState($));return this.duoStateQueue=Q.catch(()=>{}),Q}activePanel(){return e9({primaryPanel:this.primaryDuoPanel,hingeDegrees:this.duo.hinge})}async applyDuoState($){if(this.isStopped())return;if($.hingeDegrees!=null)this.duo.noteHinge($.hingeDegrees);if($.primaryPanel)this.primaryDuoPanel=$.primaryPanel;let Q=this.activePanel(),Z=$$(Q);if(($.hingeDegrees!=null||$.primaryPanel)&&Q==="cover"!==this.followedCover)await this.capture.setPreferredScreenSize(Z.width,Z.height),this.followedCover=Q==="cover";let J=$.orientations[Q];if(J)this.orientation=J;this.duo.setPanel(Q),this.broadcastConfig(),this.duo.requestFrame()}async onSharedMjpegFrame($){let{width:Q,height:Z,data:J}=$;if(Q!==this.width||Z!==this.height)this.width=Q,this.height=Z,this.broadcastConfig();if(!this.latestJpegBuffer||this.latestJpegBuffer.length<J.length){let G=this.latestJpegBuffer?.length??0;this.latestJpegBuffer=Buffer.allocUnsafe(Math.max(J.length,G*2))}this.latestJpegBuffer.set(J,0),this.latestJpegLength=J.length;let Y=this.latestJpeg();if(Y)this.duo.onCapturedFrame(Y)}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}writeMjpegFrame($,Q){let Z=$.write(YQ(Q.length)),J=$.write(Q),Y=$.write(ZQ);return Z&&J&&Y}handleDuoMjpeg($,Q){(async()=>{if(await this.start(),Q.destroyed||Q.writableEnded)return;if(!await this.hid.isFoldable?.()){this.sendJson(Q,400,{error:"This device has no Duo model"});return}let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-store"}),this.trackStreamResponse(Q),this.duo.setPanel(this.activePanel()),this.duo.attach(Q),Q.once("close",()=>this.duo.detach(Q))})().catch((Z)=>this.handleStreamError(Q,Z))}handleMjpeg($,Q){this.serveMjpeg($,Q).catch((Z)=>this.handleStreamError(Q,Z))}async serveMjpeg($,Q){if(await this.start(),Q.writableEnded||Q.destroyed)return;let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";if(Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive"}),!this.trackStreamResponse(Q))return;let J=!1,Y=0,G=async(V)=>{if(J||Q.writableEnded||Q.destroyed)return;J=!0;try{if(await H$(Q,()=>this.writeMjpegFrame(Q,V)))Y=Date.now()}catch(W){if(!Q.destroyed)Q.destroy(W instanceof Error?W:Error(String(W)))}finally{J=!1}},X=this.latestJpeg();if(X)await G(Buffer.from(X));let z=await this.capture.subscribeMjpeg(async(V)=>{await G(V.data)}),K=setInterval(()=>{if(Q.writableEnded||Q.destroyed)return;if(Date.now()-Y<W$)return;let V=this.latestJpeg();if(V)G(Buffer.from(V))},W$);this.bindSubscription(Q,async()=>{clearInterval(K),await z()})}handleAvcc($,Q){this.serveAvcc(Q).catch((Z)=>this.handleStreamError(Q,Z))}async serveAvcc($){if(await this.start(),$.writableEnded||$.destroyed)return;if($.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive"}),!this.trackStreamResponse($))return;let Q=this.latestJpeg();if(Q)$.write(GQ(Q));let Z=await this.capture.subscribeAvcc(async(J)=>{await H$($,()=>$.write(J.data))});this.bindSubscription($,Z)}handleConfig($,Q){this.sendJson(Q,200,this.screenConfig())}handleHealth($,Q){this.sendJson(Q,200,{status:"ok"})}handleAx($,Q){return this.serveAxJson(Q,()=>S7(this.udid),"ax_unavailable")}handleForeground($,Q){return this.serveAxJson(Q,()=>k7(this.udid),"foreground_unavailable")}async serveAxJson($,Q,Z){try{let J=await Q();if($.writableEnded)return;this.sendJsonString($,200,J)}catch(J){if($.writableEnded)return;this.sendJson($,503,{error:Z,message:J instanceof Error?J.message:String(J)})}}attachHidSocket($){this.hidSockets.add($);let Q=this.configFrame(),Z=this.duo.projectionFrame();if(Z)$.send(Z);if(Q)$.send(Q);$.on("message",(J)=>{let Y=Buffer.isBuffer(J)?J:Buffer.from(J);if(Y[0]===14)this.poseQueue=this.poseQueue.then(async()=>{if(this.isStopped())return;let G=!1;try{G=await this.handleHidMessage(Y)===!0}catch(X){console.error("[hid] Pose failed:",X)}if(this.hidSockets.has($))$.send(Buffer.concat([Buffer.from([14]),Buffer.from(JSON.stringify({ok:G}))]))}).catch((G)=>{console.error("[hid] Pose reply failed:",G)});else this.handleHidMessage(Y).catch((G)=>{console.error("[hid] Input failed:",G)})}),$.on("close",()=>this.hidSockets.delete($)),$.on("error",()=>this.hidSockets.delete($))}async handleHidMessage($){if($.length<1)return;let Q=$[0],Z=$.length>1?$.subarray(1):null,J=()=>{if(!Z)return null;try{return JSON.parse(Z.toString("utf8"))}catch{return null}},Y=this.width,G=this.height;switch(Q){case 3:{let X=J();if(X)this.recordTouchEvent(X),this.hid.touch(X.type,X.x,X.y,Y,G,X.edge??0);break}case 4:{let X=J();if(!X)break;if(this.recordHidEvent(Q,X),X.page!=null&&X.usage!=null)this.hid.buttonHid(X.page,X.usage,X.phase??"press");else this.hid.button(X.button);break}case 5:{let X=J();if(X)this.recordHidEvent(Q,X),this.hid.multiTouch(X.type,X.x1,X.y1,X.x2,X.y2,Y,G);break}case 6:{let X=J();if(X)this.recordHidEvent(Q,X),this.hid.key(X.type,X.usage);break}case 7:{let X=J();if(!X)break;let z=XQ[X.orientation];if(z!=null&&await this.hid.orientation(z)){if(this.recordHidEvent(Q,X),X.orientation!==this.orientation||X.orientation!==this.duo.viewOrientationName){if(this.duo.hinge==null)this.orientation=X.orientation;this.duo.animateRotation(X.orientation),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame()}}break}case 8:{let X=J();if(X)this.recordHidEvent(Q,X),this.hid.caDebug(X.option,X.enabled);break}case 9:this.recordHidEvent(Q,{}),this.hid.memoryWarning();break;case 10:{let X=J();if(X)this.recordHidEvent(Q,X),this.hid.digitalCrown(X.delta);break}case 11:{let X=J();if(X)this.recordHidEvent(Q,X),this.hid.scroll(X.dx*Y,X.dy*G,Y,G,X.x,X.y);break}case 12:this.recordHidEvent(Q,{}),this.hid.softwareKeyboard();break;case 13:{let X=J();if(!X)break;let z=Number(X.width),K=Number(X.height);if(!Number.isFinite(z)||!Number.isFinite(K))break;this.recordHidEvent(Q,X),await this.capture.setPreferredScreenSize(Math.round(z),Math.round(K));break}case 14:{let X=J();if(!X)break;if(this.recordHidEvent(Q,X),typeof X.pose==="string"&&X.pose.trim()){let z=b7(X.pose);if(!z)break;let K=this.duo.displayAngle();if(this.duo.beginPose(K,z.hingeDegrees),!await this.hid.pose(X.pose,K)){this.duo.cancelPose();break}return this.duo.finishPose(z.hingeDegrees),await this.followDuoState({hingeDegrees:z.hingeDegrees,orientations:{}}),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame(),!0}else if(typeof X.hinge==="number"&&Number.isFinite(X.hinge)&&X.hinge>=0&&X.hinge<=180){if(!await this.hid.hinge(X.hinge))break;return this.duo.cancelPose(),await this.followDuoState({hingeDegrees:X.hinge,orientations:{}}),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame(),!0}break}}}recordTouchEvent($){if($.type==="begin"){this.touchGestureLog=V$($);return}if($.type==="move"){let Q=this.touchGestureLog;if(!Q)Q=V$($),this.touchGestureLog=Q;if(Q.lastX=$.x,Q.lastY=$.y,Q.moveCount++,$.edge!=null)Q.edge=$.edge;if(K$(Q))if(Q.eventId==null){let Z=A6({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:v7(Q),details:this.touchGestureDetails(Q,"drag","move")});Q.eventId=Z.id}else T8(Q.eventId,{kind:"drag",action:"drag",summary:v7(Q),details:this.touchGestureDetails(Q,"drag","move")},{notify:!1});return}if($.type==="end"){let Q=this.touchGestureLog;if(Q){if(Q.lastX=$.x,Q.lastY=$.y,$.edge!=null)Q.edge=$.edge;if(Q.moveCount>0&&K$(Q))if(Q.eventId==null)A6({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:v7(Q),details:this.touchGestureDetails(Q,"drag","end")});else T8(Q.eventId,{kind:"drag",action:"drag",summary:v7(Q),details:this.touchGestureDetails(Q,"drag","end")});else A6({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${d6($.x,$.y)}`,details:this.touchGestureDetails(Q,"tap")});this.touchGestureLog=void 0;return}}this.recordHidEvent(3,$)}eventLogScreen(){return this.width>0&&this.height>0?{width:this.width,height:this.height}:void 0}touchGestureDetails($,Q,Z){return{type:Q,...Z?{phase:Z}:{},start:{x:$.startX,y:$.startY},current:{x:$.lastX,y:$.lastY},moveCount:$.moveCount,...$.edge!=null?{edge:$.edge}:{},...this.eventLogScreen()?{screen:this.eventLogScreen()}:{}}}recordHidEvent($,Q){let Z=Y$(this.udid,$,Q,this.eventLogScreen());if(Z)A6(Z)}screenConfig(){let $=this.duo.hinge;return{width:this.width,height:this.height,orientation:this.orientation,...$==null?{}:{hingeDegrees:$,duoViewOrientation:this.duo.viewOrientationName}}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([QQ]),Buffer.from(JSON.stringify(this.screenConfig()))])}broadcastConfig(){let $=this.configFrame();if(!$)return;for(let Q of this.hidSockets)Q.send($)}bindSubscription($,Q){let Z=!1,J=()=>{if(Z)return;Z=!0,this.streamResponses.delete($),this.runCleanup("stream unsubscribe",Q)};if($.writableEnded||$.destroyed){J();return}$.once("close",J),$.once("error",J)}trackStreamResponse($){if(this.isStopped()||$.writableEnded||$.destroyed){if(!$.writableEnded&&!$.destroyed)$.destroy();return!1}this.streamResponses.add($);let Q=()=>{$.off("close",Q),$.off("error",Q),this.streamResponses.delete($)};return $.once("close",Q),$.once("error",Q),!0}runCleanup($,Q){try{Promise.resolve(Q()).catch((Z)=>this.logCleanupError($,Z))}catch(Z){this.logCleanupError($,Z)}}logCleanupError($,Q){console.error(`[capture] ${$} failed for ${this.udid}:`,Q instanceof Error?Q.message:Q)}handleStreamError($,Q){if($.writableEnded||$.destroyed)return;if($.headersSent){$.destroy(Q instanceof Error?Q:Error(String(Q)));return}this.sendJson($,503,{error:"capture_unavailable",message:Q instanceof Error?Q.message:String(Q)})}sendJson($,Q,Z){this.sendJsonString($,Q,JSON.stringify(Z))}sendJsonString($,Q,Z){let J=Buffer.from(Z,"utf8");$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-cache, no-store","Content-Length":String(J.length)}),$.end(J)}}var n6=new Map;function E8($){let Q=n6.get($);if(!Q){let Z=new M$($);Q=Z,n6.set($,Z),Z.start().catch(()=>{if(n6.get($)!==Z)return;n6.delete($),Z.close()})}return Q}function P8($){let Q=n6.get($);if(Q)Q.close(),n6.delete($)}import{execFileSync as QZ}from"child_process";import{createHash as ZZ}from"crypto";import{readFileSync as JZ,unlinkSync as TY}from"fs";import{fileURLToPath as RQ}from"url";import{dirname as CQ}from"path";import{createHash as N$,timingSafeEqual as WQ}from"crypto";var F$="SERVE_SIM_AUTH_TOKEN",q8="serve_sim_auth",R$="x-serve-sim-auth",KQ=new Set(["forwarded","via","x-real-ip","x-client-ip","x-cluster-client-ip","true-client-ip","fastly-client-ip","cf-connecting-ip","cf-ray"]),VQ=["x-forwarded-","tailscale-","ngrok-","x-original-forwarded"],zQ=new Map;function T6($){return Array.isArray($)?$[0]:$}function I8($){let Q=$.socket;if(!Q)return;let Z=Q.remoteAddress;if(Z&&x8(Z)&&typeof Q.remotePort==="number"){let J=zQ.get(Q.remotePort);if(J)return J}return Z}function x8($){if(!$)return!1;let Q=$.toLowerCase();if(Q==="::1"||Q==="0:0:0:0:0:0:0:1")return!0;let Z=Q.startsWith("::ffff:")?Q.slice(7):Q;return/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(Z)}function HQ($){if(!$)return;try{return new URL(`http://${$}`).hostname.toLowerCase()}catch{return}}function C$($){if(!$)return!1;if($==="localhost"||$==="[::1]")return!0;return x8($)}function MQ($){for(let Q of Object.keys($)){let Z=Q.toLowerCase();if(KQ.has(Z))return!0;if(VQ.some((J)=>Z.startsWith(J)))return!0}return!1}function BQ($){return x8(I8($))&&!MQ($.headers)}function x6($){if(!BQ($))return!1;return C$(HQ(T6($.headers.host)))}function i6($){let Q=T6($.headers.origin);if(!Q)return"absent";try{let Z=new URL(Q);if(Z.protocol!=="http:"&&Z.protocol!=="https:")return"cross";let J=Z.host.toLowerCase();return[T6($.headers.host),T6($.headers["x-forwarded-host"])?.split(",")[0]?.trim()].some((G)=>!!G&&G.toLowerCase()===J)?"same":"cross"}catch{return"cross"}}function o6($){let Q=T6($.headers.origin);if(!Q)return!1;try{let Z=new URL(Q);if(Z.protocol!=="http:"&&Z.protocol!=="https:")return!1;if(Z.host.toLowerCase()!==(T6($.headers.host)??"").toLowerCase())return!1;return C$(Z.hostname.toLowerCase())}catch{return!1}}function B$($){return N$("sha256").update($).digest()}function h7($,Q){return WQ(B$($),B$(Q))}function w8($){return N$("sha256").update(`serve-sim-auth-cookie:${$}`).digest("base64url")}function NQ($,Q){if(!$)return;for(let Z of $.split(";")){let J=Z.indexOf("=");if(J===-1)continue;if(Z.slice(0,J).trim()===Q)return Z.slice(J+1).trim()}return}function FQ($,Q){let Z=T6($.headers.authorization)??"",J=/^Bearer\s+(.+)$/i.exec(Z)?.[1]?.trim();if(J&&h7(J,Q))return!0;let Y=NQ(T6($.headers.cookie),q8);return!!Y&&h7(Y,w8(Q))}function S8($,Q){if(!Q)return{ok:!1,status:403,message:`Remote access is disabled. Start serve-sim with --auth-token <token> (or ${F$}) and send it as "Authorization: Bearer <token>".`};if(FQ($,Q))return{ok:!0};return{ok:!1,status:401,message:"Missing or invalid serve-sim auth token."}}function O$($){let Q=($??process.env[F$]??"").trim();return Q===""?void 0:Q}function L$($){return CQ(RQ($))}import{execSync as LQ}from"child_process";function U$($){try{let Q=LQ(`lsof -ti tcp:${$} -sTCP:LISTEN`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!Q)return[];let Z=process.pid;return Q.split(`
|
|
61
|
+
`).map((J)=>parseInt(J,10)).filter((J)=>Number.isFinite(J)&&J!==Z)}catch{return[]}}var M7=v4(x$(),1),LY=M7.default("serve-sim:cli"),$Z=M7.default("serve-sim:helper"),f8=M7.default("serve-sim:state"),B7=M7.default("serve-sim:mw");var YZ=/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i;function GZ($){return YZ.test($)}function XZ($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function WZ($){return/serve-sim(?:-bin)?/.test($)}function KZ($){try{return JZ(`/proc/${$}/cmdline`,"utf8").split(String.fromCharCode(0)).join(" ").trim()}catch{}try{return QZ("ps",["-p",String($),"-o","args="],{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:1000}).trim()}catch{return null}}function w$($,Q={}){let Z=Q.isAlive??XZ,J=Q.portHolders??U$,Y=Q.commandLine??KZ;if(Z($.pid))return $;for(let G of J($.port)){if(G===process.pid||!Z(G))continue;let X=Y(G);if(X==null||!WZ(X))continue;return f8("recovered helper for %s via port %d pid %d (recorded pid %d was dead)",$.device,$.port,G,$.pid),{...$,pid:G}}return null}function S$($){try{f7($)}catch(Q){f8("failed to rewrite recovered state for %s: %o",$.device,Q)}}function k$($){return $?ZZ("sha256").update($).digest("hex"):void 0}function y$($,Q,Z){if(Q&&GZ($.device)&&!Q.has($.device))return $.pid===Z?"recycle-self":"recycle-helper";return"keep"}import{execFileSync as l7}from"child_process";import{createHash as d$}from"crypto";import{existsSync as H6,mkdirSync as n$,readdirSync as VZ,readFileSync as _6,renameSync as i$,statSync as o$,unlinkSync as u$}from"fs";import{tmpdir as a$}from"os";import{basename as r$,dirname as p7,join as s}from"path";import{inflateSync as zZ}from"zlib";function f$($){if($.length===0)return null;return $.reduce((Q,Z)=>Z.width*Z.height<Q.width*Q.height?Z:Q)}function b$($){if($.length!==2)return $.map(()=>"display");return $[0]<=$[1]?["cover","inner"]:["inner","cover"]}function v$($,Q="Display"){switch($){case"cover":return"Cover";case"inner":return"Inner";default:return Q}}function h$($){let Q=v8(v8($).capabilities??$),Z=Array.isArray(Q.displays)?Q.displays:[],J=[];for(let Y of Z){let G=v8(Y);if(N7(G.displayType)!=="integrated")continue;if(G.hasDigitizer!==!0)continue;let X=N7(G.chromeIdentifier);if(!X)continue;let z=b8(G.width),K=b8(G.height);if(!z||!K||z<=0||K<=0)continue;let V=b8(G.scale),W=N7(G.deviceName)??(typeof G.screenID==="number"?`screen-${G.screenID}`:`display-${J.length}`);J.push({id:W,label:N7(G.displayName)??W,chromeIdentifier:X,mask:N7(G.framebufferMaskIdentifier),width:z,height:K,logicalScreenSize:V&&V>0?{width:z/V,height:K/V}:null})}return J}function b8($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function N7($){return typeof $==="string"&&$?$:null}function v8($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}var n8="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",t$="/Library/Developer/DeviceKit/Chrome",g$="com.apple.dt.devicekit.chrome.",c$=s(a$(),"serve-sim-devicekit-chrome"),m$=s(a$(),"serve-sim-device-placeholder-assets"),D6="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",HZ="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",l$={"vision-pro":{paths:[s(D6,"com.apple.vision-pro.icns"),s(HZ,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[s(D6,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[s(D6,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[s(D6,"com.apple.ipad-air-m3-1.icns")]}},h8=null,u8=new Map,g8=new Map,c8=new Map,m8=new Map,l8=null,p8=new Map;function R7($){return $.startsWith(g$)?$.slice(g$.length):$}function i8($){let Q=typeof $==="string"?$:$.toString("latin1"),Z=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q);if(!Z)return null;let J=Number(Z[1]),Y=Number(Z[2]),G=Number(Z[3]),X=Number(Z[4]),z=Math.abs(G-J),K=Math.abs(X-Y);return z>0&&K>0?{width:z,height:K}:null}function MZ($,Q){let Z=qZ($);if(Z)return Z;let J=typeof $.framebufferMask==="string"?$.framebufferMask:null;if(!J)return null;let Y=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Y)return null;let G=s(Y,`${J}.pdf`);if(!H6(G))return null;let X=i8(_6(G));if(!X)return null;let z=IZ(Q);return{width:X.width/z,height:X.height/z}}function o8($){let Q=n7($);if(c8.has(Q))return c8.get(Q)??[];let Z=RZ(Q);return c8.set(Q,Z),Z}function s$($){let Q=o8($);if(Q.length>0)return f$(Q)?.chrome??null;let Z=n7($),J=Z;if(g8.has(J))return g8.get(J)??null;let Y=CZ(Z);return g8.set(J,Y),Y}function e$($){let Q=n7($);if(m8.has(Q))return m8.get(Q)??null;let Z=BZ($);return m8.set(Q,Z),Z}function BZ($){let Q=LZ($),Z=Q?Y0(Q):null,J=UZ(Z)??jZ($.name);if(!J)return null;let Y=Z0(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function $0($,Q){let Z=R7($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){s6(Q,400,"Invalid chrome asset request");return}let Y=W0(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){s6(Q,404,"Chrome asset not found");return}let G=r8(Z,J);if(!H6(G)){s6(Q,404,"Chrome asset not found");return}try{let X=K0(Z,J,G),z=_6(X);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(z.byteLength)}),Q.end(z)}catch(X){s6(Q,500,X instanceof Error?X.message:"Failed to render chrome asset")}}function Q0($,Q){let Z=$.searchParams.get("name")??"";try{let J=Z0(Z);if(!J){s6(Q,404,"Placeholder asset not found");return}let Y=_6(J.pngPath);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),Q.end(Y)}catch(J){s6(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function Z0($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(p8.has($))return p8.get($)??null;let Q=NZ($),Z=Q?xZ($,Q):null;return p8.set($,Z),Z}function NZ($){let Z=FZ($)?.paths.find((Y)=>H6(Y));if(Z)return Z;if(!X0().some((Y)=>Y.iconName===$))return null;let J=s(D6,`${$}.icns`);return H6(J)?J:null}function FZ($){return Object.prototype.hasOwnProperty.call(l$,$)?l$[$]:null}function RZ($){let Q=a8($);if(!H6(Q))return[];let Z=p7(Q),J=F7(s(Z,"capabilities.plist")),Y=h$(J);if(Y.length===0)return[];let G=b$(Y.map((z)=>z.width*z.height)),X=[];for(let z=0;z<Y.length;z++){let K=Y[z],V=J0(R7(K.chromeIdentifier),G0(Z,K.mask),K.logicalScreenSize);if(!V)continue;let W=G[z]??"display";X.push({id:K.id,role:W,name:v$(W,K.label),width:K.width,height:K.height,chrome:V})}return X}function CZ($){let Q=a8($);if(!H6(Q))return null;let Z=Y0(Q);if(!Z?.chromeIdentifier)return null;return J0(Z.chromeIdentifier,Z.framebufferMaskSize,Z.screenSize)}function J0($,Q,Z){let J=W0($);if(!J)return null;let Y=null;if(J.compositeImage)Y=d8(J.identifier,J.compositeImage);let G=J.compositeImage?kZ(J.identifier,J.compositeImage):null,X=(G&&Q?SZ(Q,G):null)??Z??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!X||X.width<=0||X.height<=0)return null;let z=Y??{width:X.width+J.insets.left+J.insets.right,height:X.height+J.insets.top+J.insets.bottom},K={x:J.devicePadding.left,y:J.devicePadding.top,width:z.width,height:z.height},V={width:z.width+J.devicePadding.left+J.devicePadding.right,height:z.height+J.devicePadding.top+J.devicePadding.bottom},W={x:K.x+(z.width-X.width)/2,y:K.y+(z.height-X.height)/2,width:X.width,height:X.height},M=G?Math.max(0,G.radius-(G.width-X.width)/2):J.innerCornerRadius,B=J.slice?d8(J.identifier,J.slice.topLeft):null,L=J.identifier.startsWith("watch"),A=J.buttons.flatMap((D)=>{let q=d8(J.identifier,D.image);if(!q)return[];let j=DZ(D,q,z,J.devicePadding),T={x:q.width>0?(D.rolloverOffset.x-D.normalOffset.x)/q.width:0,y:q.height>0?(D.rolloverOffset.y-D.normalOffset.y)/q.height:0};return[{name:D.name,image:D.image,imageDown:D.imageDown,onTop:D.onTop||L,frame:{...j,...q},hover:T,usagePage:D.usagePage,usage:D.usage}]});return{identifier:J.identifier,frame:V,body:K,screen:W,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:M,compositeImage:J.compositeImage,slice:J.slice,corner:B,buttons:A}}function Y0($){let Q=F7($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?R7(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?MZ({...Q,__profileDir:p7($)},J):null,framebufferMaskSize:OZ({...Q,__profileDir:p7($)})}}function OZ($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;return G0(Z,Q)}function G0($,Q){if(!Q)return null;let Z=s($,`${Q}.pdf`);if(!H6(Z))return null;return i8(_6(Z))}function n7($){return EZ($.deviceTypeIdentifier)??$.name}function LZ($){let Q=a8(n7($));return H6(Q)?Q:null}function a8($){return s(n8,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function UZ($){if(!$)return null;let Q=new Set;if($.modelIdentifier)Q.add($.modelIdentifier);if($.productClass)Q.add($.productClass),Q.add(`${$.productClass}AP`);if(Q.size===0)return null;for(let Z of X0())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function jZ($){let Q=$.toLowerCase();if(Q.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test(Q))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test(Q))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test(Q))return"ipad-air-13-inch-m4";return null}function X0(){if(l8)return l8;let $=F7(s(D6,"MobileDevices-Info.plist"))??F7(s(p7(D6),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=R6(J),G=z6(Y.UTTypeIconFile);if(!G||!G.endsWith(".icns"))continue;let X=s(D6,G);if(!H6(X))continue;let K=R6(Y.UTTypeTagSpecification)["com.apple.device-model-code"],V=Array.isArray(K)?K.filter((W)=>typeof W==="string"&&W.length>0):[];if(V.length===0)continue;Z.push({description:z6(Y.UTTypeDescription)??"",iconFile:G,iconName:r$(G,".icns"),modelCodes:V})}return l8=Z,Z}function W0($){let Q=R7($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(u8.has(Q))return u8.get(Q)??null;let Z=s(t$,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(_6(Z,"utf-8"));J=_Z(Y)}catch{J=null}return u8.set(Q,J),J}function _Z($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=R7(Q),J=R6($.images),Y=R6(J.sizing),G=R6($.paths),X=j6(R6(G.simpleOutsideBorder).cornerRadiusX),z={top:j6(Y.topHeight),left:j6(Y.leftWidth),bottom:j6(Y.bottomHeight),right:j6(Y.rightWidth)},K=R6(J.devicePadding),V={top:j6(K.top),left:j6(K.left),bottom:j6(K.bottom),right:j6(K.right)},W=typeof J.composite==="string"?J.composite:null,M=AZ(J),B=Array.isArray($.inputs)?$.inputs.flatMap((A)=>{let D=TZ(R6(A));return D?[D]:[]}):[],L=new Set;for(let A of Object.values(J))if(typeof A==="string")L.add(A);for(let A of B)L.add(A.image);if(Array.isArray($.inputs))for(let A of $.inputs){let D=R6(A);if(typeof D.imageDown==="string")L.add(D.imageDown)}return{identifier:Z,insets:z,devicePadding:V,outerCornerRadius:X,innerCornerRadius:Math.max(X-Math.max(z.left,z.top),0),compositeImage:W,slice:M,buttons:B,allowedImages:L}}function AZ($){let Q=z6($.topLeft),Z=z6($.top),J=z6($.topRight),Y=z6($.right),G=z6($.bottomRight),X=z6($.bottom),z=z6($.bottomLeft),K=z6($.left);if(!Q||!Z||!J||!Y||!G||!X||!z||!K)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:G,bottom:X,bottomLeft:z,left:K}}function TZ($){let Q=z6($.name),Z=z6($.image);if(!Q||!Z)return null;let J=z6($.anchor),Y=z6($.align),G=R6($.offsets),X=p$(R6(G.normal)),z=p$(R6(G.rollover));return{name:Q,image:Z,imageDown:z6($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:X??z??{x:0,y:0},rolloverOffset:z??X??{x:0,y:0},usagePage:E6($.usagePage),usage:E6($.usage)}}function DZ($,Q,Z,J){let{left:Y,top:G}=J,X=2*$.normalOffset.x-$.rolloverOffset.x,z=2*$.normalOffset.y-$.rolloverOffset.y,K=$.align==="trailing"?Y+Z.width+X-Q.width:Y+X;switch($.anchor){case"left":return{x:Y+$.rolloverOffset.x-Q.width/2,y:G+$.rolloverOffset.y};case"right":return{x:Y+Z.width+X,y:G+z};case"top":return{x:K,y:G+z-Q.height};case"bottom":return{x:K,y:G+Z.height+z}}}function EZ($){if(!$)return null;if(!h8)h8=PZ();return h8.get($)??null}function PZ(){let $=new Map;try{for(let Q of VZ(n8)){if(!Q.endsWith(".simdevicetype"))continue;let Z=s(n8,Q),J=F7(s(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,G=typeof J?.CFBundleName==="string"?J.CFBundleName:r$(Q,".simdevicetype");if(Y)$.set(Y,G)}}catch{}return $}function F7($){try{let Q=l7("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function qZ($){let Q=E6($.mainScreenWidth),Z=E6($.mainScreenHeight),J=E6($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function IZ($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function d8($,Q){let Z=r8($,Q);if(!H6(Z))return null;return i8(_6(Z))}function r8($,Q){return s(t$,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function K0($,Q,Z){n$(c$,{recursive:!0});let J=o$(Z),Y=d$("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),G=s(c$,`${$}-${Y}.png`);if(H6(G))return G;let X=`${G}.${process.pid}.tmp`;return l7("sips",["-s","format","png",Z,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),i$(X,G),G}function xZ($,Q){n$(m$,{recursive:!0});let Z=o$(Q),J=d$("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=s(m$,`${$}-${J}.png`);if(H6(Y)){let z=d7(_6(Y));return{sourcePath:Q,pngPath:Y,width:z.width,height:z.height}}let G=`${Y}.${process.pid}.tmp`,X=`${Y}.${process.pid}.raw.png`;try{l7("sips",["-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4});let z=_6(X),K=wZ(z)??{x:0,y:0,...d7(z)};return l7("sips",["-c",String(K.height),String(K.width),"--cropOffset",String(K.y),String(K.x),"-s","format","png",Q,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),i$(G,Y),{sourcePath:Q,pngPath:Y,width:K.width,height:K.height}}finally{try{if(H6(X))u$(X)}catch{}try{if(H6(G))u$(G)}catch{}}}function d7($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function V0($,Q){let{width:Z,height:J}=d7($),Y=8,G=0,X=0,z=[];while(Y<$.byteLength){let D=$.readUInt32BE(Y);Y+=4;let q=$.toString("ascii",Y,Y+4);Y+=4;let j=$.subarray(Y,Y+D);if(Y+=D+4,q==="IHDR")G=j[8]??0,X=j[9]??0;else if(q==="IDAT")z.push(j);else if(q==="IEND")break}let K=X===6?4:X===4?2:0;if(G!==8||K===0||z.length===0)return null;let V=X===6,W=zZ(Buffer.concat(z)),M=Z*K,B=new Uint8Array(Z*J),L=Buffer.alloc(M),A=0;for(let D=0;D<J;D++){let q=W[A++]??0,j=Buffer.from(W.subarray(A,A+M));A+=M,fZ(j,L,K,q);for(let T=0;T<Z;T++){let _=T*K,E=j[_]??0,P=V?j[_+1]??0:E,N=V?j[_+2]??0:E,H=j[_+K-1]??0;if(Q(E,P,N,H))B[D*Z+T]=1}L=j}return{width:Z,height:J,mask:B}}function wZ($){let{width:Q,height:Z}=d7($),J=V0($,(K,V,W,M)=>M>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,G=Z,X=-1,z=-1;for(let K=0;K<Z;K++)for(let V=0;V<Q;V++){if(!J.mask[K*Q+V])continue;if(V<Y)Y=V;if(K<G)G=K;if(V>X)X=V;if(K>z)z=K}if(X<Y||z<G)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:G,width:X-Y+1,height:z-G+1}}function SZ($,Q){if(Q.width<=0)return null;let Z=Math.max(1,Math.round($.width/Q.width));return{width:$.width/Z,height:$.height/Z}}function kZ($,Q){let Z=yZ($,Q);if(!Z)return null;let J=V0(Z,(T,_,E,P)=>P>200&&T<30&&_<30&&E<30);if(!J)return null;let{width:Y,height:G,mask:X}=J,z=Math.floor(Y/2),K=Math.floor(G/2),V=(T,_)=>T>=0&&_>=0&&T<Y&&_<G&&X[_*Y+T]===1;if(!V(z,K))return null;let W=z;while(W>0&&V(W-1,K))W--;let M=z;while(M<Y-1&&V(M+1,K))M++;let B=K;while(B>0&&V(z,B-1))B--;let L=K;while(L<G-1&&V(z,L+1))L++;let A=L-B,D=(T,_)=>{let E=0;while(E<A&&!V(T,_?B+E:L-E))E++;return E},q=[D(W,!0),D(M,!0),D(W,!1),D(M,!1)],j=q.reduce((T,_)=>T+_,0)/q.length;return{x:W,y:B,width:M-W+1,height:L-B+1,radius:j}}function yZ($,Q){let Z=r8($,Q);if(!H6(Z))return null;try{return _6(K0($,Q,Z))}catch{return null}}function fZ($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let G=Y>=Z?$[Y-Z]:0,X=Q[Y]??0,z=Y>=Z?Q[Y-Z]:0;switch(J){case 0:break;case 1:$[Y]=$[Y]+G&255;break;case 2:$[Y]=$[Y]+X&255;break;case 3:$[Y]=$[Y]+Math.floor((G+X)/2)&255;break;case 4:$[Y]=$[Y]+bZ(G,X,z)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function bZ($,Q,Z){let J=$+Q-Z,Y=Math.abs(J-$),G=Math.abs(J-Q),X=Math.abs(J-Z);if(Y<=G&&Y<=X)return $;return G<=X?Q:Z}function s6($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function j6($){return E6($)??0}function E6($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function z6($){return typeof $==="string"&&$?$:null}function R6($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function p$($){let Q=E6($.x),Z=E6($.y);return Q===null||Z===null?null:{x:Q,y:Z}}import{exec as vZ}from"child_process";import{timingSafeEqual as hZ}from"crypto";import{request as uZ}from"http";import{WebSocketServer as gZ}from"ws";var cZ=1e4,mZ=4194304,i7="exec disabled; start with --allow-exec",z0="exec requires the exec token",lZ="host actions are only available to loopback clients";function pZ($){for(let Q=0;Q<$.length;Q++){let Z=$.charCodeAt(Q);if(Z<=31||Z===127)return!0}return/\s/.test($)}function dZ($,Q){if(!Q||typeof $!=="string")return!1;let Z=Buffer.from($),J=Buffer.from(Q);return Z.length===J.length&&hZ(Z,J)}function H0($){return x6($)&&o6($)}function nZ($,Q,Z,J,Y){let G=!1,X=!1,z=new Map,K=Z.ssePrefixes??[],V=(B)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(B))},W=setTimeout(()=>{if(!G)$.close()},cZ);W.unref?.();let M=(B,L)=>{if(z.has(B))return;let A=L.split("?")[0];if(!L.startsWith("/")||pZ(L)||!K.some((q)=>A===q)){V({sub:B,end:!0,error:"path not allowed"});return}if(!Q){V({sub:B,end:!0,error:"no local port"});return}let D;try{D=uZ({host:"127.0.0.1",port:Q,path:L,headers:{accept:"text/event-stream"}},(q)=>{q.on("data",(j)=>V({sub:B,data:j.toString("utf-8")})),q.on("end",()=>{z.delete(B),V({sub:B,end:!0})})})}catch{V({sub:B,end:!0,error:"bad path"});return}D.on("error",()=>{z.delete(B),V({sub:B,end:!0})}),D.end(),z.set(B,{destroy:()=>D.destroy()})};$.on("message",(B)=>{let L;try{L=JSON.parse(B.toString())}catch{return}if(!G){G=!0,X=dZ(L.token,Z.execToken),clearTimeout(W),V({ready:!0});return}if(typeof L.unsub==="number"){z.get(L.unsub)?.destroy(),z.delete(L.unsub);return}if(typeof L.sub==="number"&&typeof L.path==="string"){M(L.sub,L.path);return}if(typeof L.id==="number"&&L.rpc!==void 0){let{id:q}=L;if(!Z.onRpcRequest){V({id:q,error:"rpc requests not supported"});return}if(!Y){V({id:q,error:lZ});return}Z.onRpcRequest(L.rpc).then((j)=>V({...j,id:q})).catch((j)=>V({id:q,error:j instanceof Error?j.message:String(j)}));return}if(typeof L.id==="number"&&L.ui!==void 0){let{id:q}=L;if(!Z.onUiRequest){V({id:q,error:"ui requests not supported"});return}Z.onUiRequest(L.ui).then((j)=>V({id:q,...j})).catch((j)=>V({id:q,error:j instanceof Error?j.message:String(j)}));return}if(typeof L.id!=="number"||typeof L.command!=="string"||!L.command)return;let{id:A,command:D}=L;if(!Z.allowExec){V({id:A,stdout:"",stderr:i7,exitCode:126,error:i7});return}if(!J){V({id:A,stdout:"",stderr:"exec is only available to loopback clients",exitCode:126});return}if(!X){V({id:A,stdout:"",stderr:z0,exitCode:126,error:z0});return}vZ(D,{maxBuffer:16777216},(q,j,T)=>{let _={id:A,stdout:j.toString(),stderr:T.toString(),exitCode:q?q.code??1:0};try{Z.onCommandResult?.(D,_)}catch{}V(_)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(W);for(let B of z.values())B.destroy();z.clear()})}function M0($){let Q=new gZ({noServer:!0,maxPayload:mZ});return function(J,Y,G){let X=J.url??"",z=X.indexOf("?"),K=z===-1?X:X.slice(0,z);if(K!==$.path&&K!==`${$.path}/`)return!1;if(i6(J)!=="same")return Y.destroy(),!0;let V=($.allowShell??H0)(J),W=($.allowRpc??H0)(J),M=$.serverPort?.()||Y.localPort||void 0;return Q.handleUpgrade(J,Y,G,(B)=>{nZ(B,M,$,V,W)}),!0}}import{execFile as J2}from"child_process";import{randomUUID as Y2}from"crypto";import{closeSync as G2,constants as X2,fstatSync as W2,lstatSync as j0,openSync as K2,readFileSync as _0,unlinkSync as A0,writeSync as V2}from"fs";import{homedir as z2}from"os";import{basename as H2,dirname as M2,join as r7}from"path";var B0=[{key:"camera",label:"Camera"},{key:"microphone",label:"Microphone"},{key:"photos",label:"Photos"},{key:"photos-add",label:"Add to Photos"},{key:"contacts",label:"Contacts"},{key:"calendar",label:"Calendar"},{key:"reminders",label:"Reminders"},{key:"location",label:"Location"},{key:"location-always",label:"Location (Always)"},{key:"notifications",label:"Notifications"},{key:"motion",label:"Motion"},{key:"media-library",label:"Media Library"},{key:"siri",label:"Siri"}];function iZ($){return`'${$.replace(/'/g,"'\\''")}'`}function N0($){return $.map(iZ).join(" ")}import{execFile as oZ}from"child_process";import{existsSync as R0}from"fs";import{join as t8,resolve as aZ}from"path";var s8=L$(import.meta.url),C0=["extra-small","small","medium","large","extra-large","extra-extra-large","extra-extra-extra-large","accessibility-medium","accessibility-large","accessibility-extra-large","accessibility-extra-extra-large","accessibility-extra-extra-extra-large"],rZ=["none","grayscale","red-green","green-red","blue-yellow"],tZ={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},C7=["on","off"],sZ=new Set(["on","true","enabled","1","yes"]),eZ=new Set(["off","false","disabled","0","no"]),k6={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:rZ,aliases:tZ},"text-size":{via:"content_size",values:C0,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:C7,toggle:!0},"increase-contrast":{via:"increase_contrast",values:C7,toggle:!0},"show-borders":{via:"ax",values:C7,toggle:!0},"reduce-transparency":{via:"ax",values:C7,toggle:!0},voiceover:{via:"ax",values:C7,toggle:!0}};function O0($,Q){let Z=k6[$];if(!Z)return null;let J=Q.toLowerCase();if(Z.toggle){if(sZ.has(J))return"on";if(eZ.has(J))return"off";return null}let Y=Z.aliases?.[J]??J;if(Z.values.includes(Y))return Y;if(Z.extraValues?.includes(Y))return Y;return null}function F0(){let $=[t8(s8,"..","dist","simax","serve-sim-ax-settings"),t8(s8,"simax","serve-sim-ax-settings")];for(let Q of $)if(R0(Q))return aZ(Q);return null}var o7=null;function $2(){return o7??=(async()=>{let $=F0();if($)return $;let Q=t8(s8,"..","Sources","SimAXSettings","build.sh");if(!R0(Q))throw Error("sim-ax-settings binary not found — this build of serve-sim does not "+"include the simulator settings helper. Reinstall from a recent release.");console.error("[serve-sim] building sim-ax-settings (one-time)…"),await e8("bash",[Q]);let Z=F0();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),o7.catch(()=>{o7=null}),o7}function e8($,Q){return new Promise((Z,J)=>{oZ($,Q,{encoding:"utf-8",maxBuffer:4194304},(Y,G,X)=>{if(Y)J(Error(String(X).trim()||Y.message));else Z(String(G).trim())})})}function L0($,Q,Z){let J=["simctl","ui",$,Q];if(Z!==void 0)J.push(Z);return e8("xcrun",J)}async function $9($,...Q){let Z=await $2();return e8("xcrun",["simctl","spawn",$,Z,...Q])}function Q2($){return $==="enabled"?"on":"off"}function Z2($){return $==="on"?"enabled":"disabled"}async function Q9($,Q){let Z=k6[Q];if(!Z)throw Error(`unknown option: ${Q}`);if(Z.via==="ax")return $9($,"get",Q);let J=(await L0($,Z.via)).toLowerCase();return Z.toggle?Q2(J):J}async function a7($,Q,Z){let J=k6[Q];if(!J)throw Error(`unknown option: ${Q}`);if(J.via==="ax"){await $9($,"set",Q,Z);return}await L0($,J.via,J.toggle?Z2(Z):Z)}async function U0($){let Q=Object.entries(k6).filter(([,G])=>G.via!=="ax"),[Z,...J]=await Promise.all([$9($,"status").then((G)=>JSON.parse(G)).catch(()=>({})),...Q.map(([G])=>Q9($,G).catch(()=>"unsupported"))]),Y={};for(let[G,X]of Object.entries(k6))if(X.via==="ax")Y[G]=Z[G]??"unsupported";return Q.forEach(([G],X)=>{Y[G]=J[X]}),Y}var QG=`Usage: serve-sim ui [status] [--json] [-d udid]
|
|
62
62
|
serve-sim ui <option> [-d udid] Print the current value
|
|
63
63
|
serve-sim ui <option> <value> [-d udid] Change the value
|
|
64
64
|
|
|
@@ -67,53 +67,81 @@ Simulator-wide UI options:
|
|
|
67
67
|
liquid-glass clear | tinted
|
|
68
68
|
color-filter none | grayscale | red-green | green-red | blue-yellow
|
|
69
69
|
(protanopia/deuteranopia/tritanopia aliases accepted)
|
|
70
|
-
text-size ${
|
|
70
|
+
text-size ${C0.slice(0,4).join(" | ")} | …
|
|
71
71
|
(12 content-size categories, or increment | decrement)
|
|
72
72
|
reduce-motion on | off
|
|
73
73
|
increase-contrast on | off
|
|
74
74
|
show-borders on | off
|
|
75
75
|
reduce-transparency on | off
|
|
76
|
-
voiceover on | off`;
|
|
76
|
+
voiceover on | off`;var B2=16777216,N2=524288000,F2=1048576,R2=/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/,C2=/^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/,O2="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",I0=new RegExp(`^/tmp/serve-sim-(upload|install|camsrc)-${O2}\\.([a-z0-9]{1,10})$`),L2=/^serve-sim-screenshot-[0-9A-Za-z-]{1,64}\.png$/,U2=/^[A-Za-z0-9+/]*={0,2}$/,j2=["grant","revoke","reset"],_2=new Set(B0.map(($)=>$.key)),T0=["placeholder","webcam","image","video"],D0=["on","off"],A2=["primary","primary-1"],E0="installApp requires --allow-exec",T2=['tell application "System Events" to tell process "Simulator" to set frontmost to true','tell application "System Events" to tell process "Simulator" to perform action "AXRaise" of (first window whose name contains "watchOS")','tell application "System Events" to tell process "Simulator" to click menu item "Home" of menu "Device" of menu bar item "Device" of menu bar 1'];function X6($){throw Error($)}function N6($){let Q=$.udid;if(typeof Q!=="string"||!R2.test(Q))X6("invalid udid");return Q}function t7($){let Q=$.bundleId;if(typeof Q!=="string"||!C2.test(Q))X6("invalid bundle id");return Q}function e6($,Q,Z){let J=$[Q];if(typeof J!=="string"||!Z.includes(J))X6(`invalid ${Q}`);return J}function D2($){for(let Q=0;Q<$.length;Q++){let Z=$.charCodeAt(Q);if(Z<=31||Z===127)return!0}return!1}function P0($){let Q=$.webcamId;if(Q===void 0||Q==="")return;if(typeof Q!=="string"||Q.length>256||Q.startsWith("-")||D2(Q))X6("invalid webcamId");return Q}function O7($,Q="path",Z){let J=$[Q],Y=typeof J==="string"?I0.exec(J):null;if(!Y||Z&&!Z.includes(Y[1]))X6(`invalid ${Q}`);return J}function q0($,Q,Z){let J=$[Q];if(typeof J!=="number"||!Number.isFinite(J)||Math.abs(J)>Z)X6(`invalid ${Q}`);return J}function E2($,Q){if(/\.ts$/.test($))return["bun",[$,...Q]];if(/\.js$/.test($))return["node",[$,...Q]];return[$,Q]}function P2($,Q){return new Promise((Z)=>{J2($,Q,{maxBuffer:B2,encoding:"utf-8"},(J,Y,G)=>{let X=J?.code;Z({stdout:String(Y??""),stderr:String(G??"")||(J&&typeof X!=="number"?J.message:""),exitCode:J?typeof X==="number"?X:127:0})})})}function q2(){return new Date().toISOString().replace(/[:.]/g,"-").slice(0,23)}function x0($){let Q=$.run??P2,Z=()=>r7($.homeDir??z2(),"Desktop"),J=async(W,M)=>{let B=await Q(W,M);try{$.onCommandResult?.(N0([W,...M]),B)}catch{}return B},Y=(W)=>J(...E2($.serveSimBin,W)),G=async(W)=>{if(!await $.isKnownDevice(W))X6(`unknown or not booted device: ${W}`)},X=(W)=>{let M=W.path;if(typeof M!=="string"||M2(M)!==Z()||!L2.test(H2(M)))X6("invalid path");return M},z=async(W,M)=>{let B=await J("xcrun",["simctl","get_app_container",W,M,"app"]);if(B.exitCode!==0)X6(B.stderr.trim()||"App not found on simulator");let L=B.stdout.trim();if(!L)X6("Empty app path");return L},K=(W)=>O7(W,"filePath",["camsrc"]),V={async toggleAppearance(W){let M=N6(W);await G(M);let B=(await Q9(M,"appearance")).trim()==="dark"?"light":"dark";return await a7(M,"appearance",B),{appearance:B}},async home(W){let M=N6(W),B=W.watch===!0;if(await G(M),B)return{...await J("osascript",T2.flatMap((L)=>["-e",L]))};return{...await J("xcrun",["simctl","launch",M,"com.apple.springboard"])}},async screenshot(W){let M=N6(W),B=W.display===void 0?void 0:e6(W,"display",A2);await G(M);let L=r7(Z(),`serve-sim-screenshot-${q2()}.png`),A=await J("xcrun",["simctl","io",M,"screenshot",...B?[`--display=${B}`]:[],L]);return{...A,path:A.exitCode===0?L:""}},async screenshotThumbnail(W){let M=X(W),B=`/tmp/serve-sim-screenshot-thumb-${Y2()}.png`;try{if((await J("sips",["-Z","320",M,"--out",B])).exitCode!==0)return{data:""};return{data:_0(B).toString("base64")}}catch{return{data:""}}finally{try{A0(B)}catch{}}},async revealScreenshot(W){let M=X(W);return{...await J("open",["-R",M])}},async revealApp(W){let M=N6(W),B=t7(W);return await G(M),{...await J("open",["-R",await z(M,B)])}},async appDetails(W){let M=N6(W),B=t7(W);await G(M);let L=await z(M,B),A=r7(L,"Info.plist"),D=!1;try{D=j0(A).isFile()}catch{}let q=D?await J("plutil",["-convert","json","-o","-",A]):null,j={};if(q?.exitCode===0)try{j=JSON.parse(q.stdout)}catch{}let T,E=(j?.CFBundleIcons?.CFBundlePrimaryIcon??j?.["CFBundleIcons~ipad"]?.CFBundlePrimaryIcon)?.CFBundleIconFiles??j?.CFBundleIconFiles;if(Array.isArray(E)&&E.length>0)T=String(E[E.length-1]);else if(typeof j?.CFBundleIconFile==="string")T=j.CFBundleIconFile;let P=null;if(T&&!T.includes("/")&&T!==".."){let N=[`${T}@3x.png`,`${T}@2x.png`,`${T}.png`,`${T}60x60@3x.png`,`${T}60x60@2x.png`];for(let H of N)try{let R=r7(L,H);if(!j0(R).isFile())continue;P=`data:image/png;base64,${_0(R).toString("base64")}`;break}catch{}}return{appPath:L,displayName:j.CFBundleDisplayName??j.CFBundleName,shortVersion:j.CFBundleShortVersionString,bundleVersion:j.CFBundleVersion,minOS:j.MinimumOSVersion,executable:j.CFBundleExecutable,iconDataUrl:P}},async permissions(W){let M=N6(W),B=t7(W),L=e6(W,"action",j2),A=W.service;if(typeof A!=="string"||!(_2.has(A)||A==="all"&&L==="reset"))X6("invalid service");return await G(M),{...await Y(["permissions",L,A,B,"-d",M])}},async cameraListWebcams(){return{...await Y(["camera","--list-webcams"])}},async cameraInject(W){let M=N6(W),B=t7(W),L=e6(W,"source",T0),A=e6(W,"mirror",D0),D=["camera",B,"-d",M,"--quiet"];if(L==="image"||L==="video")D.push("--file",K(W));else if(L==="webcam"){let q=P0(W);D.push("--webcam",...q?[q]:[])}return D.push("--mirror",A),await G(M),{...await Y(D)}},async cameraSwitch(W){let M=N6(W),B=e6(W,"source",T0),L=B==="image"||B==="video",A=["camera","switch",L?"file":B];if(B==="webcam"){let D=P0(W);if(D)A.push(D)}if(L)A.push(K(W));return A.push("-d",M,"--quiet"),await G(M),{...await Y(A)}},async cameraMirror(W){let M=N6(W),B=e6(W,"mirror",D0);return await G(M),{...await Y(["camera","mirror",B,"-d",M,"--quiet"])}},async cameraStop(W){let M=N6(W);return await G(M),{...await Y(["camera","--stop-webcam","-d",M])}},async uploadChunk(W){let M=O7(W);if(!$.allowExec&&I0.exec(M)[1]==="install")X6(E0);let B=W.data;if(typeof B!=="string"||B.length>Math.ceil(F2/3)*4||!U2.test(B))X6("invalid data");let L=Buffer.from(B,"base64"),{O_WRONLY:A,O_CREAT:D,O_EXCL:q,O_APPEND:j,O_NOFOLLOW:T}=X2,_=K2(M,W.append===!0?A|j|T:A|D|q|T,384);try{if(W2(_).size+L.length>N2)X6("File too large (max 500MB)");V2(_,L)}finally{G2(_)}return{ok:!0}},async uploadRemove(W){let M=O7(W);try{A0(M)}catch{}return{ok:!0}},async addMedia(W){let M=N6(W),B;try{B=O7(W,"path",["upload"])}catch{B=X(W)}return await G(M),{...await J("xcrun",["simctl","addmedia",M,B])}},async installApp(W){if(!$.allowExec)X6(E0);let M=N6(W),B=O7(W,"path",["install"]);if(!B.endsWith(".ipa"))X6("invalid path");return await G(M),{...await J("xcrun",["simctl","install",M,B])}},async location(W){let M=N6(W),L=W.lat===void 0&&W.lng===void 0?null:`${q0(W,"lat",90).toFixed(7)},${q0(W,"lng",180).toFixed(7)}`;return await G(M),{...await J("xcrun",["simctl","location",M,...L?["set",L]:["clear"]])}}};return async(W)=>{let{method:M,params:B}=W??{};if(typeof M!=="string"||!Object.prototype.hasOwnProperty.call(V,M))X6(`unknown method: ${String(M)}`);let L=B&&typeof B==="object"&&!Array.isArray(B)?B:{};return V[M](L)}}function w0($){return["simctl","bootstatus",$]}import{createHash as I2}from"crypto";function S0($){let Z=`(function () {
|
|
77
|
+
var msg = document.getElementById("msg");
|
|
78
|
+
var match = /(?:^#|&)token=([^&]*)/.exec(location.hash);
|
|
79
|
+
var url = new URL(location.href);
|
|
80
|
+
var hadQueryToken = url.searchParams.has("token");
|
|
81
|
+
url.hash = "";
|
|
82
|
+
url.searchParams.delete("token");
|
|
83
|
+
if (match || hadQueryToken) history.replaceState(null, "", url.pathname + url.search);
|
|
84
|
+
if (!match) {
|
|
85
|
+
msg.textContent = hadQueryToken
|
|
86
|
+
? "Tokens in ?token= are not accepted (URLs end up in server logs). Open the share link as " + url.pathname + "#token=<token> instead."
|
|
87
|
+
: "This serve-sim preview requires an auth token. Open the share link: " + url.pathname + "#token=<token>.";
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
var token;
|
|
91
|
+
try { token = decodeURIComponent(match[1]); } catch (e) { token = ""; }
|
|
92
|
+
msg.textContent = "Signing in\\u2026";
|
|
93
|
+
fetch(${JSON.stringify($).replace(/</g,"\\u003c")}, { method: "POST", credentials: "same-origin", headers: { "X-Serve-Sim-Auth": token } })
|
|
94
|
+
.then(function (res) {
|
|
95
|
+
if (res.ok) { location.reload(); return; }
|
|
96
|
+
msg.textContent = res.status === 429
|
|
97
|
+
? "Too many attempts. Wait a minute, then reopen the share link."
|
|
98
|
+
: "Invalid serve-sim auth token.";
|
|
99
|
+
}, function () { msg.textContent = "Could not reach the serve-sim server."; });
|
|
100
|
+
})();`,J=I2("sha256").update(Z).digest("base64"),Y=`<!doctype html><html><head><meta charset="utf-8"><meta name="referrer" content="no-referrer"><title>serve-sim</title></head><body style="font:14px system-ui,sans-serif;padding:2em"><p id="msg">This serve-sim preview requires an auth token.</p><script>${Z}</script></body></html>`,G=`default-src 'none'; script-src 'sha256-${J}'; connect-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'`;return{html:Y,csp:G}}var D9=P7(CJ(),"serve-sim"),H4,TJ="854a02be78c7ffea104cb523636efa991bef5c5b",J8=9222,M4=b9(),DJ=1048576,b6=null;function B4($){let Q=new URL($,"http://x").searchParams.get("limit");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function N4($){let Q=new URL($,"http://x").searchParams.get("since");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function U9($,Q){try{let Z=G$($,Q);if(Z)A6(Z)}catch{}}var EJ=new Set(["host.exp.Exponent","dev.expo.Exponent"]),PJ=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],qJ=/(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;function F4($){return!qJ.test($)}function IJ($){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test($)}function xJ($){let Q=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec($);if(!Q)return null;return{bundleId:Q[1],pid:parseInt(Q[2],10)}}function R4($,Q){if(EJ.has(Q))return Promise.resolve(!0);return new Promise((Z)=>{h6("xcrun",["simctl","get_app_container",$,Q,"app"],{timeout:2000},(J,Y)=>{if(J)return Z(!1);let G=Y.trim();if(!G)return Z(!1);for(let X of PJ)if(A4(P7(G,X)))return Z(!0);Z(!1)})})}function C4($){return $.trim().replace(/\s+/g," ").toLowerCase()}function nG($,Q){let Z=C4(Q);if(!Z)return null;for(let[J,Y]of Object.entries($))if([Y.CFBundleDisplayName,Y.CFBundleName,Y.CFBundleExecutable].filter((X)=>typeof X==="string").some((X)=>C4(X)===Z))return Y.CFBundleIdentifier||J;return null}var T7={at:0,booted:null};async function T4(){let $=Date.now();if(T7.booted&&$-T7.at<1500)return T7.booted;try{let Q=await new Promise((Y,G)=>{h6("xcrun",["simctl","list","devices","booted","-j"],{encoding:"utf-8",timeout:3000},(X,z)=>{if(X)G(X);else Y(z)})}),Z=JSON.parse(Q),J=new Set;for(let Y of Object.values(Z.devices))for(let G of Y)if(G.state==="Booted")J.add(G.udid);return T7={at:$,booted:J},J}catch{return null}}var j9={at:0,udid:null};function wJ(){let $=Date.now();if($-j9.at<1500)return j9.udid;let Q=null;try{Q=D7("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{Q=null}return j9={at:$,udid:Q},Q}async function v6(){let $;try{$=HJ(D9).filter((J)=>J.startsWith("server-")&&J.endsWith(".json"))}catch{return[]}let Q=await T4(),Z=[];for(let J of $){let Y=P7(D9,J);try{let G=JSON.parse(MJ(Y,"utf-8")),X=w$(G);if(!X){B7("helper pid=%d gone, removing %s",G.pid,Y);try{BJ(Y)}catch{}continue}if(X.pid!==G.pid)S$(X);let z=y$(X,Q,process.pid);if(z!=="keep"){if(z==="recycle-self")B7("closing in-process session for shut-down device %s (own pid %d)",X.device,X.pid),P8(X.device);else{B7("asking stale helper pid=%d to exit (device %s no longer booted)",X.pid,X.device);try{process.kill(X.pid,"SIGTERM")}catch{}}continue}Z.push(X)}catch{}}return Z}function Q7($,Q){if(Q)return $.find((Z)=>Z.device===Q)??null;return $[0]??null}function O4($){let Q=$.indexOf("?");if(Q===-1)return null;return new URLSearchParams($.slice(Q+1)).get("device")}function SJ($){let Q=$.indexOf("?");if(Q===-1)return{limit:null,offset:0};let Z=new URLSearchParams($.slice(Q+1)),J=Z.get("limit"),Y=Z.get("offset"),G=J==null||!/^\d+$/.test(J)?null:Math.min(Math.max(Number(J),1),1000),X=Y==null||!/^\d+$/.test(Y)?0:Math.max(Number(Y),0);return{limit:G,offset:X}}function _7($){let Q=$.headers?.host;if(Q)return Q;let Z=$.socket.localPort;return Z?`localhost:${Z}`:void 0}function A7($,Q,Z){return`${`${$}${Q}`}?device=${encodeURIComponent(Z)}`}function D4($){if(!("authTokenSha256"in $)&&!("allowExec"in $))return $;let{authTokenSha256:Q,allowExec:Z,...J}=$;return J}function Y8($,Q,Z="",J="http",Y=!1){if($=D4($),!Q)return $;if(!Y){let W;try{W=new URL(`http://${Q}`).hostname}catch{return $}if(W==="localhost"||W==="127.0.0.1"||W==="[::1]")return $;let M=(B)=>B.replace("127.0.0.1",W);return{...$,url:M($.url),streamUrl:M($.streamUrl),wsUrl:M($.wsUrl)}}let z=`${`${Z==="/"?"":Z.replace(/\/+$/,"")}/helper`}/${encodeURIComponent($.device)}`,K=`${J}://${Q}`,V=`${J==="https"?"wss":"ws"}://${Q}`;return{...$,url:`${K}${z}`,streamUrl:`${K}${z}/stream.mjpeg`,wsUrl:`${V}${z}/ws`}}function kJ($){return`${$==="/"?"":$}/helper`}function yJ($){return`${$==="/"?"":$}/devtools`}function fJ($,Q){let Z=new URL($,"http://serve-sim.local");if(!Z.pathname.startsWith(`${Q}/page/`))return null;return{upstreamPath:`/devtools${Z.pathname.slice(Q.length)}${Z.search}`}}function _9($){try{return new URL($||"/","http://serve-sim.local").pathname}catch{let Q=$.indexOf("?");return Q===-1?$||"/":$.slice(0,Q)||"/"}}function L4($,Q){let Z=new URL($,"http://serve-sim.local");if(Z.pathname!==Q&&!Z.pathname.startsWith(`${Q}/`))return null;let Y=Z.pathname.slice(Q.length).replace(/^\/+/,"").split("/").filter(Boolean),G=new Set(["ax","config","foreground","health","stream.avcc","stream.mjpeg","stream.3d.mjpeg","ws"]),X=Z.searchParams.get("device"),z=Y;if(Y[0]&&!G.has(Y[0]))X=decodeURIComponent(Y[0]),z=Y.slice(1);let K=z.length>0?`/${z.join("/")}`:"/";return Z.searchParams.delete("device"),{device:X,upstreamPath:`${K}${Z.search}`}}var bJ="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";function E9($,Q){let Z=Q.length,J;if(Z<126)J=Buffer.from([128|$,Z]);else if(Z<=65535)J=Buffer.alloc(4),J[0]=128|$,J[1]=126,J.writeUInt16BE(Z,2);else J=Buffer.alloc(10),J[0]=128|$,J[1]=127,J.writeBigUInt64BE(BigInt(Z),2);return Buffer.concat([J,Q])}function E4($){if($.length<2)return null;let Q=$[0]&15,Z=($[1]&128)!==0,J=$[1]&127,Y=2;if(J===126){if($.length<Y+2)return null;J=$.readUInt16BE(Y),Y+=2}else if(J===127){if($.length<Y+8)return null;let z=$.readBigUInt64BE(Y);if(z>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");J=Number(z),Y+=8}let G=Y;if(Z)Y+=4;if($.length<Y+J)return null;let X=Buffer.from($.subarray(Y,Y+J));if(Z){let z=$.subarray(G,G+4);for(let K=0;K<X.length;K++)X[K]=X[K]^z[K%4]}return{opcode:Q,payload:X,consumed:Y+J}}function E7($,Q,Z=Buffer.alloc(0)){if($.destroyed||!$.writable)return;$.write(E9(Q,Z))}function U4($){let Q=new Uint8Array($.length);return Q.set($),Q}function P4($,Q){let Z=$.headers["sec-websocket-key"];if(typeof Z!=="string")return Q.end(`HTTP/1.1 400 Bad Request\r
|
|
77
101
|
\r
|
|
78
|
-
`),!1;let J=
|
|
102
|
+
`),!1;let J=jJ("sha1").update(Z+bJ).digest("base64");return Q.write(`HTTP/1.1 101 Switching Protocols\r
|
|
79
103
|
Upgrade: websocket\r
|
|
80
104
|
Connection: Upgrade\r
|
|
81
105
|
Sec-WebSocket-Accept: ${J}\r
|
|
82
106
|
\r
|
|
83
|
-
`),$.resume(),!0}function z2(Q,$,Z,J){if(!k9(Q,$))return;let Y=new _9(J);Y.binaryType="arraybuffer";let X=!1,G=!1,N=[],K=Buffer.from(Z),V=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{$.end(o5(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},z=(H)=>{if(X&&Y.readyState===_9.OPEN){Y.send(H.opcode===1?H.payload.toString("utf8"):I9(H.payload));return}N.push({opcode:H.opcode,payload:Buffer.from(H.payload)})},F=()=>{try{while(K.length>0){let H=S9(K);if(!H)break;if(K=K.subarray(H.consumed),H.opcode===8){$Q($,8,H.payload),V();return}if(H.opcode===9){$Q($,10,H.payload);continue}if(H.opcode===1||H.opcode===2)z({opcode:H.opcode,payload:H.payload})}}catch{V()}};Y.onopen=()=>{X=!0;for(let H of N)Y.send(H.opcode===1?H.payload.toString("utf8"):I9(H.payload));N=[]},Y.onmessage=(H)=>{let L=H.data,U=typeof L==="string"?Buffer.from(L):Buffer.from(L);$Q($,typeof L==="string"?1:2,U)},Y.onerror=V,Y.onclose=V,$.on("data",(H)=>{if(typeof H==="string")H=Buffer.from(H);K=Buffer.concat([K,H]),F()}),$.on("error",V),$.on("close",V),F()}async function H2(Q,$,Z){if(!$2(Z)){$.writeHead(400,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({error:"invalid_device"}));return}if(Q.method!=="GET"){$.writeHead(405,{Allow:"GET","Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({error:"method_not_allowed"}));return}try{let J=await R6(Z);$.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify(J))}catch(J){$.writeHead(500,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({udid:Z,alive:!1,error:J instanceof Error?J.message:String(J)}))}}function N2(Q,$,Z,J){if(!Z)return!1;let Y=J.split("?")[0];if(Y==="/camera/status")return H2(Q,$,Z),!0;let X;try{X=Q5(Z)}catch{return!1}switch(Y){case"/stream.3d.mjpeg":return X.handleDuoMjpeg(Q,$),!0;case"/stream.mjpeg":return X.handleMjpeg(Q,$),!0;case"/stream.avcc":return X.handleAvcc(Q,$),!0;case"/config":return X.handleConfig(Q,$),!0;case"/health":return X.handleHealth(Q,$),!0;case"/ax":return X.handleAx(Q,$),!0;case"/foreground":return X.handleForeground(Q,$),!0;default:return!1}}async function M2(Q,$,Z){if(await new Promise((Y)=>O7("xcrun",["simctl","boot",Q],()=>Y())),!await new Promise((Y)=>{O7("xcrun",g8(Q),{timeout:180000},(X)=>Y(!X))})){if(!await new Promise((X)=>{O7("xcrun",["simctl","list","devices","-j"],(G,N)=>{if(G)return X(!1);try{let K=JSON.parse(N);X(Object.values(K.devices).flat().some((V)=>V.udid===Q&&V.state==="Booted"))}catch{X(!1)}})}))return`Device ${Q} failed to reach booted state`}return WQ(H6(Q,$,Z)),null}function F2(Q,$){let Z=[],J=[],Y=Buffer.from($),X=!1,G=()=>{if(X)return;X=!0;for(let V of J)V()},N=()=>{G();try{Q.end(o5(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},K=()=>{for(;;){let V;try{V=S9(Y)}catch{N();return}if(!V)return;if(Y=Y.subarray(V.consumed),V.opcode===8)return N();if(V.opcode===9){$Q(Q,10,V.payload);continue}if(V.opcode===1||V.opcode===2)for(let z of Z)z(V.payload)}};if(Q.on("data",(V)=>{Y=Buffer.concat([Y,V]),K()}),Q.on("close",G),Q.on("error",G),$.length)K();return{send(V){$Q(Q,2,V)},on(V,z){if(V==="message")Z.push(z);else J.push(z)},close:N}}function B2(Q,$,Z,J){if(!J)return!1;let Y;try{Y=Q5(J)}catch{return!1}if(!k9(Q,$))return!0;return Y.attachHidSocket(F2($,Z)),!0}function l5(Q,$,Z,J,Y,X=!1,G){let N=($===""?"":$)+"/grid/api";return{...Q,basePath:$,appStateEndpoint:s7($,"/appstate",Q.device),eventLogEndpoint:s7($,"/api/event-log",Q.device),eventLogEventsEndpoint:s7($,"/api/event-log/events",Q.device),axEndpoint:s7($,"/ax",Q.device),cameraStatusEndpoint:`${$==="/"?"":$}/helper/${encodeURIComponent(Q.device)}/camera/status`,devtoolsEndpoint:s7($,"/devtools",Q.device),serveSimBin:Z,gridApiEndpoint:N,gridStartEndpoint:N+"/start",gridShutdownEndpoint:N+"/shutdown",gridMemoryEndpoint:N+"/memory",previewEndpoint:$===""?"/":$,execToken:J,...Y?{codec:Y}:{},...G?{initialState:G}:{},...X?{proxyHelpers:!0}:{}}}async function R2(Q){return new Promise(($)=>{let Z=nJ();Z.once("error",()=>$(!1)),Z.once("listening",()=>Z.close(()=>$(!0))),Z.listen(Q,"127.0.0.1")})}async function x9(Q){let $=`http://127.0.0.1:${Q}`;try{let Z=await fetch(`${$}/json/version`);if(!Z.ok)return null;if((await Z.json()).Browser!=="Safari/inspect-webkit")return null;return{port:Q,cdpUrl:$,async listTargets(){return(await(await fetch(`${$}/json/list`)).json()).filter((G)=>G.id.startsWith("sim:")).map((G)=>{let K=G.id.split(":")[1],V=G.description?.match(/\(([^)]+)\)/)?.[1];return{id:G.id,title:G.title||G.url||"Untitled",url:/^https?:/i.test(G.url)?G.url:"about:blank",type:G.type||"page",udid:K,bundleId:V}})}}}catch{return null}}async function O2(){if(B7)try{return await(await B7).listTargets(),B7}catch{B7=null}return B7=(async()=>{let{startCdpServer:Q}=await Promise.resolve().then(() => (O9(),R9));for(let $=PQ;$<PQ+50;$++){if(!await R2($)){let Z=await x9($);if(Z)return Z;continue}try{let Z=await Q({host:"127.0.0.1",port:$});return{port:$,cdpUrl:`http://127.0.0.1:${$}`,async listTargets(){return Z.getTargets().filter((J)=>J.source?.kind==="simulator").map((J)=>{let Y=J.url??"";return{id:J.targetId,title:J.title||J.appName||Y||"Untitled",url:/^https?:/i.test(Y)?Y:"about:blank",type:J.type||"page",appName:J.appName,bundleId:J.bundleId,udid:J.source?.id,inUseByOtherInspector:!!J.inUseByOtherInspector}})},highlightTarget:Z.highlightTarget?.bind(Z),releaseHighlight:Z.releaseHighlight?.bind(Z)}}catch(Z){if(Z?.code==="EADDRINUSE"){let J=await x9($);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${PQ}-${PQ+49}`)})().catch((Q)=>{throw B7=null,Q}),B7}function _2(Q){return Array.isArray(Q)?Q[0]:Q}function y9(Q){return _2(Q.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function C2(Q){return y9(Q)==="https"?"wss":"ws"}function IQ(Q){return y9(Q)==="https"?"https":"http"}function U2(Q,$,Z,J){let Y=new URL(`${Q}/inspector.html`,"http://serve-sim.local");return Y.searchParams.set($,`${Z}/page/${encodeURIComponent(J)}`),`${Y.pathname}${Y.search}`}var m5=null;function d5(){try{let Q=process.argv;if(Q[1]&&w9(Q[1]))return Q[1]}catch{}return"serve-sim"}function A2(){if(!m5)m5=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLXdoaXRlOiNmZmY7LS1zcGFjaW5nOi4yNXJlbTstLWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1mb250LXdlaWdodC1zZW1pYm9sZDo2MDA7LS10cmFja2luZy13aWRlOi4wMjVlbTstLWxlYWRpbmctdGlnaHQ6MS4yNTstLWxlYWRpbmctc251ZzoxLjM3NTstLXJhZGl1cy14czouMTI1cmVtOy0tcmFkaXVzLW1kOi4zNzVyZW07LS1yYWRpdXMtbGc6LjVyZW07LS1yYWRpdXMteGw6Ljc1cmVtOy0tZWFzZS1vdXQ6Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKTstLWVhc2UtaW4tb3V0OmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tYmx1ci1tZDoxMnB4Oy0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7LS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tZGVmYXVsdC1mb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpOy0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7LS1jb2xvci1wYW5lbDojMWMxYzFlOy0tY29sb3ItcGFuZWwtYmc6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKTstLWNvbG9yLXBhbmVsLWJnLXRyYW5zbHVjZW50OnZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudCk7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxODE4MThhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5cW2NvbnRhaW5lci10eXBlXDppbmxpbmUtc2l6ZVxde2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFsycHhcXXt0b3A6MnB4fS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMFwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucmlnaHQtMlwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnJpZ2h0LTN7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucmlnaHQtXFs5cHhcXXtyaWdodDo5cHh9LmJvdHRvbS0we2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5ib3R0b20tMFwuNXtib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LmJvdHRvbS0ze2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5sZWZ0LTB7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5sZWZ0LTFcLzJ7bGVmdDo1MCV9LmxlZnQtMlwuNXtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ubGVmdC0ze2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uei0xe3otaW5kZXg6MX0uei0xMHt6LWluZGV4OjEwfS56LTIwe3otaW5kZXg6MjB9LnotMzB7ei1pbmRleDozMH0uei0zNXt6LWluZGV4OjM1fS56LTM2e3otaW5kZXg6MzZ9LnotNDB7ei1pbmRleDo0MH0uei01MHt6LWluZGV4OjUwfS5jb250YWluZXJ7d2lkdGg6MTAwJX1AbWVkaWEgKG1pbi13aWR0aDo0MHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDByZW19fUBtZWRpYSAobWluLXdpZHRoOjQ4cmVtKXsuY29udGFpbmVye21heC13aWR0aDo0OHJlbX19QG1lZGlhIChtaW4td2lkdGg6NjRyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjY0cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo4MHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6ODByZW19fUBtZWRpYSAobWluLXdpZHRoOjk2cmVtKXsuY29udGFpbmVye21heC13aWR0aDo5NnJlbX19Lm0tMHttYXJnaW46Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0uLW14LTF7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi0xKX0ubXgtMFwuNXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5teC0xe21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uLW15LTJ7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLTIpfS5teS0xe21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5tdC0wXC41e21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Lm10LTJ7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5tdC1cWzNweFxde21hcmdpbi10b3A6M3B4fS5tci1cWzNweFxde21hcmdpbi1yaWdodDozcHh9Lm1sLTBcLjV7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LnRhYmxle2Rpc3BsYXk6dGFibGV9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uc2l6ZS0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5zaXplLTNcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnNpemUtNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5zaXplLTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uc2l6ZS05e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOSl9LnNpemUtXFsycHhcXXt3aWR0aDoycHg7aGVpZ2h0OjJweH0uc2l6ZS1cWzE0cHhcXXt3aWR0aDoxNHB4O2hlaWdodDoxNHB4fS5zaXplLVxbMThweFxde3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9LnNpemUtXFsxOXB4XF17d2lkdGg6MTlweDtoZWlnaHQ6MTlweH0uc2l6ZS1mdWxse3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmgtMlwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5oLTN7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LmgtM1wuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5oLTR7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNCl9LmgtNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uaC01XC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LmgtNntoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0uaC03e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5oLTh7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOCl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMTApfS5oLVxbM3B4XF17aGVpZ2h0OjNweH0uaC1cWzEzcHhcXXtoZWlnaHQ6MTNweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzE2cHhcXXtoZWlnaHQ6MTZweH0uaC1cWzE4cHhcXXtoZWlnaHQ6MThweH0uaC1cWzIycHhcXXtoZWlnaHQ6MjJweH0uaC1cWzI2cHhcXXtoZWlnaHQ6MjZweH0uaC1cWzMwcHhcXXtoZWlnaHQ6MzBweH0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXB4e2hlaWdodDoxcHh9Lmgtc2NyZWVue2hlaWdodDoxMDB2aH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFsyNjBweFxde21heC1oZWlnaHQ6MjYwcHh9Lm1heC1oLVxbMzIwcHhcXXttYXgtaGVpZ2h0OjMyMHB4fS5tYXgtaC1mdWxse21heC1oZWlnaHQ6MTAwJX0ubWluLWgtMHttaW4taGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi1oLVxbMjJweFxde21pbi1oZWlnaHQ6MjJweH0ubWluLWgtXFszMHB4XF17bWluLWhlaWdodDozMHB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTJcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS53LTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0udy01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnctNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS53LTd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0udy04e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOCl9LnctMTB7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMCl9LnctMTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMSl9LnctMjF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyMSl9LnctMzZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozNil9LnctXFsyMnB4XF17d2lkdGg6MjJweH0udy1cWzMwcHhcXXt3aWR0aDozMHB4fS53LVxbMzJcJVxde3dpZHRoOjMyJX0udy1cWzM2XCVcXXt3aWR0aDozNiV9LnctXFs0MFwlXF17d2lkdGg6NDAlfS53LVxbNDJcJVxde3dpZHRoOjQyJX0udy1cWzQ2XCVcXXt3aWR0aDo0NiV9LnctXFs0OFwlXF17d2lkdGg6NDglfS53LVxbNThcJVxde3dpZHRoOjU4JX0udy1cWzYyXCVcXXt3aWR0aDo2MiV9LnctXFs2OFwlXF17d2lkdGg6NjglfS53LVxbNzBcJVxde3dpZHRoOjcwJX0udy1cWzc0XCVcXXt3aWR0aDo3NCV9LnctXFsxMjBweFxde3dpZHRoOjEyMHB4fS53LVxbY2FsY1woMTAwXCVcKzhweFwpXF17d2lkdGg6Y2FsYygxMDAlICsgOHB4KX0udy1cW21pblwoMzIwcHhcLGNhbGNcKDEwMHZ3LTMycHhcKVwpXF17d2lkdGg6bWluKDMyMHB4LDEwMHZ3IC0gMzJweCl9LnctZnVsbHt3aWR0aDoxMDAlfS53LXB4e3dpZHRoOjFweH0ubWF4LXctOTB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOTApfS5tYXgtdy0xMjB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTIwKX0ubWF4LXctXFsxNTBweFxde21heC13aWR0aDoxNTBweH0ubWF4LXctXFszNjBweFxde21heC13aWR0aDozNjBweH0ubWF4LXctZnVsbHttYXgtd2lkdGg6MTAwJX0ubWluLXctMHttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLXctXFs1NnB4XF17bWluLXdpZHRoOjU2cHh9Lm1pbi13LVxbMjAwcHhcXXttaW4td2lkdGg6MjAwcHh9Lm1pbi13LVxbMjIwcHhcXXttaW4td2lkdGg6MjIwcHh9Lm1pbi13LXB4e21pbi13aWR0aDoxcHh9LmZsZXgtMXtmbGV4OjF9LnNocmlua3tmbGV4LXNocmluazoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS5ncm93e2ZsZXgtZ3JvdzoxfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjdzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC44c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC44cyBsaW5lYXIgaW5maW5pdGV9LmN1cnNvci1jb2wtcmVzaXple2N1cnNvcjpjb2wtcmVzaXplfS5jdXJzb3ItZGVmYXVsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLW5vdC1hbGxvd2Vke2N1cnNvcjpub3QtYWxsb3dlZH0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmN1cnNvci1wcm9ncmVzc3tjdXJzb3I6cHJvZ3Jlc3N9LmN1cnNvci10ZXh0e2N1cnNvcjp0ZXh0fS50b3VjaC1ub25le3RvdWNoLWFjdGlvbjpub25lfS5yZXNpemV7cmVzaXplOmJvdGh9Lmxpc3Qtbm9uZXtsaXN0LXN0eWxlLXR5cGU6bm9uZX0uYXBwZWFyYW5jZS1ub25le2FwcGVhcmFuY2U6bm9uZX0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOjFmcl8xZnJfMWZyXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnIgMWZyfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6YXV0b18xZnJfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6YXV0b19taW5tYXhcKDBcLDFmclwpX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byBtaW5tYXgoMCwxZnIpYXV0b30uZ3JpZC1jb2xzLVxbNTZweF8xZnJfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczo1NnB4IDFmciBhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1ye2JvcmRlci1yaWdodC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1yaWdodC13aWR0aDoxcHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlwhYm9yZGVyLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC42XClcXXtib3JkZXItY29sb3I6IzBhODRmZjk5IWltcG9ydGFudH0uYm9yZGVyLVxbXCMzYjVmOTlcXXtib3JkZXItY29sb3I6IzNiNWY5OX0uYm9yZGVyLVxbXCM1ZjYyNjhcXXtib3JkZXItY29sb3I6IzVmNjI2OH0uYm9yZGVyLVxbXCMyMjJcXXtib3JkZXItY29sb3I6IzIyMn0uYm9yZGVyLVxbXCNmZjQ1M2FcXVwvNTB7Ym9yZGVyLWNvbG9yOiNmZjQ1M2E4MDtib3JkZXItY29sb3I6Y29sb3IoZGlzcGxheS1wMyAuOTIyNjczIC4zMzMxMzQgLjI3MTUxLy41KTtib3JkZXItY29sb3I6bGFiKDU4Ljc2MjglIDY5Ljg0NjcgNTAuMzg4Ni8uNSl9LmJvcmRlci1hY2NlbnR7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJvcmRlci1kYW5nZXJcLzIwe2JvcmRlci1jb2xvcjojZjg3MTcxMzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjojZjg3MTcxNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6I2ZiYmYyNDQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZXtib3JkZXItY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItdC1cW1wjZjRmNGY1XF17Ym9yZGVyLXRvcC1jb2xvcjojZjRmNGY1fS5ib3JkZXItdC13aGl0ZXtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMwYTg0ZmZcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmZ9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMyMDJiM2FcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMDJiM2F9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMyNjM2NGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyNjM2NGN9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbXCNmODcxNzFcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzF9LmJnLVxbXCNmZjQ1M2FcXVwvMTB7YmFja2dyb3VuZC1jb2xvcjojZmY0NTNhMWE7YmFja2dyb3VuZC1jb2xvcjpjb2xvcihkaXNwbGF5LXAzIC45MjI2NzMgLjMzMzEzNCAuMjcxNTEvLjEpO2JhY2tncm91bmQtY29sb3I6bGFiKDU4Ljc2MjglIDY5Ljg0NjcgNTAuMzg4Ni8uMSl9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoOTlcLDEwMlwsMjQxXCwwXC4xOFwpXF17YmFja2dyb3VuZC1jb2xvcjojNjM2NmYxMmV9LmJnLWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtYmctdHJhbnNsdWNlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZy10cmFuc2x1Y2VudCl9LmJnLXBhbmVsLWRlZXB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1kZWVwKX0uYmctcGFuZWwtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLW92ZXJsYXkpfS5iZy1zdWNjZXNzLWVtZXJhbGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1zdWNjZXNzLWVtZXJhbGQpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmYmJmMjQxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTEwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzE1e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNSUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKDE0NWRlZ1wsXCMyNTNhNWZcLFwjMTYyMTMyXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktNHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHQtMFwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHQtMXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wdC0yXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHItMntwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLTNcLjV7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnByLVxbMjZweFxde3BhZGRpbmctcmlnaHQ6MjZweH0ucGItMFwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucGItMXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wYi0xXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucGItMntwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wYi1cWzJweFxde3BhZGRpbmctYm90dG9tOjJweH0ucGwtMntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGwtMlwuNXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wbC0ze3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5wbC03e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5wbC1cWzI2cHhcXXtwYWRkaW5nLWxlZnQ6MjZweH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uXFtmb250LWZhbWlseVw6LWFwcGxlLXN5c3RlbVwsc3lzdGVtLXVpXCxzYW5zLXNlcmlmXF17Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxOb3RvIFNhbnMsVWJ1bnR1LENhbnRhcmVsbCxIZWx2ZXRpY2EgTmV1ZSxzYW5zLXNlcmlmfS5mb250LVxbaW5oZXJpdFxde2ZvbnQtZmFtaWx5OmluaGVyaXR9LmZvbnQtbW9ub3tmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pfS5mb250LXN5c3RlbXtmb250LWZhbWlseTp2YXIoLS1mb250LXN5c3RlbSl9LnRleHQtXFs5cHhcXXtmb250LXNpemU6OXB4fS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LVxbMTFcLjVweFxde2ZvbnQtc2l6ZToxMS41cHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtXFsxM3B4XF17Zm9udC1zaXplOjEzcHh9LnRleHQtXFsxNHB4XF17Zm9udC1zaXplOjE0cHh9LnRleHQtXFsxN3B4XF17Zm9udC1zaXplOjE3cHh9LnRleHQtXFsxOHB4XF17Zm9udC1zaXplOjE4cHh9LmxlYWRpbmctXFsxXC41XF17LS10dy1sZWFkaW5nOjEuNTtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctXFsxXC4zNVxdey0tdHctbGVhZGluZzoxLjM1O2xpbmUtaGVpZ2h0OjEuMzV9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXNudWd7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctc251Zyk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy1zbnVnKX0ubGVhZGluZy10aWdodHstLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy10aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy10aWdodCl9LmZvbnQtbWVkaXVtey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctXFswXC4xZW1cXXstLXR3LXRyYWNraW5nOi4xZW07bGV0dGVyLXNwYWNpbmc6LjFlbX0udHJhY2tpbmctXFswXC4wMmVtXF17LS10dy10cmFja2luZzouMDJlbTtsZXR0ZXItc3BhY2luZzouMDJlbX0udHJhY2tpbmctXFswXC4wNGVtXF17LS10dy10cmFja2luZzouMDRlbTtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17LS10dy10cmFja2luZzouMDZlbTtsZXR0ZXItc3BhY2luZzouMDZlbX0udHJhY2tpbmctXFswXC4wOGVtXF17LS10dy10cmFja2luZzouMDhlbTtsZXR0ZXItc3BhY2luZzouMDhlbX0udHJhY2tpbmctd2lkZXstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXdpZGUpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGUpfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnRleHQtZWxsaXBzaXN7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5cIXRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpIWltcG9ydGFudH0udGV4dC1cW1wjMGEwYTBjXF17Y29sb3I6IzBhMGEwY30udGV4dC1cW1wjOGU4ZTkzXF17Y29sb3I6IzhlOGU5M30udGV4dC1cW1wjMzRkMzk5XF17Y29sb3I6IzM0ZDM5OX0udGV4dC1cW1wjMDYyMDE4XF17Y29sb3I6IzA2MjAxOH0udGV4dC1cW1wjYzhkN2ZmXF17Y29sb3I6I2M4ZDdmZn0udGV4dC1cW1wjZDJlN2ZmXF17Y29sb3I6I2QyZTdmZn0udGV4dC1cW1wjZmZiM2FkXF17Y29sb3I6I2ZmYjNhZH0udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC8zNXtjb2xvcjojZmZmZmZmNTl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTM1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzV7Y29sb3I6I2ZmZmZmZmJmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzc1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKXZhcigtLXR3LXNsYXNoZWQtemVybywpdmFyKC0tdHctbnVtZXJpYy1maWd1cmUsKXZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbiwpfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5hbnRpYWxpYXNlZHstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ub3BhY2l0eS0we29wYWNpdHk6MH0ub3BhY2l0eS00MHtvcGFjaXR5Oi40fS5vcGFjaXR5LTYwe29wYWNpdHk6LjZ9Lm9wYWNpdHktMTAwe29wYWNpdHk6MX0uc2hhZG93ey0tdHctc2hhZG93OjAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLDAgMXB4IDJweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF8xcHhfMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjE4XClcLDBfNnB4XzE4cHhfcmdiYVwoMFwsMFwsMFwsMFwuMjhcKVwsaW5zZXRfMF8wXzBfMXB4X3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjA2XClcXXstLXR3LXNoYWRvdzowIDFweCAycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAyZSksMCA2cHggMThweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDQ3KSxpbnNldCAwIDAgMCAxcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCNmZmZmZmYwZik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzEycHhfNDBweF9yZ2JhXCgwXCwwXCwwXCwwXC41NVwpXF17LS10dy1zaGFkb3c6MCAxMnB4IDQwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4Yyk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5yaW5nLC5yaW5nLTF7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDFweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5yaW5nLTJ7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDJweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoNzRcLDIyMlwsMTI4XCwwXC43XClcXXtib3gtc2hhZG93OjAgMCA2cHggIzRhZGU4MGIzfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoMjQ4XCwxMTNcLDExM1wsMFwuNTVcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjZjg3MTcxOGN9LnJpbmctXFtcIzFjMWMxZVxdey0tdHctcmluZy1jb2xvcjojMWMxYzFlfS5yaW5nLXdoaXRlXC8xMHstLXR3LXJpbmctY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZ3JheXNjYWxley0tdHctZ3JheXNjYWxlOmdyYXlzY2FsZSgxMDAlKTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmZpbHRlcntmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmJhY2tkcm9wLWJsdXJ7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMTJweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDEycHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxOHB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMThweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1tZHstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cih2YXIoLS1ibHVyLW1kKSk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3Atc2F0dXJhdGUtMTUwey0tdHctYmFja2Ryb3Atc2F0dXJhdGU6c2F0dXJhdGUoMTUwJSk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtZmlsdGVyey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LnRyYW5zaXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10byxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLHRyYW5zbGF0ZSxzY2FsZSxyb3RhdGUsZmlsdGVyLC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyLGJhY2tkcm9wLWZpbHRlcixkaXNwbGF5LGNvbnRlbnQtdmlzaWJpbGl0eSxvdmVybGF5LHBvaW50ZXItZXZlbnRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFtib3JkZXItY29sb3JcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFt3aWR0aFwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6d2lkdGgsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0uZHVyYXRpb24tMTUwey0tdHctZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHstLXR3LWR1cmF0aW9uOi4yczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZHVyYXRpb24tMzAwey0tdHctZHVyYXRpb246LjNzO3RyYW5zaXRpb24tZHVyYXRpb246LjNzfS5lYXNlLWluLW91dHstLXR3LWVhc2U6dmFyKC0tZWFzZS1pbi1vdXQpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2UtaW4tb3V0KX0uZWFzZS1vdXR7LS10dy1lYXNlOnZhcigtLWVhc2Utb3V0KTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1lYXNlLW91dCl9Lm91dGxpbmUtbm9uZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zZWxlY3QtdGV4dHstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7dXNlci1zZWxlY3Q6dGV4dH0uXFstd2Via2l0LWJhY2tkcm9wLWZpbHRlclw6Ymx1clwoMTJweFwpXF17LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KX0uXFtzY3JvbGxiYXItd2lkdGhcOnRoaW5cXXtzY3JvbGxiYXItd2lkdGg6dGhpbn0uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjJzXCxib3gtc2hhZG93XzBcLjJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyxib3gtc2hhZG93IC4yc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjNzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4zc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsYm9yZGVyLWNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGJvcmRlci1jb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXCxjb2xvcl8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzLGNvbG9yIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE4c30uXFt0cmFuc2l0aW9uXDpsZWZ0XzBcLjE1c1xde3RyYW5zaXRpb246bGVmdCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXCxiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xMnNcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjEyc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDpwYWRkaW5nXzBcLjI1c19lYXNlXF17dHJhbnNpdGlvbjpwYWRkaW5nIC4yNXN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9Lmdyb3VwLWZvY3VzLXdpdGhpblw6b3BhY2l0eS0wOmlzKDp3aGVyZSguZ3JvdXApOmZvY3VzLXdpdGhpbiAqKXtvcGFjaXR5OjB9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6aGlkZGVuOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6bm9uZX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDp0cmFuc2xhdGUteC0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICopey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjB9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eToxfX0ucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE2XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjI5fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMmV9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC84NTpob3Zlcntjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzg1OmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4NSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MCUsdHJhbnNwYXJlbnQpfX19LmZvY3VzXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yNFwpXF06Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmZmZmYzZH0uZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXNcOm91dGxpbmUtbm9uZTpmb2N1c3stLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvcGFjaXR5LTEwMDpmb2N1cy12aXNpYmxle29wYWNpdHk6MX0uZm9jdXMtdmlzaWJsZVw6XFtvdXRsaW5lXDoxXC41cHhfc29saWRfcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC41NVwpXF06Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjEuNXB4IHNvbGlkICMwYTg0ZmY4Y30uZm9jdXMtdmlzaWJsZVw6b3V0bGluZTpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtMjpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDo0cHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtd2hpdGVcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXdoaXRlXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5hY3RpdmVcOnNjYWxlLVxbMFwuOTdcXTphY3RpdmV7c2NhbGU6Ljk3fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMThcKVxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy1cW1wjMmEyYTJjXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyYTJhMmN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYzOH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LXdoaXRlOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJyaWdodG5lc3MtXFsxXC4wOFxdOmVuYWJsZWQ6aG92ZXJ7LS10dy1icmlnaHRuZXNzOmJyaWdodG5lc3MoMS4wOCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfX0uZGlzYWJsZWRcOmN1cnNvci1kZWZhdWx0OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmRpc2FibGVkXDpvcGFjaXR5LTQwOmRpc2FibGVke29wYWNpdHk6LjR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7Lm1vdGlvbi1yZWR1Y2VcOnRyYW5zaXRpb24tbm9uZXt0cmFuc2l0aW9uLXByb3BlcnR5Om5vbmV9fUBtZWRpYSAobWF4LXdpZHRoOjg5OS45OTlweCl7Lm1heC1cWzkwMHB4XF1cOmhpZGRlbntkaXNwbGF5Om5vbmV9fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXByb2dyZXNze2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpiZy1cW3ZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpXF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotbW96LXJhbmdlLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpib3JkZXItbm9uZTo6LW1vei1yYW5nZS10aHVtYnstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGU6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6aC1cWzRweFxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6XFtiYWNrZ3JvdW5kXDpsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCx2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwscmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjJcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwpXF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXNsaWRlci1maWxsLWNvbG9yKXZhcigtLXNsaWRlci1maWxsKSwjZmZmZmZmMzggdmFyKC0tc2xpZGVyLWZpbGwpKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDotbXQtXFs0XC41cHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7bWFyZ2luLXRvcDotNC41cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDphcHBlYXJhbmNlLW5vbmU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2FwcGVhcmFuY2U6bm9uZX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaGFkb3ctXFswXzFweF8zcHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdOjotd2Via2l0LXNsaWRlci10aHVtYnstLXR3LXNoYWRvdzowIDFweCAzcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fX06cm9vdHstLWJ1bmNzcy1saWdodDogOy0tYnVuY3NzLWRhcms6aW5pdGlhbDtjb2xvci1zY2hlbWU6ZGFyazstLXNlcnZlLXNpbS1wYW5lbC1iZzojMTgxODE4Oy0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50OiMxODE4MThjNzstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc3BhcmVudDojMTgxODE4MDB9QHN1cHBvcnRzIChpbnRlcnBvbGF0ZS1zaXplOiBhbGxvdy1rZXl3b3Jkcyl7OnJvb3R7aW50ZXJwb2xhdGUtc2l6ZTphbGxvdy1rZXl3b3Jkc319ZGV0YWlscy5sZW0tc2VjdGlvbjo6ZGV0YWlscy1jb250ZW50e292ZXJmbG93OmNsaXA7dHJhbnNpdGlvbjpoZWlnaHQgLjIycyBlYXNlLGNvbnRlbnQtdmlzaWJpbGl0eSAuMjJzIGFsbG93LWRpc2NyZXRlO2hlaWdodDowfWRldGFpbHMubGVtLXNlY3Rpb25bb3Blbl06OmRldGFpbHMtY29udGVudHtoZWlnaHQ6YXV0b31kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnl7bGlzdC1zdHlsZTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVye2NvbG9yOiNmZmZ9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVyIC5sZW0tY2hldnJvbntjb2xvcjojZmZmZmZmZDkhaW1wb3J0YW50fS5sZW0tY2hldnJvbnt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTZzLGNvbG9yIC4xMnN9QGNvbnRhaW5lciAod2lkdGg8PTIxMHB4KXtbZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWxde2Rpc3BsYXk6bm9uZX19QGtleWZyYW1lcyBncmlkLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMjUwJSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTJweClzY2FsZSguOTYpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3Atb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpc2NhbGUoLjk2KX19LnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRle2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlfVtkYXRhLXNvbm5lci10b2FzdGVyXS5zZXJ2ZS1zaW0tdG9hc3RlciBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVde2dhcDo4cHg7cGFkZGluZzo4cHggMTJweDtmb250LWZhbWlseTp1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNDtib3gtc2hhZG93OjAgOHB4IDI0cHggIzAwMDAwMDczfVtkYXRhLXNvbm5lci10b2FzdGVyXS5zZXJ2ZS1zaW0tdG9hc3RlciBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25de3dpZHRoOjZweDtoZWlnaHQ6NnB4O21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0ZXJdLnNlcnZlLXNpbS10b2FzdGVyIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17bWluLXdpZHRoOjB9W2RhdGEtc29ubmVyLXRvYXN0ZXJdLnNlcnZlLXNpbS10b2FzdGVyIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtdGl0bGVde292ZXJmbG93LXdyYXA6YnJlYWstd29yZDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LmdyaWQtdGlsZTpob3ZlciAuZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eToxfS5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzVhMWQxZDtib3JkZXItY29sb3I6I2EzM30uZ3JpZC10aWxlOmhvdmVye2JvcmRlci1jb2xvcjojNTU1IWltcG9ydGFudH0uZHVvLWhhcmR3YXJlLWFuY2hvcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwO3RyYW5zZm9ybS1vcmlnaW46MCAwfS5kdW8taGFyZHdhcmUtcmVnaW9ue3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6ZmxleDtjdXJzb3I6ZGVmYXVsdDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O3dpZHRoOjYwcHg7aGVpZ2h0Ojc4cHg7dG9wOi02OHB4O2xlZnQ6LTMwcHh9LmR1by1oYXJkd2FyZS1yZWdpb24+YnV0dG9ue29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfS5kdW8taGFyZHdhcmUtcmVnaW9uOmhvdmVyPmJ1dHRvbiwuZHVvLWhhcmR3YXJlLXJlZ2lvbjpmb2N1cy13aXRoaW4+YnV0dG9ue29wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvfUBtZWRpYSAoaG92ZXI6bm9uZSl7LmR1by1oYXJkd2FyZS1yZWdpb24+YnV0dG9ue29wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsuZHVvLWhhcmR3YXJlLXJlZ2lvbj5idXR0b257dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH19QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcm90YXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYm9yZGVyLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1sZWFkaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZm9udC13ZWlnaHR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy10cmFja2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9yZGluYWx7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zbGFzaGVkLXplcm97c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZpZ3VyZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtc3BhY2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZnJhY3Rpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZWFzZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKC13ZWJraXQtaHlwaGVuczogbm9uZSkgYW5kICggbm90IChtYXJnaW4tdHJpbTogaW5saW5lKSkpIG9yICgoLW1vei1vcmllbnQ6IGlubGluZSkgYW5kICggbm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpeyosOmJlZm9yZSw6YWZ0ZXIsOjpiYWNrZHJvcHstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctdHJhbnNsYXRlLXo6MDstLXR3LXJvdGF0ZS14OmluaXRpYWw7LS10dy1yb3RhdGUteTppbml0aWFsOy0tdHctcm90YXRlLXo6aW5pdGlhbDstLXR3LXNrZXcteDppbml0aWFsOy0tdHctc2tldy15OmluaXRpYWw7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LW9yZGluYWw6aW5pdGlhbDstLXR3LXNsYXNoZWQtemVybzppbml0aWFsOy0tdHctbnVtZXJpYy1maWd1cmU6aW5pdGlhbDstLXR3LW51bWVyaWMtc3BhY2luZzppbml0aWFsOy0tdHctbnVtZXJpYy1mcmFjdGlvbjppbml0aWFsOy0tdHctc2hhZG93OjAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctc2hhZG93LWFscGhhOjEwMCU7LS10dy1pbnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LXJpbmctaW5zZXQ6aW5pdGlhbDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOjBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiNmZmY7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctb3V0bGluZS1zdHlsZTpzb2xpZDstLXR3LWJsdXI6aW5pdGlhbDstLXR3LWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWNvbnRyYXN0OmluaXRpYWw7LS10dy1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWludmVydDppbml0aWFsOy0tdHctb3BhY2l0eTppbml0aWFsOy0tdHctc2F0dXJhdGU6aW5pdGlhbDstLXR3LXNlcGlhOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdzppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWFscGhhOjEwMCU7LS10dy1kcm9wLXNoYWRvdy1zaXplOmluaXRpYWw7LS10dy1iYWNrZHJvcC1ibHVyOmluaXRpYWw7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1iYWNrZHJvcC1jb250cmFzdDppbml0aWFsOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1pbnZlcnQ6aW5pdGlhbDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1zZXBpYTppbml0aWFsOy0tdHctZHVyYXRpb246aW5pdGlhbDstLXR3LWVhc2U6aW5pdGlhbH19fQo8L3N0eWxlPgo8L2hlYWQ+PGJvZHk+CjxkaXYgaWQ9InJvb3QiPjwvZGl2Pgo8IS0tX19TSU1fUFJFVklFV19DT05GSUdfXy0tPgo8c2NyaXB0IHR5cGU9Im1vZHVsZSI+dmFyIEU1LGEsejMsSjcsaDAsRzMsVTMsTDMsdDIsRzIsVDUsQzMsUTgsZTIsJDgsSDMsQjI9e30sTjI9W10sUTc9L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxJNT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHcwKCQsSyl7Zm9yKHZhciBKIGluIEspJFtKXT1LW0pdO3JldHVybiAkfWZ1bmN0aW9uIFo4KCQpeyQmJiQucGFyZW50Tm9kZSYmJC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCQpfWZ1bmN0aW9uIGYxKCQsSyxKKXt2YXIgWixYLFkscT17fTtmb3IoWSBpbiBLKVk9PSJrZXkiP1o9S1tZXTpZPT0icmVmIj9YPUtbWV06cVtZXT1LW1ldO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKHEuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP0U1LmNhbGwoYXJndW1lbnRzLDIpOkopLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYkLmRlZmF1bHRQcm9wcyE9bnVsbClmb3IoWSBpbiAkLmRlZmF1bHRQcm9wcylxW1ldPT09dm9pZCAwJiYocVtZXT0kLmRlZmF1bHRQcm9wc1tZXSk7cmV0dXJuIHc1KCQscSxaLFgsbnVsbCl9ZnVuY3Rpb24gdzUoJCxLLEosWixYKXt2YXIgWT17dHlwZTokLHByb3BzOkssa2V5OkoscmVmOlosX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Olg9PW51bGw/Kyt6MzpYLF9faTotMSxfX3U6MH07cmV0dXJuIFg9PW51bGwmJmEudm5vZGUhPW51bGwmJmEudm5vZGUoWSksWX1mdW5jdGlvbiBiNSgpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIEoxKCQpe3JldHVybiAkLmNoaWxkcmVufWZ1bmN0aW9uIG8xKCQsSyl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1LfWZ1bmN0aW9uIFg1KCQsSyl7aWYoSz09bnVsbClyZXR1cm4gJC5fXz9YNSgkLl9fLCQuX19pKzEpOm51bGw7Zm9yKHZhciBKO0s8JC5fX2subGVuZ3RoO0srKylpZigoSj0kLl9fa1tLXSkhPW51bGwmJkouX19lIT1udWxsKXJldHVybiBKLl9fZTtyZXR1cm4gdHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIj9YNSgkKTpudWxsfWZ1bmN0aW9uIFo3KCQpe2lmKCQuX19QJiYkLl9fZCl7dmFyIEs9JC5fX3YsSj1LLl9fZSxaPVtdLFg9W10sWT13MCh7fSxLKTtZLl9fdj1LLl9fdisxLGEudm5vZGUmJmEudm5vZGUoWSksWDgoJC5fX1AsWSxLLCQuX19uLCQuX19QLm5hbWVzcGFjZVVSSSwzMiZLLl9fdT9bSl06bnVsbCxaLEo9PW51bGw/WDUoSyk6SiwhISgzMiZLLl9fdSksWCksWS5fX3Y9Sy5fX3YsWS5fXy5fX2tbWS5fX2ldPVksTTMoWixZLFgpLEsuX19lPUsuX189bnVsbCxZLl9fZSE9SiYmazMoWSl9fWZ1bmN0aW9uIGszKCQpe2lmKCgkPSQuX18pIT1udWxsJiYkLl9fYyE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1udWxsLCQuX19rLnNvbWUoZnVuY3Rpb24oSyl7aWYoSyE9bnVsbCYmSy5fX2UhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9Sy5fX2V9KSxrMygkKX1mdW5jdGlvbiBLOCgkKXsoISQuX19kJiYoJC5fX2Q9ITApJiZoMC5wdXNoKCQpJiYhejIuX19yKyt8fEczIT1hLmRlYm91bmNlUmVuZGVyaW5nKSYmKChHMz1hLmRlYm91bmNlUmVuZGVyaW5nKXx8VTMpKHoyKX1mdW5jdGlvbiB6Migpe3RyeXtmb3IodmFyICQsSz0xO2gwLmxlbmd0aDspaDAubGVuZ3RoPksmJmgwLnNvcnQoTDMpLCQ9aDAuc2hpZnQoKSxLPWgwLmxlbmd0aCxaNygkKX1maW5hbGx5e2gwLmxlbmd0aD16Mi5fX3I9MH19ZnVuY3Rpb24gRjMoJCxLLEosWixYLFkscSxWLE4sQix6KXt2YXIgRyxDLFUsRixMLGssSCxQPVomJlouX19rfHxOMix5PUsubGVuZ3RoO2ZvcihOPVg3KEosSyxQLE4seSksRz0wO0c8eTtHKyspKFU9Si5fX2tbR10pIT1udWxsJiYoQz1VLl9faSE9LTEmJlBbVS5fX2ldfHxCMixVLl9faT1HLGs9WDgoJCxVLEMsWCxZLHEsVixOLEIseiksRj1VLl9fZSxVLnJlZiYmQy5yZWYhPVUucmVmJiYoQy5yZWYmJlk4KEMucmVmLG51bGwsVSksei5wdXNoKFUucmVmLFUuX19jfHxGLFUpKSxMPT1udWxsJiZGIT1udWxsJiYoTD1GKSwoSD0hISg0JlUuX191KSl8fEMuX19rPT09VS5fX2s/KE49QTMoVSxOLCQsSCksSCYmQy5fX2UmJihDLl9fZT1udWxsKSk6dHlwZW9mIFUudHlwZT09ImZ1bmN0aW9uIiYmayE9PXZvaWQgMD9OPWs6RiYmKE49Ri5uZXh0U2libGluZyksVS5fX3UmPS03KTtyZXR1cm4gSi5fX2U9TCxOfWZ1bmN0aW9uIFg3KCQsSyxKLFosWCl7dmFyIFkscSxWLE4sQix6PUoubGVuZ3RoLEc9eixDPTA7Zm9yKCQuX19rPUFycmF5KFgpLFk9MDtZPFg7WSsrKShxPUtbWV0pIT1udWxsJiZ0eXBlb2YgcSE9ImJvb2xlYW4iJiZ0eXBlb2YgcSE9ImZ1bmN0aW9uIj8odHlwZW9mIHE9PSJzdHJpbmcifHx0eXBlb2YgcT09Im51bWJlciJ8fHR5cGVvZiBxPT0iYmlnaW50Inx8cS5jb25zdHJ1Y3Rvcj09U3RyaW5nP3E9JC5fX2tbWV09dzUobnVsbCxxLG51bGwsbnVsbCxudWxsKTpJNShxKT9xPSQuX19rW1ldPXc1KEoxLHtjaGlsZHJlbjpxfSxudWxsLG51bGwsbnVsbCk6cS5jb25zdHJ1Y3Rvcj09PXZvaWQgMCYmcS5fX2I+MD9xPSQuX19rW1ldPXc1KHEudHlwZSxxLnByb3BzLHEua2V5LHEucmVmP3EucmVmOm51bGwscS5fX3YpOiQuX19rW1ldPXEsTj1ZK0MscS5fXz0kLHEuX19iPSQuX19iKzEsVj1udWxsLChCPXEuX19pPVk3KHEsSixOLEcpKSE9LTEmJihHLS0sKFY9SltCXSkmJihWLl9fdXw9MikpLFY9PW51bGx8fFYuX192PT1udWxsPyhCPT0tMSYmKFg+ej9DLS06WDx6JiZDKyspLHR5cGVvZiBxLnR5cGUhPSJmdW5jdGlvbiImJihxLl9fdXw9NCkpOkIhPU4mJihCPT1OLTE/Qy0tOkI9PU4rMT9DKys6KEI+Tj9DLS06QysrLHEuX191fD00KSkpOiQuX19rW1ldPW51bGw7aWYoRylmb3IoWT0wO1k8ejtZKyspKFY9SltZXSkhPW51bGwmJigyJlYuX191KT09MCYmKFYuX19lPT1aJiYoWj1YNShWKSksUDMoVixWKSk7cmV0dXJuIFp9ZnVuY3Rpb24gQTMoJCxLLEosWil7dmFyIFgsWTtpZih0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iKXtmb3IoWD0kLl9fayxZPTA7WCYmWTxYLmxlbmd0aDtZKyspWFtZXSYmKFhbWV0uX189JCxLPUEzKFhbWV0sSyxKLFopKTtyZXR1cm4gS30kLl9fZSE9SyYmKFomJihLJiYkLnR5cGUmJiFLLnBhcmVudE5vZGUmJihLPVg1KCQpKSxKLmluc2VydEJlZm9yZSgkLl9fZSxLfHxudWxsKSksSz0kLl9fZSk7ZG8gSz1LJiZLLm5leHRTaWJsaW5nO3doaWxlKEshPW51bGwmJksubm9kZVR5cGU9PTgpO3JldHVybiBLfWZ1bmN0aW9uIHEwKCQsSyl7cmV0dXJuIEs9S3x8W10sJD09bnVsbHx8dHlwZW9mICQ9PSJib29sZWFuInx8KEk1KCQpPyQuc29tZShmdW5jdGlvbihKKXtxMChKLEspfSk6Sy5wdXNoKCQpKSxLfWZ1bmN0aW9uIFk3KCQsSyxKLFope3ZhciBYLFkscSxWPSQua2V5LE49JC50eXBlLEI9S1tKXSx6PUIhPW51bGwmJigyJkIuX191KT09MDtpZihCPT09bnVsbCYmVj09bnVsbHx8eiYmVj09Qi5rZXkmJk49PUIudHlwZSlyZXR1cm4gSjtpZihaPih6PzE6MCkpe2ZvcihYPUotMSxZPUorMTtYPj0wfHxZPEsubGVuZ3RoOylpZigoQj1LW3E9WD49MD9YLS06WSsrXSkhPW51bGwmJigyJkIuX191KT09MCYmVj09Qi5rZXkmJk49PUIudHlwZSlyZXR1cm4gcX1yZXR1cm4tMX1mdW5jdGlvbiBCMygkLEssSil7S1swXT09Ii0iPyQuc2V0UHJvcGVydHkoSyxKPT1udWxsPyIiOkopOiRbS109Sj09bnVsbD8iIjp0eXBlb2YgSiE9Im51bWJlciJ8fFE3LnRlc3QoSyk/SjpKKyJweCJ9ZnVuY3Rpb24gVjIoJCxLLEosWixYKXt2YXIgWSxxOyQ6aWYoSz09InN0eWxlIilpZih0eXBlb2YgSj09InN0cmluZyIpJC5zdHlsZS5jc3NUZXh0PUo7ZWxzZXtpZih0eXBlb2YgWj09InN0cmluZyImJigkLnN0eWxlLmNzc1RleHQ9Wj0iIiksWilmb3IoSyBpbiBaKUomJksgaW4gSnx8QjMoJC5zdHlsZSxLLCIiKTtpZihKKWZvcihLIGluIEopWiYmSltLXT09WltLXXx8QjMoJC5zdHlsZSxLLEpbS10pfWVsc2UgaWYoS1swXT09Im8iJiZLWzFdPT0ibiIpWT1LIT0oSz1LLnJlcGxhY2UoQzMsIiQxIikpLHE9Sy50b0xvd2VyQ2FzZSgpLEs9cSBpbiAkfHxLPT0ib25Gb2N1c091dCJ8fEs9PSJvbkZvY3VzSW4iP3Euc2xpY2UoMik6Sy5zbGljZSgyKSwkLmx8fCgkLmw9e30pLCQubFtLK1ldPUosSj9aP0pbVDVdPVpbVDVdOihKW1Q1XT1ROCwkLmFkZEV2ZW50TGlzdGVuZXIoSyxZPyQ4OmUyLFkpKTokLnJlbW92ZUV2ZW50TGlzdGVuZXIoSyxZPyQ4OmUyLFkpO2Vsc2V7aWYoWD09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIilLPUsucmVwbGFjZSgveGxpbmsoSHw6aCkvLCJoIikucmVwbGFjZSgvc05hbWUkLywicyIpO2Vsc2UgaWYoSyE9IndpZHRoIiYmSyE9ImhlaWdodCImJkshPSJocmVmIiYmSyE9Imxpc3QiJiZLIT0iZm9ybSImJkshPSJ0YWJJbmRleCImJkshPSJkb3dubG9hZCImJkshPSJyb3dTcGFuIiYmSyE9ImNvbFNwYW4iJiZLIT0icm9sZSImJkshPSJwb3BvdmVyIiYmSyBpbiAkKXRyeXskW0tdPUo9PW51bGw/IiI6SjticmVhayAkfWNhdGNoKFYpe310eXBlb2YgSj09ImZ1bmN0aW9uInx8KEo9PW51bGx8fEo9PT0hMSYmS1s0XSE9Ii0iPyQucmVtb3ZlQXR0cmlidXRlKEspOiQuc2V0QXR0cmlidXRlKEssSz09InBvcG92ZXIiJiZKPT0xPyIiOkopKX19ZnVuY3Rpb24gTjMoJCl7cmV0dXJuIGZ1bmN0aW9uKEspe2lmKHRoaXMubCl7dmFyIEo9dGhpcy5sW0sudHlwZSskXTtpZihLW0cyXT09bnVsbClLW0cyXT1ROCsrO2Vsc2UgaWYoS1tHMl08SltUNV0pcmV0dXJuO3JldHVybiBKKGEuZXZlbnQ/YS5ldmVudChLKTpLKX19fWZ1bmN0aW9uIFg4KCQsSyxKLFosWCxZLHEsVixOLEIpe3ZhciB6LEcsQyxVLEYsTCxrLEgsUCx5LFcsQSxULGksdixqPUsudHlwZTtpZihLLmNvbnN0cnVjdG9yIT09dm9pZCAwKXJldHVybiBudWxsOzEyOCZKLl9fdSYmKE49ISEoMzImSi5fX3UpLFk9W1Y9Sy5fX2U9Si5fX2VdKSwoej1hLl9fYikmJnooSyk7JDppZih0eXBlb2Ygaj09ImZ1bmN0aW9uIil0cnl7aWYoSD1LLnByb3BzLFA9ai5wcm90b3R5cGUmJmoucHJvdG90eXBlLnJlbmRlcix5PSh6PWouY29udGV4dFR5cGUpJiZaW3ouX19jXSxXPXo/eT95LnByb3BzLnZhbHVlOnouX186WixKLl9fYz9rPShHPUsuX19jPUouX19jKS5fXz1HLl9fRTooUD9LLl9fYz1HPW5ldyBqKEgsVyk6KEsuX19jPUc9bmV3IG8xKEgsVyksRy5jb25zdHJ1Y3Rvcj1qLEcucmVuZGVyPVY3KSx5JiZ5LnN1YihHKSxHLnN0YXRlfHwoRy5zdGF0ZT17fSksRy5fX249WixDPUcuX19kPSEwLEcuX19oPVtdLEcuX3NiPVtdKSxQJiZHLl9fcz09bnVsbCYmKEcuX19zPUcuc3RhdGUpLFAmJmouZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIT1udWxsJiYoRy5fX3M9PUcuc3RhdGUmJihHLl9fcz13MCh7fSxHLl9fcykpLHcwKEcuX19zLGouZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKEgsRy5fX3MpKSksVT1HLnByb3BzLEY9Ry5zdGF0ZSxHLl9fdj1LLEMpUCYmai5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJkcuY29tcG9uZW50V2lsbE1vdW50IT1udWxsJiZHLmNvbXBvbmVudFdpbGxNb3VudCgpLFAmJkcuY29tcG9uZW50RGlkTW91bnQhPW51bGwmJkcuX19oLnB1c2goRy5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZihQJiZqLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmSCE9PVUmJkcuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9bnVsbCYmRy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKEgsVyksSy5fX3Y9PUouX192fHwhRy5fX2UmJkcuc2hvdWxkQ29tcG9uZW50VXBkYXRlIT1udWxsJiZHLnNob3VsZENvbXBvbmVudFVwZGF0ZShILEcuX19zLFcpPT09ITEpe0suX192IT1KLl9fdiYmKEcucHJvcHM9SCxHLnN0YXRlPUcuX19zLEcuX19kPSExKSxLLl9fZT1KLl9fZSxLLl9faz1KLl9fayxLLl9fay5zb21lKGZ1bmN0aW9uKGQpe2QmJihkLl9fPUspfSksTjIucHVzaC5hcHBseShHLl9faCxHLl9zYiksRy5fc2I9W10sRy5fX2gubGVuZ3RoJiZxLnB1c2goRyk7YnJlYWsgJH1HLmNvbXBvbmVudFdpbGxVcGRhdGUhPW51bGwmJkcuY29tcG9uZW50V2lsbFVwZGF0ZShILEcuX19zLFcpLFAmJkcuY29tcG9uZW50RGlkVXBkYXRlIT1udWxsJiZHLl9faC5wdXNoKGZ1bmN0aW9uKCl7Ry5jb21wb25lbnREaWRVcGRhdGUoVSxGLEwpfSl9aWYoRy5jb250ZXh0PVcsRy5wcm9wcz1ILEcuX19QPSQsRy5fX2U9ITEsQT1hLl9fcixUPTAsUClHLnN0YXRlPUcuX19zLEcuX19kPSExLEEmJkEoSyksej1HLnJlbmRlcihHLnByb3BzLEcuc3RhdGUsRy5jb250ZXh0KSxOMi5wdXNoLmFwcGx5KEcuX19oLEcuX3NiKSxHLl9zYj1bXTtlbHNlIGRvIEcuX19kPSExLEEmJkEoSyksej1HLnJlbmRlcihHLnByb3BzLEcuc3RhdGUsRy5jb250ZXh0KSxHLnN0YXRlPUcuX19zO3doaWxlKEcuX19kJiYrK1Q8MjUpO0cuc3RhdGU9Ry5fX3MsRy5nZXRDaGlsZENvbnRleHQhPW51bGwmJihaPXcwKHcwKHt9LFopLEcuZ2V0Q2hpbGRDb250ZXh0KCkpKSxQJiYhQyYmRy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9bnVsbCYmKEw9Ry5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShVLEYpKSxpPXohPW51bGwmJnoudHlwZT09PUoxJiZ6LmtleT09bnVsbD9PMyh6LnByb3BzLmNoaWxkcmVuKTp6LFY9RjMoJCxJNShpKT9pOltpXSxLLEosWixYLFkscSxWLE4sQiksRy5iYXNlPUsuX19lLEsuX191Jj0tMTYxLEcuX19oLmxlbmd0aCYmcS5wdXNoKEcpLGsmJihHLl9fRT1HLl9fPW51bGwpfWNhdGNoKGQpe2lmKEsuX192PW51bGwsTnx8WSE9bnVsbClpZihkLnRoZW4pe2ZvcihLLl9fdXw9Tj8xNjA6MTI4O1YmJlYubm9kZVR5cGU9PTgmJlYubmV4dFNpYmxpbmc7KVY9Vi5uZXh0U2libGluZztZW1kuaW5kZXhPZihWKV09bnVsbCxLLl9fZT1WfWVsc2V7Zm9yKHY9WS5sZW5ndGg7di0tOylaOChZW3ZdKTtKOChLKX1lbHNlIEsuX19lPUouX19lLEsuX19rPUouX19rLGQudGhlbnx8SjgoSyk7YS5fX2UoZCxLLEopfWVsc2UgWT09bnVsbCYmSy5fX3Y9PUouX192PyhLLl9faz1KLl9fayxLLl9fZT1KLl9fZSk6Vj1LLl9fZT1xNyhKLl9fZSxLLEosWixYLFkscSxOLEIpO3JldHVybih6PWEuZGlmZmVkKSYmeihLKSwxMjgmSy5fX3U/dm9pZCAwOlZ9ZnVuY3Rpb24gSjgoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZShKOCkpfWZ1bmN0aW9uIE0zKCQsSyxKKXtmb3IodmFyIFo9MDtaPEoubGVuZ3RoO1orKylZOChKW1pdLEpbKytaXSxKWysrWl0pO2EuX19jJiZhLl9fYyhLLCQpLCQuc29tZShmdW5jdGlvbihYKXt0cnl7JD1YLl9faCxYLl9faD1bXSwkLnNvbWUoZnVuY3Rpb24oWSl7WS5jYWxsKFgpfSl9Y2F0Y2goWSl7YS5fX2UoWSxYLl9fdil9fSl9ZnVuY3Rpb24gTzMoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOkk1KCQpPyQubWFwKE8zKTp3MCh7fSwkKX1mdW5jdGlvbiBxNygkLEssSixaLFgsWSxxLFYsTil7dmFyIEIseixHLEMsVSxGLEwsaz1KLnByb3BzfHxCMixIPUsucHJvcHMsUD1LLnR5cGU7aWYoUD09InN2ZyI/WD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOlA9PSJtYXRoIj9YPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjpYfHwoWD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLFkhPW51bGwpe2ZvcihCPTA7QjxZLmxlbmd0aDtCKyspaWYoKFU9WVtCXSkmJiJzZXRBdHRyaWJ1dGUiaW4gVT09ISFQJiYoUD9VLmxvY2FsTmFtZT09UDpVLm5vZGVUeXBlPT0zKSl7JD1VLFlbQl09bnVsbDticmVha319aWYoJD09bnVsbCl7aWYoUD09bnVsbClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoSCk7JD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoWCxQLEguaXMmJkgpLFYmJihhLl9fbSYmYS5fX20oSyxZKSxWPSExKSxZPW51bGx9aWYoUD09bnVsbClrPT09SHx8ViYmJC5kYXRhPT1IfHwoJC5kYXRhPUgpO2Vsc2V7aWYoWT1ZJiZFNS5jYWxsKCQuY2hpbGROb2RlcyksIVYmJlkhPW51bGwpZm9yKGs9e30sQj0wO0I8JC5hdHRyaWJ1dGVzLmxlbmd0aDtCKyspa1soVT0kLmF0dHJpYnV0ZXNbQl0pLm5hbWVdPVUudmFsdWU7Zm9yKEIgaW4gaylVPWtbQl0sQj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9HPVU6Qj09ImNoaWxkcmVuInx8KEIgaW4gSCl8fEI9PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEgpfHxCPT0iY2hlY2tlZCImJigiZGVmYXVsdENoZWNrZWQiaW4gSCl8fFYyKCQsQixudWxsLFUsWCk7Zm9yKEIgaW4gSClVPUhbQl0sQj09ImNoaWxkcmVuIj9DPVU6Qj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj96PVU6Qj09InZhbHVlIj9GPVU6Qj09ImNoZWNrZWQiP0w9VTpWJiZ0eXBlb2YgVSE9ImZ1bmN0aW9uInx8a1tCXT09PVV8fFYyKCQsQixVLGtbQl0sWCk7aWYoeilWfHxHJiYoei5fX2h0bWw9PUcuX19odG1sfHx6Ll9faHRtbD09JC5pbm5lckhUTUwpfHwoJC5pbm5lckhUTUw9ei5fX2h0bWwpLEsuX19rPVtdO2Vsc2UgaWYoRyYmKCQuaW5uZXJIVE1MPSIiKSxGMyhLLnR5cGU9PSJ0ZW1wbGF0ZSI/JC5jb250ZW50OiQsSTUoQyk/QzpbQ10sSyxKLFosUD09ImZvcmVpZ25PYmplY3QiPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjpYLFkscSxZP1lbMF06Si5fX2smJlg1KEosMCksVixOKSxZIT1udWxsKWZvcihCPVkubGVuZ3RoO0ItLTspWjgoWVtCXSk7Vnx8KEI9InZhbHVlIixQPT0icHJvZ3Jlc3MiJiZGPT1udWxsPyQucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOkYhPW51bGwmJihGIT09JFtCXXx8UD09InByb2dyZXNzIiYmIUZ8fFA9PSJvcHRpb24iJiZGIT1rW0JdKSYmVjIoJCxCLEYsa1tCXSxYKSxCPSJjaGVja2VkIixMIT1udWxsJiZMIT0kW0JdJiZWMigkLEIsTCxrW0JdLFgpKX1yZXR1cm4gJH1mdW5jdGlvbiBZOCgkLEssSil7dHJ5e2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWj10eXBlb2YgJC5fX3U9PSJmdW5jdGlvbiI7WiYmJC5fX3UoKSxaJiZLPT1udWxsfHwoJC5fX3U9JChLKSl9ZWxzZSAkLmN1cnJlbnQ9S31jYXRjaChYKXthLl9fZShYLEopfX1mdW5jdGlvbiBQMygkLEssSil7dmFyIFosWDtpZihhLnVubW91bnQmJmEudW5tb3VudCgkKSwoWj0kLnJlZikmJihaLmN1cnJlbnQmJlouY3VycmVudCE9JC5fX2V8fFk4KFosbnVsbCxLKSksKFo9JC5fX2MpIT1udWxsKXtpZihaLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtaLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goWSl7YS5fX2UoWSxLKX1aLmJhc2U9Wi5fX1A9bnVsbH1pZihaPSQuX19rKWZvcihYPTA7WDxaLmxlbmd0aDtYKyspWltYXSYmUDMoWltYXSxLLEp8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO0p8fFo4KCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiBWNygkLEssSil7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxKKX1mdW5jdGlvbiBSMCgkLEssSil7dmFyIFosWCxZLHE7Sz09ZG9jdW1lbnQmJihLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksYS5fXyYmYS5fXygkLEspLFg9KFo9dHlwZW9mIEo9PSJmdW5jdGlvbiIpP251bGw6SiYmSi5fX2t8fEsuX19rLFk9W10scT1bXSxYOChLLCQ9KCFaJiZKfHxLKS5fX2s9ZjEoSjEsbnVsbCxbJF0pLFh8fEIyLEIyLEsubmFtZXNwYWNlVVJJLCFaJiZKP1tKXTpYP251bGw6Sy5maXJzdENoaWxkP0U1LmNhbGwoSy5jaGlsZE5vZGVzKTpudWxsLFksIVomJko/SjpYP1guX19lOksuZmlyc3RDaGlsZCxaLHEpLE0zKFksJCxxKX1mdW5jdGlvbiBVMigkLEspe1IwKCQsSyxVMil9ZnVuY3Rpb24gcTgoJCxLLEope3ZhciBaLFgsWSxxLFY9dzAoe30sJC5wcm9wcyk7Zm9yKFkgaW4gJC50eXBlJiYkLnR5cGUuZGVmYXVsdFByb3BzJiYocT0kLnR5cGUuZGVmYXVsdFByb3BzKSxLKVk9PSJrZXkiP1o9S1tZXTpZPT0icmVmIj9YPUtbWV06VltZXT1LW1ldPT09dm9pZCAwJiZxIT1udWxsP3FbWV06S1tZXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiYoVi5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/RTUuY2FsbChhcmd1bWVudHMsMik6SiksdzUoJC50eXBlLFYsWnx8JC5rZXksWHx8JC5yZWYsbnVsbCl9ZnVuY3Rpb24gSDAoJCl7ZnVuY3Rpb24gSyhKKXt2YXIgWixYO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KFo9bmV3IFNldCwoWD17fSlbSy5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gWH0sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1o9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5wcm9wcy52YWx1ZSE9WS52YWx1ZSYmWi5mb3JFYWNoKGZ1bmN0aW9uKHEpe3EuX19lPSEwLEs4KHEpfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKFkpe1ouYWRkKFkpO3ZhciBxPVkuY29tcG9uZW50V2lsbFVubW91bnQ7WS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1omJlouZGVsZXRlKFkpLHEmJnEuY2FsbChZKX19KSxKLmNoaWxkcmVufXJldHVybiBLLl9fYz0iX19jQyIrSDMrKyxLLl9fPSQsSy5Qcm92aWRlcj1LLl9fbD0oSy5Db25zdW1lcj1mdW5jdGlvbihKLFope3JldHVybiBKLmNoaWxkcmVuKFopfSkuY29udGV4dFR5cGU9SyxLfUU1PU4yLnNsaWNlLGE9e19fZTpmdW5jdGlvbigkLEssSixaKXtmb3IodmFyIFgsWSxxO0s9Sy5fXzspaWYoKFg9Sy5fX2MpJiYhWC5fXyl0cnl7aWYoKFk9WC5jb25zdHJ1Y3RvcikmJlkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoWC5zZXRTdGF0ZShZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigkKSkscT1YLl9fZCksWC5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKFguY29tcG9uZW50RGlkQ2F0Y2goJCxafHx7fSkscT1YLl9fZCkscSlyZXR1cm4gWC5fX0U9WH1jYXRjaChWKXskPVZ9dGhyb3cgJH19LHozPTAsSjc9ZnVuY3Rpb24oJCl7cmV0dXJuICQhPW51bGwmJiQuY29uc3RydWN0b3I9PT12b2lkIDB9LG8xLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbigkLEspe3ZhciBKO0o9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPXcwKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoJD0kKHcwKHt9LEopLHRoaXMucHJvcHMpKSwkJiZ3MChKLCQpLCQhPW51bGwmJnRoaXMuX192JiYoSyYmdGhpcy5fc2IucHVzaChLKSxLOCh0aGlzKSl9LG8xLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbigkKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLCQmJnRoaXMuX19oLnB1c2goJCksSzgodGhpcykpfSxvMS5wcm90b3R5cGUucmVuZGVyPUoxLGgwPVtdLFUzPXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxMMz1mdW5jdGlvbigkLEspe3JldHVybiAkLl9fdi5fX2ItSy5fX3YuX19ifSx6Mi5fX3I9MCx0Mj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLEcyPSJfX2QiK3QyLFQ1PSJfX2EiK3QyLEMzPS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLFE4PTAsZTI9TjMoITEpLCQ4PU4zKCEwKSxIMz0wO3ZhciBmMCxTMSxWOCxXMyxZNT0wLHkzPVtdLGoxPWEsXzM9ajEuX19iLEQzPWoxLl9fcixUMz1qMS5kaWZmZWQsdzM9ajEuX19jLEUzPWoxLnVubW91bnQsSTM9ajEuX187ZnVuY3Rpb24gcTUoJCxLKXtqMS5fX2gmJmoxLl9faChTMSwkLFk1fHxLKSxZNT0wO3ZhciBKPVMxLl9fSHx8KFMxLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuICQ+PUouX18ubGVuZ3RoJiZKLl9fLnB1c2goe30pLEouX19bJF19ZnVuY3Rpb24gTSgkKXtyZXR1cm4gWTU9MSxuMChTMywkKX1mdW5jdGlvbiBuMCgkLEssSil7dmFyIFo9cTUoZjArKywyKTtpZihaLnQ9JCwhWi5fX2MmJihaLl9fPVtKP0ooSyk6UzModm9pZCAwLEspLGZ1bmN0aW9uKFYpe3ZhciBOPVouX19OP1ouX19OWzBdOlouX19bMF0sQj1aLnQoTixWKTtOIT09QiYmKFouX19OPVtCLFouX19bMV1dLFouX19jLnNldFN0YXRlKHt9KSl9XSxaLl9fYz1TMSwhUzEuX19mKSl7dmFyIFg9ZnVuY3Rpb24oVixOLEIpe2lmKCFaLl9fYy5fX0gpcmV0dXJuITA7dmFyIHo9Wi5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4gQy5fX2N9KTtpZih6LmV2ZXJ5KGZ1bmN0aW9uKEMpe3JldHVybiFDLl9fTn0pKXJldHVybiFZfHxZLmNhbGwodGhpcyxWLE4sQik7dmFyIEc9Wi5fX2MucHJvcHMhPT1WO3JldHVybiB6LnNvbWUoZnVuY3Rpb24oQyl7aWYoQy5fX04pe3ZhciBVPUMuX19bMF07Qy5fXz1DLl9fTixDLl9fTj12b2lkIDAsVSE9PUMuX19bMF0mJihHPSEwKX19KSxZJiZZLmNhbGwodGhpcyxWLE4sQil8fEd9O1MxLl9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlksY29tcG9uZW50V2lsbFVwZGF0ZTpxfT1TMTtTMS5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKFYsTixCKXtpZih0aGlzLl9fZSl7dmFyIHo9WTtZPXZvaWQgMCxYKFYsTixCKSxZPXp9cSYmcS5jYWxsKHRoaXMsVixOLEIpfSxTMS5zaG91bGRDb21wb25lbnRVcGRhdGU9WH1yZXR1cm4gWi5fX058fFouX199ZnVuY3Rpb24gRSgkLEspe3ZhciBKPXE1KGYwKyssMyk7IWoxLl9fcyYmQjgoSi5fX0gsSykmJihKLl9fPSQsSi51PUssUzEuX19ILl9faC5wdXNoKEopKX1mdW5jdGlvbiBFMCgkLEspe3ZhciBKPXE1KGYwKyssNCk7IWoxLl9fcyYmQjgoSi5fX0gsSykmJihKLl9fPSQsSi51PUssUzEuX19oLnB1c2goSikpfWZ1bmN0aW9uIEkoJCl7cmV0dXJuIFk1PTUsdzEoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDokfX0sW10pfWZ1bmN0aW9uIEMyKCQsSyxKKXtZNT02LEUwKGZ1bmN0aW9uKCl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBaPSQoSygpKTtyZXR1cm4gZnVuY3Rpb24oKXskKG51bGwpLFomJnR5cGVvZiBaPT0iZnVuY3Rpb24iJiZaKCl9fWlmKCQpcmV0dXJuICQuY3VycmVudD1LKCksZnVuY3Rpb24oKXtyZXR1cm4gJC5jdXJyZW50PW51bGx9fSxKPT1udWxsP0o6Si5jb25jYXQoJCkpfWZ1bmN0aW9uIHcxKCQsSyl7dmFyIEo9cTUoZjArKyw3KTtyZXR1cm4gQjgoSi5fX0gsSykmJihKLl9fPSQoKSxKLl9fSD1LLEouX19oPSQpLEouX199ZnVuY3Rpb24gRCgkLEspe3JldHVybiBZNT04LHcxKGZ1bmN0aW9uKCl7cmV0dXJuICR9LEspfWZ1bmN0aW9uIGswKCQpe3ZhciBLPVMxLmNvbnRleHRbJC5fX2NdLEo9cTUoZjArKyw5KTtyZXR1cm4gSi5jPSQsSz8oSi5fXz09bnVsbCYmKEouX189ITAsSy5zdWIoUzEpKSxLLnByb3BzLnZhbHVlKTokLl9ffWZ1bmN0aW9uIEgyKCQsSyl7ajEudXNlRGVidWdWYWx1ZSYmajEudXNlRGVidWdWYWx1ZShLP0soJCk6JCl9ZnVuY3Rpb24gVjUoKXt2YXIgJD1xNShmMCsrLDExKTtpZighJC5fXyl7Zm9yKHZhciBLPVMxLl9fdjtLIT09bnVsbCYmIUsuX19tJiZLLl9fIT09bnVsbDspSz1LLl9fO3ZhciBKPUsuX19tfHwoSy5fX209WzAsMF0pOyQuX189IlAiK0pbMF0rIi0iK0pbMV0rK31yZXR1cm4gJC5fX31mdW5jdGlvbiBHNygpe2Zvcih2YXIgJDskPXkzLnNoaWZ0KCk7KXt2YXIgSz0kLl9fSDtpZigkLl9fUCYmSyl0cnl7Sy5fX2guc29tZShMMiksSy5fX2guc29tZShHOCksSy5fX2g9W119Y2F0Y2goSil7Sy5fX2g9W10sajEuX19lKEosJC5fX3YpfX19ajEuX19iPWZ1bmN0aW9uKCQpe1MxPW51bGwsXzMmJl8zKCQpfSxqMS5fXz1mdW5jdGlvbigkLEspeyQmJksuX19rJiZLLl9fay5fX20mJigkLl9fbT1LLl9fay5fX20pLEkzJiZJMygkLEspfSxqMS5fX3I9ZnVuY3Rpb24oJCl7RDMmJkQzKCQpLGYwPTA7dmFyIEs9KFMxPSQuX19jKS5fX0g7SyYmKFY4PT09UzE/KEsuX19oPVtdLFMxLl9faD1bXSxLLl9fLnNvbWUoZnVuY3Rpb24oSil7Si5fX04mJihKLl9fPUouX19OKSxKLnU9Si5fX049dm9pZCAwfSkpOihLLl9faC5zb21lKEwyKSxLLl9faC5zb21lKEc4KSxLLl9faD1bXSxmMD0wKSksVjg9UzF9LGoxLmRpZmZlZD1mdW5jdGlvbigkKXtUMyYmVDMoJCk7dmFyIEs9JC5fX2M7SyYmSy5fX0gmJihLLl9fSC5fX2gubGVuZ3RoJiYoeTMucHVzaChLKSE9PTEmJlczPT09ajEucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKFczPWoxLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fEI3KShHNykpLEsuX19ILl9fLnNvbWUoZnVuY3Rpb24oSil7Si51JiYoSi5fX0g9Si51KSxKLnU9dm9pZCAwfSkpLFY4PVMxPW51bGx9LGoxLl9fYz1mdW5jdGlvbigkLEspe0suc29tZShmdW5jdGlvbihKKXt0cnl7Si5fX2guc29tZShMMiksSi5fX2g9Si5fX2guZmlsdGVyKGZ1bmN0aW9uKFope3JldHVybiFaLl9ffHxHOChaKX0pfWNhdGNoKFope0suc29tZShmdW5jdGlvbihYKXtYLl9faCYmKFguX19oPVtdKX0pLEs9W10sajEuX19lKFosSi5fX3YpfX0pLHczJiZ3MygkLEspfSxqMS51bm1vdW50PWZ1bmN0aW9uKCQpe0UzJiZFMygkKTt2YXIgSyxKPSQuX19jO0omJkouX19IJiYoSi5fX0guX18uc29tZShmdW5jdGlvbihaKXt0cnl7TDIoWil9Y2F0Y2goWCl7Sz1YfX0pLEouX19IPXZvaWQgMCxLJiZqMS5fX2UoSyxKLl9fdikpfTt2YXIgYjM9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBCNygkKXt2YXIgSyxKPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFopLGIzJiZjYW5jZWxBbmltYXRpb25GcmFtZShLKSxzZXRUaW1lb3V0KCQpfSxaPXNldFRpbWVvdXQoSiwzNSk7YjMmJihLPXJlcXVlc3RBbmltYXRpb25GcmFtZShKKSl9ZnVuY3Rpb24gTDIoJCl7dmFyIEs9UzEsSj0kLl9fYzt0eXBlb2YgSj09ImZ1bmN0aW9uIiYmKCQuX19jPXZvaWQgMCxKKCkpLFMxPUt9ZnVuY3Rpb24gRzgoJCl7dmFyIEs9UzE7JC5fX2M9JC5fXygpLFMxPUt9ZnVuY3Rpb24gQjgoJCxLKXtyZXR1cm4hJHx8JC5sZW5ndGghPT1LLmxlbmd0aHx8Sy5zb21lKGZ1bmN0aW9uKEosWil7cmV0dXJuIEohPT0kW1pdfSl9ZnVuY3Rpb24gUzMoJCxLKXtyZXR1cm4gdHlwZW9mIEs9PSJmdW5jdGlvbiI/SygkKTpLfWZ1bmN0aW9uIHAzKCQsSyl7Zm9yKHZhciBKIGluIEspJFtKXT1LW0pdO3JldHVybiAkfWZ1bmN0aW9uIHo4KCQsSyl7Zm9yKHZhciBKIGluICQpaWYoSiE9PSJfX3NvdXJjZSImJiEoSiBpbiBLKSlyZXR1cm4hMDtmb3IodmFyIFogaW4gSylpZihaIT09Il9fc291cmNlIiYmJFtaXSE9PUtbWl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gdTMoJCxLKXt2YXIgSj1LKCksWj1NKHt0OntfXzpKLHU6S319KSxYPVpbMF0udCxZPVpbMV07cmV0dXJuIEUwKGZ1bmN0aW9uKCl7WC5fXz1KLFgudT1LLE44KFgpJiZZKHt0Olh9KX0sWyQsSixLXSksRShmdW5jdGlvbigpe3JldHVybiBOOChYKSYmWSh7dDpYfSksJChmdW5jdGlvbigpe044KFgpJiZZKHt0Olh9KX0pfSxbJF0pLEp9ZnVuY3Rpb24gTjgoJCl7dHJ5e3JldHVybiEoKEs9JC5fXyk9PT0oSj0kLnUoKSkmJihLIT09MHx8MS9LPT0xL0opfHxLIT1LJiZKIT1KKX1jYXRjaChaKXtyZXR1cm4hMH12YXIgSyxKfWZ1bmN0aW9uIGwzKCQpeyQoKX1mdW5jdGlvbiBkMygkKXtyZXR1cm4gJH1mdW5jdGlvbiBjMygpe3JldHVyblshMSxsM119dmFyIHIzPUUwO2Z1bmN0aW9uIFU4KCQsSyl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1LfWZ1bmN0aW9uIGkwKCQsSyl7ZnVuY3Rpb24gSihYKXt2YXIgWT10aGlzLnByb3BzLnJlZjtyZXR1cm4gWSE9WC5yZWYmJlkmJih0eXBlb2YgWT09ImZ1bmN0aW9uIj9ZKG51bGwpOlkuY3VycmVudD1udWxsKSxLPyFLKHRoaXMucHJvcHMsWCl8fFkhPVgucmVmOno4KHRoaXMucHJvcHMsWCl9ZnVuY3Rpb24gWihYKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9SixmMSgkLFgpfXJldHVybiBaLmRpc3BsYXlOYW1lPSJNZW1vKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFouX19mPVoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWi50eXBlPSQsWn0oVTgucHJvdG90eXBlPW5ldyBvMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsVTgucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEspe3JldHVybiB6OCh0aGlzLnByb3BzLCQpfHx6OCh0aGlzLnN0YXRlLEspfTt2YXIgeDM9YS5fX2I7YS5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLHgzJiZ4MygkKX07dmFyIE43PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIE0wKCQpe2Z1bmN0aW9uIEsoSil7dmFyIFo9cDMoe30sSik7cmV0dXJuIGRlbGV0ZSBaLnJlZiwkKFosSi5yZWZ8fG51bGwpfXJldHVybiBLLiQkdHlwZW9mPU43LEsucmVuZGVyPSQsSy5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1LLl9fZj0hMCxLLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLEt9dmFyIFIzPWZ1bmN0aW9uKCQsSyl7cmV0dXJuICQ9PW51bGw/bnVsbDpxMChxMCgkKS5tYXAoSykpfSx6Nz17bWFwOlIzLGZvckVhY2g6UjMsY291bnQ6ZnVuY3Rpb24oJCl7cmV0dXJuICQ/cTAoJCkubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24oJCl7dmFyIEs9cTAoJCk7aWYoSy5sZW5ndGghPT0xKXRocm93IkNoaWxkcmVuLm9ubHkiO3JldHVybiBLWzBdfSx0b0FycmF5OnEwfSxVNz1hLl9fZTthLl9fZT1mdW5jdGlvbigkLEssSixaKXtpZigkLnRoZW4pe2Zvcih2YXIgWCxZPUs7WT1ZLl9fOylpZigoWD1ZLl9fYykmJlguX19jKXJldHVybiBLLl9fZT09bnVsbCYmKEsuX19lPUouX19lLEsuX19rPUouX19rKSxYLl9fYygkLEspfVU3KCQsSyxKLFopfTt2YXIgdjM9YS51bm1vdW50O2Z1bmN0aW9uIG8zKCQsSyxKKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihaKXt0eXBlb2YgWi5fX2M9PSJmdW5jdGlvbiImJlouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9cDMoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PUomJigkLl9fYy5fX1A9SyksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIG8zKFosSyxKKX0pKSwkfWZ1bmN0aW9uIG4zKCQsSyxKKXtyZXR1cm4gJCYmSiYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gbjMoWixLLEopfSksJC5fX2MmJiQuX19jLl9fUD09PUsmJigkLl9fZSYmSi5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1KKSksJH1mdW5jdGlvbiBrMigpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBpMygkKXt2YXIgSz0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSyYmSy5fX2EmJksuX19hKCQpfWZ1bmN0aW9uIEw3KCQpe3ZhciBLLEosWixYPW51bGw7ZnVuY3Rpb24gWShxKXtpZihLfHwoSz0kKCkpLnRoZW4oZnVuY3Rpb24oVil7ViYmKFg9Vi5kZWZhdWx0fHxWKSxaPSEwfSxmdW5jdGlvbihWKXtKPVYsWj0hMH0pLEopdGhyb3cgSjtpZighWil0aHJvdyBLO3JldHVybiBYP2YxKFgscSk6bnVsbH1yZXR1cm4gWS5kaXNwbGF5TmFtZT0iTGF6eSIsWS5fX2Y9ITAsWX1mdW5jdGlvbiB5NSgpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfWEudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSz0kLl9fYztLJiYoSy5fX3o9ITApLEsmJksuX19SJiZLLl9fUigpLEsmJjMyJiQuX191JiYoJC50eXBlPW51bGwpLHYzJiZ2MygkKX0sKGsyLnByb3RvdHlwZT1uZXcgbzEpLl9fYz1mdW5jdGlvbigkLEspe3ZhciBKPUsuX19jLFo9dGhpcztaLm89PW51bGwmJihaLm89W10pLFouby5wdXNoKEopO3ZhciBYPWkzKFouX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxaLl9fenx8KFk9ITAsSi5fX1I9bnVsbCxYP1goTik6TigpKX07Si5fX1I9cTt2YXIgVj1KLl9fUDtKLl9fUD1udWxsO3ZhciBOPWZ1bmN0aW9uKCl7aWYoIS0tWi5fX3Upe2lmKFouc3RhdGUuX19hKXt2YXIgQj1aLnN0YXRlLl9fYTtaLl9fdi5fX2tbMF09bjMoQixCLl9fYy5fX1AsQi5fX2MuX19PKX12YXIgejtmb3IoWi5zZXRTdGF0ZSh7X19hOlouX19iPW51bGx9KTt6PVouby5wb3AoKTspei5fX1A9Vix6LmZvcmNlVXBkYXRlKCl9fTtaLl9fdSsrfHwzMiZLLl9fdXx8Wi5zZXRTdGF0ZSh7X19hOlouX19iPVouX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxrMi5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LGsyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxLKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPW8zKHRoaXMuX19iLEosWi5fX089Wi5fX1ApfXRoaXMuX19iPW51bGx9dmFyIFg9Sy5fX2EmJmYxKEoxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIFgmJihYLl9fdSY9LTMzKSxbZjEoSjEsbnVsbCxLLl9fYT9udWxsOiQuY2hpbGRyZW4pLFhdfTt2YXIgajM9ZnVuY3Rpb24oJCxLLEope2lmKCsrSlsxXT09PUpbMF0mJiQubC5kZWxldGUoSyksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKEo9JC5pO0o7KXtmb3IoO0oubGVuZ3RoPjM7KUoucG9wKCkoKTtpZihKWzFdPEpbMF0pYnJlYWs7JC5pPUo9SlsyXX19O2Z1bmN0aW9uIEM3KCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gSDcoJCl7dmFyIEs9dGhpcyxKPSQuaDtpZihLLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7UjAobnVsbCxLLnYpLEsudj1udWxsLEsuaD1udWxsfSxLLmgmJksuaCE9PUomJksuY29tcG9uZW50V2lsbFVubW91bnQoKSwhSy52KXtmb3IodmFyIFo9Sy5fX3Y7WiE9PW51bGwmJiFaLl9fbSYmWi5fXyE9PW51bGw7KVo9Wi5fXztLLmg9SixLLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpKLGNoaWxkTm9kZXM6W10sX19rOntfX206Wi5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpKLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oWCxZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChYKSxLLmguaW5zZXJ0QmVmb3JlKFgsWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKFgpe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoWCk+Pj4xLDEpLEsuaC5yZW1vdmVDaGlsZChYKX19fVIwKGYxKEM3LHtjb250ZXh0OksuY29udGV4dH0sJC5fX3YpLEsudil9ZnVuY3Rpb24gTDgoJCxLKXt2YXIgSj1mMShINyx7X192OiQsaDpLfSk7cmV0dXJuIEouY29udGFpbmVySW5mbz1LLEp9KHk1LnByb3RvdHlwZT1uZXcgbzEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSz10aGlzLEo9aTMoSy5fX3YpLFo9Sy5sLmdldCgkKTtyZXR1cm4gWlswXSsrLGZ1bmN0aW9uKFgpe3ZhciBZPWZ1bmN0aW9uKCl7Sy5wcm9wcy5yZXZlYWxPcmRlcj8oWi5wdXNoKFgpLGozKEssJCxaKSk6WCgpfTtKP0ooWSk6WSgpfX0seTUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSz1xMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZLLnJldmVyc2UoKTtmb3IodmFyIEo9Sy5sZW5ndGg7Si0tOyl0aGlzLmwuc2V0KEtbSl0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LHk1LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9eTUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihLLEope2ozKCQsSixLKX0pfTt2YXIgYTM9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsazc9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLEY3PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sQTc9L1tBLVowLTldL2csTTc9dHlwZW9mIGRvY3VtZW50PCJ1IixPNz1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIFA3KCQsSyxKKXtyZXR1cm4gSy5fX2s9PW51bGwmJihLLnRleHRDb250ZW50PSIiKSxSMCgkLEspLHR5cGVvZiBKPT0iZnVuY3Rpb24iJiZKKCksJD8kLl9fYzpudWxsfWZ1bmN0aW9uIFc3KCQsSyxKKXtyZXR1cm4gVTIoJCxLKSx0eXBlb2YgSj09ImZ1bmN0aW9uIiYmSigpLCQ/JC5fX2M6bnVsbH1vMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobzEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihLKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6S30pfX0pfSk7dmFyIGczPWEuZXZlbnQ7YS5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gZzMmJigkPWczKCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgQzgsXzc9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LGgzPWEudm5vZGU7YS52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSyl7dmFye3Byb3BzOkosdHlwZTpafT1LLFg9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIEope3ZhciBWPUpbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gSikmJlY9PW51bGx8fE03JiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgTj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gSiYmSi52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJlY9PT0hMD9WPSIiOk49PT0idHJhbnNsYXRlIiYmVj09PSJubyI/Vj0hMTpOWzBdPT09Im8iJiZOWzFdPT09Im4iP049PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6TiE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8TzcoSi50eXBlKT9OPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Tj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOkY3LnRlc3QocSkmJihxPU4pOk49cT0ib25pbnB1dCI6WSYmazcudGVzdChxKT9xPXEucmVwbGFjZShBNywiLSQmIikudG9Mb3dlckNhc2UoKTpWPT09bnVsbCYmKFY9dm9pZCAwKSxOPT09Im9uaW5wdXQiJiZYW3E9Tl0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLFhbcV09Vn19Wj09InNlbGVjdCImJihYLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KFgudmFsdWUpJiYoWC52YWx1ZT1xMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9WC52YWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMX0pKSxYLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKFgudmFsdWU9cTAoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgubXVsdGlwbGU/WC5kZWZhdWx0VmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTE6WC5kZWZhdWx0VmFsdWU9PUIucHJvcHMudmFsdWV9KSkpLEouY2xhc3MmJiFKLmNsYXNzTmFtZT8oWC5jbGFzcz1KLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjbGFzc05hbWUiLF83KSk6Si5jbGFzc05hbWUmJihYLmNsYXNzPVguY2xhc3NOYW1lPUouY2xhc3NOYW1lKSxLLnByb3BzPVh9KCQpLCQuJCR0eXBlb2Y9YTMsaDMmJmgzKCQpfTt2YXIgZjM9YS5fX3I7YS5fX3I9ZnVuY3Rpb24oJCl7ZjMmJmYzKCQpLEM4PSQuX19jfTt2YXIgbTM9YS5kaWZmZWQ7YS5kaWZmZWQ9ZnVuY3Rpb24oJCl7bTMmJm0zKCQpO3Zhcntwcm9wczpLLF9fZTpKfT0kO0ohPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBLJiZLLnZhbHVlIT09Si52YWx1ZSYmKEoudmFsdWU9Sy52YWx1ZT09bnVsbD8iIjpLLnZhbHVlKSxDOD1udWxsfTt2YXIgRDc9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKCQpe3JldHVybiBDOC5fX25bJC5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazpELHVzZUNvbnRleHQ6azAsdXNlRGVidWdWYWx1ZTpIMix1c2VEZWZlcnJlZFZhbHVlOmQzLHVzZUVmZmVjdDpFLHVzZUlkOlY1LHVzZUltcGVyYXRpdmVIYW5kbGU6QzIsdXNlSW5zZXJ0aW9uRWZmZWN0OnIzLHVzZUxheW91dEVmZmVjdDpFMCx1c2VNZW1vOncxLHVzZVJlZHVjZXI6bjAsdXNlUmVmOkksdXNlU3RhdGU6TSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTp1Myx1c2VUcmFuc2l0aW9uOmMzfX19O2Z1bmN0aW9uIFQ3KCQpe3JldHVybiBmMS5iaW5kKG51bGwsJCl9ZnVuY3Rpb24gRjIoJCl7cmV0dXJuISEkJiYkLiQkdHlwZW9mPT09YTN9ZnVuY3Rpb24gdzcoJCl7cmV0dXJuIEYyKCQpJiYkLnR5cGU9PT1KMX1mdW5jdGlvbiBFNygkKXtyZXR1cm4hISQmJnR5cGVvZiAkLmRpc3BsYXlOYW1lPT0ic3RyaW5nIiYmJC5kaXNwbGF5TmFtZS5pbmRleE9mKCJNZW1vKCIpPT0wfWZ1bmN0aW9uIEk3KCQpe3JldHVybiBGMigkKT9xOC5hcHBseShudWxsLGFyZ3VtZW50cyk6JH1mdW5jdGlvbiBiNygkKXtyZXR1cm4hISQuX19rJiYoUjAobnVsbCwkKSwhMCl9ZnVuY3Rpb24geTcoJCl7cmV0dXJuICQmJigkLmJhc2V8fCQubm9kZVR5cGU9PT0xJiYkKXx8bnVsbH12YXIgUzc9ZnVuY3Rpb24oJCxLKXtyZXR1cm4gJChLKX0seDc9ZnVuY3Rpb24oJCxLKXt2YXIgSj1hLmRlYm91bmNlUmVuZGVyaW5nO2EuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24oWCl7cmV0dXJuIFgoKX07dmFyIFo9JChLKTtyZXR1cm4gYS5kZWJvdW5jZVJlbmRlcmluZz1KLFp9LFI3PUYyLGg9e3VzZVN0YXRlOk0sdXNlSWQ6VjUsdXNlUmVkdWNlcjpuMCx1c2VFZmZlY3Q6RSx1c2VMYXlvdXRFZmZlY3Q6RTAsdXNlSW5zZXJ0aW9uRWZmZWN0OnIzLHVzZVRyYW5zaXRpb246YzMsdXNlRGVmZXJyZWRWYWx1ZTpkMyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTp1MyxzdGFydFRyYW5zaXRpb246bDMsdXNlUmVmOkksdXNlSW1wZXJhdGl2ZUhhbmRsZTpDMix1c2VNZW1vOncxLHVzZUNhbGxiYWNrOkQsdXNlQ29udGV4dDprMCx1c2VEZWJ1Z1ZhbHVlOkgyLHZlcnNpb246IjE4LjMuMSIsQ2hpbGRyZW46ejcscmVuZGVyOlA3LGh5ZHJhdGU6VzcsdW5tb3VudENvbXBvbmVudEF0Tm9kZTpiNyxjcmVhdGVQb3J0YWw6TDgsY3JlYXRlRWxlbWVudDpmMSxjcmVhdGVDb250ZXh0OkgwLGNyZWF0ZUZhY3Rvcnk6VDcsY2xvbmVFbGVtZW50Okk3LGNyZWF0ZVJlZjpiNSxGcmFnbWVudDpKMSxpc1ZhbGlkRWxlbWVudDpGMixpc0VsZW1lbnQ6UjcsaXNGcmFnbWVudDp3Nyxpc01lbW86RTcsZmluZERPTU5vZGU6eTcsQ29tcG9uZW50Om8xLFB1cmVDb21wb25lbnQ6VTgsbWVtbzppMCxmb3J3YXJkUmVmOk0wLGZsdXNoU3luYzp4Nyx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpTNyxTdHJpY3RNb2RlOkoxLFN1c3BlbnNlOmsyLFN1c3BlbnNlTGlzdDp5NSxsYXp5Okw3LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOkQ3fTtmdW5jdGlvbiBzMygkKXtsZXQgSz1uZXcgVWludDhBcnJheSg2NTUzNiksSj0wLFo9MCxYPTEwMjQsWT1uZXcgVGV4dERlY29kZXIoImxhdGluMSIpLHE9KEMpPT57aWYoSitDLmxlbmd0aD5LLmxlbmd0aCl7aWYoWj4wKUsuY29weVdpdGhpbigwLFosSiksSi09WixaPTA7aWYoSitDLmxlbmd0aD5LLmxlbmd0aCl7bGV0IFU9Sy5sZW5ndGg7d2hpbGUoVTxKK0MubGVuZ3RoKVUqPTI7bGV0IEY9bmV3IFVpbnQ4QXJyYXkoVSk7Ri5zZXQoSy5zdWJhcnJheSgwLEopKSxLPUZ9fUsuc2V0KEMsSiksSis9Qy5sZW5ndGh9LFY9KEMpPT57bGV0IFU9TWF0aC5taW4oSi00LEMrWCk7Zm9yKGxldCBGPUM7Rjw9VTtGKyspaWYoS1tGXT09PTEzJiZLW0YrMV09PT0xMCYmS1tGKzJdPT09MTMmJktbRiszXT09PTEwKXJldHVybiBGO3JldHVybi0xfSxOPShDLFUpPT57bGV0IEY9WS5kZWNvZGUoSy5zdWJhcnJheShDLFUpKSxMPS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMoRik7cmV0dXJuIEw/TnVtYmVyKExbMV0pOm51bGx9LEI9MCx6PShDKT0+e2xldCBVPS0xO2ZvcihsZXQgRj1DO0Y8Si0xO0YrKylpZihLW0ZdPT09MjU1JiZLW0YrMV09PT0yMTYpe1U9RjticmVha31pZihVPT09LTEpcmV0dXJuIG51bGw7Zm9yKGxldCBGPU1hdGgubWF4KFUrMixCKTtGPEotMTtGKyspaWYoS1tGXT09PTI1NSYmS1tGKzFdPT09MjE3KXJldHVybiBCPTAse3M6VSxlOkYrMn07cmV0dXJuIEI9TWF0aC5tYXgoVSsyLEotMSksbnVsbH0sRz0oKT0+e3doaWxlKFo8Sil7bGV0IEM9VihaKTtpZihDPj0wKXtsZXQgRj1OKFosQyk7aWYoRiE9bnVsbCYmRj4wKXtsZXQgTD1DKzQsaz1MK0Y7aWYoSjxrKWJyZWFrOyQoSy5zdWJhcnJheShMLGspKSxaPWs7Y29udGludWV9fWVsc2UgaWYoSi1aPD1YKWJyZWFrO2xldCBVPXooWik7aWYoIVUpYnJlYWs7JChLLnN1YmFycmF5KFUucyxVLmUpKSxaPVUuZX1pZihaPjApe2lmKFo8SilLLmNvcHlXaXRoaW4oMCxaLEopO0otPVosQj1CPlo/Qi1aOjAsWj0wfX07cmV0dXJue3B1c2goQyl7aWYoQy5sZW5ndGg9PT0wKXJldHVybjtxKEMpLEcoKX19fWZ1bmN0aW9uIEEyKCQsSyl7bGV0IEo9SShLKTtKLmN1cnJlbnQ9SztsZXQgWj1JKG5ldyBTZXQpLFg9RCgoWSk9PntyZXR1cm4gWi5jdXJyZW50LmFkZChZKSwoKT0+e1ouY3VycmVudC5kZWxldGUoWSl9fSxbXSk7cmV0dXJuIEUoKCk9PntpZighJClyZXR1cm47bGV0IFk9bmV3IEFib3J0Q29udHJvbGxlcixxPSExLFY9bnVsbCxOPW5ldyBVUkwoJCk7Ti5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IEI9Ti50b1N0cmluZygpLHo9KCk9PntpZihxfHxZLnNpZ25hbC5hYm9ydGVkfHxWKXJldHVybjtWPXNldFRpbWVvdXQoKCk9PntWPW51bGwsQygpfSwxMDAwKX0sRz0oVSk9PntpZihKLmN1cnJlbnQ/LighMCksWi5jdXJyZW50LnNpemU9PT0wKXJldHVybjtsZXQgRj1VLmxlbmd0aD49OCYmVVswXT09PTEzNyYmVVsxXT09PTgwJiZVWzJdPT09NzgmJlVbM109PT03MSxMPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW1VdLHt0eXBlOkY/ImltYWdlL3BuZyI6ImltYWdlL2pwZWcifSkpO2ZvcihsZXQgayBvZiBaLmN1cnJlbnQpayhMKX0sQz1hc3luYygpPT57dHJ5e2xldCBGPShhd2FpdCBmZXRjaChCLHtzaWduYWw6WS5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUYpe3ooKTtyZXR1cm59bGV0IEw9czMoRyk7d2hpbGUoITApe2xldHtkb25lOmssdmFsdWU6SH09YXdhaXQgRi5yZWFkKCk7aWYoaylicmVhaztpZihIJiZILmxlbmd0aClMLnB1c2goSCl9fWNhdGNoe31maW5hbGx5e2lmKCFxKUouY3VycmVudD8uKCExKTt6KCl9fTtyZXR1cm4gQygpLCgpPT57aWYocT0hMCxKLmN1cnJlbnQ/LighMSksViljbGVhclRpbWVvdXQoVik7WS5hYm9ydCgpfX0sWyRdKSx7c3Vic2NyaWJlRnJhbWU6WCxmcmFtZTpudWxsfX1mdW5jdGlvbiB0MygkLEssSil7aWYoISQpcmV0dXJuIG51bGw7Zm9yKGxldCBaIG9mICQucGllY2VzKXtpZihaLmxlbmd0aCE9PTUpY29udGludWU7bGV0W1gsWSxxLFYsTl09WjtpZihbLi4uWCwuLi5ZLC4uLnEsLi4uViwuLi5OXS5zb21lKChvKT0+IU51bWJlci5pc0Zpbml0ZShvKSkpY29udGludWU7bGV0IEI9WVswXS1xWzBdLHo9VlswXS1xWzBdLEc9WVsxXS1xWzFdLEM9VlsxXS1xWzFdLFU9WFswXS1ZWzBdK3FbMF0tVlswXSxGPVhbMV0tWVsxXStxWzFdLVZbMV0sTD1CKkMteipHO2lmKE1hdGguYWJzKEwpPDAuMDAwMDAwMDAwMSljb250aW51ZTtsZXQgaz0oVSpDLXoqRikvTCxIPShCKkYtVSpHKS9MLFA9WVswXS1YWzBdK2sqWVswXSx5PVZbMF0tWFswXStIKlZbMF0sVz1ZWzFdLVhbMV0raypZWzFdLEE9VlsxXS1YWzFdK0gqVlsxXSxUPVAtSyprLGk9eS1LKkgsdj1XLUoqayxqPUEtSipILGQ9VCpqLWkqdjtpZihNYXRoLmFicyhkKTwwLjAwMDAwMDAwMDEpY29udGludWU7bGV0IFoxPSgoSy1YWzBdKSpqLWkqKEotWFsxXSkpL2QscTE9KFQqKEotWFsxXSktKEstWFswXSkqdikvZDtpZihaMTwtMC4wMDF8fHExPC0wLjAwMXx8WjE+MS4wMDF8fHExPjEuMDAxKWNvbnRpbnVlO3JldHVybnt4Ok5bMF0rTWF0aC5tYXgoMCxNYXRoLm1pbigxLFoxKSkqTlsyXSx5Ok5bMV0rTWF0aC5tYXgoMCxNYXRoLm1pbigxLHExKSkqTlszXX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gZTMoJCxLKXtyZXR1cm4gJC5waWVjZXMuZmxhdE1hcCgoSik9PntpZihKLmxlbmd0aCE9PTUpcmV0dXJuW107bGV0W1osWCxZLHEsVl09SixOPU1hdGgubWF4KEsueCxWWzBdKSxCPU1hdGgubWF4KEsueSxWWzFdKSx6PU1hdGgubWluKEsueCtLLndpZHRoLFZbMF0rVlsyXSksRz1NYXRoLm1pbihLLnkrSy5oZWlnaHQsVlsxXStWWzNdKTtpZih6PD1OfHxHPD1CKXJldHVybltdO2xldCBDPVhbMF0tWVswXSxVPXFbMF0tWVswXSxGPVhbMV0tWVsxXSxMPXFbMV0tWVsxXSxrPVpbMF0tWFswXStZWzBdLXFbMF0sSD1aWzFdLVhbMV0rWVsxXS1xWzFdLFA9QypMLVUqRjtpZihNYXRoLmFicyhQKTwwLjAwMDAwMDAwMDEpcmV0dXJuW107bGV0IHk9KGsqTC1VKkgpL1AsVz0oQypILWsqRikvUCxBPShULGkpPT57bGV0IHY9KFQtVlswXSkvVlsyXSxqPShpLVZbMV0pL1ZbM10sZD0xK3kqditXKmo7cmV0dXJuWygoWFswXS1aWzBdK3kqWFswXSkqdisocVswXS1aWzBdK1cqcVswXSkqaitaWzBdKS9kLCgoWFsxXS1aWzFdK3kqWFsxXSkqdisocVsxXS1aWzFdK1cqcVsxXSkqaitaWzFdKS9kXX07cmV0dXJuW1tBKE4sQiksQSh6LEIpLEEoeixHKSxBKE4sRyldXX0pfWZ1bmN0aW9uICQ5KCQpe3JldHVybiBKU09OLnN0cmluZ2lmeSgkJiZbJC5wYW5lbCwkLmhpbmdlRGVncmVlcywkLnBpZWNlc10pfWZ1bmN0aW9uIEs5KCQpe2xldCBLPSQ/LmhhcmR3YXJlO2lmKCFLfHxLLmxlbmd0aCE9PTR8fEsuc29tZSgoe3g6Six5OlosYW5nbGU6WH0pPT4hW0osWixYXS5ldmVyeShOdW1iZXIuaXNGaW5pdGUpKSlyZXR1cm5bXTtyZXR1cm4gSy5tYXAoKEosWik9Pih7Li4uSixrZXk6Wn0pKX12YXIgTTI9KC4uLiQpPT4kLmZpbHRlcigoSyxKLFopPT57cmV0dXJuIEJvb2xlYW4oSykmJksudHJpbSgpIT09IiImJlouaW5kZXhPZihLKT09PUp9KS5qb2luKCIgIikudHJpbSgpO3ZhciBKOT0oJCk9PiQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO3ZhciBROT0oJCk9PiQucmVwbGFjZSgvXihbQS1aXSl8W1xzLV9dKyhcdykvZywoSyxKLFopPT5aP1oudG9VcHBlckNhc2UoKTpKLnRvTG93ZXJDYXNlKCkpO3ZhciBIOD0oJCk9PntsZXQgSz1ROSgkKTtyZXR1cm4gSy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStLLnNsaWNlKDEpfTt2YXIgTzI9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3ZhciBaOT0oJCk9Pntmb3IobGV0IEsgaW4gJClpZihLLnN0YXJ0c1dpdGgoImFyaWEtIil8fEs9PT0icm9sZSJ8fEs9PT0idGl0bGUiKXJldHVybiEwO3JldHVybiExfTt2YXIgdjc9SDAoe30pO3ZhciBYOT0oKT0+azAodjcpO3ZhciBZOT1NMCgoe2NvbG9yOiQsc2l6ZTpLLHN0cm9rZVdpZHRoOkosYWJzb2x1dGVTdHJva2VXaWR0aDpaLGNsYXNzTmFtZTpYPSIiLGNoaWxkcmVuOlksaWNvbk5vZGU6cSwuLi5WfSxOKT0+e2xldHtzaXplOkI9MjQsc3Ryb2tlV2lkdGg6ej0yLGFic29sdXRlU3Ryb2tlV2lkdGg6Rz0hMSxjb2xvcjpDPSJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZTpVPSIifT1YOSgpPz97fSxGPVo/P0c/TnVtYmVyKEo/P3opKjI0L051bWJlcihLPz9CKTpKPz96O3JldHVybiBmMSgic3ZnIix7cmVmOk4sLi4uTzIsd2lkdGg6Sz8/Qj8/TzIud2lkdGgsaGVpZ2h0Oks/P0I/P08yLmhlaWdodCxzdHJva2U6JD8/QyxzdHJva2VXaWR0aDpGLGNsYXNzTmFtZTpNMigibHVjaWRlIixVLFgpLC4uLiFZJiYhWjkoVikmJnsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sLi4uVn0sWy4uLnEubWFwKChbTCxrXSk9PmYxKEwsaykpLC4uLkFycmF5LmlzQXJyYXkoWSk/WTpbWV1dKX0pO3ZhciBDMT0oJCxLKT0+e2xldCBKPU0wKCh7Y2xhc3NOYW1lOlosLi4uWH0sWSk9PmYxKFk5LHtyZWY6WSxpY29uTm9kZTpLLGNsYXNzTmFtZTpNMihgbHVjaWRlLSR7SjkoSDgoJCkpfWAsYGx1Y2lkZS0keyR9YCxaKSwuLi5YfSkpO3JldHVybiBKLmRpc3BsYXlOYW1lPUg4KCQpLEp9O3ZhciBqNz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCIsa2V5OiJmaDNocWEifV1dLEkwPUMxKCJwYW5lbC1sZWZ0IixqNyk7dmFyIGc3PVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiLGtleToieHduemlwIn1dLFsicGF0aCIse2Q6Ik0yMSAxMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIsa2V5OiIxNHJzdnEifV1dLG0wPUMxKCJzcXVhcmUtbW91c2UtcG9pbnRlciIsZzcpO3ZhciBoNz1bWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiIsa2V5OiJpenhsYW8ifV0sWyJwYXRoIix7ZDoiTTEwIDR2NCIsa2V5OiJwcDh1ODAifV0sWyJwYXRoIix7ZDoiTTIgOGgyMCIsa2V5OiJkMTFjczcifV0sWyJwYXRoIix7ZDoiTTYgNHY0IixrZXk6IjFzdnRqdyJ9XV0sUzU9QzEoImFwcC13aW5kb3ciLGg3KTt2YXIgZjc9W1sicGF0aCIse2Q6Ik03IDdoMTB2MTAiLGtleToiMXRpdm45In1dLFsicGF0aCIse2Q6Ik03IDE3IDE3IDciLGtleToiMXZraXphIn1dXSx4NT1DMSgiYXJyb3ctdXAtcmlnaHQiLGY3KTt2YXIgbTc9W1sicGF0aCIse2Q6Ik0xMy45OTcgNGEyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjlhMiAyIDAgMCAxIDItMmgxLjk5N2EyIDIgMCAwIDAgMS43NTktMS4wNDhsLjQ4OS0uOTA0QTIgMiAwIDAgMSAxMC4wMDQgNHoiLGtleToiMTh1NmdnIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjMiLGtleToiMXZnM2V1In1dXSxSNT1DMSgiY2FtZXJhIixtNyk7dmFyIHA3PVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXSx2NT1DMSgiY2hlY2siLHA3KTt2YXIgdTc9W1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dLGo1PUMxKCJjaGV2cm9uLWRvd24iLHU3KTt2YXIgbDc9W1sicGF0aCIse2Q6Im05IDE4IDYtNi02LTYiLGtleToibXRoaHdxIn1dXSxnNT1DMSgiY2hldnJvbi1yaWdodCIsbDcpO3ZhciBkNz1bWyJwYXRoIix7ZDoiTTEyIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAxMiAxOHoiLGtleToiYjE5aDVxIn1dLFsicGF0aCIse2Q6Ik0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIsa2V5OiJoN2g1Z2UifV1dLGg1PUMxKCJmYXN0LWZvcndhcmQiLGQ3KTt2YXIgYzc9W1sicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3IixrZXk6ImNvdWhpNyJ9XSxbInBhdGgiLHtkOiJtMjEgNy01IDUgNSA1VjciLGtleToiNm91aWE3In1dLFsicGF0aCIse2Q6Ik0xMiAyMHYyIixrZXk6IjFsaDFrZyJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiIsa2V5OiI4amN4dWQifV0sWyJwYXRoIix7ZDoiTTEyIDh2MiIsa2V5OiIxd29xaXYifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV1dLGY1PUMxKCJmbGlwLWhvcml6b250YWwtMiIsYzcpO3ZhciByNz1bWyJsaW5lIix7eDE6IjIyIix4MjoiMiIseTE6IjYiLHkyOiI2IixrZXk6IjE1dzdkcSJ9XSxbImxpbmUiLHt4MToiMjIiLHgyOiIyIix5MToiMTgiLHkyOiIxOCIsa2V5OiIxaXA0OHAifV0sWyJsaW5lIix7eDE6IjYiLHgyOiI2Iix5MToiMiIseTI6IjIyIixrZXk6ImEybG55eCJ9XSxbImxpbmUiLHt4MToiMTgiLHgyOiIxOCIseTE6IjIiLHkyOiIyMiIsa2V5OiI4dmI2amQifV1dLGEwPUMxKCJmcmFtZSIscjcpO3ZhciBvNz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Ik0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIixrZXk6IjEzbzF6bCJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMCIsa2V5OiI5aTRwdTQifV1dLG01PUMxKCJnbG9iZSIsbzcpO3ZhciBuNz1bWyJwYXRoIix7ZDoibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIsa2V5OiI5a3p5MzUifV0sWyJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiIsa2V5OiIxdDBmMHQifV0sWyJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IiLGtleToiMW9idXM2In1dLFsicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIiLGtleToiMWd2aGJ5In1dXSxwNT1DMSgiaW1hZ2VzIixuNyk7dmFyIGk3PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTEiLHg6IjMiLHk6IjExIixyeDoiMiIscnk6IjIiLGtleToiMXc0ZXcxIn1dLFsicGF0aCIse2Q6Ik03IDExVjdhNSA1IDAgMCAxIDEwIDB2NCIsa2V5OiJmd3Ztem0ifV1dLHU1PUMxKCJsb2NrIixpNyk7dmFyIGE3PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCIsa2V5OiIxNG52cDAifV1dLGw1PUMxKCJwYW5lbC1yaWdodCIsYTcpO3ZhciBzNz1bWyJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIsa2V5OiIxMzU3ZTMifV0sWyJwYXRoIix7ZDoiTTMgM3Y1aDUiLGtleToiMXhocThhIn1dXSxkNT1DMSgicm90YXRlLWNjdyIsczcpO3ZhciB0Nz1bWyJwYXRoIix7ZDoibTIxIDIxLTQuMzQtNC4zNCIsa2V5OiIxNGo3cmoifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCIsa2V5OiI0ZWo5N3UifV1dLGM1PUMxKCJzZWFyY2giLHQ3KTt2YXIgZTc9W1sicGF0aCIse2Q6Ik0xMiAzdjEyIixrZXk6IjF4MGo1cyJ9XSxbInBhdGgiLHtkOiJtMTcgOC01LTUtNSA1IixrZXk6IjdxOTdyOCJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIsa2V5OiJpaDduM2gifV1dLHI1PUMxKCJ1cGxvYWQiLGU3KTt2YXIgJCQ9W1sicGF0aCIse2Q6Ik0xMSA0LjcwMmEuNzA1LjcwNSAwIDAgMC0xLjIwMy0uNDk4TDYuNDEzIDcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4eiIsa2V5OiJ1cWo5dXcifV0sWyJwYXRoIix7ZDoiTTE2IDlhNSA1IDAgMCAxIDAgNiIsa2V5OiIxcTZrMmIifV1dLG81PUMxKCJ2b2x1bWUtMSIsJCQpO3ZhciBLJD1bWyJwYXRoIix7ZDoiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IixrZXk6InVxajl1dyJ9XSxbInBhdGgiLHtkOiJNMTYgOWE1IDUgMCAwIDEgMCA2IixrZXk6IjFxNmsyYiJ9XSxbInBhdGgiLHtkOiJNMTkuMzY0IDE4LjM2NGE5IDkgMCAwIDAgMC0xMi43MjgiLGtleToiaWp3a2dhIn1dXSxuNT1DMSgidm9sdW1lLTIiLEskKTt2YXIgSiQ9W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXSx6MD1DMSgieCIsSiQpO3ZhciBpNT17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxrOD17cG9ydHJhaXQ6ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXQifSxxOT0xLFY5PTIscDA9MyxHOT00O2Z1bmN0aW9uIGE1KCQpe3JldHVybiAkPj0wLjkzPzM6dm9pZCAwfWZ1bmN0aW9uIEY4KCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIHUwKCQpe3JldHVybiEhJCYmKEY4KCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiBHNSgkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEs9RjgoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsSj1LP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLFo9Sz9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihKPT09JC53aWR0aCYmWj09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOkosaGVpZ2h0Olp9fWZ1bmN0aW9uIGwwKCQpe2xldCBLPUc1KCQpLEo9QjkoJD8ub3JpZW50YXRpb24pLFo9TWF0aC5hYnMoSik9PT05MCxYPSEhJCYmJC53aWR0aD4kLmhlaWdodCxZPUo9PT0xODB8fFomJiFYO3JldHVybntkaXNwbGF5Q29uZmlnOksscm90YXRpb25EZWdyZWVzOlk/SjowLG5lZWRzQ3NzUm90YXRpb246WSxpbnB1dE9yaWVudGF0aW9uOlk/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBCOSgkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBCNSgkLEssSil7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OkoseToxLUt9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLUoseTpLfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUsseToxLUp9O2RlZmF1bHQ6cmV0dXJue3g6Syx5Okp9fX1mdW5jdGlvbiBOOSgkLEssSil7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybntkeDpKLGR5Oi1LfTtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJue2R4Oi1KLGR5Okt9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybntkeDotSyxkeTotSn07ZGVmYXVsdDpyZXR1cm57ZHg6SyxkeTpKfX19ZnVuY3Rpb24gczUoJCxLKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6c3dpdGNoKEspe2Nhc2UgMTpyZXR1cm4gMztjYXNlIDQ6cmV0dXJuIDI7Y2FzZSAyOnJldHVybiAxO2Nhc2UgMzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiBLfWNhc2UibGFuZHNjYXBlX3JpZ2h0Ijpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gMztjYXNlIDI6cmV0dXJuIDQ7Y2FzZSAzOnJldHVybiAxO2RlZmF1bHQ6cmV0dXJuIEt9Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6c3dpdGNoKEspe2Nhc2UgMTpyZXR1cm4gNDtjYXNlIDQ6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAzO2Nhc2UgMzpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiBLfWRlZmF1bHQ6cmV0dXJuIEt9fXZhciB6OT0xNjtmdW5jdGlvbiB0NSgkLEssSil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gbnVsbDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoSikmJko+MD9KOjEsWD1LPT09MT8kKjE2Oks9PT0yPyQqWjokLFk9TWF0aC5tYXgoLTIwMCxNYXRoLm1pbigyMDAsWCkpO3JldHVybiBNYXRoLmFicyhZKTwwLjAxP251bGw6WX1mdW5jdGlvbiBBOCgkLEssSil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gMDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoSikmJko+MD9KOjE7aWYoSz09PTEpcmV0dXJuICQqejk7aWYoSz09PTIpcmV0dXJuICQqWjtyZXR1cm4gJH1mdW5jdGlvbiBVOSgkLEssSil7aWYoIUt8fEsud2lkdGg8PTB8fEsuaGVpZ2h0PD0wKXJldHVybiBudWxsO2xldCBaPUsub3JpZW50YXRpb249PT12b2lkIDAmJiQ/Lm9yaWVudGF0aW9uP3suLi5LLG9yaWVudGF0aW9uOiQub3JpZW50YXRpb259Oks7aWYoJCYmJC53aWR0aD09PVoud2lkdGgmJiQuaGVpZ2h0PT09Wi5oZWlnaHQmJiQub3JpZW50YXRpb249PT1aLm9yaWVudGF0aW9uKXJldHVybiBudWxsO3JldHVybntjb25maWc6Wixub3RpZnlQYXJlbnQ6Sj09PSJyZXBvcnRlZCJ9fXZhciBRJD17WzFdOiJkZXNjcmlwdGlvbiIsWzJdOiJrZXlmcmFtZSIsWzNdOiJkZWx0YSIsWzRdOiJzZWVkIn07Y2xhc3MgUDJ7YnVmZmVyPW5ldyBVaW50OEFycmF5KDY1NTM2KTtsZW49MDtzdGFydD0wO2FwcGVuZCgkKXtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2lmKHRoaXMuc3RhcnQ+MCl0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbiksdGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wO2lmKHRoaXMubGVuKyQubGVuZ3RoPnRoaXMuYnVmZmVyLmxlbmd0aCl7bGV0IEs9dGhpcy5idWZmZXIubGVuZ3RoO3doaWxlKEs8dGhpcy5sZW4rJC5sZW5ndGgpSyo9MjtsZXQgSj1uZXcgVWludDhBcnJheShLKTtKLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSgwLHRoaXMubGVuKSksdGhpcy5idWZmZXI9Sn19dGhpcy5idWZmZXIuc2V0KCQsdGhpcy5sZW4pLHRoaXMubGVuKz0kLmxlbmd0aH1wdXNoKCQpe2lmKCQubGVuZ3RoPjApdGhpcy5hcHBlbmQoJCk7bGV0IEs9W10sSj10aGlzLmJ1ZmZlcjt3aGlsZSh0aGlzLmxlbi10aGlzLnN0YXJ0Pj00KXtsZXQgWj10aGlzLnN0YXJ0LFg9KEpbWl08PDI0fEpbWisxXTw8MTZ8SltaKzJdPDw4fEpbWiszXSk+Pj4wO2lmKHRoaXMubGVuLVotNDxYKWJyZWFrO2lmKFg8MSl7dGhpcy5zdGFydCs9NDtjb250aW51ZX1sZXQgWT1KW1orNF0scT1RJFtZXTtpZihxKUsucHVzaCh7dHlwZTpxLHBheWxvYWQ6Si5zbGljZShaKzUsWis0K1gpfSk7dGhpcy5zdGFydCs9NCtYfWlmKHRoaXMuc3RhcnQ+MCl7aWYodGhpcy5zdGFydDx0aGlzLmxlbil0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbik7dGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wfXJldHVybiBLfXJlc2V0KCl7dGhpcy5sZW49MCx0aGlzLnN0YXJ0PTB9fWZ1bmN0aW9uIE04KCQpe2lmKCQubGVuZ3RoPDQpcmV0dXJuImF2YzEuNDJFMDFFIjtsZXQgSz0oSik9PkoudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4iYXZjMS4iK0soJFsxXSkrSygkWzJdKStLKCRbM10pfWZ1bmN0aW9uIHMwKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmdHlwZW9mIGdsb2JhbFRoaXMuVmlkZW9EZWNvZGVyPCJ1In12YXIgWiQ9MTAwMCxYJD0xNjY2NztmdW5jdGlvbiBPOCh7dXJsOiQsZW5hYmxlZDpLLGNhbnZhc1JlZjpKLG9uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pe2xldCBWPUkoe29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pO1YuY3VycmVudD17b25GaXJzdEZyYW1lOlosb25GcmFtZTpYLG9uRXJyb3I6WSxvbkRlY29kZXJFcnJvcjpxfSxFKCgpPT57aWYoIUt8fCEkfHwhczAoKSlyZXR1cm47bGV0IE49bmV3IEFib3J0Q29udHJvbGxlcixCPW5ldyBQMix6PSExLEc9ITEsQz0wLFU9bnVsbCxGPW51bGwsTD0oKT0+IXomJiFOLnNpZ25hbC5hYm9ydGVkLGs9KGopPT57aWYoVi5jdXJyZW50Lm9uRGVjb2RlckVycm9yKVYuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgVi5jdXJyZW50Lm9uRXJyb3I/LihqKX0sSD0oaixkLFoxKT0+e2lmKCFMKCkpcmV0dXJuO2xldCBxMT1KLmN1cnJlbnQ7aWYoIXExKXJldHVybjtpZihxMS53aWR0aCE9PWR8fHExLmhlaWdodCE9PVoxKXExLndpZHRoPWQscTEuaGVpZ2h0PVoxO2xldCBvPXExLmdldENvbnRleHQoIjJkIik7aWYoIW8pcmV0dXJuO2lmKG8uZHJhd0ltYWdlKGosMCwwLGQsWjEpLFYuY3VycmVudC5vbkZyYW1lPy4oKSwhRylHPSEwLFYuY3VycmVudC5vbkZpcnN0RnJhbWU/LigpfSxQPSgpPT5uZXcgVmlkZW9EZWNvZGVyKHtvdXRwdXQ6KGopPT57dHJ5e2lmKEwoKSlIKGosai5kaXNwbGF5V2lkdGgsai5kaXNwbGF5SGVpZ2h0KX1maW5hbGx5e2ouY2xvc2UoKX19LGVycm9yOihqKT0+ayhgZGVjb2RlcjogJHtqLm1lc3NhZ2V9YCl9KSx5PWFzeW5jKGopPT57bGV0IGQ9YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAobmV3IEJsb2IoW2pdLHt0eXBlOiJpbWFnZS9qcGVnIn0pKTt0cnl7aWYoTCgpKUgoZCxkLndpZHRoLGQuaGVpZ2h0KX1maW5hbGx5e2QuY2xvc2UoKX19LFc9KGopPT57aWYoIUZ8fEYuc3RhdGU9PT0iY2xvc2VkIilGPVAoKTt0cnl7Ri5jb25maWd1cmUoe2NvZGVjOk04KGopLGRlc2NyaXB0aW9uOmosb3B0aW1pemVGb3I6ImxhdGVuY3kiLGhhcmR3YXJlQWNjZWxlcmF0aW9uOiJwcmVmZXItaGFyZHdhcmUifSl9Y2F0Y2goZCl7ayhgY29uZmlnOiAke2QubWVzc2FnZX1gKX19LEE9KGosZCk9PntpZihGPy5zdGF0ZSE9PSJjb25maWd1cmVkIilyZXR1cm47dHJ5e0YuZGVjb2RlKG5ldyBFbmNvZGVkVmlkZW9DaHVuayh7dHlwZTpqPT09ImtleWZyYW1lIj8ia2V5IjoiZGVsdGEiLHRpbWVzdGFtcDpDLGRhdGE6ZH0pKSxDKz1YJH1jYXRjaHt9fSxUPShqLGQpPT57c3dpdGNoKGope2Nhc2Uic2VlZCI6eShkKS5jYXRjaCgoKT0+e30pO3JldHVybjtjYXNlImRlc2NyaXB0aW9uIjpXKGQpO3JldHVybjtjYXNlImtleWZyYW1lIjpjYXNlImRlbHRhIjpBKGosZCk7cmV0dXJufX0saT0oKT0+e2lmKCFMKCl8fFUpcmV0dXJuO1U9c2V0VGltZW91dCgoKT0+e1U9bnVsbCx2KCl9LFokKX0sdj1hc3luYygpPT57Qi5yZXNldCgpO3RyeXtsZXQgZD0oYXdhaXQgZmV0Y2goYCR7JH0vc3RyZWFtLmF2Y2NgLHtzaWduYWw6Ti5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIWQpcmV0dXJuO2Zvcig7Oyl7bGV0e2RvbmU6WjEsdmFsdWU6cTF9PWF3YWl0IGQucmVhZCgpO2lmKFoxKWJyZWFrO2lmKCFxMSljb250aW51ZTtmb3IobGV0IG8gb2YgQi5wdXNoKHExKSlUKG8udHlwZSxvLnBheWxvYWQpfX1jYXRjaHt9ZmluYWxseXtpZihMKCkpaSgpfX07cmV0dXJuIHYoKSwoKT0+e2lmKHo9ITAsVSljbGVhclRpbWVvdXQoVSk7aWYoTi5hYm9ydCgpLEIucmVzZXQoKSxGJiZGLnN0YXRlIT09ImNsb3NlZCIpdHJ5e0YuY2xvc2UoKX1jYXRjaHt9Rj1udWxsfX0sWyQsSyxKXSl9dmFyIFkkPTA7ZnVuY3Rpb24gUSgkLEssSixaLFgsWSl7S3x8KEs9e30pO3ZhciBxLFYsTj1LO2lmKCJyZWYiaW4gTilmb3IoViBpbiBOPXt9LEspVj09InJlZiI/cT1LW1ZdOk5bVl09S1tWXTt2YXIgQj17dHlwZTokLHByb3BzOk4sa2V5OkoscmVmOnEsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tWSQsX19pOi0xLF9fdTowLF9fc291cmNlOlgsX19zZWxmOll9O2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYocT0kLmRlZmF1bHRQcm9wcykpZm9yKFYgaW4gcSlOW1ZdPT09dm9pZCAwJiYoTltWXT1xW1ZdKTtyZXR1cm4gYS52bm9kZSYmYS52bm9kZShCKSxCfXZhciBMOT1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLHEkPTEuMDA0LFYkPTMsRyQ9NCxCJD01LE4kPTEwLHokPTExO2Z1bmN0aW9uIFcyKHt1cmw6JCx3c1VybDpLLHN0eWxlOkosaW1hZ2VTdHlsZTpaLGNsYXNzTmFtZTpYLG9uSG9tZVByZXNzOlksb25TdHJlYW1Ub3VjaDpxLG9uU3RyZWFtTXVsdGlUb3VjaDpWLG9uU3RyZWFtQnV0dG9uOk4sb25TdHJlYW1EaWdpdGFsQ3Jvd246QixvblN0cmVhbVNjcm9sbDp6LGVuYWJsZURpZ2l0YWxDcm93bjpHLHN1YnNjcmliZUZyYW1lOkMsc3RyZWFtRnJhbWU6VSxzdHJlYW1Db25maWc6RixvblNjcmVlbkNvbmZpZ0NoYW5nZTpMLGhpZGVDb250cm9sczprLG9uU3RyZWFtaW5nQ2hhbmdlOkgsY29ubmVjdGlvblF1YWxpdHk6UCxjb2RlYzp5PSJhdmNjIixvbkF2Y2NFcnJvcjpXfSl7bGV0IEE9ISFxLFQ9eT09PSJhdmNjIiYmczAoKSxpPUkobnVsbCksdj1JKG51bGwpLGo9SShudWxsKSxkPUkobnVsbCksWjE9SShudWxsKSxxMT1JKG51bGwpLFtvLEkxXT1NKCExKSxbZyxmXT1NKG51bGwpLFtzLGsxXT1NKG51bGwpLFUxPUkobnVsbCksVjE9SShMKTtWMS5jdXJyZW50PUw7bGV0IEYxPUkobnVsbCksW0gxLFNdPU0obnVsbCk7RSgoKT0+e2xldCB3PUYxLmN1cnJlbnQ7aWYoIXd8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBPPW5ldyBSZXNpemVPYnNlcnZlcigoUik9PntsZXQgdT1SWzBdPy5jb250ZW50UmVjdDtpZih1KVMoe3dpZHRoOnUud2lkdGgsaGVpZ2h0OnUuaGVpZ2h0fSl9KTtyZXR1cm4gTy5vYnNlcnZlKHcpLCgpPT5PLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtjLHJdPU0oMCksZT1JKDApLFtEMSxiXT1NKCExKSxtPUkobnVsbCk7RSgoKT0+e2lmKFA9PT0icG9vciIpe2lmKGIoITApLG0uY3VycmVudCljbGVhclRpbWVvdXQobS5jdXJyZW50KTttLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2IoITEpLG0uY3VycmVudD1udWxsfSwzMDAwKX1lbHNlIGlmKGIoITEpLG0uY3VycmVudCljbGVhclRpbWVvdXQobS5jdXJyZW50KSxtLmN1cnJlbnQ9bnVsbDtyZXR1cm4oKT0+e2lmKG0uY3VycmVudCljbGVhclRpbWVvdXQobS5jdXJyZW50KX19LFtQXSk7bGV0IFkxPWAkeyR9L3N0cmVhbS5tanBlZ2A7RSgoKT0+e1UxLmN1cnJlbnQ9bnVsbCxrMShudWxsKX0sWyRdKTtsZXQgQTE9RCgodyxPPSJyZXBvcnRlZCIpPT57bGV0IFI9VTkoVTEuY3VycmVudCx3LE8pO2lmKCFSKXJldHVybjtpZihVMS5jdXJyZW50PVIuY29uZmlnLGsxKFIuY29uZmlnKSxSLm5vdGlmeVBhcmVudClWMS5jdXJyZW50Py4oUi5jb25maWcpfSxbXSkscD1JKEgpO3AuY3VycmVudD1ILEUoKCk9PntwLmN1cnJlbnQ/LihvKX0sW29dKSxFKCgpPT57aWYoQSYmRilBMShGLCJleHRlcm5hbCIpfSxbQSxGLEExXSk7bGV0IG49SSghMSk7bi5jdXJyZW50PW87bGV0IEcxPUkobnVsbCksUDE9SShudWxsKTtFKCgpPT57aWYoIUF8fCFDfHxUKXJldHVybjtsZXQgTz1zZXRUaW1lb3V0KCgpPT57aWYoIW4uY3VycmVudClmKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCksUj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gUTEoKXtsZXQgTDE9RzEuY3VycmVudDtpZihMMSl7RzEuY3VycmVudD1udWxsO2xldCBXMT1qLmN1cnJlbnQ7aWYoVzEpe2lmKFAxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChQMS5jdXJyZW50KTtQMS5jdXJyZW50PUwxLFcxLnNyYz1MMSxlLmN1cnJlbnQrK31lbHNlIFVSTC5yZXZva2VPYmplY3RVUkwoTDEpfVI9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFExKX0pLHU9QygoUTEpPT57aWYobjEuY3VycmVudD1EYXRlLm5vdygpLEcxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChHMS5jdXJyZW50KTtpZihHMS5jdXJyZW50PVExLCFuLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE8pLEkxKCEwKSxmKG51bGwpfSk7cmV0dXJuKCk9PntpZihjbGVhclRpbWVvdXQoTyksY2FuY2VsQW5pbWF0aW9uRnJhbWUoUiksdT8uKCksRzEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKEcxLmN1cnJlbnQpLEcxLmN1cnJlbnQ9bnVsbDtpZihQMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoUDEuY3VycmVudCksUDEuY3VycmVudD1udWxsfX0sW0EsQyxUXSk7bGV0IFgwPUQoKCk9PntuMS5jdXJyZW50PURhdGUubm93KCksSTEoITApLGYobnVsbCl9LFtdKSxkMT1EKCgpPT57aWYoZS5jdXJyZW50KyssbjEuY3VycmVudD1EYXRlLm5vdygpLCFuLmN1cnJlbnQpSTEoITApLGYobnVsbCl9LFtdKTtPOCh7dXJsOiQsZW5hYmxlZDpULGNhbnZhc1JlZjp2LG9uRmlyc3RGcmFtZTpYMCxvbkZyYW1lOmQxLG9uRXJyb3I6ZixvbkRlY29kZXJFcnJvcjpXfSk7bGV0IF8xPUQoKHcpPT57bGV0IE89bDAoVTEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixSPUI1KE8sdy54LHcueSksdT13LmVkZ2U9PT12b2lkIDA/dm9pZCAwOnM1KE8sdy5lZGdlKSxRMT11PT09dm9pZCAwP3t0eXBlOncudHlwZSwuLi5SfTp7dHlwZTp3LnR5cGUsLi4uUixlZGdlOnV9O2lmKEEpe3E/LihRMSk7cmV0dXJufWxldCBMMT1xMS5jdXJyZW50O2lmKCFMMXx8TDEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgVzE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFExKSkseTE9bmV3IFVpbnQ4QXJyYXkoMStXMS5sZW5ndGgpO3kxWzBdPVYkLHkxLnNldChXMSwxKSxMMS5zZW5kKHkxKX0sW0EscV0pLHAxPUQoKHcpPT57aWYoQSl7Tj8uKHcpO3JldHVybn1sZXQgTz1xMS5jdXJyZW50O2lmKCFPfHxPLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IFI9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246d30pKSx1PW5ldyBVaW50OEFycmF5KDErUi5sZW5ndGgpO3VbMF09RyQsdS5zZXQoUiwxKSxPLnNlbmQodSl9LFtBLE5dKSxCMD1EKCh3KT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUodyl8fHc9PT0wKXJldHVybjtpZihBKXtCPy4odyk7cmV0dXJufWxldCBPPXExLmN1cnJlbnQ7aWYoIU98fE8ucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgUj1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2RlbHRhOnd9KSksdT1uZXcgVWludDhBcnJheSgxK1IubGVuZ3RoKTt1WzBdPU4kLHUuc2V0KFIsMSksTy5zZW5kKHUpfSxbQSxCXSksSzA9RCgodyxPLFIsdSk9PntpZighTnVtYmVyLmlzRmluaXRlKHcpfHwhTnVtYmVyLmlzRmluaXRlKE8pfHx3PT09MCYmTz09PTApcmV0dXJuO2xldCBRMT1sMChVMS5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLEwxPU45KFExLHcsTyksVzE9QjUoUTEsUix1KSx5MT17ZHg6TDEuZHgsZHk6TDEuZHkseDpXMS54LHk6VzEueX07aWYoQSl7ej8uKHkxKTtyZXR1cm59bGV0ICQwPXExLmN1cnJlbnQ7aWYoISQwfHwkMC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBEMD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoeTEpKSxUMD1uZXcgVWludDhBcnJheSgxK0QwLmxlbmd0aCk7VDBbMF09eiQsVDAuc2V0KEQwLDEpLCQwLnNlbmQoVDApfSxbQSx6XSksJDE9RCgodyk9PntsZXQgTz1sMChVMS5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLFI9QjUoTyx3LngxLHcueTEpLHU9QjUoTyx3LngyLHcueTIpLFExPXt0eXBlOncudHlwZSx4MTpSLngseTE6Ui55LHgyOnUueCx5Mjp1Lnl9O2lmKEEpe1Y/LihRMSk7cmV0dXJufWxldCBMMT1xMS5jdXJyZW50O2lmKCFMMXx8TDEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgVzE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFExKSkseTE9bmV3IFVpbnQ4QXJyYXkoMStXMS5sZW5ndGgpO3kxWzBdPUIkLHkxLnNldChXMSwxKSxMMS5zZW5kKHkxKX0sW0EsVl0pO0UoKCk9PntpZihBKXJldHVybjtsZXQgdz1LPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixPPW5ldyBXZWJTb2NrZXQodyk7Ty5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIscTEuY3VycmVudD1PLE8ub25tZXNzYWdlPShXMSk9PntpZighKFcxLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuO2xldCB5MT1uZXcgVWludDhBcnJheShXMS5kYXRhKTtpZih5MS5sZW5ndGg8MXx8eTFbMF0hPT0xMzApcmV0dXJuO3RyeXtBMShKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh5MS5zdWJhcnJheSgxKSkpKX1jYXRjaHt9fSxPLm9ub3Blbj0oKT0+e2lmKCFUKUkxKCEwKTtmKG51bGwpfSxPLm9uY2xvc2U9KCk9PntJMSghMSl9LE8ub25lcnJvcj0oKT0+e2YoIldlYlNvY2tldCBjb25uZWN0aW9uIGZhaWxlZCIpLEkxKCExKX07bGV0IFI9bmV3IEFib3J0Q29udHJvbGxlcix1PXNldEludGVydmFsKCgpPT57cihlLmN1cnJlbnQpLGUuY3VycmVudD0wfSwxMDAwKSxRMT0hMSxMMT1UP251bGw6c2V0VGltZW91dCgoKT0+e2lmKCFRMSlmKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk7aWYoIVQpKGFzeW5jKCk9Pnt0cnl7bGV0IHkxPShhd2FpdCBmZXRjaChZMSx7c2lnbmFsOlIuc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCF5MSlyZXR1cm47bGV0ICQwPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSgiLS1mcmFtZSIpO3doaWxlKCEwKXtsZXR7ZG9uZTpEMCx2YWx1ZTpUMH09YXdhaXQgeTEucmVhZCgpO2lmKEQwKWJyZWFrO2lmKFQwKWZvcihsZXQgWjU9MDtaNTw9VDAubGVuZ3RoLSQwLmxlbmd0aDtaNSsrKXtsZXQgUTA9ITA7Zm9yKGxldCBqMD0wO2owPCQwLmxlbmd0aDtqMCsrKWlmKFQwW1o1K2owXSE9PSQwW2owXSl7UTA9ITE7YnJlYWt9aWYoUTApe2lmKGUuY3VycmVudCsrLCFRMSl7aWYoUTE9ITAsTDEpY2xlYXJUaW1lb3V0KEwxKX19fX19Y2F0Y2h7fX0pKCk7cmV0dXJuKCk9PntpZihSLmFib3J0KCksY2xlYXJJbnRlcnZhbCh1KSxMMSljbGVhclRpbWVvdXQoTDEpO08uY2xvc2UoKSxxMS5jdXJyZW50PW51bGx9fSxbJCxZMSxBLEExLEssVF0pO2xldCBuMT1JKDApO0UoKCk9PntpZighQSlyZXR1cm47bGV0IHc9MjAwMCxPPSgpPT57bGV0IFExPW4xLmN1cnJlbnQ7aWYoIVExfHwhbi5jdXJyZW50KXJldHVybjtpZihEYXRlLm5vdygpLVExPncpSTEoITEpfSxSPXNldEludGVydmFsKCgpPT57cihlLmN1cnJlbnQpLGUuY3VycmVudD0wLE8oKX0sMTAwMCksdT0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4pTygpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdSksKCk9PntjbGVhckludGVydmFsKFIpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHUpfX0sW0FdKTtsZXQgTzA9RCgoKT0+e2lmKFQpcmV0dXJuIHYuY3VycmVudDtyZXR1cm4gQT9qLmN1cnJlbnQ6aS5jdXJyZW50fSxbQSxUXSksdTE9RCgoKT0+e3JldHVybiBkLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9PMCgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW08wXSksdDE9RCgodyxPKT0+e2xldCBSPXUxKCk7aWYoIVIpcmV0dXJuO2xldCB1PShPLmNsaWVudFgtUi5sZWZ0KS9SLndpZHRoLFExPShPLmNsaWVudFktUi50b3ApL1IuaGVpZ2h0O18xKHt0eXBlOncseDp1LHk6UTF9KX0sW3UxLF8xXSksVTA9RCgodyxPKT0+e2xldCB1PXUxKCk/LmhlaWdodHx8MSxRMT10NSh3LE8sdSk7aWYoUTE9PT1udWxsKXJldHVybiExO3JldHVybiBCMChRMSksITB9LFt1MSxCMF0pLFQxPUkoITEpLGcxPUkoITEpLFkwPUkoITEpLFAwPUkoe2R4OjAsZHk6MH0pLGUxPUkoITEpLFtXMCx2MF09TSghMSksXzA9SSh7eDowLjUseTowLjV9KSxbSjAsbDFdPU0obnVsbCk7RSgoKT0+e2xldCB3PShSKT0+e2lmKFIua2V5PT09IkFsdCIpdjAoITApfSxPPShSKT0+e2lmKFIua2V5PT09IkFsdCIpe2lmKHYwKCExKSwhZzEuY3VycmVudClsMShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixPKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix3KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLE8pfX0sW10pLEUoKCk9PntpZihXMCYmIWcxLmN1cnJlbnQpe2xldCB3PV8wLmN1cnJlbnQ7bDEoe3gxOncueCx5MTp3LnkseDI6MS13LngseTI6MS13Lnl9KX1lbHNlIGlmKCFXMCYmIWcxLmN1cnJlbnQpbDEobnVsbCl9LFtXMF0pO2xldCB2MT1JKG51bGwpLGgxPUkoITEpLGkxPUkoMCksRjA9RCgodyxPKT0+e2gxLmN1cnJlbnQ9ITA7bGV0IFI9djEuY3VycmVudDtpZihSKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGkxLmN1cnJlbnQpLGkxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Ui5zdHlsZS5sZWZ0PWAke3cqMTAwfSVgLFIuc3R5bGUudG9wPWAke08qMTAwfSVgLFIuc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxBMD1EKCh3LE8pPT57aWYoIWgxLmN1cnJlbnQpcmV0dXJuO2xldCBSPXYxLmN1cnJlbnQ7aWYoUiljYW5jZWxBbmltYXRpb25GcmFtZShpMS5jdXJyZW50KSxpMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e1Iuc3R5bGUubGVmdD1gJHt3KjEwMH0lYCxSLnN0eWxlLnRvcD1gJHtPKjEwMH0lYH0pfSxbXSksTjA9RCgoKT0+e2gxLmN1cnJlbnQ9ITE7bGV0IHc9djEuY3VycmVudDtpZih3KWNhbmNlbEFuaW1hdGlvbkZyYW1lKGkxLmN1cnJlbnQpLHcuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxYMT1EKCh3KT0+e2lmKGgxLmN1cnJlbnR8fGcxLmN1cnJlbnQpcmV0dXJuITE7bGV0IE89dTEoKTtpZighTylyZXR1cm4hMTtsZXQgUj1BOCh3LmRlbHRhWCx3LmRlbHRhTW9kZSxPLndpZHRoKSx1PUE4KHcuZGVsdGFZLHcuZGVsdGFNb2RlLE8uaGVpZ2h0KTtpZihSPT09MCYmdT09PTApcmV0dXJuITE7bGV0IFExPU1hdGgubWluKE1hdGgubWF4KCh3LmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLDApLDEpLEwxPU1hdGgubWluKE1hdGgubWF4KCh3LmNsaWVudFktTy50b3ApL08uaGVpZ2h0LDApLDEpO3JldHVybiBLMChSL08ud2lkdGgsdS9PLmhlaWdodCxRMSxMMSksITB9LFt1MSxLMF0pO0UoKCk9PntsZXQgdz1aMS5jdXJyZW50O2lmKCF3KXJldHVybjtsZXQgTz0oUik9PntpZighKEc/VTAoUi5kZWx0YVksUi5kZWx0YU1vZGUpOlgxKFIpKSlyZXR1cm47Ui5wcmV2ZW50RGVmYXVsdCgpLFIuc3RvcFByb3BhZ2F0aW9uKCl9O3JldHVybiB3LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixPLHtwYXNzaXZlOiExfSksKCk9PncucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLE8pfSxbRyxVMCxYMV0pO2xldCBfPUkoMCksbD1JKG51bGwpLEsxPUQoKCk9PntsZXQgdz1EYXRlLm5vdygpLE89dy1fLmN1cnJlbnQ7aWYoXy5jdXJyZW50PXcsTzwzMDApe2lmKGwuY3VycmVudCljbGVhclRpbWVvdXQobC5jdXJyZW50KSxsLmN1cnJlbnQ9bnVsbDtpZihZKVkoKTtlbHNlIHAxKCJhcHBfc3dpdGNoZXIiKX1lbHNlIGwuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57aWYoWSlZKCk7ZWxzZSBwMSgiaG9tZSIpO2wuY3VycmVudD1udWxsfSwzMDApfSxbcDEsWV0pLE8xPWwwKHMpLEIxPU8xLmRpc3BsYXlDb25maWcsTjE9KCgpPT57aWYoIUIxfHwhSDEpcmV0dXJuIG51bGw7aWYoSDEud2lkdGg9PT0wfHxIMS5oZWlnaHQ9PT0wKXJldHVybiBudWxsO2xldCB3PU1hdGgubWluKEgxLndpZHRoL0IxLndpZHRoLEgxLmhlaWdodC9CMS5oZWlnaHQpO3JldHVybnt3aWR0aDpCMS53aWR0aCp3LGhlaWdodDpCMS5oZWlnaHQqd319KSgpLGIxPU8xLnJvdGF0aW9uRGVncmVlcyxjMT1PMS5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhiMSk9PT05MCxyMT1aLEwwPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNTAlIixsZWZ0OiI1MCUiLHdpZHRoOmMxJiZOMT9gJHtOMS5oZWlnaHR9cHhgOiIxMDAlIixoZWlnaHQ6YzEmJk4xP2Ake04xLndpZHRofXB4YDoiMTAwJSIsdHJhbnNmb3JtOmB0cmFuc2xhdGUoLTUwJSwgLTUwJSkke2IxPT09MD8iIjpgIHJvdGF0ZSgke2IxfWRlZylgfWAsdHJhbnNmb3JtT3JpZ2luOiJjZW50ZXIgY2VudGVyIixjdXJzb3I6TDksZGlzcGxheToiYmxvY2siLHVzZXJTZWxlY3Q6Im5vbmUiLFdlYmtpdFVzZXJTZWxlY3Q6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIiwuLi5aLC4uLmIxPT09MD97fTp7Ym9yZGVyUmFkaXVzOjAsY29ybmVyU2hhcGU6dm9pZCAwfX0sQzA9ey4uLkwwLHRyYW5zZm9ybTpgJHtMMC50cmFuc2Zvcm0/PyIifSBzY2FsZSgke3EkfSlgfTtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLms/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLkp9LGNsYXNzTmFtZTpYLGNoaWxkcmVuOltRKCJkaXYiLHtyZWY6RjEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46USgiZGl2Iix7cmVmOmQsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6TjE/YCR7TjEud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6TjE/YCR7TjEuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOnIxPy5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6cjE/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbVD9RKCJjYW52YXMiLHtyZWY6dixzdHlsZTpDMH0pOlEoImltZyIse3JlZjppLHNyYzpBP3ZvaWQgMDpZMSxkcmFnZ2FibGU6ITEsb25Mb2FkOih3KT0+e2xldCBPPXcuY3VycmVudFRhcmdldDtpZihPLm5hdHVyYWxXaWR0aD4wJiZPLm5hdHVyYWxIZWlnaHQ+MClBMSh7d2lkdGg6Ty5uYXR1cmFsV2lkdGgsaGVpZ2h0Ok8ubmF0dXJhbEhlaWdodH0pfSxzdHlsZTpBP3tkaXNwbGF5OiJub25lIn06TDB9KSxBJiYhVCYmUSgiaW1nIix7cmVmOmosZHJhZ2dhYmxlOiExLG9uTG9hZDoodyk9PntsZXQgTz13LmN1cnJlbnRUYXJnZXQ7aWYoTy5uYXR1cmFsV2lkdGg+MCYmTy5uYXR1cmFsSGVpZ2h0PjApQTEoe3dpZHRoOk8ubmF0dXJhbFdpZHRoLGhlaWdodDpPLm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6TDB9KSxRKCJkaXYiLHtyZWY6WjEsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6TDksdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjoodyk9Pnt3LnByZXZlbnREZWZhdWx0KCk7bGV0IE89dTEoKTtpZighTylyZXR1cm47bGV0IFI9KHcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsdT0ody5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZih3LmFsdEtleSl7ZzEuY3VycmVudD0hMCxZMC5jdXJyZW50PXcuc2hpZnRLZXk7bGV0IEwxPXt4MTpSLHkxOnUseDI6MS1SLHkyOjEtdX07UDAuY3VycmVudD17ZHg6MS1SLVIsZHk6MS11LXV9LGwxKEwxKSwkMSh7dHlwZToiYmVnaW4iLC4uLkwxfSk7cmV0dXJufUYwKFIsdSk7bGV0IFExPWE1KHUpO2lmKFExIT09dm9pZCAwKVQxLmN1cnJlbnQ9ITAsXzEoe3R5cGU6ImJlZ2luIix4OlIseTp1LGVkZ2U6UTF9KTtlbHNlIFQxLmN1cnJlbnQ9ITEsdDEoImJlZ2luIix3KX0sb25Nb3VzZU1vdmU6KHcpPT57bGV0IE89dTEoKTtpZighTylyZXR1cm47bGV0IFI9KHcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsdT0ody5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihfMC5jdXJyZW50PXt4OlIseTp1fSx3LmJ1dHRvbnM9PT0wKXtpZih3LmFsdEtleSlsMSh7eDE6Uix5MTp1LHgyOjEtUix5MjoxLXV9KTtyZXR1cm59aWYoZzEuY3VycmVudCl7bGV0IFExO2lmKFkwLmN1cnJlbnQpe2xldCBMMT1QMC5jdXJyZW50O1ExPXt4MTpSLHkxOnUseDI6UitMMS5keCx5Mjp1K0wxLmR5fX1lbHNlIFExPXt4MTpSLHkxOnUseDI6MS1SLHkyOjEtdX07bDEoUTEpLCQxKHt0eXBlOiJtb3ZlIiwuLi5RMX0pO3JldHVybn1pZihBMChSLHUpLFQxLmN1cnJlbnQpXzEoe3R5cGU6Im1vdmUiLHg6Uix5OnUsZWRnZTpwMH0pO2Vsc2UgdDEoIm1vdmUiLHcpfSxvbk1vdXNlVXA6KHcpPT57aWYoZzEuY3VycmVudCl7bGV0IE89dTEoKTtpZihPKXtsZXQgUj0ody5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCx1PSh3LmNsaWVudFktTy50b3ApL08uaGVpZ2h0O2lmKFkwLmN1cnJlbnQpe2xldCBRMT1QMC5jdXJyZW50OyQxKHt0eXBlOiJlbmQiLHgxOlIseTE6dSx4MjpSK1ExLmR4LHkyOnUrUTEuZHl9KX1lbHNlICQxKHt0eXBlOiJlbmQiLHgxOlIseTE6dSx4MjoxLVIseTI6MS11fSl9aWYoZzEuY3VycmVudD0hMSwhdy5hbHRLZXkpbDEobnVsbCk7cmV0dXJufWlmKE4wKCksVDEuY3VycmVudCl7bGV0IE89dTEoKTtpZihPKXtsZXQgUj0ody5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCx1PSh3LmNsaWVudFktTy50b3ApL08uaGVpZ2h0O18xKHt0eXBlOiJlbmQiLHg6Uix5OnUsZWRnZTpwMH0pfVQxLmN1cnJlbnQ9ITE7cmV0dXJufXQxKCJlbmQiLHcpfSxvbk1vdXNlTGVhdmU6KHcpPT57aWYoZzEuY3VycmVudCl7aWYoSjApJDEoe3R5cGU6ImVuZCIsLi4uSjB9KTtnMS5jdXJyZW50PSExLGwxKG51bGwpO3JldHVybn1pZihOMCgpLFQxLmN1cnJlbnQpe2xldCBPPXUxKCk7aWYoTyl7bGV0IFI9KHcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsdT0ody5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtfMSh7dHlwZToiZW5kIix4OlIseTp1LGVkZ2U6cDB9KX1UMS5jdXJyZW50PSExO3JldHVybn1pZih3LmJ1dHRvbnM+MCl0MSgiZW5kIix3KTtsMShudWxsKX0sb25Ub3VjaFN0YXJ0Oih3KT0+e3cucHJldmVudERlZmF1bHQoKTtsZXQgTz11MSgpO2lmKCFPKXJldHVybjtpZih3LnRvdWNoZXMubGVuZ3RoPj0yKXtOMCgpO2xldCBXMT13LnRvdWNoZXNbMF0seTE9dy50b3VjaGVzWzFdLCQwPXt4MTooVzEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTE6KFcxLmNsaWVudFktTy50b3ApL08uaGVpZ2h0LHgyOih5MS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCx5MjooeTEuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHR9O2lmKCFlMS5jdXJyZW50JiYhVDEuY3VycmVudClfMSh7dHlwZToiZW5kIix4OiQwLngxLHk6JDAueTF9KTtlMS5jdXJyZW50PSEwLGcxLmN1cnJlbnQ9ITAsVDEuY3VycmVudD0hMSxsMSgkMCksJDEoe3R5cGU6ImJlZ2luIiwuLi4kMH0pO3JldHVybn1sZXQgUj13LnRvdWNoZXNbMF07aWYoIVIpcmV0dXJuO2xldCB1PShSLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLFExPShSLmNsaWVudFktTy50b3ApL08uaGVpZ2h0O0YwKHUsUTEpO2xldCBMMT1hNShRMSk7aWYoTDEhPT12b2lkIDApVDEuY3VycmVudD0hMCxfMSh7dHlwZToiYmVnaW4iLHg6dSx5OlExLGVkZ2U6TDF9KTtlbHNlIFQxLmN1cnJlbnQ9ITEsXzEoe3R5cGU6ImJlZ2luIix4OnUseTpRMX0pfSxvblRvdWNoTW92ZToodyk9Pnt3LnByZXZlbnREZWZhdWx0KCk7bGV0IE89dTEoKTtpZighTylyZXR1cm47aWYoZTEuY3VycmVudCYmdy50b3VjaGVzLmxlbmd0aD49Mil7bGV0IEwxPXcudG91Y2hlc1swXSxXMT13LnRvdWNoZXNbMV0seTE9e3gxOihMMS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCx5MTooTDEuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQseDI6KFcxLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkyOihXMS5jbGllbnRZLU8udG9wKS9PLmhlaWdodH07bDEoeTEpLCQxKHt0eXBlOiJtb3ZlIiwuLi55MX0pO3JldHVybn1sZXQgUj13LnRvdWNoZXNbMF07aWYoIVIpcmV0dXJuO2xldCB1PShSLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLFExPShSLmNsaWVudFktTy50b3ApL08uaGVpZ2h0O2lmKEEwKHUsUTEpLFQxLmN1cnJlbnQpXzEoe3R5cGU6Im1vdmUiLHg6dSx5OlExLGVkZ2U6cDB9KTtlbHNlIF8xKHt0eXBlOiJtb3ZlIix4OnUseTpRMX0pfSxvblRvdWNoRW5kOih3KT0+e3cucHJldmVudERlZmF1bHQoKTtsZXQgTz11MSgpO2lmKCFPKXJldHVybjtpZihlMS5jdXJyZW50KXtpZih3LnRvdWNoZXMubGVuZ3RoPDIpe2xldCBMMT13LmNoYW5nZWRUb3VjaGVzWzBdLFcxPUowO2lmKEwxJiZXMSkkMSh7dHlwZToiZW5kIix4MTooTDEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTE6KEwxLmNsaWVudFktTy50b3ApL08uaGVpZ2h0LHgyOlcxLngyLHkyOlcxLnkyfSk7ZWxzZSBpZihXMSkkMSh7dHlwZToiZW5kIiwuLi5XMX0pO2UxLmN1cnJlbnQ9ITEsZzEuY3VycmVudD0hMSxsMShudWxsKX1yZXR1cm59bGV0IFI9dy5jaGFuZ2VkVG91Y2hlc1swXTtpZighUilyZXR1cm47bGV0IHU9KFIuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsUTE9KFIuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQ7aWYoTjAoKSxUMS5jdXJyZW50KV8xKHt0eXBlOiJlbmQiLHg6dSx5OlExLGVkZ2U6cDB9KSxUMS5jdXJyZW50PSExO2Vsc2UgXzEoe3R5cGU6ImVuZCIseDp1LHk6UTF9KX19KSxRKCJkaXYiLHtyZWY6djEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxKMCYmUShKMSx7Y2hpbGRyZW46W1EoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOms5KEowLngxLEowLnkxKX0pLFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOms5KEowLngyLEowLnkyKX0pXX0pLCFvJiYhZyYmUSgiZGl2Iix7c3R5bGU6ey4uLkM5LC4uLlp8fHt9fSxjaGlsZHJlbjpRKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxnJiZRKCJkaXYiLHtzdHlsZTpDOSxjaGlsZHJlbjpRKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46Z30pfSksRDEmJlEoImRpdiIse3N0eWxlOlUkLGNoaWxkcmVuOlEoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFrJiZRKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltRKCJidXR0b24iLHtvbkNsaWNrOksxLHN0eWxlOntiYWNrZ3JvdW5kOiJub25lIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMikiLGNvbG9yOiIjYWFhIixmb250U2l6ZToxMSxmb250RmFtaWx5OiJtb25vc3BhY2UiLHBhZGRpbmc6IjJweCAxMHB4IixjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czo0fSxjaGlsZHJlbjoiSG9tZSJ9KSxRKCJzcGFuIix7c3R5bGU6e2NvbG9yOmM+MD8iIzRmNCI6IiM4ODgiLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6Nn0sY2hpbGRyZW46W1AmJlEoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJxdWFsaXR5LWRvdCIsc3R5bGU6e3dpZHRoOjgsaGVpZ2h0OjgsYm9yZGVyUmFkaXVzOiI1MCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpQPT09Imdvb2QiPyIjNGFkZTgwIjpQPT09ImRlZ3JhZGVkIj8iI2ZhY2MxNSI6IiNlZjQ0NDQifX0pLGMsIiBmcHMiXX0pXX0pXX0pfXZhciBVJD17cG9zaXRpb246ImFic29sdXRlIix0b3A6OCxsZWZ0OiI1MCUiLHRyYW5zZm9ybToidHJhbnNsYXRlWCgtNTAlKSIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjcpIixib3JkZXJSYWRpdXM6NixwYWRkaW5nOiI0cHggMTJweCIscG9pbnRlckV2ZW50czoibm9uZSJ9LEM5PXtwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuOCkifSxIOT0yMDtmdW5jdGlvbiBrOSgkLEspe3JldHVybntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6YCR7JCoxMDB9JWAsdG9wOmAke0sqMTAwfSVgLHdpZHRoOkg5LGhlaWdodDpIOSxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSIsYm9yZGVyOiIxLjI1cHggc29saWQgcmdiYSgwLDAsMCwwLjU1KSIsYm94U2hhZG93OiIwIDFweCAzcHggcmdiYSgwLDAsMCwwLjQ1KSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX1mdW5jdGlvbiBiMCgkKXtpZighJClyZXR1cm4iaXBob25lIjtsZXQgSz0kLnRvTG93ZXJDYXNlKCk7aWYoSy5pbmNsdWRlcygiaXBhZCIpKXJldHVybiJpcGFkIjtpZihLLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiJ3YXRjaCI7aWYoSy5pbmNsdWRlcygidmlzaW9uIikpcmV0dXJuInZpc2lvbiI7cmV0dXJuImlwaG9uZSJ9dmFyIHgxPXtpcGhvbmU6e3dpZHRoOjQyNyxoZWlnaHQ6ODgxLGJlemVsWDoxOCxiZXplbFk6MTgsaW5uZXJSYWRpdXM6NTV9LGlwYWQ6e3dpZHRoOjQzMCxoZWlnaHQ6NjA1LGJlemVsWDoxNixiZXplbFk6MTYsaW5uZXJSYWRpdXM6MTJ9LHdhdGNoOnt3aWR0aDoyNzQsaGVpZ2h0OjMyMixiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjc5fSx2aXNpb246e3dpZHRoOjY0MCxoZWlnaHQ6NDAwLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6MzJ9fSxIRjA9eDEuaXBob25lLndpZHRoLGtGMD14MS5pcGhvbmUuaGVpZ2h0LEZGMD14MS5pcGhvbmUuYmV6ZWxYLEFGMD14MS5pcGhvbmUuYmV6ZWxZLE1GMD14MS5pcGhvbmUuaW5uZXJSYWRpdXMsRjk9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSBEdW8iOnt3aWR0aDoxMzk4LGhlaWdodDoyMDM0fSwiaVBob25lIDE2IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE2IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTYgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTYiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE2ZSI6e3dpZHRoOjExNzAsaGVpZ2h0OjI1MzJ9LCJpUGhvbmUgMTUgUHJvIE1heCI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUgUHJvIjp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNSBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGFkIFBybyAxMy1pbmNoIChNNSkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTUpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgUHJvIDEzLWluY2ggKE00KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNCkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBBaXIgMTMtaW5jaCAoTTMpIjp7d2lkdGg6MjA0OCxoZWlnaHQ6MjczMn0sImlQYWQgQWlyIDExLWluY2ggKE0zKSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIChBMTYpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgbWluaSAoQTE3IFBybykiOnt3aWR0aDoxNDg4LGhlaWdodDoyMjY2fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMyAoNDltbSkiOnt3aWR0aDo0MjIsaGVpZ2h0OjUxNH0sIkFwcGxlIFdhdGNoIFVsdHJhIDIgKDQ5bW0pIjp7d2lkdGg6NDEwLGhlaWdodDo1MDJ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTRSAzICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFdhdGNoIFNFICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBWaXNpb24gUHJvIjp7d2lkdGg6MTkyMCxoZWlnaHQ6MTA4MH19O2Z1bmN0aW9uIF8yKCQsSyl7bGV0IEo9JCYmJC53aWR0aD4wJiYkLmhlaWdodD4wPyQ6SyxaPUc1KEopO2lmKFopcmV0dXJuYCR7Wi53aWR0aH0gLyAke1ouaGVpZ2h0fWA7cmV0dXJuYCR7eDEuaXBob25lLndpZHRoLTIqeDEuaXBob25lLmJlemVsWH0gLyAke3gxLmlwaG9uZS5oZWlnaHQtMip4MS5pcGhvbmUuYmV6ZWxZfWB9ZnVuY3Rpb24gTjUoJD0iaXBob25lIixLKXtsZXQgSj1LP0Y5W0tdOm51bGw7aWYoSilyZXR1cm4gSjtsZXQgWj14MVskXTtyZXR1cm57d2lkdGg6Wi53aWR0aC0yKlouYmV6ZWxYLGhlaWdodDpaLmhlaWdodC0yKlouYmV6ZWxZfX1mdW5jdGlvbiB6NSgkPSJpcGhvbmUiLEspe2lmKHUwKEspKXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA3MjA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtkZWZhdWx0OnJldHVybiA2MjB9c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDQwMDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2RlZmF1bHQ6cmV0dXJuIDMyMH19ZnVuY3Rpb24gRDIoJD0iaXBob25lIixLKXtsZXQgSj14MVskXSxaPUoud2lkdGgtMipKLmJlemVsWCxYPUouaGVpZ2h0LTIqSi5iZXplbFk7aWYoWjxYJiZ1MChLKSlyZXR1cm5gJHtKLmlubmVyUmFkaXVzL1gqMTAwfSUgLyAke0ouaW5uZXJSYWRpdXMvWioxMDB9JWA7cmV0dXJuYCR7Si5pbm5lclJhZGl1cy9aKjEwMH0lIC8gJHtKLmlubmVyUmFkaXVzL1gqMTAwfSVgfWZ1bmN0aW9uIEE5KCQpe2xldCBLPXgxWyQudHlwZV0sSj1LLndpZHRoLTIqSy5iZXplbFgsWj1LLmhlaWdodC0yKksuYmV6ZWxZLFgsWTtpZihKPFomJnUwKCQuY29uZmlnPz9udWxsKSlYPUsuaW5uZXJSYWRpdXMvWixZPUsuaW5uZXJSYWRpdXMvSjtlbHNlIFg9Sy5pbm5lclJhZGl1cy9KLFk9Sy5pbm5lclJhZGl1cy9aO2xldCBxPVgqJC5jb250YWluZXJXaWR0aCxWPVkqJC5jb250YWluZXJIZWlnaHQsTj1NYXRoLnNxcnQoTWF0aC5tYXgocSpWLDApKTtyZXR1cm57cng6cSxyeTpWLHJHZW9tOk59fXZhciBDJD0xMyxIJD02MjtmdW5jdGlvbiBQOCgkKXtsZXR7Y29udGFpbmVyV2lkdGg6Syxjb250YWluZXJIZWlnaHQ6Sn09JCxaPShrKT0+ay50b0ZpeGVkKDMpLFg9KGssSCk9PntsZXQgUD1ILHk9SCxXPUgkLzIqKE1hdGguUEkvMTgwKSxBPTIyNSpNYXRoLlBJLzE4MCxUPUErVyxpPUEtVyx2PVAraypNYXRoLmNvcyhUKSxqPXkraypNYXRoLnNpbihUKSxkPVAraypNYXRoLmNvcyhpKSxaMT15K2sqTWF0aC5zaW4oaSkscTE9YE0gJHtaKHYpfSAke1ooail9IEEgJHtaKGspfSAke1ooayl9IDAgMCAxICR7WihkKX0gJHtaKFoxKX1gLG89YE0gJHtaKGQpfSAke1ooWjEpfSBBICR7WihrKX0gJHtaKGspfSAwIDAgMCAke1oodil9ICR7WihqKX1gO3JldHVybntkOnExLGRGaWxsOm99fTtpZighKEs+MCl8fCEoSj4wKSl7bGV0IGs9QyQsSD1NYXRoLmNlaWwoaysxNCkse2Q6UCxkRmlsbDp5fT1YKGssSCk7cmV0dXJue2Q6UCxkRmlsbDp5LHZpZXdCb3hTaXplOkh9fWxldHtyR2VvbTpZfT1BOSgkKSxxPU1hdGgubWF4KDIuMixNYXRoLm1pbig1LjIsMC4wMTEqTWF0aC5taW4oSyxKKSkpLFY9WSowLjM0K3EsTj1NYXRoLm1pbihLLEopLEI9TWF0aC5taW4oMjIsTWF0aC5tYXgoMTIsTiowLjA1MikpO1Y9TWF0aC5taW4oMjQsTWF0aC5tYXgoMTIsVixCKSk7bGV0IFU9TWF0aC5tYXgoMjYsTWF0aC5jZWlsKFYrMTMpKSx7ZDpGLGRGaWxsOkx9PVgoVixVKTtyZXR1cm57ZDpGLGRGaWxsOkwsdmlld0JveFNpemU6VX19ZnVuY3Rpb24gVDIoe3R5cGU6JD0iaXBob25lIixzdHJlYW1pbmc6Sz0hMX0pe3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBRKEYkLHtzdHJlYW1pbmc6S30pO2Nhc2Uid2F0Y2giOnJldHVybiBRKEEkLHtzdHJlYW1pbmc6S30pO2Nhc2UidmlzaW9uIjpyZXR1cm4gUShNJCx7c3RyZWFtaW5nOkt9KTtkZWZhdWx0OnJldHVybiBRKGskLHtzdHJlYW1pbmc6S30pfX1mdW5jdGlvbiBrJCh7c3RyZWFtaW5nOiQ9ITF9KXtyZXR1cm4gUSgic3ZnIix7dmlld0JveDoiMCAwIDQyNyA4ODEiLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbUSgiZGVmcyIse2NoaWxkcmVuOltRKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjAiLHg6Ii0wLjE2Njk5MiIseToiMC4xNjY1MDQiLHdpZHRoOiI0MjciLGhlaWdodDoiODgwLjY2NyIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbUSgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksUSgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFEoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KSxRKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjEiLHg6IjYuMzMyMzYiLHk6IjYuMzMzODIiLHdpZHRoOiI0MTQiLGhlaWdodDoiODY4IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltRKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxRKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksUSgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSldfSksUSgicmVjdCIse3g6IjMuODMyNjgiLHk6IjMuODMzNjYiLHdpZHRoOiI0MTkiLGhlaWdodDoiODczIixyeDoiNjYuMTY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNC4zMzMzMyJ9KSxRKCJyZWN0Iix7eDoiMC44MzMzMzMiLHk6IjAuODMzMzMzIix3aWR0aDoiNDI1IixoZWlnaHQ6Ijg3OSIscng6IjY5LjE2NjciLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSksUSgiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIwKSIsY2hpbGRyZW46USgicmVjdCIse3g6IjEuNjY2MDIiLHk6IjIiLHdpZHRoOiI0MjMuMzMzIixoZWlnaHQ6Ijg3NyIscng6IjY4LjY2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSl9KSxRKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjEpIixjaGlsZHJlbjpRKCJyZWN0Iix7eDoiNy4zMzI2OCIseToiNy4zMzM2NiIsd2lkdGg6IjQxMiIsaGVpZ2h0OiI4NjYiLHJ4OiI2Mi42NjY3IixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NjY2NyJ9KX0pLFEoInJlY3QiLHt4OiIxNTEuNjY2Iix5OiIzMS42NjciLHdpZHRoOiIxMjMuMzMzIixoZWlnaHQ6IjM2IixyeDoiMTgiLGZpbGw6ImJsYWNrIixzdHlsZTp7b3BhY2l0eTokPzA6MSx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gRiQoe3N0cmVhbWluZzokPSExfSl7bGV0IEs9eDEuaXBhZC53aWR0aCxKPXgxLmlwYWQuaGVpZ2h0LFo9MzAsWD0yNjtyZXR1cm4gUSgic3ZnIix7dmlld0JveDpgMCAwICR7S30gJHtKfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltRKCJkZWZzIix7Y2hpbGRyZW46W1EoImZpbHRlciIse2lkOiJpcGFkLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpLLGhlaWdodDpKLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1EoImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFEoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxRKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksUSgiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOkstMTAsaGVpZ2h0OkotMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbUSgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksUSgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFEoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJibHVyIn0pXX0pXX0pLFEoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Sy03LGhlaWdodDpKLTcscng6MjYsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNCJ9KSxRKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpLLTEuNjY2LGhlaWdodDpKLTEuNjY2LHJ4OjMwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLFEoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cwKSIsY2hpbGRyZW46USgicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpLLTMsaGVpZ2h0OkotMyxyeDoyOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLFEoImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cxKSIsY2hpbGRyZW46USgicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOkstMTIsaGVpZ2h0OkotMTIscng6MjQsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxRKCJjaXJjbGUiLHtjeDpLLzIsY3k6eDEuaXBhZC5iZXplbFkvMisxLHI6IjMiLGZpbGw6IiMxYTFhMWEiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjgsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pLFEoInJlY3QiLHt4OihLLTEyMCkvMix5OkoteDEuaXBhZC5iZXplbFkvMi0yLjUsd2lkdGg6IjEyMCIsaGVpZ2h0OiI1IixyeDoiMi41IixmaWxsOiJ3aGl0ZSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMzUsbWl4QmxlbmRNb2RlOiJkaWZmZXJlbmNlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gQSQoe3N0cmVhbWluZzokPSExfSl7bGV0IEs9eDEud2F0Y2gud2lkdGgsSj14MS53YXRjaC5oZWlnaHQsWj04OCxYPTgyLFk9OCxxPTM2LFY9Si8yLTE4LTE2LE49MjIsQj1KLzItMTErMTY7cmV0dXJuIFEoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0t9ICR7Sn1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1EoImRlZnMiLHtjaGlsZHJlbjpRKCJmaWx0ZXIiLHtpZDoid2F0Y2gtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOksrMTIsaGVpZ2h0OkosZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbUSgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksUSgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFEoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KX0pLFEoInJlY3QiLHt4OkstMix5OlYsd2lkdGg6OCxoZWlnaHQ6MzYscng6IjMiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEifSksUSgicmVjdCIse3g6Sy0xLHk6Qix3aWR0aDo2LGhlaWdodDoyMixyeDoiMi41IixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIwLjgifSksUSgicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpLLTcsaGVpZ2h0OkotNyxyeDo4MixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzLjUifSksUSgicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Sy0xLjY2NixoZWlnaHQ6Si0xLjY2NixyeDo4OCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxRKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjd2F0Y2gtZ2xvdzApIixjaGlsZHJlbjpRKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkstMyxoZWlnaHQ6Si0zLHJ4Ojg3LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSldfSl9ZnVuY3Rpb24gTSQoe3N0cmVhbWluZzokPSExfSl7bGV0IEs9eDEudmlzaW9uLndpZHRoLEo9eDEudmlzaW9uLmhlaWdodCxaPTQwLFg9MzQ7cmV0dXJuIFEoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0t9ICR7Sn1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbUSgiZGVmcyIse2NoaWxkcmVuOltRKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpLLGhlaWdodDpKLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1EoImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFEoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxRKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksUSgiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6Sy0xMCxoZWlnaHQ6Si0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltRKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxRKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksUSgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzIixyZXN1bHQ6ImJsdXIifSldfSksUSgibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W1EoInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiM1NTU1NTgiLHN0b3BPcGFjaXR5OiIwLjMifSksUSgic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjM2EzYTNkIixzdG9wT3BhY2l0eToiMC4xIn0pXX0pXX0pLFEoInJlY3QiLHt4OiIwIix5OiIwIix3aWR0aDpLLGhlaWdodDpKLHJ4OjQwLGZpbGw6InVybCgjdmlzaW9uLWdsYXNzKSJ9KSxRKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkstNyxoZWlnaHQ6Si03LHJ4OjM0LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMifSksUSgicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Sy0xLjY2NixoZWlnaHQ6Si0xLjY2NixyeDo0MCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxRKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cwKSIsY2hpbGRyZW46USgicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpLLTMsaGVpZ2h0OkotMyxyeDozOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLFEoImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzEpIixjaGlsZHJlbjpRKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6Sy0xMixoZWlnaHQ6Si0xMixyeDozMixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLFEoImVsbGlwc2UiLHtjeDpLLzIsY3k6Si8yLHJ4OksvMi0zMCxyeTpKLzItMjQsc3Ryb2tlOiIjNGE0YTRkIixzdHJva2VXaWR0aDoiMC41IixvcGFjaXR5OiIwLjMiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjMsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfXZhciBXOD1IMChudWxsKTtmdW5jdGlvbiB3MigkKXtsZXQgSz1rMChXOCk7aWYoIUspdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7JH0+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiBLfXZhciBQJD17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoidmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLCAjMTgxODE4KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uIFckKHtleGVjOiQsb25Sb3RhdGU6SyxvcmllbnRhdGlvbjpKLGRldmljZVVkaWQ6WixkZXZpY2VOYW1lOlgsZGV2aWNlUnVudGltZTpZLHN0cmVhbWluZzpxPSExLGRpc2FibGVkOlY9ITEsY2hpbGRyZW46TixzdHlsZTpCLC4uLnp9KXtsZXQgRz1iMChYKSxVPXtleGVjOiQsb25Sb3RhdGU6SyxvcmllbnRhdGlvbjpKLGRldmljZVVkaWQ6WixkZXZpY2VOYW1lOlgsZGV2aWNlUnVudGltZTpZLGRldmljZVR5cGU6RyxzdHJlYW1pbmc6cSxkaXNhYmxlZDpWfHwhWnx8IXF9O3JldHVybiBRKFc4LlByb3ZpZGVyLHt2YWx1ZTpVLGNoaWxkcmVuOlEoImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4uUCQsLi4uQn0sLi4ueixjaGlsZHJlbjpOfSl9KX12YXIgXyQ9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LEQkPU0wKGZ1bmN0aW9uKHtuYW1lOkssc3VidGl0bGU6SixoaWRlQ2hldnJvbjpaLGhpZGVTdWJ0aXRsZTpYLHN0eWxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOlYsLi4uTn0sQil7bGV0IHo9dzIoIlRpdGxlIiksW0csQ109TSghMSksVT1LPz96LmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLEY9Sj8/KHouZGV2aWNlUnVudGltZT96LmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBRKCJidXR0b24iLHtyZWY6Qix0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KEwpPT57QyghMCkscT8uKEwpfSxvbk1vdXNlTGVhdmU6KEwpPT57QyghMSksVj8uKEwpfSxzdHlsZTp7Li4uXyQsYmFja2dyb3VuZDpHPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uWX0sLi4uTixjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltVLCFaJiZRKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOlEoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLCFYJiZRKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpGfSldfSl9KSxUJD17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIHckKHtzdHlsZTokLC4uLkt9KXtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6ey4uLlQkLC4uLiR9LC4uLkt9KX12YXIgRSQ9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MTIsY3Vyc29yOiJwb2ludGVyIixkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzLCBjb2xvciAwLjE1cyIscG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoidmlzaWJsZSJ9LEUyPU0wKGZ1bmN0aW9uKHtmb3JjZURpc2FibGVkOkssdG9vbHRpcDpKLHN0eWxlOlosZGlzYWJsZWQ6WCx0aXRsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpWLG9uUG9pbnRlckRvd246TixvbkZvY3VzOkIsb25CbHVyOnosb25DbGljazpHLGNoaWxkcmVuOkMsImFyaWEtbGFiZWwiOlUsLi4uRn0sTCl7bGV0IGs9azAoVzgpLEg9WHx8S3x8az8uZGlzYWJsZWQsW1AseV09TSghMSksW1csQV09TSghMSksVD1JKCExKSxpPVY1KCksdj1KPz9ZPz8odHlwZW9mIFU9PT0ic3RyaW5nIj9VOm51bGwpLGo9ISF2JiYhSCYmKFB8fFcpO3JldHVybiBRKCJidXR0b24iLHtyZWY6TCx0eXBlOiJidXR0b24iLGRpc2FibGVkOkgsImFyaWEtbGFiZWwiOlUsImFyaWEtZGVzY3JpYmVkYnkiOnY/aTp2b2lkIDAsb25Qb2ludGVyRG93bjooZCk9PntULmN1cnJlbnQ9ITAsTj8uKGQpfSxvbk1vdXNlRW50ZXI6KGQpPT57eSghMCkscT8uKGQpfSxvbk1vdXNlTGVhdmU6KGQpPT57eSghMSksVj8uKGQpfSxvbkZvY3VzOihkKT0+e0EoIVQuY3VycmVudCksQj8uKGQpfSxvbkJsdXI6KGQpPT57VC5jdXJyZW50PSExLEEoITEpLHo/LihkKX0sb25DbGljazooZCk9Pnt5KCExKSxBKCExKSxkLmN1cnJlbnRUYXJnZXQuYmx1cigpLEc/LihkKX0sc3R5bGU6ey4uLkUkLGNvbG9yOkg/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6UCYmIUg/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6SD8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5afSwuLi5GLGNoaWxkcmVuOltDLHYmJlEoInNwYW4iLHtpZDppLHJvbGU6InRvb2x0aXAiLCJhcmlhLWhpZGRlbiI6IWosc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiNTAlIixib3R0b206ImNhbGMoMTAwJSArIDhweCkiLHRyYW5zZm9ybTpgdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKCR7aj8wOjJ9cHgpYCxvcGFjaXR5Omo/MTowLHBvaW50ZXJFdmVudHM6Im5vbmUiLHdoaXRlU3BhY2U6Im5vd3JhcCIscGFkZGluZzoiNHB4IDdweCIsYm9yZGVyUmFkaXVzOjYsYmFja2dyb3VuZDoidmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLCAjMTgxODE4KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45MikiLGZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGxpbmVIZWlnaHQ6MSxib3hTaGFkb3c6IjAgNHB4IDE0cHggcmdiYSgwLDAsMCwwLjMyKSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjEycyBlYXNlLCB0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsekluZGV4OjEwMH0sY2hpbGRyZW46dn0pXX0pfSk7ZnVuY3Rpb24gSSQoJCxLKXtpZigkPT09IndhdGNoIilyZXR1cm4gYiQoKTtpZihLKXJldHVybmB4Y3J1biBzaW1jdGwgbGF1bmNoICR7S30gY29tLmFwcGxlLnNwcmluZ2JvYXJkYDtyZXR1cm4ic2VydmUtc2ltIGJ1dHRvbiBob21lIn1mdW5jdGlvbiBiJCgpe3JldHVyblsndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHNldCBmcm9udG1vc3QgdG8gdHJ1ZScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBwZXJmb3JtIGFjdGlvbiAiQVhSYWlzZSIgb2YgKGZpcnN0IHdpbmRvdyB3aG9zZSBuYW1lIGNvbnRhaW5zICJ3YXRjaE9TIiknLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gY2xpY2sgbWVudSBpdGVtICJIb21lIiBvZiBtZW51ICJEZXZpY2UiIG9mIG1lbnUgYmFyIGl0ZW0gIkRldmljZSIgb2YgbWVudSBiYXIgMSddLm1hcCgoSyk9PmAtZSAnJHtLfSdgKS5yZWR1Y2UoKEssSik9PmAke0t9ICR7Sn1gLCJvc2FzY3JpcHQiKX12YXIgeSQ9USgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46USgicGF0aCIse2Q6Ik0zIDEwLjUgMTIgM2w5IDcuNVYyMGExIDEgMCAwIDEtMSAxaC01di03aC02djdINGExIDEgMCAwIDEtMS0xeiJ9KX0pLFMkPVEoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDQ0IDQ0IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOlEoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGZpbGw6ImN1cnJlbnRDb2xvciIsZDoiTTQzLjY4NzUgMTIuNDY4OFY4LjI3MzQ0QzQzLjY4NzUgNS43MjY1NiA0Mi45NTMxIDMuNzEwOTQgNDEuNDg0NCAyLjIyNjU2QzQwLjAxNTYgMC43NDIxODggMzggMCAzNS40Mzc1IDBIMzEuMTQ4NEMzMC42MDE2IDAgMzAuMTMyOCAwLjE5NTMxMiAyOS43NDIyIDAuNTg1OTM4QzI5LjM1MTYgMC45NzY1NjIgMjkuMTU2MiAxLjQ0NTMxIDI5LjE1NjIgMS45OTIxOUMyOS4xNTYyIDIuNTIzNDQgMjkuMzUxNiAyLjk4NDM4IDI5Ljc0MjIgMy4zNzVDMzAuMTMyOCAzLjc2NTYyIDMwLjYwMTYgMy45NjA5NCAzMS4xNDg0IDMuOTYwOTRIMzUuNDM3NUMzNi43ODEyIDMuOTYwOTQgMzcuODM1OSA0LjM0Mzc1IDM4LjYwMTYgNS4xMDkzOEMzOS4zNTE2IDUuODc1IDM5LjcyNjYgNi45Mjk2OSAzOS43MjY2IDguMjczNDRWMTIuNDY4OEMzOS43MjY2IDEzIDM5LjkyMTkgMTMuNDYwOSA0MC4zMTI1IDEzLjg1MTZDNDAuNzAzMSAxNC4yNDIyIDQxLjE3MTkgMTQuNDM3NSA0MS43MTg4IDE0LjQzNzVDNDIuMjUgMTQuNDM3NSA0Mi43MTA5IDE0LjI0MjIgNDMuMTAxNiAxMy44NTE2QzQzLjQ5MjIgMTMuNDYwOSA0My42ODc1IDEzIDQzLjY4NzUgMTIuNDY4OFpNMCAxMi40Njg4QzAgMTMgMC4xOTUzMTIgMTMuNDYwOSAwLjU4NTkzOCAxMy44NTE2QzAuOTc2NTYyIDE0LjI0MjIgMS40Mzc1IDE0LjQzNzUgMS45Njg3NSAxNC40Mzc1QzIuNSAxNC40Mzc1IDIuOTYwOTQgMTQuMjQyMiAzLjM1MTU2IDEzLjg1MTZDMy43NDIxOSAxMy40NjA5IDMuOTM3NSAxMyAzLjkzNzUgMTIuNDY4OFY4LjI3MzQ0QzMuOTM3NSA2LjkyOTY5IDQuMzIwMzEgNS44NzUgNS4wODU5NCA1LjEwOTM4QzUuODM1OTQgNC4zNDM3NSA2Ljg5MDYyIDMuOTYwOTQgOC4yNSAzLjk2MDk0SDEyLjUzOTFDMTMuMDg1OSAzLjk2MDk0IDEzLjU1NDcgMy43NjU2MiAxMy45NDUzIDMuMzc1QzE0LjMyMDMgMi45ODQzOCAxNC41MDc4IDIuNTIzNDQgMTQuNTA3OCAxLjk5MjE5QzE0LjUwNzggMS40NDUzMSAxNC4zMjAzIDAuOTc2NTYyIDEzLjk0NTMgMC41ODU5MzhDMTMuNTU0NyAwLjE5NTMxMiAxMy4wODU5IDAgMTIuNTM5MSAwSDguMjVDNS42ODc1IDAgMy42NzE4OCAwLjc0MjE4OCAyLjIwMzEyIDIuMjI2NTZDMC43MzQzNzUgMy43MTA5NCAwIDUuNzI2NTYgMCA4LjI3MzQ0VjEyLjQ2ODhaTTQzLjY4NzUgMzEuMjQyMkM0My42ODc1IDMwLjcxMDkgNDMuNDkyMiAzMC4yNSA0My4xMDE2IDI5Ljg1OTRDNDIuNzEwOSAyOS40Njg4IDQyLjI1IDI5LjI3MzQgNDEuNzE4OCAyOS4yNzM0QzQxLjE3MTkgMjkuMjczNCA0MC43MDMxIDI5LjQ2ODggNDAuMzEyNSAyOS44NTk0QzM5LjkyMTkgMzAuMjUgMzkuNzI2NiAzMC43MTA5IDM5LjcyNjYgMzEuMjQyMlYzNS40Mzc1QzM5LjcyNjYgMzYuNzgxMiAzOS4zNTE2IDM3LjgzNTkgMzguNjAxNiAzOC42MDE2QzM3LjgzNTkgMzkuMzY3MiAzNi43ODEyIDM5Ljc1IDM1LjQzNzUgMzkuNzVIMzEuMTQ4NEMzMC42MDE2IDM5Ljc1IDMwLjEzMjggMzkuOTQ1MyAyOS43NDIyIDQwLjMzNTlDMjkuMzUxNiA0MC43MjY2IDI5LjE1NjIgNDEuMTg3NSAyOS4xNTYyIDQxLjcxODhDMjkuMTU2MiA0Mi4yNjU2IDI5LjM1MTYgNDIuNzI2NiAyOS43NDIyIDQzLjEwMTZDMzAuMTMyOCA0My40OTIyIDMwLjYwMTYgNDMuNjg3NSAzMS4xNDg0IDQzLjY4NzVIMzUuNDM3NUMzOCA0My42ODc1IDQwLjAxNTYgNDIuOTQ1MyA0MS40ODQ0IDQxLjQ2MDlDNDIuOTUzMSAzOS45OTIyIDQzLjY4NzUgMzcuOTg0NCA0My42ODc1IDM1LjQzNzVWMzEuMjQyMlpNMCAzMS4yNDIyVjM1LjQzNzVDMCAzNy45ODQ0IDAuNzM0Mzc1IDM5Ljk5MjIgMi4yMDMxMiA0MS40NjA5QzMuNjcxODggNDIuOTQ1MyA1LjY4NzUgNDMuNjg3NSA4LjI1IDQzLjY4NzVIMTIuNTM5MUMxMy4wODU5IDQzLjY4NzUgMTMuNTU0NyA0My40OTIyIDEzLjk0NTMgNDMuMTAxNkMxNC4zMjAzIDQyLjcyNjYgMTQuNTA3OCA0Mi4yNjU2IDE0LjUwNzggNDEuNzE4OEMxNC41MDc4IDQxLjE4NzUgMTQuMzIwMyA0MC43MjY2IDEzLjk0NTMgNDAuMzM1OUMxMy41NTQ3IDM5Ljk0NTMgMTMuMDg1OSAzOS43NSAxMi41MzkxIDM5Ljc1SDguMjVDNi44OTA2MiAzOS43NSA1LjgzNTk0IDM5LjM2NzIgNS4wODU5NCAzOC42MDE2QzQuMzIwMzEgMzcuODM1OSAzLjkzNzUgMzYuNzgxMiAzLjkzNzUgMzUuNDM3NVYzMS4yNDIyQzMuOTM3NSAzMC43MTA5IDMuNzQyMTkgMzAuMjUgMy4zNTE1NiAyOS44NTk0QzIuOTYwOTQgMjkuNDY4OCAyLjUgMjkuMjczNCAxLjk2ODc1IDI5LjI3MzRDMS40Mzc1IDI5LjI3MzQgMC45NzY1NjIgMjkuNDY4OCAwLjU4NTkzOCAyOS44NTk0QzAuMTk1MzEyIDMwLjI1IDAgMzAuNzEwOSAwIDMxLjI0MjJaTTMxLjU5MzggMzEuODA0N0MzMi43ODEyIDMxLjgwNDcgMzMuNjcxOSAzMS41MTU2IDM0LjI2NTYgMzAuOTM3NUMzNC44NTk0IDMwLjM0MzggMzUuMTU2MiAyOS40Njg4IDM1LjE1NjIgMjguMzEyNVYxNi43MTA5QzM1LjE1NjIgMTUuNTM5MSAzNC44NTk0IDE0LjY2NDEgMzQuMjY1NiAxNC4wODU5QzMzLjY3MTkgMTMuNDkyMiAzMi43ODEyIDEzLjE5NTMgMzEuNTkzOCAxMy4xOTUzSDI4Ljg5ODRDMjguNDYwOSAxMy4xOTUzIDI4LjE0ODQgMTMuMTQwNiAyNy45NjA5IDEzLjAzMTJDMjcuNzU3OCAxMi45MjE5IDI3LjUyMzQgMTIuNzI2NiAyNy4yNTc4IDEyLjQ0NTNMMjYuMzY3MiAxMS41MDc4QzI2LjA4NTkgMTEuMTk1MyAyNS43ODEyIDEwLjk2ODggMjUuNDUzMSAxMC44MjgxQzI1LjEwOTQgMTAuNjcxOSAyNC42NTYyIDEwLjU5MzggMjQuMDkzOCAxMC41OTM4SDE5LjYxNzJDMTkuMDU0NyAxMC41OTM4IDE4LjYwOTQgMTAuNjcxOSAxOC4yODEyIDEwLjgyODFDMTcuOTM3NSAxMC45Njg4IDE3LjYyNSAxMS4xOTUzIDE3LjM0MzggMTEuNTA3OEwxNi40NzY2IDEyLjQ0NTNDMTYuMjEwOSAxMi43NDIyIDE1Ljk3NjYgMTIuOTQ1MyAxNS43NzM0IDEzLjA1NDdDMTUuNTU0NyAxMy4xNDg0IDE1LjIzNDQgMTMuMTk1MyAxNC44MTI1IDEzLjE5NTNIMTIuMDQ2OUMxMC44OTA2IDEzLjE5NTMgMTAuMDE1NiAxMy40OTIyIDkuNDIxODggMTQuMDg1OUM4LjgxMjUgMTQuNjY0MSA4LjUwNzgxIDE1LjUzOTEgOC41MDc4MSAxNi43MTA5VjI4LjMxMjVDOC41MDc4MSAyOS40Njg4IDguODEyNSAzMC4zNDM4IDkuNDIxODggMzAuOTM3NUMxMC4wMTU2IDMxLjUxNTYgMTAuODkwNiAzMS44MDQ3IDEyLjA0NjkgMzEuODA0N0gzMS41OTM4Wk0yMS43OTY5IDI4Ljk0NTNDMjAuNTkzOCAyOC45NDUzIDE5LjUgMjguNjY0MSAxOC41MTU2IDI4LjEwMTZDMTcuNTE1NiAyNy41MjM0IDE2LjcyNjYgMjYuNzQyMiAxNi4xNDg0IDI1Ljc1NzhDMTUuNTU0NyAyNC43NTc4IDE1LjI1NzggMjMuNjMyOCAxNS4yNTc4IDIyLjM4MjhDMTUuMjU3OCAyMS4xNzk3IDE1LjU1NDcgMjAuMDg1OSAxNi4xNDg0IDE5LjEwMTZDMTYuNzI2NiAxOC4xMDE2IDE3LjUxNTYgMTcuMzEyNSAxOC41MTU2IDE2LjczNDRDMTkuNSAxNi4xNDA2IDIwLjU5MzggMTUuODQzOCAyMS43OTY5IDE1Ljg0MzhDMjMuMDE1NiAxNS44NDM4IDI0LjEyNSAxNi4xNDA2IDI1LjEyNSAxNi43MzQ0QzI2LjEwOTQgMTcuMzEyNSAyNi44OTg0IDE4LjEwMTYgMjcuNDkyMiAxOS4xMDE2QzI4LjA3MDMgMjAuMDg1OSAyOC4zNTk0IDIxLjE3OTcgMjguMzU5NCAyMi4zODI4QzI4LjM1OTQgMjMuNjE3MiAyOC4wNzAzIDI0LjcyNjYgMjcuNDkyMiAyNS43MTA5QzI2Ljg5ODQgMjYuNjk1MyAyNi4xMDk0IDI3LjQ4NDQgMjUuMTI1IDI4LjA3ODFDMjQuMTI1IDI4LjY1NjIgMjMuMDE1NiAyOC45NDUzIDIxLjc5NjkgMjguOTQ1M1pNMjEuODIwMyAyNi45MDYyQzIyLjY0ODQgMjYuOTA2MiAyMy40MDYyIDI2LjcxMDkgMjQuMDkzOCAyNi4zMjAzQzI0Ljc4MTIgMjUuOTE0MSAyNS4zMjgxIDI1LjM2NzIgMjUuNzM0NCAyNC42Nzk3QzI2LjEyNSAyMy45OTIyIDI2LjMyMDMgMjMuMjI2NiAyNi4zMjAzIDIyLjM4MjhDMjYuMzIwMyAyMS41NzAzIDI2LjEyNSAyMC44MjAzIDI1LjczNDQgMjAuMTMyOEMyNS4zMjgxIDE5LjQ0NTMgMjQuNzgxMiAxOC45MDYyIDI0LjA5MzggMTguNTE1NkMyMy40MDYyIDE4LjEwOTQgMjIuNjQ4NCAxNy45MDYyIDIxLjgyMDMgMTcuOTA2MkMyMC45OTIyIDE3LjkwNjIgMjAuMjQyMiAxOC4xMDk0IDE5LjU3MDMgMTguNTE1NkMxOC44ODI4IDE4LjkwNjIgMTguMzM1OSAxOS40NDUzIDE3LjkyOTcgMjAuMTMyOEMxNy41MjM0IDIwLjgyMDMgMTcuMzIwMyAyMS41NzAzIDE3LjMyMDMgMjIuMzgyOEMxNy4zMjAzIDIzLjIyNjYgMTcuNTIzNCAyMy45OTIyIDE3LjkyOTcgMjQuNjc5N0MxOC4zMzU5IDI1LjM2NzIgMTguODgyOCAyNS45MTQxIDE5LjU3MDMgMjYuMzIwM0MyMC4yNDIyIDI2LjcxMDkgMjAuOTkyMiAyNi45MDYyIDIxLjgyMDMgMjYuOTA2MlpNMTIuNjMyOCAxOC45ODQ0QzEyLjIxMDkgMTguOTg0NCAxMS44NTk0IDE4LjgzNTkgMTEuNTc4MSAxOC41MzkxQzExLjI4MTIgMTguMjQyMiAxMS4xMzI4IDE3Ljg5MDYgMTEuMTMyOCAxNy40ODQ0QzExLjEzMjggMTcuMDYyNSAxMS4yODEyIDE2LjcxMDkgMTEuNTc4MSAxNi40Mjk3QzExLjg1OTQgMTYuMTMyOCAxMi4yMTA5IDE1Ljk4NDQgMTIuNjMyOCAxNS45ODQ0QzEzLjAzOTEgMTUuOTg0NCAxMy4zOTA2IDE2LjEzMjggMTMuNjg3NSAxNi40Mjk3QzEzLjk4NDQgMTYuNzEwOSAxNC4xMzI4IDE3LjA2MjUgMTQuMTMyOCAxNy40ODQ0QzE0LjEzMjggMTcuODkwNiAxMy45ODQ0IDE4LjI0MjIgMTMuNjg3NSAxOC41MzkxQzEzLjM5MDYgMTguODM1OSAxMy4wMzkxIDE4Ljk4NDQgMTIuNjMyOCAxOC45ODQ0WiJ9KX0pLHgkPVEoInN2ZyIse3dpZHRoOiIyMSIsaGVpZ2h0OiIyMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1EoInBhdGgiLHtkOiJNMTIgNUg2YTIgMiAwIDAgMC0yIDJ2MyJ9KSxRKCJwYXRoIix7ZDoibTkgOCAzLTMtMy0zIn0pLFEoInBhdGgiLHtkOiJNNCAxNHY0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTIifSldfSksUiQ9TTAoZnVuY3Rpb24oe29uQ2xpY2s6SywuLi5KfSxaKXtsZXQgWD13MigiSG9tZUJ1dHRvbiIpO3JldHVybiBRKEUyLHtyZWY6WiwiYXJpYS1sYWJlbCI6IkhvbWUiLG9uQ2xpY2s6KFkpPT57aWYoSz8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47WC5leGVjKEkkKFguZGV2aWNlVHlwZSxYLmRldmljZVVkaWQpKX0sLi4uSixjaGlsZHJlbjp5JH0pfSksdiQ9TTAoZnVuY3Rpb24oe29uQ2xpY2s6SywuLi5KfSxaKXtsZXQgWD13MigiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBRKEUyLHtyZWY6WiwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KFkpPT57aWYoSz8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoWC5kZXZpY2VVZGlkKVguZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7WC5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uSixjaGlsZHJlbjpTJH0pfSksaiQ9TTAoZnVuY3Rpb24oe29uQ2xpY2s6Syxmb3JjZURpc2FibGVkOkosLi4uWn0sWCl7bGV0IFk9dzIoIlJvdGF0ZUJ1dHRvbiIpLHE9WS5kZXZpY2VUeXBlPT09IndhdGNoInx8WS5kZXZpY2VUeXBlPT09InZpc2lvbiIsW1YsTl09TSgicG9ydHJhaXQiKTtyZXR1cm4gRSgoKT0+e04oWS5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtZLmRldmljZVVkaWQsWS5vcmllbnRhdGlvbl0pLFEoRTIse3JlZjpYLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpKfHxxLG9uQ2xpY2s6KEIpPT57aWYoSz8uKEIpLEIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIVkuZGV2aWNlVWRpZHx8cSlyZXR1cm47bGV0IHo9aTVbWS5vcmllbnRhdGlvbj8/Vl07aWYoTih6KSxZLm9uUm90YXRlKVkub25Sb3RhdGUoeik7ZWxzZSBZLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHt6fSAtZCAke1kuZGV2aWNlVWRpZH1gKX0sLi4uWixjaGlsZHJlbjp4JH0pfSksUjE9VyQ7UjEuVGl0bGU9RCQ7UjEuQWN0aW9ucz13JDtSMS5CdXR0b249RTI7UjEuSG9tZUJ1dHRvbj1SJDtSMS5TY3JlZW5zaG90QnV0dG9uPXYkO1IxLlJvdGF0ZUJ1dHRvbj1qJDt2YXIgTTk9W3tuYW1lOiJWb2x1bWUgZG93biIscGFnZToxMix1c2FnZToyMzQsSWNvbjpvNX0se25hbWU6IlZvbHVtZSB1cCIscGFnZToxMix1c2FnZToyMzMsSWNvbjpuNX0se25hbWU6IlBvd2VyIixwYWdlOjEyLHVzYWdlOjQ4LEljb246dTV9LHtuYW1lOiJDYW1lcmEgY29udHJvbCIscGFnZTo2NTI4MCx1c2FnZToxMDIsSWNvbjpSNX1dO2Z1bmN0aW9uIE85KHt2YWx1ZTokLG9uUHJlc3M6SyxpY29uUm90YXRpb246Sj0wfSl7bGV0IFo9SSghMSksWD1EKCgpPT57aWYoWi5jdXJyZW50KVouY3VycmVudD0hMSxLKCQsInVwIil9LFskLEtdKTtyZXR1cm4gRSgoKT0+WCxbWF0pLFEoUjEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6JC5uYW1lLHRpdGxlOiQubmFtZSxzdHlsZTp7dHJhbnNmb3JtOmByb3RhdGUoJHtKfWRlZylgLGNvbG9yOiIjZTVlNWU3Iix0cmFuc2l0aW9uOiJvcGFjaXR5IDE4MG1zIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMTUwbXMsIGNvbG9yIDE1MG1zIn0sb25Qb2ludGVyRG93bjooWSk9PntpZihZLnN0b3BQcm9wYWdhdGlvbigpLFkuYnV0dG9uIT09MClyZXR1cm47WS5wcmV2ZW50RGVmYXVsdCgpLFkuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShZLnBvaW50ZXJJZCksWi5jdXJyZW50PSEwLEsoJCwiZG93biIpfSxvblBvaW50ZXJVcDpYLG9uUG9pbnRlckNhbmNlbDpYLG9uTG9zdFBvaW50ZXJDYXB0dXJlOlgsb25DbGljazooWSk9PntpZihZLmRldGFpbD09PTApSygkLCJwcmVzcyIpfSxjaGlsZHJlbjpRKCQuSWNvbix7c2l6ZToxOCxzdHJva2VXaWR0aDoyLCJhcmlhLWhpZGRlbiI6InRydWUifSl9KX1mdW5jdGlvbiBQOSgkLEspe2xldCBKPXM1KGwwKEspLmlucHV0T3JpZW50YXRpb24scDApLFo9Sj09PXE5PzEtJC54Oko9PT1HOT8kLng6Sj09PVY5PzEtJC55OiQueTtyZXR1cm4gYTUoWik9PT12b2lkIDA/JDp7Li4uJCxlZGdlOkp9fWZ1bmN0aW9uIFc5KCQsSyl7cmV0dXJuICQuZWRnZT09PXZvaWQgMD9LOnsuLi5LLGVkZ2U6JC5lZGdlfX1mdW5jdGlvbiBfOSh7dXJsOiQscHJvamVjdGlvbjpLLG9uVG91Y2g6Sixvbk11bHRpVG91Y2g6WixvbkVycm9yOlgsb25IYXJkd2FyZVByZXNzOlksb25TdHJlYW1pbmdDaGFuZ2U6cSxzY3JlZW5Db25maWc6VixjaGlsZHJlbjpOfSl7bGV0IEI9SzkoSyksej0kOShLKSxbRyxDXT1NKG51bGwpO0UoKCk9PntsZXQgQT1zZXRUaW1lb3V0KCgpPT5DKHopLDIyMCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChBKX0sW3pdKTtsZXQgVT1LIT1udWxsJiZHPT09eixGPUkobnVsbCkse3N1YnNjcmliZUZyYW1lOkx9PUEyKCQscSksaz1JKFgpO2suY3VycmVudD1YLEUoKCk9PntsZXQgQT1udWxsLFQ9c2V0VGltZW91dCgoKT0+ay5jdXJyZW50Py4oKSwxMjAwMCksaT1MKCh2KT0+e2NsZWFyVGltZW91dChUKTtsZXQgaj1BO2lmKEE9dixGLmN1cnJlbnQpRi5jdXJyZW50LnNyYz12O2lmKGopVVJMLnJldm9rZU9iamVjdFVSTChqKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KFQpLGkoKSxBKVVSTC5yZXZva2VPYmplY3RVUkwoQSl9fSxbTCwkXSk7bGV0IEg9SShuZXcgTWFwKTtFKCgpPT4oKT0+e2xldFtBLFRdPVsuLi5ILmN1cnJlbnQudmFsdWVzKCldO2lmKEEmJlQpWih7dHlwZToiZW5kIix4MTpBLngseTE6QS55LHgyOlQueCx5MjpULnl9KTtlbHNlIGlmKEEpSih7dHlwZToiZW5kIiwuLi5BfSk7SC5jdXJyZW50LmNsZWFyKCl9LFtKLFpdKTtsZXQgUD0oKT0+e2xldFtBLFRdPVsuLi5ILmN1cnJlbnQudmFsdWVzKCldO3JldHVybiBBJiZUP3t4MTpBLngseTE6QS55LHgyOlQueCx5MjpULnl9Om51bGx9LHk9KEEpPT57bGV0IFQ9QS5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0MyhLLChBLmNsaWVudFgtVC5sZWZ0KS9ULndpZHRoLChBLmNsaWVudFktVC50b3ApL1QuaGVpZ2h0KX0sVz0oQSk9PntsZXQgVD1ILmN1cnJlbnQuZ2V0KEEucG9pbnRlcklkKTtpZighVClyZXR1cm47bGV0IGk9UCgpO2lmKGkpWih7dHlwZToiZW5kIiwuLi5pfSksSC5jdXJyZW50LmNsZWFyKCk7ZWxzZSBKKHt0eXBlOiJlbmQiLC4uLlR9KSxILmN1cnJlbnQuZGVsZXRlKEEucG9pbnRlcklkKTtpZihBLmN1cnJlbnRUYXJnZXQuaGFzUG9pbnRlckNhcHR1cmUoQS5wb2ludGVySWQpKUEuY3VycmVudFRhcmdldC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoQS5wb2ludGVySWQpfTtyZXR1cm4gUSgiZGl2Iix7ImFyaWEtbGFiZWwiOiJJbnRlcmFjdGl2ZSAzRCBpUGhvbmUgRHVvIixjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgYmctdHJhbnNwYXJlbnQgc2VsZWN0LW5vbmUiLHN0eWxlOnt0b3VjaEFjdGlvbjoibm9uZSIsY3Vyc29yOiJwb2ludGVyIix1c2VyU2VsZWN0OiJub25lIixXZWJraXRVc2VyU2VsZWN0OiJub25lIn0sb25Qb2ludGVyRG93bjooQSk9PntpZihBLmJ1dHRvbiE9PTB8fEguY3VycmVudC5zaXplPj0yKXJldHVybjtsZXQgVD15KEEpO2lmKCFUKXJldHVybjtsZXQgaT1QOShULFYpO0EucHJldmVudERlZmF1bHQoKTtsZXQgdj1bLi4uSC5jdXJyZW50LnZhbHVlcygpXVswXTtpZih2KUooe3R5cGU6ImVuZCIsLi4udn0pO0guY3VycmVudC5zZXQoQS5wb2ludGVySWQsaSksQS5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKEEucG9pbnRlcklkKTtsZXQgaj1QKCk7aWYoailaKHt0eXBlOiJiZWdpbiIsLi4uan0pO2Vsc2UgSih7dHlwZToiYmVnaW4iLC4uLml9KX0sb25Qb2ludGVyTW92ZTooQSk9PntpZighSC5jdXJyZW50LmhhcyhBLnBvaW50ZXJJZCkpcmV0dXJuO2xldCBUPXkoQSk7aWYoIVQpcmV0dXJuO2xldCBpPVc5KEguY3VycmVudC5nZXQoQS5wb2ludGVySWQpLFQpO0guY3VycmVudC5zZXQoQS5wb2ludGVySWQsaSk7bGV0IHY9UCgpO2lmKHYpWih7dHlwZToibW92ZSIsLi4udn0pO2Vsc2UgSih7dHlwZToibW92ZSIsLi4uaX0pfSxvblBvaW50ZXJVcDpXLG9uUG9pbnRlckNhbmNlbDpXLGNoaWxkcmVuOltRKCJpbWciLHtyZWY6RixvbkVycm9yOlgsYWx0OiJMaXZlIDNEIGlQaG9uZSBEdW8iLGRyYWdnYWJsZTohMSxjbGFzc05hbWU6ImJsb2NrIHctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvbnRhaW4gcG9pbnRlci1ldmVudHMtbm9uZSBiZy10cmFuc3BhcmVudCJ9KSxOLFUmJkIubWFwKChBKT0+USgiZGl2Iix7Y2xhc3NOYW1lOiJkdW8taGFyZHdhcmUtYW5jaG9yIixzdHlsZTp7bGVmdDpgJHtBLngqMTAwfSVgLHRvcDpgJHtBLnkqMTAwfSVgLHRyYW5zZm9ybTpgcm90YXRlKCR7QS5hbmdsZX1kZWcpYH0sY2hpbGRyZW46USgiZGl2Iix7Y2xhc3NOYW1lOiJkdW8taGFyZHdhcmUtcmVnaW9uIixjaGlsZHJlbjpRKE85LHt2YWx1ZTpNOVtBLmtleV0saWNvblJvdGF0aW9uOi1BLmFuZ2xlLG9uUHJlc3M6WX0pfSl9LEEua2V5KSldfSl9ZnVuY3Rpb24gRDkoJCxLKXtsZXQgSj0oWSk9PksoWS5hbHRLZXk9PT0hMCksWj0oKT0+SyghMSksWD1bImtleWRvd24iLCJrZXl1cCIsInBvaW50ZXJtb3ZlIiwicG9pbnRlcmRvd24iXTtmb3IobGV0IFkgb2YgWCkkLmFkZEV2ZW50TGlzdGVuZXIoWSxKKTtyZXR1cm4gJC5hZGRFdmVudExpc3RlbmVyKCJibHVyIixaKSwoKT0+e2ZvcihsZXQgWSBvZiBYKSQucmVtb3ZlRXZlbnRMaXN0ZW5lcihZLEopOyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsWil9fWZ1bmN0aW9uIEkyKHt0eXBlOiQsc2l6ZTpLPTIwLHNjcmVlbk9uOko9ITEsZHVvOlo9ITF9KXtsZXQgWD17d2lkdGg6SyxoZWlnaHQ6Syx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoxLjYsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O2lmKFopcmV0dXJuIFEoInN2ZyIse3dpZHRoOkssaGVpZ2h0Okssdmlld0JveDoiMCAwIDEwMiAxMDIiLGZpbGw6ImN1cnJlbnRDb2xvciIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLWR1byIsY2hpbGRyZW46W0omJlEoInBhdGgiLHtkOiJNMjQgMTBINzBDNzUuNTIyOSAxMCA4MCAxNC40NzcyIDgwIDIwVjgzQzgwIDg4LjUyMjggNzUuNTIyOCA5MyA3MCA5M0gyNEMyMi44OTU0IDkzIDIyIDkyLjEwNDYgMjIgOTFWMTJDMjIgMTAuODk1NCAyMi44OTU0IDEwIDI0IDEwWiIsZmlsbDoiIzQ3YjdmZiIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxRKCJwYXRoIix7ZDoiTTE3IDkxVjEyQzE3IDguMTM0MDEgMjAuMTM0IDUgMjQgNUg3MEM3OC4yODQzIDUgODUgMTEuNzE1NyA4NSAyMFY4M0w4NC45OTUxIDgzLjM4NjdDODQuNzkzMiA5MS4zNjM4IDc4LjM2MzggOTcuNzkzMiA3MC4zODY3IDk3Ljk5NTFMNzAgOThWOTNDNzUuNTIyOCA5MyA4MCA4OC41MjI4IDgwIDgzVjIwQzgwIDE0LjQ3NzIgNzUuNTIyOSAxMCA3MCAxMEgyNEMyMi44OTU0IDEwIDIyIDEwLjg5NTQgMjIgMTJWOTFDMjIgOTIuMTA0NiAyMi44OTU0IDkzIDI0IDkzVjk4TDIzLjYzOTYgOTcuOTkxMkMyMC4wNjA1IDk3LjgwOTcgMTcuMTkwMyA5NC45Mzk1IDE3LjAwODggOTEuMzYwNEwxNyA5MVpNNzAgOTNWOThIMjRWOTNINzBaIn0pLFEoImNpcmNsZSIse2N4OiI2OSIsY3k6IjIxIixyOiI0In0pLFEoInBhdGgiLHtkOiJNNDAgODguNUM0MCA4Ny42NzE2IDQwLjY3MTYgODcgNDEuNSA4N0g2MS41QzYyLjMyODQgODcgNjMgODcuNjcxNiA2MyA4OC41QzYzIDg5LjMyODQgNjIuMzI4NCA5MCA2MS41IDkwSDQxLjVDNDAuNjcxNiA5MCA0MCA4OS4zMjg0IDQwIDg4LjVaIn0pXX0pO3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBRKCJzdmciLHsuLi5YLGNoaWxkcmVuOltKJiZRKCJyZWN0Iix7eDoiNSIseToiMyIsd2lkdGg6IjE1IixoZWlnaHQ6IjE5IixyeDoiMS42NSIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLFEoInJlY3QiLHt4OiI0Iix5OiIyLjUiLHdpZHRoOiIxNiIsaGVpZ2h0OiIxOSIscng6IjIuNSJ9KSxRKCJsaW5lIix7eDE6IjEyIix5MToiMTguNSIseDI6IjEyIix5MjoiMTguNSJ9KV19KTtjYXNlIndhdGNoIjpyZXR1cm4gUSgic3ZnIix7Li4uWCxjaGlsZHJlbjpbUSgicmVjdCIse3g6IjYuNSIseToiNyIsd2lkdGg6IjExIixoZWlnaHQ6IjEwIixyeDoiMyJ9KSxRKCJwYXRoIix7ZDoiTTguNSA3bC42LTMuMkExLjUgMS41IDAgMCAxIDEwLjYgMi41aDIuOGExLjUgMS41IDAgMCAxIDEuNSAxLjNMMTUuNSA3In0pLFEoInBhdGgiLHtkOiJNOC41IDE3bC42IDMuMmExLjUgMS41IDAgMCAwIDEuNSAxLjNoMi44YTEuNSAxLjUgMCAwIDAgMS41LTEuM2wuNi0zLjIifSldfSk7Y2FzZSJ2aXNpb24iOnJldHVybiBRKCJzdmciLHsuLi5YLGNoaWxkcmVuOlEoInBhdGgiLHtkOiJNMyAxMWE0IDQgMCAwIDEgNC00aDEwYTQgNCAwIDAgMSA0IDR2Mi41YTIuNSAyLjUgMCAwIDEtMi41IDIuNWMtMS44IDAtMi41LTEuMi0zLjUtMS44LS45LS41LTEuNi0uNy0yLjUtLjdzLTEuNi4yLTIuNS43Yy0xIC42LTEuNyAxLjgtMy41IDEuOEEyLjUgMi41IDAgMCAxIDMgMTMuNXoifSl9KTtkZWZhdWx0OnJldHVybiBRKCJzdmciLHsuLi5YLGNoaWxkcmVuOltKJiZRKCJyZWN0Iix7eDoiNiIseToiMyIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMiIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLFEoInJlY3QiLHt4OiI2LjUiLHk6IjIuNSIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMi44In0pLFEoImxpbmUiLHt4MToiMTAuNSIseTE6IjUiLHgyOiIxMy41Iix5MjoiNSJ9KV19KX19ZnVuY3Rpb24gYjIoe21pbjokLG1heDpLLHZhbHVlOkosZGlzYWJsZWQ6WixjbGFzc05hbWU6WD0iIixzdHlsZTpZLC4uLnF9KXtsZXQgTj1gJHsoSz4kP01hdGgubWF4KDAsTWF0aC5taW4oMSwoSi0kKS8oSy0kKSkpOjApKjEwMH0lYCxCPVo/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6IiMwYTg0ZmYiLHo9IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLHJnYmEoMjU1LDI1NSwyNTUsMC4yMilfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106Ymctd2hpdGUvMjAgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106YmctW3ZhcigtLXNsaWRlci1maWxsLWNvbG9yKV0iLEc9IlsmOjotd2Via2l0LXNsaWRlci10aHVtYl06YXBwZWFyYW5jZS1ub25lIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06c2l6ZS1bMTNweF0gWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmJnLXdoaXRlLzUwIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06c2hhZG93LVswXzFweF8zcHhfcmdiYSgwLDAsMCwwLjQ1KV0gWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTotbXQtWzQuNXB4XSBbJjo6LW1vei1yYW5nZS10aHVtYl06c2l6ZS1bMTNweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10aHVtYl06Ym9yZGVyLW5vbmUgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJnLXdoaXRlIFsmOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZS81MCI7cmV0dXJuIFEoImlucHV0Iix7Li4ucSx0eXBlOiJyYW5nZSIsbWluOiQsbWF4OkssdmFsdWU6SixkaXNhYmxlZDpaLHN0eWxlOnsiLS1zbGlkZXItZmlsbCI6TiwiLS1zbGlkZXItZmlsbC1jb2xvciI6QiwuLi5ZfSxjbGFzc05hbWU6YGgtWzEzcHhdIHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgcm91bmRlZC1mdWxsIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOltvdXRsaW5lOjEuNXB4X3NvbGlkX3JnYmEoMTAsMTMyLDI1NSwwLjU1KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7Wj8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7en0gJHtHfSAke1h9YH0pfXZhciBnJD17d2lkdGg6MTM5OCxoZWlnaHQ6MjAzNH0saCQ9e3dpZHRoOjIwMDcsaGVpZ2h0OjI4NTN9O3ZhciBmJD1bWyJjbG9zZWQiLCJDbG9zZWQiLDBdLFsidGVudCIsIlRlbnQiLDgwXSxbInRhYmxldG9wIiwiVGFibGUiLDEwMF0sWyJib29rIiwiQm9vayIsMTMwXSxbIm9wZW4iLCJPcGVuIiwxODBdXS5tYXAoKFskLEssSl0pPT5tJCgkLEssSikpO2Z1bmN0aW9uIG0kKCQsSyxKKXtsZXQgWj1KPDkwLFg9Wj9nJDpoJDtyZXR1cm57aWQ6JCxsYWJlbDpLLGhpbmdlRGVncmVlczpKLGNvdmVyQWN0aXZlOlosd2lkdGg6WC53aWR0aCxoZWlnaHQ6WC5oZWlnaHR9fWZ1bmN0aW9uIFQ5KCl7cmV0dXJuIGYkfXZhciBwJD1UOSgpLHUkPXtjb2xvcjoiIzBhODRmZiJ9O2Z1bmN0aW9uIGwkKHtwb3NlOiR9KXtpZigkPT09ImNsb3NlZCIpcmV0dXJuIFEoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImNvbnRlbnRzIixjaGlsZHJlbjpRKEkyLHt0eXBlOiJpcGhvbmUiLGR1bzohMCxzaXplOjE4fSl9KTtpZigkPT09ImJvb2siKXJldHVybiBRKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAxMDIgMTAyIixmaWxsOiJub25lIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpRKCJwYXRoIix7ZDoiTTg1Ljc0MjIgMTQuNTcxM0M4OS43NTk1IDEzLjc3OSA5My41IDE2Ljg1MzYgOTMuNSAyMC45NDgyVjgyLjU3MTNDOTMuNDk5OCA4Ni41Mzk2IDg5Ljk3NDUgODkuNTgxNiA4Ni4wNDg4IDg5LjAwMUw1Mi4xODI2IDgzLjk5MjJDNTEuMDY2OSA4My44MjcyIDQ5LjkzMzEgODMuODI3MiA0OC44MTc0IDgzLjk5MjJMMTQuOTUxMiA4OS4wMDFDMTEuMDI1NSA4OS41ODE2IDcuNTAwMjEgODYuNTM5NiA3LjUgODIuNTcxM1YyMC45NDgyQzcuNSAxNi44NTM2IDExLjI0MDUgMTMuNzc5IDE1LjI1NzggMTQuNTcxM0w0OC4yNzU0IDIxLjA4MkM0OS43NDQ0IDIxLjM3MTcgNTEuMjU1NiAyMS4zNzE3IDUyLjcyNDYgMjEuMDgyTDg1Ljc0MjIgMTQuNTcxM1oiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiNSJ9KX0pO3JldHVybiBRKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAzMiAzMiIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltRKCJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjI4IixoZWlnaHQ6IjI0IixyeDoiMyJ9KSxRKCJwYXRoIix7ZDoiTTE0IDI1aDQifSldfSl9ZnVuY3Rpb24gdzkoe2FuZ2xlOiQsb25DaGFuZ2U6SyxvblBvc2U6SixvcmllbnRhdGlvbjpaPSJwb3J0cmFpdCJ9KXtsZXQgWD17cG9ydHJhaXQ6MCxsYW5kc2NhcGVfbGVmdDo5MCxwb3J0cmFpdF91cHNpZGVfZG93bjoxODAsbGFuZHNjYXBlX3JpZ2h0Oi05MH1bWl0sW1kscV09TShYKTtFKCgpPT57cSgoQik9PkIrKChYLUIrNTQwKSUzNjArMzYwKSUzNjAtMTgwKX0sW1hdKTtsZXRbVixOXT1NKCExKTtyZXR1cm4gRSgoKT0+RDkod2luZG93LE4pLFtdKSxRKCJkaXYiLHtyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOiJGb2xkIHBvc2UiLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOlY/USgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IHctMzYgaXRlbXMtY2VudGVyIGdhcC0xLjUgcHgtMSIsY2hpbGRyZW46W1EoYjIseyJhcmlhLWxhYmVsIjoiSGluZ2UgYW5nbGUiLCJhcmlhLXZhbHVldGV4dCI6YCR7TWF0aC5yb3VuZCgkKX0gZGVncmVlc2AsbWluOjAsbWF4OjE4MCxzdGVwOjAuMSx2YWx1ZTokLG9uQ2hhbmdlOihCKT0+SyhOdW1iZXIoQi5jdXJyZW50VGFyZ2V0LnZhbHVlKSksY2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSJ9KSxRKCJvdXRwdXQiLHtjbGFzc05hbWU6InctMTEgdGV4dC1yaWdodCB0ZXh0LVsxMXB4XSB0YWJ1bGFyLW51bXMgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46W01hdGgucm91bmQoJCksIsKwIl19KV19KTpwJC5tYXAoKEIpPT57bGV0IHo9TWF0aC5hYnMoJC1CLmhpbmdlRGVncmVlcyk8MC42O3JldHVybiBRKFIxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOmAke0IubGFiZWx9IHBvc2VgLHRpdGxlOmAke0IubGFiZWx9IMK3ICR7Qi5oaW5nZURlZ3JlZXN9wrBgLCJhcmlhLXByZXNzZWQiOnosb25DbGljazooKT0+SihCLmlkKSxzdHlsZTp6P3UkOnZvaWQgMCxjaGlsZHJlbjpRKCJzcGFuIix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbW90aW9uLXJlZHVjZTp0cmFuc2l0aW9uLW5vbmUiLHN0eWxlOnt0cmFuc2Zvcm06YHJvdGF0ZSgke1l9ZGVnKWAsdHJhbnNpdGlvbjoidHJhbnNmb3JtIDMwMG1zIGVhc2UtaW4tb3V0In0sY2hpbGRyZW46UShsJCx7cG9zZTpCLmlkfSl9KX0sQi5pZCl9KX0pfWZ1bmN0aW9uIGQkKCQsSyl7Zm9yKHZhciBKIGluIEspJFtKXT1LW0pdO3JldHVybiAkfWZ1bmN0aW9uIEU5KCQsSyl7Zm9yKHZhciBKIGluICQpaWYoSiE9PSJfX3NvdXJjZSImJiEoSiBpbiBLKSlyZXR1cm4hMDtmb3IodmFyIFogaW4gSylpZihaIT09Il9fc291cmNlIiYmJFtaXSE9PUtbWl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSTkoJCxLKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUt9KEk5LnByb3RvdHlwZT1uZXcgbzEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLEk5LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxLKXtyZXR1cm4gRTkodGhpcy5wcm9wcywkKXx8RTkodGhpcy5zdGF0ZSxLKX07dmFyIGI5PWEuX19iO2EuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSxiOSYmYjkoJCl9O3ZhciBjJD1hLl9fZTthLl9fZT1mdW5jdGlvbigkLEssSixaKXtpZigkLnRoZW4pe2Zvcih2YXIgWCxZPUs7WT1ZLl9fOylpZigoWD1ZLl9fYykmJlguX19jKXJldHVybiBLLl9fZT09bnVsbCYmKEsuX19lPUouX19lLEsuX19rPUouX19rKSxYLl9fYygkLEspfWMkKCQsSyxKLFopfTt2YXIgeTk9YS51bm1vdW50O2Z1bmN0aW9uIGc5KCQsSyxKKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihaKXt0eXBlb2YgWi5fX2M9PSJmdW5jdGlvbiImJlouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9ZCQoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PUomJigkLl9fYy5fX1A9SyksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIGc5KFosSyxKKX0pKSwkfWZ1bmN0aW9uIGg5KCQsSyxKKXtyZXR1cm4gJCYmSiYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gaDkoWixLLEopfSksJC5fX2MmJiQuX19jLl9fUD09PUsmJigkLl9fZSYmSi5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1KKSksJH1mdW5jdGlvbiBfOCgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBmOSgkKXt2YXIgSz0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSyYmSy5fX2EmJksuX19hKCQpfWZ1bmN0aW9uIHkyKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9YS51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBLPSQuX19jO0smJihLLl9fej0hMCksSyYmSy5fX1ImJksuX19SKCksSyYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCkseTkmJnk5KCQpfSwoXzgucHJvdG90eXBlPW5ldyBvMSkuX19jPWZ1bmN0aW9uKCQsSyl7dmFyIEo9Sy5fX2MsWj10aGlzO1oubz09bnVsbCYmKFoubz1bXSksWi5vLnB1c2goSik7dmFyIFg9ZjkoWi5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fFouX196fHwoWT0hMCxKLl9fUj1udWxsLFg/WChOKTpOKCkpfTtKLl9fUj1xO3ZhciBWPUouX19QO0ouX19QPW51bGw7dmFyIE49ZnVuY3Rpb24oKXtpZighLS1aLl9fdSl7aWYoWi5zdGF0ZS5fX2Epe3ZhciBCPVouc3RhdGUuX19hO1ouX192Ll9fa1swXT1oOShCLEIuX19jLl9fUCxCLl9fYy5fX08pfXZhciB6O2ZvcihaLnNldFN0YXRlKHtfX2E6Wi5fX2I9bnVsbH0pO3o9Wi5vLnBvcCgpOyl6Ll9fUD1WLHouZm9yY2VVcGRhdGUoKX19O1ouX191Kyt8fDMyJksuX191fHxaLnNldFN0YXRlKHtfX2E6Wi5fX2I9Wi5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LF84LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sXzgucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLEspe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFo9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09ZzkodGhpcy5fX2IsSixaLl9fTz1aLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgWD1LLl9fYSYmZjEoSjEsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gWCYmKFguX191Jj0tMzMpLFtmMShKMSxudWxsLEsuX19hP251bGw6JC5jaGlsZHJlbiksWF19O3ZhciBTOT1mdW5jdGlvbigkLEssSil7aWYoKytKWzFdPT09SlswXSYmJC5sLmRlbGV0ZShLKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoSj0kLmk7Sjspe2Zvcig7Si5sZW5ndGg+MzspSi5wb3AoKSgpO2lmKEpbMV08SlswXSlicmVhazskLmk9Sj1KWzJdfX07KHkyLnByb3RvdHlwZT1uZXcgbzEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSz10aGlzLEo9ZjkoSy5fX3YpLFo9Sy5sLmdldCgkKTtyZXR1cm4gWlswXSsrLGZ1bmN0aW9uKFgpe3ZhciBZPWZ1bmN0aW9uKCl7Sy5wcm9wcy5yZXZlYWxPcmRlcj8oWi5wdXNoKFgpLFM5KEssJCxaKSk6WCgpfTtKP0ooWSk6WSgpfX0seTIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSz1xMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZLLnJldmVyc2UoKTtmb3IodmFyIEo9Sy5sZW5ndGg7Si0tOyl0aGlzLmwuc2V0KEtbSl0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LHkyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9eTIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihLLEope1M5KCQsSixLKX0pfTt2YXIgciQ9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsbyQ9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLG4kPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8saSQ9L1tBLVowLTldL2csYSQ9dHlwZW9mIGRvY3VtZW50PCJ1IixzJD1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIG05KCQsSyxKKXtyZXR1cm4gSy5fX2s9PW51bGwmJihLLnRleHRDb250ZW50PSIiKSxSMCgkLEspLHR5cGVvZiBKPT0iZnVuY3Rpb24iJiZKKCksJD8kLl9fYzpudWxsfW8xLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKEspe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpLfSl9fSl9KTt2YXIgeDk9YS5ldmVudDthLmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiB4OSYmKCQ9eDkoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBwOSx0JD17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sUjk9YS52bm9kZTthLnZub2RlPWZ1bmN0aW9uKCQpe3R5cGVvZiAkLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihLKXt2YXJ7cHJvcHM6Six0eXBlOlp9PUssWD17fSxZPVouaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIHEgaW4gSil7dmFyIFY9SltxXTtpZighKHE9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBKKSYmVj09bnVsbHx8YSQmJnE9PT0iY2hpbGRyZW4iJiZaPT09Im5vc2NyaXB0Inx8cT09PSJjbGFzcyJ8fHE9PT0iY2xhc3NOYW1lIikpe3ZhciBOPXEudG9Mb3dlckNhc2UoKTtxPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlPT1udWxsP3E9InZhbHVlIjpxPT09ImRvd25sb2FkIiYmVj09PSEwP1Y9IiI6Tj09PSJ0cmFuc2xhdGUiJiZWPT09Im5vIj9WPSExOk5bMF09PT0ibyImJk5bMV09PT0ibiI/Tj09PSJvbmRvdWJsZWNsaWNrIj9xPSJvbmRibGNsaWNrIjpOIT09Im9uY2hhbmdlInx8WiE9PSJpbnB1dCImJlohPT0idGV4dGFyZWEifHxzJChKLnR5cGUpP049PT0ib25mb2N1cyI/cT0ib25mb2N1c2luIjpOPT09Im9uYmx1ciI/cT0ib25mb2N1c291dCI6biQudGVzdChxKSYmKHE9Tik6Tj1xPSJvbmlucHV0IjpZJiZvJC50ZXN0KHEpP3E9cS5yZXBsYWNlKGkkLCItJCYiKS50b0xvd2VyQ2FzZSgpOlY9PT1udWxsJiYoVj12b2lkIDApLE49PT0ib25pbnB1dCImJlhbcT1OXSYmKHE9Im9uaW5wdXRDYXB0dXJlIiksWFtxXT1WfX1aPT0ic2VsZWN0IiYmKFgubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoWC52YWx1ZSkmJihYLnZhbHVlPXEwKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1YLnZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xfSkpLFguZGVmYXVsdFZhbHVlIT1udWxsJiYoWC52YWx1ZT1xMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9WC5tdWx0aXBsZT9YLmRlZmF1bHRWYWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMTpYLmRlZmF1bHRWYWx1ZT09Qi5wcm9wcy52YWx1ZX0pKSksSi5jbGFzcyYmIUouY2xhc3NOYW1lPyhYLmNsYXNzPUouY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNsYXNzTmFtZSIsdCQpKTpKLmNsYXNzTmFtZSYmKFguY2xhc3M9WC5jbGFzc05hbWU9Si5jbGFzc05hbWUpLEsucHJvcHM9WH0oJCksJC4kJHR5cGVvZj1yJCxSOSYmUjkoJCl9O3ZhciB2OT1hLl9fcjthLl9fcj1mdW5jdGlvbigkKXt2OSYmdjkoJCkscDk9JC5fX2N9O3ZhciBqOT1hLmRpZmZlZDthLmRpZmZlZD1mdW5jdGlvbigkKXtqOSYmajkoJCk7dmFye3Byb3BzOkssX19lOkp9PSQ7SiE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIEsmJksudmFsdWUhPT1KLnZhbHVlJiYoSi52YWx1ZT1LLnZhbHVlPT1udWxsPyIiOksudmFsdWUpLHA5PW51bGx9O2Z1bmN0aW9uIHU5KCQpe3JldHVybiEhJC5fX2smJihSMChudWxsLCQpLCEwKX1mdW5jdGlvbiBsOSgkKXtyZXR1cm57cmVuZGVyOmZ1bmN0aW9uKEspe205KEssJCl9LHVubW91bnQ6ZnVuY3Rpb24oKXt1OSgkKX19fWZ1bmN0aW9uIGU1KHtvcGVuOiR9KXtyZXR1cm4gUSgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjbGFzc05hbWU6ImxlbS1jaGV2cm9uIHRleHQtd2hpdGUvNTAiLHN0eWxlOnt0cmFuc2Zvcm06JD8icm90YXRlKDE4MGRlZykiOiJyb3RhdGUoMGRlZykifSxjaGlsZHJlbjpRKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KX1mdW5jdGlvbiBTMih7ZGlyOiR9KXtyZXR1cm4gUSgic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZToibXItWzNweF0iLGNoaWxkcmVuOiQ9PT0idXAiP1EoInBvbHlnb24iLHtwb2ludHM6IjEyLDQgMjAsMTggNCwxOCJ9KTpRKCJwb2x5Z29uIix7cG9pbnRzOiI0LDYgMjAsNiAxMiwyMCJ9KX0pfWZ1bmN0aW9uICQyKCl7cmV0dXJuIFEoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOlEoInBvbHlnb24iLHtwb2ludHM6IjYsNCAyMCwxMiA2LDIwIn0pfSl9ZnVuY3Rpb24gRDgoKXtyZXR1cm4gUSgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46W1EoInJlY3QiLHt4OiI2Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KSxRKCJyZWN0Iix7eDoiMTQiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pXX0pfWZ1bmN0aW9uIEsyKCl7cmV0dXJuIFEoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOlEoInJlY3QiLHt4OiI1Iix5OiI1Iix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIxLjUifSl9KX1mdW5jdGlvbiBUOCgpe3JldHVybiBRKGg1LHtzaXplOjEyLHN0cm9rZVdpZHRoOjIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KX1mdW5jdGlvbiB3OCgpe3JldHVybiBRKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNCAyIDkgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpRKCJwYXRoIix7ZDoiTTYuMDA4NTIgMTQuODA1NEM1Ljg5MTgxIDE0LjkzNSA1Ljc1ODE1IDE0Ljk5OTggNS42MDc1NiAxNC45OTk4QzUuNDU2OTYgMTUuMDAzMyA1LjMyMzMgMTQuOTYxMyA1LjIwNjU5IDE0Ljg3MzdDNS4wOTM2NCAxNC43ODYxIDUuMDI1ODcgMTQuNjcyMyA1LjAwMzI4IDE0LjUzMjJDNC45ODQ0NiAxNC4zOTIxIDUuMDQ2NTggMTQuMjQ1IDUuMTg5NjUgMTQuMDkwOUw2Ljk0NTk5IDEyLjE1MjJMNy4yNDUzIDEwLjg3NTVMOC4xOTk3MSAxMS45ODkzTDguMDU4NTMgMTIuMzkzOUM4LjAyMDg4IDEyLjQ5NTUgNy45ODY5OSAxMi41NzA4IDcuOTU2ODcgMTIuNjE5OEM3LjkzMDUyIDEyLjY2ODggNy44NzQwNCAxMi43NDA2IDcuNzg3NDUgMTIuODM1Mkw2LjAwODUyIDE0LjgwNTRaTTEwLjM0NTcgMTQuNjQyNUw5LjEwMzI5IDEyLjMwNDZDOS4wNzY5NCAxMi4yNjI1IDkuMDU0MzUgMTIuMjIyMyA5LjAzNTUzIDEyLjE4MzdDOS4wMTY3IDEyLjE0NTIgOC45NzcxNyAxMi4wOTA5IDguOTE2OTMgMTIuMDIwOUw3LjcxOTY4IDEwLjYxODFDNy40OTM3OSAxMC4zNTU0IDcuMzM3NTQgMTAuMTI5NSA3LjI1MDk1IDkuOTQwMzRDNy4xNjQzNSA5Ljc0NzcgNy4xMzQyNCA5LjQ5OTAxIDcuMTYwNTkgOS4xOTQyOUw3LjI2MjI0IDcuOTgwNjVDNy4yNjk3NyA3LjkwNzEgNy4yMzIxMiA3Ljg1NDU2IDcuMTQ5MjkgNy44MjMwNEM3LjA2NjQ3IDcuNzkxNTEgNi45ODU1MiA3LjgwOTAzIDYuOTA2NDYgNy44NzU1N0w2LjQ3MTYxIDguMjQzMzRMNi4zNDE3MiA5LjY3MjM5QzYuMzIyODkgOS44NDc1MiA2LjI2NDU0IDkuOTc4ODcgNi4xNjY2NSAxMC4wNjY0QzYuMDY4NzYgMTAuMTU0IDUuOTM4ODcgMTAuMTkyNSA1Ljc3Njk4IDEwLjE4MkM1LjYxMTMyIDEwLjE3NSA1LjQ4MzMxIDEwLjExOSA1LjM5Mjk1IDEwLjAxMzlDNS4zMDYzNiA5LjkwODgyIDUuMjY4NzEgOS43NzM5NyA1LjI4MDAxIDkuNjA5MzVMNS4zODczMSA4LjMwNjM5QzUuNDAyMzcgOC4xMjc3NiA1LjQzODEzIDcuOTc1NCA1LjQ5NDYxIDcuODQ5MzFDNS41NTQ4NSA3LjcyMzIxIDUuNjYwMjYgNy41OTE4NyA1LjgxMDg2IDcuNDU1MjdMNi43MTQ0NSA2LjYyNTE2QzcuMDA0MzUgNi4zNjI0NyA3LjI2OTc3IDYuMTYxMDcgNy41MTA3MyA2LjAyMDk2QzcuNzUxNjggNS44NzczNiA4LjAyODQxIDUuODA1NTYgOC4zNDA5IDUuODA1NTZDOC43NTg4IDUuODA1NTYgOS4wNzg4MiA1LjkzMzQgOS4zMDA5NSA2LjE4OTA5QzkuNTI2ODUgNi40NDQ3OCA5LjYyNDc0IDYuNzYxNzYgOS41OTQ2MiA3LjE0MDA0TDkuNDc2MDIgOC43MzE5NUM5LjQ1MzQzIDkuMDE1NjYgOS40MTk1NSA5LjI2MjU5IDkuMzc0MzcgOS40NzI3NUM5LjMyOTE5IDkuNjgyOSA5LjI1Mzg5IDkuOTI5ODMgOS4xNDg0NyAxMC4yMTM1TDkuMDkyIDEwLjM2MDZMOS44NjU2OSAxMS4zNzk5QzkuOTIyMTcgMTEuNDUzNCA5Ljk4MDUyIDExLjUzNCAxMC4wNDA4IDExLjYyMTZDMTAuMTAxIDExLjcwOTEgMTAuMTUzNyAxMS43OTY3IDEwLjE5ODkgMTEuODg0M0wxMS40MDc0IDE0LjE2NDRDMTEuNTA1MyAxNC4zNTAxIDExLjUyNDEgMTQuNTExMiAxMS40NjM5IDE0LjY0NzhDMTEuNDAzNyAxNC43ODQ0IDExLjMwMiAxNC44ODI1IDExLjE1ODkgMTQuOTQyQzExLjAxOTYgMTUuMDAxNSAxMC44NzA5IDE1LjAxMDMgMTAuNzEyOCAxNC45NjgzQzEwLjU1ODQgMTQuOTI2MiAxMC40MzYxIDE0LjgxNzcgMTAuMzQ1NyAxNC42NDI1Wk0xMi40MDcgNy45NjQ4OUMxMi41ODQgNy45NjQ4OSAxMi43MjcgOC4wMTA0MiAxMi44MzYyIDguMTAxNDlDMTIuOTQ1NCA4LjE4OTA1IDEzIDguMzA2MzkgMTMgOC40NTM1QzEzIDguNjExMTEgMTIuOTQ1NCA4LjczMzcgMTIuODM2MiA4LjgyMTI3QzEyLjczMDggOC45MDg4MyAxMi41ODc3IDguOTUyNjEgMTIuNDA3IDguOTUyNjFIMTEuMTMwN0MxMC45NTM4IDguOTUyNjEgMTAuODE0NSA4LjkzNjg1IDEwLjcxMjggOC45MDUzM0MxMC42MTEyIDguODcwMyAxMC41MTMzIDguODA3MjYgMTAuNDE5MSA4LjcxNjE5TDEwLjA1MjEgOC4zNzk5NEwxMC4xNDI0IDcuMDQwMjFMMTEuMDM0NyA3Ljk2NDg5SDEyLjQwN1pNOS4wMDE2NCA1LjMxMTY5QzguNzcxOTggNS4zMTE2OSA4LjU2MzAzIDUuMjYwOTEgOC4zNzQ3OCA1LjE1OTMzQzguMTg2NTMgNS4wNTQyNiA4LjAzNTk0IDQuOTE0MTUgNy45MjI5OSA0LjczOTAzQzcuODEzODEgNC41NjM5IDcuNzU5MjEgNC4zNjk1IDcuNzU5MjEgNC4xNTU4NUM3Ljc1OTIxIDMuOTQyMTkgNy44MTM4MSAzLjc0NzggNy45MjI5OSAzLjU3MjY3QzguMDM1OTQgMy4zOTc1NCA4LjE4NjUzIDMuMjU5MTkgOC4zNzQ3OCAzLjE1NzYyQzguNTYzMDMgMy4wNTI1NCA4Ljc3MTk4IDMgOS4wMDE2NCAzQzkuMjMxMyAzIDkuNDQwMjYgMy4wNTI1NCA5LjYyODUgMy4xNTc2MkM5LjgxNjc1IDMuMjU5MTkgOS45NjU0NiAzLjM5NzU0IDEwLjA3NDYgMy41NzI2N0MxMC4xODc2IDMuNzQ3OCAxMC4yNDQxIDMuOTQyMTkgMTAuMjQ0MSA0LjE1NTg1QzEwLjI0NDEgNC4zNjk1IDEwLjE4NzYgNC41NjM5IDEwLjA3NDYgNC43MzkwM0M5Ljk2NTQ2IDQuOTE0MTUgOS44MTY3NSA1LjA1NDI2IDkuNjI4NSA1LjE1OTMzQzkuNDQwMjYgNS4yNjA5MSA5LjIzMTMgNS4zMTE2OSA5LjAwMTY0IDUuMzExNjlaIn0pfSl9ZnVuY3Rpb24gRTgoKXtyZXR1cm4gUSgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIyNiAxIDEyIDE0IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46USgicGF0aCIse2Q6Ik0zMy4yNDM3IDQuNTg0NTlDMzMuMDAwOCA0LjU4NDU5IDMyLjc4MTcgNC41MjcyOCAzMi41ODY2IDQuNDEyNjhDMzIuMzkxNSA0LjI5NDEyIDMyLjIzNDIgNC4xMzgwMSAzMi4xMTQ3IDMuOTQ0MzdDMzEuOTk5MiAzLjc0Njc3IDMxLjk0MTQgMy41Mjk0MSAzMS45NDE0IDMuMjkyMjlDMzEuOTQxNCAzLjA1MTIyIDMxLjk5OTIgMi44MzM4NyAzMi4xMTQ3IDIuNjQwMjJDMzIuMjM0MiAyLjQ0NjU3IDMyLjM5MTUgMi4yOTI0NSAzMi41ODY2IDIuMTc3ODRDMzIuNzgxNyAyLjA1OTI4IDMzLjAwMDggMiAzMy4yNDM3IDJDMzMuNDgyNiAyIDMzLjY5OTcgMi4wNTkyOCAzMy44OTQ4IDIuMTc3ODRDMzQuMDkzOSAyLjI5MjQ1IDM0LjI1MTIgMi40NDY1NyAzNC4zNjY3IDIuNjQwMjJDMzQuNDg2MiAyLjgzMzg3IDM0LjU0NTkgMy4wNTEyMiAzNC41NDU5IDMuMjkyMjlDMzQuNTQ1OSAzLjUyOTQxIDM0LjQ4NjIgMy43NDY3NyAzNC4zNjY3IDMuOTQ0MzdDMzQuMjUxMiA0LjEzODAxIDM0LjA5MzkgNC4yOTQxMiAzMy44OTQ4IDQuNDEyNjhDMzMuNjk5NyA0LjUyNzI4IDMzLjQ4MjYgNC41ODQ1OSAzMy4yNDM3IDQuNTg0NTlaTTMxLjIwMDcgOS43NDE5MUMzMS4wNzMzIDkuNjcwNzcgMzAuOTQxOSA5LjU5NTY4IDMwLjgwNjUgOS41MTY2NEMzMC42NzUgOS40Mzc2IDMwLjU1OTYgOS4zNDI3NiAzMC40NiA5LjIzMjFDMzAuMzYwNCA5LjExNzQ5IDMwLjI5MjcgOC45NzcyIDMwLjI1NjkgOC44MTEyMkMzMC4yMjUgOC42NDEyOCAzMC4yNDQ5IDguNDI5ODUgMzAuMzE2NiA4LjE3NjkzTDMwLjgwNjUgNi40ODE1M0MzMC44MzgzIDYuMzY2OTIgMzAuODE4NCA2LjI3OTk4IDMwLjc0NjcgNi4yMjA3QzMwLjY3OSA2LjE1NzQ3IDMwLjU5NzQgNi4xMjk4MSAzMC41MDE4IDYuMTM3NzFMMjkuNjU5NSA2LjE5Njk5TDI5LjQwMjcgNy45MjIwMkMyOS4zNzg4IDguMTA3NzcgMjkuMzE1MSA4LjI0NjA5IDI5LjIxMTUgOC4zMzY5OEMyOS4xMDggOC40Mjc4OCAyOC45NzI2IDguNDY1NDIgMjguODA1MyA4LjQ0OTYxQzI4LjY0MiA4LjQzMzggMjguNTE4NiA4LjM2NjYyIDI4LjQzNDkgOC4yNDgwNkMyOC4zNTEzIDguMTI5NSAyOC4zMjE0IDcuOTc3MzUgMjguMzQ1MyA3Ljc5MTYxTDI4LjYyNjEgNS42ODEyNkMyOC42NSA1LjUxMTMyIDI4LjcxNTcgNS4zNzQ5OCAyOC44MjMyIDUuMjcyMjNDMjguOTMwOCA1LjE2OTQ4IDI5LjA2ODEgNS4xMTIxNyAyOS4yMzU0IDUuMTAwMzJMMzEuMzMyMSA0Ljk1MjEyQzMxLjg4MTcgNC45MTI2IDMyLjMzNTcgNC45Njk5IDMyLjY5NDEgNS4xMjQwM0MzMy4wNTI1IDUuMjc4MTYgMzMuMzY3MSA1LjUzODk5IDMzLjYzNzkgNS45MDY1MkwzNC42NzE0IDcuMzIzM0wzNi4xNzA4IDYuNjY1M0MzNi4zMzggNi41OTAyMSAzNi40ODkzIDYuNTc0NCAzNi42MjQ4IDYuNjE3ODdDMzYuNzYwMiA2LjY1NzM5IDM2Ljg2NTcgNi43NTIyNCAzNi45NDE0IDYuOTAyNDJDMzcuMDEzIDcuMDUyNTkgMzcuMDE5IDcuMTk0ODYgMzYuOTU5MyA3LjMyOTIzQzM2LjkwMzUgNy40NjM2IDM2Ljc5MiA3LjU2ODMyIDM2LjYyNDggNy42NDM0MUwzNC43MzExIDguNDc5MjVDMzQuNjAzNyA4LjUzODUzIDM0LjQ3NDMgOC41NTAzOSAzNC4zNDI4IDguNTE0ODJDMzQuMjE1NCA4LjQ3NTMgMzQuMTEzOCA4LjQwMDIxIDM0LjAzODIgOC4yODk1NkwzMy4zODExIDcuMzM1MTZDMzMuMzEzNCA3LjI0MDMxIDMzLjIyOTggNy4xOTg4MSAzMy4xMzAyIDcuMjEwNjdDMzMuMDMwNiA3LjIyMjUzIDMyLjk2NDkgNy4yODM3OCAzMi45MzMxIDcuMzk0NDRMMzIuNDkxIDguOTI5NzhMMzQuNzMxMSAxMC4zODgxQzM0Ljg0MjYgMTAuNDU5MiAzNC45MjIzIDEwLjU1NiAzNC45NzAxIDEwLjY3ODVDMzUuMDE3OSAxMC44MDEgMzUuMDI5OCAxMC45MjU1IDM1LjAwNTkgMTEuMDUyQzM0Ljk4NiAxMS4xNzQ1IDM0LjkyODIgMTEuMjc1MyAzNC44MzI3IDExLjM1NDNMMzIuNzcxOCAxMy4wOTcxQzMyLjYwODUgMTMuMjM1NCAzMi40NDUyIDEzLjI5ODcgMzIuMjgxOSAxMy4yODY4QzMyLjEyMjYgMTMuMjc1IDMxLjk5MzIgMTMuMjEzNyAzMS44OTM3IDEzLjEwMzFDMzEuNzk4MSAxMi45OTY0IDMxLjc1NDMgMTIuODY1OSAzMS43NjIyIDEyLjcxMThDMzEuNzcwMiAxMi41NTM3IDMxLjg1MzggMTIuNDA3NSAzMi4wMTMxIDEyLjI3MzFMMzMuNDg4NiAxMS4wMTY0TDMxLjIwMDcgOS43NDE5MVpNMjcuMjA0NCAxNC44NjM3QzI3LjA4NDkgMTQuNzU3IDI3LjAxNzIgMTQuNjE4NiAyNy4wMDEzIDE0LjQ0ODdDMjYuOTg5MyAxNC4yNzg4IDI3LjA2MSAxNC4xMTY3IDI3LjIxNjMgMTMuOTYyNkwyOS4yMjM1IDExLjk3NjdMMjkuOTM0MyA5LjQ4MTA4QzMwLjA0MTggOS42MTU0NCAzMC4xNzUzIDkuNzQ1ODYgMzAuMzM0NSA5Ljg3MjMyQzMwLjQ5NzggOS45OTQ4MyAzMC42OTMgMTAuMTE3MyAzMC45MiAxMC4yMzk5TDMxLjExNzEgMTAuMzQ2NkwzMC4zMDQ3IDEyLjQzMzJDMzAuMjUyOSAxMi41NTU3IDMwLjIwOTEgMTIuNjQwNyAzMC4xNzMzIDEyLjY4ODFDMzAuMTQxNCAxMi43MzU1IDMwLjA4NTYgMTIuNzk4OCAzMC4wMDYgMTIuODc3OEwyOC4wNzA2IDE0Ljc4MDdDMjcuOTE5MiAxNC45MjY5IDI3Ljc2MzkgMTUgMjcuNjA0NiAxNUMyNy40NDkzIDE1IDI3LjMxNTkgMTQuOTU0NiAyNy4yMDQ0IDE0Ljg2MzdaIn0pfSl9ZnVuY3Rpb24gSTgoKXtyZXR1cm4gUSgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0OSAzIDE2IDEyIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46USgicGF0aCIse2Q6Ik01Ny4wMDI4IDExLjk0OUM1Ni44NDggMTEuOTQ5IDU2LjcxNzIgMTEuODk4NyA1Ni42MTAzIDExLjc5OEM1Ni41MDM1IDExLjY5MzkgNTYuNDUwMSAxMS41NzA3IDU2LjQ1MDEgMTEuNDI4NFY5LjAyODYzTDU0LjQyMTYgNy4xMDc3NkM1NC4yMjI3IDYuOTIwMzUgNTQuMDk1NSA2LjY5ODI1IDU0LjA0MDMgNi40NDE0NEM1My45ODUgNi4xODExNiA1NC4wMTA4IDUuOTI3ODIgNTQuMTE3NiA1LjY4MTQyQzU0LjIyODIgNS40Mzg0OSA1NC4zOTc3IDUuMjQ0MTQgNTQuNjI2MSA1LjA5ODM5QzU0Ljg1ODMgNC45NDkxNiA1NS4xMTYyIDQuODc0NTQgNTUuMzk5OSA0Ljg3NDU0SDU4LjExMzdDNTguNDIzMiA0Ljg3NDU0IDU4LjY4NDggNC45NzY5MiA1OC44OTg1IDUuMTgxNjhDNTkuMTE1OSA1LjM4Mjk2IDU5LjIyNDYgNS42MjkzNiA1OS4yMjQ2IDUuOTIwODdWNy43NjM2Nkg2MC44OTkzQzYxLjA1MDQgNy43NjM2NiA2MS4xNzk0IDcuODEzOTkgNjEuMjg2MiA3LjkxNDYzQzYxLjM5MzEgOC4wMTUyNyA2MS40NDY1IDguMTM4NDcgNjEuNDQ2NSA4LjI4NDIzQzYxLjQ0NjUgOC40MjY1MSA2MS4zOTMxIDguNTQ3OTggNjEuMjg2MiA4LjY0ODYyQzYxLjE3OTQgOC43NDkyNiA2MS4wNTA0IDguNzk5NTggNjAuODk5MyA4Ljc5OTU4SDU4LjY3MTlDNTguNTIwOSA4Ljc5OTU4IDU4LjM5MDEgOC43NDkyNiA1OC4yNzk1IDguNjQ4NjJDNTguMTcyNyA4LjU0Nzk4IDU4LjExOTIgOC40MjY1MSA1OC4xMTkyIDguMjg0MjNWNi45ODgwM0M1OC4xMTkyIDYuOTE4NjIgNTguMDk5IDYuODU0NDIgNTguMDU4NCA2Ljc5NTQyQzU4LjAxNzkgNi43MzI5NSA1Ny45NDQyIDYuNzAxNzIgNTcuODM3MyA2LjcwMTcySDU2LjA2MzJDNTUuOTkzMiA2LjcwMTcyIDU1Ljk0NTMgNi43Mjk0OCA1NS45MTk1IDYuNzg1MDFDNTUuODk3NCA2LjgzNzA2IDU1LjkwODQgNi44ODczOSA1NS45NTI2IDYuOTM1OTdMNTcuNDAwNyA4LjQ1NjAxQzU3LjUwMzkgOC41NjM2IDU3LjU1NTUgOC42ODE1OSA1Ny41NTU1IDguODA5OTlWMTEuNDI4NEM1Ny41NTU1IDExLjU3MDcgNTcuNTAwMiAxMS42OTM5IDU3LjM4OTcgMTEuNzk4QzU3LjI4MjggMTEuODk4NyA1Ny4xNTM4IDExLjk0OSA1Ny4wMDI4IDExLjk0OVpNNTMuMDAxMiAxNEM1Mi41ODQ4IDE0IDUyLjE5NDIgMTMuOTI3MSA1MS44Mjk1IDEzLjc4MTRDNTEuNDY4NCAxMy42MzU2IDUxLjE0OTYgMTMuNDMyNiA1MC44NzMzIDEzLjE3MjNDNTAuNjAwNiAxMi45MTIgNTAuMzg2OSAxMi42MTE4IDUwLjIzMjEgMTIuMjcxN0M1MC4wNzc0IDExLjkyODIgNTAgMTEuNTYwMyA1MCAxMS4xNjgxQzUwIDEwLjc3NiA1MC4wNzc0IDEwLjQwOTkgNTAuMjMyMSAxMC4wNjk4QzUwLjM4NjkgOS43MjYxOCA1MC42MDA2IDkuNDI0MjYgNTAuODczMyA5LjE2Mzk4QzUxLjE0OTYgOC45MDM3IDUxLjQ2ODQgOC43MDA2OCA1MS44Mjk1IDguNTU0OTJDNTIuMTk0MiA4LjQwOTE2IDUyLjU4NDggOC4zMzYyOCA1My4wMDEyIDguMzM2MjhDNTMuNDIxMiA4LjMzNjI4IDUzLjgxMTggOC40MDkxNiA1NC4xNzI5IDguNTU0OTJDNTQuNTM3NyA4LjcwMDY4IDU0Ljg1NjQgOC45MDM3IDU1LjEyOTEgOS4xNjM5OEM1NS40MDU0IDkuNDI0MjYgNTUuNjIxIDkuNzI2MTggNTUuNzc1OCAxMC4wNjk4QzU1LjkzMDUgMTAuNDA5OSA1Ni4wMDc5IDEwLjc3NiA1Ni4wMDc5IDExLjE2ODFDNTYuMDA3OSAxMS41NjAzIDU1LjkzMDUgMTEuOTI4MiA1NS43NzU4IDEyLjI3MTdDNTUuNjIxIDEyLjYxMTggNTUuNDA1NCAxMi45MTIgNTUuMTI5MSAxMy4xNzIzQzU0Ljg1NjQgMTMuNDMyNiA1NC41Mzc3IDEzLjYzNTYgNTQuMTcyOSAxMy43ODE0QzUzLjgxMTggMTMuOTI3MSA1My40MjEyIDE0IDUzLjAwMTIgMTRaTTUzLjAwMTIgMTMuMjY2QzUzLjQxMDIgMTMuMjY2IDUzLjc4MjMgMTMuMTcwNiA1NC4xMTc2IDEyLjk3OTdDNTQuNDU2NiAxMi43OTIzIDU0LjcyNTYgMTIuNTQwNyA1NC45MjQ2IDEyLjIyNDlDNTUuMTI3MyAxMS45MDU2IDU1LjIyODYgMTEuNTUzNCA1NS4yMjg2IDExLjE2ODFDNTUuMjI4NiAxMC43ODI5IDU1LjEyNzMgMTAuNDMyNCA1NC45MjQ2IDEwLjExNjZDNTQuNzI1NiA5Ljc5NzMzIDU0LjQ1NjYgOS41NDM5OSA1NC4xMTc2IDkuMzU2NTlDNTMuNzgyMyA5LjE2NTcxIDUzLjQxMDIgOS4wNzAyOCA1My4wMDEyIDkuMDcwMjhDNTIuNTk1OSA5LjA3MDI4IDUyLjIyMzcgOS4xNjU3MSA1MS44ODQ3IDkuMzU2NTlDNTEuNTQ5NCA5LjU0Mzk5IDUxLjI4MDQgOS43OTczMyA1MS4wNzc4IDEwLjExNjZDNTAuODc4OCAxMC40MzI0IDUwLjc3OTMgMTAuNzgyOSA1MC43NzkzIDExLjE2ODFDNTAuNzc5MyAxMS41NTM0IDUwLjg3ODggMTEuOTA1NiA1MS4wNzc4IDEyLjIyNDlDNTEuMjgwNCAxMi41NDA3IDUxLjU0OTQgMTIuNzkyMyA1MS44ODQ3IDEyLjk3OTdDNTIuMjIzNyAxMy4xNzA2IDUyLjU5NTkgMTMuMjY2IDUzLjAwMTIgMTMuMjY2Wk02Mi40ODAxIDkuNjExNjZDNjIuMzYyMiA5LjUxNDQ5IDYyLjMwMTQgOS40MTU1OCA2Mi4yOTc3IDkuMzE0OTRDNjIuMjk3NyA5LjIxMDgzIDYyLjMzMDggOS4xMjQwNyA2Mi4zOTcyIDkuMDU0NjZDNjIuNDY3MiA4Ljk4NTI1IDYyLjU1MzggOC45NDUzNCA2Mi42NTY5IDguOTM0OTNDNjIuNzYzOCA4LjkyMTA1IDYyLjg2ODggOC45NTU3NSA2Mi45NzIgOS4wMzkwNEM2My4yODg5IDkuMzAyNzkgNjMuNTM5NCA5LjYxNjg3IDYzLjcyMzYgOS45ODEyNkM2My45MDc5IDEwLjM0NTcgNjQgMTAuNzQxMyA2NCAxMS4xNjgxQzY0IDExLjU2MDMgNjMuOTIyNiAxMS45MjgyIDYzLjc2NzkgMTIuMjcxN0M2My42MTMxIDEyLjYxMTggNjMuMzk3NiAxMi45MTIgNjMuMTIxMiAxMy4xNzIzQzYyLjg0ODUgMTMuNDMyNiA2Mi41Mjk4IDEzLjYzNTYgNjIuMTY1IDEzLjc4MTRDNjEuODAzOSAxMy45MjcxIDYxLjQxNTIgMTQgNjAuOTk4OCAxNEM2MC41ODI0IDE0IDYwLjE5MTkgMTMuOTI3MSA1OS44MjcxIDEzLjc4MTRDNTkuNDYyMyAxMy42MzU2IDU5LjE0MTcgMTMuNDMyNiA1OC44NjU0IDEzLjE3MjNDNTguNTkyNyAxMi45MTIgNTguMzc5IDEyLjYxMTggNTguMjI0MiAxMi4yNzE3QzU4LjA2OTUgMTEuOTI4MiA1Ny45OTIxIDExLjU2MDMgNTcuOTkyMSAxMS4xNjgxQzU3Ljk5MjEgMTAuOTYzNCA1OC4wMTQyIDEwLjc2NTYgNTguMDU4NCAxMC41NzQ3QzU4LjEwNjMgMTAuMzgwNCA1OC4xNzI3IDEwLjE5MyA1OC4yNTc0IDEwLjAxMjVDNTguMzA5IDkuOTAxNDQgNTguMzgwOCA5LjgzMDMgNTguNDczIDkuNzk5MDZDNTguNTY4OCA5Ljc2NDM2IDU4LjY2MjcgOS43NjQzNiA1OC43NTQ4IDkuNzk5MDZDNTguODUwNiA5LjgzMDMgNTguOTIyNSA5Ljg5Mjc2IDU4Ljk3MDQgOS45ODY0N0M1OS4wMTgzIDEwLjA4MDIgNTkuMDEwOSAxMC4xOTgyIDU4Ljk0ODMgMTAuMzQwNEM1OC44MzA0IDEwLjYwMDcgNTguNzcxNCAxMC44NzY2IDU4Ljc3MTQgMTEuMTY4MUM1OC43NzE0IDExLjU1MzQgNTguODcwOSAxMS45MDU2IDU5LjA2OTkgMTIuMjI0OUM1OS4yNzI1IDEyLjU0MDcgNTkuNTQxNSAxMi43OTIzIDU5Ljg3NjggMTIuOTc5N0M2MC4yMTU4IDEzLjE3MDYgNjAuNTg5OCAxMy4yNjYgNjAuOTk4OCAxMy4yNjZDNjEuNDA3OCAxMy4yNjYgNjEuNzggMTMuMTcwNiA2Mi4xMTUzIDEyLjk3OTdDNjIuNDUwNiAxMi43OTIzIDYyLjcxNzcgMTIuNTQwNyA2Mi45MTY3IDEyLjIyNDlDNjMuMTE5NCAxMS45MDU2IDYzLjIyMDcgMTEuNTUzNCA2My4yMjA3IDExLjE2ODFDNjMuMjIwNyAxMC44NTkzIDYzLjE1MjUgMTAuNTcxMiA2My4wMTYyIDEwLjMwNEM2Mi44ODM1IDEwLjAzMzMgNjIuNzA0OCA5LjgwMjUzIDYyLjQ4MDEgOS42MTE2NlpNNjAuOTk4OCA2LjI3NDg2QzYwLjc3NCA2LjI3NDg2IDYwLjU2OTUgNi4yMjQ1NCA2MC4zODUzIDYuMTIzODlDNjAuMjAxMSA2LjAxOTc4IDYwLjA1MzcgNS44ODI3IDU5Ljk0MzIgNS43MTI2NUM1OS44MzYzIDUuNTM5MTMgNTkuNzgyOSA1LjM0NjUyIDU5Ljc4MjkgNS4xMzQ4M0M1OS43ODI5IDQuOTI2NiA1OS44MzYzIDQuNzM3NDYgNTkuOTQzMiA0LjU2NzQxQzYwLjA1MzcgNC4zOTM4OSA2MC4yMDExIDQuMjU2ODEgNjAuMzg1MyA0LjE1NjE3QzYwLjU2OTUgNC4wNTIwNiA2MC43NzQgNCA2MC45OTg4IDRDNjEuMjE5OSA0IDYxLjQyMDcgNC4wNTIwNiA2MS42MDEzIDQuMTU2MTdDNjEuNzgxOCA0LjI1NjgxIDYxLjkyNTUgNC4zOTM4OSA2Mi4wMzI0IDQuNTY3NDFDNjIuMTQyOSA0LjczNzQ2IDYyLjE5ODIgNC45MjY2IDYyLjE5ODIgNS4xMzQ4M0M2Mi4xOTgyIDUuMzQ2NTIgNjIuMTQyOSA1LjUzOTEzIDYyLjAzMjQgNS43MTI2NUM2MS45MjU1IDUuODgyNyA2MS43ODE4IDYuMDE5NzggNjEuNjAxMyA2LjEyMzg5QzYxLjQyMDcgNi4yMjQ1NCA2MS4yMTk5IDYuMjc0ODYgNjAuOTk4OCA2LjI3NDg2WiJ9KX0pfWZ1bmN0aW9uIGI4KCl7cmV0dXJuIFEoInN2ZyIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNzAgNSAxOCA5IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46USgicGF0aCIse2Q6Ik04NS41NzIgMTIuMTAzOEM4Ni4wNiAxMi4xMDM4IDg2LjQyMDcgMTEuOTg5MiA4Ni42NTQyIDExLjc2MDFDODYuODg0NyAxMS41MjgxIDg3IDExLjE2NDEgODcgMTAuNjY4MVYxMC4xMTEyQzg3IDkuNzY5MDEgODYuOTIwNyA5LjQ2MzAyIDg2Ljc2MiA5LjE5MzI5Qzg2LjYwMzMgOC45MjA2NSA4Ni4zNzU4IDguNjk3MzMgODYuMDc5NCA4LjUyMzMxQzg1Ljc4MDEgOC4zNDkyOSA4NS40MjIzIDguMjM3NjIgODUuMDA2MiA4LjE4ODMyTDgzLjAxNjggNy45NTMzOUw4MS4xOTgxIDYuODQ4MzVDODAuOTIyNyA2LjY4MDEzIDgwLjY2MDggNi41NDIzNyA4MC40MTIzIDYuNDM1MDVDODAuMTYwOCA2LjMyNDg0IDc5Ljg5NzQgNi4yMzc4MyA3OS42MjE5IDYuMTc0MDJDNzkuMzQ2NSA2LjExMDIxIDc5LjAzODIgNi4wNjUyNiA3OC42OTY5IDYuMDM5MTVDNzguMzUyNiA2LjAxMzA1IDc3Ljk1MTQgNiA3Ny40OTM0IDZINzYuODEwOEM3Ni4zODg3IDYgNzUuOTk1IDYuMDQ5MzEgNzUuNjI5OCA2LjE0NzkyQzc1LjI2MTYgNi4yNDM2MyA3NC45MTg4IDYuMzcxMjUgNzQuNjAxNSA2LjUzMDc2Qzc0LjI4MTEgNi42OTAyOCA3My45ODYyIDYuODY1NzYgNzMuNzE2OCA3LjA1NzE4QzczLjQ0NDQgNy4yNDg2IDczLjE5NTkgNy40MzcxMiA3Mi45NzE0IDcuNjIyNzVMNzIuMjU3NCA3Ljg1MzMzQzcxLjgzMjMgNy45ODY3NCA3MS41MTY0IDguMTgzOTcgNzEuMzA5OSA4LjQ0NUM3MS4xMDMzIDguNzAzMTMgNzEgOS4wMzM3NyA3MSA5LjQzNjkyVjEwLjY0MkM3MSAxMS4xNDY3IDcxLjExNTMgMTEuNTE2NSA3MS4zNDU4IDExLjc1MTRDNzEuNTc2MyAxMS45ODYzIDcxLjkzNyAxMi4xMDM4IDcyLjQyOCAxMi4xMDM4SDcyLjcxNTRDNzIuNzAwNCAxMi4wMzcxIDcyLjY4ODUgMTEuOTcwNCA3Mi42Nzk1IDExLjkwMzdDNzIuNjcwNSAxMS44MzQxIDcyLjY2NiAxMS43NjQ1IDcyLjY2NiAxMS42OTQ4QzcyLjY2NiAxMS4zNTU1IDcyLjc0OTggMTEuMDQ5NSA3Mi45MTc1IDEwLjc3NjlDNzMuMDg1MSAxMC41MDQyIDczLjMxMTIgMTAuMjg4MiA3My41OTU2IDEwLjEyODdDNzMuODc3IDkuOTY2MjMgNzQuMTkyOCA5Ljg4NTAyIDc0LjU0MzEgOS44ODUwMkM3NC44OTA0IDkuODg1MDIgNzUuMjA2MiA5Ljk2NjIzIDc1LjQ5MDYgMTAuMTI4N0M3NS43NzIgMTAuMjg4MiA3NS45OTY1IDEwLjUwNDIgNzYuMTY0MiAxMC43NzY5Qzc2LjMzMTggMTEuMDQ5NSA3Ni40MTU3IDExLjM1NTUgNzYuNDE1NyAxMS42OTQ4Qzc2LjQxNTcgMTEuNzY0NSA3Ni40MTEyIDExLjgzNDEgNzYuNDAyMiAxMS45MDM3Qzc2LjM5MzIgMTEuOTcwNCA3Ni4zODI3IDEyLjAzNzEgNzYuMzcwOCAxMi4xMDM4SDgxLjYzODJDODEuNjIwMyAxMi4wMzcxIDgxLjYwODMgMTEuOTcwNCA4MS42MDIzIDExLjkwMzdDODEuNTkzMyAxMS44MzQxIDgxLjU4ODggMTEuNzY0NSA4MS41ODg4IDExLjY5NDhDODEuNTg4OCAxMS4zNTU1IDgxLjY3MjcgMTEuMDQ5NSA4MS44NDAzIDEwLjc3NjlDODIuMDA1IDEwLjUwNDIgODIuMjI5NSAxMC4yODgyIDgyLjUxMzkgMTAuMTI4N0M4Mi43OTUzIDkuOTY2MjMgODMuMTExMSA5Ljg4NTAyIDgzLjQ2MTQgOS44ODUwMkM4My44MTE3IDkuODg1MDIgODQuMTI5IDkuOTY2MjMgODQuNDEzNCAxMC4xMjg3Qzg0LjY5NDggMTAuMjg4MiA4NC45MTk0IDEwLjUwNDIgODUuMDg3IDEwLjc3NjlDODUuMjUxNyAxMS4wNDk1IDg1LjMzNCAxMS4zNTU1IDg1LjMzNCAxMS42OTQ4Qzg1LjMzNCAxMS43NjQ1IDg1LjMzMSAxMS44MzQxIDg1LjMyNSAxMS45MDM3Qzg1LjMxNiAxMS45NzA0IDg1LjMwNDEgMTIuMDM3MSA4NS4yODkxIDEyLjEwMzhIODUuNTcyWk04My40NjE0IDEzQzgzLjcxMjkgMTMgODMuOTQwNCAxMi45NDIgODQuMTQ0IDEyLjgyNkM4NC4zNDc2IDEyLjcxIDg0LjUwOTIgMTIuNTUzMyA4NC42MjkgMTIuMzU2MUM4NC43NDg3IDEyLjE1ODkgODQuODA4NiAxMS45Mzg1IDg0LjgwODYgMTEuNjk0OEM4NC44MDg2IDExLjQ1MTIgODQuNzQ4NyAxMS4yMzA4IDg0LjYyOSAxMS4wMzM2Qzg0LjUwOTIgMTAuODM2MyA4NC4zNDc2IDEwLjY3OTcgODQuMTQ0IDEwLjU2MzdDODMuOTQwNCAxMC40NDc3IDgzLjcxMjkgMTAuMzg5NyA4My40NjE0IDEwLjM4OTdDODMuMjA2OSAxMC4zODk3IDgyLjk3NzkgMTAuNDQ3NyA4Mi43NzQzIDEwLjU2MzdDODIuNTcwOCAxMC42Nzk3IDgyLjQwOTEgMTAuODM2MyA4Mi4yODk0IDExLjAzMzZDODIuMTY5NiAxMS4yMzA4IDgyLjEwOTcgMTEuNDUxMiA4Mi4xMDk3IDExLjY5NDhDODIuMTA5NyAxMS45Mzg1IDgyLjE2OTYgMTIuMTU4OSA4Mi4yODk0IDEyLjM1NjFDODIuNDA5MSAxMi41NTMzIDgyLjU3MDggMTIuNzEgODIuNzc0MyAxMi44MjZDODIuOTc3OSAxMi45NDIgODMuMjA2OSAxMyA4My40NjE0IDEzWk03NC41NDMxIDEzQzc0Ljc5NDYgMTMgNzUuMDIyMSAxMi45NDIgNzUuMjI1NyAxMi44MjZDNzUuNDI5MiAxMi43MSA3NS41OTA5IDEyLjU1MzMgNzUuNzEwNiAxMi4zNTYxQzc1LjgzMDQgMTIuMTU4OSA3NS44OTAzIDExLjkzODUgNzUuODkwMyAxMS42OTQ4Qzc1Ljg5MDMgMTEuNDUxMiA3NS44MzA0IDExLjIzMDggNzUuNzEwNiAxMS4wMzM2Qzc1LjU5MDkgMTAuODM2MyA3NS40MjkyIDEwLjY3OTcgNzUuMjI1NyAxMC41NjM3Qzc1LjAyMjEgMTAuNDQ3NyA3NC43OTQ2IDEwLjM4OTcgNzQuNTQzMSAxMC4zODk3Qzc0LjI4ODYgMTAuMzg5NyA3NC4wNTk2IDEwLjQ0NzcgNzMuODU2IDEwLjU2MzdDNzMuNjUyNCAxMC42Nzk3IDczLjQ5MDggMTAuODM2MyA3My4zNzEgMTEuMDMzNkM3My4yNTEzIDExLjIzMDggNzMuMTkxNCAxMS40NTEyIDczLjE5MTQgMTEuNjk0OEM3My4xOTE0IDExLjkzODUgNzMuMjUxMyAxMi4xNTg5IDczLjM3MSAxMi4zNTYxQzczLjQ5MDggMTIuNTUzMyA3My42NTI0IDEyLjcxIDczLjg1NiAxMi44MjZDNzQuMDU5NiAxMi45NDIgNzQuMjg4NiAxMyA3NC41NDMxIDEzWiJ9KX0pfWZ1bmN0aW9uIHQwKHtzaXplOiQ9MTgsc3Ryb2tlV2lkdGg6Sz0yfSl7cmV0dXJuIFEoZDUse3NpemU6JCxzdHJva2VXaWR0aDpLfSl9dmFyIGQ5PSJBY2Nlc3NpYmlsaXR5IHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiI7ZnVuY3Rpb24geDIoJCl7cmV0dXJuICQ/LmVycm9ycz8uaW5jbHVkZXMoZDkpPz8hMX1mdW5jdGlvbiBSMigkLEspe2lmKCQ9PT1LKXJldHVybiEwO2lmKCQuaWQhPT1LLmlkfHwkLnBhdGghPT1LLnBhdGh8fCQubGFiZWwhPT1LLmxhYmVsfHwkLnZhbHVlIT09Sy52YWx1ZXx8JC5yb2xlIT09Sy5yb2xlfHwkLnR5cGUhPT1LLnR5cGV8fCQuZW5hYmxlZCE9PUsuZW5hYmxlZClyZXR1cm4hMTtsZXQgSj0kLmZyYW1lLFo9Sy5mcmFtZTtyZXR1cm4gSj09PVp8fEoueD09PVoueCYmSi55PT09Wi55JiZKLndpZHRoPT09Wi53aWR0aCYmSi5oZWlnaHQ9PT1aLmhlaWdodH1mdW5jdGlvbiB2MigkLEspe2xldCBKPSQubGFiZWx8fCQucm9sZXx8YGVsZW1lbnQgJHtLKzF9YCxaPSQucm9sZXx8JC50eXBlO3JldHVybntpZDokLmlkLHBhdGg6JC5wYXRoLGxhYmVsOkosdmFsdWU6JC52YWx1ZSxyb2xlOlosdHlwZTokLnR5cGUsZW5hYmxlZDokLmVuYWJsZWQsZnJhbWU6JC5mcmFtZX19ZnVuY3Rpb24gYzkoJCxLKXtsZXQgSj1NYXRoLm1heCgwLCQueCksWj1NYXRoLm1heCgwLCQueSksWD1NYXRoLm1pbihLLndpZHRoLCQueCskLndpZHRoKSxZPU1hdGgubWluKEsuaGVpZ2h0LCQueSskLmhlaWdodCkscT1NYXRoLm1heCgwLFgtSiksVj1NYXRoLm1heCgwLFktWik7cmV0dXJuIHE+MCYmVj4wP3t4OkoseTpaLHdpZHRoOnEsaGVpZ2h0OlZ9Om51bGx9ZnVuY3Rpb24gZDAoJCl7cmV0dXJuICQuaWR9ZnVuY3Rpb24geTgoJCl7cmV0dXJuYCR7JC54fSwkeyQueX0gJHskLndpZHRofXgkeyQuaGVpZ2h0fWB9ZnVuY3Rpb24gcjkoJCl7cmV0dXJuW2BBWCBsYWJlbDogJHskLmxhYmVsfHwiVW5sYWJlbGVkIn1gLCQucm9sZT9gcm9sZTogJHskLnJvbGV9YDoiIiwkLnR5cGU/YHR5cGU6ICR7JC50eXBlfWA6IiIsJC52YWx1ZT9gdmFsdWU6ICR7JC52YWx1ZX1gOiIiLCQuaWQ/YGlkOiAkeyQuaWR9YDoiIixgcGF0aDogJHskLnBhdGh9YCxgZnJhbWU6ICR7eTgoJC5mcmFtZSl9YF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIjsgIil9ZnVuY3Rpb24gZTAoJCl7cmV0dXJuICQmJnR5cGVvZiAkLmRldmljZT09PSJzdHJpbmciJiZ0eXBlb2YgJC51cmw9PT0ic3RyaW5nIj8kOm51bGx9ZnVuY3Rpb24gbTEoJCl7bGV0IEo9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYmFzZVBhdGg/Pyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC8rJC8sIiIpfHwiLyIpO3JldHVybiBKPT09Ii8iP2AvJHskfWA6YCR7Sn0vJHskfWB9dmFyIGUkPTUwMDAsJEs9MjAwMCxKMj1udWxsLFM4PW51bGwsS0s9MSxKSz0xLEw1PW5ldyBNYXAsVTU9bmV3IE1hcDtmdW5jdGlvbiBRSygpe2xldCAkPW5ldyBVUkwobTEoImV4ZWMtd3MiKSx3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuICQucHJvdG9jb2w9JC5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IiwkLnRvU3RyaW5nKCl9ZnVuY3Rpb24gWksoJCl7Zm9yKGxldCBLIG9mIEw1LnZhbHVlcygpKUsucmVqZWN0KCQpO0w1LmNsZWFyKCl9ZnVuY3Rpb24gbzkoKXtyZXR1cm4gSjI/Pz1uZXcgUHJvbWlzZSgoJCxLKT0+e2xldCBKPSExLFo7dHJ5e1o9bmV3IFdlYlNvY2tldChRSygpKX1jYXRjaChxKXtKMj1udWxsLEsocSk7cmV0dXJufWxldCBYPXNldFRpbWVvdXQoKCk9PntpZighSilKPSEwLEoyPW51bGwsSyhFcnJvcigiY29udHJvbCBzb2NrZXQgY29ubmVjdCB0aW1lb3V0IikpLFouY2xvc2UoKX0sZSQpO1oub25vcGVuPSgpPT57Wi5zZW5kKEpTT04uc3RyaW5naWZ5KHt0b2tlbjp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4/PyIifSkpfSxaLm9ubWVzc2FnZT0ocSk9PntsZXQgVjt0cnl7Vj1KU09OLnBhcnNlKFN0cmluZyhxLmRhdGEpKX1jYXRjaHtyZXR1cm59aWYoVi5yZWFkeSl7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoWCksUzg9WiwkKFopO3JldHVybn1pZih0eXBlb2YgVi5zdWI9PT0ibnVtYmVyIil7bGV0IEI9VTUuZ2V0KFYuc3ViKTtpZighQilyZXR1cm47aWYoVi5lbmQpVTUuZGVsZXRlKFYuc3ViKSxCLm9uRW5kKCk7ZWxzZSBpZih0eXBlb2YgVi5kYXRhPT09InN0cmluZyIpQi5vbkRhdGEoVi5kYXRhKTtyZXR1cm59aWYodHlwZW9mIFYuaWQhPT0ibnVtYmVyIilyZXR1cm47bGV0IE49TDUuZ2V0KFYuaWQpO2lmKCFOKXJldHVybjtMNS5kZWxldGUoVi5pZCksTi5yZXNvbHZlKFYpfTtsZXQgWT0oKT0+e0oyPW51bGwsUzg9bnVsbDtsZXQgcT1FcnJvcigiY29udHJvbCBzb2NrZXQgY2xvc2VkIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpO1pLKHEpO2xldCBWPVsuLi5VNS52YWx1ZXMoKV07VTUuY2xlYXIoKTtmb3IobGV0IE4gb2YgVilOLm9uRW5kKCk7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoWCksSyhxKX07Wi5vbmVycm9yPVksWi5vbmNsb3NlPVl9KSxKMn1hc3luYyBmdW5jdGlvbiBuOSgkLEspe2xldCBKPWF3YWl0IG85KCk7aWYoSi5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pdGhyb3cgRXJyb3IoImNvbnRyb2wgc29ja2V0IG5vdCBvcGVuIik7cmV0dXJuIG5ldyBQcm9taXNlKChaLFgpPT57bGV0IFk9S0srKyxxPSgpPT57TDUuZGVsZXRlKFkpLFgoSz8ucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX07aWYoSyl7aWYoSy5hYm9ydGVkKXtxKCk7cmV0dXJufUsuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX1MNS5zZXQoWSx7cmVzb2x2ZTooVik9PntLPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWihWKX0scmVqZWN0OihWKT0+e0s/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxYKFYpfX0pLEouc2VuZChKU09OLnN0cmluZ2lmeSh7aWQ6WSwuLi4kfSkpfSl9YXN5bmMgZnVuY3Rpb24gRTEoJCxLKXtsZXQgSj1hd2FpdCBuOSh7Y29tbWFuZDokfSxLPy5zaWduYWwpO3JldHVybntzdGRvdXQ6Si5zdGRvdXQ/PyIiLHN0ZGVycjpKLnN0ZGVycj8/IiIsZXhpdENvZGU6Si5leGl0Q29kZT8/MX19YXN5bmMgZnVuY3Rpb24geDgoJCxLKXtsZXQgSj1hd2FpdCBuOSh7dWk6JH0sSz8uc2lnbmFsKTtpZihKLmVycm9yKXRocm93IEVycm9yKEouZXJyb3IpO3JldHVybiBKLnN0YXR1cz8/bnVsbH1mdW5jdGlvbiAkNSgkKXtsZXQgSz17b25tZXNzYWdlOm51bGwsb25lcnJvcjpudWxsLGNsb3NlOigpPT57fX0sSj0hMSxaPW51bGwsWD1udWxsLFk9IiIscT0oQik9PntZKz1CLnJlcGxhY2UoL1xyXG4vZyxgCmApO2xldCB6O3doaWxlKCh6PVkuaW5kZXhPZihgCgpgKSkhPT0tMSl7bGV0IEc9WS5zbGljZSgwLHopO1k9WS5zbGljZSh6KzIpO2xldCBDPUcuc3BsaXQoYApgKS5maWx0ZXIoKFUpPT5VLnN0YXJ0c1dpdGgoImRhdGE6IikpLm1hcCgoVSk9PlUuc2xpY2UoNSkucmVwbGFjZSgvXiAvLCIiKSkuam9pbihgCmApO2lmKEMpSy5vbm1lc3NhZ2U/Lih7ZGF0YTpDfSl9fSxWPSgpPT57aWYoSnx8WClyZXR1cm47Sy5vbmVycm9yPy4oKSxYPXNldFRpbWVvdXQoKCk9PntYPW51bGwsTigpfSwkSyl9LE49YXN5bmMoKT0+e2lmKEopcmV0dXJuO3RyeXtsZXQgQj1hd2FpdCBvOSgpO2lmKEopcmV0dXJuO1k9IiIsWj1KSysrLFU1LnNldChaLHtvbkRhdGE6cSxvbkVuZDpWfSksQi5zZW5kKEpTT04uc3RyaW5naWZ5KHtzdWI6WixwYXRoOiR9KSl9Y2F0Y2h7VigpfX07cmV0dXJuIE4oKSxLLmNsb3NlPSgpPT57aWYoSj0hMCxYKWNsZWFyVGltZW91dChYKTtpZihaIT09bnVsbCl7VTUuZGVsZXRlKFopO3RyeXtTOD8uc2VuZChKU09OLnN0cmluZ2lmeSh7dW5zdWI6Wn0pKX1jYXRjaHt9Wj1udWxsfX0sS31mdW5jdGlvbiBNMSgkKXtyZXR1cm5gJyR7JC5yZXBsYWNlKC8nL2csIidcXCcnIil9J2B9ZnVuY3Rpb24gaTkoJCl7bGV0W0ssSl09TShudWxsKSxbWixYXT1NKCJBWCBvZmYiKTtyZXR1cm4gRSgoKT0+e2lmKCEkKXtKKG51bGwpLFgoIkFYIG9mZiIpO3JldHVybn1KKG51bGwpLFgoIkFYIHdhaXRpbmciKTtsZXQgWT0kNSgkKTtyZXR1cm4gWS5vbm1lc3NhZ2U9KHEpPT57dHJ5e2xldCBWPUpTT04ucGFyc2UocS5kYXRhKTtKKFYpLFgoeDIoVik/IkFYIHVuYXZhaWxhYmxlIjpgJHtWLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtYKCJBWCBwYXJzZSBlcnJvciIpfX0sWS5vbmVycm9yPSgpPT57WCgiQVggcmVjb25uZWN0aW5nIil9LCgpPT5ZLmNsb3NlKCl9LFskXSkse3NuYXBzaG90Okssc3RhdHVzOlp9fXZhciBSOD1IMCh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSx2OD1IMChudWxsKTtmdW5jdGlvbiBDNSgpe3JldHVybiBrMChSOCl9ZnVuY3Rpb24gajIoKXtsZXQgJD1rMCh2OCk7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9ZnVuY3Rpb24gYTkoJCxLKXtyZXR1cm57eDokLngqMy9LLndpZHRoLHk6JC55KjMvSy5oZWlnaHQsd2lkdGg6JC53aWR0aCozL0sud2lkdGgsaGVpZ2h0OiQuaGVpZ2h0KjMvSy5oZWlnaHR9fXZhciBzOT1pMChmdW5jdGlvbih7ZWxlbWVudDpLLGluZGV4Okosc2NyZWVuOlosaGlnaGxpZ2h0ZWQ6WCxzZWxlY3RlZDpZLG9uSGlnaGxpZ2h0OnEsb25TZWxlY3Q6Vn0pe2xldCBOPWQwKEspLEI9djIoSyxKKSx6PWM5KEsuZnJhbWUsWik7aWYoIXopcmV0dXJuIG51bGw7bGV0IEc9cjkoQik7cmV0dXJuIFEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImRhdGEtYXgta2V5IjpOLCJkYXRhLWF4LWlkIjpCLmlkLCJkYXRhLWF4LXBhdGgiOkIucGF0aCwiZGF0YS1heC1sYWJlbCI6Qi5sYWJlbCwiZGF0YS1heC12YWx1ZSI6Qi52YWx1ZSwiZGF0YS1heC1yb2xlIjpCLnJvbGUsImRhdGEtYXgtdHlwZSI6Qi50eXBlLCJkYXRhLWF4LWVuYWJsZWQiOlN0cmluZyhCLmVuYWJsZWQpLCJkYXRhLWF4LWZyYW1lIjp5OChCLmZyYW1lKSwiZGF0YS1heC1zZWxlY3RlZCI6U3RyaW5nKFkpLCJhcmlhLWxhYmVsIjpLLmxhYmVsfHxHLHRpdGxlOkcsb25DbGljazooKT0+VihOKSxvbk1vdXNlRW50ZXI6KCk9PnEoTiksb25Nb3VzZUxlYXZlOigpPT5xKG51bGwpLGNsYXNzTmFtZToiYWJzb2x1dGUgYm94LWJvcmRlciBtaW4tdy1weCBtaW4taC1weCBwLTAgcm91bmRlZC1bM3B4XSBib3JkZXIgY3Vyc29yLXBvaW50ZXIgcG9pbnRlci1ldmVudHMtYXV0byIsc3R5bGU6e2xlZnQ6YCR7ei54L1oud2lkdGgqMTAwfSVgLHRvcDpgJHt6LnkvWi5oZWlnaHQqMTAwfSVgLHdpZHRoOmAke3oud2lkdGgvWi53aWR0aCoxMDB9JWAsaGVpZ2h0OmAke3ouaGVpZ2h0L1ouaGVpZ2h0KjEwMH0lYCxib3JkZXJDb2xvcjpZPyIjNjBhNWZhIjpYPyIjZmJiZjI0IjoiIzM0ZDM5OSIsYmFja2dyb3VuZDpZPyJyZ2JhKDk2LDE2NSwyNTAsMC4yNCkiOlg/InJnYmEoMjQ1LDE1OCwxMSwwLjI4KSI6InJnYmEoMTYsMTg1LDEyOSwwLjEyKSJ9fSl9LCgkLEspPT4kLmluZGV4PT09Sy5pbmRleCYmJC5oaWdobGlnaHRlZD09PUsuaGlnaGxpZ2h0ZWQmJiQuc2VsZWN0ZWQ9PT1LLnNlbGVjdGVkJiYkLm9uSGlnaGxpZ2h0PT09Sy5vbkhpZ2hsaWdodCYmJC5vblNlbGVjdD09PUsub25TZWxlY3QmJiQuc2NyZWVuLndpZHRoPT09Sy5zY3JlZW4ud2lkdGgmJiQuc2NyZWVuLmhlaWdodD09PUsuc2NyZWVuLmhlaWdodCYmUjIoJC5lbGVtZW50LEsuZWxlbWVudCkpO2Z1bmN0aW9uIGo4KHtwcm9qZWN0aW9uOiQsc2NyZWVuQ29uZmlnOkt9PXt9KXtsZXR7c25hcHNob3Q6Sn09QzUoKSx7aGlnaGxpZ2h0ZWRLZXk6WixzZWxlY3RlZEtleTpYLHNldEhpZ2hsaWdodGVkS2V5Olksc2V0U2VsZWN0ZWRLZXk6cX09ajIoKTtpZighSj8uc2NyZWVuLndpZHRofHwhSj8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtpZigkJiZLKXJldHVybiBRKCJzdmciLHt2aWV3Qm94OiIwIDAgMSAxIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIixjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgdy1mdWxsIGgtZnVsbCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOkouZWxlbWVudHMubWFwKChWKT0+e2xldCBOPWQwKFYpLEI9Vi5mcmFtZSx6PWUzKCQsYTkoQixLKSksRz1OPT09WD8iIzYwYTVmYSI6Tj09PVo/IiNmYmJmMjQiOiIjMzRkMzk5IjtyZXR1cm4gei5tYXAoKEMsVSk9PlEoInBvbHlnb24iLHtwb2ludHM6Qy5tYXAoKEYpPT5GLmpvaW4oIiwiKSkuam9pbigiICIpLGZpbGw6RyxmaWxsT3BhY2l0eTowLjE1LHN0cm9rZTpHLHN0cm9rZVdpZHRoOjEsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLGNsYXNzTmFtZToicG9pbnRlci1ldmVudHMtYXV0byBjdXJzb3ItcG9pbnRlciIsImRhdGEtYXgta2V5IjpOLHJvbGU6ImJ1dHRvbiIsdGFiSW5kZXg6MCwiYXJpYS1sYWJlbCI6Vi5sYWJlbHx8Vi5yb2xlfHwiQVggZWxlbWVudCIsb25Qb2ludGVyRG93bjooRik9PkYuc3RvcFByb3BhZ2F0aW9uKCksb25DbGljazooKT0+cShOKSxvbktleURvd246KEYpPT57aWYoRi5rZXk9PT0iRW50ZXIifHxGLmtleT09PSIgIilGLnByZXZlbnREZWZhdWx0KCkscShOKX0sb25Nb3VzZUVudGVyOigpPT5ZKE4pLG9uTW91c2VMZWF2ZTooKT0+WShudWxsKSxjaGlsZHJlbjpRKCJ0aXRsZSIse2NoaWxkcmVuOlYubGFiZWx8fFYucm9sZX0pfSxgJHtOfToke1V9YCkpfSl9KTtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOkouZWxlbWVudHMubWFwKChWLE4pPT57bGV0IEI9ZDAoVik7cmV0dXJuIFEoczkse2VsZW1lbnQ6VixpbmRleDpOLHNjcmVlbjpKLnNjcmVlbixoaWdobGlnaHRlZDpCPT09WixzZWxlY3RlZDpCPT09WCxvbkhpZ2hsaWdodDpZLG9uU2VsZWN0OnF9LEIpfSl9KX1mdW5jdGlvbiB0OSh7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpLfSl7bGV0e3NuYXBzaG90Okosc3RhdHVzOlp9PWk5KCQpLFtYLFldPU0obnVsbCksW3EsVl09TShudWxsKTtFKCgpPT57aWYoISQpWShudWxsKSxWKG51bGwpfSxbJF0pO2xldCBOPXcxKCgpPT4oe3NuYXBzaG90Okosc3RhdHVzOlp9KSxbSixaXSksQj13MSgoKT0+KHtoaWdobGlnaHRlZEtleTpYLHNlbGVjdGVkS2V5OnEsc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpWfSksW1gscV0pO3JldHVybiBRKFI4LHt2YWx1ZTpOLGNoaWxkcmVuOlEodjgse3ZhbHVlOkIsY2hpbGRyZW46S30pfSl9ZnVuY3Rpb24gZzgoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOkssb25Ub2dnbGVPdmVybGF5Okp9KXtsZXR7c3RhdHVzOlp9PUM1KCksW1gsWV09TSghMSkscT0kJiZLO3JldHVybiBRKFIxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6WixvbkNsaWNrOkosb25Nb3VzZUVudGVyOigpPT5ZKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlkoITEpLHN0eWxlOnE/e2JhY2tncm91bmQ6WD8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOlEobTAse3NpemU6MTksc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gZTkoe2hpZGVDaHJvbWU6JCxvblRvZ2dsZTpLfSl7bGV0W0osWl09TSghMSk7cmV0dXJuIFEoUjEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6JD8iU2hvdyBkZXZpY2UgZnJhbWUiOiJIaWRlIGRldmljZSBmcmFtZSIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZTokPyJTaG93IGRldmljZSBmcmFtZSI6IkhpZGUgZGV2aWNlIGZyYW1lIixvbkNsaWNrOkssb25Nb3VzZUVudGVyOigpPT5aKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlooITEpLHN0eWxlOiQ/e2JhY2tncm91bmQ6Sj8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOlEoYTAse3NpemU6MTgsc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gZzIoe2NsYXNzTmFtZTokPSIifSl7cmV0dXJuIFEoImEiLHtocmVmOiJodHRwczovL2dpdGh1Yi5jb20vRXZhbkJhY29uL3NlcnZlLXNpbSIsdGFyZ2V0OiJfYmxhbmsiLHJlbDoibm9yZWZlcnJlciIsY2xhc3NOYW1lOmBpbmxpbmUtZmxleCBoLVszMHB4XSBtaW4tdy0wIGl0ZW1zLWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHB4LTEuNSBmb250LW1vbm8gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzY1IG5vLXVuZGVybGluZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlLzg1IGZvY3VzLXZpc2libGU6b3V0bGluZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXdoaXRlLzYwICR7JH1gLnRyaW0oKSwiYXJpYS1sYWJlbCI6Ik9wZW4gc2VydmUtc2ltIix0aXRsZToiT3BlbiBzZXJ2ZS1zaW0iLGNoaWxkcmVuOiJzZXJ2ZS1zaW0ifSl9ZnVuY3Rpb24gJDYoe29wZW46JCxvbkNsaWNrOkt9KXtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBsZWZ0LTMgei0zMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBwLTEgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSAkeyQ/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbUSgiYnV0dG9uIix7b25DbGljazpLLGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpRKEkwLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLFEoZzIse30pXX0pfWZ1bmN0aW9uIEs2KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQiI7bGV0IEs9JC8xMDczNzQxODI0O2lmKEs+PTEpcmV0dXJuYCR7Sy50b0ZpeGVkKEs+PTEwPzA6MSl9IEdCYDtyZXR1cm5gJHsoJC8xMDQ4NTc2KS50b0ZpeGVkKDApfSBNQmB9ZnVuY3Rpb24gaDIoJCl7bGV0IEs9JC5tYXRjaCgvXihbYS16QS1aXSspLSguKykkLyk7aWYoIUspcmV0dXJue29zOiQsdmVyc2lvbjoiIn07cmV0dXJue29zOktbMV0sdmVyc2lvbjpLWzJdLnJlcGxhY2UoLy0vZywiLiIpfX1mdW5jdGlvbiBKNigkKXtyZXR1cm4gaDIoJCkudmVyc2lvbnx8JH1mdW5jdGlvbiBmMigkKXtsZXR7b3M6Syx2ZXJzaW9uOkp9PWgyKCQpO3JldHVybiBKP2Ake0t9ICR7Sn1gOkt9ZnVuY3Rpb24gSDUoKXtsZXRbJCxLXT1NKCgpPT50eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1hdGNoTWVkaWE/LigiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiBFKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0IEo9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIiksWj0oKT0+SyhKLm1hdGNoZXMpO3JldHVybiBaKCksSi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopLCgpPT5KLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWil9LFtdKSwkfXZhciBrNT0iMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIjtmdW5jdGlvbiBwMih7Y2hyb21lOiQsc2NyZWVuOkssaW50ZXJhY3RpdmU6Sj0hMSxmcmFtZWQ6Wj0hMCxvbkJ1dHRvbjpYLG9uQ3Jvd25XaGVlbDpZfSl7bGV0IHE9SDUoKSxWPXE/Im5vbmUiOmBvcGFjaXR5ICR7azV9YCxOPXE/Im5vbmUiOmBsZWZ0ICR7azV9LCB0b3AgJHtrNX0sIHdpZHRoICR7azV9LCBoZWlnaHQgJHtrNX0sIGJvcmRlci1yYWRpdXMgJHtrNX1gLEI9SiYmWjtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIiwiZGF0YS1kZXZpY2VraXQtY2hyb21lIjoiIiwiZGF0YS1mcmFtZWQiOlo/Im9uIjoib2ZmIixjaGlsZHJlbjpbUSgiZGl2Iix7ImFyaWEtaGlkZGVuIjpaP3ZvaWQgMDohMCxzdHlsZTp7b3BhY2l0eTpaPzE6MCxwb2ludGVyRXZlbnRzOlo/dm9pZCAwOiJub25lIix0cmFuc2l0aW9uOlZ9LGNoaWxkcmVuOlskLmJ1dHRvbnMubWFwKCh6KT0+UShxSyx7Y2hyb21lOiQsYnV0dG9uOnosaW50ZXJhY3RpdmU6QixvbkJ1dHRvbjpYLG9uV2hlZWw6QiYmei5uYW1lPT09ImRpZ2l0YWwtY3Jvd24iP1k6dm9pZCAwfSxgYnV0dG9uLSR7ei5uYW1lfWApKSwkLmNvbXBvc2l0ZUltYWdlP1EoWjYse2Nocm9tZTokLGltYWdlOiQuY29tcG9zaXRlSW1hZ2UscmVjdDokLmJvZHksekluZGV4OjF9KTokLnNsaWNlJiYkLmNvcm5lcj9RKFZLLHtjaHJvbWU6JH0pOm51bGxdfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBvdmVyZmxvdy1oaWRkZW4iLHN0eWxlOnsuLi5YSygkLFopLGJhY2tncm91bmQ6Wj8iIzAwMCI6dm9pZCAwLHRyYW5zaXRpb246Tn0sY2hpbGRyZW46S30pXX0pfWZ1bmN0aW9uIFhLKCQsSyl7aWYoIUspcmV0dXJue2xlZnQ6MCx0b3A6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIix6SW5kZXg6Mixib3JkZXJSYWRpdXM6MH07cmV0dXJuey4uLmg4KCQsJC5zY3JlZW4sMiksYm9yZGVyUmFkaXVzOllLKCQpfX1mdW5jdGlvbiBZSygkKXtyZXR1cm5gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi53aWR0aCoxMDB9JSAvICR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYH1mdW5jdGlvbiBxSyh7Y2hyb21lOiQsYnV0dG9uOkssaW50ZXJhY3RpdmU6SixvbkJ1dHRvbjpaLG9uV2hlZWw6WH0pe2xldFtZLHFdPU0oITEpLFtWLE5dPU0oITEpLEI9SShudWxsKSx6PUkobnVsbCksRz1JKFgpO0cuY3VycmVudD1YLEUoKCk9PntsZXQgQT16LmN1cnJlbnQ7aWYoIUF8fCFYKXJldHVybjtsZXQgVD0oaSk9PntpLnByZXZlbnREZWZhdWx0KCksaS5zdG9wUHJvcGFnYXRpb24oKSxHLmN1cnJlbnQ/LihpLmRlbHRhWSxpLmRlbHRhTW9kZSl9O3JldHVybiBBLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixULHtwYXNzaXZlOiExfSksKCk9PkEucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLFQpfSxbISFYXSk7bGV0IEM9SiYmSy51c2FnZVBhZ2UhPW51bGwmJksudXNhZ2UhPW51bGwsVT1EKCgpPT57aWYoQi5jdXJyZW50PT09bnVsbClyZXR1cm47Qi5jdXJyZW50PW51bGwsTighMSksWj8uKHtwaGFzZToidXAiLGJ1dHRvbjpLfSl9LFtLLFpdKSxGPUQoKEEpPT57aWYoQS5idXR0b24hPT0wJiZBLnBvaW50ZXJUeXBlPT09Im1vdXNlIilyZXR1cm47QS5wcmV2ZW50RGVmYXVsdCgpLEEuc3RvcFByb3BhZ2F0aW9uKCksQi5jdXJyZW50PUEucG9pbnRlcklkO3RyeXtBLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoQS5wb2ludGVySWQpfWNhdGNoe31OKCEwKSxaPy4oe3BoYXNlOiJkb3duIixidXR0b246S30pfSxbSyxaXSksTD1LLm9uVG9wPzU6MCxrPUMmJihZfHxWKSxIPShrP0suaG92ZXIueDowKSoxMDAsUD0oaz9LLmhvdmVyLnk6MCkqMTAwLHk9ViYmSy5pbWFnZURvd24/Sy5pbWFnZURvd246Sy5pbWFnZSxXPUM/e29uUG9pbnRlckRvd246RixvblBvaW50ZXJVcDpVLG9uUG9pbnRlckNhbmNlbDpVLG9uUG9pbnRlckVudGVyOigpPT5xKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+e3EoITEpLFUoKX19Ont9O3JldHVybiBRKCJkaXYiLHtyZWY6eixyb2xlOkM/ImJ1dHRvbiI6dm9pZCAwLCJhcmlhLWxhYmVsIjpDP1E2KEsubmFtZSk6dm9pZCAwLCJhcmlhLWhpZGRlbiI6Qz92b2lkIDA6ITAsdGl0bGU6Qz9RNihLLm5hbWUpOnZvaWQgMCxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4uaDgoJCxLLmZyYW1lLEwpLHRyYW5zZm9ybTpIfHxQP2B0cmFuc2xhdGUoJHtIfSUsICR7UH0lKWA6dm9pZCAwLHRyYW5zaXRpb246InRyYW5zZm9ybSAwLjEycyBlYXNlIixjdXJzb3I6Qz8icG9pbnRlciI6dm9pZCAwLHBvaW50ZXJFdmVudHM6Qz8iYXV0byI6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIn0sLi4uVyxjaGlsZHJlbjp5JiZRKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOlg2KCQuaWRlbnRpZmllcix5KSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIixzdHlsZTp7b2JqZWN0Rml0OiJmaWxsIixmaWx0ZXI6ViYmIUsuaW1hZ2VEb3duPyJicmlnaHRuZXNzKDEuNCkiOnZvaWQgMCx0cmFuc2l0aW9uOiJmaWx0ZXIgMC4xMnMgZWFzZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfSl9ZnVuY3Rpb24gUTYoJCl7cmV0dXJuICQuc3BsaXQoIi0iKS5tYXAoKEspPT5LLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK0suc2xpY2UoMSkpLmpvaW4oIiAiKX1mdW5jdGlvbiBWSyh7Y2hyb21lOiR9KXtpZighJC5zbGljZXx8ISQuY29ybmVyKXJldHVybiBudWxsO2xldHtib2R5OkssY29ybmVyOkosc2xpY2U6Wn09JCxYPU1hdGgubWF4KEsud2lkdGgtSi53aWR0aCoyLDApLFk9TWF0aC5tYXgoSy5oZWlnaHQtSi5oZWlnaHQqMiwwKSxxPVt7a2V5OiJ0b3AtbGVmdCIsaW1hZ2U6Wi50b3BMZWZ0LHJlY3Q6e3g6Sy54LHk6Sy55LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToidG9wLXJpZ2h0IixpbWFnZTpaLnRvcFJpZ2h0LHJlY3Q6e3g6Sy54K0sud2lkdGgtSi53aWR0aCx5OksueSx3aWR0aDpKLndpZHRoLGhlaWdodDpKLmhlaWdodH19LHtrZXk6ImJvdHRvbS1sZWZ0IixpbWFnZTpaLmJvdHRvbUxlZnQscmVjdDp7eDpLLngseTpLLnkrSy5oZWlnaHQtSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJib3R0b20tcmlnaHQiLGltYWdlOlouYm90dG9tUmlnaHQscmVjdDp7eDpLLngrSy53aWR0aC1KLndpZHRoLHk6Sy55K0suaGVpZ2h0LUouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToidG9wIixpbWFnZTpaLnRvcCxyZWN0Ont4OksueCtKLndpZHRoLHk6Sy55LHdpZHRoOlgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToiYm90dG9tIixpbWFnZTpaLmJvdHRvbSxyZWN0Ont4OksueCtKLndpZHRoLHk6Sy55K0suaGVpZ2h0LUouaGVpZ2h0LHdpZHRoOlgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToibGVmdCIsaW1hZ2U6Wi5sZWZ0LHJlY3Q6e3g6Sy54LHk6Sy55K0ouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0Oll9fSx7a2V5OiJyaWdodCIsaW1hZ2U6Wi5yaWdodCxyZWN0Ont4OksueCtLLndpZHRoLUoud2lkdGgseTpLLnkrSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6WX19XTtyZXR1cm4gUShKMSx7Y2hpbGRyZW46cS5maWx0ZXIoKFYpPT5WLnJlY3Qud2lkdGg+MCYmVi5yZWN0LmhlaWdodD4wKS5tYXAoKFYpPT5RKFo2LHtjaHJvbWU6JCxpbWFnZTpWLmltYWdlLHJlY3Q6Vi5yZWN0LHpJbmRleDoxfSxWLmtleSkpfSl9ZnVuY3Rpb24gWjYoe2Nocm9tZTokLGltYWdlOksscmVjdDpKLHpJbmRleDpafSl7cmV0dXJuIFEoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6WDYoJC5pZGVudGlmaWVyLEspLGNsYXNzTmFtZToiYWJzb2x1dGUgc2VsZWN0LW5vbmUiLHN0eWxlOnsuLi5oOCgkLEosWiksb2JqZWN0Rml0OiJmaWxsIixwb2ludGVyRXZlbnRzOiJub25lIixXZWJraXRVc2VyRHJhZzoibm9uZSJ9fSl9ZnVuY3Rpb24gWDYoJCxLKXtsZXQgSj1gZ3JpZC9hcGkvZGV2aWNla2l0LWNocm9tZT9jaHJvbWU9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9JmltYWdlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KEspfWA7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP2AvJHtKfWA6bTEoSil9ZnVuY3Rpb24gaDgoJCxLLEope3JldHVybntsZWZ0Om0yKEsueCwkLmZyYW1lLndpZHRoKSx0b3A6bTIoSy55LCQuZnJhbWUuaGVpZ2h0KSx3aWR0aDptMihLLndpZHRoLCQuZnJhbWUud2lkdGgpLGhlaWdodDptMihLLmhlaWdodCwkLmZyYW1lLmhlaWdodCksekluZGV4Okp9fWZ1bmN0aW9uIG0yKCQsSyl7cmV0dXJuYCR7JC9LKjEwMH0lYH1mdW5jdGlvbiBZNih7bmFtZTokLHJ1bnRpbWU6SyxjaHJvbWU6SixwbGFjZWhvbGRlckFzc2V0OlosYnVzeTpYLGJ1c3lMYWJlbDpZPSJTdGFydGluZ+KApiIsZXJyb3I6cSxvblN0YXJ0OlZ9KXtsZXQgTj1iMCgkKSxCPXgxW05dLHo9Wj8/bnVsbCxHPXo/bnVsbDpKPz9udWxsLEM9Rz97d2lkdGg6Ry5zY3JlZW4ud2lkdGgsaGVpZ2h0Okcuc2NyZWVuLmhlaWdodH06TjUoTiwkKSxVPXo1KE4sQyksRj16P0dLKE4sei5uYW1lKTpHP1UqRy5mcmFtZS53aWR0aC9HLnNjcmVlbi53aWR0aDpVKkIud2lkdGgvKEIud2lkdGgtMipCLmJlemVsWCksTD16P3t3aWR0aDp6LndpZHRoLGhlaWdodDp6LmhlaWdodH06Rz97d2lkdGg6Ry5mcmFtZS53aWR0aCxoZWlnaHQ6Ry5mcmFtZS5oZWlnaHR9Ont3aWR0aDpCLndpZHRoLGhlaWdodDpCLmhlaWdodH0saz1gJHtMLndpZHRofSAvICR7TC5oZWlnaHR9YCxIPShMLndpZHRoL0wuaGVpZ2h0KkJLKE4pKS50b0ZpeGVkKDIpLFA9Tj09PSJ2aXNpb24iP1EoVUsse30pOlEoTksse3R5cGU6Tn0pO3JldHVybiBRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC01IG1pbi13LTAgdy1mdWxsIixjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwiLHN0eWxlOnt3aWR0aDpgbWluKDEwMCUsICR7Rn1weCwgJHtIfWR2aClgLG1heFdpZHRoOkYsYXNwZWN0UmF0aW86a30sY2hpbGRyZW46ej9RKHpLLHtuYW1lOnoubmFtZSxmYWxsYmFjazpQfSk6Rz9RKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46UShwMix7Y2hyb21lOkd9KX0pOlB9KSxRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtY2VudGVyIixjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxN3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiR9KSxRKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOltmMihLKSwiIFNpbXVsYXRvciJdfSldfSkscSYmUSgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWRhbmdlciB0ZXh0LVsxMnB4XSBmb250LW1vbm8gbWF4LXctOTAgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOnF9KSxRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6VixkaXNhYmxlZDpYLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNSBweS0yIHJvdW5kZWQtZnVsbCB0ZXh0LVsxNHB4XSBmb250LW1lZGl1bSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke1g/ImJnLXdoaXRlLzggdGV4dC13aGl0ZS81NSBjdXJzb3ItZGVmYXVsdCI6ImJnLXdoaXRlLzEyIHRleHQtd2hpdGUvOTAgaG92ZXI6Ymctd2hpdGUvMTggY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W1gmJlEoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToic2l6ZS0zLjUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8yNSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIixzdHlsZTp7Ym9yZGVyVG9wQ29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45KSJ9fSksWD9ZOiJTdGFydCJdfSldfSl9ZnVuY3Rpb24gR0soJCxLKXtpZigkPT09IndhdGNoIil7aWYoSy5pbmNsdWRlcygidWx0cmEiKSlyZXR1cm4gMjU1O2lmKEsuaW5jbHVkZXMoIndhdGNoLXNlLSIpfHxLLmluY2x1ZGVzKCJhcHBsZS13YXRjaC1zZS0iKSlyZXR1cm4gMjM4O3JldHVybiAyNTB9aWYoJD09PSJ2aXNpb24iKXJldHVybiAzOTA7aWYoJD09PSJpcGFkIilyZXR1cm4gMzQwO3JldHVybiAyODB9ZnVuY3Rpb24gQksoJCl7aWYoJD09PSJ2aXNpb24iKXJldHVybiAzNDtpZigkPT09ImlwYWQiKXJldHVybiA1MDtpZigkPT09IndhdGNoIilyZXR1cm4gNTY7cmV0dXJuIDUyfWZ1bmN0aW9uIE5LKHt0eXBlOiR9KXtsZXQgSz14MVskXTtyZXR1cm4gUShKMSx7Y2hpbGRyZW46W1EoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0sud2lkdGh9ICR7Sy5oZWlnaHR9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixjaGlsZHJlbjpbUSgiZGVmcyIse2NoaWxkcmVuOlEoImxpbmVhckdyYWRpZW50Iix7aWQ6InBsYWNlaG9sZGVyLXNjcmVlbiIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltRKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNmZhOGU2In0pLFEoInN0b3AiLHtvZmZzZXQ6IjU1JSIsc3RvcENvbG9yOiIjNWI5M2Q2In0pLFEoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzUxODhjZiJ9KV19KX0pLFEoInJlY3QiLHt4OksuYmV6ZWxYLHk6Sy5iZXplbFksd2lkdGg6Sy53aWR0aC0yKksuYmV6ZWxYLGhlaWdodDpLLmhlaWdodC0yKksuYmV6ZWxZLHJ4OksuaW5uZXJSYWRpdXMsZmlsbDoidXJsKCNwbGFjZWhvbGRlci1zY3JlZW4pIn0pXX0pLFEoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpRKFQyLHt0eXBlOiR9KX0pXX0pfWZ1bmN0aW9uIHpLKHtuYW1lOiQsZmFsbGJhY2s6S30pe2xldFtKLFpdPU0oImxvYWRpbmciKTtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbSiE9PSJsb2FkZWQiJiZLLEohPT0iZXJyb3IiJiZRKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOkxLKCQpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUgb2JqZWN0LWNvbnRhaW4iLHN0eWxlOntXZWJraXRVc2VyRHJhZzoibm9uZSJ9LG9uTG9hZDooKT0+WigibG9hZGVkIiksb25FcnJvcjooKT0+WigiZXJyb3IiKX0pXX0pfWZ1bmN0aW9uIFVLKCl7bGV0e3dpZHRoOiQsaGVpZ2h0Okt9PXgxLnZpc2lvbjtyZXR1cm4gUSgic3ZnIix7dmlld0JveDpgMCAwICR7JH0gJHtLfWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsZmlsbDoibm9uZSIsImFyaWEtaGlkZGVuIjohMCxjaGlsZHJlbjpbUSgiZGVmcyIse2NoaWxkcmVuOltRKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbUSgic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzI4MjgyYiJ9KSxRKCJzdG9wIix7b2Zmc2V0OiI1NCUiLHN0b3BDb2xvcjoiIzEyMTIxNCJ9KSxRKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwNzA3MDgifSldfSksUSgibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W1EoInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMzMTM1M2EifSksUSgic3RvcCIse29mZnNldDoiNDglIixzdG9wQ29sb3I6IiMwYTBiMGQifSksUSgic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pLFEoInJhZGlhbEdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1sZW5zIixjeDoiNTAlIixjeToiNDYlIixyOiI2MCUiLGNoaWxkcmVuOltRKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjAyODMyIn0pLFEoInN0b3AiLHtvZmZzZXQ6IjcyJSIsc3RvcENvbG9yOiIjMDkwYTBkIn0pLFEoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KV19KSxRKCJwYXRoIix7ZDoiTTk1IDE3N0M5NSAxMTkgMTQ3IDg2IDIxOCA5MUMyNTcgOTQgMjg2IDExMSAzMjAgMTExQzM1NCAxMTEgMzgzIDk0IDQyMiA5MUM0OTMgODYgNTQ1IDExOSA1NDUgMTc3VjIyMkM1NDUgMjc4IDUwMSAzMTEgNDQzIDMxMEMzOTggMzA5IDM3MSAyODYgMzQ1IDI2OEMzMjkgMjU3IDMxMSAyNTcgMjk1IDI2OEMyNjkgMjg2IDI0MiAzMDkgMTk3IDMxMEMxMzkgMzExIDk1IDI3OCA5NSAyMjJWMTc3WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwpIixzdHJva2U6IiMzZDNkNDIiLHN0cm9rZVdpZHRoOiI3In0pLFEoInBhdGgiLHtkOiJNMTE3IDE4MUMxMTcgMTM0IDE1NyAxMTIgMjIwIDExNkMyNjAgMTE5IDI4NyAxMzYgMzIwIDEzNkMzNTMgMTM2IDM4MCAxMTkgNDIwIDExNkM0ODMgMTEyIDUyMyAxMzQgNTIzIDE4MVYyMTdDNTIzIDI2MyA0ODggMjg3IDQzOSAyODdDMzk5IDI4NyAzNjkgMjY0IDM0NSAyNTBDMzI5IDI0MCAzMTEgMjQwIDI5NSAyNTBDMjcxIDI2NCAyNDEgMjg3IDIwMSAyODdDMTUyIDI4NyAxMTcgMjYzIDExNyAyMTdWMTgxWiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MpIixzdHJva2U6IiMxNzE4MWIiLHN0cm9rZVdpZHRoOiI1In0pLFEoInBhdGgiLHtkOiJNMTQzIDE4NkMxNDUgMTQ4IDE3NiAxMzUgMjI2IDEzOEMyNjQgMTQxIDI4OSAxNTYgMzIwIDE1NkMzNTEgMTU2IDM3NiAxNDEgNDE0IDEzOEM0NjQgMTM1IDQ5NSAxNDggNDk3IDE4NlYyMTNDNDk3IDI1MCA0NjkgMjY2IDQzMiAyNjZDMzk0IDI2NiAzNjkgMjQ2IDM0MyAyMzVDMzI4IDIyOSAzMTIgMjI5IDI5NyAyMzVDMjcxIDI0NiAyNDYgMjY2IDIwOCAyNjZDMTcxIDI2NiAxNDMgMjUwIDE0MyAyMTNWMTg2WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItbGVucykiLHN0cm9rZToiIzI2MmEyZiIsc3Ryb2tlV2lkdGg6IjIifSksUSgicGF0aCIse2Q6Ik0xNTEgMTcxQzE3OSAxNTAgMjE3IDE0NyAyNTEgMTU0TTM4OSAxNTRDNDIzIDE0NyA0NjEgMTUwIDQ4OSAxNzEiLHN0cm9rZToiIzRlNTM1YSIsc3Ryb2tlV2lkdGg6IjMiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pLFEoInBhdGgiLHtkOiJNMjc3IDIzM0MyODkgMjI0IDMwNCAyMTkgMzIwIDIxOUMzMzYgMjE5IDM1MSAyMjQgMzYzIDIzMyIsc3Ryb2tlOiIjM2I0MDQ2IixzdHJva2VXaWR0aDoiNCIsc3Ryb2tlTGluZWNhcDoicm91bmQifSldfSl9ZnVuY3Rpb24gTEsoJCl7bGV0IEs9YGdyaWQvYXBpL2RldmljZS1wbGFjZWhvbGRlci1hc3NldD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWA7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP2AvJHtLfWA6bTEoSyl9ZnVuY3Rpb24gRjUoe29wZW46JCx3aWR0aDpLLGNoaWxkcmVuOkosc3R5bGU6WixzaWRlOlg9InJpZ2h0In0pe3JldHVybiBRKCJhc2lkZSIse2NsYXNzTmFtZTpgZml4ZWQgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBiZy1wYW5lbC1iZyB0ZXh0LXdoaXRlLzkwIGJhY2tkcm9wLWJsdXItWzE4cHhdIFtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmXSBbdHJhbnNpdGlvbjp0cmFuc2Zvcm1fMC4yNXNfZWFzZSxvcGFjaXR5XzAuMnNfZWFzZV0gZmxleCBmbGV4LWNvbCAke2B0b3AtMyBib3R0b20tMyAke1g9PT0ibGVmdCI/ImxlZnQtMyI6InJpZ2h0LTMifSByb3VuZGVkLVsxNHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bMF8xMnB4XzQwcHhfcmdiYSgwLDAsMCwwLjU1KV1gfWAsc3R5bGU6e3dpZHRoOkssdHJhbnNmb3JtOiQ/InRyYW5zbGF0ZVgoMCkiOlg9PT0ibGVmdCI/InRyYW5zbGF0ZVgoY2FsYygtMTAwJSAtIDI0cHgpKSI6InRyYW5zbGF0ZVgoY2FsYygxMDAlICsgMjRweCkpIixvcGFjaXR5OiQ/MTowLHBvaW50ZXJFdmVudHM6JD8iYXV0byI6Im5vbmUiLC4uLlp9LCJhcmlhLWhpZGRlbiI6ISQsY2hpbGRyZW46Sn0pfWZ1bmN0aW9uIEE1KHtjaGlsZHJlbjokLHN0eWxlOkt9KXtyZXR1cm4gUSgiaGVhZGVyIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIuNSBweC0yLjUgcHktMS41IHBsLTMiLHN0eWxlOkssY2hpbGRyZW46JH0pfWZ1bmN0aW9uIHE2KHtjaGlsZHJlbjokfSl7cmV0dXJuIFEoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiB1Mih7b25DbGljazokLGFyaWFMYWJlbDpLPSJDbG9zZSBwYW5lbCIsdGl0bGU6SixpY29uU2l6ZTpaPTE2fSl7cmV0dXJuIFEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazokLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOkssdGl0bGU6SixjaGlsZHJlbjpRKHowLHtzaXplOlosc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gVjYoJCxLKXtsZXRbSixaXT1NKG51bGwpO3JldHVybiBFKCgpPT57aWYoIUt8fCEkKXJldHVybjtsZXQgWD0hMSxZPWFzeW5jKCk9Pnt0cnl7bGV0IE49YXdhaXQoYXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoIVgpWihOKX1jYXRjaHt9fTtZKCk7bGV0IHE9c2V0SW50ZXJ2YWwoWSw1MDAwKTtyZXR1cm4oKT0+e1g9ITAsY2xlYXJJbnRlcnZhbChxKX19LFskLEtdKSxKfWZ1bmN0aW9uIEc2KHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOkssYXZhaWxhYmxlQnl0ZXM6Six0b3RhbEJ5dGVzOloscnVubmluZ1NpbXVsYXRvcnM6WH09JCxZPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLUovWikpLHE9WCtLLFY9Sz09PTA/IiNlNjYiOks8PTE/IiNlOWExM2IiOiIjM2IzIixOPVk+MC45PyIjZTY2IjpZPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBtYXgtdy1mdWxsIG1pbi13LTAgZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIGdhcC0xLjUgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHB4LTIgcHktWzNweF0gcm91bmRlZC1mdWxsIGJnLVsjMTAxMDEwXSBib3JkZXIgYm9yZGVyLVsjMjIyXSBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC13aGl0ZS83MCBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLVszcHhdIHNocmluay0wIixzdHlsZTp7YmFja2dyb3VuZDpWfX0pLFEoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgdHJ1bmNhdGUiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2hpbGRyZW46W1gsIi8iLHEsIiBzaW1zIl19KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiIMK3ICJ9KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjpbSzYoSiksIiBmcmVlIl19KV19KSxRKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im1sLTAuNSB3LTcgaC1bM3B4XSBzaHJpbmstMCBiZy1bIzFjMWMxY10gcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4gaW5saW5lLWJsb2NrIixjaGlsZHJlbjpRKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBoLWZ1bGwgdHJhbnNpdGlvbi1bd2lkdGgsYmFja2dyb3VuZF0gZHVyYXRpb24tMzAwIGVhc2Utb3V0IixzdHlsZTp7d2lkdGg6YCR7KFkqMTAwKS50b0ZpeGVkKDEpfSVgLGJhY2tncm91bmQ6Tn19KX0pXX0pfWZ1bmN0aW9uIEI2KHtkZXZpY2U6JCxhY3RpdmU6SyxzdGFydGluZzpKLHNodXR0aW5nRG93bjpaLG9uU2VsZWN0Olgsb25TaHV0ZG93bjpZfSl7bGV0IHE9JC5oZWxwZXIsVj0kLnN0YXRlPT09IkJvb3RlZCIsTj1iMCgkLm5hbWUpLEI9L2R1by9pLnRlc3QoJC5uYW1lKXx8QXJyYXkuaXNBcnJheSgkLmRpc3BsYXlzKSYmJC5kaXNwbGF5cy5sZW5ndGg+MSx6PUo2KCQucnVudGltZSksRz1xPyJTdHJlYW1pbmciOko/Vj8iU3RhcnRpbmfigKYiOiJCb290aW5n4oCmIjpaPyJTaHV0dGluZyBkb3du4oCmIjpWPyJCb290ZWQiOm51bGwsQz1xPyIjMzRkMzk5IjpWPyIjZTlhMTNiIjpudWxsLFU9cXx8VixGPXE/Sz8iYmctWyMyNjM2NGNdIjoiYmctWyMyMDJiM2FdIjpLPyJiZy13aGl0ZS8xNSI6ImJnLXdoaXRlLzYiLEw9cT8idGV4dC1bI2QyZTdmZl0iOks/InRleHQtd2hpdGUvOTAiOiJ0ZXh0LXdoaXRlLzU1IjtyZXR1cm4gUSgiZGl2Iix7cm9sZToiYnV0dG9uIix0YWJJbmRleDowLCJhcmlhLXByZXNzZWQiOkssb25DbGljazpYLG9uS2V5RG93bjooayk9PntpZihrLmtleT09PSJFbnRlciJ8fGsua2V5PT09IiAiKWsucHJldmVudERlZmF1bHQoKSxYKCl9LGNsYXNzTmFtZTpgZ3JvdXAgcmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSBweC0yIHB5LTEuNSByb3VuZGVkLWxnIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdICR7Sz8iYmctd2hpdGUvMTAgdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvOTAgaG92ZXI6Ymctd2hpdGUvOCJ9YCxjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOmByZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gJHtGfWAsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6TCxjaGlsZHJlbjpRKEkyLHt0eXBlOk4sZHVvOkIsc2NyZWVuT246Qm9vbGVhbihxKX0pfSksQyYmIXEmJlEoInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wLjUgcmlnaHQtMC41IHNpemUtMS41IHJvdW5kZWQtZnVsbCByaW5nLTIgcmluZy1bIzFjMWMxZV0iLHN0eWxlOntiYWNrZ3JvdW5kOkN9fSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSIsY2hpbGRyZW46W1EoImRpdiIse2NsYXNzTmFtZToidHJ1bmNhdGUgdGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCBsZWFkaW5nLXRpZ2h0IixjaGlsZHJlbjokLm5hbWV9KSxHJiZRKCJkaXYiLHtjbGFzc05hbWU6YHRydW5jYXRlIHRleHQtWzExcHhdIGxlYWRpbmctdGlnaHQgJHtxPyJ0ZXh0LVsjMzRkMzk5XSI6Sz8idGV4dC13aGl0ZS83NSI6InRleHQtd2hpdGUvNDUifWAsY2hpbGRyZW46R30pXX0pLFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1yb3ctdHJhaWxpbmctc2xvdCIsY2xhc3NOYW1lOiJyZWxhdGl2ZSBzaHJpbmstMCB3LTggaC02IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIixjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0ZXh0LVsxMXB4XSBmb250LW1vbm8gdGFidWxhci1udW1zIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xMnNdICR7Sz8idGV4dC13aGl0ZS84NSI6InRleHQtd2hpdGUvNDAifSAke1U/Imdyb3VwLWhvdmVyOm9wYWNpdHktMCBncm91cC1mb2N1cy13aXRoaW46b3BhY2l0eS0wIjoiIn1gLGNoaWxkcmVuOnp9KSxVJiZRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHRpdGxlOlo/IlNodXR0aW5nIGRvd27igKYiOiJTaHV0IGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXQgZG93biBzaW11bGF0b3IiLG9uQ2xpY2s6KGspPT57ay5wcmV2ZW50RGVmYXVsdCgpLGsuc3RvcFByb3BhZ2F0aW9uKCksWSgpfSxkaXNhYmxlZDpaLGNsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS01IHJvdW5kZWQtbWQgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGZvY3VzLXZpc2libGU6b3BhY2l0eS0xMDAgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEycyxiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSAke0s/InRleHQtd2hpdGUvODAgaG92ZXI6Ymctd2hpdGUvMjAiOiJ0ZXh0LXdoaXRlLzcwIGhvdmVyOmJnLXdoaXRlLzEyIGhvdmVyOnRleHQtd2hpdGUifWAsY2hpbGRyZW46USh6MCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyLjJ9KX0pXX0pXX0pfXZhciBNNT0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKSIsZjg9InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc3BhcmVudCkiO3ZhciBDSz0xMjtmdW5jdGlvbiBONih7b3BlbjokLG9uQ2xvc2U6Syx3aWR0aDpKLHNpZGU6Wj0icmlnaHQiLGRldmljZXM6WCx0b3RhbDpZPTAsaGFzTW9yZTpxPSExLG9uTG9hZE1vcmU6VixvbkxvYWRBbGw6TixvblJlc2V0UGFnZTpCLHNlbGVjdGVkVWRpZDp6LG9uU2VsZWN0Okcsc3RhcnRpbmc6QyxzaHV0dGluZ0Rvd246VSxvblNodXRkb3duOkZ9KXtsZXQgaz0odHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOndpbmRvdy5fX1NJTV9QUkVWSUVXX18pPy5ncmlkTWVtb3J5RW5kcG9pbnQ/Pyh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6bTEoImdyaWQvYXBpL21lbW9yeSIpKSxIPVY2KGssJCksW1AseV09TSgiIiksVz13MSgoKT0+e2xldCB2PVAudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoIXZ8fCFYKXJldHVybiBYO3JldHVybiBYLmZpbHRlcigoaik9PmoubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHYpfHxmMihqLnJ1bnRpbWUpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModikpfSxbWCxQXSksQT1JKCExKTtFKCgpPT57bGV0IHY9ISFQLnRyaW0oKTtpZih2JiZxKU4/LigpO2Vsc2UgaWYoIXYmJkEuY3VycmVudClCPy4oKTtBLmN1cnJlbnQ9dn0sW1AscSxOLEJdKTtsZXQgVD1JKG51bGwpO3JldHVybiBRKEY1LHtvcGVuOiQsd2lkdGg6SixzaWRlOlosc3R5bGU6e2JhY2tncm91bmRDb2xvcjpNNX0sY2hpbGRyZW46W1EoQTUse3N0eWxlOntqdXN0aWZ5Q29udGVudDoiZmxleC1zdGFydCIscGFkZGluZ0xlZnQ6MTYscGFkZGluZ1RvcDoxNixnYXA6NH0sY2hpbGRyZW46W1EoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpLLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCB0ZXh0LVsjOGU4ZTkzXSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6IkNsb3NlIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6ITAsdGl0bGU6IkRldmljZXMiLGNoaWxkcmVuOlEoSTAse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksUShnMix7fSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJweC00IHBiLTIgcHQtMC41IHNocmluay0wIixjaGlsZHJlbjpRKCJsYWJlbCIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMi41IGgtOCByb3VuZGVkLWxnIGJnLXdoaXRlLzYgZm9jdXMtd2l0aGluOmJnLXdoaXRlLzEwIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdIixjaGlsZHJlbjpbUShjNSx7c2l6ZToxNCxzdHJva2VXaWR0aDoyLGNsYXNzTmFtZToidGV4dC13aGl0ZS80MCBzaHJpbmstMCJ9KSxRKCJpbnB1dCIse3ZhbHVlOlAsb25DaGFuZ2U6KHYpPT55KHYudGFyZ2V0LnZhbHVlKSxwbGFjZWhvbGRlcjoiU2VhcmNoIixjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIG91dGxpbmUtbm9uZSB0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzkwIHBsYWNlaG9sZGVyOnRleHQtd2hpdGUvNDAifSksUCYmUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNlYXJjaCIsb25DbGljazooKT0+eSgiIiksY2xhc3NOYW1lOiJzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTQgcm91bmRlZC1mdWxsIGJnLXdoaXRlLzE1IHRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMjUiLGNoaWxkcmVuOlEoejAse3NpemU6OSxzdHJva2VXaWR0aDozfSl9KV19KX0pLFEoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgZmxleC0xIG1pbi1oLTAiLGNoaWxkcmVuOltRKCJkaXYiLHtyZWY6VCxvblNjcm9sbDooKT0+e2lmKFAudHJpbSgpfHwhcXx8IVYpcmV0dXJuO2xldCB2PVQuY3VycmVudDtpZighdilyZXR1cm47aWYodi5zY3JvbGxUb3Ardi5jbGllbnRIZWlnaHQ+PXYuc2Nyb2xsSGVpZ2h0LTI0MClWKCl9LGNsYXNzTmFtZToiaC1mdWxsIG1pbi1oLTAgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpXPT09bnVsbD9RKEhLLHt9KTpXLmxlbmd0aD09PTA/USgiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTYgdGV4dC13aGl0ZS80MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46UD8iTm8gbWF0Y2hpbmcgc2ltdWxhdG9ycy4iOiJObyBpT1Mgc2ltdWxhdG9ycyBhdmFpbGFibGUuIn0pOlEoSjEse2NoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6InB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsY2hpbGRyZW46Vy5tYXAoKHYpPT5RKEI2LHtkZXZpY2U6dixhY3RpdmU6di5kZXZpY2U9PT16LHN0YXJ0aW5nOiEhQ1t2LmRldmljZV0sc2h1dHRpbmdEb3duOiEhVVt2LmRldmljZV0sb25TZWxlY3Q6KCk9Pkcodi5kZXZpY2UpLG9uU2h1dGRvd246KCk9PkYodi5kZXZpY2UpfSx2LmRldmljZSkpfSksIVAmJnEmJlEoImRpdiIse2NsYXNzTmFtZToicHgtMiBweS0yIHRleHQtWzExcHhdIHRleHQtd2hpdGUvMzUgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOlg/YCR7WC5sZW5ndGh9IG9mICR7WX1gOm51bGx9KV19KX0pLFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXRvcC1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAke001fSAwJSwgJHtmOH0gMTAwJSlgfX0pLFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LWJvdHRvbS1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCAke001fSAwJSwgJHtmOH0gMTAwJSlgfX0pXX0pLFEoRksse3JlcG9ydDpIfSldfSl9ZnVuY3Rpb24gSEsoKXtyZXR1cm4gUShKMSx7Y2hpbGRyZW46W1EoImRpdiIse2NsYXNzTmFtZToicHgtMiBwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIixjaGlsZHJlbjoiQXZhaWxhYmxlIn0pLFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXNrZWxldG9uIixjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIiwiYXJpYS1sYWJlbCI6IkxvYWRpbmcgc2ltdWxhdG9ycyIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOkFycmF5LmZyb20oe2xlbmd0aDpDS30sKCQsSyk9PlEoa0sse2luZGV4Okt9LEspKX0pXX0pfWZ1bmN0aW9uIGtLKHtpbmRleDokfSl7bGV0IEs9WyJ3LVs2MiVdIiwidy1bNzQlXSIsInctWzU4JV0iLCJ3LVs3MCVdIl1bJCU0XSxKPVsidy1bNDIlXSIsInctWzM2JV0iLCJ3LVs0OCVdIiwidy1bMzIlXSJdWyQlNF0sWj1bInctNyIsInctNiIsInctOCJdWyQlM107cmV0dXJuIFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1yb3ctc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSBweC0yIHB5LTEuNSByb3VuZGVkLWxnIHNlbGVjdC1ub25lIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGUvNiIsY2hpbGRyZW46USgic3BhbiIse2NsYXNzTmFtZToic2l6ZS00IHJvdW5kZWQtWzRweF0gYmctd2hpdGUvWzAuMTJdIn0pfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOmBoLTMgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjEyXSAke0t9YH0pLFEoInNwYW4iLHtjbGFzc05hbWU6YGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtKfWB9KV19KSxRKCJzcGFuIix7Y2xhc3NOYW1lOmBzaHJpbmstMCBoLTIuNSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdICR7Wn1gfSldfSl9ZnVuY3Rpb24gRksoe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlczw9MClyZXR1cm4gbnVsbDtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBweC0zIHB5LTIgZmxleCBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46UShHNix7cmVwb3J0OiR9KX0pfWZ1bmN0aW9uIGwyKHtwYW5lbFdpZHRoOiQsdmlzaWJsZTpLLG9uUG9pbnRlckRvd246SixhcmlhTGFiZWw6WixzaWRlOlg9InJpZ2h0In0pe2xldFtZLHFdPU0oITEpLFtWLE5dPU0oITEpLEI9WXx8Vix6PTEyKyQtOTtyZXR1cm4gUSgiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS1sYWJlbCI6WiwiYXJpYS1oaWRkZW4iOiFLLG9uUG9pbnRlckRvd246KEcpPT57TighMCksSihHKX0sb25Qb2ludGVyVXA6KCk9Pk4oITEpLG9uUG9pbnRlckNhbmNlbDooKT0+TighMSksb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT5xKCExKSxjbGFzc05hbWU6YGZpeGVkIHRvcC0zIGJvdHRvbS0zIHctNCB6LTM2IGN1cnNvci1jb2wtcmVzaXplIHRvdWNoLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCAke0s/Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8iOiJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSJ9YCxzdHlsZTpYPT09ImxlZnQiP3tsZWZ0Onp9OntyaWdodDp6fSxjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCBsZWZ0LTEvMiB3LXB4IHBvaW50ZXItZXZlbnRzLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTE1MCAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn1gLHN0eWxlOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTAuNXB4KSIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSAzMCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCkgNzAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpIn19KSxRKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgdy0xIGgtNyByb3VuZGVkLXhzIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB6LTEgcG9pbnRlci1ldmVudHMtbm9uZSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsYmFja2dyb3VuZF8wLjE1c19lYXNlXSAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn0gJHtWPyJiZy1bIzlhOWE5ZV0iOiJiZy1bIzZlNmU3Ml0ifWB9KV19KX1mdW5jdGlvbiB6Nigpe2xldFskLEtdPU0oKCk9PnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYT8uKCIocHJlZmVycy1jb250cmFzdDogbW9yZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiBFKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0IEo9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLFo9KCk9PksoSi5tYXRjaGVzKTtyZXR1cm4gWigpLEouYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKSwoKT0+Si5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopfSxbXSksJH12YXIgVTY9MjgwO2Z1bmN0aW9uIG04KHtpc1Jlc2l6aW5nOiQsaXNJbmVydGlhOksscmVkdWNlZE1vdGlvbjpKfSl7aWYoSilyZXR1cm4ibm9uZSI7cmV0dXJuICR8fEs/IndpZHRoIDcwbXMgbGluZWFyIjoid2lkdGggMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpLCBhc3BlY3QtcmF0aW8gMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIn12YXIgTDY9InBhZGRpbmctbGVmdCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSksIHBhZGRpbmctcmlnaHQgMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIixDNj0iY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkiLGMyPSJjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIixINj0ibGluZWFyKDAsIDAuMzIgOSUsIDAuNjIgMTglLCAwLjg1IDI3JSwgMS4wMSAzNiUsIDEuMDcgNDUlLCAxLjA1IDU2JSwgMS4wMiA3MCUsIDEpIixrNj0iMC4xNnMiLEY2PSIwLjJzIixBNj01LE02PXtpZGxlOjEsaG92ZXI6MS4wOSxkcmFnOjEuMTJ9LE82PXtpZGxlOiIjNjg2ZTc4Iixob3ZlcjoiI2I3YmJjMiIsZHJhZzoiI2Y0ZjZmYSJ9LFA2PXtpZGxlOjIuNjUsaG92ZXI6NC4xNSxkcmFnOjQuNjV9LFc2PXtpZGxlOjAuMzgsaG92ZXI6MC44NixkcmFnOjF9LGQyPW51bGw7ZnVuY3Rpb24gXzYoKXtpZihkMiE9bnVsbClyZXR1cm4gZDI7aWYodHlwZW9mIENTUz4idSJ8fHR5cGVvZiBDU1Muc3VwcG9ydHMhPT0iZnVuY3Rpb24iKXJldHVybiExO3JldHVybiBkMj1DU1Muc3VwcG9ydHMoImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJsaW5lYXIoMCwgMSkiKSxkMn12YXIgQUs9NDAsRDY9MTQsVDY9MjQwLHc2PTMwLEU2PTAuMTUsTUs9ODAsSTY9MTUwLGI2PTI1MCxwOD0ic2VydmUtc2ltOnNpbXVsYXRvci1mcmFtZS1zY2FsZSI7ZnVuY3Rpb24gTzUoJCxLLEosWil7bGV0IFg9JCozLFk9Sz4wP01hdGgubWF4KDE4MCxLLTQ4KTpYLHE9Sj4wJiZOdW1iZXIuaXNGaW5pdGUoWikmJlo+MD9NYXRoLm1heCgxODAsKEotMTM2KSpaKTpYO3JldHVybiBNYXRoLm1heCgxODAsTWF0aC5taW4oWCxZLHEpKX1mdW5jdGlvbiBLNSgkLEssSixaLFgpe2xldCBZPU81KEssSixaLFgpLHE9TWF0aC5taW4oMjgwLFkpO3JldHVybiBNYXRoLm1pbihZLE1hdGgubWF4KHEsJCkpfWZ1bmN0aW9uIHk2KCQsSyxKLFosWCl7bGV0IFk9TnVtYmVyLmlzRmluaXRlKFgpPyQqWDokO3JldHVybiBLNShZLCQsSyxKLFopfWZ1bmN0aW9uIHIyKCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuICQ7bGV0IEs9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5tYXgoMSx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk6MTtyZXR1cm4gTWF0aC5yb3VuZCgkKkspL0t9ZnVuY3Rpb24gdTgoJCxLKXtpZigkPD0wfHxLPD0wKXJldHVybiAwO2xldCBKPTAuNTUsWj0kKksqSi8oSytKKiQpO3JldHVybiBNYXRoLm1pbihBSyxaKX1mdW5jdGlvbiBTNigkLEssSil7bGV0IFo9JCxYPUo7Zm9yKGxldCBZIG9mIEspe2xldCBxPU1hdGguYWJzKCQtWSk7aWYocTxYKVo9WSxYPXF9cmV0dXJuIFp9ZnVuY3Rpb24geDYoJCl7bGV0e2Zyb206Syx0bzpKLHZlbG9jaXR5Olosc3RpZmZuZXNzOlgsZGFtcGluZzpZLG9uVXBkYXRlOnEsb25Db21wbGV0ZTpWfT0kLE49MC40LEI9MC4wMzMzMzMzMzMzMzMzMzMzMyx6PUssRz1aLEM9cGVyZm9ybWFuY2Uubm93KCksVT0wLEY9ITEsTD0oayk9PntpZihGKXJldHVybjtsZXQgSD1NYXRoLm1pbigoay1DKS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO0M9aztsZXQgUD0tWCooei1KKS1ZKkc7aWYoRys9UCpILHorPUcqSCxNYXRoLmFicyhHKTwwLjQmJk1hdGguYWJzKHotSik8MC40KXtxKEopLFY/LigpO3JldHVybn1xKHopLFU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpfTtyZXR1cm4gVT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksKCk9PntpZihGPSEwLFUpY2FuY2VsQW5pbWF0aW9uRnJhbWUoVSl9fWZ1bmN0aW9uIFI2KCQpe2lmKCQubGVuZ3RoPDIpcmV0dXJuIDA7bGV0IEs9JFskLmxlbmd0aC0xXSxKPSRbMF07Zm9yKGxldCBYPSQubGVuZ3RoLTE7WD49MDtYLS0paWYoSy50LSRbWF0udD49TUspe0o9JFtYXTticmVha31sZXQgWj0oSy50LUoudCkvMTAwMDtyZXR1cm4gWj4wPyhLLngtSi54KS9aOjB9dmFyIHY2PSJkcm9wLXNoYWRvdygwIDAuNXB4IDFweCByZ2JhKDAsMCwwLDAuMSkpIGRyb3Atc2hhZG93KDAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMTMpKSI7ZnVuY3Rpb24gT0soe2FyYzokLHBoYXNlOksscmVkdWNlZE1vdGlvbjpKLGhpZ2hDb250cmFzdDpaLGZvY3VzVmlzaWJsZTpYfSl7bGV0IFk9SyE9PSJpZGxlIixxPVo/MS4xMjoxLFY9Sj8xOk02W0tdLE49UDZbS10qcSxCPVo/MTpXNltLXSx6PVk/azY6RjYsRz1ZP0M2OmMyLEM9WSYmXzYoKT9INjpHLFU9Sj8ibm9uZSI6YHRyYW5zZm9ybSAke3p9ICR7Q31gLEY9Sj8ibm9uZSI6YHN0cm9rZSAke3p9ICR7R30sIHN0cm9rZS13aWR0aCAke3p9ICR7R31gLEw9JC52aWV3Qm94U2l6ZSxrPSQuZCxIPXt0cmFuc2Zvcm06YHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgke1Z9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246VSx3aWxsQ2hhbmdlOko/dm9pZCAwOiJ0cmFuc2Zvcm0iLGJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIixXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiJ9O3JldHVybiBRKCJzdmciLHt3aWR0aDpMLGhlaWdodDpMLHZpZXdCb3g6YDAgMCAke0x9ICR7TH1gLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsc2hhcGVSZW5kZXJpbmc6Imdlb21ldHJpY1ByZWNpc2lvbiIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIixvdmVyZmxvdzoidmlzaWJsZSIsY3Vyc29yOiJpbmhlcml0Iix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltRKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbUSgicGF0aCIse2Q6ayxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMTAsIDEzMiwgMjU1LCAwLjk1KSIsc3Ryb2tlV2lkdGg6KEE2KjIrNikqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Olg/MC45NTowLHRyYW5zaXRpb246Sj8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtjMn1gLGZpbHRlcjoiZHJvcC1zaGFkb3coMCAwIDJweCByZ2JhKDEwLDEzMiwyNTUsMC41NSkpIGRyb3Atc2hhZG93KDAgMCA0cHggcmdiYSgxMCwxMzIsMjU1LDAuMzIpKSJ9fSksUSgicGF0aCIse2Q6ayxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkiLHN0cm9rZVdpZHRoOjEuNSpxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6WD8wLjc6MCx0cmFuc2l0aW9uOko/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7YzJ9YH19KV19KSxRKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6SCxjaGlsZHJlbjpRKCJnIix7c3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbUSgicGF0aCIse2Q6ayxzdHJva2U6IiMzNDM2M2IiLHN0cm9rZVdpZHRoOk4rMi4yKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpNYXRoLm1pbigxLEIrMC4wOCksdHJhbnNpdGlvbjpgJHtGfSwgb3BhY2l0eSAke3p9ICR7R31gLGZpbHRlcjp2Nn19KSxRKCJwYXRoIix7ZDprLHN0cm9rZTpPNltLXSxzdHJva2VXaWR0aDpOLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6Qix0cmFuc2l0aW9uOmAke0Z9LCBvcGFjaXR5ICR7en0gJHtHfWAsZmlsdGVyOnY2fX0pXX0pfSldfSl9ZnVuY3Rpb24gajYoe3NpbXVsYXRvclJlc2l6ZTokLGRldmljZVR5cGU6SyxzdHJlYW1Db25maWc6Sixjb250YWluZXJXaWR0aDpaLGNvbnRhaW5lckhlaWdodDpYfSl7bGV0IFk9SDUoKSxxPXo2KCksW1YsTl09TSghMSksQj13MSgoKT0+UDgoe3R5cGU6Syxjb25maWc6Sj8/bnVsbCxjb250YWluZXJXaWR0aDpaLGNvbnRhaW5lckhlaWdodDpYfSksW0ssSixaLFhdKSx6PSQuaXNSZXNpemluZ3x8JC5pc0luZXJ0aWE/ImRyYWciOiQuaGFuZGxlSG92ZXJlZD8iaG92ZXIiOiJpZGxlIjtyZXR1cm4gUSgiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1sYWJlbCI6IlJlc2l6ZSBzaW11bGF0b3Igd2lkdGguIERyYWcgdGhlIGNvcm5lciBvciB1c2UgTGVmdCBhbmQgUmlnaHQgQXJyb3cga2V5czsgaG9sZCBTaGlmdCBmb3IgbGFyZ2VyIHN0ZXBzLiIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtdmFsdWVtaW4iOk1hdGgucm91bmQoJC5taW5XaWR0aCksImFyaWEtdmFsdWVtYXgiOk1hdGgucm91bmQoJC5tYXhXaWR0aCksImFyaWEtdmFsdWVub3ciOk1hdGgucm91bmQoJC5jb21taXR0ZWRXaWR0aCksdGFiSW5kZXg6MCxyZWY6JC5oYW5kbGVSZWYsb25LZXlEb3duOiQub25LZXlEb3duLG9uUG9pbnRlckRvd246JC5vblBvaW50ZXJEb3duLG9uUG9pbnRlck1vdmU6JC5vblBvaW50ZXJNb3ZlLG9uUG9pbnRlclVwOiQub25Qb2ludGVyRW5kLG9uUG9pbnRlckNhbmNlbDokLm9uUG9pbnRlckVuZCxvbkxvc3RQb2ludGVyQ2FwdHVyZTokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJFbnRlcjooKT0+JC5zZXRIYW5kbGVIb3ZlcmVkKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+JC5zZXRIYW5kbGVIb3ZlcmVkKCExKSxvbkZvY3VzOihHKT0+e04oRy5jdXJyZW50VGFyZ2V0Lm1hdGNoZXM/LigiOmZvY3VzLXZpc2libGUiKT8/ITEpfSxvbkJsdXI6KCk9Pk4oITEpLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHJpZ2h0Oi0xNCxib3R0b206LTE0LHdpZHRoOjYwLGhlaWdodDo2MCxib3JkZXI6Im5vbmUiLHBhZGRpbmc6MCxtYXJnaW46MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJmbGV4LWVuZCIsanVzdGlmeUNvbnRlbnQ6ImZsZXgtZW5kIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsY3Vyc29yOiJud3NlLXJlc2l6ZSIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6ImF1dG8iLG91dGxpbmU6Im5vbmUiLHpJbmRleDoyNSxXZWJraXRUYXBIaWdobGlnaHRDb2xvcjoidHJhbnNwYXJlbnQifSxjaGlsZHJlbjpRKE9LLHthcmM6QixwaGFzZTp6LHJlZHVjZWRNb3Rpb246WSxoaWdoQ29udHJhc3Q6cSxmb2N1c1Zpc2libGU6Vn0pfSl9ZnVuY3Rpb24gUEsoJCl7aWYoISR8fHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuO2xldCBLPWRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO0oudHlwZT0idGV4dC9jc3MiLEsuYXBwZW5kQ2hpbGQoSiksSi5zdHlsZVNoZWV0P0ouc3R5bGVTaGVldC5jc3NUZXh0PSQ6Si5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgkKSl9dmFyIFdLPSgkKT0+e3N3aXRjaCgkKXtjYXNlInN1Y2Nlc3MiOnJldHVybiBUSztjYXNlImluZm8iOnJldHVybiBFSztjYXNlIndhcm5pbmciOnJldHVybiB3SztjYXNlImVycm9yIjpyZXR1cm4gSUs7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LF9LPUFycmF5KDEyKS5maWxsKDApLERLPSh7dmlzaWJsZTokLGNsYXNzTmFtZTpLfSk9PntyZXR1cm4gaC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WyJzb25uZXItbG9hZGluZy13cmFwcGVyIixLXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpLCJkYXRhLXZpc2libGUiOiR9LGguY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItc3Bpbm5lciJ9LF9LLm1hcCgoSixaKT0+aC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InNvbm5lci1sb2FkaW5nLWJhciIsa2V5OmBzcGlubmVyLWJhci0ke1p9YH0pKSkpfSxUSz1oLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGguY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMy44NTctOS44MDlhLjc1Ljc1IDAgMDAtMS4yMTQtLjg4MmwtMy40ODMgNC43OS0xLjg4LTEuODhhLjc1Ljc1IDAgMTAtMS4wNiAxLjA2MWwyLjUgMi41YS43NS43NSAwIDAwMS4xMzctLjA4OWw0LTUuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSx3Sz1oLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGguY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNOS40MDEgMy4wMDNjMS4xNTUtMiA0LjA0My0yIDUuMTk3IDBsNy4zNTUgMTIuNzQ4YzEuMTU0IDItLjI5IDQuNS0yLjU5OSA0LjVINC42NDVjLTIuMzA5IDAtMy43NTItMi41LTIuNTk4LTQuNUw5LjQgMy4wMDN6TTEyIDguMjVhLjc1Ljc1IDAgMDEuNzUuNzV2My43NWEuNzUuNzUgMCAwMS0xLjUgMFY5YS43NS43NSAwIDAxLjc1LS43NXptMCA4LjI1YS43NS43NSAwIDEwMC0xLjUuNzUuNzUgMCAwMDAgMS41eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLEVLPWguY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0saC5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTctNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTkgOWEuNzUuNzUgMCAwMDAgMS41aC4yNTNhLjI1LjI1IDAgMDEuMjQ0LjMwNGwtLjQ1OSAyLjA2NkExLjc1IDEuNzUgMCAwMDEwLjc0NyAxNUgxMWEuNzUuNzUgMCAwMDAtMS41aC0uMjUzYS4yNS4yNSAwIDAxLS4yNDQtLjMwNGwuNDU5LTIuMDY2QTEuNzUgMS43NSAwIDAwOS4yNTMgOUg5eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLElLPWguY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0saC5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTgtNWEuNzUuNzUgMCAwMS43NS43NXY0LjVhLjc1Ljc1IDAgMDEtMS41IDB2LTQuNUEuNzUuNzUgMCAwMTEwIDV6bTAgMTBhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksYks9aC5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOiIxMiIsaGVpZ2h0OiIxMiIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9LGguY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksaC5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KSkseUs9KCk9PntsZXRbJCxLXT1oLnVzZVN0YXRlKGRvY3VtZW50LmhpZGRlbik7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57bGV0IEo9KCk9PntLKGRvY3VtZW50LmhpZGRlbil9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixKKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEopfSxbXSksJH0sbDg9MTtjbGFzcyBmNntjb25zdHJ1Y3Rvcigpe3RoaXMuc3Vic2NyaWJlPSgkKT0+e3JldHVybiB0aGlzLnN1YnNjcmliZXJzLnB1c2goJCksKCk9PntsZXQgSz10aGlzLnN1YnNjcmliZXJzLmluZGV4T2YoJCk7dGhpcy5zdWJzY3JpYmVycy5zcGxpY2UoSywxKX19LHRoaXMucHVibGlzaD0oJCk9Pnt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKEspPT5LKCQpKX0sdGhpcy5hZGRUb2FzdD0oJCk9Pnt0aGlzLnB1Ymxpc2goJCksdGhpcy50b2FzdHM9Wy4uLnRoaXMudG9hc3RzLCRdfSx0aGlzLmNyZWF0ZT0oJCk9Pnt2YXIgSztsZXR7bWVzc2FnZTpKLC4uLlp9PSQsWD10eXBlb2YoJD09bnVsbD92b2lkIDA6JC5pZCk9PT0ibnVtYmVyInx8KChLPSQuaWQpPT1udWxsP3ZvaWQgMDpLLmxlbmd0aCk+MD8kLmlkOmw4KyssWT10aGlzLnRvYXN0cy5maW5kKChWKT0+e3JldHVybiBWLmlkPT09WH0pLHE9JC5kaXNtaXNzaWJsZT09PXZvaWQgMD8hMDokLmRpc21pc3NpYmxlO2lmKHRoaXMuZGlzbWlzc2VkVG9hc3RzLmhhcyhYKSl0aGlzLmRpc21pc3NlZFRvYXN0cy5kZWxldGUoWCk7aWYoWSl0aGlzLnRvYXN0cz10aGlzLnRvYXN0cy5tYXAoKFYpPT57aWYoVi5pZD09PVgpcmV0dXJuIHRoaXMucHVibGlzaCh7Li4uViwuLi4kLGlkOlgsdGl0bGU6Sn0pLHsuLi5WLC4uLiQsaWQ6WCxkaXNtaXNzaWJsZTpxLHRpdGxlOkp9O3JldHVybiBWfSk7ZWxzZSB0aGlzLmFkZFRvYXN0KHt0aXRsZTpKLC4uLlosZGlzbWlzc2libGU6cSxpZDpYfSk7cmV0dXJuIFh9LHRoaXMuZGlzbWlzcz0oJCk9PntpZigkKXRoaXMuZGlzbWlzc2VkVG9hc3RzLmFkZCgkKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoSyk9Pksoe2lkOiQsZGlzbWlzczohMH0pKSk7ZWxzZSB0aGlzLnRvYXN0cy5mb3JFYWNoKChLKT0+e3RoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoSik9Pkooe2lkOksuaWQsZGlzbWlzczohMH0pKX0pO3JldHVybiAkfSx0aGlzLm1lc3NhZ2U9KCQsSyk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkssbWVzc2FnZTokfSl9LHRoaXMuZXJyb3I9KCQsSyk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkssbWVzc2FnZTokLHR5cGU6ImVycm9yIn0pfSx0aGlzLnN1Y2Nlc3M9KCQsSyk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkssdHlwZToic3VjY2VzcyIsbWVzc2FnZTokfSl9LHRoaXMuaW5mbz0oJCxLKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSyx0eXBlOiJpbmZvIixtZXNzYWdlOiR9KX0sdGhpcy53YXJuaW5nPSgkLEspPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5LLHR5cGU6Indhcm5pbmciLG1lc3NhZ2U6JH0pfSx0aGlzLmxvYWRpbmc9KCQsSyk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkssdHlwZToibG9hZGluZyIsbWVzc2FnZTokfSl9LHRoaXMucHJvbWlzZT0oJCxLKT0+e2lmKCFLKXJldHVybjtsZXQgSj12b2lkIDA7aWYoSy5sb2FkaW5nIT09dm9pZCAwKUo9dGhpcy5jcmVhdGUoey4uLksscHJvbWlzZTokLHR5cGU6ImxvYWRpbmciLG1lc3NhZ2U6Sy5sb2FkaW5nLGRlc2NyaXB0aW9uOnR5cGVvZiBLLmRlc2NyaXB0aW9uIT09ImZ1bmN0aW9uIj9LLmRlc2NyaXB0aW9uOnZvaWQgMH0pO2xldCBaPVByb21pc2UucmVzb2x2ZSgkIGluc3RhbmNlb2YgRnVuY3Rpb24/JCgpOiQpLFg9SiE9PXZvaWQgMCxZLHE9Wi50aGVuKGFzeW5jKE4pPT57aWYoWT1bInJlc29sdmUiLE5dLGguaXNWYWxpZEVsZW1lbnQoTikpWD0hMSx0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJkZWZhdWx0IixtZXNzYWdlOk59KTtlbHNlIGlmKHhLKE4pJiYhTi5vayl7WD0hMTtsZXQgej10eXBlb2YgSy5lcnJvcj09PSJmdW5jdGlvbiI/YXdhaXQgSy5lcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke04uc3RhdHVzfWApOksuZXJyb3IsRz10eXBlb2YgSy5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSy5kZXNjcmlwdGlvbihgSFRUUCBlcnJvciEgc3RhdHVzOiAke04uc3RhdHVzfWApOksuZGVzY3JpcHRpb24sVT10eXBlb2Ygej09PSJvYmplY3QiJiYhaC5pc1ZhbGlkRWxlbWVudCh6KT96OnttZXNzYWdlOnp9O3RoaXMuY3JlYXRlKHtpZDpKLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpHLC4uLlV9KX1lbHNlIGlmKE4gaW5zdGFuY2VvZiBFcnJvcil7WD0hMTtsZXQgej10eXBlb2YgSy5lcnJvcj09PSJmdW5jdGlvbiI/YXdhaXQgSy5lcnJvcihOKTpLLmVycm9yLEc9dHlwZW9mIEsuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEsuZGVzY3JpcHRpb24oTik6Sy5kZXNjcmlwdGlvbixVPXR5cGVvZiB6PT09Im9iamVjdCImJiFoLmlzVmFsaWRFbGVtZW50KHopP3o6e21lc3NhZ2U6en07dGhpcy5jcmVhdGUoe2lkOkosdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOkcsLi4uVX0pfWVsc2UgaWYoSy5zdWNjZXNzIT09dm9pZCAwKXtYPSExO2xldCB6PXR5cGVvZiBLLnN1Y2Nlc3M9PT0iZnVuY3Rpb24iP2F3YWl0IEsuc3VjY2VzcyhOKTpLLnN1Y2Nlc3MsRz10eXBlb2YgSy5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSy5kZXNjcmlwdGlvbihOKTpLLmRlc2NyaXB0aW9uLFU9dHlwZW9mIHo9PT0ib2JqZWN0IiYmIWguaXNWYWxpZEVsZW1lbnQoeik/ejp7bWVzc2FnZTp6fTt0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJzdWNjZXNzIixkZXNjcmlwdGlvbjpHLC4uLlV9KX19KS5jYXRjaChhc3luYyhOKT0+e2lmKFk9WyJyZWplY3QiLE5dLEsuZXJyb3IhPT12b2lkIDApe1g9ITE7bGV0IEI9dHlwZW9mIEsuZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IEsuZXJyb3IoTik6Sy5lcnJvcix6PXR5cGVvZiBLLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBLLmRlc2NyaXB0aW9uKE4pOksuZGVzY3JpcHRpb24sQz10eXBlb2YgQj09PSJvYmplY3QiJiYhaC5pc1ZhbGlkRWxlbWVudChCKT9COnttZXNzYWdlOkJ9O3RoaXMuY3JlYXRlKHtpZDpKLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjp6LC4uLkN9KX19KS5maW5hbGx5KCgpPT57aWYoWCl0aGlzLmRpc21pc3MoSiksSj12b2lkIDA7Sy5maW5hbGx5PT1udWxsfHxLLmZpbmFsbHkuY2FsbChLKX0pLFY9KCk9Pm5ldyBQcm9taXNlKChOLEIpPT5xLnRoZW4oKCk9PllbMF09PT0icmVqZWN0Ij9CKFlbMV0pOk4oWVsxXSkpLmNhdGNoKEIpKTtpZih0eXBlb2YgSiE9PSJzdHJpbmciJiZ0eXBlb2YgSiE9PSJudW1iZXIiKXJldHVybnt1bndyYXA6Vn07ZWxzZSByZXR1cm4gT2JqZWN0LmFzc2lnbihKLHt1bndyYXA6Vn0pfSx0aGlzLmN1c3RvbT0oJCxLKT0+e2xldCBKPShLPT1udWxsP3ZvaWQgMDpLLmlkKXx8bDgrKztyZXR1cm4gdGhpcy5jcmVhdGUoe2pzeDokKEopLGlkOkosLi4uS30pLEp9LHRoaXMuZ2V0QWN0aXZlVG9hc3RzPSgpPT57cmV0dXJuIHRoaXMudG9hc3RzLmZpbHRlcigoJCk9PiF0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoJC5pZCkpfSx0aGlzLnN1YnNjcmliZXJzPVtdLHRoaXMudG9hc3RzPVtdLHRoaXMuZGlzbWlzc2VkVG9hc3RzPW5ldyBTZXR9fXZhciBWMD1uZXcgZjYsU0s9KCQsSyk9PntsZXQgSj0oSz09bnVsbD92b2lkIDA6Sy5pZCl8fGw4Kys7cmV0dXJuIFYwLmFkZFRvYXN0KHt0aXRsZTokLC4uLkssaWQ6Sn0pLEp9LHhLPSgkKT0+e3JldHVybiAkJiZ0eXBlb2YgJD09PSJvYmplY3QiJiYib2siaW4gJCYmdHlwZW9mICQub2s9PT0iYm9vbGVhbiImJiJzdGF0dXMiaW4gJCYmdHlwZW9mICQuc3RhdHVzPT09Im51bWJlciJ9LFJLPVNLLHZLPSgpPT5WMC50b2FzdHMsaks9KCk9PlYwLmdldEFjdGl2ZVRvYXN0cygpLGMwPU9iamVjdC5hc3NpZ24oUksse3N1Y2Nlc3M6VjAuc3VjY2VzcyxpbmZvOlYwLmluZm8sd2FybmluZzpWMC53YXJuaW5nLGVycm9yOlYwLmVycm9yLGN1c3RvbTpWMC5jdXN0b20sbWVzc2FnZTpWMC5tZXNzYWdlLHByb21pc2U6VjAucHJvbWlzZSxkaXNtaXNzOlYwLmRpc21pc3MsbG9hZGluZzpWMC5sb2FkaW5nfSx7Z2V0SGlzdG9yeTp2SyxnZXRUb2FzdHM6akt9KTtQSygiW2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1sdHJdLGh0bWxbZGlyPWx0cl17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDotM3B4Oy0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kOjRweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6LTFweDstLXRvYXN0LXN2Zy1tYXJnaW4tZW5kOjBweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6YXV0bzstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgtMzUlLCAtMzUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF0saHRtbFtkaXI9cnRsXXstLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0OjRweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDotM3B4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydDowcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDotMXB4Oy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydDowOy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQ6YXV0bzstLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydDp1bnNldDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm06dHJhbnNsYXRlKDM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LWZhbWlseTp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sSGVsdmV0aWNhIE5ldWUsQXJpYWwsTm90byBTYW5zLHNhbnMtc2VyaWYsQXBwbGUgQ29sb3IgRW1vamksU2Vnb2UgVUkgRW1vamksU2Vnb2UgVUkgU3ltYm9sLE5vdG8gQ29sb3IgRW1vamk7LS1ncmF5MTpoc2woMCwgMCUsIDk5JSk7LS1ncmF5Mjpoc2woMCwgMCUsIDk3LjMlKTstLWdyYXkzOmhzbCgwLCAwJSwgOTUuMSUpOy0tZ3JheTQ6aHNsKDAsIDAlLCA5MyUpOy0tZ3JheTU6aHNsKDAsIDAlLCA5MC45JSk7LS1ncmF5Njpoc2woMCwgMCUsIDg4LjclKTstLWdyYXk3OmhzbCgwLCAwJSwgODUuOCUpOy0tZ3JheTg6aHNsKDAsIDAlLCA3OCUpOy0tZ3JheTk6aHNsKDAsIDAlLCA1Ni4xJSk7LS1ncmF5MTA6aHNsKDAsIDAlLCA1Mi4zJSk7LS1ncmF5MTE6aHNsKDAsIDAlLCA0My41JSk7LS1ncmF5MTI6aHNsKDAsIDAlLCA5JSk7LS1ib3JkZXItcmFkaXVzOjhweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowO21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZTtvdXRsaW5lOjA7ei1pbmRleDo5OTk5OTk5OTk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzIGVhc2V9QG1lZGlhIChob3Zlcjpub25lKSBhbmQgKHBvaW50ZXI6Y29hcnNlKXtbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1saWZ0ZWQ9dHJ1ZV17dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OnZhcigtLW9mZnNldC1yaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OnZhcigtLW9mZnNldC1sZWZ0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWNlbnRlcl17bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDp2YXIoLS1vZmZzZXQtdG9wKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOnZhcigtLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdF17LS15OnRyYW5zbGF0ZVkoMTAwJSk7LS1saWZ0LWFtb3VudDpjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tZ2FwKSk7ei1pbmRleDp2YXIoLS16LWluZGV4KTtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7dHJhbnNmb3JtOnZhcigtLXkpO3RvdWNoLWFjdGlvbjpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyxvcGFjaXR5IC40cyxoZWlnaHQgLjRzLGJveC1zaGFkb3cgLjJzO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOjA7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVde3BhZGRpbmc6MTZweDtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSk7d2lkdGg6dmFyKC0td2lkdGgpO2ZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweH1bZGF0YS1zb25uZXItdG9hc3RdOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDowOy0teTp0cmFuc2xhdGVZKC0xMDAlKTstLWxpZnQ6MTstLWxpZnQtYW1vdW50OmNhbGMoMSAqIHZhcigtLWdhcCkpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOjA7LS15OnRyYW5zbGF0ZVkoMTAwJSk7LS1saWZ0Oi0xOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGVzY3JpcHRpb25de2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjQ7Y29sb3I6IzNmM2YzZn1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGVzY3JpcHRpb25de2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjojZThlOGU4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtdGl0bGVde2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6aW5oZXJpdH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25de2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXNocmluazowO21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcHJvbWlzZT10cnVlXSBbZGF0YS1pY29uXT5zdmd7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7YW5pbWF0aW9uOnNvbm5lci1mYWRlLWluIC4zcyBlYXNlIGZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl0+KntmbGV4LXNocmluazowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl0gc3Zne21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jb250ZW50XXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25de2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo4cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tbm9ybWFsLWJnKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC10ZXh0KTttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQpO2JvcmRlcjpub25lO2ZvbnQtd2VpZ2h0OjUwMDtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXNocmluazowO3RyYW5zaXRpb246b3BhY2l0eSAuNHMsYm94LXNoYWRvdyAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDAgMCAycHggcmdiYSgwLDAsMCwuNCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25dOmZpcnN0LW9mLXR5cGV7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNhbmNlbF17Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDgpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNhbmNlbF17YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNsb3NlLWJ1dHRvbl17cG9zaXRpb246YWJzb2x1dGU7bGVmdDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQpO3JpZ2h0OnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQpO3RvcDowO2hlaWdodDoyMHB4O3dpZHRoOjIwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MDtjb2xvcjp2YXIoLS1ncmF5MTIpO2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWdyYXk0KTt0cmFuc2Zvcm06dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybSk7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxO3RyYW5zaXRpb246b3BhY2l0eSAuMXMsYmFja2dyb3VuZCAuMnMsYm9yZGVyLWNvbG9yIC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNsb3NlLWJ1dHRvbl06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSksMCAwIDAgMnB4IHJnYmEoMCwwLDAsLjIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOm5vdC1hbGxvd2VkfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV06aG92ZXIgW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWdyYXkyKTtib3JkZXItY29sb3I6dmFyKC0tZ3JheTUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMDAlO3JpZ2h0Oi0xMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6LTF9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXtib3R0b206NTAlO3RyYW5zZm9ybTpzY2FsZVkoMykgdHJhbnNsYXRlWSg1MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7dG9wOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoLTUwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9ZmFsc2VdW2RhdGEtcmVtb3ZlZD10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt0cmFuc2Zvcm06c2NhbGVZKDIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD10cnVlXTo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7aGVpZ2h0OmNhbGModmFyKC0tZ2FwKSArIDFweCk7Ym90dG9tOjEwMCU7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtbW91bnRlZD10cnVlXXstLXk6dHJhbnNsYXRlWSgwKTtvcGFjaXR5OjF9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPWZhbHNlXVtkYXRhLWZyb250PWZhbHNlXXstLXNjYWxlOnZhcigtLXRvYXN0cy1iZWZvcmUpICogMC4wNSArIDE7LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0LWFtb3VudCkgKiB2YXIoLS10b2FzdHMtYmVmb3JlKSkpIHNjYWxlKGNhbGMoLTEgKiB2YXIoLS1zY2FsZSkpKTtoZWlnaHQ6dmFyKC0tZnJvbnQtdG9hc3QtaGVpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpvcGFjaXR5IC40c31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteC1wb3NpdGlvbj1yaWdodF17cmlnaHQ6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPWZhbHNlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN0eWxlZD10cnVlXT4qe29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdmlzaWJsZT1mYWxzZV17b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSkpO2hlaWdodDp2YXIoLS1pbml0aWFsLWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD10cnVlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIC0xMDAlKSk7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXVtkYXRhLWV4cGFuZGVkPXRydWVdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1vZmZzZXQpICsgdmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD1mYWxzZV17LS15OnRyYW5zbGF0ZVkoNDAlKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjVzLG9wYWNpdHkgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdOjpiZWZvcmV7aGVpZ2h0OmNhbGModmFyKC0taW5pdGlhbC1oZWlnaHQpICsgMjAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSwwKSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCwwKSk7dHJhbnNpdGlvbjpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZWQ9dHJ1ZV17dXNlci1zZWxlY3Q6bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dLFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS15LXBvc2l0aW9uPXRvcF17YW5pbWF0aW9uLWR1cmF0aW9uOi4yczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1sZWZ0XXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtbGVmdH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPXJpZ2h0XXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtcmlnaHR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj11cF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXVwfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249ZG93bl17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWRvd259QGtleWZyYW1lcyBzd2lwZS1vdXQtbGVmdHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXgpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtcmlnaHR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSArIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXVwe2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXkpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteSkgLSAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1kb3due2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXkpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteSkgKyAxMDAlKSk7b3BhY2l0eTowfX1AbWVkaWEgKG1heC13aWR0aDo2MDBweCl7W2RhdGEtc29ubmVyLXRvYXN0ZXJde3Bvc2l0aW9uOmZpeGVkO3JpZ2h0OnZhcigtLW1vYmlsZS1vZmZzZXQtcmlnaHQpO2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KTt3aWR0aDoxMDAlfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9cnRsXXtsZWZ0OmNhbGModmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIC0xKX1bZGF0YS1zb25uZXItdG9hc3Rlcl0gW2RhdGEtc29ubmVyLXRvYXN0XXtsZWZ0OjA7cmlnaHQ6MDt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpICogMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1tb2JpbGUtb2Zmc2V0LWJvdHRvbSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KTtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTt0cmFuc2Zvcm06bm9uZX19W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWxpZ2h0XXstLW5vcm1hbC1iZzojZmZmOy0tbm9ybWFsLWJvcmRlcjp2YXIoLS1ncmF5NCk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MTIpOy0tc3VjY2Vzcy1iZzpoc2woMTQzLCA4NSUsIDk2JSk7LS1zdWNjZXNzLWJvcmRlcjpoc2woMTQ1LCA5MiUsIDg3JSk7LS1zdWNjZXNzLXRleHQ6aHNsKDE0MCwgMTAwJSwgMjclKTstLWluZm8tYmc6aHNsKDIwOCwgMTAwJSwgOTclKTstLWluZm8tYm9yZGVyOmhzbCgyMjEsIDkxJSwgOTMlKTstLWluZm8tdGV4dDpoc2woMjEwLCA5MiUsIDQ1JSk7LS13YXJuaW5nLWJnOmhzbCg0OSwgMTAwJSwgOTclKTstLXdhcm5pbmctYm9yZGVyOmhzbCg0OSwgOTElLCA4NCUpOy0td2FybmluZy10ZXh0OmhzbCgzMSwgOTIlLCA0NSUpOy0tZXJyb3ItYmc6aHNsKDM1OSwgMTAwJSwgOTclKTstLWVycm9yLWJvcmRlcjpoc2woMzU5LCAxMDAlLCA5NCUpOy0tZXJyb3ItdGV4dDpoc2woMzYwLCAxMDAlLCA0NSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF0gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWludmVydD10cnVlXXstLW5vcm1hbC1iZzojMDAwOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTMpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya117LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1iZy1ob3Zlcjpoc2woMCwgMCUsIDEyJSk7LS1ub3JtYWwtYm9yZGVyOmhzbCgwLCAwJSwgMjAlKTstLW5vcm1hbC1ib3JkZXItaG92ZXI6aHNsKDAsIDAlLCAyNSUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpOy0tc3VjY2Vzcy1iZzpoc2woMTUwLCAxMDAlLCA2JSk7LS1zdWNjZXNzLWJvcmRlcjpoc2woMTQ3LCAxMDAlLCAxMiUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNTAsIDg2JSwgNjUlKTstLWluZm8tYmc6aHNsKDIxNSwgMTAwJSwgNiUpOy0taW5mby1ib3JkZXI6aHNsKDIyMywgNDMlLCAxNyUpOy0taW5mby10ZXh0OmhzbCgyMTYsIDg3JSwgNjUlKTstLXdhcm5pbmctYmc6aHNsKDY0LCAxMDAlLCA2JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNjAsIDEwMCUsIDklKTstLXdhcm5pbmctdGV4dDpoc2woNDYsIDg3JSwgNjUlKTstLWVycm9yLWJnOmhzbCgzNTgsIDc2JSwgMTAlKTstLWVycm9yLWJvcmRlcjpoc2woMzU3LCA4OSUsIDE2JSk7LS1lcnJvci10ZXh0OmhzbCgzNTgsIDEwMCUsIDgxJSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXIpO2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XSBbZGF0YS1jbG9zZS1idXR0b25dOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnLWhvdmVyKTtib3JkZXItY29sb3I6dmFyKC0tbm9ybWFsLWJvcmRlci1ob3Zlcil9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXXtiYWNrZ3JvdW5kOnZhcigtLXN1Y2Nlc3MtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1zdWNjZXNzLWJvcmRlcik7Y29sb3I6dmFyKC0tc3VjY2Vzcy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXN1Y2Nlc3NdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXXtiYWNrZ3JvdW5kOnZhcigtLWluZm8tYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1pbmZvLWJvcmRlcik7Y29sb3I6dmFyKC0taW5mby10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWluZm9dIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXXtiYWNrZ3JvdW5kOnZhcigtLXdhcm5pbmctYmcpO2JvcmRlci1jb2xvcjp2YXIoLS13YXJuaW5nLWJvcmRlcik7Y29sb3I6dmFyKC0td2FybmluZy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXdhcm5pbmddIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1lcnJvcl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1lcnJvcl0gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWVycm9yLWJnKTtib3JkZXItY29sb3I6dmFyKC0tZXJyb3ItYm9yZGVyKTtjb2xvcjp2YXIoLS1lcnJvci10ZXh0KX0uc29ubmVyLWxvYWRpbmctd3JhcHBlcnstLXNpemU6MTZweDtoZWlnaHQ6dmFyKC0tc2l6ZSk7d2lkdGg6dmFyKC0tc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt6LWluZGV4OjEwfS5zb25uZXItbG9hZGluZy13cmFwcGVyW2RhdGEtdmlzaWJsZT1mYWxzZV17dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7YW5pbWF0aW9uOnNvbm5lci1mYWRlLW91dCAuMnMgZWFzZSBmb3J3YXJkc30uc29ubmVyLXNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7dG9wOjUwJTtsZWZ0OjUwJTtoZWlnaHQ6dmFyKC0tc2l6ZSk7d2lkdGg6dmFyKC0tc2l6ZSl9LnNvbm5lci1sb2FkaW5nLWJhcnthbmltYXRpb246c29ubmVyLXNwaW4gMS4ycyBsaW5lYXIgaW5maW5pdGU7YmFja2dyb3VuZDp2YXIoLS1ncmF5MTEpO2JvcmRlci1yYWRpdXM6NnB4O2hlaWdodDo4JTtsZWZ0Oi0xMCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0zLjklO3dpZHRoOjI0JX0uc29ubmVyLWxvYWRpbmctYmFyOmZpcnN0LWNoaWxke2FuaW1hdGlvbi1kZWxheTotMS4yczt0cmFuc2Zvcm06cm90YXRlKC4wMDAxZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMil7YW5pbWF0aW9uLWRlbGF5Oi0xLjFzO3RyYW5zZm9ybTpyb3RhdGUoMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgzKXthbmltYXRpb24tZGVsYXk6LTFzO3RyYW5zZm9ybTpyb3RhdGUoNjBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg0KXthbmltYXRpb24tZGVsYXk6LS45czt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNSl7YW5pbWF0aW9uLWRlbGF5Oi0uOHM7dHJhbnNmb3JtOnJvdGF0ZSgxMjBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg2KXthbmltYXRpb24tZGVsYXk6LS43czt0cmFuc2Zvcm06cm90YXRlKDE1MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDcpe2FuaW1hdGlvbi1kZWxheTotLjZzO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOCl7YW5pbWF0aW9uLWRlbGF5Oi0uNXM7dHJhbnNmb3JtOnJvdGF0ZSgyMTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg5KXthbmltYXRpb24tZGVsYXk6LS40czt0cmFuc2Zvcm06cm90YXRlKDI0MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDEwKXthbmltYXRpb24tZGVsYXk6LS4zczt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDExKXthbmltYXRpb24tZGVsYXk6LS4yczt0cmFuc2Zvcm06cm90YXRlKDMwMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDEyKXthbmltYXRpb24tZGVsYXk6LS4xczt0cmFuc2Zvcm06cm90YXRlKDMzMGRlZykgdHJhbnNsYXRlKDE0NiUpfUBrZXlmcmFtZXMgc29ubmVyLWZhZGUtaW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCl9MTAwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLW91dHswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCl9fUBrZXlmcmFtZXMgc29ubmVyLXNwaW57MCV7b3BhY2l0eToxfTEwMCV7b3BhY2l0eTouMTV9fUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbil7LnNvbm5lci1sb2FkaW5nLWJhcixbZGF0YS1zb25uZXItdG9hc3RdLFtkYXRhLXNvbm5lci10b2FzdF0+Knt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lIWltcG9ydGFudH19LnNvbm5lci1sb2FkZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyx0cmFuc2Zvcm0gLjJzfS5zb25uZXItbG9hZGVyW2RhdGEtdmlzaWJsZT1mYWxzZV17b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCkgdHJhbnNsYXRlKC01MCUsLTUwJSl9Iik7ZnVuY3Rpb24gbzIoJCl7cmV0dXJuICQubGFiZWwhPT12b2lkIDB9dmFyIGdLPTMsaEs9IjI0cHgiLGZLPSIxNnB4IixnNj00MDAwLG1LPTM1NixwSz0xNCx1Sz00NSxsSz0yMDA7ZnVuY3Rpb24geTAoLi4uJCl7cmV0dXJuICQuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKX1mdW5jdGlvbiBkSygkKXtsZXRbSyxKXT0kLnNwbGl0KCItIiksWj1bXTtpZihLKVoucHVzaChLKTtpZihKKVoucHVzaChKKTtyZXR1cm4gWn12YXIgY0s9KCQpPT57dmFyIEssSixaLFgsWSxxLFYsTixCO2xldHtpbnZlcnQ6eix0b2FzdDpHLHVuc3R5bGVkOkMsaW50ZXJhY3Rpbmc6VSxzZXRIZWlnaHRzOkYsdmlzaWJsZVRvYXN0czpMLGhlaWdodHM6ayxpbmRleDpILHRvYXN0czpQLGV4cGFuZGVkOnkscmVtb3ZlVG9hc3Q6VyxkZWZhdWx0UmljaENvbG9yczpBLGNsb3NlQnV0dG9uOlQsc3R5bGU6aSxjYW5jZWxCdXR0b25TdHlsZTp2LGFjdGlvbkJ1dHRvblN0eWxlOmosY2xhc3NOYW1lOmQ9IiIsZGVzY3JpcHRpb25DbGFzc05hbWU6WjE9IiIsZHVyYXRpb246cTEscG9zaXRpb246byxnYXA6STEsZXhwYW5kQnlEZWZhdWx0OmcsY2xhc3NOYW1lczpmLGljb25zOnMsY2xvc2VCdXR0b25BcmlhTGFiZWw6azE9IkNsb3NlIHRvYXN0In09JCxbVTEsVjFdPWgudXNlU3RhdGUobnVsbCksW0YxLEgxXT1oLnVzZVN0YXRlKG51bGwpLFtTLGNdPWgudXNlU3RhdGUoITEpLFtyLGVdPWgudXNlU3RhdGUoITEpLFtEMSxiXT1oLnVzZVN0YXRlKCExKSxbbSxZMV09aC51c2VTdGF0ZSghMSksW0ExLHBdPWgudXNlU3RhdGUoITEpLFtuLEcxXT1oLnVzZVN0YXRlKDApLFtQMSxYMF09aC51c2VTdGF0ZSgwKSxkMT1oLnVzZVJlZihHLmR1cmF0aW9ufHxxMXx8ZzYpLF8xPWgudXNlUmVmKG51bGwpLHAxPWgudXNlUmVmKG51bGwpLEIwPUg9PT0wLEswPUgrMTw9TCwkMT1HLnR5cGUsbjE9Ry5kaXNtaXNzaWJsZSE9PSExLE8wPUcuY2xhc3NOYW1lfHwiIix1MT1HLmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIix0MT1oLnVzZU1lbW8oKCk9PmsuZmluZEluZGV4KChYMSk9PlgxLnRvYXN0SWQ9PT1HLmlkKXx8MCxbayxHLmlkXSksVTA9aC51c2VNZW1vKCgpPT57dmFyIFgxO3JldHVybihYMT1HLmNsb3NlQnV0dG9uKSE9bnVsbD9YMTpUfSxbRy5jbG9zZUJ1dHRvbixUXSksVDE9aC51c2VNZW1vKCgpPT5HLmR1cmF0aW9ufHxxMXx8ZzYsW0cuZHVyYXRpb24scTFdKSxnMT1oLnVzZVJlZigwKSxZMD1oLnVzZVJlZigwKSxQMD1oLnVzZVJlZigwKSxlMT1oLnVzZVJlZihudWxsKSxbVzAsdjBdPW8uc3BsaXQoIi0iKSxfMD1oLnVzZU1lbW8oKCk9PntyZXR1cm4gay5yZWR1Y2UoKFgxLF8sbCk9PntpZihsPj10MSlyZXR1cm4gWDE7cmV0dXJuIFgxK18uaGVpZ2h0fSwwKX0sW2ssdDFdKSxKMD15SygpLGwxPUcuaW52ZXJ0fHx6LHYxPSQxPT09ImxvYWRpbmciO1kwLmN1cnJlbnQ9aC51c2VNZW1vKCgpPT50MSpJMStfMCxbdDEsXzBdKSxoLnVzZUVmZmVjdCgoKT0+e2QxLmN1cnJlbnQ9VDF9LFtUMV0pLGgudXNlRWZmZWN0KCgpPT57YyghMCl9LFtdKSxoLnVzZUVmZmVjdCgoKT0+e2xldCBYMT1wMS5jdXJyZW50O2lmKFgxKXtsZXQgXz1YMS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7cmV0dXJuIFgwKF8pLEYoKGwpPT5be3RvYXN0SWQ6Ry5pZCxoZWlnaHQ6Xyxwb3NpdGlvbjpHLnBvc2l0aW9ufSwuLi5sXSksKCk9PkYoKGwpPT5sLmZpbHRlcigoSzEpPT5LMS50b2FzdElkIT09Ry5pZCkpfX0sW0YsRy5pZF0pLGgudXNlTGF5b3V0RWZmZWN0KCgpPT57aWYoIVMpcmV0dXJuO2xldCBYMT1wMS5jdXJyZW50LF89WDEuc3R5bGUuaGVpZ2h0O1gxLnN0eWxlLmhlaWdodD0iYXV0byI7bGV0IGw9WDEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1gxLnN0eWxlLmhlaWdodD1fLFgwKGwpLEYoKEsxKT0+e2lmKCFLMS5maW5kKChCMSk9PkIxLnRvYXN0SWQ9PT1HLmlkKSlyZXR1cm5be3RvYXN0SWQ6Ry5pZCxoZWlnaHQ6bCxwb3NpdGlvbjpHLnBvc2l0aW9ufSwuLi5LMV07ZWxzZSByZXR1cm4gSzEubWFwKChCMSk9PkIxLnRvYXN0SWQ9PT1HLmlkP3suLi5CMSxoZWlnaHQ6bH06QjEpfSl9LFtTLEcudGl0bGUsRy5kZXNjcmlwdGlvbixGLEcuaWQsRy5qc3gsRy5hY3Rpb24sRy5jYW5jZWxdKTtsZXQgaDE9aC51c2VDYWxsYmFjaygoKT0+e2UoITApLEcxKFkwLmN1cnJlbnQpLEYoKFgxKT0+WDEuZmlsdGVyKChfKT0+Xy50b2FzdElkIT09Ry5pZCkpLHNldFRpbWVvdXQoKCk9PntXKEcpfSxsSyl9LFtHLFcsRixZMF0pO2gudXNlRWZmZWN0KCgpPT57aWYoRy5wcm9taXNlJiYkMT09PSJsb2FkaW5nInx8Ry5kdXJhdGlvbj09PTEvMHx8Ry50eXBlPT09ImxvYWRpbmciKXJldHVybjtsZXQgWDEsXz0oKT0+e2lmKFAwLmN1cnJlbnQ8ZzEuY3VycmVudCl7bGV0IEsxPW5ldyBEYXRlKCkuZ2V0VGltZSgpLWcxLmN1cnJlbnQ7ZDEuY3VycmVudD1kMS5jdXJyZW50LUsxfVAwLmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCl9LGw9KCk9PntpZihkMS5jdXJyZW50PT09MS8wKXJldHVybjtnMS5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpLFgxPXNldFRpbWVvdXQoKCk9PntHLm9uQXV0b0Nsb3NlPT1udWxsfHxHLm9uQXV0b0Nsb3NlLmNhbGwoRyxHKSxoMSgpfSxkMS5jdXJyZW50KX07aWYoeXx8VXx8SjApXygpO2Vsc2UgbCgpO3JldHVybigpPT5jbGVhclRpbWVvdXQoWDEpfSxbeSxVLEcsJDEsSjAsaDFdKSxoLnVzZUVmZmVjdCgoKT0+e2lmKEcuZGVsZXRlKWgxKCksRy5vbkRpc21pc3M9PW51bGx8fEcub25EaXNtaXNzLmNhbGwoRyxHKX0sW2gxLEcuZGVsZXRlXSk7ZnVuY3Rpb24gaTEoKXt2YXIgWDE7aWYocz09bnVsbD92b2lkIDA6cy5sb2FkaW5nKXt2YXIgXztyZXR1cm4gaC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eTAoZj09bnVsbD92b2lkIDA6Zi5sb2FkZXIsRz09bnVsbD92b2lkIDA6KF89Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Xy5sb2FkZXIsInNvbm5lci1sb2FkZXIiKSwiZGF0YS12aXNpYmxlIjokMT09PSJsb2FkaW5nIn0scy5sb2FkaW5nKX1yZXR1cm4gaC5jcmVhdGVFbGVtZW50KERLLHtjbGFzc05hbWU6eTAoZj09bnVsbD92b2lkIDA6Zi5sb2FkZXIsRz09bnVsbD92b2lkIDA6KFgxPUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlgxLmxvYWRlciksdmlzaWJsZTokMT09PSJsb2FkaW5nIn0pfWxldCBGMD1HLmljb258fChzPT1udWxsP3ZvaWQgMDpzWyQxXSl8fFdLKCQxKTt2YXIgQTAsTjA7cmV0dXJuIGguY3JlYXRlRWxlbWVudCgibGkiLHt0YWJJbmRleDowLHJlZjpwMSxjbGFzc05hbWU6eTAoZCxPMCxmPT1udWxsP3ZvaWQgMDpmLnRvYXN0LEc9PW51bGw/dm9pZCAwOihLPUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOksudG9hc3QsZj09bnVsbD92b2lkIDA6Zi5kZWZhdWx0LGY9PW51bGw/dm9pZCAwOmZbJDFdLEc9PW51bGw/dm9pZCAwOihKPUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkpbJDFdKSwiZGF0YS1zb25uZXItdG9hc3QiOiIiLCJkYXRhLXJpY2gtY29sb3JzIjooQTA9Ry5yaWNoQ29sb3JzKSE9bnVsbD9BMDpBLCJkYXRhLXN0eWxlZCI6IUJvb2xlYW4oRy5qc3h8fEcudW5zdHlsZWR8fEMpLCJkYXRhLW1vdW50ZWQiOlMsImRhdGEtcHJvbWlzZSI6Qm9vbGVhbihHLnByb21pc2UpLCJkYXRhLXN3aXBlZCI6QTEsImRhdGEtcmVtb3ZlZCI6ciwiZGF0YS12aXNpYmxlIjpLMCwiZGF0YS15LXBvc2l0aW9uIjpXMCwiZGF0YS14LXBvc2l0aW9uIjp2MCwiZGF0YS1pbmRleCI6SCwiZGF0YS1mcm9udCI6QjAsImRhdGEtc3dpcGluZyI6RDEsImRhdGEtZGlzbWlzc2libGUiOm4xLCJkYXRhLXR5cGUiOiQxLCJkYXRhLWludmVydCI6bDEsImRhdGEtc3dpcGUtb3V0IjptLCJkYXRhLXN3aXBlLWRpcmVjdGlvbiI6RjEsImRhdGEtZXhwYW5kZWQiOkJvb2xlYW4oeXx8ZyYmUyksImRhdGEtdGVzdGlkIjpHLnRlc3RJZCxzdHlsZTp7Ii0taW5kZXgiOkgsIi0tdG9hc3RzLWJlZm9yZSI6SCwiLS16LWluZGV4IjpQLmxlbmd0aC1ILCItLW9mZnNldCI6YCR7cj9uOlkwLmN1cnJlbnR9cHhgLCItLWluaXRpYWwtaGVpZ2h0IjpnPyJhdXRvIjpgJHtQMX1weGAsLi4uaSwuLi5HLnN0eWxlfSxvbkRyYWdFbmQ6KCk9PntiKCExKSxWMShudWxsKSxlMS5jdXJyZW50PW51bGx9LG9uUG9pbnRlckRvd246KFgxKT0+e2lmKFgxLmJ1dHRvbj09PTIpcmV0dXJuO2lmKHYxfHwhbjEpcmV0dXJuO2lmKF8xLmN1cnJlbnQ9bmV3IERhdGUsRzEoWTAuY3VycmVudCksWDEudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKFgxLnBvaW50ZXJJZCksWDEudGFyZ2V0LnRhZ05hbWU9PT0iQlVUVE9OIilyZXR1cm47YighMCksZTEuY3VycmVudD17eDpYMS5jbGllbnRYLHk6WDEuY2xpZW50WX19LG9uUG9pbnRlclVwOigpPT57dmFyIFgxLF8sbDtpZihtfHwhbjEpcmV0dXJuO2UxLmN1cnJlbnQ9bnVsbDtsZXQgSzE9TnVtYmVyKCgoWDE9cDEuY3VycmVudCk9PW51bGw/dm9pZCAwOlgxLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXgiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksTzE9TnVtYmVyKCgoXz1wMS5jdXJyZW50KT09bnVsbD92b2lkIDA6Xy5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCItLXN3aXBlLWFtb3VudC15IikucmVwbGFjZSgicHgiLCIiKSl8fDApLEIxPW5ldyBEYXRlKCkuZ2V0VGltZSgpLSgobD1fMS5jdXJyZW50KT09bnVsbD92b2lkIDA6bC5nZXRUaW1lKCkpLE4xPVUxPT09IngiP0sxOk8xLGIxPU1hdGguYWJzKE4xKS9CMTtpZihNYXRoLmFicyhOMSk+PXVLfHxiMT4wLjExKXtpZihHMShZMC5jdXJyZW50KSxHLm9uRGlzbWlzcz09bnVsbHx8Ry5vbkRpc21pc3MuY2FsbChHLEcpLFUxPT09IngiKUgxKEsxPjA/InJpZ2h0IjoibGVmdCIpO2Vsc2UgSDEoTzE+MD8iZG93biI6InVwIik7aDEoKSxZMSghMCk7cmV0dXJufWVsc2V7dmFyIGMxLHIxOyhjMT1wMS5jdXJyZW50KT09bnVsbHx8YzEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLCIwcHgiKSwocjE9cDEuY3VycmVudCk9PW51bGx8fHIxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IiwiMHB4Iil9cCghMSksYighMSksVjEobnVsbCl9LG9uUG9pbnRlck1vdmU6KFgxKT0+e3ZhciBfLGwsSzE7aWYoIWUxLmN1cnJlbnR8fCFuMSlyZXR1cm47aWYoKChfPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSk9PW51bGw/dm9pZCAwOl8udG9TdHJpbmcoKS5sZW5ndGgpPjApcmV0dXJuO2xldCBCMT1YMS5jbGllbnRZLWUxLmN1cnJlbnQueSxOMT1YMS5jbGllbnRYLWUxLmN1cnJlbnQueDt2YXIgYjE7bGV0IGMxPShiMT0kLnN3aXBlRGlyZWN0aW9ucykhPW51bGw/YjE6ZEsobyk7aWYoIVUxJiYoTWF0aC5hYnMoTjEpPjF8fE1hdGguYWJzKEIxKT4xKSlWMShNYXRoLmFicyhOMSk+TWF0aC5hYnMoQjEpPyJ4IjoieSIpO2xldCByMT17eDowLHk6MH0sTDA9KEMwKT0+e3JldHVybiAxLygxLjUrTWF0aC5hYnMoQzApLzIwKX07aWYoVTE9PT0ieSIpe2lmKGMxLmluY2x1ZGVzKCJ0b3AiKXx8YzEuaW5jbHVkZXMoImJvdHRvbSIpKWlmKGMxLmluY2x1ZGVzKCJ0b3AiKSYmQjE8MHx8YzEuaW5jbHVkZXMoImJvdHRvbSIpJiZCMT4wKXIxLnk9QjE7ZWxzZXtsZXQgQzA9QjEqTDAoQjEpO3IxLnk9TWF0aC5hYnMoQzApPE1hdGguYWJzKEIxKT9DMDpCMX19ZWxzZSBpZihVMT09PSJ4Iil7aWYoYzEuaW5jbHVkZXMoImxlZnQiKXx8YzEuaW5jbHVkZXMoInJpZ2h0IikpaWYoYzEuaW5jbHVkZXMoImxlZnQiKSYmTjE8MHx8YzEuaW5jbHVkZXMoInJpZ2h0IikmJk4xPjApcjEueD1OMTtlbHNle2xldCBDMD1OMSpMMChOMSk7cjEueD1NYXRoLmFicyhDMCk8TWF0aC5hYnMoTjEpP0MwOk4xfX1pZihNYXRoLmFicyhyMS54KT4wfHxNYXRoLmFicyhyMS55KT4wKXAoITApOyhsPXAxLmN1cnJlbnQpPT1udWxsfHxsLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC14IixgJHtyMS54fXB4YCksKEsxPXAxLmN1cnJlbnQpPT1udWxsfHxLMS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteSIsYCR7cjEueX1weGApfX0sVTAmJiFHLmpzeCYmJDEhPT0ibG9hZGluZyI/aC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiYXJpYS1sYWJlbCI6azEsImRhdGEtZGlzYWJsZWQiOnYxLCJkYXRhLWNsb3NlLWJ1dHRvbiI6ITAsb25DbGljazp2MXx8IW4xPygpPT57fTooKT0+e2gxKCksRy5vbkRpc21pc3M9PW51bGx8fEcub25EaXNtaXNzLmNhbGwoRyxHKX0sY2xhc3NOYW1lOnkwKGY9PW51bGw/dm9pZCAwOmYuY2xvc2VCdXR0b24sRz09bnVsbD92b2lkIDA6KFo9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Wi5jbG9zZUJ1dHRvbil9LChOMD1zPT1udWxsP3ZvaWQgMDpzLmNsb3NlKSE9bnVsbD9OMDpiSyk6bnVsbCwoJDF8fEcuaWNvbnx8Ry5wcm9taXNlKSYmRy5pY29uIT09bnVsbCYmKChzPT1udWxsP3ZvaWQgMDpzWyQxXSkhPT1udWxsfHxHLmljb24pP2guY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtaWNvbiI6IiIsY2xhc3NOYW1lOnkwKGY9PW51bGw/dm9pZCAwOmYuaWNvbixHPT1udWxsP3ZvaWQgMDooWD1HLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpYLmljb24pfSxHLnByb21pc2V8fEcudHlwZT09PSJsb2FkaW5nIiYmIUcuaWNvbj9HLmljb258fGkxKCk6bnVsbCxHLnR5cGUhPT0ibG9hZGluZyI/RjA6bnVsbCk6bnVsbCxoLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWNvbnRlbnQiOiIiLGNsYXNzTmFtZTp5MChmPT1udWxsP3ZvaWQgMDpmLmNvbnRlbnQsRz09bnVsbD92b2lkIDA6KFk9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WS5jb250ZW50KX0saC5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS10aXRsZSI6IiIsY2xhc3NOYW1lOnkwKGY9PW51bGw/dm9pZCAwOmYudGl0bGUsRz09bnVsbD92b2lkIDA6KHE9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6cS50aXRsZSl9LEcuanN4P0cuanN4OnR5cGVvZiBHLnRpdGxlPT09ImZ1bmN0aW9uIj9HLnRpdGxlKCk6Ry50aXRsZSksRy5kZXNjcmlwdGlvbj9oLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWRlc2NyaXB0aW9uIjoiIixjbGFzc05hbWU6eTAoWjEsdTEsZj09bnVsbD92b2lkIDA6Zi5kZXNjcmlwdGlvbixHPT1udWxsP3ZvaWQgMDooVj1HLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpWLmRlc2NyaXB0aW9uKX0sdHlwZW9mIEcuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP0cuZGVzY3JpcHRpb24oKTpHLmRlc2NyaXB0aW9uKTpudWxsKSxoLmlzVmFsaWRFbGVtZW50KEcuY2FuY2VsKT9HLmNhbmNlbDpHLmNhbmNlbCYmbzIoRy5jYW5jZWwpP2guY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7ImRhdGEtYnV0dG9uIjohMCwiZGF0YS1jYW5jZWwiOiEwLHN0eWxlOkcuY2FuY2VsQnV0dG9uU3R5bGV8fHYsb25DbGljazooWDEpPT57aWYoIW8yKEcuY2FuY2VsKSlyZXR1cm47aWYoIW4xKXJldHVybjtHLmNhbmNlbC5vbkNsaWNrPT1udWxsfHxHLmNhbmNlbC5vbkNsaWNrLmNhbGwoRy5jYW5jZWwsWDEpLGgxKCl9LGNsYXNzTmFtZTp5MChmPT1udWxsP3ZvaWQgMDpmLmNhbmNlbEJ1dHRvbixHPT1udWxsP3ZvaWQgMDooTj1HLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpOLmNhbmNlbEJ1dHRvbil9LEcuY2FuY2VsLmxhYmVsKTpudWxsLGguaXNWYWxpZEVsZW1lbnQoRy5hY3Rpb24pP0cuYWN0aW9uOkcuYWN0aW9uJiZvMihHLmFjdGlvbik/aC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWFjdGlvbiI6ITAsc3R5bGU6Ry5hY3Rpb25CdXR0b25TdHlsZXx8aixvbkNsaWNrOihYMSk9PntpZighbzIoRy5hY3Rpb24pKXJldHVybjtpZihHLmFjdGlvbi5vbkNsaWNrPT1udWxsfHxHLmFjdGlvbi5vbkNsaWNrLmNhbGwoRy5hY3Rpb24sWDEpLFgxLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2gxKCl9LGNsYXNzTmFtZTp5MChmPT1udWxsP3ZvaWQgMDpmLmFjdGlvbkJ1dHRvbixHPT1udWxsP3ZvaWQgMDooQj1HLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpCLmFjdGlvbkJ1dHRvbil9LEcuYWN0aW9uLmxhYmVsKTpudWxsKX07ZnVuY3Rpb24gaDYoKXtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4ibHRyIjtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiJsdHIiO2xldCAkPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpO2lmKCQ9PT0iYXV0byJ8fCEkKXJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmRpcmVjdGlvbjtyZXR1cm4gJH1mdW5jdGlvbiBySygkLEspe2xldCBKPXt9O3JldHVyblskLEtdLmZvckVhY2goKFosWCk9PntsZXQgWT1YPT09MSxxPVk/Ii0tbW9iaWxlLW9mZnNldCI6Ii0tb2Zmc2V0IixWPVk/Zks6aEs7ZnVuY3Rpb24gTihCKXtbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLmZvckVhY2goKHopPT57SltgJHtxfS0ke3p9YF09dHlwZW9mIEI9PT0ibnVtYmVyIj9gJHtCfXB4YDpCfSl9aWYodHlwZW9mIFo9PT0ibnVtYmVyInx8dHlwZW9mIFo9PT0ic3RyaW5nIilOKFopO2Vsc2UgaWYodHlwZW9mIFo9PT0ib2JqZWN0IilbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLmZvckVhY2goKEIpPT57aWYoWltCXT09PXZvaWQgMClKW2Ake3F9LSR7Qn1gXT1WO2Vsc2UgSltgJHtxfS0ke0J9YF09dHlwZW9mIFpbQl09PT0ibnVtYmVyIj9gJHtaW0JdfXB4YDpaW0JdfSk7ZWxzZSBOKFYpfSksSn12YXIgbTY9aC5mb3J3YXJkUmVmKGZ1bmN0aW9uKEssSil7bGV0e2lkOlosaW52ZXJ0OlgscG9zaXRpb246WT0iYm90dG9tLXJpZ2h0Iixob3RrZXk6cT1bImFsdEtleSIsIktleVQiXSxleHBhbmQ6VixjbG9zZUJ1dHRvbjpOLGNsYXNzTmFtZTpCLG9mZnNldDp6LG1vYmlsZU9mZnNldDpHLHRoZW1lOkM9ImxpZ2h0IixyaWNoQ29sb3JzOlUsZHVyYXRpb246RixzdHlsZTpMLHZpc2libGVUb2FzdHM6az1nSyx0b2FzdE9wdGlvbnM6SCxkaXI6UD1oNigpLGdhcDp5PXBLLGljb25zOlcsY29udGFpbmVyQXJpYUxhYmVsOkE9Ik5vdGlmaWNhdGlvbnMifT1LLFtULGldPWgudXNlU3RhdGUoW10pLHY9aC51c2VNZW1vKCgpPT57aWYoWilyZXR1cm4gVC5maWx0ZXIoKFMpPT5TLnRvYXN0ZXJJZD09PVopO3JldHVybiBULmZpbHRlcigoUyk9PiFTLnRvYXN0ZXJJZCl9LFtULFpdKSxqPWgudXNlTWVtbygoKT0+e3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoW1ldLmNvbmNhdCh2LmZpbHRlcigoUyk9PlMucG9zaXRpb24pLm1hcCgoUyk9PlMucG9zaXRpb24pKSkpfSxbdixZXSksW2QsWjFdPWgudXNlU3RhdGUoW10pLFtxMSxvXT1oLnVzZVN0YXRlKCExKSxbSTEsZ109aC51c2VTdGF0ZSghMSksW2Ysc109aC51c2VTdGF0ZShDIT09InN5c3RlbSI/Qzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzPyJkYXJrIjoibGlnaHQiOiJsaWdodCIpLGsxPWgudXNlUmVmKG51bGwpLFUxPXEuam9pbigiKyIpLnJlcGxhY2UoL0tleS9nLCIiKS5yZXBsYWNlKC9EaWdpdC9nLCIiKSxWMT1oLnVzZVJlZihudWxsKSxGMT1oLnVzZVJlZighMSksSDE9aC51c2VDYWxsYmFjaygoUyk9PntpKChjKT0+e3ZhciByO2lmKCEoKHI9Yy5maW5kKChlKT0+ZS5pZD09PVMuaWQpKT09bnVsbD92b2lkIDA6ci5kZWxldGUpKVYwLmRpc21pc3MoUy5pZCk7cmV0dXJuIGMuZmlsdGVyKCh7aWQ6ZX0pPT5lIT09Uy5pZCl9KX0sW10pO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e3JldHVybiBWMC5zdWJzY3JpYmUoKFMpPT57aWYoUy5kaXNtaXNzKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntpKChjKT0+Yy5tYXAoKHIpPT5yLmlkPT09Uy5pZD97Li4ucixkZWxldGU6ITB9OnIpKX0pO3JldHVybn1zZXRUaW1lb3V0KCgpPT57aC5mbHVzaFN5bmMoKCk9PntpKChjKT0+e2xldCByPWMuZmluZEluZGV4KChlKT0+ZS5pZD09PVMuaWQpO2lmKHIhPT0tMSlyZXR1cm5bLi4uYy5zbGljZSgwLHIpLHsuLi5jW3JdLC4uLlN9LC4uLmMuc2xpY2UocisxKV07cmV0dXJuW1MsLi4uY119KX0pfSl9KX0sW1RdKSxoLnVzZUVmZmVjdCgoKT0+e2lmKEMhPT0ic3lzdGVtIil7cyhDKTtyZXR1cm59aWYoQz09PSJzeXN0ZW0iKWlmKHdpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXMpcygiZGFyayIpO2Vsc2UgcygibGlnaHQiKTtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IFM9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKTt0cnl7Uy5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCh7bWF0Y2hlczpjfSk9PntpZihjKXMoImRhcmsiKTtlbHNlIHMoImxpZ2h0Iil9KX1jYXRjaChjKXtTLmFkZExpc3RlbmVyKCh7bWF0Y2hlczpyfSk9Pnt0cnl7aWYocilzKCJkYXJrIik7ZWxzZSBzKCJsaWdodCIpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fSl9fSxbQ10pLGgudXNlRWZmZWN0KCgpPT57aWYoVC5sZW5ndGg8PTEpbyghMSl9LFtUXSksaC51c2VFZmZlY3QoKCk9PntsZXQgUz0oYyk9Pnt2YXIgcjtpZihxLmV2ZXJ5KChiKT0+Y1tiXXx8Yy5jb2RlPT09Yikpe3ZhciBEMTtvKCEwKSwoRDE9azEuY3VycmVudCk9PW51bGx8fEQxLmZvY3VzKCl9aWYoYy5jb2RlPT09IkVzY2FwZSImJihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09azEuY3VycmVudHx8KChyPWsxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpyLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSkpbyghMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixTKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsUyl9LFtxXSksaC51c2VFZmZlY3QoKCk9PntpZihrMS5jdXJyZW50KXJldHVybigpPT57aWYoVjEuY3VycmVudClWMS5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksVjEuY3VycmVudD1udWxsLEYxLmN1cnJlbnQ9ITF9fSxbazEuY3VycmVudF0pLGguY3JlYXRlRWxlbWVudCgic2VjdGlvbiIse3JlZjpKLCJhcmlhLWxhYmVsIjpgJHtBfSAke1UxfWAsdGFiSW5kZXg6LTEsImFyaWEtbGl2ZSI6InBvbGl0ZSIsImFyaWEtcmVsZXZhbnQiOiJhZGRpdGlvbnMgdGV4dCIsImFyaWEtYXRvbWljIjoiZmFsc2UiLHN1cHByZXNzSHlkcmF0aW9uV2FybmluZzohMH0sai5tYXAoKFMsYyk9Pnt2YXIgcjtsZXRbZSxEMV09Uy5zcGxpdCgiLSIpO2lmKCF2Lmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KCJvbCIse2tleTpTLGRpcjpQPT09ImF1dG8iP2g2KCk6UCx0YWJJbmRleDotMSxyZWY6azEsY2xhc3NOYW1lOkIsImRhdGEtc29ubmVyLXRvYXN0ZXIiOiEwLCJkYXRhLXNvbm5lci10aGVtZSI6ZiwiZGF0YS15LXBvc2l0aW9uIjplLCJkYXRhLXgtcG9zaXRpb24iOkQxLHN0eWxlOnsiLS1mcm9udC10b2FzdC1oZWlnaHQiOmAkeygocj1kWzBdKT09bnVsbD92b2lkIDA6ci5oZWlnaHQpfHwwfXB4YCwiLS13aWR0aCI6YCR7bUt9cHhgLCItLWdhcCI6YCR7eX1weGAsLi4uTCwuLi5ySyh6LEcpfSxvbkJsdXI6KGIpPT57aWYoRjEuY3VycmVudCYmIWIuY3VycmVudFRhcmdldC5jb250YWlucyhiLnJlbGF0ZWRUYXJnZXQpKXtpZihGMS5jdXJyZW50PSExLFYxLmN1cnJlbnQpVjEuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLFYxLmN1cnJlbnQ9bnVsbH19LG9uRm9jdXM6KGIpPT57aWYoYi50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmYi50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZT09PSJmYWxzZSIpcmV0dXJuO2lmKCFGMS5jdXJyZW50KUYxLmN1cnJlbnQ9ITAsVjEuY3VycmVudD1iLnJlbGF0ZWRUYXJnZXR9LG9uTW91c2VFbnRlcjooKT0+byghMCksb25Nb3VzZU1vdmU6KCk9Pm8oITApLG9uTW91c2VMZWF2ZTooKT0+e2lmKCFJMSlvKCExKX0sb25EcmFnRW5kOigpPT5vKCExKSxvblBvaW50ZXJEb3duOihiKT0+e2lmKGIudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmIudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGU9PT0iZmFsc2UiKXJldHVybjtnKCEwKX0sb25Qb2ludGVyVXA6KCk9PmcoITEpfSx2LmZpbHRlcigoYik9PiFiLnBvc2l0aW9uJiZjPT09MHx8Yi5wb3NpdGlvbj09PVMpLm1hcCgoYixtKT0+e3ZhciBZMSxBMTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGNLLHtrZXk6Yi5pZCxpY29uczpXLGluZGV4Om0sdG9hc3Q6YixkZWZhdWx0UmljaENvbG9yczpVLGR1cmF0aW9uOihZMT1IPT1udWxsP3ZvaWQgMDpILmR1cmF0aW9uKSE9bnVsbD9ZMTpGLGNsYXNzTmFtZTpIPT1udWxsP3ZvaWQgMDpILmNsYXNzTmFtZSxkZXNjcmlwdGlvbkNsYXNzTmFtZTpIPT1udWxsP3ZvaWQgMDpILmRlc2NyaXB0aW9uQ2xhc3NOYW1lLGludmVydDpYLHZpc2libGVUb2FzdHM6ayxjbG9zZUJ1dHRvbjooQTE9SD09bnVsbD92b2lkIDA6SC5jbG9zZUJ1dHRvbikhPW51bGw/QTE6TixpbnRlcmFjdGluZzpJMSxwb3NpdGlvbjpTLHN0eWxlOkg9PW51bGw/dm9pZCAwOkguc3R5bGUsdW5zdHlsZWQ6SD09bnVsbD92b2lkIDA6SC51bnN0eWxlZCxjbGFzc05hbWVzOkg9PW51bGw/dm9pZCAwOkguY2xhc3NOYW1lcyxjYW5jZWxCdXR0b25TdHlsZTpIPT1udWxsP3ZvaWQgMDpILmNhbmNlbEJ1dHRvblN0eWxlLGFjdGlvbkJ1dHRvblN0eWxlOkg9PW51bGw/dm9pZCAwOkguYWN0aW9uQnV0dG9uU3R5bGUsY2xvc2VCdXR0b25BcmlhTGFiZWw6SD09bnVsbD92b2lkIDA6SC5jbG9zZUJ1dHRvbkFyaWFMYWJlbCxyZW1vdmVUb2FzdDpIMSx0b2FzdHM6di5maWx0ZXIoKHApPT5wLnBvc2l0aW9uPT1iLnBvc2l0aW9uKSxoZWlnaHRzOmQuZmlsdGVyKChwKT0+cC5wb3NpdGlvbj09Yi5wb3NpdGlvbiksc2V0SGVpZ2h0czpaMSxleHBhbmRCeURlZmF1bHQ6VixnYXA6eSxleHBhbmRlZDpxMSxzd2lwZURpcmVjdGlvbnM6Sy5zd2lwZURpcmVjdGlvbnN9KX0pKX0pKX0pO3ZhciBvSz17ekluZGV4OjIxNDc0ODM2NDcsIi0tbm9ybWFsLWJnIjoiIzFjMWMxZSIsIi0tbm9ybWFsLWJvcmRlciI6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikiLCItLW5vcm1hbC10ZXh0IjoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpIiwiLS1ib3JkZXItcmFkaXVzIjoiOHB4IiwiLS13aWR0aCI6IjMyMHB4In07ZnVuY3Rpb24gbjIoe2NvbG9yOiR9KXtyZXR1cm4gUSgic3BhbiIseyJkYXRhLXRlc3RpZCI6InBsYWluLXRvYXN0LWRvdCIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIix3aWR0aDo2LGhlaWdodDo2LGJvcmRlclJhZGl1czo5OTksYmFja2dyb3VuZDokfX0pfWZ1bmN0aW9uIHA2KCl7cmV0dXJuIFEobTYse3RoZW1lOiJkYXJrIixwb3NpdGlvbjoiYm90dG9tLWNlbnRlciIsdmlzaWJsZVRvYXN0czo0LGdhcDo4LG9mZnNldDp7Ym90dG9tOjI0fSxjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdGVyIixpY29uczp7ZXJyb3I6UShuMix7Y29sb3I6IiNmODcxNzEifSksc3VjY2VzczpRKG4yLHtjb2xvcjoiIzRhZGU4MCJ9KSx3YXJuaW5nOlEobjIse2NvbG9yOiIjZmJiZjI0In0pLGluZm86UShuMix7Y29sb3I6IiNhNWI0ZmMifSl9LHN0eWxlOm9LLGNvbnRhaW5lckFyaWFMYWJlbDoic2VydmUtc2ltIG5vdGlmaWNhdGlvbnMifSl9ZnVuY3Rpb24gdTYoe3RvYXN0OiR9KXtsZXQgSz0kLnN0YXR1cz09PSJlcnJvciIsSj0kLnN0YXR1cz09PSJ1cGxvYWRpbmciLFo9SiYmJC5wcm9ncmVzcyE9PW51bGwsWD0kLnByb2dyZXNzIT1udWxsP01hdGgucm91bmQoJC5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIFEoImRpdiIseyJkYXRhLXRlc3RpZCI6InVwbG9hZC10b2FzdCIsY2xhc3NOYW1lOmBmbGV4IHctW21pbigzMjBweCxjYWxjKDEwMHZ3LTMycHgpKV0gZmxleC1jb2wgZ2FwLTEuNSBweC0zIHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tb25vIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSAke0s/InNlbGVjdC10ZXh0IGN1cnNvci10ZXh0Ijoic2VsZWN0LW5vbmUgY3Vyc29yLWRlZmF1bHQifWAsY2hpbGRyZW46W1EoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuM3NdIixzdHlsZTp7YmFja2dyb3VuZDpKPyIjYTViNGZjIjokLnN0YXR1cz09PSJzdWNjZXNzIj8iIzRhZGU4MCI6IiNmODcxNzEifX0pLFEoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W0omJlomJmBVcGxvYWRpbmcgJHskLm5hbWV94oCmICR7WH0lYCxKJiYhWiYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsaW5nICR7JC5uYW1lfeKApmA6YEFkZGluZyAkeyQubmFtZX3igKZgKSwkLnN0YXR1cz09PSJzdWNjZXNzIiYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsZWQgJHskLm5hbWV9YDpgQWRkZWQgJHskLm5hbWV9IHRvIFBob3Rvc2ApLEsmJmAkeyQubmFtZX06ICR7JC5tZXNzYWdlPz8iVXBsb2FkIGZhaWxlZCJ9YF19KV19KSxKJiZRKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGgtWzNweF0gdy1mdWxsIGJnLXdoaXRlLzggcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4iLGNoaWxkcmVuOlo/USgiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgYmctYWNjZW50IHJvdW5kZWQtWzJweF0gW3RyYW5zaXRpb246d2lkdGhfMTIwbXNfbGluZWFyXSIsc3R5bGU6e3dpZHRoOmAke1h9JWB9fSk6USgiZGl2Iix7Y2xhc3NOYW1lOiJzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaC1mdWxsIHctWzQwJV0gYmctYWNjZW50IHJvdW5kZWQtWzJweF0ifSl9KV19KX1mdW5jdGlvbiBsNih7d2lkdGg6JCxoZWlnaHQ6Syx2aXNpYmxlOkp9KXtyZXR1cm4gUSgiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctcGFuZWwtYmctdHJhbnNsdWNlbnQgc2hhZG93LVswXzFweF8ycHhfcmdiYSgwLDAsMCwwLjE4KSwwXzZweF8xOHB4X3JnYmEoMCwwLDAsMC4yOCksaW5zZXRfMF8wXzBfMXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNildIGJhY2tkcm9wLWJsdXItbWQgYmFja2Ryb3Atc2F0dXJhdGUtMTUwIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7b3BhY2l0eTpKPzE6MCx0cmFuc2Zvcm06YHRyYW5zbGF0ZVkoJHtKPzA6NH1weCkgc2NhbGUoJHtKPzE6MC45Nn0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjoib3BhY2l0eSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCB0cmFuc2Zvcm0gMjIwbXMgY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkifSxjaGlsZHJlbjpbTWF0aC5yb3VuZCgkKSwiICIsUSgic3BhbiIse2NsYXNzTmFtZToib3BhY2l0eS02MCBteC0wLjUiLGNoaWxkcmVuOiLDlyJ9KSwiICIsTWF0aC5yb3VuZChLKV19KX1mdW5jdGlvbiBkNih7c3RyZWFtaW5nOiR9KXtsZXQgSz0kPyIjNGFkZTgwIjoiIzhlOGU5MyI7cmV0dXJuIFEoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJzdHJlYW0tc3RhdHVzLXBpbGwiLGNsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC1bNXB4XSB0ZXh0LVsxMnB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6S30sImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2hpbGRyZW46W1EoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMThzX2Vhc2VdIixzdHlsZTp7YmFja2dyb3VuZDpLfX0pLCQ/ImxpdmUiOiJjb25uZWN0aW5nIl19KX1mdW5jdGlvbiBuSygkLEssSil7bGV0IFo9Si5sYXQqTWF0aC5QSS8xODAsWD0oJC1KLmxhdCkqTWF0aC5QSS8xODA7cmV0dXJue3g6KEstSi5sbmcpKk1hdGguUEkvMTgwKk1hdGguY29zKFopKjYzNzEwMDAsejotWCo2MzcxMDAwfX1mdW5jdGlvbiBpSygkLEssSil7bGV0IFo9Si5sYXQqTWF0aC5QSS8xODAsWD0tSy82MzcxMDAwKigxODAvTWF0aC5QSSksWT0kLyg2MzcxMDAwKk1hdGguY29zKFopKSooMTgwL01hdGguUEkpO3JldHVybntsYXQ6Si5sYXQrWCxsbmc6Si5sbmcrWX19ZnVuY3Rpb24gYUsoJCxLLEosWixYKXtsZXQgWT1YKlgscT1ZKlgsVj0oTixCLHosRyk9PjAuNSooMipCKygtTit6KSpYKygyKk4tNSpCKzQqei1HKSpZKygtTiszKkItMyp6K0cpKnEpO3JldHVybnt4OlYoJC54LEsueCxKLngsWi54KSx6OlYoJC56LEsueixKLnosWi56KSx5OlYoJC55LEsueSxKLnksWi55KSxyYXdBbHQ6VigkLnJhd0FsdCxLLnJhd0FsdCxKLnJhd0FsdCxaLnJhd0FsdCl9fWZ1bmN0aW9uIHNLKCQsSyxKKXtpZigkLmxlbmd0aDwyKXJldHVybiAkLnNsaWNlKCk7bGV0IFo9W10sWD0kLmxlbmd0aCxZPUo/WDpYLTE7Zm9yKGxldCBxPTA7cTxZO3ErKyl7bGV0IFY9JFtKPyhxLTErWCklWDpNYXRoLm1heCgwLHEtMSldLE49JFtxJVhdLEI9JFsocSsxKSVYXSx6PSRbSj8ocSsyKSVYOk1hdGgubWluKFgtMSxxKzIpXSxHPUIueC1OLngsQz1CLnotTi56LFU9TWF0aC5oeXBvdChHLEMpLEY9TWF0aC5tYXgoMixNYXRoLmNlaWwoVS9LKSk7Zm9yKGxldCBMPTA7TDxGO0wrKyl7bGV0IGs9TC9GO1oucHVzaChhSyhWLE4sQix6LGspKX19aWYoIUopWi5wdXNoKCRbWC0xXSk7cmV0dXJuIFp9ZnVuY3Rpb24gYzYoJCl7aWYoJC53YXlwb2ludHMubGVuZ3RoPDIpdGhyb3cgRXJyb3IoYFRyYWlsICR7JC5pZH0gbmVlZHMgYXQgbGVhc3QgMiB3YXlwb2ludHNgKTtsZXQgSz17bGF0OiQud2F5cG9pbnRzLnJlZHVjZSgoTCxrKT0+TCtrLmxhdCwwKS8kLndheXBvaW50cy5sZW5ndGgsbG5nOiQud2F5cG9pbnRzLnJlZHVjZSgoTCxrKT0+TCtrLmxuZywwKS8kLndheXBvaW50cy5sZW5ndGh9LEo9JC53YXlwb2ludHMubWFwKChMKT0+TC5hbHQ/PzApLFo9TWF0aC5taW4oLi4uSiksWD1NYXRoLm1heCguLi5KKSxZPSQud2F5cG9pbnRzLm1hcCgoTCk9PntsZXR7eDprLHo6SH09bksoTC5sYXQsTC5sbmcsSyksUD1MLmFsdD8/MDtyZXR1cm57eDprLHo6SCx5OlAtWixyYXdBbHQ6UH19KSxxPXNLKFksOCwhISQubG9vcCksVj1bXSxOPTA7Zm9yKGxldCBMPTA7TDxxLmxlbmd0aDtMKyspe2xldCBrPXFbTF07aWYoTD4wKXtsZXQgVz1xW0wtMV07Tis9TWF0aC5oeXBvdChrLngtVy54LGsuei1XLnosay55LVcueSl9bGV0e2xhdDpILGxuZzpQfT1pSyhrLngsay56LEspLHk9TWF0aC5tYXgoMCxrLnkpO1YucHVzaCh7eDprLngsejprLnoseSxhcmM6TixsYXQ6SCxsbmc6UH0pfWxldCBCPTEvMCx6PS0xLzAsRz0xLzAsQz0tMS8wLFU9MS8wLEY9LTEvMDtmb3IobGV0IEwgb2YgVil7aWYoTC54PEIpQj1MLng7aWYoTC54Pnopej1MLng7aWYoTC56PEcpRz1MLno7aWYoTC56PkMpQz1MLno7aWYoTC55PFUpVT1MLnk7aWYoTC55PkYpRj1MLnl9cmV0dXJue3RyYWlsOiQsb3JpZ2luOksscG9pbnRzOlYsdG90YWxEaXN0YW5jZTpWW1YubGVuZ3RoLTFdLmFyYyxib3VuZHM6e3g6W0Isel0seTpbVSxGXSx6OltHLENdfSxyYXdNaW5BbHQ6WixyYXdNYXhBbHQ6WH19ZnVuY3Rpb24gSjUoJCxLKXtsZXQgSj0kLnRvdGFsRGlzdGFuY2U7aWYoSj09PTApcmV0dXJuICQucG9pbnRzWzBdO2xldCBaPUs7aWYoJC50cmFpbC5sb29wKVo9KFolSitKKSVKO2Vsc2V7aWYoWjw9MClyZXR1cm4gJC5wb2ludHNbMF07aWYoWj49SilyZXR1cm4gJC5wb2ludHNbJC5wb2ludHMubGVuZ3RoLTFdfWxldCBYPTAsWT0kLnBvaW50cy5sZW5ndGgtMTt3aGlsZShYKzE8WSl7bGV0IHo9WCtZPj4+MTtpZigkLnBvaW50c1t6XS5hcmM8PVopWD16O2Vsc2UgWT16fWxldCBxPSQucG9pbnRzW1hdLFY9JC5wb2ludHNbWV0sTj1WLmFyYy1xLmFyYyxCPU49PT0wPzA6KFotcS5hcmMpL047cmV0dXJue3g6cS54KyhWLngtcS54KSpCLHo6cS56KyhWLnotcS56KSpCLHk6cS55KyhWLnktcS55KSpCLGFyYzpaLGxhdDpxLmxhdCsoVi5sYXQtcS5sYXQpKkIsbG5nOnEubG5nKyhWLmxuZy1xLmxuZykqQn19ZnVuY3Rpb24gZDgoJCl7c3dpdGNoKCQpe2Nhc2Uid2FsayI6cmV0dXJuIDEuNDtjYXNlInJ1biI6cmV0dXJuIDM7Y2FzZSJjeWNsZSI6cmV0dXJuIDUuNTtjYXNlImRyaXZlIjpyZXR1cm4gMTMuNH19dmFyIHRLPVt7bGF0OjM3LjMzMjcyLGxuZzotMTIyLjAwODMzLGFsdDo0OX0se2xhdDozNy4zMzMwOSxsbmc6LTEyMi4wMDczNSxhbHQ6NDh9LHtsYXQ6MzcuMzMzNzMsbG5nOi0xMjIuMDA2NjMsYWx0OjQ5fSx7bGF0OjM3LjMzNDU0LGxuZzotMTIyLjAwNjI3LGFsdDo0OX0se2xhdDozNy4zMzU0LGxuZzotMTIyLjAwNjMzLGFsdDo0OX0se2xhdDozNy4zMzYxOCxsbmc6LTEyMi4wMDY3OSxhbHQ6NDV9LHtsYXQ6MzcuMzM2NzUsbG5nOi0xMjIuMDA3NTksYWx0OjQ1fSx7bGF0OjM3LjMzNzA0LGxuZzotMTIyLjAwODYxLGFsdDo0Nn0se2xhdDozNy4zMzY5OCxsbmc6LTEyMi4wMDk2OSxhbHQ6NDh9LHtsYXQ6MzcuMzM2NjIsbG5nOi0xMjIuMDEwNjYsYWx0OjQ4fSx7bGF0OjM3LjMzNTk4LGxuZzotMTIyLjAxMTM4LGFsdDo0OX0se2xhdDozNy4zMzUxNyxsbmc6LTEyMi4wMTE3NCxhbHQ6NTB9LHtsYXQ6MzcuMzM0MzEsbG5nOi0xMjIuMDExNjksYWx0OjUwfSx7bGF0OjM3LjMzMzU0LGxuZzotMTIyLjAxMTIyLGFsdDo1MH0se2xhdDozNy4zMzI5Nixsbmc6LTEyMi4wMTA0MixhbHQ6NTF9LHtsYXQ6MzcuMzMyNjgsbG5nOi0xMjIuMDA5NCxhbHQ6NTB9XSxlSz1be2xhdDozNy44MzIxMixsbmc6LTEyMi40ODA2NSxhbHQ6MzB9LHtsYXQ6MzcuODI5MzcsbG5nOi0xMjIuNDc5NzQsYWx0OjMwfSx7bGF0OjM3LjgyNjQ5LGxuZzotMTIyLjQ3OTQsYWx0OjMwfSx7bGF0OjM3LjgyMzYyLGxuZzotMTIyLjQ3OTA3LGFsdDo0NX0se2xhdDozNy44MjA3NCxsbmc6LTEyMi40Nzg3MyxhbHQ6NTl9LHtsYXQ6MzcuODE3ODYsbG5nOi0xMjIuNDc4MzksYWx0OjY2fSx7bGF0OjM3LjgxNDk4LGxuZzotMTIyLjQ3ODA2LGFsdDo2Nn0se2xhdDozNy44MTIxMSxsbmc6LTEyMi40Nzc3MixhbHQ6NTh9LHtsYXQ6MzcuODA5MjMsbG5nOi0xMjIuNDc3MzQsYWx0OjQ0fSx7bGF0OjM3LjgwOTQ5LGxuZzotMTIyLjQ3NzMsYWx0OjQ1fSx7bGF0OjM3LjgxMjM2LGxuZzotMTIyLjQ3NzY1LGFsdDo1OX0se2xhdDozNy44MTUyNCxsbmc6LTEyMi40Nzc5OCxhbHQ6NjZ9LHtsYXQ6MzcuODE4MTIsbG5nOi0xMjIuNDc4MzIsYWx0OjY2fSx7bGF0OjM3LjgyMSxsbmc6LTEyMi40Nzg2NixhbHQ6NTh9LHtsYXQ6MzcuODIzODcsbG5nOi0xMjIuNDc5LGFsdDo0NH0se2xhdDozNy44MjY3NSxsbmc6LTEyMi40NzkzMyxhbHQ6MzB9LHtsYXQ6MzcuODI5NjMsbG5nOi0xMjIuNDc5NjcsYWx0OjMwfSx7bGF0OjM3LjgzMjMzLGxuZzotMTIyLjQ4MDcyLGFsdDozMH1dLCRKPVt7bGF0OjM3Ljg4NjY0LGxuZzotMTIyLjYyNTk5LGFsdDoxMjF9LHtsYXQ6MzcuODg4ODcsbG5nOi0xMjIuNjIzMzIsYWx0OjEzNX0se2xhdDozNy44OTExNSxsbmc6LTEyMi42MjE2LGFsdDoxNjR9LHtsYXQ6MzcuODkzNTMsbG5nOi0xMjIuNjE5MjEsYWx0OjE4MH0se2xhdDozNy44OTQ2Nixsbmc6LTEyMi42MTU3NyxhbHQ6MjIwfSx7bGF0OjM3Ljg5NjMxLGxuZzotMTIyLjYxMjY4LGFsdDoyNzN9LHtsYXQ6MzcuODk5MTcsbG5nOi0xMjIuNjEwOTgsYWx0OjMxM30se2xhdDozNy45MDE2Nixsbmc6LTEyMi42MDg1NSxhbHQ6MzQyfSx7bGF0OjM3LjkwMTk5LGxuZzotMTIyLjYwNjAxLGFsdDo0MDh9LHtsYXQ6MzcuOTAzMzksbG5nOi0xMjIuNjA0MDEsYWx0OjQ1MH0se2xhdDozNy45MDY2Mixsbmc6LTEyMi42MDI5MSxhbHQ6NDQwfSx7bGF0OjM3LjkwOTcxLGxuZzotMTIyLjYwMTczLGFsdDo0MzJ9LHtsYXQ6MzcuOTEyMTMsbG5nOi0xMjIuNjAwMDcsYWx0OjQzNn0se2xhdDozNy45MTQzOSxsbmc6LTEyMi41OTc4LGFsdDo0MTB9LHtsYXQ6MzcuOTEyODUsbG5nOi0xMjIuNTk1MDQsYWx0OjQyMn0se2xhdDozNy45MTI3NCxsbmc6LTEyMi41OTIwMixhbHQ6NDI1fSx7bGF0OjM3LjkxNSxsbmc6LTEyMi41OTAzMixhbHQ6NDEyfSx7bGF0OjM3LjkxNjM3LGxuZzotMTIyLjU4OTAzLGFsdDo0MDZ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTg1OTUsYWx0OjM4Mn0se2xhdDozNy45MTc0LGxuZzotMTIyLjU4Mzk4LGFsdDozNzJ9LHtsYXQ6MzcuOTE2NDIsbG5nOi0xMjIuNTgyMzYsYWx0OjM1Mn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODAxMSxhbHQ6MzQyfV0sS0o9W3tsYXQ6NDAuNzgyMTYsbG5nOi03My45NjI1NCxhbHQ6Mzd9LHtsYXQ6NDAuNzgyMjEsbG5nOi03My45NjA5OCxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjgsbG5nOi03My45NjAxLGFsdDozNn0se2xhdDo0MC43ODQ0LGxuZzotNzMuOTU5MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg1NSxsbmc6LTczLjk1ODQ4LGFsdDozNn0se2xhdDo0MC43ODY2NCxsbmc6LTczLjk1Nzc0LGFsdDozNn0se2xhdDo0MC43ODc5LGxuZzotNzMuOTU3NjQsYWx0OjM2fSx7bGF0OjQwLjc4ODk4LGxuZzotNzMuOTU3OTIsYWx0OjM2fSx7bGF0OjQwLjc4ODY4LGxuZzotNzMuOTU5NTEsYWx0OjM3fSx7bGF0OjQwLjc4ODk3LGxuZzotNzMuOTYxMTIsYWx0OjM2fSx7bGF0OjQwLjc4ODMzLGxuZzotNzMuOTYyNSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4MjgsbG5nOi03My45NjQxNixhbHQ6Mzd9LHtsYXQ6NDAuNzg4MDUsbG5nOi03My45NjU3MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg2OTEsbG5nOi03My45NjYzNixhbHQ6MzZ9LHtsYXQ6NDAuNzg1NjYsbG5nOi03My45NjY2NSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NTgsbG5nOi03My45NjYwOCxhbHQ6MzZ9LHtsYXQ6NDAuNzg0MDIsbG5nOi03My45NjQ1OSxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjIsbG5nOi03My45NjMzNCxhbHQ6Mzd9XSxKSj1be2xhdDozNy41OTY1OSxsbmc6LTEyMi41MDMxNixhbHQ6NH0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg1MDUsbG5nOi0xMjIuNTA2OTgsYWx0OjkzfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH1dLFE1PVt7aWQ6ImFwcGxlLXBhcmstbG9vcCIsbmFtZToiQXBwbGUgUGFyayBMb29wIixkZXNjcmlwdGlvbjoiQ3VwZXJ0aW5vIOKAoiBmbGF0IHJpbmcgcm9hZCIsbW9kZToid2FsayIsd2F5cG9pbnRzOnRLLGxvb3A6ITB9LHtpZDoiZ29sZGVuLWdhdGUiLG5hbWU6IkdvbGRlbiBHYXRlIENyb3NzaW5nIixkZXNjcmlwdGlvbjoiU2FuIEZyYW5jaXNjbyDigKIgYnJpZGdlIHJvdW5kLXRyaXAiLG1vZGU6InJ1biIsd2F5cG9pbnRzOmVLLGxvb3A6ITB9LHtpZDoidGFtLXJpZGdlIixuYW1lOiJNdC4gVGFtIFJpZGdlIixkZXNjcmlwdGlvbjoiU3RpbnNvbiBCZWFjaCDigKIgU3RlZXAgUmF2aW5lICsgTWF0dCBEYXZpcyBsb29wIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6JEosbG9vcDohMH0se2lkOiJjZW50cmFsLXBhcmsiLG5hbWU6IlJlc2Vydm9pciBMb29wIixkZXNjcmlwdGlvbjoiQ2VudHJhbCBQYXJrIOKAoiAyLjUga20iLG1vZGU6InJ1biIsd2F5cG9pbnRzOktKLGxvb3A6ITB9LHtpZDoicGNoLXBhY2lmaWNhIixuYW1lOiJQYWNpZmljIENvYXN0IEh3eSIsZGVzY3JpcHRpb246IlBhY2lmaWNhIOKAoiBEZXZpbCdzIFNsaWRlIHJvdW5kLXRyaXAiLG1vZGU6ImRyaXZlIix3YXlwb2ludHM6SkosbG9vcDohMH1dO2Z1bmN0aW9uIEcwKHtvcGVuOiQsb25PcGVuQ2hhbmdlOkssc3VtbWFyeTpKLGNoaWxkcmVuOlosc3VtbWFyeUNsYXNzTmFtZTpYPSIiLGJvZHlDbGFzc05hbWU6WT0iZmxleCBmbGV4LWNvbCBnYXAtMi41IHB0LTIuNSIsY2xhc3NOYW1lOnE9IiIsLi4uVn0pe3JldHVybiBRKCJkZXRhaWxzIix7b3BlbjokLG9uVG9nZ2xlOihOKT0+SyhOLmN1cnJlbnRUYXJnZXQub3BlbiksY2xhc3NOYW1lOmBsZW0tc2VjdGlvbiBiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIgJHtxfWAsLi4uVixjaGlsZHJlbjpbUSgic3VtbWFyeSIse2NsYXNzTmFtZTpgbGVtLXRvZ2dsZSBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSB0ZXh0LXdoaXRlLzkwIG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldICR7WH1gLGNoaWxkcmVuOltKLFEoZTUse29wZW46JH0pXX0pLFEoImRpdiIse2NsYXNzTmFtZTpZLGNoaWxkcmVuOlp9KV19KX1mdW5jdGlvbiBpMih7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6SixkaXNhYmxlZDpaLG9uQ2hhbmdlOlgsY2xhc3NOYW1lOll9KXtsZXRbcSxWXT1NKCExKSxOPUkobnVsbCksQj1JKG51bGwpLFt6LEddPU0obnVsbCksQz0oKT0+e2xldCBrPU4uY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIWspcmV0dXJuO0coe3RvcDprLmJvdHRvbSs0LGxlZnQ6ay5sZWZ0LG1pbldpZHRoOmsud2lkdGh9KX07RTAoKCk9PntpZihxKUMoKX0sW3FdKSxFMCgoKT0+e2lmKCFxfHwheilyZXR1cm47bGV0IGs9Qi5jdXJyZW50O2lmKCFrKXJldHVybjtsZXQgSD04LFA9d2luZG93LmlubmVyV2lkdGgtay5vZmZzZXRXaWR0aC1IO2lmKHoubGVmdD5QKUcoey4uLnosbGVmdDpNYXRoLm1heChILFApfSl9LFtxLHpdKSxFKCgpPT57aWYoIXEpcmV0dXJuO2xldCBrPSgpPT5WKCExKSxIPSh5KT0+e2xldCBXPXkudGFyZ2V0O2lmKCFCLmN1cnJlbnQ/LmNvbnRhaW5zKFcpJiYhTi5jdXJyZW50Py5jb250YWlucyhXKSlrKCl9LFA9KHkpPT57aWYoIUIuY3VycmVudD8uY29udGFpbnMoeS50YXJnZXQpKUMoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLFAsITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGspLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsSCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsUCwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsayl9fSxbcV0pO2xldCBVPUkoITEpO0UoKCk9PntpZighcSl7VS5jdXJyZW50PSExO3JldHVybn1pZighenx8VS5jdXJyZW50KXJldHVybjtsZXQgaz1CLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKTtpZighaz8ubGVuZ3RoKXJldHVybjtVLmN1cnJlbnQ9ITA7bGV0IEg9Si5maW5kSW5kZXgoKFApPT5QLnZhbHVlPT09Syk7a1tNYXRoLm1heChILDApXT8uZm9jdXMoKX0sW3EseixKLEtdKTtsZXQgRj0oayk9PntsZXQgSD1bLi4uQi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT1vcHRpb25dIik/P1tdXSxQPUguaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtpZihrLmtleT09PSJBcnJvd0Rvd24ifHxrLmtleT09PSJBcnJvd1VwIil7ay5wcmV2ZW50RGVmYXVsdCgpO2xldCB5PWsua2V5PT09IkFycm93RG93biI/TWF0aC5taW4oUCsxLEgubGVuZ3RoLTEpOk1hdGgubWF4KFAtMSwwKTtIW3ldPy5mb2N1cygpfWVsc2UgaWYoay5rZXk9PT0iRXNjYXBlIilrLnByZXZlbnREZWZhdWx0KCksVighMSksTi5jdXJyZW50Py5mb2N1cygpfSxMPUouZmluZCgoayk9PmsudmFsdWU9PT1LKTtyZXR1cm4gUShKMSx7Y2hpbGRyZW46W1EoImJ1dHRvbiIse3JlZjpOLHR5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiQsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6cSxkaXNhYmxlZDpaLG9uQ2xpY2s6KCk9PlYoKGspPT4hayksY2xhc3NOYW1lOmB0ZXh0LWxlZnQgZm9udC1baW5oZXJpdF0gY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6Y3Vyc29yLWRlZmF1bHQgJHtZPz8iIn1gLGNoaWxkcmVuOlEoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIHRydW5jYXRlIixjaGlsZHJlbjpMPy5sYWJlbD8/S30pfSkscSYmeiYmTDgoUSgiZGl2Iix7cmVmOkIscm9sZToibGlzdGJveCIsImFyaWEtbGFiZWwiOiQsb25LZXlEb3duOkYsc3R5bGU6e3RvcDp6LnRvcCxsZWZ0OnoubGVmdCxtaW5XaWR0aDp6Lm1pbldpZHRofSxjbGFzc05hbWU6ImZpeGVkIG1heC1oLTkwIG92ZXJmbG93LXktYXV0byBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHotNTAiLGNoaWxkcmVuOkoubWFwKChrKT0+USgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjprLnZhbHVlPT09SyxvbkNsaWNrOigpPT57WChrLnZhbHVlKSxWKCExKSxOLmN1cnJlbnQ/LmZvY3VzKCl9LGNsYXNzTmFtZTpgYmxvY2sgdy1mdWxsIHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBweC0yLjUgcHktMSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXdoaXRlLzggZm9jdXMtdmlzaWJsZTpiZy13aGl0ZS84IG91dGxpbmUtbm9uZSAke2sudmFsdWU9PT1LPyJ0ZXh0LWFjY2VudCI6IiJ9YCxjaGlsZHJlbjprLmxhYmVsfSxrLnZhbHVlKSl9KSxkb2N1bWVudC5ib2R5KV19KX12YXIgUUo9NjUwLGM4PVsxLDIsNSwyMF0scjY9MTAwMCxyOD17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gdDYoe3VkaWQ6JCxleGVjOkt9KXtsZXRbSixaXT1NKCExKSxbWCxZXT1NKFE1WzBdLmlkKSxbcSxWXT1NKFE1WzBdLm1vZGUpLFtOLEJdPU0oMSksW3osR109TShyOCksW0MsVV09TShudWxsKSxGPXcxKCgpPT5RNS5maW5kKChnKT0+Zy5pZD09PVgpPz9RNVswXSxbWF0pLEw9dzEoKCk9PmM2KEYpLFtGXSksaz1JKDApLEg9SSgiaWRsZSIpLFA9SShkOChxKSpOKSx5PUkoMCksVz1JKEwpLEE9SShudWxsKTtFKCgpPT57UC5jdXJyZW50PWQ4KHEpKk59LFtxLE5dKTtsZXQgVD1JKG51bGwpO0UoKCk9PntsZXQgZz1XLmN1cnJlbnQsZj1rLmN1cnJlbnQ7aWYoVy5jdXJyZW50PUwsZyYmZyE9PUwpVC5jdXJyZW50PVlKKGcsZixMLHBlcmZvcm1hbmNlLm5vdygpKTtrLmN1cnJlbnQ9MCx5LmN1cnJlbnQ9MCxILmN1cnJlbnQ9ImlkbGUiLEEuY3VycmVudD1udWxsLEcocjgpfSxbTF0pO2xldCBpPUkoMCksdj1JKG51bGwpLGo9SShudWxsKTtFKCgpPT57bGV0IGc9MCxmPShzKT0+e2xldCBrMT12LmN1cnJlbnQsVTE9azE9PW51bGw/MTY6TWF0aC5taW4oNjQscy1rMSk7aWYodi5jdXJyZW50PXMsaS5jdXJyZW50PShpLmN1cnJlbnQrVTEqMC4wMDAxMiklKE1hdGguUEkqMiksSC5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgRjE9UC5jdXJyZW50KlUxLzEwMDA7ay5jdXJyZW50Kz1GMSx5LmN1cnJlbnQrPVUxO2xldCBIMT1XLmN1cnJlbnQudG90YWxEaXN0YW5jZTtpZighVy5jdXJyZW50LnRyYWlsLmxvb3AmJmsuY3VycmVudD49SDEpay5jdXJyZW50PUgxLEguY3VycmVudD0icGF1c2VkIixHKHtzdGF0dXM6InBhdXNlZCIsYXJjOkgxLGVsYXBzZWRNczp5LmN1cnJlbnR9KX1sZXQgVjE9ai5jdXJyZW50O2lmKFYxKXtsZXQgRjE9Vy5jdXJyZW50LEgxPW51bGwsUz1ULmN1cnJlbnQ7aWYoUyl7bGV0IGM9KHMtUy5zdGFydE1zKS9RSjtpZihjPj0xKVQuY3VycmVudD1udWxsO2Vsc2V7bGV0IHI9R0ooYyk7RjE9VkooUyxyKSxIMT17eDpTLnByZXZNYXJrZXIueCsoUy5uZXh0TWFya2VyLngtUy5wcmV2TWFya2VyLngpKnIseTpTLnByZXZNYXJrZXIueSsoUy5uZXh0TWFya2VyLnktUy5wcmV2TWFya2VyLnkpKnIsejpTLnByZXZNYXJrZXIueisoUy5uZXh0TWFya2VyLnotUy5wcmV2TWFya2VyLnopKnJ9fX1CSihWMSxGMSxrLmN1cnJlbnQsaS5jdXJyZW50LHMsSC5jdXJyZW50PT09InBsYXlpbmciLEgxKX1nPXJlcXVlc3RBbmltYXRpb25GcmFtZShmKX07cmV0dXJuIGc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGYpLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShnKX0sW10pLEUoKCk9PntsZXQgZz1zZXRJbnRlcnZhbCgoKT0+e2lmKEguY3VycmVudD09PSJwbGF5aW5nIilHKHtzdGF0dXM6InBsYXlpbmciLGFyYzprLmN1cnJlbnQsZWxhcHNlZE1zOnkuY3VycmVudH0pfSwyNTApO3JldHVybigpPT5jbGVhckludGVydmFsKGcpfSxbXSksRSgoKT0+e2lmKHouc3RhdHVzIT09InBsYXlpbmciKXJldHVybjtsZXQgZz0hMSxmPTAscz1udWxsLGsxPWFzeW5jKCk9PntpZihnfHxzKXJldHVybjtsZXQgVjE9RGF0ZS5ub3coKTtpZihWMS1mPHI2KXJldHVybjtmPVYxO2xldCBGMT1KNShXLmN1cnJlbnQsay5jdXJyZW50KSxIMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7RjEubGF0LnRvRml4ZWQoNyl9LCR7RjEubG5nLnRvRml4ZWQoNyl9YDtzPUsoSDEpLnRoZW4oKFMpPT57aWYoZylyZXR1cm47aWYoUy5leGl0Q29kZSE9PTApVShzNihTLnN0ZGVycil8fCJzaW1jdGwgbG9jYXRpb24gc2V0IGZhaWxlZCIpO2Vsc2UgVShudWxsKX0pLmNhdGNoKChTKT0+e2lmKCFnKVUoUyBpbnN0YW5jZW9mIEVycm9yP1MubWVzc2FnZTpTdHJpbmcoUykpfSkuZmluYWxseSgoKT0+e3M9bnVsbH0pfTtrMSgpO2xldCBVMT1zZXRJbnRlcnZhbChrMSxyNik7cmV0dXJuKCk9PntnPSEwLGNsZWFySW50ZXJ2YWwoVTEpfX0sW3ouc3RhdHVzLCQsS10pO2xldCBkPUQoKCk9PntpZihILmN1cnJlbnQ9PT0icGxheWluZyIpe0guY3VycmVudD0icGF1c2VkIixHKChnKT0+KHsuLi5nLHN0YXR1czoicGF1c2VkIn0pKTtyZXR1cm59aWYoay5jdXJyZW50Pj1XLmN1cnJlbnQudG90YWxEaXN0YW5jZSYmIVcuY3VycmVudC50cmFpbC5sb29wKWsuY3VycmVudD0wLHkuY3VycmVudD0wO2lmKEEuY3VycmVudD09bnVsbCl7bGV0IGc9SjUoVy5jdXJyZW50LGsuY3VycmVudCk7QS5jdXJyZW50PXtsYXQ6Zy5sYXQsbG5nOmcubG5nfX1ILmN1cnJlbnQ9InBsYXlpbmciLEcoKGcpPT4oey4uLmcsc3RhdHVzOiJwbGF5aW5nIixhcmM6ay5jdXJyZW50LGVsYXBzZWRNczp5LmN1cnJlbnR9KSl9LFtdKSxaMT1EKCgpPT57SC5jdXJyZW50PSJpZGxlIixrLmN1cnJlbnQ9MCx5LmN1cnJlbnQ9MCxHKHI4KTtsZXQgZz1BLmN1cnJlbnQ7QS5jdXJyZW50PW51bGw7bGV0IGY9Zz9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7Zy5sYXQudG9GaXhlZCg3KX0sJHtnLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IGNsZWFyYDtLKGYpLnRoZW4oKHMpPT57aWYocy5leGl0Q29kZSE9PTApVShzNihzLnN0ZGVycil8fG51bGwpO2Vsc2UgVShudWxsKX0pfSxbSywkXSkscTE9RCgoZyk9PntZKGcpO2xldCBmPVE1LmZpbmQoKHMpPT5zLmlkPT09Zyk7aWYoZilWKGYubW9kZSl9LFtdKTtFKCgpPT4oKT0+e2lmKEguY3VycmVudD09PSJpZGxlIilyZXR1cm47bGV0IGc9QS5jdXJyZW50LGY9Zz9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7Zy5sYXQudG9GaXhlZCg3KX0sJHtnLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IGNsZWFyYDtLKGYpLmNhdGNoKCgpPT57fSl9LFtLLCRdKTtsZXQgbz16LnN0YXR1cz09PSJwbGF5aW5nIixJMT1vP2Ake244KHouYXJjKX0gwrcgJHtpNih6LmVsYXBzZWRNcyl9YDpuOChMLnRvdGFsRGlzdGFuY2UpO3JldHVybiBRKEcwLHtvcGVuOkosb25PcGVuQ2hhbmdlOlosc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fbWlubWF4KDAsMWZyKV9hdXRvXSBbY29udGFpbmVyLXR5cGU6aW5saW5lLXNpemVdIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6UShKMSx7Y2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLEo/USgic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cyI6ITAsY2xhc3NOYW1lOiJtaW4tdy0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIG1heC13LWZ1bGwiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjJzLGJveC1zaGFkb3dfMC4yc10iLHN0eWxlOntiYWNrZ3JvdW5kOm8/IiM0YWRlODAiOkwudG90YWxEaXN0YW5jZT4wPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiJ0cmFuc3BhcmVudCIsYm94U2hhZG93Om8/IjAgMCA2cHggcmdiYSg3NCwyMjIsMTI4LDAuNykiOiJub25lIn19KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIixjaGlsZHJlbjpJMX0pLCFvJiZRKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsIjohMCxjbGFzc05hbWU6InNocmluay0wIixjaGlsZHJlbjoidG90YWwifSldfSk6USgic3BhbiIse30pXX0pLGNoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGJsb2NrIixjaGlsZHJlbjpbUShpMix7bGFiZWw6IlRyYWlsIix2YWx1ZTpYLG9uQ2hhbmdlOnExLG9wdGlvbnM6UTUubWFwKChnKT0+KHt2YWx1ZTpnLmlkLGxhYmVsOmcubmFtZX0pKSxjbGFzc05hbWU6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIGhvdmVyOmJnLXdoaXRlL1swLjA3XSBob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xNildIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpiZy13aGl0ZS9bMC4wOF0gZm9jdXM6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMjQpXSJ9KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC1bOXB4XSB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46UShlNSx7b3BlbjohMX0pfSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpGLmRlc2NyaXB0aW9ufSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIGJnLVsjMGEwYTBjXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSBbYXNwZWN0LXJhdGlvOjE2LzExXSIsY2hpbGRyZW46W1EoImNhbnZhcyIse3JlZjpqLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBibG9jayJ9KSxRKFhKLHtwcmVwYXJlZDpMfSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyXzFmcl8xZnJdIGdhcC0xLjUiLGNoaWxkcmVuOltRKG84LHtsYWJlbDoiRGlzdGFuY2UiLHZhbHVlOm44KHouYXJjKX0pLFEobzgse2xhYmVsOiJQYWNlIix2YWx1ZTp6SihQLmN1cnJlbnQpfSksUShvOCx7bGFiZWw6IkVsYXBzZWQiLHZhbHVlOmk2KHouZWxhcHNlZE1zKX0pXX0pLFEoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMS41IixjaGlsZHJlbjpbUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOmQsY2xhc3NOYW1lOmBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gJHtvPyJiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIn1gLCJhcmlhLXByZXNzZWQiOm8sdGl0bGU6bz8iUGF1c2UiOiJQbGF5IixjaGlsZHJlbjpbbz9RKEQ4LHt9KTpRKCQyLHt9KSxRKCJzcGFuIix7Y2hpbGRyZW46bz8iUGF1c2UiOiJQbGF5In0pXX0pLFEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpaMSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0zIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSBiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDZdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSBkaXNhYmxlZDpvcGFjaXR5LTQwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCIsZGlzYWJsZWQ6ei5zdGF0dXM9PT0iaWRsZSImJnouYXJjPT09MCx0aXRsZToiU3RvcCBhbmQgY2xlYXIgc2ltdWxhdGVkIGxvY2F0aW9uIixjaGlsZHJlbjpbUShLMix7fSksUSgic3BhbiIse2NoaWxkcmVuOiJTdG9wIn0pXX0pXX0pLFEoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpRKFpKLHthcmlhTGFiZWw6IlRyYW5zcG9ydCBtb2RlIix2YWx1ZTpxLG9uQ2hhbmdlOihnKT0+VihnKSxvcHRpb25zOlt7dmFsdWU6IndhbGsiLGxhYmVsOiJXYWxrIixpY29uOlEodzgse30pfSx7dmFsdWU6InJ1biIsbGFiZWw6IlJ1biIsaWNvbjpRKEU4LHt9KX0se3ZhbHVlOiJjeWNsZSIsbGFiZWw6IkN5Y2xlIixpY29uOlEoSTgse30pfSx7dmFsdWU6ImRyaXZlIixsYWJlbDoiRHJpdmUiLGljb246UShiOCx7fSl9XX0pfSksUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57bGV0IGc9YzguaW5kZXhPZihOKSxmPWM4WyhnKzEpJWM4Lmxlbmd0aF07QihmKX0sY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0yLjUgYm9yZGVyIHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCBtaW4tdy1bNTZweF0gYWN0aXZlOnNjYWxlLVswLjk3XSAke04+MT8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGhvdmVyOmJnLXdoaXRlL1swLjg4XSBob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgaG92ZXI6Ymctd2hpdGUvWzAuMDldIGhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gaG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7Tn3DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtOfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltRKFQ4LHt9KSxOPjEmJlEoInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W04sIsOXIl19KV19KV19KSxDJiZRKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkN9KV19KX12YXIgbzg9aTAoZnVuY3Rpb24oe2xhYmVsOkssdmFsdWU6Sn0pe3JldHVybiBRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpLfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46Sn0pXX0pfSk7ZnVuY3Rpb24gWkooe3ZhbHVlOiQsb25DaGFuZ2U6SyxvcHRpb25zOkosYXJpYUxhYmVsOlp9KXtyZXR1cm4gUSgiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpaLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46Si5tYXAoKFgpPT57bGV0IFk9WC52YWx1ZT09PSQ7cmV0dXJuIFEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SyhYLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7WT8iYmctd2hpdGUvWzAuMTJdIHRleHQtd2hpdGUiOiJiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzYwIGhvdmVyOmJnLXdoaXRlL1swLjA1XSBob3Zlcjp0ZXh0LXdoaXRlLzkwIn1gLCJhcmlhLXByZXNzZWQiOlksImFyaWEtbGFiZWwiOlguaWNvbj9YLmxhYmVsOnZvaWQgMCx0aXRsZTpYLmljb24/WC5sYWJlbDp2b2lkIDAsY2hpbGRyZW46WC5pY29uPz9YLmxhYmVsfSxYLnZhbHVlKX0pfSl9ZnVuY3Rpb24gWEooe3ByZXBhcmVkOiR9KXtpZigkLnJhd01heEFsdC0kLnJhd01pbkFsdDw1KXJldHVybiBudWxsO3JldHVybiBRKEoxLHtjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiBsZWZ0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1EoUzIse2RpcjoidXAifSksIiAiLGE2KCQucmF3TWF4QWx0KV19KSxRKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIHJpZ2h0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1EoUzIse2RpcjoiZG93biJ9KSwiICIsYTYoJC5yYXdNaW5BbHQpXX0pXX0pfXZhciBvNj0xNDA7ZnVuY3Rpb24gbjYoJCxLKXtsZXQgSj1BcnJheShLKTtmb3IobGV0IFo9MDtaPEs7WisrKXtsZXQgWD1LPT09MT8wOlovKEstMSksWT1KNSgkLFgqJC50b3RhbERpc3RhbmNlKTtKW1pdPXt4OlkueCx5OlkueSx6Olkuen19cmV0dXJuIEp9ZnVuY3Rpb24gWUooJCxLLEosWil7bGV0IFg9KCQuYm91bmRzLnhbMF0rJC5ib3VuZHMueFsxXSkvMixZPSgkLmJvdW5kcy56WzBdKyQuYm91bmRzLnpbMV0pLzIscT0kLmJvdW5kcy55WzBdLFY9TWF0aC5tYXgoMSwkLmJvdW5kcy54WzFdLSQuYm91bmRzLnhbMF0sJC5ib3VuZHMuelsxXS0kLmJvdW5kcy56WzBdKSxOPShKLmJvdW5kcy54WzBdK0ouYm91bmRzLnhbMV0pLzIsQj0oSi5ib3VuZHMuelswXStKLmJvdW5kcy56WzFdKS8yLHo9Si5ib3VuZHMueVswXSxDPU1hdGgubWF4KDEsSi5ib3VuZHMueFsxXS1KLmJvdW5kcy54WzBdLEouYm91bmRzLnpbMV0tSi5ib3VuZHMuelswXSkvVixGPW42KCQsbzYpLm1hcCgoVCk9Pih7eDooVC54LVgpKkMrTix5OihULnktcSkqQyt6LHo6KFQuei1ZKSpDK0J9KSksTD1uNihKLG82KSxrPSgkLnRyYWlsLmxvb3B8fEoudHJhaWwubG9vcCk/PyExLEg9cUooRixMLGspLFA9SjUoJCxLKSx5PXt4OihQLngtWCkqQytOLHk6KFAueS1xKSpDK3osejooUC56LVkpKkMrQn0sVz1KNShKLDApLEE9e3g6Vy54LHk6Vy55LHo6Vy56fTtyZXR1cm57ZnJvbTokLHRvOkosZnJvbVB0czpGLHRvUHRzOkgscHJldk1hcmtlcjp5LG5leHRNYXJrZXI6QSxzdGFydE1zOlp9fWZ1bmN0aW9uIHFKKCQsSyxKKXtsZXQgWj0kLmxlbmd0aCxYPTEvMCxZPTAscT0hMSxWPVtLLFsuLi5LXS5yZXZlcnNlKCldO2ZvcihsZXQgej0wO3o8Vi5sZW5ndGg7eisrKXtsZXQgRz1WW3pdLEM9Sj9aOjE7Zm9yKGxldCBVPTA7VTxDO1UrKyl7bGV0IEY9MDtmb3IobGV0IEw9MDtMPFo7TCsrKXtsZXQgaz0kW0xdLEg9R1soTCtVKSVaXSxQPWsueC1ILngseT1rLnktSC55LFc9ay56LUguejtpZihGKz1QKlAreSp5K1cqVyxGPj1YKWJyZWFrfWlmKEY8WClYPUYsWT1VLHE9ej09PTF9fWxldCBOPXE/Wy4uLktdLnJldmVyc2UoKTpLLEI9QXJyYXkoWik7Zm9yKGxldCB6PTA7ejxaO3orKylCW3pdPU5bKHorWSklWl07cmV0dXJuIEJ9ZnVuY3Rpb24gVkooJCxLKXtsZXQgSj0kLmZyb21QdHMubGVuZ3RoLFo9QXJyYXkoSiksWD0wLFk9bnVsbCxxPTEvMCxWPS0xLzAsTj0xLzAsQj0tMS8wLHo9MS8wLEc9LTEvMDtmb3IobGV0IEM9MDtDPEo7QysrKXtsZXQgVT0kLmZyb21QdHNbQ10sRj0kLnRvUHRzW0NdLEw9VS54KyhGLngtVS54KSpLLGs9VS55KyhGLnktVS55KSpLLEg9VS56KyhGLnotVS56KSpLO2lmKFkpe2xldCB5PUwtWS54LFc9ay1ZLnksQT1ILVkuejtYKz1NYXRoLnNxcnQoeSp5K1cqVytBKkEpfWxldCBQPXt4OkwseTprLHo6SCxhcmM6WCxsYXQ6MCxsbmc6MH07aWYoWltDXT1QLFk9UCxMPHEpcT1MO2lmKEw+VilWPUw7aWYoazxOKU49aztpZihrPkIpQj1rO2lmKEg8eil6PUg7aWYoSD5HKUc9SH1yZXR1cm57dHJhaWw6JC50by50cmFpbCxvcmlnaW46JC50by5vcmlnaW4scG9pbnRzOlosdG90YWxEaXN0YW5jZTpYLGJvdW5kczp7eDpbcSxWXSx5OltOLEJdLHo6W3osR119LHJhd01pbkFsdDokLnRvLnJhd01pbkFsdCsoJC5mcm9tLnJhd01pbkFsdC0kLnRvLnJhd01pbkFsdCkqKDEtSykscmF3TWF4QWx0OiQudG8ucmF3TWF4QWx0KygkLmZyb20ucmF3TWF4QWx0LSQudG8ucmF3TWF4QWx0KSooMS1LKX19ZnVuY3Rpb24gR0ooJCl7cmV0dXJuICQ8MC41PzIqJCokOjEtTWF0aC5wb3coLTIqJCsyLDIpLzJ9ZnVuY3Rpb24gQkooJCxLLEosWixYLFkscSl7bGV0IFY9JC5nZXRDb250ZXh0KCIyZCIpO2lmKCFWKXJldHVybjtsZXR7Y2xpZW50V2lkdGg6TixjbGllbnRIZWlnaHQ6Qn09JDtpZihOPT09MHx8Qj09PTApcmV0dXJuO2xldCB6PXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxOjEsRz1NYXRoLnJvdW5kKE4qeiksQz1NYXRoLnJvdW5kKEIqeik7aWYoJC53aWR0aCE9PUd8fCQuaGVpZ2h0IT09QykkLndpZHRoPUcsJC5oZWlnaHQ9QztWLnNldFRyYW5zZm9ybSh6LDAsMCx6LDAsMCksVi5jbGVhclJlY3QoMCwwLE4sQik7bGV0IFU9Vi5jcmVhdGVSYWRpYWxHcmFkaWVudChOKjAuNSxCKjAuNTUsTWF0aC5taW4oTixCKSowLjIsTiowLjUsQiowLjU1LE1hdGgubWF4KE4sQikqMC44NSk7VS5hZGRDb2xvclN0b3AoMCwiIzFhMWExZCIpLFUuYWRkQ29sb3JTdG9wKDEsIiMwYTBhMGMiKSxWLmZpbGxTdHlsZT1VLFYuZmlsbFJlY3QoMCwwLE4sQiksTkooVixOLEIpO2xldHtwb2ludHM6Rixib3VuZHM6TH09SztpZihGLmxlbmd0aDwyKXJldHVybjtsZXQgaz0yOCpNYXRoLlBJLzE4MCxIPU1hdGguc2luKGspLFA9TWF0aC5jb3MoaykseT1NYXRoLnNpbihaKSxXPU1hdGguY29zKFopLEE9KEwueFswXStMLnhbMV0pLzIsVD0oTC56WzBdK0wuelsxXSkvMixpPUwueFsxXS1MLnhbMF0sdj1MLnpbMV0tTC56WzBdLGo9TC55WzFdLUwueVswXSxkPU1hdGgubWF4KGksdikqMS4wNSxaMT1NYXRoLm1heCh2KlAraipILGkqMC40KSoxLjE1LHExPU4qMC4wOCxvPUIqMC4xOCxJMT1NYXRoLm1pbigoTi1xMSoyKS9kLChCLW8qMikvWjEpKjEuNDUsZz1qPDE/MTpNYXRoLm1pbigyNCwxNDAvTWF0aC5tYXgoMjAsaikpLGY9KFMsYyxyKT0+e2xldCBlPVMtQSxEMT1yLVQsYj1lKlcrRDEqeSxtPS1lKnkrRDEqVyxZMT1jKmcsQTE9WTEqUC1tKkgscD1ZMSpIK20qUDtyZXR1cm57c3g6Ti8yK2IqSTEsc3k6QiowLjU1LUExKkkxLGRlcHRoOnB9fSxzPTM4LGsxPUYubWFwKChTKT0+e2xldCBjPWYoUy54LFMueSxTLnopLHI9ZihTLngsMCxTLnopLGU9e3N4OmMuc3gsc3k6TWF0aC5tYXgoci5zeSxjLnN5K3MpLGRlcHRoOnIuZGVwdGh9O3JldHVybntwOlMsdG9wOmMsYm90OmV9fSk7Zm9yKGxldCBTPTE7UzxrMS5sZW5ndGg7UysrKXtsZXQgYz1rMVtTLTFdLHI9azFbU10sZT1WLmNyZWF0ZUxpbmVhckdyYWRpZW50KChjLnRvcC5zeCtyLnRvcC5zeCkvMiwoYy50b3Auc3krci50b3Auc3kpLzIsKGMuYm90LnN4K3IuYm90LnN4KS8yLChjLmJvdC5zeStyLmJvdC5zeSkvMik7ZS5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIpLGUuYWRkQ29sb3JTdG9wKDAuNDUsInJnYmEoMTgwLDE4MCwxODUsMC4yOCkiKSxlLmFkZENvbG9yU3RvcCgwLjg1LCJyZ2JhKDQwLDQwLDQ1LDAuMTgpIiksZS5hZGRDb2xvclN0b3AoMSwicmdiYSgwLDAsMCwwKSIpLFYuZmlsbFN0eWxlPWUsVi5iZWdpblBhdGgoKSxWLm1vdmVUbyhjLnRvcC5zeCxjLnRvcC5zeSksVi5saW5lVG8oci50b3Auc3gsci50b3Auc3kpLFYubGluZVRvKHIuYm90LnN4LHIuYm90LnN5KSxWLmxpbmVUbyhjLmJvdC5zeCxjLmJvdC5zeSksVi5jbG9zZVBhdGgoKSxWLmZpbGwoKX1WLnN0cm9rZVN0eWxlPSIjZmZmZmZmIixWLmxpbmVXaWR0aD0xLjYsVi5saW5lQ2FwPSJyb3VuZCIsVi5saW5lSm9pbj0icm91bmQiLFYuYmVnaW5QYXRoKCk7Zm9yKGxldCBTPTA7UzxrMS5sZW5ndGg7UysrKXtsZXR7dG9wOmN9PWsxW1NdO2lmKFM9PT0wKVYubW92ZVRvKGMuc3gsYy5zeSk7ZWxzZSBWLmxpbmVUbyhjLnN4LGMuc3kpfVYuc3Ryb2tlKCk7bGV0IFUxPUo7Vi5zdHJva2VTdHlsZT0iI2Y5ZDJhNCIsVi5saW5lV2lkdGg9Mi4yLFYuYmVnaW5QYXRoKCk7bGV0IFYxPSExO2ZvcihsZXQgUz0wO1M8azEubGVuZ3RoO1MrKyl7bGV0e3A6Yyx0b3A6cn09azFbU107aWYoYy5hcmM+VTEpYnJlYWs7aWYoIVYxKVYubW92ZVRvKHIuc3gsci5zeSksVjE9ITA7ZWxzZSBWLmxpbmVUbyhyLnN4LHIuc3kpfWlmKFYxKVYuc3Ryb2tlKCk7bGV0IEYxPXE/P0o1KEssSiksSDE9ZihGMS54LEYxLnksRjEueik7aWYoWSl7bGV0IHI9WCUyNjAwLzI2MDAsZT00KzIyKnIsRDE9MC4yMiooMS1yKSxiPVYuY3JlYXRlUmFkaWFsR3JhZGllbnQoSDEuc3gsSDEuc3ksZSowLjUsSDEuc3gsSDEuc3ksZSk7Yi5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLGIuYWRkQ29sb3JTdG9wKDAuNyxgcmdiYSgyNTUsMjU1LDI1NSwke0QxLnRvRml4ZWQoMyl9KWApLGIuYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxWLmZpbGxTdHlsZT1iLFYuYmVnaW5QYXRoKCksVi5hcmMoSDEuc3gsSDEuc3ksZSwwLE1hdGguUEkqMiksVi5maWxsKCl9Vi5maWxsU3R5bGU9IiNmZmYiLFYuYmVnaW5QYXRoKCksVi5hcmMoSDEuc3gsSDEuc3ksMy44LDAsTWF0aC5QSSoyKSxWLmZpbGwoKX1mdW5jdGlvbiBOSigkLEssSil7JC5maWxsU3R5bGU9InJnYmEoMjU1LDI1NSwyNTUsMC4wNikiO2ZvcihsZXQgWT03O1k8SjtZKz0xNClmb3IobGV0IHE9NztxPEs7cSs9MTQpJC5iZWdpblBhdGgoKSwkLmFyYyhxLFksMC43LDAsTWF0aC5QSSoyKSwkLmZpbGwoKX1mdW5jdGlvbiBuOCgkKXtpZigkPDEwMDApcmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYDtyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDIpfSBrbWB9ZnVuY3Rpb24gaTYoJCl7bGV0IEs9TWF0aC5mbG9vcigkLzEwMDApLEo9TWF0aC5mbG9vcihLLzM2MDApLFo9TWF0aC5mbG9vcihLJTM2MDAvNjApLFg9SyU2MDtpZihKPjApcmV0dXJuYCR7Sn06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YDtyZXR1cm5gJHtafToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YH1mdW5jdGlvbiB6SigkKXtpZigkPD0wKXJldHVybiLigJQiO2lmKCQ+NylyZXR1cm5gJHsoJCozLjYpLnRvRml4ZWQoMCl9IGttL2hgO2xldCBLPTEwMDAvJCxKPU1hdGguZmxvb3IoSy82MCksWj1NYXRoLnJvdW5kKEslNjApO3JldHVybmAke0p9OiR7Wi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0va21gfWZ1bmN0aW9uIGE2KCQpe3JldHVybmAkeyQudG9GaXhlZCgwKX0gbWB9ZnVuY3Rpb24gczYoJCl7bGV0IEs9JC50cmltKCk7aWYoIUspcmV0dXJuIiI7bGV0IEo9Sy5tYXRjaCgvUmVhc29uOlxzKiguKykkL20pO2lmKEopcmV0dXJuIEpbMV07cmV0dXJuIEsuc3BsaXQoYApgKS5zbGljZSgtMSlbMF0/P0t9YXN5bmMgZnVuY3Rpb24gaTgoJCxLLEope2xldCBaPWF3YWl0ICQoYHhjcnVuIHNpbWN0bCBnZXRfYXBwX2NvbnRhaW5lciAke0t9ICR7TTEoSil9IGFwcGApO2lmKFouZXhpdENvZGUhPT0wKXJldHVybntlcnJvcjpaLnN0ZGVyci50cmltKCl8fCJBcHAgbm90IGZvdW5kIG9uIHNpbXVsYXRvciJ9O2xldCBYPVouc3Rkb3V0LnRyaW0oKTtpZighWClyZXR1cm57ZXJyb3I6IkVtcHR5IGFwcCBwYXRoIn07bGV0IFk9YXdhaXQgJChgcGx1dGlsIC1jb252ZXJ0IGpzb24gLW8gLSAke00xKFgrIi9JbmZvLnBsaXN0Iil9YCkscT17fTtpZihZLmV4aXRDb2RlPT09MCl0cnl7cT1KU09OLnBhcnNlKFkuc3Rkb3V0KX1jYXRjaHt9bGV0IFYsQj0ocT8uQ0ZCdW5kbGVJY29ucz8uQ0ZCdW5kbGVQcmltYXJ5SWNvbj8/cT8uWyJDRkJ1bmRsZUljb25zfmlwYWQiXT8uQ0ZCdW5kbGVQcmltYXJ5SWNvbik/LkNGQnVuZGxlSWNvbkZpbGVzPz9xPy5DRkJ1bmRsZUljb25GaWxlcztpZihCJiZCLmxlbmd0aD4wKVY9QltCLmxlbmd0aC0xXTtlbHNlIGlmKHR5cGVvZiBxPy5DRkJ1bmRsZUljb25GaWxlPT09InN0cmluZyIpVj1xLkNGQnVuZGxlSWNvbkZpbGU7bGV0IHo9bnVsbDtpZihWKXtsZXQgRz1bYCR7Vn1AM3gucG5nYCxgJHtWfUAyeC5wbmdgLGAke1Z9LnBuZ2AsYCR7Vn02MHg2MEAzeC5wbmdgLGAke1Z9NjB4NjBAMngucG5nYF0sVT0oYXdhaXQgJChgYmFzaCAtYyAke00xKEcubWFwKChGKT0+YFsgLWYgJHtNMShYKyIvIitGKX0gXSAmJiBlY2hvICR7TTEoWCsiLyIrRil9ICYmIGV4aXQgMGApLmpvaW4oIjsgIikrIjsgZXhpdCAxIil9YCkpLnN0ZG91dC50cmltKCk7aWYoVSl7bGV0IEY9YXdhaXQgJChgYmFzZTY0IC1pICR7TTEoVSl9YCk7aWYoRi5leGl0Q29kZT09PTApej1gZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7Ri5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpfWB9fXJldHVybnthcHBQYXRoOlgsZGlzcGxheU5hbWU6cS5DRkJ1bmRsZURpc3BsYXlOYW1lPz9xLkNGQnVuZGxlTmFtZSxzaG9ydFZlcnNpb246cS5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyxidW5kbGVWZXJzaW9uOnEuQ0ZCdW5kbGVWZXJzaW9uLG1pbk9TOnEuTWluaW11bU9TVmVyc2lvbixleGVjdXRhYmxlOnEuQ0ZCdW5kbGVFeGVjdXRhYmxlLGljb25EYXRhVXJsOnp9fXZhciBQNT1uZXcgTWFwO2Z1bmN0aW9uIGU2KCQsSyxKKXtsZXQgWj1gJHtLfToke0p9YCxYPVA1LmdldChaKTtpZihYIT09dm9pZCAwKXJldHVybiBQcm9taXNlLnJlc29sdmUoWCk7bGV0IFk9aTgoJCxLLEopLnRoZW4oKHEpPT57bGV0IFY9cS5pY29uRGF0YVVybD8/bnVsbDtyZXR1cm4gUDUuc2V0KFosViksVn0pLmNhdGNoKCgpPT57cmV0dXJuIFA1LnNldChaLG51bGwpLG51bGx9KTtyZXR1cm4gUDUuc2V0KFosWSksWX1mdW5jdGlvbiBVSigkKXtyZXR1cm4gJC5zdGFydHNXaXRoKCJjb20uYXBwbGUuIil9ZnVuY3Rpb24gTEooJCl7aWYoJD09PSJjb20uYXBwbGUuc3ByaW5nYm9hcmQiKXJldHVybiJTcHJpbmdCb2FyZCI7cmV0dXJuICR9ZnVuY3Rpb24gQ0ooe2J1bmRsZUlkOiR9KXtsZXQgSz1VSigkKTtyZXR1cm4gUSgiZGl2Iix7ImRhdGEtdGVzdGlkIjpLPyJzeXN0ZW0tYXBwLWljb24iOiJhcHAtaWNvbi1mYWxsYmFjayIsY2xhc3NOYW1lOmB3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBib3JkZXIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgJHtLPyJib3JkZXItWyMzYjVmOTldIGJnLVtsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMildIHRleHQtWyNjOGQ3ZmZdIjoiYm9yZGVyLXdoaXRlLzEwIGJnLXdoaXRlL1swLjA2XSB0ZXh0LXdoaXRlLzgwIn1gLCJhcmlhLWxhYmVsIjpLPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLHRpdGxlOks/IlN5c3RlbSBhcHAiOiJBcHAgaWNvbiB1bmF2YWlsYWJsZSIsY2hpbGRyZW46Sz9RKCJzdmciLHtyb2xlOiJpbWciLHZpZXdCb3g6IjAgMCAyNCAyNCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjbGFzc05hbWU6InNpemUtWzE5cHhdIixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltRKCJ0aXRsZSIse2NoaWxkcmVuOiJBcHBsZSJ9KSxRKCJwYXRoIix7ZDoiTTEyLjE1MiA2Ljg5NmMtLjk0OCAwLTIuNDE1LTEuMDc4LTMuOTYtMS4wNC0yLjA0LjAyNy0zLjkxIDEuMTgzLTQuOTYxIDMuMDE0LTIuMTE3IDMuNjc1LS41NDYgOS4xMDMgMS41MTkgMTIuMDkgMS4wMTMgMS40NTQgMi4yMDggMy4wOSAzLjc5MiAzLjAzOSAxLjUyLS4wNjUgMi4wOS0uOTg3IDMuOTM1LS45ODcgMS44MzEgMCAyLjM1Ljk4NyAzLjk2Ljk0OCAxLjYzNy0uMDI2IDIuNjc2LTEuNDggMy42NzYtMi45NDggMS4xNTYtMS42ODggMS42MzYtMy4zMjUgMS42NjItMy40MTUtLjAzOS0uMDEzLTMuMTgyLTEuMjIxLTMuMjItNC44NTctLjAyNi0zLjA0IDIuNDgtNC40OTQgMi41OTctNC41NTktMS40MjktMi4wOS0zLjYyMy0yLjMyNC00LjM5LTIuMzc2LTItLjE1Ni0zLjY3NSAxLjA5LTQuNjEgMS4wOXpNMTUuNTMgMy44M2MuODQzLTEuMDEyIDEuNC0yLjQyNyAxLjI0NS0zLjgzLTEuMjA3LjA1Mi0yLjY2Mi44MDUtMy41MzIgMS44MTgtLjc4Ljg5Ni0xLjQ1NCAyLjMzOC0xLjI3MyAzLjcxNCAxLjMzOC4xMDQgMi43MTUtLjY4OCAzLjU1OS0xLjcwMSJ9KV19KTpRKFM1LHtzaXplOjE5LHN0cm9rZVdpZHRoOjEuOX0pfSl9ZnVuY3Rpb24gSEooe2J1bmRsZUlkOiQsaWNvbkRhdGFVcmw6S30pe2lmKEspcmV0dXJuIFEoImltZyIse3NyYzpLLGNsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIGJvcmRlciBib3JkZXItd2hpdGUvOCIsYWx0OiIifSk7cmV0dXJuIFEoQ0ose2J1bmRsZUlkOiR9KX1mdW5jdGlvbiAkNCh7dWRpZDokLGN1cnJlbnRBcHA6S30pe2xldFtKLFpdPU0obnVsbCksW1gsWV09TSghMSk7aWYoRSgoKT0+e2lmKCFLKXtaKG51bGwpO3JldHVybn1sZXQgcT0hMTtyZXR1cm4gWih7YnVuZGxlSWQ6Sy5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOksuaXNSZWFjdE5hdGl2ZSxwaWQ6Sy5waWQsbG9hZGluZzohMH0pLGk4KEUxLCQsSy5idW5kbGVJZCkudGhlbigoVik9PntpZihxKXJldHVybjtaKHtidW5kbGVJZDpLLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Sy5pc1JlYWN0TmF0aXZlLHBpZDpLLnBpZCxsb2FkaW5nOiExLC4uLlZ9KX0pLCgpPT57cT0hMH19LFskLEssSz8uYnVuZGxlSWQsSz8ucGlkLEs/LmlzUmVhY3ROYXRpdmVdKSwhSilyZXR1cm4gUShrSix7fSk7cmV0dXJuIFEoRzAse29wZW46WCxvbk9wZW5DaGFuZ2U6WSxzdW1tYXJ5Q2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWxlZnQiLHN1bW1hcnk6UShKMSx7Y2hpbGRyZW46W1EoSEose2J1bmRsZUlkOkouYnVuZGxlSWQsaWNvbkRhdGFVcmw6Si5pY29uRGF0YVVybH0pLFEoRkose2J1bmRsZUlkOkouYnVuZGxlSWQsZGlzcGxheU5hbWU6Si5kaXNwbGF5TmFtZX0pXX0pLGNoaWxkcmVuOltKLmVycm9yJiZRKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkouZXJyb3J9KSxRKCJkbCIse2NsYXNzTmFtZToibS0wIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W1EoVzUse2xhYmVsOiJWZXJzaW9uIix2YWx1ZTpKLnNob3J0VmVyc2lvbj9gJHtKLnNob3J0VmVyc2lvbn0gKCR7Si5idW5kbGVWZXJzaW9uPz8i4oCUIn0pYDpKLmxvYWRpbmc/IuKApiI6IuKAlCJ9KSxRKFc1LHtsYWJlbDoiTWluIGlPUyIsdmFsdWU6Si5taW5PUz8/KEoubG9hZGluZz8i4oCmIjoi4oCUIil9KSxRKFc1LHtsYWJlbDoiRXhlY3V0YWJsZSIsdmFsdWU6Si5leGVjdXRhYmxlPz8oSi5sb2FkaW5nPyLigKYiOiLigJQiKX0pLFEoVzUse2xhYmVsOiJQSUQiLHZhbHVlOkoucGlkIT1udWxsP1N0cmluZyhKLnBpZCk6IuKAlCJ9KSxKLmlzUmVhY3ROYXRpdmUmJlEoVzUse2xhYmVsOiJSZWFjdCBOYXRpdmUiLHZhbHVlOiJZZXMifSksUShXNSx7bGFiZWw6IkFwcCBwYXRoIix2YWx1ZTpKLmFwcFBhdGg/PyhKLmxvYWRpbmc/IuKApiI6IuKAlCIpLG1vbm86ITAsYWN0aW9uOkouYXBwUGF0aD97dGl0bGU6IlJldmVhbCBpbiBGaW5kZXIiLG9uQ2xpY2s6KCk9PntFMShgb3BlbiAtUiAke00xKEouYXBwUGF0aCl9YCl9LGljb246USh4NSx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjJ9KX06dm9pZCAwfSldfSldfSl9ZnVuY3Rpb24ga0ooKXtyZXR1cm4gUSgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLWRldGVjdGlvbi1za2VsZXRvbiIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWxhYmVsIjoiV2FpdGluZyBmb3IgZm9yZWdyb3VuZCBhcHAiLGNoaWxkcmVuOlEoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIixjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYmctd2hpdGUvWzAuMDhdIn0pLFEoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTMuNSB3LVs0NiVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0ifSksUSgic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pLFEoInNwYW4iLHtjbGFzc05hbWU6InctMi41IGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSl9KX1mdW5jdGlvbiBGSih7YnVuZGxlSWQ6JCxkaXNwbGF5TmFtZTpLfSl7cmV0dXJuIFEoImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgbGVhZGluZy10aWdodCB0ZXh0LWxlZnQiLGNoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46Sz8/TEooJCl9KSxRKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTokLGNoaWxkcmVuOiR9KV19KX1mdW5jdGlvbiBXNSh7bGFiZWw6JCx2YWx1ZTpLLG1vbm86SixhY3Rpb246Wn0pe3JldHVybiBRKCJkaXYiLHtjbGFzc05hbWU6Imdyb3VwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W1EoImR0Iix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCB3LTIxIHNocmluay0wIixjaGlsZHJlbjokfSksUSgiZGQiLHtjbGFzc05hbWU6YG0tMCB0ZXh0LXdoaXRlLzkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7Sj8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6SyxjaGlsZHJlbjpbSyxaJiZRKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHJnYmEoMjgsMjgsMzAsMClfMCUsIzFjMWMxZV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6Wi5vbkNsaWNrLHRpdGxlOloudGl0bGUsImFyaWEtbGFiZWwiOloudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOlouaWNvbn0pfSldfSldfSl9dmFyIEs0PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJub3RpZmljYXRpb25zIixsYWJlbDoiTm90aWZpY2F0aW9ucyJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gSjQoe3VkaWQ6JCxidW5kbGVJZDpLfSl7bGV0W0osWl09TSh7fSksW1gsWV09TShudWxsKSxbcSxWXT1NKG51bGwpLFtOLEJdPU0oITEpLHo9dzEoKCk9PntsZXQgVT10eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIVUpcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KFUpKXJldHVybmBidW4gJHtNMShVKX1gO2lmKC9cLmpzJC8udGVzdChVKSlyZXR1cm5gbm9kZSAke00xKFUpfWA7cmV0dXJuIE0xKFUpfSxbXSk7RSgoKT0+e1ooe30pLFYobnVsbCl9LFtLXSk7bGV0IEc9RChhc3luYyhVLEYpPT57aWYoIUspcmV0dXJuO2xldCBMPWAke1V9OiR7Rn1gO1koTCksVihudWxsKTt0cnl7bGV0IGs9YXdhaXQgRTEoYCR7en0gcGVybWlzc2lvbnMgJHtGfSAke1V9ICR7TTEoSyl9IC1kICR7TTEoJCl9YCk7aWYoay5leGl0Q29kZSE9PTApe1Yoay5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke2suZXhpdENvZGV9KWApO3JldHVybn1aKChIKT0+KHsuLi5ILFtVXTpGPT09InJlc2V0Ij92b2lkIDA6Rn0pKX1maW5hbGx5e1kobnVsbCl9fSxbeiwkLEtdKSxDPUQoYXN5bmMoKT0+e2lmKCFLKXJldHVybjtZKCJfX2FsbF9fIiksVihudWxsKTt0cnl7bGV0IFU9YXdhaXQgRTEoYCR7en0gcGVybWlzc2lvbnMgcmVzZXQgYWxsICR7TTEoSyl9IC1kICR7TTEoJCl9YCk7aWYoVS5leGl0Q29kZSE9PTApe1YoVS5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke1UuZXhpdENvZGV9KWApO3JldHVybn1aKHt9KX1maW5hbGx5e1kobnVsbCl9fSxbeiwkLEtdKTtpZighSylyZXR1cm4gUShBSix7fSk7cmV0dXJuIFEoRzAse29wZW46Tixvbk9wZW5DaGFuZ2U6QixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpRKEoxLHtjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksUSgic3BhbiIse30pXX0pLGNoaWxkcmVuOltxJiZRKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOnF9KSxRKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBmbGV4IGZsZXgtY29sIGdhcC0xIHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46SzQubWFwKCh7a2V5OlUsbGFiZWw6Rn0pPT57bGV0IEw9SltVXTtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHgtMC41IHB5LTEiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpGfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0wLjUgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHAtMC41Iixyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOkYsY2hpbGRyZW46W1EoYTgse2FjdGl2ZTpMPT09ImdyYW50IixwZW5kaW5nOlg9PT1gJHtVfTpncmFudGAsb25DbGljazooKT0+RyhVLCJncmFudCIpLHZhcmlhbnQ6ImdyYW50Iix0aXRsZToiQWxsb3ciLGNoaWxkcmVuOlEodjUse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksUShhOCx7YWN0aXZlOkw9PT0icmV2b2tlIixwZW5kaW5nOlg9PT1gJHtVfTpyZXZva2VgLG9uQ2xpY2s6KCk9PkcoVSwicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46USh6MCx7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxRKGE4LHthY3RpdmU6ITEscGVuZGluZzpYPT09YCR7VX06cmVzZXRgLG9uQ2xpY2s6KCk9PkcoVSwicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpRKHQwLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxVKX0pfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KSxRKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KV19KSxRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQiLGNoaWxkcmVuOlEoImJ1dHRvbiIse29uQ2xpY2s6QyxkaXNhYmxlZDpYPT09Il9fYWxsX18iLGNsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzcwIHRleHQtWzEwcHhdIHB4LTIgcHktWzNweF0gcm91bmRlZC1bNXB4XSBjdXJzb3ItcG9pbnRlciB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDRlbV0iLHRpdGxlOiJzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgcmVzZXQgYWxsIixjaGlsZHJlbjpYPT09Il9fYWxsX18iPyLigKYiOiJSZXNldCBhbGwifSl9KV19KX1mdW5jdGlvbiBBSigpe3JldHVybiBRKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtcGVybWlzc2lvbnMtbG9hZGluZyIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWRpc2FibGVkIjoidHJ1ZSIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOlEoImRpdiIse2NsYXNzTmFtZToic2VsZWN0LW5vbmUgdGV4dC13aGl0ZS81NSBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCBjdXJzb3ItZGVmYXVsdCIsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxRKCJzcGFuIix7fSksUSgic3BhbiIseyJkYXRhLXRlc3RpZCI6InBlcm1pc3Npb25zLWxvYWRpbmctaW5kaWNhdG9yIixyb2xlOiJzdGF0dXMiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBwZXJtaXNzaW9ucyIsY2xhc3NOYW1lOiJzaXplLTIuNSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzVmNjI2OF0gYm9yZGVyLXQtWyNmNGY0ZjVdIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjdzX2xpbmVhcl9pbmZpbml0ZV0ifSldfSl9KX1mdW5jdGlvbiBhOCh7YWN0aXZlOiQscGVuZGluZzpLLG9uQ2xpY2s6Six2YXJpYW50OlosdGl0bGU6WCxjaGlsZHJlbjpZfSl7bGV0IHE9Wj09PSJncmFudCI/IiM0YWRlODAiOlo9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBRKCJidXR0b24iLHtvbkNsaWNrOkosZGlzYWJsZWQ6Syx0aXRsZTpYLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToidy02IGgtNS41IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQgcC0wIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIixzdHlsZTp7YmFja2dyb3VuZDokP2Ake3F9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6JD9xOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5Oks/MC41OjF9LGNoaWxkcmVuOll9KX1mdW5jdGlvbiBfNSh7bGFiZWw6JCxjaGVja2VkOkssZGlzYWJsZWQ6Sj0hMSxvbkNoYW5nZTpafSl7cmV0dXJuIFEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToic3dpdGNoIiwiYXJpYS1jaGVja2VkIjpLLCJhcmlhLWxhYmVsIjokLGRpc2FibGVkOkosb25DbGljazooKT0+WighSyksY2xhc3NOYW1lOmByZWxhdGl2ZSBoLVsxOHB4XSB3LTggc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci1ub25lIHAtMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke0o/ImN1cnNvci1kZWZhdWx0IGJnLXdoaXRlLzIwIjpLPyJjdXJzb3ItcG9pbnRlciBiZy1bIzBhODRmZl0iOiJjdXJzb3ItcG9pbnRlciBiZy13aGl0ZS8yMCJ9YCxjaGlsZHJlbjpRKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtWzJweF0gc2l6ZS1bMTRweF0gcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmxlZnRfMC4xNXNdICR7Sj8iYmctd2hpdGUvNTAiOiJiZy13aGl0ZSJ9YCxzdHlsZTp7bGVmdDpLPzE2OjJ9fSl9KX12YXIgTUo9ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIixPSj0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiO2Z1bmN0aW9uIFo0KHtvdmVybGF5RW5hYmxlZDokLG9uVG9nZ2xlT3ZlcmxheTpLfSl7bGV0e3NuYXBzaG90Okp9PUM1KCkse2hpZ2hsaWdodGVkS2V5Olosc2V0SGlnaGxpZ2h0ZWRLZXk6WH09ajIoKSxZPUo/LmVsZW1lbnRzPz9bXSxxPXgyKEopLFY9Sj8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIFEoImRpdiIse2NsYXNzTmFtZTpgJHtNSn0gcHgtMyBweS0yYCxjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOk9KLGNoaWxkcmVuOiJBWCBUcmVlIn0pLFEoXzUse2xhYmVsOiJFbmFibGUgb3ZlcmxheSIsY2hlY2tlZDokLG9uQ2hhbmdlOkt9KV19KSwhJD9udWxsOnE/UShRNCx7Y2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpZLmxlbmd0aD09PTA/UShRNCx7c3Bpbm5lcjohVixjaGlsZHJlbjpWPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOlEoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0yIHB5LTIgbWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46WS5tYXAoKE4sQik9PntsZXQgej1kMChOKTtyZXR1cm4gUShQSix7ZWxlbWVudDpOLGluZGV4OkIsYWN0aXZlOno9PT1aLG9uSGlnaGxpZ2h0Olh9LHopfSl9KV19KX1mdW5jdGlvbiBRNCh7Y2hpbGRyZW46JCxzcGlubmVyOks9ITF9KXtyZXR1cm4gUSgiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6Im10LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbSz9RKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTMuNSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzIwIGJvcmRlci10LXdoaXRlLzYwIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSk6bnVsbCxRKCJzcGFuIix7Y2hpbGRyZW46JH0pXX0pfXZhciBQSj1pMChmdW5jdGlvbih7ZWxlbWVudDpLLGluZGV4OkosYWN0aXZlOlosb25IaWdobGlnaHQ6WH0pe2xldCBZPWQwKEspLHE9djIoSyxKKSxWPWAke01hdGgucm91bmQoSy5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChLLmZyYW1lLmhlaWdodCl9YCxOPVtxLmxhYmVsLHEucm9sZXx8cS50eXBlfHwiZWxlbWVudCIsVl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gUSgiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpZLHRpdGxlOk4sb25Nb3VzZUVudGVyOigpPT5YKFkpLG9uTW91c2VMZWF2ZTooKT0+WChudWxsKSxvbkZvY3VzOigpPT5YKFkpLG9uQmx1cjooKT0+WChudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtaPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOksubGFiZWx8fEsucm9sZXx8IlVubGFiZWxlZCJ9KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46Sy5yb2xlfHxLLnR5cGV8fCJlbGVtZW50In0pXX0pLFEoImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOlZ9KV19KX0sKCQsSyk9PiQuaW5kZXg9PT1LLmluZGV4JiYkLmFjdGl2ZT09PUsuYWN0aXZlJiYkLm9uSGlnaGxpZ2h0PT09Sy5vbkhpZ2hsaWdodCYmUjIoJC5lbGVtZW50LEsuZWxlbWVudCkpO3ZhciBXSj1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSxzOD0xOTY2MDgsWDQ9NTI0Mjg4MDAwLGEyPSJhcHBsaWNhdGlvbi94LXNlcnZlLXNpbS1ob3N0LXBhdGgiO2FzeW5jIGZ1bmN0aW9uIFk0KCQsSyxKKXtsZXQgWj1hd2FpdCBLKGB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtKfSAke00xKCQpfWApO2lmKFouZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFouc3RkZXJyfHxgYWRkbWVkaWEgZmFpbGVkIChleGl0ICR7Wi5leGl0Q29kZX0pYCl9ZnVuY3Rpb24gRDUoJCl7bGV0IEs9JC5uYW1lLEo9Sy5sYXN0SW5kZXhPZigiLiIpO2lmKEo+PTApcmV0dXJuIEsuc2xpY2UoSisxKS50b0xvd2VyQ2FzZSgpO2lmKCQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1mdW5jdGlvbiBxNCgkKXtpZihENSgkKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKFdKLmhhcygkLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gX0ooJCl7bGV0IEs9bmV3IFVpbnQ4QXJyYXkoJCksSj0iIjtmb3IobGV0IFo9MDtaPEsubGVuZ3RoO1orPTMyNzY4KUorPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4uSy5zdWJhcnJheShaLForMzI3NjgpKTtyZXR1cm4gYnRvYShKKX1hc3luYyBmdW5jdGlvbiBWNCgkLEssSixaKXtsZXQgWD0wO2ZvcihsZXQgWT0wO1k8JC5zaXplO1krPXM4KXtsZXQgcT1hd2FpdCAkLnNsaWNlKFksWStzOCkuYXJyYXlCdWZmZXIoKSxWPV9KKHEpLEI9YXdhaXQgSihgYmFzaCAtYyAnZWNobyAke1Z9IHwgYmFzZTY0IC1kICR7WT09PTA/Ij4iOiI+PiJ9ICR7S30nYCk7aWYoQi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoQi5zdGRlcnJ8fGBXcml0ZSBmYWlsZWQgKGV4aXQgJHtCLmV4aXRDb2RlfSlgKTtpZighWiljb250aW51ZTtsZXQgej1NYXRoLm1pbihZK3M4LCQuc2l6ZSksRz1NYXRoLmZsb29yKHovJC5zaXplKjEwMCk7aWYoRyE9PVgpWD1HLFooei8kLnNpemUpfX1hc3luYyBmdW5jdGlvbiBHNCgkLEssSixaKXtpZigkLnNpemU+WDQpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFg9YC90bXAvJHtLfS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7Sn1gO3JldHVybiBhd2FpdCBWNCgkLFgsWiksWH1hc3luYyBmdW5jdGlvbiBCNCgkLEssSixaLFgpe2lmKCQuc2l6ZT5YNCl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWT1LPT09ImlwYSI/ImlwYSI6RDUoJCksVj1gL3RtcC8ke0s9PT0iaXBhIj8ic2VydmUtc2ltLWluc3RhbGwiOiJzZXJ2ZS1zaW0tdXBsb2FkIn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1l9YDt0cnl7WCgwKSxhd2FpdCBWNCgkLFYsSixYKSxYKG51bGwpO2xldCBOPUs9PT0iaXBhIj9geGNydW4gc2ltY3RsIGluc3RhbGwgJHtafSAke1Z9YDpgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7Wn0gJHtWfWAsQj1hd2FpdCBKKE4pO2lmKEIuZXhpdENvZGUhPT0wKXtsZXQgej1LPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoQi5zdGRlcnJ8fGAke3p9IGZhaWxlZCAoZXhpdCAke0IuZXhpdENvZGV9KWApfX1maW5hbGx5e0ooYGJhc2ggLWMgJ3JtIC1mICR7Vn0nYCkuY2F0Y2goKCk9Pnt9KX19dmFyIERKPTMwMDA7YXN5bmMgZnVuY3Rpb24gVEooJCxLPWZldGNoKXt0cnl7bGV0IEo9YXdhaXQgSygkLHtjYWNoZToibm8tc3RvcmUifSk7aWYoIUoub2spcmV0dXJuIG51bGw7bGV0IFo9YXdhaXQgSi5qc29uKCk7cmV0dXJuIFomJnR5cGVvZiBaPT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KFopP1o6bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19dmFyIHdKPTIwOTcxNTIwMCxFSj0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5Iix6ND0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiBJSigkLEspe2lmKEspcmV0dXJuImFjdGl2ZSI7aWYoJD09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKCQ9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiAkfWZ1bmN0aW9uIGJKKCQpe2lmKCEkLmluamVjdGVkKXJldHVybiJwbGF5IjtpZigkLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKCQuYnVuZGxlSWQmJiEkLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiB5SigkKXtyZXR1cm4gJC5zcGxpdChgCmApLm1hcCgoSyk9PksudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoSyk9PntsZXQgSj1LLmluZGV4T2YoIlx0Iik7aWYoSjw9MClyZXR1cm5bXTtsZXQgWj1LLnNsaWNlKDAsSikudHJpbSgpLFg9Sy5zbGljZShKKzEpLnRyaW0oKTtpZighWnx8IVgpcmV0dXJuW107cmV0dXJuW3tpZDpaLG5hbWU6WH1dfSl9dmFyIFNKPW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gVTQoJCl7aWYoJC50eXBlJiYkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0IEs9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksSj1LLmxhc3RJbmRleE9mKCIuIik7aWYoSjwwKXJldHVybiExO3JldHVybiBTSi5oYXMoSy5zbGljZShKKzEpKX1mdW5jdGlvbiB4SigkKXtyZXR1cm4gVTQoJCkmJiQuc2l6ZT53Sn1mdW5jdGlvbiBSSigkKXtsZXQgSz0oJC50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZihLPT09ImltYWdlL2hlaWMifHxLPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBKPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBKLmVuZHNXaXRoKCIuaGVpYyIpfHxKLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIHZKKHtyYXdNZXNzYWdlOiQsbGFzdEZpbGVJc0hlaWM6Syxzb3VyY2U6Sn0pe2lmKEsmJihKPT09ImltYWdlInx8Sj09PSJ2aWRlbyIpKXJldHVybiB6NDtyZXR1cm4gJH1mdW5jdGlvbiBqSih7c3RhdGU6JH0pe2xldCBLPSQ9PT0iYWN0aXZlIj8iQWN0aXZlIjokPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixKPSQ9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6JD09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gUSgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjokLGNoaWxkcmVuOltKJiZRKCJzcGFuIix7Y2xhc3NOYW1lOkp9KSxLXX0pfWZ1bmN0aW9uIGdKKCl7cmV0dXJuIFEoInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIGhKKHttb2RlOiQsZmlsZU5hbWU6Syx3ZWJjYW1OYW1lOkosc291cmNlS2luZDpafSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKCQ9PT0iZmlsZSIpcmV0dXJuIFEoSjEse2NoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46Wj09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksUSgic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOks/PyIifSldfSk7aWYoJD09PSJ3ZWJjYW0iKXJldHVybiBRKEoxLHtjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOiJXZWJjYW0ifSksUSgic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOko/PyIifSldfSk7cmV0dXJuIFEoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvODUgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJTZWxlY3Qgb3IgZHJvcCBtZWRpYSJ9KX1mdW5jdGlvbiBONCh7a2luZDokLG1lc3NhZ2U6S30pe3JldHVybiBRKCJkaXYiLHtjbGFzc05hbWU6JD09PSJ3YXJuaW5nIj8iYmctd2FybmluZy8xMCBib3JkZXIgYm9yZGVyLXdhcm5pbmcvMjUgdGV4dC13YXJuaW5nLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyI6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiLCJkYXRhLWNhbWVyYS1iYW5uZXIta2luZCI6JCxyb2xlOiQ9PT0iZXJyb3IiPyJhbGVydCI6InN0YXR1cyIsY2hpbGRyZW46S30pfWZ1bmN0aW9uIEw0KHt1ZGlkOiQsYnVuZGxlSWQ6S30pe2xldFtKLFpdPU0oITEpLFtYLFldPU0oInBsYWNlaG9sZGVyIiksW3EsVl09TSgiIiksW04sQl09TShudWxsKSxbeixHXT1NKCExKSxDPUkoMCksW1UsRl09TSghMSksW0wsa109TSghMSksSD1JKG51bGwpLFtQLHldPU0oW10pLFtXLEFdPU0oITEpLFtULGldPU0oIiIpLFt2LGpdPU0oIm9mZiIpLFtkLFoxXT1NKG51bGwpLFtxMSxvXT1NKG51bGwpLEkxPWQhPT1udWxsfHxxMSE9PW51bGwsW2csZl09TShudWxsKSxbcyxrMV09TShudWxsKSxbLFUxXT1NKG51bGwpLFtWMSxGMV09TSghMSksW0gxLFNdPU0oInJlYWR5IiksW2Mscl09TSgoKT0+bmV3IFNldCksW2UsRDFdPU0obnVsbCksW2IsbV09TShudWxsKSxZMT1JKCExKSxBMT1JKCExKSxwPUkoIm9mZiIpLG49SSghMSksRzE9dzEoKCk9PntsZXQgXz13aW5kb3cuX19TSU1fUFJFVklFV19fPy5zZXJ2ZVNpbUJpbjtpZighXylyZXR1cm4ic2VydmUtc2ltIjtpZigvXC50cyQvLnRlc3QoXykpcmV0dXJuYGJ1biAke00xKF8pfWA7aWYoL1wuanMkLy50ZXN0KF8pKXJldHVybmBub2RlICR7TTEoXyl9YDtyZXR1cm4gTTEoXyl9LFtdKSxQMT1EKGFzeW5jKCk9PntsZXQgXz13aW5kb3cuX19TSU1fUFJFVklFV19fPy5jYW1lcmFTdGF0dXNFbmRwb2ludDtyZXR1cm4gXz9USihfKTpudWxsfSxbXSksWDA9SShhc3luYygpPT57fSksZDE9SShLKTtFKCgpPT57ZDEuY3VycmVudD1LfSxbS10pLEUoKCk9PntsZXQgXz0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCBsPWF3YWl0IFAxKCk7aWYoX3x8IWx8fCFsLmFsaXZlKXJldHVybjtBMS5jdXJyZW50PSEwO2xldCBLMT1sLnNvdXJjZTtpZihLMT09PSJwbGFjZWhvbGRlciJ8fEsxPT09IndlYmNhbSJ8fEsxPT09ImltYWdlInx8SzE9PT0idmlkZW8iKVkoSzEpO2lmKChLMT09PSJpbWFnZSJ8fEsxPT09InZpZGVvIikmJmwuYXJnKVYobC5hcmcpLEIobC5hcmcuc3BsaXQoIi8iKS5wb3AoKT8/bnVsbCk7aWYoSzE9PT0id2ViY2FtIiYmbC5hcmcpaShsLmFyZyksWDAuY3VycmVudCgpO2xldCBPMT1sLm1pcnJvcj09PSJvbiI/Im9uIjoib2ZmIjtqKE8xKSxwLmN1cnJlbnQ9TzEsRDEobC5oZWxwZXJQaWQ/P251bGwpLEYxKCEwKTtsZXQgQjE9QXJyYXkuaXNBcnJheShsLmJ1bmRsZUlkcyk/bC5idW5kbGVJZHM6W107aWYoQjEubGVuZ3RoPjApcihuZXcgU2V0KEIxKSk7bGV0IE4xPWQxLmN1cnJlbnQsYjE9SzEmJksxIT09InBsYWNlaG9sZGVyIjtTKE4xJiZCMS5pbmNsdWRlcyhOMSkmJmIxPyJhY3RpdmUiOiJyZWFkeSIpLFUxKGBSZWF0dGFjaGVkIOKGkiAke0sxPz8icnVubmluZyBoZWxwZXIifSR7bC5hcmc/YCAoJHtsLmFyZ30pYDoiIn1gKX0pKCksKCk9PntfPSEwfX0sWyQsUDFdKSxFKCgpPT57bGV0IF89ITEsbD0hMSxLMT1udWxsLE8xPWFzeW5jKCk9PntpZihffHxsKXJldHVybjtpZih0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilyZXR1cm47bD0hMDt0cnl7bGV0IE4xPWF3YWl0IFAxKCk7aWYoXylyZXR1cm47bGV0IGIxPSEhTjE/LmFsaXZlLGMxPUFycmF5LmlzQXJyYXkoTjE/LmJ1bmRsZUlkcyk/TjEuYnVuZGxlSWRzOm51bGwscjE9ISFLJiYoYzE/YzEuaW5jbHVkZXMoSyk6Yy5oYXMoSykpLEwwPU4xPy5zb3VyY2U/P251bGwsdz1WMSYmYjEmJnIxJiYhIShMMCYmTDAhPT0icGxhY2Vob2xkZXIiKSYmKGU9PW51bGx8fE4xPy5oZWxwZXJQaWQ9PT1lKTtpZihTKChPKT0+SUooTyx3KSksIWIxKUYxKChPKT0+e2lmKCFPKXJldHVybiBPO3JldHVybiByKG5ldyBTZXQpLEQxKG51bGwpLHAuY3VycmVudD0ib2ZmIiwhMX0pO2Vsc2UgaWYoVjEmJmUhPW51bGwmJk4xPy5oZWxwZXJQaWQhPT1lKUYxKCExKSxyKG5ldyBTZXQpLEQxKG51bGwpLHAuY3VycmVudD0ib2ZmIjtlbHNlIGlmKGIxJiZBcnJheS5pc0FycmF5KE4xPy5idW5kbGVJZHMpKXtsZXQgTz1OMS5idW5kbGVJZHM7cigoUik9PntpZihSLnNpemU9PT1PLmxlbmd0aCYmTy5ldmVyeSgodSk9PlIuaGFzKHUpKSlyZXR1cm4gUjtyZXR1cm4gbmV3IFNldChPKX0pfX1maW5hbGx5e2w9ITF9fTtLMT1zZXRJbnRlcnZhbCgoKT0+e08xKCl9LERKKTtsZXQgQjE9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0idmlzaWJsZSIpTzEoKX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixCMSk7cmV0dXJuKCk9PntpZihfPSEwLEsxKWNsZWFySW50ZXJ2YWwoSzEpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsQjEpfX0sW1AxLFYxLGUsSyxjXSk7bGV0IF8xPUQoYXN5bmMoKT0+e0EoITApLGYobnVsbCk7dHJ5e2xldCBfPWF3YWl0IEUxKGAke0cxfSBjYW1lcmEgLS1saXN0LXdlYmNhbXNgKTtpZihfLmV4aXRDb2RlIT09MCl7ZihfLnN0ZGVyci50cmltKCl8fGAtLWxpc3Qtd2ViY2FtcyBmYWlsZWQgKCR7Xy5leGl0Q29kZX0pYCk7cmV0dXJufWxldCBsPXlKKF8uc3Rkb3V0KTtpZih5KGwpLGwubGVuZ3RoPjAmJiFUKWkobFswXS5pZCl9ZmluYWxseXtBKCExKX19LFtULEcxXSk7RSgoKT0+e1gwLmN1cnJlbnQ9XzF9LFtfMV0pLEUoKCk9PntpZihMJiZQLmxlbmd0aD09PTAmJiFXKV8xKCl9LFtMLFAubGVuZ3RoLFcsXzFdKTtsZXQgcDE9RCgoXyk9PntmKHZKKHtyYXdNZXNzYWdlOl8sbGFzdEZpbGVJc0hlaWM6WTEuY3VycmVudCxzb3VyY2U6WH0pKX0sW1hdKSxCMD1EKGFzeW5jKF8sbCxLMSk9PntsZXQgTzE9Xz09PSJpbWFnZSJ8fF89PT0idmlkZW8iLEIxPVsiY2FtZXJhIiwic3dpdGNoIixPMT8iZmlsZSI6X107aWYoXz09PSJ3ZWJjYW0iJiZsKUIxLnB1c2goTTEobCkpO2lmKE8xKXtpZighSzEudHJpbSgpKXJldHVybiBmKCJEcm9wIGEgZmlsZSBpbnRvIHRoZSBwYW5lbCBvciBwaWNrIGFub3RoZXIgc291cmNlLiIpLCExO0IxLnB1c2goTTEoSzEudHJpbSgpKSl9QjEucHVzaCgiLWQiLCQsIi0tcXVpZXQiKTtsZXQgTjE9YXdhaXQgRTEoYCR7RzF9ICR7QjEuam9pbigiICIpfWApO2lmKE4xLmV4aXRDb2RlIT09MClyZXR1cm4gcDEoTjEuc3RkZXJyLnRyaW0oKXx8TjEuc3Rkb3V0LnRyaW0oKXx8YHN3aXRjaCBmYWlsZWQgKCR7TjEuZXhpdENvZGV9KWApLCExO1kxLmN1cnJlbnQ9ITE7dHJ5e2xldCBiMT1KU09OLnBhcnNlKE4xLnN0ZG91dC50cmltKCkpO1UxKGBTd2l0Y2hlZCDihpIgJHtiMS5zb3VyY2U/P199JHtiMS5hcmc/YCAoJHtiMS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7VTEoYFN3aXRjaGVkIOKGkiAke199YCl9cmV0dXJuITB9LFskLEcxLHAxXSksSzA9RChhc3luYygpPT57aWYoIUspcmV0dXJuO1oxKCJpbmplY3QiKSxmKG51bGwpLFUxKG51bGwpO3RyeXtsZXQgXz1bImNhbWVyYSIsTTEoSyksIi1kIiwkLCItLXF1aWV0Il07aWYoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKXtpZighcS50cmltKCkpe2YoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufV8ucHVzaCgiLS1maWxlIixNMShxLnRyaW0oKSkpfWVsc2UgaWYoWD09PSJ3ZWJjYW0iKWlmKFQpXy5wdXNoKCItLXdlYmNhbSIsTTEoVCkpO2Vsc2UgXy5wdXNoKCItLXdlYmNhbSIpO18ucHVzaCgiLS1taXJyb3IiLHYpO2xldCBsPWF3YWl0IEUxKGAke0cxfSAke18uam9pbigiICIpfWApO2lmKGwuZXhpdENvZGUhPT0wKXtwMShsLnN0ZGVyci50cmltKCl8fGwuc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7bC5leGl0Q29kZX0pYCk7cmV0dXJufVkxLmN1cnJlbnQ9ITE7bGV0IEsxPW51bGw7dHJ5e2xldCBPMT1KU09OLnBhcnNlKGwuc3Rkb3V0LnRyaW0oKSk7SzE9TzEuaGVscGVyUGlkPz9udWxsO2xldCBCMT1PMS5oZWxwZXJSZWxhdW5jaGVkPT09ITE/IkF0dGFjaGVkIjoiSW5qZWN0ZWQiLE4xPU8xLnBpZD9gIHBpZCAke08xLnBpZH1gOiIiLGIxPU8xLmhlbHBlclBpZD9gLCBoZWxwZXIgcGlkICR7TzEuaGVscGVyUGlkfWA6IiI7VTEoYCR7QjF9ICR7TzEuc291cmNlPz9YfSBpbnRvICR7S30ke04xfSR7YjF9YCl9Y2F0Y2h7VTEobC5zdGRvdXQudHJpbSgpfHwiSW5qZWN0ZWQuIil9RjEoITApLFMoWD09PSJwbGFjZWhvbGRlciI/InJlYWR5IjoiYWN0aXZlIiksRDEoSzEpLHIoKE8xKT0+TzEuaGFzKEspP08xOm5ldyBTZXQoTzEpLmFkZChLKSkscC5jdXJyZW50PXZ9ZmluYWxseXtaMShudWxsKX19LFtLLCQsWCxxLFQsdixHMSxwMV0pLCQxPVYxP2Ake1h9Ojoke1g9PT0id2ViY2FtIj9UOiIifTo6JHtYPT09ImltYWdlInx8WD09PSJ2aWRlbyI/cToiIn1gOm51bGwsbjE9ISFLJiZjLmhhcyhLKSxPMD1uMSYmWCE9PSJwbGFjZWhvbGRlciI7RSgoKT0+e2lmKCFPMCl7bi5jdXJyZW50PSExO3JldHVybn1pZihuLmN1cnJlbnQpcmV0dXJuO24uY3VycmVudD0hMCxaKCEwKX0sW08wXSksRSgoKT0+e2lmKCFiKXJldHVybjtpZighS3x8STF8fFUpcmV0dXJuO2lmKFghPT0id2ViY2FtInx8VCE9PWIpcmV0dXJuO2lmKG0obnVsbCksVjEpcmV0dXJuO0swKCl9LFtiLEssSTEsVSxYLFQsVjEsSzBdKSxFKCgpPT57aWYoIVYxKXJldHVybjtpZigoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmIXEudHJpbSgpKXJldHVybjtpZihYPT09IndlYmNhbSImJiFUKXJldHVybjtpZihBMS5jdXJyZW50KXtBMS5jdXJyZW50PSExO3JldHVybn1sZXQgXz0hMTtyZXR1cm4oYXN5bmMoKT0+e28oInN3aXRjaCIpLGYobnVsbCk7dHJ5e2lmKF8pcmV0dXJuO2F3YWl0IEIwKFgsVCxxKX1maW5hbGx5e2lmKCFfKW8obnVsbCl9fSkoKSwoKT0+e189ITB9fSxbJDFdKSxFKCgpPT57aWYoIVYxKXJldHVybjtpZihwLmN1cnJlbnQ9PT12KXJldHVybjtsZXQgXz12LGw9ITE7cmV0dXJuKGFzeW5jKCk9PntvKCJtaXJyb3IiKSxmKG51bGwpO3RyeXtsZXQgSzE9YXdhaXQgRTEoYCR7RzF9IGNhbWVyYSBtaXJyb3IgJHtffSAtZCAkeyR9IC0tcXVpZXRgKTtpZihsKXJldHVybjtpZihLMS5leGl0Q29kZSE9PTApe2YoSzEuc3RkZXJyLnRyaW0oKXx8SzEuc3Rkb3V0LnRyaW0oKXx8YG1pcnJvciBmYWlsZWQgKCR7SzEuZXhpdENvZGV9KWApO3JldHVybn1wLmN1cnJlbnQ9XyxVMShgTWlycm9yIOKGkiAke199YCl9ZmluYWxseXtpZighbClvKG51bGwpfX0pKCksKCk9PntsPSEwfX0sW3YsVjFdKTtsZXQgdTE9RChhc3luYygpPT57WjEoInN0b3AiKSxmKG51bGwpO3RyeXtsZXQgXz1hd2FpdCBFMShgJHtHMX0gY2FtZXJhIC0tc3RvcC13ZWJjYW0gLWQgJHskfWApO2lmKF8uZXhpdENvZGUhPT0wKXtmKF8uc3RkZXJyLnRyaW0oKXx8YHN0b3Atd2ViY2FtIGZhaWxlZCAoJHtfLmV4aXRDb2RlfSlgKTtyZXR1cm59VTEoIkNhbWVyYSBoZWxwZXIgc3RvcHBlZC4iKSxGMSghMSksUygicmVhZHkiKSxyKG5ldyBTZXQpLHAuY3VycmVudD0ib2ZmIn1maW5hbGx5e1oxKG51bGwpfX0sWyQsRzFdKSx0MT1EKGFzeW5jKF8pPT57bGV0IGw9Ukooe3R5cGU6Xy50eXBlLG5hbWU6Xy5uYW1lfSksSzE9Xy50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpfHxsLE8xPV8udHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKXx8VTQoe3R5cGU6Xy50eXBlLG5hbWU6Xy5uYW1lfSk7aWYoIUsxJiYhTzEpe1kxLmN1cnJlbnQ9ITEsZihgVW5zdXBwb3J0ZWQgZmlsZSB0eXBlOiAke18udHlwZXx8Xy5uYW1lfWApO3JldHVybn1pZihGKCEwKSxmKG51bGwpLGsxKG51bGwpLHhKKHt0eXBlOl8udHlwZSxuYW1lOl8ubmFtZSxzaXplOl8uc2l6ZX0pKWsxKEVKKTtZMS5jdXJyZW50PWw7dHJ5e2xldCBCMT1ENShfKSxOMT1hd2FpdCBHNChfLCJzZXJ2ZS1zaW0tY2Ftc3JjIixCMSxFMSk7QihfLm5hbWUpLFkoTzE/InZpZGVvIjoiaW1hZ2UiKSxWKE4xKSxVMShgTG9hZGVkICR7Xy5uYW1lfWApfWNhdGNoKEIxKXtpZihZMS5jdXJyZW50KWYoejQpO2Vsc2UgZihCMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e0YoITEpfX0sW10pLFUwPUQoYXN5bmMoXyk9PntfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxDLmN1cnJlbnQ9MCxHKCExKTtsZXQgbD1fLmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZihsKWF3YWl0IHQxKGwpfSxbdDFdKSxUMT1EKCgpPT57WSgicGxhY2Vob2xkZXIiKSxWKCIiKSxCKG51bGwpLGYobnVsbCksazEobnVsbCksWTEuY3VycmVudD0hMX0sW10pLGcxPUQoKCk9PntILmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxZMD1EKGFzeW5jKF8pPT57bGV0IGw9Xy50YXJnZXQsSzE9bC5maWxlcz8uWzBdO2lmKGwudmFsdWU9IiIsSzEpYXdhaXQgdDEoSzEpfSxbdDFdKTtFKCgpPT57aWYoIUwpcmV0dXJuO2xldCBfPShsKT0+e2xldCBLMT1sLnRhcmdldDtpZihLMSBpbnN0YW5jZW9mIEVsZW1lbnQmJksxLmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47ayghMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyl9LFtMXSk7bGV0IFAwPUQoKF8pPT57aWYoaShfLmlkKSxZKCJ3ZWJjYW0iKSxCKG51bGwpLGYobnVsbCksWTEuY3VycmVudD0hMSxrKCExKSxLKW0oXy5pZCl9LFtLXSksZTE9RCgoKT0+e2ooKF8pPT5fPT09Im9uIj8ib2ZmIjoib24iKX0sW10pLFcwPSFWMXx8WD09PSJwbGFjZWhvbGRlciIsdjA9RCgoXyk9PntpZihfLnByZXZlbnREZWZhdWx0KCksQy5jdXJyZW50KyssQy5jdXJyZW50PT09MSlHKCEwKX0sW10pLF8wPUQoKF8pPT57aWYoXy5wcmV2ZW50RGVmYXVsdCgpLF8uZGF0YVRyYW5zZmVyKV8uZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksSjA9RCgoXyk9PntpZihfLnByZXZlbnREZWZhdWx0KCksQy5jdXJyZW50LS0sQy5jdXJyZW50PD0wKUMuY3VycmVudD0wLEcoITEpfSxbXSksbDE9Ykooe2J1bmRsZUlkOkssaW5qZWN0ZWQ6VjEsc291cmNlOlgsZm9yZWdyb3VuZElzSW5qZWN0ZWQ6bjF9KSx2MT1sMT09PSJzdG9wIj97bGFiZWw6ZD09PSJzdG9wIj8iU3RvcHBpbmfigKYiOiJTdG9wIixvbkNsaWNrOnUxLGtpbmQ6InN0b3AifTpsMT09PSJhdHRhY2giP3tsYWJlbDpkPT09ImluamVjdCI/IkluamVjdGluZ+KApiI6YEluamVjdCAke0t9YCxvbkNsaWNrOkswLGtpbmQ6ImF0dGFjaCJ9OntsYWJlbDpkPT09ImluamVjdCI/IlN0YXJ0aW5n4oCmIjoiUGxheSIsb25DbGljazpLMCxraW5kOiJwbGF5In0saDE9bDE9PT0ic3RvcCI/VXx8ZCE9PW51bGw6IUt8fFV8fGQhPT1udWxsLGkxPVg9PT0icGxhY2Vob2xkZXIiLEYwPVg9PT0id2ViY2FtIixBMD0oWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmISFOLE4wPUYwP1AuZmluZCgoXyk9Pl8uaWQ9PT1UKT8ubmFtZT8/VD8/IldlYmNhbSI6bnVsbCxYMT1VPyJ1cGxvYWRpbmciOkEwPyJmaWxlIjpGMD8id2ViY2FtIjoicGxhY2Vob2xkZXIiO3JldHVybiBRKEcwLHtvcGVuOkosb25PcGVuQ2hhbmdlOlosYm9keUNsYXNzTmFtZToicHQtMi41IixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpRKEoxLHtjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQ2FtZXJhIn0pLFEoakose3N0YXRlOkgxfSldfSksY2hpbGRyZW46USgiZGl2Iix7b25EcmFnRW50ZXI6djAsb25EcmFnT3ZlcjpfMCxvbkRyYWdMZWF2ZTpKMCxvbkRyb3A6VTAsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yLjUiLGNoaWxkcmVuOltRKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjoiUmVwbGFjZXMgdGhlIHNpbXVsYXRvcidzIGNhbWVyYSBmZWVkIGJ5IGluamVjdGluZyBhIGR5bGliIGF0IGFwcCBsYXVuY2ggYW5kIHN0cmVhbWluZyBmcmFtZXMgaW50byBzaGFyZWQgbWVtb3J5LiBQaWNrIG1lZGlhIG9yIGEgd2ViY2FtLCB0aGVuIFBsYXkgdG8gaW5qZWN0IGludG8gdGhlIGZvcmVncm91bmQgYXBwLiJ9KSxRKCJpbnB1dCIse3JlZjpILHR5cGU6ImZpbGUiLGFjY2VwdDoiaW1hZ2UvKix2aWRlby8qIixjbGFzc05hbWU6ImhpZGRlbiIsb25DaGFuZ2U6WTB9KSxRKCJkaXYiLHtvbkNsaWNrOihfKT0+e2lmKCFpMSlyZXR1cm47aWYoXy50YXJnZXQuY2xvc2VzdCgiW2RhdGEtY2xlYXItbWVkaWFdIikpcmV0dXJuO2cxKCl9LHRpdGxlOmkxPyJObyBzb3VyY2Ugc2VsZWN0ZWQg4oCUIFBsYXkgdXNlcyBhIHRlc3QtcGF0dGVybiBmZWVkLiBDbGljayB0byBwaWNrIGFuIGltYWdlL3ZpZGVvLCBvciBkcm9wIG9uZSBoZXJlLiI6RjA/YFNvdXJjZTogJHtOMH1gOmBTb3VyY2U6ICR7Tj8/WH1gLGNsYXNzTmFtZTpbInJlbGF0aXZlIG1pbi1oLVs0NHB4XSBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMi41IHB4LTMuNSBweS0yLjUgcm91bmRlZC1bN3B4XSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLVtib3JkZXItY29sb3IsYmFja2dyb3VuZF0gZHVyYXRpb24tMTUwIixpMT8iYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMiI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLHo/IiFiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMDgpXSAhYm9yZGVyLVtyZ2JhKDEwLDEzMiwyNTUsMC42KV0iOiIiLFU/ImN1cnNvci1wcm9ncmVzcyI6aTE/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W1EoaEose21vZGU6WDEsZmlsZU5hbWU6Tix3ZWJjYW1OYW1lOk4wLHNvdXJjZUtpbmQ6WH0pLCFpMSYmIVUmJlEoImJ1dHRvbiIseyJkYXRhLWNsZWFyLW1lZGlhIjohMCxvbkNsaWNrOihfKT0+e18uc3RvcFByb3BhZ2F0aW9uKCksVDEoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc291cmNlIix0aXRsZToiQ2xlYXIg4oaSIHBsYWNlaG9sZGVyIixjaGlsZHJlbjpRKHowLHtzaXplOjE0LHN0cm9rZVdpZHRoOjJ9KX0pXX0pLGkxJiYhVSYmUShnSix7fSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W1EoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLCJkYXRhLWNhbWVyYS1zb3VyY2UtbWVudSI6ITAsY2hpbGRyZW46W1EoImJ1dHRvbiIse29uQ2xpY2s6KCk9PmsoKF8pPT4hXyksY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtWzM2cHhdIHctMTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzg1IHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgcC0wIGhvdmVyOmJnLXdoaXRlL1swLjA2XSBob3Zlcjpib3JkZXItd2hpdGUvMjAgaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtaGFzcG9wdXAiOiJtZW51IiwiYXJpYS1leHBhbmRlZCI6TCx0aXRsZTpYPT09IndlYmNhbSI/YFNvdXJjZTogd2ViY2FtJHtUP2AgKCR7UC5maW5kKChfKT0+Xy5pZD09PVQpPy5uYW1lPz9UfSlgOiIifSDigJQgY2xpY2sgdG8gY2hhbmdlYDpgU291cmNlOiAke1h9IOKAlCBjbGljayB0byBwaWNrIG1lZGlhIG9yIHdlYmNhbWAsImFyaWEtbGFiZWwiOiJDaG9vc2UgY2FtZXJhIHNvdXJjZSIsY2hpbGRyZW46UShwNSx7c2l6ZToyMCxzdHJva2VXaWR0aDoyfSl9KSxMJiZRKCJkaXYiLHtyb2xlOiJtZW51IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzZweCldIGxlZnQtMCB6LTEwIG1pbi13LVsyMDBweF0gZmxleCBmbGV4LWNvbCBnYXAtcHggcC0xIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNCldIixjaGlsZHJlbjpbUSgiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZToidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvODUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixvbkNsaWNrOigpPT57ayghMSksZzEoKX0sdGl0bGU6IlBpY2sgYW4gaW1hZ2Ugb3IgdmlkZW8gZnJvbSBkaXNrIixjaGlsZHJlbjoiQnJvd3NlIG1lZGlh4oCmIn0pLFEoImRpdiIse2NsYXNzTmFtZToiaC1weCBiZy13aGl0ZS84IG15LTEifSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcGwtMi41IHByLTIgcHQtMSBwYi1bMnB4XSIsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpXPyJDYW1lcmFzIChsb2FkaW5n4oCmKSI6UC5sZW5ndGg9PT0wPyJObyBjYW1lcmFzIjoiQ2FtZXJhcyJ9KSxRKCJidXR0b24iLHtvbkNsaWNrOihfKT0+e18uc3RvcFByb3BhZ2F0aW9uKCksXzEoKX0sZGlzYWJsZWQ6VyxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctWzIycHhdIGgtWzIycHhdIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCBkaXNhYmxlZDpvcGFjaXR5LTUwIiwiYXJpYS1sYWJlbCI6IlJlZnJlc2ggY2FtZXJhcyIsdGl0bGU6IlJlZnJlc2ggY2FtZXJhcyIsY2hpbGRyZW46USh0MCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyfSl9KV19KSxQLm1hcCgoXyk9PntsZXQgbD1YPT09IndlYmNhbSImJlQ9PT1fLmlkO3JldHVybiBRKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOlsidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsbD8iIWJnLXdoaXRlL1swLjEyXSAhdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvODUiXS5qb2luKCIgIiksb25DbGljazooKT0+UDAoXyksdGl0bGU6Xy5uYW1lLGNoaWxkcmVuOl8ubmFtZX0sXy5pZCl9KV19KV19KSxRKCJidXR0b24iLHtvbkNsaWNrOnYxLm9uQ2xpY2ssZGlzYWJsZWQ6aDEsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIix2MS5raW5kPT09InN0b3AiPyJiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIl0uam9pbigiICIpLHRpdGxlOnYxLmtpbmQ9PT0ic3RvcCI/IlN0b3AgdGhlIGNhbWVyYSBoZWxwZXIgYW5kIHRlcm1pbmF0ZSBpbmplY3RlZCBhcHBzIjp2MS5raW5kPT09ImF0dGFjaCI/YEluamVjdCAke0t9IHNvIGl0IGpvaW5zIHRoZSBjYW1lcmEgZmVlZGA6IUs/IkJyaW5nIGFuIGFwcCB0byB0aGUgZm9yZWdyb3VuZCBmaXJzdCI6IlN0YXJ0OiBpbmplY3QgdGhlIGR5bGliIGFuZCBsYXVuY2ggdGhlIGZvcmVncm91bmQgYXBwIHdpdGggdGhlIGNob3NlbiBzb3VyY2UiLCJhcmlhLXByZXNzZWQiOnYxLmtpbmQ9PT0ic3RvcCIsImFyaWEtbGFiZWwiOnYxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOiJQbGF5IixjaGlsZHJlbjpbdjEua2luZD09PSJzdG9wIj9RKEsyLHt9KTpRKCQyLHt9KSxRKCJzcGFuIix7Y2hpbGRyZW46djEua2luZD09PSJzdG9wIj8iU3RvcCI6djEua2luZD09PSJhdHRhY2giPyJJbmplY3QiOiJQbGF5In0pXX0pLFEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazplMSxkaXNhYmxlZDpXMCxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgbWluLWgtWzM2cHhdIGJvcmRlciByb3VuZGVkLVs3cHhdIGZvbnQtW2luaGVyaXRdIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGFjdGl2ZTpzY2FsZS1bMC45N10gJHt2PT09Im9uIj8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlL1swLjg4XSBlbmFibGVkOmhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wOV0gZW5hYmxlZDpob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xOCldIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YE1pcnJvcjogJHt2fSDigJQgdGFwIHRvIHRvZ2dsZWAsdGl0bGU6VzA/Ik1pcnJvciB0b2dnbGUgYXZhaWxhYmxlIG9uY2UgYSBzb3VyY2UgaXMgc3RyZWFtaW5nIjpgTWlycm9yOiAke3Z9IOKAlCBjbGljayB0byB0b2dnbGVgLCJhcmlhLXByZXNzZWQiOnY9PT0ib24iLGNoaWxkcmVuOlEoZjUse3NpemU6MjAsc3Ryb2tlV2lkdGg6MixmaWxsOnY9PT0ib24iPyJjdXJyZW50Q29sb3IiOiJub25lIn0pfSldfSkscyYmUShONCx7a2luZDoid2FybmluZyIsbWVzc2FnZTpzfSksZyYmUShONCx7a2luZDoiZXJyb3IiLG1lc3NhZ2U6Z30pXX0pfSl9dmFyIEM0PTUwMDtmdW5jdGlvbiBINCh7dWRpZDokLGV2ZW50c0VuZHBvaW50Okt9KXtsZXRbSixaXT1NKCExKSxbWCxZXT1NKFtdKSxbcSxWXT1NKCExKSxOPXcxKCgpPT5LPz9gJHttMSgiYXBpL2V2ZW50LWxvZy9ldmVudHMiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWAsW0ssJF0pO0UoKCk9PntWKCExKSxZKFtdKTtsZXQgej0kNShOKTtyZXR1cm4gei5vbm1lc3NhZ2U9KHtkYXRhOkd9KT0+e3RyeXtsZXQgQz1KU09OLnBhcnNlKEcpO2lmKFYoITEpLEFycmF5LmlzQXJyYXkoQy5ldmVudHMpKVkoQy5ldmVudHMuc2xpY2UoLUM0KSk7ZWxzZSBpZihDLmV2ZW50KVkoKFUpPT57cmV0dXJuWy4uLlUuZmlsdGVyKChMKT0+TC5pZCE9PUMuZXZlbnQuaWQpLEMuZXZlbnRdLnNsaWNlKC1DNCl9KX1jYXRjaHt9fSx6Lm9uZXJyb3I9KCk9PlYoITApLCgpPT56LmNsb3NlKCl9LFtOXSk7bGV0IEI9dzEoKCk9Plguc2xpY2UoKS5yZXZlcnNlKCksW1hdKTtyZXR1cm4gUShHMCx7b3BlbjpKLG9uT3BlbkNoYW5nZTpaLCJkYXRhLWV2ZW50LWxvZyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6UShKMSx7Y2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIixjaGlsZHJlbjoiRXZlbnQgTG9nIn0pLFEoInNwYW4iLHt9KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItd2hpdGUvOCBiZy13aGl0ZS9bMC4wNF0gcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzYwIixjaGlsZHJlbjpYLmxlbmd0aH0pXX0pLGNoaWxkcmVuOkIubGVuZ3RoPT09MD9RKCJkaXYiLHtyb2xlOiJzdGF0dXMiLCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpxPyJEaXNjb25uZWN0ZWQiOiJObyBldmVudHMgeWV0In0pOlEoImRpdiIse2NsYXNzTmFtZToiZmxleCBtYXgtaC1bMzIwcHhdIGZsZXgtY29sIGdhcC0xIG92ZXJmbG93LXktYXV0byBweS0wLjUgW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46Qi5tYXAoKHopPT5RKGZKLHtldmVudDp6fSx6LmlkKSl9KX0pfWZ1bmN0aW9uIGZKKHtldmVudDokfSl7bGV0IEs9bUooJC50aW1lc3RhbXApLEo9WyQuc291cmNlLCQua2luZCwkLmFjdGlvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAvICIpLFo9JC5tc2c/PyQuc3VtbWFyeSxYPSQuc3RhdHVzPT09ImVycm9yIj8iYm9yZGVyLVsjZmY0NTNhXS81MCBiZy1bI2ZmNDUzYV0vMTAgdGV4dC1bI2ZmYjNhZF0iOiJib3JkZXItd2hpdGUvOCBiZy13aGl0ZS9bMC4wNF0gdGV4dC13aGl0ZS81MCI7cmV0dXJuIFEoImRpdiIse3JvbGU6Imxpc3RpdGVtIix0aXRsZTpKLGNsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtWzU2cHhfMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTEuNSBweS0xLjUgdGV4dC1bMTJweF0gbGVhZGluZy10aWdodCBob3ZlcjpiZy13aGl0ZS9bMC4wNV0iLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46S30pLFEoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjpafSksUSgic3BhbiIse2NsYXNzTmFtZToibXQtMC41IGJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpKfSldfSksJC5zdGF0dXM/USgic3BhbiIse2NsYXNzTmFtZTpgcm91bmRlZC1tZCBib3JkZXIgcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyAke1h9YCxjaGlsZHJlbjokLnN0YXR1c30pOm51bGxdfSl9ZnVuY3Rpb24gbUooJCl7bGV0IEs9bmV3IERhdGUoJCk7aWYoTnVtYmVyLmlzTmFOKEsuZ2V0VGltZSgpKSlyZXR1cm4iIjtyZXR1cm4gSy50b0xvY2FsZVRpbWVTdHJpbmcoW10se2hvdXI6IjItZGlnaXQiLG1pbnV0ZToiMi1kaWdpdCIsc2Vjb25kOiIyLWRpZ2l0In0pfXZhciBaMj1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLHBKPTI1MCx1Sj17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sdDg9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LGxKPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiByMCh7aWNvbjokLGxhYmVsOkssY2hpbGRyZW46Sn0pe3JldHVybiBRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpLLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaXplLVsxOHB4XSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSIsY2hpbGRyZW46JH0pLEtdfSksUSgic3BhbiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGp1c3RpZnktZW5kIixjaGlsZHJlbjpKfSldfSl9ZnVuY3Rpb24gZEooe3ZhbHVlOiQsZGlzYWJsZWQ6SyxvbkNoYW5nZTpKfSl7bGV0W1osWF09TShudWxsKSxZPUkobnVsbCkscT1JKG51bGwpLFY9RCgoQyk9PntpZihxLmN1cnJlbnQ9PT1DKXJldHVybjtxLmN1cnJlbnQ9QyxKKEMpfSxbSl0pLE49RCgoQyk9PntpZihYKEMpLFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KTtZLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+VihDKSxwSil9LFtWXSksQj1EKCgpPT57aWYoWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpLFkuY3VycmVudD1udWxsO1goKEMpPT57aWYoQyE9PW51bGwpVihDKTtyZXR1cm4gbnVsbH0pLHEuY3VycmVudD1udWxsfSxbVl0pLHo9WjIubGVuZ3RoLTE7cmV0dXJuIFEoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggdy1bMTIwcHhdIG1pbi13LTAgZmxleC1jb2wiLGNoaWxkcmVuOltRKGIyLHsiYXJpYS1sYWJlbCI6IlRleHQgU2l6ZSIsbWluOjAsbWF4Onosc3RlcDoxLHZhbHVlOlo/PyQsZGlzYWJsZWQ6SyxvbkNoYW5nZTooQyk9Pk4oTnVtYmVyKEMudGFyZ2V0LnZhbHVlKSksb25Qb2ludGVyVXA6QixvbktleVVwOkIsb25CbHVyOkJ9KSxRKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgbXQtWzNweF0gZmxleCBqdXN0aWZ5LWJldHdlZW4gcHgtWzUuNXB4XSIsY2hpbGRyZW46WjIubWFwKChDKT0+USgic3BhbiIse2NsYXNzTmFtZToic2l6ZS1bMnB4XSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvNDAifSxDKSl9KV19KX1mdW5jdGlvbiBYMih7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6SixkaXNhYmxlZDpaLG9uQ2hhbmdlOlh9KXtyZXR1cm4gUShpMix7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6SixkaXNhYmxlZDpaLG9uQ2hhbmdlOlgsY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtd2hpdGUvNDAifSl9dmFyIFEyPXthcHBlYXJhbmNlOlEoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KSxRKCJwYXRoIix7ZDoiTTE0LjgzNyAxNi4zODVhNiA2IDAgMSAxLTcuMjIzLTcuMjIyYy42MjQtLjE0Ny45Ny42Ni43MTUgMS4yNDhhNCA0IDAgMCAwIDUuMjYgNS4yNTljLjU4OS0uMjU1IDEuMzk2LjA5IDEuMjQ4LjcxNSJ9KSxRKCJwYXRoIix7ZDoiTTE2IDEyYTQgNCAwIDAgMC00LTQifSksUSgicGF0aCIse2Q6Im0xOSA1LTEuMjU2IDEuMjU2In0pLFEoInBhdGgiLHtkOiJNMjAgMTJoMiJ9KV19KSxnbGFzczpRKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyMjAgMjIwIixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46W1EoInBhdGgiLHtkOiJNMTUyIDE4M1YxOTVIMTAwVjE4M0gxNTJaTTE5NiAxMzlWMTI2QzE5NiAxMDEuNjk5IDE3Ni4zMDEgODIgMTUyIDgySDEwMEM3NS42OTk1IDgyIDU2IDEwMS42OTkgNTYgMTI2VjEzOUM1NiAxNjMuMzAxIDc1LjY5OTUgMTgzIDEwMCAxODNWMTk1TDk5LjI3NjQgMTk0Ljk5NUM2OC45MjI4IDE5NC42MTEgNDQuMzg5MyAxNzAuMDc3IDQ0LjAwNDkgMTM5LjcyNEw0NCAxMzlWMTI2QzQ0IDk1LjA3MjEgNjkuMDcyMSA3MCAxMDAgNzBIMTUyQzE4Mi45MjggNzAgMjA4IDk1LjA3MjEgMjA4IDEyNlYxMzlMMjA3Ljk5NSAxMzkuNzI0QzIwNy42MTEgMTcwLjA3NyAxODMuMDc3IDE5NC42MTEgMTUyLjcyNCAxOTQuOTk1TDE1MiAxOTVWMTgzQzE3Ni4zMDEgMTgzIDE5NiAxNjMuMzAxIDE5NiAxMzlaIn0pLFEoInBhdGgiLHtkOiJNMTM2IDI1QzE0Ny4wNDYgMjUgMTU2IDMzLjk1NDMgMTU2IDQ1VjcwSDE0M1Y0NUMxNDMgNDEuMTM0IDEzOS44NjYgMzggMTM2IDM4SDQxQzM3LjEzNCAzOCAzNCA0MS4xMzQgMzQgNDVWMTQwQzM0IDE0My44NjYgMzcuMTM0IDE0NyA0MSAxNDdINDQuODYwNEM0NS42NDg3IDE1MS41MzYgNDYuOTYzNCAxNTUuODkxIDQ4Ljc0MDIgMTYwSDQxTDQwLjQ4MzQgMTU5Ljk5M0MyOS44NDgxIDE1OS43MjQgMjEuMjc2NSAxNTEuMTUyIDIxLjAwNjggMTQwLjUxN0wyMSAxNDBWNDVDMjEgMzMuOTU0MyAyOS45NTQzIDI1IDQxIDI1SDEzNloifSksUSgicGF0aCIse2Q6Ik0xNTYuMTk5IDE0MEMxNTYuMTk5IDE1MC44NzMgMTQ3LjUyMyAxNTkuNzE5IDEzNi43MTYgMTU5Ljk5M0wxMzYuMTk5IDE2MEg4MC45MTdDNzcuOTQ2MSAxNjAgNzYuMTYzOSAxNjMuMyA3Ny43OTMgMTY1Ljc4NEM3OS4yNDUxIDE2Ny45OTkgNzYuMTY0NyAxNzAuMzUzIDc0LjQwOTQgMTY4LjM3TDczLjYwNTkgMTY3LjQ2MkM2OS4zNDk3IDE2Mi42NTQgNjcgMTU2LjQ1NSA2NyAxNTAuMDM0QzY3IDE0OC4zNTggNjguMzU4MyAxNDcgNzAuMDMzOSAxNDdIMTM2LjE5OUMxNDAuMDY1IDE0NyAxNDMuMTk5IDE0My44NjYgMTQzLjE5OSAxNDBWOTYuOTk1NUMxNDMuMTk5IDkzLjk4MjIgMTQxLjM1NCA5MS4yNzYzIDEzOC41NDkgOTAuMTc2MUMxMzcuMzg5IDg5LjcyMTUgMTM3LjcxNSA4OCAxMzguOTYgODhMMTQzLjE5OSA4OEMxNTAuMzc5IDg4IDE1Ni4xOTkgOTMuODIwMyAxNTYuMTk5IDEwMVYxNDBaIn0pXX0pLGZpbHRlcjpRKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbUSgicGF0aCIse2Q6Ik0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIn0pLFEoInBhdGgiLHtkOiJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3In0pLFEoInBhdGgiLHtkOiJNIDcgMTdoLjAxIn0pLFEoInBhdGgiLHtkOiJtMTEgOCAyLjMtMi4zYTIuNCAyLjQgMCAwIDEgMy40MDQuMDA0TDE4LjYgNy42YTIuNCAyLjQgMCAwIDEgLjAyNiAzLjQzNEw5LjkgMTkuOCJ9KV19KSx0ZXh0U2l6ZTpRKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA1MiAzNCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOlEoInBhdGgiLHtkOiJNMzkuNzI2NiAzMy4wMjM0QzM4LjE0ODQgMzMuMDIzNCAzNi43NSAzMi43MjY2IDM1LjUzMTIgMzIuMTMyOEMzNC4zMTI1IDMxLjUzOTEgMzMuMzU5NCAzMC43MTA5IDMyLjY3MTkgMjkuNjQ4NEMzMiAyOC41NzAzIDMxLjY2NDEgMjcuMzEyNSAzMS42NjQxIDI1Ljg3NUMzMS42NjQxIDIzLjc4MTIgMzIuNDI5NyAyMi4xMDk0IDMzLjk2MDkgMjAuODU5NEMzNS41MDc4IDE5LjYwOTQgMzcuNzEwOSAxOC45MDYyIDQwLjU3MDMgMTguNzVMNDcuNjAxNiAxOC4zNTE2VjE2LjVDNDcuNjAxNiAxNS4wMTU2IDQ3LjEzMjggMTMuODM1OSA0Ni4xOTUzIDEyLjk2MDlDNDUuMjU3OCAxMi4wODU5IDQzLjk1MzEgMTEuNjQ4NCA0Mi4yODEyIDExLjY0ODRDNDAuOTA2MiAxMS42NDg0IDM5Ljc1IDExLjk0NTMgMzguODEyNSAxMi41MzkxQzM3Ljg3NSAxMy4xMzI4IDM3LjA5MzggMTQuMDQ2OSAzNi40Njg4IDE1LjI4MTJDMzYuMjY1NiAxNS42MDk0IDM2LjAxNTYgMTUuODUxNiAzNS43MTg4IDE2LjAwNzhDMzUuNDIxOSAxNi4xNjQxIDM1LjA3ODEgMTYuMjQyMiAzNC42ODc1IDE2LjI0MjJDMzQuMTU2MiAxNi4yNDIyIDMzLjcxMDkgMTYuMDc4MSAzMy4zNTE2IDE1Ljc1QzMzLjAwNzggMTUuNDIxOSAzMi44MzU5IDE0Ljk5MjIgMzIuODM1OSAxNC40NjA5QzMyLjgzNTkgMTQuMjI2NiAzMi44NjcyIDEzLjk3NjYgMzIuOTI5NyAxMy43MTA5QzMzLjAwNzggMTMuNDQ1MyAzMy4xMDk0IDEzLjE3OTcgMzMuMjM0NCAxMi45MTQxQzMzLjg3NSAxMS40NjA5IDM1LjAxNTYgMTAuMzA0NyAzNi42NTYyIDkuNDQ1MzFDMzguMzEyNSA4LjU4NTk0IDQwLjIyNjYgOC4xNTYyNSA0Mi4zOTg0IDguMTU2MjVDNDQuMzIwMyA4LjE1NjI1IDQ1Ljk4NDQgOC40OTIxOSA0Ny4zOTA2IDkuMTY0MDZDNDguODEyNSA5LjgyMDMxIDQ5Ljg5ODQgMTAuNzUgNTAuNjQ4NCAxMS45NTMxQzUxLjQxNDEgMTMuMTU2MiA1MS43OTY5IDE0LjU3MDMgNTEuNzk2OSAxNi4xOTUzVjMwLjkxNDFDNTEuNzk2OSAzMS41ODU5IDUxLjYwOTQgMzIuMTA5NCA1MS4yMzQ0IDMyLjQ4NDRDNTAuODU5NCAzMi44NTk0IDUwLjM2NzIgMzMuMDQ2OSA0OS43NTc4IDMzLjA0NjlDNDkuMTY0MSAzMy4wNDY5IDQ4LjY3OTcgMzIuODY3MiA0OC4zMDQ3IDMyLjUwNzhDNDcuOTI5NyAzMi4xNDg0IDQ3LjczNDQgMzEuNjY0MSA0Ny43MTg4IDMxLjA1NDdWMjguMzU5NEg0Ny42NzE5QzQ2Ljk4NDQgMjkuNzgxMiA0NS45MDYyIDMwLjkxNDEgNDQuNDM3NSAzMS43NTc4QzQyLjk4NDQgMzIuNjAxNiA0MS40MTQxIDMzLjAyMzQgMzkuNzI2NiAzMy4wMjM0Wk00MC44MDQ3IDI5LjY3MTlDNDIuMDcwMyAyOS42NzE5IDQzLjIxMDkgMjkuNDA2MiA0NC4yMjY2IDI4Ljg3NUM0NS4yNTc4IDI4LjM0MzggNDYuMDc4MSAyNy42MTcyIDQ2LjY4NzUgMjYuNjk1M0M0Ny4yOTY5IDI1Ljc3MzQgNDcuNjAxNiAyNC43NSA0Ny42MDE2IDIzLjYyNVYyMS4zMjgxTDQxLjEzMjggMjEuNzVDMzkuNDQ1MyAyMS44NTk0IDM4LjE2NDEgMjIuMjczNCAzNy4yODkxIDIyLjk5MjJDMzYuNDE0MSAyMy42OTUzIDM1Ljk3NjYgMjQuNjA5NCAzNS45NzY2IDI1LjczNDRDMzUuOTc2NiAyNi45MjE5IDM2LjQyMTkgMjcuODc1IDM3LjMxMjUgMjguNTkzOEMzOC4yMDMxIDI5LjMxMjUgMzkuMzY3MiAyOS42NzE5IDQwLjgwNDcgMjkuNjcxOVpNMi4xNzk2OSAzMy4wMjM0QzEuNTA3ODEgMzMuMDIzNCAwLjk3NjU2MiAzMi44MzU5IDAuNTg1OTM4IDMyLjQ2MDlDMC4xOTUzMTIgMzIuMDg1OSAwIDMxLjU3ODEgMCAzMC45Mzc1QzAgMzAuNTMxMiAwLjA4NTkzNzUgMzAuMDcwMyAwLjI1NzgxMiAyOS41NTQ3TDEwLjQwNjIgMi40MTQwNkMxMC45ODQ0IDAuODA0Njg4IDEyLjEwMTYgMCAxMy43NTc4IDBDMTQuNjE3MiAwIDE1LjMyODEgMC4yMDMxMjUgMTUuODkwNiAwLjYwOTM3NUMxNi40NTMxIDEuMDE1NjIgMTYuODc1IDEuNjI1IDE3LjE1NjIgMi40Mzc1TDI3LjI1NzggMjkuNDg0NEMyNy40NDUzIDMwIDI3LjUzOTEgMzAuNDY4OCAyNy41MzkxIDMwLjg5MDZDMjcuNTM5MSAzMS41NDY5IDI3LjMzNTkgMzIuMDcwMyAyNi45Mjk3IDMyLjQ2MDlDMjYuNTIzNCAzMi44MzU5IDI1Ljk3NjYgMzMuMDIzNCAyNS4yODkxIDMzLjAyMzRDMjQuNjMyOCAzMy4wMjM0IDI0LjEwOTQgMzIuODc1IDIzLjcxODggMzIuNTc4MUMyMy4zNDM4IDMyLjI4MTIgMjMuMDM5MSAzMS43ODkxIDIyLjgwNDcgMzEuMTAxNkwxMy44MjgxIDUuMzQzNzVIMTMuNjY0MUw0LjY2NDA2IDMxLjEwMTZDNC40Mjk2OSAzMS43ODkxIDQuMTI1IDMyLjI4MTIgMy43NSAzMi41NzgxQzMuMzc1IDMyLjg3NSAyLjg1MTU2IDMzLjAyMzQgMi4xNzk2OSAzMy4wMjM0Wk02LjY3OTY5IDIzLjc0MjJDNi4xNDg0NCAyMy43NDIyIDUuNzAzMTIgMjMuNTYyNSA1LjM0Mzc1IDIzLjIwMzFDNC45ODQzOCAyMi44NDM4IDQuODA0NjkgMjIuMzk4NCA0LjgwNDY5IDIxLjg2NzJDNC44MDQ2OSAyMS4zNTE2IDQuOTg0MzggMjAuOTE0MSA1LjM0Mzc1IDIwLjU1NDdDNS43MDMxMiAyMC4xOTUzIDYuMTQ4NDQgMjAuMDE1NiA2LjY3OTY5IDIwLjAxNTZIMjAuODU5NEMyMS4zNzUgMjAuMDE1NiAyMS44MTI1IDIwLjE5NTMgMjIuMTcxOSAyMC41NTQ3QzIyLjUzMTIgMjAuOTE0MSAyMi43MTA5IDIxLjM1MTYgMjIuNzEwOSAyMS44NjcyQzIyLjcxMDkgMjIuMzk4NCAyMi41MzEyIDIyLjg0MzggMjIuMTcxOSAyMy4yMDMxQzIxLjgxMjUgMjMuNTYyNSAyMS4zNzUgMjMuNzQyMiAyMC44NTk0IDIzLjc0MjJINi42Nzk2OVoifSl9KSxtb3Rpb246USgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLGNoaWxkcmVuOltRKCJjaXJjbGUiLHtjeDoiMTQiLGN5OiIxMiIscjoiNiJ9KSxRKCJwYXRoIix7ZDoiTTMgOGg0TTIgMTJoNE0zIDE2aDQifSldfSksY29udHJhc3Q6USgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxRKCJwYXRoIix7ZDoiTTEyIDE4YTYgNiAwIDAgMCAwLTEydjEyeiJ9KV19KSxib3JkZXJzOlEoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIn0pLFEoInBhdGgiLHtkOiJNOSAyMWgxIn0pLFEoInBhdGgiLHtkOiJNMTQgMjFoMSJ9KV19KSx0cmFuc3BhcmVuY3k6USgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNjMgNDYiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpRKCJwYXRoIix7ZDoiTTIyLjczNDQgNC4xNzE4OEMyMi4xODc1IDQuMTcxODggMjEuNzE4OCAzLjk3NjU2IDIxLjMyODEgMy41ODU5NEMyMC45Mzc1IDMuMTk1MzEgMjAuNzQyMiAyLjcxODc1IDIwLjc0MjIgMi4xNTYyNUMyMC43NDIyIDEuNjA5MzggMjAuOTM3NSAxLjE0MDYyIDIxLjMyODEgMC43NUMyMS43MTg4IDAuMzU5Mzc1IDIyLjE4NzUgMC4xNjQwNjIgMjIuNzM0NCAwLjE2NDA2MkMyMy4yODEyIDAuMTY0MDYyIDIzLjc1IDAuMzU5Mzc1IDI0LjE0MDYgMC43NUMyNC41MzEyIDEuMTQwNjIgMjQuNzI2NiAxLjYwOTM4IDI0LjcyNjYgMi4xNTYyNUMyNC43MjY2IDIuNzE4NzUgMjQuNTMxMiAzLjE5NTMxIDI0LjE0MDYgMy41ODU5NEMyMy43NSAzLjk3NjU2IDIzLjI4MTIgNC4xNzE4OCAyMi43MzQ0IDQuMTcxODhaTTI5LjEwOTQgNS4yMDMxMkMyOC41NDY5IDUuMjAzMTIgMjguMDcwMyA1LjAwNzgxIDI3LjY3OTcgNC42MTcxOUMyNy4yODkxIDQuMjI2NTYgMjcuMDkzOCAzLjc1NzgxIDI3LjA5MzggMy4yMTA5NEMyNy4wOTM4IDIuNjY0MDYgMjcuMjg5MSAyLjE5NTMxIDI3LjY3OTcgMS44MDQ2OUMyOC4wNzAzIDEuMzk4NDQgMjguNTQ2OSAxLjE5NTMxIDI5LjEwOTQgMS4xOTUzMUMyOS42NTYyIDEuMTk1MzEgMzAuMTI1IDEuMzk4NDQgMzAuNTE1NiAxLjgwNDY5QzMwLjkwNjIgMi4xOTUzMSAzMS4xMDE2IDIuNjY0MDYgMzEuMTAxNiAzLjIxMDk0QzMxLjEwMTYgMy43NTc4MSAzMC45MDYyIDQuMjI2NTYgMzAuNTE1NiA0LjYxNzE5QzMwLjEyNSA1LjAwNzgxIDI5LjY1NjIgNS4yMDMxMiAyOS4xMDk0IDUuMjAzMTJaTTM0Ljg3NSA4LjEzMjgxQzM0LjMyODEgOC4xMzI4MSAzMy44NTE2IDcuOTM3NSAzMy40NDUzIDcuNTQ2ODhDMzMuMDU0NyA3LjE0MDYyIDMyLjg1OTQgNi42NzE4OCAzMi44NTk0IDYuMTQwNjJDMzIuODU5NCA1LjU3ODEyIDMzLjA1NDcgNS4xMDE1NiAzMy40NDUzIDQuNzEwOTRDMzMuODUxNiA0LjMyMDMxIDM0LjMyODEgNC4xMjUgMzQuODc1IDQuMTI1QzM1LjQyMTkgNC4xMjUgMzUuODkwNiA0LjMyMDMxIDM2LjI4MTIgNC43MTA5NEMzNi42ODc1IDUuMTAxNTYgMzYuODkwNiA1LjU3ODEyIDM2Ljg5MDYgNi4xNDA2MkMzNi44OTA2IDYuNjcxODggMzYuNjg3NSA3LjE0MDYyIDM2LjI4MTIgNy41NDY4OEMzNS44OTA2IDcuOTM3NSAzNS40MjE5IDguMTMyODEgMzQuODc1IDguMTMyODFaTTM5LjQ0NTMgMTIuNjc5N0MzOC44OTg0IDEyLjY3OTcgMzguNDIxOSAxMi40ODQ0IDM4LjAxNTYgMTIuMDkzOEMzNy42MjUgMTEuNzAzMSAzNy40Mjk3IDExLjIzNDQgMzcuNDI5NyAxMC42ODc1QzM3LjQyOTcgMTAuMTU2MiAzNy42MjUgOS42OTUzMSAzOC4wMTU2IDkuMzA0NjlDMzguNDIxOSA4Ljg5ODQ0IDM4Ljg5ODQgOC42OTUzMSAzOS40NDUzIDguNjk1MzFDMzkuOTkyMiA4LjY5NTMxIDQwLjQ2MDkgOC44OTg0NCA0MC44NTE2IDkuMzA0NjlDNDEuMjQyMiA5LjY5NTMxIDQxLjQzNzUgMTAuMTU2MiA0MS40Mzc1IDEwLjY4NzVDNDEuNDM3NSAxMS4yMzQ0IDQxLjI0MjIgMTEuNzAzMSA0MC44NTE2IDEyLjA5MzhDNDAuNDYwOSAxMi40ODQ0IDM5Ljk5MjIgMTIuNjc5NyAzOS40NDUzIDEyLjY3OTdaTTQyLjM3NSAxOC4zOTg0QzQxLjgxMjUgMTguMzk4NCA0MS4zMjgxIDE4LjIwMzEgNDAuOTIxOSAxNy44MTI1QzQwLjUzMTIgMTcuNDIxOSA0MC4zMzU5IDE2Ljk1MzEgNDAuMzM1OSAxNi40MDYyQzQwLjMzNTkgMTUuODQzOCA0MC41MzEyIDE1LjM2NzIgNDAuOTIxOSAxNC45NzY2QzQxLjMyODEgMTQuNTg1OSA0MS44MTI1IDE0LjM5MDYgNDIuMzc1IDE0LjM5MDZDNDIuOTA2MiAxNC4zOTA2IDQzLjM2NzIgMTQuNTg1OSA0My43NTc4IDE0Ljk3NjZDNDQuMTY0MSAxNS4zNjcyIDQ0LjM2NzIgMTUuODQzOCA0NC4zNjcyIDE2LjQwNjJDNDQuMzY3MiAxNi45NTMxIDQ0LjE2NDEgMTcuNDIxOSA0My43NTc4IDE3LjgxMjVDNDMuMzY3MiAxOC4yMDMxIDQyLjkwNjIgMTguMzk4NCA0Mi4zNzUgMTguMzk4NFpNNDMuNDUzMSAyNC43OTY5QzQyLjkwNjIgMjQuNzk2OSA0Mi40Mzc1IDI0LjYwMTYgNDIuMDQ2OSAyNC4yMTA5QzQxLjY1NjIgMjMuODIwMyA0MS40NjA5IDIzLjM0MzggNDEuNDYwOSAyMi43ODEyQzQxLjQ2MDkgMjIuMjM0NCA0MS42NTYyIDIxLjc2NTYgNDIuMDQ2OSAyMS4zNzVDNDIuNDM3NSAyMC45ODQ0IDQyLjkwNjIgMjAuNzg5MSA0My40NTMxIDIwLjc4OTFDNDQgMjAuNzg5MSA0NC40Njg4IDIwLjk4NDQgNDQuODU5NCAyMS4zNzVDNDUuMjY1NiAyMS43NjU2IDQ1LjQ2ODggMjIuMjM0NCA0NS40Njg4IDIyLjc4MTJDNDUuNDY4OCAyMy4zNDM4IDQ1LjI2NTYgMjMuODIwMyA0NC44NTk0IDI0LjIxMDlDNDQuNDY4OCAyNC42MDE2IDQ0IDI0Ljc5NjkgNDMuNDUzMSAyNC43OTY5Wk00Mi4zNzUgMzEuMTcxOUM0MS44MTI1IDMxLjE3MTkgNDEuMzI4MSAzMC45NzY2IDQwLjkyMTkgMzAuNTg1OUM0MC41MzEyIDMwLjE5NTMgNDAuMzM1OSAyOS43MjY2IDQwLjMzNTkgMjkuMTc5N0M0MC4zMzU5IDI4LjYxNzIgNDAuNTMxMiAyOC4xNDA2IDQwLjkyMTkgMjcuNzVDNDEuMzI4MSAyNy4zNTk0IDQxLjgxMjUgMjcuMTY0MSA0Mi4zNzUgMjcuMTY0MUM0Mi45MDYyIDI3LjE2NDEgNDMuMzY3MiAyNy4zNTk0IDQzLjc1NzggMjcuNzVDNDQuMTY0MSAyOC4xNDA2IDQ0LjM2NzIgMjguNjE3MiA0NC4zNjcyIDI5LjE3OTdDNDQuMzY3MiAyOS43MjY2IDQ0LjE2NDEgMzAuMTk1MyA0My43NTc4IDMwLjU4NTlDNDMuMzY3MiAzMC45NzY2IDQyLjkwNjIgMzEuMTcxOSA0Mi4zNzUgMzEuMTcxOVpNMzkuNDQ1MyAzNi44OTA2QzM4Ljg5ODQgMzYuODkwNiAzOC40MjE5IDM2LjY5NTMgMzguMDE1NiAzNi4zMDQ3QzM3LjYyNSAzNS44OTg0IDM3LjQyOTcgMzUuNDIxOSAzNy40Mjk3IDM0Ljg3NUMzNy40Mjk3IDM0LjMyODEgMzcuNjI1IDMzLjg1OTQgMzguMDE1NiAzMy40Njg4QzM4LjQyMTkgMzMuMDYyNSAzOC44OTg0IDMyLjg1OTQgMzkuNDQ1MyAzMi44NTk0QzM5Ljk5MjIgMzIuODU5NCA0MC40NjA5IDMzLjA2MjUgNDAuODUxNiAzMy40Njg4QzQxLjI0MjIgMzMuODU5NCA0MS40Mzc1IDM0LjMyODEgNDEuNDM3NSAzNC44NzVDNDEuNDM3NSAzNS40MjE5IDQxLjI0MjIgMzUuODk4NCA0MC44NTE2IDM2LjMwNDdDNDAuNDYwOSAzNi42OTUzIDM5Ljk5MjIgMzYuODkwNiAzOS40NDUzIDM2Ljg5MDZaTTM0Ljg3NSA0MS40Mzc1QzM0LjMyODEgNDEuNDM3NSAzMy44NTE2IDQxLjI0MjIgMzMuNDQ1MyA0MC44NTE2QzMzLjA1NDcgNDAuNDYwOSAzMi44NTk0IDM5Ljk5MjIgMzIuODU5NCAzOS40NDUzQzMyLjg1OTQgMzguODk4NCAzMy4wNTQ3IDM4LjQyOTcgMzMuNDQ1MyAzOC4wMzkxQzMzLjg1MTYgMzcuNjMyOCAzNC4zMjgxIDM3LjQyOTcgMzQuODc1IDM3LjQyOTdDMzUuNDIxOSAzNy40Mjk3IDM1Ljg5MDYgMzcuNjMyOCAzNi4yODEyIDM4LjAzOTFDMzYuNjg3NSAzOC40Mjk3IDM2Ljg5MDYgMzguODk4NCAzNi44OTA2IDM5LjQ0NTNDMzYuODkwNiAzOS45OTIyIDM2LjY4NzUgNDAuNDYwOSAzNi4yODEyIDQwLjg1MTZDMzUuODkwNiA0MS4yNDIyIDM1LjQyMTkgNDEuNDM3NSAzNC44NzUgNDEuNDM3NVpNMjkuMTA5NCA0NC4zNjcyQzI4LjU0NjkgNDQuMzY3MiAyOC4wNzAzIDQ0LjE2NDEgMjcuNjc5NyA0My43NTc4QzI3LjI4OTEgNDMuMzY3MiAyNy4wOTM4IDQyLjg5ODQgMjcuMDkzOCA0Mi4zNTE2QzI3LjA5MzggNDEuODA0NyAyNy4yODkxIDQxLjMzNTkgMjcuNjc5NyA0MC45NDUzQzI4LjA3MDMgNDAuNTU0NyAyOC41NDY5IDQwLjM1OTQgMjkuMTA5NCA0MC4zNTk0QzI5LjY1NjIgNDAuMzU5NCAzMC4xMjUgNDAuNTU0NyAzMC41MTU2IDQwLjk0NTNDMzAuOTA2MiA0MS4zMzU5IDMxLjEwMTYgNDEuODA0NyAzMS4xMDE2IDQyLjM1MTZDMzEuMTAxNiA0Mi44OTg0IDMwLjkwNjIgNDMuMzY3MiAzMC41MTU2IDQzLjc1NzhDMzAuMTI1IDQ0LjE2NDEgMjkuNjU2MiA0NC4zNjcyIDI5LjEwOTQgNDQuMzY3MlpNMjIuNzM0NCA0NS4zOTg0QzIyLjE4NzUgNDUuMzk4NCAyMS43MTg4IDQ1LjIwMzEgMjEuMzI4MSA0NC44MTI1QzIwLjkzNzUgNDQuNDIxOSAyMC43NDIyIDQzLjk1MzEgMjAuNzQyMiA0My40MDYyQzIwLjc0MjIgNDIuODQzOCAyMC45Mzc1IDQyLjM2NzIgMjEuMzI4MSA0MS45NzY2QzIxLjcxODggNDEuNTg1OSAyMi4xODc1IDQxLjM5MDYgMjIuNzM0NCA0MS4zOTA2QzIzLjI4MTIgNDEuMzkwNiAyMy43NSA0MS41ODU5IDI0LjE0MDYgNDEuOTc2NkMyNC41MzEyIDQyLjM2NzIgMjQuNzI2NiA0Mi44NDM4IDI0LjcyNjYgNDMuNDA2MkMyNC43MjY2IDQzLjk1MzEgMjQuNTMxMiA0NC40MjE5IDI0LjE0MDYgNDQuODEyNUMyMy43NSA0NS4yMDMxIDIzLjI4MTIgNDUuMzk4NCAyMi43MzQ0IDQ1LjM5ODRaTTE2LjM1OTQgNDQuMzY3MkMxNS44MTI1IDQ0LjM2NzIgMTUuMzQzOCA0NC4xNjQxIDE0Ljk1MzEgNDMuNzU3OEMxNC41NjI1IDQzLjM2NzIgMTQuMzY3MiA0Mi44OTg0IDE0LjM2NzIgNDIuMzUxNkMxNC4zNjcyIDQxLjgwNDcgMTQuNTYyNSA0MS4zMzU5IDE0Ljk1MzEgNDAuOTQ1M0MxNS4zNDM4IDQwLjU1NDcgMTUuODEyNSA0MC4zNTk0IDE2LjM1OTQgNDAuMzU5NEMxNi45MjE5IDQwLjM1OTQgMTcuMzk4NCA0MC41NTQ3IDE3Ljc4OTEgNDAuOTQ1M0MxOC4xNzk3IDQxLjMzNTkgMTguMzc1IDQxLjgwNDcgMTguMzc1IDQyLjM1MTZDMTguMzc1IDQyLjg5ODQgMTguMTc5NyA0My4zNjcyIDE3Ljc4OTEgNDMuNzU3OEMxNy4zOTg0IDQ0LjE2NDEgMTYuOTIxOSA0NC4zNjcyIDE2LjM1OTQgNDQuMzY3MlpNMTAuNTcwMyA0MS40Mzc1QzEwLjAzOTEgNDEuNDM3NSA5LjU3MDMxIDQxLjI0MjIgOS4xNjQwNiA0MC44NTE2QzguNzczNDQgNDAuNDYwOSA4LjU3ODEyIDM5Ljk5MjIgOC41NzgxMiAzOS40NDUzQzguNTc4MTIgMzguODk4NCA4Ljc3MzQ0IDM4LjQyOTcgOS4xNjQwNiAzOC4wMzkxQzkuNTcwMzEgMzcuNjMyOCAxMC4wMzkxIDM3LjQyOTcgMTAuNTcwMyAzNy40Mjk3QzExLjEzMjggMzcuNDI5NyAxMS42MDk0IDM3LjYzMjggMTIgMzguMDM5MUMxMi4zOTA2IDM4LjQyOTcgMTIuNTg1OSAzOC44OTg0IDEyLjU4NTkgMzkuNDQ1M0MxMi41ODU5IDM5Ljk5MjIgMTIuMzkwNiA0MC40NjA5IDEyIDQwLjg1MTZDMTEuNjA5NCA0MS4yNDIyIDExLjEzMjggNDEuNDM3NSAxMC41NzAzIDQxLjQzNzVaTTYuMDIzNDQgMzYuODkwNkM1LjQ3NjU2IDM2Ljg5MDYgNSAzNi42OTUzIDQuNTkzNzUgMzYuMzA0N0M0LjIwMzEyIDM1Ljg5ODQgNC4wMDc4MSAzNS40MjE5IDQuMDA3ODEgMzQuODc1QzQuMDA3ODEgMzQuMzI4MSA0LjIwMzEyIDMzLjg1OTQgNC41OTM3NSAzMy40Njg4QzUgMzMuMDYyNSA1LjQ3NjU2IDMyLjg1OTQgNi4wMjM0NCAzMi44NTk0QzYuNTcwMzEgMzIuODU5NCA3LjAzOTA2IDMzLjA2MjUgNy40Mjk2OSAzMy40Njg4QzcuODIwMzEgMzMuODU5NCA4LjAxNTYyIDM0LjMyODEgOC4wMTU2MiAzNC44NzVDOC4wMTU2MiAzNS40MjE5IDcuODIwMzEgMzUuODk4NCA3LjQyOTY5IDM2LjMwNDdDNy4wMzkwNiAzNi42OTUzIDYuNTcwMzEgMzYuODkwNiA2LjAyMzQ0IDM2Ljg5MDZaTTMuMDkzNzUgMzEuMTcxOUMyLjU2MjUgMzEuMTcxOSAyLjA5Mzc1IDMwLjk3NjYgMS42ODc1IDMwLjU4NTlDMS4yOTY4OCAzMC4xOTUzIDEuMTAxNTYgMjkuNzI2NiAxLjEwMTU2IDI5LjE3OTdDMS4xMDE1NiAyOC42MTcyIDEuMjk2ODggMjguMTQwNiAxLjY4NzUgMjcuNzVDMi4wOTM3NSAyNy4zNTk0IDIuNTYyNSAyNy4xNjQxIDMuMDkzNzUgMjcuMTY0MUMzLjY1NjI1IDI3LjE2NDEgNC4xMzI4MSAyNy4zNTk0IDQuNTIzNDQgMjcuNzVDNC45MTQwNiAyOC4xNDA2IDUuMTA5MzggMjguNjE3MiA1LjEwOTM4IDI5LjE3OTdDNS4xMDkzOCAyOS43MjY2IDQuOTE0MDYgMzAuMTk1MyA0LjUyMzQ0IDMwLjU4NTlDNC4xMzI4MSAzMC45NzY2IDMuNjU2MjUgMzEuMTcxOSAzLjA5Mzc1IDMxLjE3MTlaTTIuMDE1NjIgMjQuNzk2OUMxLjQ1MzEyIDI0Ljc5NjkgMC45NzY1NjIgMjQuNjAxNiAwLjU4NTkzOCAyNC4yMTA5QzAuMTk1MzEyIDIzLjgyMDMgMCAyMy4zNDM4IDAgMjIuNzgxMkMwIDIyLjIzNDQgMC4xOTUzMTIgMjEuNzY1NiAwLjU4NTkzOCAyMS4zNzVDMC45NzY1NjIgMjAuOTg0NCAxLjQ1MzEyIDIwLjc4OTEgMi4wMTU2MiAyMC43ODkxQzIuNTYyNSAyMC43ODkxIDMuMDMxMjUgMjAuOTg0NCAzLjQyMTg4IDIxLjM3NUMzLjgxMjUgMjEuNzY1NiA0LjAwNzgxIDIyLjIzNDQgNC4wMDc4MSAyMi43ODEyQzQuMDA3ODEgMjMuMzQzOCAzLjgxMjUgMjMuODIwMyAzLjQyMTg4IDI0LjIxMDlDMy4wMzEyNSAyNC42MDE2IDIuNTYyNSAyNC43OTY5IDIuMDE1NjIgMjQuNzk2OVpNMy4wOTM3NSAxOC4zOTg0QzIuNTYyNSAxOC4zOTg0IDIuMDkzNzUgMTguMjAzMSAxLjY4NzUgMTcuODEyNUMxLjI5Njg4IDE3LjQyMTkgMS4xMDE1NiAxNi45NTMxIDEuMTAxNTYgMTYuNDA2MkMxLjEwMTU2IDE1Ljg0MzggMS4yOTY4OCAxNS4zNjcyIDEuNjg3NSAxNC45NzY2QzIuMDkzNzUgMTQuNTg1OSAyLjU2MjUgMTQuMzkwNiAzLjA5Mzc1IDE0LjM5MDZDMy42NTYyNSAxNC4zOTA2IDQuMTMyODEgMTQuNTg1OSA0LjUyMzQ0IDE0Ljk3NjZDNC45MTQwNiAxNS4zNjcyIDUuMTA5MzggMTUuODQzOCA1LjEwOTM4IDE2LjQwNjJDNS4xMDkzOCAxNi45NTMxIDQuOTE0MDYgMTcuNDIxOSA0LjUyMzQ0IDE3LjgxMjVDNC4xMzI4MSAxOC4yMDMxIDMuNjU2MjUgMTguMzk4NCAzLjA5Mzc1IDE4LjM5ODRaTTYuMDIzNDQgMTIuNjc5N0M1LjQ3NjU2IDEyLjY3OTcgNSAxMi40ODQ0IDQuNTkzNzUgMTIuMDkzOEM0LjIwMzEyIDExLjcwMzEgNC4wMDc4MSAxMS4yMzQ0IDQuMDA3ODEgMTAuNjg3NUM0LjAwNzgxIDEwLjE1NjIgNC4yMDMxMiA5LjY5NTMxIDQuNTkzNzUgOS4zMDQ2OUM1IDguODk4NDQgNS40NzY1NiA4LjY5NTMxIDYuMDIzNDQgOC42OTUzMUM2LjU3MDMxIDguNjk1MzEgNy4wMzkwNiA4Ljg5ODQ0IDcuNDI5NjkgOS4zMDQ2OUM3LjgyMDMxIDkuNjk1MzEgOC4wMTU2MiAxMC4xNTYyIDguMDE1NjIgMTAuNjg3NUM4LjAxNTYyIDExLjIzNDQgNy44MjAzMSAxMS43MDMxIDcuNDI5NjkgMTIuMDkzOEM3LjAzOTA2IDEyLjQ4NDQgNi41NzAzMSAxMi42Nzk3IDYuMDIzNDQgMTIuNjc5N1pNMTAuNTcwMyA4LjEzMjgxQzEwLjAzOTEgOC4xMzI4MSA5LjU3MDMxIDcuOTM3NSA5LjE2NDA2IDcuNTQ2ODhDOC43NzM0NCA3LjE0MDYyIDguNTc4MTIgNi42NzE4OCA4LjU3ODEyIDYuMTQwNjJDOC41NzgxMiA1LjU3ODEyIDguNzczNDQgNS4xMDE1NiA5LjE2NDA2IDQuNzEwOTRDOS41NzAzMSA0LjMyMDMxIDEwLjAzOTEgNC4xMjUgMTAuNTcwMyA0LjEyNUMxMS4xMzI4IDQuMTI1IDExLjYwOTQgNC4zMjAzMSAxMiA0LjcxMDk0QzEyLjM5MDYgNS4xMDE1NiAxMi41ODU5IDUuNTc4MTIgMTIuNTg1OSA2LjE0MDYyQzEyLjU4NTkgNi42NzE4OCAxMi4zOTA2IDcuMTQwNjIgMTIgNy41NDY4OEMxMS42MDk0IDcuOTM3NSAxMS4xMzI4IDguMTMyODEgMTAuNTcwMyA4LjEzMjgxWk0xNi4zNTk0IDUuMjAzMTJDMTUuODEyNSA1LjIwMzEyIDE1LjM0MzggNS4wMDc4MSAxNC45NTMxIDQuNjE3MTlDMTQuNTYyNSA0LjIyNjU2IDE0LjM2NzIgMy43NTc4MSAxNC4zNjcyIDMuMjEwOTRDMTQuMzY3MiAyLjY2NDA2IDE0LjU2MjUgMi4xOTUzMSAxNC45NTMxIDEuODA0NjlDMTUuMzQzOCAxLjM5ODQ0IDE1LjgxMjUgMS4xOTUzMSAxNi4zNTk0IDEuMTk1MzFDMTYuOTIxOSAxLjE5NTMxIDE3LjM5ODQgMS4zOTg0NCAxNy43ODkxIDEuODA0NjlDMTguMTc5NyAyLjE5NTMxIDE4LjM3NSAyLjY2NDA2IDE4LjM3NSAzLjIxMDk0QzE4LjM3NSAzLjc1NzgxIDE4LjE3OTcgNC4yMjY1NiAxNy43ODkxIDQuNjE3MTlDMTcuMzk4NCA1LjAwNzgxIDE2LjkyMTkgNS4yMDMxMiAxNi4zNTk0IDUuMjAzMTJaTTQwLjEwMTYgNDUuNTYyNUMzNi45NDUzIDQ1LjU2MjUgMzMuOTkyMiA0NC45Njg4IDMxLjI0MjIgNDMuNzgxMkMyOC41MDc4IDQyLjYwOTQgMjYuMDkzOCA0MC45NzY2IDI0IDM4Ljg4MjhDMjEuOTA2MiAzNi43ODkxIDIwLjI2NTYgMzQuMzY3MiAxOS4wNzgxIDMxLjYxNzJDMTcuOTA2MiAyOC44NjcyIDE3LjMyMDMgMjUuOTIxOSAxNy4zMjAzIDIyLjc4MTJDMTcuMzIwMyAxOS42NDA2IDE3LjkwNjIgMTYuNjk1MyAxOS4wNzgxIDEzLjk0NTNDMjAuMjY1NiAxMS4xNzk3IDIxLjkwNjIgOC43NTc4MSAyNCA2LjY3OTY5QzI2LjA5MzggNC41ODU5NCAyOC41MDc4IDIuOTUzMTIgMzEuMjQyMiAxLjc4MTI1QzMzLjk5MjIgMC41OTM3NSAzNi45NDUzIDAgNDAuMTAxNiAwQzQzLjI0MjIgMCA0Ni4xODc1IDAuNTkzNzUgNDguOTM3NSAxLjc4MTI1QzUxLjY4NzUgMi45NTMxMiA1NC4xMDE2IDQuNTg1OTQgNTYuMTc5NyA2LjY3OTY5QzU4LjI3MzQgOC43NTc4MSA1OS45MDYyIDExLjE3OTcgNjEuMDc4MSAxMy45NDUzQzYyLjI2NTYgMTYuNjk1MyA2Mi44NTk0IDE5LjY0MDYgNjIuODU5NCAyMi43ODEyQzYyLjg1OTQgMjUuOTIxOSA2Mi4yNjU2IDI4Ljg2NzIgNjEuMDc4MSAzMS42MTcyQzU5LjkwNjIgMzQuMzY3MiA1OC4yNzM0IDM2Ljc4OTEgNTYuMTc5NyAzOC44ODI4QzU0LjEwMTYgNDAuOTc2NiA1MS42ODc1IDQyLjYwOTQgNDguOTM3NSA0My43ODEyQzQ2LjE4NzUgNDQuOTY4OCA0My4yNDIyIDQ1LjU2MjUgNDAuMTAxNiA0NS41NjI1Wk00MC4xMDE2IDQxLjM5MDZDNDIuNjY0MSA0MS4zOTA2IDQ1LjA3MDMgNDAuOTA2MiA0Ny4zMjAzIDM5LjkzNzVDNDkuNTcwMyAzOC45Njg4IDUxLjU0NjkgMzcuNjMyOCA1My4yNSAzNS45Mjk3QzU0Ljk2ODggMzQuMjI2NiA1Ni4zMDQ3IDMyLjI1NzggNTcuMjU3OCAzMC4wMjM0QzU4LjIxMDkgMjcuNzczNCA1OC42ODc1IDI1LjM1OTQgNTguNjg3NSAyMi43ODEyQzU4LjY4NzUgMjAuMjAzMSA1OC4yMTA5IDE3Ljc5NjkgNTcuMjU3OCAxNS41NjI1QzU2LjMwNDcgMTMuMzEyNSA1NC45Njg4IDExLjMzNTkgNTMuMjUgOS42MzI4MUM1MS41NDY5IDcuOTI5NjkgNDkuNTcwMyA2LjU5Mzc1IDQ3LjMyMDMgNS42MjVDNDUuMDcwMyA0LjY1NjI1IDQyLjY2NDEgNC4xNzE4OCA0MC4xMDE2IDQuMTcxODhDMzcuNTIzNCA0LjE3MTg4IDM1LjEwOTQgNC42NTYyNSAzMi44NTk0IDUuNjI1QzMwLjYyNSA2LjU5Mzc1IDI4LjY0ODQgNy45Mjk2OSAyNi45Mjk3IDkuNjMyODFDMjUuMjI2NiAxMS4zMzU5IDIzLjg5MDYgMTMuMzEyNSAyMi45MjE5IDE1LjU2MjVDMjEuOTY4OCAxNy43OTY5IDIxLjQ5MjIgMjAuMjAzMSAyMS40OTIyIDIyLjc4MTJDMjEuNDkyMiAyNS4zNTk0IDIxLjk2ODggMjcuNzczNCAyMi45MjE5IDMwLjAyMzRDMjMuODkwNiAzMi4yNTc4IDI1LjIyNjYgMzQuMjI2NiAyNi45Mjk3IDM1LjkyOTdDMjguNjQ4NCAzNy42MzI4IDMwLjYyNSAzOC45Njg4IDMyLjg1OTQgMzkuOTM3NUMzNS4xMDk0IDQwLjkwNjIgMzcuNTIzNCA0MS4zOTA2IDQwLjEwMTYgNDEuMzkwNloifSl9KSx2b2ljZW92ZXI6USgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoInBhdGgiLHtkOiJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiJ9KSxRKCJwYXRoIix7ZDoiTTE2LjUgMjEuMTc0QzE1LjUgMjAuNSAxNC4zNzIgMjAgMTMgMjBjLTIuMDU4IDAtMy45MjggMi4zNTYtNiAyLTIuMDcyLS4zNTYtMi43NzUtMy4zNjktMS41LTQuNSJ9KSxRKCJjaXJjbGUiLHtjeDoiMTYiLGN5OiI3IixyOiI1In0pXX0pfTtmdW5jdGlvbiBjSigkKXtpZighJClyZXR1cm4hMDtyZXR1cm4gaDIoJCkub3MudG9Mb3dlckNhc2UoKT09PSJpb3MifWZ1bmN0aW9uIGs0KHt1ZGlkOiQscnVudGltZTpLfSl7bGV0W0osWl09TSghMCksW1gsWV09TShudWxsKSxbcSxWXT1NKG51bGwpLFtOLEJdPU0obnVsbCksej1jSihLKSxHPUQoYXN5bmMoKT0+e0IobnVsbCk7dHJ5e2xldCBXPWF3YWl0IHg4KHtkZXZpY2U6JH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pO2lmKFcpWShXKTtlbHNlIEIoIlVuZXhwZWN0ZWQgc2ltdWxhdG9yLXNldHRpbmdzIHJlcGx5Iil9Y2F0Y2goVyl7QihXIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZXLm5hbWU9PT0iVGltZW91dEVycm9yIj8iVGltZWQgb3V0IHJlYWRpbmcgc2ltdWxhdG9yIHNldHRpbmdzIjpXIGluc3RhbmNlb2YgRXJyb3ImJlcubWVzc2FnZSE9PSJGYWlsZWQgdG8gZmV0Y2giP1cubWVzc2FnZToiQ291bGQgbm90IHJlYWNoIHRoZSBwcmV2aWV3IHNlcnZlciDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKX19LFskXSk7RSgoKT0+e2lmKFkobnVsbCksIXopcmV0dXJuO0coKX0sW0csel0pO2xldCBDPUQoYXN5bmMoVyxBKT0+e1YoVyksQihudWxsKSxZKChUKT0+VD97Li4uVCxbV106QX06VCk7dHJ5e2F3YWl0IHg4KHtkZXZpY2U6JCxvcHRpb246Vyx2YWx1ZTpBfSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSl9Y2F0Y2goVCl7QihUIGluc3RhbmNlb2YgRXJyb3I/VC5tZXNzYWdlOmBGYWlsZWQgdG8gc2V0ICR7V31gKSxHKCl9ZmluYWxseXtWKG51bGwpfX0sWyQsR10pLFU9SSh7cnVubmluZzohMSxuZXh0Om51bGx9KSxGPUkoQyk7Ri5jdXJyZW50PUM7bGV0IEw9RCgoVyk9PntsZXQgQT1VLmN1cnJlbnQ7aWYoQS5uZXh0PVcsQS5ydW5uaW5nKXJldHVybjtBLnJ1bm5pbmc9ITAsKGFzeW5jKCk9Pnt3aGlsZShBLm5leHQhPT1udWxsKXtsZXQgVD1BLm5leHQ7QS5uZXh0PW51bGwsYXdhaXQgRi5jdXJyZW50KCJ0ZXh0LXNpemUiLFoyW1RdKX1BLnJ1bm5pbmc9ITF9KSgpfSxbXSksaz1YIT09bnVsbCxIPVg/P3VKLFA9WjIuaW5kZXhPZihIWyJ0ZXh0LXNpemUiXSkseT1QPj0wP1A6SFsidGV4dC1zaXplIl0/LnN0YXJ0c1dpdGgoImFjY2Vzc2liaWxpdHkiKT9aMi5sZW5ndGgtMTozO3JldHVybiBRKEcwLHtvcGVuOkosb25PcGVuQ2hhbmdlOlosImRhdGEtc2ltdWxhdG9yLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpRKEoxLHtjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU2ltdWxhdG9yIn0pLFEoInNwYW4iLHt9KV19KSxjaGlsZHJlbjohej9RKCJkaXYiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNDUgdGV4dC1bMTFweF0gcHgtMC41IHB5LTEiLGNoaWxkcmVuOiJTaW11bGF0b3Igc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBvbiBpT1Mgc2ltdWxhdG9ycyBvbmx5LiJ9KTpRKEoxLHtjaGlsZHJlbjpbTiYmUSgiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOk59KSxRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnZvaWQgRygpLGNsYXNzTmFtZToic2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWRhbmdlci8zMCBiZy10cmFuc3BhcmVudCBweC0xLjUgcHktMC41IHRleHQtWzExcHhdIHRleHQtZGFuZ2VyLXNvZnQiLGNoaWxkcmVuOiJSZXRyeSJ9KV19KSxRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltRKHIwLHtpY29uOlEyLmFwcGVhcmFuY2UsbGFiZWw6IkFwcGVhcmFuY2UiLGNoaWxkcmVuOlEoWDIse2xhYmVsOiJBcHBlYXJhbmNlIix2YWx1ZTpILmFwcGVhcmFuY2U/PyJsaWdodCIsb3B0aW9uczp0OC5hcHBlYXJhbmNlLGRpc2FibGVkOiFrfHxxPT09ImFwcGVhcmFuY2UiLG9uQ2hhbmdlOihXKT0+QygiYXBwZWFyYW5jZSIsVyl9KX0pLFEocjAse2ljb246UTIuZ2xhc3MsbGFiZWw6IkxpcXVpZCBHbGFzcyIsY2hpbGRyZW46UShYMix7bGFiZWw6IkxpcXVpZCBHbGFzcyIsdmFsdWU6SFsibGlxdWlkLWdsYXNzIl0/PyJjbGVhciIsb3B0aW9uczp0OFsibGlxdWlkLWdsYXNzIl0sZGlzYWJsZWQ6IWt8fHE9PT0ibGlxdWlkLWdsYXNzIixvbkNoYW5nZTooVyk9PkMoImxpcXVpZC1nbGFzcyIsVyl9KX0pLFEocjAse2ljb246UTIuZmlsdGVyLGxhYmVsOiJDb2xvciBGaWx0ZXIiLGNoaWxkcmVuOlEoWDIse2xhYmVsOiJDb2xvciBGaWx0ZXIiLHZhbHVlOkhbImNvbG9yLWZpbHRlciJdPz8ibm9uZSIsb3B0aW9uczp0OFsiY29sb3ItZmlsdGVyIl0sZGlzYWJsZWQ6IWt8fHE9PT0iY29sb3ItZmlsdGVyIixvbkNoYW5nZTooVyk9PkMoImNvbG9yLWZpbHRlciIsVyl9KX0pLFEocjAse2ljb246UTIudGV4dFNpemUsbGFiZWw6IlRleHQgU2l6ZSIsY2hpbGRyZW46UShkSix7dmFsdWU6eSxkaXNhYmxlZDohayxvbkNoYW5nZTpMfSl9KSxsSi5tYXAoKHtrZXk6VyxsYWJlbDpBfSk9PlEocjAse2ljb246UTJbVz09PSJyZWR1Y2UtbW90aW9uIj8ibW90aW9uIjpXPT09ImluY3JlYXNlLWNvbnRyYXN0Ij8iY29udHJhc3QiOlc9PT0ic2hvdy1ib3JkZXJzIj8iYm9yZGVycyI6Vz09PSJyZWR1Y2UtdHJhbnNwYXJlbmN5Ij8idHJhbnNwYXJlbmN5Ijoidm9pY2VvdmVyIl0sbGFiZWw6QSxjaGlsZHJlbjpRKF81LHtsYWJlbDpBLGNoZWNrZWQ6SFtXXT09PSJvbiIsZGlzYWJsZWQ6IWt8fHE9PT1XLG9uQ2hhbmdlOihUKT0+QyhXLFQ/Im9uIjoib2ZmIil9KX0sVykpXX0pXX0pfSl9dmFyIGU4PSJzZXJ2ZS1zaW06Y29kZWMiLHJKPVt7dmFsdWU6ImF1dG8iLGxhYmVsOiJILjI2NCAoSGFyZHdhcmUpIn0se3ZhbHVlOiJtanBlZyIsbGFiZWw6Ik1KUEVHIChDb21wYXRpYmlsaXR5KSJ9XSxvSj1RKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbUSgicGF0aCIse2Q6Im0xNiAxMyA1LjIyMyAzLjQ4MmEuNS41IDAgMCAwIC43NzctLjQxNlY3Ljg3YS41LjUgMCAwIDAtLjc1Mi0uNDMyTDE2IDEwLjUifSksUSgicmVjdCIse3g6IjIiLHk6IjYiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxMiIscng6IjIifSldfSk7ZnVuY3Rpb24gRjQoe3ByZWZlcmVuY2U6JCxvblByZWZlcmVuY2VDaGFuZ2U6SyxhY3RpdmVDb2RlYzpKLGF2Y2NTdXBwb3J0ZWQ6WixjaHJvbWVBdmFpbGFibGU6WD0hMSxoaWRlQ2hyb21lOlk9ITEsb25IaWRlQ2hyb21lQ2hhbmdlOnF9KXtsZXRbVixOXT1NKCExKSxCPVo/JDoibWpwZWciO3JldHVybiBRKEcwLHtvcGVuOlYsb25PcGVuQ2hhbmdlOk4sImRhdGEtc3RyZWFtLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpRKEoxLHtjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU3RyZWFtIn0pLFEoInNwYW4iLHt9KV19KSxjaGlsZHJlbjpRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltRKHIwLHtpY29uOm9KLGxhYmVsOiJDb2RlYyIsY2hpbGRyZW46UShYMix7bGFiZWw6IkNvZGVjIix2YWx1ZTpCLG9wdGlvbnM6ckosZGlzYWJsZWQ6IVosb25DaGFuZ2U6KEcpPT5LKEcpfSl9KSxYJiZxJiZRKEoxLHtjaGlsZHJlbjpbUShyMCx7aWNvbjpRKGEwLHtzaXplOjE0LHN0cm9rZVdpZHRoOjJ9KSxsYWJlbDoiRGV2aWNlIGZyYW1lIixjaGlsZHJlbjpRKF81LHtsYWJlbDoiRGV2aWNlIGZyYW1lIixjaGVja2VkOiFZLG9uQ2hhbmdlOihHKT0+cSghRyl9KX0pLFEoInAiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgbGVhZGluZy1zbnVnIHB4LTAuNSIsY2hpbGRyZW46IlR1cm4gb2ZmIHRvIGhpZGUgdGhlIGJlemVsIHdoZW4gdmlld2luZyB0aGUgc2ltdWxhdG9yIG9uIGEgcGhvbmUsIHNvIG5lc3RlZCBmcmFtZXMgZG9uJ3Qgc2hyaW5rIHRoZSBzY3JlZW4uIn0pXX0pLFEoInAiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgbGVhZGluZy1zbnVnIHB4LTAuNSIsY2hpbGRyZW46IVo/IlRoaXMgYnJvd3NlciBjYW4ndCBkZWNvZGUgSC4yNjQsIHNvIHRoZSBzdHJlYW0gdXNlcyBNSlBFRy4iOkI9PT0iYXV0byImJko9PT0ibWpwZWciPyJILjI2NCB3YXMgdW5hdmFpbGFibGUgZm9yIHRoaXMgc3RyZWFtLCBzbyBpdCBmZWxsIGJhY2sgdG8gTUpQRUcuIjoiU3dpdGNoIHRvIE1KUEVHIGlmIHRoZSBzdHJlYW0gc3R1dHRlcnMgb3IgZHJvcHMgd2hpbGUgc2NyZWVuIHJlY29yZGluZyB0aGUgYnJvd3NlciB3aW5kb3cuIn0pXX0pfSl9ZnVuY3Rpb24gQTQoe29wZW46JCxvbkNsb3NlOkssdWRpZDpKLGRldmljZVJ1bnRpbWU6WixjdXJyZW50QXBwOlgsZXZlbnRMb2dFdmVudHNFbmRwb2ludDpZLGF4T3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZUF4T3ZlcmxheTpWLGNvZGVjUHJlZmVyZW5jZTpOLG9uQ29kZWNQcmVmZXJlbmNlQ2hhbmdlOkIsYWN0aXZlQ29kZWM6eixhdmNjU3VwcG9ydGVkOkcsY2hyb21lQXZhaWxhYmxlOkM9ITEsaGlkZUNocm9tZTpVPSExLG9uSGlkZUNocm9tZUNoYW5nZTpGLHdpZHRoOkx9KXtyZXR1cm4gUShGNSx7b3BlbjokLHdpZHRoOkwsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpNNX0sY2hpbGRyZW46W1EoQTUse2NoaWxkcmVuOltRKHE2LHtjaGlsZHJlbjoiVG9vbHMifSksUSh1Mix7b25DbGljazpLfSldfSksJCYmUSgiZGl2Iix7Y2xhc3NOYW1lOiJwLTMuNSBvdmVyZmxvdy15LWF1dG8gZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTMiLGNoaWxkcmVuOltRKCQ0LHt1ZGlkOkosY3VycmVudEFwcDpYfSksUShINCx7dWRpZDpKLGV2ZW50c0VuZHBvaW50Oll9KSxRKGs0LHt1ZGlkOkoscnVudGltZTpafSksUShaNCx7b3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZU92ZXJsYXk6Vn0pLFEoTDQse3VkaWQ6SixidW5kbGVJZDpYPy5idW5kbGVJZD8/bnVsbH0pLFEodDYse3VkaWQ6SixleGVjOkUxfSksUShKNCx7dWRpZDpKLGJ1bmRsZUlkOlg/LmJ1bmRsZUlkPz9udWxsfSksUShGNCx7cHJlZmVyZW5jZTpOLG9uUHJlZmVyZW5jZUNoYW5nZTpCLGFjdGl2ZUNvZGVjOnosYXZjY1N1cHBvcnRlZDpHLGNocm9tZUF2YWlsYWJsZTpDLGhpZGVDaHJvbWU6VSxvbkhpZGVDaHJvbWVDaGFuZ2U6Rn0pXX0pXX0pfWZ1bmN0aW9uIE00KCQsSyl7bGV0IEo7dHJ5e0o9bmV3IFVSTCgkLndlYlNvY2tldERlYnVnZ2VyVXJsKX1jYXRjaHtyZXR1cm4gJH1sZXQgWj1gJHtKLnBhdGhuYW1lfSR7Si5zZWFyY2h9YCxYPUsucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsWT1LLnByb3RvY29sPT09Imh0dHBzOiI/IndzcyI6IndzIixxPWAke0suaG9zdH0ke1p9YCxWPSQuZGV2dG9vbHNGcm9udGVuZFVybDt0cnl7bGV0IE49bmV3IFVSTCgkLmRldnRvb2xzRnJvbnRlbmRVcmwsYCR7Sy5wcm90b2NvbH0vLyR7Sy5ob3N0fWApO04uc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3MiKSxOLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzcyIpLE4uc2VhcmNoUGFyYW1zLnNldChZLHEpLFY9YCR7Ti5wYXRobmFtZX0ke04uc2VhcmNofSR7Ti5oYXNofWB9Y2F0Y2h7fXJldHVybnsuLi4kLHdlYlNvY2tldERlYnVnZ2VyVXJsOmAke1h9Ly8ke0suaG9zdH0ke1p9YCxkZXZ0b29sc0Zyb250ZW5kVXJsOlZ9fWZ1bmN0aW9uIFkyKCQsSyl7ZmV0Y2gobTEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6JCxvbjpLfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiAkMygpe2xldCAkPW0xKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IEs9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKCQsSykpcmV0dXJufX1jYXRjaHt9ZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIE80KCQpe2xldCBLPSQuY29udGVudERvY3VtZW50O2lmKCFLKXJldHVybjtsZXQgSj0oKT0+e2xldCBZPVtLXTt3aGlsZShZLmxlbmd0aCl7bGV0IHE9WS5wb3AoKSxWPXEucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IE4gb2YgVil7bGV0IEI9Ti5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Ti50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KEIpKXJldHVybiBOfWZvcihsZXQgTiBvZiBxLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihOLnNoYWRvd1Jvb3QpWS5wdXNoKE4uc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFo9MCxYPSgpPT57WisrO2xldCBZPUooKTtpZihZJiZZLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtZLmNsaWNrKCk7cmV0dXJufWlmKFo8MjApc2V0VGltZW91dChYLDEwMCl9O1goKX1mdW5jdGlvbiBQNCgkKXtsZXQgSz1bXSxKPW5ldyBNYXA7Zm9yKGxldCBaIG9mICQpe2xldCBYPVouYXBwTmFtZXx8Wi5idW5kbGVJZHx8IlVua25vd24iLFk9Wi5idW5kbGVJZHx8WCxxPUouZ2V0KFkpO2lmKCFxKXE9e2tleTpZLGFwcE5hbWU6WCxidW5kbGVJZDpaLmJ1bmRsZUlkLHRhcmdldHM6W119LEouc2V0KFkscSksSy5wdXNoKFkpO3EudGFyZ2V0cy5wdXNoKFopfXJldHVybiBLLm1hcCgoWik9PkouZ2V0KFopKX1mdW5jdGlvbiBXNCgkLEspe2xldFtKLFpdPU0oe30pLFg9dzEoKCk9Pksuc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtLXSk7cmV0dXJuIEUoKCk9PntpZighJClyZXR1cm47bGV0IFk9ITE7Zm9yKGxldCBxIG9mIEspe2lmKCFxKWNvbnRpbnVlO2xldCBWPWAkeyR9OiR7cX1gLE49UDUuZ2V0KFYpO2lmKHR5cGVvZiBOPT09InN0cmluZyJ8fE49PT1udWxsKXtaKChCKT0+QltxXT09PU4/Qjp7Li4uQixbcV06Tn0pO2NvbnRpbnVlfWU2KEUxLCQscSkudGhlbigoQik9PntpZihZKXJldHVybjtaKCh6KT0+KHsuLi56LFtxXTpCfSkpfSl9cmV0dXJuKCk9PntZPSEwfX0sWyQsWF0pLEp9ZnVuY3Rpb24gXzQoe3VkaWQ6JCx0YXJnZXRzOkssc2VsZWN0ZWQ6SixvblNlbGVjdFRhcmdldDpaLG9uUmVmcmVzaDpYfSl7bGV0IFk9UDQoSykscT1ZLm1hcCgoTCk9PkwuYnVuZGxlSWQpLmZpbHRlcigoTCk9PiEhTCksVj1XNCgkLHEpLFtOLEJdPU0oITEpLFt6LEddPU0obnVsbCksQz1JKG51bGwpLFU9SShudWxsKTtFKCgpPT57aWYoIU4pcmV0dXJuO2xldCBMPShrKT0+e2lmKCFVLmN1cnJlbnQpcmV0dXJuO2lmKCFVLmN1cnJlbnQuY29udGFpbnMoay50YXJnZXQpKUIoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKX0sW05dKSxFKCgpPT57aWYoTilyZXR1cm47aWYoQy5jdXJyZW50KVkyKEMuY3VycmVudCwhMSksQy5jdXJyZW50PW51bGw7JDMoKX0sW05dKSxFKCgpPT57bGV0IEw9KCk9PiQzKCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsTCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEwpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEwpfX0sW10pO2xldCBGPUo/KEoudGl0bGV8fEoudXJsfHxKLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gUSgiZGl2Iix7cmVmOlUsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W1EoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e0IoKEwpPT57aWYoIUwpWCgpO3JldHVybiFMfSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtd2hpdGUvOTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLW1kIHRleHQtWzEycHhdIHB4LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1sZWZ0IiwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpOLCJhcmlhLWxhYmVsIjoiV2ViS2l0IHRhcmdldCIsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIG1pbi13LTAiLGNoaWxkcmVuOkZ9KSxRKGo1LHtzaXplOjEyLHN0cm9rZVdpZHRoOjJ9KV19KSxOJiZRKCJ1bCIse3JvbGU6Imxpc3Rib3giLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNHB4KV0gbGVmdC0wIG0tMCBwLTEgbGlzdC1ub25lIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46WS5tYXAoKEwpPT57bGV0IGs9TC5idW5kbGVJZD9WW0wuYnVuZGxlSWRdOm51bGw7cmV0dXJuIFEoImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W1EoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS9bMC45Ml0iLGNoaWxkcmVuOltrP1EoImltZyIse3NyYzprLGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6USgic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46TC5hcHBOYW1lfSldfSksUSgidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOkwudGFyZ2V0cy5tYXAoKEgpPT57bGV0IFA9Sj8uaWQ9PT1ILmlkLHk9ISFILmluVXNlQnlPdGhlckluc3BlY3RvciYmIVAsVz0oSC50aXRsZXx8SC51cmx8fEguYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCksQT16PT09SC5pZCYmIXksVD0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBRKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOlAsImFyaWEtZGlzYWJsZWQiOnksdGFiSW5kZXg6eT8tMTowLHRpdGxlOnk/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZih5KXJldHVybjtpZihDLmN1cnJlbnQmJkMuY3VycmVudCE9PUguaWQpWTIoQy5jdXJyZW50LCExKTtDLmN1cnJlbnQ9SC5pZCxHKEguaWQpLFkyKEguaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihDLmN1cnJlbnQ9PT1ILmlkKVkyKEguaWQsITEpLEMuY3VycmVudD1udWxsO0coKHYpPT52PT09SC5pZD9udWxsOnYpfSxvbkNsaWNrOigpPT57aWYoeSlyZXR1cm47WihILmlkKSxCKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke3k/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LXdoaXRlLzg1IjpBPyJiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMjIpXSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjpQPyJiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6InRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpXfSksSC51cmwmJkgudXJsIT09ImFib3V0OmJsYW5rIiYmUSgic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvWzAuNDJdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpILnVybH0pXX0sSC5pZCl9KX0pXX0sTC5rZXkpfSl9KV19KX1mdW5jdGlvbiBENCh7b3BlbjokLG9uQ2xvc2U6Syx1ZGlkOkosdGFyZ2V0czpaLHNlbGVjdGVkVGFyZ2V0SWQ6WCxvblNlbGVjdFRhcmdldDpZLGxvYWRpbmc6cSxlcnJvcjpWLG9uUmVmcmVzaDpOLHdpZHRoOkJ9KXtsZXQgej1YP1ouZmluZCgoRyk9PkcuaWQ9PT1YKT8/bnVsbDpudWxsO3JldHVybiBRKEY1LHtvcGVuOiQsd2lkdGg6QixjaGlsZHJlbjpbUShBNSx7Y2hpbGRyZW46W1oubGVuZ3RoPjA/UShfNCx7dWRpZDpKLHRhcmdldHM6WixzZWxlY3RlZDp6LG9uU2VsZWN0VGFyZ2V0Olksb25SZWZyZXNoOk59KTpRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlL1swLjQ4XSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46cT8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxRKHUyLHtvbkNsaWNrOkssYXJpYUxhYmVsOiJDbG9zZSBXZWJLaXQgRGV2VG9vbHMiLHRpdGxlOiJDbG9zZSIsaWNvblNpemU6MTV9KV19KSxRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGJnLXdoaXRlIHJlbGF0aXZlIixjaGlsZHJlbjpWP1EoImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpWfSk6eiYmJD9RKCJpZnJhbWUiLHtzcmM6ei5kZXZ0b29sc0Zyb250ZW5kVXJsLHRpdGxlOmBXZWJLaXQgRGV2VG9vbHMgLSAke3oudGl0bGV8fHoudXJsfHx6LmlkfWAsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJvcmRlci1ub25lIGJsb2NrIGJnLXdoaXRlIixvbkxvYWQ6KEcpPT5PNChHLmN1cnJlbnRUYXJnZXQpfSx6LmlkKTpRKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ej8iRGV2VG9vbHMgcGF1c2VkIOKAlCBvcGVuIHRoZSBwYW5lbCB0byByZWF0dGFjaC4iOiJPcGVuIFNhZmFyaSBvciBhbiBpbnNwZWN0YWJsZSBXS1dlYlZpZXcgaW4gdGhlIHNpbXVsYXRvci4ifSl9KV19KX1mdW5jdGlvbiBuSih7aG9zdFBhdGg6JCxleGVjOkssdWRpZDpKLG9uVXBsb2FkU3RhcnQ6WixvblVwbG9hZFByb2dyZXNzOlgsb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpxfSl7cT8uKCQpO2xldCBWPSQuc3BsaXQoIi8iKS5wb3AoKT8/ImltYWdlIixOPVooViwibWVkaWEiKTtyZXR1cm4gWChOLG51bGwpLFk0KCQsSyxKKS50aGVuKCgpPT5ZKE4sITApKS5jYXRjaCgoQik9PlkoTiwhMSxCIGluc3RhbmNlb2YgRXJyb3I/Qi5tZXNzYWdlOiJBZGQgZmFpbGVkIikpfWZ1bmN0aW9uIFQ0KHtleGVjOiQsdWRpZDpLLGVuYWJsZWQ6SixvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25VbnN1cHBvcnRlZDpxLG9uSG9zdFBhdGhEcm9wOlZ9KXtsZXRbTixCXT1NKCExKSx6PUkoMCksRz1EKGFzeW5jKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLEwuc3RvcFByb3BhZ2F0aW9uKCksei5jdXJyZW50PTAsQighMSksIUp8fCFLKXJldHVybjtsZXQgaz1MLmRhdGFUcmFuc2Zlci5nZXREYXRhKGEyKTtpZihrKXtuSih7aG9zdFBhdGg6ayxleGVjOiQsdWRpZDpLLG9uVXBsb2FkU3RhcnQ6WixvblVwbG9hZFByb2dyZXNzOlgsb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpWfSk7cmV0dXJufWxldCBIPUFycmF5LmZyb20oTC5kYXRhVHJhbnNmZXIuZmlsZXMpO2lmKEgubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBQIG9mIEgpe2xldCB5PXE0KFApO2lmKCF5KXtxKFApO2NvbnRpbnVlfWxldCBXPVooUC5uYW1lLHkpO0I0KFAseSwkLEssKEEpPT5YKFcsQSkpLnRoZW4oKCk9PlkoVywhMCkpLmNhdGNoKChBKT0+WShXLCExLEEgaW5zdGFuY2VvZiBFcnJvcj9BLm1lc3NhZ2U6IlVwbG9hZCBmYWlsZWQiKSl9fSxbSixLLCQsWixYLFkscSxWXSksQz1EKChMKT0+e2lmKEwucHJldmVudERlZmF1bHQoKSxKKUwuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbSl0pLFU9RCgoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksIUopcmV0dXJuO2lmKHouY3VycmVudCsrLHouY3VycmVudD09PTEpQighMCl9LFtKXSksRj1EKChMKT0+e2lmKEwucHJldmVudERlZmF1bHQoKSx6LmN1cnJlbnQtLSx6LmN1cnJlbnQ8PTApei5jdXJyZW50PTAsQighMSl9LFtdKTtyZXR1cm57aXNEcmFnT3ZlcjpOLGRyb3Bab25lUHJvcHM6e29uRHJhZ092ZXI6QyxvbkRyYWdFbnRlcjpVLG9uRHJhZ0xlYXZlOkYsb25Ecm9wOkd9fX1mdW5jdGlvbiB3NCgpe2xldFskXT1NKHMwKTtyZXR1cm57c3VwcG9ydGVkOiR9fWZ1bmN0aW9uIHMyKCQsSyxKLFosWD0ibGVmdCIpe2xldCBZPUQoKEMsVSk9Plg9PT0ibGVmdCI/Qy1VOlUtQyxbWF0pLHE9RCgoQyk9Pk1hdGgubWF4KEosTWF0aC5taW4oWixDKSksW0osWl0pLFtWLE5dPU0oKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gSztsZXQgQz13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJCksVT1DIT1udWxsP051bWJlcihDKTpOYU47cmV0dXJuIE51bWJlci5pc0Zpbml0ZShVKT9xKFUpOkt9KSxCPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWluKFosd2luZG93LmlubmVyV2lkdGgtMzIpOlosej1NYXRoLm1heChKLE1hdGgubWluKEIsVikpLEc9RCgoQyk9PntDLnByZXZlbnREZWZhdWx0KCk7bGV0IFU9Qy5jbGllbnRYLEY9eixMPUMuY3VycmVudFRhcmdldDtMLnNldFBvaW50ZXJDYXB0dXJlKEMucG9pbnRlcklkKTtsZXQgaz0oUCk9PntsZXQgeT1xKEYrWShVLFAuY2xpZW50WCkpO04oeSl9LEg9KFApPT57TC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoUC5wb2ludGVySWQpLEwucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGspLEwucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixIKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEgpO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJCxTdHJpbmcocShGK1koVSxQLmNsaWVudFgpKSkpfWNhdGNoe319O0wuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGspLEwuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixIKSxMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEgpfSxbcSxZLHosJF0pO3JldHVybnt3aWR0aDp6LG9uUG9pbnRlckRvd246R319dmFyIGlKPTgwMDA7ZnVuY3Rpb24gYUooJCl7cmV0dXJuImZpbGU6Ly8iKyQuc3BsaXQoIi8iKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCIvIil9ZnVuY3Rpb24gc0ooJCl7cmV0dXJuICQhPT0ibm9uZSJ9ZnVuY3Rpb24gRTQoe3RvYXN0OiQsb25SZXZlYWw6SyxvbkRpc21pc3M6SixvblBhdXNlOlosb25SZXN1bWU6WH0pe2xldFtZLHFdPU0oITEpLFY9SShudWxsKSxOPUkobnVsbCksQj0oKT0+e2lmKE4uY3VycmVudCljbGVhclRpbWVvdXQoTi5jdXJyZW50KTtOLmN1cnJlbnQ9bnVsbH07RSgoKT0+KCk9PkIoKSxbXSk7bGV0IHo9KEMpPT57aWYoISQucGF0aCl7Qy5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1CKCksWigpLE4uY3VycmVudD1zZXRUaW1lb3V0KCgpPT57Ti5jdXJyZW50PW51bGwscSghMSksWCgpfSxpSiksQy5kYXRhVHJhbnNmZXIuc2V0RGF0YSgidGV4dC9wbGFpbiIsYUooJC5wYXRoKSksQy5kYXRhVHJhbnNmZXIuc2V0RGF0YShhMiwkLnBhdGgpLEMuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9ImNvcHkiO2xldCBVPVYuY3VycmVudDtpZihVKUMuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShVLFUub2Zmc2V0V2lkdGgvMixVLm9mZnNldEhlaWdodC8yKTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnEoITApKX0sRz0oQyk9PntpZihCKCkscSghMSksc0ooQy5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCkpSigpO2Vsc2UgWCgpfTtyZXR1cm4gUSgiZGl2Iix7ImRhdGEtdGVzdGlkIjoic2NyZWVuc2hvdC10b2FzdCIsY2xhc3NOYW1lOiJ3LVttaW4oMzIwcHgsY2FsYygxMDB2dy0zMnB4KSldIixvbk1vdXNlRW50ZXI6Wixvbk1vdXNlTGVhdmU6WCxjaGlsZHJlbjpbJC50aHVtYiYmUSgiaW1nIix7cmVmOlYsImRhdGEtdGVzdGlkIjoiZHJhZy1pbWFnZSIsc3JjOiQudGh1bWIsYWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDotOTk5OSxsZWZ0OjAsd2lkdGg6ODAsaGVpZ2h0OjgwLGJvcmRlclJhZGl1czoxMixvYmplY3RGaXQ6ImNvdmVyIixwb2ludGVyRXZlbnRzOiJub25lIn19KSwkLnN0YXR1cz09PSJlcnJvciI/USgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0zLjUgcHktMi41IGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSIsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBiZy1bI2Y4NzE3MV0ifSksUSgic3BhbiIse2NsYXNzTmFtZToic2VsZWN0LXRleHQiLGNoaWxkcmVuOiQubWVzc2FnZT8/IlNjcmVlbnNob3QgZmFpbGVkIn0pXX0pOlEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpLLGRpc2FibGVkOiQuc3RhdHVzIT09InNhdmVkIixkcmFnZ2FibGU6JC5zdGF0dXM9PT0ic2F2ZWQiLG9uRHJhZ1N0YXJ0Onosb25EcmFnRW5kOkcsImFyaWEtbGFiZWwiOiJPcGVuIHNjcmVlbnNob3QgaW4gRmluZGVyIix0aXRsZToiQ2xpY2sgdG8gcmV2ZWFsIGluIEZpbmRlciDCtyBkcmFnIHRvIGNvcHkgdGhlIGZpbGUiLGNsYXNzTmFtZTpgZ3JvdXAgZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0zIHBsLTIgcHItMy41IHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLXhsIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSB0ZXh0LWxlZnQgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy1bIzJhMmEyY10gZGlzYWJsZWQ6Y3Vyc29yLWRlZmF1bHQgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlXSAke1k/ImludmlzaWJsZSI6IiJ9YCxjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJzaXplLTkgcm91bmRlZC1tZCBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGUvMTAgc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcmluZy0xIHJpbmctd2hpdGUvMTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC50aHVtYj9RKCJpbWciLHtzcmM6JC50aHVtYixhbHQ6IiIsY2xhc3NOYW1lOiJzaXplLWZ1bGwgb2JqZWN0LWNvdmVyIixkcmFnZ2FibGU6ITF9KTpRKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBzaXplLTQgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8zMCBib3JkZXItdC13aGl0ZSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIn0pfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGxlYWRpbmctdGlnaHQgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSIsY2hpbGRyZW46JC5zdGF0dXM9PT0ic2F2aW5nIj8iU2F2aW5nIFNjcmVlbnNob3TigKYiOiJTY3JlZW5zaG90IFNhdmVkIn0pLCQuc3RhdHVzPT09InNhdmVkIiYmUSgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS82MCIsY2hpbGRyZW46Ik9wZW4gaW4gRmluZGVyIn0pXX0pLCQuc3RhdHVzPT09InNhdmVkIiYmUShnNSx7Y2xhc3NOYW1lOiJtbC1hdXRvIHRleHQtd2hpdGUvODAgcG9pbnRlci1ldmVudHMtbm9uZSIsc2l6ZToxNixzdHJva2VXaWR0aDoyLjI1fSldfSldfSl9dmFyIEk0PTM1MDAsYjQ9NDAwMDtmdW5jdGlvbiB0Sigpe3JldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCItIikuc2xpY2UoMCwyMyl9ZnVuY3Rpb24geTQoJCxLKXtsZXQgSj1JKG51bGwpLFo9SShudWxsKSxYPUkobnVsbCksWT1JKG51bGwpLHE9SShudWxsKSxWPUQoKCk9PntpZihYLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFguY3VycmVudCk7WC5jdXJyZW50PW51bGwsWS5jdXJyZW50PW51bGx9LFtdKSxOPUQoKEwpPT57bGV0IGs9TD8/Wi5jdXJyZW50Pz92b2lkIDA7aWYoVigpLHEuY3VycmVudD1udWxsLGMwLmRpc21pc3Moayksaz09PXZvaWQgMHx8Wi5jdXJyZW50PT09U3RyaW5nKGspKUouY3VycmVudD1udWxsLFouY3VycmVudD1udWxsfSxbVl0pLEI9RCgoKT0+e2xldCBMPUouY3VycmVudDtpZihMPy5wYXRoKUUxKGBvcGVuIC1SICR7TTEoTC5wYXRoKX1gKX0sW10pLHo9RCgoTCk9PntWKCk7bGV0IGs9TWF0aC5tYXgoMCxMKSxIPVouY3VycmVudDtxLmN1cnJlbnQ9ayxZLmN1cnJlbnQ9RGF0ZS5ub3coKStrLFguY3VycmVudD1zZXRUaW1lb3V0KCgpPT5OKEg/P3ZvaWQgMCksayl9LFtWLE5dKSxHPUQoKCk9PntpZighWC5jdXJyZW50fHxZLmN1cnJlbnQ9PW51bGwpcmV0dXJuO3EuY3VycmVudD1NYXRoLm1heCgwLFkuY3VycmVudC1EYXRlLm5vdygpKSxWKCl9LFtWXSksQz1EKCgpPT57bGV0IEw9cS5jdXJyZW50O2lmKEw9PW51bGwpcmV0dXJuO3ooTCl9LFt6XSksVT1EKChMLGs9MS8wKT0+e2lmKEouY3VycmVudD1MLFouY3VycmVudD1MLmlkLGMwLmN1c3RvbSgoSCk9PlEoRTQse3RvYXN0Okwsb25SZXZlYWw6QixvbkRpc21pc3M6KCk9Pk4oSCksb25QYXVzZTpHLG9uUmVzdW1lOkN9KSx7aWQ6TC5pZCxkdXJhdGlvbjoxLzAsdW5zdHlsZWQ6ITB9KSxOdW1iZXIuaXNGaW5pdGUoaykpeihrKTtlbHNlIFYoKSxxLmN1cnJlbnQ9bnVsbH0sW1YsTixHLEMsQix6XSk7cmV0dXJue2NhcHR1cmU6RChhc3luYygpPT57aWYoISQpcmV0dXJuO2xldCBMPWNyeXB0by5yYW5kb21VVUlEKCk7VSh7aWQ6TCxzdGF0dXM6InNhdmluZyIscGhhc2U6ImluIn0pO2xldCBIPWBGPSIke2AkSE9NRS9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSR7dEooKX0ucG5nYH0iOyB4Y3J1biBzaW1jdGwgaW8gJHtNMSgkKX0gc2NyZWVuc2hvdCR7Sz9gIC0tZGlzcGxheT0ke0t9YDoiIn0gIiRGIiAmJiBwcmludGYgJyVzJyAiJEYiYCxQO3RyeXtsZXQgVz1hd2FpdCBFMShIKTtpZihQPVcuc3Rkb3V0LnRyaW0oKSxXLmV4aXRDb2RlIT09MHx8IVApe1Uoe2lkOkwsc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOlcuc3RkZXJyLnRyaW0oKXx8IlNjcmVlbnNob3QgZmFpbGVkIn0sYjQpO3JldHVybn19Y2F0Y2goVyl7VSh7aWQ6TCxzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6VyBpbnN0YW5jZW9mIEVycm9yP1cubWVzc2FnZToiU2NyZWVuc2hvdCBmYWlsZWQifSxiNCk7cmV0dXJufVUoe2lkOkwsc3RhdHVzOiJzYXZlZCIscGhhc2U6ImluIixwYXRoOlB9LEk0KTtsZXQgeT1gL3RtcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC10aHVtYi0ke0x9LnBuZ2A7dHJ5e2xldCBBPShhd2FpdCBFMShgc2lwcyAtWiAzMjAgJHtNMShQKX0gLS1vdXQgJHtNMSh5KX0gPi9kZXYvbnVsbCAyPiYxICYmIGJhc2U2NCAtaSAke00xKHkpfTsgcm0gLWYgJHtNMSh5KX1gKSkuc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKTtpZihBKXtsZXQgVD1KLmN1cnJlbnQ7aWYoVD8uaWQ9PT1MKVUoey4uLlQsdGh1bWI6YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke0F9YH0sSTQpfX1jYXRjaHt9fSxbJCxLLFVdKSxyZXZlYWw6QixkaXNtaXNzOk59fWZ1bmN0aW9uIHg0KHtkZWZhdWx0V2lkdGg6JCx2aWV3cG9ydFdpZHRoOkssdmlld3BvcnRIZWlnaHQ6Sixhc3BlY3RSYXRpbzpaLGluaXRpYWxGaXQ6WD0hMSxvblN0YXJ0Oll9KXtsZXQgcT1INSgpLFtWLE5dPU0oITEpLFtCLHpdPU0oITEpLFtHLENdPU0oITEpLFU9SShudWxsKSxGPUkoW10pLEw9SShudWxsKSxrPUkobnVsbCksSD1JKG51bGwpLFA9SShudWxsKSx5PUkoWCksVz1JKCExKTtFKCgpPT57Vy5jdXJyZW50PSEwfSxbXSk7bGV0IEE9RCgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiAkO2lmKHkuY3VycmVudCYmIVcuY3VycmVudClyZXR1cm4gTzUoJCxLLEosWik7bGV0IGI9TmFOO3RyeXtsZXQgbT13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0ocDgpO2I9bSE9bnVsbD9OdW1iZXIobSk6TmFOfWNhdGNoe31yZXR1cm4geTYoJCxLLEosWixiKX0sW1osJCxKLEtdKSxUPXcxKCgpPT5BKCksW0FdKSxbaSx2XT1NKFQpLGo9SShUKSxkPUkoJCksWjE9TzUoJCxLLEosWikscTE9TWF0aC5taW4oVTYsWjEpLG89aT8/JCxJMT1LNShvLCQsSyxKLFopLGc9RCgoYik9PntsZXQgbT1yMihiKTtqLmN1cnJlbnQ9bSx2KG0pfSxbXSksZj1EKChiKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwkPD0wKXJldHVybjtsZXQgbT1LNShiLCQsSyxKLFopO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0ocDgsU3RyaW5nKG0vJCkpfWNhdGNoe319LFtaLCQsSixLXSkscz1EKChiKT0+e2lmKEguY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoSC5jdXJyZW50KTtILmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0guY3VycmVudD1udWxsLGYoYil9LGI2KX0sW2ZdKTtFKCgpPT57aWYoVnx8QilyZXR1cm47bGV0IGI9ai5jdXJyZW50O2lmKGI9PW51bGwpcmV0dXJuO2xldCBtPUs1KGIsJCxLLEosWik7aWYobSE9PWIpZyhtKX0sW1osJCxCLFYsSixLLGddKSxFKCgpPT57aWYoZC5jdXJyZW50PT09JClyZXR1cm47ZC5jdXJyZW50PSQsZyhBKCkpfSxbJCxBLGddKSxFKCgpPT57aWYoIVYmJiFCKXJldHVybjtsZXQgYj1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcixtPWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCxZMT1kb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q7cmV0dXJuIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPSJud3NlLXJlc2l6ZSIsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PSJub25lIixkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiLCgpPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Yixkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9bSxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9WTF9fSxbVixCXSksRSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgYj0oKT0+e2xldCBZMT1qLmN1cnJlbnQ7aWYoWTE9PW51bGwpcmV0dXJuO2lmKEguY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoSC5jdXJyZW50KSxILmN1cnJlbnQ9bnVsbDtmKFkxKX0sbT0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKWIoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsYiksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsbSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLGIpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLG0pfX0sW2ZdKTtsZXQgazE9RCgoYik9PntpZihiPloxKXJldHVybiBaMSt1OChiLVoxLFoxKTtpZihiPHExKXJldHVybiBxMS11OChxMS1iLFoxKTtyZXR1cm4gYn0sW1oxLHExXSksVTE9RCgoKT0+e2lmKGsuY3VycmVudClrLmN1cnJlbnQoKSxrLmN1cnJlbnQ9bnVsbDt6KCExKX0sW10pLFYxPUQoKGIpPT57bGV0IG09cGVyZm9ybWFuY2Uubm93KCksWTE9Ri5jdXJyZW50O1kxLnB1c2goe3Q6bSx4OmJ9KTt3aGlsZShZMS5sZW5ndGg+MSYmbS1ZMVswXS50Pkk2KVkxLnNoaWZ0KCl9LFtdKSxGMT1EKChiKT0+e2xldCBtPWsxKGIpO2lmKEwuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShMLmN1cnJlbnQpO0wuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntMLmN1cnJlbnQ9bnVsbCxnKG0pLFYxKG0pfSl9LFtrMSxWMSxnXSksSDE9RCgoYixtLFkxKT0+e1UxKCk7bGV0IEExPWouY3VycmVudD8/JDtVLmN1cnJlbnQ9e3BvaW50ZXJJZDpiLHN0YXJ0WDptLHN0YXJ0WTpZMSxzdGFydFdpZHRoOkExfSxGLmN1cnJlbnQ9W3t0OnBlcmZvcm1hbmNlLm5vdygpLHg6QTF9XSxZKCksTighMCl9LFtVMSwkLFldKSxTPUQoKCk9PntsZXQgYj1VLmN1cnJlbnQ7aWYoVS5jdXJyZW50PW51bGwsTC5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEwuY3VycmVudCksTC5jdXJyZW50PW51bGw7aWYoYiYmYi5wb2ludGVySWQ+PTApe2xldCBHMT1QLmN1cnJlbnQ7aWYoRzE/Lmhhc1BvaW50ZXJDYXB0dXJlKGIucG9pbnRlcklkKSlHMS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoYi5wb2ludGVySWQpfU4oITEpO2xldCBtPWouY3VycmVudD8/JCxZMT1SNihGLmN1cnJlbnQpO0YuY3VycmVudD1bXTtsZXQgQTE9SzUobStZMSpFNiwkLEssSixaKSxwPXIyKFM2KEExLFskXSxENikpLG49TWF0aC5hYnMobS1wKTwwLjUmJk1hdGguYWJzKFkxKTw4O2lmKHF8fG4pe2cocCkscyhwKTtyZXR1cm59eighMCksay5jdXJyZW50PXg2KHtmcm9tOm0sdG86cCx2ZWxvY2l0eTpZMSxzdGlmZm5lc3M6VDYsZGFtcGluZzp3NixvblVwZGF0ZTpnLG9uQ29tcGxldGU6KCk9PntrLmN1cnJlbnQ9bnVsbCx6KCExKSxzKHApfX0pfSxbWiwkLHEscyxKLEssZ10pO0UoKCk9PntyZXR1cm4oKT0+e2lmKFUxKCksTC5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEwuY3VycmVudCk7aWYoSC5jdXJyZW50IT1udWxsKXtpZihjbGVhclRpbWVvdXQoSC5jdXJyZW50KSxqLmN1cnJlbnQhPW51bGwpZihqLmN1cnJlbnQpfX19LFtVMSxmXSksRSgoKT0+e2lmKCFWKXJldHVybjtsZXQgYj0oKT0+UygpLG09KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilTKCl9LFkxPShBMSk9PntsZXQgcD1VLmN1cnJlbnQ7aWYoIXB8fHAucG9pbnRlcklkIT09QTEucG9pbnRlcklkKXJldHVybjtBMS5wcmV2ZW50RGVmYXVsdCgpLEYxKFM0KHAsQTEuY2xpZW50WCxBMS5jbGllbnRZLFopKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixiKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFkxLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixiLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsYiwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsbSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsYiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixZMSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsYiwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGIsITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLG0pfX0sW1osUyxWLEYxXSk7bGV0IGM9RCgoYik9PntsZXQgbT1VLmN1cnJlbnQ7aWYoIW18fG0ucG9pbnRlcklkIT09Yi5wb2ludGVySWQpcmV0dXJuO2IucHJldmVudERlZmF1bHQoKSxiLnN0b3BQcm9wYWdhdGlvbigpLFMoKX0sW1NdKSxyPUQoKGIpPT57aWYoYi5idXR0b24hPT0wKXJldHVybjtiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSxiLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoYi5wb2ludGVySWQpLEgxKGIucG9pbnRlcklkLGIuY2xpZW50WCxiLmNsaWVudFkpfSxbSDFdKSxlPUQoKGIpPT57bGV0IG09VS5jdXJyZW50O2lmKCFtfHxtLnBvaW50ZXJJZCE9PWIucG9pbnRlcklkKXJldHVybjtiLnByZXZlbnREZWZhdWx0KCksRjEoUzQobSxiLmNsaWVudFgsYi5jbGllbnRZLFopKX0sW1osRjFdKSxEMT1EKChiKT0+e2xldCBtPWIua2V5PT09IkFycm93UmlnaHQifHxiLmtleT09PSJBcnJvd0Rvd24iPzE6Yi5rZXk9PT0iQXJyb3dMZWZ0Inx8Yi5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihtPT09MClyZXR1cm47Yi5wcmV2ZW50RGVmYXVsdCgpLFUxKCk7bGV0IFkxPWIuc2hpZnRLZXk/ODA6MjQsQTE9cjIoSzUoSTErbSpZMSwkLEssSixaKSk7ZyhBMSkscyhBMSl9LFtaLFUxLEkxLCQscyxKLEssZ10pO3JldHVybntoYW5kbGVSZWY6UCx3aWR0aDpvLGNvbW1pdHRlZFdpZHRoOkkxLG1pbldpZHRoOnExLG1heFdpZHRoOloxLGlzUmVzaXppbmc6Vixpc0luZXJ0aWE6QixyZWR1Y2VkTW90aW9uOnEsaGFuZGxlSG92ZXJlZDpHLGhhbmRsZUFjdGl2ZTpHfHxWfHxCLHNldEhhbmRsZUhvdmVyZWQ6QyxvblBvaW50ZXJEb3duOnIsb25Qb2ludGVyTW92ZTplLG9uUG9pbnRlckVuZDpjLG9uS2V5RG93bjpEMX19ZnVuY3Rpb24gUzQoJCxLLEosWil7bGV0IFg9Sy0kLnN0YXJ0WCxZPShKLSQuc3RhcnRZKSpaO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKFgpPj1NYXRoLmFicyhZKT9YOlkpfWZ1bmN0aW9uIFI0KCl7bGV0ICQ9SShuZXcgTWFwKSxLPUkobmV3IE1hcCksSj1EKChWKT0+e2xldCBOPUsuY3VycmVudC5nZXQoVik7aWYoTiljbGVhclRpbWVvdXQoTik7Sy5jdXJyZW50LmRlbGV0ZShWKX0sW10pLFo9RCgoVixOPTEvMCk9PntjMC5jdXN0b20oKCk9PlEodTYse3RvYXN0OlZ9KSx7aWQ6Vi5pZCxkdXJhdGlvbjpOLHVuc3R5bGVkOiEwfSl9LFtdKSxYPUQoKFYsTik9PntsZXQgQj1jcnlwdG8ucmFuZG9tVVVJRCgpLHo9e2lkOkIsbmFtZTpWLGtpbmQ6TixzdGF0dXM6InVwbG9hZGluZyIscHJvZ3Jlc3M6MH07cmV0dXJuICQuY3VycmVudC5zZXQoQix6KSxaKHopLEJ9LFtaXSksWT1EKChWLE4pPT57bGV0IEI9JC5jdXJyZW50LmdldChWKTtpZighQilyZXR1cm47SihWKTtsZXQgej17Li4uQiwuLi5OfTtpZigkLmN1cnJlbnQuc2V0KFYseiksWih6LE4uc3RhdHVzPT09InN1Y2Nlc3MifHxOLnN0YXR1cz09PSJlcnJvciI/MzAwMDoxLzApLE4uc3RhdHVzPT09InN1Y2Nlc3MifHxOLnN0YXR1cz09PSJlcnJvciIpe2xldCBHPXNldFRpbWVvdXQoKCk9PnskLmN1cnJlbnQuZGVsZXRlKFYpLEsuY3VycmVudC5kZWxldGUoVil9LDMwMDApO0suY3VycmVudC5zZXQoVixHKX19LFtKLFpdKSxxPUQoKFYsTik9PntsZXQgQj0kLmN1cnJlbnQuZ2V0KFYpO2lmKCFCKXJldHVybjtsZXQgej17Li4uQixwcm9ncmVzczpOfTskLmN1cnJlbnQuc2V0KFYseiksWih6KX0sW1pdKTtyZXR1cm57YWRkOlgsdXBkYXRlOlksc2V0UHJvZ3Jlc3M6cX19ZnVuY3Rpb24gdjQoJCxLKXtsZXRbSixaXT1NKFtdKSxbWCxZXT1NKG51bGwpLFtxLFZdPU0oITEpLE49RChhc3luYygpPT57aWYoISQpcmV0dXJuO1YoITApLFkobnVsbCk7dHJ5e2xldCBCPWF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSx6PWF3YWl0IEIuanNvbigpO2lmKCFCLm9rfHx6LmVycm9yKXRocm93IEVycm9yKHouZXJyb3J8fCJGYWlsZWQgdG8gbGlzdCBXZWJLaXQgdGFyZ2V0cyIpO2xldCBHPXR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LmxvY2F0aW9uLEM9ei50YXJnZXRzPz9bXTtaKEc/Qy5tYXAoKFUpPT5NNChVLEcpKTpDKX1jYXRjaChCKXtZKEIgaW5zdGFuY2VvZiBFcnJvcj9CLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e1YoITEpfX0sWyRdKTtyZXR1cm4gRSgoKT0+e2lmKCFLKXJldHVybjtOKCk7bGV0IEI9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgTigpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKEIpfSxbSyxOXSkse3RhcmdldHM6SixlcnJvcjpYLGxvYWRpbmc6cSxyZWZyZXNoOk59fXZhciBlSj02MCwkUT0xMDAwO2Z1bmN0aW9uIGo0KCQsSyxKLFo9ZUope2xldFtYLFldPU0obnVsbCksW3EsVl09TSgwKSxbTixCXT1NKFopLFt6LEddPU0oMCk7RSgoKT0+e2lmKCFLfHwhJClyZXR1cm47bGV0IEg9ITEsUD0kLmluY2x1ZGVzKCI/Iik/IiYiOiI/Iix5PWFzeW5jKCk9Pnt0cnl7bGV0IFQ9YXdhaXQoYXdhaXQgZmV0Y2goYCR7JH0ke1B9bGltaXQ9JHtOfSZvZmZzZXQ9MGAse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKEgpcmV0dXJuO2lmKFkoVC5kZXZpY2VzPz9bXSksdHlwZW9mIFQudG90YWw9PT0ibnVtYmVyIilWKFQudG90YWwpfWNhdGNoe2lmKCFIKVkoW10pfX07eSgpO2xldCBXPXNldEludGVydmFsKHksSj83NTA6MzAwMCk7cmV0dXJuKCk9PntIPSEwLGNsZWFySW50ZXJ2YWwoVyl9fSxbJCxLLHosSixOXSk7bGV0IEM9RCgoKT0+RygoSCk9PkgrMSksW10pLFU9RCgoKT0+QigoSCk9PkgrWiksW1pdKSxGPUQoKCk9PkIoJFEpLFtdKSxMPUQoKCk9PkIoWiksW1pdKSxrPXE+KFg/Lmxlbmd0aD8/MCk7cmV0dXJue2RldmljZXM6WCx0b3RhbDpxLHJlZnJlc2g6Qyxsb2FkTW9yZTpVLGxvYWRBbGw6RixyZXNldFBhZ2U6TCxoYXNNb3JlOmt9fWZ1bmN0aW9uIEtRKCQsSyl7cmV0dXJuICQud2lkdGg9PT1LLndpZHRoJiYkLmhlaWdodD09PUsuaGVpZ2h0fHwkLndpZHRoPT09Sy5oZWlnaHQmJiQuaGVpZ2h0PT09Sy53aWR0aH1mdW5jdGlvbiBnNCgkLEssSil7aWYoISQ/Lmxlbmd0aHx8IShLPjApfHwhKEo+MCkpcmV0dXJuIG51bGw7bGV0IFo9e3dpZHRoOkssaGVpZ2h0Okp9O3JldHVybiAkLmZpbmQoKFgpPT5LUShYLFopKT8/bnVsbH1mdW5jdGlvbiBoNCgkKXtyZXR1cm4gJD09PSJpbm5lciI/InByaW1hcnktMSI6JD09PSJjb3ZlciI/InByaW1hcnkiOnZvaWQgMH12YXIgSzM9e3N0cmVhbWVkOiExLGZlbGxCYWNrOiExfTtmdW5jdGlvbiBmNCgkLEspe3N3aXRjaChLKXtjYXNlImZyYW1lIjpyZXR1cm4gJC5zdHJlYW1lZD8kOnsuLi4kLHN0cmVhbWVkOiEwfTtjYXNlInRpbWVvdXQiOnJldHVybiAkLnN0cmVhbWVkfHwkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UiZXJyb3IiOnJldHVybiAkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UicmVzZXQiOnJldHVybiBLM319dmFyIG00PTQwMDA7dmFyIEpRPXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiBwNCgkKXtyZXR1cm4gSlFbJF0/P251bGx9dmFyIEozPTMyMCx1ND03NjAsUTM9MzAwO3ZhciBRUT1uZXcgU2V0KFsiMCIsIm9mZiIsImZhbHNlIiwiaGlkZSIsImJhcmUiXSksWlE9bmV3IFNldChbIjEiLCJvbiIsInRydWUiLCJzaG93Il0pO2Z1bmN0aW9uIFhRKCQpe2lmKCQ9PW51bGwpcmV0dXJuIG51bGw7bGV0IEo9KHR5cGVvZiAkPT09InN0cmluZyI/bmV3IFVSTFNlYXJjaFBhcmFtcygkLnN0YXJ0c1dpdGgoIj8iKT8kLnNsaWNlKDEpOiQpOiQpLmdldCgiY2hyb21lIik7aWYoSj09bnVsbClyZXR1cm4gbnVsbDtsZXQgWj1KLnRyaW0oKS50b0xvd2VyQ2FzZSgpO2lmKFFRLmhhcyhaKSlyZXR1cm4hMDtpZihaUS5oYXMoWikpcmV0dXJuITE7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbDQoe3NlYXJjaDokLHN0b3JhZ2U6S309e30pe2xldCBKPVhRKCQpO2lmKEohPW51bGwpcmV0dXJuIEo7dHJ5e3JldHVybiBLPy5nZXRJdGVtKCJzZXJ2ZS1zaW06Y2hyb21lIik9PT0iaGlkZGVuIn1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gZDQoJCx7c3RvcmFnZTpLLGxvY2F0aW9uOkoscmVwbGFjZVN0YXRlOlp9PXt9KXt0cnl7Sz8uc2V0SXRlbSgic2VydmUtc2ltOmNocm9tZSIsJD8iaGlkZGVuIjoic2hvd24iKX1jYXRjaHt9aWYoIUp8fCFaKXJldHVybjt0cnl7bGV0IFg9bmV3IFVSTChKLmhyZWYpLFk9WC5zZWFyY2g7aWYoJClYLnNlYXJjaFBhcmFtcy5zZXQoImNocm9tZSIsIjAiKTtlbHNlIFguc2VhcmNoUGFyYW1zLmRlbGV0ZSgiY2hyb21lIik7aWYoWC5zZWFyY2g9PT1ZKXJldHVybjtaKGAke1gucGF0aG5hbWV9JHtYLnNlYXJjaH0ke1guaGFzaH1gKX1jYXRjaHt9fWZ1bmN0aW9uIGM0KHtoYXNDaHJvbWU6JCxpc0xhbmRzY2FwZTpLLGhpZGVDaHJvbWU6Sn0pe3JldHVybiAkJiYhSyYmIUp9ZnVuY3Rpb24gcjQoe2hhc0Nocm9tZTokLGlzTGFuZHNjYXBlOkt9KXtyZXR1cm4gJCYmIUt9ZnVuY3Rpb24gWjMoJCxLKXtpZighJClyZXR1cm4gbnVsbDtpZighJC5kZXZpY2UpcmV0dXJuICQ7aWYoISQucHJveHlIZWxwZXJzKXJldHVybiAkO2xldCBaPWAkeyQuYmFzZVBhdGg9PT0iLyI/IiI6KCQuYmFzZVBhdGg/PyIiKS5yZXBsYWNlKC9cLyskLywiIil9L2hlbHBlci8ke2VuY29kZVVSSUNvbXBvbmVudCgkLmRldmljZSl9YCxYPWAke0sucHJvdG9jb2x9Ly8ke0suaG9zdH1gLFk9Sy5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IjtyZXR1cm57Li4uJCx1cmw6YCR7WH0ke1p9YCxzdHJlYW1Vcmw6YCR7WH0ke1p9L3N0cmVhbS5tanBlZ2Asd3NVcmw6YCR7WX0vLyR7Sy5ob3N0fSR7Wn0vd3NgfX1mdW5jdGlvbiBYMygkKXtpZigkPy5pbmNsdWRlcygiZGV2dG9vbHMiKSlyZXR1cm4iZGV2dG9vbHMiO2lmKCQ/LmluY2x1ZGVzKCJ0b29scyIpKXJldHVybiJ0b29scyI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gWVEoJCxLKXtsZXQgSj0kLmluY2x1ZGVzKCI/Iik/IiYiOiI/IjtyZXR1cm5gJHskfSR7Sn1kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoSyl9YH1hc3luYyBmdW5jdGlvbiBvNCgkLEssSj17fSl7bGV0IFg9YXdhaXQoSi5mZXRjaEltcGw/P2ZldGNoKShZUSgkLEspLHtjYWNoZToibm8tc3RvcmUiLHNpZ25hbDpKLnNpZ25hbH0pO2lmKCFYLm9rKXJldHVybiBudWxsO2xldCBZPWUwKGF3YWl0IFguanNvbigpKTtyZXR1cm4gWT8uZGV2aWNlPT09Sz9ZOm51bGx9ZnVuY3Rpb24gbjQoJCxLLEope2xldCBaPSEwO3JldHVybiAkLm9ubWVzc2FnZT0oWCk9PntpZighWilyZXR1cm47dHJ5e2xldCBZPWUwKEpTT04ucGFyc2UoWC5kYXRhKSk7aWYoWSYmSyYmWS5kZXZpY2UhPT1LKXJldHVybjtKKFkpfWNhdGNoe319LCgpPT57Wj0hMSwkLmNsb3NlKCl9fWZ1bmN0aW9uIGk0KCQsSyl7bGV0IEo9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEspKSxaPW5ldyBVaW50OEFycmF5KDErSi5sZW5ndGgpO3JldHVybiBaWzBdPSQsWi5zZXQoSiwxKSxafWZ1bmN0aW9uIHFRKCQsSyxKPTMyKXtsZXQgWj1bLi4uJCxLXTtyZXR1cm4gWi5sZW5ndGg+Sj9aLnNsaWNlKFoubGVuZ3RoLUopOlp9ZnVuY3Rpb24gWTMoJCxLLEo9RGF0ZS5ub3coKSxaPTE1MDApe2xldCBYPUsuZmlsdGVyKChZKT0+Si1ZLmNyZWF0ZWRBdDw9Wik7aWYoISR8fCQucmVhZHlTdGF0ZSE9PTEpcmV0dXJuIFg7Zm9yKGxldCBZIG9mIFgpJC5zZW5kKGk0KFkudGFnLFkucGF5bG9hZCkuYnVmZmVyKTtyZXR1cm5bXX1mdW5jdGlvbiBhNCgkLEssSixaLFg9RGF0ZS5ub3coKSl7bGV0IFk9WTMoJCxLLFgpO2lmKCQ/LnJlYWR5U3RhdGU9PT0xKXJldHVybiAkLnNlbmQoaTQoSixaKS5idWZmZXIpLFk7cmV0dXJuIHFRKFkse3RhZzpKLHBheWxvYWQ6WixjcmVhdGVkQXQ6WH0pfWZ1bmN0aW9uIHM0KCQpe3JldHVybiAkP2AkeyQuZGV2aWNlfTokeyQucGlkfTokeyQuc3RyZWFtVXJsfTokeyQud3NVcmx9YDoiIn1mdW5jdGlvbiBWUSgpe2xldCAkPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmluaXRpYWxTdGF0ZSxLPVgzKCQ/LnBhbmVzKSxbSixaXT1NKCgpPT5aMyhlMCh3aW5kb3cuX19TSU1fUFJFVklFV19fKSx3aW5kb3cubG9jYXRpb24pKSxbWCxZXT1NKCExKSxbcSxWXT1NKCgpPT57bGV0IHA9ZTAod2luZG93Ll9fU0lNX1BSRVZJRVdfXyk7aWYocClyZXR1cm4gcC5kZXZpY2U7cmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJkZXZpY2UiKX0pLFtOLEJdPU0oITEpLFt6LEddPU0oSz09PSJkZXZ0b29scyIpLFtDLFVdPU0oKCk9PntpZigkPy5wYW5lcylyZXR1cm4gJC5wYW5lcy5pbmNsdWRlcygiZGV2aWNlcyIpO2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49UTMrNTIwfSkse3dpZHRoOkYsb25Qb2ludGVyRG93bjpMfT1zMigic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIixRMywyNDAsNjQwLCJyaWdodCIpLFtrLEhdPU0obnVsbCksUD13aW5kb3cuX19TSU1fUFJFVklFV19fLHk9UD8uZ3JpZEFwaUVuZHBvaW50Pz9tMSgiZ3JpZC9hcGkiKSxXPVA/LmdyaWRTdGFydEVuZHBvaW50Pz9tMSgiZ3JpZC9hcGkvc3RhcnQiKSxBPVA/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9tMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbVCxpXT1NKHt9KSxbdixqXT1NKHt9KSxbZCxaMV09TSh7fSksW3ExLG9dPU0oKCk9Pm5ldyBTZXQpLEkxPU9iamVjdC52YWx1ZXMoVCkuc29tZShCb29sZWFuKXx8T2JqZWN0LnZhbHVlcyh2KS5zb21lKEJvb2xlYW4pLHtkZXZpY2VzOmcsdG90YWw6ZixyZWZyZXNoOnMsbG9hZE1vcmU6azEsbG9hZEFsbDpVMSxyZXNldFBhZ2U6VjEsaGFzTW9yZTpGMX09ajQoeSwhMCxJMSksSDE9ISEocSYmZz8uZmluZCgocCk9PnAuZGV2aWNlPT09cSk/LmhlbHBlciksUz1EKChwKT0+e1YocCk7dHJ5e2xldCBuPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO24uc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixwKSx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwiIixuLnRvU3RyaW5nKCkpfWNhdGNoe319LFtdKSxjPUQoYXN5bmMocCxuPTIwMDAwKT0+e2xldCBHMT1EYXRlLm5vdygpK247d2hpbGUoRGF0ZS5ub3coKTxHMSl7dHJ5e2lmKCgoYXdhaXQoYXdhaXQgZmV0Y2goeSx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5zb21lKChkMSk9PmQxLmRldmljZT09PXAmJmQxLmhlbHBlcikpcmV0dXJuITB9Y2F0Y2h7fWF3YWl0IG5ldyBQcm9taXNlKChQMSk9PnNldFRpbWVvdXQoUDEsNDAwKSl9cmV0dXJuITF9LFt5XSkscj1EKGFzeW5jKHApPT57aSgobik9Pih7Li4ubixbcF06ITB9KSksWjEoKG4pPT4oey4uLm4sW3BdOm51bGx9KSk7dHJ5e2xldCBuPWF3YWl0IGZldGNoKFcse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOnB9KX0pLEcxPWF3YWl0IG4uanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighbi5va3x8IUcxLm9rKXtaMSgoUDEpPT4oey4uLlAxLFtwXTpHMS5lcnJvcj8/YEhUVFAgJHtuLnN0YXR1c31gfSkpO3JldHVybn1vKChQMSk9PlAxLmhhcyhwKT9QMTpuZXcgU2V0KFAxKS5hZGQocCkpLGF3YWl0IGMocCl9Y2F0Y2gobil7WjEoKEcxKT0+KHsuLi5HMSxbcF06bj8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e2koKG4pPT4oey4uLm4sW3BdOiExfSkpLHMoKX19LFtXLGMsc10pLGU9RChhc3luYyhwKT0+e2ooKG4pPT4oey4uLm4sW3BdOiEwfSkpLFoxKChuKT0+KHsuLi5uLFtwXTpudWxsfSkpO3RyeXtsZXQgbj1hd2FpdCBmZXRjaChBLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpwfSl9KSxHMT1hd2FpdCBuLmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIW4ub2t8fCFHMS5vaylaMSgoUDEpPT4oey4uLlAxLFtwXTpHMS5lcnJvcj8/YEhUVFAgJHtuLnN0YXR1c31gfSkpfWNhdGNoKG4pe1oxKChHMSk9Pih7Li4uRzEsW3BdOm4/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtqKChuKT0+KHsuLi5uLFtwXTohMX0pKSxzKCl9fSxbQSxzXSk7RSgoKT0+e2lmKHEpcmV0dXJuO2lmKEo/LmRldmljZSl7VihKLmRldmljZSk7cmV0dXJufWlmKCFnfHxnLmxlbmd0aD09PTApcmV0dXJuO2xldCBwPWcuZmluZCgobik9Pm4uaGVscGVyKT8/Zy5maW5kKChuKT0+bi5zdGF0ZT09PSJCb290ZWQiKT8/Z1swXTtpZihwKVYocC5kZXZpY2UpfSxbcSxKPy5kZXZpY2UsZ10pO2xldCBEMT1EKChwKT0+e1ooKG4pPT57aWYocD1aMyhlMChwKSx3aW5kb3cubG9jYXRpb24pLHM0KG4pPT09czQocCkpcmV0dXJuIG47aWYocCl3aW5kb3cuX19TSU1fUFJFVklFV19fPXA7ZWxzZSBpZih3aW5kb3cuX19TSU1fUFJFVklFV19fKXtsZXR7YmFzZVBhdGg6RzEsZXhlY1Rva2VuOlAxfT13aW5kb3cuX19TSU1fUFJFVklFV19fO3dpbmRvdy5fX1NJTV9QUkVWSUVXX189e2Jhc2VQYXRoOkcxLGV4ZWNUb2tlbjpQMX19cmV0dXJuIHB9KX0sW10pO0UoKCk9PntsZXQgcD1gJHttMSgiYXBpL2V2ZW50cyIpfSR7cT9gP2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChxKX1gOiIifWAsbj0kNShwKTtyZXR1cm4gbjQobixxLEQxKX0sW3EsSDEsRDFdKSxFKCgpPT57aWYoIXF8fCFIMXx8Sj8uZGV2aWNlPT09cSlyZXR1cm47bGV0IHA9bmV3IEFib3J0Q29udHJvbGxlcixuPSExLEcxPW51bGwsUDE9NzUwLFgwPWFzeW5jKCk9Pnt0cnl7bGV0IGQxPWF3YWl0IG80KG0xKCJhcGkiKSxxLHtzaWduYWw6cC5zaWduYWx9KTtpZighbiYmZDEpe0QxKGQxKTtyZXR1cm59fWNhdGNoe31pZighbilHMT1zZXRUaW1lb3V0KFgwLFAxKSxQMT1NYXRoLm1pbihQMSoyLDUwMDApfTtyZXR1cm4gWDAoKSwoKT0+e2lmKG49ITAscC5hYm9ydCgpLEcxKWNsZWFyVGltZW91dChHMSl9fSxbcSxIMSxKPy5kZXZpY2UsRDFdKTtsZXQgYj1xPz9KPy5kZXZpY2U/P251bGwsbT1nPy5maW5kKChwKT0+cC5kZXZpY2U9PT1iKT8/bnVsbCxZMT0hIUomJkouZGV2aWNlPT09YixBMTtpZihZMSYmSilBMT1RKEdRLHtjb25maWc6SixkZXZpY2VOYW1lOm0/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTptPy5ydW50aW1lPz9udWxsLGNocm9tZTptPy5jaHJvbWU/P251bGwsZGlzcGxheXM6bT8uZGlzcGxheXM/P251bGwscHJlZmVyTWpwZWc6cTEuaGFzKEouZGV2aWNlKSxheE92ZXJsYXlFbmFibGVkOk4sc2V0QXhPdmVybGF5RW5hYmxlZDpCLGRldnRvb2xzT3Blbjp6LHNldERldnRvb2xzT3BlbjpHLGdyaWRPcGVuOkMsc2V0R3JpZE9wZW46VSxncmlkUGFuZWxXaWR0aDpGLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDprLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpILHN0cmVhbWluZzpYLHNldFN0cmVhbWluZzpZfSk7ZWxzZXtsZXQgcD1DPzEyK0YrMjQ6MjQ7QTE9USgiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OnAscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjptP1EoWTYse25hbWU6bS5uYW1lLHJ1bnRpbWU6bS5ydW50aW1lLGNocm9tZTptLmNocm9tZT8/bnVsbCxwbGFjZWhvbGRlckFzc2V0Om0ucGxhY2Vob2xkZXJBc3NldD8/bnVsbCxidXN5OiEhbS5oZWxwZXJ8fCEhVFttLmRldmljZV0sYnVzeUxhYmVsOm0uaGVscGVyPyJDb25uZWN0aW5n4oCmIjoiU3RhcnRpbmfigKYiLGVycm9yOmRbbS5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PnIobS5kZXZpY2UpfSk6USgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W1EoImgxIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxOHB4XSBtLTAgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46Ik5vIHNpbXVsYXRvcnMgYXZhaWxhYmxlIn0pLFEoInAiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNTUgdGV4dC1bMTRweF0gbWF4LXctMTIwIixjaGlsZHJlbjpbIkNyZWF0ZSBhIHNpbXVsYXRvciBpbiBYY29kZSwgb3Igc3RhcnQgb25lIHdpdGgiLCIgIixRKCJjb2RlIix7Y2xhc3NOYW1lOiJiZy1bIzIyMl0gcHgtMS41IHB5LTAuNSByb3VuZGVkIHRleHQtWzEzcHhdIixjaGlsZHJlbjoiYnVueCBzZXJ2ZS1zaW0gLS1kZXRhY2gifSksIi4iXX0pXX0pfSl9cmV0dXJuIFEoSjEse2NoaWxkcmVuOltBMSxRKHA2LHt9KSxRKE42LHtvcGVuOkMsb25DbG9zZTooKT0+VSghMSksd2lkdGg6RixzaWRlOiJsZWZ0IixkZXZpY2VzOmcsdG90YWw6ZixoYXNNb3JlOkYxLG9uTG9hZE1vcmU6azEsb25Mb2FkQWxsOlUxLG9uUmVzZXRQYWdlOlYxLHNlbGVjdGVkVWRpZDpiLG9uU2VsZWN0OlMsc3RhcnRpbmc6VCxzaHV0dGluZ0Rvd246dixvblNodXRkb3duOmV9KSxRKGwyLHtwYW5lbFdpZHRoOkYsdmlzaWJsZTpDLG9uUG9pbnRlckRvd246TCxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHNpZGViYXIiLHNpZGU6ImxlZnQifSksUSgkNix7b3BlbjpDLG9uQ2xpY2s6KCk9PlUoITApfSldfSl9ZnVuY3Rpb24gR1Eoe2NvbmZpZzokLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOkosY2hyb21lOlosZGlzcGxheXM6WCxwcmVmZXJNanBlZzpZLGF4T3ZlcmxheUVuYWJsZWQ6cSxzZXRBeE92ZXJsYXlFbmFibGVkOlYsZGV2dG9vbHNPcGVuOk4sc2V0RGV2dG9vbHNPcGVuOkIsZ3JpZE9wZW46eixzZXRHcmlkT3BlbjpHLGdyaWRQYW5lbFdpZHRoOkMsc2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOlUsc2V0U2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkYsc3RyZWFtaW5nOkwsc2V0U3RyZWFtaW5nOmt9KXtsZXQgSD0kLmluaXRpYWxTdGF0ZSxQPVgzKEg/LnBhbmVzKTtFKCgpPT57ZG9jdW1lbnQudGl0bGU9Sz9gU2ltdWxhdG9yIC0gJHtLfWA6IlNpbXVsYXRvciBQcmV2aWV3In0sW0tdKTtsZXQgeT1iMChLKSxXPXY0KCQuZGV2dG9vbHNFbmRwb2ludD8/bTEoImRldnRvb2xzIiksTik7RSgoKT0+e2lmKCFOKXJldHVybjtpZihVJiZXLnRhcmdldHMuc29tZSgoeCk9PnguaWQ9PT1VKSlyZXR1cm47RihXLnRhcmdldHMubGVuZ3RoPT09MT9XLnRhcmdldHNbMF0uaWQ6bnVsbCl9LFtOLFcudGFyZ2V0cyxVLEZdKSxFKCgpPT57RihudWxsKX0sWyQuZGV2aWNlLEZdKTtsZXQgQT13NCgpLFtULGldPW4wKGY0LEszKSxbdl09TSgoKT0+bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImNvZGVjIik9PT0ibWpwZWciKSxbaixkXT1NKCgpPT53aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oZTgpPT09Im1qcGVnIj8ibWpwZWciOiJhdXRvIik7RSgoKT0+e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShlOCxqKX0sW2pdKTtsZXRbWjEscTFdPU0oKCk9Pmw0KHtzZWFyY2g6d2luZG93LmxvY2F0aW9uLnNlYXJjaCxzdG9yYWdlOndpbmRvdy5sb2NhbFN0b3JhZ2V9KSk7RSgoKT0+e2Q0KFoxLHtzdG9yYWdlOndpbmRvdy5sb2NhbFN0b3JhZ2UsbG9jYXRpb246d2luZG93LmxvY2F0aW9uLHJlcGxhY2VTdGF0ZTooeCk9PndpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCIiLHgpfSl9LFtaMV0pO2xldCBvPShYPy5sZW5ndGg/PzApPjEsZz0kLmNvZGVjIT09Im1qcGVnIiYmQS5zdXBwb3J0ZWQmJiFULmZlbGxCYWNrJiYhWSYmIXYmJmohPT0ibWpwZWciLGY9QTIob3x8Zz9udWxsOiQuc3RyZWFtVXJsKTtFKCgpPT57ayghMSksaSgicmVzZXQiKX0sWyQuc3RyZWFtVXJsLGtdKSxFKCgpPT57aWYoZyYmTClpKCJmcmFtZSIpfSxbZyxMXSksRSgoKT0+e2lmKCFnKXJldHVybjtsZXQgeD1zZXRUaW1lb3V0KCgpPT5pKCJ0aW1lb3V0IiksbTQpO3JldHVybigpPT5jbGVhclRpbWVvdXQoeCl9LFtnLCQuc3RyZWFtVXJsXSk7bGV0W3MsazFdPU0obnVsbCksW1UxLFYxXT1NKG51bGwpLFtGMSxIMV09TShudWxsKSxTPUYxLGM9VTE/P1M/P041KHksSykscj1nNChYLGMud2lkdGgsYy5oZWlnaHQpLGU9cj8uY2hyb21lPz9aLEQxPUQyKHksYyksYj16NSh5LGMpLG09XzIoYyksWTE9RzUoYyksQTE9WTE/WTEud2lkdGgvWTEuaGVpZ2h0OjEscD11MChjKSxuPSFvJiZjNCh7aGFzQ2hyb21lOiEhZSxpc0xhbmRzY2FwZTpwLGhpZGVDaHJvbWU6WjF9KSxHMT0hbyYmcjQoe2hhc0Nocm9tZTohIWUsaXNMYW5kc2NhcGU6cH0pLFAxPW4/ZS5mcmFtZS53aWR0aC9lLnNjcmVlbi53aWR0aDoxLFgwPXMmJnMud2lkdGg+MCYmcy5oZWlnaHQ+MD9zLndpZHRoL3MuaGVpZ2h0OjEuMTExMTExMTExMTExMTExMixkMT1vP01hdGgubWF4KGIscz8ud2lkdGg/PzApOmIqUDEsXzE9bz9YMDpuP2UuZnJhbWUud2lkdGgvZS5mcmFtZS5oZWlnaHQ6QTEscDE9bz9TdHJpbmcoWDApOm4/YCR7ZS5mcmFtZS53aWR0aH0gLyAke2UuZnJhbWUuaGVpZ2h0fWA6bSxCMD1JKG51bGwpLEswPUkoW10pO0UoKCk9PntsZXQgeD0hMSx0PW51bGwsYTE9bnVsbDtLMC5jdXJyZW50PVtdO2xldCB6MT0oKT0+e2lmKHh8fHQpcmV0dXJuO3Q9c2V0VGltZW91dCgoKT0+e3Q9bnVsbCxzMSgpfSwxMDAwKX0sczE9KCk9PntsZXQgWjA9bmV3IFdlYlNvY2tldCgkLndzVXJsKTtaMC5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsYTE9WjAsQjAuY3VycmVudD1aMCxaMC5vbm9wZW49KCk9PntLMC5jdXJyZW50PVkzKFowLEswLmN1cnJlbnQpfSxaMC5vbm1lc3NhZ2U9KHEyKT0+e2lmKCEocTIuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm47bGV0IFMwPW5ldyBVaW50OEFycmF5KHEyLmRhdGEpO2lmKFMwWzBdPT09MTMxKXt0cnl7azEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoUzAuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fXJldHVybn1pZihTMFswXT09PTE0KXt0cnl7aWYoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoUzAuc3ViYXJyYXkoMSkpKS5vaz09PSExKVUwKG51bGwpLGMwLmVycm9yKCJDb3VsZCBub3QgY2hhbmdlIHRoZSBzaW11bGF0b3IgZm9sZCBwb3NlLiIpfWNhdGNoe31yZXR1cm59aWYoUzAubGVuZ3RoPDF8fFMwWzBdIT09MTMwKXJldHVybjt0cnl7bGV0IHgwPUpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKFMwLnN1YmFycmF5KDEpKSk7aWYoeDAud2lkdGg8PTB8fHgwLmhlaWdodDw9MClyZXR1cm47SDEoKG8wKT0+bzAmJm8wLndpZHRoPT09eDAud2lkdGgmJm8wLmhlaWdodD09PXgwLmhlaWdodCYmbzAub3JpZW50YXRpb249PT14MC5vcmllbnRhdGlvbiYmbzAuaGluZ2VEZWdyZWVzPT09eDAuaGluZ2VEZWdyZWVzJiZvMC5kdW9WaWV3T3JpZW50YXRpb249PT14MC5kdW9WaWV3T3JpZW50YXRpb24/bzA6eDApfWNhdGNoe319LFowLm9uY2xvc2U9KCk9PntpZihCMC5jdXJyZW50PT09WjApQjAuY3VycmVudD1udWxsO3oxKCl9LFowLm9uZXJyb3I9KCk9PntaMC5jbG9zZSgpfX07cmV0dXJuIHMxKCksKCk9PntpZih4PSEwLHQpY2xlYXJUaW1lb3V0KHQpO2lmKEIwLmN1cnJlbnQ9PT1hMSlCMC5jdXJyZW50PW51bGw7YTE/LmNsb3NlKCl9fSxbJC53c1VybF0pO2xldCAkMT1EKCh4LHQpPT57SzAuY3VycmVudD1hNChCMC5jdXJyZW50LEswLmN1cnJlbnQseCx0KX0sW10pLG4xPUQoKHgpPT4kMSgzLHgpLFskMV0pLE8wPUQoKHgpPT4kMSg1LHgpLFskMV0pLHUxPUQoKHgpPT4kMSg0LHtidXR0b246eH0pLFskMV0pLFt0MSxVMF09TShudWxsKSxUMT1JKG51bGwpLGcxPUkobnVsbCksWTA9RCgoeCk9PntpZihVMCh4PT09Uz8uaGluZ2VEZWdyZWVzP251bGw6eCksZzEuY3VycmVudD14LFQxLmN1cnJlbnQpcmV0dXJuO1QxLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e1QxLmN1cnJlbnQ9bnVsbCwkMSgxNCx7aGluZ2U6ZzEuY3VycmVudH0pfSw1MCl9LFskMSxTPy5oaW5nZURlZ3JlZXNdKSxQMD1EKCh4KT0+e2lmKFQxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFQxLmN1cnJlbnQpO1QxLmN1cnJlbnQ9bnVsbCxVMChudWxsKSwkMSgxNCx7cG9zZTp4fSl9LFskMV0pO0UoKCk9PigpPT57aWYoVDEuY3VycmVudCljbGVhclRpbWVvdXQoVDEuY3VycmVudCl9LFtdKSxFKCgpPT57aWYoUz8uaGluZ2VEZWdyZWVzIT1udWxsKVUwKCh4KT0+eCE9bnVsbCYmTWF0aC5hYnMoeC1TLmhpbmdlRGVncmVlcyk8MC42P251bGw6eCl9LFtTPy5oaW5nZURlZ3JlZXNdKTtsZXQgZTE9dDE/P1M/LmhpbmdlRGVncmVlcz8/KHI/LnJvbGU9PT0iaW5uZXIiPzE4MDowKSxXMD1EKCh7cGhhc2U6eCxidXR0b246dH0pPT57aWYodC51c2FnZVBhZ2U9PW51bGx8fHQudXNhZ2U9PW51bGwpcmV0dXJuOyQxKDQse2J1dHRvbjp0Lm5hbWUscGFnZTp0LnVzYWdlUGFnZSx1c2FnZTp0LnVzYWdlLHBoYXNlOnh9KX0sWyQxXSksdjA9RCgoeCx0KT0+eyQxKDQse2J1dHRvbjp4Lm5hbWUscGFnZTp4LnBhZ2UsdXNhZ2U6eC51c2FnZSxwaGFzZTp0fSl9LFskMV0pLF8wPUQoKHgpPT4kMSgxMCx7ZGVsdGE6eH0pLFskMV0pLEowPUQoKHgpPT4kMSgxMSx4KSxbJDFdKSxsMT1EKCh4KT0+e1YxKCh0KT0+dCYmdC53aWR0aD09PXgud2lkdGgmJnQuaGVpZ2h0PT09eC5oZWlnaHQmJnQub3JpZW50YXRpb249PT14Lm9yaWVudGF0aW9uP3Q6eCl9LFtdKSx2MT1EKCh4KT0+eyQxKDcse29yaWVudGF0aW9uOnh9KX0sWyQxXSksaDE9Yy5kdW9WaWV3T3JpZW50YXRpb24/P2Mub3JpZW50YXRpb24/PyJwb3J0cmFpdCIsaTE9eSE9PSJ3YXRjaCImJnkhPT0idmlzaW9uIixGMD1EKCh4KT0+e2lmKCFpMSlyZXR1cm47bGV0IHQ9KHg9PT0ibGVmdCI/aTU6azgpW2gxXTt2MSh0KX0sW2kxLGgxLHYxXSk7RSgoKT0+e1YxKG51bGwpLEgxKG51bGwpLGsxKG51bGwpLFUwKG51bGwpfSxbJC5zdHJlYW1VcmxdKSxFKCgpPT57bGV0IHg9UztpZigheClyZXR1cm47VjEoKHQpPT50JiZ0LndpZHRoPT09eC53aWR0aCYmdC5oZWlnaHQ9PT14LmhlaWdodCYmdC5vcmllbnRhdGlvbj09PXgub3JpZW50YXRpb24/dDpudWxsKX0sW1MsUz8ud2lkdGgsUz8uaGVpZ2h0LFM/Lm9yaWVudGF0aW9uXSk7bGV0IEEwPUQoKHgsdCk9PnskMSg2LHt0eXBlOngsdXNhZ2U6dH0pfSxbJDFdKSxbTjAsWDFdPU0obnVsbCksW18sbF09TSgoKT0+e2lmKEg/LnBhbmVzKXJldHVybiBQPT09InRvb2xzIjtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtsZXQgeD1OdW1iZXIod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiKSksdD1OdW1iZXIuaXNGaW5pdGUoeCkmJng+MD94OkozO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49dCs0ODB9KSx7d2lkdGg6SzEsb25Qb2ludGVyRG93bjpPMX09czIoInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIsSjMsMjQwLDcyMCkse3dpZHRoOkIxLG9uUG9pbnRlckRvd246TjF9PXMyKCJzZXJ2ZS1zaW06ZGV2dG9vbHMtcGFuZWwtd2lkdGgiLHU0LDQyMCwxNDAwKSxbYjEsYzFdPU0oKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lcldpZHRoOjApLFtyMSxMMF09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO0UoKCk9PntsZXQgeD0oKT0+e2MxKHdpbmRvdy5pbm5lcldpZHRoKSxMMCh3aW5kb3cuaW5uZXJIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIseCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHgpfSxbXSksRSgoKT0+e2xldCB4PSQ1KCQuYXBwU3RhdGVFbmRwb2ludD8/bTEoImFwcHN0YXRlIikpLHQ9bnVsbDtyZXR1cm4geC5vbm1lc3NhZ2U9KGExKT0+e3RyeXtsZXQgejE9SlNPTi5wYXJzZShhMS5kYXRhKTtpZih0KWNsZWFyVGltZW91dCh0KTtsZXQgczE9ejE/LmlzUmVhY3ROYXRpdmU/MDo2MDA7dD1zZXRUaW1lb3V0KCgpPT5YMSh6MSksczEpfWNhdGNoe319LCgpPT57aWYodCljbGVhclRpbWVvdXQodCk7eC5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBDMD1EKGFzeW5jKCk9PntBMCgiZG93biIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKCh0KT0+c2V0VGltZW91dCh0LDMwKSksQTAoInVwIiwyMSl9LFtBMF0pLHc9SShudWxsKSxbTyxSXT1NKDApLFt1LFExXT1NKDApO0UoKCk9PntsZXQgeD13LmN1cnJlbnQ7aWYoIXh8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCB0PW5ldyBSZXNpemVPYnNlcnZlcigoYTEpPT57bGV0IHoxPWExWzBdPy5jb250ZW50UmVjdDtSKHoxPy53aWR0aD8/MCksUTEoejE/LmhlaWdodD8/MCl9KTtyZXR1cm4gdC5vYnNlcnZlKHgpLCgpPT50LmRpc2Nvbm5lY3QoKX0sW10pO2xldFtMMSxXMV09TSghMCkseTE9SSghMCk7eTEuY3VycmVudD1MMTtsZXQgJDA9SShuZXcgU2V0KTtFKCgpPT57bGV0IHg9KHQpPT57bGV0IGExPSEhdy5jdXJyZW50Py5jb250YWlucyh0LnRhcmdldCk7VzEoYTEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHgsITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIseCwhMCl9LFtdKSxFKCgpPT57aWYoTDEpcmV0dXJuO2xldCB4PSQwLmN1cnJlbnQ7aWYoeC5zaXplPT09MClyZXR1cm47Zm9yKGxldCB0IG9mIHgpJDEoNix7dHlwZToidXAiLHVzYWdlOnR9KTt4LmNsZWFyKCl9LFtMMSwkMV0pLEUoKCk9PntsZXQgeD0oejEsczEpPT57aWYoIXkxLmN1cnJlbnQpcmV0dXJuO2lmKHoxLmNvZGU9PT0iS2V5SCImJnoxLm1ldGFLZXkmJnoxLnNoaWZ0S2V5KXtpZih6MS5wcmV2ZW50RGVmYXVsdCgpLHMxPT09ImRvd24iJiYhejEucmVwZWF0KSQxKDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoKHoxLmNvZGU9PT0iQXJyb3dMZWZ0Inx8ejEuY29kZT09PSJBcnJvd1JpZ2h0IikmJnoxLm1ldGFLZXkmJiF6MS5zaGlmdEtleSYmIXoxLmFsdEtleSYmIXoxLmN0cmxLZXkpe2lmKHoxLnByZXZlbnREZWZhdWx0KCksczE9PT0iZG93biImJiF6MS5yZXBlYXQpRjAoejEuY29kZT09PSJBcnJvd0xlZnQiPyJsZWZ0IjoicmlnaHQiKTtyZXR1cm59aWYoejEuY29kZT09PSJLZXlBIiYmejEubWV0YUtleSYmejEuc2hpZnRLZXkpe2lmKHoxLnByZXZlbnREZWZhdWx0KCksczE9PT0iZG93biImJiF6MS5yZXBlYXQpRTEoYHhjcnVuIHNpbWN0bCB1aSAkeyQuZGV2aWNlfSBhcHBlYXJhbmNlYCkudGhlbigocTIpPT57bGV0IFMwPXEyLnN0ZG91dC50cmltKCk9PT0iZGFyayI/ImxpZ2h0IjoiZGFyayI7cmV0dXJuIEUxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZSAke1MwfWApfSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm59aWYoejEuY29kZT09PSJLZXlLIiYmejEubWV0YUtleSYmIXoxLnNoaWZ0S2V5JiYhejEuYWx0S2V5JiYhejEuY3RybEtleSl7aWYoejEucHJldmVudERlZmF1bHQoKSxzMT09PSJkb3duIiYmIXoxLnJlcGVhdCkkMSgxMix7fSk7cmV0dXJufWxldCBaMD1wNCh6MS5jb2RlKTtpZihaMD09bnVsbClyZXR1cm47aWYoejEucHJldmVudERlZmF1bHQoKSxzMT09PSJkb3duIikkMC5jdXJyZW50LmFkZChaMCk7ZWxzZSAkMC5jdXJyZW50LmRlbGV0ZShaMCk7JDEoNix7dHlwZTpzMSx1c2FnZTpaMH0pfSx0PSh6MSk9PngoejEsImRvd24iKSxhMT0oejEpPT54KHoxLCJ1cCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixhMSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixhMSl9fSxbJDEsJC5kZXZpY2UsRjBdKTtsZXQgRDA9UjQoKSxUMD15NCgkLmRldmljZSxoNChyPy5yb2xlPz9zPy5wYW5lbCkpLFo1PVQ0KHtleGVjOkUxLHVkaWQ6JC5kZXZpY2UsZW5hYmxlZDpMLG9uVXBsb2FkU3RhcnQ6RDAuYWRkLG9uVXBsb2FkUHJvZ3Jlc3M6RDAuc2V0UHJvZ3Jlc3Msb25VcGxvYWRFbmQ6KHgsdCxhMSk9PkQwLnVwZGF0ZSh4LHtzdGF0dXM6dD8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOmExfSksb25VbnN1cHBvcnRlZDooeCk9PntsZXQgdD1EMC5hZGQoeC5uYW1lLCJtZWRpYSIpO0QwLnVwZGF0ZSh0LHtzdGF0dXM6ImVycm9yIixtZXNzYWdlOmBVbnN1cHBvcnRlZDogJHt4LnR5cGV8fEQ1KHgpfWB9KX0sb25Ib3N0UGF0aERyb3A6VDAuZGlzbWlzc30pLFEwPXg0KHtkZWZhdWx0V2lkdGg6ZDEsdmlld3BvcnRXaWR0aDpiMSx2aWV3cG9ydEhlaWdodDpyMSxhc3BlY3RSYXRpbzpfMSxpbml0aWFsRml0Om98fEg/LmZpdD09PSEwLG9uU3RhcnQ6KCk9PlcxKCExKX0pLGowPU4/QjE6Xz9LMTowLGcwPW8/TzUoZDEsTWF0aC5tYXgoMjQwLGIxLSh6P0M6MCktajAtOTYpLHIxLF8xKTpRMC53aWR0aCx0ND0xMixxMz0yNCxlND1PPjA/TWF0aC5taW4oTyxnMCk6ZzAsVjM9KHgpPT57aWYoeDw9MClyZXR1cm4gMDtsZXQgdD1iMS10NC14LHoxPWIxLzIrZTQvMi0odC1xMyk7aWYoejE8PTApcmV0dXJuIDA7bGV0IHMxPTIqejE7cmV0dXJuIHMxPD14K3EzP3MxOjB9LCQ3PW8/ajA6VjMoajApLEs3PW8/ej9DOjA6VjMoej9DOjApO3JldHVybiBRKHQ5LHtlbmRwb2ludDpxPyQ/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOlEoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1zY3JlZW4gYmctcGFnZSBweS02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLHN0eWxlOntwYWRkaW5nTGVmdDoyNCtLNyxwYWRkaW5nUmlnaHQ6MjQrJDcsdHJhbnNpdGlvbjpRMC5pc1Jlc2l6aW5nfHxRMC5pc0luZXJ0aWE/Im5vbmUiOkw2fSxjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6ZzAsdHJhbnNpdGlvbjptOChRMCl9LGNoaWxkcmVuOltRKFIxLHtleGVjOkUxLG9uUm90YXRlOnYxLG9yaWVudGF0aW9uOmgxLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpLLGRldmljZVJ1bnRpbWU6SixzdHJlYW1pbmc6TCwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBzdGF0dXMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGZsZXhXcmFwOiJub3dyYXAiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDoxMCxwYWRkaW5nOiI2cHggMTBweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpbUShSMS5UaXRsZSx7b25DbGljazooKT0+RygoeCk9PiF4KSwiYXJpYS1sYWJlbCI6IlRvZ2dsZSBzaW11bGF0b3JzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOnosdGl0bGU6IlNpbXVsYXRvcnMiLGhpZGVTdWJ0aXRsZTohMCxoaWRlQ2hldnJvbjohMCxzdHlsZTp7bWF4V2lkdGg6Im1pbigyMzBweCwgY2FsYygxMDB2dyAtIDE3MHB4KSkifX0pLFEoZDYse3N0cmVhbWluZzpMfSldfSksUSgiZGl2Iix7cmVmOncsY2xhc3NOYW1lOiJyZWxhdGl2ZSBtYXgtaC1mdWxsIHNlbGVjdC1ub25lIiwiZGF0YS1kZXZpY2UtY2hyb21lIjpuPyJvbiI6Im9mZiIsc3R5bGU6e3dpZHRoOmcwLGFzcGVjdFJhdGlvOnAxLHRyYW5zaXRpb246bTgoUTApLHdpbGxDaGFuZ2U6UTAuaXNSZXNpemluZ3x8UTAuaXNJbmVydGlhPyJ3aWR0aCI6dm9pZCAwfSwuLi5aNS5kcm9wWm9uZVByb3BzLGNoaWxkcmVuOlsoKCk9PntpZihvKXJldHVybiBRKF85LHt1cmw6JC5zdHJlYW1VcmwucmVwbGFjZSgic3RyZWFtLm1qcGVnIiwic3RyZWFtLjNkLm1qcGVnIikscHJvamVjdGlvbjpzLHNjcmVlbkNvbmZpZzpjLG9uU3RyZWFtaW5nQ2hhbmdlOmssb25IYXJkd2FyZVByZXNzOnYwLG9uVG91Y2g6bjEsb25NdWx0aVRvdWNoOk8wLG9uRXJyb3I6KCk9PmMwLmVycm9yKCJEZXZpY2UgcmVuZGVyaW5nIGlzIHVuYXZhaWxhYmxlLiBDaGVjayB0aGUgc2VsZWN0ZWQgWGNvZGUgYW5kIHNlcnZlciBsb2cuIiksY2hpbGRyZW46cSYmcyYmUShqOCx7cHJvamVjdGlvbjpzLHNjcmVlbkNvbmZpZzpjfSl9KTtsZXQgeD1RKFcyLHt1cmw6JC51cmwsd3NVcmw6JC53c1VybCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIixwb2ludGVyRXZlbnRzOlEwLmlzUmVzaXppbmd8fFEwLmlzSW5lcnRpYT8ibm9uZSI6dm9pZCAwfSxpbWFnZVN0eWxlOntib3JkZXJSYWRpdXM6bj8wOkQxLGNvcm5lclNoYXBlOm4/dm9pZCAwOiJzdXBlcmVsbGlwc2UoMS4zKSIsLi4ubj97fTp7Ym94U2hhZG93OiJpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIn19LGhpZGVDb250cm9sczohMCxvblN0cmVhbWluZ0NoYW5nZTprLG9uU3RyZWFtVG91Y2g6bjEsb25TdHJlYW1NdWx0aVRvdWNoOk8wLG9uU3RyZWFtQnV0dG9uOnUxLG9uU3RyZWFtRGlnaXRhbENyb3duOl8wLG9uU3RyZWFtU2Nyb2xsOkowLGNvZGVjOmc/ImF2Y2MiOiJtanBlZyIsb25BdmNjRXJyb3I6KCk9PmkoImVycm9yIiksc3Vic2NyaWJlRnJhbWU6Zz92b2lkIDA6Zi5zdWJzY3JpYmVGcmFtZSxzdHJlYW1GcmFtZTpnP3ZvaWQgMDpmLmZyYW1lLHN0cmVhbUNvbmZpZzpjLGVuYWJsZURpZ2l0YWxDcm93bjp5PT09IndhdGNoIixvblNjcmVlbkNvbmZpZ0NoYW5nZTpsMX0pLHQ9UShKMSx7Y2hpbGRyZW46W3gscSYmUShqOCx7fSldfSk7aWYoIUcxKXJldHVybiB0O3JldHVybiBRKHAyLHtjaHJvbWU6ZSxmcmFtZWQ6bixpbnRlcmFjdGl2ZTpuLG9uQnV0dG9uOlcwLG9uQ3Jvd25XaGVlbDooYTEsejEpPT57bGV0IHMxPXQ1KGExLHoxLHV8fDEpO2lmKHMxIT1udWxsKV8wKHMxKX0sc2NyZWVuOnR9KX0pKCksWjUuaXNEcmFnT3ZlciYmUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIGJvcmRlci0yIGJvcmRlci1kYXNoZWQgYm9yZGVyLWFjY2VudCBiZy1bcmdiYSg5OSwxMDIsMjQxLDAuMTgpXSB0ZXh0LWFjY2VudCBwb2ludGVyLWV2ZW50cy1ub25lIHotMjAiLHN0eWxlOntib3JkZXJSYWRpdXM6bj92b2lkIDA6RDF9LGNoaWxkcmVuOltRKHI1LHtzaXplOjMyLHN0cm9rZVdpZHRoOjEuNX0pLFEoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiRHJvcCBtZWRpYSBvciAuaXBhIn0pXX0pLCFvJiZRKEoxLHtjaGlsZHJlbjpbUShqNix7c2ltdWxhdG9yUmVzaXplOlEwLGRldmljZVR5cGU6eSxzdHJlYW1Db25maWc6Yyxjb250YWluZXJXaWR0aDpPfHxnMCxjb250YWluZXJIZWlnaHQ6dXx8KF8xPjA/ZzAvXzE6MCl9KSxRKGw2LHt3aWR0aDpPfHxnMCxoZWlnaHQ6dXx8KF8xPjA/ZzAvXzE6MCksdmlzaWJsZTpRMC5pc1Jlc2l6aW5nfHxRMC5pc0luZXJ0aWF9KV19KV19KSxRKCJkaXYiLHtjbGFzc05hbWU6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiAke28/IiI6Im1heC13LWZ1bGwifWAsY2hpbGRyZW46W1EoUjEse2V4ZWM6RTEsb25Sb3RhdGU6djEsb3JpZW50YXRpb246aDEsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkssZGV2aWNlUnVudGltZTpKLHN0cmVhbWluZzpMLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIGFjdGlvbnMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsbWluV2lkdGg6MCxqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6MTgsLi4ubz97ZmxleFdyYXA6Im5vd3JhcCIsd2lkdGg6Im1heC1jb250ZW50IixtYXhXaWR0aDoibm9uZSJ9Ont3aWR0aDoiYXV0byIsbWF4V2lkdGg6IjEwMCUifX0sY2hpbGRyZW46UShSMS5BY3Rpb25zLHtjaGlsZHJlbjpbTjA/LmlzUmVhY3ROYXRpdmUmJlEoUjEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6IlJlbG9hZCBSZWFjdCBOYXRpdmUgYnVuZGxlIix0aXRsZToiUmVsb2FkIChSKSIsb25DbGljazooKT0+dm9pZCBDMCgpLGNoaWxkcmVuOlEodDAse30pfSksUShSMS5Ib21lQnV0dG9uLHt0aXRsZToiSG9tZSJ9KSxRKFIxLlNjcmVlbnNob3RCdXR0b24se3RpdGxlOiJTY3JlZW5zaG90IixvbkNsaWNrOih4KT0+e3gucHJldmVudERlZmF1bHQoKSxUMC5jYXB0dXJlKCl9fSksUShSMS5Sb3RhdGVCdXR0b24se3RpdGxlOiJSb3RhdGUgZGV2aWNlIn0pLCFvJiYhIWUmJlEoZTkse2hpZGVDaHJvbWU6WjEsb25Ub2dnbGU6KCk9PnExKCh4KT0+IXgpfSksbyYmUShKMSx7Y2hpbGRyZW46W1EoZzgse292ZXJsYXlFbmFibGVkOnEsc3RyZWFtaW5nOkwsb25Ub2dnbGVPdmVybGF5OigpPT5WKCh4KT0+IXgpfSksUSgic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJteC0xIGgtNCB3LXB4IHNocmluay0wIGJnLXdoaXRlLzE1In0pLFEodzkse29yaWVudGF0aW9uOmgxLGFuZ2xlOmUxLG9uQ2hhbmdlOlkwLG9uUG9zZTpQMH0pXX0pXX0pfSksIW8mJlEoUjEse2V4ZWM6RTEsb25Sb3RhdGU6djEsb3JpZW50YXRpb246aDEsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkssZGV2aWNlUnVudGltZTpKLHN0cmVhbWluZzpMLCJhcmlhLWxhYmVsIjoiQWNjZXNzaWJpbGl0eSBvdmVybGF5IixzdHlsZTp7d2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzo2LGJvcmRlclJhZGl1czoyMn0sY2hpbGRyZW46UShnOCx7b3ZlcmxheUVuYWJsZWQ6cSxzdHJlYW1pbmc6TCxvblRvZ2dsZU92ZXJsYXk6KCk9PlYoKHgpPT4heCl9KX0pXX0pXX0pLFEoImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgcmlnaHQtMyBmbGV4IGZsZXgtY29sIGdhcC0xIHAtMSBiZy1wYW5lbC1iZyBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gYmFja2Ryb3AtYmx1ci1bMTJweF0gWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gei00MCAke198fE4/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbUSgiYnV0dG9uIix7b25DbGljazooKT0+e0IoITEpLGwoKHgpPT4heCl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOl8sdGl0bGU6IlRvb2xzIixjaGlsZHJlbjpRKGw1LHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLFEoImJ1dHRvbiIse29uQ2xpY2s6KCk9PntsKCExKSxCKCh4KT0+IXgpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIFdlYktpdCBEZXZUb29scyIsImFyaWEtcHJlc3NlZCI6Tix0aXRsZToiV2ViS2l0IERldlRvb2xzIixjaGlsZHJlbjpRKG01LHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pXX0pLFEoQTQse29wZW46XyxvbkNsb3NlOigpPT5sKCExKSx1ZGlkOiQuZGV2aWNlLGRldmljZVJ1bnRpbWU6SixjdXJyZW50QXBwOk4wLGV2ZW50TG9nRXZlbnRzRW5kcG9pbnQ6JC5ldmVudExvZ0V2ZW50c0VuZHBvaW50LGF4T3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZUF4T3ZlcmxheTooKT0+VigoeCk9PiF4KSxjb2RlY1ByZWZlcmVuY2U6aixvbkNvZGVjUHJlZmVyZW5jZUNoYW5nZTpkLGFjdGl2ZUNvZGVjOmc/ImgyNjQiOiJtanBlZyIsYXZjY1N1cHBvcnRlZDpBLnN1cHBvcnRlZCxjaHJvbWVBdmFpbGFibGU6ISFlJiYhbyxoaWRlQ2hyb21lOloxLG9uSGlkZUNocm9tZUNoYW5nZTpxMSx3aWR0aDpLMX0pLFEobDIse3BhbmVsV2lkdGg6SzEsdmlzaWJsZTpfLG9uUG9pbnRlckRvd246TzEsYXJpYUxhYmVsOiJSZXNpemUgdG9vbHMgcGFuZWwifSksUShENCx7b3BlbjpOLG9uQ2xvc2U6KCk9PkIoITEpLHVkaWQ6JC5kZXZpY2UsdGFyZ2V0czpXLnRhcmdldHMsc2VsZWN0ZWRUYXJnZXRJZDpVLG9uU2VsZWN0VGFyZ2V0OkYsbG9hZGluZzpXLmxvYWRpbmcsZXJyb3I6Vy5lcnJvcixvblJlZnJlc2g6KCk9PnZvaWQgVy5yZWZyZXNoKCksd2lkdGg6QjF9KSxRKGwyLHtwYW5lbFdpZHRoOkIxLHZpc2libGU6TixvblBvaW50ZXJEb3duOk4xLGFyaWFMYWJlbDoiUmVzaXplIFdlYktpdCBEZXZUb29scyBwYW5lbCJ9KV19KX0pfWw5KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpLnJlbmRlcihRKFZRLHt9KSk7Cjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==","base64").toString("utf-8");return m5}function L2(){return new Promise((Q)=>{O7("xcrun",["simctl","list","devices","-j"],{encoding:"utf-8",timeout:3000},($,Z)=>{if($)return Q([]);try{let J=JSON.parse(Z),Y=[];for(let[X,G]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(X))continue;for(let N of G){if(N.isAvailable===!1)continue;Y.push({...N,runtime:X.replace(/^.*SimRuntime\./,"")})}}Q(Y)}catch{Q([])}})})}var j2=1610612736;function E2(){try{let Q=Number(QQ("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),$=Number(QQ("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=QQ("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(X)=>{let G=Z.match(X);return G?Number(G[1]):0},Y=J(/Pages free:\s+(\d+)/)+J(/Pages inactive:\s+(\d+)/)+J(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(Q)?Q:0,availableBytes:Y*(Number.isFinite($)?$:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function T2(){try{let Q=QQ("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),$={},Z=0,J=/\/Devices\/([0-9A-F-]{36})\//i;for(let Y of Q.split(`
|
|
84
|
-
`)){let
|
|
107
|
+
`),Q.resume(),!0}function vJ($,Q,Z,J){if(!P4($,Q))return;let Y=new z4(J);Y.binaryType="arraybuffer";let G=!1,X=!1,z=[],K=Buffer.from(Z),V=()=>{if(X)return;X=!0;try{Y.close()}catch{}try{Q.end(E9(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},W=(B)=>{if(G&&Y.readyState===z4.OPEN){Y.send(B.opcode===1?B.payload.toString("utf8"):U4(B.payload));return}z.push({opcode:B.opcode,payload:Buffer.from(B.payload)})},M=()=>{try{while(K.length>0){let B=E4(K);if(!B)break;if(K=K.subarray(B.consumed),B.opcode===8){E7(Q,8,B.payload),V();return}if(B.opcode===9){E7(Q,10,B.payload);continue}if(B.opcode===1||B.opcode===2)W({opcode:B.opcode,payload:B.payload})}}catch{V()}};Y.onopen=()=>{G=!0;for(let B of z)Y.send(B.opcode===1?B.payload.toString("utf8"):U4(B.payload));z=[]},Y.onmessage=(B)=>{let L=B.data,A=typeof L==="string"?Buffer.from(L):Buffer.from(L);E7(Q,typeof L==="string"?1:2,A)},Y.onerror=V,Y.onclose=V,Q.on("data",(B)=>{if(typeof B==="string")B=Buffer.from(B);K=Buffer.concat([K,B]),M()}),Q.on("error",V),Q.on("close",V),M()}async function hJ($,Q,Z){if(!IJ(Z)){Q.writeHead(400,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"invalid_device"}));return}if($.method!=="GET"){Q.writeHead(405,{Allow:"GET","Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"method_not_allowed"}));return}try{let J=await m9(Z);Q.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify(J))}catch(J){Q.writeHead(500,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({udid:Z,alive:!1,error:J instanceof Error?J.message:String(J)}))}}function uJ($,Q,Z,J){if(!Z)return!1;let Y=J.split("?")[0];if(Y==="/camera/status")return hJ($,Q,Z),!0;let G;try{G=E8(Z)}catch{return!1}switch(Y){case"/stream.3d.mjpeg":return G.handleDuoMjpeg($,Q),!0;case"/stream.mjpeg":return G.handleMjpeg($,Q),!0;case"/stream.avcc":return G.handleAvcc($,Q),!0;case"/config":return G.handleConfig($,Q),!0;case"/health":return G.handleHealth($,Q),!0;case"/ax":return G.handleAx($,Q),!0;case"/foreground":return G.handleForeground($,Q),!0;default:return!1}}async function gJ($,Q,Z,J={}){if(await new Promise((G)=>h6("xcrun",["simctl","boot",$],()=>G())),!await new Promise((G)=>{h6("xcrun",w0($),{timeout:180000},(X)=>G(!X))})){if(!await new Promise((X)=>{h6("xcrun",["simctl","list","devices","-j"],(z,K)=>{if(z)return X(!1);try{let V=JSON.parse(K);X(Object.values(V.devices).flat().some((W)=>W.udid===$&&W.state==="Booted"))}catch{X(!1)}})}))return`Device ${$} failed to reach booted state`}return f7({...v9($,Q,Z),...J.authTokenSha256?{authTokenSha256:J.authTokenSha256}:{},...J.allowExec?{allowExec:!0}:{}}),null}function cJ($,Q){let Z=[],J=[],Y=Buffer.from(Q),G=!1,X=()=>{if(G)return;G=!0;for(let V of J)V()},z=()=>{X();try{$.end(E9(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},K=()=>{for(;;){let V;try{V=E4(Y)}catch{z();return}if(!V)return;if(Y=Y.subarray(V.consumed),V.opcode===8)return z();if(V.opcode===9){E7($,10,V.payload);continue}if(V.opcode===1||V.opcode===2)for(let W of Z)W(V.payload)}};if($.on("data",(V)=>{Y=Buffer.concat([Y,V]),K()}),$.on("close",X),$.on("error",X),Q.length)K();return{send(V){E7($,2,V)},on(V,W){if(V==="message")Z.push(W);else J.push(W)},close:z}}function mJ($,Q,Z,J){if(!J)return!1;let Y;try{Y=E8(J)}catch{return!1}if(!P4($,Q))return!0;return Y.attachHidSocket(cJ(Q,Z)),!0}function A9($,Q,Z,J,Y,G=!1,X){let z=(Q===""?"":Q)+"/grid/api";return{...D4($),basePath:Q,appStateEndpoint:A7(Q,"/appstate",$.device),eventLogEndpoint:A7(Q,"/api/event-log",$.device),eventLogEventsEndpoint:A7(Q,"/api/event-log/events",$.device),axEndpoint:A7(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:A7(Q,"/devtools",$.device),serveSimBin:Z,gridApiEndpoint:z,gridStartEndpoint:z+"/start",gridShutdownEndpoint:z+"/shutdown",gridMemoryEndpoint:z+"/memory",previewEndpoint:Q===""?"/":Q,...J?{allowExec:!0}:{},...Y?{codec:Y}:{},...X?{initialState:X}:{},...G?{proxyHelpers:!0}:{}}}async function lJ($){return new Promise((Q)=>{let Z=UJ();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function j4($){let Q=`http://127.0.0.1:${$}`;try{let Z=await fetch(`${Q}/json/version`);if(!Z.ok)return null;if((await Z.json()).Browser!=="Safari/inspect-webkit")return null;return{port:$,cdpUrl:Q,async listTargets(){return(await(await fetch(`${Q}/json/list`)).json()).filter((X)=>X.id.startsWith("sim:")).map((X)=>{let K=X.id.split(":")[1],V=X.description?.match(/\(([^)]+)\)/)?.[1];return{id:X.id,title:X.title||X.url||"Untitled",url:/^https?:/i.test(X.url)?X.url:"about:blank",type:X.type||"page",udid:K,bundleId:V}})}}}catch{return null}}async function pJ(){if(b6)try{return await(await b6).listTargets(),b6}catch{b6=null}return b6=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (V4(),K4));for(let Q=J8;Q<J8+50;Q++){if(!await lJ(Q)){let Z=await j4(Q);if(Z)return Z;continue}try{let Z=await $({host:"127.0.0.1",port:Q});return{port:Q,cdpUrl:`http://127.0.0.1:${Q}`,async listTargets(){return Z.getTargets().filter((J)=>J.source?.kind==="simulator").map((J)=>{let Y=J.url??"";return{id:J.targetId,title:J.title||J.appName||Y||"Untitled",url:/^https?:/i.test(Y)?Y:"about:blank",type:J.type||"page",appName:J.appName,bundleId:J.bundleId,udid:J.source?.id,inUseByOtherInspector:!!J.inUseByOtherInspector}})},highlightTarget:Z.highlightTarget?.bind(Z),releaseHighlight:Z.releaseHighlight?.bind(Z)}}catch(Z){if(Z?.code==="EADDRINUSE"){let J=await j4(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${J8}-${J8+49}`)})().catch(($)=>{throw b6=null,$}),b6}function dJ($){return Array.isArray($)?$[0]:$}function q4($){return dJ($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function nJ($){return q4($)==="https"?"wss":"ws"}function G8($){return q4($)==="https"?"https":"http"}function iJ($,Q,Z,J){let Y=new URL(`${$}/inspector.html`,"http://serve-sim.local");return Y.searchParams.set(Q,`${Z}/page/${encodeURIComponent(J)}`),`${Y.pathname}${Y.search}`}var T9=null;function oJ($=import.meta.url,Q=A4){try{let Z=OJ(LJ($));for(let J of[P7(Z,"serve-sim.js"),P7(Z,"..","dist","serve-sim.js")])if(Q(J))return J}catch{}return"serve-sim"}function aJ(){if(!T9)T9=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLXdoaXRlOiNmZmY7LS1zcGFjaW5nOi4yNXJlbTstLWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1mb250LXdlaWdodC1zZW1pYm9sZDo2MDA7LS10cmFja2luZy13aWRlOi4wMjVlbTstLWxlYWRpbmctdGlnaHQ6MS4yNTstLWxlYWRpbmctc251ZzoxLjM3NTstLXJhZGl1cy14czouMTI1cmVtOy0tcmFkaXVzLW1kOi4zNzVyZW07LS1yYWRpdXMtbGc6LjVyZW07LS1yYWRpdXMteGw6Ljc1cmVtOy0tZWFzZS1vdXQ6Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKTstLWVhc2UtaW4tb3V0OmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tYmx1ci1tZDoxMnB4Oy0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7LS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tZGVmYXVsdC1mb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpOy0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7LS1jb2xvci1wYW5lbDojMWMxYzFlOy0tY29sb3ItcGFuZWwtYmc6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKTstLWNvbG9yLXBhbmVsLWJnLXRyYW5zbHVjZW50OnZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudCk7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxODE4MThhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5cW2NvbnRhaW5lci10eXBlXDppbmxpbmUtc2l6ZVxde2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFsycHhcXXt0b3A6MnB4fS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMFwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucmlnaHQtMlwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnJpZ2h0LTN7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucmlnaHQtXFs5cHhcXXtyaWdodDo5cHh9LmJvdHRvbS0we2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5ib3R0b20tMFwuNXtib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LmJvdHRvbS0ze2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5sZWZ0LTB7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5sZWZ0LTFcLzJ7bGVmdDo1MCV9LmxlZnQtMlwuNXtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ubGVmdC0ze2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uei0xe3otaW5kZXg6MX0uei0xMHt6LWluZGV4OjEwfS56LTIwe3otaW5kZXg6MjB9LnotMzB7ei1pbmRleDozMH0uei0zNXt6LWluZGV4OjM1fS56LTM2e3otaW5kZXg6MzZ9LnotNDB7ei1pbmRleDo0MH0uei01MHt6LWluZGV4OjUwfS5jb250YWluZXJ7d2lkdGg6MTAwJX1AbWVkaWEgKG1pbi13aWR0aDo0MHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDByZW19fUBtZWRpYSAobWluLXdpZHRoOjQ4cmVtKXsuY29udGFpbmVye21heC13aWR0aDo0OHJlbX19QG1lZGlhIChtaW4td2lkdGg6NjRyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjY0cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo4MHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6ODByZW19fUBtZWRpYSAobWluLXdpZHRoOjk2cmVtKXsuY29udGFpbmVye21heC13aWR0aDo5NnJlbX19Lm0tMHttYXJnaW46Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0uLW14LTF7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi0xKX0ubXgtMFwuNXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5teC0xe21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uLW15LTJ7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLTIpfS5teS0xe21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5tdC0wXC41e21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Lm10LTJ7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5tdC1cWzNweFxde21hcmdpbi10b3A6M3B4fS5tci1cWzNweFxde21hcmdpbi1yaWdodDozcHh9Lm1sLTBcLjV7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LnRhYmxle2Rpc3BsYXk6dGFibGV9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uc2l6ZS0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5zaXplLTNcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnNpemUtNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5zaXplLTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uc2l6ZS05e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOSl9LnNpemUtXFsycHhcXXt3aWR0aDoycHg7aGVpZ2h0OjJweH0uc2l6ZS1cWzE0cHhcXXt3aWR0aDoxNHB4O2hlaWdodDoxNHB4fS5zaXplLVxbMThweFxde3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9LnNpemUtXFsxOXB4XF17d2lkdGg6MTlweDtoZWlnaHQ6MTlweH0uc2l6ZS1mdWxse3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmgtMlwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5oLTN7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LmgtM1wuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5oLTR7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNCl9LmgtNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uaC01XC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LmgtNntoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0uaC03e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5oLTh7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOCl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMTApfS5oLVxbM3B4XF17aGVpZ2h0OjNweH0uaC1cWzEzcHhcXXtoZWlnaHQ6MTNweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzE2cHhcXXtoZWlnaHQ6MTZweH0uaC1cWzE4cHhcXXtoZWlnaHQ6MThweH0uaC1cWzIycHhcXXtoZWlnaHQ6MjJweH0uaC1cWzI2cHhcXXtoZWlnaHQ6MjZweH0uaC1cWzMwcHhcXXtoZWlnaHQ6MzBweH0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXB4e2hlaWdodDoxcHh9Lmgtc2NyZWVue2hlaWdodDoxMDB2aH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFsyNjBweFxde21heC1oZWlnaHQ6MjYwcHh9Lm1heC1oLVxbMzIwcHhcXXttYXgtaGVpZ2h0OjMyMHB4fS5tYXgtaC1mdWxse21heC1oZWlnaHQ6MTAwJX0ubWluLWgtMHttaW4taGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi1oLVxbMjJweFxde21pbi1oZWlnaHQ6MjJweH0ubWluLWgtXFszMHB4XF17bWluLWhlaWdodDozMHB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTJcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS53LTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0udy01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnctNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS53LTd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0udy04e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOCl9LnctMTB7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMCl9LnctMTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMSl9LnctMjF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyMSl9LnctMzZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozNil9LnctXFsyMnB4XF17d2lkdGg6MjJweH0udy1cWzMwcHhcXXt3aWR0aDozMHB4fS53LVxbMzJcJVxde3dpZHRoOjMyJX0udy1cWzM2XCVcXXt3aWR0aDozNiV9LnctXFs0MFwlXF17d2lkdGg6NDAlfS53LVxbNDJcJVxde3dpZHRoOjQyJX0udy1cWzQ2XCVcXXt3aWR0aDo0NiV9LnctXFs0OFwlXF17d2lkdGg6NDglfS53LVxbNThcJVxde3dpZHRoOjU4JX0udy1cWzYyXCVcXXt3aWR0aDo2MiV9LnctXFs2OFwlXF17d2lkdGg6NjglfS53LVxbNzBcJVxde3dpZHRoOjcwJX0udy1cWzc0XCVcXXt3aWR0aDo3NCV9LnctXFsxMjBweFxde3dpZHRoOjEyMHB4fS53LVxbY2FsY1woMTAwXCVcKzhweFwpXF17d2lkdGg6Y2FsYygxMDAlICsgOHB4KX0udy1cW21pblwoMzIwcHhcLGNhbGNcKDEwMHZ3LTMycHhcKVwpXF17d2lkdGg6bWluKDMyMHB4LDEwMHZ3IC0gMzJweCl9LnctZnVsbHt3aWR0aDoxMDAlfS53LXB4e3dpZHRoOjFweH0ubWF4LXctOTB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOTApfS5tYXgtdy0xMjB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTIwKX0ubWF4LXctXFsxNTBweFxde21heC13aWR0aDoxNTBweH0ubWF4LXctXFszNjBweFxde21heC13aWR0aDozNjBweH0ubWF4LXctZnVsbHttYXgtd2lkdGg6MTAwJX0ubWluLXctMHttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLXctXFs1NnB4XF17bWluLXdpZHRoOjU2cHh9Lm1pbi13LVxbMjAwcHhcXXttaW4td2lkdGg6MjAwcHh9Lm1pbi13LVxbMjIwcHhcXXttaW4td2lkdGg6MjIwcHh9Lm1pbi13LXB4e21pbi13aWR0aDoxcHh9LmZsZXgtMXtmbGV4OjF9LnNocmlua3tmbGV4LXNocmluazoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS5ncm93e2ZsZXgtZ3JvdzoxfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjdzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC44c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC44cyBsaW5lYXIgaW5maW5pdGV9LmN1cnNvci1jb2wtcmVzaXple2N1cnNvcjpjb2wtcmVzaXplfS5jdXJzb3ItZGVmYXVsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLW5vdC1hbGxvd2Vke2N1cnNvcjpub3QtYWxsb3dlZH0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmN1cnNvci1wcm9ncmVzc3tjdXJzb3I6cHJvZ3Jlc3N9LmN1cnNvci10ZXh0e2N1cnNvcjp0ZXh0fS50b3VjaC1ub25le3RvdWNoLWFjdGlvbjpub25lfS5yZXNpemV7cmVzaXplOmJvdGh9Lmxpc3Qtbm9uZXtsaXN0LXN0eWxlLXR5cGU6bm9uZX0uYXBwZWFyYW5jZS1ub25le2FwcGVhcmFuY2U6bm9uZX0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOjFmcl8xZnJfMWZyXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnIgMWZyfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6YXV0b18xZnJfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6YXV0b19taW5tYXhcKDBcLDFmclwpX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byBtaW5tYXgoMCwxZnIpYXV0b30uZ3JpZC1jb2xzLVxbNTZweF8xZnJfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczo1NnB4IDFmciBhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1ye2JvcmRlci1yaWdodC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1yaWdodC13aWR0aDoxcHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlwhYm9yZGVyLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC42XClcXXtib3JkZXItY29sb3I6IzBhODRmZjk5IWltcG9ydGFudH0uYm9yZGVyLVxbXCMzYjVmOTlcXXtib3JkZXItY29sb3I6IzNiNWY5OX0uYm9yZGVyLVxbXCM1ZjYyNjhcXXtib3JkZXItY29sb3I6IzVmNjI2OH0uYm9yZGVyLVxbXCMyMjJcXXtib3JkZXItY29sb3I6IzIyMn0uYm9yZGVyLVxbXCNmZjQ1M2FcXVwvNTB7Ym9yZGVyLWNvbG9yOiNmZjQ1M2E4MDtib3JkZXItY29sb3I6Y29sb3IoZGlzcGxheS1wMyAuOTIyNjczIC4zMzMxMzQgLjI3MTUxLy41KTtib3JkZXItY29sb3I6bGFiKDU4Ljc2MjglIDY5Ljg0NjcgNTAuMzg4Ni8uNSl9LmJvcmRlci1hY2NlbnR7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJvcmRlci1kYW5nZXJcLzIwe2JvcmRlci1jb2xvcjojZjg3MTcxMzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjojZjg3MTcxNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6I2ZiYmYyNDQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZXtib3JkZXItY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItdC1cW1wjZjRmNGY1XF17Ym9yZGVyLXRvcC1jb2xvcjojZjRmNGY1fS5ib3JkZXItdC13aGl0ZXtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMwYTg0ZmZcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmZ9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMyMDJiM2FcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMDJiM2F9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMyNjM2NGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyNjM2NGN9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbXCNmODcxNzFcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzF9LmJnLVxbXCNmZjQ1M2FcXVwvMTB7YmFja2dyb3VuZC1jb2xvcjojZmY0NTNhMWE7YmFja2dyb3VuZC1jb2xvcjpjb2xvcihkaXNwbGF5LXAzIC45MjI2NzMgLjMzMzEzNCAuMjcxNTEvLjEpO2JhY2tncm91bmQtY29sb3I6bGFiKDU4Ljc2MjglIDY5Ljg0NjcgNTAuMzg4Ni8uMSl9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoOTlcLDEwMlwsMjQxXCwwXC4xOFwpXF17YmFja2dyb3VuZC1jb2xvcjojNjM2NmYxMmV9LmJnLWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtYmctdHJhbnNsdWNlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZy10cmFuc2x1Y2VudCl9LmJnLXBhbmVsLWRlZXB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1kZWVwKX0uYmctcGFuZWwtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLW92ZXJsYXkpfS5iZy1zdWNjZXNzLWVtZXJhbGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1zdWNjZXNzLWVtZXJhbGQpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmYmJmMjQxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTEwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzE1e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNSUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKDE0NWRlZ1wsXCMyNTNhNWZcLFwjMTYyMTMyXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktNHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHQtMFwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHQtMXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wdC0yXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHItMntwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLTNcLjV7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnByLVxbMjZweFxde3BhZGRpbmctcmlnaHQ6MjZweH0ucGItMFwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucGItMXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wYi0xXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucGItMntwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wYi1cWzJweFxde3BhZGRpbmctYm90dG9tOjJweH0ucGwtMntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGwtMlwuNXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wbC0ze3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5wbC03e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5wbC1cWzI2cHhcXXtwYWRkaW5nLWxlZnQ6MjZweH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uXFtmb250LWZhbWlseVw6LWFwcGxlLXN5c3RlbVwsc3lzdGVtLXVpXCxzYW5zLXNlcmlmXF17Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxOb3RvIFNhbnMsVWJ1bnR1LENhbnRhcmVsbCxIZWx2ZXRpY2EgTmV1ZSxzYW5zLXNlcmlmfS5mb250LVxbaW5oZXJpdFxde2ZvbnQtZmFtaWx5OmluaGVyaXR9LmZvbnQtbW9ub3tmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pfS5mb250LXN5c3RlbXtmb250LWZhbWlseTp2YXIoLS1mb250LXN5c3RlbSl9LnRleHQtXFs5cHhcXXtmb250LXNpemU6OXB4fS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LVxbMTFcLjVweFxde2ZvbnQtc2l6ZToxMS41cHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtXFsxM3B4XF17Zm9udC1zaXplOjEzcHh9LnRleHQtXFsxNHB4XF17Zm9udC1zaXplOjE0cHh9LnRleHQtXFsxN3B4XF17Zm9udC1zaXplOjE3cHh9LnRleHQtXFsxOHB4XF17Zm9udC1zaXplOjE4cHh9LmxlYWRpbmctXFsxXC41XF17LS10dy1sZWFkaW5nOjEuNTtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctXFsxXC4zNVxdey0tdHctbGVhZGluZzoxLjM1O2xpbmUtaGVpZ2h0OjEuMzV9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXNudWd7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctc251Zyk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy1zbnVnKX0ubGVhZGluZy10aWdodHstLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy10aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy10aWdodCl9LmZvbnQtbWVkaXVtey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctXFswXC4xZW1cXXstLXR3LXRyYWNraW5nOi4xZW07bGV0dGVyLXNwYWNpbmc6LjFlbX0udHJhY2tpbmctXFswXC4wMmVtXF17LS10dy10cmFja2luZzouMDJlbTtsZXR0ZXItc3BhY2luZzouMDJlbX0udHJhY2tpbmctXFswXC4wNGVtXF17LS10dy10cmFja2luZzouMDRlbTtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17LS10dy10cmFja2luZzouMDZlbTtsZXR0ZXItc3BhY2luZzouMDZlbX0udHJhY2tpbmctXFswXC4wOGVtXF17LS10dy10cmFja2luZzouMDhlbTtsZXR0ZXItc3BhY2luZzouMDhlbX0udHJhY2tpbmctd2lkZXstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXdpZGUpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGUpfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnRleHQtZWxsaXBzaXN7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5cIXRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpIWltcG9ydGFudH0udGV4dC1cW1wjMGEwYTBjXF17Y29sb3I6IzBhMGEwY30udGV4dC1cW1wjOGU4ZTkzXF17Y29sb3I6IzhlOGU5M30udGV4dC1cW1wjMzRkMzk5XF17Y29sb3I6IzM0ZDM5OX0udGV4dC1cW1wjMDYyMDE4XF17Y29sb3I6IzA2MjAxOH0udGV4dC1cW1wjYzhkN2ZmXF17Y29sb3I6I2M4ZDdmZn0udGV4dC1cW1wjZDJlN2ZmXF17Y29sb3I6I2QyZTdmZn0udGV4dC1cW1wjZmZiM2FkXF17Y29sb3I6I2ZmYjNhZH0udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC8zNXtjb2xvcjojZmZmZmZmNTl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTM1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzV7Y29sb3I6I2ZmZmZmZmJmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzc1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKXZhcigtLXR3LXNsYXNoZWQtemVybywpdmFyKC0tdHctbnVtZXJpYy1maWd1cmUsKXZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbiwpfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5hbnRpYWxpYXNlZHstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ub3BhY2l0eS0we29wYWNpdHk6MH0ub3BhY2l0eS00MHtvcGFjaXR5Oi40fS5vcGFjaXR5LTYwe29wYWNpdHk6LjZ9Lm9wYWNpdHktMTAwe29wYWNpdHk6MX0uc2hhZG93ey0tdHctc2hhZG93OjAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLDAgMXB4IDJweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF8xcHhfMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjE4XClcLDBfNnB4XzE4cHhfcmdiYVwoMFwsMFwsMFwsMFwuMjhcKVwsaW5zZXRfMF8wXzBfMXB4X3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjA2XClcXXstLXR3LXNoYWRvdzowIDFweCAycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAyZSksMCA2cHggMThweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDQ3KSxpbnNldCAwIDAgMCAxcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCNmZmZmZmYwZik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzEycHhfNDBweF9yZ2JhXCgwXCwwXCwwXCwwXC41NVwpXF17LS10dy1zaGFkb3c6MCAxMnB4IDQwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4Yyk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5yaW5nLC5yaW5nLTF7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDFweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5yaW5nLTJ7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDJweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoNzRcLDIyMlwsMTI4XCwwXC43XClcXXtib3gtc2hhZG93OjAgMCA2cHggIzRhZGU4MGIzfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoMjQ4XCwxMTNcLDExM1wsMFwuNTVcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjZjg3MTcxOGN9LnJpbmctXFtcIzFjMWMxZVxdey0tdHctcmluZy1jb2xvcjojMWMxYzFlfS5yaW5nLXdoaXRlXC8xMHstLXR3LXJpbmctY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZ3JheXNjYWxley0tdHctZ3JheXNjYWxlOmdyYXlzY2FsZSgxMDAlKTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmZpbHRlcntmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmJhY2tkcm9wLWJsdXJ7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMTJweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDEycHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxOHB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMThweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1tZHstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cih2YXIoLS1ibHVyLW1kKSk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3Atc2F0dXJhdGUtMTUwey0tdHctYmFja2Ryb3Atc2F0dXJhdGU6c2F0dXJhdGUoMTUwJSk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtZmlsdGVyey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LnRyYW5zaXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10byxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLHRyYW5zbGF0ZSxzY2FsZSxyb3RhdGUsZmlsdGVyLC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyLGJhY2tkcm9wLWZpbHRlcixkaXNwbGF5LGNvbnRlbnQtdmlzaWJpbGl0eSxvdmVybGF5LHBvaW50ZXItZXZlbnRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFtib3JkZXItY29sb3JcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFt3aWR0aFwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6d2lkdGgsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0uZHVyYXRpb24tMTUwey0tdHctZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHstLXR3LWR1cmF0aW9uOi4yczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZHVyYXRpb24tMzAwey0tdHctZHVyYXRpb246LjNzO3RyYW5zaXRpb24tZHVyYXRpb246LjNzfS5lYXNlLWluLW91dHstLXR3LWVhc2U6dmFyKC0tZWFzZS1pbi1vdXQpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2UtaW4tb3V0KX0uZWFzZS1vdXR7LS10dy1lYXNlOnZhcigtLWVhc2Utb3V0KTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1lYXNlLW91dCl9Lm91dGxpbmUtbm9uZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zZWxlY3QtdGV4dHstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7dXNlci1zZWxlY3Q6dGV4dH0uXFstd2Via2l0LWJhY2tkcm9wLWZpbHRlclw6Ymx1clwoMTJweFwpXF17LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KX0uXFtzY3JvbGxiYXItd2lkdGhcOnRoaW5cXXtzY3JvbGxiYXItd2lkdGg6dGhpbn0uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjJzXCxib3gtc2hhZG93XzBcLjJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyxib3gtc2hhZG93IC4yc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjNzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4zc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsYm9yZGVyLWNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGJvcmRlci1jb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXCxjb2xvcl8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzLGNvbG9yIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE4c30uXFt0cmFuc2l0aW9uXDpsZWZ0XzBcLjE1c1xde3RyYW5zaXRpb246bGVmdCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXCxiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xMnNcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjEyc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDpwYWRkaW5nXzBcLjI1c19lYXNlXF17dHJhbnNpdGlvbjpwYWRkaW5nIC4yNXN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9Lmdyb3VwLWZvY3VzLXdpdGhpblw6b3BhY2l0eS0wOmlzKDp3aGVyZSguZ3JvdXApOmZvY3VzLXdpdGhpbiAqKXtvcGFjaXR5OjB9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6aGlkZGVuOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6bm9uZX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDp0cmFuc2xhdGUteC0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICopey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjB9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eToxfX0ucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE2XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjI5fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMmV9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC84NTpob3Zlcntjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzg1OmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4NSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MCUsdHJhbnNwYXJlbnQpfX19LmZvY3VzXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yNFwpXF06Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmZmZmYzZH0uZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXNcOm91dGxpbmUtbm9uZTpmb2N1c3stLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvcGFjaXR5LTEwMDpmb2N1cy12aXNpYmxle29wYWNpdHk6MX0uZm9jdXMtdmlzaWJsZVw6XFtvdXRsaW5lXDoxXC41cHhfc29saWRfcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC41NVwpXF06Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjEuNXB4IHNvbGlkICMwYTg0ZmY4Y30uZm9jdXMtdmlzaWJsZVw6b3V0bGluZTpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtMjpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDo0cHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtd2hpdGVcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXdoaXRlXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5hY3RpdmVcOnNjYWxlLVxbMFwuOTdcXTphY3RpdmV7c2NhbGU6Ljk3fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMThcKVxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy1cW1wjMmEyYTJjXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyYTJhMmN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYzOH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LXdoaXRlOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJyaWdodG5lc3MtXFsxXC4wOFxdOmVuYWJsZWQ6aG92ZXJ7LS10dy1icmlnaHRuZXNzOmJyaWdodG5lc3MoMS4wOCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfX0uZGlzYWJsZWRcOmN1cnNvci1kZWZhdWx0OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmRpc2FibGVkXDpvcGFjaXR5LTQwOmRpc2FibGVke29wYWNpdHk6LjR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7Lm1vdGlvbi1yZWR1Y2VcOnRyYW5zaXRpb24tbm9uZXt0cmFuc2l0aW9uLXByb3BlcnR5Om5vbmV9fUBtZWRpYSAobWF4LXdpZHRoOjg5OS45OTlweCl7Lm1heC1cWzkwMHB4XF1cOmhpZGRlbntkaXNwbGF5Om5vbmV9fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXByb2dyZXNze2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpiZy1cW3ZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpXF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotbW96LXJhbmdlLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpib3JkZXItbm9uZTo6LW1vei1yYW5nZS10aHVtYnstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGU6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6aC1cWzRweFxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6XFtiYWNrZ3JvdW5kXDpsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCx2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwscmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjJcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwpXF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXNsaWRlci1maWxsLWNvbG9yKXZhcigtLXNsaWRlci1maWxsKSwjZmZmZmZmMzggdmFyKC0tc2xpZGVyLWZpbGwpKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDotbXQtXFs0XC41cHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7bWFyZ2luLXRvcDotNC41cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDphcHBlYXJhbmNlLW5vbmU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2FwcGVhcmFuY2U6bm9uZX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaGFkb3ctXFswXzFweF8zcHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdOjotd2Via2l0LXNsaWRlci10aHVtYnstLXR3LXNoYWRvdzowIDFweCAzcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fX06cm9vdHstLWJ1bmNzcy1saWdodDogOy0tYnVuY3NzLWRhcms6aW5pdGlhbDtjb2xvci1zY2hlbWU6ZGFyazstLXNlcnZlLXNpbS1wYW5lbC1iZzojMTgxODE4Oy0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50OiMxODE4MThjNzstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc3BhcmVudDojMTgxODE4MDB9QHN1cHBvcnRzIChpbnRlcnBvbGF0ZS1zaXplOiBhbGxvdy1rZXl3b3Jkcyl7OnJvb3R7aW50ZXJwb2xhdGUtc2l6ZTphbGxvdy1rZXl3b3Jkc319ZGV0YWlscy5sZW0tc2VjdGlvbjo6ZGV0YWlscy1jb250ZW50e292ZXJmbG93OmNsaXA7dHJhbnNpdGlvbjpoZWlnaHQgLjIycyBlYXNlLGNvbnRlbnQtdmlzaWJpbGl0eSAuMjJzIGFsbG93LWRpc2NyZXRlO2hlaWdodDowfWRldGFpbHMubGVtLXNlY3Rpb25bb3Blbl06OmRldGFpbHMtY29udGVudHtoZWlnaHQ6YXV0b31kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnl7bGlzdC1zdHlsZTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVye2NvbG9yOiNmZmZ9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVyIC5sZW0tY2hldnJvbntjb2xvcjojZmZmZmZmZDkhaW1wb3J0YW50fS5sZW0tY2hldnJvbnt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTZzLGNvbG9yIC4xMnN9QGNvbnRhaW5lciAod2lkdGg8PTIxMHB4KXtbZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWxde2Rpc3BsYXk6bm9uZX19QGtleWZyYW1lcyBncmlkLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMjUwJSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTJweClzY2FsZSguOTYpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3Atb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpc2NhbGUoLjk2KX19LnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRle2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlfVtkYXRhLXNvbm5lci10b2FzdGVyXS5zZXJ2ZS1zaW0tdG9hc3RlciBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVde2dhcDo4cHg7cGFkZGluZzo4cHggMTJweDtmb250LWZhbWlseTp1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNDtib3gtc2hhZG93OjAgOHB4IDI0cHggIzAwMDAwMDczfVtkYXRhLXNvbm5lci10b2FzdGVyXS5zZXJ2ZS1zaW0tdG9hc3RlciBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25de3dpZHRoOjZweDtoZWlnaHQ6NnB4O21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0ZXJdLnNlcnZlLXNpbS10b2FzdGVyIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17bWluLXdpZHRoOjB9W2RhdGEtc29ubmVyLXRvYXN0ZXJdLnNlcnZlLXNpbS10b2FzdGVyIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtdGl0bGVde292ZXJmbG93LXdyYXA6YnJlYWstd29yZDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LmdyaWQtdGlsZTpob3ZlciAuZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eToxfS5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzVhMWQxZDtib3JkZXItY29sb3I6I2EzM30uZ3JpZC10aWxlOmhvdmVye2JvcmRlci1jb2xvcjojNTU1IWltcG9ydGFudH0uZHVvLWhhcmR3YXJlLWFuY2hvcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwO3RyYW5zZm9ybS1vcmlnaW46MCAwfS5kdW8taGFyZHdhcmUtcmVnaW9ue3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6ZmxleDtjdXJzb3I6ZGVmYXVsdDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O3dpZHRoOjYwcHg7aGVpZ2h0Ojc4cHg7dG9wOi02OHB4O2xlZnQ6LTMwcHh9LmR1by1oYXJkd2FyZS1yZWdpb24+YnV0dG9ue29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfS5kdW8taGFyZHdhcmUtcmVnaW9uOmhvdmVyPmJ1dHRvbiwuZHVvLWhhcmR3YXJlLXJlZ2lvbjpmb2N1cy13aXRoaW4+YnV0dG9ue29wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvfUBtZWRpYSAoaG92ZXI6bm9uZSl7LmR1by1oYXJkd2FyZS1yZWdpb24+YnV0dG9ue29wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsuZHVvLWhhcmR3YXJlLXJlZ2lvbj5idXR0b257dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH19QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcm90YXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYm9yZGVyLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1sZWFkaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZm9udC13ZWlnaHR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy10cmFja2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9yZGluYWx7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zbGFzaGVkLXplcm97c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZpZ3VyZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtc3BhY2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZnJhY3Rpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZWFzZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKC13ZWJraXQtaHlwaGVuczogbm9uZSkgYW5kICggbm90IChtYXJnaW4tdHJpbTogaW5saW5lKSkpIG9yICgoLW1vei1vcmllbnQ6IGlubGluZSkgYW5kICggbm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpeyosOmJlZm9yZSw6YWZ0ZXIsOjpiYWNrZHJvcHstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctdHJhbnNsYXRlLXo6MDstLXR3LXJvdGF0ZS14OmluaXRpYWw7LS10dy1yb3RhdGUteTppbml0aWFsOy0tdHctcm90YXRlLXo6aW5pdGlhbDstLXR3LXNrZXcteDppbml0aWFsOy0tdHctc2tldy15OmluaXRpYWw7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LW9yZGluYWw6aW5pdGlhbDstLXR3LXNsYXNoZWQtemVybzppbml0aWFsOy0tdHctbnVtZXJpYy1maWd1cmU6aW5pdGlhbDstLXR3LW51bWVyaWMtc3BhY2luZzppbml0aWFsOy0tdHctbnVtZXJpYy1mcmFjdGlvbjppbml0aWFsOy0tdHctc2hhZG93OjAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctc2hhZG93LWFscGhhOjEwMCU7LS10dy1pbnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LXJpbmctaW5zZXQ6aW5pdGlhbDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOjBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiNmZmY7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctb3V0bGluZS1zdHlsZTpzb2xpZDstLXR3LWJsdXI6aW5pdGlhbDstLXR3LWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWNvbnRyYXN0OmluaXRpYWw7LS10dy1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWludmVydDppbml0aWFsOy0tdHctb3BhY2l0eTppbml0aWFsOy0tdHctc2F0dXJhdGU6aW5pdGlhbDstLXR3LXNlcGlhOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdzppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWFscGhhOjEwMCU7LS10dy1kcm9wLXNoYWRvdy1zaXplOmluaXRpYWw7LS10dy1iYWNrZHJvcC1ibHVyOmluaXRpYWw7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1iYWNrZHJvcC1jb250cmFzdDppbml0aWFsOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1pbnZlcnQ6aW5pdGlhbDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1zZXBpYTppbml0aWFsOy0tdHctZHVyYXRpb246aW5pdGlhbDstLXR3LWVhc2U6aW5pdGlhbH19fQo8L3N0eWxlPgo8L2hlYWQ+PGJvZHk+CjxkaXYgaWQ9InJvb3QiPjwvZGl2Pgo8IS0tX19TSU1fUFJFVklFV19DT05GSUdfXy0tPgo8c2NyaXB0IHR5cGU9Im1vZHVsZSI+dmFyIHc1LHMsTjMsJDcsajAsVjMsVTMsejMsczIscTIsRDUsTDMsSjgsdDIsZTIsSDMsVjI9e30sRzI9W10sSzc9L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxFNT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIFcwKCQsSyl7Zm9yKHZhciBKIGluIEspJFtKXT1LW0pdO3JldHVybiAkfWZ1bmN0aW9uIFE4KCQpeyQmJiQucGFyZW50Tm9kZSYmJC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCQpfWZ1bmN0aW9uIGYxKCQsSyxKKXt2YXIgWixYLFkscT17fTtmb3IoWSBpbiBLKVk9PSJrZXkiP1o9S1tZXTpZPT0icmVmIj9YPUtbWV06cVtZXT1LW1ldO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKHEuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP3c1LmNhbGwoYXJndW1lbnRzLDIpOkopLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYkLmRlZmF1bHRQcm9wcyE9bnVsbClmb3IoWSBpbiAkLmRlZmF1bHRQcm9wcylxW1ldPT09dm9pZCAwJiYocVtZXT0kLmRlZmF1bHRQcm9wc1tZXSk7cmV0dXJuIFQ1KCQscSxaLFgsbnVsbCl9ZnVuY3Rpb24gVDUoJCxLLEosWixYKXt2YXIgWT17dHlwZTokLHByb3BzOkssa2V5OkoscmVmOlosX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Olg9PW51bGw/KytOMzpYLF9faTotMSxfX3U6MH07cmV0dXJuIFg9PW51bGwmJnMudm5vZGUhPW51bGwmJnMudm5vZGUoWSksWX1mdW5jdGlvbiBJNSgpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIEoxKCQpe3JldHVybiAkLmNoaWxkcmVufWZ1bmN0aW9uIHUxKCQsSyl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1LfWZ1bmN0aW9uIFo1KCQsSyl7aWYoSz09bnVsbClyZXR1cm4gJC5fXz9aNSgkLl9fLCQuX19pKzEpOm51bGw7Zm9yKHZhciBKO0s8JC5fX2subGVuZ3RoO0srKylpZigoSj0kLl9fa1tLXSkhPW51bGwmJkouX19lIT1udWxsKXJldHVybiBKLl9fZTtyZXR1cm4gdHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIj9aNSgkKTpudWxsfWZ1bmN0aW9uIEo3KCQpe2lmKCQuX19QJiYkLl9fZCl7dmFyIEs9JC5fX3YsSj1LLl9fZSxaPVtdLFg9W10sWT1XMCh7fSxLKTtZLl9fdj1LLl9fdisxLHMudm5vZGUmJnMudm5vZGUoWSksWjgoJC5fX1AsWSxLLCQuX19uLCQuX19QLm5hbWVzcGFjZVVSSSwzMiZLLl9fdT9bSl06bnVsbCxaLEo9PW51bGw/WjUoSyk6SiwhISgzMiZLLl9fdSksWCksWS5fX3Y9Sy5fX3YsWS5fXy5fX2tbWS5fX2ldPVksQTMoWixZLFgpLEsuX19lPUsuX189bnVsbCxZLl9fZSE9SiYmQzMoWSl9fWZ1bmN0aW9uIEMzKCQpe2lmKCgkPSQuX18pIT1udWxsJiYkLl9fYyE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1udWxsLCQuX19rLnNvbWUoZnVuY3Rpb24oSyl7aWYoSyE9bnVsbCYmSy5fX2UhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9Sy5fX2V9KSxDMygkKX1mdW5jdGlvbiAkOCgkKXsoISQuX19kJiYoJC5fX2Q9ITApJiZqMC5wdXNoKCQpJiYhQjIuX19yKyt8fFYzIT1zLmRlYm91bmNlUmVuZGVyaW5nKSYmKChWMz1zLmRlYm91bmNlUmVuZGVyaW5nKXx8VTMpKEIyKX1mdW5jdGlvbiBCMigpe3RyeXtmb3IodmFyICQsSz0xO2owLmxlbmd0aDspajAubGVuZ3RoPksmJmowLnNvcnQoejMpLCQ9ajAuc2hpZnQoKSxLPWowLmxlbmd0aCxKNygkKX1maW5hbGx5e2owLmxlbmd0aD1CMi5fX3I9MH19ZnVuY3Rpb24gazMoJCxLLEosWixYLFkscSxWLE4sQixVKXt2YXIgRyx6LEgsRixMLGssQyxQPVomJlouX19rfHxHMix5PUsubGVuZ3RoO2ZvcihOPVE3KEosSyxQLE4seSksRz0wO0c8eTtHKyspKEg9Si5fX2tbR10pIT1udWxsJiYoej1ILl9faSE9LTEmJlBbSC5fX2ldfHxWMixILl9faT1HLGs9WjgoJCxILHosWCxZLHEsVixOLEIsVSksRj1ILl9fZSxILnJlZiYmei5yZWYhPUgucmVmJiYoei5yZWYmJlg4KHoucmVmLG51bGwsSCksVS5wdXNoKEgucmVmLEguX19jfHxGLEgpKSxMPT1udWxsJiZGIT1udWxsJiYoTD1GKSwoQz0hISg0JkguX191KSl8fHouX19rPT09SC5fX2s/KE49RjMoSCxOLCQsQyksQyYmei5fX2UmJih6Ll9fZT1udWxsKSk6dHlwZW9mIEgudHlwZT09ImZ1bmN0aW9uIiYmayE9PXZvaWQgMD9OPWs6RiYmKE49Ri5uZXh0U2libGluZyksSC5fX3UmPS03KTtyZXR1cm4gSi5fX2U9TCxOfWZ1bmN0aW9uIFE3KCQsSyxKLFosWCl7dmFyIFkscSxWLE4sQixVPUoubGVuZ3RoLEc9VSx6PTA7Zm9yKCQuX19rPUFycmF5KFgpLFk9MDtZPFg7WSsrKShxPUtbWV0pIT1udWxsJiZ0eXBlb2YgcSE9ImJvb2xlYW4iJiZ0eXBlb2YgcSE9ImZ1bmN0aW9uIj8odHlwZW9mIHE9PSJzdHJpbmcifHx0eXBlb2YgcT09Im51bWJlciJ8fHR5cGVvZiBxPT0iYmlnaW50Inx8cS5jb25zdHJ1Y3Rvcj09U3RyaW5nP3E9JC5fX2tbWV09VDUobnVsbCxxLG51bGwsbnVsbCxudWxsKTpFNShxKT9xPSQuX19rW1ldPVQ1KEoxLHtjaGlsZHJlbjpxfSxudWxsLG51bGwsbnVsbCk6cS5jb25zdHJ1Y3Rvcj09PXZvaWQgMCYmcS5fX2I+MD9xPSQuX19rW1ldPVQ1KHEudHlwZSxxLnByb3BzLHEua2V5LHEucmVmP3EucmVmOm51bGwscS5fX3YpOiQuX19rW1ldPXEsTj1ZK3oscS5fXz0kLHEuX19iPSQuX19iKzEsVj1udWxsLChCPXEuX19pPVo3KHEsSixOLEcpKSE9LTEmJihHLS0sKFY9SltCXSkmJihWLl9fdXw9MikpLFY9PW51bGx8fFYuX192PT1udWxsPyhCPT0tMSYmKFg+VT96LS06WDxVJiZ6KyspLHR5cGVvZiBxLnR5cGUhPSJmdW5jdGlvbiImJihxLl9fdXw9NCkpOkIhPU4mJihCPT1OLTE/ei0tOkI9PU4rMT96Kys6KEI+Tj96LS06eisrLHEuX191fD00KSkpOiQuX19rW1ldPW51bGw7aWYoRylmb3IoWT0wO1k8VTtZKyspKFY9SltZXSkhPW51bGwmJigyJlYuX191KT09MCYmKFYuX19lPT1aJiYoWj1aNShWKSksTTMoVixWKSk7cmV0dXJuIFp9ZnVuY3Rpb24gRjMoJCxLLEosWil7dmFyIFgsWTtpZih0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iKXtmb3IoWD0kLl9fayxZPTA7WCYmWTxYLmxlbmd0aDtZKyspWFtZXSYmKFhbWV0uX189JCxLPUYzKFhbWV0sSyxKLFopKTtyZXR1cm4gS30kLl9fZSE9SyYmKFomJihLJiYkLnR5cGUmJiFLLnBhcmVudE5vZGUmJihLPVo1KCQpKSxKLmluc2VydEJlZm9yZSgkLl9fZSxLfHxudWxsKSksSz0kLl9fZSk7ZG8gSz1LJiZLLm5leHRTaWJsaW5nO3doaWxlKEshPW51bGwmJksubm9kZVR5cGU9PTgpO3JldHVybiBLfWZ1bmN0aW9uIFgwKCQsSyl7cmV0dXJuIEs9S3x8W10sJD09bnVsbHx8dHlwZW9mICQ9PSJib29sZWFuInx8KEU1KCQpPyQuc29tZShmdW5jdGlvbihKKXtYMChKLEspfSk6Sy5wdXNoKCQpKSxLfWZ1bmN0aW9uIFo3KCQsSyxKLFope3ZhciBYLFkscSxWPSQua2V5LE49JC50eXBlLEI9S1tKXSxVPUIhPW51bGwmJigyJkIuX191KT09MDtpZihCPT09bnVsbCYmVj09bnVsbHx8VSYmVj09Qi5rZXkmJk49PUIudHlwZSlyZXR1cm4gSjtpZihaPihVPzE6MCkpe2ZvcihYPUotMSxZPUorMTtYPj0wfHxZPEsubGVuZ3RoOylpZigoQj1LW3E9WD49MD9YLS06WSsrXSkhPW51bGwmJigyJkIuX191KT09MCYmVj09Qi5rZXkmJk49PUIudHlwZSlyZXR1cm4gcX1yZXR1cm4tMX1mdW5jdGlvbiBHMygkLEssSil7S1swXT09Ii0iPyQuc2V0UHJvcGVydHkoSyxKPT1udWxsPyIiOkopOiRbS109Sj09bnVsbD8iIjp0eXBlb2YgSiE9Im51bWJlciJ8fEs3LnRlc3QoSyk/SjpKKyJweCJ9ZnVuY3Rpb24gWTIoJCxLLEosWixYKXt2YXIgWSxxOyQ6aWYoSz09InN0eWxlIilpZih0eXBlb2YgSj09InN0cmluZyIpJC5zdHlsZS5jc3NUZXh0PUo7ZWxzZXtpZih0eXBlb2YgWj09InN0cmluZyImJigkLnN0eWxlLmNzc1RleHQ9Wj0iIiksWilmb3IoSyBpbiBaKUomJksgaW4gSnx8RzMoJC5zdHlsZSxLLCIiKTtpZihKKWZvcihLIGluIEopWiYmSltLXT09WltLXXx8RzMoJC5zdHlsZSxLLEpbS10pfWVsc2UgaWYoS1swXT09Im8iJiZLWzFdPT0ibiIpWT1LIT0oSz1LLnJlcGxhY2UoTDMsIiQxIikpLHE9Sy50b0xvd2VyQ2FzZSgpLEs9cSBpbiAkfHxLPT0ib25Gb2N1c091dCJ8fEs9PSJvbkZvY3VzSW4iP3Euc2xpY2UoMik6Sy5zbGljZSgyKSwkLmx8fCgkLmw9e30pLCQubFtLK1ldPUosSj9aP0pbRDVdPVpbRDVdOihKW0Q1XT1KOCwkLmFkZEV2ZW50TGlzdGVuZXIoSyxZP2UyOnQyLFkpKTokLnJlbW92ZUV2ZW50TGlzdGVuZXIoSyxZP2UyOnQyLFkpO2Vsc2V7aWYoWD09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIilLPUsucmVwbGFjZSgveGxpbmsoSHw6aCkvLCJoIikucmVwbGFjZSgvc05hbWUkLywicyIpO2Vsc2UgaWYoSyE9IndpZHRoIiYmSyE9ImhlaWdodCImJkshPSJocmVmIiYmSyE9Imxpc3QiJiZLIT0iZm9ybSImJkshPSJ0YWJJbmRleCImJkshPSJkb3dubG9hZCImJkshPSJyb3dTcGFuIiYmSyE9ImNvbFNwYW4iJiZLIT0icm9sZSImJkshPSJwb3BvdmVyIiYmSyBpbiAkKXRyeXskW0tdPUo9PW51bGw/IiI6SjticmVhayAkfWNhdGNoKFYpe310eXBlb2YgSj09ImZ1bmN0aW9uInx8KEo9PW51bGx8fEo9PT0hMSYmS1s0XSE9Ii0iPyQucmVtb3ZlQXR0cmlidXRlKEspOiQuc2V0QXR0cmlidXRlKEssSz09InBvcG92ZXIiJiZKPT0xPyIiOkopKX19ZnVuY3Rpb24gQjMoJCl7cmV0dXJuIGZ1bmN0aW9uKEspe2lmKHRoaXMubCl7dmFyIEo9dGhpcy5sW0sudHlwZSskXTtpZihLW3EyXT09bnVsbClLW3EyXT1KOCsrO2Vsc2UgaWYoS1txMl08SltENV0pcmV0dXJuO3JldHVybiBKKHMuZXZlbnQ/cy5ldmVudChLKTpLKX19fWZ1bmN0aW9uIFo4KCQsSyxKLFosWCxZLHEsVixOLEIpe3ZhciBVLEcseixILEYsTCxrLEMsUCx5LFQsQSx3LGksdixqPUsudHlwZTtpZihLLmNvbnN0cnVjdG9yIT09dm9pZCAwKXJldHVybiBudWxsOzEyOCZKLl9fdSYmKE49ISEoMzImSi5fX3UpLFk9W1Y9Sy5fX2U9Si5fX2VdKSwoVT1zLl9fYikmJlUoSyk7JDppZih0eXBlb2Ygaj09ImZ1bmN0aW9uIil0cnl7aWYoQz1LLnByb3BzLFA9ai5wcm90b3R5cGUmJmoucHJvdG90eXBlLnJlbmRlcix5PShVPWouY29udGV4dFR5cGUpJiZaW1UuX19jXSxUPVU/eT95LnByb3BzLnZhbHVlOlUuX186WixKLl9fYz9rPShHPUsuX19jPUouX19jKS5fXz1HLl9fRTooUD9LLl9fYz1HPW5ldyBqKEMsVCk6KEsuX19jPUc9bmV3IHUxKEMsVCksRy5jb25zdHJ1Y3Rvcj1qLEcucmVuZGVyPVk3KSx5JiZ5LnN1YihHKSxHLnN0YXRlfHwoRy5zdGF0ZT17fSksRy5fX249Wix6PUcuX19kPSEwLEcuX19oPVtdLEcuX3NiPVtdKSxQJiZHLl9fcz09bnVsbCYmKEcuX19zPUcuc3RhdGUpLFAmJmouZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIT1udWxsJiYoRy5fX3M9PUcuc3RhdGUmJihHLl9fcz1XMCh7fSxHLl9fcykpLFcwKEcuX19zLGouZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKEMsRy5fX3MpKSksSD1HLnByb3BzLEY9Ry5zdGF0ZSxHLl9fdj1LLHopUCYmai5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJkcuY29tcG9uZW50V2lsbE1vdW50IT1udWxsJiZHLmNvbXBvbmVudFdpbGxNb3VudCgpLFAmJkcuY29tcG9uZW50RGlkTW91bnQhPW51bGwmJkcuX19oLnB1c2goRy5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZihQJiZqLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmQyE9PUgmJkcuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9bnVsbCYmRy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKEMsVCksSy5fX3Y9PUouX192fHwhRy5fX2UmJkcuc2hvdWxkQ29tcG9uZW50VXBkYXRlIT1udWxsJiZHLnNob3VsZENvbXBvbmVudFVwZGF0ZShDLEcuX19zLFQpPT09ITEpe0suX192IT1KLl9fdiYmKEcucHJvcHM9QyxHLnN0YXRlPUcuX19zLEcuX19kPSExKSxLLl9fZT1KLl9fZSxLLl9faz1KLl9fayxLLl9fay5zb21lKGZ1bmN0aW9uKGQpe2QmJihkLl9fPUspfSksRzIucHVzaC5hcHBseShHLl9faCxHLl9zYiksRy5fc2I9W10sRy5fX2gubGVuZ3RoJiZxLnB1c2goRyk7YnJlYWsgJH1HLmNvbXBvbmVudFdpbGxVcGRhdGUhPW51bGwmJkcuY29tcG9uZW50V2lsbFVwZGF0ZShDLEcuX19zLFQpLFAmJkcuY29tcG9uZW50RGlkVXBkYXRlIT1udWxsJiZHLl9faC5wdXNoKGZ1bmN0aW9uKCl7Ry5jb21wb25lbnREaWRVcGRhdGUoSCxGLEwpfSl9aWYoRy5jb250ZXh0PVQsRy5wcm9wcz1DLEcuX19QPSQsRy5fX2U9ITEsQT1zLl9fcix3PTAsUClHLnN0YXRlPUcuX19zLEcuX19kPSExLEEmJkEoSyksVT1HLnJlbmRlcihHLnByb3BzLEcuc3RhdGUsRy5jb250ZXh0KSxHMi5wdXNoLmFwcGx5KEcuX19oLEcuX3NiKSxHLl9zYj1bXTtlbHNlIGRvIEcuX19kPSExLEEmJkEoSyksVT1HLnJlbmRlcihHLnByb3BzLEcuc3RhdGUsRy5jb250ZXh0KSxHLnN0YXRlPUcuX19zO3doaWxlKEcuX19kJiYrK3c8MjUpO0cuc3RhdGU9Ry5fX3MsRy5nZXRDaGlsZENvbnRleHQhPW51bGwmJihaPVcwKFcwKHt9LFopLEcuZ2V0Q2hpbGRDb250ZXh0KCkpKSxQJiYheiYmRy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9bnVsbCYmKEw9Ry5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShILEYpKSxpPVUhPW51bGwmJlUudHlwZT09PUoxJiZVLmtleT09bnVsbD9PMyhVLnByb3BzLmNoaWxkcmVuKTpVLFY9azMoJCxFNShpKT9pOltpXSxLLEosWixYLFkscSxWLE4sQiksRy5iYXNlPUsuX19lLEsuX191Jj0tMTYxLEcuX19oLmxlbmd0aCYmcS5wdXNoKEcpLGsmJihHLl9fRT1HLl9fPW51bGwpfWNhdGNoKGQpe2lmKEsuX192PW51bGwsTnx8WSE9bnVsbClpZihkLnRoZW4pe2ZvcihLLl9fdXw9Tj8xNjA6MTI4O1YmJlYubm9kZVR5cGU9PTgmJlYubmV4dFNpYmxpbmc7KVY9Vi5uZXh0U2libGluZztZW1kuaW5kZXhPZihWKV09bnVsbCxLLl9fZT1WfWVsc2V7Zm9yKHY9WS5sZW5ndGg7di0tOylROChZW3ZdKTtLOChLKX1lbHNlIEsuX19lPUouX19lLEsuX19rPUouX19rLGQudGhlbnx8SzgoSyk7cy5fX2UoZCxLLEopfWVsc2UgWT09bnVsbCYmSy5fX3Y9PUouX192PyhLLl9faz1KLl9fayxLLl9fZT1KLl9fZSk6Vj1LLl9fZT1YNyhKLl9fZSxLLEosWixYLFkscSxOLEIpO3JldHVybihVPXMuZGlmZmVkKSYmVShLKSwxMjgmSy5fX3U/dm9pZCAwOlZ9ZnVuY3Rpb24gSzgoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZShLOCkpfWZ1bmN0aW9uIEEzKCQsSyxKKXtmb3IodmFyIFo9MDtaPEoubGVuZ3RoO1orKylYOChKW1pdLEpbKytaXSxKWysrWl0pO3MuX19jJiZzLl9fYyhLLCQpLCQuc29tZShmdW5jdGlvbihYKXt0cnl7JD1YLl9faCxYLl9faD1bXSwkLnNvbWUoZnVuY3Rpb24oWSl7WS5jYWxsKFgpfSl9Y2F0Y2goWSl7cy5fX2UoWSxYLl9fdil9fSl9ZnVuY3Rpb24gTzMoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOkU1KCQpPyQubWFwKE8zKTpXMCh7fSwkKX1mdW5jdGlvbiBYNygkLEssSixaLFgsWSxxLFYsTil7dmFyIEIsVSxHLHosSCxGLEwsaz1KLnByb3BzfHxWMixDPUsucHJvcHMsUD1LLnR5cGU7aWYoUD09InN2ZyI/WD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOlA9PSJtYXRoIj9YPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjpYfHwoWD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLFkhPW51bGwpe2ZvcihCPTA7QjxZLmxlbmd0aDtCKyspaWYoKEg9WVtCXSkmJiJzZXRBdHRyaWJ1dGUiaW4gSD09ISFQJiYoUD9ILmxvY2FsTmFtZT09UDpILm5vZGVUeXBlPT0zKSl7JD1ILFlbQl09bnVsbDticmVha319aWYoJD09bnVsbCl7aWYoUD09bnVsbClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoQyk7JD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoWCxQLEMuaXMmJkMpLFYmJihzLl9fbSYmcy5fX20oSyxZKSxWPSExKSxZPW51bGx9aWYoUD09bnVsbClrPT09Q3x8ViYmJC5kYXRhPT1DfHwoJC5kYXRhPUMpO2Vsc2V7aWYoWT1ZJiZ3NS5jYWxsKCQuY2hpbGROb2RlcyksIVYmJlkhPW51bGwpZm9yKGs9e30sQj0wO0I8JC5hdHRyaWJ1dGVzLmxlbmd0aDtCKyspa1soSD0kLmF0dHJpYnV0ZXNbQl0pLm5hbWVdPUgudmFsdWU7Zm9yKEIgaW4gaylIPWtbQl0sQj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9HPUg6Qj09ImNoaWxkcmVuInx8KEIgaW4gQyl8fEI9PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEMpfHxCPT0iY2hlY2tlZCImJigiZGVmYXVsdENoZWNrZWQiaW4gQyl8fFkyKCQsQixudWxsLEgsWCk7Zm9yKEIgaW4gQylIPUNbQl0sQj09ImNoaWxkcmVuIj96PUg6Qj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9VPUg6Qj09InZhbHVlIj9GPUg6Qj09ImNoZWNrZWQiP0w9SDpWJiZ0eXBlb2YgSCE9ImZ1bmN0aW9uInx8a1tCXT09PUh8fFkyKCQsQixILGtbQl0sWCk7aWYoVSlWfHxHJiYoVS5fX2h0bWw9PUcuX19odG1sfHxVLl9faHRtbD09JC5pbm5lckhUTUwpfHwoJC5pbm5lckhUTUw9VS5fX2h0bWwpLEsuX19rPVtdO2Vsc2UgaWYoRyYmKCQuaW5uZXJIVE1MPSIiKSxrMyhLLnR5cGU9PSJ0ZW1wbGF0ZSI/JC5jb250ZW50OiQsRTUoeik/ejpbel0sSyxKLFosUD09ImZvcmVpZ25PYmplY3QiPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjpYLFkscSxZP1lbMF06Si5fX2smJlo1KEosMCksVixOKSxZIT1udWxsKWZvcihCPVkubGVuZ3RoO0ItLTspUTgoWVtCXSk7Vnx8KEI9InZhbHVlIixQPT0icHJvZ3Jlc3MiJiZGPT1udWxsPyQucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOkYhPW51bGwmJihGIT09JFtCXXx8UD09InByb2dyZXNzIiYmIUZ8fFA9PSJvcHRpb24iJiZGIT1rW0JdKSYmWTIoJCxCLEYsa1tCXSxYKSxCPSJjaGVja2VkIixMIT1udWxsJiZMIT0kW0JdJiZZMigkLEIsTCxrW0JdLFgpKX1yZXR1cm4gJH1mdW5jdGlvbiBYOCgkLEssSil7dHJ5e2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWj10eXBlb2YgJC5fX3U9PSJmdW5jdGlvbiI7WiYmJC5fX3UoKSxaJiZLPT1udWxsfHwoJC5fX3U9JChLKSl9ZWxzZSAkLmN1cnJlbnQ9S31jYXRjaChYKXtzLl9fZShYLEopfX1mdW5jdGlvbiBNMygkLEssSil7dmFyIFosWDtpZihzLnVubW91bnQmJnMudW5tb3VudCgkKSwoWj0kLnJlZikmJihaLmN1cnJlbnQmJlouY3VycmVudCE9JC5fX2V8fFg4KFosbnVsbCxLKSksKFo9JC5fX2MpIT1udWxsKXtpZihaLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtaLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goWSl7cy5fX2UoWSxLKX1aLmJhc2U9Wi5fX1A9bnVsbH1pZihaPSQuX19rKWZvcihYPTA7WDxaLmxlbmd0aDtYKyspWltYXSYmTTMoWltYXSxLLEp8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO0p8fFE4KCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiBZNygkLEssSil7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxKKX1mdW5jdGlvbiBTMCgkLEssSil7dmFyIFosWCxZLHE7Sz09ZG9jdW1lbnQmJihLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkscy5fXyYmcy5fXygkLEspLFg9KFo9dHlwZW9mIEo9PSJmdW5jdGlvbiIpP251bGw6SiYmSi5fX2t8fEsuX19rLFk9W10scT1bXSxaOChLLCQ9KCFaJiZKfHxLKS5fX2s9ZjEoSjEsbnVsbCxbJF0pLFh8fFYyLFYyLEsubmFtZXNwYWNlVVJJLCFaJiZKP1tKXTpYP251bGw6Sy5maXJzdENoaWxkP3c1LmNhbGwoSy5jaGlsZE5vZGVzKTpudWxsLFksIVomJko/SjpYP1guX19lOksuZmlyc3RDaGlsZCxaLHEpLEEzKFksJCxxKX1mdW5jdGlvbiBOMigkLEspe1MwKCQsSyxOMil9ZnVuY3Rpb24gWTgoJCxLLEope3ZhciBaLFgsWSxxLFY9VzAoe30sJC5wcm9wcyk7Zm9yKFkgaW4gJC50eXBlJiYkLnR5cGUuZGVmYXVsdFByb3BzJiYocT0kLnR5cGUuZGVmYXVsdFByb3BzKSxLKVk9PSJrZXkiP1o9S1tZXTpZPT0icmVmIj9YPUtbWV06VltZXT1LW1ldPT09dm9pZCAwJiZxIT1udWxsP3FbWV06S1tZXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiYoVi5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/dzUuY2FsbChhcmd1bWVudHMsMik6SiksVDUoJC50eXBlLFYsWnx8JC5rZXksWHx8JC5yZWYsbnVsbCl9ZnVuY3Rpb24gSDAoJCl7ZnVuY3Rpb24gSyhKKXt2YXIgWixYO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KFo9bmV3IFNldCwoWD17fSlbSy5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gWH0sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1o9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5wcm9wcy52YWx1ZSE9WS52YWx1ZSYmWi5mb3JFYWNoKGZ1bmN0aW9uKHEpe3EuX19lPSEwLCQ4KHEpfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKFkpe1ouYWRkKFkpO3ZhciBxPVkuY29tcG9uZW50V2lsbFVubW91bnQ7WS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1omJlouZGVsZXRlKFkpLHEmJnEuY2FsbChZKX19KSxKLmNoaWxkcmVufXJldHVybiBLLl9fYz0iX19jQyIrSDMrKyxLLl9fPSQsSy5Qcm92aWRlcj1LLl9fbD0oSy5Db25zdW1lcj1mdW5jdGlvbihKLFope3JldHVybiBKLmNoaWxkcmVuKFopfSkuY29udGV4dFR5cGU9SyxLfXc1PUcyLnNsaWNlLHM9e19fZTpmdW5jdGlvbigkLEssSixaKXtmb3IodmFyIFgsWSxxO0s9Sy5fXzspaWYoKFg9Sy5fX2MpJiYhWC5fXyl0cnl7aWYoKFk9WC5jb25zdHJ1Y3RvcikmJlkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoWC5zZXRTdGF0ZShZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigkKSkscT1YLl9fZCksWC5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKFguY29tcG9uZW50RGlkQ2F0Y2goJCxafHx7fSkscT1YLl9fZCkscSlyZXR1cm4gWC5fX0U9WH1jYXRjaChWKXskPVZ9dGhyb3cgJH19LE4zPTAsJDc9ZnVuY3Rpb24oJCl7cmV0dXJuICQhPW51bGwmJiQuY29uc3RydWN0b3I9PT12b2lkIDB9LHUxLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbigkLEspe3ZhciBKO0o9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPVcwKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoJD0kKFcwKHt9LEopLHRoaXMucHJvcHMpKSwkJiZXMChKLCQpLCQhPW51bGwmJnRoaXMuX192JiYoSyYmdGhpcy5fc2IucHVzaChLKSwkOCh0aGlzKSl9LHUxLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbigkKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLCQmJnRoaXMuX19oLnB1c2goJCksJDgodGhpcykpfSx1MS5wcm90b3R5cGUucmVuZGVyPUoxLGowPVtdLFUzPXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCx6Mz1mdW5jdGlvbigkLEspe3JldHVybiAkLl9fdi5fX2ItSy5fX3YuX19ifSxCMi5fX3I9MCxzMj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLHEyPSJfX2QiK3MyLEQ1PSJfX2EiK3MyLEwzPS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLEo4PTAsdDI9QjMoITEpLGUyPUIzKCEwKSxIMz0wO3ZhciBnMCxiMSxxOCxQMyxYNT0wLGIzPVtdLGoxPXMsVzM9ajEuX19iLF8zPWoxLl9fcixEMz1qMS5kaWZmZWQsVDM9ajEuX19jLHczPWoxLnVubW91bnQsRTM9ajEuX187ZnVuY3Rpb24gWTUoJCxLKXtqMS5fX2gmJmoxLl9faChiMSwkLFg1fHxLKSxYNT0wO3ZhciBKPWIxLl9fSHx8KGIxLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuICQ+PUouX18ubGVuZ3RoJiZKLl9fLnB1c2goe30pLEouX19bJF19ZnVuY3Rpb24gTygkKXtyZXR1cm4gWDU9MSxvMCh5MywkKX1mdW5jdGlvbiBvMCgkLEssSil7dmFyIFo9WTUoZzArKywyKTtpZihaLnQ9JCwhWi5fX2MmJihaLl9fPVtKP0ooSyk6eTModm9pZCAwLEspLGZ1bmN0aW9uKFYpe3ZhciBOPVouX19OP1ouX19OWzBdOlouX19bMF0sQj1aLnQoTixWKTtOIT09QiYmKFouX19OPVtCLFouX19bMV1dLFouX19jLnNldFN0YXRlKHt9KSl9XSxaLl9fYz1iMSwhYjEuX19mKSl7dmFyIFg9ZnVuY3Rpb24oVixOLEIpe2lmKCFaLl9fYy5fX0gpcmV0dXJuITA7dmFyIFU9Wi5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbih6KXtyZXR1cm4gei5fX2N9KTtpZihVLmV2ZXJ5KGZ1bmN0aW9uKHope3JldHVybiF6Ll9fTn0pKXJldHVybiFZfHxZLmNhbGwodGhpcyxWLE4sQik7dmFyIEc9Wi5fX2MucHJvcHMhPT1WO3JldHVybiBVLnNvbWUoZnVuY3Rpb24oeil7aWYoei5fX04pe3ZhciBIPXouX19bMF07ei5fXz16Ll9fTix6Ll9fTj12b2lkIDAsSCE9PXouX19bMF0mJihHPSEwKX19KSxZJiZZLmNhbGwodGhpcyxWLE4sQil8fEd9O2IxLl9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlksY29tcG9uZW50V2lsbFVwZGF0ZTpxfT1iMTtiMS5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKFYsTixCKXtpZih0aGlzLl9fZSl7dmFyIFU9WTtZPXZvaWQgMCxYKFYsTixCKSxZPVV9cSYmcS5jYWxsKHRoaXMsVixOLEIpfSxiMS5zaG91bGRDb21wb25lbnRVcGRhdGU9WH1yZXR1cm4gWi5fX058fFouX199ZnVuY3Rpb24gRSgkLEspe3ZhciBKPVk1KGcwKyssMyk7IWoxLl9fcyYmRzgoSi5fX0gsSykmJihKLl9fPSQsSi51PUssYjEuX19ILl9faC5wdXNoKEopKX1mdW5jdGlvbiBfMCgkLEspe3ZhciBKPVk1KGcwKyssNCk7IWoxLl9fcyYmRzgoSi5fX0gsSykmJihKLl9fPSQsSi51PUssYjEuX19oLnB1c2goSikpfWZ1bmN0aW9uIEkoJCl7cmV0dXJuIFg1PTUsUjEoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDokfX0sW10pfWZ1bmN0aW9uIHoyKCQsSyxKKXtYNT02LF8wKGZ1bmN0aW9uKCl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBaPSQoSygpKTtyZXR1cm4gZnVuY3Rpb24oKXskKG51bGwpLFomJnR5cGVvZiBaPT0iZnVuY3Rpb24iJiZaKCl9fWlmKCQpcmV0dXJuICQuY3VycmVudD1LKCksZnVuY3Rpb24oKXtyZXR1cm4gJC5jdXJyZW50PW51bGx9fSxKPT1udWxsP0o6Si5jb25jYXQoJCkpfWZ1bmN0aW9uIFIxKCQsSyl7dmFyIEo9WTUoZzArKyw3KTtyZXR1cm4gRzgoSi5fX0gsSykmJihKLl9fPSQoKSxKLl9fSD1LLEouX19oPSQpLEouX199ZnVuY3Rpb24gRCgkLEspe3JldHVybiBYNT04LFIxKGZ1bmN0aW9uKCl7cmV0dXJuICR9LEspfWZ1bmN0aW9uIEMwKCQpe3ZhciBLPWIxLmNvbnRleHRbJC5fX2NdLEo9WTUoZzArKyw5KTtyZXR1cm4gSi5jPSQsSz8oSi5fXz09bnVsbCYmKEouX189ITAsSy5zdWIoYjEpKSxLLnByb3BzLnZhbHVlKTokLl9ffWZ1bmN0aW9uIEwyKCQsSyl7ajEudXNlRGVidWdWYWx1ZSYmajEudXNlRGVidWdWYWx1ZShLP0soJCk6JCl9ZnVuY3Rpb24gcTUoKXt2YXIgJD1ZNShnMCsrLDExKTtpZighJC5fXyl7Zm9yKHZhciBLPWIxLl9fdjtLIT09bnVsbCYmIUsuX19tJiZLLl9fIT09bnVsbDspSz1LLl9fO3ZhciBKPUsuX19tfHwoSy5fX209WzAsMF0pOyQuX189IlAiK0pbMF0rIi0iK0pbMV0rK31yZXR1cm4gJC5fX31mdW5jdGlvbiBxNygpe2Zvcih2YXIgJDskPWIzLnNoaWZ0KCk7KXt2YXIgSz0kLl9fSDtpZigkLl9fUCYmSyl0cnl7Sy5fX2guc29tZShVMiksSy5fX2guc29tZShWOCksSy5fX2g9W119Y2F0Y2goSil7Sy5fX2g9W10sajEuX19lKEosJC5fX3YpfX19ajEuX19iPWZ1bmN0aW9uKCQpe2IxPW51bGwsVzMmJlczKCQpfSxqMS5fXz1mdW5jdGlvbigkLEspeyQmJksuX19rJiZLLl9fay5fX20mJigkLl9fbT1LLl9fay5fX20pLEUzJiZFMygkLEspfSxqMS5fX3I9ZnVuY3Rpb24oJCl7XzMmJl8zKCQpLGcwPTA7dmFyIEs9KGIxPSQuX19jKS5fX0g7SyYmKHE4PT09YjE/KEsuX19oPVtdLGIxLl9faD1bXSxLLl9fLnNvbWUoZnVuY3Rpb24oSil7Si5fX04mJihKLl9fPUouX19OKSxKLnU9Si5fX049dm9pZCAwfSkpOihLLl9faC5zb21lKFUyKSxLLl9faC5zb21lKFY4KSxLLl9faD1bXSxnMD0wKSkscTg9YjF9LGoxLmRpZmZlZD1mdW5jdGlvbigkKXtEMyYmRDMoJCk7dmFyIEs9JC5fX2M7SyYmSy5fX0gmJihLLl9fSC5fX2gubGVuZ3RoJiYoYjMucHVzaChLKSE9PTEmJlAzPT09ajEucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKFAzPWoxLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fFY3KShxNykpLEsuX19ILl9fLnNvbWUoZnVuY3Rpb24oSil7Si51JiYoSi5fX0g9Si51KSxKLnU9dm9pZCAwfSkpLHE4PWIxPW51bGx9LGoxLl9fYz1mdW5jdGlvbigkLEspe0suc29tZShmdW5jdGlvbihKKXt0cnl7Si5fX2guc29tZShVMiksSi5fX2g9Si5fX2guZmlsdGVyKGZ1bmN0aW9uKFope3JldHVybiFaLl9ffHxWOChaKX0pfWNhdGNoKFope0suc29tZShmdW5jdGlvbihYKXtYLl9faCYmKFguX19oPVtdKX0pLEs9W10sajEuX19lKFosSi5fX3YpfX0pLFQzJiZUMygkLEspfSxqMS51bm1vdW50PWZ1bmN0aW9uKCQpe3czJiZ3MygkKTt2YXIgSyxKPSQuX19jO0omJkouX19IJiYoSi5fX0guX18uc29tZShmdW5jdGlvbihaKXt0cnl7VTIoWil9Y2F0Y2goWCl7Sz1YfX0pLEouX19IPXZvaWQgMCxLJiZqMS5fX2UoSyxKLl9fdikpfTt2YXIgSTM9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBWNygkKXt2YXIgSyxKPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFopLEkzJiZjYW5jZWxBbmltYXRpb25GcmFtZShLKSxzZXRUaW1lb3V0KCQpfSxaPXNldFRpbWVvdXQoSiwzNSk7STMmJihLPXJlcXVlc3RBbmltYXRpb25GcmFtZShKKSl9ZnVuY3Rpb24gVTIoJCl7dmFyIEs9YjEsSj0kLl9fYzt0eXBlb2YgSj09ImZ1bmN0aW9uIiYmKCQuX19jPXZvaWQgMCxKKCkpLGIxPUt9ZnVuY3Rpb24gVjgoJCl7dmFyIEs9YjE7JC5fX2M9JC5fXygpLGIxPUt9ZnVuY3Rpb24gRzgoJCxLKXtyZXR1cm4hJHx8JC5sZW5ndGghPT1LLmxlbmd0aHx8Sy5zb21lKGZ1bmN0aW9uKEosWil7cmV0dXJuIEohPT0kW1pdfSl9ZnVuY3Rpb24geTMoJCxLKXtyZXR1cm4gdHlwZW9mIEs9PSJmdW5jdGlvbiI/SygkKTpLfWZ1bmN0aW9uIG0zKCQsSyl7Zm9yKHZhciBKIGluIEspJFtKXT1LW0pdO3JldHVybiAkfWZ1bmN0aW9uIE44KCQsSyl7Zm9yKHZhciBKIGluICQpaWYoSiE9PSJfX3NvdXJjZSImJiEoSiBpbiBLKSlyZXR1cm4hMDtmb3IodmFyIFogaW4gSylpZihaIT09Il9fc291cmNlIiYmJFtaXSE9PUtbWl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcDMoJCxLKXt2YXIgSj1LKCksWj1PKHt0OntfXzpKLHU6S319KSxYPVpbMF0udCxZPVpbMV07cmV0dXJuIF8wKGZ1bmN0aW9uKCl7WC5fXz1KLFgudT1LLEI4KFgpJiZZKHt0Olh9KX0sWyQsSixLXSksRShmdW5jdGlvbigpe3JldHVybiBCOChYKSYmWSh7dDpYfSksJChmdW5jdGlvbigpe0I4KFgpJiZZKHt0Olh9KX0pfSxbJF0pLEp9ZnVuY3Rpb24gQjgoJCl7dHJ5e3JldHVybiEoKEs9JC5fXyk9PT0oSj0kLnUoKSkmJihLIT09MHx8MS9LPT0xL0opfHxLIT1LJiZKIT1KKX1jYXRjaChaKXtyZXR1cm4hMH12YXIgSyxKfWZ1bmN0aW9uIHUzKCQpeyQoKX1mdW5jdGlvbiBsMygkKXtyZXR1cm4gJH1mdW5jdGlvbiBkMygpe3JldHVyblshMSx1M119dmFyIGMzPV8wO2Z1bmN0aW9uIFU4KCQsSyl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1LfWZ1bmN0aW9uIG4wKCQsSyl7ZnVuY3Rpb24gSihYKXt2YXIgWT10aGlzLnByb3BzLnJlZjtyZXR1cm4gWSE9WC5yZWYmJlkmJih0eXBlb2YgWT09ImZ1bmN0aW9uIj9ZKG51bGwpOlkuY3VycmVudD1udWxsKSxLPyFLKHRoaXMucHJvcHMsWCl8fFkhPVgucmVmOk44KHRoaXMucHJvcHMsWCl9ZnVuY3Rpb24gWihYKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9SixmMSgkLFgpfXJldHVybiBaLmRpc3BsYXlOYW1lPSJNZW1vKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFouX19mPVoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWi50eXBlPSQsWn0oVTgucHJvdG90eXBlPW5ldyB1MSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsVTgucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEspe3JldHVybiBOOCh0aGlzLnByb3BzLCQpfHxOOCh0aGlzLnN0YXRlLEspfTt2YXIgUzM9cy5fX2I7cy5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLFMzJiZTMygkKX07dmFyIEc3PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIGswKCQpe2Z1bmN0aW9uIEsoSil7dmFyIFo9bTMoe30sSik7cmV0dXJuIGRlbGV0ZSBaLnJlZiwkKFosSi5yZWZ8fG51bGwpfXJldHVybiBLLiQkdHlwZW9mPUc3LEsucmVuZGVyPSQsSy5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1LLl9fZj0hMCxLLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLEt9dmFyIHgzPWZ1bmN0aW9uKCQsSyl7cmV0dXJuICQ9PW51bGw/bnVsbDpYMChYMCgkKS5tYXAoSykpfSxCNz17bWFwOngzLGZvckVhY2g6eDMsY291bnQ6ZnVuY3Rpb24oJCl7cmV0dXJuICQ/WDAoJCkubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24oJCl7dmFyIEs9WDAoJCk7aWYoSy5sZW5ndGghPT0xKXRocm93IkNoaWxkcmVuLm9ubHkiO3JldHVybiBLWzBdfSx0b0FycmF5OlgwfSxONz1zLl9fZTtzLl9fZT1mdW5jdGlvbigkLEssSixaKXtpZigkLnRoZW4pe2Zvcih2YXIgWCxZPUs7WT1ZLl9fOylpZigoWD1ZLl9fYykmJlguX19jKXJldHVybiBLLl9fZT09bnVsbCYmKEsuX19lPUouX19lLEsuX19rPUouX19rKSxYLl9fYygkLEspfU43KCQsSyxKLFopfTt2YXIgUjM9cy51bm1vdW50O2Z1bmN0aW9uIHIzKCQsSyxKKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihaKXt0eXBlb2YgWi5fX2M9PSJmdW5jdGlvbiImJlouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9bTMoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PUomJigkLl9fYy5fX1A9SyksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIHIzKFosSyxKKX0pKSwkfWZ1bmN0aW9uIG8zKCQsSyxKKXtyZXR1cm4gJCYmSiYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gbzMoWixLLEopfSksJC5fX2MmJiQuX19jLl9fUD09PUsmJigkLl9fZSYmSi5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1KKSksJH1mdW5jdGlvbiBIMigpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBuMygkKXt2YXIgSz0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSyYmSy5fX2EmJksuX19hKCQpfWZ1bmN0aW9uIFU3KCQpe3ZhciBLLEosWixYPW51bGw7ZnVuY3Rpb24gWShxKXtpZihLfHwoSz0kKCkpLnRoZW4oZnVuY3Rpb24oVil7ViYmKFg9Vi5kZWZhdWx0fHxWKSxaPSEwfSxmdW5jdGlvbihWKXtKPVYsWj0hMH0pLEopdGhyb3cgSjtpZighWil0aHJvdyBLO3JldHVybiBYP2YxKFgscSk6bnVsbH1yZXR1cm4gWS5kaXNwbGF5TmFtZT0iTGF6eSIsWS5fX2Y9ITAsWX1mdW5jdGlvbiBiNSgpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfXMudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSz0kLl9fYztLJiYoSy5fX3o9ITApLEsmJksuX19SJiZLLl9fUigpLEsmJjMyJiQuX191JiYoJC50eXBlPW51bGwpLFIzJiZSMygkKX0sKEgyLnByb3RvdHlwZT1uZXcgdTEpLl9fYz1mdW5jdGlvbigkLEspe3ZhciBKPUsuX19jLFo9dGhpcztaLm89PW51bGwmJihaLm89W10pLFouby5wdXNoKEopO3ZhciBYPW4zKFouX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxaLl9fenx8KFk9ITAsSi5fX1I9bnVsbCxYP1goTik6TigpKX07Si5fX1I9cTt2YXIgVj1KLl9fUDtKLl9fUD1udWxsO3ZhciBOPWZ1bmN0aW9uKCl7aWYoIS0tWi5fX3Upe2lmKFouc3RhdGUuX19hKXt2YXIgQj1aLnN0YXRlLl9fYTtaLl9fdi5fX2tbMF09bzMoQixCLl9fYy5fX1AsQi5fX2MuX19PKX12YXIgVTtmb3IoWi5zZXRTdGF0ZSh7X19hOlouX19iPW51bGx9KTtVPVouby5wb3AoKTspVS5fX1A9VixVLmZvcmNlVXBkYXRlKCl9fTtaLl9fdSsrfHwzMiZLLl9fdXx8Wi5zZXRTdGF0ZSh7X19hOlouX19iPVouX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxIMi5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LEgyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxLKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPXIzKHRoaXMuX19iLEosWi5fX089Wi5fX1ApfXRoaXMuX19iPW51bGx9dmFyIFg9Sy5fX2EmJmYxKEoxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIFgmJihYLl9fdSY9LTMzKSxbZjEoSjEsbnVsbCxLLl9fYT9udWxsOiQuY2hpbGRyZW4pLFhdfTt2YXIgdjM9ZnVuY3Rpb24oJCxLLEope2lmKCsrSlsxXT09PUpbMF0mJiQubC5kZWxldGUoSyksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKEo9JC5pO0o7KXtmb3IoO0oubGVuZ3RoPjM7KUoucG9wKCkoKTtpZihKWzFdPEpbMF0pYnJlYWs7JC5pPUo9SlsyXX19O2Z1bmN0aW9uIHo3KCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gTDcoJCl7dmFyIEs9dGhpcyxKPSQuaDtpZihLLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7UzAobnVsbCxLLnYpLEsudj1udWxsLEsuaD1udWxsfSxLLmgmJksuaCE9PUomJksuY29tcG9uZW50V2lsbFVubW91bnQoKSwhSy52KXtmb3IodmFyIFo9Sy5fX3Y7WiE9PW51bGwmJiFaLl9fbSYmWi5fXyE9PW51bGw7KVo9Wi5fXztLLmg9SixLLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpKLGNoaWxkTm9kZXM6W10sX19rOntfX206Wi5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpKLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oWCxZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChYKSxLLmguaW5zZXJ0QmVmb3JlKFgsWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKFgpe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoWCk+Pj4xLDEpLEsuaC5yZW1vdmVDaGlsZChYKX19fVMwKGYxKHo3LHtjb250ZXh0OksuY29udGV4dH0sJC5fX3YpLEsudil9ZnVuY3Rpb24gejgoJCxLKXt2YXIgSj1mMShMNyx7X192OiQsaDpLfSk7cmV0dXJuIEouY29udGFpbmVySW5mbz1LLEp9KGI1LnByb3RvdHlwZT1uZXcgdTEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSz10aGlzLEo9bjMoSy5fX3YpLFo9Sy5sLmdldCgkKTtyZXR1cm4gWlswXSsrLGZ1bmN0aW9uKFgpe3ZhciBZPWZ1bmN0aW9uKCl7Sy5wcm9wcy5yZXZlYWxPcmRlcj8oWi5wdXNoKFgpLHYzKEssJCxaKSk6WCgpfTtKP0ooWSk6WSgpfX0sYjUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSz1YMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZLLnJldmVyc2UoKTtmb3IodmFyIEo9Sy5sZW5ndGg7Si0tOyl0aGlzLmwuc2V0KEtbSl0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LGI1LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9YjUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihLLEope3YzKCQsSixLKX0pfTt2YXIgaTM9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsSDc9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLEM3PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sazc9L1tBLVowLTldL2csRjc9dHlwZW9mIGRvY3VtZW50PCJ1IixBNz1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIE83KCQsSyxKKXtyZXR1cm4gSy5fX2s9PW51bGwmJihLLnRleHRDb250ZW50PSIiKSxTMCgkLEspLHR5cGVvZiBKPT0iZnVuY3Rpb24iJiZKKCksJD8kLl9fYzpudWxsfWZ1bmN0aW9uIE03KCQsSyxKKXtyZXR1cm4gTjIoJCxLKSx0eXBlb2YgSj09ImZ1bmN0aW9uIiYmSigpLCQ/JC5fX2M6bnVsbH11MS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodTEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihLKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6S30pfX0pfSk7dmFyIGozPXMuZXZlbnQ7cy5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gajMmJigkPWozKCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgTDgsUDc9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LGczPXMudm5vZGU7cy52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSyl7dmFye3Byb3BzOkosdHlwZTpafT1LLFg9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIEope3ZhciBWPUpbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gSikmJlY9PW51bGx8fEY3JiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgTj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gSiYmSi52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJlY9PT0hMD9WPSIiOk49PT0idHJhbnNsYXRlIiYmVj09PSJubyI/Vj0hMTpOWzBdPT09Im8iJiZOWzFdPT09Im4iP049PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6TiE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8QTcoSi50eXBlKT9OPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Tj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOkM3LnRlc3QocSkmJihxPU4pOk49cT0ib25pbnB1dCI6WSYmSDcudGVzdChxKT9xPXEucmVwbGFjZShrNywiLSQmIikudG9Mb3dlckNhc2UoKTpWPT09bnVsbCYmKFY9dm9pZCAwKSxOPT09Im9uaW5wdXQiJiZYW3E9Tl0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLFhbcV09Vn19Wj09InNlbGVjdCImJihYLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KFgudmFsdWUpJiYoWC52YWx1ZT1YMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9WC52YWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMX0pKSxYLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKFgudmFsdWU9WDAoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgubXVsdGlwbGU/WC5kZWZhdWx0VmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTE6WC5kZWZhdWx0VmFsdWU9PUIucHJvcHMudmFsdWV9KSkpLEouY2xhc3MmJiFKLmNsYXNzTmFtZT8oWC5jbGFzcz1KLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjbGFzc05hbWUiLFA3KSk6Si5jbGFzc05hbWUmJihYLmNsYXNzPVguY2xhc3NOYW1lPUouY2xhc3NOYW1lKSxLLnByb3BzPVh9KCQpLCQuJCR0eXBlb2Y9aTMsZzMmJmczKCQpfTt2YXIgaDM9cy5fX3I7cy5fX3I9ZnVuY3Rpb24oJCl7aDMmJmgzKCQpLEw4PSQuX19jfTt2YXIgZjM9cy5kaWZmZWQ7cy5kaWZmZWQ9ZnVuY3Rpb24oJCl7ZjMmJmYzKCQpO3Zhcntwcm9wczpLLF9fZTpKfT0kO0ohPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBLJiZLLnZhbHVlIT09Si52YWx1ZSYmKEoudmFsdWU9Sy52YWx1ZT09bnVsbD8iIjpLLnZhbHVlKSxMOD1udWxsfTt2YXIgVzc9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKCQpe3JldHVybiBMOC5fX25bJC5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazpELHVzZUNvbnRleHQ6QzAsdXNlRGVidWdWYWx1ZTpMMix1c2VEZWZlcnJlZFZhbHVlOmwzLHVzZUVmZmVjdDpFLHVzZUlkOnE1LHVzZUltcGVyYXRpdmVIYW5kbGU6ejIsdXNlSW5zZXJ0aW9uRWZmZWN0OmMzLHVzZUxheW91dEVmZmVjdDpfMCx1c2VNZW1vOlIxLHVzZVJlZHVjZXI6bzAsdXNlUmVmOkksdXNlU3RhdGU6Tyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpwMyx1c2VUcmFuc2l0aW9uOmQzfX19O2Z1bmN0aW9uIF83KCQpe3JldHVybiBmMS5iaW5kKG51bGwsJCl9ZnVuY3Rpb24gQzIoJCl7cmV0dXJuISEkJiYkLiQkdHlwZW9mPT09aTN9ZnVuY3Rpb24gRDcoJCl7cmV0dXJuIEMyKCQpJiYkLnR5cGU9PT1KMX1mdW5jdGlvbiBUNygkKXtyZXR1cm4hISQmJnR5cGVvZiAkLmRpc3BsYXlOYW1lPT0ic3RyaW5nIiYmJC5kaXNwbGF5TmFtZS5pbmRleE9mKCJNZW1vKCIpPT0wfWZ1bmN0aW9uIHc3KCQpe3JldHVybiBDMigkKT9ZOC5hcHBseShudWxsLGFyZ3VtZW50cyk6JH1mdW5jdGlvbiBFNygkKXtyZXR1cm4hISQuX19rJiYoUzAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gSTcoJCl7cmV0dXJuICQmJigkLmJhc2V8fCQubm9kZVR5cGU9PT0xJiYkKXx8bnVsbH12YXIgYjc9ZnVuY3Rpb24oJCxLKXtyZXR1cm4gJChLKX0seTc9ZnVuY3Rpb24oJCxLKXt2YXIgSj1zLmRlYm91bmNlUmVuZGVyaW5nO3MuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24oWCl7cmV0dXJuIFgoKX07dmFyIFo9JChLKTtyZXR1cm4gcy5kZWJvdW5jZVJlbmRlcmluZz1KLFp9LFM3PUMyLGg9e3VzZVN0YXRlOk8sdXNlSWQ6cTUsdXNlUmVkdWNlcjpvMCx1c2VFZmZlY3Q6RSx1c2VMYXlvdXRFZmZlY3Q6XzAsdXNlSW5zZXJ0aW9uRWZmZWN0OmMzLHVzZVRyYW5zaXRpb246ZDMsdXNlRGVmZXJyZWRWYWx1ZTpsMyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpwMyxzdGFydFRyYW5zaXRpb246dTMsdXNlUmVmOkksdXNlSW1wZXJhdGl2ZUhhbmRsZTp6Mix1c2VNZW1vOlIxLHVzZUNhbGxiYWNrOkQsdXNlQ29udGV4dDpDMCx1c2VEZWJ1Z1ZhbHVlOkwyLHZlcnNpb246IjE4LjMuMSIsQ2hpbGRyZW46QjcscmVuZGVyOk83LGh5ZHJhdGU6TTcsdW5tb3VudENvbXBvbmVudEF0Tm9kZTpFNyxjcmVhdGVQb3J0YWw6ejgsY3JlYXRlRWxlbWVudDpmMSxjcmVhdGVDb250ZXh0OkgwLGNyZWF0ZUZhY3Rvcnk6XzcsY2xvbmVFbGVtZW50Onc3LGNyZWF0ZVJlZjpJNSxGcmFnbWVudDpKMSxpc1ZhbGlkRWxlbWVudDpDMixpc0VsZW1lbnQ6UzcsaXNGcmFnbWVudDpENyxpc01lbW86VDcsZmluZERPTU5vZGU6STcsQ29tcG9uZW50OnUxLFB1cmVDb21wb25lbnQ6VTgsbWVtbzpuMCxmb3J3YXJkUmVmOmswLGZsdXNoU3luYzp5Nyx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpiNyxTdHJpY3RNb2RlOkoxLFN1c3BlbnNlOkgyLFN1c3BlbnNlTGlzdDpiNSxsYXp5OlU3LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOlc3fTtmdW5jdGlvbiBhMygkKXtsZXQgSz1uZXcgVWludDhBcnJheSg2NTUzNiksSj0wLFo9MCxYPTEwMjQsWT1uZXcgVGV4dERlY29kZXIoImxhdGluMSIpLHE9KHopPT57aWYoSit6Lmxlbmd0aD5LLmxlbmd0aCl7aWYoWj4wKUsuY29weVdpdGhpbigwLFosSiksSi09WixaPTA7aWYoSit6Lmxlbmd0aD5LLmxlbmd0aCl7bGV0IEg9Sy5sZW5ndGg7d2hpbGUoSDxKK3oubGVuZ3RoKUgqPTI7bGV0IEY9bmV3IFVpbnQ4QXJyYXkoSCk7Ri5zZXQoSy5zdWJhcnJheSgwLEopKSxLPUZ9fUsuc2V0KHosSiksSis9ei5sZW5ndGh9LFY9KHopPT57bGV0IEg9TWF0aC5taW4oSi00LHorWCk7Zm9yKGxldCBGPXo7Rjw9SDtGKyspaWYoS1tGXT09PTEzJiZLW0YrMV09PT0xMCYmS1tGKzJdPT09MTMmJktbRiszXT09PTEwKXJldHVybiBGO3JldHVybi0xfSxOPSh6LEgpPT57bGV0IEY9WS5kZWNvZGUoSy5zdWJhcnJheSh6LEgpKSxMPS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMoRik7cmV0dXJuIEw/TnVtYmVyKExbMV0pOm51bGx9LEI9MCxVPSh6KT0+e2xldCBIPS0xO2ZvcihsZXQgRj16O0Y8Si0xO0YrKylpZihLW0ZdPT09MjU1JiZLW0YrMV09PT0yMTYpe0g9RjticmVha31pZihIPT09LTEpcmV0dXJuIG51bGw7Zm9yKGxldCBGPU1hdGgubWF4KEgrMixCKTtGPEotMTtGKyspaWYoS1tGXT09PTI1NSYmS1tGKzFdPT09MjE3KXJldHVybiBCPTAse3M6SCxlOkYrMn07cmV0dXJuIEI9TWF0aC5tYXgoSCsyLEotMSksbnVsbH0sRz0oKT0+e3doaWxlKFo8Sil7bGV0IHo9VihaKTtpZih6Pj0wKXtsZXQgRj1OKFoseik7aWYoRiE9bnVsbCYmRj4wKXtsZXQgTD16KzQsaz1MK0Y7aWYoSjxrKWJyZWFrOyQoSy5zdWJhcnJheShMLGspKSxaPWs7Y29udGludWV9fWVsc2UgaWYoSi1aPD1YKWJyZWFrO2xldCBIPVUoWik7aWYoIUgpYnJlYWs7JChLLnN1YmFycmF5KEgucyxILmUpKSxaPUguZX1pZihaPjApe2lmKFo8SilLLmNvcHlXaXRoaW4oMCxaLEopO0otPVosQj1CPlo/Qi1aOjAsWj0wfX07cmV0dXJue3B1c2goeil7aWYoei5sZW5ndGg9PT0wKXJldHVybjtxKHopLEcoKX19fWZ1bmN0aW9uIGsyKCQsSyl7bGV0IEo9SShLKTtKLmN1cnJlbnQ9SztsZXQgWj1JKG5ldyBTZXQpLFg9RCgoWSk9PntyZXR1cm4gWi5jdXJyZW50LmFkZChZKSwoKT0+e1ouY3VycmVudC5kZWxldGUoWSl9fSxbXSk7cmV0dXJuIEUoKCk9PntpZighJClyZXR1cm47bGV0IFk9bmV3IEFib3J0Q29udHJvbGxlcixxPSExLFY9bnVsbCxOPW5ldyBVUkwoJCk7Ti5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IEI9Ti50b1N0cmluZygpLFU9KCk9PntpZihxfHxZLnNpZ25hbC5hYm9ydGVkfHxWKXJldHVybjtWPXNldFRpbWVvdXQoKCk9PntWPW51bGwseigpfSwxMDAwKX0sRz0oSCk9PntpZihKLmN1cnJlbnQ/LighMCksWi5jdXJyZW50LnNpemU9PT0wKXJldHVybjtsZXQgRj1ILmxlbmd0aD49OCYmSFswXT09PTEzNyYmSFsxXT09PTgwJiZIWzJdPT09NzgmJkhbM109PT03MSxMPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW0hdLHt0eXBlOkY/ImltYWdlL3BuZyI6ImltYWdlL2pwZWcifSkpO2ZvcihsZXQgayBvZiBaLmN1cnJlbnQpayhMKX0sej1hc3luYygpPT57dHJ5e2xldCBGPShhd2FpdCBmZXRjaChCLHtzaWduYWw6WS5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUYpe1UoKTtyZXR1cm59bGV0IEw9YTMoRyk7d2hpbGUoITApe2xldHtkb25lOmssdmFsdWU6Q309YXdhaXQgRi5yZWFkKCk7aWYoaylicmVhaztpZihDJiZDLmxlbmd0aClMLnB1c2goQyl9fWNhdGNoe31maW5hbGx5e2lmKCFxKUouY3VycmVudD8uKCExKTtVKCl9fTtyZXR1cm4geigpLCgpPT57aWYocT0hMCxKLmN1cnJlbnQ/LighMSksViljbGVhclRpbWVvdXQoVik7WS5hYm9ydCgpfX0sWyRdKSx7c3Vic2NyaWJlRnJhbWU6WCxmcmFtZTpudWxsfX1mdW5jdGlvbiBzMygkLEssSil7aWYoISQpcmV0dXJuIG51bGw7Zm9yKGxldCBaIG9mICQucGllY2VzKXtpZihaLmxlbmd0aCE9PTUpY29udGludWU7bGV0W1gsWSxxLFYsTl09WjtpZihbLi4uWCwuLi5ZLC4uLnEsLi4uViwuLi5OXS5zb21lKChvKT0+IU51bWJlci5pc0Zpbml0ZShvKSkpY29udGludWU7bGV0IEI9WVswXS1xWzBdLFU9VlswXS1xWzBdLEc9WVsxXS1xWzFdLHo9VlsxXS1xWzFdLEg9WFswXS1ZWzBdK3FbMF0tVlswXSxGPVhbMV0tWVsxXStxWzFdLVZbMV0sTD1CKnotVSpHO2lmKE1hdGguYWJzKEwpPDAuMDAwMDAwMDAwMSljb250aW51ZTtsZXQgaz0oSCp6LVUqRikvTCxDPShCKkYtSCpHKS9MLFA9WVswXS1YWzBdK2sqWVswXSx5PVZbMF0tWFswXStDKlZbMF0sVD1ZWzFdLVhbMV0raypZWzFdLEE9VlsxXS1YWzFdK0MqVlsxXSx3PVAtSyprLGk9eS1LKkMsdj1ULUoqayxqPUEtSipDLGQ9dypqLWkqdjtpZihNYXRoLmFicyhkKTwwLjAwMDAwMDAwMDEpY29udGludWU7bGV0IFoxPSgoSy1YWzBdKSpqLWkqKEotWFsxXSkpL2QscTE9KHcqKEotWFsxXSktKEstWFswXSkqdikvZDtpZihaMTwtMC4wMDF8fHExPC0wLjAwMXx8WjE+MS4wMDF8fHExPjEuMDAxKWNvbnRpbnVlO3JldHVybnt4Ok5bMF0rTWF0aC5tYXgoMCxNYXRoLm1pbigxLFoxKSkqTlsyXSx5Ok5bMV0rTWF0aC5tYXgoMCxNYXRoLm1pbigxLHExKSkqTlszXX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gdDMoJCxLKXtyZXR1cm4gJC5waWVjZXMuZmxhdE1hcCgoSik9PntpZihKLmxlbmd0aCE9PTUpcmV0dXJuW107bGV0W1osWCxZLHEsVl09SixOPU1hdGgubWF4KEsueCxWWzBdKSxCPU1hdGgubWF4KEsueSxWWzFdKSxVPU1hdGgubWluKEsueCtLLndpZHRoLFZbMF0rVlsyXSksRz1NYXRoLm1pbihLLnkrSy5oZWlnaHQsVlsxXStWWzNdKTtpZihVPD1OfHxHPD1CKXJldHVybltdO2xldCB6PVhbMF0tWVswXSxIPXFbMF0tWVswXSxGPVhbMV0tWVsxXSxMPXFbMV0tWVsxXSxrPVpbMF0tWFswXStZWzBdLXFbMF0sQz1aWzFdLVhbMV0rWVsxXS1xWzFdLFA9eipMLUgqRjtpZihNYXRoLmFicyhQKTwwLjAwMDAwMDAwMDEpcmV0dXJuW107bGV0IHk9KGsqTC1IKkMpL1AsVD0oeipDLWsqRikvUCxBPSh3LGkpPT57bGV0IHY9KHctVlswXSkvVlsyXSxqPShpLVZbMV0pL1ZbM10sZD0xK3kqditUKmo7cmV0dXJuWygoWFswXS1aWzBdK3kqWFswXSkqdisocVswXS1aWzBdK1QqcVswXSkqaitaWzBdKS9kLCgoWFsxXS1aWzFdK3kqWFsxXSkqdisocVsxXS1aWzFdK1QqcVsxXSkqaitaWzFdKS9kXX07cmV0dXJuW1tBKE4sQiksQShVLEIpLEEoVSxHKSxBKE4sRyldXX0pfWZ1bmN0aW9uIGUzKCQpe3JldHVybiBKU09OLnN0cmluZ2lmeSgkJiZbJC5wYW5lbCwkLmhpbmdlRGVncmVlcywkLnBpZWNlc10pfWZ1bmN0aW9uICQ5KCQpe2xldCBLPSQ/LmhhcmR3YXJlO2lmKCFLfHxLLmxlbmd0aCE9PTR8fEsuc29tZSgoe3g6Six5OlosYW5nbGU6WH0pPT4hW0osWixYXS5ldmVyeShOdW1iZXIuaXNGaW5pdGUpKSlyZXR1cm5bXTtyZXR1cm4gSy5tYXAoKEosWik9Pih7Li4uSixrZXk6Wn0pKX12YXIgRjI9KC4uLiQpPT4kLmZpbHRlcigoSyxKLFopPT57cmV0dXJuIEJvb2xlYW4oSykmJksudHJpbSgpIT09IiImJlouaW5kZXhPZihLKT09PUp9KS5qb2luKCIgIikudHJpbSgpO3ZhciBLOT0oJCk9PiQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO3ZhciBKOT0oJCk9PiQucmVwbGFjZSgvXihbQS1aXSl8W1xzLV9dKyhcdykvZywoSyxKLFopPT5aP1oudG9VcHBlckNhc2UoKTpKLnRvTG93ZXJDYXNlKCkpO3ZhciBIOD0oJCk9PntsZXQgSz1KOSgkKTtyZXR1cm4gSy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStLLnNsaWNlKDEpfTt2YXIgQTI9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3ZhciBROT0oJCk9Pntmb3IobGV0IEsgaW4gJClpZihLLnN0YXJ0c1dpdGgoImFyaWEtIil8fEs9PT0icm9sZSJ8fEs9PT0idGl0bGUiKXJldHVybiEwO3JldHVybiExfTt2YXIgeDc9SDAoe30pO3ZhciBaOT0oKT0+QzAoeDcpO3ZhciBYOT1rMCgoe2NvbG9yOiQsc2l6ZTpLLHN0cm9rZVdpZHRoOkosYWJzb2x1dGVTdHJva2VXaWR0aDpaLGNsYXNzTmFtZTpYPSIiLGNoaWxkcmVuOlksaWNvbk5vZGU6cSwuLi5WfSxOKT0+e2xldHtzaXplOkI9MjQsc3Ryb2tlV2lkdGg6VT0yLGFic29sdXRlU3Ryb2tlV2lkdGg6Rz0hMSxjb2xvcjp6PSJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZTpIPSIifT1aOSgpPz97fSxGPVo/P0c/TnVtYmVyKEo/P1UpKjI0L051bWJlcihLPz9CKTpKPz9VO3JldHVybiBmMSgic3ZnIix7cmVmOk4sLi4uQTIsd2lkdGg6Sz8/Qj8/QTIud2lkdGgsaGVpZ2h0Oks/P0I/P0EyLmhlaWdodCxzdHJva2U6JD8/eixzdHJva2VXaWR0aDpGLGNsYXNzTmFtZTpGMigibHVjaWRlIixILFgpLC4uLiFZJiYhUTkoVikmJnsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sLi4uVn0sWy4uLnEubWFwKChbTCxrXSk9PmYxKEwsaykpLC4uLkFycmF5LmlzQXJyYXkoWSk/WTpbWV1dKX0pO3ZhciBMMT0oJCxLKT0+e2xldCBKPWswKCh7Y2xhc3NOYW1lOlosLi4uWH0sWSk9PmYxKFg5LHtyZWY6WSxpY29uTm9kZTpLLGNsYXNzTmFtZTpGMihgbHVjaWRlLSR7SzkoSDgoJCkpfWAsYGx1Y2lkZS0keyR9YCxaKSwuLi5YfSkpO3JldHVybiBKLmRpc3BsYXlOYW1lPUg4KCQpLEp9O3ZhciBSNz1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCIsa2V5OiJmaDNocWEifV1dLEQwPUwxKCJwYW5lbC1sZWZ0IixSNyk7dmFyIHY3PVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiLGtleToieHduemlwIn1dLFsicGF0aCIse2Q6Ik0yMSAxMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIsa2V5OiIxNHJzdnEifV1dLGgwPUwxKCJzcXVhcmUtbW91c2UtcG9pbnRlciIsdjcpO3ZhciBqNz1bWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiIsa2V5OiJpenhsYW8ifV0sWyJwYXRoIix7ZDoiTTEwIDR2NCIsa2V5OiJwcDh1ODAifV0sWyJwYXRoIix7ZDoiTTIgOGgyMCIsa2V5OiJkMTFjczcifV0sWyJwYXRoIix7ZDoiTTYgNHY0IixrZXk6IjFzdnRqdyJ9XV0seTU9TDEoImFwcC13aW5kb3ciLGo3KTt2YXIgZzc9W1sicGF0aCIse2Q6Ik03IDdoMTB2MTAiLGtleToiMXRpdm45In1dLFsicGF0aCIse2Q6Ik03IDE3IDE3IDciLGtleToiMXZraXphIn1dXSxTNT1MMSgiYXJyb3ctdXAtcmlnaHQiLGc3KTt2YXIgaDc9W1sicGF0aCIse2Q6Ik0xMy45OTcgNGEyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjlhMiAyIDAgMCAxIDItMmgxLjk5N2EyIDIgMCAwIDAgMS43NTktMS4wNDhsLjQ4OS0uOTA0QTIgMiAwIDAgMSAxMC4wMDQgNHoiLGtleToiMTh1NmdnIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjMiLGtleToiMXZnM2V1In1dXSx4NT1MMSgiY2FtZXJhIixoNyk7dmFyIGY3PVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXSxSNT1MMSgiY2hlY2siLGY3KTt2YXIgbTc9W1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dLHY1PUwxKCJjaGV2cm9uLWRvd24iLG03KTt2YXIgcDc9W1sicGF0aCIse2Q6Im05IDE4IDYtNi02LTYiLGtleToibXRoaHdxIn1dXSxqNT1MMSgiY2hldnJvbi1yaWdodCIscDcpO3ZhciB1Nz1bWyJwYXRoIix7ZDoiTTEyIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAxMiAxOHoiLGtleToiYjE5aDVxIn1dLFsicGF0aCIse2Q6Ik0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIsa2V5OiJoN2g1Z2UifV1dLGc1PUwxKCJmYXN0LWZvcndhcmQiLHU3KTt2YXIgbDc9W1sicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3IixrZXk6ImNvdWhpNyJ9XSxbInBhdGgiLHtkOiJtMjEgNy01IDUgNSA1VjciLGtleToiNm91aWE3In1dLFsicGF0aCIse2Q6Ik0xMiAyMHYyIixrZXk6IjFsaDFrZyJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiIsa2V5OiI4amN4dWQifV0sWyJwYXRoIix7ZDoiTTEyIDh2MiIsa2V5OiIxd29xaXYifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV1dLGg1PUwxKCJmbGlwLWhvcml6b250YWwtMiIsbDcpO3ZhciBkNz1bWyJsaW5lIix7eDE6IjIyIix4MjoiMiIseTE6IjYiLHkyOiI2IixrZXk6IjE1dzdkcSJ9XSxbImxpbmUiLHt4MToiMjIiLHgyOiIyIix5MToiMTgiLHkyOiIxOCIsa2V5OiIxaXA0OHAifV0sWyJsaW5lIix7eDE6IjYiLHgyOiI2Iix5MToiMiIseTI6IjIyIixrZXk6ImEybG55eCJ9XSxbImxpbmUiLHt4MToiMTgiLHgyOiIxOCIseTE6IjIiLHkyOiIyMiIsa2V5OiI4dmI2amQifV1dLGkwPUwxKCJmcmFtZSIsZDcpO3ZhciBjNz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Ik0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIixrZXk6IjEzbzF6bCJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMCIsa2V5OiI5aTRwdTQifV1dLGY1PUwxKCJnbG9iZSIsYzcpO3ZhciByNz1bWyJwYXRoIix7ZDoibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIsa2V5OiI5a3p5MzUifV0sWyJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiIsa2V5OiIxdDBmMHQifV0sWyJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IiLGtleToiMW9idXM2In1dLFsicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIiLGtleToiMWd2aGJ5In1dXSxtNT1MMSgiaW1hZ2VzIixyNyk7dmFyIG83PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTEiLHg6IjMiLHk6IjExIixyeDoiMiIscnk6IjIiLGtleToiMXc0ZXcxIn1dLFsicGF0aCIse2Q6Ik03IDExVjdhNSA1IDAgMCAxIDEwIDB2NCIsa2V5OiJmd3Ztem0ifV1dLHA1PUwxKCJsb2NrIixvNyk7dmFyIG43PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCIsa2V5OiIxNG52cDAifV1dLHU1PUwxKCJwYW5lbC1yaWdodCIsbjcpO3ZhciBpNz1bWyJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIsa2V5OiIxMzU3ZTMifV0sWyJwYXRoIix7ZDoiTTMgM3Y1aDUiLGtleToiMXhocThhIn1dXSxsNT1MMSgicm90YXRlLWNjdyIsaTcpO3ZhciBhNz1bWyJwYXRoIix7ZDoibTIxIDIxLTQuMzQtNC4zNCIsa2V5OiIxNGo3cmoifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCIsa2V5OiI0ZWo5N3UifV1dLGQ1PUwxKCJzZWFyY2giLGE3KTt2YXIgczc9W1sicGF0aCIse2Q6Ik0xMiAzdjEyIixrZXk6IjF4MGo1cyJ9XSxbInBhdGgiLHtkOiJtMTcgOC01LTUtNSA1IixrZXk6IjdxOTdyOCJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIsa2V5OiJpaDduM2gifV1dLGM1PUwxKCJ1cGxvYWQiLHM3KTt2YXIgdDc9W1sicGF0aCIse2Q6Ik0xMSA0LjcwMmEuNzA1LjcwNSAwIDAgMC0xLjIwMy0uNDk4TDYuNDEzIDcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4eiIsa2V5OiJ1cWo5dXcifV0sWyJwYXRoIix7ZDoiTTE2IDlhNSA1IDAgMCAxIDAgNiIsa2V5OiIxcTZrMmIifV1dLHI1PUwxKCJ2b2x1bWUtMSIsdDcpO3ZhciBlNz1bWyJwYXRoIix7ZDoiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IixrZXk6InVxajl1dyJ9XSxbInBhdGgiLHtkOiJNMTYgOWE1IDUgMCAwIDEgMCA2IixrZXk6IjFxNmsyYiJ9XSxbInBhdGgiLHtkOiJNMTkuMzY0IDE4LjM2NGE5IDkgMCAwIDAgMC0xMi43MjgiLGtleToiaWp3a2dhIn1dXSxvNT1MMSgidm9sdW1lLTIiLGU3KTt2YXIgJCQ9W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXSxCMD1MMSgieCIsJCQpO3ZhciBuNT17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxDOD17cG9ydHJhaXQ6ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXQifSxZOT0xLHE5PTIsZjA9MyxWOT00O2Z1bmN0aW9uIGk1KCQpe3JldHVybiAkPj0wLjkzPzM6dm9pZCAwfWZ1bmN0aW9uIGs4KCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIG0wKCQpe3JldHVybiEhJCYmKGs4KCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiBWNSgkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEs9azgoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsSj1LP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLFo9Sz9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihKPT09JC53aWR0aCYmWj09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOkosaGVpZ2h0Olp9fWZ1bmN0aW9uIHAwKCQpe2xldCBLPVY1KCQpLEo9RzkoJD8ub3JpZW50YXRpb24pLFo9TWF0aC5hYnMoSik9PT05MCxYPSEhJCYmJC53aWR0aD4kLmhlaWdodCxZPUo9PT0xODB8fFomJiFYO3JldHVybntkaXNwbGF5Q29uZmlnOksscm90YXRpb25EZWdyZWVzOlk/SjowLG5lZWRzQ3NzUm90YXRpb246WSxpbnB1dE9yaWVudGF0aW9uOlk/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBHOSgkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBHNSgkLEssSil7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OkoseToxLUt9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLUoseTpLfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUsseToxLUp9O2RlZmF1bHQ6cmV0dXJue3g6Syx5Okp9fX1mdW5jdGlvbiBCOSgkLEssSil7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybntkeDpKLGR5Oi1LfTtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJue2R4Oi1KLGR5Okt9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybntkeDotSyxkeTotSn07ZGVmYXVsdDpyZXR1cm57ZHg6SyxkeTpKfX19ZnVuY3Rpb24gYTUoJCxLKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6c3dpdGNoKEspe2Nhc2UgMTpyZXR1cm4gMztjYXNlIDQ6cmV0dXJuIDI7Y2FzZSAyOnJldHVybiAxO2Nhc2UgMzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiBLfWNhc2UibGFuZHNjYXBlX3JpZ2h0Ijpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gMztjYXNlIDI6cmV0dXJuIDQ7Y2FzZSAzOnJldHVybiAxO2RlZmF1bHQ6cmV0dXJuIEt9Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6c3dpdGNoKEspe2Nhc2UgMTpyZXR1cm4gNDtjYXNlIDQ6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAzO2Nhc2UgMzpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiBLfWRlZmF1bHQ6cmV0dXJuIEt9fXZhciBOOT0xNjtmdW5jdGlvbiBzNSgkLEssSil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gbnVsbDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoSikmJko+MD9KOjEsWD1LPT09MT8kKjE2Oks9PT0yPyQqWjokLFk9TWF0aC5tYXgoLTIwMCxNYXRoLm1pbigyMDAsWCkpO3JldHVybiBNYXRoLmFicyhZKTwwLjAxP251bGw6WX1mdW5jdGlvbiBGOCgkLEssSil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gMDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoSikmJko+MD9KOjE7aWYoSz09PTEpcmV0dXJuICQqTjk7aWYoSz09PTIpcmV0dXJuICQqWjtyZXR1cm4gJH1mdW5jdGlvbiBVOSgkLEssSil7aWYoIUt8fEsud2lkdGg8PTB8fEsuaGVpZ2h0PD0wKXJldHVybiBudWxsO2xldCBaPUsub3JpZW50YXRpb249PT12b2lkIDAmJiQ/Lm9yaWVudGF0aW9uP3suLi5LLG9yaWVudGF0aW9uOiQub3JpZW50YXRpb259Oks7aWYoJCYmJC53aWR0aD09PVoud2lkdGgmJiQuaGVpZ2h0PT09Wi5oZWlnaHQmJiQub3JpZW50YXRpb249PT1aLm9yaWVudGF0aW9uKXJldHVybiBudWxsO3JldHVybntjb25maWc6Wixub3RpZnlQYXJlbnQ6Sj09PSJyZXBvcnRlZCJ9fXZhciBLJD17WzFdOiJkZXNjcmlwdGlvbiIsWzJdOiJrZXlmcmFtZSIsWzNdOiJkZWx0YSIsWzRdOiJzZWVkIn07Y2xhc3MgTzJ7YnVmZmVyPW5ldyBVaW50OEFycmF5KDY1NTM2KTtsZW49MDtzdGFydD0wO2FwcGVuZCgkKXtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2lmKHRoaXMuc3RhcnQ+MCl0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbiksdGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wO2lmKHRoaXMubGVuKyQubGVuZ3RoPnRoaXMuYnVmZmVyLmxlbmd0aCl7bGV0IEs9dGhpcy5idWZmZXIubGVuZ3RoO3doaWxlKEs8dGhpcy5sZW4rJC5sZW5ndGgpSyo9MjtsZXQgSj1uZXcgVWludDhBcnJheShLKTtKLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSgwLHRoaXMubGVuKSksdGhpcy5idWZmZXI9Sn19dGhpcy5idWZmZXIuc2V0KCQsdGhpcy5sZW4pLHRoaXMubGVuKz0kLmxlbmd0aH1wdXNoKCQpe2lmKCQubGVuZ3RoPjApdGhpcy5hcHBlbmQoJCk7bGV0IEs9W10sSj10aGlzLmJ1ZmZlcjt3aGlsZSh0aGlzLmxlbi10aGlzLnN0YXJ0Pj00KXtsZXQgWj10aGlzLnN0YXJ0LFg9KEpbWl08PDI0fEpbWisxXTw8MTZ8SltaKzJdPDw4fEpbWiszXSk+Pj4wO2lmKHRoaXMubGVuLVotNDxYKWJyZWFrO2lmKFg8MSl7dGhpcy5zdGFydCs9NDtjb250aW51ZX1sZXQgWT1KW1orNF0scT1LJFtZXTtpZihxKUsucHVzaCh7dHlwZTpxLHBheWxvYWQ6Si5zbGljZShaKzUsWis0K1gpfSk7dGhpcy5zdGFydCs9NCtYfWlmKHRoaXMuc3RhcnQ+MCl7aWYodGhpcy5zdGFydDx0aGlzLmxlbil0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbik7dGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wfXJldHVybiBLfXJlc2V0KCl7dGhpcy5sZW49MCx0aGlzLnN0YXJ0PTB9fWZ1bmN0aW9uIEE4KCQpe2lmKCQubGVuZ3RoPDQpcmV0dXJuImF2YzEuNDJFMDFFIjtsZXQgSz0oSik9PkoudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4iYXZjMS4iK0soJFsxXSkrSygkWzJdKStLKCRbM10pfWZ1bmN0aW9uIGEwKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmdHlwZW9mIGdsb2JhbFRoaXMuVmlkZW9EZWNvZGVyPCJ1In12YXIgSiQ9MTAwMCxRJD0xNjY2NztmdW5jdGlvbiBPOCh7dXJsOiQsZW5hYmxlZDpLLGNhbnZhc1JlZjpKLG9uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pe2xldCBWPUkoe29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pO1YuY3VycmVudD17b25GaXJzdEZyYW1lOlosb25GcmFtZTpYLG9uRXJyb3I6WSxvbkRlY29kZXJFcnJvcjpxfSxFKCgpPT57aWYoIUt8fCEkfHwhYTAoKSlyZXR1cm47bGV0IE49bmV3IEFib3J0Q29udHJvbGxlcixCPW5ldyBPMixVPSExLEc9ITEsej0wLEg9bnVsbCxGPW51bGwsTD0oKT0+IVUmJiFOLnNpZ25hbC5hYm9ydGVkLGs9KGopPT57aWYoVi5jdXJyZW50Lm9uRGVjb2RlckVycm9yKVYuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgVi5jdXJyZW50Lm9uRXJyb3I/LihqKX0sQz0oaixkLFoxKT0+e2lmKCFMKCkpcmV0dXJuO2xldCBxMT1KLmN1cnJlbnQ7aWYoIXExKXJldHVybjtpZihxMS53aWR0aCE9PWR8fHExLmhlaWdodCE9PVoxKXExLndpZHRoPWQscTEuaGVpZ2h0PVoxO2xldCBvPXExLmdldENvbnRleHQoIjJkIik7aWYoIW8pcmV0dXJuO2lmKG8uZHJhd0ltYWdlKGosMCwwLGQsWjEpLFYuY3VycmVudC5vbkZyYW1lPy4oKSwhRylHPSEwLFYuY3VycmVudC5vbkZpcnN0RnJhbWU/LigpfSxQPSgpPT5uZXcgVmlkZW9EZWNvZGVyKHtvdXRwdXQ6KGopPT57dHJ5e2lmKEwoKSlDKGosai5kaXNwbGF5V2lkdGgsai5kaXNwbGF5SGVpZ2h0KX1maW5hbGx5e2ouY2xvc2UoKX19LGVycm9yOihqKT0+ayhgZGVjb2RlcjogJHtqLm1lc3NhZ2V9YCl9KSx5PWFzeW5jKGopPT57bGV0IGQ9YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAobmV3IEJsb2IoW2pdLHt0eXBlOiJpbWFnZS9qcGVnIn0pKTt0cnl7aWYoTCgpKUMoZCxkLndpZHRoLGQuaGVpZ2h0KX1maW5hbGx5e2QuY2xvc2UoKX19LFQ9KGopPT57aWYoIUZ8fEYuc3RhdGU9PT0iY2xvc2VkIilGPVAoKTt0cnl7Ri5jb25maWd1cmUoe2NvZGVjOkE4KGopLGRlc2NyaXB0aW9uOmosb3B0aW1pemVGb3I6ImxhdGVuY3kiLGhhcmR3YXJlQWNjZWxlcmF0aW9uOiJwcmVmZXItaGFyZHdhcmUifSl9Y2F0Y2goZCl7ayhgY29uZmlnOiAke2QubWVzc2FnZX1gKX19LEE9KGosZCk9PntpZihGPy5zdGF0ZSE9PSJjb25maWd1cmVkIilyZXR1cm47dHJ5e0YuZGVjb2RlKG5ldyBFbmNvZGVkVmlkZW9DaHVuayh7dHlwZTpqPT09ImtleWZyYW1lIj8ia2V5IjoiZGVsdGEiLHRpbWVzdGFtcDp6LGRhdGE6ZH0pKSx6Kz1RJH1jYXRjaHt9fSx3PShqLGQpPT57c3dpdGNoKGope2Nhc2Uic2VlZCI6eShkKS5jYXRjaCgoKT0+e30pO3JldHVybjtjYXNlImRlc2NyaXB0aW9uIjpUKGQpO3JldHVybjtjYXNlImtleWZyYW1lIjpjYXNlImRlbHRhIjpBKGosZCk7cmV0dXJufX0saT0oKT0+e2lmKCFMKCl8fEgpcmV0dXJuO0g9c2V0VGltZW91dCgoKT0+e0g9bnVsbCx2KCl9LEokKX0sdj1hc3luYygpPT57Qi5yZXNldCgpO3RyeXtsZXQgZD0oYXdhaXQgZmV0Y2goYCR7JH0vc3RyZWFtLmF2Y2NgLHtzaWduYWw6Ti5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIWQpcmV0dXJuO2Zvcig7Oyl7bGV0e2RvbmU6WjEsdmFsdWU6cTF9PWF3YWl0IGQucmVhZCgpO2lmKFoxKWJyZWFrO2lmKCFxMSljb250aW51ZTtmb3IobGV0IG8gb2YgQi5wdXNoKHExKSl3KG8udHlwZSxvLnBheWxvYWQpfX1jYXRjaHt9ZmluYWxseXtpZihMKCkpaSgpfX07cmV0dXJuIHYoKSwoKT0+e2lmKFU9ITAsSCljbGVhclRpbWVvdXQoSCk7aWYoTi5hYm9ydCgpLEIucmVzZXQoKSxGJiZGLnN0YXRlIT09ImNsb3NlZCIpdHJ5e0YuY2xvc2UoKX1jYXRjaHt9Rj1udWxsfX0sWyQsSyxKXSl9dmFyIFokPTA7ZnVuY3Rpb24gUSgkLEssSixaLFgsWSl7S3x8KEs9e30pO3ZhciBxLFYsTj1LO2lmKCJyZWYiaW4gTilmb3IoViBpbiBOPXt9LEspVj09InJlZiI/cT1LW1ZdOk5bVl09S1tWXTt2YXIgQj17dHlwZTokLHByb3BzOk4sa2V5OkoscmVmOnEsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tWiQsX19pOi0xLF9fdTowLF9fc291cmNlOlgsX19zZWxmOll9O2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYocT0kLmRlZmF1bHRQcm9wcykpZm9yKFYgaW4gcSlOW1ZdPT09dm9pZCAwJiYoTltWXT1xW1ZdKTtyZXR1cm4gcy52bm9kZSYmcy52bm9kZShCKSxCfXZhciB6OT1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLFgkPTEuMDA0LFkkPTMscSQ9NCxWJD01LEckPTEwLEIkPTExO2Z1bmN0aW9uIE0yKHt1cmw6JCx3c1VybDpLLHN0eWxlOkosaW1hZ2VTdHlsZTpaLGNsYXNzTmFtZTpYLG9uSG9tZVByZXNzOlksb25TdHJlYW1Ub3VjaDpxLG9uU3RyZWFtTXVsdGlUb3VjaDpWLG9uU3RyZWFtQnV0dG9uOk4sb25TdHJlYW1EaWdpdGFsQ3Jvd246QixvblN0cmVhbVNjcm9sbDpVLGVuYWJsZURpZ2l0YWxDcm93bjpHLHN1YnNjcmliZUZyYW1lOnosc3RyZWFtRnJhbWU6SCxzdHJlYW1Db25maWc6RixvblNjcmVlbkNvbmZpZ0NoYW5nZTpMLGhpZGVDb250cm9sczprLG9uU3RyZWFtaW5nQ2hhbmdlOkMsY29ubmVjdGlvblF1YWxpdHk6UCxjb2RlYzp5PSJhdmNjIixvbkF2Y2NFcnJvcjpUfSl7bGV0IEE9ISFxLHc9eT09PSJhdmNjIiYmYTAoKSxpPUkobnVsbCksdj1JKG51bGwpLGo9SShudWxsKSxkPUkobnVsbCksWjE9SShudWxsKSxxMT1JKG51bGwpLFtvLFQxXT1PKCExKSxbZyxmXT1PKG51bGwpLFt0LEMxXT1PKG51bGwpLE4xPUkobnVsbCksVjE9SShMKTtWMS5jdXJyZW50PUw7bGV0IGsxPUkobnVsbCksW0cxLFJdPU8obnVsbCk7RSgoKT0+e2xldCBfPWsxLmN1cnJlbnQ7aWYoIV98fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBNPW5ldyBSZXNpemVPYnNlcnZlcigoeCk9PntsZXQgbD14WzBdPy5jb250ZW50UmVjdDtpZihsKVIoe3dpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0fSl9KTtyZXR1cm4gTS5vYnNlcnZlKF8pLCgpPT5NLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtjLHJdPU8oMCksJDE9SSgwKSxbXzEsYl09TyghMSksbT1JKG51bGwpO0UoKCk9PntpZihQPT09InBvb3IiKXtpZihiKCEwKSxtLmN1cnJlbnQpY2xlYXJUaW1lb3V0KG0uY3VycmVudCk7bS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntiKCExKSxtLmN1cnJlbnQ9bnVsbH0sMzAwMCl9ZWxzZSBpZihiKCExKSxtLmN1cnJlbnQpY2xlYXJUaW1lb3V0KG0uY3VycmVudCksbS5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihtLmN1cnJlbnQpY2xlYXJUaW1lb3V0KG0uY3VycmVudCl9fSxbUF0pO2xldCBYMT1gJHskfS9zdHJlYW0ubWpwZWdgO0UoKCk9PntOMS5jdXJyZW50PW51bGwsQzEobnVsbCl9LFskXSk7bGV0IEYxPUQoKF8sTT0icmVwb3J0ZWQiKT0+e2xldCB4PVU5KE4xLmN1cnJlbnQsXyxNKTtpZigheClyZXR1cm47aWYoTjEuY3VycmVudD14LmNvbmZpZyxDMSh4LmNvbmZpZykseC5ub3RpZnlQYXJlbnQpVjEuY3VycmVudD8uKHguY29uZmlnKX0sW10pLHA9SShDKTtwLmN1cnJlbnQ9QyxFKCgpPT57cC5jdXJyZW50Py4obyl9LFtvXSksRSgoKT0+e2lmKEEmJkYpRjEoRiwiZXh0ZXJuYWwiKX0sW0EsRixGMV0pO2xldCBuPUkoITEpO24uY3VycmVudD1vO2xldCBIMT1JKG51bGwpLE8xPUkobnVsbCk7RSgoKT0+e2lmKCFBfHwhenx8dylyZXR1cm47bGV0IE09c2V0VGltZW91dCgoKT0+e2lmKCFuLmN1cnJlbnQpZigiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLHg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIFExKCl7bGV0IHoxPUgxLmN1cnJlbnQ7aWYoejEpe0gxLmN1cnJlbnQ9bnVsbDtsZXQgTTE9ai5jdXJyZW50O2lmKE0xKXtpZihPMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoTzEuY3VycmVudCk7TzEuY3VycmVudD16MSxNMS5zcmM9ejEsJDEuY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTCh6MSl9eD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUTEpfSksbD16KChRMSk9PntpZihjMS5jdXJyZW50PURhdGUubm93KCksSDEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKEgxLmN1cnJlbnQpO2lmKEgxLmN1cnJlbnQ9UTEsIW4uY3VycmVudCljbGVhclRpbWVvdXQoTSksVDEoITApLGYobnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dChNKSxjYW5jZWxBbmltYXRpb25GcmFtZSh4KSxsPy4oKSxIMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoSDEuY3VycmVudCksSDEuY3VycmVudD1udWxsO2lmKE8xLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChPMS5jdXJyZW50KSxPMS5jdXJyZW50PW51bGx9fSxbQSx6LHddKTtsZXQgSjA9RCgoKT0+e2MxLmN1cnJlbnQ9RGF0ZS5ub3coKSxUMSghMCksZihudWxsKX0sW10pLGcxPUQoKCk9PntpZigkMS5jdXJyZW50KyssYzEuY3VycmVudD1EYXRlLm5vdygpLCFuLmN1cnJlbnQpVDEoITApLGYobnVsbCl9LFtdKTtPOCh7dXJsOiQsZW5hYmxlZDp3LGNhbnZhc1JlZjp2LG9uRmlyc3RGcmFtZTpKMCxvbkZyYW1lOmcxLG9uRXJyb3I6ZixvbkRlY29kZXJFcnJvcjpUfSk7bGV0IEQxPUQoKF8pPT57bGV0IE09cDAoTjEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbix4PUc1KE0sXy54LF8ueSksbD1fLmVkZ2U9PT12b2lkIDA/dm9pZCAwOmE1KE0sXy5lZGdlKSxRMT1sPT09dm9pZCAwP3t0eXBlOl8udHlwZSwuLi54fTp7dHlwZTpfLnR5cGUsLi4ueCxlZGdlOmx9O2lmKEEpe3E/LihRMSk7cmV0dXJufWxldCB6MT1xMS5jdXJyZW50O2lmKCF6MXx8ejEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgTTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFExKSksSTE9bmV3IFVpbnQ4QXJyYXkoMStNMS5sZW5ndGgpO0kxWzBdPVkkLEkxLnNldChNMSwxKSx6MS5zZW5kKEkxKX0sW0EscV0pLGQxPUQoKF8pPT57aWYoQSl7Tj8uKF8pO3JldHVybn1sZXQgTT1xMS5jdXJyZW50O2lmKCFNfHxNLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IHg9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246X30pKSxsPW5ldyBVaW50OEFycmF5KDEreC5sZW5ndGgpO2xbMF09cSQsbC5zZXQoeCwxKSxNLnNlbmQobCl9LFtBLE5dKSxzMT1EKChfKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoXyl8fF89PT0wKXJldHVybjtpZihBKXtCPy4oXyk7cmV0dXJufWxldCBNPXExLmN1cnJlbnQ7aWYoIU18fE0ucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgeD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2RlbHRhOl99KSksbD1uZXcgVWludDhBcnJheSgxK3gubGVuZ3RoKTtsWzBdPUckLGwuc2V0KHgsMSksTS5zZW5kKGwpfSxbQSxCXSksTjA9RCgoXyxNLHgsbCk9PntpZighTnVtYmVyLmlzRmluaXRlKF8pfHwhTnVtYmVyLmlzRmluaXRlKE0pfHxfPT09MCYmTT09PTApcmV0dXJuO2xldCBRMT1wMChOMS5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLHoxPUI5KFExLF8sTSksTTE9RzUoUTEseCxsKSxJMT17ZHg6ejEuZHgsZHk6ejEuZHkseDpNMS54LHk6TTEueX07aWYoQSl7VT8uKEkxKTtyZXR1cm59bGV0IGUxPXExLmN1cnJlbnQ7aWYoIWUxfHxlMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBNMD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoSTEpKSxQMD1uZXcgVWludDhBcnJheSgxK00wLmxlbmd0aCk7UDBbMF09QiQsUDAuc2V0KE0wLDEpLGUxLnNlbmQoUDApfSxbQSxVXSksSzE9RCgoXyk9PntsZXQgTT1wMChOMS5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLHg9RzUoTSxfLngxLF8ueTEpLGw9RzUoTSxfLngyLF8ueTIpLFExPXt0eXBlOl8udHlwZSx4MTp4LngseTE6eC55LHgyOmwueCx5MjpsLnl9O2lmKEEpe1Y/LihRMSk7cmV0dXJufWxldCB6MT1xMS5jdXJyZW50O2lmKCF6MXx8ejEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgTTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFExKSksSTE9bmV3IFVpbnQ4QXJyYXkoMStNMS5sZW5ndGgpO0kxWzBdPVYkLEkxLnNldChNMSwxKSx6MS5zZW5kKEkxKX0sW0EsVl0pO0UoKCk9PntpZihBKXJldHVybjtsZXQgXz1LPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixNPW5ldyBXZWJTb2NrZXQoXyk7TS5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIscTEuY3VycmVudD1NLE0ub25tZXNzYWdlPShNMSk9PntpZighKE0xLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuO2xldCBJMT1uZXcgVWludDhBcnJheShNMS5kYXRhKTtpZihJMS5sZW5ndGg8MXx8STFbMF0hPT0xMzApcmV0dXJuO3RyeXtGMShKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShJMS5zdWJhcnJheSgxKSkpKX1jYXRjaHt9fSxNLm9ub3Blbj0oKT0+e2lmKCF3KVQxKCEwKTtmKG51bGwpfSxNLm9uY2xvc2U9KCk9PntUMSghMSl9LE0ub25lcnJvcj0oKT0+e2YoIldlYlNvY2tldCBjb25uZWN0aW9uIGZhaWxlZCIpLFQxKCExKX07bGV0IHg9bmV3IEFib3J0Q29udHJvbGxlcixsPXNldEludGVydmFsKCgpPT57cigkMS5jdXJyZW50KSwkMS5jdXJyZW50PTB9LDEwMDApLFExPSExLHoxPXc/bnVsbDpzZXRUaW1lb3V0KCgpPT57aWYoIVExKWYoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKTtpZighdykoYXN5bmMoKT0+e3RyeXtsZXQgSTE9KGF3YWl0IGZldGNoKFgxLHtzaWduYWw6eC5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUkxKXJldHVybjtsZXQgZTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOk0wLHZhbHVlOlAwfT1hd2FpdCBJMS5yZWFkKCk7aWYoTTApYnJlYWs7aWYoUDApZm9yKGxldCBRNT0wO1E1PD1QMC5sZW5ndGgtZTEubGVuZ3RoO1E1Kyspe2xldCAkMD0hMDtmb3IobGV0IFIwPTA7UjA8ZTEubGVuZ3RoO1IwKyspaWYoUDBbUTUrUjBdIT09ZTFbUjBdKXskMD0hMTticmVha31pZigkMCl7aWYoJDEuY3VycmVudCsrLCFRMSl7aWYoUTE9ITAsejEpY2xlYXJUaW1lb3V0KHoxKX19fX19Y2F0Y2h7fX0pKCk7cmV0dXJuKCk9PntpZih4LmFib3J0KCksY2xlYXJJbnRlcnZhbChsKSx6MSljbGVhclRpbWVvdXQoejEpO00uY2xvc2UoKSxxMS5jdXJyZW50PW51bGx9fSxbJCxYMSxBLEYxLEssd10pO2xldCBjMT1JKDApO0UoKCk9PntpZighQSlyZXR1cm47bGV0IF89MjAwMCxNPSgpPT57bGV0IFExPWMxLmN1cnJlbnQ7aWYoIVExfHwhbi5jdXJyZW50KXJldHVybjtpZihEYXRlLm5vdygpLVExPl8pVDEoITEpfSx4PXNldEludGVydmFsKCgpPT57cigkMS5jdXJyZW50KSwkMS5jdXJyZW50PTAsTSgpfSwxMDAwKSxsPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilNKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixsKSwoKT0+e2NsZWFySW50ZXJ2YWwoeCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsbCl9fSxbQV0pO2xldCBFMD1EKCgpPT57aWYodylyZXR1cm4gdi5jdXJyZW50O3JldHVybiBBP2ouY3VycmVudDppLmN1cnJlbnR9LFtBLHddKSx2MT1EKCgpPT57cmV0dXJuIGQuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P0UwKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbRTBdKSxWMD1EKChfLE0pPT57bGV0IHg9djEoKTtpZigheClyZXR1cm47bGV0IGw9KE0uY2xpZW50WC14LmxlZnQpL3gud2lkdGgsUTE9KE0uY2xpZW50WS14LnRvcCkveC5oZWlnaHQ7RDEoe3R5cGU6Xyx4OmwseTpRMX0pfSxbdjEsRDFdKSxVMD1EKChfLE0pPT57bGV0IGw9djEoKT8uaGVpZ2h0fHwxLFExPXM1KF8sTSxsKTtpZihRMT09PW51bGwpcmV0dXJuITE7cmV0dXJuIHMxKFExKSwhMH0sW3YxLHMxXSksUDE9SSghMSksaDE9SSghMSksUTA9SSghMSksRjA9SSh7ZHg6MCxkeTowfSkscjE9SSghMSksW0kwLHgwXT1PKCExKSxBMD1JKHt4OjAuNSx5OjAuNX0pLFtvMSxFMV09TyhudWxsKTtFKCgpPT57bGV0IF89KHgpPT57aWYoeC5rZXk9PT0iQWx0Iil4MCghMCl9LE09KHgpPT57aWYoeC5rZXk9PT0iQWx0Iil7aWYoeDAoITEpLCFoMS5jdXJyZW50KUUxKG51bGwpfX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixfKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLE0pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLF8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsTSl9fSxbXSksRSgoKT0+e2lmKEkwJiYhaDEuY3VycmVudCl7bGV0IF89QTAuY3VycmVudDtFMSh7eDE6Xy54LHkxOl8ueSx4MjoxLV8ueCx5MjoxLV8ueX0pfWVsc2UgaWYoIUkwJiYhaDEuY3VycmVudClFMShudWxsKX0sW0kwXSk7bGV0IHQxPUkobnVsbCksdzE9SSghMSksWjA9SSgwKSxiMD1EKChfLE0pPT57dzEuY3VycmVudD0hMDtsZXQgeD10MS5jdXJyZW50O2lmKHgpY2FuY2VsQW5pbWF0aW9uRnJhbWUoWjAuY3VycmVudCksWjAuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt4LnN0eWxlLmxlZnQ9YCR7XyoxMDB9JWAseC5zdHlsZS50b3A9YCR7TSoxMDB9JWAseC5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sW10pLHowPUQoKF8sTSk9PntpZighdzEuY3VycmVudClyZXR1cm47bGV0IHg9dDEuY3VycmVudDtpZih4KWNhbmNlbEFuaW1hdGlvbkZyYW1lKFowLmN1cnJlbnQpLFowLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57eC5zdHlsZS5sZWZ0PWAke18qMTAwfSVgLHguc3R5bGUudG9wPWAke00qMTAwfSVgfSl9LFtdKSxMMD1EKCgpPT57dzEuY3VycmVudD0hMTtsZXQgXz10MS5jdXJyZW50O2lmKF8pY2FuY2VsQW5pbWF0aW9uRnJhbWUoWjAuY3VycmVudCksXy5zdHlsZS5kaXNwbGF5PSJub25lIn0sW10pLFc9RCgoXyk9PntpZih3MS5jdXJyZW50fHxoMS5jdXJyZW50KXJldHVybiExO2xldCBNPXYxKCk7aWYoIU0pcmV0dXJuITE7bGV0IHg9RjgoXy5kZWx0YVgsXy5kZWx0YU1vZGUsTS53aWR0aCksbD1GOChfLmRlbHRhWSxfLmRlbHRhTW9kZSxNLmhlaWdodCk7aWYoeD09PTAmJmw9PT0wKXJldHVybiExO2xldCBRMT1NYXRoLm1pbihNYXRoLm1heCgoXy5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCwwKSwxKSx6MT1NYXRoLm1pbihNYXRoLm1heCgoXy5jbGllbnRZLU0udG9wKS9NLmhlaWdodCwwKSwxKTtyZXR1cm4gTjAoeC9NLndpZHRoLGwvTS5oZWlnaHQsUTEsejEpLCEwfSxbdjEsTjBdKTtFKCgpPT57bGV0IF89WjEuY3VycmVudDtpZighXylyZXR1cm47bGV0IE09KHgpPT57aWYoIShHP1UwKHguZGVsdGFZLHguZGVsdGFNb2RlKTpXKHgpKSlyZXR1cm47eC5wcmV2ZW50RGVmYXVsdCgpLHguc3RvcFByb3BhZ2F0aW9uKCl9O3JldHVybiBfLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixNLHtwYXNzaXZlOiExfSksKCk9Pl8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLE0pfSxbRyxVMCxXXSk7bGV0IHU9SSgwKSxhPUkobnVsbCksVTE9RCgoKT0+e2xldCBfPURhdGUubm93KCksTT1fLXUuY3VycmVudDtpZih1LmN1cnJlbnQ9XyxNPDMwMCl7aWYoYS5jdXJyZW50KWNsZWFyVGltZW91dChhLmN1cnJlbnQpLGEuY3VycmVudD1udWxsO2lmKFkpWSgpO2Vsc2UgZDEoImFwcF9zd2l0Y2hlciIpfWVsc2UgYS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihZKVkoKTtlbHNlIGQxKCJob21lIik7YS5jdXJyZW50PW51bGx9LDMwMCl9LFtkMSxZXSksVzE9cDAodCksWTE9VzEuZGlzcGxheUNvbmZpZyxBMT0oKCk9PntpZighWTF8fCFHMSlyZXR1cm4gbnVsbDtpZihHMS53aWR0aD09PTB8fEcxLmhlaWdodD09PTApcmV0dXJuIG51bGw7bGV0IF89TWF0aC5taW4oRzEud2lkdGgvWTEud2lkdGgsRzEuaGVpZ2h0L1kxLmhlaWdodCk7cmV0dXJue3dpZHRoOlkxLndpZHRoKl8saGVpZ2h0OlkxLmhlaWdodCpffX0pKCksbjE9VzEucm90YXRpb25EZWdyZWVzLGwxPVcxLm5lZWRzQ3NzUm90YXRpb24mJk1hdGguYWJzKG4xKT09PTkwLHAxPVosTzA9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6bDEmJkExP2Ake0ExLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpsMSYmQTE/YCR7QTEud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7bjE9PT0wPyIiOmAgcm90YXRlKCR7bjF9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjp6OSxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlosLi4ubjE9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSxHMD17Li4uTzAsdHJhbnNmb3JtOmAke08wLnRyYW5zZm9ybT8/IiJ9IHNjYWxlKCR7WCR9KWB9O3JldHVybiBRKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uaz97fTp7Ym9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LG92ZXJmbG93OiJoaWRkZW4iLG1pbldpZHRoOjAsbWluSGVpZ2h0OjAsLi4uSn0sY2xhc3NOYW1lOlgsY2hpbGRyZW46W1EoImRpdiIse3JlZjprMSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsbWluSGVpZ2h0OjAsbWluV2lkdGg6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIifSxjaGlsZHJlbjpRKCJkaXYiLHtyZWY6ZCxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIix3aWR0aDpBMT9gJHtBMS53aWR0aH1weGA6IjEwMCUiLGhlaWdodDpBMT9gJHtBMS5oZWlnaHR9cHhgOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIixib3JkZXJSYWRpdXM6cDE/LmJvcmRlclJhZGl1cyxjb3JuZXJTaGFwZTpwMT8uY29ybmVyU2hhcGV9LGNoaWxkcmVuOlt3P1EoImNhbnZhcyIse3JlZjp2LHN0eWxlOkcwfSk6USgiaW1nIix7cmVmOmksc3JjOkE/dm9pZCAwOlgxLGRyYWdnYWJsZTohMSxvbkxvYWQ6KF8pPT57bGV0IE09Xy5jdXJyZW50VGFyZ2V0O2lmKE0ubmF0dXJhbFdpZHRoPjAmJk0ubmF0dXJhbEhlaWdodD4wKUYxKHt3aWR0aDpNLm5hdHVyYWxXaWR0aCxoZWlnaHQ6TS5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOkE/e2Rpc3BsYXk6Im5vbmUifTpPMH0pLEEmJiF3JiZRKCJpbWciLHtyZWY6aixkcmFnZ2FibGU6ITEsb25Mb2FkOihfKT0+e2xldCBNPV8uY3VycmVudFRhcmdldDtpZihNLm5hdHVyYWxXaWR0aD4wJiZNLm5hdHVyYWxIZWlnaHQ+MClGMSh7d2lkdGg6TS5uYXR1cmFsV2lkdGgsaGVpZ2h0Ok0ubmF0dXJhbEhlaWdodH0pfSxzdHlsZTpPMH0pLFEoImRpdiIse3JlZjpaMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGN1cnNvcjp6OSx0b3VjaEFjdGlvbjoibm9uZSJ9LG9uTW91c2VEb3duOihfKT0+e18ucHJldmVudERlZmF1bHQoKTtsZXQgTT12MSgpO2lmKCFNKXJldHVybjtsZXQgeD0oXy5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxsPShfLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2lmKF8uYWx0S2V5KXtoMS5jdXJyZW50PSEwLFEwLmN1cnJlbnQ9Xy5zaGlmdEtleTtsZXQgejE9e3gxOngseTE6bCx4MjoxLXgseTI6MS1sfTtGMC5jdXJyZW50PXtkeDoxLXgteCxkeToxLWwtbH0sRTEoejEpLEsxKHt0eXBlOiJiZWdpbiIsLi4uejF9KTtyZXR1cm59YjAoeCxsKTtsZXQgUTE9aTUobCk7aWYoUTEhPT12b2lkIDApUDEuY3VycmVudD0hMCxEMSh7dHlwZToiYmVnaW4iLHgseTpsLGVkZ2U6UTF9KTtlbHNlIFAxLmN1cnJlbnQ9ITEsVjAoImJlZ2luIixfKX0sb25Nb3VzZU1vdmU6KF8pPT57bGV0IE09djEoKTtpZighTSlyZXR1cm47bGV0IHg9KF8uY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsbD0oXy5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtpZihBMC5jdXJyZW50PXt4LHk6bH0sXy5idXR0b25zPT09MCl7aWYoXy5hbHRLZXkpRTEoe3gxOngseTE6bCx4MjoxLXgseTI6MS1sfSk7cmV0dXJufWlmKGgxLmN1cnJlbnQpe2xldCBRMTtpZihRMC5jdXJyZW50KXtsZXQgejE9RjAuY3VycmVudDtRMT17eDE6eCx5MTpsLHgyOngrejEuZHgseTI6bCt6MS5keX19ZWxzZSBRMT17eDE6eCx5MTpsLHgyOjEteCx5MjoxLWx9O0UxKFExKSxLMSh7dHlwZToibW92ZSIsLi4uUTF9KTtyZXR1cm59aWYoejAoeCxsKSxQMS5jdXJyZW50KUQxKHt0eXBlOiJtb3ZlIix4LHk6bCxlZGdlOmYwfSk7ZWxzZSBWMCgibW92ZSIsXyl9LG9uTW91c2VVcDooXyk9PntpZihoMS5jdXJyZW50KXtsZXQgTT12MSgpO2lmKE0pe2xldCB4PShfLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLGw9KF8uY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7aWYoUTAuY3VycmVudCl7bGV0IFExPUYwLmN1cnJlbnQ7SzEoe3R5cGU6ImVuZCIseDE6eCx5MTpsLHgyOngrUTEuZHgseTI6bCtRMS5keX0pfWVsc2UgSzEoe3R5cGU6ImVuZCIseDE6eCx5MTpsLHgyOjEteCx5MjoxLWx9KX1pZihoMS5jdXJyZW50PSExLCFfLmFsdEtleSlFMShudWxsKTtyZXR1cm59aWYoTDAoKSxQMS5jdXJyZW50KXtsZXQgTT12MSgpO2lmKE0pe2xldCB4PShfLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLGw9KF8uY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7RDEoe3R5cGU6ImVuZCIseCx5OmwsZWRnZTpmMH0pfVAxLmN1cnJlbnQ9ITE7cmV0dXJufVYwKCJlbmQiLF8pfSxvbk1vdXNlTGVhdmU6KF8pPT57aWYoaDEuY3VycmVudCl7aWYobzEpSzEoe3R5cGU6ImVuZCIsLi4ubzF9KTtoMS5jdXJyZW50PSExLEUxKG51bGwpO3JldHVybn1pZihMMCgpLFAxLmN1cnJlbnQpe2xldCBNPXYxKCk7aWYoTSl7bGV0IHg9KF8uY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsbD0oXy5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtEMSh7dHlwZToiZW5kIix4LHk6bCxlZGdlOmYwfSl9UDEuY3VycmVudD0hMTtyZXR1cm59aWYoXy5idXR0b25zPjApVjAoImVuZCIsXyk7RTEobnVsbCl9LG9uVG91Y2hTdGFydDooXyk9PntfLnByZXZlbnREZWZhdWx0KCk7bGV0IE09djEoKTtpZighTSlyZXR1cm47aWYoXy50b3VjaGVzLmxlbmd0aD49Mil7TDAoKTtsZXQgTTE9Xy50b3VjaGVzWzBdLEkxPV8udG91Y2hlc1sxXSxlMT17eDE6KE0xLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHkxOihNMS5jbGllbnRZLU0udG9wKS9NLmhlaWdodCx4MjooSTEuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgseTI6KEkxLmNsaWVudFktTS50b3ApL00uaGVpZ2h0fTtpZighcjEuY3VycmVudCYmIVAxLmN1cnJlbnQpRDEoe3R5cGU6ImVuZCIseDplMS54MSx5OmUxLnkxfSk7cjEuY3VycmVudD0hMCxoMS5jdXJyZW50PSEwLFAxLmN1cnJlbnQ9ITEsRTEoZTEpLEsxKHt0eXBlOiJiZWdpbiIsLi4uZTF9KTtyZXR1cm59bGV0IHg9Xy50b3VjaGVzWzBdO2lmKCF4KXJldHVybjtsZXQgbD0oeC5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxRMT0oeC5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtiMChsLFExKTtsZXQgejE9aTUoUTEpO2lmKHoxIT09dm9pZCAwKVAxLmN1cnJlbnQ9ITAsRDEoe3R5cGU6ImJlZ2luIix4OmwseTpRMSxlZGdlOnoxfSk7ZWxzZSBQMS5jdXJyZW50PSExLEQxKHt0eXBlOiJiZWdpbiIseDpsLHk6UTF9KX0sb25Ub3VjaE1vdmU6KF8pPT57Xy5wcmV2ZW50RGVmYXVsdCgpO2xldCBNPXYxKCk7aWYoIU0pcmV0dXJuO2lmKHIxLmN1cnJlbnQmJl8udG91Y2hlcy5sZW5ndGg+PTIpe2xldCB6MT1fLnRvdWNoZXNbMF0sTTE9Xy50b3VjaGVzWzFdLEkxPXt4MTooejEuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgseTE6KHoxLmNsaWVudFktTS50b3ApL00uaGVpZ2h0LHgyOihNMS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx5MjooTTEuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHR9O0UxKEkxKSxLMSh7dHlwZToibW92ZSIsLi4uSTF9KTtyZXR1cm59bGV0IHg9Xy50b3VjaGVzWzBdO2lmKCF4KXJldHVybjtsZXQgbD0oeC5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxRMT0oeC5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtpZih6MChsLFExKSxQMS5jdXJyZW50KUQxKHt0eXBlOiJtb3ZlIix4OmwseTpRMSxlZGdlOmYwfSk7ZWxzZSBEMSh7dHlwZToibW92ZSIseDpsLHk6UTF9KX0sb25Ub3VjaEVuZDooXyk9PntfLnByZXZlbnREZWZhdWx0KCk7bGV0IE09djEoKTtpZighTSlyZXR1cm47aWYocjEuY3VycmVudCl7aWYoXy50b3VjaGVzLmxlbmd0aDwyKXtsZXQgejE9Xy5jaGFuZ2VkVG91Y2hlc1swXSxNMT1vMTtpZih6MSYmTTEpSzEoe3R5cGU6ImVuZCIseDE6KHoxLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHkxOih6MS5jbGllbnRZLU0udG9wKS9NLmhlaWdodCx4MjpNMS54Mix5MjpNMS55Mn0pO2Vsc2UgaWYoTTEpSzEoe3R5cGU6ImVuZCIsLi4uTTF9KTtyMS5jdXJyZW50PSExLGgxLmN1cnJlbnQ9ITEsRTEobnVsbCl9cmV0dXJufWxldCB4PV8uY2hhbmdlZFRvdWNoZXNbMF07aWYoIXgpcmV0dXJuO2xldCBsPSh4LmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLFExPSh4LmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2lmKEwwKCksUDEuY3VycmVudClEMSh7dHlwZToiZW5kIix4OmwseTpRMSxlZGdlOmYwfSksUDEuY3VycmVudD0hMTtlbHNlIEQxKHt0eXBlOiJlbmQiLHg6bCx5OlExfSl9fSksUSgiZGl2Iix7cmVmOnQxLCJkYXRhLXRlc3RpZCI6InRvdWNoLWluZGljYXRvciIsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSIsd2lkdGg6MjQsaGVpZ2h0OjI0LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDU5LDEzMCwyNDYsMC41KSIsYm94U2hhZG93OiIwIDAgOHB4IHJnYmEoNTksMTMwLDI0NiwwLjMpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksbzEmJlEoSjEse2NoaWxkcmVuOltRKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTpDOShvMS54MSxvMS55MSl9KSxRKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTpDOShvMS54MixvMS55Mil9KV19KSwhbyYmIWcmJlEoImRpdiIse3N0eWxlOnsuLi5MOSwuLi5afHx7fX0sY2hpbGRyZW46USgic3BhbiIse3N0eWxlOntjb2xvcjoiIzg4OCIsZm9udFNpemU6MTR9LGNoaWxkcmVuOiJDb25uZWN0aW5nLi4uIn0pfSksZyYmUSgiZGl2Iix7c3R5bGU6TDksY2hpbGRyZW46USgic3BhbiIse3N0eWxlOntjb2xvcjoiI2Y0NCIsZm9udFNpemU6MTQscGFkZGluZzoyMCx0ZXh0QWxpZ246ImNlbnRlciJ9LGNoaWxkcmVuOmd9KX0pLF8xJiZRKCJkaXYiLHtzdHlsZTpOJCxjaGlsZHJlbjpRKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZmJiZjI0Iixmb250U2l6ZToxMyxmb250RmFtaWx5OiJtb25vc3BhY2UifSxjaGlsZHJlbjoiU2xvdyBjb25uZWN0aW9uIn0pfSldfSl9KSwhayYmUSgiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLHBhZGRpbmc6IjRweCA4cHgiLGJvcmRlclRvcDoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxjaGlsZHJlbjpbUSgiYnV0dG9uIix7b25DbGljazpVMSxzdHlsZTp7YmFja2dyb3VuZDoibm9uZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIpIixjb2xvcjoiI2FhYSIsZm9udFNpemU6MTEsZm9udEZhbWlseToibW9ub3NwYWNlIixwYWRkaW5nOiIycHggMTBweCIsY3Vyc29yOiJwb2ludGVyIixib3JkZXJSYWRpdXM6NH0sY2hpbGRyZW46IkhvbWUifSksUSgic3BhbiIse3N0eWxlOntjb2xvcjpjPjA/IiM0ZjQiOiIjODg4Iixmb250U2l6ZToxMixmb250RmFtaWx5OiJtb25vc3BhY2UiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjZ9LGNoaWxkcmVuOltQJiZRKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicXVhbGl0eS1kb3QiLHN0eWxlOnt3aWR0aDo4LGhlaWdodDo4LGJvcmRlclJhZGl1czoiNTAlIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGJhY2tncm91bmQ6UD09PSJnb29kIj8iIzRhZGU4MCI6UD09PSJkZWdyYWRlZCI/IiNmYWNjMTUiOiIjZWY0NDQ0In19KSxjLCIgZnBzIl19KV19KV19KX12YXIgTiQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjgsbGVmdDoiNTAlIix0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTUwJSkiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC43KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDEycHgiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxMOT17cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjgpIn0sSDk9MjA7ZnVuY3Rpb24gQzkoJCxLKXtyZXR1cm57cG9zaXRpb246ImFic29sdXRlIixsZWZ0OmAkeyQqMTAwfSVgLHRvcDpgJHtLKjEwMH0lYCx3aWR0aDpIOSxoZWlnaHQ6SDksYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGJvcmRlcjoiMS4yNXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41NSkiLGJveFNoYWRvdzoiMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40NSkiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19ZnVuY3Rpb24gVDAoJCl7aWYoISQpcmV0dXJuImlwaG9uZSI7bGV0IEs9JC50b0xvd2VyQ2FzZSgpO2lmKEsuaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4iaXBhZCI7aWYoSy5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4id2F0Y2giO2lmKEsuaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiJ2aXNpb24iO3JldHVybiJpcGhvbmUifXZhciB5MT17aXBob25lOnt3aWR0aDo0MjcsaGVpZ2h0Ojg4MSxiZXplbFg6MTgsYmV6ZWxZOjE4LGlubmVyUmFkaXVzOjU1fSxpcGFkOnt3aWR0aDo0MzAsaGVpZ2h0OjYwNSxiZXplbFg6MTYsYmV6ZWxZOjE2LGlubmVyUmFkaXVzOjEyfSx3YXRjaDp7d2lkdGg6Mjc0LGhlaWdodDozMjIsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czo3OX0sdmlzaW9uOnt3aWR0aDo2NDAsaGVpZ2h0OjQwMCxiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjMyfX0sTEYwPXkxLmlwaG9uZS53aWR0aCxIRjA9eTEuaXBob25lLmhlaWdodCxDRjA9eTEuaXBob25lLmJlemVsWCxrRjA9eTEuaXBob25lLmJlemVsWSxGRjA9eTEuaXBob25lLmlubmVyUmFkaXVzLGs5PXsiaVBob25lIDE3IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE3IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTciOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIEFpciI6e3dpZHRoOjEyNjAsaGVpZ2h0OjI3MzZ9LCJpUGhvbmUgRHVvIjp7d2lkdGg6MTM5OCxoZWlnaHQ6MjAzNH0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBQMigkLEspe2xldCBKPSQmJiQud2lkdGg+MCYmJC5oZWlnaHQ+MD8kOkssWj1WNShKKTtpZihaKXJldHVybmAke1oud2lkdGh9IC8gJHtaLmhlaWdodH1gO3JldHVybmAke3kxLmlwaG9uZS53aWR0aC0yKnkxLmlwaG9uZS5iZXplbFh9IC8gJHt5MS5pcGhvbmUuaGVpZ2h0LTIqeTEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIEI1KCQ9ImlwaG9uZSIsSyl7bGV0IEo9Sz9rOVtLXTpudWxsO2lmKEopcmV0dXJuIEo7bGV0IFo9eTFbJF07cmV0dXJue3dpZHRoOloud2lkdGgtMipaLmJlemVsWCxoZWlnaHQ6Wi5oZWlnaHQtMipaLmJlemVsWX19ZnVuY3Rpb24gTjUoJD0iaXBob25lIixLKXtpZihtMChLKSlzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIFcyKCQ9ImlwaG9uZSIsSyl7bGV0IEo9eTFbJF0sWj1KLndpZHRoLTIqSi5iZXplbFgsWD1KLmhlaWdodC0yKkouYmV6ZWxZO2lmKFo8WCYmbTAoSykpcmV0dXJuYCR7Si5pbm5lclJhZGl1cy9YKjEwMH0lIC8gJHtKLmlubmVyUmFkaXVzL1oqMTAwfSVgO3JldHVybmAke0ouaW5uZXJSYWRpdXMvWioxMDB9JSAvICR7Si5pbm5lclJhZGl1cy9YKjEwMH0lYH1mdW5jdGlvbiBGOSgkKXtsZXQgSz15MVskLnR5cGVdLEo9Sy53aWR0aC0yKksuYmV6ZWxYLFo9Sy5oZWlnaHQtMipLLmJlemVsWSxYLFk7aWYoSjxaJiZtMCgkLmNvbmZpZz8/bnVsbCkpWD1LLmlubmVyUmFkaXVzL1osWT1LLmlubmVyUmFkaXVzL0o7ZWxzZSBYPUsuaW5uZXJSYWRpdXMvSixZPUsuaW5uZXJSYWRpdXMvWjtsZXQgcT1YKiQuY29udGFpbmVyV2lkdGgsVj1ZKiQuY29udGFpbmVySGVpZ2h0LE49TWF0aC5zcXJ0KE1hdGgubWF4KHEqViwwKSk7cmV0dXJue3J4OnEscnk6VixyR2VvbTpOfX12YXIgeiQ9MTMsTCQ9NjI7ZnVuY3Rpb24gTTgoJCl7bGV0e2NvbnRhaW5lcldpZHRoOkssY29udGFpbmVySGVpZ2h0Okp9PSQsWj0oayk9PmsudG9GaXhlZCgzKSxYPShrLEMpPT57bGV0IFA9Qyx5PUMsVD1MJC8yKihNYXRoLlBJLzE4MCksQT0yMjUqTWF0aC5QSS8xODAsdz1BK1QsaT1BLVQsdj1QK2sqTWF0aC5jb3Modyksaj15K2sqTWF0aC5zaW4odyksZD1QK2sqTWF0aC5jb3MoaSksWjE9eStrKk1hdGguc2luKGkpLHExPWBNICR7Wih2KX0gJHtaKGopfSBBICR7WihrKX0gJHtaKGspfSAwIDAgMSAke1ooZCl9ICR7WihaMSl9YCxvPWBNICR7WihkKX0gJHtaKFoxKX0gQSAke1ooayl9ICR7WihrKX0gMCAwIDAgJHtaKHYpfSAke1ooail9YDtyZXR1cm57ZDpxMSxkRmlsbDpvfX07aWYoIShLPjApfHwhKEo+MCkpe2xldCBrPXokLEM9TWF0aC5jZWlsKGsrMTQpLHtkOlAsZEZpbGw6eX09WChrLEMpO3JldHVybntkOlAsZEZpbGw6eSx2aWV3Qm94U2l6ZTpDfX1sZXR7ckdlb206WX09RjkoJCkscT1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKEssSikpKSxWPVkqMC4zNCtxLE49TWF0aC5taW4oSyxKKSxCPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLE4qMC4wNTIpKTtWPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLFYsQikpO2xldCBIPU1hdGgubWF4KDI2LE1hdGguY2VpbChWKzEzKSkse2Q6RixkRmlsbDpMfT1YKFYsSCk7cmV0dXJue2Q6RixkRmlsbDpMLHZpZXdCb3hTaXplOkh9fWZ1bmN0aW9uIF8yKHt0eXBlOiQ9ImlwaG9uZSIsc3RyZWFtaW5nOks9ITF9KXtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gUShDJCx7c3RyZWFtaW5nOkt9KTtjYXNlIndhdGNoIjpyZXR1cm4gUShrJCx7c3RyZWFtaW5nOkt9KTtjYXNlInZpc2lvbiI6cmV0dXJuIFEoRiQse3N0cmVhbWluZzpLfSk7ZGVmYXVsdDpyZXR1cm4gUShIJCx7c3RyZWFtaW5nOkt9KX19ZnVuY3Rpb24gSCQoe3N0cmVhbWluZzokPSExfSl7cmV0dXJuIFEoInN2ZyIse3ZpZXdCb3g6IjAgMCA0MjcgODgxIixzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1EoImRlZnMiLHtjaGlsZHJlbjpbUSgiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIwIix4OiItMC4xNjY5OTIiLHk6IjAuMTY2NTA0Iix3aWR0aDoiNDI3IixoZWlnaHQ6Ijg4MC42NjciLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1EoImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFEoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxRKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSksUSgiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIxIix4OiI2LjMzMjM2Iix5OiI2LjMzMzgyIix3aWR0aDoiNDE0IixoZWlnaHQ6Ijg2OCIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbUSgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksUSgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFEoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pXX0pLFEoInJlY3QiLHt4OiIzLjgzMjY4Iix5OiIzLjgzMzY2Iix3aWR0aDoiNDE5IixoZWlnaHQ6Ijg3MyIscng6IjY2LjE2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQuMzMzMzMifSksUSgicmVjdCIse3g6IjAuODMzMzMzIix5OiIwLjgzMzMzMyIsd2lkdGg6IjQyNSIsaGVpZ2h0OiI4NzkiLHJ4OiI2OS4xNjY3IixzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pLFEoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMCkiLGNoaWxkcmVuOlEoInJlY3QiLHt4OiIxLjY2NjAyIix5OiIyIix3aWR0aDoiNDIzLjMzMyIsaGVpZ2h0OiI4NzciLHJ4OiI2OC42NjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pfSksUSgiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIxKSIsY2hpbGRyZW46USgicmVjdCIse3g6IjcuMzMyNjgiLHk6IjcuMzMzNjYiLHdpZHRoOiI0MTIiLGhlaWdodDoiODY2IixyeDoiNjIuNjY2NyIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjY2NjcifSl9KSxRKCJyZWN0Iix7eDoiMTUxLjY2NiIseToiMzEuNjY3Iix3aWR0aDoiMTIzLjMzMyIsaGVpZ2h0OiIzNiIscng6IjE4IixmaWxsOiJibGFjayIsc3R5bGU6e29wYWNpdHk6JD8wOjEsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIEMkKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBLPXkxLmlwYWQud2lkdGgsSj15MS5pcGFkLmhlaWdodCxaPTMwLFg9MjY7cmV0dXJuIFEoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0t9ICR7Sn1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbUSgiZGVmcyIse2NoaWxkcmVuOltRKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SyxoZWlnaHQ6SixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltRKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxRKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksUSgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLFEoImZpbHRlciIse2lkOiJpcGFkLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpLLTEwLGhlaWdodDpKLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1EoImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFEoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxRKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiYmx1ciJ9KV19KV19KSxRKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkstNyxoZWlnaHQ6Si03LHJ4OjI2LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQifSksUSgicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Sy0xLjY2NixoZWlnaHQ6Si0xLjY2NixyeDozMCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxRKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MCkiLGNoaWxkcmVuOlEoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Sy0zLGhlaWdodDpKLTMscng6Mjksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxRKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MSkiLGNoaWxkcmVuOlEoInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpLLTEyLGhlaWdodDpKLTEyLHJ4OjI0LHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksUSgiY2lyY2xlIix7Y3g6Sy8yLGN5OnkxLmlwYWQuYmV6ZWxZLzIrMSxyOiIzIixmaWxsOiIjMWExYTFhIixzdHlsZTp7b3BhY2l0eTokPzA6MC44LHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KSxRKCJyZWN0Iix7eDooSy0xMjApLzIseTpKLXkxLmlwYWQuYmV6ZWxZLzItMi41LHdpZHRoOiIxMjAiLGhlaWdodDoiNSIscng6IjIuNSIsZmlsbDoid2hpdGUiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjM1LG1peEJsZW5kTW9kZToiZGlmZmVyZW5jZSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIGskKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBLPXkxLndhdGNoLndpZHRoLEo9eTEud2F0Y2guaGVpZ2h0LFo9ODgsWD04MixZPTgscT0zNixWPUovMi0xOC0xNixOPTIyLEI9Si8yLTExKzE2O3JldHVybiBRKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtLfSAke0p9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb3ZlcmZsb3c6InZpc2libGUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltRKCJkZWZzIix7Y2hpbGRyZW46USgiZmlsdGVyIix7aWQ6IndhdGNoLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpLKzEyLGhlaWdodDpKLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1EoImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFEoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxRKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSl9KSxRKCJyZWN0Iix7eDpLLTIseTpWLHdpZHRoOjgsaGVpZ2h0OjM2LHJ4OiIzIixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxIn0pLFEoInJlY3QiLHt4OkstMSx5OkIsd2lkdGg6NixoZWlnaHQ6MjIscng6IjIuNSIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMC44In0pLFEoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Sy03LGhlaWdodDpKLTcscng6ODIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMy41In0pLFEoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkstMS42NjYsaGVpZ2h0OkotMS42NjYscng6ODgsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksUSgiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3dhdGNoLWdsb3cwKSIsY2hpbGRyZW46USgicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpLLTMsaGVpZ2h0OkotMyxyeDo4NyxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pXX0pfWZ1bmN0aW9uIEYkKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBLPXkxLnZpc2lvbi53aWR0aCxKPXkxLnZpc2lvbi5oZWlnaHQsWj00MCxYPTM0O3JldHVybiBRKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtLfSAke0p9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1EoImRlZnMiLHtjaGlsZHJlbjpbUSgiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SyxoZWlnaHQ6SixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltRKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxRKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksUSgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLFEoImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOkstMTAsaGVpZ2h0OkotMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbUSgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksUSgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFEoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMyIscmVzdWx0OiJibHVyIn0pXX0pLFEoImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMCIseTI6IjEiLGNoaWxkcmVuOltRKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNTU1NTU4IixzdG9wT3BhY2l0eToiMC4zIn0pLFEoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzNhM2EzZCIsc3RvcE9wYWNpdHk6IjAuMSJ9KV19KV19KSxRKCJyZWN0Iix7eDoiMCIseToiMCIsd2lkdGg6SyxoZWlnaHQ6SixyeDo0MCxmaWxsOiJ1cmwoI3Zpc2lvbi1nbGFzcykifSksUSgicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpLLTcsaGVpZ2h0OkotNyxyeDozNCxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzIn0pLFEoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkstMS42NjYsaGVpZ2h0OkotMS42NjYscng6NDAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksUSgiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MCkiLGNoaWxkcmVuOlEoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Sy0zLGhlaWdodDpKLTMscng6Mzksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxRKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cxKSIsY2hpbGRyZW46USgicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOkstMTIsaGVpZ2h0OkotMTIscng6MzIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxRKCJlbGxpcHNlIix7Y3g6Sy8yLGN5OkovMixyeDpLLzItMzAscnk6Si8yLTI0LHN0cm9rZToiIzRhNGE0ZCIsc3Ryb2tlV2lkdGg6IjAuNSIsb3BhY2l0eToiMC4zIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX12YXIgUDg9SDAobnVsbCk7ZnVuY3Rpb24gRDIoJCl7bGV0IEs9QzAoUDgpO2lmKCFLKXRocm93IEVycm9yKGA8U2ltdWxhdG9yVG9vbGJhci4keyR9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8U2ltdWxhdG9yVG9vbGJhcj5gKTtyZXR1cm4gS312YXIgTyQ9e2Rpc3BsYXk6ImZsZXgiLGZsZXhXcmFwOiJ3cmFwIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6IjRweCAxMnB4IixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyUmFkaXVzOjI0LGJhY2tncm91bmQ6InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZywgIzE4MTgxOCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSIsYm94U2hhZG93OiIwIDFweCAycHggcmdiYSgwLDAsMCwwLjIpIixtaW5XaWR0aDoyNDAsd2lkdGg6IjEwMCUifTtmdW5jdGlvbiBNJCh7ZXhlYzokLG9uUm90YXRlOkssb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlosZGV2aWNlTmFtZTpYLGRldmljZVJ1bnRpbWU6WSxzdHJlYW1pbmc6cT0hMSxkaXNhYmxlZDpWPSExLGNoaWxkcmVuOk4sc3R5bGU6QiwuLi5VfSl7bGV0IEc9VDAoWCksSD17ZXhlYzokLG9uUm90YXRlOkssb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlosZGV2aWNlTmFtZTpYLGRldmljZVJ1bnRpbWU6WSxkZXZpY2VUeXBlOkcsc3RyZWFtaW5nOnEsZGlzYWJsZWQ6Vnx8IVp8fCFxfTtyZXR1cm4gUShQOC5Qcm92aWRlcix7dmFsdWU6SCxjaGlsZHJlbjpRKCJkaXYiLHsiZGF0YS1zaW11bGF0b3ItdG9vbGJhciI6ITAsc3R5bGU6ey4uLk8kLC4uLkJ9LC4uLlUsY2hpbGRyZW46Tn0pfSl9dmFyIFAkPXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGFsaWduSXRlbXM6ImZsZXgtc3RhcnQiLHRleHRBbGlnbjoibGVmdCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNmZmYiLHBhZGRpbmc6IjJweCA0cHgiLG1hcmdpbjoiLTJweCAtNHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGxpbmVIZWlnaHQ6MS4yLGZvbnRGYW1pbHk6ImluaGVyaXQifSxXJD1rMChmdW5jdGlvbih7bmFtZTpLLHN1YnRpdGxlOkosaGlkZUNoZXZyb246WixoaWRlU3VidGl0bGU6WCxzdHlsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpWLC4uLk59LEIpe2xldCBVPUQyKCJUaXRsZSIpLFtHLHpdPU8oITEpLEg9Sz8/VS5kZXZpY2VOYW1lPz8iTm8gc2ltdWxhdG9yIixGPUo/PyhVLmRldmljZVJ1bnRpbWU/VS5kZXZpY2VSdW50aW1lLnJlcGxhY2UoL1wuLywiICIpOiLigJQiKTtyZXR1cm4gUSgiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiZGF0YS1zaW11bGF0b3ItdG9vbGJhci10aXRsZSI6ITAsb25Nb3VzZUVudGVyOihMKT0+e3ooITApLHE/LihMKX0sb25Nb3VzZUxlYXZlOihMKT0+e3ooITEpLFY/LihMKX0sc3R5bGU6ey4uLlAkLGJhY2tncm91bmQ6Rz8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLC4uLll9LC4uLk4sY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTp7ZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZm9udFNpemU6MTIsZm9udFdlaWdodDo2MDAsY29sb3I6IiNmZmYiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbSCwhWiYmUSgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixzdHlsZTp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsZmxleFNocmluazowfSxjaGlsZHJlbjpRKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSwhWCYmUSgic3BhbiIse3N0eWxlOntmb250U2l6ZToxMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46Rn0pXX0pfSksXyQ9e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZmxleFNocmluazowfTtmdW5jdGlvbiBEJCh7c3R5bGU6JCwuLi5LfSl7cmV0dXJuIFEoImRpdiIse3N0eWxlOnsuLi5fJCwuLi4kfSwuLi5LfSl9dmFyIFQkPXtiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjEyLGN1cnNvcjoicG9pbnRlciIsZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZC1jb2xvciAwLjE1cywgY29sb3IgMC4xNXMiLHBvc2l0aW9uOiJyZWxhdGl2ZSIsb3ZlcmZsb3c6InZpc2libGUifSxUMj1rMChmdW5jdGlvbih7Zm9yY2VEaXNhYmxlZDpLLHRvb2x0aXA6SixzdHlsZTpaLGRpc2FibGVkOlgsdGl0bGU6WSxvbk1vdXNlRW50ZXI6cSxvbk1vdXNlTGVhdmU6VixvblBvaW50ZXJEb3duOk4sb25Gb2N1czpCLG9uQmx1cjpVLG9uQ2xpY2s6RyxjaGlsZHJlbjp6LCJhcmlhLWxhYmVsIjpILC4uLkZ9LEwpe2xldCBrPUMwKFA4KSxDPVh8fEt8fGs/LmRpc2FibGVkLFtQLHldPU8oITEpLFtULEFdPU8oITEpLHc9SSghMSksaT1xNSgpLHY9Sj8/WT8/KHR5cGVvZiBIPT09InN0cmluZyI/SDpudWxsKSxqPSEhdiYmIUMmJihQfHxUKTtyZXR1cm4gUSgiYnV0dG9uIix7cmVmOkwsdHlwZToiYnV0dG9uIixkaXNhYmxlZDpDLCJhcmlhLWxhYmVsIjpILCJhcmlhLWRlc2NyaWJlZGJ5Ijp2P2k6dm9pZCAwLG9uUG9pbnRlckRvd246KGQpPT57dy5jdXJyZW50PSEwLE4/LihkKX0sb25Nb3VzZUVudGVyOihkKT0+e3koITApLHE/LihkKX0sb25Nb3VzZUxlYXZlOihkKT0+e3koITEpLFY/LihkKX0sb25Gb2N1czooZCk9PntBKCF3LmN1cnJlbnQpLEI/LihkKX0sb25CbHVyOihkKT0+e3cuY3VycmVudD0hMSxBKCExKSxVPy4oZCl9LG9uQ2xpY2s6KGQpPT57eSghMSksQSghMSksZC5jdXJyZW50VGFyZ2V0LmJsdXIoKSxHPy4oZCl9LHN0eWxlOnsuLi5UJCxjb2xvcjpDPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIixiYWNrZ3JvdW5kOlAmJiFDPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsY3Vyc29yOkM/Im5vdC1hbGxvd2VkIjoicG9pbnRlciIsLi4uWn0sLi4uRixjaGlsZHJlbjpbeix2JiZRKCJzcGFuIix7aWQ6aSxyb2xlOiJ0b29sdGlwIiwiYXJpYS1oaWRkZW4iOiFqLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6IjUwJSIsYm90dG9tOiJjYWxjKDEwMCUgKyA4cHgpIix0cmFuc2Zvcm06YHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgke2o/MDoyfXB4KWAsb3BhY2l0eTpqPzE6MCxwb2ludGVyRXZlbnRzOiJub25lIix3aGl0ZVNwYWNlOiJub3dyYXAiLHBhZGRpbmc6IjRweCA3cHgiLGJvcmRlclJhZGl1czo2LGJhY2tncm91bmQ6InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZywgIzE4MTgxOCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTIpIixmb250U2l6ZToxMSxmb250V2VpZ2h0OjUwMCxsaW5lSGVpZ2h0OjEsYm94U2hhZG93OiIwIDRweCAxNHB4IHJnYmEoMCwwLDAsMC4zMikiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4xMnMgZWFzZSwgdHJhbnNmb3JtIDAuMTJzIGVhc2UiLHpJbmRleDoxMDB9LGNoaWxkcmVuOnZ9KV19KX0pO2Z1bmN0aW9uIHckKCQsSyl7aWYoJD09PSJ3YXRjaCIpcmV0dXJuIEUkKCk7aWYoSylyZXR1cm5geGNydW4gc2ltY3RsIGxhdW5jaCAke0t9IGNvbS5hcHBsZS5zcHJpbmdib2FyZGA7cmV0dXJuInNlcnZlLXNpbSBidXR0b24gaG9tZSJ9ZnVuY3Rpb24gRSQoKXtyZXR1cm5bJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBzZXQgZnJvbnRtb3N0IHRvIHRydWUnLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gcGVyZm9ybSBhY3Rpb24gIkFYUmFpc2UiIG9mIChmaXJzdCB3aW5kb3cgd2hvc2UgbmFtZSBjb250YWlucyAid2F0Y2hPUyIpJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIGNsaWNrIG1lbnUgaXRlbSAiSG9tZSIgb2YgbWVudSAiRGV2aWNlIiBvZiBtZW51IGJhciBpdGVtICJEZXZpY2UiIG9mIG1lbnUgYmFyIDEnXS5tYXAoKEspPT5gLWUgJyR7S30nYCkucmVkdWNlKChLLEopPT5gJHtLfSAke0p9YCwib3Nhc2NyaXB0Iil9dmFyIEkkPVEoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOlEoInBhdGgiLHtkOiJNMyAxMC41IDEyIDNsOSA3LjVWMjBhMSAxIDAgMCAxLTEgMWgtNXYtN2gtNnY3SDRhMSAxIDAgMCAxLTEtMXoifSl9KSxiJD1RKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCA0NCA0NCIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpRKCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixmaWxsOiJjdXJyZW50Q29sb3IiLGQ6Ik00My42ODc1IDEyLjQ2ODhWOC4yNzM0NEM0My42ODc1IDUuNzI2NTYgNDIuOTUzMSAzLjcxMDk0IDQxLjQ4NDQgMi4yMjY1NkM0MC4wMTU2IDAuNzQyMTg4IDM4IDAgMzUuNDM3NSAwSDMxLjE0ODRDMzAuNjAxNiAwIDMwLjEzMjggMC4xOTUzMTIgMjkuNzQyMiAwLjU4NTkzOEMyOS4zNTE2IDAuOTc2NTYyIDI5LjE1NjIgMS40NDUzMSAyOS4xNTYyIDEuOTkyMTlDMjkuMTU2MiAyLjUyMzQ0IDI5LjM1MTYgMi45ODQzOCAyOS43NDIyIDMuMzc1QzMwLjEzMjggMy43NjU2MiAzMC42MDE2IDMuOTYwOTQgMzEuMTQ4NCAzLjk2MDk0SDM1LjQzNzVDMzYuNzgxMiAzLjk2MDk0IDM3LjgzNTkgNC4zNDM3NSAzOC42MDE2IDUuMTA5MzhDMzkuMzUxNiA1Ljg3NSAzOS43MjY2IDYuOTI5NjkgMzkuNzI2NiA4LjI3MzQ0VjEyLjQ2ODhDMzkuNzI2NiAxMyAzOS45MjE5IDEzLjQ2MDkgNDAuMzEyNSAxMy44NTE2QzQwLjcwMzEgMTQuMjQyMiA0MS4xNzE5IDE0LjQzNzUgNDEuNzE4OCAxNC40Mzc1QzQyLjI1IDE0LjQzNzUgNDIuNzEwOSAxNC4yNDIyIDQzLjEwMTYgMTMuODUxNkM0My40OTIyIDEzLjQ2MDkgNDMuNjg3NSAxMyA0My42ODc1IDEyLjQ2ODhaTTAgMTIuNDY4OEMwIDEzIDAuMTk1MzEyIDEzLjQ2MDkgMC41ODU5MzggMTMuODUxNkMwLjk3NjU2MiAxNC4yNDIyIDEuNDM3NSAxNC40Mzc1IDEuOTY4NzUgMTQuNDM3NUMyLjUgMTQuNDM3NSAyLjk2MDk0IDE0LjI0MjIgMy4zNTE1NiAxMy44NTE2QzMuNzQyMTkgMTMuNDYwOSAzLjkzNzUgMTMgMy45Mzc1IDEyLjQ2ODhWOC4yNzM0NEMzLjkzNzUgNi45Mjk2OSA0LjMyMDMxIDUuODc1IDUuMDg1OTQgNS4xMDkzOEM1LjgzNTk0IDQuMzQzNzUgNi44OTA2MiAzLjk2MDk0IDguMjUgMy45NjA5NEgxMi41MzkxQzEzLjA4NTkgMy45NjA5NCAxMy41NTQ3IDMuNzY1NjIgMTMuOTQ1MyAzLjM3NUMxNC4zMjAzIDIuOTg0MzggMTQuNTA3OCAyLjUyMzQ0IDE0LjUwNzggMS45OTIxOUMxNC41MDc4IDEuNDQ1MzEgMTQuMzIwMyAwLjk3NjU2MiAxMy45NDUzIDAuNTg1OTM4QzEzLjU1NDcgMC4xOTUzMTIgMTMuMDg1OSAwIDEyLjUzOTEgMEg4LjI1QzUuNjg3NSAwIDMuNjcxODggMC43NDIxODggMi4yMDMxMiAyLjIyNjU2QzAuNzM0Mzc1IDMuNzEwOTQgMCA1LjcyNjU2IDAgOC4yNzM0NFYxMi40Njg4Wk00My42ODc1IDMxLjI0MjJDNDMuNjg3NSAzMC43MTA5IDQzLjQ5MjIgMzAuMjUgNDMuMTAxNiAyOS44NTk0QzQyLjcxMDkgMjkuNDY4OCA0Mi4yNSAyOS4yNzM0IDQxLjcxODggMjkuMjczNEM0MS4xNzE5IDI5LjI3MzQgNDAuNzAzMSAyOS40Njg4IDQwLjMxMjUgMjkuODU5NEMzOS45MjE5IDMwLjI1IDM5LjcyNjYgMzAuNzEwOSAzOS43MjY2IDMxLjI0MjJWMzUuNDM3NUMzOS43MjY2IDM2Ljc4MTIgMzkuMzUxNiAzNy44MzU5IDM4LjYwMTYgMzguNjAxNkMzNy44MzU5IDM5LjM2NzIgMzYuNzgxMiAzOS43NSAzNS40Mzc1IDM5Ljc1SDMxLjE0ODRDMzAuNjAxNiAzOS43NSAzMC4xMzI4IDM5Ljk0NTMgMjkuNzQyMiA0MC4zMzU5QzI5LjM1MTYgNDAuNzI2NiAyOS4xNTYyIDQxLjE4NzUgMjkuMTU2MiA0MS43MTg4QzI5LjE1NjIgNDIuMjY1NiAyOS4zNTE2IDQyLjcyNjYgMjkuNzQyMiA0My4xMDE2QzMwLjEzMjggNDMuNDkyMiAzMC42MDE2IDQzLjY4NzUgMzEuMTQ4NCA0My42ODc1SDM1LjQzNzVDMzggNDMuNjg3NSA0MC4wMTU2IDQyLjk0NTMgNDEuNDg0NCA0MS40NjA5QzQyLjk1MzEgMzkuOTkyMiA0My42ODc1IDM3Ljk4NDQgNDMuNjg3NSAzNS40Mzc1VjMxLjI0MjJaTTAgMzEuMjQyMlYzNS40Mzc1QzAgMzcuOTg0NCAwLjczNDM3NSAzOS45OTIyIDIuMjAzMTIgNDEuNDYwOUMzLjY3MTg4IDQyLjk0NTMgNS42ODc1IDQzLjY4NzUgOC4yNSA0My42ODc1SDEyLjUzOTFDMTMuMDg1OSA0My42ODc1IDEzLjU1NDcgNDMuNDkyMiAxMy45NDUzIDQzLjEwMTZDMTQuMzIwMyA0Mi43MjY2IDE0LjUwNzggNDIuMjY1NiAxNC41MDc4IDQxLjcxODhDMTQuNTA3OCA0MS4xODc1IDE0LjMyMDMgNDAuNzI2NiAxMy45NDUzIDQwLjMzNTlDMTMuNTU0NyAzOS45NDUzIDEzLjA4NTkgMzkuNzUgMTIuNTM5MSAzOS43NUg4LjI1QzYuODkwNjIgMzkuNzUgNS44MzU5NCAzOS4zNjcyIDUuMDg1OTQgMzguNjAxNkM0LjMyMDMxIDM3LjgzNTkgMy45Mzc1IDM2Ljc4MTIgMy45Mzc1IDM1LjQzNzVWMzEuMjQyMkMzLjkzNzUgMzAuNzEwOSAzLjc0MjE5IDMwLjI1IDMuMzUxNTYgMjkuODU5NEMyLjk2MDk0IDI5LjQ2ODggMi41IDI5LjI3MzQgMS45Njg3NSAyOS4yNzM0QzEuNDM3NSAyOS4yNzM0IDAuOTc2NTYyIDI5LjQ2ODggMC41ODU5MzggMjkuODU5NEMwLjE5NTMxMiAzMC4yNSAwIDMwLjcxMDkgMCAzMS4yNDIyWk0zMS41OTM4IDMxLjgwNDdDMzIuNzgxMiAzMS44MDQ3IDMzLjY3MTkgMzEuNTE1NiAzNC4yNjU2IDMwLjkzNzVDMzQuODU5NCAzMC4zNDM4IDM1LjE1NjIgMjkuNDY4OCAzNS4xNTYyIDI4LjMxMjVWMTYuNzEwOUMzNS4xNTYyIDE1LjUzOTEgMzQuODU5NCAxNC42NjQxIDM0LjI2NTYgMTQuMDg1OUMzMy42NzE5IDEzLjQ5MjIgMzIuNzgxMiAxMy4xOTUzIDMxLjU5MzggMTMuMTk1M0gyOC44OTg0QzI4LjQ2MDkgMTMuMTk1MyAyOC4xNDg0IDEzLjE0MDYgMjcuOTYwOSAxMy4wMzEyQzI3Ljc1NzggMTIuOTIxOSAyNy41MjM0IDEyLjcyNjYgMjcuMjU3OCAxMi40NDUzTDI2LjM2NzIgMTEuNTA3OEMyNi4wODU5IDExLjE5NTMgMjUuNzgxMiAxMC45Njg4IDI1LjQ1MzEgMTAuODI4MUMyNS4xMDk0IDEwLjY3MTkgMjQuNjU2MiAxMC41OTM4IDI0LjA5MzggMTAuNTkzOEgxOS42MTcyQzE5LjA1NDcgMTAuNTkzOCAxOC42MDk0IDEwLjY3MTkgMTguMjgxMiAxMC44MjgxQzE3LjkzNzUgMTAuOTY4OCAxNy42MjUgMTEuMTk1MyAxNy4zNDM4IDExLjUwNzhMMTYuNDc2NiAxMi40NDUzQzE2LjIxMDkgMTIuNzQyMiAxNS45NzY2IDEyLjk0NTMgMTUuNzczNCAxMy4wNTQ3QzE1LjU1NDcgMTMuMTQ4NCAxNS4yMzQ0IDEzLjE5NTMgMTQuODEyNSAxMy4xOTUzSDEyLjA0NjlDMTAuODkwNiAxMy4xOTUzIDEwLjAxNTYgMTMuNDkyMiA5LjQyMTg4IDE0LjA4NTlDOC44MTI1IDE0LjY2NDEgOC41MDc4MSAxNS41MzkxIDguNTA3ODEgMTYuNzEwOVYyOC4zMTI1QzguNTA3ODEgMjkuNDY4OCA4LjgxMjUgMzAuMzQzOCA5LjQyMTg4IDMwLjkzNzVDMTAuMDE1NiAzMS41MTU2IDEwLjg5MDYgMzEuODA0NyAxMi4wNDY5IDMxLjgwNDdIMzEuNTkzOFpNMjEuNzk2OSAyOC45NDUzQzIwLjU5MzggMjguOTQ1MyAxOS41IDI4LjY2NDEgMTguNTE1NiAyOC4xMDE2QzE3LjUxNTYgMjcuNTIzNCAxNi43MjY2IDI2Ljc0MjIgMTYuMTQ4NCAyNS43NTc4QzE1LjU1NDcgMjQuNzU3OCAxNS4yNTc4IDIzLjYzMjggMTUuMjU3OCAyMi4zODI4QzE1LjI1NzggMjEuMTc5NyAxNS41NTQ3IDIwLjA4NTkgMTYuMTQ4NCAxOS4xMDE2QzE2LjcyNjYgMTguMTAxNiAxNy41MTU2IDE3LjMxMjUgMTguNTE1NiAxNi43MzQ0QzE5LjUgMTYuMTQwNiAyMC41OTM4IDE1Ljg0MzggMjEuNzk2OSAxNS44NDM4QzIzLjAxNTYgMTUuODQzOCAyNC4xMjUgMTYuMTQwNiAyNS4xMjUgMTYuNzM0NEMyNi4xMDk0IDE3LjMxMjUgMjYuODk4NCAxOC4xMDE2IDI3LjQ5MjIgMTkuMTAxNkMyOC4wNzAzIDIwLjA4NTkgMjguMzU5NCAyMS4xNzk3IDI4LjM1OTQgMjIuMzgyOEMyOC4zNTk0IDIzLjYxNzIgMjguMDcwMyAyNC43MjY2IDI3LjQ5MjIgMjUuNzEwOUMyNi44OTg0IDI2LjY5NTMgMjYuMTA5NCAyNy40ODQ0IDI1LjEyNSAyOC4wNzgxQzI0LjEyNSAyOC42NTYyIDIzLjAxNTYgMjguOTQ1MyAyMS43OTY5IDI4Ljk0NTNaTTIxLjgyMDMgMjYuOTA2MkMyMi42NDg0IDI2LjkwNjIgMjMuNDA2MiAyNi43MTA5IDI0LjA5MzggMjYuMzIwM0MyNC43ODEyIDI1LjkxNDEgMjUuMzI4MSAyNS4zNjcyIDI1LjczNDQgMjQuNjc5N0MyNi4xMjUgMjMuOTkyMiAyNi4zMjAzIDIzLjIyNjYgMjYuMzIwMyAyMi4zODI4QzI2LjMyMDMgMjEuNTcwMyAyNi4xMjUgMjAuODIwMyAyNS43MzQ0IDIwLjEzMjhDMjUuMzI4MSAxOS40NDUzIDI0Ljc4MTIgMTguOTA2MiAyNC4wOTM4IDE4LjUxNTZDMjMuNDA2MiAxOC4xMDk0IDIyLjY0ODQgMTcuOTA2MiAyMS44MjAzIDE3LjkwNjJDMjAuOTkyMiAxNy45MDYyIDIwLjI0MjIgMTguMTA5NCAxOS41NzAzIDE4LjUxNTZDMTguODgyOCAxOC45MDYyIDE4LjMzNTkgMTkuNDQ1MyAxNy45Mjk3IDIwLjEzMjhDMTcuNTIzNCAyMC44MjAzIDE3LjMyMDMgMjEuNTcwMyAxNy4zMjAzIDIyLjM4MjhDMTcuMzIwMyAyMy4yMjY2IDE3LjUyMzQgMjMuOTkyMiAxNy45Mjk3IDI0LjY3OTdDMTguMzM1OSAyNS4zNjcyIDE4Ljg4MjggMjUuOTE0MSAxOS41NzAzIDI2LjMyMDNDMjAuMjQyMiAyNi43MTA5IDIwLjk5MjIgMjYuOTA2MiAyMS44MjAzIDI2LjkwNjJaTTEyLjYzMjggMTguOTg0NEMxMi4yMTA5IDE4Ljk4NDQgMTEuODU5NCAxOC44MzU5IDExLjU3ODEgMTguNTM5MUMxMS4yODEyIDE4LjI0MjIgMTEuMTMyOCAxNy44OTA2IDExLjEzMjggMTcuNDg0NEMxMS4xMzI4IDE3LjA2MjUgMTEuMjgxMiAxNi43MTA5IDExLjU3ODEgMTYuNDI5N0MxMS44NTk0IDE2LjEzMjggMTIuMjEwOSAxNS45ODQ0IDEyLjYzMjggMTUuOTg0NEMxMy4wMzkxIDE1Ljk4NDQgMTMuMzkwNiAxNi4xMzI4IDEzLjY4NzUgMTYuNDI5N0MxMy45ODQ0IDE2LjcxMDkgMTQuMTMyOCAxNy4wNjI1IDE0LjEzMjggMTcuNDg0NEMxNC4xMzI4IDE3Ljg5MDYgMTMuOTg0NCAxOC4yNDIyIDEzLjY4NzUgMTguNTM5MUMxMy4zOTA2IDE4LjgzNTkgMTMuMDM5MSAxOC45ODQ0IDEyLjYzMjggMTguOTg0NFoifSl9KSx5JD1RKCJzdmciLHt3aWR0aDoiMjEiLGhlaWdodDoiMjEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoiTTEyIDVINmEyIDIgMCAwIDAtMiAydjMifSksUSgicGF0aCIse2Q6Im05IDggMy0zLTMtMyJ9KSxRKCJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn0pXX0pLFMkPWswKGZ1bmN0aW9uKHtvbkNsaWNrOkssLi4uSn0sWil7bGV0IFg9RDIoIkhvbWVCdXR0b24iKTtyZXR1cm4gUShUMix7cmVmOlosImFyaWEtbGFiZWwiOiJIb21lIixvbkNsaWNrOihZKT0+e2lmKEs/LihZKSxZLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO1guZXhlYyh3JChYLmRldmljZVR5cGUsWC5kZXZpY2VVZGlkKSl9LC4uLkosY2hpbGRyZW46SSR9KX0pLHgkPWswKGZ1bmN0aW9uKHtvbkNsaWNrOkssLi4uSn0sWil7bGV0IFg9RDIoIlNjcmVlbnNob3RCdXR0b24iKTtyZXR1cm4gUShUMix7cmVmOlosImFyaWEtbGFiZWwiOiJTY3JlZW5zaG90IixvbkNsaWNrOihZKT0+e2lmKEs/LihZKSxZLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKFguZGV2aWNlVWRpZClYLmV4ZWMoYHhjcnVuIHNpbWN0bCBpbyAke1guZGV2aWNlVWRpZH0gc2NyZWVuc2hvdCB+L0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJChkYXRlICslcykucG5nYCl9LC4uLkosY2hpbGRyZW46YiR9KX0pLFIkPWswKGZ1bmN0aW9uKHtvbkNsaWNrOkssZm9yY2VEaXNhYmxlZDpKLC4uLlp9LFgpe2xldCBZPUQyKCJSb3RhdGVCdXR0b24iKSxxPVkuZGV2aWNlVHlwZT09PSJ3YXRjaCJ8fFkuZGV2aWNlVHlwZT09PSJ2aXNpb24iLFtWLE5dPU8oInBvcnRyYWl0Iik7cmV0dXJuIEUoKCk9PntOKFkub3JpZW50YXRpb24/PyJwb3J0cmFpdCIpfSxbWS5kZXZpY2VVZGlkLFkub3JpZW50YXRpb25dKSxRKFQyLHtyZWY6WCwiYXJpYS1sYWJlbCI6IlJvdGF0ZSBkZXZpY2UiLGZvcmNlRGlzYWJsZWQ6Snx8cSxvbkNsaWNrOihCKT0+e2lmKEs/LihCKSxCLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKCFZLmRldmljZVVkaWR8fHEpcmV0dXJuO2xldCBVPW41W1kub3JpZW50YXRpb24/P1ZdO2lmKE4oVSksWS5vblJvdGF0ZSlZLm9uUm90YXRlKFUpO2Vsc2UgWS5leGVjKGBzZXJ2ZS1zaW0gcm90YXRlICR7VX0gLWQgJHtZLmRldmljZVVkaWR9YCl9LC4uLlosY2hpbGRyZW46eSR9KX0pLFMxPU0kO1MxLlRpdGxlPVckO1MxLkFjdGlvbnM9RCQ7UzEuQnV0dG9uPVQyO1MxLkhvbWVCdXR0b249UyQ7UzEuU2NyZWVuc2hvdEJ1dHRvbj14JDtTMS5Sb3RhdGVCdXR0b249UiQ7dmFyIEE5PVt7bmFtZToiVm9sdW1lIGRvd24iLHBhZ2U6MTIsdXNhZ2U6MjM0LEljb246cjV9LHtuYW1lOiJWb2x1bWUgdXAiLHBhZ2U6MTIsdXNhZ2U6MjMzLEljb246bzV9LHtuYW1lOiJQb3dlciIscGFnZToxMix1c2FnZTo0OCxJY29uOnA1fSx7bmFtZToiQ2FtZXJhIGNvbnRyb2wiLHBhZ2U6NjUyODAsdXNhZ2U6MTAyLEljb246eDV9XTtmdW5jdGlvbiBPOSh7dmFsdWU6JCxvblByZXNzOkssaWNvblJvdGF0aW9uOko9MH0pe2xldCBaPUkoITEpLFg9RCgoKT0+e2lmKFouY3VycmVudClaLmN1cnJlbnQ9ITEsSygkLCJ1cCIpfSxbJCxLXSk7cmV0dXJuIEUoKCk9PlgsW1hdKSxRKFMxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQubmFtZSx0aXRsZTokLm5hbWUsc3R5bGU6e3RyYW5zZm9ybTpgcm90YXRlKCR7Sn1kZWcpYCxjb2xvcjoiI2U1ZTVlNyIsdHJhbnNpdGlvbjoib3BhY2l0eSAxODBtcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDE1MG1zLCBjb2xvciAxNTBtcyJ9LG9uUG9pbnRlckRvd246KFkpPT57aWYoWS5zdG9wUHJvcGFnYXRpb24oKSxZLmJ1dHRvbiE9PTApcmV0dXJuO1kucHJldmVudERlZmF1bHQoKSxZLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoWS5wb2ludGVySWQpLFouY3VycmVudD0hMCxLKCQsImRvd24iKX0sb25Qb2ludGVyVXA6WCxvblBvaW50ZXJDYW5jZWw6WCxvbkxvc3RQb2ludGVyQ2FwdHVyZTpYLG9uQ2xpY2s6KFkpPT57aWYoWS5kZXRhaWw9PT0wKUsoJCwicHJlc3MiKX0sY2hpbGRyZW46USgkLkljb24se3NpemU6MTgsc3Ryb2tlV2lkdGg6MiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pfSl9ZnVuY3Rpb24gTTkoJCxLKXtsZXQgSj1hNShwMChLKS5pbnB1dE9yaWVudGF0aW9uLGYwKSxaPUo9PT1ZOT8xLSQueDpKPT09Vjk/JC54Oko9PT1xOT8xLSQueTokLnk7cmV0dXJuIGk1KFopPT09dm9pZCAwPyQ6ey4uLiQsZWRnZTpKfX1mdW5jdGlvbiBQOSgkLEspe3JldHVybiAkLmVkZ2U9PT12b2lkIDA/Szp7Li4uSyxlZGdlOiQuZWRnZX19ZnVuY3Rpb24gVzkoe3VybDokLHByb2plY3Rpb246SyxvblRvdWNoOkosb25NdWx0aVRvdWNoOlosb25FcnJvcjpYLG9uSGFyZHdhcmVQcmVzczpZLG9uU3RyZWFtaW5nQ2hhbmdlOnEsc2NyZWVuQ29uZmlnOlYsY2hpbGRyZW46Tn0pe2xldCBCPSQ5KEspLFU9ZTMoSyksW0csel09TyhudWxsKTtFKCgpPT57bGV0IEE9c2V0VGltZW91dCgoKT0+eihVKSwyMjApO3JldHVybigpPT5jbGVhclRpbWVvdXQoQSl9LFtVXSk7bGV0IEg9SyE9bnVsbCYmRz09PVUsRj1JKG51bGwpLHtzdWJzY3JpYmVGcmFtZTpMfT1rMigkLHEpLGs9SShYKTtrLmN1cnJlbnQ9WCxFKCgpPT57bGV0IEE9bnVsbCx3PXNldFRpbWVvdXQoKCk9PmsuY3VycmVudD8uKCksMTIwMDApLGk9TCgodik9PntjbGVhclRpbWVvdXQodyk7bGV0IGo9QTtpZihBPXYsRi5jdXJyZW50KUYuY3VycmVudC5zcmM9djtpZihqKVVSTC5yZXZva2VPYmplY3RVUkwoail9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dCh3KSxpKCksQSlVUkwucmV2b2tlT2JqZWN0VVJMKEEpfX0sW0wsJF0pO2xldCBDPUkobmV3IE1hcCk7RSgoKT0+KCk9PntsZXRbQSx3XT1bLi4uQy5jdXJyZW50LnZhbHVlcygpXTtpZihBJiZ3KVooe3R5cGU6ImVuZCIseDE6QS54LHkxOkEueSx4Mjp3LngseTI6dy55fSk7ZWxzZSBpZihBKUooe3R5cGU6ImVuZCIsLi4uQX0pO0MuY3VycmVudC5jbGVhcigpfSxbSixaXSk7bGV0IFA9KCk9PntsZXRbQSx3XT1bLi4uQy5jdXJyZW50LnZhbHVlcygpXTtyZXR1cm4gQSYmdz97eDE6QS54LHkxOkEueSx4Mjp3LngseTI6dy55fTpudWxsfSx5PShBKT0+e2xldCB3PUEuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gczMoSywoQS5jbGllbnRYLXcubGVmdCkvdy53aWR0aCwoQS5jbGllbnRZLXcudG9wKS93LmhlaWdodCl9LFQ9KEEpPT57bGV0IHc9Qy5jdXJyZW50LmdldChBLnBvaW50ZXJJZCk7aWYoIXcpcmV0dXJuO2xldCBpPVAoKTtpZihpKVooe3R5cGU6ImVuZCIsLi4uaX0pLEMuY3VycmVudC5jbGVhcigpO2Vsc2UgSih7dHlwZToiZW5kIiwuLi53fSksQy5jdXJyZW50LmRlbGV0ZShBLnBvaW50ZXJJZCk7aWYoQS5jdXJyZW50VGFyZ2V0Lmhhc1BvaW50ZXJDYXB0dXJlKEEucG9pbnRlcklkKSlBLmN1cnJlbnRUYXJnZXQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKEEucG9pbnRlcklkKX07cmV0dXJuIFEoImRpdiIseyJhcmlhLWxhYmVsIjoiSW50ZXJhY3RpdmUgM0QgaVBob25lIER1byIsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIGJnLXRyYW5zcGFyZW50IHNlbGVjdC1ub25lIixzdHlsZTp7dG91Y2hBY3Rpb246Im5vbmUiLGN1cnNvcjoicG9pbnRlciIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSJ9LG9uUG9pbnRlckRvd246KEEpPT57aWYoQS5idXR0b24hPT0wfHxDLmN1cnJlbnQuc2l6ZT49MilyZXR1cm47bGV0IHc9eShBKTtpZighdylyZXR1cm47bGV0IGk9TTkodyxWKTtBLnByZXZlbnREZWZhdWx0KCk7bGV0IHY9Wy4uLkMuY3VycmVudC52YWx1ZXMoKV1bMF07aWYodilKKHt0eXBlOiJlbmQiLC4uLnZ9KTtDLmN1cnJlbnQuc2V0KEEucG9pbnRlcklkLGkpLEEuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShBLnBvaW50ZXJJZCk7bGV0IGo9UCgpO2lmKGopWih7dHlwZToiYmVnaW4iLC4uLmp9KTtlbHNlIEooe3R5cGU6ImJlZ2luIiwuLi5pfSl9LG9uUG9pbnRlck1vdmU6KEEpPT57aWYoIUMuY3VycmVudC5oYXMoQS5wb2ludGVySWQpKXJldHVybjtsZXQgdz15KEEpO2lmKCF3KXJldHVybjtsZXQgaT1QOShDLmN1cnJlbnQuZ2V0KEEucG9pbnRlcklkKSx3KTtDLmN1cnJlbnQuc2V0KEEucG9pbnRlcklkLGkpO2xldCB2PVAoKTtpZih2KVooe3R5cGU6Im1vdmUiLC4uLnZ9KTtlbHNlIEooe3R5cGU6Im1vdmUiLC4uLml9KX0sb25Qb2ludGVyVXA6VCxvblBvaW50ZXJDYW5jZWw6VCxjaGlsZHJlbjpbUSgiaW1nIix7cmVmOkYsb25FcnJvcjpYLGFsdDoiTGl2ZSAzRCBpUGhvbmUgRHVvIixkcmFnZ2FibGU6ITEsY2xhc3NOYW1lOiJibG9jayB3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb250YWluIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctdHJhbnNwYXJlbnQifSksTixIJiZCLm1hcCgoQSk9PlEoImRpdiIse2NsYXNzTmFtZToiZHVvLWhhcmR3YXJlLWFuY2hvciIsc3R5bGU6e2xlZnQ6YCR7QS54KjEwMH0lYCx0b3A6YCR7QS55KjEwMH0lYCx0cmFuc2Zvcm06YHJvdGF0ZSgke0EuYW5nbGV9ZGVnKWB9LGNoaWxkcmVuOlEoImRpdiIse2NsYXNzTmFtZToiZHVvLWhhcmR3YXJlLXJlZ2lvbiIsY2hpbGRyZW46UShPOSx7dmFsdWU6QTlbQS5rZXldLGljb25Sb3RhdGlvbjotQS5hbmdsZSxvblByZXNzOll9KX0pfSxBLmtleSkpXX0pfWZ1bmN0aW9uIF85KCQsSyl7bGV0IEo9KFkpPT5LKFkuYWx0S2V5PT09ITApLFo9KCk9PksoITEpLFg9WyJrZXlkb3duIiwia2V5dXAiLCJwb2ludGVybW92ZSIsInBvaW50ZXJkb3duIl07Zm9yKGxldCBZIG9mIFgpJC5hZGRFdmVudExpc3RlbmVyKFksSik7cmV0dXJuICQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsWiksKCk9Pntmb3IobGV0IFkgb2YgWCkkLnJlbW92ZUV2ZW50TGlzdGVuZXIoWSxKKTskLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLFopfX1mdW5jdGlvbiB3Mih7dHlwZTokLHNpemU6Sz0yMCxzY3JlZW5PbjpKPSExLGR1bzpaPSExfSl7bGV0IFg9e3dpZHRoOkssaGVpZ2h0Okssdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MS42LHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTtpZihaKXJldHVybiBRKCJzdmciLHt3aWR0aDpLLGhlaWdodDpLLHZpZXdCb3g6IjAgMCAxMDIgMTAyIixmaWxsOiJjdXJyZW50Q29sb3IiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1kdW8iLGNoaWxkcmVuOltKJiZRKCJwYXRoIix7ZDoiTTI0IDEwSDcwQzc1LjUyMjkgMTAgODAgMTQuNDc3MiA4MCAyMFY4M0M4MCA4OC41MjI4IDc1LjUyMjggOTMgNzAgOTNIMjRDMjIuODk1NCA5MyAyMiA5Mi4xMDQ2IDIyIDkxVjEyQzIyIDEwLjg5NTQgMjIuODk1NCAxMCAyNCAxMFoiLGZpbGw6IiM0N2I3ZmYiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksUSgicGF0aCIse2Q6Ik0xNyA5MVYxMkMxNyA4LjEzNDAxIDIwLjEzNCA1IDI0IDVINzBDNzguMjg0MyA1IDg1IDExLjcxNTcgODUgMjBWODNMODQuOTk1MSA4My4zODY3Qzg0Ljc5MzIgOTEuMzYzOCA3OC4zNjM4IDk3Ljc5MzIgNzAuMzg2NyA5Ny45OTUxTDcwIDk4VjkzQzc1LjUyMjggOTMgODAgODguNTIyOCA4MCA4M1YyMEM4MCAxNC40NzcyIDc1LjUyMjkgMTAgNzAgMTBIMjRDMjIuODk1NCAxMCAyMiAxMC44OTU0IDIyIDEyVjkxQzIyIDkyLjEwNDYgMjIuODk1NCA5MyAyNCA5M1Y5OEwyMy42Mzk2IDk3Ljk5MTJDMjAuMDYwNSA5Ny44MDk3IDE3LjE5MDMgOTQuOTM5NSAxNy4wMDg4IDkxLjM2MDRMMTcgOTFaTTcwIDkzVjk4SDI0VjkzSDcwWiJ9KSxRKCJjaXJjbGUiLHtjeDoiNjkiLGN5OiIyMSIscjoiNCJ9KSxRKCJwYXRoIix7ZDoiTTQwIDg4LjVDNDAgODcuNjcxNiA0MC42NzE2IDg3IDQxLjUgODdINjEuNUM2Mi4zMjg0IDg3IDYzIDg3LjY3MTYgNjMgODguNUM2MyA4OS4zMjg0IDYyLjMyODQgOTAgNjEuNSA5MEg0MS41QzQwLjY3MTYgOTAgNDAgODkuMzI4NCA0MCA4OC41WiJ9KV19KTtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gUSgic3ZnIix7Li4uWCxjaGlsZHJlbjpbSiYmUSgicmVjdCIse3g6IjUiLHk6IjMiLHdpZHRoOiIxNSIsaGVpZ2h0OiIxOSIscng6IjEuNjUiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxRKCJyZWN0Iix7eDoiNCIseToiMi41Iix3aWR0aDoiMTYiLGhlaWdodDoiMTkiLHJ4OiIyLjUifSksUSgibGluZSIse3gxOiIxMiIseTE6IjE4LjUiLHgyOiIxMiIseTI6IjE4LjUifSldfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIFEoInN2ZyIsey4uLlgsY2hpbGRyZW46W1EoInJlY3QiLHt4OiI2LjUiLHk6IjciLHdpZHRoOiIxMSIsaGVpZ2h0OiIxMCIscng6IjMifSksUSgicGF0aCIse2Q6Ik04LjUgN2wuNi0zLjJBMS41IDEuNSAwIDAgMSAxMC42IDIuNWgyLjhhMS41IDEuNSAwIDAgMSAxLjUgMS4zTDE1LjUgNyJ9KSxRKCJwYXRoIix7ZDoiTTguNSAxN2wuNiAzLjJhMS41IDEuNSAwIDAgMCAxLjUgMS4zaDIuOGExLjUgMS41IDAgMCAwIDEuNS0xLjNsLjYtMy4yIn0pXX0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gUSgic3ZnIix7Li4uWCxjaGlsZHJlbjpRKCJwYXRoIix7ZDoiTTMgMTFhNCA0IDAgMCAxIDQtNGgxMGE0IDQgMCAwIDEgNCA0djIuNWEyLjUgMi41IDAgMCAxLTIuNSAyLjVjLTEuOCAwLTIuNS0xLjItMy41LTEuOC0uOS0uNS0xLjYtLjctMi41LS43cy0xLjYuMi0yLjUuN2MtMSAuNi0xLjcgMS44LTMuNSAxLjhBMi41IDIuNSAwIDAgMSAzIDEzLjV6In0pfSk7ZGVmYXVsdDpyZXR1cm4gUSgic3ZnIix7Li4uWCxjaGlsZHJlbjpbSiYmUSgicmVjdCIse3g6IjYiLHk6IjMiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxRKCJyZWN0Iix7eDoiNi41Iix5OiIyLjUiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIuOCJ9KSxRKCJsaW5lIix7eDE6IjEwLjUiLHkxOiI1Iix4MjoiMTMuNSIseTI6IjUifSldfSl9fWZ1bmN0aW9uIEUyKHttaW46JCxtYXg6Syx2YWx1ZTpKLGRpc2FibGVkOlosY2xhc3NOYW1lOlg9IiIsc3R5bGU6WSwuLi5xfSl7bGV0IE49YCR7KEs+JD9NYXRoLm1heCgwLE1hdGgubWluKDEsKEotJCkvKEstJCkpKTowKSoxMDB9JWAsQj1aPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiIjMGE4NGZmIixVPSJbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOmgtWzRweF0gWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpyb3VuZGVkLWZ1bGwgWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpbYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpX3ZhcigtLXNsaWRlci1maWxsKSxyZ2JhKDI1NSwyNTUsMjU1LDAuMjIpX3ZhcigtLXNsaWRlci1maWxsKSldIFsmOjotbW96LXJhbmdlLXRyYWNrXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXRyYWNrXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmJnLXdoaXRlLzIwIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmJnLVt2YXIoLS1zbGlkZXItZmlsbC1jb2xvcildIixHPSJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAiO3JldHVybiBRKCJpbnB1dCIsey4uLnEsdHlwZToicmFuZ2UiLG1pbjokLG1heDpLLHZhbHVlOkosZGlzYWJsZWQ6WixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOk4sIi0tc2xpZGVyLWZpbGwtY29sb3IiOkIsLi4uWX0sY2xhc3NOYW1lOmBoLVsxM3B4XSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIHJvdW5kZWQtZnVsbCBiZy10cmFuc3BhcmVudCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpbb3V0bGluZToxLjVweF9zb2xpZF9yZ2JhKDEwLDEzMiwyNTUsMC41NSldIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtNCAke1o/ImN1cnNvci1kZWZhdWx0IjoiY3Vyc29yLXBvaW50ZXIifSAke1V9ICR7R30gJHtYfWB9KX12YXIgdiQ9e3dpZHRoOjEzOTgsaGVpZ2h0OjIwMzR9LGokPXt3aWR0aDoyMDA3LGhlaWdodDoyODUzfTt2YXIgZyQ9W1siY2xvc2VkIiwiQ2xvc2VkIiwwXSxbInRlbnQiLCJUZW50Iiw4MF0sWyJ0YWJsZXRvcCIsIlRhYmxlIiwxMDBdLFsiYm9vayIsIkJvb2siLDEzMF0sWyJvcGVuIiwiT3BlbiIsMTgwXV0ubWFwKChbJCxLLEpdKT0+aCQoJCxLLEopKTtmdW5jdGlvbiBoJCgkLEssSil7bGV0IFo9Sjw5MCxYPVo/diQ6aiQ7cmV0dXJue2lkOiQsbGFiZWw6SyxoaW5nZURlZ3JlZXM6Sixjb3ZlckFjdGl2ZTpaLHdpZHRoOlgud2lkdGgsaGVpZ2h0OlguaGVpZ2h0fX1mdW5jdGlvbiBEOSgpe3JldHVybiBnJH12YXIgZiQ9RDkoKSxtJD17Y29sb3I6IiMwYTg0ZmYifTtmdW5jdGlvbiBwJCh7cG9zZTokfSl7aWYoJD09PSJjbG9zZWQiKXJldHVybiBRKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJjb250ZW50cyIsY2hpbGRyZW46USh3Mix7dHlwZToiaXBob25lIixkdW86ITAsc2l6ZToxOH0pfSk7aWYoJD09PSJib29rIilyZXR1cm4gUSgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMTAyIDEwMiIsZmlsbDoibm9uZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46USgicGF0aCIse2Q6Ik04NS43NDIyIDE0LjU3MTNDODkuNzU5NSAxMy43NzkgOTMuNSAxNi44NTM2IDkzLjUgMjAuOTQ4MlY4Mi41NzEzQzkzLjQ5OTggODYuNTM5NiA4OS45NzQ1IDg5LjU4MTYgODYuMDQ4OCA4OS4wMDFMNTIuMTgyNiA4My45OTIyQzUxLjA2NjkgODMuODI3MiA0OS45MzMxIDgzLjgyNzIgNDguODE3NCA4My45OTIyTDE0Ljk1MTIgODkuMDAxQzExLjAyNTUgODkuNTgxNiA3LjUwMDIxIDg2LjUzOTYgNy41IDgyLjU3MTNWMjAuOTQ4MkM3LjUgMTYuODUzNiAxMS4yNDA1IDEzLjc3OSAxNS4yNTc4IDE0LjU3MTNMNDguMjc1NCAyMS4wODJDNDkuNzQ0NCAyMS4zNzE3IDUxLjI1NTYgMjEuMzcxNyA1Mi43MjQ2IDIxLjA4Mkw4NS43NDIyIDE0LjU3MTNaIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjUifSl9KTtyZXR1cm4gUSgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMzIgMzIiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi4yIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpbUSgicmVjdCIse3g6IjIiLHk6IjQiLHdpZHRoOiIyOCIsaGVpZ2h0OiIyNCIscng6IjMifSksUSgicGF0aCIse2Q6Ik0xNCAyNWg0In0pXX0pfWZ1bmN0aW9uIFQ5KHthbmdsZTokLG9uQ2hhbmdlOkssb25Qb3NlOkosb3JpZW50YXRpb246Wj0icG9ydHJhaXQifSl7bGV0IFg9e3BvcnRyYWl0OjAsbGFuZHNjYXBlX2xlZnQ6OTAscG9ydHJhaXRfdXBzaWRlX2Rvd246MTgwLGxhbmRzY2FwZV9yaWdodDotOTB9W1pdLFtZLHFdPU8oWCk7RSgoKT0+e3EoKEIpPT5CKygoWC1CKzU0MCklMzYwKzM2MCklMzYwLTE4MCl9LFtYXSk7bGV0W1YsTl09TyghMSk7cmV0dXJuIEUoKCk9Pl85KHdpbmRvdyxOKSxbXSksUSgiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjoiRm9sZCBwb3NlIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjpWP1EoImRpdiIse2NsYXNzTmFtZToiZmxleCB3LTM2IGl0ZW1zLWNlbnRlciBnYXAtMS41IHB4LTEiLGNoaWxkcmVuOltRKEUyLHsiYXJpYS1sYWJlbCI6IkhpbmdlIGFuZ2xlIiwiYXJpYS12YWx1ZXRleHQiOmAke01hdGgucm91bmQoJCl9IGRlZ3JlZXNgLG1pbjowLG1heDoxODAsc3RlcDowLjEsdmFsdWU6JCxvbkNoYW5nZTooQik9PksoTnVtYmVyKEIuY3VycmVudFRhcmdldC52YWx1ZSkpLGNsYXNzTmFtZToibWluLXctMCBmbGV4LTEifSksUSgib3V0cHV0Iix7Y2xhc3NOYW1lOiJ3LTExIHRleHQtcmlnaHQgdGV4dC1bMTFweF0gdGFidWxhci1udW1zIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOltNYXRoLnJvdW5kKCQpLCLCsCJdfSldfSk6ZiQubWFwKChCKT0+e2xldCBVPU1hdGguYWJzKCQtQi5oaW5nZURlZ3JlZXMpPDAuNjtyZXR1cm4gUShTMS5CdXR0b24seyJhcmlhLWxhYmVsIjpgJHtCLmxhYmVsfSBwb3NlYCx0aXRsZTpgJHtCLmxhYmVsfSDCtyAke0IuaGluZ2VEZWdyZWVzfcKwYCwiYXJpYS1wcmVzc2VkIjpVLG9uQ2xpY2s6KCk9PkooQi5pZCksc3R5bGU6VT9tJDp2b2lkIDAsY2hpbGRyZW46USgic3BhbiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1vdGlvbi1yZWR1Y2U6dHJhbnNpdGlvbi1ub25lIixzdHlsZTp7dHJhbnNmb3JtOmByb3RhdGUoJHtZfWRlZylgLHRyYW5zaXRpb246InRyYW5zZm9ybSAzMDBtcyBlYXNlLWluLW91dCJ9LGNoaWxkcmVuOlEocCQse3Bvc2U6Qi5pZH0pfSl9LEIuaWQpfSl9KX1mdW5jdGlvbiB1JCgkLEspe2Zvcih2YXIgSiBpbiBLKSRbSl09S1tKXTtyZXR1cm4gJH1mdW5jdGlvbiB3OSgkLEspe2Zvcih2YXIgSiBpbiAkKWlmKEohPT0iX19zb3VyY2UiJiYhKEogaW4gSykpcmV0dXJuITA7Zm9yKHZhciBaIGluIEspaWYoWiE9PSJfX3NvdXJjZSImJiRbWl0hPT1LW1pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEU5KCQsSyl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1LfShFOS5wcm90b3R5cGU9bmV3IHUxKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxFOS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsSyl7cmV0dXJuIHc5KHRoaXMucHJvcHMsJCl8fHc5KHRoaXMuc3RhdGUsSyl9O3ZhciBJOT1zLl9fYjtzLl9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCksSTkmJkk5KCQpfTt2YXIgbCQ9cy5fX2U7cy5fX2U9ZnVuY3Rpb24oJCxLLEosWil7aWYoJC50aGVuKXtmb3IodmFyIFgsWT1LO1k9WS5fXzspaWYoKFg9WS5fX2MpJiZYLl9fYylyZXR1cm4gSy5fX2U9PW51bGwmJihLLl9fZT1KLl9fZSxLLl9faz1KLl9fayksWC5fX2MoJCxLKX1sJCgkLEssSixaKX07dmFyIGI5PXMudW5tb3VudDtmdW5jdGlvbiBqOSgkLEssSil7cmV0dXJuICQmJigkLl9fYyYmJC5fX2MuX19IJiYoJC5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oWil7dHlwZW9mIFouX19jPT0iZnVuY3Rpb24iJiZaLl9fYygpfSksJC5fX2MuX19IPW51bGwpLCgkPXUkKHt9LCQpKS5fX2MhPW51bGwmJigkLl9fYy5fX1A9PT1KJiYoJC5fX2MuX19QPUspLCQuX19jLl9fZT0hMCwkLl9fYz1udWxsKSwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBqOShaLEssSil9KSksJH1mdW5jdGlvbiBnOSgkLEssSil7cmV0dXJuICQmJkomJigkLl9fdj1udWxsLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIGc5KFosSyxKKX0pLCQuX19jJiYkLl9fYy5fX1A9PT1LJiYoJC5fX2UmJkouYXBwZW5kQ2hpbGQoJC5fX2UpLCQuX19jLl9fZT0hMCwkLl9fYy5fX1A9SikpLCR9ZnVuY3Rpb24gVzgoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gaDkoJCl7dmFyIEs9JC5fXyYmJC5fXy5fX2M7cmV0dXJuIEsmJksuX19hJiZLLl9fYSgkKX1mdW5jdGlvbiBJMigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfXMudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSz0kLl9fYztLJiYoSy5fX3o9ITApLEsmJksuX19SJiZLLl9fUigpLEsmJjMyJiQuX191JiYoJC50eXBlPW51bGwpLGI5JiZiOSgkKX0sKFc4LnByb3RvdHlwZT1uZXcgdTEpLl9fYz1mdW5jdGlvbigkLEspe3ZhciBKPUsuX19jLFo9dGhpcztaLm89PW51bGwmJihaLm89W10pLFouby5wdXNoKEopO3ZhciBYPWg5KFouX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxaLl9fenx8KFk9ITAsSi5fX1I9bnVsbCxYP1goTik6TigpKX07Si5fX1I9cTt2YXIgVj1KLl9fUDtKLl9fUD1udWxsO3ZhciBOPWZ1bmN0aW9uKCl7aWYoIS0tWi5fX3Upe2lmKFouc3RhdGUuX19hKXt2YXIgQj1aLnN0YXRlLl9fYTtaLl9fdi5fX2tbMF09ZzkoQixCLl9fYy5fX1AsQi5fX2MuX19PKX12YXIgVTtmb3IoWi5zZXRTdGF0ZSh7X19hOlouX19iPW51bGx9KTtVPVouby5wb3AoKTspVS5fX1A9VixVLmZvcmNlVXBkYXRlKCl9fTtaLl9fdSsrfHwzMiZLLl9fdXx8Wi5zZXRTdGF0ZSh7X19hOlouX19iPVouX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxXOC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LFc4LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxLKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPWo5KHRoaXMuX19iLEosWi5fX089Wi5fX1ApfXRoaXMuX19iPW51bGx9dmFyIFg9Sy5fX2EmJmYxKEoxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIFgmJihYLl9fdSY9LTMzKSxbZjEoSjEsbnVsbCxLLl9fYT9udWxsOiQuY2hpbGRyZW4pLFhdfTt2YXIgeTk9ZnVuY3Rpb24oJCxLLEope2lmKCsrSlsxXT09PUpbMF0mJiQubC5kZWxldGUoSyksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKEo9JC5pO0o7KXtmb3IoO0oubGVuZ3RoPjM7KUoucG9wKCkoKTtpZihKWzFdPEpbMF0pYnJlYWs7JC5pPUo9SlsyXX19OyhJMi5wcm90b3R5cGU9bmV3IHUxKS5fX2E9ZnVuY3Rpb24oJCl7dmFyIEs9dGhpcyxKPWg5KEsuX192KSxaPUsubC5nZXQoJCk7cmV0dXJuIFpbMF0rKyxmdW5jdGlvbihYKXt2YXIgWT1mdW5jdGlvbigpe0sucHJvcHMucmV2ZWFsT3JkZXI/KFoucHVzaChYKSx5OShLLCQsWikpOlgoKX07Sj9KKFkpOlkoKX19LEkyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIEs9WDAoJC5jaGlsZHJlbik7JC5yZXZlYWxPcmRlciYmJC5yZXZlYWxPcmRlclswXT09PSJiIiYmSy5yZXZlcnNlKCk7Zm9yKHZhciBKPUsubGVuZ3RoO0otLTspdGhpcy5sLnNldChLW0pdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiAkLmNoaWxkcmVufSxJMi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPUkyLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciAkPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oSyxKKXt5OSgkLEosSyl9KX07dmFyIGQkPXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLGMkPS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxyJD0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLG8kPS9bQS1aMC05XS9nLG4kPXR5cGVvZiBkb2N1bWVudDwidSIsaSQ9ZnVuY3Rpb24oJCl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KCQpfTtmdW5jdGlvbiBmOSgkLEssSil7cmV0dXJuIEsuX19rPT1udWxsJiYoSy50ZXh0Q29udGVudD0iIiksUzAoJCxLKSx0eXBlb2YgSj09ImZ1bmN0aW9uIiYmSigpLCQ/JC5fX2M6bnVsbH11MS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodTEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihLKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6S30pfX0pfSk7dmFyIFM5PXMuZXZlbnQ7cy5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gUzkmJigkPVM5KCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgbTksYSQ9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHg5PXMudm5vZGU7cy52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSyl7dmFye3Byb3BzOkosdHlwZTpafT1LLFg9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIEope3ZhciBWPUpbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gSikmJlY9PW51bGx8fG4kJiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgTj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gSiYmSi52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJlY9PT0hMD9WPSIiOk49PT0idHJhbnNsYXRlIiYmVj09PSJubyI/Vj0hMTpOWzBdPT09Im8iJiZOWzFdPT09Im4iP049PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6TiE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8aSQoSi50eXBlKT9OPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Tj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOnIkLnRlc3QocSkmJihxPU4pOk49cT0ib25pbnB1dCI6WSYmYyQudGVzdChxKT9xPXEucmVwbGFjZShvJCwiLSQmIikudG9Mb3dlckNhc2UoKTpWPT09bnVsbCYmKFY9dm9pZCAwKSxOPT09Im9uaW5wdXQiJiZYW3E9Tl0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLFhbcV09Vn19Wj09InNlbGVjdCImJihYLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KFgudmFsdWUpJiYoWC52YWx1ZT1YMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9WC52YWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMX0pKSxYLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKFgudmFsdWU9WDAoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgubXVsdGlwbGU/WC5kZWZhdWx0VmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTE6WC5kZWZhdWx0VmFsdWU9PUIucHJvcHMudmFsdWV9KSkpLEouY2xhc3MmJiFKLmNsYXNzTmFtZT8oWC5jbGFzcz1KLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjbGFzc05hbWUiLGEkKSk6Si5jbGFzc05hbWUmJihYLmNsYXNzPVguY2xhc3NOYW1lPUouY2xhc3NOYW1lKSxLLnByb3BzPVh9KCQpLCQuJCR0eXBlb2Y9ZCQseDkmJng5KCQpfTt2YXIgUjk9cy5fX3I7cy5fX3I9ZnVuY3Rpb24oJCl7UjkmJlI5KCQpLG05PSQuX19jfTt2YXIgdjk9cy5kaWZmZWQ7cy5kaWZmZWQ9ZnVuY3Rpb24oJCl7djkmJnY5KCQpO3Zhcntwcm9wczpLLF9fZTpKfT0kO0ohPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBLJiZLLnZhbHVlIT09Si52YWx1ZSYmKEoudmFsdWU9Sy52YWx1ZT09bnVsbD8iIjpLLnZhbHVlKSxtOT1udWxsfTtmdW5jdGlvbiBwOSgkKXtyZXR1cm4hISQuX19rJiYoUzAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gdTkoJCl7cmV0dXJue3JlbmRlcjpmdW5jdGlvbihLKXtmOShLLCQpfSx1bm1vdW50OmZ1bmN0aW9uKCl7cDkoJCl9fX1mdW5jdGlvbiB0NSh7b3BlbjokfSl7cmV0dXJuIFEoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiJsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIixzdHlsZTp7dHJhbnNmb3JtOiQ/InJvdGF0ZSgxODBkZWcpIjoicm90YXRlKDBkZWcpIn0sY2hpbGRyZW46USgicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gYjIoe2RpcjokfSl7cmV0dXJuIFEoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjokPT09InVwIj9RKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6USgicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiBlNSgpe3JldHVybiBRKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpRKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIF84KCl7cmV0dXJuIFEoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltRKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksUSgicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiAkMigpe3JldHVybiBRKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpRKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gRDgoKXtyZXR1cm4gUShnNSx7c2l6ZToxMixzdHJva2VXaWR0aDoyLCJhcmlhLWhpZGRlbiI6InRydWUifSl9ZnVuY3Rpb24gVDgoKXtyZXR1cm4gUSgic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQgMiA5IDEzIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46USgicGF0aCIse2Q6Ik02LjAwODUyIDE0LjgwNTRDNS44OTE4MSAxNC45MzUgNS43NTgxNSAxNC45OTk4IDUuNjA3NTYgMTQuOTk5OEM1LjQ1Njk2IDE1LjAwMzMgNS4zMjMzIDE0Ljk2MTMgNS4yMDY1OSAxNC44NzM3QzUuMDkzNjQgMTQuNzg2MSA1LjAyNTg3IDE0LjY3MjMgNS4wMDMyOCAxNC41MzIyQzQuOTg0NDYgMTQuMzkyMSA1LjA0NjU4IDE0LjI0NSA1LjE4OTY1IDE0LjA5MDlMNi45NDU5OSAxMi4xNTIyTDcuMjQ1MyAxMC44NzU1TDguMTk5NzEgMTEuOTg5M0w4LjA1ODUzIDEyLjM5MzlDOC4wMjA4OCAxMi40OTU1IDcuOTg2OTkgMTIuNTcwOCA3Ljk1Njg3IDEyLjYxOThDNy45MzA1MiAxMi42Njg4IDcuODc0MDQgMTIuNzQwNiA3Ljc4NzQ1IDEyLjgzNTJMNi4wMDg1MiAxNC44MDU0Wk0xMC4zNDU3IDE0LjY0MjVMOS4xMDMyOSAxMi4zMDQ2QzkuMDc2OTQgMTIuMjYyNSA5LjA1NDM1IDEyLjIyMjMgOS4wMzU1MyAxMi4xODM3QzkuMDE2NyAxMi4xNDUyIDguOTc3MTcgMTIuMDkwOSA4LjkxNjkzIDEyLjAyMDlMNy43MTk2OCAxMC42MTgxQzcuNDkzNzkgMTAuMzU1NCA3LjMzNzU0IDEwLjEyOTUgNy4yNTA5NSA5Ljk0MDM0QzcuMTY0MzUgOS43NDc3IDcuMTM0MjQgOS40OTkwMSA3LjE2MDU5IDkuMTk0MjlMNy4yNjIyNCA3Ljk4MDY1QzcuMjY5NzcgNy45MDcxIDcuMjMyMTIgNy44NTQ1NiA3LjE0OTI5IDcuODIzMDRDNy4wNjY0NyA3Ljc5MTUxIDYuOTg1NTIgNy44MDkwMyA2LjkwNjQ2IDcuODc1NTdMNi40NzE2MSA4LjI0MzM0TDYuMzQxNzIgOS42NzIzOUM2LjMyMjg5IDkuODQ3NTIgNi4yNjQ1NCA5Ljk3ODg3IDYuMTY2NjUgMTAuMDY2NEM2LjA2ODc2IDEwLjE1NCA1LjkzODg3IDEwLjE5MjUgNS43NzY5OCAxMC4xODJDNS42MTEzMiAxMC4xNzUgNS40ODMzMSAxMC4xMTkgNS4zOTI5NSAxMC4wMTM5QzUuMzA2MzYgOS45MDg4MiA1LjI2ODcxIDkuNzczOTcgNS4yODAwMSA5LjYwOTM1TDUuMzg3MzEgOC4zMDYzOUM1LjQwMjM3IDguMTI3NzYgNS40MzgxMyA3Ljk3NTQgNS40OTQ2MSA3Ljg0OTMxQzUuNTU0ODUgNy43MjMyMSA1LjY2MDI2IDcuNTkxODcgNS44MTA4NiA3LjQ1NTI3TDYuNzE0NDUgNi42MjUxNkM3LjAwNDM1IDYuMzYyNDcgNy4yNjk3NyA2LjE2MTA3IDcuNTEwNzMgNi4wMjA5NkM3Ljc1MTY4IDUuODc3MzYgOC4wMjg0MSA1LjgwNTU2IDguMzQwOSA1LjgwNTU2QzguNzU4OCA1LjgwNTU2IDkuMDc4ODIgNS45MzM0IDkuMzAwOTUgNi4xODkwOUM5LjUyNjg1IDYuNDQ0NzggOS42MjQ3NCA2Ljc2MTc2IDkuNTk0NjIgNy4xNDAwNEw5LjQ3NjAyIDguNzMxOTVDOS40NTM0MyA5LjAxNTY2IDkuNDE5NTUgOS4yNjI1OSA5LjM3NDM3IDkuNDcyNzVDOS4zMjkxOSA5LjY4MjkgOS4yNTM4OSA5LjkyOTgzIDkuMTQ4NDcgMTAuMjEzNUw5LjA5MiAxMC4zNjA2TDkuODY1NjkgMTEuMzc5OUM5LjkyMjE3IDExLjQ1MzQgOS45ODA1MiAxMS41MzQgMTAuMDQwOCAxMS42MjE2QzEwLjEwMSAxMS43MDkxIDEwLjE1MzcgMTEuNzk2NyAxMC4xOTg5IDExLjg4NDNMMTEuNDA3NCAxNC4xNjQ0QzExLjUwNTMgMTQuMzUwMSAxMS41MjQxIDE0LjUxMTIgMTEuNDYzOSAxNC42NDc4QzExLjQwMzcgMTQuNzg0NCAxMS4zMDIgMTQuODgyNSAxMS4xNTg5IDE0Ljk0MkMxMS4wMTk2IDE1LjAwMTUgMTAuODcwOSAxNS4wMTAzIDEwLjcxMjggMTQuOTY4M0MxMC41NTg0IDE0LjkyNjIgMTAuNDM2MSAxNC44MTc3IDEwLjM0NTcgMTQuNjQyNVpNMTIuNDA3IDcuOTY0ODlDMTIuNTg0IDcuOTY0ODkgMTIuNzI3IDguMDEwNDIgMTIuODM2MiA4LjEwMTQ5QzEyLjk0NTQgOC4xODkwNSAxMyA4LjMwNjM5IDEzIDguNDUzNUMxMyA4LjYxMTExIDEyLjk0NTQgOC43MzM3IDEyLjgzNjIgOC44MjEyN0MxMi43MzA4IDguOTA4ODMgMTIuNTg3NyA4Ljk1MjYxIDEyLjQwNyA4Ljk1MjYxSDExLjEzMDdDMTAuOTUzOCA4Ljk1MjYxIDEwLjgxNDUgOC45MzY4NSAxMC43MTI4IDguOTA1MzNDMTAuNjExMiA4Ljg3MDMgMTAuNTEzMyA4LjgwNzI2IDEwLjQxOTEgOC43MTYxOUwxMC4wNTIxIDguMzc5OTRMMTAuMTQyNCA3LjA0MDIxTDExLjAzNDcgNy45NjQ4OUgxMi40MDdaTTkuMDAxNjQgNS4zMTE2OUM4Ljc3MTk4IDUuMzExNjkgOC41NjMwMyA1LjI2MDkxIDguMzc0NzggNS4xNTkzM0M4LjE4NjUzIDUuMDU0MjYgOC4wMzU5NCA0LjkxNDE1IDcuOTIyOTkgNC43MzkwM0M3LjgxMzgxIDQuNTYzOSA3Ljc1OTIxIDQuMzY5NSA3Ljc1OTIxIDQuMTU1ODVDNy43NTkyMSAzLjk0MjE5IDcuODEzODEgMy43NDc4IDcuOTIyOTkgMy41NzI2N0M4LjAzNTk0IDMuMzk3NTQgOC4xODY1MyAzLjI1OTE5IDguMzc0NzggMy4xNTc2MkM4LjU2MzAzIDMuMDUyNTQgOC43NzE5OCAzIDkuMDAxNjQgM0M5LjIzMTMgMyA5LjQ0MDI2IDMuMDUyNTQgOS42Mjg1IDMuMTU3NjJDOS44MTY3NSAzLjI1OTE5IDkuOTY1NDYgMy4zOTc1NCAxMC4wNzQ2IDMuNTcyNjdDMTAuMTg3NiAzLjc0NzggMTAuMjQ0MSAzLjk0MjE5IDEwLjI0NDEgNC4xNTU4NUMxMC4yNDQxIDQuMzY5NSAxMC4xODc2IDQuNTYzOSAxMC4wNzQ2IDQuNzM5MDNDOS45NjU0NiA0LjkxNDE1IDkuODE2NzUgNS4wNTQyNiA5LjYyODUgNS4xNTkzM0M5LjQ0MDI2IDUuMjYwOTEgOS4yMzEzIDUuMzExNjkgOS4wMDE2NCA1LjMxMTY5WiJ9KX0pfWZ1bmN0aW9uIHc4KCl7cmV0dXJuIFEoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMjYgMSAxMiAxNCIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlEoInBhdGgiLHtkOiJNMzMuMjQzNyA0LjU4NDU5QzMzLjAwMDggNC41ODQ1OSAzMi43ODE3IDQuNTI3MjggMzIuNTg2NiA0LjQxMjY4QzMyLjM5MTUgNC4yOTQxMiAzMi4yMzQyIDQuMTM4MDEgMzIuMTE0NyAzLjk0NDM3QzMxLjk5OTIgMy43NDY3NyAzMS45NDE0IDMuNTI5NDEgMzEuOTQxNCAzLjI5MjI5QzMxLjk0MTQgMy4wNTEyMiAzMS45OTkyIDIuODMzODcgMzIuMTE0NyAyLjY0MDIyQzMyLjIzNDIgMi40NDY1NyAzMi4zOTE1IDIuMjkyNDUgMzIuNTg2NiAyLjE3Nzg0QzMyLjc4MTcgMi4wNTkyOCAzMy4wMDA4IDIgMzMuMjQzNyAyQzMzLjQ4MjYgMiAzMy42OTk3IDIuMDU5MjggMzMuODk0OCAyLjE3Nzg0QzM0LjA5MzkgMi4yOTI0NSAzNC4yNTEyIDIuNDQ2NTcgMzQuMzY2NyAyLjY0MDIyQzM0LjQ4NjIgMi44MzM4NyAzNC41NDU5IDMuMDUxMjIgMzQuNTQ1OSAzLjI5MjI5QzM0LjU0NTkgMy41Mjk0MSAzNC40ODYyIDMuNzQ2NzcgMzQuMzY2NyAzLjk0NDM3QzM0LjI1MTIgNC4xMzgwMSAzNC4wOTM5IDQuMjk0MTIgMzMuODk0OCA0LjQxMjY4QzMzLjY5OTcgNC41MjcyOCAzMy40ODI2IDQuNTg0NTkgMzMuMjQzNyA0LjU4NDU5Wk0zMS4yMDA3IDkuNzQxOTFDMzEuMDczMyA5LjY3MDc3IDMwLjk0MTkgOS41OTU2OCAzMC44MDY1IDkuNTE2NjRDMzAuNjc1IDkuNDM3NiAzMC41NTk2IDkuMzQyNzYgMzAuNDYgOS4yMzIxQzMwLjM2MDQgOS4xMTc0OSAzMC4yOTI3IDguOTc3MiAzMC4yNTY5IDguODExMjJDMzAuMjI1IDguNjQxMjggMzAuMjQ0OSA4LjQyOTg1IDMwLjMxNjYgOC4xNzY5M0wzMC44MDY1IDYuNDgxNTNDMzAuODM4MyA2LjM2NjkyIDMwLjgxODQgNi4yNzk5OCAzMC43NDY3IDYuMjIwN0MzMC42NzkgNi4xNTc0NyAzMC41OTc0IDYuMTI5ODEgMzAuNTAxOCA2LjEzNzcxTDI5LjY1OTUgNi4xOTY5OUwyOS40MDI3IDcuOTIyMDJDMjkuMzc4OCA4LjEwNzc3IDI5LjMxNTEgOC4yNDYwOSAyOS4yMTE1IDguMzM2OThDMjkuMTA4IDguNDI3ODggMjguOTcyNiA4LjQ2NTQyIDI4LjgwNTMgOC40NDk2MUMyOC42NDIgOC40MzM4IDI4LjUxODYgOC4zNjY2MiAyOC40MzQ5IDguMjQ4MDZDMjguMzUxMyA4LjEyOTUgMjguMzIxNCA3Ljk3NzM1IDI4LjM0NTMgNy43OTE2MUwyOC42MjYxIDUuNjgxMjZDMjguNjUgNS41MTEzMiAyOC43MTU3IDUuMzc0OTggMjguODIzMiA1LjI3MjIzQzI4LjkzMDggNS4xNjk0OCAyOS4wNjgxIDUuMTEyMTcgMjkuMjM1NCA1LjEwMDMyTDMxLjMzMjEgNC45NTIxMkMzMS44ODE3IDQuOTEyNiAzMi4zMzU3IDQuOTY5OSAzMi42OTQxIDUuMTI0MDNDMzMuMDUyNSA1LjI3ODE2IDMzLjM2NzEgNS41Mzg5OSAzMy42Mzc5IDUuOTA2NTJMMzQuNjcxNCA3LjMyMzNMMzYuMTcwOCA2LjY2NTNDMzYuMzM4IDYuNTkwMjEgMzYuNDg5MyA2LjU3NDQgMzYuNjI0OCA2LjYxNzg3QzM2Ljc2MDIgNi42NTczOSAzNi44NjU3IDYuNzUyMjQgMzYuOTQxNCA2LjkwMjQyQzM3LjAxMyA3LjA1MjU5IDM3LjAxOSA3LjE5NDg2IDM2Ljk1OTMgNy4zMjkyM0MzNi45MDM1IDcuNDYzNiAzNi43OTIgNy41NjgzMiAzNi42MjQ4IDcuNjQzNDFMMzQuNzMxMSA4LjQ3OTI1QzM0LjYwMzcgOC41Mzg1MyAzNC40NzQzIDguNTUwMzkgMzQuMzQyOCA4LjUxNDgyQzM0LjIxNTQgOC40NzUzIDM0LjExMzggOC40MDAyMSAzNC4wMzgyIDguMjg5NTZMMzMuMzgxMSA3LjMzNTE2QzMzLjMxMzQgNy4yNDAzMSAzMy4yMjk4IDcuMTk4ODEgMzMuMTMwMiA3LjIxMDY3QzMzLjAzMDYgNy4yMjI1MyAzMi45NjQ5IDcuMjgzNzggMzIuOTMzMSA3LjM5NDQ0TDMyLjQ5MSA4LjkyOTc4TDM0LjczMTEgMTAuMzg4MUMzNC44NDI2IDEwLjQ1OTIgMzQuOTIyMyAxMC41NTYgMzQuOTcwMSAxMC42Nzg1QzM1LjAxNzkgMTAuODAxIDM1LjAyOTggMTAuOTI1NSAzNS4wMDU5IDExLjA1MkMzNC45ODYgMTEuMTc0NSAzNC45MjgyIDExLjI3NTMgMzQuODMyNyAxMS4zNTQzTDMyLjc3MTggMTMuMDk3MUMzMi42MDg1IDEzLjIzNTQgMzIuNDQ1MiAxMy4yOTg3IDMyLjI4MTkgMTMuMjg2OEMzMi4xMjI2IDEzLjI3NSAzMS45OTMyIDEzLjIxMzcgMzEuODkzNyAxMy4xMDMxQzMxLjc5ODEgMTIuOTk2NCAzMS43NTQzIDEyLjg2NTkgMzEuNzYyMiAxMi43MTE4QzMxLjc3MDIgMTIuNTUzNyAzMS44NTM4IDEyLjQwNzUgMzIuMDEzMSAxMi4yNzMxTDMzLjQ4ODYgMTEuMDE2NEwzMS4yMDA3IDkuNzQxOTFaTTI3LjIwNDQgMTQuODYzN0MyNy4wODQ5IDE0Ljc1NyAyNy4wMTcyIDE0LjYxODYgMjcuMDAxMyAxNC40NDg3QzI2Ljk4OTMgMTQuMjc4OCAyNy4wNjEgMTQuMTE2NyAyNy4yMTYzIDEzLjk2MjZMMjkuMjIzNSAxMS45NzY3TDI5LjkzNDMgOS40ODEwOEMzMC4wNDE4IDkuNjE1NDQgMzAuMTc1MyA5Ljc0NTg2IDMwLjMzNDUgOS44NzIzMkMzMC40OTc4IDkuOTk0ODMgMzAuNjkzIDEwLjExNzMgMzAuOTIgMTAuMjM5OUwzMS4xMTcxIDEwLjM0NjZMMzAuMzA0NyAxMi40MzMyQzMwLjI1MjkgMTIuNTU1NyAzMC4yMDkxIDEyLjY0MDcgMzAuMTczMyAxMi42ODgxQzMwLjE0MTQgMTIuNzM1NSAzMC4wODU2IDEyLjc5ODggMzAuMDA2IDEyLjg3NzhMMjguMDcwNiAxNC43ODA3QzI3LjkxOTIgMTQuOTI2OSAyNy43NjM5IDE1IDI3LjYwNDYgMTVDMjcuNDQ5MyAxNSAyNy4zMTU5IDE0Ljk1NDYgMjcuMjA0NCAxNC44NjM3WiJ9KX0pfWZ1bmN0aW9uIEU4KCl7cmV0dXJuIFEoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNDkgMyAxNiAxMiIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlEoInBhdGgiLHtkOiJNNTcuMDAyOCAxMS45NDlDNTYuODQ4IDExLjk0OSA1Ni43MTcyIDExLjg5ODcgNTYuNjEwMyAxMS43OThDNTYuNTAzNSAxMS42OTM5IDU2LjQ1MDEgMTEuNTcwNyA1Ni40NTAxIDExLjQyODRWOS4wMjg2M0w1NC40MjE2IDcuMTA3NzZDNTQuMjIyNyA2LjkyMDM1IDU0LjA5NTUgNi42OTgyNSA1NC4wNDAzIDYuNDQxNDRDNTMuOTg1IDYuMTgxMTYgNTQuMDEwOCA1LjkyNzgyIDU0LjExNzYgNS42ODE0MkM1NC4yMjgyIDUuNDM4NDkgNTQuMzk3NyA1LjI0NDE0IDU0LjYyNjEgNS4wOTgzOUM1NC44NTgzIDQuOTQ5MTYgNTUuMTE2MiA0Ljg3NDU0IDU1LjM5OTkgNC44NzQ1NEg1OC4xMTM3QzU4LjQyMzIgNC44NzQ1NCA1OC42ODQ4IDQuOTc2OTIgNTguODk4NSA1LjE4MTY4QzU5LjExNTkgNS4zODI5NiA1OS4yMjQ2IDUuNjI5MzYgNTkuMjI0NiA1LjkyMDg3VjcuNzYzNjZINjAuODk5M0M2MS4wNTA0IDcuNzYzNjYgNjEuMTc5NCA3LjgxMzk5IDYxLjI4NjIgNy45MTQ2M0M2MS4zOTMxIDguMDE1MjcgNjEuNDQ2NSA4LjEzODQ3IDYxLjQ0NjUgOC4yODQyM0M2MS40NDY1IDguNDI2NTEgNjEuMzkzMSA4LjU0Nzk4IDYxLjI4NjIgOC42NDg2MkM2MS4xNzk0IDguNzQ5MjYgNjEuMDUwNCA4Ljc5OTU4IDYwLjg5OTMgOC43OTk1OEg1OC42NzE5QzU4LjUyMDkgOC43OTk1OCA1OC4zOTAxIDguNzQ5MjYgNTguMjc5NSA4LjY0ODYyQzU4LjE3MjcgOC41NDc5OCA1OC4xMTkyIDguNDI2NTEgNTguMTE5MiA4LjI4NDIzVjYuOTg4MDNDNTguMTE5MiA2LjkxODYyIDU4LjA5OSA2Ljg1NDQyIDU4LjA1ODQgNi43OTU0MkM1OC4wMTc5IDYuNzMyOTUgNTcuOTQ0MiA2LjcwMTcyIDU3LjgzNzMgNi43MDE3Mkg1Ni4wNjMyQzU1Ljk5MzIgNi43MDE3MiA1NS45NDUzIDYuNzI5NDggNTUuOTE5NSA2Ljc4NTAxQzU1Ljg5NzQgNi44MzcwNiA1NS45MDg0IDYuODg3MzkgNTUuOTUyNiA2LjkzNTk3TDU3LjQwMDcgOC40NTYwMUM1Ny41MDM5IDguNTYzNiA1Ny41NTU1IDguNjgxNTkgNTcuNTU1NSA4LjgwOTk5VjExLjQyODRDNTcuNTU1NSAxMS41NzA3IDU3LjUwMDIgMTEuNjkzOSA1Ny4zODk3IDExLjc5OEM1Ny4yODI4IDExLjg5ODcgNTcuMTUzOCAxMS45NDkgNTcuMDAyOCAxMS45NDlaTTUzLjAwMTIgMTRDNTIuNTg0OCAxNCA1Mi4xOTQyIDEzLjkyNzEgNTEuODI5NSAxMy43ODE0QzUxLjQ2ODQgMTMuNjM1NiA1MS4xNDk2IDEzLjQzMjYgNTAuODczMyAxMy4xNzIzQzUwLjYwMDYgMTIuOTEyIDUwLjM4NjkgMTIuNjExOCA1MC4yMzIxIDEyLjI3MTdDNTAuMDc3NCAxMS45MjgyIDUwIDExLjU2MDMgNTAgMTEuMTY4MUM1MCAxMC43NzYgNTAuMDc3NCAxMC40MDk5IDUwLjIzMjEgMTAuMDY5OEM1MC4zODY5IDkuNzI2MTggNTAuNjAwNiA5LjQyNDI2IDUwLjg3MzMgOS4xNjM5OEM1MS4xNDk2IDguOTAzNyA1MS40Njg0IDguNzAwNjggNTEuODI5NSA4LjU1NDkyQzUyLjE5NDIgOC40MDkxNiA1Mi41ODQ4IDguMzM2MjggNTMuMDAxMiA4LjMzNjI4QzUzLjQyMTIgOC4zMzYyOCA1My44MTE4IDguNDA5MTYgNTQuMTcyOSA4LjU1NDkyQzU0LjUzNzcgOC43MDA2OCA1NC44NTY0IDguOTAzNyA1NS4xMjkxIDkuMTYzOThDNTUuNDA1NCA5LjQyNDI2IDU1LjYyMSA5LjcyNjE4IDU1Ljc3NTggMTAuMDY5OEM1NS45MzA1IDEwLjQwOTkgNTYuMDA3OSAxMC43NzYgNTYuMDA3OSAxMS4xNjgxQzU2LjAwNzkgMTEuNTYwMyA1NS45MzA1IDExLjkyODIgNTUuNzc1OCAxMi4yNzE3QzU1LjYyMSAxMi42MTE4IDU1LjQwNTQgMTIuOTEyIDU1LjEyOTEgMTMuMTcyM0M1NC44NTY0IDEzLjQzMjYgNTQuNTM3NyAxMy42MzU2IDU0LjE3MjkgMTMuNzgxNEM1My44MTE4IDEzLjkyNzEgNTMuNDIxMiAxNCA1My4wMDEyIDE0Wk01My4wMDEyIDEzLjI2NkM1My40MTAyIDEzLjI2NiA1My43ODIzIDEzLjE3MDYgNTQuMTE3NiAxMi45Nzk3QzU0LjQ1NjYgMTIuNzkyMyA1NC43MjU2IDEyLjU0MDcgNTQuOTI0NiAxMi4yMjQ5QzU1LjEyNzMgMTEuOTA1NiA1NS4yMjg2IDExLjU1MzQgNTUuMjI4NiAxMS4xNjgxQzU1LjIyODYgMTAuNzgyOSA1NS4xMjczIDEwLjQzMjQgNTQuOTI0NiAxMC4xMTY2QzU0LjcyNTYgOS43OTczMyA1NC40NTY2IDkuNTQzOTkgNTQuMTE3NiA5LjM1NjU5QzUzLjc4MjMgOS4xNjU3MSA1My40MTAyIDkuMDcwMjggNTMuMDAxMiA5LjA3MDI4QzUyLjU5NTkgOS4wNzAyOCA1Mi4yMjM3IDkuMTY1NzEgNTEuODg0NyA5LjM1NjU5QzUxLjU0OTQgOS41NDM5OSA1MS4yODA0IDkuNzk3MzMgNTEuMDc3OCAxMC4xMTY2QzUwLjg3ODggMTAuNDMyNCA1MC43NzkzIDEwLjc4MjkgNTAuNzc5MyAxMS4xNjgxQzUwLjc3OTMgMTEuNTUzNCA1MC44Nzg4IDExLjkwNTYgNTEuMDc3OCAxMi4yMjQ5QzUxLjI4MDQgMTIuNTQwNyA1MS41NDk0IDEyLjc5MjMgNTEuODg0NyAxMi45Nzk3QzUyLjIyMzcgMTMuMTcwNiA1Mi41OTU5IDEzLjI2NiA1My4wMDEyIDEzLjI2NlpNNjIuNDgwMSA5LjYxMTY2QzYyLjM2MjIgOS41MTQ0OSA2Mi4zMDE0IDkuNDE1NTggNjIuMjk3NyA5LjMxNDk0QzYyLjI5NzcgOS4yMTA4MyA2Mi4zMzA4IDkuMTI0MDcgNjIuMzk3MiA5LjA1NDY2QzYyLjQ2NzIgOC45ODUyNSA2Mi41NTM4IDguOTQ1MzQgNjIuNjU2OSA4LjkzNDkzQzYyLjc2MzggOC45MjEwNSA2Mi44Njg4IDguOTU1NzUgNjIuOTcyIDkuMDM5MDRDNjMuMjg4OSA5LjMwMjc5IDYzLjUzOTQgOS42MTY4NyA2My43MjM2IDkuOTgxMjZDNjMuOTA3OSAxMC4zNDU3IDY0IDEwLjc0MTMgNjQgMTEuMTY4MUM2NCAxMS41NjAzIDYzLjkyMjYgMTEuOTI4MiA2My43Njc5IDEyLjI3MTdDNjMuNjEzMSAxMi42MTE4IDYzLjM5NzYgMTIuOTEyIDYzLjEyMTIgMTMuMTcyM0M2Mi44NDg1IDEzLjQzMjYgNjIuNTI5OCAxMy42MzU2IDYyLjE2NSAxMy43ODE0QzYxLjgwMzkgMTMuOTI3MSA2MS40MTUyIDE0IDYwLjk5ODggMTRDNjAuNTgyNCAxNCA2MC4xOTE5IDEzLjkyNzEgNTkuODI3MSAxMy43ODE0QzU5LjQ2MjMgMTMuNjM1NiA1OS4xNDE3IDEzLjQzMjYgNTguODY1NCAxMy4xNzIzQzU4LjU5MjcgMTIuOTEyIDU4LjM3OSAxMi42MTE4IDU4LjIyNDIgMTIuMjcxN0M1OC4wNjk1IDExLjkyODIgNTcuOTkyMSAxMS41NjAzIDU3Ljk5MjEgMTEuMTY4MUM1Ny45OTIxIDEwLjk2MzQgNTguMDE0MiAxMC43NjU2IDU4LjA1ODQgMTAuNTc0N0M1OC4xMDYzIDEwLjM4MDQgNTguMTcyNyAxMC4xOTMgNTguMjU3NCAxMC4wMTI1QzU4LjMwOSA5LjkwMTQ0IDU4LjM4MDggOS44MzAzIDU4LjQ3MyA5Ljc5OTA2QzU4LjU2ODggOS43NjQzNiA1OC42NjI3IDkuNzY0MzYgNTguNzU0OCA5Ljc5OTA2QzU4Ljg1MDYgOS44MzAzIDU4LjkyMjUgOS44OTI3NiA1OC45NzA0IDkuOTg2NDdDNTkuMDE4MyAxMC4wODAyIDU5LjAxMDkgMTAuMTk4MiA1OC45NDgzIDEwLjM0MDRDNTguODMwNCAxMC42MDA3IDU4Ljc3MTQgMTAuODc2NiA1OC43NzE0IDExLjE2ODFDNTguNzcxNCAxMS41NTM0IDU4Ljg3MDkgMTEuOTA1NiA1OS4wNjk5IDEyLjIyNDlDNTkuMjcyNSAxMi41NDA3IDU5LjU0MTUgMTIuNzkyMyA1OS44NzY4IDEyLjk3OTdDNjAuMjE1OCAxMy4xNzA2IDYwLjU4OTggMTMuMjY2IDYwLjk5ODggMTMuMjY2QzYxLjQwNzggMTMuMjY2IDYxLjc4IDEzLjE3MDYgNjIuMTE1MyAxMi45Nzk3QzYyLjQ1MDYgMTIuNzkyMyA2Mi43MTc3IDEyLjU0MDcgNjIuOTE2NyAxMi4yMjQ5QzYzLjExOTQgMTEuOTA1NiA2My4yMjA3IDExLjU1MzQgNjMuMjIwNyAxMS4xNjgxQzYzLjIyMDcgMTAuODU5MyA2My4xNTI1IDEwLjU3MTIgNjMuMDE2MiAxMC4zMDRDNjIuODgzNSAxMC4wMzMzIDYyLjcwNDggOS44MDI1MyA2Mi40ODAxIDkuNjExNjZaTTYwLjk5ODggNi4yNzQ4NkM2MC43NzQgNi4yNzQ4NiA2MC41Njk1IDYuMjI0NTQgNjAuMzg1MyA2LjEyMzg5QzYwLjIwMTEgNi4wMTk3OCA2MC4wNTM3IDUuODgyNyA1OS45NDMyIDUuNzEyNjVDNTkuODM2MyA1LjUzOTEzIDU5Ljc4MjkgNS4zNDY1MiA1OS43ODI5IDUuMTM0ODNDNTkuNzgyOSA0LjkyNjYgNTkuODM2MyA0LjczNzQ2IDU5Ljk0MzIgNC41Njc0MUM2MC4wNTM3IDQuMzkzODkgNjAuMjAxMSA0LjI1NjgxIDYwLjM4NTMgNC4xNTYxN0M2MC41Njk1IDQuMDUyMDYgNjAuNzc0IDQgNjAuOTk4OCA0QzYxLjIxOTkgNCA2MS40MjA3IDQuMDUyMDYgNjEuNjAxMyA0LjE1NjE3QzYxLjc4MTggNC4yNTY4MSA2MS45MjU1IDQuMzkzODkgNjIuMDMyNCA0LjU2NzQxQzYyLjE0MjkgNC43Mzc0NiA2Mi4xOTgyIDQuOTI2NiA2Mi4xOTgyIDUuMTM0ODNDNjIuMTk4MiA1LjM0NjUyIDYyLjE0MjkgNS41MzkxMyA2Mi4wMzI0IDUuNzEyNjVDNjEuOTI1NSA1Ljg4MjcgNjEuNzgxOCA2LjAxOTc4IDYxLjYwMTMgNi4xMjM4OUM2MS40MjA3IDYuMjI0NTQgNjEuMjE5OSA2LjI3NDg2IDYwLjk5ODggNi4yNzQ4NloifSl9KX1mdW5jdGlvbiBJOCgpe3JldHVybiBRKCJzdmciLHt3aWR0aDoiMTYiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjcwIDUgMTggOSIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlEoInBhdGgiLHtkOiJNODUuNTcyIDEyLjEwMzhDODYuMDYgMTIuMTAzOCA4Ni40MjA3IDExLjk4OTIgODYuNjU0MiAxMS43NjAxQzg2Ljg4NDcgMTEuNTI4MSA4NyAxMS4xNjQxIDg3IDEwLjY2ODFWMTAuMTExMkM4NyA5Ljc2OTAxIDg2LjkyMDcgOS40NjMwMiA4Ni43NjIgOS4xOTMyOUM4Ni42MDMzIDguOTIwNjUgODYuMzc1OCA4LjY5NzMzIDg2LjA3OTQgOC41MjMzMUM4NS43ODAxIDguMzQ5MjkgODUuNDIyMyA4LjIzNzYyIDg1LjAwNjIgOC4xODgzMkw4My4wMTY4IDcuOTUzMzlMODEuMTk4MSA2Ljg0ODM1QzgwLjkyMjcgNi42ODAxMyA4MC42NjA4IDYuNTQyMzcgODAuNDEyMyA2LjQzNTA1QzgwLjE2MDggNi4zMjQ4NCA3OS44OTc0IDYuMjM3ODMgNzkuNjIxOSA2LjE3NDAyQzc5LjM0NjUgNi4xMTAyMSA3OS4wMzgyIDYuMDY1MjYgNzguNjk2OSA2LjAzOTE1Qzc4LjM1MjYgNi4wMTMwNSA3Ny45NTE0IDYgNzcuNDkzNCA2SDc2LjgxMDhDNzYuMzg4NyA2IDc1Ljk5NSA2LjA0OTMxIDc1LjYyOTggNi4xNDc5MkM3NS4yNjE2IDYuMjQzNjMgNzQuOTE4OCA2LjM3MTI1IDc0LjYwMTUgNi41MzA3NkM3NC4yODExIDYuNjkwMjggNzMuOTg2MiA2Ljg2NTc2IDczLjcxNjggNy4wNTcxOEM3My40NDQ0IDcuMjQ4NiA3My4xOTU5IDcuNDM3MTIgNzIuOTcxNCA3LjYyMjc1TDcyLjI1NzQgNy44NTMzM0M3MS44MzIzIDcuOTg2NzQgNzEuNTE2NCA4LjE4Mzk3IDcxLjMwOTkgOC40NDVDNzEuMTAzMyA4LjcwMzEzIDcxIDkuMDMzNzcgNzEgOS40MzY5MlYxMC42NDJDNzEgMTEuMTQ2NyA3MS4xMTUzIDExLjUxNjUgNzEuMzQ1OCAxMS43NTE0QzcxLjU3NjMgMTEuOTg2MyA3MS45MzcgMTIuMTAzOCA3Mi40MjggMTIuMTAzOEg3Mi43MTU0QzcyLjcwMDQgMTIuMDM3MSA3Mi42ODg1IDExLjk3MDQgNzIuNjc5NSAxMS45MDM3QzcyLjY3MDUgMTEuODM0MSA3Mi42NjYgMTEuNzY0NSA3Mi42NjYgMTEuNjk0OEM3Mi42NjYgMTEuMzU1NSA3Mi43NDk4IDExLjA0OTUgNzIuOTE3NSAxMC43NzY5QzczLjA4NTEgMTAuNTA0MiA3My4zMTEyIDEwLjI4ODIgNzMuNTk1NiAxMC4xMjg3QzczLjg3NyA5Ljk2NjIzIDc0LjE5MjggOS44ODUwMiA3NC41NDMxIDkuODg1MDJDNzQuODkwNCA5Ljg4NTAyIDc1LjIwNjIgOS45NjYyMyA3NS40OTA2IDEwLjEyODdDNzUuNzcyIDEwLjI4ODIgNzUuOTk2NSAxMC41MDQyIDc2LjE2NDIgMTAuNzc2OUM3Ni4zMzE4IDExLjA0OTUgNzYuNDE1NyAxMS4zNTU1IDc2LjQxNTcgMTEuNjk0OEM3Ni40MTU3IDExLjc2NDUgNzYuNDExMiAxMS44MzQxIDc2LjQwMjIgMTEuOTAzN0M3Ni4zOTMyIDExLjk3MDQgNzYuMzgyNyAxMi4wMzcxIDc2LjM3MDggMTIuMTAzOEg4MS42MzgyQzgxLjYyMDMgMTIuMDM3MSA4MS42MDgzIDExLjk3MDQgODEuNjAyMyAxMS45MDM3QzgxLjU5MzMgMTEuODM0MSA4MS41ODg4IDExLjc2NDUgODEuNTg4OCAxMS42OTQ4QzgxLjU4ODggMTEuMzU1NSA4MS42NzI3IDExLjA0OTUgODEuODQwMyAxMC43NzY5QzgyLjAwNSAxMC41MDQyIDgyLjIyOTUgMTAuMjg4MiA4Mi41MTM5IDEwLjEyODdDODIuNzk1MyA5Ljk2NjIzIDgzLjExMTEgOS44ODUwMiA4My40NjE0IDkuODg1MDJDODMuODExNyA5Ljg4NTAyIDg0LjEyOSA5Ljk2NjIzIDg0LjQxMzQgMTAuMTI4N0M4NC42OTQ4IDEwLjI4ODIgODQuOTE5NCAxMC41MDQyIDg1LjA4NyAxMC43NzY5Qzg1LjI1MTcgMTEuMDQ5NSA4NS4zMzQgMTEuMzU1NSA4NS4zMzQgMTEuNjk0OEM4NS4zMzQgMTEuNzY0NSA4NS4zMzEgMTEuODM0MSA4NS4zMjUgMTEuOTAzN0M4NS4zMTYgMTEuOTcwNCA4NS4zMDQxIDEyLjAzNzEgODUuMjg5MSAxMi4xMDM4SDg1LjU3MlpNODMuNDYxNCAxM0M4My43MTI5IDEzIDgzLjk0MDQgMTIuOTQyIDg0LjE0NCAxMi44MjZDODQuMzQ3NiAxMi43MSA4NC41MDkyIDEyLjU1MzMgODQuNjI5IDEyLjM1NjFDODQuNzQ4NyAxMi4xNTg5IDg0LjgwODYgMTEuOTM4NSA4NC44MDg2IDExLjY5NDhDODQuODA4NiAxMS40NTEyIDg0Ljc0ODcgMTEuMjMwOCA4NC42MjkgMTEuMDMzNkM4NC41MDkyIDEwLjgzNjMgODQuMzQ3NiAxMC42Nzk3IDg0LjE0NCAxMC41NjM3QzgzLjk0MDQgMTAuNDQ3NyA4My43MTI5IDEwLjM4OTcgODMuNDYxNCAxMC4zODk3QzgzLjIwNjkgMTAuMzg5NyA4Mi45Nzc5IDEwLjQ0NzcgODIuNzc0MyAxMC41NjM3QzgyLjU3MDggMTAuNjc5NyA4Mi40MDkxIDEwLjgzNjMgODIuMjg5NCAxMS4wMzM2QzgyLjE2OTYgMTEuMjMwOCA4Mi4xMDk3IDExLjQ1MTIgODIuMTA5NyAxMS42OTQ4QzgyLjEwOTcgMTEuOTM4NSA4Mi4xNjk2IDEyLjE1ODkgODIuMjg5NCAxMi4zNTYxQzgyLjQwOTEgMTIuNTUzMyA4Mi41NzA4IDEyLjcxIDgyLjc3NDMgMTIuODI2QzgyLjk3NzkgMTIuOTQyIDgzLjIwNjkgMTMgODMuNDYxNCAxM1pNNzQuNTQzMSAxM0M3NC43OTQ2IDEzIDc1LjAyMjEgMTIuOTQyIDc1LjIyNTcgMTIuODI2Qzc1LjQyOTIgMTIuNzEgNzUuNTkwOSAxMi41NTMzIDc1LjcxMDYgMTIuMzU2MUM3NS44MzA0IDEyLjE1ODkgNzUuODkwMyAxMS45Mzg1IDc1Ljg5MDMgMTEuNjk0OEM3NS44OTAzIDExLjQ1MTIgNzUuODMwNCAxMS4yMzA4IDc1LjcxMDYgMTEuMDMzNkM3NS41OTA5IDEwLjgzNjMgNzUuNDI5MiAxMC42Nzk3IDc1LjIyNTcgMTAuNTYzN0M3NS4wMjIxIDEwLjQ0NzcgNzQuNzk0NiAxMC4zODk3IDc0LjU0MzEgMTAuMzg5N0M3NC4yODg2IDEwLjM4OTcgNzQuMDU5NiAxMC40NDc3IDczLjg1NiAxMC41NjM3QzczLjY1MjQgMTAuNjc5NyA3My40OTA4IDEwLjgzNjMgNzMuMzcxIDExLjAzMzZDNzMuMjUxMyAxMS4yMzA4IDczLjE5MTQgMTEuNDUxMiA3My4xOTE0IDExLjY5NDhDNzMuMTkxNCAxMS45Mzg1IDczLjI1MTMgMTIuMTU4OSA3My4zNzEgMTIuMzU2MUM3My40OTA4IDEyLjU1MzMgNzMuNjUyNCAxMi43MSA3My44NTYgMTIuODI2Qzc0LjA1OTYgMTIuOTQyIDc0LjI4ODYgMTMgNzQuNTQzMSAxM1oifSl9KX1mdW5jdGlvbiBzMCh7c2l6ZTokPTE4LHN0cm9rZVdpZHRoOks9Mn0pe3JldHVybiBRKGw1LHtzaXplOiQsc3Ryb2tlV2lkdGg6S30pfXZhciBsOT0iQWNjZXNzaWJpbGl0eSB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4iO2Z1bmN0aW9uIHkyKCQpe3JldHVybiAkPy5lcnJvcnM/LmluY2x1ZGVzKGw5KT8/ITF9ZnVuY3Rpb24gUzIoJCxLKXtpZigkPT09SylyZXR1cm4hMDtpZigkLmlkIT09Sy5pZHx8JC5wYXRoIT09Sy5wYXRofHwkLmxhYmVsIT09Sy5sYWJlbHx8JC52YWx1ZSE9PUsudmFsdWV8fCQucm9sZSE9PUsucm9sZXx8JC50eXBlIT09Sy50eXBlfHwkLmVuYWJsZWQhPT1LLmVuYWJsZWQpcmV0dXJuITE7bGV0IEo9JC5mcmFtZSxaPUsuZnJhbWU7cmV0dXJuIEo9PT1afHxKLng9PT1aLngmJkoueT09PVoueSYmSi53aWR0aD09PVoud2lkdGgmJkouaGVpZ2h0PT09Wi5oZWlnaHR9ZnVuY3Rpb24geDIoJCxLKXtsZXQgSj0kLmxhYmVsfHwkLnJvbGV8fGBlbGVtZW50ICR7SysxfWAsWj0kLnJvbGV8fCQudHlwZTtyZXR1cm57aWQ6JC5pZCxwYXRoOiQucGF0aCxsYWJlbDpKLHZhbHVlOiQudmFsdWUscm9sZTpaLHR5cGU6JC50eXBlLGVuYWJsZWQ6JC5lbmFibGVkLGZyYW1lOiQuZnJhbWV9fWZ1bmN0aW9uIGQ5KCQsSyl7bGV0IEo9TWF0aC5tYXgoMCwkLngpLFo9TWF0aC5tYXgoMCwkLnkpLFg9TWF0aC5taW4oSy53aWR0aCwkLngrJC53aWR0aCksWT1NYXRoLm1pbihLLmhlaWdodCwkLnkrJC5oZWlnaHQpLHE9TWF0aC5tYXgoMCxYLUopLFY9TWF0aC5tYXgoMCxZLVopO3JldHVybiBxPjAmJlY+MD97eDpKLHk6Wix3aWR0aDpxLGhlaWdodDpWfTpudWxsfWZ1bmN0aW9uIHUwKCQpe3JldHVybiAkLmlkfWZ1bmN0aW9uIGI4KCQpe3JldHVybmAkeyQueH0sJHskLnl9ICR7JC53aWR0aH14JHskLmhlaWdodH1gfWZ1bmN0aW9uIGM5KCQpe3JldHVybltgQVggbGFiZWw6ICR7JC5sYWJlbHx8IlVubGFiZWxlZCJ9YCwkLnJvbGU/YHJvbGU6ICR7JC5yb2xlfWA6IiIsJC50eXBlP2B0eXBlOiAkeyQudHlwZX1gOiIiLCQudmFsdWU/YHZhbHVlOiAkeyQudmFsdWV9YDoiIiwkLmlkP2BpZDogJHskLmlkfWA6IiIsYHBhdGg6ICR7JC5wYXRofWAsYGZyYW1lOiAke2I4KCQuZnJhbWUpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCI7ICIpfWZ1bmN0aW9uIHQwKCQpe3JldHVybiAkJiZ0eXBlb2YgJC5kZXZpY2U9PT0ic3RyaW5nIiYmdHlwZW9mICQudXJsPT09InN0cmluZyI/JDpudWxsfWZ1bmN0aW9uIG0xKCQpe2xldCBKPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmJhc2VQYXRoPz8od2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvKyQvLCIiKXx8Ii8iKTtyZXR1cm4gSj09PSIvIj9gLyR7JH1gOmAke0p9LyR7JH1gfXZhciBzJD01MDAwLHQkPTIwMDAsSzI9bnVsbCx5OD1udWxsLGUkPTEsJEs9MSx6NT1uZXcgTWFwLFU1PW5ldyBNYXA7ZnVuY3Rpb24gS0soKXtsZXQgJD1uZXcgVVJMKG0xKCJleGVjLXdzIiksd2luZG93LmxvY2F0aW9uLmhyZWYpO3JldHVybiAkLnByb3RvY29sPSQucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsJC50b1N0cmluZygpfWZ1bmN0aW9uIEpLKCQpe2ZvcihsZXQgSyBvZiB6NS52YWx1ZXMoKSlLLnJlamVjdCgkKTt6NS5jbGVhcigpfWZ1bmN0aW9uIHI5KCl7cmV0dXJuIEsyPz89bmV3IFByb21pc2UoKCQsSyk9PntsZXQgSj0hMSxaO3RyeXtaPW5ldyBXZWJTb2NrZXQoS0soKSl9Y2F0Y2gocSl7SzI9bnVsbCxLKHEpO3JldHVybn1sZXQgWD1zZXRUaW1lb3V0KCgpPT57aWYoIUopSj0hMCxLMj1udWxsLEsoRXJyb3IoImNvbnRyb2wgc29ja2V0IGNvbm5lY3QgdGltZW91dCIpKSxaLmNsb3NlKCl9LHMkKTtaLm9ub3Blbj0oKT0+e1ouc2VuZChKU09OLnN0cmluZ2lmeSh7fSkpfSxaLm9ubWVzc2FnZT0ocSk9PntsZXQgVjt0cnl7Vj1KU09OLnBhcnNlKFN0cmluZyhxLmRhdGEpKX1jYXRjaHtyZXR1cm59aWYoVi5yZWFkeSl7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoWCkseTg9WiwkKFopO3JldHVybn1pZih0eXBlb2YgVi5zdWI9PT0ibnVtYmVyIil7bGV0IEI9VTUuZ2V0KFYuc3ViKTtpZighQilyZXR1cm47aWYoVi5lbmQpVTUuZGVsZXRlKFYuc3ViKSxCLm9uRW5kKCk7ZWxzZSBpZih0eXBlb2YgVi5kYXRhPT09InN0cmluZyIpQi5vbkRhdGEoVi5kYXRhKTtyZXR1cm59aWYodHlwZW9mIFYuaWQhPT0ibnVtYmVyIilyZXR1cm47bGV0IE49ejUuZ2V0KFYuaWQpO2lmKCFOKXJldHVybjt6NS5kZWxldGUoVi5pZCksTi5yZXNvbHZlKFYpfTtsZXQgWT0oKT0+e0syPW51bGwseTg9bnVsbDtsZXQgcT1FcnJvcigiY29udHJvbCBzb2NrZXQgY2xvc2VkIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpO0pLKHEpO2xldCBWPVsuLi5VNS52YWx1ZXMoKV07VTUuY2xlYXIoKTtmb3IobGV0IE4gb2YgVilOLm9uRW5kKCk7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoWCksSyhxKX07Wi5vbmVycm9yPVksWi5vbmNsb3NlPVl9KSxLMn1hc3luYyBmdW5jdGlvbiBvOSgkLEspe2xldCBKPWF3YWl0IHI5KCk7aWYoSi5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pdGhyb3cgRXJyb3IoImNvbnRyb2wgc29ja2V0IG5vdCBvcGVuIik7cmV0dXJuIG5ldyBQcm9taXNlKChaLFgpPT57bGV0IFk9ZSQrKyxxPSgpPT57ejUuZGVsZXRlKFkpLFgoSz8ucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX07aWYoSyl7aWYoSy5hYm9ydGVkKXtxKCk7cmV0dXJufUsuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX16NS5zZXQoWSx7cmVzb2x2ZTooVik9PntLPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWihWKX0scmVqZWN0OihWKT0+e0s/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxYKFYpfX0pLEouc2VuZChKU09OLnN0cmluZ2lmeSh7aWQ6WSwuLi4kfSkpfSl9YXN5bmMgZnVuY3Rpb24geDEoJCxLPXt9LEope2xldCBaPWF3YWl0IG85KHtycGM6e21ldGhvZDokLHBhcmFtczpLfX0sSj8uc2lnbmFsKTtpZihaLmVycm9yKXJldHVybntzdGRvdXQ6IiIsc3RkZXJyOlouZXJyb3IsZXhpdENvZGU6MTI2fTtsZXR7aWQ6WCwuLi5ZfT1aO3JldHVybnsuLi5ZLHN0ZG91dDpaLnN0ZG91dD8/IiIsc3RkZXJyOlouc3RkZXJyPz8iIixleGl0Q29kZTpaLmV4aXRDb2RlPz8wfX1hc3luYyBmdW5jdGlvbiBSMigpe3JldHVybntzdGRvdXQ6IiIsc3RkZXJyOiJ0aGUgcHJldmlldyBwYWdlIGhhcyBubyBob3N0IHNoZWxsIixleGl0Q29kZToxMjZ9fWFzeW5jIGZ1bmN0aW9uIFM4KCQsSyl7bGV0IEo9YXdhaXQgbzkoe3VpOiR9LEs/LnNpZ25hbCk7aWYoSi5lcnJvcil0aHJvdyBFcnJvcihKLmVycm9yKTtyZXR1cm4gSi5zdGF0dXM/P251bGx9ZnVuY3Rpb24gZTAoJCl7bGV0IEs9e29ubWVzc2FnZTpudWxsLG9uZXJyb3I6bnVsbCxjbG9zZTooKT0+e319LEo9ITEsWj1udWxsLFg9bnVsbCxZPSIiLHE9KEIpPT57WSs9Qi5yZXBsYWNlKC9cclxuL2csYApgKTtsZXQgVTt3aGlsZSgoVT1ZLmluZGV4T2YoYAoKYCkpIT09LTEpe2xldCBHPVkuc2xpY2UoMCxVKTtZPVkuc2xpY2UoVSsyKTtsZXQgej1HLnNwbGl0KGAKYCkuZmlsdGVyKChIKT0+SC5zdGFydHNXaXRoKCJkYXRhOiIpKS5tYXAoKEgpPT5ILnNsaWNlKDUpLnJlcGxhY2UoL14gLywiIikpLmpvaW4oYApgKTtpZih6KUsub25tZXNzYWdlPy4oe2RhdGE6en0pfX0sVj0oKT0+e2lmKEp8fFgpcmV0dXJuO0sub25lcnJvcj8uKCksWD1zZXRUaW1lb3V0KCgpPT57WD1udWxsLE4oKX0sdCQpfSxOPWFzeW5jKCk9PntpZihKKXJldHVybjt0cnl7bGV0IEI9YXdhaXQgcjkoKTtpZihKKXJldHVybjtZPSIiLFo9JEsrKyxVNS5zZXQoWix7b25EYXRhOnEsb25FbmQ6Vn0pLEIuc2VuZChKU09OLnN0cmluZ2lmeSh7c3ViOloscGF0aDokfSkpfWNhdGNoe1YoKX19O3JldHVybiBOKCksSy5jbG9zZT0oKT0+e2lmKEo9ITAsWCljbGVhclRpbWVvdXQoWCk7aWYoWiE9PW51bGwpe1U1LmRlbGV0ZShaKTt0cnl7eTg/LnNlbmQoSlNPTi5zdHJpbmdpZnkoe3Vuc3ViOlp9KSl9Y2F0Y2h7fVo9bnVsbH19LEt9ZnVuY3Rpb24gbjkoJCl7bGV0W0ssSl09TyhudWxsKSxbWixYXT1PKCJBWCBvZmYiKTtyZXR1cm4gRSgoKT0+e2lmKCEkKXtKKG51bGwpLFgoIkFYIG9mZiIpO3JldHVybn1KKG51bGwpLFgoIkFYIHdhaXRpbmciKTtsZXQgWT1lMCgkKTtyZXR1cm4gWS5vbm1lc3NhZ2U9KHEpPT57dHJ5e2xldCBWPUpTT04ucGFyc2UocS5kYXRhKTtKKFYpLFgoeTIoVik/IkFYIHVuYXZhaWxhYmxlIjpgJHtWLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtYKCJBWCBwYXJzZSBlcnJvciIpfX0sWS5vbmVycm9yPSgpPT57WCgiQVggcmVjb25uZWN0aW5nIil9LCgpPT5ZLmNsb3NlKCl9LFskXSkse3NuYXBzaG90Okssc3RhdHVzOlp9fXZhciB4OD1IMCh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxSOD1IMChudWxsKTtmdW5jdGlvbiBMNSgpe3JldHVybiBDMCh4OCl9ZnVuY3Rpb24gdjIoKXtsZXQgJD1DMChSOCk7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9ZnVuY3Rpb24gaTkoJCxLKXtyZXR1cm57eDokLngqMy9LLndpZHRoLHk6JC55KjMvSy5oZWlnaHQsd2lkdGg6JC53aWR0aCozL0sud2lkdGgsaGVpZ2h0OiQuaGVpZ2h0KjMvSy5oZWlnaHR9fXZhciBhOT1uMChmdW5jdGlvbih7ZWxlbWVudDpLLGluZGV4Okosc2NyZWVuOlosaGlnaGxpZ2h0ZWQ6WCxzZWxlY3RlZDpZLG9uSGlnaGxpZ2h0OnEsb25TZWxlY3Q6Vn0pe2xldCBOPXUwKEspLEI9eDIoSyxKKSxVPWQ5KEsuZnJhbWUsWik7aWYoIVUpcmV0dXJuIG51bGw7bGV0IEc9YzkoQik7cmV0dXJuIFEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImRhdGEtYXgta2V5IjpOLCJkYXRhLWF4LWlkIjpCLmlkLCJkYXRhLWF4LXBhdGgiOkIucGF0aCwiZGF0YS1heC1sYWJlbCI6Qi5sYWJlbCwiZGF0YS1heC12YWx1ZSI6Qi52YWx1ZSwiZGF0YS1heC1yb2xlIjpCLnJvbGUsImRhdGEtYXgtdHlwZSI6Qi50eXBlLCJkYXRhLWF4LWVuYWJsZWQiOlN0cmluZyhCLmVuYWJsZWQpLCJkYXRhLWF4LWZyYW1lIjpiOChCLmZyYW1lKSwiZGF0YS1heC1zZWxlY3RlZCI6U3RyaW5nKFkpLCJhcmlhLWxhYmVsIjpLLmxhYmVsfHxHLHRpdGxlOkcsb25DbGljazooKT0+VihOKSxvbk1vdXNlRW50ZXI6KCk9PnEoTiksb25Nb3VzZUxlYXZlOigpPT5xKG51bGwpLGNsYXNzTmFtZToiYWJzb2x1dGUgYm94LWJvcmRlciBtaW4tdy1weCBtaW4taC1weCBwLTAgcm91bmRlZC1bM3B4XSBib3JkZXIgY3Vyc29yLXBvaW50ZXIgcG9pbnRlci1ldmVudHMtYXV0byIsc3R5bGU6e2xlZnQ6YCR7VS54L1oud2lkdGgqMTAwfSVgLHRvcDpgJHtVLnkvWi5oZWlnaHQqMTAwfSVgLHdpZHRoOmAke1Uud2lkdGgvWi53aWR0aCoxMDB9JWAsaGVpZ2h0OmAke1UuaGVpZ2h0L1ouaGVpZ2h0KjEwMH0lYCxib3JkZXJDb2xvcjpZPyIjNjBhNWZhIjpYPyIjZmJiZjI0IjoiIzM0ZDM5OSIsYmFja2dyb3VuZDpZPyJyZ2JhKDk2LDE2NSwyNTAsMC4yNCkiOlg/InJnYmEoMjQ1LDE1OCwxMSwwLjI4KSI6InJnYmEoMTYsMTg1LDEyOSwwLjEyKSJ9fSl9LCgkLEspPT4kLmluZGV4PT09Sy5pbmRleCYmJC5oaWdobGlnaHRlZD09PUsuaGlnaGxpZ2h0ZWQmJiQuc2VsZWN0ZWQ9PT1LLnNlbGVjdGVkJiYkLm9uSGlnaGxpZ2h0PT09Sy5vbkhpZ2hsaWdodCYmJC5vblNlbGVjdD09PUsub25TZWxlY3QmJiQuc2NyZWVuLndpZHRoPT09Sy5zY3JlZW4ud2lkdGgmJiQuc2NyZWVuLmhlaWdodD09PUsuc2NyZWVuLmhlaWdodCYmUzIoJC5lbGVtZW50LEsuZWxlbWVudCkpO2Z1bmN0aW9uIHY4KHtwcm9qZWN0aW9uOiQsc2NyZWVuQ29uZmlnOkt9PXt9KXtsZXR7c25hcHNob3Q6Sn09TDUoKSx7aGlnaGxpZ2h0ZWRLZXk6WixzZWxlY3RlZEtleTpYLHNldEhpZ2hsaWdodGVkS2V5Olksc2V0U2VsZWN0ZWRLZXk6cX09djIoKTtpZighSj8uc2NyZWVuLndpZHRofHwhSj8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtpZigkJiZLKXJldHVybiBRKCJzdmciLHt2aWV3Qm94OiIwIDAgMSAxIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIixjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgdy1mdWxsIGgtZnVsbCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOkouZWxlbWVudHMubWFwKChWKT0+e2xldCBOPXUwKFYpLEI9Vi5mcmFtZSxVPXQzKCQsaTkoQixLKSksRz1OPT09WD8iIzYwYTVmYSI6Tj09PVo/IiNmYmJmMjQiOiIjMzRkMzk5IjtyZXR1cm4gVS5tYXAoKHosSCk9PlEoInBvbHlnb24iLHtwb2ludHM6ei5tYXAoKEYpPT5GLmpvaW4oIiwiKSkuam9pbigiICIpLGZpbGw6RyxmaWxsT3BhY2l0eTowLjE1LHN0cm9rZTpHLHN0cm9rZVdpZHRoOjEsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLGNsYXNzTmFtZToicG9pbnRlci1ldmVudHMtYXV0byBjdXJzb3ItcG9pbnRlciIsImRhdGEtYXgta2V5IjpOLHJvbGU6ImJ1dHRvbiIsdGFiSW5kZXg6MCwiYXJpYS1sYWJlbCI6Vi5sYWJlbHx8Vi5yb2xlfHwiQVggZWxlbWVudCIsb25Qb2ludGVyRG93bjooRik9PkYuc3RvcFByb3BhZ2F0aW9uKCksb25DbGljazooKT0+cShOKSxvbktleURvd246KEYpPT57aWYoRi5rZXk9PT0iRW50ZXIifHxGLmtleT09PSIgIilGLnByZXZlbnREZWZhdWx0KCkscShOKX0sb25Nb3VzZUVudGVyOigpPT5ZKE4pLG9uTW91c2VMZWF2ZTooKT0+WShudWxsKSxjaGlsZHJlbjpRKCJ0aXRsZSIse2NoaWxkcmVuOlYubGFiZWx8fFYucm9sZX0pfSxgJHtOfToke0h9YCkpfSl9KTtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOkouZWxlbWVudHMubWFwKChWLE4pPT57bGV0IEI9dTAoVik7cmV0dXJuIFEoYTkse2VsZW1lbnQ6VixpbmRleDpOLHNjcmVlbjpKLnNjcmVlbixoaWdobGlnaHRlZDpCPT09WixzZWxlY3RlZDpCPT09WCxvbkhpZ2hsaWdodDpZLG9uU2VsZWN0OnF9LEIpfSl9KX1mdW5jdGlvbiBzOSh7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpLfSl7bGV0e3NuYXBzaG90Okosc3RhdHVzOlp9PW45KCQpLFtYLFldPU8obnVsbCksW3EsVl09TyhudWxsKTtFKCgpPT57aWYoISQpWShudWxsKSxWKG51bGwpfSxbJF0pO2xldCBOPVIxKCgpPT4oe3NuYXBzaG90Okosc3RhdHVzOlp9KSxbSixaXSksQj1SMSgoKT0+KHtoaWdobGlnaHRlZEtleTpYLHNlbGVjdGVkS2V5OnEsc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpWfSksW1gscV0pO3JldHVybiBRKHg4LHt2YWx1ZTpOLGNoaWxkcmVuOlEoUjgse3ZhbHVlOkIsY2hpbGRyZW46S30pfSl9ZnVuY3Rpb24gajgoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOkssb25Ub2dnbGVPdmVybGF5Okp9KXtsZXR7c3RhdHVzOlp9PUw1KCksW1gsWV09TyghMSkscT0kJiZLO3JldHVybiBRKFMxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6WixvbkNsaWNrOkosb25Nb3VzZUVudGVyOigpPT5ZKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlkoITEpLHN0eWxlOnE/e2JhY2tncm91bmQ6WD8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOlEoaDAse3NpemU6MTksc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gdDkoe2hpZGVDaHJvbWU6JCxvblRvZ2dsZTpLfSl7bGV0W0osWl09TyghMSk7cmV0dXJuIFEoUzEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6JD8iU2hvdyBkZXZpY2UgZnJhbWUiOiJIaWRlIGRldmljZSBmcmFtZSIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZTokPyJTaG93IGRldmljZSBmcmFtZSI6IkhpZGUgZGV2aWNlIGZyYW1lIixvbkNsaWNrOkssb25Nb3VzZUVudGVyOigpPT5aKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlooITEpLHN0eWxlOiQ/e2JhY2tncm91bmQ6Sj8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOlEoaTAse3NpemU6MTgsc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gajIoe2NsYXNzTmFtZTokPSIifSl7cmV0dXJuIFEoImEiLHtocmVmOiJodHRwczovL2dpdGh1Yi5jb20vRXZhbkJhY29uL3NlcnZlLXNpbSIsdGFyZ2V0OiJfYmxhbmsiLHJlbDoibm9yZWZlcnJlciIsY2xhc3NOYW1lOmBpbmxpbmUtZmxleCBoLVszMHB4XSBtaW4tdy0wIGl0ZW1zLWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHB4LTEuNSBmb250LW1vbm8gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzY1IG5vLXVuZGVybGluZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlLzg1IGZvY3VzLXZpc2libGU6b3V0bGluZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXdoaXRlLzYwICR7JH1gLnRyaW0oKSwiYXJpYS1sYWJlbCI6Ik9wZW4gc2VydmUtc2ltIix0aXRsZToiT3BlbiBzZXJ2ZS1zaW0iLGNoaWxkcmVuOiJzZXJ2ZS1zaW0ifSl9ZnVuY3Rpb24gZTkoe29wZW46JCxvbkNsaWNrOkt9KXtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBsZWZ0LTMgei0zMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBwLTEgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSAkeyQ/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbUSgiYnV0dG9uIix7b25DbGljazpLLGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpRKEQwLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLFEoajIse30pXX0pfWZ1bmN0aW9uICQ2KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQiI7bGV0IEs9JC8xMDczNzQxODI0O2lmKEs+PTEpcmV0dXJuYCR7Sy50b0ZpeGVkKEs+PTEwPzA6MSl9IEdCYDtyZXR1cm5gJHsoJC8xMDQ4NTc2KS50b0ZpeGVkKDApfSBNQmB9ZnVuY3Rpb24gZzIoJCl7bGV0IEs9JC5tYXRjaCgvXihbYS16QS1aXSspLSguKykkLyk7aWYoIUspcmV0dXJue29zOiQsdmVyc2lvbjoiIn07cmV0dXJue29zOktbMV0sdmVyc2lvbjpLWzJdLnJlcGxhY2UoLy0vZywiLiIpfX1mdW5jdGlvbiBLNigkKXtyZXR1cm4gZzIoJCkudmVyc2lvbnx8JH1mdW5jdGlvbiBoMigkKXtsZXR7b3M6Syx2ZXJzaW9uOkp9PWcyKCQpO3JldHVybiBKP2Ake0t9ICR7Sn1gOkt9ZnVuY3Rpb24gSDUoKXtsZXRbJCxLXT1PKCgpPT50eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1hdGNoTWVkaWE/LigiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiBFKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0IEo9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIiksWj0oKT0+SyhKLm1hdGNoZXMpO3JldHVybiBaKCksSi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopLCgpPT5KLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWil9LFtdKSwkfXZhciBDNT0iMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIjtmdW5jdGlvbiBtMih7Y2hyb21lOiQsc2NyZWVuOkssaW50ZXJhY3RpdmU6Sj0hMSxmcmFtZWQ6Wj0hMCxvbkJ1dHRvbjpYLG9uQ3Jvd25XaGVlbDpZfSl7bGV0IHE9SDUoKSxWPXE/Im5vbmUiOmBvcGFjaXR5ICR7QzV9YCxOPXE/Im5vbmUiOmBsZWZ0ICR7QzV9LCB0b3AgJHtDNX0sIHdpZHRoICR7QzV9LCBoZWlnaHQgJHtDNX0sIGJvcmRlci1yYWRpdXMgJHtDNX1gLEI9SiYmWjtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIiwiZGF0YS1kZXZpY2VraXQtY2hyb21lIjoiIiwiZGF0YS1mcmFtZWQiOlo/Im9uIjoib2ZmIixjaGlsZHJlbjpbUSgiZGl2Iix7ImFyaWEtaGlkZGVuIjpaP3ZvaWQgMDohMCxzdHlsZTp7b3BhY2l0eTpaPzE6MCxwb2ludGVyRXZlbnRzOlo/dm9pZCAwOiJub25lIix0cmFuc2l0aW9uOlZ9LGNoaWxkcmVuOlskLmJ1dHRvbnMubWFwKChVKT0+UShYSyx7Y2hyb21lOiQsYnV0dG9uOlUsaW50ZXJhY3RpdmU6QixvbkJ1dHRvbjpYLG9uV2hlZWw6QiYmVS5uYW1lPT09ImRpZ2l0YWwtY3Jvd24iP1k6dm9pZCAwfSxgYnV0dG9uLSR7VS5uYW1lfWApKSwkLmNvbXBvc2l0ZUltYWdlP1EoUTYse2Nocm9tZTokLGltYWdlOiQuY29tcG9zaXRlSW1hZ2UscmVjdDokLmJvZHksekluZGV4OjF9KTokLnNsaWNlJiYkLmNvcm5lcj9RKFlLLHtjaHJvbWU6JH0pOm51bGxdfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBvdmVyZmxvdy1oaWRkZW4iLHN0eWxlOnsuLi5RSygkLFopLGJhY2tncm91bmQ6Wj8iIzAwMCI6dm9pZCAwLHRyYW5zaXRpb246Tn0sY2hpbGRyZW46S30pXX0pfWZ1bmN0aW9uIFFLKCQsSyl7aWYoIUspcmV0dXJue2xlZnQ6MCx0b3A6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIix6SW5kZXg6Mixib3JkZXJSYWRpdXM6MH07cmV0dXJuey4uLmc4KCQsJC5zY3JlZW4sMiksYm9yZGVyUmFkaXVzOlpLKCQpfX1mdW5jdGlvbiBaSygkKXtyZXR1cm5gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi53aWR0aCoxMDB9JSAvICR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYH1mdW5jdGlvbiBYSyh7Y2hyb21lOiQsYnV0dG9uOkssaW50ZXJhY3RpdmU6SixvbkJ1dHRvbjpaLG9uV2hlZWw6WH0pe2xldFtZLHFdPU8oITEpLFtWLE5dPU8oITEpLEI9SShudWxsKSxVPUkobnVsbCksRz1JKFgpO0cuY3VycmVudD1YLEUoKCk9PntsZXQgQT1VLmN1cnJlbnQ7aWYoIUF8fCFYKXJldHVybjtsZXQgdz0oaSk9PntpLnByZXZlbnREZWZhdWx0KCksaS5zdG9wUHJvcGFnYXRpb24oKSxHLmN1cnJlbnQ/LihpLmRlbHRhWSxpLmRlbHRhTW9kZSl9O3JldHVybiBBLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIix3LHtwYXNzaXZlOiExfSksKCk9PkEucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHcpfSxbISFYXSk7bGV0IHo9SiYmSy51c2FnZVBhZ2UhPW51bGwmJksudXNhZ2UhPW51bGwsSD1EKCgpPT57aWYoQi5jdXJyZW50PT09bnVsbClyZXR1cm47Qi5jdXJyZW50PW51bGwsTighMSksWj8uKHtwaGFzZToidXAiLGJ1dHRvbjpLfSl9LFtLLFpdKSxGPUQoKEEpPT57aWYoQS5idXR0b24hPT0wJiZBLnBvaW50ZXJUeXBlPT09Im1vdXNlIilyZXR1cm47QS5wcmV2ZW50RGVmYXVsdCgpLEEuc3RvcFByb3BhZ2F0aW9uKCksQi5jdXJyZW50PUEucG9pbnRlcklkO3RyeXtBLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoQS5wb2ludGVySWQpfWNhdGNoe31OKCEwKSxaPy4oe3BoYXNlOiJkb3duIixidXR0b246S30pfSxbSyxaXSksTD1LLm9uVG9wPzU6MCxrPXomJihZfHxWKSxDPShrP0suaG92ZXIueDowKSoxMDAsUD0oaz9LLmhvdmVyLnk6MCkqMTAwLHk9ViYmSy5pbWFnZURvd24/Sy5pbWFnZURvd246Sy5pbWFnZSxUPXo/e29uUG9pbnRlckRvd246RixvblBvaW50ZXJVcDpILG9uUG9pbnRlckNhbmNlbDpILG9uUG9pbnRlckVudGVyOigpPT5xKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+e3EoITEpLEgoKX19Ont9O3JldHVybiBRKCJkaXYiLHtyZWY6VSxyb2xlOno/ImJ1dHRvbiI6dm9pZCAwLCJhcmlhLWxhYmVsIjp6P0o2KEsubmFtZSk6dm9pZCAwLCJhcmlhLWhpZGRlbiI6ej92b2lkIDA6ITAsdGl0bGU6ej9KNihLLm5hbWUpOnZvaWQgMCxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4uZzgoJCxLLmZyYW1lLEwpLHRyYW5zZm9ybTpDfHxQP2B0cmFuc2xhdGUoJHtDfSUsICR7UH0lKWA6dm9pZCAwLHRyYW5zaXRpb246InRyYW5zZm9ybSAwLjEycyBlYXNlIixjdXJzb3I6ej8icG9pbnRlciI6dm9pZCAwLHBvaW50ZXJFdmVudHM6ej8iYXV0byI6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIn0sLi4uVCxjaGlsZHJlbjp5JiZRKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOlo2KCQuaWRlbnRpZmllcix5KSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIixzdHlsZTp7b2JqZWN0Rml0OiJmaWxsIixmaWx0ZXI6ViYmIUsuaW1hZ2VEb3duPyJicmlnaHRuZXNzKDEuNCkiOnZvaWQgMCx0cmFuc2l0aW9uOiJmaWx0ZXIgMC4xMnMgZWFzZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfSl9ZnVuY3Rpb24gSjYoJCl7cmV0dXJuICQuc3BsaXQoIi0iKS5tYXAoKEspPT5LLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK0suc2xpY2UoMSkpLmpvaW4oIiAiKX1mdW5jdGlvbiBZSyh7Y2hyb21lOiR9KXtpZighJC5zbGljZXx8ISQuY29ybmVyKXJldHVybiBudWxsO2xldHtib2R5OkssY29ybmVyOkosc2xpY2U6Wn09JCxYPU1hdGgubWF4KEsud2lkdGgtSi53aWR0aCoyLDApLFk9TWF0aC5tYXgoSy5oZWlnaHQtSi5oZWlnaHQqMiwwKSxxPVt7a2V5OiJ0b3AtbGVmdCIsaW1hZ2U6Wi50b3BMZWZ0LHJlY3Q6e3g6Sy54LHk6Sy55LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToidG9wLXJpZ2h0IixpbWFnZTpaLnRvcFJpZ2h0LHJlY3Q6e3g6Sy54K0sud2lkdGgtSi53aWR0aCx5OksueSx3aWR0aDpKLndpZHRoLGhlaWdodDpKLmhlaWdodH19LHtrZXk6ImJvdHRvbS1sZWZ0IixpbWFnZTpaLmJvdHRvbUxlZnQscmVjdDp7eDpLLngseTpLLnkrSy5oZWlnaHQtSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJib3R0b20tcmlnaHQiLGltYWdlOlouYm90dG9tUmlnaHQscmVjdDp7eDpLLngrSy53aWR0aC1KLndpZHRoLHk6Sy55K0suaGVpZ2h0LUouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToidG9wIixpbWFnZTpaLnRvcCxyZWN0Ont4OksueCtKLndpZHRoLHk6Sy55LHdpZHRoOlgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToiYm90dG9tIixpbWFnZTpaLmJvdHRvbSxyZWN0Ont4OksueCtKLndpZHRoLHk6Sy55K0suaGVpZ2h0LUouaGVpZ2h0LHdpZHRoOlgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToibGVmdCIsaW1hZ2U6Wi5sZWZ0LHJlY3Q6e3g6Sy54LHk6Sy55K0ouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0Oll9fSx7a2V5OiJyaWdodCIsaW1hZ2U6Wi5yaWdodCxyZWN0Ont4OksueCtLLndpZHRoLUoud2lkdGgseTpLLnkrSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6WX19XTtyZXR1cm4gUShKMSx7Y2hpbGRyZW46cS5maWx0ZXIoKFYpPT5WLnJlY3Qud2lkdGg+MCYmVi5yZWN0LmhlaWdodD4wKS5tYXAoKFYpPT5RKFE2LHtjaHJvbWU6JCxpbWFnZTpWLmltYWdlLHJlY3Q6Vi5yZWN0LHpJbmRleDoxfSxWLmtleSkpfSl9ZnVuY3Rpb24gUTYoe2Nocm9tZTokLGltYWdlOksscmVjdDpKLHpJbmRleDpafSl7cmV0dXJuIFEoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6WjYoJC5pZGVudGlmaWVyLEspLGNsYXNzTmFtZToiYWJzb2x1dGUgc2VsZWN0LW5vbmUiLHN0eWxlOnsuLi5nOCgkLEosWiksb2JqZWN0Rml0OiJmaWxsIixwb2ludGVyRXZlbnRzOiJub25lIixXZWJraXRVc2VyRHJhZzoibm9uZSJ9fSl9ZnVuY3Rpb24gWjYoJCxLKXtsZXQgSj1gZ3JpZC9hcGkvZGV2aWNla2l0LWNocm9tZT9jaHJvbWU9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9JmltYWdlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KEspfWA7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP2AvJHtKfWA6bTEoSil9ZnVuY3Rpb24gZzgoJCxLLEope3JldHVybntsZWZ0OmYyKEsueCwkLmZyYW1lLndpZHRoKSx0b3A6ZjIoSy55LCQuZnJhbWUuaGVpZ2h0KSx3aWR0aDpmMihLLndpZHRoLCQuZnJhbWUud2lkdGgpLGhlaWdodDpmMihLLmhlaWdodCwkLmZyYW1lLmhlaWdodCksekluZGV4Okp9fWZ1bmN0aW9uIGYyKCQsSyl7cmV0dXJuYCR7JC9LKjEwMH0lYH1mdW5jdGlvbiBYNih7bmFtZTokLHJ1bnRpbWU6SyxjaHJvbWU6SixwbGFjZWhvbGRlckFzc2V0OlosYnVzeTpYLGJ1c3lMYWJlbDpZPSJTdGFydGluZ+KApiIsZXJyb3I6cSxvblN0YXJ0OlZ9KXtsZXQgTj1UMCgkKSxCPXkxW05dLFU9Wj8/bnVsbCxHPVU/bnVsbDpKPz9udWxsLHo9Rz97d2lkdGg6Ry5zY3JlZW4ud2lkdGgsaGVpZ2h0Okcuc2NyZWVuLmhlaWdodH06QjUoTiwkKSxIPU41KE4seiksRj1VP3FLKE4sVS5uYW1lKTpHP0gqRy5mcmFtZS53aWR0aC9HLnNjcmVlbi53aWR0aDpIKkIud2lkdGgvKEIud2lkdGgtMipCLmJlemVsWCksTD1VP3t3aWR0aDpVLndpZHRoLGhlaWdodDpVLmhlaWdodH06Rz97d2lkdGg6Ry5mcmFtZS53aWR0aCxoZWlnaHQ6Ry5mcmFtZS5oZWlnaHR9Ont3aWR0aDpCLndpZHRoLGhlaWdodDpCLmhlaWdodH0saz1gJHtMLndpZHRofSAvICR7TC5oZWlnaHR9YCxDPShMLndpZHRoL0wuaGVpZ2h0KlZLKE4pKS50b0ZpeGVkKDIpLFA9Tj09PSJ2aXNpb24iP1EoTksse30pOlEoR0sse3R5cGU6Tn0pO3JldHVybiBRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC01IG1pbi13LTAgdy1mdWxsIixjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwiLHN0eWxlOnt3aWR0aDpgbWluKDEwMCUsICR7Rn1weCwgJHtDfWR2aClgLG1heFdpZHRoOkYsYXNwZWN0UmF0aW86a30sY2hpbGRyZW46VT9RKEJLLHtuYW1lOlUubmFtZSxmYWxsYmFjazpQfSk6Rz9RKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46UShtMix7Y2hyb21lOkd9KX0pOlB9KSxRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtY2VudGVyIixjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxN3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiR9KSxRKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOltoMihLKSwiIFNpbXVsYXRvciJdfSldfSkscSYmUSgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWRhbmdlciB0ZXh0LVsxMnB4XSBmb250LW1vbm8gbWF4LXctOTAgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOnF9KSxRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6VixkaXNhYmxlZDpYLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNSBweS0yIHJvdW5kZWQtZnVsbCB0ZXh0LVsxNHB4XSBmb250LW1lZGl1bSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke1g/ImJnLXdoaXRlLzggdGV4dC13aGl0ZS81NSBjdXJzb3ItZGVmYXVsdCI6ImJnLXdoaXRlLzEyIHRleHQtd2hpdGUvOTAgaG92ZXI6Ymctd2hpdGUvMTggY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W1gmJlEoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToic2l6ZS0zLjUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8yNSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIixzdHlsZTp7Ym9yZGVyVG9wQ29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45KSJ9fSksWD9ZOiJTdGFydCJdfSldfSl9ZnVuY3Rpb24gcUsoJCxLKXtpZigkPT09IndhdGNoIil7aWYoSy5pbmNsdWRlcygidWx0cmEiKSlyZXR1cm4gMjU1O2lmKEsuaW5jbHVkZXMoIndhdGNoLXNlLSIpfHxLLmluY2x1ZGVzKCJhcHBsZS13YXRjaC1zZS0iKSlyZXR1cm4gMjM4O3JldHVybiAyNTB9aWYoJD09PSJ2aXNpb24iKXJldHVybiAzOTA7aWYoJD09PSJpcGFkIilyZXR1cm4gMzQwO3JldHVybiAyODB9ZnVuY3Rpb24gVksoJCl7aWYoJD09PSJ2aXNpb24iKXJldHVybiAzNDtpZigkPT09ImlwYWQiKXJldHVybiA1MDtpZigkPT09IndhdGNoIilyZXR1cm4gNTY7cmV0dXJuIDUyfWZ1bmN0aW9uIEdLKHt0eXBlOiR9KXtsZXQgSz15MVskXTtyZXR1cm4gUShKMSx7Y2hpbGRyZW46W1EoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0sud2lkdGh9ICR7Sy5oZWlnaHR9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixjaGlsZHJlbjpbUSgiZGVmcyIse2NoaWxkcmVuOlEoImxpbmVhckdyYWRpZW50Iix7aWQ6InBsYWNlaG9sZGVyLXNjcmVlbiIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltRKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNmZhOGU2In0pLFEoInN0b3AiLHtvZmZzZXQ6IjU1JSIsc3RvcENvbG9yOiIjNWI5M2Q2In0pLFEoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzUxODhjZiJ9KV19KX0pLFEoInJlY3QiLHt4OksuYmV6ZWxYLHk6Sy5iZXplbFksd2lkdGg6Sy53aWR0aC0yKksuYmV6ZWxYLGhlaWdodDpLLmhlaWdodC0yKksuYmV6ZWxZLHJ4OksuaW5uZXJSYWRpdXMsZmlsbDoidXJsKCNwbGFjZWhvbGRlci1zY3JlZW4pIn0pXX0pLFEoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpRKF8yLHt0eXBlOiR9KX0pXX0pfWZ1bmN0aW9uIEJLKHtuYW1lOiQsZmFsbGJhY2s6S30pe2xldFtKLFpdPU8oImxvYWRpbmciKTtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbSiE9PSJsb2FkZWQiJiZLLEohPT0iZXJyb3IiJiZRKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOlVLKCQpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUgb2JqZWN0LWNvbnRhaW4iLHN0eWxlOntXZWJraXRVc2VyRHJhZzoibm9uZSJ9LG9uTG9hZDooKT0+WigibG9hZGVkIiksb25FcnJvcjooKT0+WigiZXJyb3IiKX0pXX0pfWZ1bmN0aW9uIE5LKCl7bGV0e3dpZHRoOiQsaGVpZ2h0Okt9PXkxLnZpc2lvbjtyZXR1cm4gUSgic3ZnIix7dmlld0JveDpgMCAwICR7JH0gJHtLfWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsZmlsbDoibm9uZSIsImFyaWEtaGlkZGVuIjohMCxjaGlsZHJlbjpbUSgiZGVmcyIse2NoaWxkcmVuOltRKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbUSgic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzI4MjgyYiJ9KSxRKCJzdG9wIix7b2Zmc2V0OiI1NCUiLHN0b3BDb2xvcjoiIzEyMTIxNCJ9KSxRKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwNzA3MDgifSldfSksUSgibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W1EoInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMzMTM1M2EifSksUSgic3RvcCIse29mZnNldDoiNDglIixzdG9wQ29sb3I6IiMwYTBiMGQifSksUSgic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pLFEoInJhZGlhbEdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1sZW5zIixjeDoiNTAlIixjeToiNDYlIixyOiI2MCUiLGNoaWxkcmVuOltRKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjAyODMyIn0pLFEoInN0b3AiLHtvZmZzZXQ6IjcyJSIsc3RvcENvbG9yOiIjMDkwYTBkIn0pLFEoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KV19KSxRKCJwYXRoIix7ZDoiTTk1IDE3N0M5NSAxMTkgMTQ3IDg2IDIxOCA5MUMyNTcgOTQgMjg2IDExMSAzMjAgMTExQzM1NCAxMTEgMzgzIDk0IDQyMiA5MUM0OTMgODYgNTQ1IDExOSA1NDUgMTc3VjIyMkM1NDUgMjc4IDUwMSAzMTEgNDQzIDMxMEMzOTggMzA5IDM3MSAyODYgMzQ1IDI2OEMzMjkgMjU3IDMxMSAyNTcgMjk1IDI2OEMyNjkgMjg2IDI0MiAzMDkgMTk3IDMxMEMxMzkgMzExIDk1IDI3OCA5NSAyMjJWMTc3WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwpIixzdHJva2U6IiMzZDNkNDIiLHN0cm9rZVdpZHRoOiI3In0pLFEoInBhdGgiLHtkOiJNMTE3IDE4MUMxMTcgMTM0IDE1NyAxMTIgMjIwIDExNkMyNjAgMTE5IDI4NyAxMzYgMzIwIDEzNkMzNTMgMTM2IDM4MCAxMTkgNDIwIDExNkM0ODMgMTEyIDUyMyAxMzQgNTIzIDE4MVYyMTdDNTIzIDI2MyA0ODggMjg3IDQzOSAyODdDMzk5IDI4NyAzNjkgMjY0IDM0NSAyNTBDMzI5IDI0MCAzMTEgMjQwIDI5NSAyNTBDMjcxIDI2NCAyNDEgMjg3IDIwMSAyODdDMTUyIDI4NyAxMTcgMjYzIDExNyAyMTdWMTgxWiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MpIixzdHJva2U6IiMxNzE4MWIiLHN0cm9rZVdpZHRoOiI1In0pLFEoInBhdGgiLHtkOiJNMTQzIDE4NkMxNDUgMTQ4IDE3NiAxMzUgMjI2IDEzOEMyNjQgMTQxIDI4OSAxNTYgMzIwIDE1NkMzNTEgMTU2IDM3NiAxNDEgNDE0IDEzOEM0NjQgMTM1IDQ5NSAxNDggNDk3IDE4NlYyMTNDNDk3IDI1MCA0NjkgMjY2IDQzMiAyNjZDMzk0IDI2NiAzNjkgMjQ2IDM0MyAyMzVDMzI4IDIyOSAzMTIgMjI5IDI5NyAyMzVDMjcxIDI0NiAyNDYgMjY2IDIwOCAyNjZDMTcxIDI2NiAxNDMgMjUwIDE0MyAyMTNWMTg2WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItbGVucykiLHN0cm9rZToiIzI2MmEyZiIsc3Ryb2tlV2lkdGg6IjIifSksUSgicGF0aCIse2Q6Ik0xNTEgMTcxQzE3OSAxNTAgMjE3IDE0NyAyNTEgMTU0TTM4OSAxNTRDNDIzIDE0NyA0NjEgMTUwIDQ4OSAxNzEiLHN0cm9rZToiIzRlNTM1YSIsc3Ryb2tlV2lkdGg6IjMiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pLFEoInBhdGgiLHtkOiJNMjc3IDIzM0MyODkgMjI0IDMwNCAyMTkgMzIwIDIxOUMzMzYgMjE5IDM1MSAyMjQgMzYzIDIzMyIsc3Ryb2tlOiIjM2I0MDQ2IixzdHJva2VXaWR0aDoiNCIsc3Ryb2tlTGluZWNhcDoicm91bmQifSldfSl9ZnVuY3Rpb24gVUsoJCl7bGV0IEs9YGdyaWQvYXBpL2RldmljZS1wbGFjZWhvbGRlci1hc3NldD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWA7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP2AvJHtLfWA6bTEoSyl9ZnVuY3Rpb24gazUoe29wZW46JCx3aWR0aDpLLGNoaWxkcmVuOkosc3R5bGU6WixzaWRlOlg9InJpZ2h0In0pe3JldHVybiBRKCJhc2lkZSIse2NsYXNzTmFtZTpgZml4ZWQgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBiZy1wYW5lbC1iZyB0ZXh0LXdoaXRlLzkwIGJhY2tkcm9wLWJsdXItWzE4cHhdIFtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmXSBbdHJhbnNpdGlvbjp0cmFuc2Zvcm1fMC4yNXNfZWFzZSxvcGFjaXR5XzAuMnNfZWFzZV0gZmxleCBmbGV4LWNvbCAke2B0b3AtMyBib3R0b20tMyAke1g9PT0ibGVmdCI/ImxlZnQtMyI6InJpZ2h0LTMifSByb3VuZGVkLVsxNHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bMF8xMnB4XzQwcHhfcmdiYSgwLDAsMCwwLjU1KV1gfWAsc3R5bGU6e3dpZHRoOkssdHJhbnNmb3JtOiQ/InRyYW5zbGF0ZVgoMCkiOlg9PT0ibGVmdCI/InRyYW5zbGF0ZVgoY2FsYygtMTAwJSAtIDI0cHgpKSI6InRyYW5zbGF0ZVgoY2FsYygxMDAlICsgMjRweCkpIixvcGFjaXR5OiQ/MTowLHBvaW50ZXJFdmVudHM6JD8iYXV0byI6Im5vbmUiLC4uLlp9LCJhcmlhLWhpZGRlbiI6ISQsY2hpbGRyZW46Sn0pfWZ1bmN0aW9uIEY1KHtjaGlsZHJlbjokLHN0eWxlOkt9KXtyZXR1cm4gUSgiaGVhZGVyIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIuNSBweC0yLjUgcHktMS41IHBsLTMiLHN0eWxlOkssY2hpbGRyZW46JH0pfWZ1bmN0aW9uIFk2KHtjaGlsZHJlbjokfSl7cmV0dXJuIFEoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBwMih7b25DbGljazokLGFyaWFMYWJlbDpLPSJDbG9zZSBwYW5lbCIsdGl0bGU6SixpY29uU2l6ZTpaPTE2fSl7cmV0dXJuIFEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazokLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOkssdGl0bGU6SixjaGlsZHJlbjpRKEIwLHtzaXplOlosc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gcTYoJCxLKXtsZXRbSixaXT1PKG51bGwpO3JldHVybiBFKCgpPT57aWYoIUt8fCEkKXJldHVybjtsZXQgWD0hMSxZPWFzeW5jKCk9Pnt0cnl7bGV0IE49YXdhaXQoYXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoIVgpWihOKX1jYXRjaHt9fTtZKCk7bGV0IHE9c2V0SW50ZXJ2YWwoWSw1MDAwKTtyZXR1cm4oKT0+e1g9ITAsY2xlYXJJbnRlcnZhbChxKX19LFskLEtdKSxKfWZ1bmN0aW9uIFY2KHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOkssYXZhaWxhYmxlQnl0ZXM6Six0b3RhbEJ5dGVzOloscnVubmluZ1NpbXVsYXRvcnM6WH09JCxZPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLUovWikpLHE9WCtLLFY9Sz09PTA/IiNlNjYiOks8PTE/IiNlOWExM2IiOiIjM2IzIixOPVk+MC45PyIjZTY2IjpZPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBtYXgtdy1mdWxsIG1pbi13LTAgZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIGdhcC0xLjUgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHB4LTIgcHktWzNweF0gcm91bmRlZC1mdWxsIGJnLVsjMTAxMDEwXSBib3JkZXIgYm9yZGVyLVsjMjIyXSBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC13aGl0ZS83MCBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLVszcHhdIHNocmluay0wIixzdHlsZTp7YmFja2dyb3VuZDpWfX0pLFEoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgdHJ1bmNhdGUiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2hpbGRyZW46W1gsIi8iLHEsIiBzaW1zIl19KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiIMK3ICJ9KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjpbJDYoSiksIiBmcmVlIl19KV19KSxRKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im1sLTAuNSB3LTcgaC1bM3B4XSBzaHJpbmstMCBiZy1bIzFjMWMxY10gcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4gaW5saW5lLWJsb2NrIixjaGlsZHJlbjpRKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBoLWZ1bGwgdHJhbnNpdGlvbi1bd2lkdGgsYmFja2dyb3VuZF0gZHVyYXRpb24tMzAwIGVhc2Utb3V0IixzdHlsZTp7d2lkdGg6YCR7KFkqMTAwKS50b0ZpeGVkKDEpfSVgLGJhY2tncm91bmQ6Tn19KX0pXX0pfWZ1bmN0aW9uIEc2KHtkZXZpY2U6JCxhY3RpdmU6SyxzdGFydGluZzpKLHNodXR0aW5nRG93bjpaLG9uU2VsZWN0Olgsb25TaHV0ZG93bjpZfSl7bGV0IHE9JC5oZWxwZXIsVj0kLnN0YXRlPT09IkJvb3RlZCIsTj1UMCgkLm5hbWUpLEI9L2R1by9pLnRlc3QoJC5uYW1lKXx8QXJyYXkuaXNBcnJheSgkLmRpc3BsYXlzKSYmJC5kaXNwbGF5cy5sZW5ndGg+MSxVPUs2KCQucnVudGltZSksRz1xPyJTdHJlYW1pbmciOko/Vj8iU3RhcnRpbmfigKYiOiJCb290aW5n4oCmIjpaPyJTaHV0dGluZyBkb3du4oCmIjpWPyJCb290ZWQiOm51bGwsej1xPyIjMzRkMzk5IjpWPyIjZTlhMTNiIjpudWxsLEg9cXx8VixGPXE/Sz8iYmctWyMyNjM2NGNdIjoiYmctWyMyMDJiM2FdIjpLPyJiZy13aGl0ZS8xNSI6ImJnLXdoaXRlLzYiLEw9cT8idGV4dC1bI2QyZTdmZl0iOks/InRleHQtd2hpdGUvOTAiOiJ0ZXh0LXdoaXRlLzU1IjtyZXR1cm4gUSgiZGl2Iix7cm9sZToiYnV0dG9uIix0YWJJbmRleDowLCJhcmlhLXByZXNzZWQiOkssb25DbGljazpYLG9uS2V5RG93bjooayk9PntpZihrLmtleT09PSJFbnRlciJ8fGsua2V5PT09IiAiKWsucHJldmVudERlZmF1bHQoKSxYKCl9LGNsYXNzTmFtZTpgZ3JvdXAgcmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSBweC0yIHB5LTEuNSByb3VuZGVkLWxnIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdICR7Sz8iYmctd2hpdGUvMTAgdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvOTAgaG92ZXI6Ymctd2hpdGUvOCJ9YCxjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOmByZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gJHtGfWAsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6TCxjaGlsZHJlbjpRKHcyLHt0eXBlOk4sZHVvOkIsc2NyZWVuT246Qm9vbGVhbihxKX0pfSkseiYmIXEmJlEoInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wLjUgcmlnaHQtMC41IHNpemUtMS41IHJvdW5kZWQtZnVsbCByaW5nLTIgcmluZy1bIzFjMWMxZV0iLHN0eWxlOntiYWNrZ3JvdW5kOnp9fSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSIsY2hpbGRyZW46W1EoImRpdiIse2NsYXNzTmFtZToidHJ1bmNhdGUgdGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCBsZWFkaW5nLXRpZ2h0IixjaGlsZHJlbjokLm5hbWV9KSxHJiZRKCJkaXYiLHtjbGFzc05hbWU6YHRydW5jYXRlIHRleHQtWzExcHhdIGxlYWRpbmctdGlnaHQgJHtxPyJ0ZXh0LVsjMzRkMzk5XSI6Sz8idGV4dC13aGl0ZS83NSI6InRleHQtd2hpdGUvNDUifWAsY2hpbGRyZW46R30pXX0pLFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1yb3ctdHJhaWxpbmctc2xvdCIsY2xhc3NOYW1lOiJyZWxhdGl2ZSBzaHJpbmstMCB3LTggaC02IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIixjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0ZXh0LVsxMXB4XSBmb250LW1vbm8gdGFidWxhci1udW1zIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xMnNdICR7Sz8idGV4dC13aGl0ZS84NSI6InRleHQtd2hpdGUvNDAifSAke0g/Imdyb3VwLWhvdmVyOm9wYWNpdHktMCBncm91cC1mb2N1cy13aXRoaW46b3BhY2l0eS0wIjoiIn1gLGNoaWxkcmVuOlV9KSxIJiZRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHRpdGxlOlo/IlNodXR0aW5nIGRvd27igKYiOiJTaHV0IGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXQgZG93biBzaW11bGF0b3IiLG9uQ2xpY2s6KGspPT57ay5wcmV2ZW50RGVmYXVsdCgpLGsuc3RvcFByb3BhZ2F0aW9uKCksWSgpfSxkaXNhYmxlZDpaLGNsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS01IHJvdW5kZWQtbWQgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGZvY3VzLXZpc2libGU6b3BhY2l0eS0xMDAgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEycyxiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSAke0s/InRleHQtd2hpdGUvODAgaG92ZXI6Ymctd2hpdGUvMjAiOiJ0ZXh0LXdoaXRlLzcwIGhvdmVyOmJnLXdoaXRlLzEyIGhvdmVyOnRleHQtd2hpdGUifWAsY2hpbGRyZW46UShCMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyLjJ9KX0pXX0pXX0pfXZhciBBNT0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKSIsaDg9InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc3BhcmVudCkiO3ZhciB6Sz0xMjtmdW5jdGlvbiBCNih7b3BlbjokLG9uQ2xvc2U6Syx3aWR0aDpKLHNpZGU6Wj0icmlnaHQiLGRldmljZXM6WCx0b3RhbDpZPTAsaGFzTW9yZTpxPSExLG9uTG9hZE1vcmU6VixvbkxvYWRBbGw6TixvblJlc2V0UGFnZTpCLHNlbGVjdGVkVWRpZDpVLG9uU2VsZWN0Okcsc3RhcnRpbmc6eixzaHV0dGluZ0Rvd246SCxvblNodXRkb3duOkZ9KXtsZXQgaz0odHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOndpbmRvdy5fX1NJTV9QUkVWSUVXX18pPy5ncmlkTWVtb3J5RW5kcG9pbnQ/Pyh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6bTEoImdyaWQvYXBpL21lbW9yeSIpKSxDPXE2KGssJCksW1AseV09TygiIiksVD1SMSgoKT0+e2xldCB2PVAudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoIXZ8fCFYKXJldHVybiBYO3JldHVybiBYLmZpbHRlcigoaik9PmoubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHYpfHxoMihqLnJ1bnRpbWUpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModikpfSxbWCxQXSksQT1JKCExKTtFKCgpPT57bGV0IHY9ISFQLnRyaW0oKTtpZih2JiZxKU4/LigpO2Vsc2UgaWYoIXYmJkEuY3VycmVudClCPy4oKTtBLmN1cnJlbnQ9dn0sW1AscSxOLEJdKTtsZXQgdz1JKG51bGwpO3JldHVybiBRKGs1LHtvcGVuOiQsd2lkdGg6SixzaWRlOlosc3R5bGU6e2JhY2tncm91bmRDb2xvcjpBNX0sY2hpbGRyZW46W1EoRjUse3N0eWxlOntqdXN0aWZ5Q29udGVudDoiZmxleC1zdGFydCIscGFkZGluZ0xlZnQ6MTYscGFkZGluZ1RvcDoxNixnYXA6NH0sY2hpbGRyZW46W1EoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpLLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCB0ZXh0LVsjOGU4ZTkzXSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6IkNsb3NlIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6ITAsdGl0bGU6IkRldmljZXMiLGNoaWxkcmVuOlEoRDAse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksUShqMix7fSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJweC00IHBiLTIgcHQtMC41IHNocmluay0wIixjaGlsZHJlbjpRKCJsYWJlbCIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMi41IGgtOCByb3VuZGVkLWxnIGJnLXdoaXRlLzYgZm9jdXMtd2l0aGluOmJnLXdoaXRlLzEwIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdIixjaGlsZHJlbjpbUShkNSx7c2l6ZToxNCxzdHJva2VXaWR0aDoyLGNsYXNzTmFtZToidGV4dC13aGl0ZS80MCBzaHJpbmstMCJ9KSxRKCJpbnB1dCIse3ZhbHVlOlAsb25DaGFuZ2U6KHYpPT55KHYudGFyZ2V0LnZhbHVlKSxwbGFjZWhvbGRlcjoiU2VhcmNoIixjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIG91dGxpbmUtbm9uZSB0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzkwIHBsYWNlaG9sZGVyOnRleHQtd2hpdGUvNDAifSksUCYmUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNlYXJjaCIsb25DbGljazooKT0+eSgiIiksY2xhc3NOYW1lOiJzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTQgcm91bmRlZC1mdWxsIGJnLXdoaXRlLzE1IHRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMjUiLGNoaWxkcmVuOlEoQjAse3NpemU6OSxzdHJva2VXaWR0aDozfSl9KV19KX0pLFEoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgZmxleC0xIG1pbi1oLTAiLGNoaWxkcmVuOltRKCJkaXYiLHtyZWY6dyxvblNjcm9sbDooKT0+e2lmKFAudHJpbSgpfHwhcXx8IVYpcmV0dXJuO2xldCB2PXcuY3VycmVudDtpZighdilyZXR1cm47aWYodi5zY3JvbGxUb3Ardi5jbGllbnRIZWlnaHQ+PXYuc2Nyb2xsSGVpZ2h0LTI0MClWKCl9LGNsYXNzTmFtZToiaC1mdWxsIG1pbi1oLTAgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpUPT09bnVsbD9RKExLLHt9KTpULmxlbmd0aD09PTA/USgiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTYgdGV4dC13aGl0ZS80MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46UD8iTm8gbWF0Y2hpbmcgc2ltdWxhdG9ycy4iOiJObyBpT1Mgc2ltdWxhdG9ycyBhdmFpbGFibGUuIn0pOlEoSjEse2NoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6InB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsY2hpbGRyZW46VC5tYXAoKHYpPT5RKEc2LHtkZXZpY2U6dixhY3RpdmU6di5kZXZpY2U9PT1VLHN0YXJ0aW5nOiEhelt2LmRldmljZV0sc2h1dHRpbmdEb3duOiEhSFt2LmRldmljZV0sb25TZWxlY3Q6KCk9Pkcodi5kZXZpY2UpLG9uU2h1dGRvd246KCk9PkYodi5kZXZpY2UpfSx2LmRldmljZSkpfSksIVAmJnEmJlEoImRpdiIse2NsYXNzTmFtZToicHgtMiBweS0yIHRleHQtWzExcHhdIHRleHQtd2hpdGUvMzUgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOlg/YCR7WC5sZW5ndGh9IG9mICR7WX1gOm51bGx9KV19KX0pLFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXRvcC1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAke0E1fSAwJSwgJHtoOH0gMTAwJSlgfX0pLFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LWJvdHRvbS1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCAke0E1fSAwJSwgJHtoOH0gMTAwJSlgfX0pXX0pLFEoQ0sse3JlcG9ydDpDfSldfSl9ZnVuY3Rpb24gTEsoKXtyZXR1cm4gUShKMSx7Y2hpbGRyZW46W1EoImRpdiIse2NsYXNzTmFtZToicHgtMiBwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIixjaGlsZHJlbjoiQXZhaWxhYmxlIn0pLFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXNrZWxldG9uIixjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIiwiYXJpYS1sYWJlbCI6IkxvYWRpbmcgc2ltdWxhdG9ycyIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOkFycmF5LmZyb20oe2xlbmd0aDp6S30sKCQsSyk9PlEoSEsse2luZGV4Okt9LEspKX0pXX0pfWZ1bmN0aW9uIEhLKHtpbmRleDokfSl7bGV0IEs9WyJ3LVs2MiVdIiwidy1bNzQlXSIsInctWzU4JV0iLCJ3LVs3MCVdIl1bJCU0XSxKPVsidy1bNDIlXSIsInctWzM2JV0iLCJ3LVs0OCVdIiwidy1bMzIlXSJdWyQlNF0sWj1bInctNyIsInctNiIsInctOCJdWyQlM107cmV0dXJuIFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1yb3ctc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSBweC0yIHB5LTEuNSByb3VuZGVkLWxnIHNlbGVjdC1ub25lIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGUvNiIsY2hpbGRyZW46USgic3BhbiIse2NsYXNzTmFtZToic2l6ZS00IHJvdW5kZWQtWzRweF0gYmctd2hpdGUvWzAuMTJdIn0pfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOmBoLTMgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjEyXSAke0t9YH0pLFEoInNwYW4iLHtjbGFzc05hbWU6YGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtKfWB9KV19KSxRKCJzcGFuIix7Y2xhc3NOYW1lOmBzaHJpbmstMCBoLTIuNSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdICR7Wn1gfSldfSl9ZnVuY3Rpb24gQ0soe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlczw9MClyZXR1cm4gbnVsbDtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBweC0zIHB5LTIgZmxleCBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46UShWNix7cmVwb3J0OiR9KX0pfWZ1bmN0aW9uIHUyKHtwYW5lbFdpZHRoOiQsdmlzaWJsZTpLLG9uUG9pbnRlckRvd246SixhcmlhTGFiZWw6WixzaWRlOlg9InJpZ2h0In0pe2xldFtZLHFdPU8oITEpLFtWLE5dPU8oITEpLEI9WXx8VixVPTEyKyQtOTtyZXR1cm4gUSgiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS1sYWJlbCI6WiwiYXJpYS1oaWRkZW4iOiFLLG9uUG9pbnRlckRvd246KEcpPT57TighMCksSihHKX0sb25Qb2ludGVyVXA6KCk9Pk4oITEpLG9uUG9pbnRlckNhbmNlbDooKT0+TighMSksb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT5xKCExKSxjbGFzc05hbWU6YGZpeGVkIHRvcC0zIGJvdHRvbS0zIHctNCB6LTM2IGN1cnNvci1jb2wtcmVzaXplIHRvdWNoLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCAke0s/Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8iOiJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSJ9YCxzdHlsZTpYPT09ImxlZnQiP3tsZWZ0OlV9OntyaWdodDpVfSxjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCBsZWZ0LTEvMiB3LXB4IHBvaW50ZXItZXZlbnRzLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTE1MCAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn1gLHN0eWxlOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTAuNXB4KSIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSAzMCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCkgNzAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpIn19KSxRKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgdy0xIGgtNyByb3VuZGVkLXhzIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB6LTEgcG9pbnRlci1ldmVudHMtbm9uZSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsYmFja2dyb3VuZF8wLjE1c19lYXNlXSAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn0gJHtWPyJiZy1bIzlhOWE5ZV0iOiJiZy1bIzZlNmU3Ml0ifWB9KV19KX1mdW5jdGlvbiBONigpe2xldFskLEtdPU8oKCk9PnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYT8uKCIocHJlZmVycy1jb250cmFzdDogbW9yZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiBFKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0IEo9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLFo9KCk9PksoSi5tYXRjaGVzKTtyZXR1cm4gWigpLEouYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKSwoKT0+Si5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopfSxbXSksJH12YXIgVTY9MjgwO2Z1bmN0aW9uIGY4KHtpc1Jlc2l6aW5nOiQsaXNJbmVydGlhOksscmVkdWNlZE1vdGlvbjpKfSl7aWYoSilyZXR1cm4ibm9uZSI7cmV0dXJuICR8fEs/IndpZHRoIDcwbXMgbGluZWFyIjoid2lkdGggMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpLCBhc3BlY3QtcmF0aW8gMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIn12YXIgejY9InBhZGRpbmctbGVmdCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSksIHBhZGRpbmctcmlnaHQgMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIixMNj0iY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkiLGQyPSJjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIixINj0ibGluZWFyKDAsIDAuMzIgOSUsIDAuNjIgMTglLCAwLjg1IDI3JSwgMS4wMSAzNiUsIDEuMDcgNDUlLCAxLjA1IDU2JSwgMS4wMiA3MCUsIDEpIixDNj0iMC4xNnMiLGs2PSIwLjJzIixGNj01LEE2PXtpZGxlOjEsaG92ZXI6MS4wOSxkcmFnOjEuMTJ9LE82PXtpZGxlOiIjNjg2ZTc4Iixob3ZlcjoiI2I3YmJjMiIsZHJhZzoiI2Y0ZjZmYSJ9LE02PXtpZGxlOjIuNjUsaG92ZXI6NC4xNSxkcmFnOjQuNjV9LFA2PXtpZGxlOjAuMzgsaG92ZXI6MC44NixkcmFnOjF9LGwyPW51bGw7ZnVuY3Rpb24gVzYoKXtpZihsMiE9bnVsbClyZXR1cm4gbDI7aWYodHlwZW9mIENTUz4idSJ8fHR5cGVvZiBDU1Muc3VwcG9ydHMhPT0iZnVuY3Rpb24iKXJldHVybiExO3JldHVybiBsMj1DU1Muc3VwcG9ydHMoImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJsaW5lYXIoMCwgMSkiKSxsMn12YXIga0s9NDAsXzY9MTQsRDY9MjQwLFQ2PTMwLHc2PTAuMTUsRks9ODAsRTY9MTUwLEk2PTI1MCxtOD0ic2VydmUtc2ltOnNpbXVsYXRvci1mcmFtZS1zY2FsZSI7ZnVuY3Rpb24gTzUoJCxLLEosWil7bGV0IFg9JCozLFk9Sz4wP01hdGgubWF4KDE4MCxLLTQ4KTpYLHE9Sj4wJiZOdW1iZXIuaXNGaW5pdGUoWikmJlo+MD9NYXRoLm1heCgxODAsKEotMTM2KSpaKTpYO3JldHVybiBNYXRoLm1heCgxODAsTWF0aC5taW4oWCxZLHEpKX1mdW5jdGlvbiAkNSgkLEssSixaLFgpe2xldCBZPU81KEssSixaLFgpLHE9TWF0aC5taW4oMjgwLFkpO3JldHVybiBNYXRoLm1pbihZLE1hdGgubWF4KHEsJCkpfWZ1bmN0aW9uIGI2KCQsSyxKLFosWCl7bGV0IFk9TnVtYmVyLmlzRmluaXRlKFgpPyQqWDokO3JldHVybiAkNShZLCQsSyxKLFopfWZ1bmN0aW9uIGMyKCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuICQ7bGV0IEs9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5tYXgoMSx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk6MTtyZXR1cm4gTWF0aC5yb3VuZCgkKkspL0t9ZnVuY3Rpb24gcDgoJCxLKXtpZigkPD0wfHxLPD0wKXJldHVybiAwO2xldCBKPTAuNTUsWj0kKksqSi8oSytKKiQpO3JldHVybiBNYXRoLm1pbihrSyxaKX1mdW5jdGlvbiB5NigkLEssSil7bGV0IFo9JCxYPUo7Zm9yKGxldCBZIG9mIEspe2xldCBxPU1hdGguYWJzKCQtWSk7aWYocTxYKVo9WSxYPXF9cmV0dXJuIFp9ZnVuY3Rpb24gUzYoJCl7bGV0e2Zyb206Syx0bzpKLHZlbG9jaXR5Olosc3RpZmZuZXNzOlgsZGFtcGluZzpZLG9uVXBkYXRlOnEsb25Db21wbGV0ZTpWfT0kLE49MC40LEI9MC4wMzMzMzMzMzMzMzMzMzMzMyxVPUssRz1aLHo9cGVyZm9ybWFuY2Uubm93KCksSD0wLEY9ITEsTD0oayk9PntpZihGKXJldHVybjtsZXQgQz1NYXRoLm1pbigoay16KS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO3o9aztsZXQgUD0tWCooVS1KKS1ZKkc7aWYoRys9UCpDLFUrPUcqQyxNYXRoLmFicyhHKTwwLjQmJk1hdGguYWJzKFUtSik8MC40KXtxKEopLFY/LigpO3JldHVybn1xKFUpLEg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpfTtyZXR1cm4gSD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksKCk9PntpZihGPSEwLEgpY2FuY2VsQW5pbWF0aW9uRnJhbWUoSCl9fWZ1bmN0aW9uIHg2KCQpe2lmKCQubGVuZ3RoPDIpcmV0dXJuIDA7bGV0IEs9JFskLmxlbmd0aC0xXSxKPSRbMF07Zm9yKGxldCBYPSQubGVuZ3RoLTE7WD49MDtYLS0paWYoSy50LSRbWF0udD49Rkspe0o9JFtYXTticmVha31sZXQgWj0oSy50LUoudCkvMTAwMDtyZXR1cm4gWj4wPyhLLngtSi54KS9aOjB9dmFyIFI2PSJkcm9wLXNoYWRvdygwIDAuNXB4IDFweCByZ2JhKDAsMCwwLDAuMSkpIGRyb3Atc2hhZG93KDAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMTMpKSI7ZnVuY3Rpb24gQUsoe2FyYzokLHBoYXNlOksscmVkdWNlZE1vdGlvbjpKLGhpZ2hDb250cmFzdDpaLGZvY3VzVmlzaWJsZTpYfSl7bGV0IFk9SyE9PSJpZGxlIixxPVo/MS4xMjoxLFY9Sj8xOkE2W0tdLE49TTZbS10qcSxCPVo/MTpQNltLXSxVPVk/QzY6azYsRz1ZP0w2OmQyLHo9WSYmVzYoKT9INjpHLEg9Sj8ibm9uZSI6YHRyYW5zZm9ybSAke1V9ICR7en1gLEY9Sj8ibm9uZSI6YHN0cm9rZSAke1V9ICR7R30sIHN0cm9rZS13aWR0aCAke1V9ICR7R31gLEw9JC52aWV3Qm94U2l6ZSxrPSQuZCxDPXt0cmFuc2Zvcm06YHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgke1Z9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246SCx3aWxsQ2hhbmdlOko/dm9pZCAwOiJ0cmFuc2Zvcm0iLGJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIixXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiJ9O3JldHVybiBRKCJzdmciLHt3aWR0aDpMLGhlaWdodDpMLHZpZXdCb3g6YDAgMCAke0x9ICR7TH1gLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsc2hhcGVSZW5kZXJpbmc6Imdlb21ldHJpY1ByZWNpc2lvbiIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIixvdmVyZmxvdzoidmlzaWJsZSIsY3Vyc29yOiJpbmhlcml0Iix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltRKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbUSgicGF0aCIse2Q6ayxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMTAsIDEzMiwgMjU1LCAwLjk1KSIsc3Ryb2tlV2lkdGg6KEY2KjIrNikqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Olg/MC45NTowLHRyYW5zaXRpb246Sj8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtkMn1gLGZpbHRlcjoiZHJvcC1zaGFkb3coMCAwIDJweCByZ2JhKDEwLDEzMiwyNTUsMC41NSkpIGRyb3Atc2hhZG93KDAgMCA0cHggcmdiYSgxMCwxMzIsMjU1LDAuMzIpKSJ9fSksUSgicGF0aCIse2Q6ayxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkiLHN0cm9rZVdpZHRoOjEuNSpxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6WD8wLjc6MCx0cmFuc2l0aW9uOko/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7ZDJ9YH19KV19KSxRKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6QyxjaGlsZHJlbjpRKCJnIix7c3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbUSgicGF0aCIse2Q6ayxzdHJva2U6IiMzNDM2M2IiLHN0cm9rZVdpZHRoOk4rMi4yKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpNYXRoLm1pbigxLEIrMC4wOCksdHJhbnNpdGlvbjpgJHtGfSwgb3BhY2l0eSAke1V9ICR7R31gLGZpbHRlcjpSNn19KSxRKCJwYXRoIix7ZDprLHN0cm9rZTpPNltLXSxzdHJva2VXaWR0aDpOLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6Qix0cmFuc2l0aW9uOmAke0Z9LCBvcGFjaXR5ICR7VX0gJHtHfWAsZmlsdGVyOlI2fX0pXX0pfSldfSl9ZnVuY3Rpb24gdjYoe3NpbXVsYXRvclJlc2l6ZTokLGRldmljZVR5cGU6SyxzdHJlYW1Db25maWc6Sixjb250YWluZXJXaWR0aDpaLGNvbnRhaW5lckhlaWdodDpYfSl7bGV0IFk9SDUoKSxxPU42KCksW1YsTl09TyghMSksQj1SMSgoKT0+TTgoe3R5cGU6Syxjb25maWc6Sj8/bnVsbCxjb250YWluZXJXaWR0aDpaLGNvbnRhaW5lckhlaWdodDpYfSksW0ssSixaLFhdKSxVPSQuaXNSZXNpemluZ3x8JC5pc0luZXJ0aWE/ImRyYWciOiQuaGFuZGxlSG92ZXJlZD8iaG92ZXIiOiJpZGxlIjtyZXR1cm4gUSgiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1sYWJlbCI6IlJlc2l6ZSBzaW11bGF0b3Igd2lkdGguIERyYWcgdGhlIGNvcm5lciBvciB1c2UgTGVmdCBhbmQgUmlnaHQgQXJyb3cga2V5czsgaG9sZCBTaGlmdCBmb3IgbGFyZ2VyIHN0ZXBzLiIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtdmFsdWVtaW4iOk1hdGgucm91bmQoJC5taW5XaWR0aCksImFyaWEtdmFsdWVtYXgiOk1hdGgucm91bmQoJC5tYXhXaWR0aCksImFyaWEtdmFsdWVub3ciOk1hdGgucm91bmQoJC5jb21taXR0ZWRXaWR0aCksdGFiSW5kZXg6MCxyZWY6JC5oYW5kbGVSZWYsb25LZXlEb3duOiQub25LZXlEb3duLG9uUG9pbnRlckRvd246JC5vblBvaW50ZXJEb3duLG9uUG9pbnRlck1vdmU6JC5vblBvaW50ZXJNb3ZlLG9uUG9pbnRlclVwOiQub25Qb2ludGVyRW5kLG9uUG9pbnRlckNhbmNlbDokLm9uUG9pbnRlckVuZCxvbkxvc3RQb2ludGVyQ2FwdHVyZTokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJFbnRlcjooKT0+JC5zZXRIYW5kbGVIb3ZlcmVkKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+JC5zZXRIYW5kbGVIb3ZlcmVkKCExKSxvbkZvY3VzOihHKT0+e04oRy5jdXJyZW50VGFyZ2V0Lm1hdGNoZXM/LigiOmZvY3VzLXZpc2libGUiKT8/ITEpfSxvbkJsdXI6KCk9Pk4oITEpLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHJpZ2h0Oi0xNCxib3R0b206LTE0LHdpZHRoOjYwLGhlaWdodDo2MCxib3JkZXI6Im5vbmUiLHBhZGRpbmc6MCxtYXJnaW46MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJmbGV4LWVuZCIsanVzdGlmeUNvbnRlbnQ6ImZsZXgtZW5kIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsY3Vyc29yOiJud3NlLXJlc2l6ZSIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6ImF1dG8iLG91dGxpbmU6Im5vbmUiLHpJbmRleDoyNSxXZWJraXRUYXBIaWdobGlnaHRDb2xvcjoidHJhbnNwYXJlbnQifSxjaGlsZHJlbjpRKEFLLHthcmM6QixwaGFzZTpVLHJlZHVjZWRNb3Rpb246WSxoaWdoQ29udHJhc3Q6cSxmb2N1c1Zpc2libGU6Vn0pfSl9ZnVuY3Rpb24gT0soJCl7aWYoISR8fHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuO2xldCBLPWRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO0oudHlwZT0idGV4dC9jc3MiLEsuYXBwZW5kQ2hpbGQoSiksSi5zdHlsZVNoZWV0P0ouc3R5bGVTaGVldC5jc3NUZXh0PSQ6Si5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgkKSl9dmFyIE1LPSgkKT0+e3N3aXRjaCgkKXtjYXNlInN1Y2Nlc3MiOnJldHVybiBfSztjYXNlImluZm8iOnJldHVybiBUSztjYXNlIndhcm5pbmciOnJldHVybiBESztjYXNlImVycm9yIjpyZXR1cm4gd0s7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LFBLPUFycmF5KDEyKS5maWxsKDApLFdLPSh7dmlzaWJsZTokLGNsYXNzTmFtZTpLfSk9PntyZXR1cm4gaC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WyJzb25uZXItbG9hZGluZy13cmFwcGVyIixLXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpLCJkYXRhLXZpc2libGUiOiR9LGguY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItc3Bpbm5lciJ9LFBLLm1hcCgoSixaKT0+aC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InNvbm5lci1sb2FkaW5nLWJhciIsa2V5OmBzcGlubmVyLWJhci0ke1p9YH0pKSkpfSxfSz1oLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGguY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMy44NTctOS44MDlhLjc1Ljc1IDAgMDAtMS4yMTQtLjg4MmwtMy40ODMgNC43OS0xLjg4LTEuODhhLjc1Ljc1IDAgMTAtMS4wNiAxLjA2MWwyLjUgMi41YS43NS43NSAwIDAwMS4xMzctLjA4OWw0LTUuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxESz1oLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGguY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNOS40MDEgMy4wMDNjMS4xNTUtMiA0LjA0My0yIDUuMTk3IDBsNy4zNTUgMTIuNzQ4YzEuMTU0IDItLjI5IDQuNS0yLjU5OSA0LjVINC42NDVjLTIuMzA5IDAtMy43NTItMi41LTIuNTk4LTQuNUw5LjQgMy4wMDN6TTEyIDguMjVhLjc1Ljc1IDAgMDEuNzUuNzV2My43NWEuNzUuNzUgMCAwMS0xLjUgMFY5YS43NS43NSAwIDAxLjc1LS43NXptMCA4LjI1YS43NS43NSAwIDEwMC0xLjUuNzUuNzUgMCAwMDAgMS41eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLFRLPWguY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0saC5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTctNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTkgOWEuNzUuNzUgMCAwMDAgMS41aC4yNTNhLjI1LjI1IDAgMDEuMjQ0LjMwNGwtLjQ1OSAyLjA2NkExLjc1IDEuNzUgMCAwMDEwLjc0NyAxNUgxMWEuNzUuNzUgMCAwMDAtMS41aC0uMjUzYS4yNS4yNSAwIDAxLS4yNDQtLjMwNGwuNDU5LTIuMDY2QTEuNzUgMS43NSAwIDAwOS4yNTMgOUg5eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLHdLPWguY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0saC5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTgtNWEuNzUuNzUgMCAwMS43NS43NXY0LjVhLjc1Ljc1IDAgMDEtMS41IDB2LTQuNUEuNzUuNzUgMCAwMTEwIDV6bTAgMTBhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksRUs9aC5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOiIxMiIsaGVpZ2h0OiIxMiIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9LGguY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksaC5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KSksSUs9KCk9PntsZXRbJCxLXT1oLnVzZVN0YXRlKGRvY3VtZW50LmhpZGRlbik7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57bGV0IEo9KCk9PntLKGRvY3VtZW50LmhpZGRlbil9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixKKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEopfSxbXSksJH0sdTg9MTtjbGFzcyBoNntjb25zdHJ1Y3Rvcigpe3RoaXMuc3Vic2NyaWJlPSgkKT0+e3JldHVybiB0aGlzLnN1YnNjcmliZXJzLnB1c2goJCksKCk9PntsZXQgSz10aGlzLnN1YnNjcmliZXJzLmluZGV4T2YoJCk7dGhpcy5zdWJzY3JpYmVycy5zcGxpY2UoSywxKX19LHRoaXMucHVibGlzaD0oJCk9Pnt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKEspPT5LKCQpKX0sdGhpcy5hZGRUb2FzdD0oJCk9Pnt0aGlzLnB1Ymxpc2goJCksdGhpcy50b2FzdHM9Wy4uLnRoaXMudG9hc3RzLCRdfSx0aGlzLmNyZWF0ZT0oJCk9Pnt2YXIgSztsZXR7bWVzc2FnZTpKLC4uLlp9PSQsWD10eXBlb2YoJD09bnVsbD92b2lkIDA6JC5pZCk9PT0ibnVtYmVyInx8KChLPSQuaWQpPT1udWxsP3ZvaWQgMDpLLmxlbmd0aCk+MD8kLmlkOnU4KyssWT10aGlzLnRvYXN0cy5maW5kKChWKT0+e3JldHVybiBWLmlkPT09WH0pLHE9JC5kaXNtaXNzaWJsZT09PXZvaWQgMD8hMDokLmRpc21pc3NpYmxlO2lmKHRoaXMuZGlzbWlzc2VkVG9hc3RzLmhhcyhYKSl0aGlzLmRpc21pc3NlZFRvYXN0cy5kZWxldGUoWCk7aWYoWSl0aGlzLnRvYXN0cz10aGlzLnRvYXN0cy5tYXAoKFYpPT57aWYoVi5pZD09PVgpcmV0dXJuIHRoaXMucHVibGlzaCh7Li4uViwuLi4kLGlkOlgsdGl0bGU6Sn0pLHsuLi5WLC4uLiQsaWQ6WCxkaXNtaXNzaWJsZTpxLHRpdGxlOkp9O3JldHVybiBWfSk7ZWxzZSB0aGlzLmFkZFRvYXN0KHt0aXRsZTpKLC4uLlosZGlzbWlzc2libGU6cSxpZDpYfSk7cmV0dXJuIFh9LHRoaXMuZGlzbWlzcz0oJCk9PntpZigkKXRoaXMuZGlzbWlzc2VkVG9hc3RzLmFkZCgkKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoSyk9Pksoe2lkOiQsZGlzbWlzczohMH0pKSk7ZWxzZSB0aGlzLnRvYXN0cy5mb3JFYWNoKChLKT0+e3RoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoSik9Pkooe2lkOksuaWQsZGlzbWlzczohMH0pKX0pO3JldHVybiAkfSx0aGlzLm1lc3NhZ2U9KCQsSyk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkssbWVzc2FnZTokfSl9LHRoaXMuZXJyb3I9KCQsSyk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkssbWVzc2FnZTokLHR5cGU6ImVycm9yIn0pfSx0aGlzLnN1Y2Nlc3M9KCQsSyk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkssdHlwZToic3VjY2VzcyIsbWVzc2FnZTokfSl9LHRoaXMuaW5mbz0oJCxLKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSyx0eXBlOiJpbmZvIixtZXNzYWdlOiR9KX0sdGhpcy53YXJuaW5nPSgkLEspPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5LLHR5cGU6Indhcm5pbmciLG1lc3NhZ2U6JH0pfSx0aGlzLmxvYWRpbmc9KCQsSyk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkssdHlwZToibG9hZGluZyIsbWVzc2FnZTokfSl9LHRoaXMucHJvbWlzZT0oJCxLKT0+e2lmKCFLKXJldHVybjtsZXQgSj12b2lkIDA7aWYoSy5sb2FkaW5nIT09dm9pZCAwKUo9dGhpcy5jcmVhdGUoey4uLksscHJvbWlzZTokLHR5cGU6ImxvYWRpbmciLG1lc3NhZ2U6Sy5sb2FkaW5nLGRlc2NyaXB0aW9uOnR5cGVvZiBLLmRlc2NyaXB0aW9uIT09ImZ1bmN0aW9uIj9LLmRlc2NyaXB0aW9uOnZvaWQgMH0pO2xldCBaPVByb21pc2UucmVzb2x2ZSgkIGluc3RhbmNlb2YgRnVuY3Rpb24/JCgpOiQpLFg9SiE9PXZvaWQgMCxZLHE9Wi50aGVuKGFzeW5jKE4pPT57aWYoWT1bInJlc29sdmUiLE5dLGguaXNWYWxpZEVsZW1lbnQoTikpWD0hMSx0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJkZWZhdWx0IixtZXNzYWdlOk59KTtlbHNlIGlmKHlLKE4pJiYhTi5vayl7WD0hMTtsZXQgVT10eXBlb2YgSy5lcnJvcj09PSJmdW5jdGlvbiI/YXdhaXQgSy5lcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke04uc3RhdHVzfWApOksuZXJyb3IsRz10eXBlb2YgSy5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSy5kZXNjcmlwdGlvbihgSFRUUCBlcnJvciEgc3RhdHVzOiAke04uc3RhdHVzfWApOksuZGVzY3JpcHRpb24sSD10eXBlb2YgVT09PSJvYmplY3QiJiYhaC5pc1ZhbGlkRWxlbWVudChVKT9VOnttZXNzYWdlOlV9O3RoaXMuY3JlYXRlKHtpZDpKLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpHLC4uLkh9KX1lbHNlIGlmKE4gaW5zdGFuY2VvZiBFcnJvcil7WD0hMTtsZXQgVT10eXBlb2YgSy5lcnJvcj09PSJmdW5jdGlvbiI/YXdhaXQgSy5lcnJvcihOKTpLLmVycm9yLEc9dHlwZW9mIEsuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEsuZGVzY3JpcHRpb24oTik6Sy5kZXNjcmlwdGlvbixIPXR5cGVvZiBVPT09Im9iamVjdCImJiFoLmlzVmFsaWRFbGVtZW50KFUpP1U6e21lc3NhZ2U6VX07dGhpcy5jcmVhdGUoe2lkOkosdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOkcsLi4uSH0pfWVsc2UgaWYoSy5zdWNjZXNzIT09dm9pZCAwKXtYPSExO2xldCBVPXR5cGVvZiBLLnN1Y2Nlc3M9PT0iZnVuY3Rpb24iP2F3YWl0IEsuc3VjY2VzcyhOKTpLLnN1Y2Nlc3MsRz10eXBlb2YgSy5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSy5kZXNjcmlwdGlvbihOKTpLLmRlc2NyaXB0aW9uLEg9dHlwZW9mIFU9PT0ib2JqZWN0IiYmIWguaXNWYWxpZEVsZW1lbnQoVSk/VTp7bWVzc2FnZTpVfTt0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJzdWNjZXNzIixkZXNjcmlwdGlvbjpHLC4uLkh9KX19KS5jYXRjaChhc3luYyhOKT0+e2lmKFk9WyJyZWplY3QiLE5dLEsuZXJyb3IhPT12b2lkIDApe1g9ITE7bGV0IEI9dHlwZW9mIEsuZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IEsuZXJyb3IoTik6Sy5lcnJvcixVPXR5cGVvZiBLLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBLLmRlc2NyaXB0aW9uKE4pOksuZGVzY3JpcHRpb24sej10eXBlb2YgQj09PSJvYmplY3QiJiYhaC5pc1ZhbGlkRWxlbWVudChCKT9COnttZXNzYWdlOkJ9O3RoaXMuY3JlYXRlKHtpZDpKLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpVLC4uLnp9KX19KS5maW5hbGx5KCgpPT57aWYoWCl0aGlzLmRpc21pc3MoSiksSj12b2lkIDA7Sy5maW5hbGx5PT1udWxsfHxLLmZpbmFsbHkuY2FsbChLKX0pLFY9KCk9Pm5ldyBQcm9taXNlKChOLEIpPT5xLnRoZW4oKCk9PllbMF09PT0icmVqZWN0Ij9CKFlbMV0pOk4oWVsxXSkpLmNhdGNoKEIpKTtpZih0eXBlb2YgSiE9PSJzdHJpbmciJiZ0eXBlb2YgSiE9PSJudW1iZXIiKXJldHVybnt1bndyYXA6Vn07ZWxzZSByZXR1cm4gT2JqZWN0LmFzc2lnbihKLHt1bndyYXA6Vn0pfSx0aGlzLmN1c3RvbT0oJCxLKT0+e2xldCBKPShLPT1udWxsP3ZvaWQgMDpLLmlkKXx8dTgrKztyZXR1cm4gdGhpcy5jcmVhdGUoe2pzeDokKEopLGlkOkosLi4uS30pLEp9LHRoaXMuZ2V0QWN0aXZlVG9hc3RzPSgpPT57cmV0dXJuIHRoaXMudG9hc3RzLmZpbHRlcigoJCk9PiF0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoJC5pZCkpfSx0aGlzLnN1YnNjcmliZXJzPVtdLHRoaXMudG9hc3RzPVtdLHRoaXMuZGlzbWlzc2VkVG9hc3RzPW5ldyBTZXR9fXZhciBZMD1uZXcgaDYsYks9KCQsSyk9PntsZXQgSj0oSz09bnVsbD92b2lkIDA6Sy5pZCl8fHU4Kys7cmV0dXJuIFkwLmFkZFRvYXN0KHt0aXRsZTokLC4uLkssaWQ6Sn0pLEp9LHlLPSgkKT0+e3JldHVybiAkJiZ0eXBlb2YgJD09PSJvYmplY3QiJiYib2siaW4gJCYmdHlwZW9mICQub2s9PT0iYm9vbGVhbiImJiJzdGF0dXMiaW4gJCYmdHlwZW9mICQuc3RhdHVzPT09Im51bWJlciJ9LFNLPWJLLHhLPSgpPT5ZMC50b2FzdHMsUks9KCk9PlkwLmdldEFjdGl2ZVRvYXN0cygpLGwwPU9iamVjdC5hc3NpZ24oU0sse3N1Y2Nlc3M6WTAuc3VjY2VzcyxpbmZvOlkwLmluZm8sd2FybmluZzpZMC53YXJuaW5nLGVycm9yOlkwLmVycm9yLGN1c3RvbTpZMC5jdXN0b20sbWVzc2FnZTpZMC5tZXNzYWdlLHByb21pc2U6WTAucHJvbWlzZSxkaXNtaXNzOlkwLmRpc21pc3MsbG9hZGluZzpZMC5sb2FkaW5nfSx7Z2V0SGlzdG9yeTp4SyxnZXRUb2FzdHM6Ukt9KTtPSygiW2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1sdHJdLGh0bWxbZGlyPWx0cl17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDotM3B4Oy0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kOjRweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6LTFweDstLXRvYXN0LXN2Zy1tYXJnaW4tZW5kOjBweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6YXV0bzstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgtMzUlLCAtMzUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF0saHRtbFtkaXI9cnRsXXstLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0OjRweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDotM3B4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydDowcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDotMXB4Oy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydDowOy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQ6YXV0bzstLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydDp1bnNldDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm06dHJhbnNsYXRlKDM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LWZhbWlseTp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sSGVsdmV0aWNhIE5ldWUsQXJpYWwsTm90byBTYW5zLHNhbnMtc2VyaWYsQXBwbGUgQ29sb3IgRW1vamksU2Vnb2UgVUkgRW1vamksU2Vnb2UgVUkgU3ltYm9sLE5vdG8gQ29sb3IgRW1vamk7LS1ncmF5MTpoc2woMCwgMCUsIDk5JSk7LS1ncmF5Mjpoc2woMCwgMCUsIDk3LjMlKTstLWdyYXkzOmhzbCgwLCAwJSwgOTUuMSUpOy0tZ3JheTQ6aHNsKDAsIDAlLCA5MyUpOy0tZ3JheTU6aHNsKDAsIDAlLCA5MC45JSk7LS1ncmF5Njpoc2woMCwgMCUsIDg4LjclKTstLWdyYXk3OmhzbCgwLCAwJSwgODUuOCUpOy0tZ3JheTg6aHNsKDAsIDAlLCA3OCUpOy0tZ3JheTk6aHNsKDAsIDAlLCA1Ni4xJSk7LS1ncmF5MTA6aHNsKDAsIDAlLCA1Mi4zJSk7LS1ncmF5MTE6aHNsKDAsIDAlLCA0My41JSk7LS1ncmF5MTI6aHNsKDAsIDAlLCA5JSk7LS1ib3JkZXItcmFkaXVzOjhweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowO21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZTtvdXRsaW5lOjA7ei1pbmRleDo5OTk5OTk5OTk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzIGVhc2V9QG1lZGlhIChob3Zlcjpub25lKSBhbmQgKHBvaW50ZXI6Y29hcnNlKXtbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1saWZ0ZWQ9dHJ1ZV17dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OnZhcigtLW9mZnNldC1yaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OnZhcigtLW9mZnNldC1sZWZ0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWNlbnRlcl17bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDp2YXIoLS1vZmZzZXQtdG9wKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOnZhcigtLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdF17LS15OnRyYW5zbGF0ZVkoMTAwJSk7LS1saWZ0LWFtb3VudDpjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tZ2FwKSk7ei1pbmRleDp2YXIoLS16LWluZGV4KTtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7dHJhbnNmb3JtOnZhcigtLXkpO3RvdWNoLWFjdGlvbjpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyxvcGFjaXR5IC40cyxoZWlnaHQgLjRzLGJveC1zaGFkb3cgLjJzO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOjA7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVde3BhZGRpbmc6MTZweDtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSk7d2lkdGg6dmFyKC0td2lkdGgpO2ZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweH1bZGF0YS1zb25uZXItdG9hc3RdOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDowOy0teTp0cmFuc2xhdGVZKC0xMDAlKTstLWxpZnQ6MTstLWxpZnQtYW1vdW50OmNhbGMoMSAqIHZhcigtLWdhcCkpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOjA7LS15OnRyYW5zbGF0ZVkoMTAwJSk7LS1saWZ0Oi0xOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGVzY3JpcHRpb25de2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjQ7Y29sb3I6IzNmM2YzZn1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGVzY3JpcHRpb25de2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjojZThlOGU4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtdGl0bGVde2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6aW5oZXJpdH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25de2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXNocmluazowO21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcHJvbWlzZT10cnVlXSBbZGF0YS1pY29uXT5zdmd7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7YW5pbWF0aW9uOnNvbm5lci1mYWRlLWluIC4zcyBlYXNlIGZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl0+KntmbGV4LXNocmluazowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl0gc3Zne21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jb250ZW50XXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25de2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo4cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tbm9ybWFsLWJnKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC10ZXh0KTttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQpO2JvcmRlcjpub25lO2ZvbnQtd2VpZ2h0OjUwMDtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXNocmluazowO3RyYW5zaXRpb246b3BhY2l0eSAuNHMsYm94LXNoYWRvdyAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDAgMCAycHggcmdiYSgwLDAsMCwuNCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25dOmZpcnN0LW9mLXR5cGV7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNhbmNlbF17Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDgpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNhbmNlbF17YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNsb3NlLWJ1dHRvbl17cG9zaXRpb246YWJzb2x1dGU7bGVmdDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQpO3JpZ2h0OnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQpO3RvcDowO2hlaWdodDoyMHB4O3dpZHRoOjIwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MDtjb2xvcjp2YXIoLS1ncmF5MTIpO2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWdyYXk0KTt0cmFuc2Zvcm06dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybSk7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxO3RyYW5zaXRpb246b3BhY2l0eSAuMXMsYmFja2dyb3VuZCAuMnMsYm9yZGVyLWNvbG9yIC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNsb3NlLWJ1dHRvbl06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSksMCAwIDAgMnB4IHJnYmEoMCwwLDAsLjIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOm5vdC1hbGxvd2VkfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV06aG92ZXIgW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWdyYXkyKTtib3JkZXItY29sb3I6dmFyKC0tZ3JheTUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMDAlO3JpZ2h0Oi0xMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6LTF9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXtib3R0b206NTAlO3RyYW5zZm9ybTpzY2FsZVkoMykgdHJhbnNsYXRlWSg1MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7dG9wOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoLTUwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9ZmFsc2VdW2RhdGEtcmVtb3ZlZD10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt0cmFuc2Zvcm06c2NhbGVZKDIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD10cnVlXTo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7aGVpZ2h0OmNhbGModmFyKC0tZ2FwKSArIDFweCk7Ym90dG9tOjEwMCU7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtbW91bnRlZD10cnVlXXstLXk6dHJhbnNsYXRlWSgwKTtvcGFjaXR5OjF9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPWZhbHNlXVtkYXRhLWZyb250PWZhbHNlXXstLXNjYWxlOnZhcigtLXRvYXN0cy1iZWZvcmUpICogMC4wNSArIDE7LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0LWFtb3VudCkgKiB2YXIoLS10b2FzdHMtYmVmb3JlKSkpIHNjYWxlKGNhbGMoLTEgKiB2YXIoLS1zY2FsZSkpKTtoZWlnaHQ6dmFyKC0tZnJvbnQtdG9hc3QtaGVpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpvcGFjaXR5IC40c31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteC1wb3NpdGlvbj1yaWdodF17cmlnaHQ6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPWZhbHNlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN0eWxlZD10cnVlXT4qe29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdmlzaWJsZT1mYWxzZV17b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSkpO2hlaWdodDp2YXIoLS1pbml0aWFsLWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD10cnVlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIC0xMDAlKSk7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXVtkYXRhLWV4cGFuZGVkPXRydWVdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1vZmZzZXQpICsgdmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD1mYWxzZV17LS15OnRyYW5zbGF0ZVkoNDAlKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjVzLG9wYWNpdHkgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdOjpiZWZvcmV7aGVpZ2h0OmNhbGModmFyKC0taW5pdGlhbC1oZWlnaHQpICsgMjAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSwwKSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCwwKSk7dHJhbnNpdGlvbjpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZWQ9dHJ1ZV17dXNlci1zZWxlY3Q6bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dLFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS15LXBvc2l0aW9uPXRvcF17YW5pbWF0aW9uLWR1cmF0aW9uOi4yczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1sZWZ0XXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtbGVmdH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPXJpZ2h0XXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtcmlnaHR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj11cF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXVwfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249ZG93bl17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWRvd259QGtleWZyYW1lcyBzd2lwZS1vdXQtbGVmdHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXgpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtcmlnaHR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSArIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXVwe2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXkpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteSkgLSAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1kb3due2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXkpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteSkgKyAxMDAlKSk7b3BhY2l0eTowfX1AbWVkaWEgKG1heC13aWR0aDo2MDBweCl7W2RhdGEtc29ubmVyLXRvYXN0ZXJde3Bvc2l0aW9uOmZpeGVkO3JpZ2h0OnZhcigtLW1vYmlsZS1vZmZzZXQtcmlnaHQpO2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KTt3aWR0aDoxMDAlfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9cnRsXXtsZWZ0OmNhbGModmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIC0xKX1bZGF0YS1zb25uZXItdG9hc3Rlcl0gW2RhdGEtc29ubmVyLXRvYXN0XXtsZWZ0OjA7cmlnaHQ6MDt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpICogMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1tb2JpbGUtb2Zmc2V0LWJvdHRvbSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KTtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTt0cmFuc2Zvcm06bm9uZX19W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWxpZ2h0XXstLW5vcm1hbC1iZzojZmZmOy0tbm9ybWFsLWJvcmRlcjp2YXIoLS1ncmF5NCk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MTIpOy0tc3VjY2Vzcy1iZzpoc2woMTQzLCA4NSUsIDk2JSk7LS1zdWNjZXNzLWJvcmRlcjpoc2woMTQ1LCA5MiUsIDg3JSk7LS1zdWNjZXNzLXRleHQ6aHNsKDE0MCwgMTAwJSwgMjclKTstLWluZm8tYmc6aHNsKDIwOCwgMTAwJSwgOTclKTstLWluZm8tYm9yZGVyOmhzbCgyMjEsIDkxJSwgOTMlKTstLWluZm8tdGV4dDpoc2woMjEwLCA5MiUsIDQ1JSk7LS13YXJuaW5nLWJnOmhzbCg0OSwgMTAwJSwgOTclKTstLXdhcm5pbmctYm9yZGVyOmhzbCg0OSwgOTElLCA4NCUpOy0td2FybmluZy10ZXh0OmhzbCgzMSwgOTIlLCA0NSUpOy0tZXJyb3ItYmc6aHNsKDM1OSwgMTAwJSwgOTclKTstLWVycm9yLWJvcmRlcjpoc2woMzU5LCAxMDAlLCA5NCUpOy0tZXJyb3ItdGV4dDpoc2woMzYwLCAxMDAlLCA0NSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF0gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWludmVydD10cnVlXXstLW5vcm1hbC1iZzojMDAwOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTMpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya117LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1iZy1ob3Zlcjpoc2woMCwgMCUsIDEyJSk7LS1ub3JtYWwtYm9yZGVyOmhzbCgwLCAwJSwgMjAlKTstLW5vcm1hbC1ib3JkZXItaG92ZXI6aHNsKDAsIDAlLCAyNSUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpOy0tc3VjY2Vzcy1iZzpoc2woMTUwLCAxMDAlLCA2JSk7LS1zdWNjZXNzLWJvcmRlcjpoc2woMTQ3LCAxMDAlLCAxMiUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNTAsIDg2JSwgNjUlKTstLWluZm8tYmc6aHNsKDIxNSwgMTAwJSwgNiUpOy0taW5mby1ib3JkZXI6aHNsKDIyMywgNDMlLCAxNyUpOy0taW5mby10ZXh0OmhzbCgyMTYsIDg3JSwgNjUlKTstLXdhcm5pbmctYmc6aHNsKDY0LCAxMDAlLCA2JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNjAsIDEwMCUsIDklKTstLXdhcm5pbmctdGV4dDpoc2woNDYsIDg3JSwgNjUlKTstLWVycm9yLWJnOmhzbCgzNTgsIDc2JSwgMTAlKTstLWVycm9yLWJvcmRlcjpoc2woMzU3LCA4OSUsIDE2JSk7LS1lcnJvci10ZXh0OmhzbCgzNTgsIDEwMCUsIDgxJSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXIpO2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XSBbZGF0YS1jbG9zZS1idXR0b25dOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnLWhvdmVyKTtib3JkZXItY29sb3I6dmFyKC0tbm9ybWFsLWJvcmRlci1ob3Zlcil9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXXtiYWNrZ3JvdW5kOnZhcigtLXN1Y2Nlc3MtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1zdWNjZXNzLWJvcmRlcik7Y29sb3I6dmFyKC0tc3VjY2Vzcy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXN1Y2Nlc3NdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXXtiYWNrZ3JvdW5kOnZhcigtLWluZm8tYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1pbmZvLWJvcmRlcik7Y29sb3I6dmFyKC0taW5mby10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWluZm9dIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXXtiYWNrZ3JvdW5kOnZhcigtLXdhcm5pbmctYmcpO2JvcmRlci1jb2xvcjp2YXIoLS13YXJuaW5nLWJvcmRlcik7Y29sb3I6dmFyKC0td2FybmluZy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXdhcm5pbmddIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1lcnJvcl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1lcnJvcl0gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWVycm9yLWJnKTtib3JkZXItY29sb3I6dmFyKC0tZXJyb3ItYm9yZGVyKTtjb2xvcjp2YXIoLS1lcnJvci10ZXh0KX0uc29ubmVyLWxvYWRpbmctd3JhcHBlcnstLXNpemU6MTZweDtoZWlnaHQ6dmFyKC0tc2l6ZSk7d2lkdGg6dmFyKC0tc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt6LWluZGV4OjEwfS5zb25uZXItbG9hZGluZy13cmFwcGVyW2RhdGEtdmlzaWJsZT1mYWxzZV17dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7YW5pbWF0aW9uOnNvbm5lci1mYWRlLW91dCAuMnMgZWFzZSBmb3J3YXJkc30uc29ubmVyLXNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7dG9wOjUwJTtsZWZ0OjUwJTtoZWlnaHQ6dmFyKC0tc2l6ZSk7d2lkdGg6dmFyKC0tc2l6ZSl9LnNvbm5lci1sb2FkaW5nLWJhcnthbmltYXRpb246c29ubmVyLXNwaW4gMS4ycyBsaW5lYXIgaW5maW5pdGU7YmFja2dyb3VuZDp2YXIoLS1ncmF5MTEpO2JvcmRlci1yYWRpdXM6NnB4O2hlaWdodDo4JTtsZWZ0Oi0xMCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0zLjklO3dpZHRoOjI0JX0uc29ubmVyLWxvYWRpbmctYmFyOmZpcnN0LWNoaWxke2FuaW1hdGlvbi1kZWxheTotMS4yczt0cmFuc2Zvcm06cm90YXRlKC4wMDAxZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMil7YW5pbWF0aW9uLWRlbGF5Oi0xLjFzO3RyYW5zZm9ybTpyb3RhdGUoMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgzKXthbmltYXRpb24tZGVsYXk6LTFzO3RyYW5zZm9ybTpyb3RhdGUoNjBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg0KXthbmltYXRpb24tZGVsYXk6LS45czt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNSl7YW5pbWF0aW9uLWRlbGF5Oi0uOHM7dHJhbnNmb3JtOnJvdGF0ZSgxMjBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg2KXthbmltYXRpb24tZGVsYXk6LS43czt0cmFuc2Zvcm06cm90YXRlKDE1MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDcpe2FuaW1hdGlvbi1kZWxheTotLjZzO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOCl7YW5pbWF0aW9uLWRlbGF5Oi0uNXM7dHJhbnNmb3JtOnJvdGF0ZSgyMTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg5KXthbmltYXRpb24tZGVsYXk6LS40czt0cmFuc2Zvcm06cm90YXRlKDI0MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDEwKXthbmltYXRpb24tZGVsYXk6LS4zczt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDExKXthbmltYXRpb24tZGVsYXk6LS4yczt0cmFuc2Zvcm06cm90YXRlKDMwMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDEyKXthbmltYXRpb24tZGVsYXk6LS4xczt0cmFuc2Zvcm06cm90YXRlKDMzMGRlZykgdHJhbnNsYXRlKDE0NiUpfUBrZXlmcmFtZXMgc29ubmVyLWZhZGUtaW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCl9MTAwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLW91dHswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCl9fUBrZXlmcmFtZXMgc29ubmVyLXNwaW57MCV7b3BhY2l0eToxfTEwMCV7b3BhY2l0eTouMTV9fUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbil7LnNvbm5lci1sb2FkaW5nLWJhcixbZGF0YS1zb25uZXItdG9hc3RdLFtkYXRhLXNvbm5lci10b2FzdF0+Knt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lIWltcG9ydGFudH19LnNvbm5lci1sb2FkZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyx0cmFuc2Zvcm0gLjJzfS5zb25uZXItbG9hZGVyW2RhdGEtdmlzaWJsZT1mYWxzZV17b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCkgdHJhbnNsYXRlKC01MCUsLTUwJSl9Iik7ZnVuY3Rpb24gcjIoJCl7cmV0dXJuICQubGFiZWwhPT12b2lkIDB9dmFyIHZLPTMsaks9IjI0cHgiLGdLPSIxNnB4IixqNj00MDAwLGhLPTM1NixmSz0xNCxtSz00NSxwSz0yMDA7ZnVuY3Rpb24gdzAoLi4uJCl7cmV0dXJuICQuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKX1mdW5jdGlvbiB1SygkKXtsZXRbSyxKXT0kLnNwbGl0KCItIiksWj1bXTtpZihLKVoucHVzaChLKTtpZihKKVoucHVzaChKKTtyZXR1cm4gWn12YXIgbEs9KCQpPT57dmFyIEssSixaLFgsWSxxLFYsTixCO2xldHtpbnZlcnQ6VSx0b2FzdDpHLHVuc3R5bGVkOnosaW50ZXJhY3Rpbmc6SCxzZXRIZWlnaHRzOkYsdmlzaWJsZVRvYXN0czpMLGhlaWdodHM6ayxpbmRleDpDLHRvYXN0czpQLGV4cGFuZGVkOnkscmVtb3ZlVG9hc3Q6VCxkZWZhdWx0UmljaENvbG9yczpBLGNsb3NlQnV0dG9uOncsc3R5bGU6aSxjYW5jZWxCdXR0b25TdHlsZTp2LGFjdGlvbkJ1dHRvblN0eWxlOmosY2xhc3NOYW1lOmQ9IiIsZGVzY3JpcHRpb25DbGFzc05hbWU6WjE9IiIsZHVyYXRpb246cTEscG9zaXRpb246byxnYXA6VDEsZXhwYW5kQnlEZWZhdWx0OmcsY2xhc3NOYW1lczpmLGljb25zOnQsY2xvc2VCdXR0b25BcmlhTGFiZWw6QzE9IkNsb3NlIHRvYXN0In09JCxbTjEsVjFdPWgudXNlU3RhdGUobnVsbCksW2sxLEcxXT1oLnVzZVN0YXRlKG51bGwpLFtSLGNdPWgudXNlU3RhdGUoITEpLFtyLCQxXT1oLnVzZVN0YXRlKCExKSxbXzEsYl09aC51c2VTdGF0ZSghMSksW20sWDFdPWgudXNlU3RhdGUoITEpLFtGMSxwXT1oLnVzZVN0YXRlKCExKSxbbixIMV09aC51c2VTdGF0ZSgwKSxbTzEsSjBdPWgudXNlU3RhdGUoMCksZzE9aC51c2VSZWYoRy5kdXJhdGlvbnx8cTF8fGo2KSxEMT1oLnVzZVJlZihudWxsKSxkMT1oLnVzZVJlZihudWxsKSxzMT1DPT09MCxOMD1DKzE8PUwsSzE9Ry50eXBlLGMxPUcuZGlzbWlzc2libGUhPT0hMSxFMD1HLmNsYXNzTmFtZXx8IiIsdjE9Ry5kZXNjcmlwdGlvbkNsYXNzTmFtZXx8IiIsVjA9aC51c2VNZW1vKCgpPT5rLmZpbmRJbmRleCgoVyk9PlcudG9hc3RJZD09PUcuaWQpfHwwLFtrLEcuaWRdKSxVMD1oLnVzZU1lbW8oKCk9Pnt2YXIgVztyZXR1cm4oVz1HLmNsb3NlQnV0dG9uKSE9bnVsbD9XOnd9LFtHLmNsb3NlQnV0dG9uLHddKSxQMT1oLnVzZU1lbW8oKCk9PkcuZHVyYXRpb258fHExfHxqNixbRy5kdXJhdGlvbixxMV0pLGgxPWgudXNlUmVmKDApLFEwPWgudXNlUmVmKDApLEYwPWgudXNlUmVmKDApLHIxPWgudXNlUmVmKG51bGwpLFtJMCx4MF09by5zcGxpdCgiLSIpLEEwPWgudXNlTWVtbygoKT0+e3JldHVybiBrLnJlZHVjZSgoVyx1LGEpPT57aWYoYT49VjApcmV0dXJuIFc7cmV0dXJuIFcrdS5oZWlnaHR9LDApfSxbayxWMF0pLG8xPUlLKCksRTE9Ry5pbnZlcnR8fFUsdDE9SzE9PT0ibG9hZGluZyI7UTAuY3VycmVudD1oLnVzZU1lbW8oKCk9PlYwKlQxK0EwLFtWMCxBMF0pLGgudXNlRWZmZWN0KCgpPT57ZzEuY3VycmVudD1QMX0sW1AxXSksaC51c2VFZmZlY3QoKCk9PntjKCEwKX0sW10pLGgudXNlRWZmZWN0KCgpPT57bGV0IFc9ZDEuY3VycmVudDtpZihXKXtsZXQgdT1XLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtyZXR1cm4gSjAodSksRigoYSk9Plt7dG9hc3RJZDpHLmlkLGhlaWdodDp1LHBvc2l0aW9uOkcucG9zaXRpb259LC4uLmFdKSwoKT0+RigoYSk9PmEuZmlsdGVyKChVMSk9PlUxLnRvYXN0SWQhPT1HLmlkKSl9fSxbRixHLmlkXSksaC51c2VMYXlvdXRFZmZlY3QoKCk9PntpZighUilyZXR1cm47bGV0IFc9ZDEuY3VycmVudCx1PVcuc3R5bGUuaGVpZ2h0O1cuc3R5bGUuaGVpZ2h0PSJhdXRvIjtsZXQgYT1XLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtXLnN0eWxlLmhlaWdodD11LEowKGEpLEYoKFUxKT0+e2lmKCFVMS5maW5kKChZMSk9PlkxLnRvYXN0SWQ9PT1HLmlkKSlyZXR1cm5be3RvYXN0SWQ6Ry5pZCxoZWlnaHQ6YSxwb3NpdGlvbjpHLnBvc2l0aW9ufSwuLi5VMV07ZWxzZSByZXR1cm4gVTEubWFwKChZMSk9PlkxLnRvYXN0SWQ9PT1HLmlkP3suLi5ZMSxoZWlnaHQ6YX06WTEpfSl9LFtSLEcudGl0bGUsRy5kZXNjcmlwdGlvbixGLEcuaWQsRy5qc3gsRy5hY3Rpb24sRy5jYW5jZWxdKTtsZXQgdzE9aC51c2VDYWxsYmFjaygoKT0+eyQxKCEwKSxIMShRMC5jdXJyZW50KSxGKChXKT0+Vy5maWx0ZXIoKHUpPT51LnRvYXN0SWQhPT1HLmlkKSksc2V0VGltZW91dCgoKT0+e1QoRyl9LHBLKX0sW0csVCxGLFEwXSk7aC51c2VFZmZlY3QoKCk9PntpZihHLnByb21pc2UmJksxPT09ImxvYWRpbmcifHxHLmR1cmF0aW9uPT09MS8wfHxHLnR5cGU9PT0ibG9hZGluZyIpcmV0dXJuO2xldCBXLHU9KCk9PntpZihGMC5jdXJyZW50PGgxLmN1cnJlbnQpe2xldCBVMT1uZXcgRGF0ZSgpLmdldFRpbWUoKS1oMS5jdXJyZW50O2cxLmN1cnJlbnQ9ZzEuY3VycmVudC1VMX1GMC5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpfSxhPSgpPT57aWYoZzEuY3VycmVudD09PTEvMClyZXR1cm47aDEuY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKSxXPXNldFRpbWVvdXQoKCk9PntHLm9uQXV0b0Nsb3NlPT1udWxsfHxHLm9uQXV0b0Nsb3NlLmNhbGwoRyxHKSx3MSgpfSxnMS5jdXJyZW50KX07aWYoeXx8SHx8bzEpdSgpO2Vsc2UgYSgpO3JldHVybigpPT5jbGVhclRpbWVvdXQoVyl9LFt5LEgsRyxLMSxvMSx3MV0pLGgudXNlRWZmZWN0KCgpPT57aWYoRy5kZWxldGUpdzEoKSxHLm9uRGlzbWlzcz09bnVsbHx8Ry5vbkRpc21pc3MuY2FsbChHLEcpfSxbdzEsRy5kZWxldGVdKTtmdW5jdGlvbiBaMCgpe3ZhciBXO2lmKHQ9PW51bGw/dm9pZCAwOnQubG9hZGluZyl7dmFyIHU7cmV0dXJuIGguY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOncwKGY9PW51bGw/dm9pZCAwOmYubG9hZGVyLEc9PW51bGw/dm9pZCAwOih1PUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOnUubG9hZGVyLCJzb25uZXItbG9hZGVyIiksImRhdGEtdmlzaWJsZSI6SzE9PT0ibG9hZGluZyJ9LHQubG9hZGluZyl9cmV0dXJuIGguY3JlYXRlRWxlbWVudChXSyx7Y2xhc3NOYW1lOncwKGY9PW51bGw/dm9pZCAwOmYubG9hZGVyLEc9PW51bGw/dm9pZCAwOihXPUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlcubG9hZGVyKSx2aXNpYmxlOksxPT09ImxvYWRpbmcifSl9bGV0IGIwPUcuaWNvbnx8KHQ9PW51bGw/dm9pZCAwOnRbSzFdKXx8TUsoSzEpO3ZhciB6MCxMMDtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KCJsaSIse3RhYkluZGV4OjAscmVmOmQxLGNsYXNzTmFtZTp3MChkLEUwLGY9PW51bGw/dm9pZCAwOmYudG9hc3QsRz09bnVsbD92b2lkIDA6KEs9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Sy50b2FzdCxmPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHQsZj09bnVsbD92b2lkIDA6ZltLMV0sRz09bnVsbD92b2lkIDA6KEo9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6SltLMV0pLCJkYXRhLXNvbm5lci10b2FzdCI6IiIsImRhdGEtcmljaC1jb2xvcnMiOih6MD1HLnJpY2hDb2xvcnMpIT1udWxsP3owOkEsImRhdGEtc3R5bGVkIjohQm9vbGVhbihHLmpzeHx8Ry51bnN0eWxlZHx8eiksImRhdGEtbW91bnRlZCI6UiwiZGF0YS1wcm9taXNlIjpCb29sZWFuKEcucHJvbWlzZSksImRhdGEtc3dpcGVkIjpGMSwiZGF0YS1yZW1vdmVkIjpyLCJkYXRhLXZpc2libGUiOk4wLCJkYXRhLXktcG9zaXRpb24iOkkwLCJkYXRhLXgtcG9zaXRpb24iOngwLCJkYXRhLWluZGV4IjpDLCJkYXRhLWZyb250IjpzMSwiZGF0YS1zd2lwaW5nIjpfMSwiZGF0YS1kaXNtaXNzaWJsZSI6YzEsImRhdGEtdHlwZSI6SzEsImRhdGEtaW52ZXJ0IjpFMSwiZGF0YS1zd2lwZS1vdXQiOm0sImRhdGEtc3dpcGUtZGlyZWN0aW9uIjprMSwiZGF0YS1leHBhbmRlZCI6Qm9vbGVhbih5fHxnJiZSKSwiZGF0YS10ZXN0aWQiOkcudGVzdElkLHN0eWxlOnsiLS1pbmRleCI6QywiLS10b2FzdHMtYmVmb3JlIjpDLCItLXotaW5kZXgiOlAubGVuZ3RoLUMsIi0tb2Zmc2V0IjpgJHtyP246UTAuY3VycmVudH1weGAsIi0taW5pdGlhbC1oZWlnaHQiOmc/ImF1dG8iOmAke08xfXB4YCwuLi5pLC4uLkcuc3R5bGV9LG9uRHJhZ0VuZDooKT0+e2IoITEpLFYxKG51bGwpLHIxLmN1cnJlbnQ9bnVsbH0sb25Qb2ludGVyRG93bjooVyk9PntpZihXLmJ1dHRvbj09PTIpcmV0dXJuO2lmKHQxfHwhYzEpcmV0dXJuO2lmKEQxLmN1cnJlbnQ9bmV3IERhdGUsSDEoUTAuY3VycmVudCksVy50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoVy5wb2ludGVySWQpLFcudGFyZ2V0LnRhZ05hbWU9PT0iQlVUVE9OIilyZXR1cm47YighMCkscjEuY3VycmVudD17eDpXLmNsaWVudFgseTpXLmNsaWVudFl9fSxvblBvaW50ZXJVcDooKT0+e3ZhciBXLHUsYTtpZihtfHwhYzEpcmV0dXJuO3IxLmN1cnJlbnQ9bnVsbDtsZXQgVTE9TnVtYmVyKCgoVz1kMS5jdXJyZW50KT09bnVsbD92b2lkIDA6Vy5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCItLXN3aXBlLWFtb3VudC14IikucmVwbGFjZSgicHgiLCIiKSl8fDApLFcxPU51bWJlcigoKHU9ZDEuY3VycmVudCk9PW51bGw/dm9pZCAwOnUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteSIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxZMT1uZXcgRGF0ZSgpLmdldFRpbWUoKS0oKGE9RDEuY3VycmVudCk9PW51bGw/dm9pZCAwOmEuZ2V0VGltZSgpKSxBMT1OMT09PSJ4Ij9VMTpXMSxuMT1NYXRoLmFicyhBMSkvWTE7aWYoTWF0aC5hYnMoQTEpPj1tS3x8bjE+MC4xMSl7aWYoSDEoUTAuY3VycmVudCksRy5vbkRpc21pc3M9PW51bGx8fEcub25EaXNtaXNzLmNhbGwoRyxHKSxOMT09PSJ4IilHMShVMT4wPyJyaWdodCI6ImxlZnQiKTtlbHNlIEcxKFcxPjA/ImRvd24iOiJ1cCIpO3cxKCksWDEoITApO3JldHVybn1lbHNle3ZhciBsMSxwMTsobDE9ZDEuY3VycmVudCk9PW51bGx8fGwxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC14IiwiMHB4IiksKHAxPWQxLmN1cnJlbnQpPT1udWxsfHxwMS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteSIsIjBweCIpfXAoITEpLGIoITEpLFYxKG51bGwpfSxvblBvaW50ZXJNb3ZlOihXKT0+e3ZhciB1LGEsVTE7aWYoIXIxLmN1cnJlbnR8fCFjMSlyZXR1cm47aWYoKCh1PXdpbmRvdy5nZXRTZWxlY3Rpb24oKSk9PW51bGw/dm9pZCAwOnUudG9TdHJpbmcoKS5sZW5ndGgpPjApcmV0dXJuO2xldCBZMT1XLmNsaWVudFktcjEuY3VycmVudC55LEExPVcuY2xpZW50WC1yMS5jdXJyZW50Lng7dmFyIG4xO2xldCBsMT0objE9JC5zd2lwZURpcmVjdGlvbnMpIT1udWxsP24xOnVLKG8pO2lmKCFOMSYmKE1hdGguYWJzKEExKT4xfHxNYXRoLmFicyhZMSk+MSkpVjEoTWF0aC5hYnMoQTEpPk1hdGguYWJzKFkxKT8ieCI6InkiKTtsZXQgcDE9e3g6MCx5OjB9LE8wPShHMCk9PntyZXR1cm4gMS8oMS41K01hdGguYWJzKEcwKS8yMCl9O2lmKE4xPT09InkiKXtpZihsMS5pbmNsdWRlcygidG9wIil8fGwxLmluY2x1ZGVzKCJib3R0b20iKSlpZihsMS5pbmNsdWRlcygidG9wIikmJlkxPDB8fGwxLmluY2x1ZGVzKCJib3R0b20iKSYmWTE+MClwMS55PVkxO2Vsc2V7bGV0IEcwPVkxKk8wKFkxKTtwMS55PU1hdGguYWJzKEcwKTxNYXRoLmFicyhZMSk/RzA6WTF9fWVsc2UgaWYoTjE9PT0ieCIpe2lmKGwxLmluY2x1ZGVzKCJsZWZ0Iil8fGwxLmluY2x1ZGVzKCJyaWdodCIpKWlmKGwxLmluY2x1ZGVzKCJsZWZ0IikmJkExPDB8fGwxLmluY2x1ZGVzKCJyaWdodCIpJiZBMT4wKXAxLng9QTE7ZWxzZXtsZXQgRzA9QTEqTzAoQTEpO3AxLng9TWF0aC5hYnMoRzApPE1hdGguYWJzKEExKT9HMDpBMX19aWYoTWF0aC5hYnMocDEueCk+MHx8TWF0aC5hYnMocDEueSk+MClwKCEwKTsoYT1kMS5jdXJyZW50KT09bnVsbHx8YS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteCIsYCR7cDEueH1weGApLChVMT1kMS5jdXJyZW50KT09bnVsbHx8VTEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXkiLGAke3AxLnl9cHhgKX19LFUwJiYhRy5qc3gmJksxIT09ImxvYWRpbmciP2guY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7ImFyaWEtbGFiZWwiOkMxLCJkYXRhLWRpc2FibGVkIjp0MSwiZGF0YS1jbG9zZS1idXR0b24iOiEwLG9uQ2xpY2s6dDF8fCFjMT8oKT0+e306KCk9Pnt3MSgpLEcub25EaXNtaXNzPT1udWxsfHxHLm9uRGlzbWlzcy5jYWxsKEcsRyl9LGNsYXNzTmFtZTp3MChmPT1udWxsP3ZvaWQgMDpmLmNsb3NlQnV0dG9uLEc9PW51bGw/dm9pZCAwOihaPUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlouY2xvc2VCdXR0b24pfSwoTDA9dD09bnVsbD92b2lkIDA6dC5jbG9zZSkhPW51bGw/TDA6RUspOm51bGwsKEsxfHxHLmljb258fEcucHJvbWlzZSkmJkcuaWNvbiE9PW51bGwmJigodD09bnVsbD92b2lkIDA6dFtLMV0pIT09bnVsbHx8Ry5pY29uKT9oLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWljb24iOiIiLGNsYXNzTmFtZTp3MChmPT1udWxsP3ZvaWQgMDpmLmljb24sRz09bnVsbD92b2lkIDA6KFg9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WC5pY29uKX0sRy5wcm9taXNlfHxHLnR5cGU9PT0ibG9hZGluZyImJiFHLmljb24/Ry5pY29ufHxaMCgpOm51bGwsRy50eXBlIT09ImxvYWRpbmciP2IwOm51bGwpOm51bGwsaC5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS1jb250ZW50IjoiIixjbGFzc05hbWU6dzAoZj09bnVsbD92b2lkIDA6Zi5jb250ZW50LEc9PW51bGw/dm9pZCAwOihZPUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlkuY29udGVudCl9LGguY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtdGl0bGUiOiIiLGNsYXNzTmFtZTp3MChmPT1udWxsP3ZvaWQgMDpmLnRpdGxlLEc9PW51bGw/dm9pZCAwOihxPUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOnEudGl0bGUpfSxHLmpzeD9HLmpzeDp0eXBlb2YgRy50aXRsZT09PSJmdW5jdGlvbiI/Ry50aXRsZSgpOkcudGl0bGUpLEcuZGVzY3JpcHRpb24/aC5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS1kZXNjcmlwdGlvbiI6IiIsY2xhc3NOYW1lOncwKFoxLHYxLGY9PW51bGw/dm9pZCAwOmYuZGVzY3JpcHRpb24sRz09bnVsbD92b2lkIDA6KFY9Ry5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Vi5kZXNjcmlwdGlvbil9LHR5cGVvZiBHLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9HLmRlc2NyaXB0aW9uKCk6Ry5kZXNjcmlwdGlvbik6bnVsbCksaC5pc1ZhbGlkRWxlbWVudChHLmNhbmNlbCk/Ry5jYW5jZWw6Ry5jYW5jZWwmJnIyKEcuY2FuY2VsKT9oLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtY2FuY2VsIjohMCxzdHlsZTpHLmNhbmNlbEJ1dHRvblN0eWxlfHx2LG9uQ2xpY2s6KFcpPT57aWYoIXIyKEcuY2FuY2VsKSlyZXR1cm47aWYoIWMxKXJldHVybjtHLmNhbmNlbC5vbkNsaWNrPT1udWxsfHxHLmNhbmNlbC5vbkNsaWNrLmNhbGwoRy5jYW5jZWwsVyksdzEoKX0sY2xhc3NOYW1lOncwKGY9PW51bGw/dm9pZCAwOmYuY2FuY2VsQnV0dG9uLEc9PW51bGw/dm9pZCAwOihOPUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOk4uY2FuY2VsQnV0dG9uKX0sRy5jYW5jZWwubGFiZWwpOm51bGwsaC5pc1ZhbGlkRWxlbWVudChHLmFjdGlvbik/Ry5hY3Rpb246Ry5hY3Rpb24mJnIyKEcuYWN0aW9uKT9oLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTpHLmFjdGlvbkJ1dHRvblN0eWxlfHxqLG9uQ2xpY2s6KFcpPT57aWYoIXIyKEcuYWN0aW9uKSlyZXR1cm47aWYoRy5hY3Rpb24ub25DbGljaz09bnVsbHx8Ry5hY3Rpb24ub25DbGljay5jYWxsKEcuYWN0aW9uLFcpLFcuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47dzEoKX0sY2xhc3NOYW1lOncwKGY9PW51bGw/dm9pZCAwOmYuYWN0aW9uQnV0dG9uLEc9PW51bGw/dm9pZCAwOihCPUcuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuYWN0aW9uQnV0dG9uKX0sRy5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiBnNigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIGRLKCQsSyl7bGV0IEo9e307cmV0dXJuWyQsS10uZm9yRWFjaCgoWixYKT0+e2xldCBZPVg9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLFY9WT9nSzpqSztmdW5jdGlvbiBOKEIpe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoVSk9PntKW2Ake3F9LSR7VX1gXT10eXBlb2YgQj09PSJudW1iZXIiP2Ake0J9cHhgOkJ9KX1pZih0eXBlb2YgWj09PSJudW1iZXIifHx0eXBlb2YgWj09PSJzdHJpbmciKU4oWik7ZWxzZSBpZih0eXBlb2YgWj09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoQik9PntpZihaW0JdPT09dm9pZCAwKUpbYCR7cX0tJHtCfWBdPVY7ZWxzZSBKW2Ake3F9LSR7Qn1gXT10eXBlb2YgWltCXT09PSJudW1iZXIiP2Ake1pbQl19cHhgOlpbQl19KTtlbHNlIE4oVil9KSxKfXZhciBmNj1oLmZvcndhcmRSZWYoZnVuY3Rpb24oSyxKKXtsZXR7aWQ6WixpbnZlcnQ6WCxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpWLGNsb3NlQnV0dG9uOk4sY2xhc3NOYW1lOkIsb2Zmc2V0OlUsbW9iaWxlT2Zmc2V0OkcsdGhlbWU6ej0ibGlnaHQiLHJpY2hDb2xvcnM6SCxkdXJhdGlvbjpGLHN0eWxlOkwsdmlzaWJsZVRvYXN0czprPXZLLHRvYXN0T3B0aW9uczpDLGRpcjpQPWc2KCksZ2FwOnk9ZkssaWNvbnM6VCxjb250YWluZXJBcmlhTGFiZWw6QT0iTm90aWZpY2F0aW9ucyJ9PUssW3csaV09aC51c2VTdGF0ZShbXSksdj1oLnVzZU1lbW8oKCk9PntpZihaKXJldHVybiB3LmZpbHRlcigoUik9PlIudG9hc3RlcklkPT09Wik7cmV0dXJuIHcuZmlsdGVyKChSKT0+IVIudG9hc3RlcklkKX0sW3csWl0pLGo9aC51c2VNZW1vKCgpPT57cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChbWV0uY29uY2F0KHYuZmlsdGVyKChSKT0+Ui5wb3NpdGlvbikubWFwKChSKT0+Ui5wb3NpdGlvbikpKSl9LFt2LFldKSxbZCxaMV09aC51c2VTdGF0ZShbXSksW3ExLG9dPWgudXNlU3RhdGUoITEpLFtUMSxnXT1oLnVzZVN0YXRlKCExKSxbZix0XT1oLnVzZVN0YXRlKHohPT0ic3lzdGVtIj96OnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXM/ImRhcmsiOiJsaWdodCI6ImxpZ2h0IiksQzE9aC51c2VSZWYobnVsbCksTjE9cS5qb2luKCIrIikucmVwbGFjZSgvS2V5L2csIiIpLnJlcGxhY2UoL0RpZ2l0L2csIiIpLFYxPWgudXNlUmVmKG51bGwpLGsxPWgudXNlUmVmKCExKSxHMT1oLnVzZUNhbGxiYWNrKChSKT0+e2koKGMpPT57dmFyIHI7aWYoISgocj1jLmZpbmQoKCQxKT0+JDEuaWQ9PT1SLmlkKSk9PW51bGw/dm9pZCAwOnIuZGVsZXRlKSlZMC5kaXNtaXNzKFIuaWQpO3JldHVybiBjLmZpbHRlcigoe2lkOiQxfSk9PiQxIT09Ui5pZCl9KX0sW10pO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e3JldHVybiBZMC5zdWJzY3JpYmUoKFIpPT57aWYoUi5kaXNtaXNzKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntpKChjKT0+Yy5tYXAoKHIpPT5yLmlkPT09Ui5pZD97Li4ucixkZWxldGU6ITB9OnIpKX0pO3JldHVybn1zZXRUaW1lb3V0KCgpPT57aC5mbHVzaFN5bmMoKCk9PntpKChjKT0+e2xldCByPWMuZmluZEluZGV4KCgkMSk9PiQxLmlkPT09Ui5pZCk7aWYociE9PS0xKXJldHVyblsuLi5jLnNsaWNlKDAsciksey4uLmNbcl0sLi4uUn0sLi4uYy5zbGljZShyKzEpXTtyZXR1cm5bUiwuLi5jXX0pfSl9KX0pfSxbd10pLGgudXNlRWZmZWN0KCgpPT57aWYoeiE9PSJzeXN0ZW0iKXt0KHopO3JldHVybn1pZih6PT09InN5c3RlbSIpaWYod2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyl0KCJkYXJrIik7ZWxzZSB0KCJsaWdodCIpO2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgUj13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpO3RyeXtSLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKHttYXRjaGVzOmN9KT0+e2lmKGMpdCgiZGFyayIpO2Vsc2UgdCgibGlnaHQiKX0pfWNhdGNoKGMpe1IuYWRkTGlzdGVuZXIoKHttYXRjaGVzOnJ9KT0+e3RyeXtpZihyKXQoImRhcmsiKTtlbHNlIHQoImxpZ2h0Iil9Y2F0Y2goJDEpe2NvbnNvbGUuZXJyb3IoJDEpfX0pfX0sW3pdKSxoLnVzZUVmZmVjdCgoKT0+e2lmKHcubGVuZ3RoPD0xKW8oITEpfSxbd10pLGgudXNlRWZmZWN0KCgpPT57bGV0IFI9KGMpPT57dmFyIHI7aWYocS5ldmVyeSgoYik9PmNbYl18fGMuY29kZT09PWIpKXt2YXIgXzE7byghMCksKF8xPUMxLmN1cnJlbnQpPT1udWxsfHxfMS5mb2N1cygpfWlmKGMuY29kZT09PSJFc2NhcGUiJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PUMxLmN1cnJlbnR8fCgocj1DMS5jdXJyZW50KT09bnVsbD92b2lkIDA6ci5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkpKW8oITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsUiksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLFIpfSxbcV0pLGgudXNlRWZmZWN0KCgpPT57aWYoQzEuY3VycmVudClyZXR1cm4oKT0+e2lmKFYxLmN1cnJlbnQpVjEuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLFYxLmN1cnJlbnQ9bnVsbCxrMS5jdXJyZW50PSExfX0sW0MxLmN1cnJlbnRdKSxoLmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iLHtyZWY6SiwiYXJpYS1sYWJlbCI6YCR7QX0gJHtOMX1gLHRhYkluZGV4Oi0xLCJhcmlhLWxpdmUiOiJwb2xpdGUiLCJhcmlhLXJlbGV2YW50IjoiYWRkaXRpb25zIHRleHQiLCJhcmlhLWF0b21pYyI6ImZhbHNlIixzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc6ITB9LGoubWFwKChSLGMpPT57dmFyIHI7bGV0WyQxLF8xXT1SLnNwbGl0KCItIik7aWYoIXYubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoIm9sIix7a2V5OlIsZGlyOlA9PT0iYXV0byI/ZzYoKTpQLHRhYkluZGV4Oi0xLHJlZjpDMSxjbGFzc05hbWU6QiwiZGF0YS1zb25uZXItdG9hc3RlciI6ITAsImRhdGEtc29ubmVyLXRoZW1lIjpmLCJkYXRhLXktcG9zaXRpb24iOiQxLCJkYXRhLXgtcG9zaXRpb24iOl8xLHN0eWxlOnsiLS1mcm9udC10b2FzdC1oZWlnaHQiOmAkeygocj1kWzBdKT09bnVsbD92b2lkIDA6ci5oZWlnaHQpfHwwfXB4YCwiLS13aWR0aCI6YCR7aEt9cHhgLCItLWdhcCI6YCR7eX1weGAsLi4uTCwuLi5kSyhVLEcpfSxvbkJsdXI6KGIpPT57aWYoazEuY3VycmVudCYmIWIuY3VycmVudFRhcmdldC5jb250YWlucyhiLnJlbGF0ZWRUYXJnZXQpKXtpZihrMS5jdXJyZW50PSExLFYxLmN1cnJlbnQpVjEuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLFYxLmN1cnJlbnQ9bnVsbH19LG9uRm9jdXM6KGIpPT57aWYoYi50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmYi50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZT09PSJmYWxzZSIpcmV0dXJuO2lmKCFrMS5jdXJyZW50KWsxLmN1cnJlbnQ9ITAsVjEuY3VycmVudD1iLnJlbGF0ZWRUYXJnZXR9LG9uTW91c2VFbnRlcjooKT0+byghMCksb25Nb3VzZU1vdmU6KCk9Pm8oITApLG9uTW91c2VMZWF2ZTooKT0+e2lmKCFUMSlvKCExKX0sb25EcmFnRW5kOigpPT5vKCExKSxvblBvaW50ZXJEb3duOihiKT0+e2lmKGIudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmIudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGU9PT0iZmFsc2UiKXJldHVybjtnKCEwKX0sb25Qb2ludGVyVXA6KCk9PmcoITEpfSx2LmZpbHRlcigoYik9PiFiLnBvc2l0aW9uJiZjPT09MHx8Yi5wb3NpdGlvbj09PVIpLm1hcCgoYixtKT0+e3ZhciBYMSxGMTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGxLLHtrZXk6Yi5pZCxpY29uczpULGluZGV4Om0sdG9hc3Q6YixkZWZhdWx0UmljaENvbG9yczpILGR1cmF0aW9uOihYMT1DPT1udWxsP3ZvaWQgMDpDLmR1cmF0aW9uKSE9bnVsbD9YMTpGLGNsYXNzTmFtZTpDPT1udWxsP3ZvaWQgMDpDLmNsYXNzTmFtZSxkZXNjcmlwdGlvbkNsYXNzTmFtZTpDPT1udWxsP3ZvaWQgMDpDLmRlc2NyaXB0aW9uQ2xhc3NOYW1lLGludmVydDpYLHZpc2libGVUb2FzdHM6ayxjbG9zZUJ1dHRvbjooRjE9Qz09bnVsbD92b2lkIDA6Qy5jbG9zZUJ1dHRvbikhPW51bGw/RjE6TixpbnRlcmFjdGluZzpUMSxwb3NpdGlvbjpSLHN0eWxlOkM9PW51bGw/dm9pZCAwOkMuc3R5bGUsdW5zdHlsZWQ6Qz09bnVsbD92b2lkIDA6Qy51bnN0eWxlZCxjbGFzc05hbWVzOkM9PW51bGw/dm9pZCAwOkMuY2xhc3NOYW1lcyxjYW5jZWxCdXR0b25TdHlsZTpDPT1udWxsP3ZvaWQgMDpDLmNhbmNlbEJ1dHRvblN0eWxlLGFjdGlvbkJ1dHRvblN0eWxlOkM9PW51bGw/dm9pZCAwOkMuYWN0aW9uQnV0dG9uU3R5bGUsY2xvc2VCdXR0b25BcmlhTGFiZWw6Qz09bnVsbD92b2lkIDA6Qy5jbG9zZUJ1dHRvbkFyaWFMYWJlbCxyZW1vdmVUb2FzdDpHMSx0b2FzdHM6di5maWx0ZXIoKHApPT5wLnBvc2l0aW9uPT1iLnBvc2l0aW9uKSxoZWlnaHRzOmQuZmlsdGVyKChwKT0+cC5wb3NpdGlvbj09Yi5wb3NpdGlvbiksc2V0SGVpZ2h0czpaMSxleHBhbmRCeURlZmF1bHQ6VixnYXA6eSxleHBhbmRlZDpxMSxzd2lwZURpcmVjdGlvbnM6Sy5zd2lwZURpcmVjdGlvbnN9KX0pKX0pKX0pO3ZhciBjSz17ekluZGV4OjIxNDc0ODM2NDcsIi0tbm9ybWFsLWJnIjoiIzFjMWMxZSIsIi0tbm9ybWFsLWJvcmRlciI6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikiLCItLW5vcm1hbC10ZXh0IjoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpIiwiLS1ib3JkZXItcmFkaXVzIjoiOHB4IiwiLS13aWR0aCI6IjMyMHB4In07ZnVuY3Rpb24gbzIoe2NvbG9yOiR9KXtyZXR1cm4gUSgic3BhbiIseyJkYXRhLXRlc3RpZCI6InBsYWluLXRvYXN0LWRvdCIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIix3aWR0aDo2LGhlaWdodDo2LGJvcmRlclJhZGl1czo5OTksYmFja2dyb3VuZDokfX0pfWZ1bmN0aW9uIG02KCl7cmV0dXJuIFEoZjYse3RoZW1lOiJkYXJrIixwb3NpdGlvbjoiYm90dG9tLWNlbnRlciIsdmlzaWJsZVRvYXN0czo0LGdhcDo4LG9mZnNldDp7Ym90dG9tOjI0fSxjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdGVyIixpY29uczp7ZXJyb3I6UShvMix7Y29sb3I6IiNmODcxNzEifSksc3VjY2VzczpRKG8yLHtjb2xvcjoiIzRhZGU4MCJ9KSx3YXJuaW5nOlEobzIse2NvbG9yOiIjZmJiZjI0In0pLGluZm86UShvMix7Y29sb3I6IiNhNWI0ZmMifSl9LHN0eWxlOmNLLGNvbnRhaW5lckFyaWFMYWJlbDoic2VydmUtc2ltIG5vdGlmaWNhdGlvbnMifSl9ZnVuY3Rpb24gcDYoe3RvYXN0OiR9KXtsZXQgSz0kLnN0YXR1cz09PSJlcnJvciIsSj0kLnN0YXR1cz09PSJ1cGxvYWRpbmciLFo9SiYmJC5wcm9ncmVzcyE9PW51bGwsWD0kLnByb2dyZXNzIT1udWxsP01hdGgucm91bmQoJC5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIFEoImRpdiIseyJkYXRhLXRlc3RpZCI6InVwbG9hZC10b2FzdCIsY2xhc3NOYW1lOmBmbGV4IHctW21pbigzMjBweCxjYWxjKDEwMHZ3LTMycHgpKV0gZmxleC1jb2wgZ2FwLTEuNSBweC0zIHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tb25vIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSAke0s/InNlbGVjdC10ZXh0IGN1cnNvci10ZXh0Ijoic2VsZWN0LW5vbmUgY3Vyc29yLWRlZmF1bHQifWAsY2hpbGRyZW46W1EoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuM3NdIixzdHlsZTp7YmFja2dyb3VuZDpKPyIjYTViNGZjIjokLnN0YXR1cz09PSJzdWNjZXNzIj8iIzRhZGU4MCI6IiNmODcxNzEifX0pLFEoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W0omJlomJmBVcGxvYWRpbmcgJHskLm5hbWV94oCmICR7WH0lYCxKJiYhWiYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsaW5nICR7JC5uYW1lfeKApmA6YEFkZGluZyAkeyQubmFtZX3igKZgKSwkLnN0YXR1cz09PSJzdWNjZXNzIiYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsZWQgJHskLm5hbWV9YDpgQWRkZWQgJHskLm5hbWV9IHRvIFBob3Rvc2ApLEsmJmAkeyQubmFtZX06ICR7JC5tZXNzYWdlPz8iVXBsb2FkIGZhaWxlZCJ9YF19KV19KSxKJiZRKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGgtWzNweF0gdy1mdWxsIGJnLXdoaXRlLzggcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4iLGNoaWxkcmVuOlo/USgiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgYmctYWNjZW50IHJvdW5kZWQtWzJweF0gW3RyYW5zaXRpb246d2lkdGhfMTIwbXNfbGluZWFyXSIsc3R5bGU6e3dpZHRoOmAke1h9JWB9fSk6USgiZGl2Iix7Y2xhc3NOYW1lOiJzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaC1mdWxsIHctWzQwJV0gYmctYWNjZW50IHJvdW5kZWQtWzJweF0ifSl9KV19KX1mdW5jdGlvbiB1Nih7d2lkdGg6JCxoZWlnaHQ6Syx2aXNpYmxlOkp9KXtyZXR1cm4gUSgiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctcGFuZWwtYmctdHJhbnNsdWNlbnQgc2hhZG93LVswXzFweF8ycHhfcmdiYSgwLDAsMCwwLjE4KSwwXzZweF8xOHB4X3JnYmEoMCwwLDAsMC4yOCksaW5zZXRfMF8wXzBfMXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNildIGJhY2tkcm9wLWJsdXItbWQgYmFja2Ryb3Atc2F0dXJhdGUtMTUwIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7b3BhY2l0eTpKPzE6MCx0cmFuc2Zvcm06YHRyYW5zbGF0ZVkoJHtKPzA6NH1weCkgc2NhbGUoJHtKPzE6MC45Nn0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjoib3BhY2l0eSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCB0cmFuc2Zvcm0gMjIwbXMgY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkifSxjaGlsZHJlbjpbTWF0aC5yb3VuZCgkKSwiICIsUSgic3BhbiIse2NsYXNzTmFtZToib3BhY2l0eS02MCBteC0wLjUiLGNoaWxkcmVuOiLDlyJ9KSwiICIsTWF0aC5yb3VuZChLKV19KX1mdW5jdGlvbiBsNih7c3RyZWFtaW5nOiR9KXtsZXQgSz0kPyIjNGFkZTgwIjoiIzhlOGU5MyI7cmV0dXJuIFEoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJzdHJlYW0tc3RhdHVzLXBpbGwiLGNsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC1bNXB4XSB0ZXh0LVsxMnB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6S30sImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2hpbGRyZW46W1EoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMThzX2Vhc2VdIixzdHlsZTp7YmFja2dyb3VuZDpLfX0pLCQ/ImxpdmUiOiJjb25uZWN0aW5nIl19KX1mdW5jdGlvbiBySygkLEssSil7bGV0IFo9Si5sYXQqTWF0aC5QSS8xODAsWD0oJC1KLmxhdCkqTWF0aC5QSS8xODA7cmV0dXJue3g6KEstSi5sbmcpKk1hdGguUEkvMTgwKk1hdGguY29zKFopKjYzNzEwMDAsejotWCo2MzcxMDAwfX1mdW5jdGlvbiBvSygkLEssSil7bGV0IFo9Si5sYXQqTWF0aC5QSS8xODAsWD0tSy82MzcxMDAwKigxODAvTWF0aC5QSSksWT0kLyg2MzcxMDAwKk1hdGguY29zKFopKSooMTgwL01hdGguUEkpO3JldHVybntsYXQ6Si5sYXQrWCxsbmc6Si5sbmcrWX19ZnVuY3Rpb24gbksoJCxLLEosWixYKXtsZXQgWT1YKlgscT1ZKlgsVj0oTixCLFUsRyk9PjAuNSooMipCKygtTitVKSpYKygyKk4tNSpCKzQqVS1HKSpZKygtTiszKkItMypVK0cpKnEpO3JldHVybnt4OlYoJC54LEsueCxKLngsWi54KSx6OlYoJC56LEsueixKLnosWi56KSx5OlYoJC55LEsueSxKLnksWi55KSxyYXdBbHQ6VigkLnJhd0FsdCxLLnJhd0FsdCxKLnJhd0FsdCxaLnJhd0FsdCl9fWZ1bmN0aW9uIGlLKCQsSyxKKXtpZigkLmxlbmd0aDwyKXJldHVybiAkLnNsaWNlKCk7bGV0IFo9W10sWD0kLmxlbmd0aCxZPUo/WDpYLTE7Zm9yKGxldCBxPTA7cTxZO3ErKyl7bGV0IFY9JFtKPyhxLTErWCklWDpNYXRoLm1heCgwLHEtMSldLE49JFtxJVhdLEI9JFsocSsxKSVYXSxVPSRbSj8ocSsyKSVYOk1hdGgubWluKFgtMSxxKzIpXSxHPUIueC1OLngsej1CLnotTi56LEg9TWF0aC5oeXBvdChHLHopLEY9TWF0aC5tYXgoMixNYXRoLmNlaWwoSC9LKSk7Zm9yKGxldCBMPTA7TDxGO0wrKyl7bGV0IGs9TC9GO1oucHVzaChuSyhWLE4sQixVLGspKX19aWYoIUopWi5wdXNoKCRbWC0xXSk7cmV0dXJuIFp9ZnVuY3Rpb24gZDYoJCl7aWYoJC53YXlwb2ludHMubGVuZ3RoPDIpdGhyb3cgRXJyb3IoYFRyYWlsICR7JC5pZH0gbmVlZHMgYXQgbGVhc3QgMiB3YXlwb2ludHNgKTtsZXQgSz17bGF0OiQud2F5cG9pbnRzLnJlZHVjZSgoTCxrKT0+TCtrLmxhdCwwKS8kLndheXBvaW50cy5sZW5ndGgsbG5nOiQud2F5cG9pbnRzLnJlZHVjZSgoTCxrKT0+TCtrLmxuZywwKS8kLndheXBvaW50cy5sZW5ndGh9LEo9JC53YXlwb2ludHMubWFwKChMKT0+TC5hbHQ/PzApLFo9TWF0aC5taW4oLi4uSiksWD1NYXRoLm1heCguLi5KKSxZPSQud2F5cG9pbnRzLm1hcCgoTCk9PntsZXR7eDprLHo6Q309cksoTC5sYXQsTC5sbmcsSyksUD1MLmFsdD8/MDtyZXR1cm57eDprLHo6Qyx5OlAtWixyYXdBbHQ6UH19KSxxPWlLKFksOCwhISQubG9vcCksVj1bXSxOPTA7Zm9yKGxldCBMPTA7TDxxLmxlbmd0aDtMKyspe2xldCBrPXFbTF07aWYoTD4wKXtsZXQgVD1xW0wtMV07Tis9TWF0aC5oeXBvdChrLngtVC54LGsuei1ULnosay55LVQueSl9bGV0e2xhdDpDLGxuZzpQfT1vSyhrLngsay56LEspLHk9TWF0aC5tYXgoMCxrLnkpO1YucHVzaCh7eDprLngsejprLnoseSxhcmM6TixsYXQ6Qyxsbmc6UH0pfWxldCBCPTEvMCxVPS0xLzAsRz0xLzAsej0tMS8wLEg9MS8wLEY9LTEvMDtmb3IobGV0IEwgb2YgVil7aWYoTC54PEIpQj1MLng7aWYoTC54PlUpVT1MLng7aWYoTC56PEcpRz1MLno7aWYoTC56Pnopej1MLno7aWYoTC55PEgpSD1MLnk7aWYoTC55PkYpRj1MLnl9cmV0dXJue3RyYWlsOiQsb3JpZ2luOksscG9pbnRzOlYsdG90YWxEaXN0YW5jZTpWW1YubGVuZ3RoLTFdLmFyYyxib3VuZHM6e3g6W0IsVV0seTpbSCxGXSx6OltHLHpdfSxyYXdNaW5BbHQ6WixyYXdNYXhBbHQ6WH19ZnVuY3Rpb24gSzUoJCxLKXtsZXQgSj0kLnRvdGFsRGlzdGFuY2U7aWYoSj09PTApcmV0dXJuICQucG9pbnRzWzBdO2xldCBaPUs7aWYoJC50cmFpbC5sb29wKVo9KFolSitKKSVKO2Vsc2V7aWYoWjw9MClyZXR1cm4gJC5wb2ludHNbMF07aWYoWj49SilyZXR1cm4gJC5wb2ludHNbJC5wb2ludHMubGVuZ3RoLTFdfWxldCBYPTAsWT0kLnBvaW50cy5sZW5ndGgtMTt3aGlsZShYKzE8WSl7bGV0IFU9WCtZPj4+MTtpZigkLnBvaW50c1tVXS5hcmM8PVopWD1VO2Vsc2UgWT1VfWxldCBxPSQucG9pbnRzW1hdLFY9JC5wb2ludHNbWV0sTj1WLmFyYy1xLmFyYyxCPU49PT0wPzA6KFotcS5hcmMpL047cmV0dXJue3g6cS54KyhWLngtcS54KSpCLHo6cS56KyhWLnotcS56KSpCLHk6cS55KyhWLnktcS55KSpCLGFyYzpaLGxhdDpxLmxhdCsoVi5sYXQtcS5sYXQpKkIsbG5nOnEubG5nKyhWLmxuZy1xLmxuZykqQn19ZnVuY3Rpb24gbDgoJCl7c3dpdGNoKCQpe2Nhc2Uid2FsayI6cmV0dXJuIDEuNDtjYXNlInJ1biI6cmV0dXJuIDM7Y2FzZSJjeWNsZSI6cmV0dXJuIDUuNTtjYXNlImRyaXZlIjpyZXR1cm4gMTMuNH19dmFyIGFLPVt7bGF0OjM3LjMzMjcyLGxuZzotMTIyLjAwODMzLGFsdDo0OX0se2xhdDozNy4zMzMwOSxsbmc6LTEyMi4wMDczNSxhbHQ6NDh9LHtsYXQ6MzcuMzMzNzMsbG5nOi0xMjIuMDA2NjMsYWx0OjQ5fSx7bGF0OjM3LjMzNDU0LGxuZzotMTIyLjAwNjI3LGFsdDo0OX0se2xhdDozNy4zMzU0LGxuZzotMTIyLjAwNjMzLGFsdDo0OX0se2xhdDozNy4zMzYxOCxsbmc6LTEyMi4wMDY3OSxhbHQ6NDV9LHtsYXQ6MzcuMzM2NzUsbG5nOi0xMjIuMDA3NTksYWx0OjQ1fSx7bGF0OjM3LjMzNzA0LGxuZzotMTIyLjAwODYxLGFsdDo0Nn0se2xhdDozNy4zMzY5OCxsbmc6LTEyMi4wMDk2OSxhbHQ6NDh9LHtsYXQ6MzcuMzM2NjIsbG5nOi0xMjIuMDEwNjYsYWx0OjQ4fSx7bGF0OjM3LjMzNTk4LGxuZzotMTIyLjAxMTM4LGFsdDo0OX0se2xhdDozNy4zMzUxNyxsbmc6LTEyMi4wMTE3NCxhbHQ6NTB9LHtsYXQ6MzcuMzM0MzEsbG5nOi0xMjIuMDExNjksYWx0OjUwfSx7bGF0OjM3LjMzMzU0LGxuZzotMTIyLjAxMTIyLGFsdDo1MH0se2xhdDozNy4zMzI5Nixsbmc6LTEyMi4wMTA0MixhbHQ6NTF9LHtsYXQ6MzcuMzMyNjgsbG5nOi0xMjIuMDA5NCxhbHQ6NTB9XSxzSz1be2xhdDozNy44MzIxMixsbmc6LTEyMi40ODA2NSxhbHQ6MzB9LHtsYXQ6MzcuODI5MzcsbG5nOi0xMjIuNDc5NzQsYWx0OjMwfSx7bGF0OjM3LjgyNjQ5LGxuZzotMTIyLjQ3OTQsYWx0OjMwfSx7bGF0OjM3LjgyMzYyLGxuZzotMTIyLjQ3OTA3LGFsdDo0NX0se2xhdDozNy44MjA3NCxsbmc6LTEyMi40Nzg3MyxhbHQ6NTl9LHtsYXQ6MzcuODE3ODYsbG5nOi0xMjIuNDc4MzksYWx0OjY2fSx7bGF0OjM3LjgxNDk4LGxuZzotMTIyLjQ3ODA2LGFsdDo2Nn0se2xhdDozNy44MTIxMSxsbmc6LTEyMi40Nzc3MixhbHQ6NTh9LHtsYXQ6MzcuODA5MjMsbG5nOi0xMjIuNDc3MzQsYWx0OjQ0fSx7bGF0OjM3LjgwOTQ5LGxuZzotMTIyLjQ3NzMsYWx0OjQ1fSx7bGF0OjM3LjgxMjM2LGxuZzotMTIyLjQ3NzY1LGFsdDo1OX0se2xhdDozNy44MTUyNCxsbmc6LTEyMi40Nzc5OCxhbHQ6NjZ9LHtsYXQ6MzcuODE4MTIsbG5nOi0xMjIuNDc4MzIsYWx0OjY2fSx7bGF0OjM3LjgyMSxsbmc6LTEyMi40Nzg2NixhbHQ6NTh9LHtsYXQ6MzcuODIzODcsbG5nOi0xMjIuNDc5LGFsdDo0NH0se2xhdDozNy44MjY3NSxsbmc6LTEyMi40NzkzMyxhbHQ6MzB9LHtsYXQ6MzcuODI5NjMsbG5nOi0xMjIuNDc5NjcsYWx0OjMwfSx7bGF0OjM3LjgzMjMzLGxuZzotMTIyLjQ4MDcyLGFsdDozMH1dLHRLPVt7bGF0OjM3Ljg4NjY0LGxuZzotMTIyLjYyNTk5LGFsdDoxMjF9LHtsYXQ6MzcuODg4ODcsbG5nOi0xMjIuNjIzMzIsYWx0OjEzNX0se2xhdDozNy44OTExNSxsbmc6LTEyMi42MjE2LGFsdDoxNjR9LHtsYXQ6MzcuODkzNTMsbG5nOi0xMjIuNjE5MjEsYWx0OjE4MH0se2xhdDozNy44OTQ2Nixsbmc6LTEyMi42MTU3NyxhbHQ6MjIwfSx7bGF0OjM3Ljg5NjMxLGxuZzotMTIyLjYxMjY4LGFsdDoyNzN9LHtsYXQ6MzcuODk5MTcsbG5nOi0xMjIuNjEwOTgsYWx0OjMxM30se2xhdDozNy45MDE2Nixsbmc6LTEyMi42MDg1NSxhbHQ6MzQyfSx7bGF0OjM3LjkwMTk5LGxuZzotMTIyLjYwNjAxLGFsdDo0MDh9LHtsYXQ6MzcuOTAzMzksbG5nOi0xMjIuNjA0MDEsYWx0OjQ1MH0se2xhdDozNy45MDY2Mixsbmc6LTEyMi42MDI5MSxhbHQ6NDQwfSx7bGF0OjM3LjkwOTcxLGxuZzotMTIyLjYwMTczLGFsdDo0MzJ9LHtsYXQ6MzcuOTEyMTMsbG5nOi0xMjIuNjAwMDcsYWx0OjQzNn0se2xhdDozNy45MTQzOSxsbmc6LTEyMi41OTc4LGFsdDo0MTB9LHtsYXQ6MzcuOTEyODUsbG5nOi0xMjIuNTk1MDQsYWx0OjQyMn0se2xhdDozNy45MTI3NCxsbmc6LTEyMi41OTIwMixhbHQ6NDI1fSx7bGF0OjM3LjkxNSxsbmc6LTEyMi41OTAzMixhbHQ6NDEyfSx7bGF0OjM3LjkxNjM3LGxuZzotMTIyLjU4OTAzLGFsdDo0MDZ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTg1OTUsYWx0OjM4Mn0se2xhdDozNy45MTc0LGxuZzotMTIyLjU4Mzk4LGFsdDozNzJ9LHtsYXQ6MzcuOTE2NDIsbG5nOi0xMjIuNTgyMzYsYWx0OjM1Mn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODAxMSxhbHQ6MzQyfV0sZUs9W3tsYXQ6NDAuNzgyMTYsbG5nOi03My45NjI1NCxhbHQ6Mzd9LHtsYXQ6NDAuNzgyMjEsbG5nOi03My45NjA5OCxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjgsbG5nOi03My45NjAxLGFsdDozNn0se2xhdDo0MC43ODQ0LGxuZzotNzMuOTU5MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg1NSxsbmc6LTczLjk1ODQ4LGFsdDozNn0se2xhdDo0MC43ODY2NCxsbmc6LTczLjk1Nzc0LGFsdDozNn0se2xhdDo0MC43ODc5LGxuZzotNzMuOTU3NjQsYWx0OjM2fSx7bGF0OjQwLjc4ODk4LGxuZzotNzMuOTU3OTIsYWx0OjM2fSx7bGF0OjQwLjc4ODY4LGxuZzotNzMuOTU5NTEsYWx0OjM3fSx7bGF0OjQwLjc4ODk3LGxuZzotNzMuOTYxMTIsYWx0OjM2fSx7bGF0OjQwLjc4ODMzLGxuZzotNzMuOTYyNSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4MjgsbG5nOi03My45NjQxNixhbHQ6Mzd9LHtsYXQ6NDAuNzg4MDUsbG5nOi03My45NjU3MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg2OTEsbG5nOi03My45NjYzNixhbHQ6MzZ9LHtsYXQ6NDAuNzg1NjYsbG5nOi03My45NjY2NSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NTgsbG5nOi03My45NjYwOCxhbHQ6MzZ9LHtsYXQ6NDAuNzg0MDIsbG5nOi03My45NjQ1OSxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjIsbG5nOi03My45NjMzNCxhbHQ6Mzd9XSwkSj1be2xhdDozNy41OTY1OSxsbmc6LTEyMi41MDMxNixhbHQ6NH0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg1MDUsbG5nOi0xMjIuNTA2OTgsYWx0OjkzfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH1dLEo1PVt7aWQ6ImFwcGxlLXBhcmstbG9vcCIsbmFtZToiQXBwbGUgUGFyayBMb29wIixkZXNjcmlwdGlvbjoiQ3VwZXJ0aW5vIOKAoiBmbGF0IHJpbmcgcm9hZCIsbW9kZToid2FsayIsd2F5cG9pbnRzOmFLLGxvb3A6ITB9LHtpZDoiZ29sZGVuLWdhdGUiLG5hbWU6IkdvbGRlbiBHYXRlIENyb3NzaW5nIixkZXNjcmlwdGlvbjoiU2FuIEZyYW5jaXNjbyDigKIgYnJpZGdlIHJvdW5kLXRyaXAiLG1vZGU6InJ1biIsd2F5cG9pbnRzOnNLLGxvb3A6ITB9LHtpZDoidGFtLXJpZGdlIixuYW1lOiJNdC4gVGFtIFJpZGdlIixkZXNjcmlwdGlvbjoiU3RpbnNvbiBCZWFjaCDigKIgU3RlZXAgUmF2aW5lICsgTWF0dCBEYXZpcyBsb29wIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6dEssbG9vcDohMH0se2lkOiJjZW50cmFsLXBhcmsiLG5hbWU6IlJlc2Vydm9pciBMb29wIixkZXNjcmlwdGlvbjoiQ2VudHJhbCBQYXJrIOKAoiAyLjUga20iLG1vZGU6InJ1biIsd2F5cG9pbnRzOmVLLGxvb3A6ITB9LHtpZDoicGNoLXBhY2lmaWNhIixuYW1lOiJQYWNpZmljIENvYXN0IEh3eSIsZGVzY3JpcHRpb246IlBhY2lmaWNhIOKAoiBEZXZpbCdzIFNsaWRlIHJvdW5kLXRyaXAiLG1vZGU6ImRyaXZlIix3YXlwb2ludHM6JEosbG9vcDohMH1dO2Z1bmN0aW9uIHEwKHtvcGVuOiQsb25PcGVuQ2hhbmdlOkssc3VtbWFyeTpKLGNoaWxkcmVuOlosc3VtbWFyeUNsYXNzTmFtZTpYPSIiLGJvZHlDbGFzc05hbWU6WT0iZmxleCBmbGV4LWNvbCBnYXAtMi41IHB0LTIuNSIsY2xhc3NOYW1lOnE9IiIsLi4uVn0pe3JldHVybiBRKCJkZXRhaWxzIix7b3BlbjokLG9uVG9nZ2xlOihOKT0+SyhOLmN1cnJlbnRUYXJnZXQub3BlbiksY2xhc3NOYW1lOmBsZW0tc2VjdGlvbiBiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIgJHtxfWAsLi4uVixjaGlsZHJlbjpbUSgic3VtbWFyeSIse2NsYXNzTmFtZTpgbGVtLXRvZ2dsZSBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSB0ZXh0LXdoaXRlLzkwIG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldICR7WH1gLGNoaWxkcmVuOltKLFEodDUse29wZW46JH0pXX0pLFEoImRpdiIse2NsYXNzTmFtZTpZLGNoaWxkcmVuOlp9KV19KX1mdW5jdGlvbiBuMih7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6SixkaXNhYmxlZDpaLG9uQ2hhbmdlOlgsY2xhc3NOYW1lOll9KXtsZXRbcSxWXT1PKCExKSxOPUkobnVsbCksQj1JKG51bGwpLFtVLEddPU8obnVsbCksej0oKT0+e2xldCBrPU4uY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIWspcmV0dXJuO0coe3RvcDprLmJvdHRvbSs0LGxlZnQ6ay5sZWZ0LG1pbldpZHRoOmsud2lkdGh9KX07XzAoKCk9PntpZihxKXooKX0sW3FdKSxfMCgoKT0+e2lmKCFxfHwhVSlyZXR1cm47bGV0IGs9Qi5jdXJyZW50O2lmKCFrKXJldHVybjtsZXQgQz04LFA9d2luZG93LmlubmVyV2lkdGgtay5vZmZzZXRXaWR0aC1DO2lmKFUubGVmdD5QKUcoey4uLlUsbGVmdDpNYXRoLm1heChDLFApfSl9LFtxLFVdKSxFKCgpPT57aWYoIXEpcmV0dXJuO2xldCBrPSgpPT5WKCExKSxDPSh5KT0+e2xldCBUPXkudGFyZ2V0O2lmKCFCLmN1cnJlbnQ/LmNvbnRhaW5zKFQpJiYhTi5jdXJyZW50Py5jb250YWlucyhUKSlrKCl9LFA9KHkpPT57aWYoIUIuY3VycmVudD8uY29udGFpbnMoeS50YXJnZXQpKXooKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEMpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLFAsITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGspLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsUCwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsayl9fSxbcV0pO2xldCBIPUkoITEpO0UoKCk9PntpZighcSl7SC5jdXJyZW50PSExO3JldHVybn1pZighVXx8SC5jdXJyZW50KXJldHVybjtsZXQgaz1CLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKTtpZighaz8ubGVuZ3RoKXJldHVybjtILmN1cnJlbnQ9ITA7bGV0IEM9Si5maW5kSW5kZXgoKFApPT5QLnZhbHVlPT09Syk7a1tNYXRoLm1heChDLDApXT8uZm9jdXMoKX0sW3EsVSxKLEtdKTtsZXQgRj0oayk9PntsZXQgQz1bLi4uQi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT1vcHRpb25dIik/P1tdXSxQPUMuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtpZihrLmtleT09PSJBcnJvd0Rvd24ifHxrLmtleT09PSJBcnJvd1VwIil7ay5wcmV2ZW50RGVmYXVsdCgpO2xldCB5PWsua2V5PT09IkFycm93RG93biI/TWF0aC5taW4oUCsxLEMubGVuZ3RoLTEpOk1hdGgubWF4KFAtMSwwKTtDW3ldPy5mb2N1cygpfWVsc2UgaWYoay5rZXk9PT0iRXNjYXBlIilrLnByZXZlbnREZWZhdWx0KCksVighMSksTi5jdXJyZW50Py5mb2N1cygpfSxMPUouZmluZCgoayk9PmsudmFsdWU9PT1LKTtyZXR1cm4gUShKMSx7Y2hpbGRyZW46W1EoImJ1dHRvbiIse3JlZjpOLHR5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiQsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6cSxkaXNhYmxlZDpaLG9uQ2xpY2s6KCk9PlYoKGspPT4hayksY2xhc3NOYW1lOmB0ZXh0LWxlZnQgZm9udC1baW5oZXJpdF0gY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6Y3Vyc29yLWRlZmF1bHQgJHtZPz8iIn1gLGNoaWxkcmVuOlEoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIHRydW5jYXRlIixjaGlsZHJlbjpMPy5sYWJlbD8/S30pfSkscSYmVSYmejgoUSgiZGl2Iix7cmVmOkIscm9sZToibGlzdGJveCIsImFyaWEtbGFiZWwiOiQsb25LZXlEb3duOkYsc3R5bGU6e3RvcDpVLnRvcCxsZWZ0OlUubGVmdCxtaW5XaWR0aDpVLm1pbldpZHRofSxjbGFzc05hbWU6ImZpeGVkIG1heC1oLTkwIG92ZXJmbG93LXktYXV0byBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHotNTAiLGNoaWxkcmVuOkoubWFwKChrKT0+USgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjprLnZhbHVlPT09SyxvbkNsaWNrOigpPT57WChrLnZhbHVlKSxWKCExKSxOLmN1cnJlbnQ/LmZvY3VzKCl9LGNsYXNzTmFtZTpgYmxvY2sgdy1mdWxsIHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBweC0yLjUgcHktMSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXdoaXRlLzggZm9jdXMtdmlzaWJsZTpiZy13aGl0ZS84IG91dGxpbmUtbm9uZSAke2sudmFsdWU9PT1LPyJ0ZXh0LWFjY2VudCI6IiJ9YCxjaGlsZHJlbjprLmxhYmVsfSxrLnZhbHVlKSl9KSxkb2N1bWVudC5ib2R5KV19KX12YXIgS0o9NjUwLGQ4PVsxLDIsNSwyMF0sYzY9MTAwMCxjOD17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gczYoe3VkaWQ6JCxob3N0Okt9KXtsZXRbSixaXT1PKCExKSxbWCxZXT1PKEo1WzBdLmlkKSxbcSxWXT1PKEo1WzBdLm1vZGUpLFtOLEJdPU8oMSksW1UsR109TyhjOCksW3osSF09TyhudWxsKSxGPVIxKCgpPT5KNS5maW5kKChnKT0+Zy5pZD09PVgpPz9KNVswXSxbWF0pLEw9UjEoKCk9PmQ2KEYpLFtGXSksaz1JKDApLEM9SSgiaWRsZSIpLFA9SShsOChxKSpOKSx5PUkoMCksVD1JKEwpLEE9SShudWxsKTtFKCgpPT57UC5jdXJyZW50PWw4KHEpKk59LFtxLE5dKTtsZXQgdz1JKG51bGwpO0UoKCk9PntsZXQgZz1ULmN1cnJlbnQsZj1rLmN1cnJlbnQ7aWYoVC5jdXJyZW50PUwsZyYmZyE9PUwpdy5jdXJyZW50PVpKKGcsZixMLHBlcmZvcm1hbmNlLm5vdygpKTtrLmN1cnJlbnQ9MCx5LmN1cnJlbnQ9MCxDLmN1cnJlbnQ9ImlkbGUiLEEuY3VycmVudD1udWxsLEcoYzgpfSxbTF0pO2xldCBpPUkoMCksdj1JKG51bGwpLGo9SShudWxsKTtFKCgpPT57bGV0IGc9MCxmPSh0KT0+e2xldCBDMT12LmN1cnJlbnQsTjE9QzE9PW51bGw/MTY6TWF0aC5taW4oNjQsdC1DMSk7aWYodi5jdXJyZW50PXQsaS5jdXJyZW50PShpLmN1cnJlbnQrTjEqMC4wMDAxMiklKE1hdGguUEkqMiksQy5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgazE9UC5jdXJyZW50Kk4xLzEwMDA7ay5jdXJyZW50Kz1rMSx5LmN1cnJlbnQrPU4xO2xldCBHMT1ULmN1cnJlbnQudG90YWxEaXN0YW5jZTtpZighVC5jdXJyZW50LnRyYWlsLmxvb3AmJmsuY3VycmVudD49RzEpay5jdXJyZW50PUcxLEMuY3VycmVudD0icGF1c2VkIixHKHtzdGF0dXM6InBhdXNlZCIsYXJjOkcxLGVsYXBzZWRNczp5LmN1cnJlbnR9KX1sZXQgVjE9ai5jdXJyZW50O2lmKFYxKXtsZXQgazE9VC5jdXJyZW50LEcxPW51bGwsUj13LmN1cnJlbnQ7aWYoUil7bGV0IGM9KHQtUi5zdGFydE1zKS9LSjtpZihjPj0xKXcuY3VycmVudD1udWxsO2Vsc2V7bGV0IHI9cUooYyk7azE9WUooUixyKSxHMT17eDpSLnByZXZNYXJrZXIueCsoUi5uZXh0TWFya2VyLngtUi5wcmV2TWFya2VyLngpKnIseTpSLnByZXZNYXJrZXIueSsoUi5uZXh0TWFya2VyLnktUi5wcmV2TWFya2VyLnkpKnIsejpSLnByZXZNYXJrZXIueisoUi5uZXh0TWFya2VyLnotUi5wcmV2TWFya2VyLnopKnJ9fX1WSihWMSxrMSxrLmN1cnJlbnQsaS5jdXJyZW50LHQsQy5jdXJyZW50PT09InBsYXlpbmciLEcxKX1nPXJlcXVlc3RBbmltYXRpb25GcmFtZShmKX07cmV0dXJuIGc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGYpLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShnKX0sW10pLEUoKCk9PntsZXQgZz1zZXRJbnRlcnZhbCgoKT0+e2lmKEMuY3VycmVudD09PSJwbGF5aW5nIilHKHtzdGF0dXM6InBsYXlpbmciLGFyYzprLmN1cnJlbnQsZWxhcHNlZE1zOnkuY3VycmVudH0pfSwyNTApO3JldHVybigpPT5jbGVhckludGVydmFsKGcpfSxbXSksRSgoKT0+e2lmKFUuc3RhdHVzIT09InBsYXlpbmciKXJldHVybjtsZXQgZz0hMSxmPTAsdD1udWxsLEMxPWFzeW5jKCk9PntpZihnfHx0KXJldHVybjtsZXQgVjE9RGF0ZS5ub3coKTtpZihWMS1mPGM2KXJldHVybjtmPVYxO2xldCBrMT1LNShULmN1cnJlbnQsay5jdXJyZW50KTt0PUsoImxvY2F0aW9uIix7dWRpZDokLGxhdDprMS5sYXQsbG5nOmsxLmxuZ30pLnRoZW4oKEcxKT0+e2lmKGcpcmV0dXJuO2lmKEcxLmV4aXRDb2RlIT09MClIKGE2KEcxLnN0ZGVycil8fCJzaW1jdGwgbG9jYXRpb24gc2V0IGZhaWxlZCIpO2Vsc2UgSChudWxsKX0pLmNhdGNoKChHMSk9PntpZighZylIKEcxIGluc3RhbmNlb2YgRXJyb3I/RzEubWVzc2FnZTpTdHJpbmcoRzEpKX0pLmZpbmFsbHkoKCk9Pnt0PW51bGx9KX07QzEoKTtsZXQgTjE9c2V0SW50ZXJ2YWwoQzEsYzYpO3JldHVybigpPT57Zz0hMCxjbGVhckludGVydmFsKE4xKX19LFtVLnN0YXR1cywkLEtdKTtsZXQgZD1EKCgpPT57aWYoQy5jdXJyZW50PT09InBsYXlpbmciKXtDLmN1cnJlbnQ9InBhdXNlZCIsRygoZyk9Pih7Li4uZyxzdGF0dXM6InBhdXNlZCJ9KSk7cmV0dXJufWlmKGsuY3VycmVudD49VC5jdXJyZW50LnRvdGFsRGlzdGFuY2UmJiFULmN1cnJlbnQudHJhaWwubG9vcClrLmN1cnJlbnQ9MCx5LmN1cnJlbnQ9MDtpZihBLmN1cnJlbnQ9PW51bGwpe2xldCBnPUs1KFQuY3VycmVudCxrLmN1cnJlbnQpO0EuY3VycmVudD17bGF0OmcubGF0LGxuZzpnLmxuZ319Qy5jdXJyZW50PSJwbGF5aW5nIixHKChnKT0+KHsuLi5nLHN0YXR1czoicGxheWluZyIsYXJjOmsuY3VycmVudCxlbGFwc2VkTXM6eS5jdXJyZW50fSkpfSxbXSksWjE9RCgoKT0+e0MuY3VycmVudD0iaWRsZSIsay5jdXJyZW50PTAseS5jdXJyZW50PTAsRyhjOCk7bGV0IGc9QS5jdXJyZW50O0EuY3VycmVudD1udWxsO2xldCBmPWc/e3VkaWQ6JCxsYXQ6Zy5sYXQsbG5nOmcubG5nfTp7dWRpZDokfTtLKCJsb2NhdGlvbiIsZikudGhlbigodCk9PntpZih0LmV4aXRDb2RlIT09MClIKGE2KHQuc3RkZXJyKXx8bnVsbCk7ZWxzZSBIKG51bGwpfSl9LFtLLCRdKSxxMT1EKChnKT0+e1koZyk7bGV0IGY9SjUuZmluZCgodCk9PnQuaWQ9PT1nKTtpZihmKVYoZi5tb2RlKX0sW10pO0UoKCk9PigpPT57aWYoQy5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgZz1BLmN1cnJlbnQsZj1nP3t1ZGlkOiQsbGF0OmcubGF0LGxuZzpnLmxuZ306e3VkaWQ6JH07SygibG9jYXRpb24iLGYpLmNhdGNoKCgpPT57fSl9LFtLLCRdKTtsZXQgbz1VLnN0YXR1cz09PSJwbGF5aW5nIixUMT1vP2Ake284KFUuYXJjKX0gwrcgJHtuNihVLmVsYXBzZWRNcyl9YDpvOChMLnRvdGFsRGlzdGFuY2UpO3JldHVybiBRKHEwLHtvcGVuOkosb25PcGVuQ2hhbmdlOlosc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fbWlubWF4KDAsMWZyKV9hdXRvXSBbY29udGFpbmVyLXR5cGU6aW5saW5lLXNpemVdIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6UShKMSx7Y2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLEo/USgic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cyI6ITAsY2xhc3NOYW1lOiJtaW4tdy0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIG1heC13LWZ1bGwiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjJzLGJveC1zaGFkb3dfMC4yc10iLHN0eWxlOntiYWNrZ3JvdW5kOm8/IiM0YWRlODAiOkwudG90YWxEaXN0YW5jZT4wPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiJ0cmFuc3BhcmVudCIsYm94U2hhZG93Om8/IjAgMCA2cHggcmdiYSg3NCwyMjIsMTI4LDAuNykiOiJub25lIn19KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIixjaGlsZHJlbjpUMX0pLCFvJiZRKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsIjohMCxjbGFzc05hbWU6InNocmluay0wIixjaGlsZHJlbjoidG90YWwifSldfSk6USgic3BhbiIse30pXX0pLGNoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGJsb2NrIixjaGlsZHJlbjpbUShuMix7bGFiZWw6IlRyYWlsIix2YWx1ZTpYLG9uQ2hhbmdlOnExLG9wdGlvbnM6SjUubWFwKChnKT0+KHt2YWx1ZTpnLmlkLGxhYmVsOmcubmFtZX0pKSxjbGFzc05hbWU6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIGhvdmVyOmJnLXdoaXRlL1swLjA3XSBob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xNildIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpiZy13aGl0ZS9bMC4wOF0gZm9jdXM6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMjQpXSJ9KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC1bOXB4XSB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46USh0NSx7b3BlbjohMX0pfSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpGLmRlc2NyaXB0aW9ufSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIGJnLVsjMGEwYTBjXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSBbYXNwZWN0LXJhdGlvOjE2LzExXSIsY2hpbGRyZW46W1EoImNhbnZhcyIse3JlZjpqLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBibG9jayJ9KSxRKFFKLHtwcmVwYXJlZDpMfSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyXzFmcl8xZnJdIGdhcC0xLjUiLGNoaWxkcmVuOltRKHI4LHtsYWJlbDoiRGlzdGFuY2UiLHZhbHVlOm84KFUuYXJjKX0pLFEocjgse2xhYmVsOiJQYWNlIix2YWx1ZTpCSihQLmN1cnJlbnQpfSksUShyOCx7bGFiZWw6IkVsYXBzZWQiLHZhbHVlOm42KFUuZWxhcHNlZE1zKX0pXX0pLFEoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMS41IixjaGlsZHJlbjpbUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOmQsY2xhc3NOYW1lOmBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gJHtvPyJiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIn1gLCJhcmlhLXByZXNzZWQiOm8sdGl0bGU6bz8iUGF1c2UiOiJQbGF5IixjaGlsZHJlbjpbbz9RKF84LHt9KTpRKGU1LHt9KSxRKCJzcGFuIix7Y2hpbGRyZW46bz8iUGF1c2UiOiJQbGF5In0pXX0pLFEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpaMSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0zIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSBiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDZdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSBkaXNhYmxlZDpvcGFjaXR5LTQwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCIsZGlzYWJsZWQ6VS5zdGF0dXM9PT0iaWRsZSImJlUuYXJjPT09MCx0aXRsZToiU3RvcCBhbmQgY2xlYXIgc2ltdWxhdGVkIGxvY2F0aW9uIixjaGlsZHJlbjpbUSgkMix7fSksUSgic3BhbiIse2NoaWxkcmVuOiJTdG9wIn0pXX0pXX0pLFEoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpRKEpKLHthcmlhTGFiZWw6IlRyYW5zcG9ydCBtb2RlIix2YWx1ZTpxLG9uQ2hhbmdlOihnKT0+VihnKSxvcHRpb25zOlt7dmFsdWU6IndhbGsiLGxhYmVsOiJXYWxrIixpY29uOlEoVDgse30pfSx7dmFsdWU6InJ1biIsbGFiZWw6IlJ1biIsaWNvbjpRKHc4LHt9KX0se3ZhbHVlOiJjeWNsZSIsbGFiZWw6IkN5Y2xlIixpY29uOlEoRTgse30pfSx7dmFsdWU6ImRyaXZlIixsYWJlbDoiRHJpdmUiLGljb246UShJOCx7fSl9XX0pfSksUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57bGV0IGc9ZDguaW5kZXhPZihOKSxmPWQ4WyhnKzEpJWQ4Lmxlbmd0aF07QihmKX0sY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0yLjUgYm9yZGVyIHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCBtaW4tdy1bNTZweF0gYWN0aXZlOnNjYWxlLVswLjk3XSAke04+MT8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGhvdmVyOmJnLXdoaXRlL1swLjg4XSBob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgaG92ZXI6Ymctd2hpdGUvWzAuMDldIGhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gaG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7Tn3DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtOfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltRKEQ4LHt9KSxOPjEmJlEoInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W04sIsOXIl19KV19KV19KSx6JiZRKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOnp9KV19KX12YXIgcjg9bjAoZnVuY3Rpb24oe2xhYmVsOkssdmFsdWU6Sn0pe3JldHVybiBRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpLfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46Sn0pXX0pfSk7ZnVuY3Rpb24gSkooe3ZhbHVlOiQsb25DaGFuZ2U6SyxvcHRpb25zOkosYXJpYUxhYmVsOlp9KXtyZXR1cm4gUSgiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpaLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46Si5tYXAoKFgpPT57bGV0IFk9WC52YWx1ZT09PSQ7cmV0dXJuIFEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SyhYLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7WT8iYmctd2hpdGUvWzAuMTJdIHRleHQtd2hpdGUiOiJiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzYwIGhvdmVyOmJnLXdoaXRlL1swLjA1XSBob3Zlcjp0ZXh0LXdoaXRlLzkwIn1gLCJhcmlhLXByZXNzZWQiOlksImFyaWEtbGFiZWwiOlguaWNvbj9YLmxhYmVsOnZvaWQgMCx0aXRsZTpYLmljb24/WC5sYWJlbDp2b2lkIDAsY2hpbGRyZW46WC5pY29uPz9YLmxhYmVsfSxYLnZhbHVlKX0pfSl9ZnVuY3Rpb24gUUooe3ByZXBhcmVkOiR9KXtpZigkLnJhd01heEFsdC0kLnJhd01pbkFsdDw1KXJldHVybiBudWxsO3JldHVybiBRKEoxLHtjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiBsZWZ0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1EoYjIse2RpcjoidXAifSksIiAiLGk2KCQucmF3TWF4QWx0KV19KSxRKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIHJpZ2h0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1EoYjIse2RpcjoiZG93biJ9KSwiICIsaTYoJC5yYXdNaW5BbHQpXX0pXX0pfXZhciByNj0xNDA7ZnVuY3Rpb24gbzYoJCxLKXtsZXQgSj1BcnJheShLKTtmb3IobGV0IFo9MDtaPEs7WisrKXtsZXQgWD1LPT09MT8wOlovKEstMSksWT1LNSgkLFgqJC50b3RhbERpc3RhbmNlKTtKW1pdPXt4OlkueCx5OlkueSx6Olkuen19cmV0dXJuIEp9ZnVuY3Rpb24gWkooJCxLLEosWil7bGV0IFg9KCQuYm91bmRzLnhbMF0rJC5ib3VuZHMueFsxXSkvMixZPSgkLmJvdW5kcy56WzBdKyQuYm91bmRzLnpbMV0pLzIscT0kLmJvdW5kcy55WzBdLFY9TWF0aC5tYXgoMSwkLmJvdW5kcy54WzFdLSQuYm91bmRzLnhbMF0sJC5ib3VuZHMuelsxXS0kLmJvdW5kcy56WzBdKSxOPShKLmJvdW5kcy54WzBdK0ouYm91bmRzLnhbMV0pLzIsQj0oSi5ib3VuZHMuelswXStKLmJvdW5kcy56WzFdKS8yLFU9Si5ib3VuZHMueVswXSx6PU1hdGgubWF4KDEsSi5ib3VuZHMueFsxXS1KLmJvdW5kcy54WzBdLEouYm91bmRzLnpbMV0tSi5ib3VuZHMuelswXSkvVixGPW82KCQscjYpLm1hcCgodyk9Pih7eDoody54LVgpKnorTix5Oih3LnktcSkqeitVLHo6KHcuei1ZKSp6K0J9KSksTD1vNihKLHI2KSxrPSgkLnRyYWlsLmxvb3B8fEoudHJhaWwubG9vcCk/PyExLEM9WEooRixMLGspLFA9SzUoJCxLKSx5PXt4OihQLngtWCkqeitOLHk6KFAueS1xKSp6K1UsejooUC56LVkpKnorQn0sVD1LNShKLDApLEE9e3g6VC54LHk6VC55LHo6VC56fTtyZXR1cm57ZnJvbTokLHRvOkosZnJvbVB0czpGLHRvUHRzOkMscHJldk1hcmtlcjp5LG5leHRNYXJrZXI6QSxzdGFydE1zOlp9fWZ1bmN0aW9uIFhKKCQsSyxKKXtsZXQgWj0kLmxlbmd0aCxYPTEvMCxZPTAscT0hMSxWPVtLLFsuLi5LXS5yZXZlcnNlKCldO2ZvcihsZXQgVT0wO1U8Vi5sZW5ndGg7VSsrKXtsZXQgRz1WW1VdLHo9Sj9aOjE7Zm9yKGxldCBIPTA7SDx6O0grKyl7bGV0IEY9MDtmb3IobGV0IEw9MDtMPFo7TCsrKXtsZXQgaz0kW0xdLEM9R1soTCtIKSVaXSxQPWsueC1DLngseT1rLnktQy55LFQ9ay56LUMuejtpZihGKz1QKlAreSp5K1QqVCxGPj1YKWJyZWFrfWlmKEY8WClYPUYsWT1ILHE9VT09PTF9fWxldCBOPXE/Wy4uLktdLnJldmVyc2UoKTpLLEI9QXJyYXkoWik7Zm9yKGxldCBVPTA7VTxaO1UrKylCW1VdPU5bKFUrWSklWl07cmV0dXJuIEJ9ZnVuY3Rpb24gWUooJCxLKXtsZXQgSj0kLmZyb21QdHMubGVuZ3RoLFo9QXJyYXkoSiksWD0wLFk9bnVsbCxxPTEvMCxWPS0xLzAsTj0xLzAsQj0tMS8wLFU9MS8wLEc9LTEvMDtmb3IobGV0IHo9MDt6PEo7eisrKXtsZXQgSD0kLmZyb21QdHNbel0sRj0kLnRvUHRzW3pdLEw9SC54KyhGLngtSC54KSpLLGs9SC55KyhGLnktSC55KSpLLEM9SC56KyhGLnotSC56KSpLO2lmKFkpe2xldCB5PUwtWS54LFQ9ay1ZLnksQT1DLVkuejtYKz1NYXRoLnNxcnQoeSp5K1QqVCtBKkEpfWxldCBQPXt4OkwseTprLHo6QyxhcmM6WCxsYXQ6MCxsbmc6MH07aWYoWlt6XT1QLFk9UCxMPHEpcT1MO2lmKEw+VilWPUw7aWYoazxOKU49aztpZihrPkIpQj1rO2lmKEM8VSlVPUM7aWYoQz5HKUc9Q31yZXR1cm57dHJhaWw6JC50by50cmFpbCxvcmlnaW46JC50by5vcmlnaW4scG9pbnRzOlosdG90YWxEaXN0YW5jZTpYLGJvdW5kczp7eDpbcSxWXSx5OltOLEJdLHo6W1UsR119LHJhd01pbkFsdDokLnRvLnJhd01pbkFsdCsoJC5mcm9tLnJhd01pbkFsdC0kLnRvLnJhd01pbkFsdCkqKDEtSykscmF3TWF4QWx0OiQudG8ucmF3TWF4QWx0KygkLmZyb20ucmF3TWF4QWx0LSQudG8ucmF3TWF4QWx0KSooMS1LKX19ZnVuY3Rpb24gcUooJCl7cmV0dXJuICQ8MC41PzIqJCokOjEtTWF0aC5wb3coLTIqJCsyLDIpLzJ9ZnVuY3Rpb24gVkooJCxLLEosWixYLFkscSl7bGV0IFY9JC5nZXRDb250ZXh0KCIyZCIpO2lmKCFWKXJldHVybjtsZXR7Y2xpZW50V2lkdGg6TixjbGllbnRIZWlnaHQ6Qn09JDtpZihOPT09MHx8Qj09PTApcmV0dXJuO2xldCBVPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxOjEsRz1NYXRoLnJvdW5kKE4qVSksej1NYXRoLnJvdW5kKEIqVSk7aWYoJC53aWR0aCE9PUd8fCQuaGVpZ2h0IT09eikkLndpZHRoPUcsJC5oZWlnaHQ9ejtWLnNldFRyYW5zZm9ybShVLDAsMCxVLDAsMCksVi5jbGVhclJlY3QoMCwwLE4sQik7bGV0IEg9Vi5jcmVhdGVSYWRpYWxHcmFkaWVudChOKjAuNSxCKjAuNTUsTWF0aC5taW4oTixCKSowLjIsTiowLjUsQiowLjU1LE1hdGgubWF4KE4sQikqMC44NSk7SC5hZGRDb2xvclN0b3AoMCwiIzFhMWExZCIpLEguYWRkQ29sb3JTdG9wKDEsIiMwYTBhMGMiKSxWLmZpbGxTdHlsZT1ILFYuZmlsbFJlY3QoMCwwLE4sQiksR0ooVixOLEIpO2xldHtwb2ludHM6Rixib3VuZHM6TH09SztpZihGLmxlbmd0aDwyKXJldHVybjtsZXQgaz0yOCpNYXRoLlBJLzE4MCxDPU1hdGguc2luKGspLFA9TWF0aC5jb3MoaykseT1NYXRoLnNpbihaKSxUPU1hdGguY29zKFopLEE9KEwueFswXStMLnhbMV0pLzIsdz0oTC56WzBdK0wuelsxXSkvMixpPUwueFsxXS1MLnhbMF0sdj1MLnpbMV0tTC56WzBdLGo9TC55WzFdLUwueVswXSxkPU1hdGgubWF4KGksdikqMS4wNSxaMT1NYXRoLm1heCh2KlAraipDLGkqMC40KSoxLjE1LHExPU4qMC4wOCxvPUIqMC4xOCxUMT1NYXRoLm1pbigoTi1xMSoyKS9kLChCLW8qMikvWjEpKjEuNDUsZz1qPDE/MTpNYXRoLm1pbigyNCwxNDAvTWF0aC5tYXgoMjAsaikpLGY9KFIsYyxyKT0+e2xldCAkMT1SLUEsXzE9ci13LGI9JDEqVCtfMSp5LG09LSQxKnkrXzEqVCxYMT1jKmcsRjE9WDEqUC1tKkMscD1YMSpDK20qUDtyZXR1cm57c3g6Ti8yK2IqVDEsc3k6QiowLjU1LUYxKlQxLGRlcHRoOnB9fSx0PTM4LEMxPUYubWFwKChSKT0+e2xldCBjPWYoUi54LFIueSxSLnopLHI9ZihSLngsMCxSLnopLCQxPXtzeDpjLnN4LHN5Ok1hdGgubWF4KHIuc3ksYy5zeSt0KSxkZXB0aDpyLmRlcHRofTtyZXR1cm57cDpSLHRvcDpjLGJvdDokMX19KTtmb3IobGV0IFI9MTtSPEMxLmxlbmd0aDtSKyspe2xldCBjPUMxW1ItMV0scj1DMVtSXSwkMT1WLmNyZWF0ZUxpbmVhckdyYWRpZW50KChjLnRvcC5zeCtyLnRvcC5zeCkvMiwoYy50b3Auc3krci50b3Auc3kpLzIsKGMuYm90LnN4K3IuYm90LnN4KS8yLChjLmJvdC5zeStyLmJvdC5zeSkvMik7JDEuYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMC41NSkiKSwkMS5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLCQxLmFkZENvbG9yU3RvcCgwLjg1LCJyZ2JhKDQwLDQwLDQ1LDAuMTgpIiksJDEuYWRkQ29sb3JTdG9wKDEsInJnYmEoMCwwLDAsMCkiKSxWLmZpbGxTdHlsZT0kMSxWLmJlZ2luUGF0aCgpLFYubW92ZVRvKGMudG9wLnN4LGMudG9wLnN5KSxWLmxpbmVUbyhyLnRvcC5zeCxyLnRvcC5zeSksVi5saW5lVG8oci5ib3Quc3gsci5ib3Quc3kpLFYubGluZVRvKGMuYm90LnN4LGMuYm90LnN5KSxWLmNsb3NlUGF0aCgpLFYuZmlsbCgpfVYuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLFYubGluZVdpZHRoPTEuNixWLmxpbmVDYXA9InJvdW5kIixWLmxpbmVKb2luPSJyb3VuZCIsVi5iZWdpblBhdGgoKTtmb3IobGV0IFI9MDtSPEMxLmxlbmd0aDtSKyspe2xldHt0b3A6Y309QzFbUl07aWYoUj09PTApVi5tb3ZlVG8oYy5zeCxjLnN5KTtlbHNlIFYubGluZVRvKGMuc3gsYy5zeSl9Vi5zdHJva2UoKTtsZXQgTjE9SjtWLnN0cm9rZVN0eWxlPSIjZjlkMmE0IixWLmxpbmVXaWR0aD0yLjIsVi5iZWdpblBhdGgoKTtsZXQgVjE9ITE7Zm9yKGxldCBSPTA7UjxDMS5sZW5ndGg7UisrKXtsZXR7cDpjLHRvcDpyfT1DMVtSXTtpZihjLmFyYz5OMSlicmVhaztpZighVjEpVi5tb3ZlVG8oci5zeCxyLnN5KSxWMT0hMDtlbHNlIFYubGluZVRvKHIuc3gsci5zeSl9aWYoVjEpVi5zdHJva2UoKTtsZXQgazE9cT8/SzUoSyxKKSxHMT1mKGsxLngsazEueSxrMS56KTtpZihZKXtsZXQgcj1YJTI2MDAvMjYwMCwkMT00KzIyKnIsXzE9MC4yMiooMS1yKSxiPVYuY3JlYXRlUmFkaWFsR3JhZGllbnQoRzEuc3gsRzEuc3ksJDEqMC41LEcxLnN4LEcxLnN5LCQxKTtiLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksYi5hZGRDb2xvclN0b3AoMC43LGByZ2JhKDI1NSwyNTUsMjU1LCR7XzEudG9GaXhlZCgzKX0pYCksYi5hZGRDb2xvclN0b3AoMSwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLFYuZmlsbFN0eWxlPWIsVi5iZWdpblBhdGgoKSxWLmFyYyhHMS5zeCxHMS5zeSwkMSwwLE1hdGguUEkqMiksVi5maWxsKCl9Vi5maWxsU3R5bGU9IiNmZmYiLFYuYmVnaW5QYXRoKCksVi5hcmMoRzEuc3gsRzEuc3ksMy44LDAsTWF0aC5QSSoyKSxWLmZpbGwoKX1mdW5jdGlvbiBHSigkLEssSil7JC5maWxsU3R5bGU9InJnYmEoMjU1LDI1NSwyNTUsMC4wNikiO2ZvcihsZXQgWT03O1k8SjtZKz0xNClmb3IobGV0IHE9NztxPEs7cSs9MTQpJC5iZWdpblBhdGgoKSwkLmFyYyhxLFksMC43LDAsTWF0aC5QSSoyKSwkLmZpbGwoKX1mdW5jdGlvbiBvOCgkKXtpZigkPDEwMDApcmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYDtyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDIpfSBrbWB9ZnVuY3Rpb24gbjYoJCl7bGV0IEs9TWF0aC5mbG9vcigkLzEwMDApLEo9TWF0aC5mbG9vcihLLzM2MDApLFo9TWF0aC5mbG9vcihLJTM2MDAvNjApLFg9SyU2MDtpZihKPjApcmV0dXJuYCR7Sn06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YDtyZXR1cm5gJHtafToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YH1mdW5jdGlvbiBCSigkKXtpZigkPD0wKXJldHVybiLigJQiO2lmKCQ+NylyZXR1cm5gJHsoJCozLjYpLnRvRml4ZWQoMCl9IGttL2hgO2xldCBLPTEwMDAvJCxKPU1hdGguZmxvb3IoSy82MCksWj1NYXRoLnJvdW5kKEslNjApO3JldHVybmAke0p9OiR7Wi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0va21gfWZ1bmN0aW9uIGk2KCQpe3JldHVybmAkeyQudG9GaXhlZCgwKX0gbWB9ZnVuY3Rpb24gYTYoJCl7bGV0IEs9JC50cmltKCk7aWYoIUspcmV0dXJuIiI7bGV0IEo9Sy5tYXRjaCgvUmVhc29uOlxzKiguKykkL20pO2lmKEopcmV0dXJuIEpbMV07cmV0dXJuIEsuc3BsaXQoYApgKS5zbGljZSgtMSlbMF0/P0t9YXN5bmMgZnVuY3Rpb24gbjgoJCxLLEope2xldCBaPWF3YWl0ICQoImFwcERldGFpbHMiLHt1ZGlkOkssYnVuZGxlSWQ6Sn0pO2lmKFouZXhpdENvZGUhPT0wKXJldHVybntlcnJvcjpaLnN0ZGVyci50cmltKCl8fCJBcHAgbm90IGZvdW5kIG9uIHNpbXVsYXRvciJ9O2xldCBYPShZKT0+dHlwZW9mIFk9PT0ic3RyaW5nIj9ZOnZvaWQgMDtyZXR1cm57YXBwUGF0aDpYKFouYXBwUGF0aCksZGlzcGxheU5hbWU6WChaLmRpc3BsYXlOYW1lKSxzaG9ydFZlcnNpb246WChaLnNob3J0VmVyc2lvbiksYnVuZGxlVmVyc2lvbjpYKFouYnVuZGxlVmVyc2lvbiksbWluT1M6WChaLm1pbk9TKSxleGVjdXRhYmxlOlgoWi5leGVjdXRhYmxlKSxpY29uRGF0YVVybDpYKFouaWNvbkRhdGFVcmwpPz9udWxsfX12YXIgTTU9bmV3IE1hcDtmdW5jdGlvbiB0NigkLEssSil7bGV0IFo9YCR7S306JHtKfWAsWD1NNS5nZXQoWik7aWYoWCE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFgpO2xldCBZPW44KCQsSyxKKS50aGVuKChxKT0+e2xldCBWPXEuaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIE01LnNldChaLFYpLFZ9KS5jYXRjaCgoKT0+e3JldHVybiBNNS5zZXQoWixudWxsKSxudWxsfSk7cmV0dXJuIE01LnNldChaLFkpLFl9ZnVuY3Rpb24gTkooJCl7cmV0dXJuICQuc3RhcnRzV2l0aCgiY29tLmFwcGxlLiIpfWZ1bmN0aW9uIFVKKCQpe2lmKCQ9PT0iY29tLmFwcGxlLnNwcmluZ2JvYXJkIilyZXR1cm4iU3ByaW5nQm9hcmQiO3JldHVybiAkfWZ1bmN0aW9uIHpKKHtidW5kbGVJZDokfSl7bGV0IEs9TkooJCk7cmV0dXJuIFEoImRpdiIseyJkYXRhLXRlc3RpZCI6Sz8ic3lzdGVtLWFwcC1pY29uIjoiYXBwLWljb24tZmFsbGJhY2siLGNsYXNzTmFtZTpgdy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyICR7Sz8iYm9yZGVyLVsjM2I1Zjk5XSBiZy1bbGluZWFyLWdyYWRpZW50KDE0NWRlZywjMjUzYTVmLCMxNjIxMzIpXSB0ZXh0LVsjYzhkN2ZmXSI6ImJvcmRlci13aGl0ZS8xMCBiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84MCJ9YCwiYXJpYS1sYWJlbCI6Sz8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIix0aXRsZTpLPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLGNoaWxkcmVuOks/USgic3ZnIix7cm9sZToiaW1nIix2aWV3Qm94OiIwIDAgMjQgMjQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOiJzaXplLVsxOXB4XSIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbUSgidGl0bGUiLHtjaGlsZHJlbjoiQXBwbGUifSksUSgicGF0aCIse2Q6Ik0xMi4xNTIgNi44OTZjLS45NDggMC0yLjQxNS0xLjA3OC0zLjk2LTEuMDQtMi4wNC4wMjctMy45MSAxLjE4My00Ljk2MSAzLjAxNC0yLjExNyAzLjY3NS0uNTQ2IDkuMTAzIDEuNTE5IDEyLjA5IDEuMDEzIDEuNDU0IDIuMjA4IDMuMDkgMy43OTIgMy4wMzkgMS41Mi0uMDY1IDIuMDktLjk4NyAzLjkzNS0uOTg3IDEuODMxIDAgMi4zNS45ODcgMy45Ni45NDggMS42MzctLjAyNiAyLjY3Ni0xLjQ4IDMuNjc2LTIuOTQ4IDEuMTU2LTEuNjg4IDEuNjM2LTMuMzI1IDEuNjYyLTMuNDE1LS4wMzktLjAxMy0zLjE4Mi0xLjIyMS0zLjIyLTQuODU3LS4wMjYtMy4wNCAyLjQ4LTQuNDk0IDIuNTk3LTQuNTU5LTEuNDI5LTIuMDktMy42MjMtMi4zMjQtNC4zOS0yLjM3Ni0yLS4xNTYtMy42NzUgMS4wOS00LjYxIDEuMDl6TTE1LjUzIDMuODNjLjg0My0xLjAxMiAxLjQtMi40MjcgMS4yNDUtMy44My0xLjIwNy4wNTItMi42NjIuODA1LTMuNTMyIDEuODE4LS43OC44OTYtMS40NTQgMi4zMzgtMS4yNzMgMy43MTQgMS4zMzguMTA0IDIuNzE1LS42ODggMy41NTktMS43MDEifSldfSk6USh5NSx7c2l6ZToxOSxzdHJva2VXaWR0aDoxLjl9KX0pfWZ1bmN0aW9uIExKKHtidW5kbGVJZDokLGljb25EYXRhVXJsOkt9KXtpZihLKXJldHVybiBRKCJpbWciLHtzcmM6SyxjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pO3JldHVybiBRKHpKLHtidW5kbGVJZDokfSl9ZnVuY3Rpb24gZTYoe3VkaWQ6JCxjdXJyZW50QXBwOkt9KXtsZXRbSixaXT1PKG51bGwpLFtYLFldPU8oITEpO2lmKEUoKCk9PntpZighSyl7WihudWxsKTtyZXR1cm59bGV0IHE9ITE7cmV0dXJuIFooe2J1bmRsZUlkOksuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpLLmlzUmVhY3ROYXRpdmUscGlkOksucGlkLGxvYWRpbmc6ITB9KSxuOCh4MSwkLEsuYnVuZGxlSWQpLnRoZW4oKFYpPT57aWYocSlyZXR1cm47Wih7YnVuZGxlSWQ6Sy5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOksuaXNSZWFjdE5hdGl2ZSxwaWQ6Sy5waWQsbG9hZGluZzohMSwuLi5WfSl9KSwoKT0+e3E9ITB9fSxbJCxLLEs/LmJ1bmRsZUlkLEs/LnBpZCxLPy5pc1JlYWN0TmF0aXZlXSksIUopcmV0dXJuIFEoSEose30pO3JldHVybiBRKHEwLHtvcGVuOlgsb25PcGVuQ2hhbmdlOlksc3VtbWFyeUNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IixzdW1tYXJ5OlEoSjEse2NoaWxkcmVuOltRKExKLHtidW5kbGVJZDpKLmJ1bmRsZUlkLGljb25EYXRhVXJsOkouaWNvbkRhdGFVcmx9KSxRKENKLHtidW5kbGVJZDpKLmJ1bmRsZUlkLGRpc3BsYXlOYW1lOkouZGlzcGxheU5hbWV9KV19KSxjaGlsZHJlbjpbSi5lcnJvciYmUSgiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpKLmVycm9yfSksUSgiZGwiLHtjbGFzc05hbWU6Im0tMCBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltRKFA1LHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6Si5zaG9ydFZlcnNpb24/YCR7Si5zaG9ydFZlcnNpb259ICgke0ouYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6Si5sb2FkaW5nPyLigKYiOiLigJQifSksUShQNSx7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOkoubWluT1M/PyhKLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksUShQNSx7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOkouZXhlY3V0YWJsZT8/KEoubG9hZGluZz8i4oCmIjoi4oCUIil9KSxRKFA1LHtsYWJlbDoiUElEIix2YWx1ZTpKLnBpZCE9bnVsbD9TdHJpbmcoSi5waWQpOiLigJQifSksSi5pc1JlYWN0TmF0aXZlJiZRKFA1LHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLFEoUDUse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6Si5hcHBQYXRoPz8oSi5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpKLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57eDEoInJldmVhbEFwcCIse3VkaWQ6JCxidW5kbGVJZDpKLmJ1bmRsZUlkfSl9LGljb246UShTNSx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjJ9KX06dm9pZCAwfSldfSldfSl9ZnVuY3Rpb24gSEooKXtyZXR1cm4gUSgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLWRldGVjdGlvbi1za2VsZXRvbiIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWxhYmVsIjoiV2FpdGluZyBmb3IgZm9yZWdyb3VuZCBhcHAiLGNoaWxkcmVuOlEoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIixjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYmctd2hpdGUvWzAuMDhdIn0pLFEoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTMuNSB3LVs0NiVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0ifSksUSgic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pLFEoInNwYW4iLHtjbGFzc05hbWU6InctMi41IGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSl9KX1mdW5jdGlvbiBDSih7YnVuZGxlSWQ6JCxkaXNwbGF5TmFtZTpLfSl7cmV0dXJuIFEoImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgbGVhZGluZy10aWdodCB0ZXh0LWxlZnQiLGNoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46Sz8/VUooJCl9KSxRKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTokLGNoaWxkcmVuOiR9KV19KX1mdW5jdGlvbiBQNSh7bGFiZWw6JCx2YWx1ZTpLLG1vbm86SixhY3Rpb246Wn0pe3JldHVybiBRKCJkaXYiLHtjbGFzc05hbWU6Imdyb3VwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W1EoImR0Iix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCB3LTIxIHNocmluay0wIixjaGlsZHJlbjokfSksUSgiZGQiLHtjbGFzc05hbWU6YG0tMCB0ZXh0LXdoaXRlLzkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7Sj8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6SyxjaGlsZHJlbjpbSyxaJiZRKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHJnYmEoMjgsMjgsMzAsMClfMCUsIzFjMWMxZV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6Wi5vbkNsaWNrLHRpdGxlOloudGl0bGUsImFyaWEtbGFiZWwiOloudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOlouaWNvbn0pfSldfSldfSl9dmFyICQ0PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJub3RpZmljYXRpb25zIixsYWJlbDoiTm90aWZpY2F0aW9ucyJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gSzQoe3VkaWQ6JCxidW5kbGVJZDpLfSl7bGV0W0osWl09Tyh7fSksW1gsWV09TyhudWxsKSxbcSxWXT1PKG51bGwpLFtOLEJdPU8oITEpO0UoKCk9PntaKHt9KSxWKG51bGwpfSxbS10pO2xldCBVPUQoYXN5bmMoeixIKT0+e2lmKCFLKXJldHVybjtsZXQgRj1gJHt6fToke0h9YDtZKEYpLFYobnVsbCk7dHJ5e2xldCBMPWF3YWl0IHgxKCJwZXJtaXNzaW9ucyIse3VkaWQ6JCxidW5kbGVJZDpLLGFjdGlvbjpILHNlcnZpY2U6en0pO2lmKEwuZXhpdENvZGUhPT0wKXtWKEwuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtMLmV4aXRDb2RlfSlgKTtyZXR1cm59Wigoayk9Pih7Li4uayxbel06SD09PSJyZXNldCI/dm9pZCAwOkh9KSl9ZmluYWxseXtZKG51bGwpfX0sWyQsS10pLEc9RChhc3luYygpPT57aWYoIUspcmV0dXJuO1koIl9fYWxsX18iKSxWKG51bGwpO3RyeXtsZXQgej1hd2FpdCB4MSgicGVybWlzc2lvbnMiLHt1ZGlkOiQsYnVuZGxlSWQ6SyxhY3Rpb246InJlc2V0IixzZXJ2aWNlOiJhbGwifSk7aWYoei5leGl0Q29kZSE9PTApe1Yoei5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke3ouZXhpdENvZGV9KWApO3JldHVybn1aKHt9KX1maW5hbGx5e1kobnVsbCl9fSxbJCxLXSk7aWYoIUspcmV0dXJuIFEoa0ose30pO3JldHVybiBRKHEwLHtvcGVuOk4sb25PcGVuQ2hhbmdlOkIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6UShKMSx7Y2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLFEoInNwYW4iLHt9KV19KSxjaGlsZHJlbjpbcSYmUSgiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpxfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W1EoImRpdiIse2NsYXNzTmFtZToibWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbCBnYXAtMSBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOiQ0Lm1hcCgoe2tleTp6LGxhYmVsOkh9KT0+e2xldCBGPUpbel07cmV0dXJuIFEoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB4LTAuNSBweS0xIixjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46SH0pLFEoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMC41IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCBwLTAuNSIscm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpILGNoaWxkcmVuOltRKGk4LHthY3RpdmU6Rj09PSJncmFudCIscGVuZGluZzpYPT09YCR7en06Z3JhbnRgLG9uQ2xpY2s6KCk9PlUoeiwiZ3JhbnQiKSx2YXJpYW50OiJncmFudCIsdGl0bGU6IkFsbG93IixjaGlsZHJlbjpRKFI1LHtzaXplOjExLHN0cm9rZVdpZHRoOjN9KX0pLFEoaTgse2FjdGl2ZTpGPT09InJldm9rZSIscGVuZGluZzpYPT09YCR7en06cmV2b2tlYCxvbkNsaWNrOigpPT5VKHosInJldm9rZSIpLHZhcmlhbnQ6InJldm9rZSIsdGl0bGU6IkRlbnkiLGNoaWxkcmVuOlEoQjAse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksUShpOCx7YWN0aXZlOiExLHBlbmRpbmc6WD09PWAke3p9OnJlc2V0YCxvbkNsaWNrOigpPT5VKHosInJlc2V0IiksdmFyaWFudDoicmVzZXQiLHRpdGxlOiJSZXNldCIsY2hpbGRyZW46UShzMCx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjR9KX0pXX0pXX0seil9KX0pLFEoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSByb3VuZGVkLXQtWzEwcHhdIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fYm90dG9tLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fdG9wLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGp1c3RpZnktZW5kIixjaGlsZHJlbjpRKCJidXR0b24iLHtvbkNsaWNrOkcsZGlzYWJsZWQ6WD09PSJfX2FsbF9fIixjbGFzc05hbWU6ImJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS83MCB0ZXh0LVsxMHB4XSBweC0yIHB5LVszcHhdIHJvdW5kZWQtWzVweF0gY3Vyc29yLXBvaW50ZXIgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA0ZW1dIix0aXRsZToic2VydmUtc2ltIHBlcm1pc3Npb25zIHJlc2V0IGFsbCIsY2hpbGRyZW46WD09PSJfX2FsbF9fIj8i4oCmIjoiUmVzZXQgYWxsIn0pfSldfSl9ZnVuY3Rpb24ga0ooKXtyZXR1cm4gUSgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLXBlcm1pc3Npb25zLWxvYWRpbmciLGNsYXNzTmFtZToiYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIiwiYXJpYS1kaXNhYmxlZCI6InRydWUiLCJhcmlhLWJ1c3kiOiJ0cnVlIixjaGlsZHJlbjpRKCJkaXYiLHtjbGFzc05hbWU6InNlbGVjdC1ub25lIHRleHQtd2hpdGUvNTUgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQgY3Vyc29yLWRlZmF1bHQiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksUSgic3BhbiIse30pLFEoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJwZXJtaXNzaW9ucy1sb2FkaW5nLWluZGljYXRvciIscm9sZToic3RhdHVzIiwiYXJpYS1sYWJlbCI6IkxvYWRpbmcgcGVybWlzc2lvbnMiLGNsYXNzTmFtZToic2l6ZS0yLjUgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItWyM1ZjYyNjhdIGJvcmRlci10LVsjZjRmNGY1XSBhbmltYXRlLVtncmlkLXNwaW5fMC43c19saW5lYXJfaW5maW5pdGVdIn0pXX0pfSl9ZnVuY3Rpb24gaTgoe2FjdGl2ZTokLHBlbmRpbmc6SyxvbkNsaWNrOkosdmFyaWFudDpaLHRpdGxlOlgsY2hpbGRyZW46WX0pe2xldCBxPVo9PT0iZ3JhbnQiPyIjNGFkZTgwIjpaPT09InJldm9rZSI/IiNmODcxNzEiOiIjYTViNGZjIjtyZXR1cm4gUSgiYnV0dG9uIix7b25DbGljazpKLGRpc2FibGVkOkssdGl0bGU6WCwiYXJpYS1sYWJlbCI6WCxjbGFzc05hbWU6InctNiBoLTUuNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkIHAtMCBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSIsc3R5bGU6e2JhY2tncm91bmQ6JD9gJHtxfTIyYDoidHJhbnNwYXJlbnQiLGNvbG9yOiQ/cToicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIsb3BhY2l0eTpLPzAuNToxfSxjaGlsZHJlbjpZfSl9ZnVuY3Rpb24gVzUoe2xhYmVsOiQsY2hlY2tlZDpLLGRpc2FibGVkOko9ITEsb25DaGFuZ2U6Wn0pe3JldHVybiBRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6InN3aXRjaCIsImFyaWEtY2hlY2tlZCI6SywiYXJpYS1sYWJlbCI6JCxkaXNhYmxlZDpKLG9uQ2xpY2s6KCk9PlooIUspLGNsYXNzTmFtZTpgcmVsYXRpdmUgaC1bMThweF0gdy04IHNocmluay0wIHJvdW5kZWQtZnVsbCBib3JkZXItbm9uZSBwLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtKPyJjdXJzb3ItZGVmYXVsdCBiZy13aGl0ZS8yMCI6Sz8iY3Vyc29yLXBvaW50ZXIgYmctWyMwYTg0ZmZdIjoiY3Vyc29yLXBvaW50ZXIgYmctd2hpdGUvMjAifWAsY2hpbGRyZW46USgic3BhbiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLVsycHhdIHNpemUtWzE0cHhdIHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpsZWZ0XzAuMTVzXSAke0o/ImJnLXdoaXRlLzUwIjoiYmctd2hpdGUifWAsc3R5bGU6e2xlZnQ6Sz8xNjoyfX0pfSl9dmFyIEZKPSJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSIsQUo9InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbS0wIjtmdW5jdGlvbiBRNCh7b3ZlcmxheUVuYWJsZWQ6JCxvblRvZ2dsZU92ZXJsYXk6S30pe2xldHtzbmFwc2hvdDpKfT1MNSgpLHtoaWdobGlnaHRlZEtleTpaLHNldEhpZ2hsaWdodGVkS2V5Olh9PXYyKCksWT1KPy5lbGVtZW50cz8/W10scT15MihKKSxWPUo/LmVycm9ycz8uWzBdPz9udWxsO3JldHVybiBRKCJkaXYiLHtjbGFzc05hbWU6YCR7Rkp9IHB4LTMgcHktMmAsY2hpbGRyZW46W1EoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZTpBSixjaGlsZHJlbjoiQVggVHJlZSJ9KSxRKFc1LHtsYWJlbDoiRW5hYmxlIG92ZXJsYXkiLGNoZWNrZWQ6JCxvbkNoYW5nZTpLfSldfSksISQ/bnVsbDpxP1EoSjQse2NoaWxkcmVuOiJBWCB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4ifSk6WS5sZW5ndGg9PT0wP1EoSjQse3NwaW5uZXI6IVYsY2hpbGRyZW46Vj8/IldhaXRpbmcgZm9yIGFjY2Vzc2liaWxpdHkgZGF0YeKApiJ9KTpRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEgbXQtMiBweS0yIG1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLHJvbGU6Imxpc3QiLGNoaWxkcmVuOlkubWFwKChOLEIpPT57bGV0IFU9dTAoTik7cmV0dXJuIFEoT0ose2VsZW1lbnQ6TixpbmRleDpCLGFjdGl2ZTpVPT09WixvbkhpZ2hsaWdodDpYfSxVKX0pfSldfSl9ZnVuY3Rpb24gSjQoe2NoaWxkcmVuOiQsc3Bpbm5lcjpLPSExfSl7cmV0dXJuIFEoImRpdiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2xhc3NOYW1lOiJtdC0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHB5LTQgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W0s/USgic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToic2l6ZS0zLjUgc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8yMCBib3JkZXItdC13aGl0ZS82MCBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIn0pOm51bGwsUSgic3BhbiIse2NoaWxkcmVuOiR9KV19KX12YXIgT0o9bjAoZnVuY3Rpb24oe2VsZW1lbnQ6SyxpbmRleDpKLGFjdGl2ZTpaLG9uSGlnaGxpZ2h0Olh9KXtsZXQgWT11MChLKSxxPXgyKEssSiksVj1gJHtNYXRoLnJvdW5kKEsuZnJhbWUud2lkdGgpfXgke01hdGgucm91bmQoSy5mcmFtZS5oZWlnaHQpfWAsTj1bcS5sYWJlbCxxLnJvbGV8fHEudHlwZXx8ImVsZW1lbnQiLFZdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIik7cmV0dXJuIFEoImRpdiIse3JvbGU6Imxpc3RpdGVtIix0YWJJbmRleDowLCJkYXRhLWF4LWtleSI6WSx0aXRsZTpOLG9uTW91c2VFbnRlcjooKT0+WChZKSxvbk1vdXNlTGVhdmU6KCk9PlgobnVsbCksb25Gb2N1czooKT0+WChZKSxvbkJsdXI6KCk9PlgobnVsbCksY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBweS0xIHB4LTAuNSBtaW4tdy0wICR7Wj8iYmctd2hpdGUvWzAuMDZdIjoiIn1gLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjpLLmxhYmVsfHxLLnJvbGV8fCJVbmxhYmVsZWQifSksUSgic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS80NSBmb250LW1vbm8gdGV4dC1bMTBweF0iLGNoaWxkcmVuOksucm9sZXx8Sy50eXBlfHwiZWxlbWVudCJ9KV19KSxRKCJjb2RlIix7Y2xhc3NOYW1lOiJzaHJpbmstMCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS81NSBmb250LW1vbm8gdGV4dC1bMTBweF0gcHgtMS41IHB5LVszcHhdIixjaGlsZHJlbjpWfSldfSl9LCgkLEspPT4kLmluZGV4PT09Sy5pbmRleCYmJC5hY3RpdmU9PT1LLmFjdGl2ZSYmJC5vbkhpZ2hsaWdodD09PUsub25IaWdobGlnaHQmJlMyKCQuZWxlbWVudCxLLmVsZW1lbnQpKTt2YXIgTUo9bmV3IFNldChbImltYWdlL2pwZWciLCJpbWFnZS9wbmciLCJpbWFnZS9naWYiLCJpbWFnZS9oZWljIiwiaW1hZ2UvaGVpZiIsImltYWdlL3dlYnAiLCJ2aWRlby9tcDQiLCJ2aWRlby9xdWlja3RpbWUiXSk7dmFyIGkyPSJhcHBsaWNhdGlvbi94LXNlcnZlLXNpbS1ob3N0LXBhdGgiO2FzeW5jIGZ1bmN0aW9uIFo0KCQsSyxKKXtsZXQgWj1hd2FpdCBLKCJhZGRNZWRpYSIse3VkaWQ6SixwYXRoOiR9KTtpZihaLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihaLnN0ZGVycnx8YGFkZG1lZGlhIGZhaWxlZCAoZXhpdCAke1ouZXhpdENvZGV9KWApfWZ1bmN0aW9uIF81KCQpe2xldCBLPSQubmFtZSxKPUsubGFzdEluZGV4T2YoIi4iKTtpZihKPj0wKXJldHVybiBLLnNsaWNlKEorMSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0vZywiIikuc2xpY2UoMCwxMCl8fCJiaW4iO2lmKCQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1mdW5jdGlvbiBYNCgkKXtpZihfNSgkKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKE1KLmhhcygkLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gUEooJCl7bGV0IEs9bmV3IFVpbnQ4QXJyYXkoJCksSj0iIjtmb3IobGV0IFo9MDtaPEsubGVuZ3RoO1orPTMyNzY4KUorPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4uSy5zdWJhcnJheShaLForMzI3NjgpKTtyZXR1cm4gYnRvYShKKX1hc3luYyBmdW5jdGlvbiBZNCgkLEssSixaKXtsZXQgWD0wO2ZvcihsZXQgWT0wO1k8JC5zaXplO1krPTE5NjYwOCl7bGV0IHE9YXdhaXQgJC5zbGljZShZLFkrMTk2NjA4KS5hcnJheUJ1ZmZlcigpLFY9UEoocSksTj1hd2FpdCBKKCJ1cGxvYWRDaHVuayIse3BhdGg6SyxkYXRhOlYsYXBwZW5kOlk+MH0pO2lmKE4uZXhpdENvZGUhPT0wKXRocm93IEVycm9yKE4uc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7Ti5leGl0Q29kZX0pYCk7aWYoIVopY29udGludWU7bGV0IEI9TWF0aC5taW4oWSsxOTY2MDgsJC5zaXplKSxVPU1hdGguZmxvb3IoQi8kLnNpemUqMTAwKTtpZihVIT09WClYPVUsWihCLyQuc2l6ZSl9fWFzeW5jIGZ1bmN0aW9uIHE0KCQsSyxKLFope2lmKCQuc2l6ZT41MjQyODgwMDApdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFg9YC90bXAvJHtLfS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7Sn1gO3JldHVybiBhd2FpdCBZNCgkLFgsWiksWH12YXIgV0o9Ikluc3RhbGxpbmcgYXBwcyByZXF1aXJlcyBzZXJ2ZS1zaW0gLS1hbGxvdy1leGVjIjthc3luYyBmdW5jdGlvbiBWNCgkLEssSixaLFgse2FsbG93SW5zdGFsbDpZPSEwfT17fSl7aWYoJC5zaXplPjUyNDI4ODAwMCl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtpZihLPT09ImlwYSImJiFZKXRocm93IEVycm9yKFdKKTtsZXQgcT1LPT09ImlwYSI/ImlwYSI6XzUoJCksTj1gL3RtcC8ke0s9PT0iaXBhIj8ic2VydmUtc2ltLWluc3RhbGwiOiJzZXJ2ZS1zaW0tdXBsb2FkIn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke3F9YDt0cnl7WCgwKSxhd2FpdCBZNCgkLE4sSixYKSxYKG51bGwpO2xldCBCPWF3YWl0IEooSz09PSJpcGEiPyJpbnN0YWxsQXBwIjoiYWRkTWVkaWEiLHt1ZGlkOloscGF0aDpOfSk7aWYoQi5leGl0Q29kZSE9PTApe2xldCBVPUs9PT0iaXBhIj8iaW5zdGFsbCI6ImFkZG1lZGlhIjt0aHJvdyBFcnJvcihCLnN0ZGVycnx8YCR7VX0gZmFpbGVkIChleGl0ICR7Qi5leGl0Q29kZX0pYCl9fWZpbmFsbHl7SigidXBsb2FkUmVtb3ZlIix7cGF0aDpOfSkuY2F0Y2goKCk9Pnt9KX19dmFyIF9KPTMwMDA7YXN5bmMgZnVuY3Rpb24gREooJCxLPWZldGNoKXt0cnl7bGV0IEo9YXdhaXQgSygkLHtjYWNoZToibm8tc3RvcmUifSk7aWYoIUoub2spcmV0dXJuIG51bGw7bGV0IFo9YXdhaXQgSi5qc29uKCk7cmV0dXJuIFomJnR5cGVvZiBaPT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KFopP1o6bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19dmFyIFRKPTIwOTcxNTIwMCx3Sj0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5IixCND0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiBFSigkLEspe2lmKEspcmV0dXJuImFjdGl2ZSI7aWYoJD09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKCQ9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiAkfWZ1bmN0aW9uIElKKCQpe2lmKCEkLmluamVjdGVkKXJldHVybiJwbGF5IjtpZigkLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKCQuYnVuZGxlSWQmJiEkLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBiSigkKXtyZXR1cm4gJC5zcGxpdChgCmApLm1hcCgoSyk9PksudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoSyk9PntsZXQgSj1LLmluZGV4T2YoIlx0Iik7aWYoSjw9MClyZXR1cm5bXTtsZXQgWj1LLnNsaWNlKDAsSikudHJpbSgpLFg9Sy5zbGljZShKKzEpLnRyaW0oKTtpZighWnx8IVgpcmV0dXJuW107cmV0dXJuW3tpZDpaLG5hbWU6WH1dfSl9dmFyIHlKPW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gTjQoJCl7aWYoJC50eXBlJiYkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0IEs9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksSj1LLmxhc3RJbmRleE9mKCIuIik7aWYoSjwwKXJldHVybiExO3JldHVybiB5Si5oYXMoSy5zbGljZShKKzEpKX1mdW5jdGlvbiBTSigkKXtyZXR1cm4gTjQoJCkmJiQuc2l6ZT5USn1mdW5jdGlvbiB4SigkKXtsZXQgSz0oJC50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZihLPT09ImltYWdlL2hlaWMifHxLPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBKPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBKLmVuZHNXaXRoKCIuaGVpYyIpfHxKLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIFJKKHtyYXdNZXNzYWdlOiQsbGFzdEZpbGVJc0hlaWM6Syxzb3VyY2U6Sn0pe2lmKEsmJihKPT09ImltYWdlInx8Sj09PSJ2aWRlbyIpKXJldHVybiBCNDtyZXR1cm4gJH1mdW5jdGlvbiB2Sih7c3RhdGU6JH0pe2xldCBLPSQ9PT0iYWN0aXZlIj8iQWN0aXZlIjokPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixKPSQ9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6JD09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gUSgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjokLGNoaWxkcmVuOltKJiZRKCJzcGFuIix7Y2xhc3NOYW1lOkp9KSxLXX0pfWZ1bmN0aW9uIGpKKCl7cmV0dXJuIFEoInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIGdKKHttb2RlOiQsZmlsZU5hbWU6Syx3ZWJjYW1OYW1lOkosc291cmNlS2luZDpafSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKCQ9PT0iZmlsZSIpcmV0dXJuIFEoSjEse2NoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46Wj09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksUSgic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOks/PyIifSldfSk7aWYoJD09PSJ3ZWJjYW0iKXJldHVybiBRKEoxLHtjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOiJXZWJjYW0ifSksUSgic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOko/PyIifSldfSk7cmV0dXJuIFEoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvODUgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJTZWxlY3Qgb3IgZHJvcCBtZWRpYSJ9KX1mdW5jdGlvbiBHNCh7a2luZDokLG1lc3NhZ2U6S30pe3JldHVybiBRKCJkaXYiLHtjbGFzc05hbWU6JD09PSJ3YXJuaW5nIj8iYmctd2FybmluZy8xMCBib3JkZXIgYm9yZGVyLXdhcm5pbmcvMjUgdGV4dC13YXJuaW5nLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyI6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiLCJkYXRhLWNhbWVyYS1iYW5uZXIta2luZCI6JCxyb2xlOiQ9PT0iZXJyb3IiPyJhbGVydCI6InN0YXR1cyIsY2hpbGRyZW46S30pfWZ1bmN0aW9uIFU0KHt1ZGlkOiQsYnVuZGxlSWQ6S30pe2xldFtKLFpdPU8oITEpLFtYLFldPU8oInBsYWNlaG9sZGVyIiksW3EsVl09TygiIiksW04sQl09TyhudWxsKSxbVSxHXT1PKCExKSx6PUkoMCksW0gsRl09TyghMSksW0wsa109TyghMSksQz1JKG51bGwpLFtQLHldPU8oW10pLFtULEFdPU8oITEpLFt3LGldPU8oIiIpLFt2LGpdPU8oIm9mZiIpLFtkLFoxXT1PKG51bGwpLFtxMSxvXT1PKG51bGwpLFQxPWQhPT1udWxsfHxxMSE9PW51bGwsW2csZl09TyhudWxsKSxbdCxDMV09TyhudWxsKSxbLE4xXT1PKG51bGwpLFtWMSxrMV09TyghMSksW0cxLFJdPU8oInJlYWR5IiksW2Mscl09TygoKT0+bmV3IFNldCksWyQxLF8xXT1PKG51bGwpLFtiLG1dPU8obnVsbCksWDE9SSghMSksRjE9SSghMSkscD1JKCJvZmYiKSxuPUkoITEpLEgxPUQoYXN5bmMoKT0+e2xldCBXPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmNhbWVyYVN0YXR1c0VuZHBvaW50O3JldHVybiBXP0RKKFcpOm51bGx9LFtdKSxPMT1JKGFzeW5jKCk9Pnt9KSxKMD1JKEspO0UoKCk9PntKMC5jdXJyZW50PUt9LFtLXSksRSgoKT0+e2xldCBXPSExO3JldHVybihhc3luYygpPT57bGV0IHU9YXdhaXQgSDEoKTtpZihXfHwhdXx8IXUuYWxpdmUpcmV0dXJuO0YxLmN1cnJlbnQ9ITA7bGV0IGE9dS5zb3VyY2U7aWYoYT09PSJwbGFjZWhvbGRlciJ8fGE9PT0id2ViY2FtInx8YT09PSJpbWFnZSJ8fGE9PT0idmlkZW8iKVkoYSk7aWYoKGE9PT0iaW1hZ2UifHxhPT09InZpZGVvIikmJnUuYXJnKVYodS5hcmcpLEIodS5hcmcuc3BsaXQoIi8iKS5wb3AoKT8/bnVsbCk7aWYoYT09PSJ3ZWJjYW0iJiZ1LmFyZylpKHUuYXJnKSxPMS5jdXJyZW50KCk7bGV0IFUxPXUubWlycm9yPT09Im9uIj8ib24iOiJvZmYiO2ooVTEpLHAuY3VycmVudD1VMSxfMSh1LmhlbHBlclBpZD8/bnVsbCksazEoITApO2xldCBXMT1BcnJheS5pc0FycmF5KHUuYnVuZGxlSWRzKT91LmJ1bmRsZUlkczpbXTtpZihXMS5sZW5ndGg+MClyKG5ldyBTZXQoVzEpKTtsZXQgWTE9SjAuY3VycmVudCxBMT1hJiZhIT09InBsYWNlaG9sZGVyIjtSKFkxJiZXMS5pbmNsdWRlcyhZMSkmJkExPyJhY3RpdmUiOiJyZWFkeSIpLE4xKGBSZWF0dGFjaGVkIOKGkiAke2E/PyJydW5uaW5nIGhlbHBlciJ9JHt1LmFyZz9gICgke3UuYXJnfSlgOiIifWApfSkoKSwoKT0+e1c9ITB9fSxbJCxIMV0pLEUoKCk9PntsZXQgVz0hMSx1PSExLGE9bnVsbCxVMT1hc3luYygpPT57aWYoV3x8dSlyZXR1cm47aWYodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpcmV0dXJuO3U9ITA7dHJ5e2xldCBZMT1hd2FpdCBIMSgpO2lmKFcpcmV0dXJuO2xldCBBMT0hIVkxPy5hbGl2ZSxuMT1BcnJheS5pc0FycmF5KFkxPy5idW5kbGVJZHMpP1kxLmJ1bmRsZUlkczpudWxsLGwxPSEhSyYmKG4xP24xLmluY2x1ZGVzKEspOmMuaGFzKEspKSxwMT1ZMT8uc291cmNlPz9udWxsLEcwPVYxJiZBMSYmbDEmJiEhKHAxJiZwMSE9PSJwbGFjZWhvbGRlciIpJiYoJDE9PW51bGx8fFkxPy5oZWxwZXJQaWQ9PT0kMSk7aWYoUigoXyk9PkVKKF8sRzApKSwhQTEpazEoKF8pPT57aWYoIV8pcmV0dXJuIF87cmV0dXJuIHIobmV3IFNldCksXzEobnVsbCkscC5jdXJyZW50PSJvZmYiLCExfSk7ZWxzZSBpZihWMSYmJDEhPW51bGwmJlkxPy5oZWxwZXJQaWQhPT0kMSlrMSghMSkscihuZXcgU2V0KSxfMShudWxsKSxwLmN1cnJlbnQ9Im9mZiI7ZWxzZSBpZihBMSYmQXJyYXkuaXNBcnJheShZMT8uYnVuZGxlSWRzKSl7bGV0IF89WTEuYnVuZGxlSWRzO3IoKE0pPT57aWYoTS5zaXplPT09Xy5sZW5ndGgmJl8uZXZlcnkoKHgpPT5NLmhhcyh4KSkpcmV0dXJuIE07cmV0dXJuIG5ldyBTZXQoXyl9KX19ZmluYWxseXt1PSExfX07YT1zZXRJbnRlcnZhbCgoKT0+e1UxKCl9LF9KKTtsZXQgVzE9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0idmlzaWJsZSIpVTEoKX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixXMSk7cmV0dXJuKCk9PntpZihXPSEwLGEpY2xlYXJJbnRlcnZhbChhKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFcxKX19LFtIMSxWMSwkMSxLLGNdKTtsZXQgZzE9RChhc3luYygpPT57QSghMCksZihudWxsKTt0cnl7bGV0IFc9YXdhaXQgeDEoImNhbWVyYUxpc3RXZWJjYW1zIik7aWYoVy5leGl0Q29kZSE9PTApe2YoVy5zdGRlcnIudHJpbSgpfHxgLS1saXN0LXdlYmNhbXMgZmFpbGVkICgke1cuZXhpdENvZGV9KWApO3JldHVybn1sZXQgdT1iSihXLnN0ZG91dCk7aWYoeSh1KSx1Lmxlbmd0aD4wJiYhdylpKHVbMF0uaWQpfWZpbmFsbHl7QSghMSl9fSxbd10pO0UoKCk9PntPMS5jdXJyZW50PWcxfSxbZzFdKSxFKCgpPT57aWYoTCYmUC5sZW5ndGg9PT0wJiYhVClnMSgpfSxbTCxQLmxlbmd0aCxULGcxXSk7bGV0IEQxPUQoKFcpPT57ZihSSih7cmF3TWVzc2FnZTpXLGxhc3RGaWxlSXNIZWljOlgxLmN1cnJlbnQsc291cmNlOlh9KSl9LFtYXSksZDE9RChhc3luYyhXLHUsYSk9PntsZXQgVTE9Vz09PSJpbWFnZSJ8fFc9PT0idmlkZW8iO2lmKFUxJiYhYS50cmltKCkpcmV0dXJuIGYoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIiksITE7bGV0IFcxPWF3YWl0IHgxKCJjYW1lcmFTd2l0Y2giLHt1ZGlkOiQsc291cmNlOlcsLi4uVz09PSJ3ZWJjYW0iJiZ1P3t3ZWJjYW1JZDp1fTp7fSwuLi5VMT97ZmlsZVBhdGg6YS50cmltKCl9Ont9fSk7aWYoVzEuZXhpdENvZGUhPT0wKXJldHVybiBEMShXMS5zdGRlcnIudHJpbSgpfHxXMS5zdGRvdXQudHJpbSgpfHxgc3dpdGNoIGZhaWxlZCAoJHtXMS5leGl0Q29kZX0pYCksITE7WDEuY3VycmVudD0hMTt0cnl7bGV0IFkxPUpTT04ucGFyc2UoVzEuc3Rkb3V0LnRyaW0oKSk7TjEoYFN3aXRjaGVkIOKGkiAke1kxLnNvdXJjZT8/V30ke1kxLmFyZz9gICgke1kxLmFyZ30pYDoiIn1gKX1jYXRjaHtOMShgU3dpdGNoZWQg4oaSICR7V31gKX1yZXR1cm4hMH0sWyQsRDFdKSxzMT1EKGFzeW5jKCk9PntpZighSylyZXR1cm47WjEoImluamVjdCIpLGYobnVsbCksTjEobnVsbCk7dHJ5e2xldCBXPVg9PT0iaW1hZ2UifHxYPT09InZpZGVvIjtpZihXJiYhcS50cmltKCkpe2YoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufWxldCB1PWF3YWl0IHgxKCJjYW1lcmFJbmplY3QiLHt1ZGlkOiQsYnVuZGxlSWQ6Syxzb3VyY2U6WCxtaXJyb3I6diwuLi5XP3tmaWxlUGF0aDpxLnRyaW0oKX06e30sLi4uWD09PSJ3ZWJjYW0iJiZ3P3t3ZWJjYW1JZDp3fTp7fX0pO2lmKHUuZXhpdENvZGUhPT0wKXtEMSh1LnN0ZGVyci50cmltKCl8fHUuc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7dS5leGl0Q29kZX0pYCk7cmV0dXJufVgxLmN1cnJlbnQ9ITE7bGV0IGE9bnVsbDt0cnl7bGV0IFUxPUpTT04ucGFyc2UodS5zdGRvdXQudHJpbSgpKTthPVUxLmhlbHBlclBpZD8/bnVsbDtsZXQgVzE9VTEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixZMT1VMS5waWQ/YCBwaWQgJHtVMS5waWR9YDoiIixBMT1VMS5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke1UxLmhlbHBlclBpZH1gOiIiO04xKGAke1cxfSAke1UxLnNvdXJjZT8/WH0gaW50byAke0t9JHtZMX0ke0ExfWApfWNhdGNoe04xKHUuc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfWsxKCEwKSxSKFg9PT0icGxhY2Vob2xkZXIiPyJyZWFkeSI6ImFjdGl2ZSIpLF8xKGEpLHIoKFUxKT0+VTEuaGFzKEspP1UxOm5ldyBTZXQoVTEpLmFkZChLKSkscC5jdXJyZW50PXZ9ZmluYWxseXtaMShudWxsKX19LFtLLCQsWCxxLHcsdixEMV0pLE4wPVYxP2Ake1h9Ojoke1g9PT0id2ViY2FtIj93OiIifTo6JHtYPT09ImltYWdlInx8WD09PSJ2aWRlbyI/cToiIn1gOm51bGwsSzE9ISFLJiZjLmhhcyhLKSxjMT1LMSYmWCE9PSJwbGFjZWhvbGRlciI7RSgoKT0+e2lmKCFjMSl7bi5jdXJyZW50PSExO3JldHVybn1pZihuLmN1cnJlbnQpcmV0dXJuO24uY3VycmVudD0hMCxaKCEwKX0sW2MxXSksRSgoKT0+e2lmKCFiKXJldHVybjtpZighS3x8VDF8fEgpcmV0dXJuO2lmKFghPT0id2ViY2FtInx8dyE9PWIpcmV0dXJuO2lmKG0obnVsbCksVjEpcmV0dXJuO3MxKCl9LFtiLEssVDEsSCxYLHcsVjEsczFdKSxFKCgpPT57aWYoIVYxKXJldHVybjtpZigoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmIXEudHJpbSgpKXJldHVybjtpZihYPT09IndlYmNhbSImJiF3KXJldHVybjtpZihGMS5jdXJyZW50KXtGMS5jdXJyZW50PSExO3JldHVybn1sZXQgVz0hMTtyZXR1cm4oYXN5bmMoKT0+e28oInN3aXRjaCIpLGYobnVsbCk7dHJ5e2lmKFcpcmV0dXJuO2F3YWl0IGQxKFgsdyxxKX1maW5hbGx5e2lmKCFXKW8obnVsbCl9fSkoKSwoKT0+e1c9ITB9fSxbTjBdKSxFKCgpPT57aWYoIVYxKXJldHVybjtpZihwLmN1cnJlbnQ9PT12KXJldHVybjtsZXQgVz12LHU9ITE7cmV0dXJuKGFzeW5jKCk9PntvKCJtaXJyb3IiKSxmKG51bGwpO3RyeXtsZXQgYT1hd2FpdCB4MSgiY2FtZXJhTWlycm9yIix7dWRpZDokLG1pcnJvcjpXfSk7aWYodSlyZXR1cm47aWYoYS5leGl0Q29kZSE9PTApe2YoYS5zdGRlcnIudHJpbSgpfHxhLnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke2EuZXhpdENvZGV9KWApO3JldHVybn1wLmN1cnJlbnQ9VyxOMShgTWlycm9yIOKGkiAke1d9YCl9ZmluYWxseXtpZighdSlvKG51bGwpfX0pKCksKCk9Pnt1PSEwfX0sW3YsVjFdKTtsZXQgRTA9RChhc3luYygpPT57WjEoInN0b3AiKSxmKG51bGwpO3RyeXtsZXQgVz1hd2FpdCB4MSgiY2FtZXJhU3RvcCIse3VkaWQ6JH0pO2lmKFcuZXhpdENvZGUhPT0wKXtmKFcuc3RkZXJyLnRyaW0oKXx8YHN0b3Atd2ViY2FtIGZhaWxlZCAoJHtXLmV4aXRDb2RlfSlgKTtyZXR1cm59TjEoIkNhbWVyYSBoZWxwZXIgc3RvcHBlZC4iKSxrMSghMSksUigicmVhZHkiKSxyKG5ldyBTZXQpLHAuY3VycmVudD0ib2ZmIn1maW5hbGx5e1oxKG51bGwpfX0sWyRdKSx2MT1EKGFzeW5jKFcpPT57bGV0IHU9eEooe3R5cGU6Vy50eXBlLG5hbWU6Vy5uYW1lfSksYT1XLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIil8fHUsVTE9Vy50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpfHxONCh7dHlwZTpXLnR5cGUsbmFtZTpXLm5hbWV9KTtpZighYSYmIVUxKXtYMS5jdXJyZW50PSExLGYoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtXLnR5cGV8fFcubmFtZX1gKTtyZXR1cm59aWYoRighMCksZihudWxsKSxDMShudWxsKSxTSih7dHlwZTpXLnR5cGUsbmFtZTpXLm5hbWUsc2l6ZTpXLnNpemV9KSlDMSh3Sik7WDEuY3VycmVudD11O3RyeXtsZXQgVzE9XzUoVyksWTE9YXdhaXQgcTQoVywic2VydmUtc2ltLWNhbXNyYyIsVzEseDEpO0IoVy5uYW1lKSxZKFUxPyJ2aWRlbyI6ImltYWdlIiksVihZMSksTjEoYExvYWRlZCAke1cubmFtZX1gKX1jYXRjaChXMSl7aWYoWDEuY3VycmVudClmKEI0KTtlbHNlIGYoVzE/Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIil9ZmluYWxseXtGKCExKX19LFtdKSxWMD1EKGFzeW5jKFcpPT57Vy5wcmV2ZW50RGVmYXVsdCgpLFcuc3RvcFByb3BhZ2F0aW9uKCksei5jdXJyZW50PTAsRyghMSk7bGV0IHU9Vy5kYXRhVHJhbnNmZXI/LmZpbGVzPy5bMF07aWYodSlhd2FpdCB2MSh1KX0sW3YxXSksVTA9RCgoKT0+e1koInBsYWNlaG9sZGVyIiksVigiIiksQihudWxsKSxmKG51bGwpLEMxKG51bGwpLFgxLmN1cnJlbnQ9ITF9LFtdKSxQMT1EKCgpPT57Qy5jdXJyZW50Py5jbGljaygpfSxbXSksaDE9RChhc3luYyhXKT0+e2xldCB1PVcudGFyZ2V0LGE9dS5maWxlcz8uWzBdO2lmKHUudmFsdWU9IiIsYSlhd2FpdCB2MShhKX0sW3YxXSk7RSgoKT0+e2lmKCFMKXJldHVybjtsZXQgVz0odSk9PntsZXQgYT11LnRhcmdldDtpZihhIGluc3RhbmNlb2YgRWxlbWVudCYmYS5jbG9zZXN0KCJbZGF0YS1jYW1lcmEtc291cmNlLW1lbnVdIikpcmV0dXJuO2soITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsVyksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFcpfSxbTF0pO2xldCBRMD1EKChXKT0+e2lmKGkoVy5pZCksWSgid2ViY2FtIiksQihudWxsKSxmKG51bGwpLFgxLmN1cnJlbnQ9ITEsayghMSksSyltKFcuaWQpfSxbS10pLEYwPUQoKCk9PntqKChXKT0+Vz09PSJvbiI/Im9mZiI6Im9uIil9LFtdKSxyMT0hVjF8fFg9PT0icGxhY2Vob2xkZXIiLEkwPUQoKFcpPT57aWYoVy5wcmV2ZW50RGVmYXVsdCgpLHouY3VycmVudCsrLHouY3VycmVudD09PTEpRyghMCl9LFtdKSx4MD1EKChXKT0+e2lmKFcucHJldmVudERlZmF1bHQoKSxXLmRhdGFUcmFuc2ZlcilXLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW10pLEEwPUQoKFcpPT57aWYoVy5wcmV2ZW50RGVmYXVsdCgpLHouY3VycmVudC0tLHouY3VycmVudDw9MCl6LmN1cnJlbnQ9MCxHKCExKX0sW10pLG8xPUlKKHtidW5kbGVJZDpLLGluamVjdGVkOlYxLHNvdXJjZTpYLGZvcmVncm91bmRJc0luamVjdGVkOksxfSksRTE9bzE9PT0ic3RvcCI/e2xhYmVsOmQ9PT0ic3RvcCI/IlN0b3BwaW5n4oCmIjoiU3RvcCIsb25DbGljazpFMCxraW5kOiJzdG9wIn06bzE9PT0iYXR0YWNoIj97bGFiZWw6ZD09PSJpbmplY3QiPyJJbmplY3RpbmfigKYiOmBJbmplY3QgJHtLfWAsb25DbGljazpzMSxraW5kOiJhdHRhY2gifTp7bGFiZWw6ZD09PSJpbmplY3QiPyJTdGFydGluZ+KApiI6IlBsYXkiLG9uQ2xpY2s6czEsa2luZDoicGxheSJ9LHQxPW8xPT09InN0b3AiP0h8fGQhPT1udWxsOiFLfHxIfHxkIT09bnVsbCx3MT1YPT09InBsYWNlaG9sZGVyIixaMD1YPT09IndlYmNhbSIsYjA9KFg9PT0iaW1hZ2UifHxYPT09InZpZGVvIikmJiEhTix6MD1aMD9QLmZpbmQoKFcpPT5XLmlkPT09dyk/Lm5hbWU/P3c/PyJXZWJjYW0iOm51bGwsTDA9SD8idXBsb2FkaW5nIjpiMD8iZmlsZSI6WjA/IndlYmNhbSI6InBsYWNlaG9sZGVyIjtyZXR1cm4gUShxMCx7b3BlbjpKLG9uT3BlbkNoYW5nZTpaLGJvZHlDbGFzc05hbWU6InB0LTIuNSIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6UShKMSx7Y2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkNhbWVyYSJ9KSxRKHZKLHtzdGF0ZTpHMX0pXX0pLGNoaWxkcmVuOlEoImRpdiIse29uRHJhZ0VudGVyOkkwLG9uRHJhZ092ZXI6eDAsb25EcmFnTGVhdmU6QTAsb25Ecm9wOlYwLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMi41IixjaGlsZHJlbjpbUSgicCIse2NsYXNzTmFtZToibS0wIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46IlJlcGxhY2VzIHRoZSBzaW11bGF0b3IncyBjYW1lcmEgZmVlZCBieSBpbmplY3RpbmcgYSBkeWxpYiBhdCBhcHAgbGF1bmNoIGFuZCBzdHJlYW1pbmcgZnJhbWVzIGludG8gc2hhcmVkIG1lbW9yeS4gUGljayBtZWRpYSBvciBhIHdlYmNhbSwgdGhlbiBQbGF5IHRvIGluamVjdCBpbnRvIHRoZSBmb3JlZ3JvdW5kIGFwcC4ifSksUSgiaW5wdXQiLHtyZWY6Qyx0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyosdmlkZW8vKiIsY2xhc3NOYW1lOiJoaWRkZW4iLG9uQ2hhbmdlOmgxfSksUSgiZGl2Iix7b25DbGljazooVyk9PntpZighdzEpcmV0dXJuO2lmKFcudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWNsZWFyLW1lZGlhXSIpKXJldHVybjtQMSgpfSx0aXRsZTp3MT8iTm8gc291cmNlIHNlbGVjdGVkIOKAlCBQbGF5IHVzZXMgYSB0ZXN0LXBhdHRlcm4gZmVlZC4gQ2xpY2sgdG8gcGljayBhbiBpbWFnZS92aWRlbywgb3IgZHJvcCBvbmUgaGVyZS4iOlowP2BTb3VyY2U6ICR7ejB9YDpgU291cmNlOiAke04/P1h9YCxjbGFzc05hbWU6WyJyZWxhdGl2ZSBtaW4taC1bNDRweF0gZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIuNSBweC0zLjUgcHktMi41IHJvdW5kZWQtWzdweF0gdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1bYm9yZGVyLWNvbG9yLGJhY2tncm91bmRdIGR1cmF0aW9uLTE1MCIsdzE/ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItd2hpdGUvMTIiOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IixVPyIhYmctW3JnYmEoMTAsMTMyLDI1NSwwLjA4KV0gIWJvcmRlci1bcmdiYSgxMCwxMzIsMjU1LDAuNildIjoiIixIPyJjdXJzb3ItcHJvZ3Jlc3MiOncxPyJjdXJzb3ItcG9pbnRlciI6ImN1cnNvci1kZWZhdWx0Il0uam9pbigiICIpLGNoaWxkcmVuOltRKGdKLHttb2RlOkwwLGZpbGVOYW1lOk4sd2ViY2FtTmFtZTp6MCxzb3VyY2VLaW5kOlh9KSwhdzEmJiFIJiZRKCJidXR0b24iLHsiZGF0YS1jbGVhci1tZWRpYSI6ITAsb25DbGljazooVyk9PntXLnN0b3BQcm9wYWdhdGlvbigpLFUwKCl9LGNsYXNzTmFtZToic2hyaW5rLTAgdy01IGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNvdXJjZSIsdGl0bGU6IkNsZWFyIOKGkiBwbGFjZWhvbGRlciIsY2hpbGRyZW46UShCMCx7c2l6ZToxNCxzdHJva2VXaWR0aDoyfSl9KV19KSx3MSYmIUgmJlEoakose30pLFEoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIiwiZGF0YS1jYW1lcmEtc291cmNlLW1lbnUiOiEwLGNoaWxkcmVuOltRKCJidXR0b24iLHtvbkNsaWNrOigpPT5rKChXKT0+IVcpLGNsYXNzTmFtZToiaC1mdWxsIG1pbi1oLVszNnB4XSB3LTEwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS84NSByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIHAtMCBob3ZlcjpiZy13aGl0ZS9bMC4wNl0gaG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOkwsdGl0bGU6WD09PSJ3ZWJjYW0iP2BTb3VyY2U6IHdlYmNhbSR7dz9gICgke1AuZmluZCgoVyk9PlcuaWQ9PT13KT8ubmFtZT8/d30pYDoiIn0g4oCUIGNsaWNrIHRvIGNoYW5nZWA6YFNvdXJjZTogJHtYfSDigJQgY2xpY2sgdG8gcGljayBtZWRpYSBvciB3ZWJjYW1gLCJhcmlhLWxhYmVsIjoiQ2hvb3NlIGNhbWVyYSBzb3VyY2UiLGNoaWxkcmVuOlEobTUse3NpemU6MjAsc3Ryb2tlV2lkdGg6Mn0pfSksTCYmUSgiZGl2Iix7cm9sZToibWVudSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs2cHgpXSBsZWZ0LTAgei0xMCBtaW4tdy1bMjAwcHhdIGZsZXggZmxleC1jb2wgZ2FwLXB4IHAtMSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQpXSIsY2hpbGRyZW46W1EoImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6InRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsb25DbGljazooKT0+e2soITEpLFAxKCl9LHRpdGxlOiJQaWNrIGFuIGltYWdlIG9yIHZpZGVvIGZyb20gZGlzayIsY2hpbGRyZW46IkJyb3dzZSBtZWRpYeKApiJ9KSxRKCJkaXYiLHtjbGFzc05hbWU6ImgtcHggYmctd2hpdGUvOCBteS0xIn0pLFEoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHBsLTIuNSBwci0yIHB0LTEgcGItWzJweF0iLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSIsY2hpbGRyZW46VD8iQ2FtZXJhcyAobG9hZGluZ+KApikiOlAubGVuZ3RoPT09MD8iTm8gY2FtZXJhcyI6IkNhbWVyYXMifSksUSgiYnV0dG9uIix7b25DbGljazooVyk9PntXLnN0b3BQcm9wYWdhdGlvbigpLGcxKCl9LGRpc2FibGVkOlQsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LVsyMnB4XSBoLVsyMnB4XSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAgZGlzYWJsZWQ6b3BhY2l0eS01MCIsImFyaWEtbGFiZWwiOiJSZWZyZXNoIGNhbWVyYXMiLHRpdGxlOiJSZWZyZXNoIGNhbWVyYXMiLGNoaWxkcmVuOlEoczAse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mn0pfSldfSksUC5tYXAoKFcpPT57bGV0IHU9WD09PSJ3ZWJjYW0iJiZ3PT09Vy5pZDtyZXR1cm4gUSgiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZTpbInRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLHU/IiFiZy13aGl0ZS9bMC4xMl0gIXRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzg1Il0uam9pbigiICIpLG9uQ2xpY2s6KCk9PlEwKFcpLHRpdGxlOlcubmFtZSxjaGlsZHJlbjpXLm5hbWV9LFcuaWQpfSldfSldfSksUSgiYnV0dG9uIix7b25DbGljazpFMS5vbkNsaWNrLGRpc2FibGVkOnQxLGNsYXNzTmFtZTpbImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMi41IGJvcmRlci1ub25lIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpvcGFjaXR5LTUwIG1pbi1oLVszNnB4XSIsRTEua2luZD09PSJzdG9wIj8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJdLmpvaW4oIiAiKSx0aXRsZTpFMS5raW5kPT09InN0b3AiPyJTdG9wIHRoZSBjYW1lcmEgaGVscGVyIGFuZCB0ZXJtaW5hdGUgaW5qZWN0ZWQgYXBwcyI6RTEua2luZD09PSJhdHRhY2giP2BJbmplY3QgJHtLfSBzbyBpdCBqb2lucyB0aGUgY2FtZXJhIGZlZWRgOiFLPyJCcmluZyBhbiBhcHAgdG8gdGhlIGZvcmVncm91bmQgZmlyc3QiOiJTdGFydDogaW5qZWN0IHRoZSBkeWxpYiBhbmQgbGF1bmNoIHRoZSBmb3JlZ3JvdW5kIGFwcCB3aXRoIHRoZSBjaG9zZW4gc291cmNlIiwiYXJpYS1wcmVzc2VkIjpFMS5raW5kPT09InN0b3AiLCJhcmlhLWxhYmVsIjpFMS5raW5kPT09InN0b3AiPyJTdG9wIjoiUGxheSIsY2hpbGRyZW46W0UxLmtpbmQ9PT0ic3RvcCI/USgkMix7fSk6UShlNSx7fSksUSgic3BhbiIse2NoaWxkcmVuOkUxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOkUxLmtpbmQ9PT0iYXR0YWNoIj8iSW5qZWN0IjoiUGxheSJ9KV19KSxRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6RjAsZGlzYWJsZWQ6cjEsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIG1pbi1oLVszNnB4XSBib3JkZXIgcm91bmRlZC1bN3B4XSBmb250LVtpbmhlcml0XSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBhY3RpdmU6c2NhbGUtWzAuOTddICR7dj09PSJvbiI/ImJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjg4XSBlbmFibGVkOmhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjp0ZXh0LVsjMGEwYTBjXSI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXItd2hpdGUvOCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDldIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBlbmFibGVkOmhvdmVyOnRleHQtd2hpdGUifWAsImFyaWEtbGFiZWwiOmBNaXJyb3I6ICR7dn0g4oCUIHRhcCB0byB0b2dnbGVgLHRpdGxlOnIxPyJNaXJyb3IgdG9nZ2xlIGF2YWlsYWJsZSBvbmNlIGEgc291cmNlIGlzIHN0cmVhbWluZyI6YE1pcnJvcjogJHt2fSDigJQgY2xpY2sgdG8gdG9nZ2xlYCwiYXJpYS1wcmVzc2VkIjp2PT09Im9uIixjaGlsZHJlbjpRKGg1LHtzaXplOjIwLHN0cm9rZVdpZHRoOjIsZmlsbDp2PT09Im9uIj8iY3VycmVudENvbG9yIjoibm9uZSJ9KX0pXX0pLHQmJlEoRzQse2tpbmQ6Indhcm5pbmciLG1lc3NhZ2U6dH0pLGcmJlEoRzQse2tpbmQ6ImVycm9yIixtZXNzYWdlOmd9KV19KX0pfXZhciB6ND01MDA7ZnVuY3Rpb24gTDQoe3VkaWQ6JCxldmVudHNFbmRwb2ludDpLfSl7bGV0W0osWl09TyghMSksW1gsWV09TyhbXSksW3EsVl09TyghMSksTj1SMSgoKT0+Sz8/YCR7bTEoImFwaS9ldmVudC1sb2cvZXZlbnRzIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gLFtLLCRdKTtFKCgpPT57VighMSksWShbXSk7bGV0IFU9ZTAoTik7cmV0dXJuIFUub25tZXNzYWdlPSh7ZGF0YTpHfSk9Pnt0cnl7bGV0IHo9SlNPTi5wYXJzZShHKTtpZihWKCExKSxBcnJheS5pc0FycmF5KHouZXZlbnRzKSlZKHouZXZlbnRzLnNsaWNlKC16NCkpO2Vsc2UgaWYoei5ldmVudClZKChIKT0+e3JldHVyblsuLi5ILmZpbHRlcigoTCk9PkwuaWQhPT16LmV2ZW50LmlkKSx6LmV2ZW50XS5zbGljZSgtejQpfSl9Y2F0Y2h7fX0sVS5vbmVycm9yPSgpPT5WKCEwKSwoKT0+VS5jbG9zZSgpfSxbTl0pO2xldCBCPVIxKCgpPT5YLnNsaWNlKCkucmV2ZXJzZSgpLFtYXSk7cmV0dXJuIFEocTAse29wZW46Sixvbk9wZW5DaGFuZ2U6WiwiZGF0YS1ldmVudC1sb2ciOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlEoSjEse2NoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSIsY2hpbGRyZW46IkV2ZW50IExvZyJ9KSxRKCJzcGFuIix7fSksUSgic3BhbiIse2NsYXNzTmFtZToicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXdoaXRlLzggYmctd2hpdGUvWzAuMDRdIHB4LTEuNSBweS1bM3B4XSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gdGV4dC13aGl0ZS82MCIsY2hpbGRyZW46WC5sZW5ndGh9KV19KSxjaGlsZHJlbjpCLmxlbmd0aD09PTA/USgiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTQgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46cT8iRGlzY29ubmVjdGVkIjoiTm8gZXZlbnRzIHlldCJ9KTpRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggbWF4LWgtWzMyMHB4XSBmbGV4LWNvbCBnYXAtMSBvdmVyZmxvdy15LWF1dG8gcHktMC41IFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLHJvbGU6Imxpc3QiLGNoaWxkcmVuOkIubWFwKChVKT0+UShoSix7ZXZlbnQ6VX0sVS5pZCkpfSl9KX1mdW5jdGlvbiBoSih7ZXZlbnQ6JH0pe2xldCBLPWZKKCQudGltZXN0YW1wKSxKPVskLnNvdXJjZSwkLmtpbmQsJC5hY3Rpb25dLmZpbHRlcihCb29sZWFuKS5qb2luKCIgLyAiKSxaPSQubXNnPz8kLnN1bW1hcnksWD0kLnN0YXR1cz09PSJlcnJvciI/ImJvcmRlci1bI2ZmNDUzYV0vNTAgYmctWyNmZjQ1M2FdLzEwIHRleHQtWyNmZmIzYWRdIjoiYm9yZGVyLXdoaXRlLzggYmctd2hpdGUvWzAuMDRdIHRleHQtd2hpdGUvNTAiO3JldHVybiBRKCJkaXYiLHtyb2xlOiJsaXN0aXRlbSIsdGl0bGU6SixjbGFzc05hbWU6ImdyaWQgZ3JpZC1jb2xzLVs1NnB4XzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0xLjUgcHktMS41IHRleHQtWzEycHhdIGxlYWRpbmctdGlnaHQgaG92ZXI6Ymctd2hpdGUvWzAuMDVdIixjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOkt9KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46Wn0pLFEoInNwYW4iLHtjbGFzc05hbWU6Im10LTAuNSBibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS80MCIsY2hpbGRyZW46Sn0pXX0pLCQuc3RhdHVzP1EoInNwYW4iLHtjbGFzc05hbWU6YHJvdW5kZWQtbWQgYm9yZGVyIHB4LTEuNSBweS1bM3B4XSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gJHtYfWAsY2hpbGRyZW46JC5zdGF0dXN9KTpudWxsXX0pfWZ1bmN0aW9uIGZKKCQpe2xldCBLPW5ldyBEYXRlKCQpO2lmKE51bWJlci5pc05hTihLLmdldFRpbWUoKSkpcmV0dXJuIiI7cmV0dXJuIEsudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLHtob3VyOiIyLWRpZ2l0IixtaW51dGU6IjItZGlnaXQiLHNlY29uZDoiMi1kaWdpdCJ9KX12YXIgUTI9WyJleHRyYS1zbWFsbCIsInNtYWxsIiwibWVkaXVtIiwibGFyZ2UiLCJleHRyYS1sYXJnZSIsImV4dHJhLWV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtZXh0cmEtbGFyZ2UiXSxtSj0yNTAscEo9e2FwcGVhcmFuY2U6ImxpZ2h0IiwibGlxdWlkLWdsYXNzIjoiY2xlYXIiLCJjb2xvci1maWx0ZXIiOiJub25lIiwidGV4dC1zaXplIjoibGFyZ2UiLCJyZWR1Y2UtbW90aW9uIjoib2ZmIiwiaW5jcmVhc2UtY29udHJhc3QiOiJvZmYiLCJzaG93LWJvcmRlcnMiOiJvZmYiLCJyZWR1Y2UtdHJhbnNwYXJlbmN5Ijoib2ZmIix2b2ljZW92ZXI6Im9mZiJ9LGE4PXthcHBlYXJhbmNlOlt7dmFsdWU6ImxpZ2h0IixsYWJlbDoiTGlnaHQifSx7dmFsdWU6ImRhcmsiLGxhYmVsOiJEYXJrIn1dLCJsaXF1aWQtZ2xhc3MiOlt7dmFsdWU6ImNsZWFyIixsYWJlbDoiQ2xlYXIifSx7dmFsdWU6InRpbnRlZCIsbGFiZWw6IlRpbnRlZCJ9XSwiY29sb3ItZmlsdGVyIjpbe3ZhbHVlOiJub25lIixsYWJlbDoiTm9uZSJ9LHt2YWx1ZToicmVkLWdyZWVuIixsYWJlbDoiUmVkL0dyZWVuIChQcm90YW5vcGlhKSJ9LHt2YWx1ZToiZ3JlZW4tcmVkIixsYWJlbDoiR3JlZW4vUmVkIChEZXV0ZXJhbm9waWEpIn0se3ZhbHVlOiJibHVlLXllbGxvdyIsbGFiZWw6IkJsdWUvWWVsbG93IChUcml0YW5vcGlhKSJ9LHt2YWx1ZToiZ3JheXNjYWxlIixsYWJlbDoiR3JheXNjYWxlIn1dfSx1Sj1be2tleToicmVkdWNlLW1vdGlvbiIsbGFiZWw6IlJlZHVjZSBNb3Rpb24ifSx7a2V5OiJpbmNyZWFzZS1jb250cmFzdCIsbGFiZWw6IkluY3JlYXNlIENvbnRyYXN0In0se2tleToic2hvdy1ib3JkZXJzIixsYWJlbDoiU2hvdyBCb3JkZXJzIn0se2tleToicmVkdWNlLXRyYW5zcGFyZW5jeSIsbGFiZWw6IlJlZHVjZSBUcmFuc3BhcmVuY3kifSx7a2V5OiJ2b2ljZW92ZXIiLGxhYmVsOiJWb2ljZU92ZXIifV07ZnVuY3Rpb24gZDAoe2ljb246JCxsYWJlbDpLLGNoaWxkcmVuOkp9KXtyZXR1cm4gUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgbWluLWgtWzMwcHhdIiwiZGF0YS1zZXR0aW5nLXJvdyI6SyxjaGlsZHJlbjpbUSgic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggc2l6ZS1bMThweF0gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUiLGNoaWxkcmVuOiR9KSxLXX0pLFEoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggbWluLXctMCBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46Sn0pXX0pfWZ1bmN0aW9uIGxKKHt2YWx1ZTokLGRpc2FibGVkOkssb25DaGFuZ2U6Sn0pe2xldFtaLFhdPU8obnVsbCksWT1JKG51bGwpLHE9SShudWxsKSxWPUQoKHopPT57aWYocS5jdXJyZW50PT09eilyZXR1cm47cS5jdXJyZW50PXosSih6KX0sW0pdKSxOPUQoKHopPT57aWYoWCh6KSxZLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFkuY3VycmVudCk7WS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PlYoeiksbUopfSxbVl0pLEI9RCgoKT0+e2lmKFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KSxZLmN1cnJlbnQ9bnVsbDtYKCh6KT0+e2lmKHohPT1udWxsKVYoeik7cmV0dXJuIG51bGx9KSxxLmN1cnJlbnQ9bnVsbH0sW1ZdKSxVPVEyLmxlbmd0aC0xO3JldHVybiBRKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHctWzEyMHB4XSBtaW4tdy0wIGZsZXgtY29sIixjaGlsZHJlbjpbUShFMix7ImFyaWEtbGFiZWwiOiJUZXh0IFNpemUiLG1pbjowLG1heDpVLHN0ZXA6MSx2YWx1ZTpaPz8kLGRpc2FibGVkOkssb25DaGFuZ2U6KHopPT5OKE51bWJlcih6LnRhcmdldC52YWx1ZSkpLG9uUG9pbnRlclVwOkIsb25LZXlVcDpCLG9uQmx1cjpCfSksUSgic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJwb2ludGVyLWV2ZW50cy1ub25lIG10LVszcHhdIGZsZXgganVzdGlmeS1iZXR3ZWVuIHB4LVs1LjVweF0iLGNoaWxkcmVuOlEyLm1hcCgoeik9PlEoInNwYW4iLHtjbGFzc05hbWU6InNpemUtWzJweF0gcm91bmRlZC1mdWxsIGJnLXdoaXRlLzQwIn0seikpfSldfSl9ZnVuY3Rpb24gWjIoe2xhYmVsOiQsdmFsdWU6SyxvcHRpb25zOkosZGlzYWJsZWQ6WixvbkNoYW5nZTpYfSl7cmV0dXJuIFEobjIse2xhYmVsOiQsdmFsdWU6SyxvcHRpb25zOkosZGlzYWJsZWQ6WixvbkNoYW5nZTpYLGNsYXNzTmFtZToiYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTAuNSBweC0yIG1pbi13LTAgbWF4LXctWzE1MHB4XSBkaXNhYmxlZDp0ZXh0LXdoaXRlLzQwIn0pfXZhciBKMj17YXBwZWFyYW5jZTpRKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbUSgicGF0aCIse2Q6Ik0xMiAydjIifSksUSgicGF0aCIse2Q6Ik0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUifSksUSgicGF0aCIse2Q6Ik0xNiAxMmE0IDQgMCAwIDAtNC00In0pLFEoInBhdGgiLHtkOiJtMTkgNS0xLjI1NiAxLjI1NiJ9KSxRKCJwYXRoIix7ZDoiTTIwIDEyaDIifSldfSksZ2xhc3M6USgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjIwIDIyMCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoiTTE1MiAxODNWMTk1SDEwMFYxODNIMTUyWk0xOTYgMTM5VjEyNkMxOTYgMTAxLjY5OSAxNzYuMzAxIDgyIDE1MiA4MkgxMDBDNzUuNjk5NSA4MiA1NiAxMDEuNjk5IDU2IDEyNlYxMzlDNTYgMTYzLjMwMSA3NS42OTk1IDE4MyAxMDAgMTgzVjE5NUw5OS4yNzY0IDE5NC45OTVDNjguOTIyOCAxOTQuNjExIDQ0LjM4OTMgMTcwLjA3NyA0NC4wMDQ5IDEzOS43MjRMNDQgMTM5VjEyNkM0NCA5NS4wNzIxIDY5LjA3MjEgNzAgMTAwIDcwSDE1MkMxODIuOTI4IDcwIDIwOCA5NS4wNzIxIDIwOCAxMjZWMTM5TDIwNy45OTUgMTM5LjcyNEMyMDcuNjExIDE3MC4wNzcgMTgzLjA3NyAxOTQuNjExIDE1Mi43MjQgMTk0Ljk5NUwxNTIgMTk1VjE4M0MxNzYuMzAxIDE4MyAxOTYgMTYzLjMwMSAxOTYgMTM5WiJ9KSxRKCJwYXRoIix7ZDoiTTEzNiAyNUMxNDcuMDQ2IDI1IDE1NiAzMy45NTQzIDE1NiA0NVY3MEgxNDNWNDVDMTQzIDQxLjEzNCAxMzkuODY2IDM4IDEzNiAzOEg0MUMzNy4xMzQgMzggMzQgNDEuMTM0IDM0IDQ1VjE0MEMzNCAxNDMuODY2IDM3LjEzNCAxNDcgNDEgMTQ3SDQ0Ljg2MDRDNDUuNjQ4NyAxNTEuNTM2IDQ2Ljk2MzQgMTU1Ljg5MSA0OC43NDAyIDE2MEg0MUw0MC40ODM0IDE1OS45OTNDMjkuODQ4MSAxNTkuNzI0IDIxLjI3NjUgMTUxLjE1MiAyMS4wMDY4IDE0MC41MTdMMjEgMTQwVjQ1QzIxIDMzLjk1NDMgMjkuOTU0MyAyNSA0MSAyNUgxMzZaIn0pLFEoInBhdGgiLHtkOiJNMTU2LjE5OSAxNDBDMTU2LjE5OSAxNTAuODczIDE0Ny41MjMgMTU5LjcxOSAxMzYuNzE2IDE1OS45OTNMMTM2LjE5OSAxNjBIODAuOTE3Qzc3Ljk0NjEgMTYwIDc2LjE2MzkgMTYzLjMgNzcuNzkzIDE2NS43ODRDNzkuMjQ1MSAxNjcuOTk5IDc2LjE2NDcgMTcwLjM1MyA3NC40MDk0IDE2OC4zN0w3My42MDU5IDE2Ny40NjJDNjkuMzQ5NyAxNjIuNjU0IDY3IDE1Ni40NTUgNjcgMTUwLjAzNEM2NyAxNDguMzU4IDY4LjM1ODMgMTQ3IDcwLjAzMzkgMTQ3SDEzNi4xOTlDMTQwLjA2NSAxNDcgMTQzLjE5OSAxNDMuODY2IDE0My4xOTkgMTQwVjk2Ljk5NTVDMTQzLjE5OSA5My45ODIyIDE0MS4zNTQgOTEuMjc2MyAxMzguNTQ5IDkwLjE3NjFDMTM3LjM4OSA4OS43MjE1IDEzNy43MTUgODggMTM4Ljk2IDg4TDE0My4xOTkgODhDMTUwLjM3OSA4OCAxNTYuMTk5IDkzLjgyMDMgMTU2LjE5OSAxMDFWMTQwWiJ9KV19KSxmaWx0ZXI6USgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoInBhdGgiLHtkOiJNMTEgMTdhNCA0IDAgMCAxLTggMFY1YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAyWiJ9KSxRKCJwYXRoIix7ZDoiTTE2LjcgMTNIMTlhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINyJ9KSxRKCJwYXRoIix7ZDoiTSA3IDE3aC4wMSJ9KSxRKCJwYXRoIix7ZDoibTExIDggMi4zLTIuM2EyLjQgMi40IDAgMCAxIDMuNDA0LjAwNEwxOC42IDcuNmEyLjQgMi40IDAgMCAxIC4wMjYgMy40MzRMOS45IDE5LjgifSldfSksdGV4dFNpemU6USgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNTIgMzQiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpRKCJwYXRoIix7ZDoiTTM5LjcyNjYgMzMuMDIzNEMzOC4xNDg0IDMzLjAyMzQgMzYuNzUgMzIuNzI2NiAzNS41MzEyIDMyLjEzMjhDMzQuMzEyNSAzMS41MzkxIDMzLjM1OTQgMzAuNzEwOSAzMi42NzE5IDI5LjY0ODRDMzIgMjguNTcwMyAzMS42NjQxIDI3LjMxMjUgMzEuNjY0MSAyNS44NzVDMzEuNjY0MSAyMy43ODEyIDMyLjQyOTcgMjIuMTA5NCAzMy45NjA5IDIwLjg1OTRDMzUuNTA3OCAxOS42MDk0IDM3LjcxMDkgMTguOTA2MiA0MC41NzAzIDE4Ljc1TDQ3LjYwMTYgMTguMzUxNlYxNi41QzQ3LjYwMTYgMTUuMDE1NiA0Ny4xMzI4IDEzLjgzNTkgNDYuMTk1MyAxMi45NjA5QzQ1LjI1NzggMTIuMDg1OSA0My45NTMxIDExLjY0ODQgNDIuMjgxMiAxMS42NDg0QzQwLjkwNjIgMTEuNjQ4NCAzOS43NSAxMS45NDUzIDM4LjgxMjUgMTIuNTM5MUMzNy44NzUgMTMuMTMyOCAzNy4wOTM4IDE0LjA0NjkgMzYuNDY4OCAxNS4yODEyQzM2LjI2NTYgMTUuNjA5NCAzNi4wMTU2IDE1Ljg1MTYgMzUuNzE4OCAxNi4wMDc4QzM1LjQyMTkgMTYuMTY0MSAzNS4wNzgxIDE2LjI0MjIgMzQuNjg3NSAxNi4yNDIyQzM0LjE1NjIgMTYuMjQyMiAzMy43MTA5IDE2LjA3ODEgMzMuMzUxNiAxNS43NUMzMy4wMDc4IDE1LjQyMTkgMzIuODM1OSAxNC45OTIyIDMyLjgzNTkgMTQuNDYwOUMzMi44MzU5IDE0LjIyNjYgMzIuODY3MiAxMy45NzY2IDMyLjkyOTcgMTMuNzEwOUMzMy4wMDc4IDEzLjQ0NTMgMzMuMTA5NCAxMy4xNzk3IDMzLjIzNDQgMTIuOTE0MUMzMy44NzUgMTEuNDYwOSAzNS4wMTU2IDEwLjMwNDcgMzYuNjU2MiA5LjQ0NTMxQzM4LjMxMjUgOC41ODU5NCA0MC4yMjY2IDguMTU2MjUgNDIuMzk4NCA4LjE1NjI1QzQ0LjMyMDMgOC4xNTYyNSA0NS45ODQ0IDguNDkyMTkgNDcuMzkwNiA5LjE2NDA2QzQ4LjgxMjUgOS44MjAzMSA0OS44OTg0IDEwLjc1IDUwLjY0ODQgMTEuOTUzMUM1MS40MTQxIDEzLjE1NjIgNTEuNzk2OSAxNC41NzAzIDUxLjc5NjkgMTYuMTk1M1YzMC45MTQxQzUxLjc5NjkgMzEuNTg1OSA1MS42MDk0IDMyLjEwOTQgNTEuMjM0NCAzMi40ODQ0QzUwLjg1OTQgMzIuODU5NCA1MC4zNjcyIDMzLjA0NjkgNDkuNzU3OCAzMy4wNDY5QzQ5LjE2NDEgMzMuMDQ2OSA0OC42Nzk3IDMyLjg2NzIgNDguMzA0NyAzMi41MDc4QzQ3LjkyOTcgMzIuMTQ4NCA0Ny43MzQ0IDMxLjY2NDEgNDcuNzE4OCAzMS4wNTQ3VjI4LjM1OTRINDcuNjcxOUM0Ni45ODQ0IDI5Ljc4MTIgNDUuOTA2MiAzMC45MTQxIDQ0LjQzNzUgMzEuNzU3OEM0Mi45ODQ0IDMyLjYwMTYgNDEuNDE0MSAzMy4wMjM0IDM5LjcyNjYgMzMuMDIzNFpNNDAuODA0NyAyOS42NzE5QzQyLjA3MDMgMjkuNjcxOSA0My4yMTA5IDI5LjQwNjIgNDQuMjI2NiAyOC44NzVDNDUuMjU3OCAyOC4zNDM4IDQ2LjA3ODEgMjcuNjE3MiA0Ni42ODc1IDI2LjY5NTNDNDcuMjk2OSAyNS43NzM0IDQ3LjYwMTYgMjQuNzUgNDcuNjAxNiAyMy42MjVWMjEuMzI4MUw0MS4xMzI4IDIxLjc1QzM5LjQ0NTMgMjEuODU5NCAzOC4xNjQxIDIyLjI3MzQgMzcuMjg5MSAyMi45OTIyQzM2LjQxNDEgMjMuNjk1MyAzNS45NzY2IDI0LjYwOTQgMzUuOTc2NiAyNS43MzQ0QzM1Ljk3NjYgMjYuOTIxOSAzNi40MjE5IDI3Ljg3NSAzNy4zMTI1IDI4LjU5MzhDMzguMjAzMSAyOS4zMTI1IDM5LjM2NzIgMjkuNjcxOSA0MC44MDQ3IDI5LjY3MTlaTTIuMTc5NjkgMzMuMDIzNEMxLjUwNzgxIDMzLjAyMzQgMC45NzY1NjIgMzIuODM1OSAwLjU4NTkzOCAzMi40NjA5QzAuMTk1MzEyIDMyLjA4NTkgMCAzMS41NzgxIDAgMzAuOTM3NUMwIDMwLjUzMTIgMC4wODU5Mzc1IDMwLjA3MDMgMC4yNTc4MTIgMjkuNTU0N0wxMC40MDYyIDIuNDE0MDZDMTAuOTg0NCAwLjgwNDY4OCAxMi4xMDE2IDAgMTMuNzU3OCAwQzE0LjYxNzIgMCAxNS4zMjgxIDAuMjAzMTI1IDE1Ljg5MDYgMC42MDkzNzVDMTYuNDUzMSAxLjAxNTYyIDE2Ljg3NSAxLjYyNSAxNy4xNTYyIDIuNDM3NUwyNy4yNTc4IDI5LjQ4NDRDMjcuNDQ1MyAzMCAyNy41MzkxIDMwLjQ2ODggMjcuNTM5MSAzMC44OTA2QzI3LjUzOTEgMzEuNTQ2OSAyNy4zMzU5IDMyLjA3MDMgMjYuOTI5NyAzMi40NjA5QzI2LjUyMzQgMzIuODM1OSAyNS45NzY2IDMzLjAyMzQgMjUuMjg5MSAzMy4wMjM0QzI0LjYzMjggMzMuMDIzNCAyNC4xMDk0IDMyLjg3NSAyMy43MTg4IDMyLjU3ODFDMjMuMzQzOCAzMi4yODEyIDIzLjAzOTEgMzEuNzg5MSAyMi44MDQ3IDMxLjEwMTZMMTMuODI4MSA1LjM0Mzc1SDEzLjY2NDFMNC42NjQwNiAzMS4xMDE2QzQuNDI5NjkgMzEuNzg5MSA0LjEyNSAzMi4yODEyIDMuNzUgMzIuNTc4MUMzLjM3NSAzMi44NzUgMi44NTE1NiAzMy4wMjM0IDIuMTc5NjkgMzMuMDIzNFpNNi42Nzk2OSAyMy43NDIyQzYuMTQ4NDQgMjMuNzQyMiA1LjcwMzEyIDIzLjU2MjUgNS4zNDM3NSAyMy4yMDMxQzQuOTg0MzggMjIuODQzOCA0LjgwNDY5IDIyLjM5ODQgNC44MDQ2OSAyMS44NjcyQzQuODA0NjkgMjEuMzUxNiA0Ljk4NDM4IDIwLjkxNDEgNS4zNDM3NSAyMC41NTQ3QzUuNzAzMTIgMjAuMTk1MyA2LjE0ODQ0IDIwLjAxNTYgNi42Nzk2OSAyMC4wMTU2SDIwLjg1OTRDMjEuMzc1IDIwLjAxNTYgMjEuODEyNSAyMC4xOTUzIDIyLjE3MTkgMjAuNTU0N0MyMi41MzEyIDIwLjkxNDEgMjIuNzEwOSAyMS4zNTE2IDIyLjcxMDkgMjEuODY3MkMyMi43MTA5IDIyLjM5ODQgMjIuNTMxMiAyMi44NDM4IDIyLjE3MTkgMjMuMjAzMUMyMS44MTI1IDIzLjU2MjUgMjEuMzc1IDIzLjc0MjIgMjAuODU5NCAyMy43NDIySDYuNjc5NjlaIn0pfSksbW90aW9uOlEoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixjaGlsZHJlbjpbUSgiY2lyY2xlIix7Y3g6IjE0IixjeToiMTIiLHI6IjYifSksUSgicGF0aCIse2Q6Ik0zIDhoNE0yIDEyaDRNMyAxNmg0In0pXX0pLGNvbnRyYXN0OlEoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifSksUSgicGF0aCIse2Q6Ik0xMiAxOGE2IDYgMCAwIDAgMC0xMnYxMnoifSldfSksYm9yZGVyczpRKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbUSgicGF0aCIse2Q6Ik01IDIxYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMiJ9KSxRKCJwYXRoIix7ZDoiTTkgMjFoMSJ9KSxRKCJwYXRoIix7ZDoiTTE0IDIxaDEifSldfSksdHJhbnNwYXJlbmN5OlEoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDYzIDQ2IixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46USgicGF0aCIse2Q6Ik0yMi43MzQ0IDQuMTcxODhDMjIuMTg3NSA0LjE3MTg4IDIxLjcxODggMy45NzY1NiAyMS4zMjgxIDMuNTg1OTRDMjAuOTM3NSAzLjE5NTMxIDIwLjc0MjIgMi43MTg3NSAyMC43NDIyIDIuMTU2MjVDMjAuNzQyMiAxLjYwOTM4IDIwLjkzNzUgMS4xNDA2MiAyMS4zMjgxIDAuNzVDMjEuNzE4OCAwLjM1OTM3NSAyMi4xODc1IDAuMTY0MDYyIDIyLjczNDQgMC4xNjQwNjJDMjMuMjgxMiAwLjE2NDA2MiAyMy43NSAwLjM1OTM3NSAyNC4xNDA2IDAuNzVDMjQuNTMxMiAxLjE0MDYyIDI0LjcyNjYgMS42MDkzOCAyNC43MjY2IDIuMTU2MjVDMjQuNzI2NiAyLjcxODc1IDI0LjUzMTIgMy4xOTUzMSAyNC4xNDA2IDMuNTg1OTRDMjMuNzUgMy45NzY1NiAyMy4yODEyIDQuMTcxODggMjIuNzM0NCA0LjE3MTg4Wk0yOS4xMDk0IDUuMjAzMTJDMjguNTQ2OSA1LjIwMzEyIDI4LjA3MDMgNS4wMDc4MSAyNy42Nzk3IDQuNjE3MTlDMjcuMjg5MSA0LjIyNjU2IDI3LjA5MzggMy43NTc4MSAyNy4wOTM4IDMuMjEwOTRDMjcuMDkzOCAyLjY2NDA2IDI3LjI4OTEgMi4xOTUzMSAyNy42Nzk3IDEuODA0NjlDMjguMDcwMyAxLjM5ODQ0IDI4LjU0NjkgMS4xOTUzMSAyOS4xMDk0IDEuMTk1MzFDMjkuNjU2MiAxLjE5NTMxIDMwLjEyNSAxLjM5ODQ0IDMwLjUxNTYgMS44MDQ2OUMzMC45MDYyIDIuMTk1MzEgMzEuMTAxNiAyLjY2NDA2IDMxLjEwMTYgMy4yMTA5NEMzMS4xMDE2IDMuNzU3ODEgMzAuOTA2MiA0LjIyNjU2IDMwLjUxNTYgNC42MTcxOUMzMC4xMjUgNS4wMDc4MSAyOS42NTYyIDUuMjAzMTIgMjkuMTA5NCA1LjIwMzEyWk0zNC44NzUgOC4xMzI4MUMzNC4zMjgxIDguMTMyODEgMzMuODUxNiA3LjkzNzUgMzMuNDQ1MyA3LjU0Njg4QzMzLjA1NDcgNy4xNDA2MiAzMi44NTk0IDYuNjcxODggMzIuODU5NCA2LjE0MDYyQzMyLjg1OTQgNS41NzgxMiAzMy4wNTQ3IDUuMTAxNTYgMzMuNDQ1MyA0LjcxMDk0QzMzLjg1MTYgNC4zMjAzMSAzNC4zMjgxIDQuMTI1IDM0Ljg3NSA0LjEyNUMzNS40MjE5IDQuMTI1IDM1Ljg5MDYgNC4zMjAzMSAzNi4yODEyIDQuNzEwOTRDMzYuNjg3NSA1LjEwMTU2IDM2Ljg5MDYgNS41NzgxMiAzNi44OTA2IDYuMTQwNjJDMzYuODkwNiA2LjY3MTg4IDM2LjY4NzUgNy4xNDA2MiAzNi4yODEyIDcuNTQ2ODhDMzUuODkwNiA3LjkzNzUgMzUuNDIxOSA4LjEzMjgxIDM0Ljg3NSA4LjEzMjgxWk0zOS40NDUzIDEyLjY3OTdDMzguODk4NCAxMi42Nzk3IDM4LjQyMTkgMTIuNDg0NCAzOC4wMTU2IDEyLjA5MzhDMzcuNjI1IDExLjcwMzEgMzcuNDI5NyAxMS4yMzQ0IDM3LjQyOTcgMTAuNjg3NUMzNy40Mjk3IDEwLjE1NjIgMzcuNjI1IDkuNjk1MzEgMzguMDE1NiA5LjMwNDY5QzM4LjQyMTkgOC44OTg0NCAzOC44OTg0IDguNjk1MzEgMzkuNDQ1MyA4LjY5NTMxQzM5Ljk5MjIgOC42OTUzMSA0MC40NjA5IDguODk4NDQgNDAuODUxNiA5LjMwNDY5QzQxLjI0MjIgOS42OTUzMSA0MS40Mzc1IDEwLjE1NjIgNDEuNDM3NSAxMC42ODc1QzQxLjQzNzUgMTEuMjM0NCA0MS4yNDIyIDExLjcwMzEgNDAuODUxNiAxMi4wOTM4QzQwLjQ2MDkgMTIuNDg0NCAzOS45OTIyIDEyLjY3OTcgMzkuNDQ1MyAxMi42Nzk3Wk00Mi4zNzUgMTguMzk4NEM0MS44MTI1IDE4LjM5ODQgNDEuMzI4MSAxOC4yMDMxIDQwLjkyMTkgMTcuODEyNUM0MC41MzEyIDE3LjQyMTkgNDAuMzM1OSAxNi45NTMxIDQwLjMzNTkgMTYuNDA2MkM0MC4zMzU5IDE1Ljg0MzggNDAuNTMxMiAxNS4zNjcyIDQwLjkyMTkgMTQuOTc2NkM0MS4zMjgxIDE0LjU4NTkgNDEuODEyNSAxNC4zOTA2IDQyLjM3NSAxNC4zOTA2QzQyLjkwNjIgMTQuMzkwNiA0My4zNjcyIDE0LjU4NTkgNDMuNzU3OCAxNC45NzY2QzQ0LjE2NDEgMTUuMzY3MiA0NC4zNjcyIDE1Ljg0MzggNDQuMzY3MiAxNi40MDYyQzQ0LjM2NzIgMTYuOTUzMSA0NC4xNjQxIDE3LjQyMTkgNDMuNzU3OCAxNy44MTI1QzQzLjM2NzIgMTguMjAzMSA0Mi45MDYyIDE4LjM5ODQgNDIuMzc1IDE4LjM5ODRaTTQzLjQ1MzEgMjQuNzk2OUM0Mi45MDYyIDI0Ljc5NjkgNDIuNDM3NSAyNC42MDE2IDQyLjA0NjkgMjQuMjEwOUM0MS42NTYyIDIzLjgyMDMgNDEuNDYwOSAyMy4zNDM4IDQxLjQ2MDkgMjIuNzgxMkM0MS40NjA5IDIyLjIzNDQgNDEuNjU2MiAyMS43NjU2IDQyLjA0NjkgMjEuMzc1QzQyLjQzNzUgMjAuOTg0NCA0Mi45MDYyIDIwLjc4OTEgNDMuNDUzMSAyMC43ODkxQzQ0IDIwLjc4OTEgNDQuNDY4OCAyMC45ODQ0IDQ0Ljg1OTQgMjEuMzc1QzQ1LjI2NTYgMjEuNzY1NiA0NS40Njg4IDIyLjIzNDQgNDUuNDY4OCAyMi43ODEyQzQ1LjQ2ODggMjMuMzQzOCA0NS4yNjU2IDIzLjgyMDMgNDQuODU5NCAyNC4yMTA5QzQ0LjQ2ODggMjQuNjAxNiA0NCAyNC43OTY5IDQzLjQ1MzEgMjQuNzk2OVpNNDIuMzc1IDMxLjE3MTlDNDEuODEyNSAzMS4xNzE5IDQxLjMyODEgMzAuOTc2NiA0MC45MjE5IDMwLjU4NTlDNDAuNTMxMiAzMC4xOTUzIDQwLjMzNTkgMjkuNzI2NiA0MC4zMzU5IDI5LjE3OTdDNDAuMzM1OSAyOC42MTcyIDQwLjUzMTIgMjguMTQwNiA0MC45MjE5IDI3Ljc1QzQxLjMyODEgMjcuMzU5NCA0MS44MTI1IDI3LjE2NDEgNDIuMzc1IDI3LjE2NDFDNDIuOTA2MiAyNy4xNjQxIDQzLjM2NzIgMjcuMzU5NCA0My43NTc4IDI3Ljc1QzQ0LjE2NDEgMjguMTQwNiA0NC4zNjcyIDI4LjYxNzIgNDQuMzY3MiAyOS4xNzk3QzQ0LjM2NzIgMjkuNzI2NiA0NC4xNjQxIDMwLjE5NTMgNDMuNzU3OCAzMC41ODU5QzQzLjM2NzIgMzAuOTc2NiA0Mi45MDYyIDMxLjE3MTkgNDIuMzc1IDMxLjE3MTlaTTM5LjQ0NTMgMzYuODkwNkMzOC44OTg0IDM2Ljg5MDYgMzguNDIxOSAzNi42OTUzIDM4LjAxNTYgMzYuMzA0N0MzNy42MjUgMzUuODk4NCAzNy40Mjk3IDM1LjQyMTkgMzcuNDI5NyAzNC44NzVDMzcuNDI5NyAzNC4zMjgxIDM3LjYyNSAzMy44NTk0IDM4LjAxNTYgMzMuNDY4OEMzOC40MjE5IDMzLjA2MjUgMzguODk4NCAzMi44NTk0IDM5LjQ0NTMgMzIuODU5NEMzOS45OTIyIDMyLjg1OTQgNDAuNDYwOSAzMy4wNjI1IDQwLjg1MTYgMzMuNDY4OEM0MS4yNDIyIDMzLjg1OTQgNDEuNDM3NSAzNC4zMjgxIDQxLjQzNzUgMzQuODc1QzQxLjQzNzUgMzUuNDIxOSA0MS4yNDIyIDM1Ljg5ODQgNDAuODUxNiAzNi4zMDQ3QzQwLjQ2MDkgMzYuNjk1MyAzOS45OTIyIDM2Ljg5MDYgMzkuNDQ1MyAzNi44OTA2Wk0zNC44NzUgNDEuNDM3NUMzNC4zMjgxIDQxLjQzNzUgMzMuODUxNiA0MS4yNDIyIDMzLjQ0NTMgNDAuODUxNkMzMy4wNTQ3IDQwLjQ2MDkgMzIuODU5NCAzOS45OTIyIDMyLjg1OTQgMzkuNDQ1M0MzMi44NTk0IDM4Ljg5ODQgMzMuMDU0NyAzOC40Mjk3IDMzLjQ0NTMgMzguMDM5MUMzMy44NTE2IDM3LjYzMjggMzQuMzI4MSAzNy40Mjk3IDM0Ljg3NSAzNy40Mjk3QzM1LjQyMTkgMzcuNDI5NyAzNS44OTA2IDM3LjYzMjggMzYuMjgxMiAzOC4wMzkxQzM2LjY4NzUgMzguNDI5NyAzNi44OTA2IDM4Ljg5ODQgMzYuODkwNiAzOS40NDUzQzM2Ljg5MDYgMzkuOTkyMiAzNi42ODc1IDQwLjQ2MDkgMzYuMjgxMiA0MC44NTE2QzM1Ljg5MDYgNDEuMjQyMiAzNS40MjE5IDQxLjQzNzUgMzQuODc1IDQxLjQzNzVaTTI5LjEwOTQgNDQuMzY3MkMyOC41NDY5IDQ0LjM2NzIgMjguMDcwMyA0NC4xNjQxIDI3LjY3OTcgNDMuNzU3OEMyNy4yODkxIDQzLjM2NzIgMjcuMDkzOCA0Mi44OTg0IDI3LjA5MzggNDIuMzUxNkMyNy4wOTM4IDQxLjgwNDcgMjcuMjg5MSA0MS4zMzU5IDI3LjY3OTcgNDAuOTQ1M0MyOC4wNzAzIDQwLjU1NDcgMjguNTQ2OSA0MC4zNTk0IDI5LjEwOTQgNDAuMzU5NEMyOS42NTYyIDQwLjM1OTQgMzAuMTI1IDQwLjU1NDcgMzAuNTE1NiA0MC45NDUzQzMwLjkwNjIgNDEuMzM1OSAzMS4xMDE2IDQxLjgwNDcgMzEuMTAxNiA0Mi4zNTE2QzMxLjEwMTYgNDIuODk4NCAzMC45MDYyIDQzLjM2NzIgMzAuNTE1NiA0My43NTc4QzMwLjEyNSA0NC4xNjQxIDI5LjY1NjIgNDQuMzY3MiAyOS4xMDk0IDQ0LjM2NzJaTTIyLjczNDQgNDUuMzk4NEMyMi4xODc1IDQ1LjM5ODQgMjEuNzE4OCA0NS4yMDMxIDIxLjMyODEgNDQuODEyNUMyMC45Mzc1IDQ0LjQyMTkgMjAuNzQyMiA0My45NTMxIDIwLjc0MjIgNDMuNDA2MkMyMC43NDIyIDQyLjg0MzggMjAuOTM3NSA0Mi4zNjcyIDIxLjMyODEgNDEuOTc2NkMyMS43MTg4IDQxLjU4NTkgMjIuMTg3NSA0MS4zOTA2IDIyLjczNDQgNDEuMzkwNkMyMy4yODEyIDQxLjM5MDYgMjMuNzUgNDEuNTg1OSAyNC4xNDA2IDQxLjk3NjZDMjQuNTMxMiA0Mi4zNjcyIDI0LjcyNjYgNDIuODQzOCAyNC43MjY2IDQzLjQwNjJDMjQuNzI2NiA0My45NTMxIDI0LjUzMTIgNDQuNDIxOSAyNC4xNDA2IDQ0LjgxMjVDMjMuNzUgNDUuMjAzMSAyMy4yODEyIDQ1LjM5ODQgMjIuNzM0NCA0NS4zOTg0Wk0xNi4zNTk0IDQ0LjM2NzJDMTUuODEyNSA0NC4zNjcyIDE1LjM0MzggNDQuMTY0MSAxNC45NTMxIDQzLjc1NzhDMTQuNTYyNSA0My4zNjcyIDE0LjM2NzIgNDIuODk4NCAxNC4zNjcyIDQyLjM1MTZDMTQuMzY3MiA0MS44MDQ3IDE0LjU2MjUgNDEuMzM1OSAxNC45NTMxIDQwLjk0NTNDMTUuMzQzOCA0MC41NTQ3IDE1LjgxMjUgNDAuMzU5NCAxNi4zNTk0IDQwLjM1OTRDMTYuOTIxOSA0MC4zNTk0IDE3LjM5ODQgNDAuNTU0NyAxNy43ODkxIDQwLjk0NTNDMTguMTc5NyA0MS4zMzU5IDE4LjM3NSA0MS44MDQ3IDE4LjM3NSA0Mi4zNTE2QzE4LjM3NSA0Mi44OTg0IDE4LjE3OTcgNDMuMzY3MiAxNy43ODkxIDQzLjc1NzhDMTcuMzk4NCA0NC4xNjQxIDE2LjkyMTkgNDQuMzY3MiAxNi4zNTk0IDQ0LjM2NzJaTTEwLjU3MDMgNDEuNDM3NUMxMC4wMzkxIDQxLjQzNzUgOS41NzAzMSA0MS4yNDIyIDkuMTY0MDYgNDAuODUxNkM4Ljc3MzQ0IDQwLjQ2MDkgOC41NzgxMiAzOS45OTIyIDguNTc4MTIgMzkuNDQ1M0M4LjU3ODEyIDM4Ljg5ODQgOC43NzM0NCAzOC40Mjk3IDkuMTY0MDYgMzguMDM5MUM5LjU3MDMxIDM3LjYzMjggMTAuMDM5MSAzNy40Mjk3IDEwLjU3MDMgMzcuNDI5N0MxMS4xMzI4IDM3LjQyOTcgMTEuNjA5NCAzNy42MzI4IDEyIDM4LjAzOTFDMTIuMzkwNiAzOC40Mjk3IDEyLjU4NTkgMzguODk4NCAxMi41ODU5IDM5LjQ0NTNDMTIuNTg1OSAzOS45OTIyIDEyLjM5MDYgNDAuNDYwOSAxMiA0MC44NTE2QzExLjYwOTQgNDEuMjQyMiAxMS4xMzI4IDQxLjQzNzUgMTAuNTcwMyA0MS40Mzc1Wk02LjAyMzQ0IDM2Ljg5MDZDNS40NzY1NiAzNi44OTA2IDUgMzYuNjk1MyA0LjU5Mzc1IDM2LjMwNDdDNC4yMDMxMiAzNS44OTg0IDQuMDA3ODEgMzUuNDIxOSA0LjAwNzgxIDM0Ljg3NUM0LjAwNzgxIDM0LjMyODEgNC4yMDMxMiAzMy44NTk0IDQuNTkzNzUgMzMuNDY4OEM1IDMzLjA2MjUgNS40NzY1NiAzMi44NTk0IDYuMDIzNDQgMzIuODU5NEM2LjU3MDMxIDMyLjg1OTQgNy4wMzkwNiAzMy4wNjI1IDcuNDI5NjkgMzMuNDY4OEM3LjgyMDMxIDMzLjg1OTQgOC4wMTU2MiAzNC4zMjgxIDguMDE1NjIgMzQuODc1QzguMDE1NjIgMzUuNDIxOSA3LjgyMDMxIDM1Ljg5ODQgNy40Mjk2OSAzNi4zMDQ3QzcuMDM5MDYgMzYuNjk1MyA2LjU3MDMxIDM2Ljg5MDYgNi4wMjM0NCAzNi44OTA2Wk0zLjA5Mzc1IDMxLjE3MTlDMi41NjI1IDMxLjE3MTkgMi4wOTM3NSAzMC45NzY2IDEuNjg3NSAzMC41ODU5QzEuMjk2ODggMzAuMTk1MyAxLjEwMTU2IDI5LjcyNjYgMS4xMDE1NiAyOS4xNzk3QzEuMTAxNTYgMjguNjE3MiAxLjI5Njg4IDI4LjE0MDYgMS42ODc1IDI3Ljc1QzIuMDkzNzUgMjcuMzU5NCAyLjU2MjUgMjcuMTY0MSAzLjA5Mzc1IDI3LjE2NDFDMy42NTYyNSAyNy4xNjQxIDQuMTMyODEgMjcuMzU5NCA0LjUyMzQ0IDI3Ljc1QzQuOTE0MDYgMjguMTQwNiA1LjEwOTM4IDI4LjYxNzIgNS4xMDkzOCAyOS4xNzk3QzUuMTA5MzggMjkuNzI2NiA0LjkxNDA2IDMwLjE5NTMgNC41MjM0NCAzMC41ODU5QzQuMTMyODEgMzAuOTc2NiAzLjY1NjI1IDMxLjE3MTkgMy4wOTM3NSAzMS4xNzE5Wk0yLjAxNTYyIDI0Ljc5NjlDMS40NTMxMiAyNC43OTY5IDAuOTc2NTYyIDI0LjYwMTYgMC41ODU5MzggMjQuMjEwOUMwLjE5NTMxMiAyMy44MjAzIDAgMjMuMzQzOCAwIDIyLjc4MTJDMCAyMi4yMzQ0IDAuMTk1MzEyIDIxLjc2NTYgMC41ODU5MzggMjEuMzc1QzAuOTc2NTYyIDIwLjk4NDQgMS40NTMxMiAyMC43ODkxIDIuMDE1NjIgMjAuNzg5MUMyLjU2MjUgMjAuNzg5MSAzLjAzMTI1IDIwLjk4NDQgMy40MjE4OCAyMS4zNzVDMy44MTI1IDIxLjc2NTYgNC4wMDc4MSAyMi4yMzQ0IDQuMDA3ODEgMjIuNzgxMkM0LjAwNzgxIDIzLjM0MzggMy44MTI1IDIzLjgyMDMgMy40MjE4OCAyNC4yMTA5QzMuMDMxMjUgMjQuNjAxNiAyLjU2MjUgMjQuNzk2OSAyLjAxNTYyIDI0Ljc5NjlaTTMuMDkzNzUgMTguMzk4NEMyLjU2MjUgMTguMzk4NCAyLjA5Mzc1IDE4LjIwMzEgMS42ODc1IDE3LjgxMjVDMS4yOTY4OCAxNy40MjE5IDEuMTAxNTYgMTYuOTUzMSAxLjEwMTU2IDE2LjQwNjJDMS4xMDE1NiAxNS44NDM4IDEuMjk2ODggMTUuMzY3MiAxLjY4NzUgMTQuOTc2NkMyLjA5Mzc1IDE0LjU4NTkgMi41NjI1IDE0LjM5MDYgMy4wOTM3NSAxNC4zOTA2QzMuNjU2MjUgMTQuMzkwNiA0LjEzMjgxIDE0LjU4NTkgNC41MjM0NCAxNC45NzY2QzQuOTE0MDYgMTUuMzY3MiA1LjEwOTM4IDE1Ljg0MzggNS4xMDkzOCAxNi40MDYyQzUuMTA5MzggMTYuOTUzMSA0LjkxNDA2IDE3LjQyMTkgNC41MjM0NCAxNy44MTI1QzQuMTMyODEgMTguMjAzMSAzLjY1NjI1IDE4LjM5ODQgMy4wOTM3NSAxOC4zOTg0Wk02LjAyMzQ0IDEyLjY3OTdDNS40NzY1NiAxMi42Nzk3IDUgMTIuNDg0NCA0LjU5Mzc1IDEyLjA5MzhDNC4yMDMxMiAxMS43MDMxIDQuMDA3ODEgMTEuMjM0NCA0LjAwNzgxIDEwLjY4NzVDNC4wMDc4MSAxMC4xNTYyIDQuMjAzMTIgOS42OTUzMSA0LjU5Mzc1IDkuMzA0NjlDNSA4Ljg5ODQ0IDUuNDc2NTYgOC42OTUzMSA2LjAyMzQ0IDguNjk1MzFDNi41NzAzMSA4LjY5NTMxIDcuMDM5MDYgOC44OTg0NCA3LjQyOTY5IDkuMzA0NjlDNy44MjAzMSA5LjY5NTMxIDguMDE1NjIgMTAuMTU2MiA4LjAxNTYyIDEwLjY4NzVDOC4wMTU2MiAxMS4yMzQ0IDcuODIwMzEgMTEuNzAzMSA3LjQyOTY5IDEyLjA5MzhDNy4wMzkwNiAxMi40ODQ0IDYuNTcwMzEgMTIuNjc5NyA2LjAyMzQ0IDEyLjY3OTdaTTEwLjU3MDMgOC4xMzI4MUMxMC4wMzkxIDguMTMyODEgOS41NzAzMSA3LjkzNzUgOS4xNjQwNiA3LjU0Njg4QzguNzczNDQgNy4xNDA2MiA4LjU3ODEyIDYuNjcxODggOC41NzgxMiA2LjE0MDYyQzguNTc4MTIgNS41NzgxMiA4Ljc3MzQ0IDUuMTAxNTYgOS4xNjQwNiA0LjcxMDk0QzkuNTcwMzEgNC4zMjAzMSAxMC4wMzkxIDQuMTI1IDEwLjU3MDMgNC4xMjVDMTEuMTMyOCA0LjEyNSAxMS42MDk0IDQuMzIwMzEgMTIgNC43MTA5NEMxMi4zOTA2IDUuMTAxNTYgMTIuNTg1OSA1LjU3ODEyIDEyLjU4NTkgNi4xNDA2MkMxMi41ODU5IDYuNjcxODggMTIuMzkwNiA3LjE0MDYyIDEyIDcuNTQ2ODhDMTEuNjA5NCA3LjkzNzUgMTEuMTMyOCA4LjEzMjgxIDEwLjU3MDMgOC4xMzI4MVpNMTYuMzU5NCA1LjIwMzEyQzE1LjgxMjUgNS4yMDMxMiAxNS4zNDM4IDUuMDA3ODEgMTQuOTUzMSA0LjYxNzE5QzE0LjU2MjUgNC4yMjY1NiAxNC4zNjcyIDMuNzU3ODEgMTQuMzY3MiAzLjIxMDk0QzE0LjM2NzIgMi42NjQwNiAxNC41NjI1IDIuMTk1MzEgMTQuOTUzMSAxLjgwNDY5QzE1LjM0MzggMS4zOTg0NCAxNS44MTI1IDEuMTk1MzEgMTYuMzU5NCAxLjE5NTMxQzE2LjkyMTkgMS4xOTUzMSAxNy4zOTg0IDEuMzk4NDQgMTcuNzg5MSAxLjgwNDY5QzE4LjE3OTcgMi4xOTUzMSAxOC4zNzUgMi42NjQwNiAxOC4zNzUgMy4yMTA5NEMxOC4zNzUgMy43NTc4MSAxOC4xNzk3IDQuMjI2NTYgMTcuNzg5MSA0LjYxNzE5QzE3LjM5ODQgNS4wMDc4MSAxNi45MjE5IDUuMjAzMTIgMTYuMzU5NCA1LjIwMzEyWk00MC4xMDE2IDQ1LjU2MjVDMzYuOTQ1MyA0NS41NjI1IDMzLjk5MjIgNDQuOTY4OCAzMS4yNDIyIDQzLjc4MTJDMjguNTA3OCA0Mi42MDk0IDI2LjA5MzggNDAuOTc2NiAyNCAzOC44ODI4QzIxLjkwNjIgMzYuNzg5MSAyMC4yNjU2IDM0LjM2NzIgMTkuMDc4MSAzMS42MTcyQzE3LjkwNjIgMjguODY3MiAxNy4zMjAzIDI1LjkyMTkgMTcuMzIwMyAyMi43ODEyQzE3LjMyMDMgMTkuNjQwNiAxNy45MDYyIDE2LjY5NTMgMTkuMDc4MSAxMy45NDUzQzIwLjI2NTYgMTEuMTc5NyAyMS45MDYyIDguNzU3ODEgMjQgNi42Nzk2OUMyNi4wOTM4IDQuNTg1OTQgMjguNTA3OCAyLjk1MzEyIDMxLjI0MjIgMS43ODEyNUMzMy45OTIyIDAuNTkzNzUgMzYuOTQ1MyAwIDQwLjEwMTYgMEM0My4yNDIyIDAgNDYuMTg3NSAwLjU5Mzc1IDQ4LjkzNzUgMS43ODEyNUM1MS42ODc1IDIuOTUzMTIgNTQuMTAxNiA0LjU4NTk0IDU2LjE3OTcgNi42Nzk2OUM1OC4yNzM0IDguNzU3ODEgNTkuOTA2MiAxMS4xNzk3IDYxLjA3ODEgMTMuOTQ1M0M2Mi4yNjU2IDE2LjY5NTMgNjIuODU5NCAxOS42NDA2IDYyLjg1OTQgMjIuNzgxMkM2Mi44NTk0IDI1LjkyMTkgNjIuMjY1NiAyOC44NjcyIDYxLjA3ODEgMzEuNjE3MkM1OS45MDYyIDM0LjM2NzIgNTguMjczNCAzNi43ODkxIDU2LjE3OTcgMzguODgyOEM1NC4xMDE2IDQwLjk3NjYgNTEuNjg3NSA0Mi42MDk0IDQ4LjkzNzUgNDMuNzgxMkM0Ni4xODc1IDQ0Ljk2ODggNDMuMjQyMiA0NS41NjI1IDQwLjEwMTYgNDUuNTYyNVpNNDAuMTAxNiA0MS4zOTA2QzQyLjY2NDEgNDEuMzkwNiA0NS4wNzAzIDQwLjkwNjIgNDcuMzIwMyAzOS45Mzc1QzQ5LjU3MDMgMzguOTY4OCA1MS41NDY5IDM3LjYzMjggNTMuMjUgMzUuOTI5N0M1NC45Njg4IDM0LjIyNjYgNTYuMzA0NyAzMi4yNTc4IDU3LjI1NzggMzAuMDIzNEM1OC4yMTA5IDI3Ljc3MzQgNTguNjg3NSAyNS4zNTk0IDU4LjY4NzUgMjIuNzgxMkM1OC42ODc1IDIwLjIwMzEgNTguMjEwOSAxNy43OTY5IDU3LjI1NzggMTUuNTYyNUM1Ni4zMDQ3IDEzLjMxMjUgNTQuOTY4OCAxMS4zMzU5IDUzLjI1IDkuNjMyODFDNTEuNTQ2OSA3LjkyOTY5IDQ5LjU3MDMgNi41OTM3NSA0Ny4zMjAzIDUuNjI1QzQ1LjA3MDMgNC42NTYyNSA0Mi42NjQxIDQuMTcxODggNDAuMTAxNiA0LjE3MTg4QzM3LjUyMzQgNC4xNzE4OCAzNS4xMDk0IDQuNjU2MjUgMzIuODU5NCA1LjYyNUMzMC42MjUgNi41OTM3NSAyOC42NDg0IDcuOTI5NjkgMjYuOTI5NyA5LjYzMjgxQzI1LjIyNjYgMTEuMzM1OSAyMy44OTA2IDEzLjMxMjUgMjIuOTIxOSAxNS41NjI1QzIxLjk2ODggMTcuNzk2OSAyMS40OTIyIDIwLjIwMzEgMjEuNDkyMiAyMi43ODEyQzIxLjQ5MjIgMjUuMzU5NCAyMS45Njg4IDI3Ljc3MzQgMjIuOTIxOSAzMC4wMjM0QzIzLjg5MDYgMzIuMjU3OCAyNS4yMjY2IDM0LjIyNjYgMjYuOTI5NyAzNS45Mjk3QzI4LjY0ODQgMzcuNjMyOCAzMC42MjUgMzguOTY4OCAzMi44NTk0IDM5LjkzNzVDMzUuMTA5NCA0MC45MDYyIDM3LjUyMzQgNDEuMzkwNiA0MC4xMDE2IDQxLjM5MDZaIn0pfSksdm9pY2VvdmVyOlEoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoibTExIDcuNjAxLTUuOTk0IDguMTlhMSAxIDAgMCAwIC4xIDEuMjk4bC44MTcuODE4YTEgMSAwIDAgMCAxLjMxNC4wODdMMTUuMDkgMTIifSksUSgicGF0aCIse2Q6Ik0xNi41IDIxLjE3NEMxNS41IDIwLjUgMTQuMzcyIDIwIDEzIDIwYy0yLjA1OCAwLTMuOTI4IDIuMzU2LTYgMi0yLjA3Mi0uMzU2LTIuNzc1LTMuMzY5LTEuNS00LjUifSksUSgiY2lyY2xlIix7Y3g6IjE2IixjeToiNyIscjoiNSJ9KV19KX07ZnVuY3Rpb24gZEooJCl7aWYoISQpcmV0dXJuITA7cmV0dXJuIGcyKCQpLm9zLnRvTG93ZXJDYXNlKCk9PT0iaW9zIn1mdW5jdGlvbiBINCh7dWRpZDokLHJ1bnRpbWU6S30pe2xldFtKLFpdPU8oITApLFtYLFldPU8obnVsbCksW3EsVl09TyhudWxsKSxbTixCXT1PKG51bGwpLFU9ZEooSyksRz1EKGFzeW5jKCk9PntCKG51bGwpO3RyeXtsZXQgVD1hd2FpdCBTOCh7ZGV2aWNlOiR9LHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dCgxNTAwMCl9KTtpZihUKVkoVCk7ZWxzZSBCKCJVbmV4cGVjdGVkIHNpbXVsYXRvci1zZXR0aW5ncyByZXBseSIpfWNhdGNoKFQpe0IoVCBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmVC5uYW1lPT09IlRpbWVvdXRFcnJvciI/IlRpbWVkIG91dCByZWFkaW5nIHNpbXVsYXRvciBzZXR0aW5ncyI6VCBpbnN0YW5jZW9mIEVycm9yJiZULm1lc3NhZ2UhPT0iRmFpbGVkIHRvIGZldGNoIj9ULm1lc3NhZ2U6IkNvdWxkIG5vdCByZWFjaCB0aGUgcHJldmlldyBzZXJ2ZXIg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIil9fSxbJF0pO0UoKCk9PntpZihZKG51bGwpLCFVKXJldHVybjtHKCl9LFtHLFVdKTtsZXQgej1EKGFzeW5jKFQsQSk9PntWKFQpLEIobnVsbCksWSgodyk9Pnc/ey4uLncsW1RdOkF9OncpO3RyeXthd2FpdCBTOCh7ZGV2aWNlOiQsb3B0aW9uOlQsdmFsdWU6QX0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pfWNhdGNoKHcpe0IodyBpbnN0YW5jZW9mIEVycm9yP3cubWVzc2FnZTpgRmFpbGVkIHRvIHNldCAke1R9YCksRygpfWZpbmFsbHl7VihudWxsKX19LFskLEddKSxIPUkoe3J1bm5pbmc6ITEsbmV4dDpudWxsfSksRj1JKHopO0YuY3VycmVudD16O2xldCBMPUQoKFQpPT57bGV0IEE9SC5jdXJyZW50O2lmKEEubmV4dD1ULEEucnVubmluZylyZXR1cm47QS5ydW5uaW5nPSEwLChhc3luYygpPT57d2hpbGUoQS5uZXh0IT09bnVsbCl7bGV0IHc9QS5uZXh0O0EubmV4dD1udWxsLGF3YWl0IEYuY3VycmVudCgidGV4dC1zaXplIixRMlt3XSl9QS5ydW5uaW5nPSExfSkoKX0sW10pLGs9WCE9PW51bGwsQz1YPz9wSixQPVEyLmluZGV4T2YoQ1sidGV4dC1zaXplIl0pLHk9UD49MD9QOkNbInRleHQtc2l6ZSJdPy5zdGFydHNXaXRoKCJhY2Nlc3NpYmlsaXR5Iik/UTIubGVuZ3RoLTE6MztyZXR1cm4gUShxMCx7b3BlbjpKLG9uT3BlbkNoYW5nZTpaLCJkYXRhLXNpbXVsYXRvci1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6UShKMSx7Y2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlNpbXVsYXRvciJ9KSxRKCJzcGFuIix7fSldfSksY2hpbGRyZW46IVU/USgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQ1IHRleHQtWzExcHhdIHB4LTAuNSBweS0xIixjaGlsZHJlbjoiU2ltdWxhdG9yIHNldHRpbmdzIGFyZSBhdmFpbGFibGUgb24gaU9TIHNpbXVsYXRvcnMgb25seS4ifSk6UShKMSx7Y2hpbGRyZW46W04mJlEoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpOfSksUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT52b2lkIEcoKSxjbGFzc05hbWU6InNocmluay0wIGN1cnNvci1wb2ludGVyIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1kYW5nZXIvMzAgYmctdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMXB4XSB0ZXh0LWRhbmdlci1zb2Z0IixjaGlsZHJlbjoiUmV0cnkifSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbUShkMCx7aWNvbjpKMi5hcHBlYXJhbmNlLGxhYmVsOiJBcHBlYXJhbmNlIixjaGlsZHJlbjpRKFoyLHtsYWJlbDoiQXBwZWFyYW5jZSIsdmFsdWU6Qy5hcHBlYXJhbmNlPz8ibGlnaHQiLG9wdGlvbnM6YTguYXBwZWFyYW5jZSxkaXNhYmxlZDoha3x8cT09PSJhcHBlYXJhbmNlIixvbkNoYW5nZTooVCk9PnooImFwcGVhcmFuY2UiLFQpfSl9KSxRKGQwLHtpY29uOkoyLmdsYXNzLGxhYmVsOiJMaXF1aWQgR2xhc3MiLGNoaWxkcmVuOlEoWjIse2xhYmVsOiJMaXF1aWQgR2xhc3MiLHZhbHVlOkNbImxpcXVpZC1nbGFzcyJdPz8iY2xlYXIiLG9wdGlvbnM6YThbImxpcXVpZC1nbGFzcyJdLGRpc2FibGVkOiFrfHxxPT09ImxpcXVpZC1nbGFzcyIsb25DaGFuZ2U6KFQpPT56KCJsaXF1aWQtZ2xhc3MiLFQpfSl9KSxRKGQwLHtpY29uOkoyLmZpbHRlcixsYWJlbDoiQ29sb3IgRmlsdGVyIixjaGlsZHJlbjpRKFoyLHtsYWJlbDoiQ29sb3IgRmlsdGVyIix2YWx1ZTpDWyJjb2xvci1maWx0ZXIiXT8/Im5vbmUiLG9wdGlvbnM6YThbImNvbG9yLWZpbHRlciJdLGRpc2FibGVkOiFrfHxxPT09ImNvbG9yLWZpbHRlciIsb25DaGFuZ2U6KFQpPT56KCJjb2xvci1maWx0ZXIiLFQpfSl9KSxRKGQwLHtpY29uOkoyLnRleHRTaXplLGxhYmVsOiJUZXh0IFNpemUiLGNoaWxkcmVuOlEobEose3ZhbHVlOnksZGlzYWJsZWQ6IWssb25DaGFuZ2U6TH0pfSksdUoubWFwKCh7a2V5OlQsbGFiZWw6QX0pPT5RKGQwLHtpY29uOkoyW1Q9PT0icmVkdWNlLW1vdGlvbiI/Im1vdGlvbiI6VD09PSJpbmNyZWFzZS1jb250cmFzdCI/ImNvbnRyYXN0IjpUPT09InNob3ctYm9yZGVycyI/ImJvcmRlcnMiOlQ9PT0icmVkdWNlLXRyYW5zcGFyZW5jeSI/InRyYW5zcGFyZW5jeSI6InZvaWNlb3ZlciJdLGxhYmVsOkEsY2hpbGRyZW46UShXNSx7bGFiZWw6QSxjaGVja2VkOkNbVF09PT0ib24iLGRpc2FibGVkOiFrfHxxPT09VCxvbkNoYW5nZToodyk9PnooVCx3PyJvbiI6Im9mZiIpfSl9LFQpKV19KV19KX0pfXZhciBzOD0ic2VydmUtc2ltOmNvZGVjIixjSj1be3ZhbHVlOiJhdXRvIixsYWJlbDoiSC4yNjQgKEhhcmR3YXJlKSJ9LHt2YWx1ZToibWpwZWciLGxhYmVsOiJNSlBFRyAoQ29tcGF0aWJpbGl0eSkifV0scko9USgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoInBhdGgiLHtkOiJtMTYgMTMgNS4yMjMgMy40ODJhLjUuNSAwIDAgMCAuNzc3LS40MTZWNy44N2EuNS41IDAgMCAwLS43NTItLjQzMkwxNiAxMC41In0pLFEoInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTQiLGhlaWdodDoiMTIiLHJ4OiIyIn0pXX0pO2Z1bmN0aW9uIEM0KHtwcmVmZXJlbmNlOiQsb25QcmVmZXJlbmNlQ2hhbmdlOkssYWN0aXZlQ29kZWM6SixhdmNjU3VwcG9ydGVkOlosY2hyb21lQXZhaWxhYmxlOlg9ITEsaGlkZUNocm9tZTpZPSExLG9uSGlkZUNocm9tZUNoYW5nZTpxfSl7bGV0W1YsTl09TyghMSksQj1aPyQ6Im1qcGVnIjtyZXR1cm4gUShxMCx7b3BlbjpWLG9uT3BlbkNoYW5nZTpOLCJkYXRhLXN0cmVhbS1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6UShKMSx7Y2hpbGRyZW46W1EoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlN0cmVhbSJ9KSxRKCJzcGFuIix7fSldfSksY2hpbGRyZW46USgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbUShkMCx7aWNvbjpySixsYWJlbDoiQ29kZWMiLGNoaWxkcmVuOlEoWjIse2xhYmVsOiJDb2RlYyIsdmFsdWU6QixvcHRpb25zOmNKLGRpc2FibGVkOiFaLG9uQ2hhbmdlOihHKT0+SyhHKX0pfSksWCYmcSYmUShKMSx7Y2hpbGRyZW46W1EoZDAse2ljb246UShpMCx7c2l6ZToxNCxzdHJva2VXaWR0aDoyfSksbGFiZWw6IkRldmljZSBmcmFtZSIsY2hpbGRyZW46UShXNSx7bGFiZWw6IkRldmljZSBmcmFtZSIsY2hlY2tlZDohWSxvbkNoYW5nZTooRyk9PnEoIUcpfSl9KSxRKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGxlYWRpbmctc251ZyBweC0wLjUiLGNoaWxkcmVuOiJUdXJuIG9mZiB0byBoaWRlIHRoZSBiZXplbCB3aGVuIHZpZXdpbmcgdGhlIHNpbXVsYXRvciBvbiBhIHBob25lLCBzbyBuZXN0ZWQgZnJhbWVzIGRvbid0IHNocmluayB0aGUgc2NyZWVuLiJ9KV19KSxRKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGxlYWRpbmctc251ZyBweC0wLjUiLGNoaWxkcmVuOiFaPyJUaGlzIGJyb3dzZXIgY2FuJ3QgZGVjb2RlIEguMjY0LCBzbyB0aGUgc3RyZWFtIHVzZXMgTUpQRUcuIjpCPT09ImF1dG8iJiZKPT09Im1qcGVnIj8iSC4yNjQgd2FzIHVuYXZhaWxhYmxlIGZvciB0aGlzIHN0cmVhbSwgc28gaXQgZmVsbCBiYWNrIHRvIE1KUEVHLiI6IlN3aXRjaCB0byBNSlBFRyBpZiB0aGUgc3RyZWFtIHN0dXR0ZXJzIG9yIGRyb3BzIHdoaWxlIHNjcmVlbiByZWNvcmRpbmcgdGhlIGJyb3dzZXIgd2luZG93LiJ9KV19KX0pfWZ1bmN0aW9uIGs0KHtvcGVuOiQsb25DbG9zZTpLLHVkaWQ6SixkZXZpY2VSdW50aW1lOlosY3VycmVudEFwcDpYLGV2ZW50TG9nRXZlbnRzRW5kcG9pbnQ6WSxheE92ZXJsYXlFbmFibGVkOnEsb25Ub2dnbGVBeE92ZXJsYXk6Vixjb2RlY1ByZWZlcmVuY2U6TixvbkNvZGVjUHJlZmVyZW5jZUNoYW5nZTpCLGFjdGl2ZUNvZGVjOlUsYXZjY1N1cHBvcnRlZDpHLGNocm9tZUF2YWlsYWJsZTp6PSExLGhpZGVDaHJvbWU6SD0hMSxvbkhpZGVDaHJvbWVDaGFuZ2U6Rix3aWR0aDpMfSl7cmV0dXJuIFEoazUse29wZW46JCx3aWR0aDpMLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6QTV9LGNoaWxkcmVuOltRKEY1LHtjaGlsZHJlbjpbUShZNix7Y2hpbGRyZW46IlRvb2xzIn0pLFEocDIse29uQ2xpY2s6S30pXX0pLCQmJlEoImRpdiIse2NsYXNzTmFtZToicC0zLjUgb3ZlcmZsb3cteS1hdXRvIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0zIixjaGlsZHJlbjpbUShlNix7dWRpZDpKLGN1cnJlbnRBcHA6WH0pLFEoTDQse3VkaWQ6SixldmVudHNFbmRwb2ludDpZfSksUShINCx7dWRpZDpKLHJ1bnRpbWU6Wn0pLFEoUTQse292ZXJsYXlFbmFibGVkOnEsb25Ub2dnbGVPdmVybGF5OlZ9KSxRKFU0LHt1ZGlkOkosYnVuZGxlSWQ6WD8uYnVuZGxlSWQ/P251bGx9KSxRKHM2LHt1ZGlkOkosaG9zdDp4MX0pLFEoSzQse3VkaWQ6SixidW5kbGVJZDpYPy5idW5kbGVJZD8/bnVsbH0pLFEoQzQse3ByZWZlcmVuY2U6TixvblByZWZlcmVuY2VDaGFuZ2U6QixhY3RpdmVDb2RlYzpVLGF2Y2NTdXBwb3J0ZWQ6RyxjaHJvbWVBdmFpbGFibGU6eixoaWRlQ2hyb21lOkgsb25IaWRlQ2hyb21lQ2hhbmdlOkZ9KV19KV19KX1mdW5jdGlvbiBGNCgkLEspe2xldCBKO3RyeXtKPW5ldyBVUkwoJC53ZWJTb2NrZXREZWJ1Z2dlclVybCl9Y2F0Y2h7cmV0dXJuICR9bGV0IFo9YCR7Si5wYXRobmFtZX0ke0ouc2VhcmNofWAsWD1LLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiLFk9Sy5wcm90b2NvbD09PSJodHRwczoiPyJ3c3MiOiJ3cyIscT1gJHtLLmhvc3R9JHtafWAsVj0kLmRldnRvb2xzRnJvbnRlbmRVcmw7dHJ5e2xldCBOPW5ldyBVUkwoJC5kZXZ0b29sc0Zyb250ZW5kVXJsLGAke0sucHJvdG9jb2x9Ly8ke0suaG9zdH1gKTtOLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzIiksTi5zZWFyY2hQYXJhbXMuZGVsZXRlKCJ3c3MiKSxOLnNlYXJjaFBhcmFtcy5zZXQoWSxxKSxWPWAke04ucGF0aG5hbWV9JHtOLnNlYXJjaH0ke04uaGFzaH1gfWNhdGNoe31yZXR1cm57Li4uJCx3ZWJTb2NrZXREZWJ1Z2dlclVybDpgJHtYfS8vJHtLLmhvc3R9JHtafWAsZGV2dG9vbHNGcm9udGVuZFVybDpWfX1mdW5jdGlvbiBYMigkLEspe2ZldGNoKG0xKCJkZXZ0b29scy9oaWdobGlnaHQiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3RhcmdldElkOiQsb246S30pLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gdDgoKXtsZXQgJD1tMSgiZGV2dG9vbHMvcmVsZWFzZSIpO3RyeXtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNlbmRCZWFjb24pe2xldCBLPW5ldyBCbG9iKFsie30iXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KTtpZihuYXZpZ2F0b3Iuc2VuZEJlYWNvbigkLEspKXJldHVybn19Y2F0Y2h7fWZldGNoKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OiJ7fSIsa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBBNCgkKXtsZXQgSz0kLmNvbnRlbnREb2N1bWVudDtpZighSylyZXR1cm47bGV0IEo9KCk9PntsZXQgWT1bS107d2hpbGUoWS5sZW5ndGgpe2xldCBxPVkucG9wKCksVj1xLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxhYmVsXSxbdGl0bGVdIik7Zm9yKGxldCBOIG9mIFYpe2xldCBCPU4uZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fE4udGl0bGV8fCIiO2lmKC9edG9nZ2xlIHNjcmVlbmNhc3QkL2kudGVzdChCKSlyZXR1cm4gTn1mb3IobGV0IE4gb2YgcS5xdWVyeVNlbGVjdG9yQWxsKCIqIikpaWYoTi5zaGFkb3dSb290KVkucHVzaChOLnNoYWRvd1Jvb3QpfXJldHVybiBudWxsfSxaPTAsWD0oKT0+e1orKztsZXQgWT1KKCk7aWYoWSYmWS5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09ImZhbHNlIil7WS5jbGljaygpO3JldHVybn1pZihaPDIwKXNldFRpbWVvdXQoWCwxMDApfTtYKCl9ZnVuY3Rpb24gTzQoJCl7bGV0IEs9W10sSj1uZXcgTWFwO2ZvcihsZXQgWiBvZiAkKXtsZXQgWD1aLmFwcE5hbWV8fFouYnVuZGxlSWR8fCJVbmtub3duIixZPVouYnVuZGxlSWR8fFgscT1KLmdldChZKTtpZighcSlxPXtrZXk6WSxhcHBOYW1lOlgsYnVuZGxlSWQ6Wi5idW5kbGVJZCx0YXJnZXRzOltdfSxKLnNldChZLHEpLEsucHVzaChZKTtxLnRhcmdldHMucHVzaChaKX1yZXR1cm4gSy5tYXAoKFopPT5KLmdldChaKSl9ZnVuY3Rpb24gTTQoJCxLKXtsZXRbSixaXT1PKHt9KSxYPVIxKCgpPT5LLnNsaWNlKCkuc29ydCgpLmpvaW4oInwiKSxbS10pO3JldHVybiBFKCgpPT57aWYoISQpcmV0dXJuO2xldCBZPSExO2ZvcihsZXQgcSBvZiBLKXtpZighcSljb250aW51ZTtsZXQgVj1gJHskfToke3F9YCxOPU01LmdldChWKTtpZih0eXBlb2YgTj09PSJzdHJpbmcifHxOPT09bnVsbCl7WigoQik9PkJbcV09PT1OP0I6ey4uLkIsW3FdOk59KTtjb250aW51ZX10Nih4MSwkLHEpLnRoZW4oKEIpPT57aWYoWSlyZXR1cm47WigoVSk9Pih7Li4uVSxbcV06Qn0pKX0pfXJldHVybigpPT57WT0hMH19LFskLFhdKSxKfWZ1bmN0aW9uIFA0KHt1ZGlkOiQsdGFyZ2V0czpLLHNlbGVjdGVkOkosb25TZWxlY3RUYXJnZXQ6WixvblJlZnJlc2g6WH0pe2xldCBZPU80KEspLHE9WS5tYXAoKEwpPT5MLmJ1bmRsZUlkKS5maWx0ZXIoKEwpPT4hIUwpLFY9TTQoJCxxKSxbTixCXT1PKCExKSxbVSxHXT1PKG51bGwpLHo9SShudWxsKSxIPUkobnVsbCk7RSgoKT0+e2lmKCFOKXJldHVybjtsZXQgTD0oayk9PntpZighSC5jdXJyZW50KXJldHVybjtpZighSC5jdXJyZW50LmNvbnRhaW5zKGsudGFyZ2V0KSlCKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsTCksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsTCl9LFtOXSksRSgoKT0+e2lmKE4pcmV0dXJuO2lmKHouY3VycmVudClYMih6LmN1cnJlbnQsITEpLHouY3VycmVudD1udWxsO3Q4KCl9LFtOXSksRSgoKT0+e2xldCBMPSgpPT50OCgpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEwpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEwpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixMKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixMKX19LFtdKTtsZXQgRj1KPyhKLnRpdGxlfHxKLnVybHx8Si5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKToiU2VsZWN0IHRhcmdldCI7cmV0dXJuIFEoImRpdiIse3JlZjpILGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIG1pbi13LTAiLGNoaWxkcmVuOltRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntCKChMKT0+e2lmKCFMKVgoKTtyZXR1cm4hTH0pfSxjbGFzc05hbWU6InctZnVsbCBtaW4tdy0wIGgtWzI2cHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBiZy1wYW5lbCB0ZXh0LXdoaXRlLzkwIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1tZCB0ZXh0LVsxMnB4XSBweC0yIGN1cnNvci1wb2ludGVyIHRleHQtbGVmdCIsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6TiwiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBtaW4tdy0wIixjaGlsZHJlbjpGfSksUSh2NSx7c2l6ZToxMixzdHJva2VXaWR0aDoyfSldfSksTiYmUSgidWwiLHtyb2xlOiJsaXN0Ym94IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzRweCldIGxlZnQtMCBtLTAgcC0xIGxpc3Qtbm9uZSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gbWluLXctWzIyMHB4XSBtYXgtdy1bMzYwcHhdIG1heC1oLVszMjBweF0gb3ZlcmZsb3cteS1hdXRvIHotNTAiLGNoaWxkcmVuOlkubWFwKChMKT0+e2xldCBrPUwuYnVuZGxlSWQ/VltMLmJ1bmRsZUlkXTpudWxsO3JldHVybiBRKCJsaSIse2NsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAiLGNoaWxkcmVuOltRKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTEuNSBwdC0xIHBiLTAuNSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvWzAuOTJdIixjaGlsZHJlbjpbaz9RKCJpbWciLHtzcmM6ayxhbHQ6IiIsY2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIn0pOlEoInNwYW4iLHtjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksUSgic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkwuYXBwTmFtZX0pXX0pLFEoInVsIix7cm9sZToiZ3JvdXAiLGNsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAgcGwtWzI2cHhdIixjaGlsZHJlbjpMLnRhcmdldHMubWFwKChDKT0+e2xldCBQPUo/LmlkPT09Qy5pZCx5PSEhQy5pblVzZUJ5T3RoZXJJbnNwZWN0b3ImJiFQLFQ9KEMudGl0bGV8fEMudXJsfHxDLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApLEE9VT09PUMuaWQmJiF5LHc9ImZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdIjtyZXR1cm4gUSgibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpQLCJhcmlhLWRpc2FibGVkIjp5LHRhYkluZGV4Onk/LTE6MCx0aXRsZTp5PyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYoeSlyZXR1cm47aWYoei5jdXJyZW50JiZ6LmN1cnJlbnQhPT1DLmlkKVgyKHouY3VycmVudCwhMSk7ei5jdXJyZW50PUMuaWQsRyhDLmlkKSxYMihDLmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoei5jdXJyZW50PT09Qy5pZClYMihDLmlkLCExKSx6LmN1cnJlbnQ9bnVsbDtHKCh2KT0+dj09PUMuaWQ/bnVsbDp2KX0sb25DbGljazooKT0+e2lmKHkpcmV0dXJuO1ooQy5pZCksQighMSl9LGNsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0gJHt5PyJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBpdGFsaWMgdGV4dC13aGl0ZS84NSI6QT8iYmctW3JnYmEoMTAsMTMyLDI1NSwwLjIyKV0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6UD8iYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOiJ0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46VH0pLEMudXJsJiZDLnVybCE9PSJhYm91dDpibGFuayImJlEoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlL1swLjQyXSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46Qy51cmx9KV19LEMuaWQpfSl9KV19LEwua2V5KX0pfSldfSl9ZnVuY3Rpb24gVzQoe29wZW46JCxvbkNsb3NlOkssdWRpZDpKLHRhcmdldHM6WixzZWxlY3RlZFRhcmdldElkOlgsb25TZWxlY3RUYXJnZXQ6WSxsb2FkaW5nOnEsZXJyb3I6VixvblJlZnJlc2g6Tix3aWR0aDpCfSl7bGV0IFU9WD9aLmZpbmQoKEcpPT5HLmlkPT09WCk/P251bGw6bnVsbDtyZXR1cm4gUShrNSx7b3BlbjokLHdpZHRoOkIsY2hpbGRyZW46W1EoRjUse2NoaWxkcmVuOltaLmxlbmd0aD4wP1EoUDQse3VkaWQ6Six0YXJnZXRzOlosc2VsZWN0ZWQ6VSxvblNlbGVjdFRhcmdldDpZLG9uUmVmcmVzaDpOfSk6USgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS9bMC40OF0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOnE/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksUShwMix7b25DbGljazpLLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46Vj9RKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46Vn0pOlUmJiQ/USgiaWZyYW1lIix7c3JjOlUuZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtVLnRpdGxlfHxVLnVybHx8VS5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOihHKT0+QTQoRy5jdXJyZW50VGFyZ2V0KX0sVS5pZCk6USgiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOlU/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24gb0ooe2hvc3RQYXRoOiQsaG9zdDpLLHVkaWQ6SixvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6cX0pe3E/LigkKTtsZXQgVj0kLnNwbGl0KCIvIikucG9wKCk/PyJpbWFnZSIsTj1aKFYsIm1lZGlhIik7cmV0dXJuIFgoTixudWxsKSxaNCgkLEssSikudGhlbigoKT0+WShOLCEwKSkuY2F0Y2goKEIpPT5ZKE4sITEsQiBpbnN0YW5jZW9mIEVycm9yP0IubWVzc2FnZToiQWRkIGZhaWxlZCIpKX1mdW5jdGlvbiBfNCh7aG9zdDokLHVkaWQ6SyxlbmFibGVkOkosb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6WCxvblVwbG9hZEVuZDpZLG9uVW5zdXBwb3J0ZWQ6cSxvbkhvc3RQYXRoRHJvcDpWfSl7bGV0W04sQl09TyghMSksVT1JKDApLEc9RChhc3luYyhMKT0+e2lmKEwucHJldmVudERlZmF1bHQoKSxMLnN0b3BQcm9wYWdhdGlvbigpLFUuY3VycmVudD0wLEIoITEpLCFKfHwhSylyZXR1cm47bGV0IGs9TC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShpMik7aWYoayl7b0ooe2hvc3RQYXRoOmssaG9zdDokLHVkaWQ6SyxvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6Vn0pO3JldHVybn1sZXQgQz1BcnJheS5mcm9tKEwuZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihDLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgUCBvZiBDKXtsZXQgeT1YNChQKTtpZigheSl7cShQKTtjb250aW51ZX1sZXQgVD1aKFAubmFtZSx5KTtWNChQLHksJCxLLChBKT0+WChULEEpLHthbGxvd0luc3RhbGw6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYWxsb3dFeGVjPT09ITB9KS50aGVuKCgpPT5ZKFQsITApKS5jYXRjaCgoQSk9PlkoVCwhMSxBIGluc3RhbmNlb2YgRXJyb3I/QS5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW0osSywkLFosWCxZLHEsVl0pLHo9RCgoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksSilMLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW0pdKSxIPUQoKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLCFKKXJldHVybjtpZihVLmN1cnJlbnQrKyxVLmN1cnJlbnQ9PT0xKUIoITApfSxbSl0pLEY9RCgoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksVS5jdXJyZW50LS0sVS5jdXJyZW50PD0wKVUuY3VycmVudD0wLEIoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6Tixkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOnosb25EcmFnRW50ZXI6SCxvbkRyYWdMZWF2ZTpGLG9uRHJvcDpHfX19ZnVuY3Rpb24gRDQoKXtsZXRbJF09TyhhMCk7cmV0dXJue3N1cHBvcnRlZDokfX1mdW5jdGlvbiBhMigkLEssSixaLFg9ImxlZnQiKXtsZXQgWT1EKCh6LEgpPT5YPT09ImxlZnQiP3otSDpILXosW1hdKSxxPUQoKHopPT5NYXRoLm1heChKLE1hdGgubWluKFoseikpLFtKLFpdKSxbVixOXT1PKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIEs7bGV0IHo9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLEg9eiE9bnVsbD9OdW1iZXIoeik6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoSCk/cShIKTpLfSksQj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihaLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpaLFU9TWF0aC5tYXgoSixNYXRoLm1pbihCLFYpKSxHPUQoKHopPT57ei5wcmV2ZW50RGVmYXVsdCgpO2xldCBIPXouY2xpZW50WCxGPVUsTD16LmN1cnJlbnRUYXJnZXQ7TC5zZXRQb2ludGVyQ2FwdHVyZSh6LnBvaW50ZXJJZCk7bGV0IGs9KFApPT57bGV0IHk9cShGK1koSCxQLmNsaWVudFgpKTtOKHkpfSxDPShQKT0+e0wucmVsZWFzZVBvaW50ZXJDYXB0dXJlKFAucG9pbnRlcklkKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixrKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsQyksTC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixDKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoRitZKEgsUC5jbGllbnRYKSkpKX1jYXRjaHt9fTtMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixrKSxMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsQyksTC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixDKX0sW3EsWSxVLCRdKTtyZXR1cm57d2lkdGg6VSxvblBvaW50ZXJEb3duOkd9fXZhciBuSj04MDAwO2Z1bmN0aW9uIGlKKCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIGFKKCQpe3JldHVybiAkIT09Im5vbmUifWZ1bmN0aW9uIFQ0KHt0b2FzdDokLG9uUmV2ZWFsOkssb25EaXNtaXNzOkosb25QYXVzZTpaLG9uUmVzdW1lOlh9KXtsZXRbWSxxXT1PKCExKSxWPUkobnVsbCksTj1JKG51bGwpLEI9KCk9PntpZihOLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE4uY3VycmVudCk7Ti5jdXJyZW50PW51bGx9O0UoKCk9PigpPT5CKCksW10pO2xldCBVPSh6KT0+e2lmKCEkLnBhdGgpe3oucHJldmVudERlZmF1bHQoKTtyZXR1cm59QigpLFooKSxOLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e04uY3VycmVudD1udWxsLHEoITEpLFgoKX0sbkopLHouZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLGlKKCQucGF0aCkpLHouZGF0YVRyYW5zZmVyLnNldERhdGEoaTIsJC5wYXRoKSx6LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5IjtsZXQgSD1WLmN1cnJlbnQ7aWYoSCl6LmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoSCxILm9mZnNldFdpZHRoLzIsSC5vZmZzZXRIZWlnaHQvMik7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5xKCEwKSl9LEc9KHopPT57aWYoQigpLHEoITEpLGFKKHouZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpKUooKTtlbHNlIFgoKX07cmV0dXJuIFEoImRpdiIseyJkYXRhLXRlc3RpZCI6InNjcmVlbnNob3QtdG9hc3QiLGNsYXNzTmFtZToidy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSIsb25Nb3VzZUVudGVyOlosb25Nb3VzZUxlYXZlOlgsY2hpbGRyZW46WyQudGh1bWImJlEoImltZyIse3JlZjpWLCJkYXRhLXRlc3RpZCI6ImRyYWctaW1hZ2UiLHNyYzokLnRodW1iLGFsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6LTk5OTksbGVmdDowLHdpZHRoOjgwLGhlaWdodDo4MCxib3JkZXJSYWRpdXM6MTIsb2JqZWN0Rml0OiJjb3ZlciIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksJC5zdGF0dXM9PT0iZXJyb3IiP1EoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLFEoInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SyxkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIixvbkRyYWdTdGFydDpVLG9uRHJhZ0VuZDpHLCJhcmlhLWxhYmVsIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtMyBwbC0yIHByLTMuNSBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gdGV4dC1sZWZ0IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6YmctWyMyYTJhMmNdIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtZPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W1EoImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzEwIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJpbmctMSByaW5nLXdoaXRlLzEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQudGh1bWI/USgiaW1nIix7c3JjOiQudGh1bWIsYWx0OiIiLGNsYXNzTmFtZToic2l6ZS1mdWxsIG9iamVjdC1jb3ZlciIsZHJhZ2dhYmxlOiExfSk6USgic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgc2l6ZS00IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMzAgYm9yZGVyLXQtd2hpdGUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KX0pLFEoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBsZWFkaW5nLXRpZ2h0IHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiQuc3RhdHVzPT09InNhdmluZyI/IlNhdmluZyBTY3JlZW5zaG904oCmIjoiU2NyZWVuc2hvdCBTYXZlZCJ9KSwkLnN0YXR1cz09PSJzYXZlZCImJlEoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOiJPcGVuIGluIEZpbmRlciJ9KV19KSwkLnN0YXR1cz09PSJzYXZlZCImJlEoajUse2NsYXNzTmFtZToibWwtYXV0byB0ZXh0LXdoaXRlLzgwIHBvaW50ZXItZXZlbnRzLW5vbmUiLHNpemU6MTYsc3Ryb2tlV2lkdGg6Mi4yNX0pXX0pXX0pfXZhciB3ND0zNTAwLEU0PTQwMDA7ZnVuY3Rpb24gSTQoJCxLKXtsZXQgSj1JKG51bGwpLFo9SShudWxsKSxYPUkobnVsbCksWT1JKG51bGwpLHE9SShudWxsKSxWPUQoKCk9PntpZihYLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFguY3VycmVudCk7WC5jdXJyZW50PW51bGwsWS5jdXJyZW50PW51bGx9LFtdKSxOPUQoKEwpPT57bGV0IGs9TD8/Wi5jdXJyZW50Pz92b2lkIDA7aWYoVigpLHEuY3VycmVudD1udWxsLGwwLmRpc21pc3Moayksaz09PXZvaWQgMHx8Wi5jdXJyZW50PT09U3RyaW5nKGspKUouY3VycmVudD1udWxsLFouY3VycmVudD1udWxsfSxbVl0pLEI9RCgoKT0+e2xldCBMPUouY3VycmVudDtpZihMPy5wYXRoKXgxKCJyZXZlYWxTY3JlZW5zaG90Iix7cGF0aDpMLnBhdGh9KX0sW10pLFU9RCgoTCk9PntWKCk7bGV0IGs9TWF0aC5tYXgoMCxMKSxDPVouY3VycmVudDtxLmN1cnJlbnQ9ayxZLmN1cnJlbnQ9RGF0ZS5ub3coKStrLFguY3VycmVudD1zZXRUaW1lb3V0KCgpPT5OKEM/P3ZvaWQgMCksayl9LFtWLE5dKSxHPUQoKCk9PntpZighWC5jdXJyZW50fHxZLmN1cnJlbnQ9PW51bGwpcmV0dXJuO3EuY3VycmVudD1NYXRoLm1heCgwLFkuY3VycmVudC1EYXRlLm5vdygpKSxWKCl9LFtWXSksej1EKCgpPT57bGV0IEw9cS5jdXJyZW50O2lmKEw9PW51bGwpcmV0dXJuO1UoTCl9LFtVXSksSD1EKChMLGs9MS8wKT0+e2lmKEouY3VycmVudD1MLFouY3VycmVudD1MLmlkLGwwLmN1c3RvbSgoQyk9PlEoVDQse3RvYXN0Okwsb25SZXZlYWw6QixvbkRpc21pc3M6KCk9Pk4oQyksb25QYXVzZTpHLG9uUmVzdW1lOnp9KSx7aWQ6TC5pZCxkdXJhdGlvbjoxLzAsdW5zdHlsZWQ6ITB9KSxOdW1iZXIuaXNGaW5pdGUoaykpVShrKTtlbHNlIFYoKSxxLmN1cnJlbnQ9bnVsbH0sW1YsTixHLHosQixVXSk7cmV0dXJue2NhcHR1cmU6RChhc3luYygpPT57aWYoISQpcmV0dXJuO2xldCBMPWNyeXB0by5yYW5kb21VVUlEKCk7SCh7aWQ6TCxzdGF0dXM6InNhdmluZyIscGhhc2U6ImluIn0pO2xldCBrO3RyeXtsZXQgQz1hd2FpdCB4MSgic2NyZWVuc2hvdCIse3VkaWQ6JCwuLi5LP3tkaXNwbGF5Okt9Ont9fSk7aWYoaz10eXBlb2YgQy5wYXRoPT09InN0cmluZyI/Qy5wYXRoOiIiLEMuZXhpdENvZGUhPT0wfHwhayl7SCh7aWQ6TCxzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6Qy5zdGRlcnIudHJpbSgpfHwiU2NyZWVuc2hvdCBmYWlsZWQifSxFNCk7cmV0dXJufX1jYXRjaChDKXtIKHtpZDpMLHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTpDIGluc3RhbmNlb2YgRXJyb3I/Qy5tZXNzYWdlOiJTY3JlZW5zaG90IGZhaWxlZCJ9LEU0KTtyZXR1cm59SCh7aWQ6TCxzdGF0dXM6InNhdmVkIixwaGFzZToiaW4iLHBhdGg6a30sdzQpO3RyeXtsZXQgQz1hd2FpdCB4MSgic2NyZWVuc2hvdFRodW1ibmFpbCIse3BhdGg6a30pLFA9dHlwZW9mIEMuZGF0YT09PSJzdHJpbmciP0MuZGF0YS5yZXBsYWNlKC9ccysvZywiIik6IiI7aWYoUCl7bGV0IHk9Si5jdXJyZW50O2lmKHk/LmlkPT09TClIKHsuLi55LHRodW1iOmBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtQfWB9LHc0KX19Y2F0Y2h7fX0sWyQsSyxIXSkscmV2ZWFsOkIsZGlzbWlzczpOfX1mdW5jdGlvbiB5NCh7ZGVmYXVsdFdpZHRoOiQsdmlld3BvcnRXaWR0aDpLLHZpZXdwb3J0SGVpZ2h0OkosYXNwZWN0UmF0aW86Wixpbml0aWFsRml0Olg9ITEsb25TdGFydDpZfSl7bGV0IHE9SDUoKSxbVixOXT1PKCExKSxbQixVXT1PKCExKSxbRyx6XT1PKCExKSxIPUkobnVsbCksRj1JKFtdKSxMPUkobnVsbCksaz1JKG51bGwpLEM9SShudWxsKSxQPUkobnVsbCkseT1JKFgpLFQ9SSghMSk7RSgoKT0+e1QuY3VycmVudD0hMH0sW10pO2xldCBBPUQoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gJDtpZih5LmN1cnJlbnQmJiFULmN1cnJlbnQpcmV0dXJuIE81KCQsSyxKLFopO2xldCBiPU5hTjt0cnl7bGV0IG09d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKG04KTtiPW0hPW51bGw/TnVtYmVyKG0pOk5hTn1jYXRjaHt9cmV0dXJuIGI2KCQsSyxKLFosYil9LFtaLCQsSixLXSksdz1SMSgoKT0+QSgpLFtBXSksW2ksdl09Tyh3KSxqPUkodyksZD1JKCQpLFoxPU81KCQsSyxKLFopLHExPU1hdGgubWluKFU2LFoxKSxvPWk/PyQsVDE9JDUobywkLEssSixaKSxnPUQoKGIpPT57bGV0IG09YzIoYik7ai5jdXJyZW50PW0sdihtKX0sW10pLGY9RCgoYik9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8JDw9MClyZXR1cm47bGV0IG09JDUoYiwkLEssSixaKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKG04LFN0cmluZyhtLyQpKX1jYXRjaHt9fSxbWiwkLEosS10pLHQ9RCgoYik9PntpZihDLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KEMuY3VycmVudCk7Qy5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntDLmN1cnJlbnQ9bnVsbCxmKGIpfSxJNil9LFtmXSk7RSgoKT0+e2lmKFZ8fEIpcmV0dXJuO2xldCBiPWouY3VycmVudDtpZihiPT1udWxsKXJldHVybjtsZXQgbT0kNShiLCQsSyxKLFopO2lmKG0hPT1iKWcobSl9LFtaLCQsQixWLEosSyxnXSksRSgoKT0+e2lmKGQuY3VycmVudD09PSQpcmV0dXJuO2QuY3VycmVudD0kLGcoQSgpKX0sWyQsQSxnXSksRSgoKT0+e2lmKCFWJiYhQilyZXR1cm47bGV0IGI9ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IsbT1kb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QsWDE9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0O3JldHVybiBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0ibndzZS1yZXNpemUiLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIiwoKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPWIsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PW0sZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PVgxfX0sW1YsQl0pLEUoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IGI9KCk9PntsZXQgWDE9ai5jdXJyZW50O2lmKFgxPT1udWxsKXJldHVybjtpZihDLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KEMuY3VycmVudCksQy5jdXJyZW50PW51bGw7ZihYMSl9LG09KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIiliKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLGIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLG0pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixiKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixtKX19LFtmXSk7bGV0IEMxPUQoKGIpPT57aWYoYj5aMSlyZXR1cm4gWjErcDgoYi1aMSxaMSk7aWYoYjxxMSlyZXR1cm4gcTEtcDgocTEtYixaMSk7cmV0dXJuIGJ9LFtaMSxxMV0pLE4xPUQoKCk9PntpZihrLmN1cnJlbnQpay5jdXJyZW50KCksay5jdXJyZW50PW51bGw7VSghMSl9LFtdKSxWMT1EKChiKT0+e2xldCBtPXBlcmZvcm1hbmNlLm5vdygpLFgxPUYuY3VycmVudDtYMS5wdXNoKHt0Om0seDpifSk7d2hpbGUoWDEubGVuZ3RoPjEmJm0tWDFbMF0udD5FNilYMS5zaGlmdCgpfSxbXSksazE9RCgoYik9PntsZXQgbT1DMShiKTtpZihMLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoTC5jdXJyZW50KTtMLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57TC5jdXJyZW50PW51bGwsZyhtKSxWMShtKX0pfSxbQzEsVjEsZ10pLEcxPUQoKGIsbSxYMSk9PntOMSgpO2xldCBGMT1qLmN1cnJlbnQ/PyQ7SC5jdXJyZW50PXtwb2ludGVySWQ6YixzdGFydFg6bSxzdGFydFk6WDEsc3RhcnRXaWR0aDpGMX0sRi5jdXJyZW50PVt7dDpwZXJmb3JtYW5jZS5ub3coKSx4OkYxfV0sWSgpLE4oITApfSxbTjEsJCxZXSksUj1EKCgpPT57bGV0IGI9SC5jdXJyZW50O2lmKEguY3VycmVudD1udWxsLEwuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShMLmN1cnJlbnQpLEwuY3VycmVudD1udWxsO2lmKGImJmIucG9pbnRlcklkPj0wKXtsZXQgSDE9UC5jdXJyZW50O2lmKEgxPy5oYXNQb2ludGVyQ2FwdHVyZShiLnBvaW50ZXJJZCkpSDEucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGIucG9pbnRlcklkKX1OKCExKTtsZXQgbT1qLmN1cnJlbnQ/PyQsWDE9eDYoRi5jdXJyZW50KTtGLmN1cnJlbnQ9W107bGV0IEYxPSQ1KG0rWDEqdzYsJCxLLEosWikscD1jMih5NihGMSxbJF0sXzYpKSxuPU1hdGguYWJzKG0tcCk8MC41JiZNYXRoLmFicyhYMSk8ODtpZihxfHxuKXtnKHApLHQocCk7cmV0dXJufVUoITApLGsuY3VycmVudD1TNih7ZnJvbTptLHRvOnAsdmVsb2NpdHk6WDEsc3RpZmZuZXNzOkQ2LGRhbXBpbmc6VDYsb25VcGRhdGU6ZyxvbkNvbXBsZXRlOigpPT57ay5jdXJyZW50PW51bGwsVSghMSksdChwKX19KX0sW1osJCxxLHQsSixLLGddKTtFKCgpPT57cmV0dXJuKCk9PntpZihOMSgpLEwuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShMLmN1cnJlbnQpO2lmKEMuY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KEMuY3VycmVudCksai5jdXJyZW50IT1udWxsKWYoai5jdXJyZW50KX19fSxbTjEsZl0pLEUoKCk9PntpZighVilyZXR1cm47bGV0IGI9KCk9PlIoKSxtPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpUigpfSxYMT0oRjEpPT57bGV0IHA9SC5jdXJyZW50O2lmKCFwfHxwLnBvaW50ZXJJZCE9PUYxLnBvaW50ZXJJZClyZXR1cm47RjEucHJldmVudERlZmF1bHQoKSxrMShiNChwLEYxLmNsaWVudFgsRjEuY2xpZW50WSxaKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsYiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixYMSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsYiwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGIsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLG0pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGIpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsWDEsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGIsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixiLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixtKX19LFtaLFIsVixrMV0pO2xldCBjPUQoKGIpPT57bGV0IG09SC5jdXJyZW50O2lmKCFtfHxtLnBvaW50ZXJJZCE9PWIucG9pbnRlcklkKXJldHVybjtiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSxSKCl9LFtSXSkscj1EKChiKT0+e2lmKGIuYnV0dG9uIT09MClyZXR1cm47Yi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksYi5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGIucG9pbnRlcklkKSxHMShiLnBvaW50ZXJJZCxiLmNsaWVudFgsYi5jbGllbnRZKX0sW0cxXSksJDE9RCgoYik9PntsZXQgbT1ILmN1cnJlbnQ7aWYoIW18fG0ucG9pbnRlcklkIT09Yi5wb2ludGVySWQpcmV0dXJuO2IucHJldmVudERlZmF1bHQoKSxrMShiNChtLGIuY2xpZW50WCxiLmNsaWVudFksWikpfSxbWixrMV0pLF8xPUQoKGIpPT57bGV0IG09Yi5rZXk9PT0iQXJyb3dSaWdodCJ8fGIua2V5PT09IkFycm93RG93biI/MTpiLmtleT09PSJBcnJvd0xlZnQifHxiLmtleT09PSJBcnJvd1VwIj8tMTowO2lmKG09PT0wKXJldHVybjtiLnByZXZlbnREZWZhdWx0KCksTjEoKTtsZXQgWDE9Yi5zaGlmdEtleT84MDoyNCxGMT1jMigkNShUMSttKlgxLCQsSyxKLFopKTtnKEYxKSx0KEYxKX0sW1osTjEsVDEsJCx0LEosSyxnXSk7cmV0dXJue2hhbmRsZVJlZjpQLHdpZHRoOm8sY29tbWl0dGVkV2lkdGg6VDEsbWluV2lkdGg6cTEsbWF4V2lkdGg6WjEsaXNSZXNpemluZzpWLGlzSW5lcnRpYTpCLHJlZHVjZWRNb3Rpb246cSxoYW5kbGVIb3ZlcmVkOkcsaGFuZGxlQWN0aXZlOkd8fFZ8fEIsc2V0SGFuZGxlSG92ZXJlZDp6LG9uUG9pbnRlckRvd246cixvblBvaW50ZXJNb3ZlOiQxLG9uUG9pbnRlckVuZDpjLG9uS2V5RG93bjpfMX19ZnVuY3Rpb24gYjQoJCxLLEosWil7bGV0IFg9Sy0kLnN0YXJ0WCxZPShKLSQuc3RhcnRZKSpaO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKFgpPj1NYXRoLmFicyhZKT9YOlkpfWZ1bmN0aW9uIFM0KCl7bGV0ICQ9SShuZXcgTWFwKSxLPUkobmV3IE1hcCksSj1EKChWKT0+e2xldCBOPUsuY3VycmVudC5nZXQoVik7aWYoTiljbGVhclRpbWVvdXQoTik7Sy5jdXJyZW50LmRlbGV0ZShWKX0sW10pLFo9RCgoVixOPTEvMCk9PntsMC5jdXN0b20oKCk9PlEocDYse3RvYXN0OlZ9KSx7aWQ6Vi5pZCxkdXJhdGlvbjpOLHVuc3R5bGVkOiEwfSl9LFtdKSxYPUQoKFYsTik9PntsZXQgQj1jcnlwdG8ucmFuZG9tVVVJRCgpLFU9e2lkOkIsbmFtZTpWLGtpbmQ6TixzdGF0dXM6InVwbG9hZGluZyIscHJvZ3Jlc3M6MH07cmV0dXJuICQuY3VycmVudC5zZXQoQixVKSxaKFUpLEJ9LFtaXSksWT1EKChWLE4pPT57bGV0IEI9JC5jdXJyZW50LmdldChWKTtpZighQilyZXR1cm47SihWKTtsZXQgVT17Li4uQiwuLi5OfTtpZigkLmN1cnJlbnQuc2V0KFYsVSksWihVLE4uc3RhdHVzPT09InN1Y2Nlc3MifHxOLnN0YXR1cz09PSJlcnJvciI/MzAwMDoxLzApLE4uc3RhdHVzPT09InN1Y2Nlc3MifHxOLnN0YXR1cz09PSJlcnJvciIpe2xldCBHPXNldFRpbWVvdXQoKCk9PnskLmN1cnJlbnQuZGVsZXRlKFYpLEsuY3VycmVudC5kZWxldGUoVil9LDMwMDApO0suY3VycmVudC5zZXQoVixHKX19LFtKLFpdKSxxPUQoKFYsTik9PntsZXQgQj0kLmN1cnJlbnQuZ2V0KFYpO2lmKCFCKXJldHVybjtsZXQgVT17Li4uQixwcm9ncmVzczpOfTskLmN1cnJlbnQuc2V0KFYsVSksWihVKX0sW1pdKTtyZXR1cm57YWRkOlgsdXBkYXRlOlksc2V0UHJvZ3Jlc3M6cX19ZnVuY3Rpb24geDQoJCxLKXtsZXRbSixaXT1PKFtdKSxbWCxZXT1PKG51bGwpLFtxLFZdPU8oITEpLE49RChhc3luYygpPT57aWYoISQpcmV0dXJuO1YoITApLFkobnVsbCk7dHJ5e2xldCBCPWF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSxVPWF3YWl0IEIuanNvbigpO2lmKCFCLm9rfHxVLmVycm9yKXRocm93IEVycm9yKFUuZXJyb3J8fCJGYWlsZWQgdG8gbGlzdCBXZWJLaXQgdGFyZ2V0cyIpO2xldCBHPXR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LmxvY2F0aW9uLHo9VS50YXJnZXRzPz9bXTtaKEc/ei5tYXAoKEgpPT5GNChILEcpKTp6KX1jYXRjaChCKXtZKEIgaW5zdGFuY2VvZiBFcnJvcj9CLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e1YoITEpfX0sWyRdKTtyZXR1cm4gRSgoKT0+e2lmKCFLKXJldHVybjtOKCk7bGV0IEI9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgTigpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKEIpfSxbSyxOXSkse3RhcmdldHM6SixlcnJvcjpYLGxvYWRpbmc6cSxyZWZyZXNoOk59fXZhciBzSj02MCx0Sj0xMDAwO2Z1bmN0aW9uIFI0KCQsSyxKLFo9c0ope2xldFtYLFldPU8obnVsbCksW3EsVl09TygwKSxbTixCXT1PKFopLFtVLEddPU8oMCk7RSgoKT0+e2lmKCFLfHwhJClyZXR1cm47bGV0IEM9ITEsUD0kLmluY2x1ZGVzKCI/Iik/IiYiOiI/Iix5PWFzeW5jKCk9Pnt0cnl7bGV0IHc9YXdhaXQoYXdhaXQgZmV0Y2goYCR7JH0ke1B9bGltaXQ9JHtOfSZvZmZzZXQ9MGAse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKEMpcmV0dXJuO2lmKFkody5kZXZpY2VzPz9bXSksdHlwZW9mIHcudG90YWw9PT0ibnVtYmVyIilWKHcudG90YWwpfWNhdGNoe2lmKCFDKVkoW10pfX07eSgpO2xldCBUPXNldEludGVydmFsKHksSj83NTA6MzAwMCk7cmV0dXJuKCk9PntDPSEwLGNsZWFySW50ZXJ2YWwoVCl9fSxbJCxLLFUsSixOXSk7bGV0IHo9RCgoKT0+RygoQyk9PkMrMSksW10pLEg9RCgoKT0+QigoQyk9PkMrWiksW1pdKSxGPUQoKCk9PkIodEopLFtdKSxMPUQoKCk9PkIoWiksW1pdKSxrPXE+KFg/Lmxlbmd0aD8/MCk7cmV0dXJue2RldmljZXM6WCx0b3RhbDpxLHJlZnJlc2g6eixsb2FkTW9yZTpILGxvYWRBbGw6RixyZXNldFBhZ2U6TCxoYXNNb3JlOmt9fWZ1bmN0aW9uIGVKKCQsSyl7cmV0dXJuICQud2lkdGg9PT1LLndpZHRoJiYkLmhlaWdodD09PUsuaGVpZ2h0fHwkLndpZHRoPT09Sy5oZWlnaHQmJiQuaGVpZ2h0PT09Sy53aWR0aH1mdW5jdGlvbiB2NCgkLEssSil7aWYoISQ/Lmxlbmd0aHx8IShLPjApfHwhKEo+MCkpcmV0dXJuIG51bGw7bGV0IFo9e3dpZHRoOkssaGVpZ2h0Okp9O3JldHVybiAkLmZpbmQoKFgpPT5lSihYLFopKT8/bnVsbH1mdW5jdGlvbiBqNCgkKXtyZXR1cm4gJD09PSJpbm5lciI/InByaW1hcnktMSI6JD09PSJjb3ZlciI/InByaW1hcnkiOnZvaWQgMH12YXIgZTg9e3N0cmVhbWVkOiExLGZlbGxCYWNrOiExfTtmdW5jdGlvbiBnNCgkLEspe3N3aXRjaChLKXtjYXNlImZyYW1lIjpyZXR1cm4gJC5zdHJlYW1lZD8kOnsuLi4kLHN0cmVhbWVkOiEwfTtjYXNlInRpbWVvdXQiOnJldHVybiAkLnN0cmVhbWVkfHwkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UiZXJyb3IiOnJldHVybiAkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UicmVzZXQiOnJldHVybiBlOH19dmFyIGg0PTQwMDA7dmFyICRRPXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiBmNCgkKXtyZXR1cm4gJFFbJF0/P251bGx9dmFyICQzPTMyMCxtND03NjAsSzM9MzAwO3ZhciBLUT1uZXcgU2V0KFsiMCIsIm9mZiIsImZhbHNlIiwiaGlkZSIsImJhcmUiXSksSlE9bmV3IFNldChbIjEiLCJvbiIsInRydWUiLCJzaG93Il0pO2Z1bmN0aW9uIFFRKCQpe2lmKCQ9PW51bGwpcmV0dXJuIG51bGw7bGV0IEo9KHR5cGVvZiAkPT09InN0cmluZyI/bmV3IFVSTFNlYXJjaFBhcmFtcygkLnN0YXJ0c1dpdGgoIj8iKT8kLnNsaWNlKDEpOiQpOiQpLmdldCgiY2hyb21lIik7aWYoSj09bnVsbClyZXR1cm4gbnVsbDtsZXQgWj1KLnRyaW0oKS50b0xvd2VyQ2FzZSgpO2lmKEtRLmhhcyhaKSlyZXR1cm4hMDtpZihKUS5oYXMoWikpcmV0dXJuITE7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcDQoe3NlYXJjaDokLHN0b3JhZ2U6S309e30pe2xldCBKPVFRKCQpO2lmKEohPW51bGwpcmV0dXJuIEo7dHJ5e3JldHVybiBLPy5nZXRJdGVtKCJzZXJ2ZS1zaW06Y2hyb21lIik9PT0iaGlkZGVuIn1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gdTQoJCx7c3RvcmFnZTpLLGxvY2F0aW9uOkoscmVwbGFjZVN0YXRlOlp9PXt9KXt0cnl7Sz8uc2V0SXRlbSgic2VydmUtc2ltOmNocm9tZSIsJD8iaGlkZGVuIjoic2hvd24iKX1jYXRjaHt9aWYoIUp8fCFaKXJldHVybjt0cnl7bGV0IFg9bmV3IFVSTChKLmhyZWYpLFk9WC5zZWFyY2g7aWYoJClYLnNlYXJjaFBhcmFtcy5zZXQoImNocm9tZSIsIjAiKTtlbHNlIFguc2VhcmNoUGFyYW1zLmRlbGV0ZSgiY2hyb21lIik7aWYoWC5zZWFyY2g9PT1ZKXJldHVybjtaKGAke1gucGF0aG5hbWV9JHtYLnNlYXJjaH0ke1guaGFzaH1gKX1jYXRjaHt9fWZ1bmN0aW9uIGw0KHtoYXNDaHJvbWU6JCxpc0xhbmRzY2FwZTpLLGhpZGVDaHJvbWU6Sn0pe3JldHVybiAkJiYhSyYmIUp9ZnVuY3Rpb24gZDQoe2hhc0Nocm9tZTokLGlzTGFuZHNjYXBlOkt9KXtyZXR1cm4gJCYmIUt9ZnVuY3Rpb24gSjMoJCxLKXtpZighJClyZXR1cm4gbnVsbDtpZighJC5kZXZpY2UpcmV0dXJuICQ7aWYoISQucHJveHlIZWxwZXJzKXJldHVybiAkO2xldCBaPWAkeyQuYmFzZVBhdGg9PT0iLyI/IiI6KCQuYmFzZVBhdGg/PyIiKS5yZXBsYWNlKC9cLyskLywiIil9L2hlbHBlci8ke2VuY29kZVVSSUNvbXBvbmVudCgkLmRldmljZSl9YCxYPWAke0sucHJvdG9jb2x9Ly8ke0suaG9zdH1gLFk9Sy5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IjtyZXR1cm57Li4uJCx1cmw6YCR7WH0ke1p9YCxzdHJlYW1Vcmw6YCR7WH0ke1p9L3N0cmVhbS5tanBlZ2Asd3NVcmw6YCR7WX0vLyR7Sy5ob3N0fSR7Wn0vd3NgfX1mdW5jdGlvbiBRMygkKXtpZigkPy5pbmNsdWRlcygiZGV2dG9vbHMiKSlyZXR1cm4iZGV2dG9vbHMiO2lmKCQ/LmluY2x1ZGVzKCJ0b29scyIpKXJldHVybiJ0b29scyI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gWlEoJCxLKXtsZXQgSj0kLmluY2x1ZGVzKCI/Iik/IiYiOiI/IjtyZXR1cm5gJHskfSR7Sn1kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoSyl9YH1hc3luYyBmdW5jdGlvbiBjNCgkLEssSj17fSl7bGV0IFg9YXdhaXQoSi5mZXRjaEltcGw/P2ZldGNoKShaUSgkLEspLHtjYWNoZToibm8tc3RvcmUiLHNpZ25hbDpKLnNpZ25hbH0pO2lmKCFYLm9rKXJldHVybiBudWxsO2xldCBZPXQwKGF3YWl0IFguanNvbigpKTtyZXR1cm4gWT8uZGV2aWNlPT09Sz9ZOm51bGx9ZnVuY3Rpb24gcjQoJCxLLEope2xldCBaPSEwO3JldHVybiAkLm9ubWVzc2FnZT0oWCk9PntpZighWilyZXR1cm47dHJ5e2xldCBZPXQwKEpTT04ucGFyc2UoWC5kYXRhKSk7aWYoWSYmSyYmWS5kZXZpY2UhPT1LKXJldHVybjtKKFkpfWNhdGNoe319LCgpPT57Wj0hMSwkLmNsb3NlKCl9fWZ1bmN0aW9uIG80KCQsSyl7bGV0IEo9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEspKSxaPW5ldyBVaW50OEFycmF5KDErSi5sZW5ndGgpO3JldHVybiBaWzBdPSQsWi5zZXQoSiwxKSxafWZ1bmN0aW9uIFhRKCQsSyxKPTMyKXtsZXQgWj1bLi4uJCxLXTtyZXR1cm4gWi5sZW5ndGg+Sj9aLnNsaWNlKFoubGVuZ3RoLUopOlp9ZnVuY3Rpb24gWjMoJCxLLEo9RGF0ZS5ub3coKSxaPTE1MDApe2xldCBYPUsuZmlsdGVyKChZKT0+Si1ZLmNyZWF0ZWRBdDw9Wik7aWYoISR8fCQucmVhZHlTdGF0ZSE9PTEpcmV0dXJuIFg7Zm9yKGxldCBZIG9mIFgpJC5zZW5kKG80KFkudGFnLFkucGF5bG9hZCkuYnVmZmVyKTtyZXR1cm5bXX1mdW5jdGlvbiBuNCgkLEssSixaLFg9RGF0ZS5ub3coKSl7bGV0IFk9WjMoJCxLLFgpO2lmKCQ/LnJlYWR5U3RhdGU9PT0xKXJldHVybiAkLnNlbmQobzQoSixaKS5idWZmZXIpLFk7cmV0dXJuIFhRKFkse3RhZzpKLHBheWxvYWQ6WixjcmVhdGVkQXQ6WH0pfWZ1bmN0aW9uIGk0KCQpe3JldHVybiAkP2AkeyQuZGV2aWNlfTokeyQucGlkfTokeyQuc3RyZWFtVXJsfTokeyQud3NVcmx9YDoiIn1mdW5jdGlvbiBZUSgpe2xldCAkPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmluaXRpYWxTdGF0ZSxLPVEzKCQ/LnBhbmVzKSxbSixaXT1PKCgpPT5KMyh0MCh3aW5kb3cuX19TSU1fUFJFVklFV19fKSx3aW5kb3cubG9jYXRpb24pKSxbWCxZXT1PKCExKSxbcSxWXT1PKCgpPT57bGV0IHA9dDAod2luZG93Ll9fU0lNX1BSRVZJRVdfXyk7aWYocClyZXR1cm4gcC5kZXZpY2U7cmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJkZXZpY2UiKX0pLFtOLEJdPU8oITEpLFtVLEddPU8oSz09PSJkZXZ0b29scyIpLFt6LEhdPU8oKCk9PntpZigkPy5wYW5lcylyZXR1cm4gJC5wYW5lcy5pbmNsdWRlcygiZGV2aWNlcyIpO2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49SzMrNTIwfSkse3dpZHRoOkYsb25Qb2ludGVyRG93bjpMfT1hMigic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIixLMywyNDAsNjQwLCJyaWdodCIpLFtrLENdPU8obnVsbCksUD13aW5kb3cuX19TSU1fUFJFVklFV19fLHk9UD8uZ3JpZEFwaUVuZHBvaW50Pz9tMSgiZ3JpZC9hcGkiKSxUPVA/LmdyaWRTdGFydEVuZHBvaW50Pz9tMSgiZ3JpZC9hcGkvc3RhcnQiKSxBPVA/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9tMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbdyxpXT1PKHt9KSxbdixqXT1PKHt9KSxbZCxaMV09Tyh7fSksW3ExLG9dPU8oKCk9Pm5ldyBTZXQpLFQxPU9iamVjdC52YWx1ZXModykuc29tZShCb29sZWFuKXx8T2JqZWN0LnZhbHVlcyh2KS5zb21lKEJvb2xlYW4pLHtkZXZpY2VzOmcsdG90YWw6ZixyZWZyZXNoOnQsbG9hZE1vcmU6QzEsbG9hZEFsbDpOMSxyZXNldFBhZ2U6VjEsaGFzTW9yZTprMX09UjQoeSwhMCxUMSksRzE9ISEocSYmZz8uZmluZCgocCk9PnAuZGV2aWNlPT09cSk/LmhlbHBlciksUj1EKChwKT0+e1YocCk7dHJ5e2xldCBuPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO24uc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixwKSx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwiIixuLnRvU3RyaW5nKCkpfWNhdGNoe319LFtdKSxjPUQoYXN5bmMocCxuPTIwMDAwKT0+e2xldCBIMT1EYXRlLm5vdygpK247d2hpbGUoRGF0ZS5ub3coKTxIMSl7dHJ5e2lmKCgoYXdhaXQoYXdhaXQgZmV0Y2goeSx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5zb21lKChnMSk9PmcxLmRldmljZT09PXAmJmcxLmhlbHBlcikpcmV0dXJuITB9Y2F0Y2h7fWF3YWl0IG5ldyBQcm9taXNlKChPMSk9PnNldFRpbWVvdXQoTzEsNDAwKSl9cmV0dXJuITF9LFt5XSkscj1EKGFzeW5jKHApPT57aSgobik9Pih7Li4ubixbcF06ITB9KSksWjEoKG4pPT4oey4uLm4sW3BdOm51bGx9KSk7dHJ5e2xldCBuPWF3YWl0IGZldGNoKFQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOnB9KX0pLEgxPWF3YWl0IG4uanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighbi5va3x8IUgxLm9rKXtaMSgoTzEpPT4oey4uLk8xLFtwXTpIMS5lcnJvcj8/YEhUVFAgJHtuLnN0YXR1c31gfSkpO3JldHVybn1vKChPMSk9Pk8xLmhhcyhwKT9PMTpuZXcgU2V0KE8xKS5hZGQocCkpLGF3YWl0IGMocCl9Y2F0Y2gobil7WjEoKEgxKT0+KHsuLi5IMSxbcF06bj8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e2koKG4pPT4oey4uLm4sW3BdOiExfSkpLHQoKX19LFtULGMsdF0pLCQxPUQoYXN5bmMocCk9PntqKChuKT0+KHsuLi5uLFtwXTohMH0pKSxaMSgobik9Pih7Li4ubixbcF06bnVsbH0pKTt0cnl7bGV0IG49YXdhaXQgZmV0Y2goQSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6cH0pfSksSDE9YXdhaXQgbi5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFuLm9rfHwhSDEub2spWjEoKE8xKT0+KHsuLi5PMSxbcF06SDEuZXJyb3I/P2BIVFRQICR7bi5zdGF0dXN9YH0pKX1jYXRjaChuKXtaMSgoSDEpPT4oey4uLkgxLFtwXTpuPy5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7aigobik9Pih7Li4ubixbcF06ITF9KSksdCgpfX0sW0EsdF0pO0UoKCk9PntpZihxKXJldHVybjtpZihKPy5kZXZpY2Upe1YoSi5kZXZpY2UpO3JldHVybn1pZighZ3x8Zy5sZW5ndGg9PT0wKXJldHVybjtsZXQgcD1nLmZpbmQoKG4pPT5uLmhlbHBlcik/P2cuZmluZCgobik9Pm4uc3RhdGU9PT0iQm9vdGVkIik/P2dbMF07aWYocClWKHAuZGV2aWNlKX0sW3EsSj8uZGV2aWNlLGddKTtsZXQgXzE9RCgocCk9PntaKChuKT0+e2lmKHA9SjModDAocCksd2luZG93LmxvY2F0aW9uKSxpNChuKT09PWk0KHApKXJldHVybiBuO2lmKHApd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1wO2Vsc2UgaWYod2luZG93Ll9fU0lNX1BSRVZJRVdfXyl7bGV0e2Jhc2VQYXRoOkgxLGFsbG93RXhlYzpPMX09d2luZG93Ll9fU0lNX1BSRVZJRVdfXzt3aW5kb3cuX19TSU1fUFJFVklFV19fPXtiYXNlUGF0aDpIMSxhbGxvd0V4ZWM6TzF9fXJldHVybiBwfSl9LFtdKTtFKCgpPT57bGV0IHA9YCR7bTEoImFwaS9ldmVudHMiKX0ke3E/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQocSl9YDoiIn1gLG49ZTAocCk7cmV0dXJuIHI0KG4scSxfMSl9LFtxLEcxLF8xXSksRSgoKT0+e2lmKCFxfHwhRzF8fEo/LmRldmljZT09PXEpcmV0dXJuO2xldCBwPW5ldyBBYm9ydENvbnRyb2xsZXIsbj0hMSxIMT1udWxsLE8xPTc1MCxKMD1hc3luYygpPT57dHJ5e2xldCBnMT1hd2FpdCBjNChtMSgiYXBpIikscSx7c2lnbmFsOnAuc2lnbmFsfSk7aWYoIW4mJmcxKXtfMShnMSk7cmV0dXJufX1jYXRjaHt9aWYoIW4pSDE9c2V0VGltZW91dChKMCxPMSksTzE9TWF0aC5taW4oTzEqMiw1MDAwKX07cmV0dXJuIEowKCksKCk9PntpZihuPSEwLHAuYWJvcnQoKSxIMSljbGVhclRpbWVvdXQoSDEpfX0sW3EsRzEsSj8uZGV2aWNlLF8xXSk7bGV0IGI9cT8/Sj8uZGV2aWNlPz9udWxsLG09Zz8uZmluZCgocCk9PnAuZGV2aWNlPT09Yik/P251bGwsWDE9ISFKJiZKLmRldmljZT09PWIsRjE7aWYoWDEmJkopRjE9UShxUSx7Y29uZmlnOkosZGV2aWNlTmFtZTptPy5uYW1lPz9udWxsLGRldmljZVJ1bnRpbWU6bT8ucnVudGltZT8/bnVsbCxjaHJvbWU6bT8uY2hyb21lPz9udWxsLGRpc3BsYXlzOm0/LmRpc3BsYXlzPz9udWxsLHByZWZlck1qcGVnOnExLmhhcyhKLmRldmljZSksYXhPdmVybGF5RW5hYmxlZDpOLHNldEF4T3ZlcmxheUVuYWJsZWQ6QixkZXZ0b29sc09wZW46VSxzZXREZXZ0b29sc09wZW46RyxncmlkT3Blbjp6LHNldEdyaWRPcGVuOkgsZ3JpZFBhbmVsV2lkdGg6RixzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6ayxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6QyxzdHJlYW1pbmc6WCxzZXRTdHJlYW1pbmc6WX0pO2Vsc2V7bGV0IHA9ej8xMitGKzI0OjI0O0YxPVEoImRpdiIse2NsYXNzTmFtZToiaC1zY3JlZW4gZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTMgYmctcGFnZSBmb250LXN5c3RlbSBib3gtYm9yZGVyIFt0cmFuc2l0aW9uOnBhZGRpbmdfMC4yNXNfZWFzZV0iLHN0eWxlOntwYWRkaW5nTGVmdDpwLHBhZGRpbmdSaWdodDoyNH0sY2hpbGRyZW46bT9RKFg2LHtuYW1lOm0ubmFtZSxydW50aW1lOm0ucnVudGltZSxjaHJvbWU6bS5jaHJvbWU/P251bGwscGxhY2Vob2xkZXJBc3NldDptLnBsYWNlaG9sZGVyQXNzZXQ/P251bGwsYnVzeTohIW0uaGVscGVyfHwhIXdbbS5kZXZpY2VdLGJ1c3lMYWJlbDptLmhlbHBlcj8iQ29ubmVjdGluZ+KApiI6IlN0YXJ0aW5n4oCmIixlcnJvcjpkW20uZGV2aWNlXT8/bnVsbCxvblN0YXJ0OigpPT5yKG0uZGV2aWNlKX0pOlEoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltRKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxRKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IHRleHQtWzE0cHhdIG1heC13LTEyMCIsY2hpbGRyZW46WyJDcmVhdGUgYSBzaW11bGF0b3IgaW4gWGNvZGUsIG9yIHN0YXJ0IG9uZSB3aXRoIiwiICIsUSgiY29kZSIse2NsYXNzTmFtZToiYmctWyMyMjJdIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ImJ1bnggc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KV19KX0pfXJldHVybiBRKEoxLHtjaGlsZHJlbjpbRjEsUShtNix7fSksUShCNix7b3Blbjp6LG9uQ2xvc2U6KCk9PkgoITEpLHdpZHRoOkYsc2lkZToibGVmdCIsZGV2aWNlczpnLHRvdGFsOmYsaGFzTW9yZTprMSxvbkxvYWRNb3JlOkMxLG9uTG9hZEFsbDpOMSxvblJlc2V0UGFnZTpWMSxzZWxlY3RlZFVkaWQ6YixvblNlbGVjdDpSLHN0YXJ0aW5nOncsc2h1dHRpbmdEb3duOnYsb25TaHV0ZG93bjokMX0pLFEodTIse3BhbmVsV2lkdGg6Rix2aXNpYmxlOnosb25Qb2ludGVyRG93bjpMLGFyaWFMYWJlbDoiUmVzaXplIHNpbXVsYXRvcnMgc2lkZWJhciIsc2lkZToibGVmdCJ9KSxRKGU5LHtvcGVuOnosb25DbGljazooKT0+SCghMCl9KV19KX1mdW5jdGlvbiBxUSh7Y29uZmlnOiQsZGV2aWNlTmFtZTpLLGRldmljZVJ1bnRpbWU6SixjaHJvbWU6WixkaXNwbGF5czpYLHByZWZlck1qcGVnOlksYXhPdmVybGF5RW5hYmxlZDpxLHNldEF4T3ZlcmxheUVuYWJsZWQ6VixkZXZ0b29sc09wZW46TixzZXREZXZ0b29sc09wZW46QixncmlkT3BlbjpVLHNldEdyaWRPcGVuOkcsZ3JpZFBhbmVsV2lkdGg6eixzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6SCxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6RixzdHJlYW1pbmc6TCxzZXRTdHJlYW1pbmc6a30pe2xldCBDPSQuaW5pdGlhbFN0YXRlLFA9UTMoQz8ucGFuZXMpO0UoKCk9Pntkb2N1bWVudC50aXRsZT1LP2BTaW11bGF0b3IgLSAke0t9YDoiU2ltdWxhdG9yIFByZXZpZXcifSxbS10pO2xldCB5PVQwKEspLFQ9eDQoJC5kZXZ0b29sc0VuZHBvaW50Pz9tMSgiZGV2dG9vbHMiKSxOKTtFKCgpPT57aWYoIU4pcmV0dXJuO2lmKEgmJlQudGFyZ2V0cy5zb21lKChTKT0+Uy5pZD09PUgpKXJldHVybjtGKFQudGFyZ2V0cy5sZW5ndGg9PT0xP1QudGFyZ2V0c1swXS5pZDpudWxsKX0sW04sVC50YXJnZXRzLEgsRl0pLEUoKCk9PntGKG51bGwpfSxbJC5kZXZpY2UsRl0pO2xldCBBPUQ0KCksW3csaV09bzAoZzQsZTgpLFt2XT1PKCgpPT5uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiY29kZWMiKT09PSJtanBlZyIpLFtqLGRdPU8oKCk9PndpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShzOCk9PT0ibWpwZWciPyJtanBlZyI6ImF1dG8iKTtFKCgpPT57d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHM4LGopfSxbal0pO2xldFtaMSxxMV09TygoKT0+cDQoe3NlYXJjaDp3aW5kb3cubG9jYXRpb24uc2VhcmNoLHN0b3JhZ2U6d2luZG93LmxvY2FsU3RvcmFnZX0pKTtFKCgpPT57dTQoWjEse3N0b3JhZ2U6d2luZG93LmxvY2FsU3RvcmFnZSxsb2NhdGlvbjp3aW5kb3cubG9jYXRpb24scmVwbGFjZVN0YXRlOihTKT0+d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIsUyl9KX0sW1oxXSk7bGV0IG89KFg/Lmxlbmd0aD8/MCk+MSxnPSQuY29kZWMhPT0ibWpwZWciJiZBLnN1cHBvcnRlZCYmIXcuZmVsbEJhY2smJiFZJiYhdiYmaiE9PSJtanBlZyIsZj1rMihvfHxnP251bGw6JC5zdHJlYW1VcmwpO0UoKCk9PntrKCExKSxpKCJyZXNldCIpfSxbJC5zdHJlYW1Vcmwsa10pLEUoKCk9PntpZihnJiZMKWkoImZyYW1lIil9LFtnLExdKSxFKCgpPT57aWYoIWcpcmV0dXJuO2xldCBTPXNldFRpbWVvdXQoKCk9PmkoInRpbWVvdXQiKSxoNCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChTKX0sW2csJC5zdHJlYW1VcmxdKTtsZXRbdCxDMV09TyhudWxsKSxbTjEsVjFdPU8obnVsbCksW2sxLEcxXT1PKG51bGwpLFI9azEsYz1OMT8/Uj8/QjUoeSxLKSxyPXY0KFgsYy53aWR0aCxjLmhlaWdodCksJDE9cj8uY2hyb21lPz9aLF8xPVcyKHksYyksYj1ONSh5LGMpLG09UDIoYyksWDE9VjUoYyksRjE9WDE/WDEud2lkdGgvWDEuaGVpZ2h0OjEscD1tMChjKSxuPSFvJiZsNCh7aGFzQ2hyb21lOiEhJDEsaXNMYW5kc2NhcGU6cCxoaWRlQ2hyb21lOloxfSksSDE9IW8mJmQ0KHtoYXNDaHJvbWU6ISEkMSxpc0xhbmRzY2FwZTpwfSksTzE9bj8kMS5mcmFtZS53aWR0aC8kMS5zY3JlZW4ud2lkdGg6MSxKMD10JiZ0LndpZHRoPjAmJnQuaGVpZ2h0PjA/dC53aWR0aC90LmhlaWdodDoxLjExMTExMTExMTExMTExMTIsZzE9bz9NYXRoLm1heChiLHQ/LndpZHRoPz8wKTpiKk8xLEQxPW8/SjA6bj8kMS5mcmFtZS53aWR0aC8kMS5mcmFtZS5oZWlnaHQ6RjEsZDE9bz9TdHJpbmcoSjApOm4/YCR7JDEuZnJhbWUud2lkdGh9IC8gJHskMS5mcmFtZS5oZWlnaHR9YDptLHMxPUkobnVsbCksTjA9SShbXSk7RSgoKT0+e2xldCBTPSExLGU9bnVsbCxpMT1udWxsO04wLmN1cnJlbnQ9W107bGV0IEIxPSgpPT57aWYoU3x8ZSlyZXR1cm47ZT1zZXRUaW1lb3V0KCgpPT57ZT1udWxsLGExKCl9LDEwMDApfSxhMT0oKT0+e2xldCBLMD1uZXcgV2ViU29ja2V0KCQud3NVcmwpO0swLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIixpMT1LMCxzMS5jdXJyZW50PUswLEswLm9ub3Blbj0oKT0+e04wLmN1cnJlbnQ9WjMoSzAsTjAuY3VycmVudCl9LEswLm9ubWVzc2FnZT0ocTMpPT57aWYoIShxMy5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgYzA9bmV3IFVpbnQ4QXJyYXkocTMuZGF0YSk7aWYoYzBbMF09PT0xMzEpe3RyeXtDMShKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShjMC5zdWJhcnJheSgxKSkpKX1jYXRjaHt9cmV0dXJufWlmKGMwWzBdPT09MTQpe3RyeXtpZihKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShjMC5zdWJhcnJheSgxKSkpLm9rPT09ITEpVTAobnVsbCksbDAuZXJyb3IoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHNpbXVsYXRvciBmb2xkIHBvc2UuIil9Y2F0Y2h7fXJldHVybn1pZihjMC5sZW5ndGg8MXx8YzBbMF0hPT0xMzApcmV0dXJuO3RyeXtsZXQgeTA9SlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYzAuc3ViYXJyYXkoMSkpKTtpZih5MC53aWR0aDw9MHx8eTAuaGVpZ2h0PD0wKXJldHVybjtHMSgocjApPT5yMCYmcjAud2lkdGg9PT15MC53aWR0aCYmcjAuaGVpZ2h0PT09eTAuaGVpZ2h0JiZyMC5vcmllbnRhdGlvbj09PXkwLm9yaWVudGF0aW9uJiZyMC5oaW5nZURlZ3JlZXM9PT15MC5oaW5nZURlZ3JlZXMmJnIwLmR1b1ZpZXdPcmllbnRhdGlvbj09PXkwLmR1b1ZpZXdPcmllbnRhdGlvbj9yMDp5MCl9Y2F0Y2h7fX0sSzAub25jbG9zZT0oKT0+e2lmKHMxLmN1cnJlbnQ9PT1LMClzMS5jdXJyZW50PW51bGw7QjEoKX0sSzAub25lcnJvcj0oKT0+e0swLmNsb3NlKCl9fTtyZXR1cm4gYTEoKSwoKT0+e2lmKFM9ITAsZSljbGVhclRpbWVvdXQoZSk7aWYoczEuY3VycmVudD09PWkxKXMxLmN1cnJlbnQ9bnVsbDtpMT8uY2xvc2UoKX19LFskLndzVXJsXSk7bGV0IEsxPUQoKFMsZSk9PntOMC5jdXJyZW50PW40KHMxLmN1cnJlbnQsTjAuY3VycmVudCxTLGUpfSxbXSksYzE9RCgoUyk9PksxKDMsUyksW0sxXSksRTA9RCgoUyk9PksxKDUsUyksW0sxXSksdjE9RCgoUyk9PksxKDQse2J1dHRvbjpTfSksW0sxXSksW1YwLFUwXT1PKG51bGwpLFAxPUkobnVsbCksaDE9SShudWxsKSxRMD1EKChTKT0+e2lmKFUwKFM9PT1SPy5oaW5nZURlZ3JlZXM/bnVsbDpTKSxoMS5jdXJyZW50PVMsUDEuY3VycmVudClyZXR1cm47UDEuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57UDEuY3VycmVudD1udWxsLEsxKDE0LHtoaW5nZTpoMS5jdXJyZW50fSl9LDUwKX0sW0sxLFI/LmhpbmdlRGVncmVlc10pLEYwPUQoKFMpPT57aWYoUDEuY3VycmVudCljbGVhclRpbWVvdXQoUDEuY3VycmVudCk7UDEuY3VycmVudD1udWxsLFUwKG51bGwpLEsxKDE0LHtwb3NlOlN9KX0sW0sxXSk7RSgoKT0+KCk9PntpZihQMS5jdXJyZW50KWNsZWFyVGltZW91dChQMS5jdXJyZW50KX0sW10pLEUoKCk9PntpZihSPy5oaW5nZURlZ3JlZXMhPW51bGwpVTAoKFMpPT5TIT1udWxsJiZNYXRoLmFicyhTLVIuaGluZ2VEZWdyZWVzKTwwLjY/bnVsbDpTKX0sW1I/LmhpbmdlRGVncmVlc10pO2xldCByMT1WMD8/Uj8uaGluZ2VEZWdyZWVzPz8ocj8ucm9sZT09PSJpbm5lciI/MTgwOjApLEkwPUQoKHtwaGFzZTpTLGJ1dHRvbjplfSk9PntpZihlLnVzYWdlUGFnZT09bnVsbHx8ZS51c2FnZT09bnVsbClyZXR1cm47SzEoNCx7YnV0dG9uOmUubmFtZSxwYWdlOmUudXNhZ2VQYWdlLHVzYWdlOmUudXNhZ2UscGhhc2U6U30pfSxbSzFdKSx4MD1EKChTLGUpPT57SzEoNCx7YnV0dG9uOlMubmFtZSxwYWdlOlMucGFnZSx1c2FnZTpTLnVzYWdlLHBoYXNlOmV9KX0sW0sxXSksQTA9RCgoUyk9PksxKDEwLHtkZWx0YTpTfSksW0sxXSksbzE9RCgoUyk9PksxKDExLFMpLFtLMV0pLEUxPUQoKFMpPT57VjEoKGUpPT5lJiZlLndpZHRoPT09Uy53aWR0aCYmZS5oZWlnaHQ9PT1TLmhlaWdodCYmZS5vcmllbnRhdGlvbj09PVMub3JpZW50YXRpb24/ZTpTKX0sW10pLHQxPUQoKFMpPT57SzEoNyx7b3JpZW50YXRpb246U30pfSxbSzFdKSx3MT1jLmR1b1ZpZXdPcmllbnRhdGlvbj8/Yy5vcmllbnRhdGlvbj8/InBvcnRyYWl0IixaMD15IT09IndhdGNoIiYmeSE9PSJ2aXNpb24iLGIwPUQoKFMpPT57aWYoIVowKXJldHVybjtsZXQgZT0oUz09PSJsZWZ0Ij9uNTpDOClbdzFdO3QxKGUpfSxbWjAsdzEsdDFdKTtFKCgpPT57VjEobnVsbCksRzEobnVsbCksQzEobnVsbCksVTAobnVsbCl9LFskLnN0cmVhbVVybF0pLEUoKCk9PntsZXQgUz1SO2lmKCFTKXJldHVybjtWMSgoZSk9PmUmJmUud2lkdGg9PT1TLndpZHRoJiZlLmhlaWdodD09PVMuaGVpZ2h0JiZlLm9yaWVudGF0aW9uPT09Uy5vcmllbnRhdGlvbj9lOm51bGwpfSxbUixSPy53aWR0aCxSPy5oZWlnaHQsUj8ub3JpZW50YXRpb25dKTtsZXQgejA9RCgoUyxlKT0+e0sxKDYse3R5cGU6Uyx1c2FnZTplfSl9LFtLMV0pLFtMMCxXXT1PKG51bGwpLFt1LGFdPU8oKCk9PntpZihDPy5wYW5lcylyZXR1cm4gUD09PSJ0b29scyI7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuITE7bGV0IFM9TnVtYmVyKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIikpLGU9TnVtYmVyLmlzRmluaXRlKFMpJiZTPjA/UzokMztyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PWUrNDgwfSkse3dpZHRoOlUxLG9uUG9pbnRlckRvd246VzF9PWEyKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLCQzLDI0MCw3MjApLHt3aWR0aDpZMSxvblBvaW50ZXJEb3duOkExfT1hMigic2VydmUtc2ltOmRldnRvb2xzLXBhbmVsLXdpZHRoIixtNCw0MjAsMTQwMCksW24xLGwxXT1PKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbcDEsTzBdPU8oKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTtFKCgpPT57bGV0IFM9KCk9PntsMSh3aW5kb3cuaW5uZXJXaWR0aCksTzAod2luZG93LmlubmVySGVpZ2h0KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFMpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixTKX0sW10pLEUoKCk9PntsZXQgUz1lMCgkLmFwcFN0YXRlRW5kcG9pbnQ/P20xKCJhcHBzdGF0ZSIpKSxlPW51bGw7cmV0dXJuIFMub25tZXNzYWdlPShpMSk9Pnt0cnl7bGV0IEIxPUpTT04ucGFyc2UoaTEuZGF0YSk7aWYoZSljbGVhclRpbWVvdXQoZSk7bGV0IGExPUIxPy5pc1JlYWN0TmF0aXZlPzA6NjAwO2U9c2V0VGltZW91dCgoKT0+VyhCMSksYTEpfWNhdGNoe319LCgpPT57aWYoZSljbGVhclRpbWVvdXQoZSk7Uy5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBHMD1EKGFzeW5jKCk9Pnt6MCgiZG93biIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChlKT0+c2V0VGltZW91dChlLDMwKSksejAoInVwIiwyMSl9LFt6MF0pLF89SShudWxsKSxbTSx4XT1PKDApLFtsLFExXT1PKDApO0UoKCk9PntsZXQgUz1fLmN1cnJlbnQ7aWYoIVN8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBlPW5ldyBSZXNpemVPYnNlcnZlcigoaTEpPT57bGV0IEIxPWkxWzBdPy5jb250ZW50UmVjdDt4KEIxPy53aWR0aD8/MCksUTEoQjE/LmhlaWdodD8/MCl9KTtyZXR1cm4gZS5vYnNlcnZlKFMpLCgpPT5lLmRpc2Nvbm5lY3QoKX0sW10pO2xldFt6MSxNMV09TyghMCksSTE9SSghMCk7STEuY3VycmVudD16MTtsZXQgZTE9SShuZXcgU2V0KTtFKCgpPT57bGV0IFM9KGUpPT57bGV0IGkxPSEhXy5jdXJyZW50Py5jb250YWlucyhlLnRhcmdldCk7TTEoaTEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFMsITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsUywhMCl9LFtdKSxFKCgpPT57aWYoejEpcmV0dXJuO2xldCBTPWUxLmN1cnJlbnQ7aWYoUy5zaXplPT09MClyZXR1cm47Zm9yKGxldCBlIG9mIFMpSzEoNix7dHlwZToidXAiLHVzYWdlOmV9KTtTLmNsZWFyKCl9LFt6MSxLMV0pLEUoKCk9PntsZXQgUz0oQjEsYTEpPT57aWYoIUkxLmN1cnJlbnQpcmV0dXJuO2lmKEIxLmNvZGU9PT0iS2V5SCImJkIxLm1ldGFLZXkmJkIxLnNoaWZ0S2V5KXtpZihCMS5wcmV2ZW50RGVmYXVsdCgpLGExPT09ImRvd24iJiYhQjEucmVwZWF0KUsxKDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoKEIxLmNvZGU9PT0iQXJyb3dMZWZ0Inx8QjEuY29kZT09PSJBcnJvd1JpZ2h0IikmJkIxLm1ldGFLZXkmJiFCMS5zaGlmdEtleSYmIUIxLmFsdEtleSYmIUIxLmN0cmxLZXkpe2lmKEIxLnByZXZlbnREZWZhdWx0KCksYTE9PT0iZG93biImJiFCMS5yZXBlYXQpYjAoQjEuY29kZT09PSJBcnJvd0xlZnQiPyJsZWZ0IjoicmlnaHQiKTtyZXR1cm59aWYoQjEuY29kZT09PSJLZXlBIiYmQjEubWV0YUtleSYmQjEuc2hpZnRLZXkpe2lmKEIxLnByZXZlbnREZWZhdWx0KCksYTE9PT0iZG93biImJiFCMS5yZXBlYXQpeDEoInRvZ2dsZUFwcGVhcmFuY2UiLHt1ZGlkOiQuZGV2aWNlfSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm59aWYoQjEuY29kZT09PSJLZXlLIiYmQjEubWV0YUtleSYmIUIxLnNoaWZ0S2V5JiYhQjEuYWx0S2V5JiYhQjEuY3RybEtleSl7aWYoQjEucHJldmVudERlZmF1bHQoKSxhMT09PSJkb3duIiYmIUIxLnJlcGVhdClLMSgxMix7fSk7cmV0dXJufWxldCBLMD1mNChCMS5jb2RlKTtpZihLMD09bnVsbClyZXR1cm47aWYoQjEucHJldmVudERlZmF1bHQoKSxhMT09PSJkb3duIillMS5jdXJyZW50LmFkZChLMCk7ZWxzZSBlMS5jdXJyZW50LmRlbGV0ZShLMCk7SzEoNix7dHlwZTphMSx1c2FnZTpLMH0pfSxlPShCMSk9PlMoQjEsImRvd24iKSxpMT0oQjEpPT5TKEIxLCJ1cCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixpMSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixpMSl9fSxbSzEsJC5kZXZpY2UsYjBdKTtsZXQgTTA9UzQoKSxQMD1JNCgkLmRldmljZSxqNChyPy5yb2xlPz90Py5wYW5lbCkpLFE1PV80KHtob3N0OngxLHVkaWQ6JC5kZXZpY2UsZW5hYmxlZDpMLG9uVXBsb2FkU3RhcnQ6TTAuYWRkLG9uVXBsb2FkUHJvZ3Jlc3M6TTAuc2V0UHJvZ3Jlc3Msb25VcGxvYWRFbmQ6KFMsZSxpMSk9Pk0wLnVwZGF0ZShTLHtzdGF0dXM6ZT8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOmkxfSksb25VbnN1cHBvcnRlZDooUyk9PntsZXQgZT1NMC5hZGQoUy5uYW1lLCJtZWRpYSIpO00wLnVwZGF0ZShlLHtzdGF0dXM6ImVycm9yIixtZXNzYWdlOmBVbnN1cHBvcnRlZDogJHtTLnR5cGV8fF81KFMpfWB9KX0sb25Ib3N0UGF0aERyb3A6UDAuZGlzbWlzc30pLCQwPXk0KHtkZWZhdWx0V2lkdGg6ZzEsdmlld3BvcnRXaWR0aDpuMSx2aWV3cG9ydEhlaWdodDpwMSxhc3BlY3RSYXRpbzpEMSxpbml0aWFsRml0Om98fEM/LmZpdD09PSEwLG9uU3RhcnQ6KCk9Pk0xKCExKX0pLFIwPU4/WTE6dT9VMTowLHYwPW8/TzUoZzEsTWF0aC5tYXgoMjQwLG4xLShVP3o6MCktUjAtOTYpLHAxLEQxKTokMC53aWR0aCxhND0xMixYMz0yNCxzND1NPjA/TWF0aC5taW4oTSx2MCk6djAsWTM9KFMpPT57aWYoUzw9MClyZXR1cm4gMDtsZXQgZT1uMS1hNC1TLEIxPW4xLzIrczQvMi0oZS1YMyk7aWYoQjE8PTApcmV0dXJuIDA7bGV0IGExPTIqQjE7cmV0dXJuIGExPD1TK1gzP2ExOjB9LHQ0PW8/UjA6WTMoUjApLGU0PW8/VT96OjA6WTMoVT96OjApO3JldHVybiBRKHM5LHtlbmRwb2ludDpxPyQ/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOlEoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1zY3JlZW4gYmctcGFnZSBweS02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLHN0eWxlOntwYWRkaW5nTGVmdDoyNCtlNCxwYWRkaW5nUmlnaHQ6MjQrdDQsdHJhbnNpdGlvbjokMC5pc1Jlc2l6aW5nfHwkMC5pc0luZXJ0aWE/Im5vbmUiOno2fSxjaGlsZHJlbjpbUSgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6djAsdHJhbnNpdGlvbjpmOCgkMCl9LGNoaWxkcmVuOltRKFMxLHtleGVjOlIyLG9uUm90YXRlOnQxLG9yaWVudGF0aW9uOncxLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpLLGRldmljZVJ1bnRpbWU6SixzdHJlYW1pbmc6TCwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBzdGF0dXMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGZsZXhXcmFwOiJub3dyYXAiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDoxMCxwYWRkaW5nOiI2cHggMTBweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpbUShTMS5UaXRsZSx7b25DbGljazooKT0+RygoUyk9PiFTKSwiYXJpYS1sYWJlbCI6IlRvZ2dsZSBzaW11bGF0b3JzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOlUsdGl0bGU6IlNpbXVsYXRvcnMiLGhpZGVTdWJ0aXRsZTohMCxoaWRlQ2hldnJvbjohMCxzdHlsZTp7bWF4V2lkdGg6Im1pbigyMzBweCwgY2FsYygxMDB2dyAtIDE3MHB4KSkifX0pLFEobDYse3N0cmVhbWluZzpMfSldfSksUSgiZGl2Iix7cmVmOl8sY2xhc3NOYW1lOiJyZWxhdGl2ZSBtYXgtaC1mdWxsIHNlbGVjdC1ub25lIiwiZGF0YS1kZXZpY2UtY2hyb21lIjpuPyJvbiI6Im9mZiIsc3R5bGU6e3dpZHRoOnYwLGFzcGVjdFJhdGlvOmQxLHRyYW5zaXRpb246ZjgoJDApLHdpbGxDaGFuZ2U6JDAuaXNSZXNpemluZ3x8JDAuaXNJbmVydGlhPyJ3aWR0aCI6dm9pZCAwfSwuLi5RNS5kcm9wWm9uZVByb3BzLGNoaWxkcmVuOlsoKCk9PntpZihvKXJldHVybiBRKFc5LHt1cmw6JC5zdHJlYW1VcmwucmVwbGFjZSgic3RyZWFtLm1qcGVnIiwic3RyZWFtLjNkLm1qcGVnIikscHJvamVjdGlvbjp0LHNjcmVlbkNvbmZpZzpjLG9uU3RyZWFtaW5nQ2hhbmdlOmssb25IYXJkd2FyZVByZXNzOngwLG9uVG91Y2g6YzEsb25NdWx0aVRvdWNoOkUwLG9uRXJyb3I6KCk9PmwwLmVycm9yKCJEZXZpY2UgcmVuZGVyaW5nIGlzIHVuYXZhaWxhYmxlLiBDaGVjayB0aGUgc2VsZWN0ZWQgWGNvZGUgYW5kIHNlcnZlciBsb2cuIiksY2hpbGRyZW46cSYmdCYmUSh2OCx7cHJvamVjdGlvbjp0LHNjcmVlbkNvbmZpZzpjfSl9KTtsZXQgUz1RKE0yLHt1cmw6JC51cmwsd3NVcmw6JC53c1VybCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIixwb2ludGVyRXZlbnRzOiQwLmlzUmVzaXppbmd8fCQwLmlzSW5lcnRpYT8ibm9uZSI6dm9pZCAwfSxpbWFnZVN0eWxlOntib3JkZXJSYWRpdXM6bj8wOl8xLGNvcm5lclNoYXBlOm4/dm9pZCAwOiJzdXBlcmVsbGlwc2UoMS4zKSIsLi4ubj97fTp7Ym94U2hhZG93OiJpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIn19LGhpZGVDb250cm9sczohMCxvblN0cmVhbWluZ0NoYW5nZTprLG9uU3RyZWFtVG91Y2g6YzEsb25TdHJlYW1NdWx0aVRvdWNoOkUwLG9uU3RyZWFtQnV0dG9uOnYxLG9uU3RyZWFtRGlnaXRhbENyb3duOkEwLG9uU3RyZWFtU2Nyb2xsOm8xLGNvZGVjOmc/ImF2Y2MiOiJtanBlZyIsb25BdmNjRXJyb3I6KCk9PmkoImVycm9yIiksc3Vic2NyaWJlRnJhbWU6Zz92b2lkIDA6Zi5zdWJzY3JpYmVGcmFtZSxzdHJlYW1GcmFtZTpnP3ZvaWQgMDpmLmZyYW1lLHN0cmVhbUNvbmZpZzpjLGVuYWJsZURpZ2l0YWxDcm93bjp5PT09IndhdGNoIixvblNjcmVlbkNvbmZpZ0NoYW5nZTpFMX0pLGU9UShKMSx7Y2hpbGRyZW46W1MscSYmUSh2OCx7fSldfSk7aWYoIUgxKXJldHVybiBlO3JldHVybiBRKG0yLHtjaHJvbWU6JDEsZnJhbWVkOm4saW50ZXJhY3RpdmU6bixvbkJ1dHRvbjpJMCxvbkNyb3duV2hlZWw6KGkxLEIxKT0+e2xldCBhMT1zNShpMSxCMSxsfHwxKTtpZihhMSE9bnVsbClBMChhMSl9LHNjcmVlbjplfSl9KSgpLFE1LmlzRHJhZ092ZXImJlEoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1hY2NlbnQgYmctW3JnYmEoOTksMTAyLDI0MSwwLjE4KV0gdGV4dC1hY2NlbnQgcG9pbnRlci1ldmVudHMtbm9uZSB6LTIwIixzdHlsZTp7Ym9yZGVyUmFkaXVzOm4/dm9pZCAwOl8xfSxjaGlsZHJlbjpbUShjNSx7c2l6ZTozMixzdHJva2VXaWR0aDoxLjV9KSxRKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46IkRyb3AgbWVkaWEgb3IgLmlwYSJ9KV19KSwhbyYmUShKMSx7Y2hpbGRyZW46W1EodjYse3NpbXVsYXRvclJlc2l6ZTokMCxkZXZpY2VUeXBlOnksc3RyZWFtQ29uZmlnOmMsY29udGFpbmVyV2lkdGg6TXx8djAsY29udGFpbmVySGVpZ2h0Omx8fChEMT4wP3YwL0QxOjApfSksUSh1Nix7d2lkdGg6TXx8djAsaGVpZ2h0Omx8fChEMT4wP3YwL0QxOjApLHZpc2libGU6JDAuaXNSZXNpemluZ3x8JDAuaXNJbmVydGlhfSldfSldfSksUSgiZGl2Iix7Y2xhc3NOYW1lOmBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgJHtvPyIiOiJtYXgtdy1mdWxsIn1gLGNoaWxkcmVuOltRKFMxLHtleGVjOlIyLG9uUm90YXRlOnQxLG9yaWVudGF0aW9uOncxLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpLLGRldmljZVJ1bnRpbWU6SixzdHJlYW1pbmc6TCwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBhY3Rpb25zIixzdHlsZTp7YWxpZ25TZWxmOiJjZW50ZXIiLG1pbldpZHRoOjAsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzoiNnB4IDhweCIsYm9yZGVyUmFkaXVzOjE4LC4uLm8/e2ZsZXhXcmFwOiJub3dyYXAiLHdpZHRoOiJtYXgtY29udGVudCIsbWF4V2lkdGg6Im5vbmUifTp7d2lkdGg6ImF1dG8iLG1heFdpZHRoOiIxMDAlIn19LGNoaWxkcmVuOlEoUzEuQWN0aW9ucyx7Y2hpbGRyZW46W0wwPy5pc1JlYWN0TmF0aXZlJiZRKFMxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiJSZWxvYWQgUmVhY3QgTmF0aXZlIGJ1bmRsZSIsdGl0bGU6IlJlbG9hZCAoUikiLG9uQ2xpY2s6KCk9PnZvaWQgRzAoKSxjaGlsZHJlbjpRKHMwLHt9KX0pLFEoUzEuSG9tZUJ1dHRvbix7dGl0bGU6IkhvbWUiLG9uQ2xpY2s6KFMpPT57Uy5wcmV2ZW50RGVmYXVsdCgpLHgxKCJob21lIix7dWRpZDokLmRldmljZSx3YXRjaDp5PT09IndhdGNoIn0pfX0pLFEoUzEuU2NyZWVuc2hvdEJ1dHRvbix7dGl0bGU6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KFMpPT57Uy5wcmV2ZW50RGVmYXVsdCgpLFAwLmNhcHR1cmUoKX19KSxRKFMxLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSksIW8mJiEhJDEmJlEodDkse2hpZGVDaHJvbWU6WjEsb25Ub2dnbGU6KCk9PnExKChTKT0+IVMpfSksbyYmUShKMSx7Y2hpbGRyZW46W1Eoajgse292ZXJsYXlFbmFibGVkOnEsc3RyZWFtaW5nOkwsb25Ub2dnbGVPdmVybGF5OigpPT5WKChTKT0+IVMpfSksUSgic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJteC0xIGgtNCB3LXB4IHNocmluay0wIGJnLXdoaXRlLzE1In0pLFEoVDkse29yaWVudGF0aW9uOncxLGFuZ2xlOnIxLG9uQ2hhbmdlOlEwLG9uUG9zZTpGMH0pXX0pXX0pfSksIW8mJlEoUzEse2V4ZWM6UjIsb25Sb3RhdGU6dDEsb3JpZW50YXRpb246dzEsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkssZGV2aWNlUnVudGltZTpKLHN0cmVhbWluZzpMLCJhcmlhLWxhYmVsIjoiQWNjZXNzaWJpbGl0eSBvdmVybGF5IixzdHlsZTp7d2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzo2LGJvcmRlclJhZGl1czoyMn0sY2hpbGRyZW46UShqOCx7b3ZlcmxheUVuYWJsZWQ6cSxzdHJlYW1pbmc6TCxvblRvZ2dsZU92ZXJsYXk6KCk9PlYoKFMpPT4hUyl9KX0pXX0pXX0pLFEoImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgcmlnaHQtMyBmbGV4IGZsZXgtY29sIGdhcC0xIHAtMSBiZy1wYW5lbC1iZyBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gYmFja2Ryb3AtYmx1ci1bMTJweF0gWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gei00MCAke3V8fE4/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbUSgiYnV0dG9uIix7b25DbGljazooKT0+e0IoITEpLGEoKFMpPT4hUyl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOnUsdGl0bGU6IlRvb2xzIixjaGlsZHJlbjpRKHU1LHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLFEoImJ1dHRvbiIse29uQ2xpY2s6KCk9PnthKCExKSxCKChTKT0+IVMpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIFdlYktpdCBEZXZUb29scyIsImFyaWEtcHJlc3NlZCI6Tix0aXRsZToiV2ViS2l0IERldlRvb2xzIixjaGlsZHJlbjpRKGY1LHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pXX0pLFEoazQse29wZW46dSxvbkNsb3NlOigpPT5hKCExKSx1ZGlkOiQuZGV2aWNlLGRldmljZVJ1bnRpbWU6SixjdXJyZW50QXBwOkwwLGV2ZW50TG9nRXZlbnRzRW5kcG9pbnQ6JC5ldmVudExvZ0V2ZW50c0VuZHBvaW50LGF4T3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZUF4T3ZlcmxheTooKT0+VigoUyk9PiFTKSxjb2RlY1ByZWZlcmVuY2U6aixvbkNvZGVjUHJlZmVyZW5jZUNoYW5nZTpkLGFjdGl2ZUNvZGVjOmc/ImgyNjQiOiJtanBlZyIsYXZjY1N1cHBvcnRlZDpBLnN1cHBvcnRlZCxjaHJvbWVBdmFpbGFibGU6ISEkMSYmIW8saGlkZUNocm9tZTpaMSxvbkhpZGVDaHJvbWVDaGFuZ2U6cTEsd2lkdGg6VTF9KSxRKHUyLHtwYW5lbFdpZHRoOlUxLHZpc2libGU6dSxvblBvaW50ZXJEb3duOlcxLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLFEoVzQse29wZW46TixvbkNsb3NlOigpPT5CKCExKSx1ZGlkOiQuZGV2aWNlLHRhcmdldHM6VC50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6SCxvblNlbGVjdFRhcmdldDpGLGxvYWRpbmc6VC5sb2FkaW5nLGVycm9yOlQuZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIFQucmVmcmVzaCgpLHdpZHRoOlkxfSksUSh1Mix7cGFuZWxXaWR0aDpZMSx2aXNpYmxlOk4sb25Qb2ludGVyRG93bjpBMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSldfSl9KX11OShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoUShZUSx7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return T9}function rJ(){return new Promise(($)=>{h6("xcrun",["simctl","list","devices","-j"],{encoding:"utf-8",timeout:3000},(Q,Z)=>{if(Q)return $([]);try{let J=JSON.parse(Z),Y=[];for(let[G,X]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(G))continue;for(let z of X){if(z.isAvailable===!1)continue;Y.push({...z,runtime:G.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}var tJ=1610612736;function sJ(){try{let $=Number(D7("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(D7("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=D7("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(G)=>{let X=Z.match(G);return X?Number(X[1]):0},Y=J(/Pages free:\s+(\d+)/)+J(/Pages inactive:\s+(\d+)/)+J(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite($)?$:0,availableBytes:Y*(Number.isFinite(Q)?Q:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function eJ(){try{let $=D7("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),Q={},Z=0,J=/\/Devices\/([0-9A-F-]{36})\//i;for(let Y of $.split(`
|
|
108
|
+
`)){let G=Y.trimStart();if(!G)continue;let X=J.exec(G);if(!X)continue;let z=Number(G.split(/\s+/,1)[0]);if(!Number.isFinite(z))continue;let K=z*1024,V=X[1].toUpperCase();Q[V]=(Q[V]??0)+K,Z+=K}return{perUdid:Q,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function $3(){let{totalBytes:$,availableBytes:Q}=sJ(),Z=eJ(),J=Object.keys(Z.perUdid).length,Y=J>0?Z.totalBytes/J:0,G=Y>=268435456?"measured":"estimated",X=G==="measured"?Y:tJ,z=X>0?Math.max(0,Math.floor(Q/X)):0;return{totalBytes:$,availableBytes:Q,runningSimulators:J,perSimAvgBytes:X,perSimSource:G,estimatedAdditional:z}}function Q3($,Q){let Z=Buffer.from($),J=Buffer.from(Q);if(Z.length!==J.length)return!1;return AJ(Z,J)}var Z3={401:"Unauthorized",403:"Forbidden"};function J3($,Q){$.writeHead(Q.status,{"Content-Type":"application/json","Cache-Control":"no-store",...Q.status===401?{"WWW-Authenticate":'Bearer realm="serve-sim"'}:{}}),$.end(JSON.stringify({error:Q.status===401?"unauthorized":"forbidden",message:Q.message}))}function _4($,Q,Z){try{$.end(`HTTP/1.1 ${Q} ${Z3[Q]??"Error"}\r
|
|
109
|
+
Content-Type: text/plain; charset=utf-8\r
|
|
110
|
+
Connection: close\r
|
|
111
|
+
\r
|
|
112
|
+
`+Z)}catch{$.destroy()}}function Y3($){if(!$)return!1;return $.split(";",1)[0].trim().toLowerCase()==="application/json"}function iG($){let Q=($?.basePath??"/.sim").replace(/\/+$/,""),Z=kJ(Q),J=yJ(Q),Y=$?.proxyHelpers??!0,G=$?.inspectWebKitBridge??pJ,X=$?.execToken??_J(32).toString("base64url"),z=$?.allowExec===!0,K=O$($?.authToken),V=$?.serveSimBin??oJ(),W=(U)=>Q===""||U===Q||U.startsWith(Q+"/"),M=(U)=>U===Q||U===Q+"/",B=`${Q}/auth`,L=S0(B),A=10,D=60000,q=1024,j=new Map,T=(U,F)=>{let k=(j.get(U)??[]).filter((S)=>F-S<60000);if(k.length===0)j.delete(U);else j.set(U,k);return k},_=(U,F)=>{let k=j.get(U);if(k){k.push(F);return}if(j.size>=1024){for(let[S,u]of j)if(!u.some((g)=>F-g<60000))j.delete(S);if(j.size>=1024)j.delete(j.keys().next().value)}j.set(U,[F])},E=(U,F)=>{let k=(t,W6,Y6={})=>{F.writeHead(t,{"Content-Type":"application/json","Cache-Control":"no-store",...Y6}),F.end(JSON.stringify({error:W6}))};if((U.method??"GET").toUpperCase()!=="POST")return k(405,"method_not_allowed",{Allow:"POST"});if(i6(U)!=="same")return k(403,"cross_origin_request_blocked");if(!K)return k(403,"remote_access_disabled");let S=Date.now(),u=I8(U)??"unknown";if(T(u,S).length>=10)return k(429,"too_many_attempts",{"Retry-After":String(Math.ceil(60))});let g=String(U.headers[R$]??"").trim();if(!g||!h7(g,K))return _(u,S),k(401,"unauthorized");let e=String(U.headers["x-forwarded-proto"]??"").split(",")[0].trim()==="https"||U.socket.encrypted===!0;F.writeHead(204,{"Set-Cookie":`${q8}=${w8(K)}; Path=${Q===""?"/":Q}; HttpOnly; SameSite=Lax`+(e?"; Secure":""),"Cache-Control":"no-store"}),F.end()},P=(U)=>{U.writeHead(401,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store","Content-Security-Policy":L.csp,"Referrer-Policy":"no-referrer","WWW-Authenticate":'Bearer realm="serve-sim"'}),U.end(L.html)},N=x0({serveSimBin:V,allowExec:z,isKnownDevice:$?.isKnownDevice??(async(U)=>(await T4())?.has(U)??!1),onCommandResult:(U,F)=>U9(U,F)}),H=async(U)=>{let F=U??{};if(typeof F.device!=="string"||!/^[0-9A-Za-z-]+$/.test(F.device))throw Error("missing or invalid device udid");if(F.option===void 0)return{status:await U0(F.device)};if(!k6[F.option])throw Error(`unknown option: ${F.option}`);let k=typeof F.value==="string"?O0(F.option,F.value):null;if(k===null)throw Error(`invalid value for ${F.option}: ${F.value}`);await a7(F.device,F.option,k);try{A6({device:F.device,source:"ui",kind:"ui-setting",action:F.option,status:"ok",summary:`UI ${F.option} ${k}`,details:{option:F.option,value:k}})}catch{}return{ok:!0}},R=async(U,F,k)=>{let S=U.url??"",u=S.indexOf("?"),g=u===-1?S:S.slice(0,u),f=_9(S),e=O4(S),t=e??$?.device??null,W6=Q==="/"?"/devtools-frontend":`${Q}/devtools-frontend`,Y6=x6(U);if(W(f)){if(f===B){E(U,F);return}if(!Y6){let y=S8(U,K);if(!y.ok){let b=(U.method??"GET").toUpperCase();if(y.status===401&&(b==="GET"||b==="HEAD")&&M(f))P(F);else J3(F,y);return}}let m=(U.method??"GET").toUpperCase();if(m!=="GET"&&m!=="HEAD"&&i6(U)==="cross"){F.writeHead(403,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:"cross_origin_request_blocked"}));return}}let G6=L4(S,Z);if(G6&&W(f)){let m=G6.device??t;if(uJ(U,F,m,G6.upstreamPath))return;F.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),F.end("No serve-sim device");return}if(W(f)&&(f===W6||f.startsWith(`${W6}/`))){let m=f===W6?"inspector.html":f.slice(W6.length+1);if(m.split("/").some((y)=>{let b;try{b=decodeURIComponent(y)}catch{return!0}return b==="."||b===".."||/[\\/]/.test(b)})){F.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),F.end("Invalid asset path");return}try{let y=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${TJ}/${m}${u===-1?"":S.slice(u)}`),b={"Cache-Control":"public, max-age=604800"},p=y.headers.get("content-type");if(p)b["Content-Type"]=p;F.writeHead(y.status,b),F.end(Buffer.from(await y.arrayBuffer()))}catch(y){F.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),F.end(y instanceof Error?y.message:"Failed to load DevTools frontend")}return}if(g===Q||g===Q+"/"){let m=await v6(),y=Q7(m,t),b=aJ();if(!y){let p=JSON.stringify({basePath:Q,...z&&Y6?{allowExec:!0}:{},...$?.initialState?{initialState:$.initialState}:{}});b=b.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${p}</script>`)}if(y){let p=Y8(y,_7(U),Q,G8(U),Y),$6=`<script>window.__SIM_PREVIEW__=${JSON.stringify(A9(p,Q,Y6?V:"",z&&Y6,$?.codec,Y,$?.initialState))}</script>`;b=b.replace("<!--__SIM_PREVIEW_CONFIG__-->",$6)}F.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),F.end(b);return}if(g===Q+"/grid/api/memory"){F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify($3()));return}if(g===Q+"/grid/api/devicekit-chrome"){$0(new URL(S||"/","http://serve-sim.local"),F);return}if(g===Q+"/grid/api/device-placeholder-asset"){Q0(new URL(S||"/","http://serve-sim.local"),F);return}if(g===Q+"/grid/api"){let m=await v6(),y=new Map(m.map((l)=>[l.device,l])),b=await rJ(),p=wJ(),d=(l)=>{if(/iphone/i.test(l))return 0;if(/ipad/i.test(l))return 1;if(/watch/i.test(l))return 2;if(/(apple\s*tv|^tv\b)/i.test(l))return 3;if(/vision|reality/i.test(l))return 4;return 5},$6=(l)=>{if(y.has(l.udid))return 0;if(t&&l.udid===t)return 1;if(l.state==="Booted")return 2;if(l.udid===p)return 3;return 4},Q6=(l)=>{let V6=l.match(/-(\d+)-(\d+)/),L6=V6?Number(V6[1]):0,O=V6?Number(V6[2]):0;return-(L6*1000+O)};b.sort((l,V6)=>$6(l)-$6(V6)||d(l.name)-d(V6.name)||l.name.localeCompare(V6.name)||Q6(l.runtime)-Q6(V6.runtime));let a=b.length,{limit:n,offset:K6}=SJ(S),O6=(n==null?b:b.slice(K6,K6+n)).map((l)=>{let V6=y.get(l.udid),L6=V6?Y8(V6,_7(U),Q,G8(U),Y):null,O=o8(l);return{device:l.udid,name:l.name,runtime:l.runtime,state:l.state,chrome:s$(l),displays:O.length>1?O:void 0,placeholderAsset:e$(l),helper:L6?{port:L6.port,url:L6.url,streamUrl:L6.streamUrl,wsUrl:L6.wsUrl}:null}});F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify({devices:O6,total:a,offset:n==null?0:K6,limit:n??a}));return}if(g===Q+"/grid/api/shutdown"&&U.method==="POST"){let m="";U.on("data",(y)=>{m+=typeof y==="string"?y:y.toString()}),U.on("end",()=>{let y="";try{y=JSON.parse(m).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(y)){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}P8(y),T7={at:0,booted:null},h6("xcrun",["simctl","shutdown",y],{timeout:30000},(b,p,d)=>{if(b){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:d?.toString().trim()||b.message}));return}F.writeHead(200,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!0}))})});return}if(g===Q+"/grid/api/start"&&U.method==="POST"){let m="";U.on("data",(y)=>{m+=typeof y==="string"?y:y.toString()}),U.on("end",()=>{let y="";try{y=JSON.parse(m).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(y)){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let b=U.socket.localPort??0;gJ(y,b,Q,{authTokenSha256:k$(K),allowExec:z}).then((p)=>{if(F.writableEnded)return;if(p)F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:p}));else F.writeHead(200,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!0}))})});return}if(g===Q+"/devtools"){let m=await v6();if(!Q7(m,t)){F.writeHead(404,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:"No serve-sim device"}));return}try{let b=await G(),p=await b.listTargets(),d=Y?nJ(U):"ws",$6=Y?`${_7(U)??`127.0.0.1:${b.port}`}${J}`:`127.0.0.1:${b.port}/devtools`,Q6=p.map((a)=>({...a,webSocketDebuggerUrl:`${d}://${$6}/page/${encodeURIComponent(a.id)}`,devtoolsFrontendUrl:iJ(W6,d,$6,a.id)}));F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify({port:b.port,targets:Q6}))}catch(b){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:b instanceof Error?b.message:"Failed to start inspect-webkit"}))}return}if(g===Q+"/devtools/release"&&U.method==="POST"){let m="";U.on("data",(y)=>m+=y),U.on("end",async()=>{try{let y=m?JSON.parse(m):{};(await G()).releaseHighlight?.(y.targetId),F.writeHead(200,{"Content-Type":"application/json"}),F.end("{}")}catch(y){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:y instanceof Error?y.message:"Failed to release"}))}});return}if(g===Q+"/devtools/highlight"&&U.method==="POST"){let m="";U.on("data",(y)=>m+=y),U.on("end",async()=>{try{let{targetId:y,on:b}=JSON.parse(m||"{}");if(!y){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:"Missing targetId"}));return}let p=await G();if(!p.highlightTarget){F.writeHead(501,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await p.highlightTarget(y,!!b),F.writeHead(200,{"Content-Type":"application/json"}),F.end("{}")}catch(y){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:y instanceof Error?y.message:"Failed to highlight target"}))}});return}if(g===Q+"/api"){let m=await v6(),y=Q7(m,t),b=`${t??"(any)"}|${m.length}|${y?`${y.device}@${y.port}`:"none"}`;if(b!==H4)H4=b,B7("GET /api selectedDevice=%s states=%d chose=%s",t??"(any)",m.length,y?`${y.device}@${y.port}`:"none");F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let p=y?Y8(y,_7(U),Q,G8(U),Y):null;F.end(JSON.stringify(p?A9(p,Q,Y6?V:"",z&&Y6,$?.codec,Y,$?.initialState):null));return}if(g===Q+"/api/event-log"){F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify({events:D8({device:e,sinceId:N4(S),limit:B4(S)})}));return}if(g===Q+"/api/event-log/events"){F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
|
|
85
113
|
|
|
86
|
-
`),
|
|
114
|
+
`),F.write("data: "+JSON.stringify({events:D8({device:e,sinceId:N4(S),limit:B4(S)})})+`
|
|
87
115
|
|
|
88
|
-
`);let
|
|
116
|
+
`);let m=J$((b)=>{if(e&&b.device!==e)return;if(F.writableEnded)return;F.write("data: "+JSON.stringify({event:b})+`
|
|
89
117
|
|
|
90
|
-
`)}),
|
|
118
|
+
`)}),y=setInterval(()=>{if(!F.writableEnded)F.write(`:
|
|
91
119
|
|
|
92
|
-
`)},15000);
|
|
120
|
+
`)},15000);U.on("close",()=>{clearInterval(y),m()});return}if(g===Q+"/api/events"){let m=async()=>{let M6=await v6(),O6=Q7(M6,t),l=O6?Y8(O6,_7(U),Q,G8(U),Y):null;return JSON.stringify(l?A9(l,Q,Y6?V:"",z&&Y6,$?.codec,Y,$?.initialState):null)};F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
|
|
93
121
|
|
|
94
|
-
`);let
|
|
122
|
+
`);let y=await m();F.write("data: "+y+`
|
|
95
123
|
|
|
96
|
-
`);let
|
|
124
|
+
`);let b=!1,p=async()=>{if(b||F.writableEnded)return;let M6=await m();if(M6===y)return;y=M6,F.write("data: "+M6+`
|
|
97
125
|
|
|
98
|
-
`)},
|
|
126
|
+
`)},d=null,$6=()=>{if(d)return;d=setTimeout(()=>{d=null,p()},150)},Q6=null,a=null,n=()=>{if(b||F.writableEnded||Q6||a)return;a=setTimeout(()=>{if(a=null,b||F.writableEnded||Q6)return;try{Q6=NJ(D9,$6),Q6.on("error",()=>{Q6?.close(),Q6=null,n()}),p()}catch{n()}},250)};n();let K6=setInterval(()=>{if(b||F.writableEnded)return;F.write(`:
|
|
99
127
|
|
|
100
|
-
`),
|
|
128
|
+
`),n()},15000);U.on("close",()=>{if(b=!0,d)clearTimeout(d);if(a)clearTimeout(a);clearInterval(K6),Q6?.close()});return}if(g===Q+"/ax"){let m=await v6(),y=Q7(m,t);if(!y){F.writeHead(404),F.end("No serve-sim device");return}F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
|
|
101
129
|
|
|
102
|
-
`),
|
|
130
|
+
`),M4.prune(m.map((d)=>d.device));let p=M4.get(y.device).addClient(F);U.on("close",p);return}if((g===Q+"/exec"||g===Q+"/exec/")&&U.method==="POST"){if(!z){F.writeHead(403,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:i7}));return}if(!Y6){F.writeHead(403,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"exec is only available to loopback clients",exitCode:1}));return}if(!Y3(U.headers["content-type"])){F.writeHead(415,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}if(!o6(U)){F.writeHead(403,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Origin required",exitCode:1}));return}let m=U.headers.authorization??"",y=/^Bearer\s+(.+)$/i.exec(m);if(!y||!Q3(y[1].trim(),X)){F.writeHead(401,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let b="",p=!1;U.on("data",(d)=>{if(b+=typeof d==="string"?d:d.toString(),b.length>4194304)p=!0,F.writeHead(413,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),U.destroy()}),U.on("end",()=>{if(p)return;let d="";try{d=JSON.parse(b).command??""}catch{}if(!d){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}RJ(d,{maxBuffer:16777216},($6,Q6,a)=>{let n=$6?$6.code??1:0;U9(d,{exitCode:n}),F.writeHead(200,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:Q6.toString(),stderr:a.toString(),exitCode:n}))})});return}if(g===Q+"/appstate"){let m=await v6(),y=Q7(m,t);if(!y){F.writeHead(404),F.end("No serve-sim device");return}let b=y.device;F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
|
|
103
131
|
|
|
104
|
-
`);let
|
|
132
|
+
`);let p="";try{let n=JSON.parse(await k7(b));if(!n.bundleId||!F4(n.bundleId))return;if(F.writableEnded)return;p=n.bundleId;let K6=await R4(b,n.bundleId);if(F.writableEnded)return;F.write("data: "+JSON.stringify({bundleId:n.bundleId,pid:n.pid,isReactNative:K6})+`
|
|
105
133
|
|
|
106
|
-
`)}catch{}let
|
|
134
|
+
`)}catch{}let d=FJ("xcrun",["simctl","spawn",b,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),$6=!1,Q6=async(n,K6)=>{if(!F4(n))return;if(n===p)return;p=n;let M6=await R4(b,n);if(!$6)F.write("data: "+JSON.stringify({bundleId:n,pid:K6,isReactNative:M6})+`
|
|
107
135
|
|
|
108
|
-
`)},
|
|
109
|
-
`))!==-1){let
|
|
136
|
+
`)},a="";d.stdout.on("data",(n)=>{a+=n.toString();let K6;while((K6=a.indexOf(`
|
|
137
|
+
`))!==-1){let M6=a.slice(0,K6).trim();if(a=a.slice(K6+1),!M6)continue;let O6;try{O6=JSON.parse(M6).eventMessage??""}catch{continue}let l=xJ(O6);if(!l)continue;Q6(l.bundleId,l.pid)}if(a.length>DJ)a=""}),d.on("error",()=>{$6=!0;try{F.end()}catch{}}),d.on("close",()=>F.end()),U.on("close",()=>{$6=!0,d.stdout?.destroy(),d.kill()});return}if(k)return k()};R.handleUpgrade=(U,F,k)=>{let S=U.url??"",u=O4(S)??$?.device??null,g=_9(S),f=W(g)?L4(S,Z):null,e=W(g)?fJ(S,J):null;if(e){(async()=>{try{let W6=await G();vJ(U,F,k,`ws://127.0.0.1:${W6.port}${e.upstreamPath}`)}catch(W6){let Y6=W6 instanceof Error?W6.message:"Failed to start inspect-webkit";F.end(`HTTP/1.1 502 Bad Gateway\r
|
|
110
138
|
Content-Type: text/plain; charset=utf-8\r
|
|
111
139
|
\r
|
|
112
|
-
${
|
|
140
|
+
${Y6}`)}})();return}if(!f){F.destroy();return}let t=f.device??u;if(f.upstreamPath==="/ws"){if(mJ(U,F,k,t))return;F.end(`HTTP/1.1 404 Not Found\r
|
|
113
141
|
\r
|
|
114
|
-
`);return}
|
|
142
|
+
`);return}F.end(`HTTP/1.1 400 Bad Request\r
|
|
115
143
|
\r
|
|
116
|
-
`)};let
|
|
144
|
+
`)};let C,I=M0({path:`${Q}/exec-ws`,serverPort:()=>C,allowExec:z,execToken:X,allowShell:(U)=>x6(U)&&o6(U),allowRpc:(U)=>x6(U)&&o6(U),onRpcRequest:N,ssePrefixes:[`${Q}/api/events`,`${Q}/api/event-log/events`,`${Q}/appstate`,`${Q}/ax`],onUiRequest:H,onCommandResult:(U,F)=>U9(U,F)}),x=R.handleUpgrade;return R.handleUpgrade=(U,F,k)=>{let S=U.url??"",u=_9(S);if(W(u)){if(!x6(U)){let g=S8(U,K);if(!g.ok){_4(F,g.status,g.message);return}}if(i6(U)==="cross"){_4(F,403,"Cross-origin WebSocket blocked");return}}if(I(U,F,k))return;x(U,F,k)},R.setServerPort=(U)=>{C=U},R}export{gJ as startDeviceInProcess,iG as simMiddleware,Q7 as selectServeSimState,Y8 as rewriteStateForRequestHost,oJ as resolveServeSimBin,v6 as readServeSimStates,D4 as publicState,A9 as previewConfigForState,SJ as parseGridPaging,xJ as parseForegroundAppLogMessage,nG as matchInstalledAppByDisplayName};
|
|
117
145
|
|
|
118
|
-
//# debugId=
|
|
146
|
+
//# debugId=CE03A5873FFC448864756E2164756E21
|
|
119
147
|
//# sourceMappingURL=middleware.js.map
|