serve-sim 0.1.44-beta.99.3 → 0.1.44

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/dist/serve-sim.js CHANGED
@@ -1,33 +1,33 @@
1
1
  #!/usr/bin/env node
2
- import{createRequire as J5}from"node:module";var o0=Object.create;var{getPrototypeOf:a0,defineProperty:G6,getOwnPropertyNames:r0}=Object;var s0=Object.prototype.hasOwnProperty;function t0(Q){return this[Q]}var e0,Q5,o8=(Q,$,Z)=>{var J=Q!=null&&typeof Q==="object";if(J){var Y=$?e0??=new WeakMap:Q5??=new WeakMap,G=Y.get(Q);if(G)return G}Z=Q!=null?o0(a0(Q)):{};let X=$||!Q||!Q.__esModule?G6(Z,"default",{value:Q,enumerable:!0}):Z;for(let H of r0(Q))if(!s0.call(X,H))G6(X,H,{get:t0.bind(Q,H),enumerable:!0});if(J)Y.set(Q,X);return X};var YQ=(Q,$)=>()=>($||Q(($={exports:{}}).exports,$),$.exports);var $5=(Q)=>Q;function Z5(Q,$){this[Q]=$5.bind(null,$)}var a8=(Q,$)=>{for(var Z in $)G6(Q,Z,{get:$[Z],enumerable:!0,configurable:!0,set:Z5.bind($,Z)})};var GQ=(Q,$)=>()=>(Q&&($=Q(Q=0)),$);var MQ=J5(import.meta.url);var J4=YQ((Y5)=>{class X6 extends Error{constructor(Q,$,Z){super(Z);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=$,this.exitCode=Q,this.nestedError=void 0}}class r8 extends X6{constructor(Q){super(1,"commander.invalidArgument",Q);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}Y5.CommanderError=X6;Y5.InvalidArgumentError=r8});var T4=YQ((W5)=>{var{InvalidArgumentError:z5}=J4();class s8{constructor(Q,$){switch(this.description=$||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,Q[0]){case"<":this.required=!0,this._name=Q.slice(1,-1);break;case"[":this.required=!1,this._name=Q.slice(1,-1);break;default:this.required=!0,this._name=Q;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue(Q,$){if($===this.defaultValue||!Array.isArray($))return[Q];return $.push(Q),$}default(Q,$){return this.defaultValue=Q,this.defaultValueDescription=$,this}argParser(Q){return this.parseArg=Q,this}choices(Q){return this.argChoices=Q.slice(),this.parseArg=($,Z)=>{if(!this.argChoices.includes($))throw new z5(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue($,Z);return $},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function K5(Q){let $=Q.name()+(Q.variadic===!0?"...":"");return Q.required?"<"+$+">":"["+$+"]"}W5.Argument=s8;W5.humanReadableArgName=K5});var z6=YQ((L5)=>{var{humanReadableArgName:M5}=T4();class t8{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(Q){this.helpWidth=this.helpWidth??Q.helpWidth??80}visibleCommands(Q){let $=Q.commands.filter((J)=>!J._hidden),Z=Q._getHelpCommand();if(Z&&!Z._hidden)$.push(Z);if(this.sortSubcommands)$.sort((J,Y)=>{return J.name().localeCompare(Y.name())});return $}compareOptions(Q,$){let Z=(J)=>{return J.short?J.short.replace(/^-/,""):J.long.replace(/^--/,"")};return Z(Q).localeCompare(Z($))}visibleOptions(Q){let $=Q.options.filter((J)=>!J.hidden),Z=Q._getHelpOption();if(Z&&!Z.hidden){let J=Z.short&&Q._findOption(Z.short),Y=Z.long&&Q._findOption(Z.long);if(!J&&!Y)$.push(Z);else if(Z.long&&!Y)$.push(Q.createOption(Z.long,Z.description));else if(Z.short&&!J)$.push(Q.createOption(Z.short,Z.description))}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleGlobalOptions(Q){if(!this.showGlobalOptions)return[];let $=[];for(let Z=Q.parent;Z;Z=Z.parent){let J=Z.options.filter((Y)=>!Y.hidden);$.push(...J)}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleArguments(Q){if(Q._argsDescription)Q.registeredArguments.forEach(($)=>{$.description=$.description||Q._argsDescription[$.name()]||""});if(Q.registeredArguments.find(($)=>$.description))return Q.registeredArguments;return[]}subcommandTerm(Q){let $=Q.registeredArguments.map((Z)=>M5(Z)).join(" ");return Q._name+(Q._aliases[0]?"|"+Q._aliases[0]:"")+(Q.options.length?" [options]":"")+($?" "+$:"")}optionTerm(Q){return Q.flags}argumentTerm(Q){return Q.name()}longestSubcommandTermLength(Q,$){return $.visibleCommands(Q).reduce((Z,J)=>{return Math.max(Z,this.displayWidth($.styleSubcommandTerm($.subcommandTerm(J))))},0)}longestOptionTermLength(Q,$){return $.visibleOptions(Q).reduce((Z,J)=>{return Math.max(Z,this.displayWidth($.styleOptionTerm($.optionTerm(J))))},0)}longestGlobalOptionTermLength(Q,$){return $.visibleGlobalOptions(Q).reduce((Z,J)=>{return Math.max(Z,this.displayWidth($.styleOptionTerm($.optionTerm(J))))},0)}longestArgumentTermLength(Q,$){return $.visibleArguments(Q).reduce((Z,J)=>{return Math.max(Z,this.displayWidth($.styleArgumentTerm($.argumentTerm(J))))},0)}commandUsage(Q){let $=Q._name;if(Q._aliases[0])$=$+"|"+Q._aliases[0];let Z="";for(let J=Q.parent;J;J=J.parent)Z=J.name()+" "+Z;return Z+$+" "+Q.usage()}commandDescription(Q){return Q.description()}subcommandDescription(Q){return Q.summary()||Q.description()}optionDescription(Q){let $=[];if(Q.argChoices)$.push(`choices: ${Q.argChoices.map((Z)=>JSON.stringify(Z)).join(", ")}`);if(Q.defaultValue!==void 0){if(Q.required||Q.optional||Q.isBoolean()&&typeof Q.defaultValue==="boolean")$.push(`default: ${Q.defaultValueDescription||JSON.stringify(Q.defaultValue)}`)}if(Q.presetArg!==void 0&&Q.optional)$.push(`preset: ${JSON.stringify(Q.presetArg)}`);if(Q.envVar!==void 0)$.push(`env: ${Q.envVar}`);if($.length>0){let Z=`(${$.join(", ")})`;if(Q.description)return`${Q.description} ${Z}`;return Z}return Q.description}argumentDescription(Q){let $=[];if(Q.argChoices)$.push(`choices: ${Q.argChoices.map((Z)=>JSON.stringify(Z)).join(", ")}`);if(Q.defaultValue!==void 0)$.push(`default: ${Q.defaultValueDescription||JSON.stringify(Q.defaultValue)}`);if($.length>0){let Z=`(${$.join(", ")})`;if(Q.description)return`${Q.description} ${Z}`;return Z}return Q.description}formatItemList(Q,$,Z){if($.length===0)return[];return[Z.styleTitle(Q),...$,""]}groupItems(Q,$,Z){let J=new Map;return Q.forEach((Y)=>{let G=Z(Y);if(!J.has(G))J.set(G,[])}),$.forEach((Y)=>{let G=Z(Y);if(!J.has(G))J.set(G,[]);J.get(G).push(Y)}),J}formatHelp(Q,$){let Z=$.padWidth(Q,$),J=$.helpWidth??80;function Y(K,M){return $.formatItem(K,Z,M,$)}let G=[`${$.styleTitle("Usage:")} ${$.styleUsage($.commandUsage(Q))}`,""],X=$.commandDescription(Q);if(X.length>0)G=G.concat([$.boxWrap($.styleCommandDescription(X),J),""]);let H=$.visibleArguments(Q).map((K)=>{return Y($.styleArgumentTerm($.argumentTerm(K)),$.styleArgumentDescription($.argumentDescription(K)))});if(G=G.concat(this.formatItemList("Arguments:",H,$)),this.groupItems(Q.options,$.visibleOptions(Q),(K)=>K.helpGroupHeading??"Options:").forEach((K,M)=>{let L=K.map((T)=>{return Y($.styleOptionTerm($.optionTerm(T)),$.styleOptionDescription($.optionDescription(T)))});G=G.concat(this.formatItemList(M,L,$))}),$.showGlobalOptions){let K=$.visibleGlobalOptions(Q).map((M)=>{return Y($.styleOptionTerm($.optionTerm(M)),$.styleOptionDescription($.optionDescription(M)))});G=G.concat(this.formatItemList("Global Options:",K,$))}return this.groupItems(Q.commands,$.visibleCommands(Q),(K)=>K.helpGroup()||"Commands:").forEach((K,M)=>{let L=K.map((T)=>{return Y($.styleSubcommandTerm($.subcommandTerm(T)),$.styleSubcommandDescription($.subcommandDescription(T)))});G=G.concat(this.formatItemList(M,L,$))}),G.join(`
3
- `)}displayWidth(Q){return e8(Q).length}styleTitle(Q){return Q}styleUsage(Q){return Q.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($==="[command]")return this.styleSubcommandText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleCommandText($)}).join(" ")}styleCommandDescription(Q){return this.styleDescriptionText(Q)}styleOptionDescription(Q){return this.styleDescriptionText(Q)}styleSubcommandDescription(Q){return this.styleDescriptionText(Q)}styleArgumentDescription(Q){return this.styleDescriptionText(Q)}styleDescriptionText(Q){return Q}styleOptionTerm(Q){return this.styleOptionText(Q)}styleSubcommandTerm(Q){return Q.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleSubcommandText($)}).join(" ")}styleArgumentTerm(Q){return this.styleArgumentText(Q)}styleOptionText(Q){return Q}styleArgumentText(Q){return Q}styleSubcommandText(Q){return Q}styleCommandText(Q){return Q}padWidth(Q,$){return Math.max($.longestOptionTermLength(Q,$),$.longestGlobalOptionTermLength(Q,$),$.longestSubcommandTermLength(Q,$),$.longestArgumentTermLength(Q,$))}preformatted(Q){return/\n[^\S\r\n]/.test(Q)}formatItem(Q,$,Z,J){let G=" ".repeat(2);if(!Z)return G+Q;let X=Q.padEnd($+Q.length-J.displayWidth(Q)),H=2,z=(this.helpWidth??80)-$-H-2,K;if(z<this.minWidthToWrap||J.preformatted(Z))K=Z;else K=J.boxWrap(Z,z).replace(/\n/g,`
4
- `+" ".repeat($+H));return G+X+" ".repeat(H)+K.replace(/\n/g,`
5
- ${G}`)}boxWrap(Q,$){if($<this.minWidthToWrap)return Q;let Z=Q.split(/\r\n|\n/),J=/[\s]*[^\s]+/g,Y=[];return Z.forEach((G)=>{let X=G.match(J);if(X===null){Y.push("");return}let H=[X.shift()],W=this.displayWidth(H[0]);X.forEach((z)=>{let K=this.displayWidth(z);if(W+K<=$){H.push(z),W+=K;return}Y.push(H.join(""));let M=z.trimStart();H=[M],W=this.displayWidth(M)}),Y.push(H.join(""))}),Y.join(`
6
- `)}}function e8(Q){let $=/\x1b\[\d*(;\d*)*m/g;return Q.replace($,"")}L5.Help=t8;L5.stripColor=e8});var K6=YQ((N5)=>{var{InvalidArgumentError:_5}=J4();class $9{constructor(Q,$){this.flags=Q,this.description=$||"",this.required=Q.includes("<"),this.optional=Q.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(Q),this.mandatory=!1;let Z=B5(Q);if(this.short=Z.shortFlag,this.long=Z.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(Q,$){return this.defaultValue=Q,this.defaultValueDescription=$,this}preset(Q){return this.presetArg=Q,this}conflicts(Q){return this.conflictsWith=this.conflictsWith.concat(Q),this}implies(Q){let $=Q;if(typeof Q==="string")$={[Q]:!0};return this.implied=Object.assign(this.implied||{},$),this}env(Q){return this.envVar=Q,this}argParser(Q){return this.parseArg=Q,this}makeOptionMandatory(Q=!0){return this.mandatory=!!Q,this}hideHelp(Q=!0){return this.hidden=!!Q,this}_collectValue(Q,$){if($===this.defaultValue||!Array.isArray($))return[Q];return $.push(Q),$}choices(Q){return this.argChoices=Q.slice(),this.parseArg=($,Z)=>{if(!this.argChoices.includes($))throw new _5(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue($,Z);return $},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return Q9(this.name().replace(/^no-/,""));return Q9(this.name())}helpGroup(Q){return this.helpGroupHeading=Q,this}is(Q){return this.short===Q||this.long===Q}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class Z9{constructor(Q){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,Q.forEach(($)=>{if($.negate)this.negativeOptions.set($.attributeName(),$);else this.positiveOptions.set($.attributeName(),$)}),this.negativeOptions.forEach(($,Z)=>{if(this.positiveOptions.has(Z))this.dualOptions.add(Z)})}valueFromOption(Q,$){let Z=$.attributeName();if(!this.dualOptions.has(Z))return!0;let J=this.negativeOptions.get(Z).presetArg,Y=J!==void 0?J:!1;return $.negate===(Y===Q)}}function Q9(Q){return Q.split("-").reduce(($,Z)=>{return $+Z[0].toUpperCase()+Z.slice(1)})}function B5(Q){let $,Z,J=/^-[^-]$/,Y=/^--[^-]/,G=Q.split(/[ |,]+/).concat("guard");if(J.test(G[0]))$=G.shift();if(Y.test(G[0]))Z=G.shift();if(!$&&J.test(G[0]))$=G.shift();if(!$&&Y.test(G[0]))$=Z,Z=G.shift();if(G[0].startsWith("-")){let X=G[0],H=`option creation failed due to '${X}' in option flags '${Q}'`;if(/^-[^-][^-]/.test(X))throw Error(`${H}
2
+ import{createRequire as Y5}from"node:module";var a0=Object.create;var{getPrototypeOf:r0,defineProperty:X6,getOwnPropertyNames:s0}=Object;var t0=Object.prototype.hasOwnProperty;function e0(Q){return this[Q]}var Q5,$5,o8=(Q,$,Z)=>{var J=Q!=null&&typeof Q==="object";if(J){var Y=$?Q5??=new WeakMap:$5??=new WeakMap,X=Y.get(Q);if(X)return X}Z=Q!=null?a0(r0(Q)):{};let G=$||!Q||!Q.__esModule?X6(Z,"default",{value:Q,enumerable:!0}):Z;for(let H of s0(Q))if(!t0.call(G,H))X6(G,H,{get:e0.bind(Q,H),enumerable:!0});if(J)Y.set(Q,G);return G};var YQ=(Q,$)=>()=>($||Q(($={exports:{}}).exports,$),$.exports);var Z5=(Q)=>Q;function J5(Q,$){this[Q]=Z5.bind(null,$)}var a8=(Q,$)=>{for(var Z in $)X6(Q,Z,{get:$[Z],enumerable:!0,configurable:!0,set:J5.bind($,Z)})};var XQ=(Q,$)=>()=>(Q&&($=Q(Q=0)),$);var MQ=Y5(import.meta.url);var J4=YQ((X5)=>{class G6 extends Error{constructor(Q,$,Z){super(Z);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=$,this.exitCode=Q,this.nestedError=void 0}}class r8 extends G6{constructor(Q){super(1,"commander.invalidArgument",Q);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}X5.CommanderError=G6;X5.InvalidArgumentError=r8});var T4=YQ((V5)=>{var{InvalidArgumentError:K5}=J4();class s8{constructor(Q,$){switch(this.description=$||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,Q[0]){case"<":this.required=!0,this._name=Q.slice(1,-1);break;case"[":this.required=!1,this._name=Q.slice(1,-1);break;default:this.required=!0,this._name=Q;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue(Q,$){if($===this.defaultValue||!Array.isArray($))return[Q];return $.push(Q),$}default(Q,$){return this.defaultValue=Q,this.defaultValueDescription=$,this}argParser(Q){return this.parseArg=Q,this}choices(Q){return this.argChoices=Q.slice(),this.parseArg=($,Z)=>{if(!this.argChoices.includes($))throw new K5(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue($,Z);return $},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function W5(Q){let $=Q.name()+(Q.variadic===!0?"...":"");return Q.required?"<"+$+">":"["+$+"]"}V5.Argument=s8;V5.humanReadableArgName=W5});var z6=YQ((R5)=>{var{humanReadableArgName:L5}=T4();class t8{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(Q){this.helpWidth=this.helpWidth??Q.helpWidth??80}visibleCommands(Q){let $=Q.commands.filter((J)=>!J._hidden),Z=Q._getHelpCommand();if(Z&&!Z._hidden)$.push(Z);if(this.sortSubcommands)$.sort((J,Y)=>{return J.name().localeCompare(Y.name())});return $}compareOptions(Q,$){let Z=(J)=>{return J.short?J.short.replace(/^-/,""):J.long.replace(/^--/,"")};return Z(Q).localeCompare(Z($))}visibleOptions(Q){let $=Q.options.filter((J)=>!J.hidden),Z=Q._getHelpOption();if(Z&&!Z.hidden){let J=Z.short&&Q._findOption(Z.short),Y=Z.long&&Q._findOption(Z.long);if(!J&&!Y)$.push(Z);else if(Z.long&&!Y)$.push(Q.createOption(Z.long,Z.description));else if(Z.short&&!J)$.push(Q.createOption(Z.short,Z.description))}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleGlobalOptions(Q){if(!this.showGlobalOptions)return[];let $=[];for(let Z=Q.parent;Z;Z=Z.parent){let J=Z.options.filter((Y)=>!Y.hidden);$.push(...J)}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleArguments(Q){if(Q._argsDescription)Q.registeredArguments.forEach(($)=>{$.description=$.description||Q._argsDescription[$.name()]||""});if(Q.registeredArguments.find(($)=>$.description))return Q.registeredArguments;return[]}subcommandTerm(Q){let $=Q.registeredArguments.map((Z)=>L5(Z)).join(" ");return Q._name+(Q._aliases[0]?"|"+Q._aliases[0]:"")+(Q.options.length?" [options]":"")+($?" "+$:"")}optionTerm(Q){return Q.flags}argumentTerm(Q){return Q.name()}longestSubcommandTermLength(Q,$){return $.visibleCommands(Q).reduce((Z,J)=>{return Math.max(Z,this.displayWidth($.styleSubcommandTerm($.subcommandTerm(J))))},0)}longestOptionTermLength(Q,$){return $.visibleOptions(Q).reduce((Z,J)=>{return Math.max(Z,this.displayWidth($.styleOptionTerm($.optionTerm(J))))},0)}longestGlobalOptionTermLength(Q,$){return $.visibleGlobalOptions(Q).reduce((Z,J)=>{return Math.max(Z,this.displayWidth($.styleOptionTerm($.optionTerm(J))))},0)}longestArgumentTermLength(Q,$){return $.visibleArguments(Q).reduce((Z,J)=>{return Math.max(Z,this.displayWidth($.styleArgumentTerm($.argumentTerm(J))))},0)}commandUsage(Q){let $=Q._name;if(Q._aliases[0])$=$+"|"+Q._aliases[0];let Z="";for(let J=Q.parent;J;J=J.parent)Z=J.name()+" "+Z;return Z+$+" "+Q.usage()}commandDescription(Q){return Q.description()}subcommandDescription(Q){return Q.summary()||Q.description()}optionDescription(Q){let $=[];if(Q.argChoices)$.push(`choices: ${Q.argChoices.map((Z)=>JSON.stringify(Z)).join(", ")}`);if(Q.defaultValue!==void 0){if(Q.required||Q.optional||Q.isBoolean()&&typeof Q.defaultValue==="boolean")$.push(`default: ${Q.defaultValueDescription||JSON.stringify(Q.defaultValue)}`)}if(Q.presetArg!==void 0&&Q.optional)$.push(`preset: ${JSON.stringify(Q.presetArg)}`);if(Q.envVar!==void 0)$.push(`env: ${Q.envVar}`);if($.length>0){let Z=`(${$.join(", ")})`;if(Q.description)return`${Q.description} ${Z}`;return Z}return Q.description}argumentDescription(Q){let $=[];if(Q.argChoices)$.push(`choices: ${Q.argChoices.map((Z)=>JSON.stringify(Z)).join(", ")}`);if(Q.defaultValue!==void 0)$.push(`default: ${Q.defaultValueDescription||JSON.stringify(Q.defaultValue)}`);if($.length>0){let Z=`(${$.join(", ")})`;if(Q.description)return`${Q.description} ${Z}`;return Z}return Q.description}formatItemList(Q,$,Z){if($.length===0)return[];return[Z.styleTitle(Q),...$,""]}groupItems(Q,$,Z){let J=new Map;return Q.forEach((Y)=>{let X=Z(Y);if(!J.has(X))J.set(X,[])}),$.forEach((Y)=>{let X=Z(Y);if(!J.has(X))J.set(X,[]);J.get(X).push(Y)}),J}formatHelp(Q,$){let Z=$.padWidth(Q,$),J=$.helpWidth??80;function Y(K,M){return $.formatItem(K,Z,M,$)}let X=[`${$.styleTitle("Usage:")} ${$.styleUsage($.commandUsage(Q))}`,""],G=$.commandDescription(Q);if(G.length>0)X=X.concat([$.boxWrap($.styleCommandDescription(G),J),""]);let H=$.visibleArguments(Q).map((K)=>{return Y($.styleArgumentTerm($.argumentTerm(K)),$.styleArgumentDescription($.argumentDescription(K)))});if(X=X.concat(this.formatItemList("Arguments:",H,$)),this.groupItems(Q.options,$.visibleOptions(Q),(K)=>K.helpGroupHeading??"Options:").forEach((K,M)=>{let L=K.map((T)=>{return Y($.styleOptionTerm($.optionTerm(T)),$.styleOptionDescription($.optionDescription(T)))});X=X.concat(this.formatItemList(M,L,$))}),$.showGlobalOptions){let K=$.visibleGlobalOptions(Q).map((M)=>{return Y($.styleOptionTerm($.optionTerm(M)),$.styleOptionDescription($.optionDescription(M)))});X=X.concat(this.formatItemList("Global Options:",K,$))}return this.groupItems(Q.commands,$.visibleCommands(Q),(K)=>K.helpGroup()||"Commands:").forEach((K,M)=>{let L=K.map((T)=>{return Y($.styleSubcommandTerm($.subcommandTerm(T)),$.styleSubcommandDescription($.subcommandDescription(T)))});X=X.concat(this.formatItemList(M,L,$))}),X.join(`
3
+ `)}displayWidth(Q){return e8(Q).length}styleTitle(Q){return Q}styleUsage(Q){return Q.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($==="[command]")return this.styleSubcommandText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleCommandText($)}).join(" ")}styleCommandDescription(Q){return this.styleDescriptionText(Q)}styleOptionDescription(Q){return this.styleDescriptionText(Q)}styleSubcommandDescription(Q){return this.styleDescriptionText(Q)}styleArgumentDescription(Q){return this.styleDescriptionText(Q)}styleDescriptionText(Q){return Q}styleOptionTerm(Q){return this.styleOptionText(Q)}styleSubcommandTerm(Q){return Q.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleSubcommandText($)}).join(" ")}styleArgumentTerm(Q){return this.styleArgumentText(Q)}styleOptionText(Q){return Q}styleArgumentText(Q){return Q}styleSubcommandText(Q){return Q}styleCommandText(Q){return Q}padWidth(Q,$){return Math.max($.longestOptionTermLength(Q,$),$.longestGlobalOptionTermLength(Q,$),$.longestSubcommandTermLength(Q,$),$.longestArgumentTermLength(Q,$))}preformatted(Q){return/\n[^\S\r\n]/.test(Q)}formatItem(Q,$,Z,J){let X=" ".repeat(2);if(!Z)return X+Q;let G=Q.padEnd($+Q.length-J.displayWidth(Q)),H=2,z=(this.helpWidth??80)-$-H-2,K;if(z<this.minWidthToWrap||J.preformatted(Z))K=Z;else K=J.boxWrap(Z,z).replace(/\n/g,`
4
+ `+" ".repeat($+H));return X+G+" ".repeat(H)+K.replace(/\n/g,`
5
+ ${X}`)}boxWrap(Q,$){if($<this.minWidthToWrap)return Q;let Z=Q.split(/\r\n|\n/),J=/[\s]*[^\s]+/g,Y=[];return Z.forEach((X)=>{let G=X.match(J);if(G===null){Y.push("");return}let H=[G.shift()],W=this.displayWidth(H[0]);G.forEach((z)=>{let K=this.displayWidth(z);if(W+K<=$){H.push(z),W+=K;return}Y.push(H.join(""));let M=z.trimStart();H=[M],W=this.displayWidth(M)}),Y.push(H.join(""))}),Y.join(`
6
+ `)}}function e8(Q){let $=/\x1b\[\d*(;\d*)*m/g;return Q.replace($,"")}R5.Help=t8;R5.stripColor=e8});var K6=YQ((F5)=>{var{InvalidArgumentError:B5}=J4();class $9{constructor(Q,$){this.flags=Q,this.description=$||"",this.required=Q.includes("<"),this.optional=Q.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(Q),this.mandatory=!1;let Z=N5(Q);if(this.short=Z.shortFlag,this.long=Z.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(Q,$){return this.defaultValue=Q,this.defaultValueDescription=$,this}preset(Q){return this.presetArg=Q,this}conflicts(Q){return this.conflictsWith=this.conflictsWith.concat(Q),this}implies(Q){let $=Q;if(typeof Q==="string")$={[Q]:!0};return this.implied=Object.assign(this.implied||{},$),this}env(Q){return this.envVar=Q,this}argParser(Q){return this.parseArg=Q,this}makeOptionMandatory(Q=!0){return this.mandatory=!!Q,this}hideHelp(Q=!0){return this.hidden=!!Q,this}_collectValue(Q,$){if($===this.defaultValue||!Array.isArray($))return[Q];return $.push(Q),$}choices(Q){return this.argChoices=Q.slice(),this.parseArg=($,Z)=>{if(!this.argChoices.includes($))throw new B5(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue($,Z);return $},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return Q9(this.name().replace(/^no-/,""));return Q9(this.name())}helpGroup(Q){return this.helpGroupHeading=Q,this}is(Q){return this.short===Q||this.long===Q}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class Z9{constructor(Q){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,Q.forEach(($)=>{if($.negate)this.negativeOptions.set($.attributeName(),$);else this.positiveOptions.set($.attributeName(),$)}),this.negativeOptions.forEach(($,Z)=>{if(this.positiveOptions.has(Z))this.dualOptions.add(Z)})}valueFromOption(Q,$){let Z=$.attributeName();if(!this.dualOptions.has(Z))return!0;let J=this.negativeOptions.get(Z).presetArg,Y=J!==void 0?J:!1;return $.negate===(Y===Q)}}function Q9(Q){return Q.split("-").reduce(($,Z)=>{return $+Z[0].toUpperCase()+Z.slice(1)})}function N5(Q){let $,Z,J=/^-[^-]$/,Y=/^--[^-]/,X=Q.split(/[ |,]+/).concat("guard");if(J.test(X[0]))$=X.shift();if(Y.test(X[0]))Z=X.shift();if(!$&&J.test(X[0]))$=X.shift();if(!$&&Y.test(X[0]))$=Z,Z=X.shift();if(X[0].startsWith("-")){let G=X[0],H=`option creation failed due to '${G}' in option flags '${Q}'`;if(/^-[^-][^-]/.test(G))throw Error(`${H}
7
7
  - a short flag is a single dash and a single character
8
8
  - either use a single dash and a single character (for a short flag)
9
- - or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(J.test(X))throw Error(`${H}
10
- - too many short flags`);if(Y.test(X))throw Error(`${H}
9
+ - or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(J.test(G))throw Error(`${H}
10
+ - too many short flags`);if(Y.test(G))throw Error(`${H}
11
11
  - too many long flags`);throw Error(`${H}
12
- - unrecognised flag format`)}if($===void 0&&Z===void 0)throw Error(`option creation failed due to no flags found in '${Q}'.`);return{shortFlag:$,longFlag:Z}}N5.Option=$9;N5.DualOptions=Z9});var J9=YQ((O5)=>{function T5(Q,$){if(Math.abs(Q.length-$.length)>3)return Math.max(Q.length,$.length);let Z=[];for(let J=0;J<=Q.length;J++)Z[J]=[J];for(let J=0;J<=$.length;J++)Z[0][J]=J;for(let J=1;J<=$.length;J++)for(let Y=1;Y<=Q.length;Y++){let G=1;if(Q[Y-1]===$[J-1])G=0;else G=1;if(Z[Y][J]=Math.min(Z[Y-1][J]+1,Z[Y][J-1]+1,Z[Y-1][J-1]+G),Y>1&&J>1&&Q[Y-1]===$[J-2]&&Q[Y-2]===$[J-1])Z[Y][J]=Math.min(Z[Y][J],Z[Y-2][J-2]+1)}return Z[Q.length][$.length]}function j5(Q,$){if(!$||$.length===0)return"";$=Array.from(new Set($));let Z=Q.startsWith("--");if(Z)Q=Q.slice(2),$=$.map((X)=>X.slice(2));let J=[],Y=3,G=0.4;if($.forEach((X)=>{if(X.length<=1)return;let H=T5(Q,X),W=Math.max(Q.length,X.length);if((W-H)/W>G){if(H<Y)Y=H,J=[X];else if(H===Y)J.push(X)}}),J.sort((X,H)=>X.localeCompare(H)),Z)J=J.map((X)=>`--${X}`);if(J.length>1)return`
12
+ - unrecognised flag format`)}if($===void 0&&Z===void 0)throw Error(`option creation failed due to no flags found in '${Q}'.`);return{shortFlag:$,longFlag:Z}}F5.Option=$9;F5.DualOptions=Z9});var J9=YQ((O5)=>{function j5(Q,$){if(Math.abs(Q.length-$.length)>3)return Math.max(Q.length,$.length);let Z=[];for(let J=0;J<=Q.length;J++)Z[J]=[J];for(let J=0;J<=$.length;J++)Z[0][J]=J;for(let J=1;J<=$.length;J++)for(let Y=1;Y<=Q.length;Y++){let X=1;if(Q[Y-1]===$[J-1])X=0;else X=1;if(Z[Y][J]=Math.min(Z[Y-1][J]+1,Z[Y][J-1]+1,Z[Y-1][J-1]+X),Y>1&&J>1&&Q[Y-1]===$[J-2]&&Q[Y-2]===$[J-1])Z[Y][J]=Math.min(Z[Y][J],Z[Y-2][J-2]+1)}return Z[Q.length][$.length]}function q5(Q,$){if(!$||$.length===0)return"";$=Array.from(new Set($));let Z=Q.startsWith("--");if(Z)Q=Q.slice(2),$=$.map((G)=>G.slice(2));let J=[],Y=3,X=0.4;if($.forEach((G)=>{if(G.length<=1)return;let H=j5(Q,G),W=Math.max(Q.length,G.length);if((W-H)/W>X){if(H<Y)Y=H,J=[G];else if(H===Y)J.push(G)}}),J.sort((G,H)=>G.localeCompare(H)),Z)J=J.map((G)=>`--${G}`);if(J.length>1)return`
13
13
  (Did you mean one of ${J.join(", ")}?)`;if(J.length===1)return`
14
- (Did you mean ${J[0]}?)`;return""}O5.suggestSimilar=j5});var z9=YQ((k5)=>{var D5=MQ("node:events").EventEmitter,W6=MQ("node:child_process"),LQ=MQ("node:path"),j4=MQ("node:fs"),u=MQ("node:process"),{Argument:A5,humanReadableArgName:C5}=T4(),{CommanderError:V6}=J4(),{Help:P5,stripColor:I5}=z6(),{Option:Y9,DualOptions:x5}=K6(),{suggestSimilar:G9}=J9();class M6 extends D5{constructor(Q){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=Q||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:($)=>u.stdout.write($),writeErr:($)=>u.stderr.write($),outputError:($,Z)=>Z($),getOutHelpWidth:()=>u.stdout.isTTY?u.stdout.columns:void 0,getErrHelpWidth:()=>u.stderr.isTTY?u.stderr.columns:void 0,getOutHasColors:()=>H6()??(u.stdout.isTTY&&u.stdout.hasColors?.()),getErrHasColors:()=>H6()??(u.stderr.isTTY&&u.stderr.hasColors?.()),stripColor:($)=>I5($)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(Q){return this._outputConfiguration=Q._outputConfiguration,this._helpOption=Q._helpOption,this._helpCommand=Q._helpCommand,this._helpConfiguration=Q._helpConfiguration,this._exitCallback=Q._exitCallback,this._storeOptionsAsProperties=Q._storeOptionsAsProperties,this._combineFlagAndOptionalValue=Q._combineFlagAndOptionalValue,this._allowExcessArguments=Q._allowExcessArguments,this._enablePositionalOptions=Q._enablePositionalOptions,this._showHelpAfterError=Q._showHelpAfterError,this._showSuggestionAfterError=Q._showSuggestionAfterError,this}_getCommandAndAncestors(){let Q=[];for(let $=this;$;$=$.parent)Q.push($);return Q}command(Q,$,Z){let J=$,Y=Z;if(typeof J==="object"&&J!==null)Y=J,J=null;Y=Y||{};let[,G,X]=Q.match(/([^ ]+) *(.*)/),H=this.createCommand(G);if(J)H.description(J),H._executableHandler=!0;if(Y.isDefault)this._defaultCommandName=H._name;if(H._hidden=!!(Y.noHelp||Y.hidden),H._executableFile=Y.executableFile||null,X)H.arguments(X);if(this._registerCommand(H),H.parent=this,H.copyInheritedSettings(this),J)return this;return H}createCommand(Q){return new M6(Q)}createHelp(){return Object.assign(new P5,this.configureHelp())}configureHelp(Q){if(Q===void 0)return this._helpConfiguration;return this._helpConfiguration=Q,this}configureOutput(Q){if(Q===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,...Q},this}showHelpAfterError(Q=!0){if(typeof Q!=="string")Q=!!Q;return this._showHelpAfterError=Q,this}showSuggestionAfterError(Q=!0){return this._showSuggestionAfterError=!!Q,this}addCommand(Q,$){if(!Q._name)throw Error(`Command passed to .addCommand() must have a name
15
- - specify the name in Command constructor or using .name()`);if($=$||{},$.isDefault)this._defaultCommandName=Q._name;if($.noHelp||$.hidden)Q._hidden=!0;return this._registerCommand(Q),Q.parent=this,Q._checkForBrokenPassThrough(),this}createArgument(Q,$){return new A5(Q,$)}argument(Q,$,Z,J){let Y=this.createArgument(Q,$);if(typeof Z==="function")Y.default(J).argParser(Z);else Y.default(Z);return this.addArgument(Y),this}arguments(Q){return Q.trim().split(/ +/).forEach(($)=>{this.argument($)}),this}addArgument(Q){let $=this.registeredArguments.slice(-1)[0];if($?.variadic)throw Error(`only the last argument can be variadic '${$.name()}'`);if(Q.required&&Q.defaultValue!==void 0&&Q.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${Q.name()}'`);return this.registeredArguments.push(Q),this}helpCommand(Q,$){if(typeof Q==="boolean"){if(this._addImplicitHelpCommand=Q,Q&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let Z=Q??"help [command]",[,J,Y]=Z.match(/([^ ]+) *(.*)/),G=$??"display help for command",X=this.createCommand(J);if(X.helpOption(!1),Y)X.arguments(Y);if(G)X.description(G);if(this._addImplicitHelpCommand=!0,this._helpCommand=X,Q||$)this._initCommandGroup(X);return this}addHelpCommand(Q,$){if(typeof Q!=="object")return this.helpCommand(Q,$),this;return this._addImplicitHelpCommand=!0,this._helpCommand=Q,this._initCommandGroup(Q),this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(Q,$){let Z=["preSubcommand","preAction","postAction"];if(!Z.includes(Q))throw Error(`Unexpected value for event passed to hook : '${Q}'.
16
- Expecting one of '${Z.join("', '")}'`);if(this._lifeCycleHooks[Q])this._lifeCycleHooks[Q].push($);else this._lifeCycleHooks[Q]=[$];return this}exitOverride(Q){if(Q)this._exitCallback=Q;else this._exitCallback=($)=>{if($.code!=="commander.executeSubCommandAsync")throw $};return this}_exit(Q,$,Z){if(this._exitCallback)this._exitCallback(new V6(Q,$,Z));u.exit(Q)}action(Q){let $=(Z)=>{let J=this.registeredArguments.length,Y=Z.slice(0,J);if(this._storeOptionsAsProperties)Y[J]=this;else Y[J]=this.opts();return Y.push(this),Q.apply(this,Y)};return this._actionHandler=$,this}createOption(Q,$){return new Y9(Q,$)}_callParseArg(Q,$,Z,J){try{return Q.parseArg($,Z)}catch(Y){if(Y.code==="commander.invalidArgument"){let G=`${J} ${Y.message}`;this.error(G,{exitCode:Y.exitCode,code:Y.code})}throw Y}}_registerOption(Q){let $=Q.short&&this._findOption(Q.short)||Q.long&&this._findOption(Q.long);if($){let Z=Q.long&&this._findOption(Q.long)?Q.long:Q.short;throw Error(`Cannot add option '${Q.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${Z}'
17
- - already used by option '${$.flags}'`)}this._initOptionGroup(Q),this.options.push(Q)}_registerCommand(Q){let $=(J)=>{return[J.name()].concat(J.aliases())},Z=$(Q).find((J)=>this._findCommand(J));if(Z){let J=$(this._findCommand(Z)).join("|"),Y=$(Q).join("|");throw Error(`cannot add command '${Y}' as already have command '${J}'`)}this._initCommandGroup(Q),this.commands.push(Q)}addOption(Q){this._registerOption(Q);let $=Q.name(),Z=Q.attributeName();if(Q.negate){let Y=Q.long.replace(/^--no-/,"--");if(!this._findOption(Y))this.setOptionValueWithSource(Z,Q.defaultValue===void 0?!0:Q.defaultValue,"default")}else if(Q.defaultValue!==void 0)this.setOptionValueWithSource(Z,Q.defaultValue,"default");let J=(Y,G,X)=>{if(Y==null&&Q.presetArg!==void 0)Y=Q.presetArg;let H=this.getOptionValue(Z);if(Y!==null&&Q.parseArg)Y=this._callParseArg(Q,Y,H,G);else if(Y!==null&&Q.variadic)Y=Q._collectValue(Y,H);if(Y==null)if(Q.negate)Y=!1;else if(Q.isBoolean()||Q.optional)Y=!0;else Y="";this.setOptionValueWithSource(Z,Y,X)};if(this.on("option:"+$,(Y)=>{let G=`error: option '${Q.flags}' argument '${Y}' is invalid.`;J(Y,G,"cli")}),Q.envVar)this.on("optionEnv:"+$,(Y)=>{let G=`error: option '${Q.flags}' value '${Y}' from env '${Q.envVar}' is invalid.`;J(Y,G,"env")});return this}_optionEx(Q,$,Z,J,Y){if(typeof $==="object"&&$ instanceof Y9)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let G=this.createOption($,Z);if(G.makeOptionMandatory(!!Q.mandatory),typeof J==="function")G.default(Y).argParser(J);else if(J instanceof RegExp){let X=J;J=(H,W)=>{let z=X.exec(H);return z?z[0]:W},G.default(Y).argParser(J)}else G.default(J);return this.addOption(G)}option(Q,$,Z,J){return this._optionEx({},Q,$,Z,J)}requiredOption(Q,$,Z,J){return this._optionEx({mandatory:!0},Q,$,Z,J)}combineFlagAndOptionalValue(Q=!0){return this._combineFlagAndOptionalValue=!!Q,this}allowUnknownOption(Q=!0){return this._allowUnknownOption=!!Q,this}allowExcessArguments(Q=!0){return this._allowExcessArguments=!!Q,this}enablePositionalOptions(Q=!0){return this._enablePositionalOptions=!!Q,this}passThroughOptions(Q=!0){return this._passThroughOptions=!!Q,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(Q=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!Q,this}getOptionValue(Q){if(this._storeOptionsAsProperties)return this[Q];return this._optionValues[Q]}setOptionValue(Q,$){return this.setOptionValueWithSource(Q,$,void 0)}setOptionValueWithSource(Q,$,Z){if(this._storeOptionsAsProperties)this[Q]=$;else this._optionValues[Q]=$;return this._optionValueSources[Q]=Z,this}getOptionValueSource(Q){return this._optionValueSources[Q]}getOptionValueSourceWithGlobals(Q){let $;return this._getCommandAndAncestors().forEach((Z)=>{if(Z.getOptionValueSource(Q)!==void 0)$=Z.getOptionValueSource(Q)}),$}_prepareUserArgs(Q,$){if(Q!==void 0&&!Array.isArray(Q))throw Error("first parameter to parse must be array or undefined");if($=$||{},Q===void 0&&$.from===void 0){if(u.versions?.electron)$.from="electron";let J=u.execArgv??[];if(J.includes("-e")||J.includes("--eval")||J.includes("-p")||J.includes("--print"))$.from="eval"}if(Q===void 0)Q=u.argv;this.rawArgs=Q.slice();let Z;switch($.from){case void 0:case"node":this._scriptPath=Q[1],Z=Q.slice(2);break;case"electron":if(u.defaultApp)this._scriptPath=Q[1],Z=Q.slice(2);else Z=Q.slice(1);break;case"user":Z=Q.slice(0);break;case"eval":Z=Q.slice(1);break;default:throw Error(`unexpected parse option { from: '${$.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",Z}parse(Q,$){this._prepareForParse();let Z=this._prepareUserArgs(Q,$);return this._parseCommand([],Z),this}async parseAsync(Q,$){this._prepareForParse();let Z=this._prepareUserArgs(Q,$);return await this._parseCommand([],Z),this}_prepareForParse(){if(this._savedState===null)this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
14
+ (Did you mean ${J[0]}?)`;return""}O5.suggestSimilar=q5});var z9=YQ((S5)=>{var A5=MQ("node:events").EventEmitter,W6=MQ("node:child_process"),LQ=MQ("node:path"),j4=MQ("node:fs"),u=MQ("node:process"),{Argument:C5,humanReadableArgName:P5}=T4(),{CommanderError:V6}=J4(),{Help:I5,stripColor:x5}=z6(),{Option:Y9,DualOptions:k5}=K6(),{suggestSimilar:X9}=J9();class M6 extends A5{constructor(Q){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=Q||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:($)=>u.stdout.write($),writeErr:($)=>u.stderr.write($),outputError:($,Z)=>Z($),getOutHelpWidth:()=>u.stdout.isTTY?u.stdout.columns:void 0,getErrHelpWidth:()=>u.stderr.isTTY?u.stderr.columns:void 0,getOutHasColors:()=>H6()??(u.stdout.isTTY&&u.stdout.hasColors?.()),getErrHasColors:()=>H6()??(u.stderr.isTTY&&u.stderr.hasColors?.()),stripColor:($)=>x5($)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(Q){return this._outputConfiguration=Q._outputConfiguration,this._helpOption=Q._helpOption,this._helpCommand=Q._helpCommand,this._helpConfiguration=Q._helpConfiguration,this._exitCallback=Q._exitCallback,this._storeOptionsAsProperties=Q._storeOptionsAsProperties,this._combineFlagAndOptionalValue=Q._combineFlagAndOptionalValue,this._allowExcessArguments=Q._allowExcessArguments,this._enablePositionalOptions=Q._enablePositionalOptions,this._showHelpAfterError=Q._showHelpAfterError,this._showSuggestionAfterError=Q._showSuggestionAfterError,this}_getCommandAndAncestors(){let Q=[];for(let $=this;$;$=$.parent)Q.push($);return Q}command(Q,$,Z){let J=$,Y=Z;if(typeof J==="object"&&J!==null)Y=J,J=null;Y=Y||{};let[,X,G]=Q.match(/([^ ]+) *(.*)/),H=this.createCommand(X);if(J)H.description(J),H._executableHandler=!0;if(Y.isDefault)this._defaultCommandName=H._name;if(H._hidden=!!(Y.noHelp||Y.hidden),H._executableFile=Y.executableFile||null,G)H.arguments(G);if(this._registerCommand(H),H.parent=this,H.copyInheritedSettings(this),J)return this;return H}createCommand(Q){return new M6(Q)}createHelp(){return Object.assign(new I5,this.configureHelp())}configureHelp(Q){if(Q===void 0)return this._helpConfiguration;return this._helpConfiguration=Q,this}configureOutput(Q){if(Q===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,...Q},this}showHelpAfterError(Q=!0){if(typeof Q!=="string")Q=!!Q;return this._showHelpAfterError=Q,this}showSuggestionAfterError(Q=!0){return this._showSuggestionAfterError=!!Q,this}addCommand(Q,$){if(!Q._name)throw Error(`Command passed to .addCommand() must have a name
15
+ - specify the name in Command constructor or using .name()`);if($=$||{},$.isDefault)this._defaultCommandName=Q._name;if($.noHelp||$.hidden)Q._hidden=!0;return this._registerCommand(Q),Q.parent=this,Q._checkForBrokenPassThrough(),this}createArgument(Q,$){return new C5(Q,$)}argument(Q,$,Z,J){let Y=this.createArgument(Q,$);if(typeof Z==="function")Y.default(J).argParser(Z);else Y.default(Z);return this.addArgument(Y),this}arguments(Q){return Q.trim().split(/ +/).forEach(($)=>{this.argument($)}),this}addArgument(Q){let $=this.registeredArguments.slice(-1)[0];if($?.variadic)throw Error(`only the last argument can be variadic '${$.name()}'`);if(Q.required&&Q.defaultValue!==void 0&&Q.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${Q.name()}'`);return this.registeredArguments.push(Q),this}helpCommand(Q,$){if(typeof Q==="boolean"){if(this._addImplicitHelpCommand=Q,Q&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let Z=Q??"help [command]",[,J,Y]=Z.match(/([^ ]+) *(.*)/),X=$??"display help for command",G=this.createCommand(J);if(G.helpOption(!1),Y)G.arguments(Y);if(X)G.description(X);if(this._addImplicitHelpCommand=!0,this._helpCommand=G,Q||$)this._initCommandGroup(G);return this}addHelpCommand(Q,$){if(typeof Q!=="object")return this.helpCommand(Q,$),this;return this._addImplicitHelpCommand=!0,this._helpCommand=Q,this._initCommandGroup(Q),this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(Q,$){let Z=["preSubcommand","preAction","postAction"];if(!Z.includes(Q))throw Error(`Unexpected value for event passed to hook : '${Q}'.
16
+ Expecting one of '${Z.join("', '")}'`);if(this._lifeCycleHooks[Q])this._lifeCycleHooks[Q].push($);else this._lifeCycleHooks[Q]=[$];return this}exitOverride(Q){if(Q)this._exitCallback=Q;else this._exitCallback=($)=>{if($.code!=="commander.executeSubCommandAsync")throw $};return this}_exit(Q,$,Z){if(this._exitCallback)this._exitCallback(new V6(Q,$,Z));u.exit(Q)}action(Q){let $=(Z)=>{let J=this.registeredArguments.length,Y=Z.slice(0,J);if(this._storeOptionsAsProperties)Y[J]=this;else Y[J]=this.opts();return Y.push(this),Q.apply(this,Y)};return this._actionHandler=$,this}createOption(Q,$){return new Y9(Q,$)}_callParseArg(Q,$,Z,J){try{return Q.parseArg($,Z)}catch(Y){if(Y.code==="commander.invalidArgument"){let X=`${J} ${Y.message}`;this.error(X,{exitCode:Y.exitCode,code:Y.code})}throw Y}}_registerOption(Q){let $=Q.short&&this._findOption(Q.short)||Q.long&&this._findOption(Q.long);if($){let Z=Q.long&&this._findOption(Q.long)?Q.long:Q.short;throw Error(`Cannot add option '${Q.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${Z}'
17
+ - already used by option '${$.flags}'`)}this._initOptionGroup(Q),this.options.push(Q)}_registerCommand(Q){let $=(J)=>{return[J.name()].concat(J.aliases())},Z=$(Q).find((J)=>this._findCommand(J));if(Z){let J=$(this._findCommand(Z)).join("|"),Y=$(Q).join("|");throw Error(`cannot add command '${Y}' as already have command '${J}'`)}this._initCommandGroup(Q),this.commands.push(Q)}addOption(Q){this._registerOption(Q);let $=Q.name(),Z=Q.attributeName();if(Q.negate){let Y=Q.long.replace(/^--no-/,"--");if(!this._findOption(Y))this.setOptionValueWithSource(Z,Q.defaultValue===void 0?!0:Q.defaultValue,"default")}else if(Q.defaultValue!==void 0)this.setOptionValueWithSource(Z,Q.defaultValue,"default");let J=(Y,X,G)=>{if(Y==null&&Q.presetArg!==void 0)Y=Q.presetArg;let H=this.getOptionValue(Z);if(Y!==null&&Q.parseArg)Y=this._callParseArg(Q,Y,H,X);else if(Y!==null&&Q.variadic)Y=Q._collectValue(Y,H);if(Y==null)if(Q.negate)Y=!1;else if(Q.isBoolean()||Q.optional)Y=!0;else Y="";this.setOptionValueWithSource(Z,Y,G)};if(this.on("option:"+$,(Y)=>{let X=`error: option '${Q.flags}' argument '${Y}' is invalid.`;J(Y,X,"cli")}),Q.envVar)this.on("optionEnv:"+$,(Y)=>{let X=`error: option '${Q.flags}' value '${Y}' from env '${Q.envVar}' is invalid.`;J(Y,X,"env")});return this}_optionEx(Q,$,Z,J,Y){if(typeof $==="object"&&$ instanceof Y9)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let X=this.createOption($,Z);if(X.makeOptionMandatory(!!Q.mandatory),typeof J==="function")X.default(Y).argParser(J);else if(J instanceof RegExp){let G=J;J=(H,W)=>{let z=G.exec(H);return z?z[0]:W},X.default(Y).argParser(J)}else X.default(J);return this.addOption(X)}option(Q,$,Z,J){return this._optionEx({},Q,$,Z,J)}requiredOption(Q,$,Z,J){return this._optionEx({mandatory:!0},Q,$,Z,J)}combineFlagAndOptionalValue(Q=!0){return this._combineFlagAndOptionalValue=!!Q,this}allowUnknownOption(Q=!0){return this._allowUnknownOption=!!Q,this}allowExcessArguments(Q=!0){return this._allowExcessArguments=!!Q,this}enablePositionalOptions(Q=!0){return this._enablePositionalOptions=!!Q,this}passThroughOptions(Q=!0){return this._passThroughOptions=!!Q,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(Q=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!Q,this}getOptionValue(Q){if(this._storeOptionsAsProperties)return this[Q];return this._optionValues[Q]}setOptionValue(Q,$){return this.setOptionValueWithSource(Q,$,void 0)}setOptionValueWithSource(Q,$,Z){if(this._storeOptionsAsProperties)this[Q]=$;else this._optionValues[Q]=$;return this._optionValueSources[Q]=Z,this}getOptionValueSource(Q){return this._optionValueSources[Q]}getOptionValueSourceWithGlobals(Q){let $;return this._getCommandAndAncestors().forEach((Z)=>{if(Z.getOptionValueSource(Q)!==void 0)$=Z.getOptionValueSource(Q)}),$}_prepareUserArgs(Q,$){if(Q!==void 0&&!Array.isArray(Q))throw Error("first parameter to parse must be array or undefined");if($=$||{},Q===void 0&&$.from===void 0){if(u.versions?.electron)$.from="electron";let J=u.execArgv??[];if(J.includes("-e")||J.includes("--eval")||J.includes("-p")||J.includes("--print"))$.from="eval"}if(Q===void 0)Q=u.argv;this.rawArgs=Q.slice();let Z;switch($.from){case void 0:case"node":this._scriptPath=Q[1],Z=Q.slice(2);break;case"electron":if(u.defaultApp)this._scriptPath=Q[1],Z=Q.slice(2);else Z=Q.slice(1);break;case"user":Z=Q.slice(0);break;case"eval":Z=Q.slice(1);break;default:throw Error(`unexpected parse option { from: '${$.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",Z}parse(Q,$){this._prepareForParse();let Z=this._prepareUserArgs(Q,$);return this._parseCommand([],Z),this}async parseAsync(Q,$){this._prepareForParse();let Z=this._prepareUserArgs(Q,$);return await this._parseCommand([],Z),this}_prepareForParse(){if(this._savedState===null)this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
18
18
  - either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(Q,$,Z){if(j4.existsSync(Q))return;let J=$?`searched for local subcommand relative to directory '${$}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",Y=`'${Q}' does not exist
19
19
  - if '${Z}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
20
20
  - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
21
- - ${J}`;throw Error(Y)}_executeSubCommand(Q,$){$=$.slice();let Z=!1,J=[".js",".ts",".tsx",".mjs",".cjs"];function Y(z,K){let M=LQ.resolve(z,K);if(j4.existsSync(M))return M;if(J.includes(LQ.extname(K)))return;let L=J.find((T)=>j4.existsSync(`${M}${T}`));if(L)return`${M}${L}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let G=Q._executableFile||`${this._name}-${Q._name}`,X=this._executableDir||"";if(this._scriptPath){let z;try{z=j4.realpathSync(this._scriptPath)}catch{z=this._scriptPath}X=LQ.resolve(LQ.dirname(z),X)}if(X){let z=Y(X,G);if(!z&&!Q._executableFile&&this._scriptPath){let K=LQ.basename(this._scriptPath,LQ.extname(this._scriptPath));if(K!==this._name)z=Y(X,`${K}-${Q._name}`)}G=z||G}Z=J.includes(LQ.extname(G));let H;if(u.platform!=="win32")if(Z)$.unshift(G),$=X9(u.execArgv).concat($),H=W6.spawn(u.argv[0],$,{stdio:"inherit"});else H=W6.spawn(G,$,{stdio:"inherit"});else this._checkForMissingExecutable(G,X,Q._name),$.unshift(G),$=X9(u.execArgv).concat($),H=W6.spawn(u.execPath,$,{stdio:"inherit"});if(!H.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((K)=>{u.on(K,()=>{if(H.killed===!1&&H.exitCode===null)H.kill(K)})});let W=this._exitCallback;H.on("close",(z)=>{if(z=z??1,!W)u.exit(z);else W(new V6(z,"commander.executeSubCommandAsync","(close)"))}),H.on("error",(z)=>{if(z.code==="ENOENT")this._checkForMissingExecutable(G,X,Q._name);else if(z.code==="EACCES")throw Error(`'${G}' not executable`);if(!W)u.exit(1);else{let K=new V6(1,"commander.executeSubCommandAsync","(error)");K.nestedError=z,W(K)}}),this.runningCommand=H}_dispatchSubcommand(Q,$,Z){let J=this._findCommand(Q);if(!J)this.help({error:!0});J._prepareForParse();let Y;return Y=this._chainOrCallSubCommandHook(Y,J,"preSubcommand"),Y=this._chainOrCall(Y,()=>{if(J._executableHandler)this._executeSubCommand(J,$.concat(Z));else return J._parseCommand($,Z)}),Y}_dispatchHelpCommand(Q){if(!Q)this.help();let $=this._findCommand(Q);if($&&!$._executableHandler)$.help();return this._dispatchSubcommand(Q,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((Q,$)=>{if(Q.required&&this.args[$]==null)this.missingArgument(Q.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let Q=(Z,J,Y)=>{let G=J;if(J!==null&&Z.parseArg){let X=`error: command-argument value '${J}' is invalid for argument '${Z.name()}'.`;G=this._callParseArg(Z,J,Y,X)}return G};this._checkNumberOfArguments();let $=[];this.registeredArguments.forEach((Z,J)=>{let Y=Z.defaultValue;if(Z.variadic){if(J<this.args.length){if(Y=this.args.slice(J),Z.parseArg)Y=Y.reduce((G,X)=>{return Q(Z,X,G)},Z.defaultValue)}else if(Y===void 0)Y=[]}else if(J<this.args.length){if(Y=this.args[J],Z.parseArg)Y=Q(Z,Y,Z.defaultValue)}$[J]=Y}),this.processedArgs=$}_chainOrCall(Q,$){if(Q?.then&&typeof Q.then==="function")return Q.then(()=>$());return $()}_chainOrCallHooks(Q,$){let Z=Q,J=[];if(this._getCommandAndAncestors().reverse().filter((Y)=>Y._lifeCycleHooks[$]!==void 0).forEach((Y)=>{Y._lifeCycleHooks[$].forEach((G)=>{J.push({hookedCommand:Y,callback:G})})}),$==="postAction")J.reverse();return J.forEach((Y)=>{Z=this._chainOrCall(Z,()=>{return Y.callback(Y.hookedCommand,this)})}),Z}_chainOrCallSubCommandHook(Q,$,Z){let J=Q;if(this._lifeCycleHooks[Z]!==void 0)this._lifeCycleHooks[Z].forEach((Y)=>{J=this._chainOrCall(J,()=>{return Y(this,$)})});return J}_parseCommand(Q,$){let Z=this.parseOptions($);if(this._parseOptionsEnv(),this._parseOptionsImplied(),Q=Q.concat(Z.operands),$=Z.unknown,this.args=Q.concat($),Q&&this._findCommand(Q[0]))return this._dispatchSubcommand(Q[0],Q.slice(1),$);if(this._getHelpCommand()&&Q[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(Q[1]);if(this._defaultCommandName)return this._outputHelpIfRequested($),this._dispatchSubcommand(this._defaultCommandName,Q,$);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(Z.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let J=()=>{if(Z.unknown.length>0)this.unknownOption(Z.unknown[0])},Y=`command:${this.name()}`;if(this._actionHandler){J(),this._processArguments();let G;if(G=this._chainOrCallHooks(G,"preAction"),G=this._chainOrCall(G,()=>this._actionHandler(this.processedArgs)),this.parent)G=this._chainOrCall(G,()=>{this.parent.emit(Y,Q,$)});return G=this._chainOrCallHooks(G,"postAction"),G}if(this.parent?.listenerCount(Y))J(),this._processArguments(),this.parent.emit(Y,Q,$);else if(Q.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",Q,$);if(this.listenerCount("command:*"))this.emit("command:*",Q,$);else if(this.commands.length)this.unknownCommand();else J(),this._processArguments()}else if(this.commands.length)J(),this.help({error:!0});else J(),this._processArguments()}_findCommand(Q){if(!Q)return;return this.commands.find(($)=>$._name===Q||$._aliases.includes(Q))}_findOption(Q){return this.options.find(($)=>$.is(Q))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((Q)=>{Q.options.forEach(($)=>{if($.mandatory&&Q.getOptionValue($.attributeName())===void 0)Q.missingMandatoryOptionValue($)})})}_checkForConflictingLocalOptions(){let Q=this.options.filter((Z)=>{let J=Z.attributeName();if(this.getOptionValue(J)===void 0)return!1;return this.getOptionValueSource(J)!=="default"});Q.filter((Z)=>Z.conflictsWith.length>0).forEach((Z)=>{let J=Q.find((Y)=>Z.conflictsWith.includes(Y.attributeName()));if(J)this._conflictingOption(Z,J)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((Q)=>{Q._checkForConflictingLocalOptions()})}parseOptions(Q){let $=[],Z=[],J=$;function Y(z){return z.length>1&&z[0]==="-"}let G=(z)=>{if(!/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(z))return!1;return!this._getCommandAndAncestors().some((K)=>K.options.map((M)=>M.short).some((M)=>/^-\d$/.test(M)))},X=null,H=null,W=0;while(W<Q.length||H){let z=H??Q[W++];if(H=null,z==="--"){if(J===Z)J.push(z);J.push(...Q.slice(W));break}if(X&&(!Y(z)||G(z))){this.emit(`option:${X.name()}`,z);continue}if(X=null,Y(z)){let K=this._findOption(z);if(K){if(K.required){let M=Q[W++];if(M===void 0)this.optionMissingArgument(K);this.emit(`option:${K.name()}`,M)}else if(K.optional){let M=null;if(W<Q.length&&(!Y(Q[W])||G(Q[W])))M=Q[W++];this.emit(`option:${K.name()}`,M)}else this.emit(`option:${K.name()}`);X=K.variadic?K:null;continue}}if(z.length>2&&z[0]==="-"&&z[1]!=="-"){let K=this._findOption(`-${z[1]}`);if(K){if(K.required||K.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${K.name()}`,z.slice(2));else this.emit(`option:${K.name()}`),H=`-${z.slice(2)}`;continue}}if(/^--[^=]+=/.test(z)){let K=z.indexOf("="),M=this._findOption(z.slice(0,K));if(M&&(M.required||M.optional)){this.emit(`option:${M.name()}`,z.slice(K+1));continue}}if(J===$&&Y(z)&&!(this.commands.length===0&&G(z)))J=Z;if((this._enablePositionalOptions||this._passThroughOptions)&&$.length===0&&Z.length===0){if(this._findCommand(z)){$.push(z),Z.push(...Q.slice(W));break}else if(this._getHelpCommand()&&z===this._getHelpCommand().name()){$.push(z,...Q.slice(W));break}else if(this._defaultCommandName){Z.push(z,...Q.slice(W));break}}if(this._passThroughOptions){J.push(z,...Q.slice(W));break}J.push(z)}return{operands:$,unknown:Z}}opts(){if(this._storeOptionsAsProperties){let Q={},$=this.options.length;for(let Z=0;Z<$;Z++){let J=this.options[Z].attributeName();Q[J]=J===this._versionOptionName?this._version:this[J]}return Q}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((Q,$)=>Object.assign(Q,$.opts()),{})}error(Q,$){if(this._outputConfiguration.outputError(`${Q}
21
+ - ${J}`;throw Error(Y)}_executeSubCommand(Q,$){$=$.slice();let Z=!1,J=[".js",".ts",".tsx",".mjs",".cjs"];function Y(z,K){let M=LQ.resolve(z,K);if(j4.existsSync(M))return M;if(J.includes(LQ.extname(K)))return;let L=J.find((T)=>j4.existsSync(`${M}${T}`));if(L)return`${M}${L}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let X=Q._executableFile||`${this._name}-${Q._name}`,G=this._executableDir||"";if(this._scriptPath){let z;try{z=j4.realpathSync(this._scriptPath)}catch{z=this._scriptPath}G=LQ.resolve(LQ.dirname(z),G)}if(G){let z=Y(G,X);if(!z&&!Q._executableFile&&this._scriptPath){let K=LQ.basename(this._scriptPath,LQ.extname(this._scriptPath));if(K!==this._name)z=Y(G,`${K}-${Q._name}`)}X=z||X}Z=J.includes(LQ.extname(X));let H;if(u.platform!=="win32")if(Z)$.unshift(X),$=G9(u.execArgv).concat($),H=W6.spawn(u.argv[0],$,{stdio:"inherit"});else H=W6.spawn(X,$,{stdio:"inherit"});else this._checkForMissingExecutable(X,G,Q._name),$.unshift(X),$=G9(u.execArgv).concat($),H=W6.spawn(u.execPath,$,{stdio:"inherit"});if(!H.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((K)=>{u.on(K,()=>{if(H.killed===!1&&H.exitCode===null)H.kill(K)})});let W=this._exitCallback;H.on("close",(z)=>{if(z=z??1,!W)u.exit(z);else W(new V6(z,"commander.executeSubCommandAsync","(close)"))}),H.on("error",(z)=>{if(z.code==="ENOENT")this._checkForMissingExecutable(X,G,Q._name);else if(z.code==="EACCES")throw Error(`'${X}' not executable`);if(!W)u.exit(1);else{let K=new V6(1,"commander.executeSubCommandAsync","(error)");K.nestedError=z,W(K)}}),this.runningCommand=H}_dispatchSubcommand(Q,$,Z){let J=this._findCommand(Q);if(!J)this.help({error:!0});J._prepareForParse();let Y;return Y=this._chainOrCallSubCommandHook(Y,J,"preSubcommand"),Y=this._chainOrCall(Y,()=>{if(J._executableHandler)this._executeSubCommand(J,$.concat(Z));else return J._parseCommand($,Z)}),Y}_dispatchHelpCommand(Q){if(!Q)this.help();let $=this._findCommand(Q);if($&&!$._executableHandler)$.help();return this._dispatchSubcommand(Q,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((Q,$)=>{if(Q.required&&this.args[$]==null)this.missingArgument(Q.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let Q=(Z,J,Y)=>{let X=J;if(J!==null&&Z.parseArg){let G=`error: command-argument value '${J}' is invalid for argument '${Z.name()}'.`;X=this._callParseArg(Z,J,Y,G)}return X};this._checkNumberOfArguments();let $=[];this.registeredArguments.forEach((Z,J)=>{let Y=Z.defaultValue;if(Z.variadic){if(J<this.args.length){if(Y=this.args.slice(J),Z.parseArg)Y=Y.reduce((X,G)=>{return Q(Z,G,X)},Z.defaultValue)}else if(Y===void 0)Y=[]}else if(J<this.args.length){if(Y=this.args[J],Z.parseArg)Y=Q(Z,Y,Z.defaultValue)}$[J]=Y}),this.processedArgs=$}_chainOrCall(Q,$){if(Q?.then&&typeof Q.then==="function")return Q.then(()=>$());return $()}_chainOrCallHooks(Q,$){let Z=Q,J=[];if(this._getCommandAndAncestors().reverse().filter((Y)=>Y._lifeCycleHooks[$]!==void 0).forEach((Y)=>{Y._lifeCycleHooks[$].forEach((X)=>{J.push({hookedCommand:Y,callback:X})})}),$==="postAction")J.reverse();return J.forEach((Y)=>{Z=this._chainOrCall(Z,()=>{return Y.callback(Y.hookedCommand,this)})}),Z}_chainOrCallSubCommandHook(Q,$,Z){let J=Q;if(this._lifeCycleHooks[Z]!==void 0)this._lifeCycleHooks[Z].forEach((Y)=>{J=this._chainOrCall(J,()=>{return Y(this,$)})});return J}_parseCommand(Q,$){let Z=this.parseOptions($);if(this._parseOptionsEnv(),this._parseOptionsImplied(),Q=Q.concat(Z.operands),$=Z.unknown,this.args=Q.concat($),Q&&this._findCommand(Q[0]))return this._dispatchSubcommand(Q[0],Q.slice(1),$);if(this._getHelpCommand()&&Q[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(Q[1]);if(this._defaultCommandName)return this._outputHelpIfRequested($),this._dispatchSubcommand(this._defaultCommandName,Q,$);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(Z.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let J=()=>{if(Z.unknown.length>0)this.unknownOption(Z.unknown[0])},Y=`command:${this.name()}`;if(this._actionHandler){J(),this._processArguments();let X;if(X=this._chainOrCallHooks(X,"preAction"),X=this._chainOrCall(X,()=>this._actionHandler(this.processedArgs)),this.parent)X=this._chainOrCall(X,()=>{this.parent.emit(Y,Q,$)});return X=this._chainOrCallHooks(X,"postAction"),X}if(this.parent?.listenerCount(Y))J(),this._processArguments(),this.parent.emit(Y,Q,$);else if(Q.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",Q,$);if(this.listenerCount("command:*"))this.emit("command:*",Q,$);else if(this.commands.length)this.unknownCommand();else J(),this._processArguments()}else if(this.commands.length)J(),this.help({error:!0});else J(),this._processArguments()}_findCommand(Q){if(!Q)return;return this.commands.find(($)=>$._name===Q||$._aliases.includes(Q))}_findOption(Q){return this.options.find(($)=>$.is(Q))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((Q)=>{Q.options.forEach(($)=>{if($.mandatory&&Q.getOptionValue($.attributeName())===void 0)Q.missingMandatoryOptionValue($)})})}_checkForConflictingLocalOptions(){let Q=this.options.filter((Z)=>{let J=Z.attributeName();if(this.getOptionValue(J)===void 0)return!1;return this.getOptionValueSource(J)!=="default"});Q.filter((Z)=>Z.conflictsWith.length>0).forEach((Z)=>{let J=Q.find((Y)=>Z.conflictsWith.includes(Y.attributeName()));if(J)this._conflictingOption(Z,J)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((Q)=>{Q._checkForConflictingLocalOptions()})}parseOptions(Q){let $=[],Z=[],J=$;function Y(z){return z.length>1&&z[0]==="-"}let X=(z)=>{if(!/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(z))return!1;return!this._getCommandAndAncestors().some((K)=>K.options.map((M)=>M.short).some((M)=>/^-\d$/.test(M)))},G=null,H=null,W=0;while(W<Q.length||H){let z=H??Q[W++];if(H=null,z==="--"){if(J===Z)J.push(z);J.push(...Q.slice(W));break}if(G&&(!Y(z)||X(z))){this.emit(`option:${G.name()}`,z);continue}if(G=null,Y(z)){let K=this._findOption(z);if(K){if(K.required){let M=Q[W++];if(M===void 0)this.optionMissingArgument(K);this.emit(`option:${K.name()}`,M)}else if(K.optional){let M=null;if(W<Q.length&&(!Y(Q[W])||X(Q[W])))M=Q[W++];this.emit(`option:${K.name()}`,M)}else this.emit(`option:${K.name()}`);G=K.variadic?K:null;continue}}if(z.length>2&&z[0]==="-"&&z[1]!=="-"){let K=this._findOption(`-${z[1]}`);if(K){if(K.required||K.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${K.name()}`,z.slice(2));else this.emit(`option:${K.name()}`),H=`-${z.slice(2)}`;continue}}if(/^--[^=]+=/.test(z)){let K=z.indexOf("="),M=this._findOption(z.slice(0,K));if(M&&(M.required||M.optional)){this.emit(`option:${M.name()}`,z.slice(K+1));continue}}if(J===$&&Y(z)&&!(this.commands.length===0&&X(z)))J=Z;if((this._enablePositionalOptions||this._passThroughOptions)&&$.length===0&&Z.length===0){if(this._findCommand(z)){$.push(z),Z.push(...Q.slice(W));break}else if(this._getHelpCommand()&&z===this._getHelpCommand().name()){$.push(z,...Q.slice(W));break}else if(this._defaultCommandName){Z.push(z,...Q.slice(W));break}}if(this._passThroughOptions){J.push(z,...Q.slice(W));break}J.push(z)}return{operands:$,unknown:Z}}opts(){if(this._storeOptionsAsProperties){let Q={},$=this.options.length;for(let Z=0;Z<$;Z++){let J=this.options[Z].attributeName();Q[J]=J===this._versionOptionName?this._version:this[J]}return Q}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((Q,$)=>Object.assign(Q,$.opts()),{})}error(Q,$){if(this._outputConfiguration.outputError(`${Q}
22
22
  `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==="string")this._outputConfiguration.writeErr(`${this._showHelpAfterError}
23
23
  `);else if(this._showHelpAfterError)this._outputConfiguration.writeErr(`
24
- `),this.outputHelp({error:!0});let Z=$||{},J=Z.exitCode||1,Y=Z.code||"commander.error";this._exit(J,Y,Q)}_parseOptionsEnv(){this.options.forEach((Q)=>{if(Q.envVar&&Q.envVar in u.env){let $=Q.attributeName();if(this.getOptionValue($)===void 0||["default","config","env"].includes(this.getOptionValueSource($)))if(Q.required||Q.optional)this.emit(`optionEnv:${Q.name()}`,u.env[Q.envVar]);else this.emit(`optionEnv:${Q.name()}`)}})}_parseOptionsImplied(){let Q=new x5(this.options),$=(Z)=>{return this.getOptionValue(Z)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(Z))};this.options.filter((Z)=>Z.implied!==void 0&&$(Z.attributeName())&&Q.valueFromOption(this.getOptionValue(Z.attributeName()),Z)).forEach((Z)=>{Object.keys(Z.implied).filter((J)=>!$(J)).forEach((J)=>{this.setOptionValueWithSource(J,Z.implied[J],"implied")})})}missingArgument(Q){let $=`error: missing required argument '${Q}'`;this.error($,{code:"commander.missingArgument"})}optionMissingArgument(Q){let $=`error: option '${Q.flags}' argument missing`;this.error($,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(Q){let $=`error: required option '${Q.flags}' not specified`;this.error($,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(Q,$){let Z=(G)=>{let X=G.attributeName(),H=this.getOptionValue(X),W=this.options.find((K)=>K.negate&&X===K.attributeName()),z=this.options.find((K)=>!K.negate&&X===K.attributeName());if(W&&(W.presetArg===void 0&&H===!1||W.presetArg!==void 0&&H===W.presetArg))return W;return z||G},J=(G)=>{let X=Z(G),H=X.attributeName();if(this.getOptionValueSource(H)==="env")return`environment variable '${X.envVar}'`;return`option '${X.flags}'`},Y=`error: ${J(Q)} cannot be used with ${J($)}`;this.error(Y,{code:"commander.conflictingOption"})}unknownOption(Q){if(this._allowUnknownOption)return;let $="";if(Q.startsWith("--")&&this._showSuggestionAfterError){let J=[],Y=this;do{let G=Y.createHelp().visibleOptions(Y).filter((X)=>X.long).map((X)=>X.long);J=J.concat(G),Y=Y.parent}while(Y&&!Y._enablePositionalOptions);$=G9(Q,J)}let Z=`error: unknown option '${Q}'${$}`;this.error(Z,{code:"commander.unknownOption"})}_excessArguments(Q){if(this._allowExcessArguments)return;let $=this.registeredArguments.length,Z=$===1?"":"s",Y=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${$} argument${Z} but got ${Q.length}.`;this.error(Y,{code:"commander.excessArguments"})}unknownCommand(){let Q=this.args[0],$="";if(this._showSuggestionAfterError){let J=[];this.createHelp().visibleCommands(this).forEach((Y)=>{if(J.push(Y.name()),Y.alias())J.push(Y.alias())}),$=G9(Q,J)}let Z=`error: unknown command '${Q}'${$}`;this.error(Z,{code:"commander.unknownCommand"})}version(Q,$,Z){if(Q===void 0)return this._version;this._version=Q,$=$||"-V, --version",Z=Z||"output the version number";let J=this.createOption($,Z);return this._versionOptionName=J.attributeName(),this._registerOption(J),this.on("option:"+J.name(),()=>{this._outputConfiguration.writeOut(`${Q}
25
- `),this._exit(0,"commander.version",Q)}),this}description(Q,$){if(Q===void 0&&$===void 0)return this._description;if(this._description=Q,$)this._argsDescription=$;return this}summary(Q){if(Q===void 0)return this._summary;return this._summary=Q,this}alias(Q){if(Q===void 0)return this._aliases[0];let $=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)$=this.commands[this.commands.length-1];if(Q===$._name)throw Error("Command alias can't be the same as its name");let Z=this.parent?._findCommand(Q);if(Z){let J=[Z.name()].concat(Z.aliases()).join("|");throw Error(`cannot add alias '${Q}' to command '${this.name()}' as already have command '${J}'`)}return $._aliases.push(Q),this}aliases(Q){if(Q===void 0)return this._aliases;return Q.forEach(($)=>this.alias($)),this}usage(Q){if(Q===void 0){if(this._usage)return this._usage;let $=this.registeredArguments.map((Z)=>{return C5(Z)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?$:[]).join(" ")}return this._usage=Q,this}name(Q){if(Q===void 0)return this._name;return this._name=Q,this}helpGroup(Q){if(Q===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=Q,this}commandsGroup(Q){if(Q===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=Q,this}optionsGroup(Q){if(Q===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=Q,this}_initOptionGroup(Q){if(this._defaultOptionGroup&&!Q.helpGroupHeading)Q.helpGroup(this._defaultOptionGroup)}_initCommandGroup(Q){if(this._defaultCommandGroup&&!Q.helpGroup())Q.helpGroup(this._defaultCommandGroup)}nameFromFilename(Q){return this._name=LQ.basename(Q,LQ.extname(Q)),this}executableDir(Q){if(Q===void 0)return this._executableDir;return this._executableDir=Q,this}helpInformation(Q){let $=this.createHelp(),Z=this._getOutputContext(Q);$.prepareContext({error:Z.error,helpWidth:Z.helpWidth,outputHasColors:Z.hasColors});let J=$.formatHelp(this,$);if(Z.hasColors)return J;return this._outputConfiguration.stripColor(J)}_getOutputContext(Q){Q=Q||{};let $=!!Q.error,Z,J,Y;if($)Z=(X)=>this._outputConfiguration.writeErr(X),J=this._outputConfiguration.getErrHasColors(),Y=this._outputConfiguration.getErrHelpWidth();else Z=(X)=>this._outputConfiguration.writeOut(X),J=this._outputConfiguration.getOutHasColors(),Y=this._outputConfiguration.getOutHelpWidth();return{error:$,write:(X)=>{if(!J)X=this._outputConfiguration.stripColor(X);return Z(X)},hasColors:J,helpWidth:Y}}outputHelp(Q){let $;if(typeof Q==="function")$=Q,Q=void 0;let Z=this._getOutputContext(Q),J={error:Z.error,write:Z.write,command:this};this._getCommandAndAncestors().reverse().forEach((G)=>G.emit("beforeAllHelp",J)),this.emit("beforeHelp",J);let Y=this.helpInformation({error:Z.error});if($){if(Y=$(Y),typeof Y!=="string"&&!Buffer.isBuffer(Y))throw Error("outputHelp callback must return a string or a Buffer")}if(Z.write(Y),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",J),this._getCommandAndAncestors().forEach((G)=>G.emit("afterAllHelp",J))}helpOption(Q,$){if(typeof Q==="boolean"){if(Q){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption(Q??"-h, --help",$??"display help for command"),Q||$)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(Q){return this._helpOption=Q,this._initOptionGroup(Q),this}help(Q){this.outputHelp(Q);let $=Number(u.exitCode??0);if($===0&&Q&&typeof Q!=="function"&&Q.error)$=1;this._exit($,"commander.help","(outputHelp)")}addHelpText(Q,$){let Z=["beforeAll","before","after","afterAll"];if(!Z.includes(Q))throw Error(`Unexpected value for position to addHelpText.
26
- Expecting one of '${Z.join("', '")}'`);let J=`${Q}Help`;return this.on(J,(Y)=>{let G;if(typeof $==="function")G=$({error:Y.error,command:Y.command});else G=$;if(G)Y.write(`${G}
27
- `)}),this}_outputHelpIfRequested(Q){let $=this._getHelpOption();if($&&Q.find((J)=>$.is(J)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function X9(Q){return Q.map(($)=>{if(!$.startsWith("--inspect"))return $;let Z,J="127.0.0.1",Y="9229",G;if((G=$.match(/^(--inspect(-brk)?)$/))!==null)Z=G[1];else if((G=$.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(Z=G[1],/^\d+$/.test(G[3]))Y=G[3];else J=G[3];else if((G=$.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)Z=G[1],J=G[3],Y=G[4];if(Z&&Y!=="0")return`${Z}=${J}:${parseInt(Y)+1}`;return $})}function H6(){if(u.env.NO_COLOR||u.env.FORCE_COLOR==="0"||u.env.FORCE_COLOR==="false")return!1;if(u.env.FORCE_COLOR||u.env.CLICOLOR_FORCE!==void 0)return!0;return}k5.Command=M6;k5.useColor=H6});var H9=YQ((b5)=>{var{Argument:K9}=T4(),{Command:L6}=z9(),{CommanderError:y5,InvalidArgumentError:W9}=J4(),{Help:f5}=z6(),{Option:V9}=K6();b5.program=new L6;b5.createCommand=(Q)=>new L6(Q);b5.createOption=(Q,$)=>new V9(Q,$);b5.createArgument=(Q,$)=>new K9(Q,$);b5.Command=L6;b5.Option=V9;b5.Argument=K9;b5.Help=f5;b5.CommanderError=y5;b5.InvalidArgumentError=W9;b5.InvalidOptionArgumentError=W9});import{tmpdir as o5}from"os";import{join as O4}from"path";import{readdirSync as a5,mkdirSync as r5,writeFileSync as s5,renameSync as t5}from"fs";function Y4(Q){return O4(VQ,`server-${Q}.json`)}function mQ(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:$,device:Q,url:`http://${Y}:${$}`,streamUrl:`http://${Y}:${$}${X}/helper/${Q}/stream.mjpeg`,wsUrl:`ws://${Y}:${$}${X}/helper/${Q}/ws`}}function R9(Q){r5(VQ,{recursive:!0});let $=Y4(Q.device),Z=`${$}.${process.pid}.tmp`;s5(Z,JSON.stringify(Q,null,2)),t5(Z,$)}function q4(){try{return a5(VQ).filter((Q)=>Q.startsWith("server-")&&Q.endsWith(".json")).map((Q)=>O4(VQ,Q))}catch{return[]}}var VQ,aY;var U6=GQ(()=>{VQ=O4(o5(),"serve-sim"),aY=O4(VQ,"server.json")});import{fileURLToPath as $7}from"url";import{dirname as Z7}from"path";import{createServer as J7}from"http";import{createConnection as Y7,createServer as N9}from"net";function A4(Q){return Z7($7(Q))}function AQ(Q){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,Q)}async function F9(Q){return new Promise(($)=>{let Z=N9();Z.once("error",()=>$(!1)),Z.once("listening",()=>Z.close(()=>$(!0))),Z.listen(Q)})}function G7(Q){let $=Q.indexOf(`\r
24
+ `),this.outputHelp({error:!0});let Z=$||{},J=Z.exitCode||1,Y=Z.code||"commander.error";this._exit(J,Y,Q)}_parseOptionsEnv(){this.options.forEach((Q)=>{if(Q.envVar&&Q.envVar in u.env){let $=Q.attributeName();if(this.getOptionValue($)===void 0||["default","config","env"].includes(this.getOptionValueSource($)))if(Q.required||Q.optional)this.emit(`optionEnv:${Q.name()}`,u.env[Q.envVar]);else this.emit(`optionEnv:${Q.name()}`)}})}_parseOptionsImplied(){let Q=new k5(this.options),$=(Z)=>{return this.getOptionValue(Z)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(Z))};this.options.filter((Z)=>Z.implied!==void 0&&$(Z.attributeName())&&Q.valueFromOption(this.getOptionValue(Z.attributeName()),Z)).forEach((Z)=>{Object.keys(Z.implied).filter((J)=>!$(J)).forEach((J)=>{this.setOptionValueWithSource(J,Z.implied[J],"implied")})})}missingArgument(Q){let $=`error: missing required argument '${Q}'`;this.error($,{code:"commander.missingArgument"})}optionMissingArgument(Q){let $=`error: option '${Q.flags}' argument missing`;this.error($,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(Q){let $=`error: required option '${Q.flags}' not specified`;this.error($,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(Q,$){let Z=(X)=>{let G=X.attributeName(),H=this.getOptionValue(G),W=this.options.find((K)=>K.negate&&G===K.attributeName()),z=this.options.find((K)=>!K.negate&&G===K.attributeName());if(W&&(W.presetArg===void 0&&H===!1||W.presetArg!==void 0&&H===W.presetArg))return W;return z||X},J=(X)=>{let G=Z(X),H=G.attributeName();if(this.getOptionValueSource(H)==="env")return`environment variable '${G.envVar}'`;return`option '${G.flags}'`},Y=`error: ${J(Q)} cannot be used with ${J($)}`;this.error(Y,{code:"commander.conflictingOption"})}unknownOption(Q){if(this._allowUnknownOption)return;let $="";if(Q.startsWith("--")&&this._showSuggestionAfterError){let J=[],Y=this;do{let X=Y.createHelp().visibleOptions(Y).filter((G)=>G.long).map((G)=>G.long);J=J.concat(X),Y=Y.parent}while(Y&&!Y._enablePositionalOptions);$=X9(Q,J)}let Z=`error: unknown option '${Q}'${$}`;this.error(Z,{code:"commander.unknownOption"})}_excessArguments(Q){if(this._allowExcessArguments)return;let $=this.registeredArguments.length,Z=$===1?"":"s",Y=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${$} argument${Z} but got ${Q.length}.`;this.error(Y,{code:"commander.excessArguments"})}unknownCommand(){let Q=this.args[0],$="";if(this._showSuggestionAfterError){let J=[];this.createHelp().visibleCommands(this).forEach((Y)=>{if(J.push(Y.name()),Y.alias())J.push(Y.alias())}),$=X9(Q,J)}let Z=`error: unknown command '${Q}'${$}`;this.error(Z,{code:"commander.unknownCommand"})}version(Q,$,Z){if(Q===void 0)return this._version;this._version=Q,$=$||"-V, --version",Z=Z||"output the version number";let J=this.createOption($,Z);return this._versionOptionName=J.attributeName(),this._registerOption(J),this.on("option:"+J.name(),()=>{this._outputConfiguration.writeOut(`${Q}
25
+ `),this._exit(0,"commander.version",Q)}),this}description(Q,$){if(Q===void 0&&$===void 0)return this._description;if(this._description=Q,$)this._argsDescription=$;return this}summary(Q){if(Q===void 0)return this._summary;return this._summary=Q,this}alias(Q){if(Q===void 0)return this._aliases[0];let $=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)$=this.commands[this.commands.length-1];if(Q===$._name)throw Error("Command alias can't be the same as its name");let Z=this.parent?._findCommand(Q);if(Z){let J=[Z.name()].concat(Z.aliases()).join("|");throw Error(`cannot add alias '${Q}' to command '${this.name()}' as already have command '${J}'`)}return $._aliases.push(Q),this}aliases(Q){if(Q===void 0)return this._aliases;return Q.forEach(($)=>this.alias($)),this}usage(Q){if(Q===void 0){if(this._usage)return this._usage;let $=this.registeredArguments.map((Z)=>{return P5(Z)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?$:[]).join(" ")}return this._usage=Q,this}name(Q){if(Q===void 0)return this._name;return this._name=Q,this}helpGroup(Q){if(Q===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=Q,this}commandsGroup(Q){if(Q===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=Q,this}optionsGroup(Q){if(Q===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=Q,this}_initOptionGroup(Q){if(this._defaultOptionGroup&&!Q.helpGroupHeading)Q.helpGroup(this._defaultOptionGroup)}_initCommandGroup(Q){if(this._defaultCommandGroup&&!Q.helpGroup())Q.helpGroup(this._defaultCommandGroup)}nameFromFilename(Q){return this._name=LQ.basename(Q,LQ.extname(Q)),this}executableDir(Q){if(Q===void 0)return this._executableDir;return this._executableDir=Q,this}helpInformation(Q){let $=this.createHelp(),Z=this._getOutputContext(Q);$.prepareContext({error:Z.error,helpWidth:Z.helpWidth,outputHasColors:Z.hasColors});let J=$.formatHelp(this,$);if(Z.hasColors)return J;return this._outputConfiguration.stripColor(J)}_getOutputContext(Q){Q=Q||{};let $=!!Q.error,Z,J,Y;if($)Z=(G)=>this._outputConfiguration.writeErr(G),J=this._outputConfiguration.getErrHasColors(),Y=this._outputConfiguration.getErrHelpWidth();else Z=(G)=>this._outputConfiguration.writeOut(G),J=this._outputConfiguration.getOutHasColors(),Y=this._outputConfiguration.getOutHelpWidth();return{error:$,write:(G)=>{if(!J)G=this._outputConfiguration.stripColor(G);return Z(G)},hasColors:J,helpWidth:Y}}outputHelp(Q){let $;if(typeof Q==="function")$=Q,Q=void 0;let Z=this._getOutputContext(Q),J={error:Z.error,write:Z.write,command:this};this._getCommandAndAncestors().reverse().forEach((X)=>X.emit("beforeAllHelp",J)),this.emit("beforeHelp",J);let Y=this.helpInformation({error:Z.error});if($){if(Y=$(Y),typeof Y!=="string"&&!Buffer.isBuffer(Y))throw Error("outputHelp callback must return a string or a Buffer")}if(Z.write(Y),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",J),this._getCommandAndAncestors().forEach((X)=>X.emit("afterAllHelp",J))}helpOption(Q,$){if(typeof Q==="boolean"){if(Q){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption(Q??"-h, --help",$??"display help for command"),Q||$)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(Q){return this._helpOption=Q,this._initOptionGroup(Q),this}help(Q){this.outputHelp(Q);let $=Number(u.exitCode??0);if($===0&&Q&&typeof Q!=="function"&&Q.error)$=1;this._exit($,"commander.help","(outputHelp)")}addHelpText(Q,$){let Z=["beforeAll","before","after","afterAll"];if(!Z.includes(Q))throw Error(`Unexpected value for position to addHelpText.
26
+ Expecting one of '${Z.join("', '")}'`);let J=`${Q}Help`;return this.on(J,(Y)=>{let X;if(typeof $==="function")X=$({error:Y.error,command:Y.command});else X=$;if(X)Y.write(`${X}
27
+ `)}),this}_outputHelpIfRequested(Q){let $=this._getHelpOption();if($&&Q.find((J)=>$.is(J)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function G9(Q){return Q.map(($)=>{if(!$.startsWith("--inspect"))return $;let Z,J="127.0.0.1",Y="9229",X;if((X=$.match(/^(--inspect(-brk)?)$/))!==null)Z=X[1];else if((X=$.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(Z=X[1],/^\d+$/.test(X[3]))Y=X[3];else J=X[3];else if((X=$.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)Z=X[1],J=X[3],Y=X[4];if(Z&&Y!=="0")return`${Z}=${J}:${parseInt(Y)+1}`;return $})}function H6(){if(u.env.NO_COLOR||u.env.FORCE_COLOR==="0"||u.env.FORCE_COLOR==="false")return!1;if(u.env.FORCE_COLOR||u.env.CLICOLOR_FORCE!==void 0)return!0;return}S5.Command=M6;S5.useColor=H6});var H9=YQ((v5)=>{var{Argument:K9}=T4(),{Command:L6}=z9(),{CommanderError:f5,InvalidArgumentError:W9}=J4(),{Help:b5}=z6(),{Option:V9}=K6();v5.program=new L6;v5.createCommand=(Q)=>new L6(Q);v5.createOption=(Q,$)=>new V9(Q,$);v5.createArgument=(Q,$)=>new K9(Q,$);v5.Command=L6;v5.Option=V9;v5.Argument=K9;v5.Help=b5;v5.CommanderError=f5;v5.InvalidArgumentError=W9;v5.InvalidOptionArgumentError=W9});import{tmpdir as a5}from"os";import{join as q4}from"path";import{readdirSync as r5,mkdirSync as s5,writeFileSync as t5,renameSync as e5}from"fs";function Y4(Q){return q4(HQ,`server-${Q}.json`)}function mQ(Q,$,Z="/",J="127.0.0.1"){let Y=J==="0.0.0.0"||J==="::"?"127.0.0.1":J,X=Z.replace(/^\/+/,"").replace(/\/+$/,""),G=X===""?"":`/${X}`;return{pid:process.pid,port:$,device:Q,url:`http://${Y}:${$}`,streamUrl:`http://${Y}:${$}${G}/helper/${Q}/stream.mjpeg`,wsUrl:`ws://${Y}:${$}${G}/helper/${Q}/ws`}}function U9(Q){s5(HQ,{recursive:!0});let $=Y4(Q.device),Z=`${$}.${process.pid}.tmp`;t5(Z,JSON.stringify(Q,null,2)),e5(Z,$)}function O4(){try{return r5(HQ).filter((Q)=>Q.startsWith("server-")&&Q.endsWith(".json")).map((Q)=>q4(HQ,Q))}catch{return[]}}var HQ,rY;var R6=XQ(()=>{HQ=q4(a5(),"serve-sim"),rY=q4(HQ,"server.json")});import{fileURLToPath as Z7}from"url";import{dirname as J7}from"path";import{createServer as Y7}from"http";import{createConnection as X7,createServer as N9}from"net";function A4(Q){return J7(Z7(Q))}function AQ(Q){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,Q)}async function F9(Q){return new Promise(($)=>{let Z=N9();Z.once("error",()=>$(!1)),Z.once("listening",()=>Z.close(()=>$(!0))),Z.listen(Q)})}function G7(Q){let $=Q.indexOf(`\r
28
28
  \r
29
29
  `);if($===-1)return null;let Z=Q.subarray(0,$).toString("latin1").split(`\r
30
- `),[J,Y,G]=(Z.shift()??"").split(" ");if(!J||!Y||!G?.startsWith("HTTP/"))return null;let X={};for(let H of Z){let W=H.indexOf(":");if(W===-1)continue;let z=H.slice(0,W).trim().toLowerCase(),K=H.slice(W+1).trim(),M=X[z];if(Array.isArray(M))M.push(K);else if(M!=null)X[z]=[M,K];else X[z]=K}return{method:J,url:Y,httpVersion:G.slice(5),headers:X,headEnd:$+4}}function X7(Q){let{upgrade:$,connection:Z}=Q,J=Array.isArray($)?$.join(","):$??"",Y=Array.isArray(Z)?Z.join(","):Z??"";return/websocket/i.test(J)&&/upgrade/i.test(Y)}function z7(Q,$,Z){let J=Y7(Z,"127.0.0.1"),Y=()=>{Q.destroy(),J.destroy()};Q.on("error",Y),J.on("error",Y),J.on("connect",()=>{J.write($),Q.pipe(J),J.pipe(Q)})}function K7(Q,$){return N9((Z)=>{let J=Buffer.alloc(0),Y=(G)=>{if(J=Buffer.concat([J,G]),J.length>65536){Z.destroy();return}let X=G7(J);if(!X)return;Z.removeListener("data",Y);let H=new URL(X.url,"http://serve-sim.local").pathname,W=H==="/exec-ws"||H.endsWith("/exec-ws");if(Q.handleUpgrade&&X7(X.headers)&&!W){let z=J.subarray(X.headEnd),K={method:X.method,url:X.url,headers:X.headers,httpVersion:X.httpVersion,socket:Z};Q.handleUpgrade(K,Z,z);return}z7(Z,J,$)};Z.on("data",Y),Z.on("error",()=>Z.destroy())})}async function E9(Q){let $=J7((Y,G)=>{Q.middleware(Y,G,()=>{if(!G.headersSent)G.statusCode=404;G.end("Not found")})});$.keepAliveTimeout=0,$.headersTimeout=0,$.requestTimeout=0,$.timeout=0,$.on("upgrade",(Y,G,X)=>{if(Q.middleware.handleUpgrade){Q.middleware.handleUpgrade(Y,G,X);return}G.destroy()}),await new Promise((Y,G)=>{let X=(W)=>{$.removeListener("listening",H),G(W)},H=()=>{$.removeListener("error",X),Y()};$.once("error",X),$.once("listening",H),$.listen(0,"127.0.0.1")});let Z=$.address();if(!Z||typeof Z==="string")throw $.close(),Error("Failed to bind preview HTTP server");let J=K7(Q.middleware,Z.port);return await new Promise((Y,G)=>{let X=(W)=>{J.removeListener("listening",H),$.close(()=>G(W))},H=()=>{J.removeListener("error",X),Y()};J.once("error",X),J.once("listening",H),J.listen(Q.port,Q.host??"127.0.0.1")}),{stop:()=>{J.close(),$.close()}}}var C4=()=>{};import{execSync as j9}from"child_process";function $Q(){try{let Q=j9("xcrun simctl list devices booted -j",{encoding:"utf-8"}),$=JSON.parse(Q),Z=null;for(let[J,Y]of Object.entries($.devices))for(let G of Y){if(G.state!=="Booted")continue;if(/iOS/i.test(J))return G.udid;Z??=G.udid}return Z}catch{}return null}function o(Q){if(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(Q))return Q;try{let $=j9("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse($);for(let J of Object.values(Z.devices))for(let Y of J)if(Y.name.toLowerCase()===Q.toLowerCase())return Y.udid}catch{}console.error(`Could not resolve device: ${Q}`),process.exit(1)}var P4=()=>{};import{execFile as I7}from"child_process";import{existsSync as S9}from"fs";import{join as T6,resolve as x7}from"path";function O6(Q,$){let Z=UQ[Q];if(!Z)return null;let J=$.toLowerCase();if(Z.toggle){if(S7.has(J))return"on";if(y7.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 f7(Q){let $=[],Z,J=!1;for(let X=0;X<Q.length;X++){let H=Q[X];if(H==="-d"||H==="--device"){if(X+1>=Q.length)return{command:"get",json:J,error:`${H} requires a value`};Z=Q[++X]}else if(H==="--json")J=!0;else $.push(H)}if($.length===0||$[0]==="status")return{command:"status",json:J,...Z?{device:Z}:{}};let Y=$[0].toLowerCase();if(!UQ[Y])return{command:"get",json:J,error:`unknown option: ${Y}`};if($.length===1)return{command:"get",option:Y,json:J,...Z?{device:Z}:{}};let G=O6(Y,$[1]);if(G===null){let X=UQ[Y],H=[...X.values,...X.extraValues??[]].join("|");return{command:"set",option:Y,json:J,error:`invalid value for ${Y}: ${$[1]} (accepted: ${H})`}}return{command:"set",option:Y,value:G,json:J,...Z?{device:Z}:{}}}function k9(){let Q=[T6(j6,"..","dist","simax","serve-sim-ax-settings"),T6(j6,"simax","serve-sim-ax-settings")];for(let $ of Q)if(S9($))return x7($);return null}function b7(){return I4??=(async()=>{let Q=k9();if(Q)return Q;let $=T6(j6,"..","Sources","SimAXSettings","build.sh");if(!S9($))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 q6("bash",[$]);let Z=k9();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),I4.catch(()=>{I4=null}),I4}function q6(Q,$){return new Promise((Z,J)=>{I7(Q,$,{encoding:"utf-8",maxBuffer:4194304},(Y,G,X)=>{if(Y)J(Error(String(X).trim()||Y.message));else Z(String(G).trim())})})}function f9(Q,$,Z){let J=["simctl","ui",Q,$];if(Z!==void 0)J.push(Z);return q6("xcrun",J)}async function D6(Q,...$){let Z=await b7();return q6("xcrun",["simctl","spawn",Q,Z,...$])}function v7(Q){return Q==="enabled"?"on":"off"}function h7(Q){return Q==="on"?"enabled":"disabled"}async function b9(Q,$){let Z=UQ[$];if(!Z)throw Error(`unknown option: ${$}`);if(Z.via==="ax")return D6(Q,"get",$);let J=(await f9(Q,Z.via)).toLowerCase();return Z.toggle?v7(J):J}async function A6(Q,$,Z){let J=UQ[$];if(!J)throw Error(`unknown option: ${$}`);if(J.via==="ax"){await D6(Q,"set",$,Z);return}await f9(Q,J.via,J.toggle?h7(Z):Z)}async function C6(Q){let $=Object.entries(UQ).filter(([,G])=>G.via!=="ax"),[Z,...J]=await Promise.all([D6(Q,"status").then((G)=>JSON.parse(G)).catch(()=>({})),...$.map(([G])=>b9(Q,G).catch(()=>"unsupported"))]),Y={};for(let[G,X]of Object.entries(UQ))if(X.via==="ax")Y[G]=Z[G]??"unsupported";return $.forEach(([G],X)=>{Y[G]=J[X]}),Y}async function v9(Q){if(Q.includes("-h")||Q.includes("--help")){console.log(w9);return}let $=f7(Q);if($.error)console.error($.error),console.error(w9),process.exit(1);let Z=$.device?o($.device):$Q();if(!Z)console.error("No booted simulator found. Boot one or pass -d <udid>."),process.exit(1);if($.command==="status"){let J=await C6(Z);if($.json)console.log(JSON.stringify(J));else for(let[Y,G]of Object.entries(J))console.log(`${Y.padEnd(20)} ${G}`);return}if($.command==="get"){console.log(await b9(Z,$.option));return}await A6(Z,$.option,$.value)}var j6,y9,k7,w7,X4,S7,y7,UQ,I4=null,w9;var P6=GQ(()=>{P4();C4();j6=A4(import.meta.url),y9=["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"],k7=["none","grayscale","red-green","green-red","blue-yellow"],w7={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},X4=["on","off"],S7=new Set(["on","true","enabled","1","yes"]),y7=new Set(["off","false","disabled","0","no"]),UQ={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:k7,aliases:w7},"text-size":{via:"content_size",values:y9,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:X4,toggle:!0},"increase-contrast":{via:"increase_contrast",values:X4,toggle:!0},"show-borders":{via:"ax",values:X4,toggle:!0},"reduce-transparency":{via:"ax",values:X4,toggle:!0},voiceover:{via:"ax",values:X4,toggle:!0}};w9=`Usage: serve-sim ui [status] [--json] [-d udid]
30
+ `),[J,Y,X]=(Z.shift()??"").split(" ");if(!J||!Y||!X?.startsWith("HTTP/"))return null;let G={};for(let H of Z){let W=H.indexOf(":");if(W===-1)continue;let z=H.slice(0,W).trim().toLowerCase(),K=H.slice(W+1).trim(),M=G[z];if(Array.isArray(M))M.push(K);else if(M!=null)G[z]=[M,K];else G[z]=K}return{method:J,url:Y,httpVersion:X.slice(5),headers:G,headEnd:$+4}}function z7(Q){let{upgrade:$,connection:Z}=Q,J=Array.isArray($)?$.join(","):$??"",Y=Array.isArray(Z)?Z.join(","):Z??"";return/websocket/i.test(J)&&/upgrade/i.test(Y)}function K7(Q,$,Z){let J=X7(Z,"127.0.0.1"),Y=()=>{Q.destroy(),J.destroy()};Q.on("error",Y),J.on("error",Y),J.on("connect",()=>{J.write($),Q.pipe(J),J.pipe(Q)})}function W7(Q,$){return N9((Z)=>{let J=Buffer.alloc(0),Y=(X)=>{if(J=Buffer.concat([J,X]),J.length>65536){Z.destroy();return}let G=G7(J);if(!G)return;Z.removeListener("data",Y);let H=new URL(G.url,"http://serve-sim.local").pathname,W=H==="/exec-ws"||H.endsWith("/exec-ws");if(Q.handleUpgrade&&z7(G.headers)&&!W){let z=J.subarray(G.headEnd),K={method:G.method,url:G.url,headers:G.headers,httpVersion:G.httpVersion,socket:Z};Q.handleUpgrade(K,Z,z);return}K7(Z,J,$)};Z.on("data",Y),Z.on("error",()=>Z.destroy())})}async function E9(Q){let $=Y7((Y,X)=>{Q.middleware(Y,X,()=>{if(!X.headersSent)X.statusCode=404;X.end("Not found")})});$.keepAliveTimeout=0,$.headersTimeout=0,$.requestTimeout=0,$.timeout=0,$.on("upgrade",(Y,X,G)=>{if(Q.middleware.handleUpgrade){Q.middleware.handleUpgrade(Y,X,G);return}X.destroy()}),await new Promise((Y,X)=>{let G=(W)=>{$.removeListener("listening",H),X(W)},H=()=>{$.removeListener("error",G),Y()};$.once("error",G),$.once("listening",H),$.listen(0,"127.0.0.1")});let Z=$.address();if(!Z||typeof Z==="string")throw $.close(),Error("Failed to bind preview HTTP server");let J=W7(Q.middleware,Z.port);return await new Promise((Y,X)=>{let G=(W)=>{J.removeListener("listening",H),$.close(()=>X(W))},H=()=>{J.removeListener("error",G),Y()};J.once("error",G),J.once("listening",H),J.listen(Q.port,Q.host??"127.0.0.1")}),{stop:()=>{J.close(),$.close()}}}var C4=()=>{};import{execSync as j9}from"child_process";function $Q(){try{let Q=j9("xcrun simctl list devices booted -j",{encoding:"utf-8"}),$=JSON.parse(Q),Z=null;for(let[J,Y]of Object.entries($.devices))for(let X of Y){if(X.state!=="Booted")continue;if(/iOS/i.test(J))return X.udid;Z??=X.udid}return Z}catch{}return null}function o(Q){if(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(Q))return Q;try{let $=j9("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse($);for(let J of Object.values(Z.devices))for(let Y of J)if(Y.name.toLowerCase()===Q.toLowerCase())return Y.udid}catch{}console.error(`Could not resolve device: ${Q}`),process.exit(1)}var P4=()=>{};import{execFile as x7}from"child_process";import{existsSync as w9}from"fs";import{join as T6,resolve as k7}from"path";function q6(Q,$){let Z=RQ[Q];if(!Z)return null;let J=$.toLowerCase();if(Z.toggle){if(y7.has(J))return"on";if(f7.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 b7(Q){let $=[],Z,J=!1;for(let G=0;G<Q.length;G++){let H=Q[G];if(H==="-d"||H==="--device"){if(G+1>=Q.length)return{command:"get",json:J,error:`${H} requires a value`};Z=Q[++G]}else if(H==="--json")J=!0;else $.push(H)}if($.length===0||$[0]==="status")return{command:"status",json:J,...Z?{device:Z}:{}};let Y=$[0].toLowerCase();if(!RQ[Y])return{command:"get",json:J,error:`unknown option: ${Y}`};if($.length===1)return{command:"get",option:Y,json:J,...Z?{device:Z}:{}};let X=q6(Y,$[1]);if(X===null){let G=RQ[Y],H=[...G.values,...G.extraValues??[]].join("|");return{command:"set",option:Y,json:J,error:`invalid value for ${Y}: ${$[1]} (accepted: ${H})`}}return{command:"set",option:Y,value:X,json:J,...Z?{device:Z}:{}}}function k9(){let Q=[T6(j6,"..","dist","simax","serve-sim-ax-settings"),T6(j6,"simax","serve-sim-ax-settings")];for(let $ of Q)if(w9($))return k7($);return null}function v7(){return I4??=(async()=>{let Q=k9();if(Q)return Q;let $=T6(j6,"..","Sources","SimAXSettings","build.sh");if(!w9($))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 O6("bash",[$]);let Z=k9();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),I4.catch(()=>{I4=null}),I4}function O6(Q,$){return new Promise((Z,J)=>{x7(Q,$,{encoding:"utf-8",maxBuffer:4194304},(Y,X,G)=>{if(Y)J(Error(String(G).trim()||Y.message));else Z(String(X).trim())})})}function f9(Q,$,Z){let J=["simctl","ui",Q,$];if(Z!==void 0)J.push(Z);return O6("xcrun",J)}async function D6(Q,...$){let Z=await v7();return O6("xcrun",["simctl","spawn",Q,Z,...$])}function h7(Q){return Q==="enabled"?"on":"off"}function u7(Q){return Q==="on"?"enabled":"disabled"}async function b9(Q,$){let Z=RQ[$];if(!Z)throw Error(`unknown option: ${$}`);if(Z.via==="ax")return D6(Q,"get",$);let J=(await f9(Q,Z.via)).toLowerCase();return Z.toggle?h7(J):J}async function A6(Q,$,Z){let J=RQ[$];if(!J)throw Error(`unknown option: ${$}`);if(J.via==="ax"){await D6(Q,"set",$,Z);return}await f9(Q,J.via,J.toggle?u7(Z):Z)}async function C6(Q){let $=Object.entries(RQ).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([D6(Q,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...$.map(([X])=>b9(Q,X).catch(()=>"unsupported"))]),Y={};for(let[X,G]of Object.entries(RQ))if(G.via==="ax")Y[X]=Z[X]??"unsupported";return $.forEach(([X],G)=>{Y[X]=J[G]}),Y}async function v9(Q){if(Q.includes("-h")||Q.includes("--help")){console.log(S9);return}let $=b7(Q);if($.error)console.error($.error),console.error(S9),process.exit(1);let Z=$.device?o($.device):$Q();if(!Z)console.error("No booted simulator found. Boot one or pass -d <udid>."),process.exit(1);if($.command==="status"){let J=await C6(Z);if($.json)console.log(JSON.stringify(J));else for(let[Y,X]of Object.entries(J))console.log(`${Y.padEnd(20)} ${X}`);return}if($.command==="get"){console.log(await b9(Z,$.option));return}await A6(Z,$.option,$.value)}var j6,y9,S7,w7,G4,y7,f7,RQ,I4=null,S9;var P6=XQ(()=>{P4();C4();j6=A4(import.meta.url),y9=["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"],S7=["none","grayscale","red-green","green-red","blue-yellow"],w7={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},G4=["on","off"],y7=new Set(["on","true","enabled","1","yes"]),f7=new Set(["off","false","disabled","0","no"]),RQ={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:S7,aliases:w7},"text-size":{via:"content_size",values:y9,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:G4,toggle:!0},"increase-contrast":{via:"increase_contrast",values:G4,toggle:!0},"show-borders":{via:"ax",values:G4,toggle:!0},"reduce-transparency":{via:"ax",values:G4,toggle:!0},voiceover:{via:"ax",values:G4,toggle:!0}};S9=`Usage: serve-sim ui [status] [--json] [-d udid]
31
31
  serve-sim ui <option> [-d udid] Print the current value
32
32
  serve-sim ui <option> <value> [-d udid] Change the value
33
33
 
@@ -42,35 +42,35 @@ Simulator-wide UI options:
42
42
  increase-contrast on | off
43
43
  show-borders on | off
44
44
  reduce-transparency on | off
45
- voiceover on | off`});var u9=YQ((E3,h9)=>{var dQ=1000,nQ=dQ*60,iQ=nQ*60,PQ=iQ*24,u7=PQ*7,g7=PQ*365.25;h9.exports=function(Q,$){$=$||{};var Z=typeof Q;if(Z==="string"&&Q.length>0)return l7(Q);else if(Z==="number"&&isFinite(Q))return $.long?m7(Q):c7(Q);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(Q))};function l7(Q){if(Q=String(Q),Q.length>100)return;var $=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(Q);if(!$)return;var Z=parseFloat($[1]),J=($[2]||"ms").toLowerCase();switch(J){case"years":case"year":case"yrs":case"yr":case"y":return Z*g7;case"weeks":case"week":case"w":return Z*u7;case"days":case"day":case"d":return Z*PQ;case"hours":case"hour":case"hrs":case"hr":case"h":return Z*iQ;case"minutes":case"minute":case"mins":case"min":case"m":return Z*nQ;case"seconds":case"second":case"secs":case"sec":case"s":return Z*dQ;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return Z;default:return}}function c7(Q){var $=Math.abs(Q);if($>=PQ)return Math.round(Q/PQ)+"d";if($>=iQ)return Math.round(Q/iQ)+"h";if($>=nQ)return Math.round(Q/nQ)+"m";if($>=dQ)return Math.round(Q/dQ)+"s";return Q+"ms"}function m7(Q){var $=Math.abs(Q);if($>=PQ)return x4(Q,$,PQ,"day");if($>=iQ)return x4(Q,$,iQ,"hour");if($>=nQ)return x4(Q,$,nQ,"minute");if($>=dQ)return x4(Q,$,dQ,"second");return Q+" ms"}function x4(Q,$,Z,J){var Y=$>=Z*1.5;return Math.round(Q/Z)+" "+J+(Y?"s":"")}});var I6=YQ((T3,g9)=>{function p7(Q){Z.debug=Z,Z.default=Z,Z.coerce=W,Z.disable=X,Z.enable=Y,Z.enabled=H,Z.humanize=u9(),Z.destroy=z,Object.keys(Q).forEach((K)=>{Z[K]=Q[K]}),Z.names=[],Z.skips=[],Z.formatters={};function $(K){let M=0;for(let L=0;L<K.length;L++)M=(M<<5)-M+K.charCodeAt(L),M|=0;return Z.colors[Math.abs(M)%Z.colors.length]}Z.selectColor=$;function Z(K){let M,L=null,T,j;function q(...D){if(!q.enabled)return;let A=q,O=Number(new Date),E=O-(M||O);if(A.diff=E,A.prev=M,A.curr=O,M=O,D[0]=Z.coerce(D[0]),typeof D[0]!=="string")D.unshift("%O");let N=0;D[0]=D[0].replace(/%([a-zA-Z%])/g,(U,V)=>{if(U==="%%")return"%";N++;let R=Z.formatters[V];if(typeof R==="function"){let _=D[N];U=R.call(A,_),D.splice(N,1),N--}return U}),Z.formatArgs.call(A,D),(A.log||Z.log).apply(A,D)}if(q.namespace=K,q.useColors=Z.useColors(),q.color=Z.selectColor(K),q.extend=J,q.destroy=Z.destroy,Object.defineProperty(q,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(L!==null)return L;if(T!==Z.namespaces)T=Z.namespaces,j=Z.enabled(K);return j},set:(D)=>{L=D}}),typeof Z.init==="function")Z.init(q);return q}function J(K,M){let L=Z(this.namespace+(typeof M>"u"?":":M)+K);return L.log=this.log,L}function Y(K){Z.save(K),Z.namespaces=K,Z.names=[],Z.skips=[];let M=(typeof K==="string"?K:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let L of M)if(L[0]==="-")Z.skips.push(L.slice(1));else Z.names.push(L)}function G(K,M){let L=0,T=0,j=-1,q=0;while(L<K.length)if(T<M.length&&(M[T]===K[L]||M[T]==="*"))if(M[T]==="*")j=T,q=L,T++;else L++,T++;else if(j!==-1)T=j+1,q++,L=q;else return!1;while(T<M.length&&M[T]==="*")T++;return T===M.length}function X(){let K=[...Z.names,...Z.skips.map((M)=>"-"+M)].join(",");return Z.enable(""),K}function H(K){for(let M of Z.skips)if(G(K,M))return!1;for(let M of Z.names)if(G(K,M))return!0;return!1}function W(K){if(K instanceof Error)return K.stack||K.message;return K}function z(){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}g9.exports=p7});var c9=YQ((l9,k4)=>{l9.formatArgs=n7;l9.save=i7;l9.load=o7;l9.useColors=d7;l9.storage=a7();l9.destroy=(()=>{let Q=!1;return()=>{if(!Q)Q=!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`.")}})();l9.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 d7(){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 Q;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&&(Q=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(Q[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function n7(Q){if(Q[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+Q[0]+(this.useColors?"%c ":" ")+"+"+k4.exports.humanize(this.diff),!this.useColors)return;let $="color: "+this.color;Q.splice(1,0,$,"color: inherit");let Z=0,J=0;Q[0].replace(/%[a-zA-Z%]/g,(Y)=>{if(Y==="%%")return;if(Z++,Y==="%c")J=Z}),Q.splice(J,0,$)}l9.log=console.debug||console.log||(()=>{});function i7(Q){try{if(Q)l9.storage.setItem("debug",Q);else l9.storage.removeItem("debug")}catch($){}}function o7(){let Q;try{Q=l9.storage.getItem("debug")||l9.storage.getItem("DEBUG")}catch($){}if(!Q&&typeof process<"u"&&"env"in process)Q=process.env.DEBUG;return Q}function a7(){try{return localStorage}catch(Q){}}k4.exports=I6()(l9);var{formatters:r7}=k4.exports;r7.j=function(Q){try{return JSON.stringify(Q)}catch($){return"[UnexpectedJSONParseError]: "+$.message}}});var n9=YQ((p9,S4)=>{var YZ=MQ("tty"),w4=MQ("util");p9.init=HZ;p9.log=KZ;p9.formatArgs=XZ;p9.save=WZ;p9.load=VZ;p9.useColors=GZ;p9.destroy=w4.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");p9.colors=[6,2,3,4,5,1];try{let Q=(()=>{throw new Error("Cannot require module "+"supports-color");})();if(Q&&(Q.stderr||Q).level>=2)p9.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(Q){}p9.inspectOpts=Object.keys(process.env).filter((Q)=>{return/^debug_/i.test(Q)}).reduce((Q,$)=>{let Z=$.substring(6).toLowerCase().replace(/_([a-z])/g,(Y,G)=>{return G.toUpperCase()}),J=process.env[$];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 Q[Z]=J,Q},{});function GZ(){return"colors"in p9.inspectOpts?Boolean(p9.inspectOpts.colors):YZ.isatty(process.stderr.fd)}function XZ(Q){let{namespace:$,useColors:Z}=this;if(Z){let J=this.color,Y="\x1B[3"+(J<8?J:"8;5;"+J),G=` ${Y};1m${$} \x1B[0m`;Q[0]=G+Q[0].split(`
45
+ voiceover on | off`});var u9=YQ((T3,h9)=>{var dQ=1000,nQ=dQ*60,iQ=nQ*60,PQ=iQ*24,g7=PQ*7,l7=PQ*365.25;h9.exports=function(Q,$){$=$||{};var Z=typeof Q;if(Z==="string"&&Q.length>0)return c7(Q);else if(Z==="number"&&isFinite(Q))return $.long?p7(Q):m7(Q);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(Q))};function c7(Q){if(Q=String(Q),Q.length>100)return;var $=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(Q);if(!$)return;var Z=parseFloat($[1]),J=($[2]||"ms").toLowerCase();switch(J){case"years":case"year":case"yrs":case"yr":case"y":return Z*l7;case"weeks":case"week":case"w":return Z*g7;case"days":case"day":case"d":return Z*PQ;case"hours":case"hour":case"hrs":case"hr":case"h":return Z*iQ;case"minutes":case"minute":case"mins":case"min":case"m":return Z*nQ;case"seconds":case"second":case"secs":case"sec":case"s":return Z*dQ;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return Z;default:return}}function m7(Q){var $=Math.abs(Q);if($>=PQ)return Math.round(Q/PQ)+"d";if($>=iQ)return Math.round(Q/iQ)+"h";if($>=nQ)return Math.round(Q/nQ)+"m";if($>=dQ)return Math.round(Q/dQ)+"s";return Q+"ms"}function p7(Q){var $=Math.abs(Q);if($>=PQ)return x4(Q,$,PQ,"day");if($>=iQ)return x4(Q,$,iQ,"hour");if($>=nQ)return x4(Q,$,nQ,"minute");if($>=dQ)return x4(Q,$,dQ,"second");return Q+" ms"}function x4(Q,$,Z,J){var Y=$>=Z*1.5;return Math.round(Q/Z)+" "+J+(Y?"s":"")}});var I6=YQ((j3,g9)=>{function d7(Q){Z.debug=Z,Z.default=Z,Z.coerce=W,Z.disable=G,Z.enable=Y,Z.enabled=H,Z.humanize=u9(),Z.destroy=z,Object.keys(Q).forEach((K)=>{Z[K]=Q[K]}),Z.names=[],Z.skips=[],Z.formatters={};function $(K){let M=0;for(let L=0;L<K.length;L++)M=(M<<5)-M+K.charCodeAt(L),M|=0;return Z.colors[Math.abs(M)%Z.colors.length]}Z.selectColor=$;function Z(K){let M,L=null,T,j;function O(...A){if(!O.enabled)return;let D=O,q=Number(new Date),E=q-(M||q);if(D.diff=E,D.prev=M,D.curr=q,M=q,A[0]=Z.coerce(A[0]),typeof A[0]!=="string")A.unshift("%O");let N=0;A[0]=A[0].replace(/%([a-zA-Z%])/g,(R,V)=>{if(R==="%%")return"%";N++;let U=Z.formatters[V];if(typeof U==="function"){let _=A[N];R=U.call(D,_),A.splice(N,1),N--}return R}),Z.formatArgs.call(D,A),(D.log||Z.log).apply(D,A)}if(O.namespace=K,O.useColors=Z.useColors(),O.color=Z.selectColor(K),O.extend=J,O.destroy=Z.destroy,Object.defineProperty(O,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(L!==null)return L;if(T!==Z.namespaces)T=Z.namespaces,j=Z.enabled(K);return j},set:(A)=>{L=A}}),typeof Z.init==="function")Z.init(O);return O}function J(K,M){let L=Z(this.namespace+(typeof M>"u"?":":M)+K);return L.log=this.log,L}function Y(K){Z.save(K),Z.namespaces=K,Z.names=[],Z.skips=[];let M=(typeof K==="string"?K:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let L of M)if(L[0]==="-")Z.skips.push(L.slice(1));else Z.names.push(L)}function X(K,M){let L=0,T=0,j=-1,O=0;while(L<K.length)if(T<M.length&&(M[T]===K[L]||M[T]==="*"))if(M[T]==="*")j=T,O=L,T++;else L++,T++;else if(j!==-1)T=j+1,O++,L=O;else return!1;while(T<M.length&&M[T]==="*")T++;return T===M.length}function G(){let K=[...Z.names,...Z.skips.map((M)=>"-"+M)].join(",");return Z.enable(""),K}function H(K){for(let M of Z.skips)if(X(K,M))return!1;for(let M of Z.names)if(X(K,M))return!0;return!1}function W(K){if(K instanceof Error)return K.stack||K.message;return K}function z(){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}g9.exports=d7});var c9=YQ((l9,k4)=>{l9.formatArgs=i7;l9.save=o7;l9.load=a7;l9.useColors=n7;l9.storage=r7();l9.destroy=(()=>{let Q=!1;return()=>{if(!Q)Q=!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`.")}})();l9.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 n7(){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 Q;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&&(Q=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(Q[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function i7(Q){if(Q[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+Q[0]+(this.useColors?"%c ":" ")+"+"+k4.exports.humanize(this.diff),!this.useColors)return;let $="color: "+this.color;Q.splice(1,0,$,"color: inherit");let Z=0,J=0;Q[0].replace(/%[a-zA-Z%]/g,(Y)=>{if(Y==="%%")return;if(Z++,Y==="%c")J=Z}),Q.splice(J,0,$)}l9.log=console.debug||console.log||(()=>{});function o7(Q){try{if(Q)l9.storage.setItem("debug",Q);else l9.storage.removeItem("debug")}catch($){}}function a7(){let Q;try{Q=l9.storage.getItem("debug")||l9.storage.getItem("DEBUG")}catch($){}if(!Q&&typeof process<"u"&&"env"in process)Q=process.env.DEBUG;return Q}function r7(){try{return localStorage}catch(Q){}}k4.exports=I6()(l9);var{formatters:s7}=k4.exports;s7.j=function(Q){try{return JSON.stringify(Q)}catch($){return"[UnexpectedJSONParseError]: "+$.message}}});var n9=YQ((p9,w4)=>{var XZ=MQ("tty"),S4=MQ("util");p9.init=MZ;p9.log=WZ;p9.formatArgs=zZ;p9.save=VZ;p9.load=HZ;p9.useColors=GZ;p9.destroy=S4.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");p9.colors=[6,2,3,4,5,1];try{let Q=(()=>{throw new Error("Cannot require module "+"supports-color");})();if(Q&&(Q.stderr||Q).level>=2)p9.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(Q){}p9.inspectOpts=Object.keys(process.env).filter((Q)=>{return/^debug_/i.test(Q)}).reduce((Q,$)=>{let Z=$.substring(6).toLowerCase().replace(/_([a-z])/g,(Y,X)=>{return X.toUpperCase()}),J=process.env[$];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 Q[Z]=J,Q},{});function GZ(){return"colors"in p9.inspectOpts?Boolean(p9.inspectOpts.colors):XZ.isatty(process.stderr.fd)}function zZ(Q){let{namespace:$,useColors:Z}=this;if(Z){let J=this.color,Y="\x1B[3"+(J<8?J:"8;5;"+J),X=` ${Y};1m${$} \x1B[0m`;Q[0]=X+Q[0].split(`
46
46
  `).join(`
47
- `+G),Q.push(Y+"m+"+S4.exports.humanize(this.diff)+"\x1B[0m")}else Q[0]=zZ()+$+" "+Q[0]}function zZ(){if(p9.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function KZ(...Q){return process.stderr.write(w4.formatWithOptions(p9.inspectOpts,...Q)+`
48
- `)}function WZ(Q){if(Q)process.env.DEBUG=Q;else delete process.env.DEBUG}function VZ(){return process.env.DEBUG}function HZ(Q){Q.inspectOpts={};let $=Object.keys(p9.inspectOpts);for(let Z=0;Z<$.length;Z++)Q.inspectOpts[$[Z]]=p9.inspectOpts[$[Z]]}S4.exports=I6()(p9);var{formatters:m9}=S4.exports;m9.o=function(Q){return this.inspectOpts.colors=this.useColors,w4.inspect(Q,this.inspectOpts).split(`
49
- `).map(($)=>$.trim()).join(" ")};m9.O=function(Q){return this.inspectOpts.colors=this.useColors,w4.inspect(Q,this.inspectOpts)}});var i9=YQ((q3,x6)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)x6.exports=c9();else x6.exports=n9()});var K4,k6,w6,RQ,y4;var S6=GQ(()=>{K4=o8(i9(),1),k6=K4.default("serve-sim:cli"),w6=K4.default("serve-sim:helper"),RQ=K4.default("serve-sim:state"),y4=K4.default("serve-sim:mw")});var y6="Accessibility unavailable on this simulator.";import{createRequire as EZ}from"module";import{dirname as f6,join as b6}from"path";import{existsSync as TZ}from"fs";import{fileURLToPath as o9}from"url";function AZ(){let Q=[b6(f6(process.execPath),"native","serve-sim-native.node"),b6(f6(o9(import.meta.url)),"native","serve-sim-native.node"),b6(f6(o9(import.meta.url)),"..","dist","native","serve-sim-native.node")];for(let $ of Q)if(TZ($))return $;throw Error(`serve-sim-native.node not found. Looked in:
47
+ `+X),Q.push(Y+"m+"+w4.exports.humanize(this.diff)+"\x1B[0m")}else Q[0]=KZ()+$+" "+Q[0]}function KZ(){if(p9.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function WZ(...Q){return process.stderr.write(S4.formatWithOptions(p9.inspectOpts,...Q)+`
48
+ `)}function VZ(Q){if(Q)process.env.DEBUG=Q;else delete process.env.DEBUG}function HZ(){return process.env.DEBUG}function MZ(Q){Q.inspectOpts={};let $=Object.keys(p9.inspectOpts);for(let Z=0;Z<$.length;Z++)Q.inspectOpts[$[Z]]=p9.inspectOpts[$[Z]]}w4.exports=I6()(p9);var{formatters:m9}=w4.exports;m9.o=function(Q){return this.inspectOpts.colors=this.useColors,S4.inspect(Q,this.inspectOpts).split(`
49
+ `).map(($)=>$.trim()).join(" ")};m9.O=function(Q){return this.inspectOpts.colors=this.useColors,S4.inspect(Q,this.inspectOpts)}});var i9=YQ((D3,x6)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)x6.exports=c9();else x6.exports=n9()});var K4,k6,S6,UQ,y4;var w6=XQ(()=>{K4=o8(i9(),1),k6=K4.default("serve-sim:cli"),S6=K4.default("serve-sim:helper"),UQ=K4.default("serve-sim:state"),y4=K4.default("serve-sim:mw")});var y6="Accessibility unavailable on this simulator.";import{createRequire as TZ}from"module";import{dirname as f6,join as b6}from"path";import{existsSync as jZ}from"fs";import{fileURLToPath as o9}from"url";function CZ(){let Q=[b6(f6(process.execPath),"native","serve-sim-native.node"),b6(f6(o9(import.meta.url)),"native","serve-sim-native.node"),b6(f6(o9(import.meta.url)),"..","dist","native","serve-sim-native.node")];for(let $ of Q)if(jZ($))return $;throw Error(`serve-sim-native.node not found. Looked in:
50
50
  ${Q.join(`
51
51
  `)}
52
- Run \`bun run build.ts\` to build the native addon.`)}function f4(){if(!v6)v6=jZ(AZ());return v6}class h6{handle;constructor(Q){this.handle=new(f4()).SimHID(Q)}guard(Q,$,Z){try{return $()}catch(J){return console.error(`[hid] ${Q} ignored bad input:`,J instanceof Error?J.message:J),Z}}touch(Q,$,Z,J,Y,G=0){this.guard("touch",()=>this.handle.touch(Q,$,Z,J,Y,G),void 0)}multiTouch(Q,$,Z,J,Y,G,X){this.guard("multiTouch",()=>this.handle.multiTouch(Q,$,Z,J,Y,G,X),void 0)}button(Q){this.guard("button",()=>this.handle.button(Q),void 0)}buttonHid(Q,$,Z="press"){this.guard("buttonHid",()=>this.handle.buttonHid(Q,$,Z),void 0)}key(Q,$){this.guard("key",()=>this.handle.key(Q,$),void 0)}scroll(Q,$,Z,J,Y,G){this.guard("scroll",()=>this.handle.scroll(Q,$,Y??NaN,G??NaN,Z,J),void 0)}digitalCrown(Q){this.guard("digitalCrown",()=>this.handle.digitalCrown(Q),void 0)}orientation(Q){return this.guard("orientation",()=>this.handle.orientation(Q),!1)}memoryWarning(){this.guard("memoryWarning",()=>this.handle.memoryWarning(),void 0)}softwareKeyboard(){this.guard("softwareKeyboard",()=>this.handle.softwareKeyboard(),void 0)}caDebug(Q,$){return this.guard("caDebug",()=>this.handle.caDebug(Q,$),!1)}}class u6{handle;constructor(Q,$){this.handle=new(f4()).SimCapture(Q,(Z,J,Y,G,X)=>{$({codec:Z===OZ?"avcc":"mjpeg",data:J,width:Y,height:G,isDescription:(X&qZ)!==0,isKeyframe:(X&DZ)!==0})})}start(){this.handle.start()}setAvccActive(Q){this.handle.setAvccActive(Q)}requestKeyframe(){this.handle.requestKeyframe()}screenSize(){return this.handle.screenSize()}stop(){this.handle.stop()}}function b4(Q){return f4().axDescribe(Q)}function v4(Q){return f4().axFrontmost(Q)}var jZ,OZ=1,qZ=1,DZ=2,W4,v6;var h4=GQ(()=>{jZ=EZ(import.meta.url),W4={portrait:1,portraitUpsideDown:2,landscapeRight:3,landscapeLeft:4}});function IZ(Q){return Q[0]?.frame??{x:0,y:0,width:1,height:1}}function xZ(Q,$){return Math.abs(Q.x-$.x)<0.5&&Math.abs(Q.y-$.y)<0.5&&Math.abs(Q.width-$.width)<0.5&&Math.abs(Q.height-$.height)<0.5}function kZ(Q){let $=IZ(Q),Z=[],J=(Y,G)=>{if(Z.length>=g6)return;let X=Y.frame;if(!xZ(X,$))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 W=0;W<Y.children.length&&Z.length<g6;W++)J(Y.children[W],`${G}.${W}`)};for(let Y=0;Y<Q.length&&Z.length<g6;Y++)J(Q[Y],String(Y));return{screen:{width:$.width,height:$.height},elements:Z}}async function wZ(Q){let $;try{$=JSON.parse(await b4(Q))}catch{return{screen:{width:1,height:1},elements:[],errors:[y6]}}return kZ($)}function SZ(Q){return Q?.errors?.includes(y6)??!1}function yZ(Q){return Q.elements.length>0&&Q.screen.width>1&&Q.screen.height>1}async function fZ(Q){let $=[];try{let Z=await wZ(Q);if(Z.errors?.length)return Z;if(!yZ(Z))throw Error(`native AX returned ${Z.elements.length} elements in ${Z.screen.width}x${Z.screen.height} AX space`);return{...Z,errors:$}}catch(Z){$.push(Z.message||String(Z))}return{screen:{width:1,height:1},elements:[],errors:$}}function bZ(Q){return`data: ${JSON.stringify(Q)}
52
+ Run \`bun run build.ts\` to build the native addon.`)}function f4(){if(!v6)v6=qZ(CZ());return v6}class h6{handle;constructor(Q){this.handle=new(f4()).SimHID(Q)}guard(Q,$,Z){try{return $()}catch(J){return console.error(`[hid] ${Q} ignored bad input:`,J instanceof Error?J.message:J),Z}}touch(Q,$,Z,J,Y,X=0){this.guard("touch",()=>this.handle.touch(Q,$,Z,J,Y,X),void 0)}multiTouch(Q,$,Z,J,Y,X,G){this.guard("multiTouch",()=>this.handle.multiTouch(Q,$,Z,J,Y,X,G),void 0)}button(Q){this.guard("button",()=>this.handle.button(Q),void 0)}buttonHid(Q,$,Z="press"){this.guard("buttonHid",()=>this.handle.buttonHid(Q,$,Z),void 0)}key(Q,$){this.guard("key",()=>this.handle.key(Q,$),void 0)}scroll(Q,$,Z,J,Y,X){this.guard("scroll",()=>this.handle.scroll(Q,$,Y??NaN,X??NaN,Z,J),void 0)}digitalCrown(Q){this.guard("digitalCrown",()=>this.handle.digitalCrown(Q),void 0)}orientation(Q){return this.guard("orientation",()=>this.handle.orientation(Q),!1)}memoryWarning(){this.guard("memoryWarning",()=>this.handle.memoryWarning(),void 0)}softwareKeyboard(){this.guard("softwareKeyboard",()=>this.handle.softwareKeyboard(),void 0)}caDebug(Q,$){return this.guard("caDebug",()=>this.handle.caDebug(Q,$),!1)}}class u6{handle;constructor(Q,$){this.handle=new(f4()).SimCapture(Q,(Z,J,Y,X,G)=>{$({codec:Z===OZ?"avcc":"mjpeg",data:J,width:Y,height:X,isDescription:(G&DZ)!==0,isKeyframe:(G&AZ)!==0})})}start(){this.handle.start()}setAvccActive(Q){this.handle.setAvccActive(Q)}requestKeyframe(){this.handle.requestKeyframe()}screenSize(){return this.handle.screenSize()}stop(){this.handle.stop()}}function b4(Q){return f4().axDescribe(Q)}function v4(Q){return f4().axFrontmost(Q)}var qZ,OZ=1,DZ=1,AZ=2,W4,v6;var h4=XQ(()=>{qZ=TZ(import.meta.url),W4={portrait:1,portraitUpsideDown:2,landscapeRight:3,landscapeLeft:4}});function xZ(Q){return Q[0]?.frame??{x:0,y:0,width:1,height:1}}function kZ(Q,$){return Math.abs(Q.x-$.x)<0.5&&Math.abs(Q.y-$.y)<0.5&&Math.abs(Q.width-$.width)<0.5&&Math.abs(Q.height-$.height)<0.5}function SZ(Q){let $=xZ(Q),Z=[],J=(Y,X)=>{if(Z.length>=g6)return;let G=Y.frame;if(!kZ(G,$))Z.push({id:Y.AXUniqueId??X,path:X,label:Y.AXLabel??"",value:Y.AXValue??"",role:Y.role_description,type:Y.type,enabled:Y.enabled!==!1,frame:G});for(let W=0;W<Y.children.length&&Z.length<g6;W++)J(Y.children[W],`${X}.${W}`)};for(let Y=0;Y<Q.length&&Z.length<g6;Y++)J(Q[Y],String(Y));return{screen:{width:$.width,height:$.height},elements:Z}}async function wZ(Q){let $;try{$=JSON.parse(await b4(Q))}catch{return{screen:{width:1,height:1},elements:[],errors:[y6]}}return SZ($)}function yZ(Q){return Q?.errors?.includes(y6)??!1}function fZ(Q){return Q.elements.length>0&&Q.screen.width>1&&Q.screen.height>1}async function bZ(Q){let $=[];try{let Z=await wZ(Q);if(Z.errors?.length)return Z;if(!fZ(Z))throw Error(`native AX returned ${Z.elements.length} elements in ${Z.screen.width}x${Z.screen.height} AX space`);return{...Z,errors:$}}catch(Z){$.push(Z.message||String(Z))}return{screen:{width:1,height:1},elements:[],errors:$}}function vZ(Q){return`data: ${JSON.stringify(Q)}
53
53
 
54
- `}function vZ({udid:Q}){let $=new Set,Z=null,J=null,Y=a9,G=!1,X=!1,H=()=>{if(X||$.size===0||Z)return;Z=setTimeout(W,Y)},W=async()=>{if(Z=null,X||G||$.size===0){H();return}G=!0;try{let z=await fZ(Q),K=bZ(z);if(K!==J){for(let M of $)M.write(K);Y=a9}else Y=Math.min(Y*2,CZ);if(J=K,SZ(z))Y=PZ}finally{G=!1,H()}};return{addClient(z){if(X)return()=>{};if($.add(z),J)z.write(J);return W(),()=>{if($.delete(z),$.size===0&&Z)clearTimeout(Z),Z=null}},dispose(){if(X)return;if(X=!0,Z)clearTimeout(Z),Z=null;$.clear(),J=null}}}function r9(){let Q=new Map;return{get($){let Z=Q.get($);if(Z)return Z;let J=vZ({udid:$});return Q.set($,J),J},prune($){let Z=$ instanceof Set?$:new Set($);for(let[J,Y]of Q)if(!Z.has(J))Y.dispose(),Q.delete(J)},size(){return Q.size}}}var g6=500,a9=500,CZ=2000,PZ=15000;var s9=GQ(()=>{h4()});function e9(Q){return Buffer.from(`--frame\r
54
+ `}function hZ({udid:Q}){let $=new Set,Z=null,J=null,Y=a9,X=!1,G=!1,H=()=>{if(G||$.size===0||Z)return;Z=setTimeout(W,Y)},W=async()=>{if(Z=null,G||X||$.size===0){H();return}X=!0;try{let z=await bZ(Q),K=vZ(z);if(K!==J){for(let M of $)M.write(K);Y=a9}else Y=Math.min(Y*2,PZ);if(J=K,yZ(z))Y=IZ}finally{X=!1,H()}};return{addClient(z){if(G)return()=>{};if($.add(z),J)z.write(J);return W(),()=>{if($.delete(z),$.size===0&&Z)clearTimeout(Z),Z=null}},dispose(){if(G)return;if(G=!0,Z)clearTimeout(Z),Z=null;$.clear(),J=null}}}function r9(){let Q=new Map;return{get($){let Z=Q.get($);if(Z)return Z;let J=hZ({udid:$});return Q.set($,J),J},prune($){let Z=$ instanceof Set?$:new Set($);for(let[J,Y]of Q)if(!Z.has(J))Y.dispose(),Q.delete(J)},size(){return Q.size}}}var g6=500,a9=500,PZ=2000,IZ=15000;var s9=XQ(()=>{h4()});function e9(Q){return Buffer.from(`--frame\r
55
55
  Content-Type: image/jpeg\r
56
56
  Content-Length: ${Q}\r
57
57
  \r
58
- `,"ascii")}function lZ(Q){let $=Buffer.allocUnsafe(5+Q.length);return $.writeUInt32BE(Q.length+1,0),$[4]=hZ,Q.copy($,5),$}class $${udid;capture;hid;started=!1;width=0;height=0;orientation="portrait";latestJpeg=null;cachedAvccDescription=null;mjpegClients=new Set;avccClients=new Set;hidSockets=new Set;constructor(Q){this.udid=Q;this.hid=new h6(Q),this.capture=new u6(Q,($)=>this.onFrame($))}start(){if(this.started)return;this.capture.start(),this.started=!0}close(){for(let Q of this.mjpegClients)Q.end();for(let Q of this.avccClients)Q.end();for(let Q of this.hidSockets)Q.close();this.mjpegClients.clear(),this.avccClients.clear(),this.hidSockets.clear(),this.capture.stop()}onFrame(Q){if(Q.codec==="mjpeg"){if(this.latestJpeg=Q.data,Q.width!==this.width||Q.height!==this.height)this.width=Q.width,this.height=Q.height,this.broadcastConfig();if(this.mjpegClients.size===0)return;let $=e9(Q.data.length);for(let Z of this.mjpegClients)this.writeMjpegFrame(Z,$,Q.data)}else{if(Q.isDescription)this.cachedAvccDescription=Q.data;for(let $ of this.avccClients)this.writeAvccFrame($,Q.data)}}writeMjpegFrame(Q,$,Z){if(Q.writableEnded||Q.writableLength>t9)return;Q.cork(),Q.write($),Q.write(Z),Q.write(gZ),Q.uncork()}writeAvccFrame(Q,$){if(Q.writableEnded){this.avccClients.delete(Q);return}if(Q.writableLength>t9){this.avccClients.delete(Q),Q.end();return}Q.write($)}handleMjpeg(Q,$){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",...l6}),this.mjpegClients.add($),this.latestJpeg)this.writeMjpegFrame($,e9(this.latestJpeg.length),this.latestJpeg);let J=()=>this.mjpegClients.delete($);$.on("close",J),$.on("error",J)}handleAvcc(Q,$){if($.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...l6}),this.avccClients.add($),this.capture.setAvccActive(!0),this.latestJpeg)$.write(lZ(this.latestJpeg));if(this.cachedAvccDescription)$.write(this.cachedAvccDescription);this.capture.requestKeyframe();let Z=()=>{if(this.avccClients.delete($),this.avccClients.size===0)this.capture.setAvccActive(!1)};$.on("close",Z),$.on("error",Z)}handleConfig(Q,$){this.sendJson($,200,this.screenConfig())}handleHealth(Q,$){this.sendJson($,200,{status:"ok"})}handleAx(Q,$){return this.serveAxJson($,()=>b4(this.udid),"ax_unavailable")}handleForeground(Q,$){return this.serveAxJson($,()=>v4(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();if($)Q.send($);Q.on("message",(Z)=>this.handleHidMessage(Buffer.isBuffer(Z)?Z:Buffer.from(Z))),Q.on("close",()=>this.hidSockets.delete(Q)),Q.on("error",()=>this.hidSockets.delete(Q))}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,G=this.height;switch($){case 3:{let X=J();if(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(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.hid.multiTouch(X.type,X.x1,X.y1,X.x2,X.y2,Y,G);break}case 6:{let X=J();if(X)this.hid.key(X.type,X.usage);break}case 7:{let X=J();if(!X)break;let H=cZ[X.orientation];if(H!=null&&this.hid.orientation(H)){if(X.orientation!==this.orientation)this.orientation=X.orientation,this.broadcastConfig()}break}case 8:{let X=J();if(X)this.hid.caDebug(X.option,X.enabled);break}case 9:this.hid.memoryWarning();break;case 10:{let X=J();if(X)this.hid.digitalCrown(X.delta);break}case 11:{let X=J();if(X)this.hid.scroll(X.dx*Y,X.dy*G,Y,G,X.x,X.y);break}case 12:this.hid.softwareKeyboard();break}}screenConfig(){return{width:this.width,height:this.height,orientation:this.orientation}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([uZ]),Buffer.from(JSON.stringify(this.screenConfig()))])}broadcastConfig(){let Q=this.configFrame();if(!Q)return;for(let $ of this.hidSockets)$.send(Q)}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),...l6}),Q.end(J)}}function c6(Q){let $=Q$.get(Q);if(!$){$=new $$(Q);try{$.start()}catch(Z){throw $.close(),Z}Q$.set(Q,$)}return $}var l6,t9=8388608,hZ=4,uZ=130,gZ,cZ,Q$;var Z$=GQ(()=>{h4();l6={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},gZ=Buffer.from(`\r
59
- `,"ascii");cZ={portrait:W4.portrait,portrait_upside_down:W4.portraitUpsideDown,landscape_left:W4.landscapeLeft,landscape_right:W4.landscapeRight};Q$=new Map});import{execFileSync as u4}from"child_process";import{createHash as W$}from"crypto";import{existsSync as s,mkdirSync as V$,readdirSync as mZ,readFileSync as BQ,renameSync as H$,statSync as M$,unlinkSync as J$}from"fs";import{tmpdir as L$}from"os";import{basename as U$,dirname as r6,join as m}from"path";import{inflateSync as pZ}from"zlib";function c4(Q){return Q.startsWith(Y$)?Q.slice(Y$.length):Q}function t6(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]),G=Number(Z[3]),X=Number(Z[4]),H=Math.abs(G-J),W=Math.abs(X-Y);return H>0&&W>0?{width:H,height:W}:null}function nZ(Q,$){let Z=zJ(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 G=m(Y,`${J}.pdf`);if(!s(G))return null;let X=t6(BQ(G));if(!X)return null;let H=KJ($);return{width:X.width/H,height:X.height/H}}function _$(Q){let $=e6(Q),Z=$;if(d6.has(Z))return d6.get(Z)??null;let J=rZ($);return d6.set(Z,J),J}function B$(Q){let $=e6(Q);if(n6.has($))return n6.get($)??null;let Z=iZ(Q);return n6.set($,Z),Z}function iZ(Q){let $=tZ(Q),Z=$?T$($):null,J=eZ(Z)??QJ(Q.name);if(!J)return null;let Y=E$(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function N$(Q,$){let Z=c4(Q.searchParams.get("chrome")??""),J=Q.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){oQ($,400,"Invalid chrome asset request");return}let Y=q$(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){oQ($,404,"Chrome asset not found");return}let G=Q8(Z,J);if(!s(G)){oQ($,404,"Chrome asset not found");return}try{let X=D$(Z,J,G),H=BQ(X);$.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(H.byteLength)}),$.end(H)}catch(X){oQ($,500,X instanceof Error?X.message:"Failed to render chrome asset")}}function F$(Q,$){let Z=Q.searchParams.get("name")??"";try{let J=E$(Z);if(!J){oQ($,404,"Placeholder asset not found");return}let Y=BQ(J.pngPath);$.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),$.end(Y)}catch(J){oQ($,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function E$(Q){if(!/^[A-Za-z0-9._-]+$/.test(Q))return null;if(o6.has(Q))return o6.get(Q)??null;let $=oZ(Q),Z=$?WJ(Q,$):null;return o6.set(Q,Z),Z}function oZ(Q){let Z=aZ(Q)?.paths.find((Y)=>s(Y));if(Z)return Z;if(!O$().some((Y)=>Y.iconName===Q))return null;let J=m(FQ,`${Q}.icns`);return s(J)?J:null}function aZ(Q){return Object.prototype.hasOwnProperty.call(z$,Q)?z$[Q]:null}function rZ(Q){let $=j$(Q);if(!s($))return null;let Z=T$($);if(!Z?.chromeIdentifier)return null;let J=q$(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=a6(J.identifier,J.compositeImage);let G=J.compositeImage?MJ(J.identifier,J.compositeImage):null,X=(G&&Z.framebufferMaskSize?HJ(Z.framebufferMaskSize,G):null)??Z.screenSize??(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 H=Y??{width:X.width+J.insets.left+J.insets.right,height:X.height+J.insets.top+J.insets.bottom},W={x:J.devicePadding.left,y:J.devicePadding.top,width:H.width,height:H.height},z={width:H.width+J.devicePadding.left+J.devicePadding.right,height:H.height+J.devicePadding.top+J.devicePadding.bottom},K={x:W.x+(H.width-X.width)/2,y:W.y+(H.height-X.height)/2,width:X.width,height:X.height},M=G?Math.max(0,G.radius-(G.width-X.width)/2):J.innerCornerRadius,L=J.slice?a6(J.identifier,J.slice.topLeft):null,T=J.identifier.startsWith("watch"),j=J.buttons.flatMap((q)=>{let D=a6(J.identifier,q.image);if(!D)return[];let A=YJ(q,D,H,J.devicePadding),O={x:D.width>0?(q.rolloverOffset.x-q.normalOffset.x)/D.width:0,y:D.height>0?(q.rolloverOffset.y-q.normalOffset.y)/D.height:0};return[{name:q.name,image:q.image,imageDown:q.imageDown,onTop:q.onTop||T,frame:{...A,...D},hover:O,usagePage:q.usagePage,usage:q.usage}]});return{identifier:J.identifier,frame:z,body:W,screen:K,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:M,compositeImage:J.compositeImage,slice:J.slice,corner:L,buttons:j}}function T$(Q){let $=g4(Q);if(!$)return null;let Z=typeof $.chromeIdentifier==="string"?$.chromeIdentifier:null,J=Z?c4(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof $.modelIdentifier==="string"?$.modelIdentifier:null,productClass:typeof $.productClass==="string"?$.productClass:null,screenSize:J?nZ({...$,__profileDir:r6(Q)},J):null,framebufferMaskSize:sZ({...$,__profileDir:r6(Q)})}}function sZ(Q){let $=typeof Q.framebufferMask==="string"?Q.framebufferMask:null,Z=typeof Q.__profileDir==="string"?Q.__profileDir:null;if(!$||!Z)return null;let J=m(Z,`${$}.pdf`);if(!s(J))return null;return t6(BQ(J))}function e6(Q){return GJ(Q.deviceTypeIdentifier)??Q.name}function tZ(Q){let $=j$(e6(Q));return s($)?$:null}function j$(Q){return m(s6,`${Q}.simdevicetype`,"Contents","Resources","profile.plist")}function eZ(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 O$())if(Z.modelCodes.some((J)=>$.has(J)))return Z.iconName;return null}function QJ(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 O$(){if(i6)return i6;let Q=g4(m(FQ,"MobileDevices-Info.plist"))??g4(m(r6(FQ),"Info.plist")),$=Array.isArray(Q?.UTExportedTypeDeclarations)?Q.UTExportedTypeDeclarations:[],Z=[];for(let J of $){let Y=XQ(J),G=a(Y.UTTypeIconFile);if(!G||!G.endsWith(".icns"))continue;let X=m(FQ,G);if(!s(X))continue;let W=XQ(Y.UTTypeTagSpecification)["com.apple.device-model-code"],z=Array.isArray(W)?W.filter((K)=>typeof K==="string"&&K.length>0):[];if(z.length===0)continue;Z.push({description:a(Y.UTTypeDescription)??"",iconFile:G,iconName:U$(G,".icns"),modelCodes:z})}return i6=Z,Z}function q$(Q){let $=c4(Q);if(!/^[A-Za-z0-9_-]+$/.test($))return null;if(p6.has($))return p6.get($)??null;let Z=m(R$,`${$}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(BQ(Z,"utf-8"));J=$J(Y)}catch{J=null}return p6.set($,J),J}function $J(Q){let $=typeof Q.identifier==="string"?Q.identifier:null;if(!$)return null;let Z=c4($),J=XQ(Q.images),Y=XQ(J.sizing),G=XQ(Q.paths),X=_Q(XQ(G.simpleOutsideBorder).cornerRadiusX),H={top:_Q(Y.topHeight),left:_Q(Y.leftWidth),bottom:_Q(Y.bottomHeight),right:_Q(Y.rightWidth)},W=XQ(J.devicePadding),z={top:_Q(W.top),left:_Q(W.left),bottom:_Q(W.bottom),right:_Q(W.right)},K=typeof J.composite==="string"?J.composite:null,M=ZJ(J),L=Array.isArray(Q.inputs)?Q.inputs.flatMap((j)=>{let q=JJ(XQ(j));return q?[q]:[]}):[],T=new Set;for(let j of Object.values(J))if(typeof j==="string")T.add(j);for(let j of L)T.add(j.image);if(Array.isArray(Q.inputs))for(let j of Q.inputs){let q=XQ(j);if(typeof q.imageDown==="string")T.add(q.imageDown)}return{identifier:Z,insets:H,devicePadding:z,outerCornerRadius:X,innerCornerRadius:Math.max(X-Math.max(H.left,H.top),0),compositeImage:K,slice:M,buttons:L,allowedImages:T}}function ZJ(Q){let $=a(Q.topLeft),Z=a(Q.top),J=a(Q.topRight),Y=a(Q.right),G=a(Q.bottomRight),X=a(Q.bottom),H=a(Q.bottomLeft),W=a(Q.left);if(!$||!Z||!J||!Y||!G||!X||!H||!W)return null;return{topLeft:$,top:Z,topRight:J,right:Y,bottomRight:G,bottom:X,bottomLeft:H,left:W}}function JJ(Q){let $=a(Q.name),Z=a(Q.image);if(!$||!Z)return null;let J=a(Q.anchor),Y=a(Q.align),G=XQ(Q.offsets),X=K$(XQ(G.normal)),H=K$(XQ(G.rollover));return{name:$,image:Z,imageDown:a(Q.imageDown),onTop:Q.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:X??H??{x:0,y:0},rolloverOffset:H??X??{x:0,y:0},usagePage:EQ(Q.usagePage),usage:EQ(Q.usage)}}function YJ(Q,$,Z,J){let{left:Y,top:G}=J,X=2*Q.normalOffset.x-Q.rolloverOffset.x,H=2*Q.normalOffset.y-Q.rolloverOffset.y,W=Q.align==="trailing"?Y+Z.width+X-$.width:Y+X;switch(Q.anchor){case"left":return{x:Y+Q.rolloverOffset.x-$.width/2,y:G+Q.rolloverOffset.y};case"right":return{x:Y+Z.width+X,y:G+H};case"top":return{x:W,y:G+H-$.height};case"bottom":return{x:W,y:G+Z.height+H}}}function GJ(Q){if(!Q)return null;if(!m6)m6=XJ();return m6.get(Q)??null}function XJ(){let Q=new Map;try{for(let $ of mZ(s6)){if(!$.endsWith(".simdevicetype"))continue;let Z=m(s6,$),J=g4(m(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,G=typeof J?.CFBundleName==="string"?J.CFBundleName:U$($,".simdevicetype");if(Y)Q.set(Y,G)}}catch{}return Q}function g4(Q){try{let $=u4("plutil",["-convert","json","-o","-",Q],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse($)}catch{return null}}function zJ(Q){let $=EQ(Q.mainScreenWidth),Z=EQ(Q.mainScreenHeight),J=EQ(Q.mainScreenScale);if(!$||!Z||!J||J<=0)return null;return{width:$/J,height:Z/J}}function KJ(Q){if(Q.startsWith("phone"))return 3;if(Q.startsWith("tablet"))return 2;if(Q.startsWith("watch"))return 2;return 1}function a6(Q,$){let Z=Q8(Q,$);if(!s(Z))return null;return t6(BQ(Z))}function Q8(Q,$){return m(R$,`${Q}.devicechrome`,"Contents","Resources",`${$}.pdf`)}function D$(Q,$,Z){V$(G$,{recursive:!0});let J=M$(Z),Y=W$("sha1").update(Q).update("\x00").update($).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),G=m(G$,`${Q}-${Y}.png`);if(s(G))return G;let X=`${G}.${process.pid}.tmp`;return u4("sips",["-s","format","png",Z,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),H$(X,G),G}function WJ(Q,$){V$(X$,{recursive:!0});let Z=M$($),J=W$("sha1").update(Q).update("\x00").update($).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=m(X$,`${Q}-${J}.png`);if(s(Y)){let H=l4(BQ(Y));return{sourcePath:$,pngPath:Y,width:H.width,height:H.height}}let G=`${Y}.${process.pid}.tmp`,X=`${Y}.${process.pid}.raw.png`;try{u4("sips",["-s","format","png",$,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4});let H=BQ(X),W=VJ(H)??{x:0,y:0,...l4(H)};return u4("sips",["-c",String(W.height),String(W.width),"--cropOffset",String(W.y),String(W.x),"-s","format","png",$,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),H$(G,Y),{sourcePath:$,pngPath:Y,width:W.width,height:W.height}}finally{try{if(s(X))J$(X)}catch{}try{if(s(G))J$(G)}catch{}}}function l4(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 A$(Q,$){let{width:Z,height:J}=l4(Q),Y=8,G=0,X=0,H=[];while(Y<Q.byteLength){let q=Q.readUInt32BE(Y);Y+=4;let D=Q.toString("ascii",Y,Y+4);Y+=4;let A=Q.subarray(Y,Y+q);if(Y+=q+4,D==="IHDR")G=A[8]??0,X=A[9]??0;else if(D==="IDAT")H.push(A);else if(D==="IEND")break}let W=X===6?4:X===4?2:0;if(G!==8||W===0||H.length===0)return null;let z=X===6,K=pZ(Buffer.concat(H)),M=Z*W,L=new Uint8Array(Z*J),T=Buffer.alloc(M),j=0;for(let q=0;q<J;q++){let D=K[j++]??0,A=Buffer.from(K.subarray(j,j+M));j+=M,UJ(A,T,W,D);for(let O=0;O<Z;O++){let E=O*W,N=A[E]??0,B=z?A[E+1]??0:N,U=z?A[E+2]??0:N,V=A[E+W-1]??0;if($(N,B,U,V))L[q*Z+O]=1}T=A}return{width:Z,height:J,mask:L}}function VJ(Q){let{width:$,height:Z}=l4(Q),J=A$(Q,(W,z,K,M)=>M>0);if(!J)return{x:0,y:0,width:$,height:Z};let Y=$,G=Z,X=-1,H=-1;for(let W=0;W<Z;W++)for(let z=0;z<$;z++){if(!J.mask[W*$+z])continue;if(z<Y)Y=z;if(W<G)G=W;if(z>X)X=z;if(W>H)H=W}if(X<Y||H<G)return{x:0,y:0,width:$,height:Z};return{x:Y,y:G,width:X-Y+1,height:H-G+1}}function HJ(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 MJ(Q,$){let Z=LJ(Q,$);if(!Z)return null;let J=A$(Z,(O,E,N,B)=>B>200&&O<30&&E<30&&N<30);if(!J)return null;let{width:Y,height:G,mask:X}=J,H=Math.floor(Y/2),W=Math.floor(G/2),z=(O,E)=>O>=0&&E>=0&&O<Y&&E<G&&X[E*Y+O]===1;if(!z(H,W))return null;let K=H;while(K>0&&z(K-1,W))K--;let M=H;while(M<Y-1&&z(M+1,W))M++;let L=W;while(L>0&&z(H,L-1))L--;let T=W;while(T<G-1&&z(H,T+1))T++;let j=T-L,q=(O,E)=>{let N=0;while(N<j&&!z(O,E?L+N:T-N))N++;return N},D=[q(K,!0),q(M,!0),q(K,!1),q(M,!1)],A=D.reduce((O,E)=>O+E,0)/D.length;return{x:K,y:L,width:M-K+1,height:T-L+1,radius:A}}function LJ(Q,$){let Z=Q8(Q,$);if(!s(Z))return null;try{return BQ(D$(Q,$,Z))}catch{return null}}function UJ(Q,$,Z,J){for(let Y=0;Y<Q.byteLength;Y++){let G=Y>=Z?Q[Y-Z]:0,X=$[Y]??0,H=Y>=Z?$[Y-Z]:0;switch(J){case 0:break;case 1:Q[Y]=Q[Y]+G&255;break;case 2:Q[Y]=Q[Y]+X&255;break;case 3:Q[Y]=Q[Y]+Math.floor((G+X)/2)&255;break;case 4:Q[Y]=Q[Y]+RJ(G,X,H)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function RJ(Q,$,Z){let J=Q+$-Z,Y=Math.abs(J-Q),G=Math.abs(J-$),X=Math.abs(J-Z);if(Y<=G&&Y<=X)return Q;return G<=X?$:Z}function oQ(Q,$,Z){Q.writeHead($,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({ok:!1,error:Z}))}function _Q(Q){return EQ(Q)??0}function EQ(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 a(Q){return typeof Q==="string"&&Q?Q:null}function XQ(Q){return Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{}}function K$(Q){let $=EQ(Q.x),Z=EQ(Q.y);return $===null||Z===null?null:{x:$,y:Z}}var s6="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",R$="/Library/Developer/DeviceKit/Chrome",Y$="com.apple.dt.devicekit.chrome.",G$,X$,FQ="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",dZ="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",z$,m6=null,p6,d6,n6,i6=null,o6;var C$=GQ(()=>{G$=m(L$(),"serve-sim-devicekit-chrome"),X$=m(L$(),"serve-sim-device-placeholder-assets"),z$={"vision-pro":{paths:[m(FQ,"com.apple.vision-pro.icns"),m(dZ,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[m(FQ,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[m(FQ,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[m(FQ,"com.apple.ipad-air-m3-1.icns")]}},p6=new Map,d6=new Map,n6=new Map,o6=new Map});import{exec as _J}from"child_process";import{createHash as P$,timingSafeEqual as BJ}from"crypto";import{request as NJ}from"http";import{WebSocketServer as FJ}from"ws";function jJ(Q,$){let Z=P$("sha256").update(Q).digest(),J=P$("sha256").update($).digest();return BJ(Z,J)}function OJ(Q,$,Z){let J=!1,Y=new Map,G=Z.ssePrefixes??[],X=(z)=>{if(Q.readyState===Q.OPEN)Q.send(JSON.stringify(z))},H=setTimeout(()=>{if(!J)Q.close()},EJ);H.unref?.();let W=(z,K)=>{if(Y.has(z))return;let M=K.split("?")[0];if(!K.startsWith("/")||!G.some((T)=>M===T)){X({sub:z,end:!0,error:"path not allowed"});return}if(!$){X({sub:z,end:!0,error:"no local port"});return}let L=NJ({host:"127.0.0.1",port:$,path:K,headers:{accept:"text/event-stream"}},(T)=>{T.on("data",(j)=>X({sub:z,data:j.toString("utf-8")})),T.on("end",()=>{Y.delete(z),X({sub:z,end:!0})})});L.on("error",()=>{Y.delete(z),X({sub:z,end:!0})}),L.end(),Y.set(z,{destroy:()=>L.destroy()})};Q.on("message",(z)=>{let K;try{K=JSON.parse(z.toString())}catch{return}if(!J){if(typeof K.token==="string"&&jJ(K.token,Z.execToken))J=!0,clearTimeout(H),X({ready:!0});else Q.close();return}if(typeof K.unsub==="number"){Y.get(K.unsub)?.destroy(),Y.delete(K.unsub);return}if(typeof K.sub==="number"&&typeof K.path==="string"){W(K.sub,K.path);return}if(typeof K.id==="number"&&K.ui!==void 0){let{id:T}=K;if(!Z.onUiRequest){X({id:T,error:"ui requests not supported"});return}Z.onUiRequest(K.ui).then((j)=>X({id:T,...j})).catch((j)=>X({id:T,error:j instanceof Error?j.message:String(j)}));return}if(typeof K.id!=="number"||typeof K.command!=="string"||!K.command)return;let{id:M,command:L}=K;_J(L,{maxBuffer:16777216},(T,j,q)=>{X({id:M,stdout:j.toString(),stderr:q.toString(),exitCode:T?T.code??1:0})})}),Q.on("error",()=>Q.close()),Q.on("close",()=>{clearTimeout(H);for(let z of Y.values())z.destroy();Y.clear()})}function I$(Q){let $=new FJ({noServer:!0,maxPayload:TJ});return function(J,Y,G){let X=J.url??"",H=X.indexOf("?"),W=H===-1?X:X.slice(0,H);if(W!==Q.path&&W!==`${Q.path}/`)return!1;let z=J.headers.origin;if(z)try{if(new URL(z).host!==J.headers.host)return Y.destroy(),!0}catch{return Y.destroy(),!0}let K=Y.localPort;if(!K){let M=Number((J.headers.host??"").split(":")[1]);if(Number.isFinite(M)&&M>0)K=M}return $.handleUpgrade(J,Y,G,(M)=>{OJ(M,K,Q)}),!0}}var EJ=1e4,TJ=4194304;var x$=()=>{};var X0={};a8(X0,{startCdpServer:()=>n1,startBunCdpServer:()=>t1,listTargets:()=>e1,listDevices:()=>Y0});import{createRequire as qJ}from"node:module";import*as l$ from"node:net";import*as d$ from"node:net";import{spawnSync as iJ}from"node:child_process";import*as o$ from"node:tls";import*as t$ from"node:http";function IJ(Q){return this[Q]}function w$(Q){return Q.replace(/[&<>'"]/g,($)=>$==="&"?"&amp;":$==="<"?"&lt;":$===">"?"&gt;":$==="'"?"&apos;":"&quot;")}function hJ(Q){let $="";for(let Z=0;Z<Q.length;Z++)$+=String.fromCharCode(Q[Z]);return btoa($)}function uJ(Q){let $=atob(Q.replace(/\s+/g,"")),Z=new Uint8Array($.length);for(let J=0;J<$.length;J++)Z[J]=$.charCodeAt(J);return Z}function X8(Q,$){if(Q===null||Q===void 0)return`${$}<string></string>`;if(typeof Q==="boolean")return`${$}<${Q?"true":"false"}/>`;if(typeof Q==="string")return`${$}<string>${w$(Q)}</string>`;if(typeof Q==="number"){if(Number.isInteger(Q))return`${$}<integer>${Q}</integer>`;return`${$}<real>${Q}</real>`}if(typeof Q==="bigint")return`${$}<integer>${Q.toString()}</integer>`;if(Q instanceof Uint8Array)return`${$}<data>${hJ(Q)}</data>`;if(Q instanceof Date)return`${$}<date>${Q.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray(Q)){if(Q.length===0)return`${$}<array/>`;let Y=Q.map((G)=>X8(G,$+"\t")).join(`
58
+ `,"ascii")}function cZ(Q){let $=Buffer.allocUnsafe(5+Q.length);return $.writeUInt32BE(Q.length+1,0),$[4]=uZ,Q.copy($,5),$}class $${udid;capture;hid;started=!1;width=0;height=0;orientation="portrait";latestJpeg=null;cachedAvccDescription=null;mjpegClients=new Set;avccClients=new Set;hidSockets=new Set;constructor(Q){this.udid=Q;this.hid=new h6(Q),this.capture=new u6(Q,($)=>this.onFrame($))}start(){if(this.started)return;this.capture.start(),this.started=!0}close(){for(let Q of this.mjpegClients)Q.end();for(let Q of this.avccClients)Q.end();for(let Q of this.hidSockets)Q.close();this.mjpegClients.clear(),this.avccClients.clear(),this.hidSockets.clear(),this.capture.stop()}onFrame(Q){if(Q.codec==="mjpeg"){if(this.latestJpeg=Q.data,Q.width!==this.width||Q.height!==this.height)this.width=Q.width,this.height=Q.height,this.broadcastConfig();if(this.mjpegClients.size===0)return;let $=e9(Q.data.length);for(let Z of this.mjpegClients)this.writeMjpegFrame(Z,$,Q.data)}else{if(Q.isDescription)this.cachedAvccDescription=Q.data;for(let $ of this.avccClients)this.writeAvccFrame($,Q.data)}}writeMjpegFrame(Q,$,Z){if(Q.writableEnded||Q.writableLength>t9)return;Q.cork(),Q.write($),Q.write(Z),Q.write(lZ),Q.uncork()}writeAvccFrame(Q,$){if(Q.writableEnded){this.avccClients.delete(Q);return}if(Q.writableLength>t9){this.avccClients.delete(Q),Q.end();return}Q.write($)}handleMjpeg(Q,$){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",...l6}),this.mjpegClients.add($),this.latestJpeg)this.writeMjpegFrame($,e9(this.latestJpeg.length),this.latestJpeg);let J=()=>this.mjpegClients.delete($);$.on("close",J),$.on("error",J)}handleAvcc(Q,$){if($.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...l6}),this.avccClients.add($),this.capture.setAvccActive(!0),this.latestJpeg)$.write(cZ(this.latestJpeg));if(this.cachedAvccDescription)$.write(this.cachedAvccDescription);this.capture.requestKeyframe();let Z=()=>{if(this.avccClients.delete($),this.avccClients.size===0)this.capture.setAvccActive(!1)};$.on("close",Z),$.on("error",Z)}handleConfig(Q,$){this.sendJson($,200,this.screenConfig())}handleHealth(Q,$){this.sendJson($,200,{status:"ok"})}handleAx(Q,$){return this.serveAxJson($,()=>b4(this.udid),"ax_unavailable")}handleForeground(Q,$){return this.serveAxJson($,()=>v4(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();if($)Q.send($);Q.on("message",(Z)=>this.handleHidMessage(Buffer.isBuffer(Z)?Z:Buffer.from(Z))),Q.on("close",()=>this.hidSockets.delete(Q)),Q.on("error",()=>this.hidSockets.delete(Q))}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.hid.touch(G.type,G.x,G.y,Y,X,G.edge??0);break}case 4:{let G=J();if(!G)break;if(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.hid.multiTouch(G.type,G.x1,G.y1,G.x2,G.y2,Y,X);break}case 6:{let G=J();if(G)this.hid.key(G.type,G.usage);break}case 7:{let G=J();if(!G)break;let H=mZ[G.orientation];if(H!=null&&this.hid.orientation(H)){if(G.orientation!==this.orientation)this.orientation=G.orientation,this.broadcastConfig()}break}case 8:{let G=J();if(G)this.hid.caDebug(G.option,G.enabled);break}case 9:this.hid.memoryWarning();break;case 10:{let G=J();if(G)this.hid.digitalCrown(G.delta);break}case 11:{let G=J();if(G)this.hid.scroll(G.dx*Y,G.dy*X,Y,X,G.x,G.y);break}case 12:this.hid.softwareKeyboard();break}}screenConfig(){return{width:this.width,height:this.height,orientation:this.orientation}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([gZ]),Buffer.from(JSON.stringify(this.screenConfig()))])}broadcastConfig(){let Q=this.configFrame();if(!Q)return;for(let $ of this.hidSockets)$.send(Q)}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),...l6}),Q.end(J)}}function c6(Q){let $=Q$.get(Q);if(!$){$=new $$(Q);try{$.start()}catch(Z){throw $.close(),Z}Q$.set(Q,$)}return $}var l6,t9=8388608,uZ=4,gZ=130,lZ,mZ,Q$;var Z$=XQ(()=>{h4();l6={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},lZ=Buffer.from(`\r
59
+ `,"ascii");mZ={portrait:W4.portrait,portrait_upside_down:W4.portraitUpsideDown,landscape_left:W4.landscapeLeft,landscape_right:W4.landscapeRight};Q$=new Map});import{execFileSync as u4}from"child_process";import{createHash as W$}from"crypto";import{existsSync as s,mkdirSync as V$,readdirSync as pZ,readFileSync as BQ,renameSync as H$,statSync as M$,unlinkSync as J$}from"fs";import{tmpdir as L$}from"os";import{basename as R$,dirname as r6,join as p}from"path";import{inflateSync as dZ}from"zlib";function c4(Q){return Q.startsWith(Y$)?Q.slice(Y$.length):Q}function t6(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]),H=Math.abs(X-J),W=Math.abs(G-Y);return H>0&&W>0?{width:H,height:W}:null}function iZ(Q,$){let Z=KJ(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=p(Y,`${J}.pdf`);if(!s(X))return null;let G=t6(BQ(X));if(!G)return null;let H=WJ($);return{width:G.width/H,height:G.height/H}}function _$(Q){let $=e6(Q),Z=$;if(d6.has(Z))return d6.get(Z)??null;let J=sZ($);return d6.set(Z,J),J}function B$(Q){let $=e6(Q);if(n6.has($))return n6.get($)??null;let Z=oZ(Q);return n6.set($,Z),Z}function oZ(Q){let $=eZ(Q),Z=$?T$($):null,J=QJ(Z)??$J(Q.name);if(!J)return null;let Y=E$(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function N$(Q,$){let Z=c4(Q.searchParams.get("chrome")??""),J=Q.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){oQ($,400,"Invalid chrome asset request");return}let Y=O$(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){oQ($,404,"Chrome asset not found");return}let X=Q8(Z,J);if(!s(X)){oQ($,404,"Chrome asset not found");return}try{let G=D$(Z,J,X),H=BQ(G);$.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(H.byteLength)}),$.end(H)}catch(G){oQ($,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function F$(Q,$){let Z=Q.searchParams.get("name")??"";try{let J=E$(Z);if(!J){oQ($,404,"Placeholder asset not found");return}let Y=BQ(J.pngPath);$.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),$.end(Y)}catch(J){oQ($,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function E$(Q){if(!/^[A-Za-z0-9._-]+$/.test(Q))return null;if(o6.has(Q))return o6.get(Q)??null;let $=aZ(Q),Z=$?VJ(Q,$):null;return o6.set(Q,Z),Z}function aZ(Q){let Z=rZ(Q)?.paths.find((Y)=>s(Y));if(Z)return Z;if(!q$().some((Y)=>Y.iconName===Q))return null;let J=p(FQ,`${Q}.icns`);return s(J)?J:null}function rZ(Q){return Object.prototype.hasOwnProperty.call(z$,Q)?z$[Q]:null}function sZ(Q){let $=j$(Q);if(!s($))return null;let Z=T$($);if(!Z?.chromeIdentifier)return null;let J=O$(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=a6(J.identifier,J.compositeImage);let X=J.compositeImage?LJ(J.identifier,J.compositeImage):null,G=(X&&Z.framebufferMaskSize?MJ(Z.framebufferMaskSize,X):null)??Z.screenSize??(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 H=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},W={x:J.devicePadding.left,y:J.devicePadding.top,width:H.width,height:H.height},z={width:H.width+J.devicePadding.left+J.devicePadding.right,height:H.height+J.devicePadding.top+J.devicePadding.bottom},K={x:W.x+(H.width-G.width)/2,y:W.y+(H.height-G.height)/2,width:G.width,height:G.height},M=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,L=J.slice?a6(J.identifier,J.slice.topLeft):null,T=J.identifier.startsWith("watch"),j=J.buttons.flatMap((O)=>{let A=a6(J.identifier,O.image);if(!A)return[];let D=XJ(O,A,H,J.devicePadding),q={x:A.width>0?(O.rolloverOffset.x-O.normalOffset.x)/A.width:0,y:A.height>0?(O.rolloverOffset.y-O.normalOffset.y)/A.height:0};return[{name:O.name,image:O.image,imageDown:O.imageDown,onTop:O.onTop||T,frame:{...D,...A},hover:q,usagePage:O.usagePage,usage:O.usage}]});return{identifier:J.identifier,frame:z,body:W,screen:K,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:M,compositeImage:J.compositeImage,slice:J.slice,corner:L,buttons:j}}function T$(Q){let $=g4(Q);if(!$)return null;let Z=typeof $.chromeIdentifier==="string"?$.chromeIdentifier:null,J=Z?c4(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof $.modelIdentifier==="string"?$.modelIdentifier:null,productClass:typeof $.productClass==="string"?$.productClass:null,screenSize:J?iZ({...$,__profileDir:r6(Q)},J):null,framebufferMaskSize:tZ({...$,__profileDir:r6(Q)})}}function tZ(Q){let $=typeof Q.framebufferMask==="string"?Q.framebufferMask:null,Z=typeof Q.__profileDir==="string"?Q.__profileDir:null;if(!$||!Z)return null;let J=p(Z,`${$}.pdf`);if(!s(J))return null;return t6(BQ(J))}function e6(Q){return GJ(Q.deviceTypeIdentifier)??Q.name}function eZ(Q){let $=j$(e6(Q));return s($)?$:null}function j$(Q){return p(s6,`${Q}.simdevicetype`,"Contents","Resources","profile.plist")}function QJ(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 q$())if(Z.modelCodes.some((J)=>$.has(J)))return Z.iconName;return null}function $J(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 q$(){if(i6)return i6;let Q=g4(p(FQ,"MobileDevices-Info.plist"))??g4(p(r6(FQ),"Info.plist")),$=Array.isArray(Q?.UTExportedTypeDeclarations)?Q.UTExportedTypeDeclarations:[],Z=[];for(let J of $){let Y=GQ(J),X=a(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=p(FQ,X);if(!s(G))continue;let W=GQ(Y.UTTypeTagSpecification)["com.apple.device-model-code"],z=Array.isArray(W)?W.filter((K)=>typeof K==="string"&&K.length>0):[];if(z.length===0)continue;Z.push({description:a(Y.UTTypeDescription)??"",iconFile:X,iconName:R$(X,".icns"),modelCodes:z})}return i6=Z,Z}function O$(Q){let $=c4(Q);if(!/^[A-Za-z0-9_-]+$/.test($))return null;if(p6.has($))return p6.get($)??null;let Z=p(U$,`${$}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(BQ(Z,"utf-8"));J=ZJ(Y)}catch{J=null}return p6.set($,J),J}function ZJ(Q){let $=typeof Q.identifier==="string"?Q.identifier:null;if(!$)return null;let Z=c4($),J=GQ(Q.images),Y=GQ(J.sizing),X=GQ(Q.paths),G=_Q(GQ(X.simpleOutsideBorder).cornerRadiusX),H={top:_Q(Y.topHeight),left:_Q(Y.leftWidth),bottom:_Q(Y.bottomHeight),right:_Q(Y.rightWidth)},W=GQ(J.devicePadding),z={top:_Q(W.top),left:_Q(W.left),bottom:_Q(W.bottom),right:_Q(W.right)},K=typeof J.composite==="string"?J.composite:null,M=JJ(J),L=Array.isArray(Q.inputs)?Q.inputs.flatMap((j)=>{let O=YJ(GQ(j));return O?[O]:[]}):[],T=new Set;for(let j of Object.values(J))if(typeof j==="string")T.add(j);for(let j of L)T.add(j.image);if(Array.isArray(Q.inputs))for(let j of Q.inputs){let O=GQ(j);if(typeof O.imageDown==="string")T.add(O.imageDown)}return{identifier:Z,insets:H,devicePadding:z,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(H.left,H.top),0),compositeImage:K,slice:M,buttons:L,allowedImages:T}}function JJ(Q){let $=a(Q.topLeft),Z=a(Q.top),J=a(Q.topRight),Y=a(Q.right),X=a(Q.bottomRight),G=a(Q.bottom),H=a(Q.bottomLeft),W=a(Q.left);if(!$||!Z||!J||!Y||!X||!G||!H||!W)return null;return{topLeft:$,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:H,left:W}}function YJ(Q){let $=a(Q.name),Z=a(Q.image);if(!$||!Z)return null;let J=a(Q.anchor),Y=a(Q.align),X=GQ(Q.offsets),G=K$(GQ(X.normal)),H=K$(GQ(X.rollover));return{name:$,image:Z,imageDown:a(Q.imageDown),onTop:Q.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??H??{x:0,y:0},rolloverOffset:H??G??{x:0,y:0},usagePage:EQ(Q.usagePage),usage:EQ(Q.usage)}}function XJ(Q,$,Z,J){let{left:Y,top:X}=J,G=2*Q.normalOffset.x-Q.rolloverOffset.x,H=2*Q.normalOffset.y-Q.rolloverOffset.y,W=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+H};case"top":return{x:W,y:X+H-$.height};case"bottom":return{x:W,y:X+Z.height+H}}}function GJ(Q){if(!Q)return null;if(!m6)m6=zJ();return m6.get(Q)??null}function zJ(){let Q=new Map;try{for(let $ of pZ(s6)){if(!$.endsWith(".simdevicetype"))continue;let Z=p(s6,$),J=g4(p(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:R$($,".simdevicetype");if(Y)Q.set(Y,X)}}catch{}return Q}function g4(Q){try{let $=u4("plutil",["-convert","json","-o","-",Q],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse($)}catch{return null}}function KJ(Q){let $=EQ(Q.mainScreenWidth),Z=EQ(Q.mainScreenHeight),J=EQ(Q.mainScreenScale);if(!$||!Z||!J||J<=0)return null;return{width:$/J,height:Z/J}}function WJ(Q){if(Q.startsWith("phone"))return 3;if(Q.startsWith("tablet"))return 2;if(Q.startsWith("watch"))return 2;return 1}function a6(Q,$){let Z=Q8(Q,$);if(!s(Z))return null;return t6(BQ(Z))}function Q8(Q,$){return p(U$,`${Q}.devicechrome`,"Contents","Resources",`${$}.pdf`)}function D$(Q,$,Z){V$(X$,{recursive:!0});let J=M$(Z),Y=W$("sha1").update(Q).update("\x00").update($).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=p(X$,`${Q}-${Y}.png`);if(s(X))return X;let G=`${X}.${process.pid}.tmp`;return u4("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),H$(G,X),X}function VJ(Q,$){V$(G$,{recursive:!0});let Z=M$($),J=W$("sha1").update(Q).update("\x00").update($).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=p(G$,`${Q}-${J}.png`);if(s(Y)){let H=l4(BQ(Y));return{sourcePath:$,pngPath:Y,width:H.width,height:H.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{u4("sips",["-s","format","png",$,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let H=BQ(G),W=HJ(H)??{x:0,y:0,...l4(H)};return u4("sips",["-c",String(W.height),String(W.width),"--cropOffset",String(W.y),String(W.x),"-s","format","png",$,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),H$(X,Y),{sourcePath:$,pngPath:Y,width:W.width,height:W.height}}finally{try{if(s(G))J$(G)}catch{}try{if(s(X))J$(X)}catch{}}}function l4(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 A$(Q,$){let{width:Z,height:J}=l4(Q),Y=8,X=0,G=0,H=[];while(Y<Q.byteLength){let O=Q.readUInt32BE(Y);Y+=4;let A=Q.toString("ascii",Y,Y+4);Y+=4;let D=Q.subarray(Y,Y+O);if(Y+=O+4,A==="IHDR")X=D[8]??0,G=D[9]??0;else if(A==="IDAT")H.push(D);else if(A==="IEND")break}let W=G===6?4:G===4?2:0;if(X!==8||W===0||H.length===0)return null;let z=G===6,K=dZ(Buffer.concat(H)),M=Z*W,L=new Uint8Array(Z*J),T=Buffer.alloc(M),j=0;for(let O=0;O<J;O++){let A=K[j++]??0,D=Buffer.from(K.subarray(j,j+M));j+=M,UJ(D,T,W,A);for(let q=0;q<Z;q++){let E=q*W,N=D[E]??0,B=z?D[E+1]??0:N,R=z?D[E+2]??0:N,V=D[E+W-1]??0;if($(N,B,R,V))L[O*Z+q]=1}T=D}return{width:Z,height:J,mask:L}}function HJ(Q){let{width:$,height:Z}=l4(Q),J=A$(Q,(W,z,K,M)=>M>0);if(!J)return{x:0,y:0,width:$,height:Z};let Y=$,X=Z,G=-1,H=-1;for(let W=0;W<Z;W++)for(let z=0;z<$;z++){if(!J.mask[W*$+z])continue;if(z<Y)Y=z;if(W<X)X=W;if(z>G)G=z;if(W>H)H=W}if(G<Y||H<X)return{x:0,y:0,width:$,height:Z};return{x:Y,y:X,width:G-Y+1,height:H-X+1}}function MJ(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 LJ(Q,$){let Z=RJ(Q,$);if(!Z)return null;let J=A$(Z,(q,E,N,B)=>B>200&&q<30&&E<30&&N<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,H=Math.floor(Y/2),W=Math.floor(X/2),z=(q,E)=>q>=0&&E>=0&&q<Y&&E<X&&G[E*Y+q]===1;if(!z(H,W))return null;let K=H;while(K>0&&z(K-1,W))K--;let M=H;while(M<Y-1&&z(M+1,W))M++;let L=W;while(L>0&&z(H,L-1))L--;let T=W;while(T<X-1&&z(H,T+1))T++;let j=T-L,O=(q,E)=>{let N=0;while(N<j&&!z(q,E?L+N:T-N))N++;return N},A=[O(K,!0),O(M,!0),O(K,!1),O(M,!1)],D=A.reduce((q,E)=>q+E,0)/A.length;return{x:K,y:L,width:M-K+1,height:T-L+1,radius:D}}function RJ(Q,$){let Z=Q8(Q,$);if(!s(Z))return null;try{return BQ(D$(Q,$,Z))}catch{return null}}function UJ(Q,$,Z,J){for(let Y=0;Y<Q.byteLength;Y++){let X=Y>=Z?Q[Y-Z]:0,G=$[Y]??0,H=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]+_J(X,G,H)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function _J(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 oQ(Q,$,Z){Q.writeHead($,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({ok:!1,error:Z}))}function _Q(Q){return EQ(Q)??0}function EQ(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 a(Q){return typeof Q==="string"&&Q?Q:null}function GQ(Q){return Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{}}function K$(Q){let $=EQ(Q.x),Z=EQ(Q.y);return $===null||Z===null?null:{x:$,y:Z}}var s6="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",U$="/Library/Developer/DeviceKit/Chrome",Y$="com.apple.dt.devicekit.chrome.",X$,G$,FQ="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",nZ="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",z$,m6=null,p6,d6,n6,i6=null,o6;var C$=XQ(()=>{X$=p(L$(),"serve-sim-devicekit-chrome"),G$=p(L$(),"serve-sim-device-placeholder-assets"),z$={"vision-pro":{paths:[p(FQ,"com.apple.vision-pro.icns"),p(nZ,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[p(FQ,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[p(FQ,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[p(FQ,"com.apple.ipad-air-m3-1.icns")]}},p6=new Map,d6=new Map,n6=new Map,o6=new Map});import{exec as BJ}from"child_process";import{createHash as P$,timingSafeEqual as NJ}from"crypto";import{request as FJ}from"http";import{WebSocketServer as EJ}from"ws";function qJ(Q,$){let Z=P$("sha256").update(Q).digest(),J=P$("sha256").update($).digest();return NJ(Z,J)}function OJ(Q,$,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(z)=>{if(Q.readyState===Q.OPEN)Q.send(JSON.stringify(z))},H=setTimeout(()=>{if(!J)Q.close()},TJ);H.unref?.();let W=(z,K)=>{if(Y.has(z))return;let M=K.split("?")[0];if(!K.startsWith("/")||!X.some((T)=>M===T)){G({sub:z,end:!0,error:"path not allowed"});return}if(!$){G({sub:z,end:!0,error:"no local port"});return}let L=FJ({host:"127.0.0.1",port:$,path:K,headers:{accept:"text/event-stream"}},(T)=>{T.on("data",(j)=>G({sub:z,data:j.toString("utf-8")})),T.on("end",()=>{Y.delete(z),G({sub:z,end:!0})})});L.on("error",()=>{Y.delete(z),G({sub:z,end:!0})}),L.end(),Y.set(z,{destroy:()=>L.destroy()})};Q.on("message",(z)=>{let K;try{K=JSON.parse(z.toString())}catch{return}if(!J){if(typeof K.token==="string"&&qJ(K.token,Z.execToken))J=!0,clearTimeout(H),G({ready:!0});else Q.close();return}if(typeof K.unsub==="number"){Y.get(K.unsub)?.destroy(),Y.delete(K.unsub);return}if(typeof K.sub==="number"&&typeof K.path==="string"){W(K.sub,K.path);return}if(typeof K.id==="number"&&K.ui!==void 0){let{id:T}=K;if(!Z.onUiRequest){G({id:T,error:"ui requests not supported"});return}Z.onUiRequest(K.ui).then((j)=>G({id:T,...j})).catch((j)=>G({id:T,error:j instanceof Error?j.message:String(j)}));return}if(typeof K.id!=="number"||typeof K.command!=="string"||!K.command)return;let{id:M,command:L}=K;BJ(L,{maxBuffer:16777216},(T,j,O)=>{G({id:M,stdout:j.toString(),stderr:O.toString(),exitCode:T?T.code??1:0})})}),Q.on("error",()=>Q.close()),Q.on("close",()=>{clearTimeout(H);for(let z of Y.values())z.destroy();Y.clear()})}function I$(Q){let $=new EJ({noServer:!0,maxPayload:jJ});return function(J,Y,X){let G=J.url??"",H=G.indexOf("?"),W=H===-1?G:G.slice(0,H);if(W!==Q.path&&W!==`${Q.path}/`)return!1;let z=J.headers.origin;if(z)try{if(new URL(z).host!==J.headers.host)return Y.destroy(),!0}catch{return Y.destroy(),!0}let K=Y.localPort;if(!K){let M=Number((J.headers.host??"").split(":")[1]);if(Number.isFinite(M)&&M>0)K=M}return $.handleUpgrade(J,Y,X,(M)=>{OJ(M,K,Q)}),!0}}var TJ=1e4,jJ=4194304;var x$=()=>{};var G0={};a8(G0,{startCdpServer:()=>i1,startBunCdpServer:()=>e1,listTargets:()=>Q2,listDevices:()=>Y0});import{createRequire as DJ}from"node:module";import*as l$ from"node:net";import*as d$ from"node:net";import{spawnSync as oJ}from"node:child_process";import*as o$ from"node:tls";import*as t$ from"node:http";function xJ(Q){return this[Q]}function S$(Q){return Q.replace(/[&<>'"]/g,($)=>$==="&"?"&amp;":$==="<"?"&lt;":$===">"?"&gt;":$==="'"?"&apos;":"&quot;")}function uJ(Q){let $="";for(let Z=0;Z<Q.length;Z++)$+=String.fromCharCode(Q[Z]);return btoa($)}function gJ(Q){let $=atob(Q.replace(/\s+/g,"")),Z=new Uint8Array($.length);for(let J=0;J<$.length;J++)Z[J]=$.charCodeAt(J);return Z}function G8(Q,$){if(Q===null||Q===void 0)return`${$}<string></string>`;if(typeof Q==="boolean")return`${$}<${Q?"true":"false"}/>`;if(typeof Q==="string")return`${$}<string>${S$(Q)}</string>`;if(typeof Q==="number"){if(Number.isInteger(Q))return`${$}<integer>${Q}</integer>`;return`${$}<real>${Q}</real>`}if(typeof Q==="bigint")return`${$}<integer>${Q.toString()}</integer>`;if(Q instanceof Uint8Array)return`${$}<data>${uJ(Q)}</data>`;if(Q instanceof Date)return`${$}<date>${Q.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray(Q)){if(Q.length===0)return`${$}<array/>`;let Y=Q.map((X)=>G8(X,$+"\t")).join(`
60
60
  `);return`${$}<array>
61
61
  ${Y}
62
- ${$}</array>`}let Z=Object.keys(Q);if(Z.length===0)return`${$}<dict/>`;let J=Z.map((Y)=>`${$} <key>${w$(Y)}</key>
63
- `+X8(Q[Y],$+"\t")).join(`
62
+ ${$}</array>`}let Z=Object.keys(Q);if(Z.length===0)return`${$}<dict/>`;let J=Z.map((Y)=>`${$} <key>${S$(Y)}</key>
63
+ `+G8(Q[Y],$+"\t")).join(`
64
64
  `);return`${$}<dict>
65
65
  ${J}
66
- ${$}</dict>`}function U8(Q){let $=X8(Q,"");return new TextEncoder().encode(bJ+$+vJ)}class c${src;pos=0;constructor(Q){this.src=Q}skip(){while(this.pos<this.src.length){let Q=this.src[this.pos];if(Q===" "||Q==="\t"||Q===`
67
- `||Q==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let $=this.src.indexOf("-->",this.pos+4);if($<0)throw Error("unterminated comment");this.pos=$+3}else if(this.src.startsWith("<?",this.pos)){let $=this.src.indexOf("?>",this.pos+2);if($<0)throw Error("unterminated processing instruction");this.pos=$+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let $=0;while(this.pos<this.src.length){let Z=this.src[this.pos++];if(Z==="[")$++;else if(Z==="]")$--;else if(Z===">"&&$===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 Q=this.src.indexOf(">",this.pos);if(Q<0)throw Error("unterminated tag");let $=this.src.slice(this.pos+1,Q);this.pos=Q+1;let Z=$.startsWith("/"),J=$.endsWith("/");return{name:$.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:J,isClose:Z}}readText(){let Q=this.src.indexOf("<",this.pos),$=Q<0?this.src.slice(this.pos):this.src.slice(this.pos,Q);return this.pos=Q<0?this.src.length:Q,$.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function z8(Q,$){let Z=(J)=>{let Y=Q.nextTag();if(!Y||!Y.isClose||Y.name!==J)throw Error(`expected </${J}>`)};switch($){case"true":case"false":throw Error(`<${$}> must be self-closing`);case"string":case"key":{let J=Q.readText();return Z($),J}case"integer":{let J=Q.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(Q.readText().trim());return Z("real"),J}case"data":{let J=uJ(Q.readText());return Z("data"),J}case"date":{let J=new Date(Q.readText().trim());return Z("date"),J}case"array":{let J=[];while(!0){let Y=Q.nextTag();if(!Y)throw Error("unterminated <array>");if(Y.isClose&&Y.name==="array")return J;J.push(Y.selfClose?K8(Y.name):z8(Q,Y.name))}}case"dict":{let J={};while(!0){let Y=Q.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=Q.readText();Z("key");let X=Q.nextTag();if(!X)throw Error("unterminated <dict>");J[G]=X.selfClose?K8(X.name):z8(Q,X.name)}}default:throw Error(`unknown plist tag <${$}>`)}}function K8(Q){if(Q==="true")return!0;if(Q==="false")return!1;if(Q==="string")return"";if(Q==="data")return new Uint8Array(0);if(Q==="array")return[];if(Q==="dict")return{};throw Error(`self-closing <${Q}/> not supported`)}function d4(Q){let $=typeof Q==="string"?Q:new TextDecoder().decode(Q),Z=new c$($);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?K8(J.name):z8(Z,J.name)}function xQ(Q,$,Z){let J=0;for(let Y=0;Y<Z;Y++)J=J*256+Q[$+Y];return J}function gJ(Q){if(Q.length<41)throw Error("bplist too short");let $=new TextDecoder().decode(Q.slice(0,8));if($!=="bplist00")throw Error(`bad magic: ${$}`);let Z=Q.length-32,J=Q[Z+6],Y=Q[Z+7],G=xQ(Q,Z+8,8),X=xQ(Q,Z+16,8),H=xQ(Q,Z+24,8),W=Array(G);for(let M=0;M<G;M++)W[M]=xQ(Q,H+M*J,J);function z(M){return xQ(Q,M,Y)}function K(M){let L=W[M],T=Q[L],j=T>>4,q=T&15;function D(A){if(q!==15)return{len:q,next:A};let O=Q[A];if((O&240)!==16)throw Error("expected int marker for length");let E=1<<(O&15);return{len:xQ(Q,A+1,E),next:A+1+E}}switch(j){case 0:if(q===0)return null;if(q===8)return!1;if(q===9)return!0;if(q===15)return null;throw Error(`unknown singleton ${q}`);case 1:{let A=1<<q,O=xQ(Q,L+1,A);if(A===8&&O>Number.MAX_SAFE_INTEGER)return BigInt(O);return O}case 2:{let A=1<<q,O=new DataView(Q.buffer,Q.byteOffset+L+1,A);return A===4?O.getFloat32(0,!1):O.getFloat64(0,!1)}case 3:{let O=new DataView(Q.buffer,Q.byteOffset+L+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+O*1000)}case 4:{let{len:A,next:O}=D(L+1);return Q.slice(O,O+A)}case 5:{let{len:A,next:O}=D(L+1);return new TextDecoder("ascii").decode(Q.slice(O,O+A))}case 6:{let{len:A,next:O}=D(L+1),E=Q.slice(O,O+A*2),N=new Uint8Array(E.length);for(let B=0;B<E.length;B+=2)N[B]=E[B+1],N[B+1]=E[B];return new TextDecoder("utf-16le").decode(N)}case 10:{let{len:A,next:O}=D(L+1),E=[];for(let N=0;N<A;N++)E.push(K(z(O+N*Y)));return E}case 13:{let{len:A,next:O}=D(L+1),E={};for(let N=0;N<A;N++){let B=K(z(O+N*Y)),U=K(z(O+(A+N)*Y));if(typeof B!=="string")throw Error(`non-string dict key: ${typeof B}`);E[B]=U}return E}default:throw Error(`unknown bplist marker 0x${T.toString(16)} at ${L}`)}}return K(X)}function lJ(Q){if(Q.length>=8){if(new TextDecoder().decode(Q.slice(0,8))==="bplist00")return gJ(Q)}return d4(Q)}class n4{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push(Q){if(Q.length===0)return;this.chunks.push(Q),this.size+=Q.length,this.drain()}close(Q){this.closed=!0,this.closeErr=Q??null;for(let $ of this.waiters)$.reject(Q??Error("stream closed"));this.waiters=[]}read(Q){return new Promise(($,Z)=>{if(this.closed&&this.size<Q){Z(this.closeErr??Error("stream closed"));return}this.waiters.push({n:Q,resolve:$,reject:Z}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let Q=this.waiters.shift(),$=new Uint8Array(Q.n),Z=0;while(Z<Q.n){let J=this.chunks[0],Y=Q.n-Z;if(J.length<=Y)$.set(J,Z),Z+=J.length,this.chunks.shift();else $.set(J.subarray(0,Y),Z),this.chunks[0]=J.subarray(Y),Z+=Y}this.size-=Q.n,Q.resolve($)}}}function R8(Q,$){let Z=(G)=>{$.push(new Uint8Array(G.buffer,G.byteOffset,G.byteLength))},J=()=>$.close(),Y=(G)=>$.close(G);return Q.on("data",Z),Q.on("close",J),Q.on("error",Y),()=>{Q.off("data",Z),Q.off("close",J),Q.off("error",Y)}}async function _8(){let Q=new n4;return new Promise(($,Z)=>{let J=l$.createConnection({path:pJ}),Y=(G)=>{Q.close(G),Z(G)};J.once("error",Y),J.once("connect",()=>{J.off("error",Y);let G=R8(J,Q);$({socket:J,stream:Q,detach:G})})})}async function dJ(Q){let $=await Q.read(4),Z=new DataView($.buffer,$.byteOffset,4).getUint32(0,!0);return(await Q.read(Z-4)).slice(12)}function nJ(Q,$,Z){let J=16+Z.length,Y=new Uint8Array(16),G=new DataView(Y.buffer);G.setUint32(0,J,!0),G.setUint32(4,cJ,!0),G.setUint32(8,mJ,!0),G.setUint32(12,$,!0),Q.write(Y),Q.write(Z)}async function B8(Q,$,Z,J){let Y=U8({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...J});nJ(Q,Z,Y);let G=await dJ($);return d4(G)}async function m$(){let{socket:Q,stream:$}=await _8();try{return(await B8(Q,$,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{Q.end()}}async function p$(Q){let{socket:$,stream:Z}=await _8();try{let Y=(await B8($,Z,1,{MessageType:"ReadPairRecord",PairRecordID:Q})).PairRecordData;if(!Y)throw Error(`no pair record for ${Q} — pair the device first (open Finder/iTunes, tap "Trust")`);return d4(Y)}finally{$.end()}}async function S$(Q,$){let{socket:Z,stream:J,detach:Y}=await _8(),G=($&255)<<8|$>>8&255,X=await B8(Z,J,1,{MessageType:"Connect",DeviceID:Q,PortNumber:G});if(X.MessageType!=="Result"||X.Number!==0){Z.end();let H=X.Number??"?";throw Error(`Connect to device ${Q} port ${$} failed (code ${H})`)}return{socket:Z,stream:J,detach:Y}}async function n$(){let Q=iJ("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if(Q.status!==0||!Q.stdout)return[];let $=Q.stdout.toString("utf8"),Z=new Map;for(let J of $.split(`
68
- `)){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 i$(Q){let $=new n4;return new Promise((Z,J)=>{let Y=d$.createConnection({path:Q}),G=(X)=>{$.close(X),J(X)};Y.once("error",G),Y.once("connect",()=>{Y.off("error",G),R8(Y,$),Z({socket:Y,stream:$})})})}async function $8(Q){let $=await Q.read(4),Z=new DataView($.buffer,$.byteOffset,4).getUint32(0,!1),J=await Q.read(Z);return d4(J)}function Z8(Q,$){let Z=U8({Label:"inspect-webkit",...$}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),Q.write(J),Q.write(Z)}function J8(Q,$){if(Q.Error)throw Error(`lockdown ${$} error: ${String(Q.Error)}`);if(Q.Request!==$)throw Error(`lockdown expected Request=${$}, got ${String(Q.Request)}`)}function f$(Q,$,Z,J){return new Promise((Y,G)=>{$();let X=new n4,H=o$.connect({socket:Q,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),W=(z)=>{zQ(`${J} tls error:`,z),X.close(z),G(z)};H.once("error",W),H.once("secureConnect",()=>{zQ(`${J} tls handshake complete`),H.off("error",W);let z=R8(H,X);Y({socket:H,stream:X,detach:z})})})}class i4{socket;stream;pair;udid;deviceID;detach;constructor(Q,$,Z,J,Y,G){this.socket=Q,this.stream=$,this.pair=Z,this.udid=J,this.deviceID=Y,this.detach=G}static async open(Q,$){zQ("connecting usbmux tunnel to lockdown port",y$);let{socket:Z,stream:J,detach:Y}=await S$(Q.DeviceID,y$),G=new i4(Z,J,$,Q.Properties.SerialNumber,Q.DeviceID,Y);zQ("sending QueryType"),Z8(Z,{Request:"QueryType"});let X=await $8(J);if(zQ("QueryType reply:",X),J8(X,"QueryType"),X.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(X.Type)}`);return G}async startSession(){zQ("StartSession with HostID",this.pair.HostID),Z8(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let Q=await $8(this.stream);if(zQ("StartSession reply:",Q),J8(Q,"StartSession"),Q.EnableSessionSSL){zQ("upgrading to TLS");let $=await f$(this.socket,this.detach,this.pair,"lockdown");this.socket=$.socket,this.stream=$.stream,this.detach=$.detach,zQ("TLS upgrade complete")}}async startService(Q){zQ("StartService",Q),Z8(this.socket,{Request:"StartService",Service:Q});let $=await $8(this.stream);return zQ("StartService reply:",$),J8($,"StartService"),{port:$.Port,enableServiceSSL:Boolean($.EnableServiceSSL),service:Q}}async connectService(Q){zQ("connecting service tunnel to port",Q.port,"ssl=",Q.enableServiceSSL);let{socket:$,stream:Z,detach:J}=await S$(this.deviceID,Q.port);if(!Q.enableServiceSSL)return{socket:$,stream:Z};let Y=await f$($,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function oJ(Q){let $=await Q.read(4),Z=new DataView($.buffer,$.byteOffset,4).getUint32(0,!1),J=await Q.read(Z);return lJ(J)}function aJ(Q,$){let Z=U8($),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),Q.write(J),Q.write(Z)}function rJ(){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 M4{socket;stream;connectionId=rJ();subscribers=new Set;reading;constructor(Q,$){this.socket=Q,this.stream=$,this.reading=(async()=>{try{while(!$.closed){let Z=await oJ($);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(()=>{G(),J(Error(`timeout waiting for ${Q} after ${$}ms`))},$),G=this.subscribe((X)=>{if(X.__selector===Q)clearTimeout(Y),G(),Z(X)})})}send(Q,$){aJ(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,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(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 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: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 m4{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 G of J){if(!Y)break;Y=await G(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 G=$.params?.targetInfo;if(G?.type==="page"&&!this.innerTargetId)this.innerTargetId=G.targetId,this.flushQueue();return}if($.method==="Target.didCommitProvisionalTarget"){let G=$.params?.newTargetId;if(typeof G==="string")this.innerTargetId=G;return}if($.method==="Target.targetDestroyed")return;if($.method==="Target.dispatchMessageFromTarget"){let G=$.params?.message;if(typeof G==="string")return this.onMessageFromTarget(G);return}if(typeof $.id==="number"&&this.wrappedAckIds.has($.id)){this.wrappedAckIds.delete($.id);return}if(typeof $.id==="number"){let G=this.adapterRequestMap.get($.id);if(G){if(this.adapterRequestMap.delete($.id),"error"in $&&$.error)G.reject($.error);else G.resolve($.result??{});return}let X=this.toolRequestMap.get($.id);if(X){this.toolRequestMap.delete($.id);let H=`target::${X}`;if("error"in $&&this.filters.has("target::error"))H="target::error";let W=this.filters.get(H);if(!W)return this.sendToTools(Q);let z=$;for(let K of W){if(!z)break;z=await K(z)}if(z)this.sendToTools(JSON.stringify(z));return}return this.sendToTools(Q)}let Z=`target::${$.method}`,J=this.filters.get(Z);if(!J)return this.sendToTools(Q);let Y=$;for(let G of J){if(!Y)break;Y=await G(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 tJ(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function b(Q,$,Z){return Q.fireResultToTools($.id,Z),Promise.resolve(null)}function eJ(Q,$){Q.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>b(Q,Z,{result:!1})),Q.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>b(Q,Z,{})),Q.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>b(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 G of Y.scopeChain)if(!G.object&&G.value)G.object=G.value}}return Promise.resolve(Z)}),Q.addMessageFilter("tools::Debugger.setBlackboxedRanges",(Z)=>b(Q,Z,{})),Q.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>b(Q,Z,{})),Q.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function Q1(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),G=!!(J.isPageContext||J.type==="normal");if(Number.isFinite(Y)&&Y>0){if(!$.pageExecCtx.id||G&&!$.pageExecCtx.isPage)$.pageExecCtx.id=Y,$.pageExecCtx.isPage=G}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 b(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((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)}),Q.addMessageFilter("tools::Runtime.compileScript",(Z)=>b(Q,Z,{scriptId:null,exceptionDetails:null})),Q.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>b(Q,Z,{names:[]})),Q.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>b(Q,Z,{})),Q.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>b(Q,Z,{id:"inspect-webkit"})),Q.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>b(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)=>b(Q,Z,{})),Q.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>b(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 $1(Q,$){Q.addMessageFilter("tools::Log.startViolationsReport",(Z)=>b(Q,Z,{})),Q.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>b(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??{},G=(Array.isArray(J.stackTrace)?J.stackTrace:Array.isArray(J.stackTrace?.callFrames)?J.stackTrace.callFrames:[]).map((W)=>({functionName:W.functionName??"",scriptId:W.scriptId??"",url:W.url??"",lineNumber:Number(W.lineNumber??0),columnNumber:Number(W.columnNumber??0)})),X=G.length?{callFrames:G}:void 0,H=Date.now();if(J.source==="console-api"){let W=J.type==="log"?J.level??"log":J.type??"log",z=Z1(W),K=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],M={type:z,args:K,executionContextId:$.pageExecCtx.id||1,timestamp:H,stackTrace:X};return $.lastConsoleApiCalled.value=M,Q.fireEventToTools("Runtime.consoleAPICalled",M),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return Q.fireEventToTools("Runtime.exceptionThrown",{timestamp:H,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:X,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return Q.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:J1(J.level??J.type??"log"),text:String(J.text??""),timestamp:H,url:J.url,lineNumber:J.line,stackTrace:X,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 Z1(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 J1(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 Y1(Q){let $=new Set;Q.addMessageFilter("tools::DOM.enable",(Z)=>b(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((G)=>Q.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:G}).then((X)=>X.nodeId).catch(()=>G)));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 G=await Q.callTarget("DOM.requestNode",{objectId:Y});Q.fireResultToTools(Z.id,{nodeId:G.nodeId,backendNodeId:G.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 G1(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((G)=>({type:G.type,useCapture:!!G.useCapture,passive:!!G.passive,once:!!G.once,location:G.location,handler:G.handler}));Q.fireResultToTools($.id,{listeners:Y})}catch(Z){Q.fireErrorToTools($.id,{message:Z?.message??String(Z)})}return null}),Q.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",($)=>b(Q,$,{})),Q.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",($)=>b(Q,$,{})),Q.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",($)=>b(Q,$,{})),Q.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",($)=>b(Q,$,{}))}function X1(Q,$){Q.addMessageFilter("tools::Page.setOverlayMessage",(G)=>{return G.method="Debugger.setOverlayMessage",Promise.resolve(G)}),Q.addMessageFilter("tools::Page.configureOverlay",(G)=>{return G.method="Debugger.setOverlayMessage",Promise.resolve(G)}),Q.addMessageFilter("tools::Page.getNavigationHistory",async(G)=>{try{let X=await Q.callTarget("Runtime.evaluate",{expression:"window.location.href"}),H=await Q.callTarget("Runtime.evaluate",{expression:"document.title"});Q.fireResultToTools(G.id,{currentIndex:0,entries:[{id:0,url:X.result?.value??"",userTypedURL:X.result?.value??"",title:H.result?.value??"",transitionType:"link"}]})}catch(X){Q.fireErrorToTools(G.id,{message:X?.message??String(X)})}return null}),Q.addMessageFilter("target::Page.frameNavigated",(G)=>{return r$(G.params?.frame),Promise.resolve(G)}),Q.addMessageFilter("target::Page.getResourceTree",(G)=>{return W8(G.result?.frameTree),Promise.resolve(G)}),Q.addMessageFilter("tools::Page.getFrameTree",async(G)=>{if(typeof G.id!=="number")return null;try{let X=await Q.callTarget("Page.getResourceTree",{}),H=s$(X?.frameTree);W8(H),Q.fireResultToTools(G.id,{frameTree:H})}catch(X){Q.fireErrorToTools(G.id,{message:X?.message??String(X)})}return null}),Q.addMessageFilter("tools::Page.createIsolatedWorld",(G)=>{if(typeof G.id!=="number")return Promise.resolve(null);return b(Q,G,{executionContextId:$.pageExecCtx.id||1})});let Z=1;Q.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(G)=>b(Q,G,{identifier:`pptr-${Z++}`})),Q.addMessageFilter("tools::WebMCP.enable",(G)=>b(Q,G,{})),Q.addMessageFilter("tools::WebMCP.disable",(G)=>b(Q,G,{})),Q.addMessageFilter("tools::Page.captureScreenshot",(G)=>{return Q.fireErrorToTools(G.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),Q.addMessageFilter("tools::Page.startScreencast",(G)=>b(Q,G,{})),Q.addMessageFilter("tools::Page.stopScreencast",(G)=>b(Q,G,{})),Q.addMessageFilter("tools::Page.screencastFrameAck",(G)=>b(Q,G,{})),Q.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(G)=>b(Q,G,{}));let J="",Y="0.1";Q.addMessageFilter("target::Page.frameNavigated",(G)=>{let X=G.params?.frame;if(X)Y=X.id??Y,J=X.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(G)}),Q.addMessageFilter("target::Page.domContentEventFired",(G)=>{return Q.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"DOMContentLoaded",timestamp:G.params?.timestamp??0}),Promise.resolve(G)}),Q.addMessageFilter("target::Page.loadEventFired",(G)=>{return Q.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"load",timestamp:G.params?.timestamp??0}),Q.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkAlmostIdle",timestamp:G.params?.timestamp??0}),Q.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkIdle",timestamp:G.params?.timestamp??0}),Q.fireEventToTools("Page.frameStoppedLoading",{frameId:Y}),Promise.resolve(G)})}function r$(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 W8(Q){if(!Q)return;if(r$(Q.frame),Array.isArray(Q.childFrames))Q.childFrames.forEach(W8)}function s$(Q){if(!Q)return Q;let $={frame:Q.frame};if(Array.isArray(Q.childFrames))$.childFrames=Q.childFrames.map(s$);return $}function z1(Q){Q.addMessageFilter("tools::Overlay.enable",($)=>b(Q,$,{})),Q.addMessageFilter("tools::Overlay.disable",($)=>b(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 K1(Q){Q.addMessageFilter("tools::Emulation.canEmulate",($)=>b(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",($)=>b(Q,$,{})),Q.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",($)=>b(Q,$,{})),Q.addMessageFilter("tools::Emulation.setUserAgentOverride",($)=>{let Z=$.params?.userAgent??"";return $.method="Page.overrideUserAgent",$.params={value:Z},Promise.resolve($)}),Q.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",($)=>b(Q,$,{})),Q.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",($)=>b(Q,$,{}))}function Y8(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 _1(Q){if(!Q)return Q;return{...U1,...Q,hasPostData:Q.postData!=null}}function B1(Q){if(!Q)return Q;let $=0,Z=Q.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)$=Number(J)||0;return{...R1,...Q,fromDiskCache:Q.source==="disk-cache",fromServiceWorker:Q.source==="service-worker",encodedDataLength:$}}function N1(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 F1(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 E1(Q,$){let Z=new Map,J=1e4,Y=1024,G=4194304,X=Promise.resolve(),H=(z)=>{let K=X.then(z,z);return X=K.catch(()=>{}),K};for(let[z,K]of Object.entries(W1))Q.addMessageFilter(`tools::${z}`,(M)=>{return M.method=K,Promise.resolve(M)});Q.addMessageFilter("tools::Network.setCacheDisabled",(z)=>{if(z.params&&"cacheDisabled"in z.params)z.params={disabled:!!z.params.cacheDisabled};return Promise.resolve(z)});let W=async(z)=>{try{let K=await Q.callTarget("Page.getCookies",{}),M=Array.isArray(K?.cookies)?K.cookies.map(F1):[];Q.fireResultToTools(z.id,{cookies:M})}catch(K){Q.fireErrorToTools(z.id,{message:K?.message??String(K)})}return null};Q.addMessageFilter("tools::Network.getCookies",W),Q.addMessageFilter("tools::Network.getAllCookies",W),Q.addMessageFilter("tools::Network.setCookie",(z)=>{let K=z.params??{};return z.method="Page.setCookie",z.params={cookie:{name:K.name,value:K.value,domain:K.domain??"",path:K.path??"/",expires:K.expires??-1,session:!1,httpOnly:!!K.httpOnly,secure:!!K.secure,sameSite:K.sameSite??"None"}},Promise.resolve(z)}),Q.addMessageFilter("tools::Network.setCookies",async(z)=>{let K=Array.isArray(z.params?.cookies)?z.params.cookies:[];try{await Promise.all(K.map((M)=>Q.callTarget("Page.setCookie",{cookie:M}))),Q.fireResultToTools(z.id,{})}catch(M){Q.fireErrorToTools(z.id,{message:M?.message??String(M)})}return null}),Q.addMessageFilter("tools::Network.deleteCookies",(z)=>{let K=z.params??{},M=K.url??`https://${(K.domain??"").replace(/^\./,"")}${K.path??"/"}`;return z.method="Page.deleteCookie",z.params={cookieName:K.name,url:M},Promise.resolve(z)}),Q.addMessageFilter("tools::Network.deleteCookie",(z)=>{return z.method="Page.deleteCookie",Promise.resolve(z)}),Q.addMessageFilter("tools::Network.clearBrowserCookies",async(z)=>{try{let K=await Q.callTarget("Page.getCookies",{}),M=Array.isArray(K?.cookies)?K.cookies:[];await Promise.all(M.map((L)=>Q.callTarget("Page.deleteCookie",{cookieName:L.name,url:`${L.secure?"https":"http"}://${(L.domain??"").replace(/^\./,"")}${L.path??"/"}`}).catch(()=>{}))),Q.fireResultToTools(z.id,{})}catch(K){Q.fireErrorToTools(z.id,{message:K?.message??String(K)})}return null}),Q.addMessageFilter("tools::Network.canEmulateNetworkConditions",(z)=>b(Q,z,{result:!1})),Q.addMessageFilter("tools::Network.setExtraHTTPHeaders",(z)=>b(Q,z,{})),Q.addMessageFilter("tools::Network.setBlockedURLs",(z)=>b(Q,z,{})),Q.addMessageFilter("tools::Network.emulateNetworkConditions",(z)=>b(Q,z,{})),Q.addMessageFilter("tools::Network.setMonitoringXHREnabled",(z)=>b(Q,z,{})),Q.addMessageFilter("tools::Network.getResponseBody",async(z)=>{let K=z.params?.requestId,M=typeof K==="string"?Z.get(K):void 0;if(!M)return Q.fireErrorToTools(z.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(M.method&&M.method.toUpperCase()!=="GET")return Q.fireErrorToTools(z.id,{message:`Network.getResponseBody: cannot recover ${M.method} response body (bridge re-fetch is GET-only)`}),null;if(M.bytes===0)return Q.fireResultToTools(z.id,{body:"",base64Encoded:!1}),null;return H(async()=>{try{let L={};for(let[B,U]of Object.entries(M.headers??{})){let V=B.toLowerCase();if(V==="if-none-match"||V==="if-modified-since"||V==="host"||V==="connection")continue;L[B]=String(U)}let T=new AbortController,j=setTimeout(()=>T.abort(),1e4),q;try{q=await fetch(M.url,{headers:L,redirect:"follow",signal:T.signal})}finally{clearTimeout(j)}let D=Number(q.headers.get("content-length")??"");if(Number.isFinite(D)&&D>4194304){Q.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${D} bytes > ${"4194304"}) — skipped re-fetch`});try{await q.arrayBuffer()}catch{}return}let A=Buffer.from(await q.arrayBuffer());if(A.byteLength>4194304){Q.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${A.byteLength} bytes > 4194304)`});return}let O=((q.headers.get("content-type")??"").split(";")[0]??"").trim(),E=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(O),N=E?A.toString("utf8"):A.toString("base64");Q.fireResultToTools(z.id,{body:N,base64Encoded:!E})}catch(L){Q.fireErrorToTools(z.id,{message:`Network.getResponseBody re-fetch failed: ${L?.message??String(L)}`})}}),null});for(let[z,K]of Object.entries(V1))Q.addMessageFilter(`target::${z}`,(M)=>{return N1(M.params,K),Promise.resolve(M)});Q.addMessageFilter("target::Network.requestWillBeSent",(z)=>{let K=z.params;if(K){if(Object.assign(K,{...H1,...K}),K.request=_1(K.request),K.type=Y8(K.type),typeof K.requestId==="string"&&typeof K.request?.url==="string"){if(Z.size>=1024){let M=Z.keys().next().value;if(M!==void 0)Z.delete(M)}Z.set(K.requestId,{url:K.request.url,method:K.request.method,headers:K.request.headers,frameId:K.frameId,bytes:0})}}return Promise.resolve(z)}),Q.addMessageFilter("target::Network.responseReceived",(z)=>{let K=z.params;if(K)Object.assign(K,{...M1,...K}),K.response=B1(K.response),K.type=Y8(K.type);return Promise.resolve(z)}),Q.addMessageFilter("target::Network.loadingFinished",(z)=>{let K=z.params;if(K){let M=K.metrics?.responseBodyBytesReceived;if(typeof M==="number"&&K.encodedDataLength==null)K.encodedDataLength=M;if(Object.assign(K,{...L1,...K}),typeof K.requestId==="string"&&typeof M==="number"){let L=Z.get(K.requestId);if(L&&M>L.bytes)L.bytes=M}}return Promise.resolve(z)}),Q.addMessageFilter("target::Network.dataReceived",(z)=>{let K=z.params;if(K&&typeof K.requestId==="string"){let M=Z.get(K.requestId);if(M){let L=Number(K.dataLength)||0;M.bytes+=L}}return Promise.resolve(z)}),Q.addMessageFilter("target::Network.loadingFailed",(z)=>{let K=z.params;if(K){if(K.type=Y8(K.type),!("canceled"in K))K.canceled=!1}return Promise.resolve(z)}),Q.addMessageFilter("target::Network.requestServedFromMemoryCache",(z)=>{if(z.method="Network.requestServedFromCache",z.params)z.params={requestId:z.params.requestId};return Promise.resolve(z)}),Q.addMessageFilter("tools::Network.loadNetworkResource",async(z)=>{let K=z.params??{};if(!$)return Q.fireResultToTools(z.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let M=await Q.callTarget("Network.loadResource",{frameId:K.frameId,url:K.url}),L=!!M?.content&&(M?.status??0)>=200&&(M?.status??0)<300,T;if(L)T=`network-resource:${K.frameId??""}:${K.url}`,$.set(T,String(M.content));Q.fireResultToTools(z.id,{resource:{success:L,stream:T,httpStatusCode:M?.status,headers:M?.headers,mimeType:M?.mimeType}})}catch(M){Q.fireResultToTools(z.id,{resource:{success:!1,netError:2,netErrorName:M?.message??"ERR_FAILED"}})}return null})}function T1(Q){for(let $ of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])Q.addMessageFilter(`tools::${$}`,(Z)=>b(Q,Z,{}))}function j1(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 q1(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 V8(Q){if(!Q)return Q;let $={origin:Q.origin==="author"?"regular":Q.origin,style:kQ(Q.style),selectorList:C1(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:A1[Z.type]}));return $}function x1(Q){let $={lastNodeId:0},Z=new Map;async function J(Y,G){let X=Z.get(Y);if(!X)try{if(X=(await Q.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,X)Z.set(Y,X)}catch{}let H=X?.rules??[];for(let W=0;W<H.length;W++)if(O1(H[W]?.style?.range,G))return{styleSheetId:Y,ordinal:W};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=q1(Y.params.header);return Promise.resolve(Y)}),Q.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let G=Y.result;if(G)Y.result={inlineStyle:kQ(G.inlineStyle),attributesStyle:kQ(G.attributesStyle)};return Promise.resolve(Y)}),Q.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(Y)=>{if(typeof Y.params?.nodeId==="number")$.lastNodeId=Y.params.nodeId;try{let[G,X]=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:kQ(G?.inlineStyle),attributesStyle:kQ(G?.attributesStyle),matchedCSSRules:N8(X?.matchedCSSRules),pseudoElements:P1(X?.pseudoElements),inherited:I1(X?.inherited),cssKeyframesRules:[]})}catch(G){Q.fireErrorToTools(Y.id,{message:G?.message??String(G)})}return null}),Q.addMessageFilter("tools::CSS.setStyleTexts",async(Y)=>{let G=Y.params?.edits??[],X=[];for(let H of G)try{let W=await J(H.styleSheetId,H.range),z=await Q.callTarget("CSS.setStyleText",{styleId:W,text:H.text});X.push(kQ(z?.style)),Z.delete(H.styleSheetId),Q.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:H.styleSheetId})}catch{X.push(null)}return Q.fireResultToTools(Y.id,{styles:X}),null}),Q.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:G,range:X,selector:H}=Y.params??{};try{let W=await J(G,X);Y.params={ruleId:W,selector:H}}catch(W){return Q.fireErrorToTools(Y.id,{message:W?.message??String(W)}),null}return Y}),Q.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:V8(Y.result.rule)};return Promise.resolve(Y)}),Q.addMessageFilter("tools::CSS.addRule",async(Y)=>{let G=Y.params??{},X=String(G.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let H=await Q.callTarget("CSS.addRule",{contextNodeId:$.lastNodeId,styleSheetId:G.styleSheetId,selector:X});Q.fireResultToTools(Y.id,{rule:V8(H?.rule)})}catch(H){Q.fireErrorToTools(Y.id,{message:H?.message??String(H)})}return null})}function w1(Q){Q.addMessageFilter("tools::Browser.getVersion",($)=>b(Q,$,k1)),Q.addMessageFilter("tools::Browser.getWindowForTarget",($)=>b(Q,$,{windowId:1,bounds:{}})),Q.addMessageFilter("tools::Browser.setWindowBounds",($)=>b(Q,$,{}))}function y1(Q){switch(Q){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function f1(Q){let $=async(Z)=>{let J=Z.params??{},Y=y1(J.type);if(!Y)return Q.fireResultToTools(Z.id,{}),null;let G=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let X of G){let H={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:X},W=`(${S1}, __sd_simulate(${JSON.stringify(H)}))`;await Q.callTarget("Runtime.evaluate",{expression:W})}Q.fireResultToTools(Z.id,{})}catch(X){Q.fireErrorToTools(Z.id,{message:X?.message??String(X)})}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 v1(Q){let $=new Map;return Q.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||b1,G=Number(Z.params?.offset)||0,X=$.get(J);if(X===void 0)return Q.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let H=X.slice(G,G+Y),W=G+Y>=X.length;return Q.fireResultToTools(Z.id,{data:H,eof:W,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 h1(Q){Q.addMessageFilter("tools::Accessibility.enable",($)=>b(Q,$,{})),Q.addMessageFilter("tools::Accessibility.disable",($)=>b(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 G=(await Q.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:[]};Q.fireResultToTools($.id,{nodes:[X]})}catch(Y){Q.fireResultToTools($.id,{nodes:[]})}return null})}function l1(Q){for(let[Z,J]of Object.entries(g1))Q.addMessageFilter(`tools::${Z}`,(Y)=>b(Q,Y,J));for(let Z of u1)for(let J of["enable","disable"])Q.addMessageFilter(`tools::${Z}.${J}`,(Y)=>b(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)=>b(Q,Y,J))}function H8(Q){let $=tJ();l1(Q);let Z=v1(Q);eJ(Q,$),Q1(Q,$),$1(Q,$),Y1(Q),G1(Q),X1(Q,$),z1(Q),K1(Q),E1(Q,Z),T1(Q),j1(Q),x1(Q),w1(Q),f1(Q),h1(Q)}function e$(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 aQ(Q){return Q.replace(/[&<>"']/g,($)=>c1[$])}function Q0(Q){return t$.createServer(($,Z)=>{let J=new URL($.url??"/","http://placeholder"),Y=$.headers.host??"";if(J.pathname==="/json/version"){let G=typeof Q.version==="function"?Q.version(Y):Q.version;return G8(Z,G)}if(J.pathname==="/json"||J.pathname==="/json/list")return G8(Z,Q.listTargets(Y));if(J.pathname==="/json/protocol")return G8(Z,{});if(J.pathname==="/")return m1(Z,Q,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function G8(Q,$,Z=200){Q.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),Q.end(JSON.stringify($))}function m1(Q,$,Z){let J=$.listTargets(Z),Y=J.map((W)=>`<li><strong>${aQ(W.title||W.url||W.id)}</strong><br><small>${aQ(W.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${aQ(W.devtoolsFrontendUrl)}</code></li>`).join(""),G=`inspect-webkit${$.brand?` (${$.brand})`:""}`,X=$.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${aQ(Z)}</code>.</p>`,H=`<!doctype html><meta charset=utf-8><title>${aQ(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>${aQ(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>';Q.writeHead(200,{"content-type":"text/html; charset=utf-8"}),Q.end(H)}function $0(Q,$,Z){return new Promise((J,Y)=>{Q.once("error",(X)=>{if(X.port==null)X.port=Z;if(X.host==null)X.host=$;Y(X)});let G=$==="localhost"||$==="::1"||$==="127.0.0.1"?"::":$;Q.listen({port:Z,host:G,ipv6Only:!1},()=>{Q.off("error",Y),J()})})}function Z0(Q){let $=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(W,z)=>$?`\x1B[${W}m${z}\x1B[0m`:z,J=(W)=>Z("1",W),Y=(W)=>Z("2",W),G=(W)=>Z("36",W),X=(W)=>Z("32",W),H=`http://${Q.host}:${Q.port}`;console.error(`${X("●")} ${J(`${Q.brand} CDP`)} ${G(H)}`),console.error(` ${Y("chrome")} chrome://inspect → ${Q.host}:${Q.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${Q.port}`)}function p1(Q,$){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,G=!1,X=!1,H=new Map,W=null;function z(E){if(Q.readyState!==1)return;let N=JSON.stringify(E);if(Z)console.error(`[browser] tools<< ${N.slice(0,240)}`);Q.send(N)}function K(E,N){let B={method:E,params:N};if(W)B.sessionId=W;z(B)}function M(E,N){return{targetId:E.targetId,type:E.type==="page"?"page":E.type||"other",title:E.title||"",url:E.url||"",attached:N,canAccessOpener:!1,browserContextId:"default"}}function L(E){for(let N of J.values())if(N.targetId===E)return!0;return!1}function T(E,N){let B=$.listEntries().find((_)=>_.targetId===E);if(!B)return null;let U=crypto.randomUUID(),V=(_)=>{let P;try{P=JSON.parse(_)}catch{return}P.sessionId=U,z(P)},R=$.createPageSession(E,V);if(!R)return null;return J.set(U,{handle:R,targetId:E}),K("Target.attachedToTarget",{sessionId:U,targetInfo:M(B,!0),waitingForDebugger:N}),{sessionId:U,entry:B}}function j(E){let N=J.get(E);if(!N)return!1;try{N.handle.close()}catch{}return J.delete(E),K("Target.detachedFromTarget",{sessionId:E,targetId:N.targetId}),!0}function q(){let E=$.listEntries(),N=new Set;for(let B of E){N.add(B.targetId);let U=H.get(B.targetId);if(!U){if(H.set(B.targetId,B),Y)K("Target.targetCreated",{targetInfo:M(B,L(B.targetId))});if(G&&!L(B.targetId))T(B.targetId,X)}else if(U.title!==B.title||U.url!==B.url){if(H.set(B.targetId,B),Y)K("Target.targetInfoChanged",{targetInfo:M(B,L(B.targetId))})}}for(let B of[...H.keys()]){if(N.has(B))continue;H.delete(B);for(let[U,V]of J)if(V.targetId===B)j(U);if(Y)K("Target.targetDestroyed",{targetId:B})}}let D=setInterval(q,$.refreshMs??1000);function A(E,N){if(E)N.sessionId=E;z(N)}function O(E,N){let{id:B,method:U}=E,V=E.params??{};switch(U){case"Browser.getVersion":return A(N,{id:B,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!W)W=crypto.randomUUID();return A(N,{id:B,result:{sessionId:W}})}case"Target.setDiscoverTargets":{if(Y=!!V.discover,Y)for(let R of $.listEntries())H.set(R.targetId,R),K("Target.targetCreated",{targetInfo:M(R,L(R.targetId))});if(typeof B==="number")A(N,{id:B,result:{}});return}case"Target.getTargets":{let R=$.listEntries().map((_)=>M(_,L(_.targetId)));return A(N,{id:B,result:{targetInfos:R}})}case"Target.setAutoAttach":{if(G=!!V.autoAttach,X=!!V.waitForDebuggerOnStart,G){for(let R of $.listEntries())if(!L(R.targetId))T(R.targetId,X)}if(typeof B==="number")A(N,{id:B,result:{}});return}case"Target.attachToTarget":{for(let[_,P]of J)if(P.targetId===V.targetId){if(typeof B==="number")A(N,{id:B,result:{sessionId:_}});return}let R=T(V.targetId,!1);if(!R){if(typeof B==="number")A(N,{id:B,error:{code:-32000,message:"No target with given id found"}});return}if(typeof B==="number")A(N,{id:B,result:{sessionId:R.sessionId}});return}case"Target.detachFromTarget":{if(j(V.sessionId),typeof B==="number")A(N,{id:B,result:{}});return}case"Target.sendMessageToTarget":{let R=J.get(V.sessionId);if(R)R.handle.onMessageFromTools(V.message);if(typeof B==="number")A(N,{id:B,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof B==="number")A(N,{id:B,result:{}});return;case"Target.getBrowserContexts":{if(typeof B==="number")A(N,{id:B,result:{browserContextIds:["default"]}});return}}if(typeof B==="number")A(N,{id:B,error:{code:-32601,message:`Browser-level method '${U??"?"}' not implemented`}})}Q.on("message",(E,N)=>{let B=N?new TextDecoder().decode(E):E.toString();if(Z)console.error(`[browser] tools>> ${B.slice(0,240)}`);let U;try{U=JSON.parse(B)}catch{return}if(typeof U.sessionId==="string"){if(U.sessionId===W){let _={...U};return delete _.sessionId,O(_,U.sessionId)}let V=J.get(U.sessionId);if(!V){if(typeof U.id==="number")z({id:U.id,sessionId:U.sessionId,error:{code:-32000,message:`Session ${U.sessionId} not found`}});return}let R={...U};delete R.sessionId,V.handle.onMessageFromTools(JSON.stringify(R));return}O(U,void 0)}),Q.on("close",()=>{clearInterval(D);for(let[,E]of J)try{E.handle.close()}catch{}J.clear()})}async function n1(Q={}){let $=Q.port??9222,Z=Q.host??"localhost",J=await i1();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 U of J)X.set(U,[]),G.set(U,new Set),U.wi.subscribe((V)=>{let{__selector:R,__argument:_}=V;if(!R||!_)return;if(R==="_rpc_reportConnectedApplicationList:"){let P=_.WIRApplicationDictionaryKey??{},C=Object.entries(P).map(([k,w])=>({appId:k,bundleId:w.WIRApplicationBundleIdentifierKey,name:w.WIRApplicationNameKey??w.WIRApplicationBundleIdentifierKey??k,isProxy:Boolean(w.WIRIsApplicationProxyKey)}));X.set(U,C);let I=G.get(U);for(let k of C){if(k.isProxy||I.has(k.appId))continue;I.add(k.appId),U.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:k.appId})}}else if(R==="_rpc_applicationConnected:"){let P=_,C=X.get(U)??[];if(!C.find((I)=>I.appId===P.WIRApplicationIdentifierKey))C.push({appId:P.WIRApplicationIdentifierKey,bundleId:P.WIRApplicationBundleIdentifierKey,name:P.WIRApplicationNameKey??P.WIRApplicationBundleIdentifierKey,isProxy:Boolean(P.WIRIsApplicationProxyKey)}),X.set(U,C);if(!P.WIRIsApplicationProxyKey){let I=G.get(U);if(!I.has(P.WIRApplicationIdentifierKey))I.add(P.WIRApplicationIdentifierKey),U.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:P.WIRApplicationIdentifierKey})}}else if(R==="_rpc_applicationDisconnected:"){let P=X.get(U)??[];X.set(U,P.filter((C)=>C.appId!==_.WIRApplicationIdentifierKey)),Y.delete(`${U.id}:${_.WIRApplicationIdentifierKey}`)}else if(R==="_rpc_applicationSentListing:"){let P=_.WIRApplicationIdentifierKey,C=_.WIRListingKey??{},I=new Map;for(let[k,w]of Object.entries(C))I.set(k,{pageId:Number(w.WIRPageIdentifierKey??0),title:w.WIRTitleKey??"",url:w.WIRURLKey??"",type:w.WIRTypeKey??"",connectionId:typeof w.WIRConnectionIdentifierKey==="string"?w.WIRConnectionIdentifierKey:null});Y.set(`${U.id}:${P}`,I)}}),U.wi.send("_rpc_reportIdentifier:",{}),U.wi.send("_rpc_getConnectedApplications:",{});let H=setInterval(()=>{for(let U of J){let V=X.get(U)??[];for(let R of V){if(R.isProxy)continue;U.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:R.appId})}}},d1),W=new Map;function z(){let U=[];for(let V of J){let R=X.get(V)??[];for(let _ of R){if(_.isProxy)continue;let P=Y.get(`${V.id}:${_.appId}`);if(!P)continue;for(let C of P.values()){let I=!!C.connectionId&&C.connectionId!==V.wi.connection;U.push({targetId:`${V.id}:${_.appId}:${C.pageId}`,source:V,appId:_.appId,appName:_.name,bundleId:_.bundleId,pageId:C.pageId,title:C.title,url:C.url,type:C.type,inUseByOtherInspector:I})}}}return U}let K=crypto.randomUUID(),M=Q0({brand:"",version:(U)=>({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://${U}/devtools/browser/${K}`}),listTargets:(U)=>z().map((V)=>e$({reqHost:U,id:V.targetId,description:`${V.source.label}${V.bundleId?` (${V.bundleId})`:""}`,title:V.title||V.appName,url:/^https?:/i.test(V.url)?V.url:"about:blank",type:v$(V.type)}))}),L=new a$.default({noServer:!0}),T=`/devtools/browser/${K}`;M.on("upgrade",(U,V,R)=>{let _=new URL(U.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${_.pathname}`),_.pathname===T){L.handleUpgrade(U,V,R,(C)=>{p1(C,{listEntries:()=>z().map((I)=>({targetId:I.targetId,type:v$(I.type),title:I.title||I.appName,url:I.url})),createPageSession:(I,k)=>{let w=z().find((y)=>y.targetId===I);if(!w)return null;return j(w,k)}})});return}if(!_.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${_.pathname}`),V.destroy();return}let P=decodeURIComponent(_.pathname.slice(15));L.handleUpgrade(U,V,R,(C)=>{B(C,P)})});function j(U,V){let R=crypto.randomUUID(),P=new m4({readyState:1,send:(k)=>V(k)},U.source.wi,U.appId,U.pageId,R);H8(P),W.set(R,P);let C=!!process.env.INSPECT_WEBKIT_DEBUG,I=U.source.wi.subscribe((k)=>{if(k.__selector!=="_rpc_applicationSentData:")return;let w=k.__argument;if(!w)return;if(w.WIRDestinationKey&&w.WIRDestinationKey!==R)return;if(w.WIRApplicationIdentifierKey!==U.appId)return;if(w.WIRPageIdentifierKey!==void 0&&Number(w.WIRPageIdentifierKey)!==U.pageId)return;let y=w.WIRMessageDataKey??w.WIRSocketDataKey;if(!y)return;let h=typeof y==="string"?y:new TextDecoder().decode(y);if(C)console.error(`[cdp] target>> ${h.slice(0,240)}`);P.onMessageFromTarget(h)});return U.source.wi.forwardSocketSetup(U.appId,U.pageId,R),console.error(`# devtools attached: ${U.source.label} :: ${U.appName} :: ${U.title||U.url}`),{onMessageFromTools(k){if(C)console.error(`[cdp] tools>> ${k.slice(0,300)}`);P.onMessageFromTools(k)},close(){I();try{P.wi.forwardDidClose(P.appId,P.pageId,P.senderKey)}catch{}W.delete(P.senderKey)}}}let q=new Map,D=8000;function A(U){let V=q.get(U);if(V)return V;let R=z().find((y)=>y.targetId===U);if(!R)return null;let _=crypto.randomUUID(),C=new m4({readyState:1,send:()=>{}},R.source.wi,R.appId,R.pageId,_);H8(C),W.set(_,C);let I=R.source.wi.subscribe((y)=>{if(y.__selector!=="_rpc_applicationSentData:")return;let h=y.__argument;if(!h)return;if(h.WIRDestinationKey&&h.WIRDestinationKey!==_)return;if(h.WIRApplicationIdentifierKey!==R.appId)return;if(h.WIRPageIdentifierKey!==void 0&&Number(h.WIRPageIdentifierKey)!==R.pageId)return;let n=h.WIRMessageDataKey??h.WIRSocketDataKey;if(!n)return;let S=typeof n==="string"?n:new TextDecoder().decode(n);C.onMessageFromTarget(S)});R.source.wi.forwardSocketSetup(R.appId,R.pageId,_);let k=Promise.race([C.callTarget("DOM.getDocument",{depth:0}).then((y)=>y?.root?.nodeId),new Promise((y,h)=>setTimeout(()=>h(Error("DOM.getDocument timeout")),5000))]),w={cdp:C,rootNodeIdPromise:k,idleTimer:null,close(){if(w.idleTimer)clearTimeout(w.idleTimer);I();try{C.wi.forwardDidClose(C.appId,C.pageId,C.senderKey)}catch{}W.delete(_),q.delete(U)}};return q.set(U,w),k.catch(()=>w.close()),w}function O(U){if(U.idleTimer)clearTimeout(U.idleTimer);U.idleTimer=setTimeout(()=>U.close(),D)}function E(U){if(U){q.get(U)?.close();return}for(let V of q.values())V.close()}async function N(U,V){let R=A(U);if(!R)return;O(R);try{if(V){let _=await R.rootNodeIdPromise;if(!_)return;await R.cdp.callTarget("DOM.highlightNode",{nodeId:_,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 B(U,V){let R=z().find((I)=>I.targetId===V);if(!R){console.error(`# ws closed: unknown target ${V} (known: ${z().map((I)=>I.targetId).join(", ")||"none"})`),U.close(1011,`unknown target ${V}`);return}let _=j(R,(I)=>{if(U.readyState===1)U.send(I)}),P=!0;U.on("pong",()=>{P=!0});let C=setInterval(()=>{if(!P){try{U.terminate()}catch{}return}P=!1;try{U.ping()}catch{}},15000);U.on("message",(I,k)=>{let w=k?new TextDecoder().decode(I):I.toString();_.onMessageFromTools(w)}),U.on("close",()=>{clearInterval(C),_.close()})}return await $0(M,Z,$),Z0({brand:"safari",host:Z,port:$}),{stop(){clearInterval(H);for(let U of q.values())U.close();L.close(),M.close();for(let U of J)try{U.wi.close(),U.lockdown?.close()}catch{}},getTargets(){return z()},highlightTarget(U,V){return N(U,V)},releaseHighlight(U){E(U)}}}async function i1(){let[Q,$]=await Promise.all([o1(),r1()]);return[...Q,...$]}async function o1(){let Q=[];try{Q=await m$()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all(Q.map(a1))).filter((Z)=>Z!==null)}async function a1(Q){try{let $=await p$(Q.Properties.SerialNumber),Z=await i4.open(Q,$);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:G}=await Z.connectService(J),X=new M4(Y,G);return await X.reportIdentifier(),{kind:"device",id:`device:${Q.Properties.SerialNumber}`,label:`device:${Q.Properties.SerialNumber.slice(0,8)}`,wi:X,lockdown:Z}}catch($){return console.error(`warn: device ${Q.Properties.SerialNumber}: ${$.message}`),null}}async function r1(){let Q=[];try{Q=await n$()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all(Q.map(s1))).filter((Z)=>Z!==null)}async function s1(Q){try{let{socket:$,stream:Z}=await i$(Q.socketPath),J=new M4($,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 v$(Q){switch(Q){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class J0{url;ws;handlers=new Set;openPromise;constructor(Q){this.url=Q,this.ws=new b$(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!==b$.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose(Q,$,Z){}close(){try{this.ws.close()}catch{}}}async function t1(Q){let $=Q.port??9223,Z=Q.host??"localhost",{upstreams:J}=Q,Y=Q0({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(H)=>J.map((W)=>e$({reqHost:H,id:encodeURIComponent(W.url),description:W.label??"bun",title:W.label??W.url,url:W.url,type:"node"}))}),G=new a$.default({noServer:!0});Y.on("upgrade",(H,W,z)=>{let K=new URL(H.url??"/","http://placeholder");if(!K.pathname.startsWith("/devtools/page/")){W.destroy();return}let M=decodeURIComponent(K.pathname.slice(15)),L=J.find((T)=>T.url===M);if(!L){W.destroy();return}G.handleUpgrade(H,W,z,(T)=>{X(T,L).catch((j)=>{console.error(`# bun attach failed: ${j.message}`);try{T.close(1011,j.message)}catch{}})})});async function X(H,W){let z=!!process.env.INSPECT_WEBKIT_DEBUG,K=new J0(W.url);await K.ready();let M=crypto.randomUUID(),L=new m4(H,K,"bun",0,M);H8(L);let T=K.onFrame((j)=>{if(z)console.error(`[bun] target>> ${j.slice(0,240)}`);L.onMessageFromTarget(j)});H.on("message",(j,q)=>{let D=q?new TextDecoder().decode(j):j.toString();if(z)console.error(`[bun] tools>> ${D.slice(0,300)}`);L.onMessageFromTools(D)}),H.on("close",()=>{T(),K.close()}),console.error(`# devtools attached: ${W.label??W.url}`)}return await $0(Y,Z,$),Z0({brand:"bun",host:Z,port:$}),{stop(){G.close(),Y.close()},getTargets(){return J.slice()}}}async function Y0(){return m$()}async function e1(){let[Q,$]=await Promise.all([Q2(),$2()]);return[...Q.flat(),...$.flat()]}async function Q2(){let Q=await Y0();return Promise.all(Q.map(Z2))}async function $2(){let Q=await n$();return Promise.all(Q.map(J2))}async function Z2(Q){let $=null;try{return $=await Y2(Q),await G0($.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 J2(Q){let $=null;try{let{socket:Z,stream:J}=await i$(Q.socketPath);return $=new M4(Z,J),await $.reportIdentifier(),await G0($,{source:"simulator",udid:`sim:${Q.pid}`})}catch(Z){return console.error(`warn: simulator (${Q.socketPath}): ${Z.message}`),[]}finally{$?.close()}}async function Y2(Q){let $=await p$(Q.Properties.SerialNumber),Z=await i4.open(Q,$);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:G}=await Z.connectService(J),X=new M4(Y,G);return await X.reportIdentifier(),{client:X,lockdown:Z}}async function G0(Q,$){let Z=(await Q.listApplications()).filter((G)=>!G.isProxy),J=await Promise.all(Z.map((G)=>Q.getListing(G.appId))),Y=[];for(let G=0;G<Z.length;G++){let X=Z[G];for(let H of J[G])Y.push({...$,appId:X.appId,appName:X.name??X.bundleId??X.appId,bundleId:X.bundleId,pageId:H.pageId,title:H.title,url:H.url,type:H.type})}return Y}var DJ,AJ,k$,CJ,PJ,xJ,kJ,TQ=(Q,$,Z)=>{var J=Q!=null&&typeof Q==="object";if(J){var Y=$?xJ??=new WeakMap:kJ??=new WeakMap,G=Y.get(Q);if(G)return G}Z=Q!=null?DJ(AJ(Q)):{};let X=$||!Q||!Q.__esModule?k$(Z,"default",{value:Q,enumerable:!0}):Z;for(let H of CJ(Q))if(!PJ.call(X,H))k$(X,H,{get:IJ.bind(Q,H),enumerable:!0});if(J)Y.set(Q,X);return X},ZQ=(Q,$)=>()=>($||Q(($={exports:{}}).exports,$),$.exports),d,jQ,p4,wJ,V4,H4,h$,u$,SJ,M8,L8,yJ,g$,fJ,bJ=`<?xml version="1.0" encoding="UTF-8"?>
66
+ ${$}</dict>`}function R8(Q){let $=G8(Q,"");return new TextEncoder().encode(vJ+$+hJ)}class c${src;pos=0;constructor(Q){this.src=Q}skip(){while(this.pos<this.src.length){let Q=this.src[this.pos];if(Q===" "||Q==="\t"||Q===`
67
+ `||Q==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let $=this.src.indexOf("-->",this.pos+4);if($<0)throw Error("unterminated comment");this.pos=$+3}else if(this.src.startsWith("<?",this.pos)){let $=this.src.indexOf("?>",this.pos+2);if($<0)throw Error("unterminated processing instruction");this.pos=$+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let $=0;while(this.pos<this.src.length){let Z=this.src[this.pos++];if(Z==="[")$++;else if(Z==="]")$--;else if(Z===">"&&$===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 Q=this.src.indexOf(">",this.pos);if(Q<0)throw Error("unterminated tag");let $=this.src.slice(this.pos+1,Q);this.pos=Q+1;let Z=$.startsWith("/"),J=$.endsWith("/");return{name:$.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:J,isClose:Z}}readText(){let Q=this.src.indexOf("<",this.pos),$=Q<0?this.src.slice(this.pos):this.src.slice(this.pos,Q);return this.pos=Q<0?this.src.length:Q,$.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function z8(Q,$){let Z=(J)=>{let Y=Q.nextTag();if(!Y||!Y.isClose||Y.name!==J)throw Error(`expected </${J}>`)};switch($){case"true":case"false":throw Error(`<${$}> must be self-closing`);case"string":case"key":{let J=Q.readText();return Z($),J}case"integer":{let J=Q.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(Q.readText().trim());return Z("real"),J}case"data":{let J=gJ(Q.readText());return Z("data"),J}case"date":{let J=new Date(Q.readText().trim());return Z("date"),J}case"array":{let J=[];while(!0){let Y=Q.nextTag();if(!Y)throw Error("unterminated <array>");if(Y.isClose&&Y.name==="array")return J;J.push(Y.selfClose?K8(Y.name):z8(Q,Y.name))}}case"dict":{let J={};while(!0){let Y=Q.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 X=Q.readText();Z("key");let G=Q.nextTag();if(!G)throw Error("unterminated <dict>");J[X]=G.selfClose?K8(G.name):z8(Q,G.name)}}default:throw Error(`unknown plist tag <${$}>`)}}function K8(Q){if(Q==="true")return!0;if(Q==="false")return!1;if(Q==="string")return"";if(Q==="data")return new Uint8Array(0);if(Q==="array")return[];if(Q==="dict")return{};throw Error(`self-closing <${Q}/> not supported`)}function d4(Q){let $=typeof Q==="string"?Q:new TextDecoder().decode(Q),Z=new c$($);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?K8(J.name):z8(Z,J.name)}function xQ(Q,$,Z){let J=0;for(let Y=0;Y<Z;Y++)J=J*256+Q[$+Y];return J}function lJ(Q){if(Q.length<41)throw Error("bplist too short");let $=new TextDecoder().decode(Q.slice(0,8));if($!=="bplist00")throw Error(`bad magic: ${$}`);let Z=Q.length-32,J=Q[Z+6],Y=Q[Z+7],X=xQ(Q,Z+8,8),G=xQ(Q,Z+16,8),H=xQ(Q,Z+24,8),W=Array(X);for(let M=0;M<X;M++)W[M]=xQ(Q,H+M*J,J);function z(M){return xQ(Q,M,Y)}function K(M){let L=W[M],T=Q[L],j=T>>4,O=T&15;function A(D){if(O!==15)return{len:O,next:D};let q=Q[D];if((q&240)!==16)throw Error("expected int marker for length");let E=1<<(q&15);return{len:xQ(Q,D+1,E),next:D+1+E}}switch(j){case 0:if(O===0)return null;if(O===8)return!1;if(O===9)return!0;if(O===15)return null;throw Error(`unknown singleton ${O}`);case 1:{let D=1<<O,q=xQ(Q,L+1,D);if(D===8&&q>Number.MAX_SAFE_INTEGER)return BigInt(q);return q}case 2:{let D=1<<O,q=new DataView(Q.buffer,Q.byteOffset+L+1,D);return D===4?q.getFloat32(0,!1):q.getFloat64(0,!1)}case 3:{let q=new DataView(Q.buffer,Q.byteOffset+L+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+q*1000)}case 4:{let{len:D,next:q}=A(L+1);return Q.slice(q,q+D)}case 5:{let{len:D,next:q}=A(L+1);return new TextDecoder("ascii").decode(Q.slice(q,q+D))}case 6:{let{len:D,next:q}=A(L+1),E=Q.slice(q,q+D*2),N=new Uint8Array(E.length);for(let B=0;B<E.length;B+=2)N[B]=E[B+1],N[B+1]=E[B];return new TextDecoder("utf-16le").decode(N)}case 10:{let{len:D,next:q}=A(L+1),E=[];for(let N=0;N<D;N++)E.push(K(z(q+N*Y)));return E}case 13:{let{len:D,next:q}=A(L+1),E={};for(let N=0;N<D;N++){let B=K(z(q+N*Y)),R=K(z(q+(D+N)*Y));if(typeof B!=="string")throw Error(`non-string dict key: ${typeof B}`);E[B]=R}return E}default:throw Error(`unknown bplist marker 0x${T.toString(16)} at ${L}`)}}return K(G)}function cJ(Q){if(Q.length>=8){if(new TextDecoder().decode(Q.slice(0,8))==="bplist00")return lJ(Q)}return d4(Q)}class n4{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push(Q){if(Q.length===0)return;this.chunks.push(Q),this.size+=Q.length,this.drain()}close(Q){this.closed=!0,this.closeErr=Q??null;for(let $ of this.waiters)$.reject(Q??Error("stream closed"));this.waiters=[]}read(Q){return new Promise(($,Z)=>{if(this.closed&&this.size<Q){Z(this.closeErr??Error("stream closed"));return}this.waiters.push({n:Q,resolve:$,reject:Z}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let Q=this.waiters.shift(),$=new Uint8Array(Q.n),Z=0;while(Z<Q.n){let J=this.chunks[0],Y=Q.n-Z;if(J.length<=Y)$.set(J,Z),Z+=J.length,this.chunks.shift();else $.set(J.subarray(0,Y),Z),this.chunks[0]=J.subarray(Y),Z+=Y}this.size-=Q.n,Q.resolve($)}}}function U8(Q,$){let Z=(X)=>{$.push(new Uint8Array(X.buffer,X.byteOffset,X.byteLength))},J=()=>$.close(),Y=(X)=>$.close(X);return Q.on("data",Z),Q.on("close",J),Q.on("error",Y),()=>{Q.off("data",Z),Q.off("close",J),Q.off("error",Y)}}async function _8(){let Q=new n4;return new Promise(($,Z)=>{let J=l$.createConnection({path:dJ}),Y=(X)=>{Q.close(X),Z(X)};J.once("error",Y),J.once("connect",()=>{J.off("error",Y);let X=U8(J,Q);$({socket:J,stream:Q,detach:X})})})}async function nJ(Q){let $=await Q.read(4),Z=new DataView($.buffer,$.byteOffset,4).getUint32(0,!0);return(await Q.read(Z-4)).slice(12)}function iJ(Q,$,Z){let J=16+Z.length,Y=new Uint8Array(16),X=new DataView(Y.buffer);X.setUint32(0,J,!0),X.setUint32(4,mJ,!0),X.setUint32(8,pJ,!0),X.setUint32(12,$,!0),Q.write(Y),Q.write(Z)}async function B8(Q,$,Z,J){let Y=R8({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...J});iJ(Q,Z,Y);let X=await nJ($);return d4(X)}async function m$(){let{socket:Q,stream:$}=await _8();try{return(await B8(Q,$,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{Q.end()}}async function p$(Q){let{socket:$,stream:Z}=await _8();try{let Y=(await B8($,Z,1,{MessageType:"ReadPairRecord",PairRecordID:Q})).PairRecordData;if(!Y)throw Error(`no pair record for ${Q} — pair the device first (open Finder/iTunes, tap "Trust")`);return d4(Y)}finally{$.end()}}async function w$(Q,$){let{socket:Z,stream:J,detach:Y}=await _8(),X=($&255)<<8|$>>8&255,G=await B8(Z,J,1,{MessageType:"Connect",DeviceID:Q,PortNumber:X});if(G.MessageType!=="Result"||G.Number!==0){Z.end();let H=G.Number??"?";throw Error(`Connect to device ${Q} port ${$} failed (code ${H})`)}return{socket:Z,stream:J,detach:Y}}async function n$(){let Q=oJ("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if(Q.status!==0||!Q.stdout)return[];let $=Q.stdout.toString("utf8"),Z=new Map;for(let J of $.split(`
68
+ `)){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 i$(Q){let $=new n4;return new Promise((Z,J)=>{let Y=d$.createConnection({path:Q}),X=(G)=>{$.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),U8(Y,$),Z({socket:Y,stream:$})})})}async function $8(Q){let $=await Q.read(4),Z=new DataView($.buffer,$.byteOffset,4).getUint32(0,!1),J=await Q.read(Z);return d4(J)}function Z8(Q,$){let Z=R8({Label:"inspect-webkit",...$}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),Q.write(J),Q.write(Z)}function J8(Q,$){if(Q.Error)throw Error(`lockdown ${$} error: ${String(Q.Error)}`);if(Q.Request!==$)throw Error(`lockdown expected Request=${$}, got ${String(Q.Request)}`)}function f$(Q,$,Z,J){return new Promise((Y,X)=>{$();let G=new n4,H=o$.connect({socket:Q,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),W=(z)=>{zQ(`${J} tls error:`,z),G.close(z),X(z)};H.once("error",W),H.once("secureConnect",()=>{zQ(`${J} tls handshake complete`),H.off("error",W);let z=U8(H,G);Y({socket:H,stream:G,detach:z})})})}class i4{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,$){zQ("connecting usbmux tunnel to lockdown port",y$);let{socket:Z,stream:J,detach:Y}=await w$(Q.DeviceID,y$),X=new i4(Z,J,$,Q.Properties.SerialNumber,Q.DeviceID,Y);zQ("sending QueryType"),Z8(Z,{Request:"QueryType"});let G=await $8(J);if(zQ("QueryType reply:",G),J8(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){zQ("StartSession with HostID",this.pair.HostID),Z8(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let Q=await $8(this.stream);if(zQ("StartSession reply:",Q),J8(Q,"StartSession"),Q.EnableSessionSSL){zQ("upgrading to TLS");let $=await f$(this.socket,this.detach,this.pair,"lockdown");this.socket=$.socket,this.stream=$.stream,this.detach=$.detach,zQ("TLS upgrade complete")}}async startService(Q){zQ("StartService",Q),Z8(this.socket,{Request:"StartService",Service:Q});let $=await $8(this.stream);return zQ("StartService reply:",$),J8($,"StartService"),{port:$.Port,enableServiceSSL:Boolean($.EnableServiceSSL),service:Q}}async connectService(Q){zQ("connecting service tunnel to port",Q.port,"ssl=",Q.enableServiceSSL);let{socket:$,stream:Z,detach:J}=await w$(this.deviceID,Q.port);if(!Q.enableServiceSSL)return{socket:$,stream:Z};let Y=await f$($,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function aJ(Q){let $=await Q.read(4),Z=new DataView($.buffer,$.byteOffset,4).getUint32(0,!1),J=await Q.read(Z);return cJ(J)}function rJ(Q,$){let Z=R8($),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),Q.write(J),Q.write(Z)}function sJ(){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 M4{socket;stream;connectionId=sJ();subscribers=new Set;reading;constructor(Q,$){this.socket=Q,this.stream=$,this.reading=(async()=>{try{while(!$.closed){let Z=await aJ($);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,$){rJ(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 m4{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 H=`target::${G}`;if("error"in $&&this.filters.has("target::error"))H="target::error";let W=this.filters.get(H);if(!W)return this.sendToTools(Q);let z=$;for(let K of W){if(!z)break;z=await K(z)}if(z)this.sendToTools(JSON.stringify(z));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 eJ(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function v(Q,$,Z){return Q.fireResultToTools($.id,Z),Promise.resolve(null)}function Q1(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 $1(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 Z1(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((W)=>({functionName:W.functionName??"",scriptId:W.scriptId??"",url:W.url??"",lineNumber:Number(W.lineNumber??0),columnNumber:Number(W.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,H=Date.now();if(J.source==="console-api"){let W=J.type==="log"?J.level??"log":J.type??"log",z=J1(W),K=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],M={type:z,args:K,executionContextId:$.pageExecCtx.id||1,timestamp:H,stackTrace:G};return $.lastConsoleApiCalled.value=M,Q.fireEventToTools("Runtime.consoleAPICalled",M),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return Q.fireEventToTools("Runtime.exceptionThrown",{timestamp:H,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:Y1(J.level??J.type??"log"),text:String(J.text??""),timestamp:H,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 J1(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 Y1(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 X1(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 G1(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 z1(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"}),H=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:H.result?.value??"",transitionType:"link"}]})}catch(G){Q.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),Q.addMessageFilter("target::Page.frameNavigated",(X)=>{return r$(X.params?.frame),Promise.resolve(X)}),Q.addMessageFilter("target::Page.getResourceTree",(X)=>{return W8(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",{}),H=s$(G?.frameTree);W8(H),Q.fireResultToTools(X.id,{frameTree:H})}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 r$(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 W8(Q){if(!Q)return;if(r$(Q.frame),Array.isArray(Q.childFrames))Q.childFrames.forEach(W8)}function s$(Q){if(!Q)return Q;let $={frame:Q.frame};if(Array.isArray(Q.childFrames))$.childFrames=Q.childFrames.map(s$);return $}function K1(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 W1(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 Y8(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 B1(Q){if(!Q)return Q;return{...U1,...Q,hasPostData:Q.postData!=null}}function N1(Q){if(!Q)return Q;let $=0,Z=Q.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)$=Number(J)||0;return{..._1,...Q,fromDiskCache:Q.source==="disk-cache",fromServiceWorker:Q.source==="service-worker",encodedDataLength:$}}function F1(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 E1(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 T1(Q,$){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),H=(z)=>{let K=G.then(z,z);return G=K.catch(()=>{}),K};for(let[z,K]of Object.entries(V1))Q.addMessageFilter(`tools::${z}`,(M)=>{return M.method=K,Promise.resolve(M)});Q.addMessageFilter("tools::Network.setCacheDisabled",(z)=>{if(z.params&&"cacheDisabled"in z.params)z.params={disabled:!!z.params.cacheDisabled};return Promise.resolve(z)});let W=async(z)=>{try{let K=await Q.callTarget("Page.getCookies",{}),M=Array.isArray(K?.cookies)?K.cookies.map(E1):[];Q.fireResultToTools(z.id,{cookies:M})}catch(K){Q.fireErrorToTools(z.id,{message:K?.message??String(K)})}return null};Q.addMessageFilter("tools::Network.getCookies",W),Q.addMessageFilter("tools::Network.getAllCookies",W),Q.addMessageFilter("tools::Network.setCookie",(z)=>{let K=z.params??{};return z.method="Page.setCookie",z.params={cookie:{name:K.name,value:K.value,domain:K.domain??"",path:K.path??"/",expires:K.expires??-1,session:!1,httpOnly:!!K.httpOnly,secure:!!K.secure,sameSite:K.sameSite??"None"}},Promise.resolve(z)}),Q.addMessageFilter("tools::Network.setCookies",async(z)=>{let K=Array.isArray(z.params?.cookies)?z.params.cookies:[];try{await Promise.all(K.map((M)=>Q.callTarget("Page.setCookie",{cookie:M}))),Q.fireResultToTools(z.id,{})}catch(M){Q.fireErrorToTools(z.id,{message:M?.message??String(M)})}return null}),Q.addMessageFilter("tools::Network.deleteCookies",(z)=>{let K=z.params??{},M=K.url??`https://${(K.domain??"").replace(/^\./,"")}${K.path??"/"}`;return z.method="Page.deleteCookie",z.params={cookieName:K.name,url:M},Promise.resolve(z)}),Q.addMessageFilter("tools::Network.deleteCookie",(z)=>{return z.method="Page.deleteCookie",Promise.resolve(z)}),Q.addMessageFilter("tools::Network.clearBrowserCookies",async(z)=>{try{let K=await Q.callTarget("Page.getCookies",{}),M=Array.isArray(K?.cookies)?K.cookies:[];await Promise.all(M.map((L)=>Q.callTarget("Page.deleteCookie",{cookieName:L.name,url:`${L.secure?"https":"http"}://${(L.domain??"").replace(/^\./,"")}${L.path??"/"}`}).catch(()=>{}))),Q.fireResultToTools(z.id,{})}catch(K){Q.fireErrorToTools(z.id,{message:K?.message??String(K)})}return null}),Q.addMessageFilter("tools::Network.canEmulateNetworkConditions",(z)=>v(Q,z,{result:!1})),Q.addMessageFilter("tools::Network.setExtraHTTPHeaders",(z)=>v(Q,z,{})),Q.addMessageFilter("tools::Network.setBlockedURLs",(z)=>v(Q,z,{})),Q.addMessageFilter("tools::Network.emulateNetworkConditions",(z)=>v(Q,z,{})),Q.addMessageFilter("tools::Network.setMonitoringXHREnabled",(z)=>v(Q,z,{})),Q.addMessageFilter("tools::Network.getResponseBody",async(z)=>{let K=z.params?.requestId,M=typeof K==="string"?Z.get(K):void 0;if(!M)return Q.fireErrorToTools(z.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(M.method&&M.method.toUpperCase()!=="GET")return Q.fireErrorToTools(z.id,{message:`Network.getResponseBody: cannot recover ${M.method} response body (bridge re-fetch is GET-only)`}),null;if(M.bytes===0)return Q.fireResultToTools(z.id,{body:"",base64Encoded:!1}),null;return H(async()=>{try{let L={};for(let[B,R]of Object.entries(M.headers??{})){let V=B.toLowerCase();if(V==="if-none-match"||V==="if-modified-since"||V==="host"||V==="connection")continue;L[B]=String(R)}let T=new AbortController,j=setTimeout(()=>T.abort(),1e4),O;try{O=await fetch(M.url,{headers:L,redirect:"follow",signal:T.signal})}finally{clearTimeout(j)}let A=Number(O.headers.get("content-length")??"");if(Number.isFinite(A)&&A>4194304){Q.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${A} bytes > ${"4194304"}) — skipped re-fetch`});try{await O.arrayBuffer()}catch{}return}let D=Buffer.from(await O.arrayBuffer());if(D.byteLength>4194304){Q.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${D.byteLength} bytes > 4194304)`});return}let q=((O.headers.get("content-type")??"").split(";")[0]??"").trim(),E=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(q),N=E?D.toString("utf8"):D.toString("base64");Q.fireResultToTools(z.id,{body:N,base64Encoded:!E})}catch(L){Q.fireErrorToTools(z.id,{message:`Network.getResponseBody re-fetch failed: ${L?.message??String(L)}`})}}),null});for(let[z,K]of Object.entries(H1))Q.addMessageFilter(`target::${z}`,(M)=>{return F1(M.params,K),Promise.resolve(M)});Q.addMessageFilter("target::Network.requestWillBeSent",(z)=>{let K=z.params;if(K){if(Object.assign(K,{...M1,...K}),K.request=B1(K.request),K.type=Y8(K.type),typeof K.requestId==="string"&&typeof K.request?.url==="string"){if(Z.size>=1024){let M=Z.keys().next().value;if(M!==void 0)Z.delete(M)}Z.set(K.requestId,{url:K.request.url,method:K.request.method,headers:K.request.headers,frameId:K.frameId,bytes:0})}}return Promise.resolve(z)}),Q.addMessageFilter("target::Network.responseReceived",(z)=>{let K=z.params;if(K)Object.assign(K,{...L1,...K}),K.response=N1(K.response),K.type=Y8(K.type);return Promise.resolve(z)}),Q.addMessageFilter("target::Network.loadingFinished",(z)=>{let K=z.params;if(K){let M=K.metrics?.responseBodyBytesReceived;if(typeof M==="number"&&K.encodedDataLength==null)K.encodedDataLength=M;if(Object.assign(K,{...R1,...K}),typeof K.requestId==="string"&&typeof M==="number"){let L=Z.get(K.requestId);if(L&&M>L.bytes)L.bytes=M}}return Promise.resolve(z)}),Q.addMessageFilter("target::Network.dataReceived",(z)=>{let K=z.params;if(K&&typeof K.requestId==="string"){let M=Z.get(K.requestId);if(M){let L=Number(K.dataLength)||0;M.bytes+=L}}return Promise.resolve(z)}),Q.addMessageFilter("target::Network.loadingFailed",(z)=>{let K=z.params;if(K){if(K.type=Y8(K.type),!("canceled"in K))K.canceled=!1}return Promise.resolve(z)}),Q.addMessageFilter("target::Network.requestServedFromMemoryCache",(z)=>{if(z.method="Network.requestServedFromCache",z.params)z.params={requestId:z.params.requestId};return Promise.resolve(z)}),Q.addMessageFilter("tools::Network.loadNetworkResource",async(z)=>{let K=z.params??{};if(!$)return Q.fireResultToTools(z.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let M=await Q.callTarget("Network.loadResource",{frameId:K.frameId,url:K.url}),L=!!M?.content&&(M?.status??0)>=200&&(M?.status??0)<300,T;if(L)T=`network-resource:${K.frameId??""}:${K.url}`,$.set(T,String(M.content));Q.fireResultToTools(z.id,{resource:{success:L,stream:T,httpStatusCode:M?.status,headers:M?.headers,mimeType:M?.mimeType}})}catch(M){Q.fireResultToTools(z.id,{resource:{success:!1,netError:2,netErrorName:M?.message??"ERR_FAILED"}})}return null})}function j1(Q){for(let $ of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])Q.addMessageFilter(`tools::${$}`,(Z)=>v(Q,Z,{}))}function q1(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 D1(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 V8(Q){if(!Q)return Q;let $={origin:Q.origin==="author"?"regular":Q.origin,style:kQ(Q.style),selectorList:P1(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:C1[Z.type]}));return $}function k1(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 H=G?.rules??[];for(let W=0;W<H.length;W++)if(O1(H[W]?.style?.range,X))return{styleSheetId:Y,ordinal:W};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=D1(Y.params.header);return Promise.resolve(Y)}),Q.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:kQ(X.inlineStyle),attributesStyle:kQ(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:kQ(X?.inlineStyle),attributesStyle:kQ(X?.attributesStyle),matchedCSSRules:N8(G?.matchedCSSRules),pseudoElements:I1(G?.pseudoElements),inherited:x1(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 H of X)try{let W=await J(H.styleSheetId,H.range),z=await Q.callTarget("CSS.setStyleText",{styleId:W,text:H.text});G.push(kQ(z?.style)),Z.delete(H.styleSheetId),Q.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:H.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:H}=Y.params??{};try{let W=await J(X,G);Y.params={ruleId:W,selector:H}}catch(W){return Q.fireErrorToTools(Y.id,{message:W?.message??String(W)}),null}return Y}),Q.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:V8(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 H=await Q.callTarget("CSS.addRule",{contextNodeId:$.lastNodeId,styleSheetId:X.styleSheetId,selector:G});Q.fireResultToTools(Y.id,{rule:V8(H?.rule)})}catch(H){Q.fireErrorToTools(Y.id,{message:H?.message??String(H)})}return null})}function w1(Q){Q.addMessageFilter("tools::Browser.getVersion",($)=>v(Q,$,S1)),Q.addMessageFilter("tools::Browser.getWindowForTarget",($)=>v(Q,$,{windowId:1,bounds:{}})),Q.addMessageFilter("tools::Browser.setWindowBounds",($)=>v(Q,$,{}))}function f1(Q){switch(Q){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function b1(Q){let $=async(Z)=>{let J=Z.params??{},Y=f1(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 H={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},W=`(${y1}, __sd_simulate(${JSON.stringify(H)}))`;await Q.callTarget("Runtime.evaluate",{expression:W})}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 h1(Q){let $=new Map;return Q.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||v1,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 H=G.slice(X,X+Y),W=X+Y>=G.length;return Q.fireResultToTools(Z.id,{data:H,eof:W,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 u1(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 c1(Q){for(let[Z,J]of Object.entries(l1))Q.addMessageFilter(`tools::${Z}`,(Y)=>v(Q,Y,J));for(let Z of g1)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 H8(Q){let $=eJ();c1(Q);let Z=h1(Q);Q1(Q,$),$1(Q,$),Z1(Q,$),X1(Q),G1(Q),z1(Q,$),K1(Q),W1(Q),T1(Q,Z),j1(Q),q1(Q),k1(Q),w1(Q),b1(Q),u1(Q)}function e$(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 aQ(Q){return Q.replace(/[&<>"']/g,($)=>m1[$])}function Q0(Q){return t$.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 X8(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return X8(Z,Q.listTargets(Y));if(J.pathname==="/json/protocol")return X8(Z,{});if(J.pathname==="/")return p1(Z,Q,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function X8(Q,$,Z=200){Q.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),Q.end(JSON.stringify($))}function p1(Q,$,Z){let J=$.listTargets(Z),Y=J.map((W)=>`<li><strong>${aQ(W.title||W.url||W.id)}</strong><br><small>${aQ(W.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${aQ(W.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">${aQ(Z)}</code>.</p>`,H=`<!doctype html><meta charset=utf-8><title>${aQ(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>${aQ(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(H)}function $0(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 Z0(Q){let $=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(W,z)=>$?`\x1B[${W}m${z}\x1B[0m`:z,J=(W)=>Z("1",W),Y=(W)=>Z("2",W),X=(W)=>Z("36",W),G=(W)=>Z("32",W),H=`http://${Q.host}:${Q.port}`;console.error(`${G("●")} ${J(`${Q.brand} CDP`)} ${X(H)}`),console.error(` ${Y("chrome")} chrome://inspect → ${Q.host}:${Q.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${Q.port}`)}function d1(Q,$){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,H=new Map,W=null;function z(E){if(Q.readyState!==1)return;let N=JSON.stringify(E);if(Z)console.error(`[browser] tools<< ${N.slice(0,240)}`);Q.send(N)}function K(E,N){let B={method:E,params:N};if(W)B.sessionId=W;z(B)}function M(E,N){return{targetId:E.targetId,type:E.type==="page"?"page":E.type||"other",title:E.title||"",url:E.url||"",attached:N,canAccessOpener:!1,browserContextId:"default"}}function L(E){for(let N of J.values())if(N.targetId===E)return!0;return!1}function T(E,N){let B=$.listEntries().find((_)=>_.targetId===E);if(!B)return null;let R=crypto.randomUUID(),V=(_)=>{let P;try{P=JSON.parse(_)}catch{return}P.sessionId=R,z(P)},U=$.createPageSession(E,V);if(!U)return null;return J.set(R,{handle:U,targetId:E}),K("Target.attachedToTarget",{sessionId:R,targetInfo:M(B,!0),waitingForDebugger:N}),{sessionId:R,entry:B}}function j(E){let N=J.get(E);if(!N)return!1;try{N.handle.close()}catch{}return J.delete(E),K("Target.detachedFromTarget",{sessionId:E,targetId:N.targetId}),!0}function O(){let E=$.listEntries(),N=new Set;for(let B of E){N.add(B.targetId);let R=H.get(B.targetId);if(!R){if(H.set(B.targetId,B),Y)K("Target.targetCreated",{targetInfo:M(B,L(B.targetId))});if(X&&!L(B.targetId))T(B.targetId,G)}else if(R.title!==B.title||R.url!==B.url){if(H.set(B.targetId,B),Y)K("Target.targetInfoChanged",{targetInfo:M(B,L(B.targetId))})}}for(let B of[...H.keys()]){if(N.has(B))continue;H.delete(B);for(let[R,V]of J)if(V.targetId===B)j(R);if(Y)K("Target.targetDestroyed",{targetId:B})}}let A=setInterval(O,$.refreshMs??1000);function D(E,N){if(E)N.sessionId=E;z(N)}function q(E,N){let{id:B,method:R}=E,V=E.params??{};switch(R){case"Browser.getVersion":return D(N,{id:B,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!W)W=crypto.randomUUID();return D(N,{id:B,result:{sessionId:W}})}case"Target.setDiscoverTargets":{if(Y=!!V.discover,Y)for(let U of $.listEntries())H.set(U.targetId,U),K("Target.targetCreated",{targetInfo:M(U,L(U.targetId))});if(typeof B==="number")D(N,{id:B,result:{}});return}case"Target.getTargets":{let U=$.listEntries().map((_)=>M(_,L(_.targetId)));return D(N,{id:B,result:{targetInfos:U}})}case"Target.setAutoAttach":{if(X=!!V.autoAttach,G=!!V.waitForDebuggerOnStart,X){for(let U of $.listEntries())if(!L(U.targetId))T(U.targetId,G)}if(typeof B==="number")D(N,{id:B,result:{}});return}case"Target.attachToTarget":{for(let[_,P]of J)if(P.targetId===V.targetId){if(typeof B==="number")D(N,{id:B,result:{sessionId:_}});return}let U=T(V.targetId,!1);if(!U){if(typeof B==="number")D(N,{id:B,error:{code:-32000,message:"No target with given id found"}});return}if(typeof B==="number")D(N,{id:B,result:{sessionId:U.sessionId}});return}case"Target.detachFromTarget":{if(j(V.sessionId),typeof B==="number")D(N,{id:B,result:{}});return}case"Target.sendMessageToTarget":{let U=J.get(V.sessionId);if(U)U.handle.onMessageFromTools(V.message);if(typeof B==="number")D(N,{id:B,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof B==="number")D(N,{id:B,result:{}});return;case"Target.getBrowserContexts":{if(typeof B==="number")D(N,{id:B,result:{browserContextIds:["default"]}});return}}if(typeof B==="number")D(N,{id:B,error:{code:-32601,message:`Browser-level method '${R??"?"}' not implemented`}})}Q.on("message",(E,N)=>{let B=N?new TextDecoder().decode(E):E.toString();if(Z)console.error(`[browser] tools>> ${B.slice(0,240)}`);let R;try{R=JSON.parse(B)}catch{return}if(typeof R.sessionId==="string"){if(R.sessionId===W){let _={...R};return delete _.sessionId,q(_,R.sessionId)}let V=J.get(R.sessionId);if(!V){if(typeof R.id==="number")z({id:R.id,sessionId:R.sessionId,error:{code:-32000,message:`Session ${R.sessionId} not found`}});return}let U={...R};delete U.sessionId,V.handle.onMessageFromTools(JSON.stringify(U));return}q(R,void 0)}),Q.on("close",()=>{clearInterval(A);for(let[,E]of J)try{E.handle.close()}catch{}J.clear()})}async function i1(Q={}){let $=Q.port??9222,Z=Q.host??"localhost",J=await o1();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 R of J)G.set(R,[]),X.set(R,new Set),R.wi.subscribe((V)=>{let{__selector:U,__argument:_}=V;if(!U||!_)return;if(U==="_rpc_reportConnectedApplicationList:"){let P=_.WIRApplicationDictionaryKey??{},C=Object.entries(P).map(([k,y])=>({appId:k,bundleId:y.WIRApplicationBundleIdentifierKey,name:y.WIRApplicationNameKey??y.WIRApplicationBundleIdentifierKey??k,isProxy:Boolean(y.WIRIsApplicationProxyKey)}));G.set(R,C);let I=X.get(R);for(let k of C){if(k.isProxy||I.has(k.appId))continue;I.add(k.appId),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:k.appId})}}else if(U==="_rpc_applicationConnected:"){let P=_,C=G.get(R)??[];if(!C.find((I)=>I.appId===P.WIRApplicationIdentifierKey))C.push({appId:P.WIRApplicationIdentifierKey,bundleId:P.WIRApplicationBundleIdentifierKey,name:P.WIRApplicationNameKey??P.WIRApplicationBundleIdentifierKey,isProxy:Boolean(P.WIRIsApplicationProxyKey)}),G.set(R,C);if(!P.WIRIsApplicationProxyKey){let I=X.get(R);if(!I.has(P.WIRApplicationIdentifierKey))I.add(P.WIRApplicationIdentifierKey),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:P.WIRApplicationIdentifierKey})}}else if(U==="_rpc_applicationDisconnected:"){let P=G.get(R)??[];G.set(R,P.filter((C)=>C.appId!==_.WIRApplicationIdentifierKey)),Y.delete(`${R.id}:${_.WIRApplicationIdentifierKey}`)}else if(U==="_rpc_applicationSentListing:"){let P=_.WIRApplicationIdentifierKey,C=_.WIRListingKey??{},I=new Map;for(let[k,y]of Object.entries(C))I.set(k,{pageId:Number(y.WIRPageIdentifierKey??0),title:y.WIRTitleKey??"",url:y.WIRURLKey??"",type:y.WIRTypeKey??"",connectionId:typeof y.WIRConnectionIdentifierKey==="string"?y.WIRConnectionIdentifierKey:null});Y.set(`${R.id}:${P}`,I)}}),R.wi.send("_rpc_reportIdentifier:",{}),R.wi.send("_rpc_getConnectedApplications:",{});let H=setInterval(()=>{for(let R of J){let V=G.get(R)??[];for(let U of V){if(U.isProxy)continue;R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:U.appId})}}},n1),W=new Map;function z(){let R=[];for(let V of J){let U=G.get(V)??[];for(let _ of U){if(_.isProxy)continue;let P=Y.get(`${V.id}:${_.appId}`);if(!P)continue;for(let C of P.values()){let I=!!C.connectionId&&C.connectionId!==V.wi.connection;R.push({targetId:`${V.id}:${_.appId}:${C.pageId}`,source:V,appId:_.appId,appName:_.name,bundleId:_.bundleId,pageId:C.pageId,title:C.title,url:C.url,type:C.type,inUseByOtherInspector:I})}}}return R}let K=crypto.randomUUID(),M=Q0({brand:"",version:(R)=>({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://${R}/devtools/browser/${K}`}),listTargets:(R)=>z().map((V)=>e$({reqHost:R,id:V.targetId,description:`${V.source.label}${V.bundleId?` (${V.bundleId})`:""}`,title:V.title||V.appName,url:/^https?:/i.test(V.url)?V.url:"about:blank",type:v$(V.type)}))}),L=new a$.default({noServer:!0}),T=`/devtools/browser/${K}`;M.on("upgrade",(R,V,U)=>{let _=new URL(R.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${_.pathname}`),_.pathname===T){L.handleUpgrade(R,V,U,(C)=>{d1(C,{listEntries:()=>z().map((I)=>({targetId:I.targetId,type:v$(I.type),title:I.title||I.appName,url:I.url})),createPageSession:(I,k)=>{let y=z().find((f)=>f.targetId===I);if(!y)return null;return j(y,k)}})});return}if(!_.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${_.pathname}`),V.destroy();return}let P=decodeURIComponent(_.pathname.slice(15));L.handleUpgrade(R,V,U,(C)=>{B(C,P)})});function j(R,V){let U=crypto.randomUUID(),P=new m4({readyState:1,send:(k)=>V(k)},R.source.wi,R.appId,R.pageId,U);H8(P),W.set(U,P);let C=!!process.env.INSPECT_WEBKIT_DEBUG,I=R.source.wi.subscribe((k)=>{if(k.__selector!=="_rpc_applicationSentData:")return;let y=k.__argument;if(!y)return;if(y.WIRDestinationKey&&y.WIRDestinationKey!==U)return;if(y.WIRApplicationIdentifierKey!==R.appId)return;if(y.WIRPageIdentifierKey!==void 0&&Number(y.WIRPageIdentifierKey)!==R.pageId)return;let f=y.WIRMessageDataKey??y.WIRSocketDataKey;if(!f)return;let S=typeof f==="string"?f:new TextDecoder().decode(f);if(C)console.error(`[cdp] target>> ${S.slice(0,240)}`);P.onMessageFromTarget(S)});return R.source.wi.forwardSocketSetup(R.appId,R.pageId,U),console.error(`# devtools attached: ${R.source.label} :: ${R.appName} :: ${R.title||R.url}`),{onMessageFromTools(k){if(C)console.error(`[cdp] tools>> ${k.slice(0,300)}`);P.onMessageFromTools(k)},close(){I();try{P.wi.forwardDidClose(P.appId,P.pageId,P.senderKey)}catch{}W.delete(P.senderKey)}}}let O=new Map,A=8000;function D(R){let V=O.get(R);if(V)return V;let U=z().find((f)=>f.targetId===R);if(!U)return null;let _=crypto.randomUUID(),C=new m4({readyState:1,send:()=>{}},U.source.wi,U.appId,U.pageId,_);H8(C),W.set(_,C);let I=U.source.wi.subscribe((f)=>{if(f.__selector!=="_rpc_applicationSentData:")return;let S=f.__argument;if(!S)return;if(S.WIRDestinationKey&&S.WIRDestinationKey!==_)return;if(S.WIRApplicationIdentifierKey!==U.appId)return;if(S.WIRPageIdentifierKey!==void 0&&Number(S.WIRPageIdentifierKey)!==U.pageId)return;let l=S.WIRMessageDataKey??S.WIRSocketDataKey;if(!l)return;let w=typeof l==="string"?l:new TextDecoder().decode(l);C.onMessageFromTarget(w)});U.source.wi.forwardSocketSetup(U.appId,U.pageId,_);let k=Promise.race([C.callTarget("DOM.getDocument",{depth:0}).then((f)=>f?.root?.nodeId),new Promise((f,S)=>setTimeout(()=>S(Error("DOM.getDocument timeout")),5000))]),y={cdp:C,rootNodeIdPromise:k,idleTimer:null,close(){if(y.idleTimer)clearTimeout(y.idleTimer);I();try{C.wi.forwardDidClose(C.appId,C.pageId,C.senderKey)}catch{}W.delete(_),O.delete(R)}};return O.set(R,y),k.catch(()=>y.close()),y}function q(R){if(R.idleTimer)clearTimeout(R.idleTimer);R.idleTimer=setTimeout(()=>R.close(),A)}function E(R){if(R){O.get(R)?.close();return}for(let V of O.values())V.close()}async function N(R,V){let U=D(R);if(!U)return;q(U);try{if(V){let _=await U.rootNodeIdPromise;if(!_)return;await U.cdp.callTarget("DOM.highlightNode",{nodeId:_,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 U.cdp.callTarget("DOM.hideHighlight",{})}catch{U.close()}}function B(R,V){let U=z().find((I)=>I.targetId===V);if(!U){console.error(`# ws closed: unknown target ${V} (known: ${z().map((I)=>I.targetId).join(", ")||"none"})`),R.close(1011,`unknown target ${V}`);return}let _=j(U,(I)=>{if(R.readyState===1)R.send(I)}),P=!0;R.on("pong",()=>{P=!0});let C=setInterval(()=>{if(!P){try{R.terminate()}catch{}return}P=!1;try{R.ping()}catch{}},15000);R.on("message",(I,k)=>{let y=k?new TextDecoder().decode(I):I.toString();_.onMessageFromTools(y)}),R.on("close",()=>{clearInterval(C),_.close()})}return await $0(M,Z,$),Z0({brand:"safari",host:Z,port:$}),{stop(){clearInterval(H);for(let R of O.values())R.close();L.close(),M.close();for(let R of J)try{R.wi.close(),R.lockdown?.close()}catch{}},getTargets(){return z()},highlightTarget(R,V){return N(R,V)},releaseHighlight(R){E(R)}}}async function o1(){let[Q,$]=await Promise.all([a1(),s1()]);return[...Q,...$]}async function a1(){let Q=[];try{Q=await m$()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all(Q.map(r1))).filter((Z)=>Z!==null)}async function r1(Q){try{let $=await p$(Q.Properties.SerialNumber),Z=await i4.open(Q,$);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new M4(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 s1(){let Q=[];try{Q=await n$()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all(Q.map(t1))).filter((Z)=>Z!==null)}async function t1(Q){try{let{socket:$,stream:Z}=await i$(Q.socketPath),J=new M4($,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 v$(Q){switch(Q){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class J0{url;ws;handlers=new Set;openPromise;constructor(Q){this.url=Q,this.ws=new b$(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!==b$.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose(Q,$,Z){}close(){try{this.ws.close()}catch{}}}async function e1(Q){let $=Q.port??9223,Z=Q.host??"localhost",{upstreams:J}=Q,Y=Q0({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(H)=>J.map((W)=>e$({reqHost:H,id:encodeURIComponent(W.url),description:W.label??"bun",title:W.label??W.url,url:W.url,type:"node"}))}),X=new a$.default({noServer:!0});Y.on("upgrade",(H,W,z)=>{let K=new URL(H.url??"/","http://placeholder");if(!K.pathname.startsWith("/devtools/page/")){W.destroy();return}let M=decodeURIComponent(K.pathname.slice(15)),L=J.find((T)=>T.url===M);if(!L){W.destroy();return}X.handleUpgrade(H,W,z,(T)=>{G(T,L).catch((j)=>{console.error(`# bun attach failed: ${j.message}`);try{T.close(1011,j.message)}catch{}})})});async function G(H,W){let z=!!process.env.INSPECT_WEBKIT_DEBUG,K=new J0(W.url);await K.ready();let M=crypto.randomUUID(),L=new m4(H,K,"bun",0,M);H8(L);let T=K.onFrame((j)=>{if(z)console.error(`[bun] target>> ${j.slice(0,240)}`);L.onMessageFromTarget(j)});H.on("message",(j,O)=>{let A=O?new TextDecoder().decode(j):j.toString();if(z)console.error(`[bun] tools>> ${A.slice(0,300)}`);L.onMessageFromTools(A)}),H.on("close",()=>{T(),K.close()}),console.error(`# devtools attached: ${W.label??W.url}`)}return await $0(Y,Z,$),Z0({brand:"bun",host:Z,port:$}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function Y0(){return m$()}async function Q2(){let[Q,$]=await Promise.all([$2(),Z2()]);return[...Q.flat(),...$.flat()]}async function $2(){let Q=await Y0();return Promise.all(Q.map(J2))}async function Z2(){let Q=await n$();return Promise.all(Q.map(Y2))}async function J2(Q){let $=null;try{return $=await X2(Q),await X0($.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 Y2(Q){let $=null;try{let{socket:Z,stream:J}=await i$(Q.socketPath);return $=new M4(Z,J),await $.reportIdentifier(),await X0($,{source:"simulator",udid:`sim:${Q.pid}`})}catch(Z){return console.error(`warn: simulator (${Q.socketPath}): ${Z.message}`),[]}finally{$?.close()}}async function X2(Q){let $=await p$(Q.Properties.SerialNumber),Z=await i4.open(Q,$);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new M4(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function X0(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 H of J[X])Y.push({...$,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:H.pageId,title:H.title,url:H.url,type:H.type})}return Y}var AJ,CJ,k$,PJ,IJ,kJ,SJ,TQ=(Q,$,Z)=>{var J=Q!=null&&typeof Q==="object";if(J){var Y=$?kJ??=new WeakMap:SJ??=new WeakMap,X=Y.get(Q);if(X)return X}Z=Q!=null?AJ(CJ(Q)):{};let G=$||!Q||!Q.__esModule?k$(Z,"default",{value:Q,enumerable:!0}):Z;for(let H of PJ(Q))if(!IJ.call(G,H))k$(G,H,{get:xJ.bind(Q,H),enumerable:!0});if(J)Y.set(Q,G);return G},ZQ=(Q,$)=>()=>($||Q(($={exports:{}}).exports,$),$.exports),n,jQ,p4,wJ,V4,H4,h$,u$,yJ,M8,L8,fJ,g$,bJ,vJ=`<?xml version="1.0" encoding="UTF-8"?>
69
69
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
70
70
  <plist version="1.0">
71
- `,vJ=`
71
+ `,hJ=`
72
72
  </plist>
73
- `,cJ=1,mJ=8,pJ="/var/run/usbmuxd",y$=62078,zQ=(...Q)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...Q)},s3,t3,e3,QG,$G,ZG,sJ,a$,b$,W1,V1,H1,M1,L1,U1,R1,O1=(Q,$)=>!!Q&&!!$&&Q.startLine===$.startLine&&Q.endLine===$.endLine&&Q.startColumn===$.startColumn&&Q.endColumn===$.endColumn,D1=(Q)=>Q&&{name:Q.name,value:Q.value,text:Q.text,implicit:Q.implicit,parsedOk:Q.parsedOk!==!1,important:!!Q.priority,disabled:Q.status==="disabled",range:Q.range},kQ=(Q)=>Q&&{styleSheetId:Q.styleId?.styleSheetId,cssText:Q.cssText,range:Q.range,shorthandEntries:Q.shorthandEntries??[],cssProperties:Array.isArray(Q.cssProperties)?Q.cssProperties.map(D1):[]},A1,C1=(Q)=>Q&&{text:Q.text,selectors:Array.isArray(Q.selectors)?Q.selectors.map(($)=>({text:$.text,range:$.range??Q.range})):[]},N8=(Q)=>Array.isArray(Q)?Q.map(($)=>({matchingSelectors:$.matchingSelectors,rule:V8($.rule)})):[],P1=(Q)=>Array.isArray(Q)?Q.map(($)=>({pseudoType:$.pseudoId,matches:N8($.matches)})):[],I1=(Q)=>Array.isArray(Q)?Q.map(($)=>({inlineStyle:kQ($.inlineStyle),matchedCSSRules:N8($.matchedCSSRules)})):[],k1,S1=`
73
+ `,mJ=1,pJ=8,dJ="/var/run/usbmuxd",y$=62078,zQ=(...Q)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...Q)},t3,e3,QX,$X,ZX,JX,tJ,a$,b$,V1,H1,M1,L1,R1,U1,_1,O1=(Q,$)=>!!Q&&!!$&&Q.startLine===$.startLine&&Q.endLine===$.endLine&&Q.startColumn===$.startColumn&&Q.endColumn===$.endColumn,A1=(Q)=>Q&&{name:Q.name,value:Q.value,text:Q.text,implicit:Q.implicit,parsedOk:Q.parsedOk!==!1,important:!!Q.priority,disabled:Q.status==="disabled",range:Q.range},kQ=(Q)=>Q&&{styleSheetId:Q.styleId?.styleSheetId,cssText:Q.cssText,range:Q.range,shorthandEntries:Q.shorthandEntries??[],cssProperties:Array.isArray(Q.cssProperties)?Q.cssProperties.map(A1):[]},C1,P1=(Q)=>Q&&{text:Q.text,selectors:Array.isArray(Q.selectors)?Q.selectors.map(($)=>({text:$.text,range:$.range??Q.range})):[]},N8=(Q)=>Array.isArray(Q)?Q.map(($)=>({matchingSelectors:$.matchingSelectors,rule:V8($.rule)})):[],I1=(Q)=>Array.isArray(Q)?Q.map(($)=>({pseudoType:$.pseudoId,matches:N8($.matches)})):[],x1=(Q)=>Array.isArray(Q)?Q.map(($)=>({inlineStyle:kQ($.inlineStyle),matchedCSSRules:N8($.matchedCSSRules)})):[],S1,y1=`
74
74
  function __sd_simulate(p){
75
75
  var el = document.elementFromPoint(p.x, p.y);
76
76
  if (!el) return false;
@@ -85,65 +85,65 @@ function __sd_simulate(p){
85
85
  });
86
86
  el.dispatchEvent(ev);
87
87
  return true;
88
- }`,b1=65536,u1,g1,c1,d1=1500;var z0=GQ(()=>{DJ=Object.create,AJ=Object.getPrototypeOf,k$=Object.defineProperty,CJ=Object.getOwnPropertyNames,PJ=Object.prototype.hasOwnProperty;d=qJ(import.meta.url),jQ=ZQ((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:()=>{}}}),p4=ZQ((Q,$)=>{var{EMPTY_BUFFER:Z}=jQ(),J=Buffer[Symbol.species];function Y(z,K){if(z.length===0)return Z;if(z.length===1)return z[0];let M=Buffer.allocUnsafe(K),L=0;for(let T=0;T<z.length;T++){let j=z[T];M.set(j,L),L+=j.length}if(L<K)return new J(M.buffer,M.byteOffset,L);return M}function G(z,K,M,L,T){for(let j=0;j<T;j++)M[L+j]=z[j]^K[j&3]}function X(z,K){for(let M=0;M<z.length;M++)z[M]^=K[M&3]}function H(z){if(z.length===z.buffer.byteLength)return z.buffer;return z.buffer.slice(z.byteOffset,z.byteOffset+z.length)}function W(z){if(W.readOnly=!0,Buffer.isBuffer(z))return z;let K;if(z instanceof ArrayBuffer)K=new J(z);else if(ArrayBuffer.isView(z))K=new J(z.buffer,z.byteOffset,z.byteLength);else K=Buffer.from(z),W.readOnly=!1;return K}if($.exports={concat:Y,mask:G,toArrayBuffer:H,toBuffer:W,unmask:X},!process.env.WS_NO_BUFFER_UTIL)try{let z=(()=>{throw Error("Cannot require module bufferutil")})();$.exports.mask=function(K,M,L,T,j){if(j<48)G(K,M,L,T,j);else z.mask(K,M,L,T,j)},$.exports.unmask=function(K,M){if(K.length<32)X(K,M);else z.unmask(K,M)}}catch(z){}}),wJ=ZQ((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])}}}$.exports=Y}),V4=ZQ((Q,$)=>{var Z=d("zlib"),J=p4(),Y=wJ(),{kStatusCode:G}=jQ(),X=Buffer[Symbol.species],H=Buffer.from([0,0,255,255]),W=Symbol("permessage-deflate"),z=Symbol("total-length"),K=Symbol("callback"),M=Symbol("buffers"),L=Symbol("error"),T;class j{constructor(O){if(this._options=O||{},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,!T){let E=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;T=new Y(E)}}static get extensionName(){return"permessage-deflate"}offer(){let O={};if(this._options.serverNoContextTakeover)O.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)O.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)O.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)O.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)O.client_max_window_bits=!0;return O}accept(O){return O=this.normalizeParams(O),this.params=this._isServer?this.acceptAsServer(O):this.acceptAsClient(O),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let O=this._deflate[K];if(this._deflate.close(),this._deflate=null,O)O(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(O){let E=this._options,N=O.find((B)=>{if(E.serverNoContextTakeover===!1&&B.server_no_context_takeover||B.server_max_window_bits&&(E.serverMaxWindowBits===!1||typeof E.serverMaxWindowBits==="number"&&E.serverMaxWindowBits>B.server_max_window_bits)||typeof E.clientMaxWindowBits==="number"&&!B.client_max_window_bits)return!1;return!0});if(!N)throw Error("None of the extension offers can be accepted");if(E.serverNoContextTakeover)N.server_no_context_takeover=!0;if(E.clientNoContextTakeover)N.client_no_context_takeover=!0;if(typeof E.serverMaxWindowBits==="number")N.server_max_window_bits=E.serverMaxWindowBits;if(typeof E.clientMaxWindowBits==="number")N.client_max_window_bits=E.clientMaxWindowBits;else if(N.client_max_window_bits===!0||E.clientMaxWindowBits===!1)delete N.client_max_window_bits;return N}acceptAsClient(O){let E=O[0];if(this._options.clientNoContextTakeover===!1&&E.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!E.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")E.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&E.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return E}normalizeParams(O){return O.forEach((E)=>{Object.keys(E).forEach((N)=>{let B=E[N];if(B.length>1)throw Error(`Parameter "${N}" must have only a single value`);if(B=B[0],N==="client_max_window_bits"){if(B!==!0){let U=+B;if(!Number.isInteger(U)||U<8||U>15)throw TypeError(`Invalid value for parameter "${N}": ${B}`);B=U}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${N}": ${B}`)}else if(N==="server_max_window_bits"){let U=+B;if(!Number.isInteger(U)||U<8||U>15)throw TypeError(`Invalid value for parameter "${N}": ${B}`);B=U}else if(N==="client_no_context_takeover"||N==="server_no_context_takeover"){if(B!==!0)throw TypeError(`Invalid value for parameter "${N}": ${B}`)}else throw Error(`Unknown parameter "${N}"`);E[N]=B})}),O}decompress(O,E,N){T.add((B)=>{this._decompress(O,E,(U,V)=>{B(),N(U,V)})})}compress(O,E,N){T.add((B)=>{this._compress(O,E,(U,V)=>{B(),N(U,V)})})}_decompress(O,E,N){let B=this._isServer?"client":"server";if(!this._inflate){let U=`${B}_max_window_bits`,V=typeof this.params[U]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[U];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:V}),this._inflate[W]=this,this._inflate[z]=0,this._inflate[M]=[],this._inflate.on("error",A),this._inflate.on("data",D)}if(this._inflate[K]=N,this._inflate.write(O),E)this._inflate.write(H);this._inflate.flush(()=>{let U=this._inflate[L];if(U){this._inflate.close(),this._inflate=null,N(U);return}let V=J.concat(this._inflate[M],this._inflate[z]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[z]=0,this._inflate[M]=[],E&&this.params[`${B}_no_context_takeover`])this._inflate.reset();N(null,V)})}_compress(O,E,N){let B=this._isServer?"server":"client";if(!this._deflate){let U=`${B}_max_window_bits`,V=typeof this.params[U]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[U];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:V}),this._deflate[z]=0,this._deflate[M]=[],this._deflate.on("data",q)}this._deflate[K]=N,this._deflate.write(O),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let U=J.concat(this._deflate[M],this._deflate[z]);if(E)U=new X(U.buffer,U.byteOffset,U.length-4);if(this._deflate[K]=null,this._deflate[z]=0,this._deflate[M]=[],E&&this.params[`${B}_no_context_takeover`])this._deflate.reset();N(null,U)})}}$.exports=j;function q(O){this[M].push(O),this[z]+=O.length}function D(O){if(this[z]+=O.length,this[W]._maxPayload<1||this[z]<=this[W]._maxPayload){this[M].push(O);return}this[L]=RangeError("Max payload size exceeded"),this[L].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[L][G]=1009,this.removeListener("data",D),this.reset()}function A(O){if(this[W]._inflate=null,this[L]){this[K](this[L]);return}O[G]=1007,this[K](O)}}),H4=ZQ((Q,$)=>{var{isUtf8:Z}=d("buffer"),{hasBlob:J}=jQ(),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(W){return W>=1000&&W<=1014&&W!==1004&&W!==1005&&W!==1006||W>=3000&&W<=4999}function X(W){let z=W.length,K=0;while(K<z)if((W[K]&128)===0)K++;else if((W[K]&224)===192){if(K+1===z||(W[K+1]&192)!==128||(W[K]&254)===192)return!1;K+=2}else if((W[K]&240)===224){if(K+2>=z||(W[K+1]&192)!==128||(W[K+2]&192)!==128||W[K]===224&&(W[K+1]&224)===128||W[K]===237&&(W[K+1]&224)===160)return!1;K+=3}else if((W[K]&248)===240){if(K+3>=z||(W[K+1]&192)!==128||(W[K+2]&192)!==128||(W[K+3]&192)!==128||W[K]===240&&(W[K+1]&240)===128||W[K]===244&&W[K+1]>143||W[K]>244)return!1;K+=4}else return!1;return!0}function H(W){return J&&typeof W==="object"&&typeof W.arrayBuffer==="function"&&typeof W.type==="string"&&typeof W.stream==="function"&&(W[Symbol.toStringTag]==="Blob"||W[Symbol.toStringTag]==="File")}if($.exports={isBlob:H,isValidStatusCode:G,isValidUTF8:X,tokenChars:Y},Z)$.exports.isValidUTF8=function(W){return W.length<24?X(W):Z(W)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let W=(()=>{throw Error("Cannot require module utf-8-validate")})();$.exports.isValidUTF8=function(z){return z.length<32?X(z):W(z)}}catch(W){}}),h$=ZQ((Q,$)=>{var{Writable:Z}=d("stream"),J=V4(),{BINARY_TYPES:Y,EMPTY_BUFFER:G,kStatusCode:X,kWebSocket:H}=jQ(),{concat:W,toArrayBuffer:z,unmask:K}=p4(),{isValidStatusCode:M,isValidUTF8:L}=H4(),T=Buffer[Symbol.species],j=0,q=1,D=2,A=3,O=4,E=5,N=6;class B extends Z{constructor(U={}){super();this._allowSynchronousEvents=U.allowSynchronousEvents!==void 0?U.allowSynchronousEvents:!0,this._binaryType=U.binaryType||Y[0],this._extensions=U.extensions||{},this._isServer=!!U.isServer,this._maxPayload=U.maxPayload|0,this._skipUTF8Validation=!!U.skipUTF8Validation,this[H]=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=j}_write(U,V,R){if(this._opcode===8&&this._state==j)return R();this._bufferedBytes+=U.length,this._buffers.push(U),this.startLoop(R)}consume(U){if(this._bufferedBytes-=U,U===this._buffers[0].length)return this._buffers.shift();if(U<this._buffers[0].length){let R=this._buffers[0];return this._buffers[0]=new T(R.buffer,R.byteOffset+U,R.length-U),new T(R.buffer,R.byteOffset,U)}let V=Buffer.allocUnsafe(U);do{let R=this._buffers[0],_=V.length-U;if(U>=R.length)V.set(this._buffers.shift(),_);else V.set(new Uint8Array(R.buffer,R.byteOffset,U),_),this._buffers[0]=new T(R.buffer,R.byteOffset+U,R.length-U);U-=R.length}while(U>0);return V}startLoop(U){this._loop=!0;do switch(this._state){case j:this.getInfo(U);break;case q:this.getPayloadLength16(U);break;case D:this.getPayloadLength64(U);break;case A:this.getMask();break;case O:this.getData(U);break;case E:case N:this._loop=!1;return}while(this._loop);if(!this._errored)U()}getInfo(U){if(this._bufferedBytes<2){this._loop=!1;return}let V=this.consume(2);if((V[0]&48)!==0){let _=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");U(_);return}let R=(V[0]&64)===64;if(R&&!this._extensions[J.extensionName]){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");U(_);return}if(this._fin=(V[0]&128)===128,this._opcode=V[0]&15,this._payloadLength=V[1]&127,this._opcode===0){if(R){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");U(_);return}if(!this._fragmented){let _=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");U(_);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");U(_);return}this._compressed=R}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let _=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");U(_);return}if(R){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");U(_);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let _=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");U(_);return}}else{let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");U(_);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(V[1]&128)===128,this._isServer){if(!this._masked){let _=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");U(_);return}}else if(this._masked){let _=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");U(_);return}if(this._payloadLength===126)this._state=q;else if(this._payloadLength===127)this._state=D;else this.haveLength(U)}getPayloadLength16(U){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(U)}getPayloadLength64(U){if(this._bufferedBytes<8){this._loop=!1;return}let V=this.consume(8),R=V.readUInt32BE(0);if(R>Math.pow(2,21)-1){let _=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");U(_);return}this._payloadLength=R*Math.pow(2,32)+V.readUInt32BE(4),this.haveLength(U)}haveLength(U){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let V=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");U(V);return}}if(this._masked)this._state=A;else this._state=O}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=O}getData(U){let V=G;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(V=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)K(V,this._mask)}if(this._opcode>7){this.controlMessage(V,U);return}if(this._compressed){this._state=E,this.decompress(V,U);return}if(V.length)this._messageLength=this._totalPayloadLength,this._fragments.push(V);this.dataMessage(U)}decompress(U,V){this._extensions[J.extensionName].decompress(U,this._fin,(_,P)=>{if(_)return V(_);if(P.length){if(this._messageLength+=P.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let C=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");V(C);return}this._fragments.push(P)}if(this.dataMessage(V),this._state===j)this.startLoop(V)})}dataMessage(U){if(!this._fin){this._state=j;return}let V=this._messageLength,R=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let _;if(this._binaryType==="nodebuffer")_=W(R,V);else if(this._binaryType==="arraybuffer")_=z(W(R,V));else if(this._binaryType==="blob")_=new Blob(R);else _=R;if(this._allowSynchronousEvents)this.emit("message",_,!0),this._state=j;else this._state=N,setImmediate(()=>{this.emit("message",_,!0),this._state=j,this.startLoop(U)})}else{let _=W(R,V);if(!this._skipUTF8Validation&&!L(_)){let P=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");U(P);return}if(this._state===E||this._allowSynchronousEvents)this.emit("message",_,!1),this._state=j;else this._state=N,setImmediate(()=>{this.emit("message",_,!1),this._state=j,this.startLoop(U)})}}controlMessage(U,V){if(this._opcode===8){if(U.length===0)this._loop=!1,this.emit("conclude",1005,G),this.end();else{let R=U.readUInt16BE(0);if(!M(R)){let P=this.createError(RangeError,`invalid status code ${R}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");V(P);return}let _=new T(U.buffer,U.byteOffset+2,U.length-2);if(!this._skipUTF8Validation&&!L(_)){let P=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");V(P);return}this._loop=!1,this.emit("conclude",R,_),this.end()}this._state=j;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",U),this._state=j;else this._state=N,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",U),this._state=j,this.startLoop(V)})}createError(U,V,R,_,P){this._loop=!1,this._errored=!0;let C=new U(R?`Invalid WebSocket frame: ${V}`:V);return Error.captureStackTrace(C,this.createError),C.code=P,C[X]=_,C}}$.exports=B}),u$=ZQ((Q,$)=>{var{Duplex:Z}=d("stream"),{randomFillSync:J}=d("crypto"),Y=V4(),{EMPTY_BUFFER:G,kWebSocket:X,NOOP:H}=jQ(),{isBlob:W,isValidStatusCode:z}=H4(),{mask:K,toBuffer:M}=p4(),L=Symbol("kByteLength"),T=Buffer.alloc(4),j=8192,q,D=j,A=0,O=1,E=2;class N{constructor(V,R,_){if(this._extensions=R||{},_)this._generateMask=_,this._maskBuffer=Buffer.alloc(4);this._socket=V,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=A,this.onerror=H,this[X]=void 0}static frame(V,R){let _,P=!1,C=2,I=!1;if(R.mask){if(_=R.maskBuffer||T,R.generateMask)R.generateMask(_);else{if(D===j){if(q===void 0)q=Buffer.alloc(j);J(q,0,j),D=0}_[0]=q[D++],_[1]=q[D++],_[2]=q[D++],_[3]=q[D++]}I=(_[0]|_[1]|_[2]|_[3])===0,C=6}let k;if(typeof V==="string")if((!R.mask||I)&&R[L]!==void 0)k=R[L];else V=Buffer.from(V),k=V.length;else k=V.length,P=R.mask&&R.readOnly&&!I;let w=k;if(k>=65536)C+=8,w=127;else if(k>125)C+=2,w=126;let y=Buffer.allocUnsafe(P?k+C:C);if(y[0]=R.fin?R.opcode|128:R.opcode,R.rsv1)y[0]|=64;if(y[1]=w,w===126)y.writeUInt16BE(k,2);else if(w===127)y[2]=y[3]=0,y.writeUIntBE(k,4,6);if(!R.mask)return[y,V];if(y[1]|=128,y[C-4]=_[0],y[C-3]=_[1],y[C-2]=_[2],y[C-1]=_[3],I)return[y,V];if(P)return K(V,_,y,C,k),[y];return K(V,_,V,0,k),[y,V]}close(V,R,_,P){let C;if(V===void 0)C=G;else if(typeof V!=="number"||!z(V))throw TypeError("First argument must be a valid error code number");else if(R===void 0||!R.length)C=Buffer.allocUnsafe(2),C.writeUInt16BE(V,0);else{let k=Buffer.byteLength(R);if(k>123)throw RangeError("The message must not be greater than 123 bytes");if(C=Buffer.allocUnsafe(2+k),C.writeUInt16BE(V,0),typeof R==="string")C.write(R,2);else C.set(R,2)}let I={[L]:C.length,fin:!0,generateMask:this._generateMask,mask:_,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==A)this.enqueue([this.dispatch,C,!1,I,P]);else this.sendFrame(N.frame(C,I),P)}ping(V,R,_){let P,C;if(typeof V==="string")P=Buffer.byteLength(V),C=!1;else if(W(V))P=V.size,C=!1;else V=M(V),P=V.length,C=M.readOnly;if(P>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[L]:P,fin:!0,generateMask:this._generateMask,mask:R,maskBuffer:this._maskBuffer,opcode:9,readOnly:C,rsv1:!1};if(W(V))if(this._state!==A)this.enqueue([this.getBlobData,V,!1,I,_]);else this.getBlobData(V,!1,I,_);else if(this._state!==A)this.enqueue([this.dispatch,V,!1,I,_]);else this.sendFrame(N.frame(V,I),_)}pong(V,R,_){let P,C;if(typeof V==="string")P=Buffer.byteLength(V),C=!1;else if(W(V))P=V.size,C=!1;else V=M(V),P=V.length,C=M.readOnly;if(P>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[L]:P,fin:!0,generateMask:this._generateMask,mask:R,maskBuffer:this._maskBuffer,opcode:10,readOnly:C,rsv1:!1};if(W(V))if(this._state!==A)this.enqueue([this.getBlobData,V,!1,I,_]);else this.getBlobData(V,!1,I,_);else if(this._state!==A)this.enqueue([this.dispatch,V,!1,I,_]);else this.sendFrame(N.frame(V,I),_)}send(V,R,_){let P=this._extensions[Y.extensionName],C=R.binary?2:1,I=R.compress,k,w;if(typeof V==="string")k=Buffer.byteLength(V),w=!1;else if(W(V))k=V.size,w=!1;else V=M(V),k=V.length,w=M.readOnly;if(this._firstFragment){if(this._firstFragment=!1,I&&P&&P.params[P._isServer?"server_no_context_takeover":"client_no_context_takeover"])I=k>=P._threshold;this._compress=I}else I=!1,C=0;if(R.fin)this._firstFragment=!0;let y={[L]:k,fin:R.fin,generateMask:this._generateMask,mask:R.mask,maskBuffer:this._maskBuffer,opcode:C,readOnly:w,rsv1:I};if(W(V))if(this._state!==A)this.enqueue([this.getBlobData,V,this._compress,y,_]);else this.getBlobData(V,this._compress,y,_);else if(this._state!==A)this.enqueue([this.dispatch,V,this._compress,y,_]);else this.dispatch(V,this._compress,y,_)}getBlobData(V,R,_,P){this._bufferedBytes+=_[L],this._state=E,V.arrayBuffer().then((C)=>{if(this._socket.destroyed){let k=Error("The socket was closed while the blob was being read");process.nextTick(B,this,k,P);return}this._bufferedBytes-=_[L];let I=M(C);if(!R)this._state=A,this.sendFrame(N.frame(I,_),P),this.dequeue();else this.dispatch(I,R,_,P)}).catch((C)=>{process.nextTick(U,this,C,P)})}dispatch(V,R,_,P){if(!R){this.sendFrame(N.frame(V,_),P);return}let C=this._extensions[Y.extensionName];this._bufferedBytes+=_[L],this._state=O,C.compress(V,_.fin,(I,k)=>{if(this._socket.destroyed){let w=Error("The socket was closed while data was being compressed");B(this,w,P);return}this._bufferedBytes-=_[L],this._state=A,_.readOnly=!1,this.sendFrame(N.frame(k,_),P),this.dequeue()})}dequeue(){while(this._state===A&&this._queue.length){let V=this._queue.shift();this._bufferedBytes-=V[3][L],Reflect.apply(V[0],this,V.slice(1))}}enqueue(V){this._bufferedBytes+=V[3][L],this._queue.push(V)}sendFrame(V,R){if(V.length===2)this._socket.cork(),this._socket.write(V[0]),this._socket.write(V[1],R),this._socket.uncork();else this._socket.write(V[0],R)}}$.exports=N;function B(V,R,_){if(typeof _==="function")_(R);for(let P=0;P<V._queue.length;P++){let C=V._queue[P],I=C[C.length-1];if(typeof I==="function")I(R)}}function U(V,R,_){B(V,R,_),V.onerror(R)}}),SJ=ZQ((Q,$)=>{var{kForOnEventAttribute:Z,kListener:J}=jQ(),Y=Symbol("kCode"),G=Symbol("kData"),X=Symbol("kError"),H=Symbol("kMessage"),W=Symbol("kReason"),z=Symbol("kTarget"),K=Symbol("kType"),M=Symbol("kWasClean");class L{constructor(O){this[z]=null,this[K]=O}get target(){return this[z]}get type(){return this[K]}}Object.defineProperty(L.prototype,"target",{enumerable:!0}),Object.defineProperty(L.prototype,"type",{enumerable:!0});class T extends L{constructor(O,E={}){super(O);this[Y]=E.code===void 0?0:E.code,this[W]=E.reason===void 0?"":E.reason,this[M]=E.wasClean===void 0?!1:E.wasClean}get code(){return this[Y]}get reason(){return this[W]}get wasClean(){return this[M]}}Object.defineProperty(T.prototype,"code",{enumerable:!0}),Object.defineProperty(T.prototype,"reason",{enumerable:!0}),Object.defineProperty(T.prototype,"wasClean",{enumerable:!0});class j extends L{constructor(O,E={}){super(O);this[X]=E.error===void 0?null:E.error,this[H]=E.message===void 0?"":E.message}get error(){return this[X]}get message(){return this[H]}}Object.defineProperty(j.prototype,"error",{enumerable:!0}),Object.defineProperty(j.prototype,"message",{enumerable:!0});class q extends L{constructor(O,E={}){super(O);this[G]=E.data===void 0?null:E.data}get data(){return this[G]}}Object.defineProperty(q.prototype,"data",{enumerable:!0});var D={addEventListener(O,E,N={}){for(let U of this.listeners(O))if(!N[Z]&&U[J]===E&&!U[Z])return;let B;if(O==="message")B=function(V,R){let _=new q("message",{data:R?V:V.toString()});_[z]=this,A(E,this,_)};else if(O==="close")B=function(V,R){let _=new T("close",{code:V,reason:R.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});_[z]=this,A(E,this,_)};else if(O==="error")B=function(V){let R=new j("error",{error:V,message:V.message});R[z]=this,A(E,this,R)};else if(O==="open")B=function(){let V=new L("open");V[z]=this,A(E,this,V)};else return;if(B[Z]=!!N[Z],B[J]=E,N.once)this.once(O,B);else this.on(O,B)},removeEventListener(O,E){for(let N of this.listeners(O))if(N[J]===E&&!N[Z]){this.removeListener(O,N);break}}};$.exports={CloseEvent:T,ErrorEvent:j,Event:L,EventTarget:D,MessageEvent:q};function A(O,E,N){if(typeof O==="object"&&O.handleEvent)O.handleEvent.call(O,N);else O.call(E,N)}}),M8=ZQ((Q,$)=>{var{tokenChars:Z}=H4();function J(X,H,W){if(X[H]===void 0)X[H]=[W];else X[H].push(W)}function Y(X){let H=Object.create(null),W=Object.create(null),z=!1,K=!1,M=!1,L,T,j=-1,q=-1,D=-1,A=0;for(;A<X.length;A++)if(q=X.charCodeAt(A),L===void 0)if(D===-1&&Z[q]===1){if(j===-1)j=A}else if(A!==0&&(q===32||q===9)){if(D===-1&&j!==-1)D=A}else if(q===59||q===44){if(j===-1)throw SyntaxError(`Unexpected character at index ${A}`);if(D===-1)D=A;let E=X.slice(j,D);if(q===44)J(H,E,W),W=Object.create(null);else L=E;j=D=-1}else throw SyntaxError(`Unexpected character at index ${A}`);else if(T===void 0)if(D===-1&&Z[q]===1){if(j===-1)j=A}else if(q===32||q===9){if(D===-1&&j!==-1)D=A}else if(q===59||q===44){if(j===-1)throw SyntaxError(`Unexpected character at index ${A}`);if(D===-1)D=A;if(J(W,X.slice(j,D),!0),q===44)J(H,L,W),W=Object.create(null),L=void 0;j=D=-1}else if(q===61&&j!==-1&&D===-1)T=X.slice(j,A),j=D=-1;else throw SyntaxError(`Unexpected character at index ${A}`);else if(K){if(Z[q]!==1)throw SyntaxError(`Unexpected character at index ${A}`);if(j===-1)j=A;else if(!z)z=!0;K=!1}else if(M)if(Z[q]===1){if(j===-1)j=A}else if(q===34&&j!==-1)M=!1,D=A;else if(q===92)K=!0;else throw SyntaxError(`Unexpected character at index ${A}`);else if(q===34&&X.charCodeAt(A-1)===61)M=!0;else if(D===-1&&Z[q]===1){if(j===-1)j=A}else if(j!==-1&&(q===32||q===9)){if(D===-1)D=A}else if(q===59||q===44){if(j===-1)throw SyntaxError(`Unexpected character at index ${A}`);if(D===-1)D=A;let E=X.slice(j,D);if(z)E=E.replace(/\\/g,""),z=!1;if(J(W,T,E),q===44)J(H,L,W),W=Object.create(null),L=void 0;T=void 0,j=D=-1}else throw SyntaxError(`Unexpected character at index ${A}`);if(j===-1||M||q===32||q===9)throw SyntaxError("Unexpected end of input");if(D===-1)D=A;let O=X.slice(j,D);if(L===void 0)J(H,O,W);else{if(T===void 0)J(W,O,!0);else if(z)J(W,T,O.replace(/\\/g,""));else J(W,T,O);J(H,L,W)}return H}function G(X){return Object.keys(X).map((H)=>{let W=X[H];if(!Array.isArray(W))W=[W];return W.map((z)=>{return[H].concat(Object.keys(z).map((K)=>{let M=z[K];if(!Array.isArray(M))M=[M];return M.map((L)=>L===!0?K:`${K}=${L}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}$.exports={format:G,parse:Y}}),L8=ZQ((Q,$)=>{var Z=d("events"),J=d("https"),Y=d("http"),G=d("net"),X=d("tls"),{randomBytes:H,createHash:W}=d("crypto"),{Duplex:z,Readable:K}=d("stream"),{URL:M}=d("url"),L=V4(),T=h$(),j=u$(),{isBlob:q}=H4(),{BINARY_TYPES:D,CLOSE_TIMEOUT:A,EMPTY_BUFFER:O,GUID:E,kForOnEventAttribute:N,kListener:B,kStatusCode:U,kWebSocket:V,NOOP:R}=jQ(),{EventTarget:{addEventListener:_,removeEventListener:P}}=SJ(),{format:C,parse:I}=M8(),{toBuffer:k}=p4(),w=Symbol("kAborted"),y=[8,13],h=["CONNECTING","OPEN","CLOSING","CLOSED"],n=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class S extends Z{constructor(F,x,v){super();if(this._binaryType=D[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=O,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,F!==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)v=x,x=[];else x=[x];HQ(this,F,x,v)}else this._autoPong=v.autoPong,this._closeTimeout=v.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(F){if(!D.includes(F))return;if(this._binaryType=F,this._receiver)this._receiver._binaryType=F}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(F,x,v){let g=new T({allowSynchronousEvents:v.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:v.maxPayload,skipUTF8Validation:v.skipUTF8Validation}),f=new j(F,this._extensions,v.generateMask);if(this._receiver=g,this._sender=f,this._socket=F,g[V]=this,f[V]=this,F[V]=this,g.on("conclude",g0),g.on("drain",l0),g.on("error",c0),g.on("message",m0),g.on("ping",p0),g.on("pong",d0),f.onerror=n0,F.setTimeout)F.setTimeout(0);if(F.setNoDelay)F.setNoDelay();if(x.length>0)F.unshift(x);F.on("close",u8),F.on("data",E4),F.on("end",g8),F.on("error",l8),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[L.extensionName])this._extensions[L.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=S.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(F,x){if(this.readyState===S.CLOSED)return;if(this.readyState===S.CONNECTING){QQ(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(F,x,!this._isServer,(v)=>{if(v)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),h8(this)}pause(){if(this.readyState===S.CONNECTING||this.readyState===S.CLOSED)return;this._paused=!0,this._socket.pause()}ping(F,x,v){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof F==="function")v=F,F=x=void 0;else if(typeof x==="function")v=x,x=void 0;if(typeof F==="number")F=F.toString();if(this.readyState!==S.OPEN){Z6(this,F,v);return}if(x===void 0)x=!this._isServer;this._sender.ping(F||O,x,v)}pong(F,x,v){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof F==="function")v=F,F=x=void 0;else if(typeof x==="function")v=x,x=void 0;if(typeof F==="number")F=F.toString();if(this.readyState!==S.OPEN){Z6(this,F,v);return}if(x===void 0)x=!this._isServer;this._sender.pong(F||O,x,v)}resume(){if(this.readyState===S.CONNECTING||this.readyState===S.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(F,x,v){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof x==="function")v=x,x={};if(typeof F==="number")F=F.toString();if(this.readyState!==S.OPEN){Z6(this,F,v);return}let g={binary:typeof F!=="string",mask:!this._isServer,compress:!0,fin:!0,...x};if(!this._extensions[L.extensionName])g.compress=!1;this._sender.send(F||O,g,v)}terminate(){if(this.readyState===S.CLOSED)return;if(this.readyState===S.CONNECTING){QQ(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:h.indexOf("CONNECTING")}),Object.defineProperty(S.prototype,"CONNECTING",{enumerable:!0,value:h.indexOf("CONNECTING")}),Object.defineProperty(S,"OPEN",{enumerable:!0,value:h.indexOf("OPEN")}),Object.defineProperty(S.prototype,"OPEN",{enumerable:!0,value:h.indexOf("OPEN")}),Object.defineProperty(S,"CLOSING",{enumerable:!0,value:h.indexOf("CLOSING")}),Object.defineProperty(S.prototype,"CLOSING",{enumerable:!0,value:h.indexOf("CLOSING")}),Object.defineProperty(S,"CLOSED",{enumerable:!0,value:h.indexOf("CLOSED")}),Object.defineProperty(S.prototype,"CLOSED",{enumerable:!0,value:h.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((F)=>{Object.defineProperty(S.prototype,F,{enumerable:!0})}),["open","error","close","message"].forEach((F)=>{Object.defineProperty(S.prototype,`on${F}`,{enumerable:!0,get(){for(let x of this.listeners(F))if(x[N])return x[B];return null},set(x){for(let v of this.listeners(F))if(v[N]){this.removeListener(F,v);break}if(typeof x!=="function")return;this.addEventListener(F,x,{[N]:!0})}})}),S.prototype.addEventListener=_,S.prototype.removeEventListener=P,$.exports=S;function HQ(F,x,v,g){let f={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:A,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(F._autoPong=f.autoPong,F._closeTimeout=f.closeTimeout,!y.includes(f.protocolVersion))throw RangeError(`Unsupported protocol version: ${f.protocolVersion} (supported versions: ${y.join(", ")})`);let c;if(x instanceof M)c=x;else try{c=new M(x)}catch{throw SyntaxError(`Invalid URL: ${x}`)}if(c.protocol==="http:")c.protocol="ws:";else if(c.protocol==="https:")c.protocol="wss:";F._url=c.href;let uQ=c.protocol==="wss:",gQ=c.protocol==="ws+unix:",tQ;if(c.protocol!=="ws:"&&!uQ&&!gQ)tQ=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(gQ&&!c.pathname)tQ="The URL's pathname is empty";else if(c.hash)tQ="The URL contains a fragment identifier";if(tQ){let l=SyntaxError(tQ);if(F._redirects===0)throw l;else{DQ(F,l);return}}let c8=uQ?443:80,m8=H(16).toString("base64"),p8=uQ?J.request:Y.request,eQ=new Set,Q4;if(f.createConnection=f.createConnection||(uQ?$6:Q6),f.defaultPort=f.defaultPort||c8,f.port=c.port||c8,f.host=c.hostname.startsWith("[")?c.hostname.slice(1,-1):c.hostname,f.headers={...f.headers,"Sec-WebSocket-Version":f.protocolVersion,"Sec-WebSocket-Key":m8,Connection:"Upgrade",Upgrade:"websocket"},f.path=c.pathname+c.search,f.timeout=f.handshakeTimeout,f.perMessageDeflate)Q4=new L({...f.perMessageDeflate,isServer:!1,maxPayload:f.maxPayload}),f.headers["Sec-WebSocket-Extensions"]=C({[L.extensionName]:Q4.offer()});if(v.length){for(let l of v){if(typeof l!=="string"||!n.test(l)||eQ.has(l))throw SyntaxError("An invalid or duplicated subprotocol was specified");eQ.add(l)}f.headers["Sec-WebSocket-Protocol"]=v.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(gQ){let l=f.path.split(":");f.socketPath=l[0],f.path=l[1]}let p;if(f.followRedirects){if(F._redirects===0){F._originalIpc=gQ,F._originalSecure=uQ,F._originalHostOrSocketPath=gQ?f.socketPath:c.host;let l=g&&g.headers;if(g={...g,headers:{}},l)for(let[r,lQ]of Object.entries(l))g.headers[r.toLowerCase()]=lQ}else if(F.listenerCount("redirect")===0){let l=gQ?F._originalIpc?f.socketPath===F._originalHostOrSocketPath:!1:F._originalIpc?!1:c.host===F._originalHostOrSocketPath;if(!l||F._originalSecure&&!uQ){if(delete f.headers.authorization,delete f.headers.cookie,!l)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(p=F._req=p8(f),F._redirects)F.emit("redirect",F.url,p)}else p=F._req=p8(f);if(f.timeout)p.on("timeout",()=>{QQ(F,p,"Opening handshake has timed out")});if(p.on("error",(l)=>{if(p===null||p[w])return;p=F._req=null,DQ(F,l)}),p.on("response",(l)=>{let r=l.headers.location,lQ=l.statusCode;if(r&&f.followRedirects&&lQ>=300&&lQ<400){if(++F._redirects>f.maxRedirects){QQ(F,p,"Maximum redirects exceeded");return}p.abort();let $4;try{$4=new M(r,x)}catch(d8){let cQ=SyntaxError(`Invalid URL: ${r}`);DQ(F,cQ);return}HQ(F,$4,v,g)}else if(!F.emit("unexpected-response",p,l))QQ(F,p,`Unexpected server response: ${l.statusCode}`)}),p.on("upgrade",(l,r,lQ)=>{if(F.emit("upgrade",l),F.readyState!==S.CONNECTING)return;p=F._req=null;let $4=l.headers.upgrade;if($4===void 0||$4.toLowerCase()!=="websocket"){QQ(F,r,"Invalid Upgrade header");return}let d8=W("sha1").update(m8+E).digest("base64");if(l.headers["sec-websocket-accept"]!==d8){QQ(F,r,"Invalid Sec-WebSocket-Accept header");return}let cQ=l.headers["sec-websocket-protocol"],Z4;if(cQ!==void 0){if(!eQ.size)Z4="Server sent a subprotocol but none was requested";else if(!eQ.has(cQ))Z4="Server sent an invalid subprotocol"}else if(eQ.size)Z4="Server sent no subprotocol";if(Z4){QQ(F,r,Z4);return}if(cQ)F._protocol=cQ;let n8=l.headers["sec-websocket-extensions"];if(n8!==void 0){if(!Q4){QQ(F,r,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let J6;try{J6=I(n8)}catch(Y6){QQ(F,r,"Invalid Sec-WebSocket-Extensions header");return}let i8=Object.keys(J6);if(i8.length!==1||i8[0]!==L.extensionName){QQ(F,r,"Server indicated an extension that was not requested");return}try{Q4.accept(J6[L.extensionName])}catch(Y6){QQ(F,r,"Invalid Sec-WebSocket-Extensions header");return}F._extensions[L.extensionName]=Q4}F.setSocket(r,lQ,{allowSynchronousEvents:f.allowSynchronousEvents,generateMask:f.generateMask,maxPayload:f.maxPayload,skipUTF8Validation:f.skipUTF8Validation})}),f.finishRequest)f.finishRequest(p,F);else p.end()}function DQ(F,x){F._readyState=S.CLOSING,F._errorEmitted=!0,F.emit("error",x),F.emitClose()}function Q6(F){return F.path=F.socketPath,G.connect(F)}function $6(F){if(F.path=void 0,!F.servername&&F.servername!=="")F.servername=G.isIP(F.host)?"":F.host;return X.connect(F)}function QQ(F,x,v){F._readyState=S.CLOSING;let g=Error(v);if(Error.captureStackTrace(g,QQ),x.setHeader){if(x[w]=!0,x.abort(),x.socket&&!x.socket.destroyed)x.socket.destroy();process.nextTick(DQ,F,g)}else x.destroy(g),x.once("error",F.emit.bind(F,"error")),x.once("close",F.emitClose.bind(F))}function Z6(F,x,v){if(x){let g=q(x)?x.size:k(x).length;if(F._socket)F._sender._bufferedBytes+=g;else F._bufferedAmount+=g}if(v){let g=Error(`WebSocket is not open: readyState ${F.readyState} (${h[F.readyState]})`);process.nextTick(v,g)}}function g0(F,x){let v=this[V];if(v._closeFrameReceived=!0,v._closeMessage=x,v._closeCode=F,v._socket[V]===void 0)return;if(v._socket.removeListener("data",E4),process.nextTick(v8,v._socket),F===1005)v.close();else v.close(F,x)}function l0(){let F=this[V];if(!F.isPaused)F._socket.resume()}function c0(F){let x=this[V];if(x._socket[V]!==void 0)x._socket.removeListener("data",E4),process.nextTick(v8,x._socket),x.close(F[U]);if(!x._errorEmitted)x._errorEmitted=!0,x.emit("error",F)}function b8(){this[V].emitClose()}function m0(F,x){this[V].emit("message",F,x)}function p0(F){let x=this[V];if(x._autoPong)x.pong(F,!this._isServer,R);x.emit("ping",F)}function d0(F){this[V].emit("pong",F)}function v8(F){F.resume()}function n0(F){let x=this[V];if(x.readyState===S.CLOSED)return;if(x.readyState===S.OPEN)x._readyState=S.CLOSING,h8(x);if(this._socket.end(),!x._errorEmitted)x._errorEmitted=!0,x.emit("error",F)}function h8(F){F._closeTimer=setTimeout(F._socket.destroy.bind(F._socket),F._closeTimeout)}function u8(){let F=this[V];if(this.removeListener("close",u8),this.removeListener("data",E4),this.removeListener("end",g8),F._readyState=S.CLOSING,!this._readableState.endEmitted&&!F._closeFrameReceived&&!F._receiver._writableState.errorEmitted&&this._readableState.length!==0){let x=this.read(this._readableState.length);F._receiver.write(x)}if(F._receiver.end(),this[V]=void 0,clearTimeout(F._closeTimer),F._receiver._writableState.finished||F._receiver._writableState.errorEmitted)F.emitClose();else F._receiver.on("error",b8),F._receiver.on("finish",b8)}function E4(F){if(!this[V]._receiver.write(F))this.pause()}function g8(){let F=this[V];F._readyState=S.CLOSING,F._receiver.end(),this.end()}function l8(){let F=this[V];if(this.removeListener("error",l8),this.on("error",R),F)F._readyState=S.CLOSING,this.destroy()}}),yJ=ZQ((Q,$)=>{var Z=L8(),{Duplex:J}=d("stream");function Y(W){W.emit("close")}function G(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function X(W){if(this.removeListener("error",X),this.destroy(),this.listenerCount("error")===0)this.emit("error",W)}function H(W,z){let K=!0,M=new J({...z,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return W.on("message",function(T,j){let q=!j&&M._readableState.objectMode?T.toString():T;if(!M.push(q))W.pause()}),W.once("error",function(T){if(M.destroyed)return;K=!1,M.destroy(T)}),W.once("close",function(){if(M.destroyed)return;M.push(null)}),M._destroy=function(L,T){if(W.readyState===W.CLOSED){T(L),process.nextTick(Y,M);return}let j=!1;if(W.once("error",function(D){j=!0,T(D)}),W.once("close",function(){if(!j)T(L);process.nextTick(Y,M)}),K)W.terminate()},M._final=function(L){if(W.readyState===W.CONNECTING){W.once("open",function(){M._final(L)});return}if(W._socket===null)return;if(W._socket._writableState.finished){if(L(),M._readableState.endEmitted)M.destroy()}else W._socket.once("finish",function(){L()}),W.close()},M._read=function(){if(W.isPaused)W.resume()},M._write=function(L,T,j){if(W.readyState===W.CONNECTING){W.once("open",function(){M._write(L,T,j)});return}W.send(L,j)},M.on("end",G),M.on("error",X),M}$.exports=H}),g$=ZQ((Q,$)=>{var{tokenChars:Z}=H4();function J(Y){let G=new Set,X=-1,H=-1,W=0;for(W;W<Y.length;W++){let K=Y.charCodeAt(W);if(H===-1&&Z[K]===1){if(X===-1)X=W}else if(W!==0&&(K===32||K===9)){if(H===-1&&X!==-1)H=W}else if(K===44){if(X===-1)throw SyntaxError(`Unexpected character at index ${W}`);if(H===-1)H=W;let M=Y.slice(X,H);if(G.has(M))throw SyntaxError(`The "${M}" subprotocol is duplicated`);G.add(M),X=H=-1}else throw SyntaxError(`Unexpected character at index ${W}`)}if(X===-1||H!==-1)throw SyntaxError("Unexpected end of input");let z=Y.slice(X,W);if(G.has(z))throw SyntaxError(`The "${z}" subprotocol is duplicated`);return G.add(z),G}$.exports={parse:J}}),fJ=ZQ((Q,$)=>{var Z=d("events"),J=d("http"),{Duplex:Y}=d("stream"),{createHash:G}=d("crypto"),X=M8(),H=V4(),W=g$(),z=L8(),{CLOSE_TIMEOUT:K,GUID:M,kWebSocket:L}=jQ(),T=/^[+/0-9A-Za-z]{22}==$/,j=0,q=1,D=2;class A extends Z{constructor(V,R){super();if(V={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:K,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:z,...V},V.port==null&&!V.server&&!V.noServer||V.port!=null&&(V.server||V.noServer)||V.server&&V.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(V.port!=null)this._server=J.createServer((_,P)=>{let C=J.STATUS_CODES[426];P.writeHead(426,{"Content-Length":C.length,"Content-Type":"text/plain"}),P.end(C)}),this._server.listen(V.port,V.host,V.backlog,R);else if(V.server)this._server=V.server;if(this._server){let _=this.emit.bind(this,"connection");this._removeListeners=O(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(P,C,I)=>{this.handleUpgrade(P,C,I,_)}})}if(V.perMessageDeflate===!0)V.perMessageDeflate={};if(V.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=V,this._state=j}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(V){if(this._state===D){if(V)this.once("close",()=>{V(Error("The server is not running"))});process.nextTick(E,this);return}if(V)this.once("close",V);if(this._state===q)return;if(this._state=q,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(E,this);else this._shouldEmitClose=!0;else process.nextTick(E,this)}else{let R=this._server;this._removeListeners(),this._removeListeners=this._server=null,R.close(()=>{E(this)})}}shouldHandle(V){if(this.options.path){let R=V.url.indexOf("?");if((R!==-1?V.url.slice(0,R):V.url)!==this.options.path)return!1}return!0}handleUpgrade(V,R,_,P){R.on("error",N);let C=V.headers["sec-websocket-key"],I=V.headers.upgrade,k=+V.headers["sec-websocket-version"];if(V.method!=="GET"){U(this,V,R,405,"Invalid HTTP method");return}if(I===void 0||I.toLowerCase()!=="websocket"){U(this,V,R,400,"Invalid Upgrade header");return}if(C===void 0||!T.test(C)){U(this,V,R,400,"Missing or invalid Sec-WebSocket-Key header");return}if(k!==13&&k!==8){U(this,V,R,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(V)){B(R,400);return}let w=V.headers["sec-websocket-protocol"],y=new Set;if(w!==void 0)try{y=W.parse(w)}catch(S){U(this,V,R,400,"Invalid Sec-WebSocket-Protocol header");return}let h=V.headers["sec-websocket-extensions"],n={};if(this.options.perMessageDeflate&&h!==void 0){let S=new H({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let HQ=X.parse(h);if(HQ[H.extensionName])S.accept(HQ[H.extensionName]),n[H.extensionName]=S}catch(HQ){U(this,V,R,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let S={origin:V.headers[`${k===8?"sec-websocket-origin":"origin"}`],secure:!!(V.socket.authorized||V.socket.encrypted),req:V};if(this.options.verifyClient.length===2){this.options.verifyClient(S,(HQ,DQ,Q6,$6)=>{if(!HQ)return B(R,DQ||401,Q6,$6);this.completeUpgrade(n,C,y,V,R,_,P)});return}if(!this.options.verifyClient(S))return B(R,401)}this.completeUpgrade(n,C,y,V,R,_,P)}completeUpgrade(V,R,_,P,C,I,k){if(!C.readable||!C.writable)return C.destroy();if(C[L])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>j)return B(C,503);let y=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${G("sha1").update(R+M).digest("base64")}`],h=new this.options.WebSocket(null,void 0,this.options);if(_.size){let n=this.options.handleProtocols?this.options.handleProtocols(_,P):_.values().next().value;if(n)y.push(`Sec-WebSocket-Protocol: ${n}`),h._protocol=n}if(V[H.extensionName]){let n=V[H.extensionName].params,S=X.format({[H.extensionName]:[n]});y.push(`Sec-WebSocket-Extensions: ${S}`),h._extensions=V}if(this.emit("headers",y,P),C.write(y.concat(`\r
88
+ }`,v1=65536,g1,l1,m1,n1=1500;var z0=XQ(()=>{AJ=Object.create,CJ=Object.getPrototypeOf,k$=Object.defineProperty,PJ=Object.getOwnPropertyNames,IJ=Object.prototype.hasOwnProperty;n=DJ(import.meta.url),jQ=ZQ((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:()=>{}}}),p4=ZQ((Q,$)=>{var{EMPTY_BUFFER:Z}=jQ(),J=Buffer[Symbol.species];function Y(z,K){if(z.length===0)return Z;if(z.length===1)return z[0];let M=Buffer.allocUnsafe(K),L=0;for(let T=0;T<z.length;T++){let j=z[T];M.set(j,L),L+=j.length}if(L<K)return new J(M.buffer,M.byteOffset,L);return M}function X(z,K,M,L,T){for(let j=0;j<T;j++)M[L+j]=z[j]^K[j&3]}function G(z,K){for(let M=0;M<z.length;M++)z[M]^=K[M&3]}function H(z){if(z.length===z.buffer.byteLength)return z.buffer;return z.buffer.slice(z.byteOffset,z.byteOffset+z.length)}function W(z){if(W.readOnly=!0,Buffer.isBuffer(z))return z;let K;if(z instanceof ArrayBuffer)K=new J(z);else if(ArrayBuffer.isView(z))K=new J(z.buffer,z.byteOffset,z.byteLength);else K=Buffer.from(z),W.readOnly=!1;return K}if($.exports={concat:Y,mask:X,toArrayBuffer:H,toBuffer:W,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let z=(()=>{throw Error("Cannot require module bufferutil")})();$.exports.mask=function(K,M,L,T,j){if(j<48)X(K,M,L,T,j);else z.mask(K,M,L,T,j)},$.exports.unmask=function(K,M){if(K.length<32)G(K,M);else z.unmask(K,M)}}catch(z){}}),wJ=ZQ((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}),V4=ZQ((Q,$)=>{var Z=n("zlib"),J=p4(),Y=wJ(),{kStatusCode:X}=jQ(),G=Buffer[Symbol.species],H=Buffer.from([0,0,255,255]),W=Symbol("permessage-deflate"),z=Symbol("total-length"),K=Symbol("callback"),M=Symbol("buffers"),L=Symbol("error"),T;class j{constructor(q){if(this._options=q||{},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,!T){let E=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;T=new Y(E)}}static get extensionName(){return"permessage-deflate"}offer(){let q={};if(this._options.serverNoContextTakeover)q.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)q.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)q.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)q.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)q.client_max_window_bits=!0;return q}accept(q){return q=this.normalizeParams(q),this.params=this._isServer?this.acceptAsServer(q):this.acceptAsClient(q),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let q=this._deflate[K];if(this._deflate.close(),this._deflate=null,q)q(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(q){let E=this._options,N=q.find((B)=>{if(E.serverNoContextTakeover===!1&&B.server_no_context_takeover||B.server_max_window_bits&&(E.serverMaxWindowBits===!1||typeof E.serverMaxWindowBits==="number"&&E.serverMaxWindowBits>B.server_max_window_bits)||typeof E.clientMaxWindowBits==="number"&&!B.client_max_window_bits)return!1;return!0});if(!N)throw Error("None of the extension offers can be accepted");if(E.serverNoContextTakeover)N.server_no_context_takeover=!0;if(E.clientNoContextTakeover)N.client_no_context_takeover=!0;if(typeof E.serverMaxWindowBits==="number")N.server_max_window_bits=E.serverMaxWindowBits;if(typeof E.clientMaxWindowBits==="number")N.client_max_window_bits=E.clientMaxWindowBits;else if(N.client_max_window_bits===!0||E.clientMaxWindowBits===!1)delete N.client_max_window_bits;return N}acceptAsClient(q){let E=q[0];if(this._options.clientNoContextTakeover===!1&&E.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!E.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")E.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&E.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return E}normalizeParams(q){return q.forEach((E)=>{Object.keys(E).forEach((N)=>{let B=E[N];if(B.length>1)throw Error(`Parameter "${N}" must have only a single value`);if(B=B[0],N==="client_max_window_bits"){if(B!==!0){let R=+B;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${N}": ${B}`);B=R}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${N}": ${B}`)}else if(N==="server_max_window_bits"){let R=+B;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${N}": ${B}`);B=R}else if(N==="client_no_context_takeover"||N==="server_no_context_takeover"){if(B!==!0)throw TypeError(`Invalid value for parameter "${N}": ${B}`)}else throw Error(`Unknown parameter "${N}"`);E[N]=B})}),q}decompress(q,E,N){T.add((B)=>{this._decompress(q,E,(R,V)=>{B(),N(R,V)})})}compress(q,E,N){T.add((B)=>{this._compress(q,E,(R,V)=>{B(),N(R,V)})})}_decompress(q,E,N){let B=this._isServer?"client":"server";if(!this._inflate){let R=`${B}_max_window_bits`,V=typeof this.params[R]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[R];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:V}),this._inflate[W]=this,this._inflate[z]=0,this._inflate[M]=[],this._inflate.on("error",D),this._inflate.on("data",A)}if(this._inflate[K]=N,this._inflate.write(q),E)this._inflate.write(H);this._inflate.flush(()=>{let R=this._inflate[L];if(R){this._inflate.close(),this._inflate=null,N(R);return}let V=J.concat(this._inflate[M],this._inflate[z]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[z]=0,this._inflate[M]=[],E&&this.params[`${B}_no_context_takeover`])this._inflate.reset();N(null,V)})}_compress(q,E,N){let B=this._isServer?"server":"client";if(!this._deflate){let R=`${B}_max_window_bits`,V=typeof this.params[R]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[R];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:V}),this._deflate[z]=0,this._deflate[M]=[],this._deflate.on("data",O)}this._deflate[K]=N,this._deflate.write(q),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let R=J.concat(this._deflate[M],this._deflate[z]);if(E)R=new G(R.buffer,R.byteOffset,R.length-4);if(this._deflate[K]=null,this._deflate[z]=0,this._deflate[M]=[],E&&this.params[`${B}_no_context_takeover`])this._deflate.reset();N(null,R)})}}$.exports=j;function O(q){this[M].push(q),this[z]+=q.length}function A(q){if(this[z]+=q.length,this[W]._maxPayload<1||this[z]<=this[W]._maxPayload){this[M].push(q);return}this[L]=RangeError("Max payload size exceeded"),this[L].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[L][X]=1009,this.removeListener("data",A),this.reset()}function D(q){if(this[W]._inflate=null,this[L]){this[K](this[L]);return}q[X]=1007,this[K](q)}}),H4=ZQ((Q,$)=>{var{isUtf8:Z}=n("buffer"),{hasBlob:J}=jQ(),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(W){return W>=1000&&W<=1014&&W!==1004&&W!==1005&&W!==1006||W>=3000&&W<=4999}function G(W){let z=W.length,K=0;while(K<z)if((W[K]&128)===0)K++;else if((W[K]&224)===192){if(K+1===z||(W[K+1]&192)!==128||(W[K]&254)===192)return!1;K+=2}else if((W[K]&240)===224){if(K+2>=z||(W[K+1]&192)!==128||(W[K+2]&192)!==128||W[K]===224&&(W[K+1]&224)===128||W[K]===237&&(W[K+1]&224)===160)return!1;K+=3}else if((W[K]&248)===240){if(K+3>=z||(W[K+1]&192)!==128||(W[K+2]&192)!==128||(W[K+3]&192)!==128||W[K]===240&&(W[K+1]&240)===128||W[K]===244&&W[K+1]>143||W[K]>244)return!1;K+=4}else return!1;return!0}function H(W){return J&&typeof W==="object"&&typeof W.arrayBuffer==="function"&&typeof W.type==="string"&&typeof W.stream==="function"&&(W[Symbol.toStringTag]==="Blob"||W[Symbol.toStringTag]==="File")}if($.exports={isBlob:H,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)$.exports.isValidUTF8=function(W){return W.length<24?G(W):Z(W)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let W=(()=>{throw Error("Cannot require module utf-8-validate")})();$.exports.isValidUTF8=function(z){return z.length<32?G(z):W(z)}}catch(W){}}),h$=ZQ((Q,$)=>{var{Writable:Z}=n("stream"),J=V4(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:H}=jQ(),{concat:W,toArrayBuffer:z,unmask:K}=p4(),{isValidStatusCode:M,isValidUTF8:L}=H4(),T=Buffer[Symbol.species],j=0,O=1,A=2,D=3,q=4,E=5,N=6;class B extends Z{constructor(R={}){super();this._allowSynchronousEvents=R.allowSynchronousEvents!==void 0?R.allowSynchronousEvents:!0,this._binaryType=R.binaryType||Y[0],this._extensions=R.extensions||{},this._isServer=!!R.isServer,this._maxPayload=R.maxPayload|0,this._skipUTF8Validation=!!R.skipUTF8Validation,this[H]=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=j}_write(R,V,U){if(this._opcode===8&&this._state==j)return U();this._bufferedBytes+=R.length,this._buffers.push(R),this.startLoop(U)}consume(R){if(this._bufferedBytes-=R,R===this._buffers[0].length)return this._buffers.shift();if(R<this._buffers[0].length){let U=this._buffers[0];return this._buffers[0]=new T(U.buffer,U.byteOffset+R,U.length-R),new T(U.buffer,U.byteOffset,R)}let V=Buffer.allocUnsafe(R);do{let U=this._buffers[0],_=V.length-R;if(R>=U.length)V.set(this._buffers.shift(),_);else V.set(new Uint8Array(U.buffer,U.byteOffset,R),_),this._buffers[0]=new T(U.buffer,U.byteOffset+R,U.length-R);R-=U.length}while(R>0);return V}startLoop(R){this._loop=!0;do switch(this._state){case j:this.getInfo(R);break;case O:this.getPayloadLength16(R);break;case A:this.getPayloadLength64(R);break;case D:this.getMask();break;case q:this.getData(R);break;case E:case N:this._loop=!1;return}while(this._loop);if(!this._errored)R()}getInfo(R){if(this._bufferedBytes<2){this._loop=!1;return}let V=this.consume(2);if((V[0]&48)!==0){let _=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");R(_);return}let U=(V[0]&64)===64;if(U&&!this._extensions[J.extensionName]){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(_);return}if(this._fin=(V[0]&128)===128,this._opcode=V[0]&15,this._payloadLength=V[1]&127,this._opcode===0){if(U){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(_);return}if(!this._fragmented){let _=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");R(_);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(_);return}this._compressed=U}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let _=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");R(_);return}if(U){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(_);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let _=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");R(_);return}}else{let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(_);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(V[1]&128)===128,this._isServer){if(!this._masked){let _=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");R(_);return}}else if(this._masked){let _=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");R(_);return}if(this._payloadLength===126)this._state=O;else if(this._payloadLength===127)this._state=A;else this.haveLength(R)}getPayloadLength16(R){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(R)}getPayloadLength64(R){if(this._bufferedBytes<8){this._loop=!1;return}let V=this.consume(8),U=V.readUInt32BE(0);if(U>Math.pow(2,21)-1){let _=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");R(_);return}this._payloadLength=U*Math.pow(2,32)+V.readUInt32BE(4),this.haveLength(R)}haveLength(R){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let V=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");R(V);return}}if(this._masked)this._state=D;else this._state=q}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=q}getData(R){let V=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(V=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)K(V,this._mask)}if(this._opcode>7){this.controlMessage(V,R);return}if(this._compressed){this._state=E,this.decompress(V,R);return}if(V.length)this._messageLength=this._totalPayloadLength,this._fragments.push(V);this.dataMessage(R)}decompress(R,V){this._extensions[J.extensionName].decompress(R,this._fin,(_,P)=>{if(_)return V(_);if(P.length){if(this._messageLength+=P.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let C=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");V(C);return}this._fragments.push(P)}if(this.dataMessage(V),this._state===j)this.startLoop(V)})}dataMessage(R){if(!this._fin){this._state=j;return}let V=this._messageLength,U=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let _;if(this._binaryType==="nodebuffer")_=W(U,V);else if(this._binaryType==="arraybuffer")_=z(W(U,V));else if(this._binaryType==="blob")_=new Blob(U);else _=U;if(this._allowSynchronousEvents)this.emit("message",_,!0),this._state=j;else this._state=N,setImmediate(()=>{this.emit("message",_,!0),this._state=j,this.startLoop(R)})}else{let _=W(U,V);if(!this._skipUTF8Validation&&!L(_)){let P=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");R(P);return}if(this._state===E||this._allowSynchronousEvents)this.emit("message",_,!1),this._state=j;else this._state=N,setImmediate(()=>{this.emit("message",_,!1),this._state=j,this.startLoop(R)})}}controlMessage(R,V){if(this._opcode===8){if(R.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let U=R.readUInt16BE(0);if(!M(U)){let P=this.createError(RangeError,`invalid status code ${U}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");V(P);return}let _=new T(R.buffer,R.byteOffset+2,R.length-2);if(!this._skipUTF8Validation&&!L(_)){let P=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");V(P);return}this._loop=!1,this.emit("conclude",U,_),this.end()}this._state=j;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",R),this._state=j;else this._state=N,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",R),this._state=j,this.startLoop(V)})}createError(R,V,U,_,P){this._loop=!1,this._errored=!0;let C=new R(U?`Invalid WebSocket frame: ${V}`:V);return Error.captureStackTrace(C,this.createError),C.code=P,C[G]=_,C}}$.exports=B}),u$=ZQ((Q,$)=>{var{Duplex:Z}=n("stream"),{randomFillSync:J}=n("crypto"),Y=V4(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:H}=jQ(),{isBlob:W,isValidStatusCode:z}=H4(),{mask:K,toBuffer:M}=p4(),L=Symbol("kByteLength"),T=Buffer.alloc(4),j=8192,O,A=j,D=0,q=1,E=2;class N{constructor(V,U,_){if(this._extensions=U||{},_)this._generateMask=_,this._maskBuffer=Buffer.alloc(4);this._socket=V,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=D,this.onerror=H,this[G]=void 0}static frame(V,U){let _,P=!1,C=2,I=!1;if(U.mask){if(_=U.maskBuffer||T,U.generateMask)U.generateMask(_);else{if(A===j){if(O===void 0)O=Buffer.alloc(j);J(O,0,j),A=0}_[0]=O[A++],_[1]=O[A++],_[2]=O[A++],_[3]=O[A++]}I=(_[0]|_[1]|_[2]|_[3])===0,C=6}let k;if(typeof V==="string")if((!U.mask||I)&&U[L]!==void 0)k=U[L];else V=Buffer.from(V),k=V.length;else k=V.length,P=U.mask&&U.readOnly&&!I;let y=k;if(k>=65536)C+=8,y=127;else if(k>125)C+=2,y=126;let f=Buffer.allocUnsafe(P?k+C:C);if(f[0]=U.fin?U.opcode|128:U.opcode,U.rsv1)f[0]|=64;if(f[1]=y,y===126)f.writeUInt16BE(k,2);else if(y===127)f[2]=f[3]=0,f.writeUIntBE(k,4,6);if(!U.mask)return[f,V];if(f[1]|=128,f[C-4]=_[0],f[C-3]=_[1],f[C-2]=_[2],f[C-1]=_[3],I)return[f,V];if(P)return K(V,_,f,C,k),[f];return K(V,_,V,0,k),[f,V]}close(V,U,_,P){let C;if(V===void 0)C=X;else if(typeof V!=="number"||!z(V))throw TypeError("First argument must be a valid error code number");else if(U===void 0||!U.length)C=Buffer.allocUnsafe(2),C.writeUInt16BE(V,0);else{let k=Buffer.byteLength(U);if(k>123)throw RangeError("The message must not be greater than 123 bytes");if(C=Buffer.allocUnsafe(2+k),C.writeUInt16BE(V,0),typeof U==="string")C.write(U,2);else C.set(U,2)}let I={[L]:C.length,fin:!0,generateMask:this._generateMask,mask:_,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==D)this.enqueue([this.dispatch,C,!1,I,P]);else this.sendFrame(N.frame(C,I),P)}ping(V,U,_){let P,C;if(typeof V==="string")P=Buffer.byteLength(V),C=!1;else if(W(V))P=V.size,C=!1;else V=M(V),P=V.length,C=M.readOnly;if(P>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[L]:P,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:9,readOnly:C,rsv1:!1};if(W(V))if(this._state!==D)this.enqueue([this.getBlobData,V,!1,I,_]);else this.getBlobData(V,!1,I,_);else if(this._state!==D)this.enqueue([this.dispatch,V,!1,I,_]);else this.sendFrame(N.frame(V,I),_)}pong(V,U,_){let P,C;if(typeof V==="string")P=Buffer.byteLength(V),C=!1;else if(W(V))P=V.size,C=!1;else V=M(V),P=V.length,C=M.readOnly;if(P>125)throw RangeError("The data size must not be greater than 125 bytes");let I={[L]:P,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:10,readOnly:C,rsv1:!1};if(W(V))if(this._state!==D)this.enqueue([this.getBlobData,V,!1,I,_]);else this.getBlobData(V,!1,I,_);else if(this._state!==D)this.enqueue([this.dispatch,V,!1,I,_]);else this.sendFrame(N.frame(V,I),_)}send(V,U,_){let P=this._extensions[Y.extensionName],C=U.binary?2:1,I=U.compress,k,y;if(typeof V==="string")k=Buffer.byteLength(V),y=!1;else if(W(V))k=V.size,y=!1;else V=M(V),k=V.length,y=M.readOnly;if(this._firstFragment){if(this._firstFragment=!1,I&&P&&P.params[P._isServer?"server_no_context_takeover":"client_no_context_takeover"])I=k>=P._threshold;this._compress=I}else I=!1,C=0;if(U.fin)this._firstFragment=!0;let f={[L]:k,fin:U.fin,generateMask:this._generateMask,mask:U.mask,maskBuffer:this._maskBuffer,opcode:C,readOnly:y,rsv1:I};if(W(V))if(this._state!==D)this.enqueue([this.getBlobData,V,this._compress,f,_]);else this.getBlobData(V,this._compress,f,_);else if(this._state!==D)this.enqueue([this.dispatch,V,this._compress,f,_]);else this.dispatch(V,this._compress,f,_)}getBlobData(V,U,_,P){this._bufferedBytes+=_[L],this._state=E,V.arrayBuffer().then((C)=>{if(this._socket.destroyed){let k=Error("The socket was closed while the blob was being read");process.nextTick(B,this,k,P);return}this._bufferedBytes-=_[L];let I=M(C);if(!U)this._state=D,this.sendFrame(N.frame(I,_),P),this.dequeue();else this.dispatch(I,U,_,P)}).catch((C)=>{process.nextTick(R,this,C,P)})}dispatch(V,U,_,P){if(!U){this.sendFrame(N.frame(V,_),P);return}let C=this._extensions[Y.extensionName];this._bufferedBytes+=_[L],this._state=q,C.compress(V,_.fin,(I,k)=>{if(this._socket.destroyed){let y=Error("The socket was closed while data was being compressed");B(this,y,P);return}this._bufferedBytes-=_[L],this._state=D,_.readOnly=!1,this.sendFrame(N.frame(k,_),P),this.dequeue()})}dequeue(){while(this._state===D&&this._queue.length){let V=this._queue.shift();this._bufferedBytes-=V[3][L],Reflect.apply(V[0],this,V.slice(1))}}enqueue(V){this._bufferedBytes+=V[3][L],this._queue.push(V)}sendFrame(V,U){if(V.length===2)this._socket.cork(),this._socket.write(V[0]),this._socket.write(V[1],U),this._socket.uncork();else this._socket.write(V[0],U)}}$.exports=N;function B(V,U,_){if(typeof _==="function")_(U);for(let P=0;P<V._queue.length;P++){let C=V._queue[P],I=C[C.length-1];if(typeof I==="function")I(U)}}function R(V,U,_){B(V,U,_),V.onerror(U)}}),yJ=ZQ((Q,$)=>{var{kForOnEventAttribute:Z,kListener:J}=jQ(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),H=Symbol("kMessage"),W=Symbol("kReason"),z=Symbol("kTarget"),K=Symbol("kType"),M=Symbol("kWasClean");class L{constructor(q){this[z]=null,this[K]=q}get target(){return this[z]}get type(){return this[K]}}Object.defineProperty(L.prototype,"target",{enumerable:!0}),Object.defineProperty(L.prototype,"type",{enumerable:!0});class T extends L{constructor(q,E={}){super(q);this[Y]=E.code===void 0?0:E.code,this[W]=E.reason===void 0?"":E.reason,this[M]=E.wasClean===void 0?!1:E.wasClean}get code(){return this[Y]}get reason(){return this[W]}get wasClean(){return this[M]}}Object.defineProperty(T.prototype,"code",{enumerable:!0}),Object.defineProperty(T.prototype,"reason",{enumerable:!0}),Object.defineProperty(T.prototype,"wasClean",{enumerable:!0});class j extends L{constructor(q,E={}){super(q);this[G]=E.error===void 0?null:E.error,this[H]=E.message===void 0?"":E.message}get error(){return this[G]}get message(){return this[H]}}Object.defineProperty(j.prototype,"error",{enumerable:!0}),Object.defineProperty(j.prototype,"message",{enumerable:!0});class O extends L{constructor(q,E={}){super(q);this[X]=E.data===void 0?null:E.data}get data(){return this[X]}}Object.defineProperty(O.prototype,"data",{enumerable:!0});var A={addEventListener(q,E,N={}){for(let R of this.listeners(q))if(!N[Z]&&R[J]===E&&!R[Z])return;let B;if(q==="message")B=function(V,U){let _=new O("message",{data:U?V:V.toString()});_[z]=this,D(E,this,_)};else if(q==="close")B=function(V,U){let _=new T("close",{code:V,reason:U.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});_[z]=this,D(E,this,_)};else if(q==="error")B=function(V){let U=new j("error",{error:V,message:V.message});U[z]=this,D(E,this,U)};else if(q==="open")B=function(){let V=new L("open");V[z]=this,D(E,this,V)};else return;if(B[Z]=!!N[Z],B[J]=E,N.once)this.once(q,B);else this.on(q,B)},removeEventListener(q,E){for(let N of this.listeners(q))if(N[J]===E&&!N[Z]){this.removeListener(q,N);break}}};$.exports={CloseEvent:T,ErrorEvent:j,Event:L,EventTarget:A,MessageEvent:O};function D(q,E,N){if(typeof q==="object"&&q.handleEvent)q.handleEvent.call(q,N);else q.call(E,N)}}),M8=ZQ((Q,$)=>{var{tokenChars:Z}=H4();function J(G,H,W){if(G[H]===void 0)G[H]=[W];else G[H].push(W)}function Y(G){let H=Object.create(null),W=Object.create(null),z=!1,K=!1,M=!1,L,T,j=-1,O=-1,A=-1,D=0;for(;D<G.length;D++)if(O=G.charCodeAt(D),L===void 0)if(A===-1&&Z[O]===1){if(j===-1)j=D}else if(D!==0&&(O===32||O===9)){if(A===-1&&j!==-1)A=D}else if(O===59||O===44){if(j===-1)throw SyntaxError(`Unexpected character at index ${D}`);if(A===-1)A=D;let E=G.slice(j,A);if(O===44)J(H,E,W),W=Object.create(null);else L=E;j=A=-1}else throw SyntaxError(`Unexpected character at index ${D}`);else if(T===void 0)if(A===-1&&Z[O]===1){if(j===-1)j=D}else if(O===32||O===9){if(A===-1&&j!==-1)A=D}else if(O===59||O===44){if(j===-1)throw SyntaxError(`Unexpected character at index ${D}`);if(A===-1)A=D;if(J(W,G.slice(j,A),!0),O===44)J(H,L,W),W=Object.create(null),L=void 0;j=A=-1}else if(O===61&&j!==-1&&A===-1)T=G.slice(j,D),j=A=-1;else throw SyntaxError(`Unexpected character at index ${D}`);else if(K){if(Z[O]!==1)throw SyntaxError(`Unexpected character at index ${D}`);if(j===-1)j=D;else if(!z)z=!0;K=!1}else if(M)if(Z[O]===1){if(j===-1)j=D}else if(O===34&&j!==-1)M=!1,A=D;else if(O===92)K=!0;else throw SyntaxError(`Unexpected character at index ${D}`);else if(O===34&&G.charCodeAt(D-1)===61)M=!0;else if(A===-1&&Z[O]===1){if(j===-1)j=D}else if(j!==-1&&(O===32||O===9)){if(A===-1)A=D}else if(O===59||O===44){if(j===-1)throw SyntaxError(`Unexpected character at index ${D}`);if(A===-1)A=D;let E=G.slice(j,A);if(z)E=E.replace(/\\/g,""),z=!1;if(J(W,T,E),O===44)J(H,L,W),W=Object.create(null),L=void 0;T=void 0,j=A=-1}else throw SyntaxError(`Unexpected character at index ${D}`);if(j===-1||M||O===32||O===9)throw SyntaxError("Unexpected end of input");if(A===-1)A=D;let q=G.slice(j,A);if(L===void 0)J(H,q,W);else{if(T===void 0)J(W,q,!0);else if(z)J(W,T,q.replace(/\\/g,""));else J(W,T,q);J(H,L,W)}return H}function X(G){return Object.keys(G).map((H)=>{let W=G[H];if(!Array.isArray(W))W=[W];return W.map((z)=>{return[H].concat(Object.keys(z).map((K)=>{let M=z[K];if(!Array.isArray(M))M=[M];return M.map((L)=>L===!0?K:`${K}=${L}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}$.exports={format:X,parse:Y}}),L8=ZQ((Q,$)=>{var Z=n("events"),J=n("https"),Y=n("http"),X=n("net"),G=n("tls"),{randomBytes:H,createHash:W}=n("crypto"),{Duplex:z,Readable:K}=n("stream"),{URL:M}=n("url"),L=V4(),T=h$(),j=u$(),{isBlob:O}=H4(),{BINARY_TYPES:A,CLOSE_TIMEOUT:D,EMPTY_BUFFER:q,GUID:E,kForOnEventAttribute:N,kListener:B,kStatusCode:R,kWebSocket:V,NOOP:U}=jQ(),{EventTarget:{addEventListener:_,removeEventListener:P}}=yJ(),{format:C,parse:I}=M8(),{toBuffer:k}=p4(),y=Symbol("kAborted"),f=[8,13],S=["CONNECTING","OPEN","CLOSING","CLOSED"],l=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class w extends Z{constructor(F,x,h){super();if(this._binaryType=A[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=q,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=w.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,F!==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];WQ(this,F,x,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(F){if(!A.includes(F))return;if(this._binaryType=F,this._receiver)this._receiver._binaryType=F}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(F,x,h){let g=new T({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),b=new j(F,this._extensions,h.generateMask);if(this._receiver=g,this._sender=b,this._socket=F,g[V]=this,b[V]=this,F[V]=this,g.on("conclude",l0),g.on("drain",c0),g.on("error",m0),g.on("message",p0),g.on("ping",d0),g.on("pong",n0),b.onerror=i0,F.setTimeout)F.setTimeout(0);if(F.setNoDelay)F.setNoDelay();if(x.length>0)F.unshift(x);F.on("close",u8),F.on("data",E4),F.on("end",g8),F.on("error",l8),this._readyState=w.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=w.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[L.extensionName])this._extensions[L.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=w.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(F,x){if(this.readyState===w.CLOSED)return;if(this.readyState===w.CONNECTING){QQ(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===w.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=w.CLOSING,this._sender.close(F,x,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),h8(this)}pause(){if(this.readyState===w.CONNECTING||this.readyState===w.CLOSED)return;this._paused=!0,this._socket.pause()}ping(F,x,h){if(this.readyState===w.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof F==="function")h=F,F=x=void 0;else if(typeof x==="function")h=x,x=void 0;if(typeof F==="number")F=F.toString();if(this.readyState!==w.OPEN){Z6(this,F,h);return}if(x===void 0)x=!this._isServer;this._sender.ping(F||q,x,h)}pong(F,x,h){if(this.readyState===w.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof F==="function")h=F,F=x=void 0;else if(typeof x==="function")h=x,x=void 0;if(typeof F==="number")F=F.toString();if(this.readyState!==w.OPEN){Z6(this,F,h);return}if(x===void 0)x=!this._isServer;this._sender.pong(F||q,x,h)}resume(){if(this.readyState===w.CONNECTING||this.readyState===w.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(F,x,h){if(this.readyState===w.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof x==="function")h=x,x={};if(typeof F==="number")F=F.toString();if(this.readyState!==w.OPEN){Z6(this,F,h);return}let g={binary:typeof F!=="string",mask:!this._isServer,compress:!0,fin:!0,...x};if(!this._extensions[L.extensionName])g.compress=!1;this._sender.send(F||q,g,h)}terminate(){if(this.readyState===w.CLOSED)return;if(this.readyState===w.CONNECTING){QQ(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=w.CLOSING,this._socket.destroy()}}Object.defineProperty(w,"CONNECTING",{enumerable:!0,value:S.indexOf("CONNECTING")}),Object.defineProperty(w.prototype,"CONNECTING",{enumerable:!0,value:S.indexOf("CONNECTING")}),Object.defineProperty(w,"OPEN",{enumerable:!0,value:S.indexOf("OPEN")}),Object.defineProperty(w.prototype,"OPEN",{enumerable:!0,value:S.indexOf("OPEN")}),Object.defineProperty(w,"CLOSING",{enumerable:!0,value:S.indexOf("CLOSING")}),Object.defineProperty(w.prototype,"CLOSING",{enumerable:!0,value:S.indexOf("CLOSING")}),Object.defineProperty(w,"CLOSED",{enumerable:!0,value:S.indexOf("CLOSED")}),Object.defineProperty(w.prototype,"CLOSED",{enumerable:!0,value:S.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((F)=>{Object.defineProperty(w.prototype,F,{enumerable:!0})}),["open","error","close","message"].forEach((F)=>{Object.defineProperty(w.prototype,`on${F}`,{enumerable:!0,get(){for(let x of this.listeners(F))if(x[N])return x[B];return null},set(x){for(let h of this.listeners(F))if(h[N]){this.removeListener(F,h);break}if(typeof x!=="function")return;this.addEventListener(F,x,{[N]:!0})}})}),w.prototype.addEventListener=_,w.prototype.removeEventListener=P,$.exports=w;function WQ(F,x,h,g){let b={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:D,protocolVersion:f[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(F._autoPong=b.autoPong,F._closeTimeout=b.closeTimeout,!f.includes(b.protocolVersion))throw RangeError(`Unsupported protocol version: ${b.protocolVersion} (supported versions: ${f.join(", ")})`);let m;if(x instanceof M)m=x;else try{m=new M(x)}catch{throw SyntaxError(`Invalid URL: ${x}`)}if(m.protocol==="http:")m.protocol="ws:";else if(m.protocol==="https:")m.protocol="wss:";F._url=m.href;let uQ=m.protocol==="wss:",gQ=m.protocol==="ws+unix:",tQ;if(m.protocol!=="ws:"&&!uQ&&!gQ)tQ=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(gQ&&!m.pathname)tQ="The URL's pathname is empty";else if(m.hash)tQ="The URL contains a fragment identifier";if(tQ){let c=SyntaxError(tQ);if(F._redirects===0)throw c;else{DQ(F,c);return}}let c8=uQ?443:80,m8=H(16).toString("base64"),p8=uQ?J.request:Y.request,eQ=new Set,Q4;if(b.createConnection=b.createConnection||(uQ?$6:Q6),b.defaultPort=b.defaultPort||c8,b.port=m.port||c8,b.host=m.hostname.startsWith("[")?m.hostname.slice(1,-1):m.hostname,b.headers={...b.headers,"Sec-WebSocket-Version":b.protocolVersion,"Sec-WebSocket-Key":m8,Connection:"Upgrade",Upgrade:"websocket"},b.path=m.pathname+m.search,b.timeout=b.handshakeTimeout,b.perMessageDeflate)Q4=new L({...b.perMessageDeflate,isServer:!1,maxPayload:b.maxPayload}),b.headers["Sec-WebSocket-Extensions"]=C({[L.extensionName]:Q4.offer()});if(h.length){for(let c of h){if(typeof c!=="string"||!l.test(c)||eQ.has(c))throw SyntaxError("An invalid or duplicated subprotocol was specified");eQ.add(c)}b.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(b.origin)if(b.protocolVersion<13)b.headers["Sec-WebSocket-Origin"]=b.origin;else b.headers.Origin=b.origin;if(m.username||m.password)b.auth=`${m.username}:${m.password}`;if(gQ){let c=b.path.split(":");b.socketPath=c[0],b.path=c[1]}let d;if(b.followRedirects){if(F._redirects===0){F._originalIpc=gQ,F._originalSecure=uQ,F._originalHostOrSocketPath=gQ?b.socketPath:m.host;let c=g&&g.headers;if(g={...g,headers:{}},c)for(let[r,lQ]of Object.entries(c))g.headers[r.toLowerCase()]=lQ}else if(F.listenerCount("redirect")===0){let c=gQ?F._originalIpc?b.socketPath===F._originalHostOrSocketPath:!1:F._originalIpc?!1:m.host===F._originalHostOrSocketPath;if(!c||F._originalSecure&&!uQ){if(delete b.headers.authorization,delete b.headers.cookie,!c)delete b.headers.host;b.auth=void 0}}if(b.auth&&!g.headers.authorization)g.headers.authorization="Basic "+Buffer.from(b.auth).toString("base64");if(d=F._req=p8(b),F._redirects)F.emit("redirect",F.url,d)}else d=F._req=p8(b);if(b.timeout)d.on("timeout",()=>{QQ(F,d,"Opening handshake has timed out")});if(d.on("error",(c)=>{if(d===null||d[y])return;d=F._req=null,DQ(F,c)}),d.on("response",(c)=>{let r=c.headers.location,lQ=c.statusCode;if(r&&b.followRedirects&&lQ>=300&&lQ<400){if(++F._redirects>b.maxRedirects){QQ(F,d,"Maximum redirects exceeded");return}d.abort();let $4;try{$4=new M(r,x)}catch(d8){let cQ=SyntaxError(`Invalid URL: ${r}`);DQ(F,cQ);return}WQ(F,$4,h,g)}else if(!F.emit("unexpected-response",d,c))QQ(F,d,`Unexpected server response: ${c.statusCode}`)}),d.on("upgrade",(c,r,lQ)=>{if(F.emit("upgrade",c),F.readyState!==w.CONNECTING)return;d=F._req=null;let $4=c.headers.upgrade;if($4===void 0||$4.toLowerCase()!=="websocket"){QQ(F,r,"Invalid Upgrade header");return}let d8=W("sha1").update(m8+E).digest("base64");if(c.headers["sec-websocket-accept"]!==d8){QQ(F,r,"Invalid Sec-WebSocket-Accept header");return}let cQ=c.headers["sec-websocket-protocol"],Z4;if(cQ!==void 0){if(!eQ.size)Z4="Server sent a subprotocol but none was requested";else if(!eQ.has(cQ))Z4="Server sent an invalid subprotocol"}else if(eQ.size)Z4="Server sent no subprotocol";if(Z4){QQ(F,r,Z4);return}if(cQ)F._protocol=cQ;let n8=c.headers["sec-websocket-extensions"];if(n8!==void 0){if(!Q4){QQ(F,r,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let J6;try{J6=I(n8)}catch(Y6){QQ(F,r,"Invalid Sec-WebSocket-Extensions header");return}let i8=Object.keys(J6);if(i8.length!==1||i8[0]!==L.extensionName){QQ(F,r,"Server indicated an extension that was not requested");return}try{Q4.accept(J6[L.extensionName])}catch(Y6){QQ(F,r,"Invalid Sec-WebSocket-Extensions header");return}F._extensions[L.extensionName]=Q4}F.setSocket(r,lQ,{allowSynchronousEvents:b.allowSynchronousEvents,generateMask:b.generateMask,maxPayload:b.maxPayload,skipUTF8Validation:b.skipUTF8Validation})}),b.finishRequest)b.finishRequest(d,F);else d.end()}function DQ(F,x){F._readyState=w.CLOSING,F._errorEmitted=!0,F.emit("error",x),F.emitClose()}function Q6(F){return F.path=F.socketPath,X.connect(F)}function $6(F){if(F.path=void 0,!F.servername&&F.servername!=="")F.servername=X.isIP(F.host)?"":F.host;return G.connect(F)}function QQ(F,x,h){F._readyState=w.CLOSING;let g=Error(h);if(Error.captureStackTrace(g,QQ),x.setHeader){if(x[y]=!0,x.abort(),x.socket&&!x.socket.destroyed)x.socket.destroy();process.nextTick(DQ,F,g)}else x.destroy(g),x.once("error",F.emit.bind(F,"error")),x.once("close",F.emitClose.bind(F))}function Z6(F,x,h){if(x){let g=O(x)?x.size:k(x).length;if(F._socket)F._sender._bufferedBytes+=g;else F._bufferedAmount+=g}if(h){let g=Error(`WebSocket is not open: readyState ${F.readyState} (${S[F.readyState]})`);process.nextTick(h,g)}}function l0(F,x){let h=this[V];if(h._closeFrameReceived=!0,h._closeMessage=x,h._closeCode=F,h._socket[V]===void 0)return;if(h._socket.removeListener("data",E4),process.nextTick(v8,h._socket),F===1005)h.close();else h.close(F,x)}function c0(){let F=this[V];if(!F.isPaused)F._socket.resume()}function m0(F){let x=this[V];if(x._socket[V]!==void 0)x._socket.removeListener("data",E4),process.nextTick(v8,x._socket),x.close(F[R]);if(!x._errorEmitted)x._errorEmitted=!0,x.emit("error",F)}function b8(){this[V].emitClose()}function p0(F,x){this[V].emit("message",F,x)}function d0(F){let x=this[V];if(x._autoPong)x.pong(F,!this._isServer,U);x.emit("ping",F)}function n0(F){this[V].emit("pong",F)}function v8(F){F.resume()}function i0(F){let x=this[V];if(x.readyState===w.CLOSED)return;if(x.readyState===w.OPEN)x._readyState=w.CLOSING,h8(x);if(this._socket.end(),!x._errorEmitted)x._errorEmitted=!0,x.emit("error",F)}function h8(F){F._closeTimer=setTimeout(F._socket.destroy.bind(F._socket),F._closeTimeout)}function u8(){let F=this[V];if(this.removeListener("close",u8),this.removeListener("data",E4),this.removeListener("end",g8),F._readyState=w.CLOSING,!this._readableState.endEmitted&&!F._closeFrameReceived&&!F._receiver._writableState.errorEmitted&&this._readableState.length!==0){let x=this.read(this._readableState.length);F._receiver.write(x)}if(F._receiver.end(),this[V]=void 0,clearTimeout(F._closeTimer),F._receiver._writableState.finished||F._receiver._writableState.errorEmitted)F.emitClose();else F._receiver.on("error",b8),F._receiver.on("finish",b8)}function E4(F){if(!this[V]._receiver.write(F))this.pause()}function g8(){let F=this[V];F._readyState=w.CLOSING,F._receiver.end(),this.end()}function l8(){let F=this[V];if(this.removeListener("error",l8),this.on("error",U),F)F._readyState=w.CLOSING,this.destroy()}}),fJ=ZQ((Q,$)=>{var Z=L8(),{Duplex:J}=n("stream");function Y(W){W.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(W){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",W)}function H(W,z){let K=!0,M=new J({...z,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return W.on("message",function(T,j){let O=!j&&M._readableState.objectMode?T.toString():T;if(!M.push(O))W.pause()}),W.once("error",function(T){if(M.destroyed)return;K=!1,M.destroy(T)}),W.once("close",function(){if(M.destroyed)return;M.push(null)}),M._destroy=function(L,T){if(W.readyState===W.CLOSED){T(L),process.nextTick(Y,M);return}let j=!1;if(W.once("error",function(A){j=!0,T(A)}),W.once("close",function(){if(!j)T(L);process.nextTick(Y,M)}),K)W.terminate()},M._final=function(L){if(W.readyState===W.CONNECTING){W.once("open",function(){M._final(L)});return}if(W._socket===null)return;if(W._socket._writableState.finished){if(L(),M._readableState.endEmitted)M.destroy()}else W._socket.once("finish",function(){L()}),W.close()},M._read=function(){if(W.isPaused)W.resume()},M._write=function(L,T,j){if(W.readyState===W.CONNECTING){W.once("open",function(){M._write(L,T,j)});return}W.send(L,j)},M.on("end",X),M.on("error",G),M}$.exports=H}),g$=ZQ((Q,$)=>{var{tokenChars:Z}=H4();function J(Y){let X=new Set,G=-1,H=-1,W=0;for(W;W<Y.length;W++){let K=Y.charCodeAt(W);if(H===-1&&Z[K]===1){if(G===-1)G=W}else if(W!==0&&(K===32||K===9)){if(H===-1&&G!==-1)H=W}else if(K===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${W}`);if(H===-1)H=W;let M=Y.slice(G,H);if(X.has(M))throw SyntaxError(`The "${M}" subprotocol is duplicated`);X.add(M),G=H=-1}else throw SyntaxError(`Unexpected character at index ${W}`)}if(G===-1||H!==-1)throw SyntaxError("Unexpected end of input");let z=Y.slice(G,W);if(X.has(z))throw SyntaxError(`The "${z}" subprotocol is duplicated`);return X.add(z),X}$.exports={parse:J}}),bJ=ZQ((Q,$)=>{var Z=n("events"),J=n("http"),{Duplex:Y}=n("stream"),{createHash:X}=n("crypto"),G=M8(),H=V4(),W=g$(),z=L8(),{CLOSE_TIMEOUT:K,GUID:M,kWebSocket:L}=jQ(),T=/^[+/0-9A-Za-z]{22}==$/,j=0,O=1,A=2;class D extends Z{constructor(V,U){super();if(V={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:K,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:z,...V},V.port==null&&!V.server&&!V.noServer||V.port!=null&&(V.server||V.noServer)||V.server&&V.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(V.port!=null)this._server=J.createServer((_,P)=>{let C=J.STATUS_CODES[426];P.writeHead(426,{"Content-Length":C.length,"Content-Type":"text/plain"}),P.end(C)}),this._server.listen(V.port,V.host,V.backlog,U);else if(V.server)this._server=V.server;if(this._server){let _=this.emit.bind(this,"connection");this._removeListeners=q(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(P,C,I)=>{this.handleUpgrade(P,C,I,_)}})}if(V.perMessageDeflate===!0)V.perMessageDeflate={};if(V.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=V,this._state=j}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(V){if(this._state===A){if(V)this.once("close",()=>{V(Error("The server is not running"))});process.nextTick(E,this);return}if(V)this.once("close",V);if(this._state===O)return;if(this._state=O,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(E,this);else this._shouldEmitClose=!0;else process.nextTick(E,this)}else{let U=this._server;this._removeListeners(),this._removeListeners=this._server=null,U.close(()=>{E(this)})}}shouldHandle(V){if(this.options.path){let U=V.url.indexOf("?");if((U!==-1?V.url.slice(0,U):V.url)!==this.options.path)return!1}return!0}handleUpgrade(V,U,_,P){U.on("error",N);let C=V.headers["sec-websocket-key"],I=V.headers.upgrade,k=+V.headers["sec-websocket-version"];if(V.method!=="GET"){R(this,V,U,405,"Invalid HTTP method");return}if(I===void 0||I.toLowerCase()!=="websocket"){R(this,V,U,400,"Invalid Upgrade header");return}if(C===void 0||!T.test(C)){R(this,V,U,400,"Missing or invalid Sec-WebSocket-Key header");return}if(k!==13&&k!==8){R(this,V,U,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(V)){B(U,400);return}let y=V.headers["sec-websocket-protocol"],f=new Set;if(y!==void 0)try{f=W.parse(y)}catch(w){R(this,V,U,400,"Invalid Sec-WebSocket-Protocol header");return}let S=V.headers["sec-websocket-extensions"],l={};if(this.options.perMessageDeflate&&S!==void 0){let w=new H({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let WQ=G.parse(S);if(WQ[H.extensionName])w.accept(WQ[H.extensionName]),l[H.extensionName]=w}catch(WQ){R(this,V,U,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let w={origin:V.headers[`${k===8?"sec-websocket-origin":"origin"}`],secure:!!(V.socket.authorized||V.socket.encrypted),req:V};if(this.options.verifyClient.length===2){this.options.verifyClient(w,(WQ,DQ,Q6,$6)=>{if(!WQ)return B(U,DQ||401,Q6,$6);this.completeUpgrade(l,C,f,V,U,_,P)});return}if(!this.options.verifyClient(w))return B(U,401)}this.completeUpgrade(l,C,f,V,U,_,P)}completeUpgrade(V,U,_,P,C,I,k){if(!C.readable||!C.writable)return C.destroy();if(C[L])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>j)return B(C,503);let f=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(U+M).digest("base64")}`],S=new this.options.WebSocket(null,void 0,this.options);if(_.size){let l=this.options.handleProtocols?this.options.handleProtocols(_,P):_.values().next().value;if(l)f.push(`Sec-WebSocket-Protocol: ${l}`),S._protocol=l}if(V[H.extensionName]){let l=V[H.extensionName].params,w=G.format({[H.extensionName]:[l]});f.push(`Sec-WebSocket-Extensions: ${w}`),S._extensions=V}if(this.emit("headers",f,P),C.write(f.concat(`\r
89
89
  `).join(`\r
90
- `)),C.removeListener("error",N),h.setSocket(C,I,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(h),h.on("close",()=>{if(this.clients.delete(h),this._shouldEmitClose&&!this.clients.size)process.nextTick(E,this)});k(h,P)}}$.exports=A;function O(V,R){for(let _ of Object.keys(R))V.on(_,R[_]);return function(){for(let P of Object.keys(R))V.removeListener(P,R[P])}}function E(V){V._state=D,V.emit("close")}function N(){this.destroy()}function B(V,R,_,P){_=_||J.STATUS_CODES[R],P={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(_),...P},V.once("finish",V.destroy),V.end(`HTTP/1.1 ${R} ${J.STATUS_CODES[R]}\r
90
+ `)),C.removeListener("error",N),S.setSocket(C,I,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(S),S.on("close",()=>{if(this.clients.delete(S),this._shouldEmitClose&&!this.clients.size)process.nextTick(E,this)});k(S,P)}}$.exports=D;function q(V,U){for(let _ of Object.keys(U))V.on(_,U[_]);return function(){for(let P of Object.keys(U))V.removeListener(P,U[P])}}function E(V){V._state=A,V.emit("close")}function N(){this.destroy()}function B(V,U,_,P){_=_||J.STATUS_CODES[U],P={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(_),...P},V.once("finish",V.destroy),V.end(`HTTP/1.1 ${U} ${J.STATUS_CODES[U]}\r
91
91
  `+Object.keys(P).map((C)=>`${C}: ${P[C]}`).join(`\r
92
92
  `)+`\r
93
93
  \r
94
- `+_)}function U(V,R,_,P,C,I){if(V.listenerCount("wsClientError")){let k=Error(C);Error.captureStackTrace(k,U),V.emit("wsClientError",k,_,R)}else B(_,P,C,I)}});s3=TQ(yJ(),1),t3=TQ(M8(),1),e3=TQ(V4(),1),QG=TQ(h$(),1),$G=TQ(u$(),1),ZG=TQ(g$(),1),sJ=TQ(L8(),1),a$=TQ(fJ(),1),b$=sJ.default;W1={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},V1={"Network.requestWillBeSent":{walltime:"wallTime"}},H1={hasUserGesture:!1,redirectHasExtraInfo:!1},M1={hasExtraInfo:!1},L1={encodedDataLength:0,shouldReportCorbBlocking:!1},U1={initialPriority:"Medium",referrerPolicy:"origin"},R1={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};A1={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};k1={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:""};u1=["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"],g1={"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:[]}};c1={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});var D0={};a8(D0,{startDeviceInProcess:()=>O0,simMiddleware:()=>d2,selectServeSimState:()=>SQ,rewriteStateForRequestHost:()=>R4,readServeSimStates:()=>OQ,previewConfigForState:()=>r4,parseForegroundAppLogMessage:()=>E0,matchInstalledAppByDisplayName:()=>T2});import{readdirSync as G2,readFileSync as X2,existsSync as F0,unlinkSync as K0,watch as z2}from"fs";import{execSync as yQ,spawn as K2,exec as W2,execFile as _4}from"child_process";import{tmpdir as V2}from"os";import{join as q8}from"path";import{createServer as H2}from"net";import{createHash as M2,randomBytes as L2,timingSafeEqual as U2}from"crypto";import{WebSocket as W0}from"ws";function M0(Q){return!F2.test(Q)}function E2(Q){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(Q)}function E0(Q){let $=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(Q);if(!$)return null;return{bundleId:$[1],pid:parseInt($[2],10)}}function L0(Q,$){if(B2.has($))return Promise.resolve(!0);return new Promise((Z)=>{_4("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 N2)if(F0(q8(G,X)))return Z(!0);Z(!1)})})}function U0(Q){return Q.trim().replace(/\s+/g," ").toLowerCase()}function T2(Q,$){let Z=U0($);if(!Z)return null;for(let[J,Y]of Object.entries(Q))if([Y.CFBundleDisplayName,Y.CFBundleName,Y.CFBundleExecutable].filter((X)=>typeof X==="string").some((X)=>U0(X)===Z))return Y.CFBundleIdentifier||J;return null}function j2(){let Q=Date.now();if(U4.booted&&Q-U4.at<1500)return U4.booted;try{let $=yQ("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),Z=JSON.parse($),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 U4={at:Q,booted:J},J}catch{return null}}function O2(){let Q=Date.now();if(Q-F8.at<1500)return F8.udid;let $=null;try{$=yQ("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{$=null}return F8={at:Q,udid:$},$}function OQ(){let Q;try{Q=G2(O8).filter((J)=>J.startsWith("server-")&&J.endsWith(".json"))}catch{return[]}let $=j2(),Z=[];for(let J of Q){let Y=q8(O8,J);try{let G=JSON.parse(X2(Y,"utf-8"));try{process.kill(G.pid,0)}catch{y4("helper pid=%d gone, removing %s",G.pid,Y);try{K0(Y)}catch{}continue}if($&&E2(G.device)&&!$.has(G.device)){y4("recycling stale helper pid=%d (device %s no longer booted)",G.pid,G.device);try{process.kill(G.pid,"SIGTERM")}catch{}try{K0(Y)}catch{}continue}Z.push(G)}catch{}}return Z}function SQ(Q,$){if($)return Q.find((Z)=>Z.device===$)??null;return Q[0]??null}function R0(Q){let $=Q.indexOf("?");if($===-1)return null;return new URLSearchParams(Q.slice($+1)).get("device")}function L4(Q){let $=Q.headers?.host;if($)return $;let Z=Q.socket.localPort;return Z?`localhost:${Z}`:void 0}function E8(Q,$,Z){return`${`${Q}${$}`}?device=${encodeURIComponent(Z)}`}function R4(Q,$,Z="",J="http",Y=!1){if(!$)return Q;if(!Y){let K;try{K=new URL(`http://${$}`).hostname}catch{return Q}if(K==="localhost"||K==="127.0.0.1"||K==="[::1]")return Q;let M=(L)=>L.replace("127.0.0.1",K);return{...Q,url:M(Q.url),streamUrl:M(Q.streamUrl),wsUrl:M(Q.wsUrl)}}let H=`${`${Z==="/"?"":Z.replace(/\/+$/,"")}/helper`}/${encodeURIComponent(Q.device)}`,W=`${J}://${$}`,z=`${J==="https"?"wss":"ws"}://${$}`;return{...Q,url:`${W}${H}`,streamUrl:`${W}${H}/stream.mjpeg`,wsUrl:`${z}${H}/ws`}}function q2(Q){return`${Q==="/"?"":Q}/helper`}function D2(Q){return`${Q==="/"?"":Q}/devtools`}function A2(Q,$){let Z=new URL(Q,"http://serve-sim.local");if(!Z.pathname.startsWith(`${$}/page/`))return null;return{upstreamPath:`/devtools${Z.pathname.slice($.length)}${Z.search}`}}function _0(Q,$){let Z=new URL(Q,"http://serve-sim.local");if(Z.pathname!==$&&!Z.pathname.startsWith(`${$}/`))return null;let Y=Z.pathname.slice($.length).replace(/^\/+/,"").split("/").filter(Boolean),G=new Set(["ax","config","foreground","health","stream.avcc","stream.mjpeg","ws"]),X=Z.searchParams.get("device"),H=Y;if(Y[0]&&!G.has(Y[0]))X=decodeURIComponent(Y[0]),H=Y.slice(1);let W=H.length>0?`/${H.join("/")}`:"/";return Z.searchParams.delete("device"),{device:X,upstreamPath:`${W}${Z.search}`}}function D8(Q,$){let Z=$.length,J;if(Z<126)J=Buffer.from([128|Q,Z]);else if(Z<=65535)J=Buffer.alloc(4),J[0]=128|Q,J[1]=126,J.writeUInt16BE(Z,2);else J=Buffer.alloc(10),J[0]=128|Q,J[1]=127,J.writeBigUInt64BE(BigInt(Z),2);return Buffer.concat([J,$])}function T0(Q){if(Q.length<2)return null;let $=Q[0]&15,Z=(Q[1]&128)!==0,J=Q[1]&127,Y=2;if(J===126){if(Q.length<Y+2)return null;J=Q.readUInt16BE(Y),Y+=2}else if(J===127){if(Q.length<Y+8)return null;let H=Q.readBigUInt64BE(Y);if(H>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");J=Number(H),Y+=8}let G=Y;if(Z)Y+=4;if(Q.length<Y+J)return null;let X=Buffer.from(Q.subarray(Y,Y+J));if(Z){let H=Q.subarray(G,G+4);for(let W=0;W<X.length;W++)X[W]=X[W]^H[W%4]}return{opcode:$,payload:X,consumed:Y+J}}function B4(Q,$,Z=Buffer.alloc(0)){if(Q.destroyed||!Q.writable)return;Q.write(D8($,Z))}function B0(Q){let $=new Uint8Array(Q.length);return $.set(Q),$}function j0(Q,$){let Z=Q.headers["sec-websocket-key"];if(typeof Z!=="string")return $.end(`HTTP/1.1 400 Bad Request\r
94
+ `+_)}function R(V,U,_,P,C,I){if(V.listenerCount("wsClientError")){let k=Error(C);Error.captureStackTrace(k,R),V.emit("wsClientError",k,_,U)}else B(_,P,C,I)}});t3=TQ(fJ(),1),e3=TQ(M8(),1),QX=TQ(V4(),1),$X=TQ(h$(),1),ZX=TQ(u$(),1),JX=TQ(g$(),1),tJ=TQ(L8(),1),a$=TQ(bJ(),1),b$=tJ.default;V1={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},H1={"Network.requestWillBeSent":{walltime:"wallTime"}},M1={hasUserGesture:!1,redirectHasExtraInfo:!1},L1={hasExtraInfo:!1},R1={encodedDataLength:0,shouldReportCorbBlocking:!1},U1={initialPriority:"Medium",referrerPolicy:"origin"},_1={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};C1={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};S1={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:""};g1=["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"],l1={"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:[]}};m1={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});var A0={};a8(A0,{startDeviceInProcess:()=>O0,simMiddleware:()=>n2,selectServeSimState:()=>wQ,rewriteStateForRequestHost:()=>U4,readServeSimStates:()=>qQ,previewConfigForState:()=>r4,parseGridPaging:()=>T0,parseForegroundAppLogMessage:()=>E0,matchInstalledAppByDisplayName:()=>j2});import{readdirSync as G2,readFileSync as z2,existsSync as F0,unlinkSync as K0,watch as K2}from"fs";import{execSync as yQ,spawn as W2,exec as V2,execFile as _4}from"child_process";import{tmpdir as H2}from"os";import{join as O8}from"path";import{createServer as M2}from"net";import{createHash as L2,randomBytes as R2,timingSafeEqual as U2}from"crypto";import{WebSocket as W0}from"ws";function M0(Q){return!E2.test(Q)}function T2(Q){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(Q)}function E0(Q){let $=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(Q);if(!$)return null;return{bundleId:$[1],pid:parseInt($[2],10)}}function L0(Q,$){if(N2.has($))return Promise.resolve(!0);return new Promise((Z)=>{_4("xcrun",["simctl","get_app_container",Q,$,"app"],{timeout:2000},(J,Y)=>{if(J)return Z(!1);let X=Y.trim();if(!X)return Z(!1);for(let G of F2)if(F0(O8(X,G)))return Z(!0);Z(!1)})})}function R0(Q){return Q.trim().replace(/\s+/g," ").toLowerCase()}function j2(Q,$){let Z=R0($);if(!Z)return null;for(let[J,Y]of Object.entries(Q))if([Y.CFBundleDisplayName,Y.CFBundleName,Y.CFBundleExecutable].filter((G)=>typeof G==="string").some((G)=>R0(G)===Z))return Y.CFBundleIdentifier||J;return null}function q2(){let Q=Date.now();if(R4.booted&&Q-R4.at<1500)return R4.booted;try{let $=yQ("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),Z=JSON.parse($),J=new Set;for(let Y of Object.values(Z.devices))for(let X of Y)if(X.state==="Booted")J.add(X.udid);return R4={at:Q,booted:J},J}catch{return null}}function O2(){let Q=Date.now();if(Q-F8.at<1500)return F8.udid;let $=null;try{$=yQ("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{$=null}return F8={at:Q,udid:$},$}function qQ(){let Q;try{Q=G2(q8).filter((J)=>J.startsWith("server-")&&J.endsWith(".json"))}catch{return[]}let $=q2(),Z=[];for(let J of Q){let Y=O8(q8,J);try{let X=JSON.parse(z2(Y,"utf-8"));try{process.kill(X.pid,0)}catch{y4("helper pid=%d gone, removing %s",X.pid,Y);try{K0(Y)}catch{}continue}if($&&T2(X.device)&&!$.has(X.device)){y4("recycling stale helper pid=%d (device %s no longer booted)",X.pid,X.device);try{process.kill(X.pid,"SIGTERM")}catch{}try{K0(Y)}catch{}continue}Z.push(X)}catch{}}return Z}function wQ(Q,$){if($)return Q.find((Z)=>Z.device===$)??null;return Q[0]??null}function U0(Q){let $=Q.indexOf("?");if($===-1)return null;return new URLSearchParams(Q.slice($+1)).get("device")}function T0(Q){let $=Q.indexOf("?");if($===-1)return{limit:null,offset:0};let Z=new URLSearchParams(Q.slice($+1)),J=Z.get("limit"),Y=Z.get("offset"),X=J==null||!/^\d+$/.test(J)?null:Math.min(Math.max(Number(J),1),1000),G=Y==null||!/^\d+$/.test(Y)?0:Math.max(Number(Y),0);return{limit:X,offset:G}}function L4(Q){let $=Q.headers?.host;if($)return $;let Z=Q.socket.localPort;return Z?`localhost:${Z}`:void 0}function E8(Q,$,Z){return`${`${Q}${$}`}?device=${encodeURIComponent(Z)}`}function U4(Q,$,Z="",J="http",Y=!1){if(!$)return Q;if(!Y){let K;try{K=new URL(`http://${$}`).hostname}catch{return Q}if(K==="localhost"||K==="127.0.0.1"||K==="[::1]")return Q;let M=(L)=>L.replace("127.0.0.1",K);return{...Q,url:M(Q.url),streamUrl:M(Q.streamUrl),wsUrl:M(Q.wsUrl)}}let H=`${`${Z==="/"?"":Z.replace(/\/+$/,"")}/helper`}/${encodeURIComponent(Q.device)}`,W=`${J}://${$}`,z=`${J==="https"?"wss":"ws"}://${$}`;return{...Q,url:`${W}${H}`,streamUrl:`${W}${H}/stream.mjpeg`,wsUrl:`${z}${H}/ws`}}function D2(Q){return`${Q==="/"?"":Q}/helper`}function A2(Q){return`${Q==="/"?"":Q}/devtools`}function C2(Q,$){let Z=new URL(Q,"http://serve-sim.local");if(!Z.pathname.startsWith(`${$}/page/`))return null;return{upstreamPath:`/devtools${Z.pathname.slice($.length)}${Z.search}`}}function _0(Q,$){let Z=new URL(Q,"http://serve-sim.local");if(Z.pathname!==$&&!Z.pathname.startsWith(`${$}/`))return null;let Y=Z.pathname.slice($.length).replace(/^\/+/,"").split("/").filter(Boolean),X=new Set(["ax","config","foreground","health","stream.avcc","stream.mjpeg","ws"]),G=Z.searchParams.get("device"),H=Y;if(Y[0]&&!X.has(Y[0]))G=decodeURIComponent(Y[0]),H=Y.slice(1);let W=H.length>0?`/${H.join("/")}`:"/";return Z.searchParams.delete("device"),{device:G,upstreamPath:`${W}${Z.search}`}}function D8(Q,$){let Z=$.length,J;if(Z<126)J=Buffer.from([128|Q,Z]);else if(Z<=65535)J=Buffer.alloc(4),J[0]=128|Q,J[1]=126,J.writeUInt16BE(Z,2);else J=Buffer.alloc(10),J[0]=128|Q,J[1]=127,J.writeBigUInt64BE(BigInt(Z),2);return Buffer.concat([J,$])}function j0(Q){if(Q.length<2)return null;let $=Q[0]&15,Z=(Q[1]&128)!==0,J=Q[1]&127,Y=2;if(J===126){if(Q.length<Y+2)return null;J=Q.readUInt16BE(Y),Y+=2}else if(J===127){if(Q.length<Y+8)return null;let H=Q.readBigUInt64BE(Y);if(H>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");J=Number(H),Y+=8}let X=Y;if(Z)Y+=4;if(Q.length<Y+J)return null;let G=Buffer.from(Q.subarray(Y,Y+J));if(Z){let H=Q.subarray(X,X+4);for(let W=0;W<G.length;W++)G[W]=G[W]^H[W%4]}return{opcode:$,payload:G,consumed:Y+J}}function B4(Q,$,Z=Buffer.alloc(0)){if(Q.destroyed||!Q.writable)return;Q.write(D8($,Z))}function B0(Q){let $=new Uint8Array(Q.length);return $.set(Q),$}function q0(Q,$){let Z=Q.headers["sec-websocket-key"];if(typeof Z!=="string")return $.end(`HTTP/1.1 400 Bad Request\r
95
95
  \r
96
- `),!1;let J=M2("sha1").update(Z+C2).digest("base64");return $.write(`HTTP/1.1 101 Switching Protocols\r
96
+ `),!1;let J=L2("sha1").update(Z+P2).digest("base64");return $.write(`HTTP/1.1 101 Switching Protocols\r
97
97
  Upgrade: websocket\r
98
98
  Connection: Upgrade\r
99
99
  Sec-WebSocket-Accept: ${J}\r
100
100
  \r
101
- `),$.resume(),!0}function P2(Q,$,Z,J){if(!j0(Q,$))return;let Y=new W0(J);Y.binaryType="arraybuffer";let G=!1,X=!1,H=[],W=Buffer.from(Z),z=()=>{if(X)return;X=!0;try{Y.close()}catch{}try{$.end(D8(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},K=(L)=>{if(G&&Y.readyState===W0.OPEN){Y.send(L.opcode===1?L.payload.toString("utf8"):B0(L.payload));return}H.push({opcode:L.opcode,payload:Buffer.from(L.payload)})},M=()=>{try{while(W.length>0){let L=T0(W);if(!L)break;if(W=W.subarray(L.consumed),L.opcode===8){B4($,8,L.payload),z();return}if(L.opcode===9){B4($,10,L.payload);continue}if(L.opcode===1||L.opcode===2)K({opcode:L.opcode,payload:L.payload})}}catch{z()}};Y.onopen=()=>{G=!0;for(let L of H)Y.send(L.opcode===1?L.payload.toString("utf8"):B0(L.payload));H=[]},Y.onmessage=(L)=>{let T=L.data,j=typeof T==="string"?Buffer.from(T):Buffer.from(T);B4($,typeof T==="string"?1:2,j)},Y.onerror=z,Y.onclose=z,$.on("data",(L)=>{if(typeof L==="string")L=Buffer.from(L);W=Buffer.concat([W,L]),M()}),$.on("error",z),$.on("close",z),M()}function I2(Q,$,Z,J){if(!Z)return!1;let Y;try{Y=c6(Z)}catch{return!1}switch(J.split("?")[0]){case"/stream.mjpeg":return Y.handleMjpeg(Q,$),!0;case"/stream.avcc":return Y.handleAvcc(Q,$),!0;case"/config":return Y.handleConfig(Q,$),!0;case"/health":return Y.handleHealth(Q,$),!0;case"/ax":return Y.handleAx(Q,$),!0;case"/foreground":return Y.handleForeground(Q,$),!0;default:return!1}}async function O0(Q,$,Z){if(await new Promise((Y)=>_4("xcrun",["simctl","boot",Q],()=>Y())),!await new Promise((Y)=>{_4("xcrun",["simctl","bootstatus",Q,"-b"],{timeout:180000},(G)=>Y(!G))})){if(!await new Promise((G)=>{_4("xcrun",["simctl","list","devices","-j"],(X,H)=>{if(X)return G(!1);try{let W=JSON.parse(H);G(Object.values(W.devices).flat().some((z)=>z.udid===Q&&z.state==="Booted"))}catch{G(!1)}})}))return`Device ${Q} failed to reach booted state`}return R9(mQ(Q,$,Z)),null}function x2(Q,$){let Z=[],J=[],Y=Buffer.from($),G=!1,X=()=>{if(G)return;G=!0;for(let z of J)z()},H=()=>{X();try{Q.end(D8(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},W=()=>{for(;;){let z;try{z=T0(Y)}catch{H();return}if(!z)return;if(Y=Y.subarray(z.consumed),z.opcode===8)return H();if(z.opcode===9){B4(Q,10,z.payload);continue}if(z.opcode===1||z.opcode===2)for(let K of Z)K(z.payload)}};if(Q.on("data",(z)=>{Y=Buffer.concat([Y,z]),W()}),Q.on("close",X),Q.on("error",X),$.length)W();return{send(z){B4(Q,2,z)},on(z,K){if(z==="message")Z.push(K);else J.push(K)},close:H}}function k2(Q,$,Z,J){if(!J)return!1;let Y;try{Y=c6(J)}catch{return!1}if(!j0(Q,$))return!0;return Y.attachHidSocket(x2($,Z)),!0}function r4(Q,$,Z,J,Y,G=!1){let X=($===""?"":$)+"/grid/api";return{...Q,basePath:$,appStateEndpoint:E8($,"/appstate",Q.device),axEndpoint:E8($,"/ax",Q.device),devtoolsEndpoint:E8($,"/devtools",Q.device),serveSimBin:Z,gridApiEndpoint:X,gridStartEndpoint:X+"/start",gridShutdownEndpoint:X+"/shutdown",gridMemoryEndpoint:X+"/memory",previewEndpoint:$===""?"/":$,execToken:J,...Y?{codec:Y}:{},...G?{proxyHelpers:!0}:{}}}async function w2(Q){return new Promise(($)=>{let Z=H2();Z.once("error",()=>$(!1)),Z.once("listening",()=>Z.close(()=>$(!0))),Z.listen(Q,"127.0.0.1")})}async function N0(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((X)=>X.id.startsWith("sim:")).map((X)=>{let W=X.id.split(":")[1],z=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:W,bundleId:z}})}}}catch{return null}}async function S2(){if(wQ)try{return await(await wQ).listTargets(),wQ}catch{wQ=null}return wQ=(async()=>{let{startCdpServer:Q}=await Promise.resolve().then(() => (z0(),X0));for(let $=o4;$<o4+50;$++){if(!await w2($)){let Z=await N0($);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 N0($);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${o4}-${o4+49}`)})().catch((Q)=>{throw wQ=null,Q}),wQ}function y2(Q){return Array.isArray(Q)?Q[0]:Q}function q0(Q){return y2(Q.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function f2(Q){return q0(Q)==="https"?"wss":"ws"}function a4(Q){return q0(Q)==="https"?"https":"http"}function b2(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}`}function j8(){try{let Q=process.argv;if(Q[1]&&F0(Q[1]))return Q[1]}catch{}return"serve-sim"}function v2(){if(!T8)T8=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctd2lkZTouMDI1ZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1sZWFkaW5nLXNudWc6MS4zNzU7LS1yYWRpdXMteHM6LjEyNXJlbTstLXJhZGl1cy1tZDouMzc1cmVtOy0tcmFkaXVzLWxnOi41cmVtOy0tcmFkaXVzLXhsOi43NXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzp2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpOy0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQ6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50KTstLWNvbG9yLXBhbmVsLW92ZXJsYXk6IzE4MTgxOGE2Oy0tY29sb3ItcGFuZWwtZGVlcDojMTExMTEzOy0tY29sb3ItcGFnZTojMGEwYTBhOy0tY29sb3ItYWNjZW50OiNhNWI0ZmM7LS1jb2xvci1zdWNjZXNzLWVtZXJhbGQ6IzM0ZDM5OTstLWNvbG9yLWRhbmdlcjojZjg3MTcxOy0tY29sb3ItZGFuZ2VyLXNvZnQ6I2ZjYTVhNTstLWNvbG9yLXdhcm5pbmc6I2ZiYmYyNDstLWNvbG9yLXdhcm5pbmctc29mdDojZmNkMzRkOy0tZm9udC1zeXN0ZW06LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZn19QGxheWVyIGJhc2V7Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsOmhvc3R7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGFiLXNpemU6NDtsaW5lLWhlaWdodDoxLjU7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1mb250LWZhbWlseSx1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweDtoZWlnaHQ6MH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsIkxpYmVyYXRpb24gTW9ubyIsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2UpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19dGFibGV7dGV4dC1pbmRlbnQ6MDtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06d2hlcmUoc2VsZWN0Oi1tb3otYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6ZmlsZS1zZWxlY3Rvci1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfUBzdXBwb3J0cyAoIG5vdCAoLXdlYmtpdC1hcHBlYXJhbmNlOiAtYXBwbGUtcGF5LWJ1dHRvbikpIG9yIChjb250YWluLWludHJpbnNpYy1zaXplOiAxcHgpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y3VycmVudENvbG9yfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsY3VycmVudGNvbG9yIDUwJSx0cmFuc3BhcmVudCl9fX10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1kYXRlLWFuZC10aW1lLXZhbHVle3RleHQtYWxpZ246aW5oZXJpdDttaW4taGVpZ2h0OjFsaH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtkaXNwbGF5OmlubGluZS1mbGV4fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWZpZWxkcy13cmFwcGVye3BhZGRpbmc6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWRheS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWVyaWRpZW0tZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6MX06LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1idXR0b257YXBwZWFyYW5jZTpidXR0b259aW5wdXQ6d2hlcmUoW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XSl7YXBwZWFyYW5jZTpidXR0b259Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBsYXllciB1dGlsaXRpZXN7LlxbY29udGFpbmVyLXR5cGVcOmlubGluZS1zaXplXF17Y29udGFpbmVyLXR5cGU6aW5saW5lLXNpemV9LnBvaW50ZXItZXZlbnRzLWF1dG97cG9pbnRlci1ldmVudHM6YXV0b30ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS5jb2xsYXBzZXt2aXNpYmlsaXR5OmNvbGxhcHNlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZml4ZWR7cG9zaXRpb246Zml4ZWR9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGF0aWN7cG9zaXRpb246c3RhdGljfS5zdGlja3l7cG9zaXRpb246c3RpY2t5fS5pbnNldC0we2luc2V0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnRvcC0we3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMVwvMnt0b3A6NTAlfS50b3AtMnt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0udG9wLTN7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnRvcC1cWzJweFxde3RvcDoycHh9LnRvcC1cW2NhbGNcKDEwMFwlXCs0cHhcKVxde3RvcDpjYWxjKDEwMCUgKyA0cHgpfS50b3AtXFtjYWxjXCgxMDBcJVwrNnB4XClcXXt0b3A6Y2FsYygxMDAlICsgNnB4KX0ucmlnaHQtMHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5yaWdodC0wXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5yaWdodC0yXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucmlnaHQtM3tyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5sZWZ0LTN7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm10LVxbM3B4XF17bWFyZ2luLXRvcDozcHh9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubWwtYXV0b3ttYXJnaW4tbGVmdDphdXRvfS5ib3gtYm9yZGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYmxvY2t7ZGlzcGxheTpibG9ja30uY29udGVudHN7ZGlzcGxheTpjb250ZW50c30uZmxleHtkaXNwbGF5OmZsZXh9LmdyaWR7ZGlzcGxheTpncmlkfS5oaWRkZW57ZGlzcGxheTpub25lfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0udGFibGV7ZGlzcGxheTp0YWJsZX0uXFthc3BlY3QtcmF0aW9cOjE2XC8xMVxde2FzcGVjdC1yYXRpbzoxNi8xMX0uc2l6ZS0xXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMS41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5zaXplLTJcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnNpemUtM1wuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uc2l6ZS00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNCl9LnNpemUtNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5zaXplLTl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5KX0uc2l6ZS1cWzJweFxde3dpZHRoOjJweDtoZWlnaHQ6MnB4fS5zaXplLVxbMTRweFxde3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHh9LnNpemUtXFsxOHB4XF17d2lkdGg6MThweDtoZWlnaHQ6MThweH0uc2l6ZS1cWzE5cHhcXXt3aWR0aDoxOXB4O2hlaWdodDoxOXB4fS5zaXplLWZ1bGx7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uaC0yXC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmgtM3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uaC0zXC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LmgtNHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uaC01e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5oLTVcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNS41KX0uaC02e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LmgtOHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo4KX0uaC0xMHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMCl9LmgtXFszcHhcXXtoZWlnaHQ6M3B4fS5oLVxbMTNweFxde2hlaWdodDoxM3B4fS5oLVxbMTRweFxde2hlaWdodDoxNHB4fS5oLVxbMTZweFxde2hlaWdodDoxNnB4fS5oLVxbMThweFxde2hlaWdodDoxOHB4fS5oLVxbMjJweFxde2hlaWdodDoyMnB4fS5oLVxbMjZweFxde2hlaWdodDoyNnB4fS5oLVxbMzBweFxde2hlaWdodDozMHB4fS5oLWZ1bGx7aGVpZ2h0OjEwMCV9LmgtcHh7aGVpZ2h0OjFweH0uaC1zY3JlZW57aGVpZ2h0OjEwMHZofS5tYXgtaC05MHttYXgtaGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOTApfS5tYXgtaC1cWzI2MHB4XF17bWF4LWhlaWdodDoyNjBweH0ubWF4LWgtXFszMjBweFxde21heC1oZWlnaHQ6MzIwcHh9Lm1heC1oLWZ1bGx7bWF4LWhlaWdodDoxMDAlfS5taW4taC0we21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLWgtXFsyMnB4XF17bWluLWhlaWdodDoyMnB4fS5taW4taC1cWzMwcHhcXXttaW4taGVpZ2h0OjMwcHh9Lm1pbi1oLVxbMzZweFxde21pbi1oZWlnaHQ6MzZweH0ubWluLWgtXFs0NHB4XF17bWluLWhlaWdodDo0NHB4fS5taW4taC1weHttaW4taGVpZ2h0OjFweH0udy0xe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnctMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnctNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS53LTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0udy02e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNil9LnctN3t3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS53LTh7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo4KX0udy0xMHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0udy0yMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIxKX0udy1cWzIycHhcXXt3aWR0aDoyMnB4fS53LVxbMzBweFxde3dpZHRoOjMwcHh9LnctXFszMlwlXF17d2lkdGg6MzIlfS53LVxbMzZcJVxde3dpZHRoOjM2JX0udy1cWzQwXCVcXXt3aWR0aDo0MCV9LnctXFs0MlwlXF17d2lkdGg6NDIlfS53LVxbNDZcJVxde3dpZHRoOjQ2JX0udy1cWzQ4XCVcXXt3aWR0aDo0OCV9LnctXFs1OFwlXF17d2lkdGg6NTglfS53LVxbNjJcJVxde3dpZHRoOjYyJX0udy1cWzY4XCVcXXt3aWR0aDo2OCV9LnctXFs3MFwlXF17d2lkdGg6NzAlfS53LVxbNzRcJVxde3dpZHRoOjc0JX0udy1cWzEyMHB4XF17d2lkdGg6MTIwcHh9LnctXFtjYWxjXCgxMDBcJVwrOHB4XClcXXt3aWR0aDpjYWxjKDEwMCUgKyA4cHgpfS53LVxbbWluXCgzMjBweFwsY2FsY1woMTAwdnctMzJweFwpXClcXXt3aWR0aDptaW4oMzIwcHgsMTAwdncgLSAzMnB4KX0udy1mdWxse3dpZHRoOjEwMCV9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzE1MHB4XF17bWF4LXdpZHRoOjE1MHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy1cWzU2cHhcXXttaW4td2lkdGg6NTZweH0ubWluLXctXFsyMDBweFxde21pbi13aWR0aDoyMDBweH0ubWluLXctXFsyMjBweFxde21pbi13aWR0aDoyMjBweH0ubWluLXctcHh7bWluLXdpZHRoOjFweH0uZmxleC0xe2ZsZXg6MX0uc2hyaW5re2ZsZXgtc2hyaW5rOjF9LnNocmluay0we2ZsZXgtc2hyaW5rOjB9Lmdyb3d7ZmxleC1ncm93OjF9Li10cmFuc2xhdGUteC0xXC8yey0tdHctdHJhbnNsYXRlLXg6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNsYXRlLXgtMXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2Zvcm17dHJhbnNmb3JtOnZhcigtLXR3LXJvdGF0ZS14LCl2YXIoLS10dy1yb3RhdGUteSwpdmFyKC0tdHctcm90YXRlLXosKXZhcigtLXR3LXNrZXcteCwpdmFyKC0tdHctc2tldy15LCl9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuN3NfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6MWZyXzFmcl8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnJ9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvXzFmcl9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG99LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvX21pbm1heFwoMFwsMWZyXClfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIG1pbm1heCgwLDFmcilhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMHtib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MH0uYm9yZGVyLTJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjJweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci10b3Atd2lkdGg6MXB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItZGFzaGVkey0tdHctYm9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItc3R5bGU6ZGFzaGVkfS5ib3JkZXItbm9uZXstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cIWJvcmRlci1cW3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNlwpXF17Ym9yZGVyLWNvbG9yOiMwYTg0ZmY5OSFpbXBvcnRhbnR9LmJvcmRlci1cW1wjM2I1Zjk5XF17Ym9yZGVyLWNvbG9yOiMzYjVmOTl9LmJvcmRlci1cW1wjNWY2MjY4XF17Ym9yZGVyLWNvbG9yOiM1ZjYyNjh9LmJvcmRlci1cW1wjMjIyXF17Ym9yZGVyLWNvbG9yOiMyMjJ9LmJvcmRlci1hY2NlbnR7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJvcmRlci1kYW5nZXJcLzIwe2JvcmRlci1jb2xvcjojZjg3MTcxMzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjojZjg3MTcxNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6I2ZiYmYyNDQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZXtib3JkZXItY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItdC1cW1wjZjRmNGY1XF17Ym9yZGVyLXRvcC1jb2xvcjojZjRmNGY1fS5ib3JkZXItdC13aGl0ZXtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMwYTg0ZmZcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmZ9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMyMDJiM2FcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMDJiM2F9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMyNjM2NGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyNjM2NGN9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbXCNmODcxNzFcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzF9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoOTlcLDEwMlwsMjQxXCwwXC4xOFwpXF17YmFja2dyb3VuZC1jb2xvcjojNjM2NmYxMmV9LmJnLWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJnLWJsYWNre2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYmxhY2spfS5iZy1kYW5nZXItc29mdHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0uYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzExYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikxMCUsdHJhbnNwYXJlbnQpfX0uYmctcGFnZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhZ2UpfS5iZy1wYW5lbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsKX0uYmctcGFuZWwtYmd7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZyl9LmJnLXBhbmVsLWJnLXRyYW5zbHVjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQpfS5iZy1wYW5lbC1kZWVwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtZGVlcCl9LmJnLXBhbmVsLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1vdmVybGF5KX0uYmctc3VjY2Vzcy1lbWVyYWxke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkKX0uYmctdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjojZmJiZjI0MWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzUwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wOFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xNlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTYlLHRyYW5zcGFyZW50KX19LmJnLVxbbGluZWFyLWdyYWRpZW50XCgxNDVkZWdcLFwjMjUzYTVmXCxcIzE2MjEzMlwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMil9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19ib3R0b21cLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlIDAlLCMxYzFjMWUwMCAxMDAlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMFwlXCxcIzFjMWMxZV81NVwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg5MGRlZywjMWMxYzFlMDAgMCUsIzFjMWMxZSA1NSUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fdG9wXCxcIzFjMWMxZV8wXCVcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzFjMWMxZTAwIDAlLCMxYzFjMWUgMTAwJSl9Lm9iamVjdC1jb250YWlue29iamVjdC1maXQ6Y29udGFpbn0ub2JqZWN0LWNvdmVye29iamVjdC1maXQ6Y292ZXJ9LnAtMHtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMCl9LnAtMFwuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wLTF7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wLTNcLjV7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnAtNntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB4LTBcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB4LTF7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHgtMVwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB4LTJ7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHgtMlwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB4LTN7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucHgtM1wuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnB4LTR7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucHgtNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5weC1cWzVcLjVweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjUuNXB4O3BhZGRpbmctaW5saW5lLWVuZDo1LjVweH0ucHgtXFs3cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo3cHg7cGFkZGluZy1pbmxpbmUtZW5kOjdweH0ucHktMFwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5weS0xe3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHktMVwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHktMntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMil9LnB5LTJcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB5LTR7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weS02e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHktXFsycHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjJweDtwYWRkaW5nLWJsb2NrLWVuZDoycHh9LnB5LVxbM3B4XF17cGFkZGluZy1ibG9jay1zdGFydDozcHg7cGFkZGluZy1ibG9jay1lbmQ6M3B4fS5weS1cWzVweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6NXB4O3BhZGRpbmctYmxvY2stZW5kOjVweH0ucHktXFs3cHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjdweDtwYWRkaW5nLWJsb2NrLWVuZDo3cHh9LnB0LTBcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB0LTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHQtMlwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci0zXC41e3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLTF7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucGItMVwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnBiLTJ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGItXFsycHhcXXtwYWRkaW5nLWJvdHRvbToycHh9LnBsLTJ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnBsLTJcLjV7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucGwtM3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucGwtN3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0ucGwtXFsyNnB4XF17cGFkZGluZy1sZWZ0OjI2cHh9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS5cW2ZvbnQtZmFtaWx5XDotYXBwbGUtc3lzdGVtXCxzeXN0ZW0tdWlcLHNhbnMtc2VyaWZcXXtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLE5vdG8gU2FucyxVYnVudHUsQ2FudGFyZWxsLEhlbHZldGljYSBOZXVlLHNhbnMtc2VyaWZ9LmZvbnQtXFtpbmhlcml0XF17Zm9udC1mYW1pbHk6aW5oZXJpdH0uZm9udC1tb25ve2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyl9LmZvbnQtc3lzdGVte2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc3lzdGVtKX0udGV4dC1cWzlweFxde2ZvbnQtc2l6ZTo5cHh9LnRleHQtXFsxMHB4XF17Zm9udC1zaXplOjEwcHh9LnRleHQtXFsxMVwuNXB4XF17Zm9udC1zaXplOjExLjVweH0udGV4dC1cWzExcHhcXXtmb250LXNpemU6MTFweH0udGV4dC1cWzEycHhcXXtmb250LXNpemU6MTJweH0udGV4dC1cWzEzcHhcXXtmb250LXNpemU6MTNweH0udGV4dC1cWzE0cHhcXXtmb250LXNpemU6MTRweH0udGV4dC1cWzE3cHhcXXtmb250LXNpemU6MTdweH0udGV4dC1cWzE4cHhcXXtmb250LXNpemU6MThweH0ubGVhZGluZy1cWzFcLjVcXXstLXR3LWxlYWRpbmc6MS41O2xpbmUtaGVpZ2h0OjEuNX0ubGVhZGluZy1cWzFcLjM1XF17LS10dy1sZWFkaW5nOjEuMzU7bGluZS1oZWlnaHQ6MS4zNX0ubGVhZGluZy1ub25ley0tdHctbGVhZGluZzoxO2xpbmUtaGVpZ2h0OjF9LmxlYWRpbmctc251Z3stLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy1zbnVnKTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXNudWcpfS5sZWFkaW5nLXRpZ2h0ey0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXRpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXRpZ2h0KX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtc2VtaWJvbGR7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50cmFja2luZy1cWzBcLjFlbVxdey0tdHctdHJhY2tpbmc6LjFlbTtsZXR0ZXItc3BhY2luZzouMWVtfS50cmFja2luZy1cWzBcLjAyZW1cXXstLXR3LXRyYWNraW5nOi4wMmVtO2xldHRlci1zcGFjaW5nOi4wMmVtfS50cmFja2luZy1cWzBcLjA0ZW1cXXstLXR3LXRyYWNraW5nOi4wNGVtO2xldHRlci1zcGFjaW5nOi4wNGVtfS50cmFja2luZy1cWzBcLjA2ZW1cXXstLXR3LXRyYWNraW5nOi4wNmVtO2xldHRlci1zcGFjaW5nOi4wNmVtfS50cmFja2luZy1cWzBcLjA4ZW1cXXstLXR3LXRyYWNraW5nOi4wOGVtO2xldHRlci1zcGFjaW5nOi4wOGVtfS50cmFja2luZy13aWRley0tdHctdHJhY2tpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSl9LmJyZWFrLXdvcmRze292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0udGV4dC1lbGxpcHNpc3t0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LlwhdGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSkhaW1wb3J0YW50fS50ZXh0LVxbXCMwYTBhMGNcXXtjb2xvcjojMGEwYTBjfS50ZXh0LVxbXCM4ZThlOTNcXXtjb2xvcjojOGU4ZTkzfS50ZXh0LVxbXCMzNGQzOTlcXXtjb2xvcjojMzRkMzk5fS50ZXh0LVxbXCMwNjIwMThcXXtjb2xvcjojMDYyMDE4fS50ZXh0LVxbXCNjOGQ3ZmZcXXtjb2xvcjojYzhkN2ZmfS50ZXh0LVxbXCNkMmU3ZmZcXXtjb2xvcjojZDJlN2ZmfS50ZXh0LWFjY2VudHtjb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS50ZXh0LWRhbmdlcntjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfS50ZXh0LWRhbmdlci1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0udGV4dC13YXJuaW5nLXNvZnR7Y29sb3I6dmFyKC0tY29sb3Itd2FybmluZy1zb2Z0KX0udGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LnRleHQtd2hpdGVcLzQwe2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNDV7Y29sb3I6I2ZmZmZmZjczfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQ1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTB7Y29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzUwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTV7Y29sb3I6I2ZmZmZmZjhjfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzU1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjB7Y29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNjB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC82NXtjb2xvcjojZmZmZmZmYTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNjV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTY1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC83MHtjb2xvcjojZmZmZmZmYjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNzB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTcwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC83NXtjb2xvcjojZmZmZmZmYmZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTc1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84MHtjb2xvcjojZmZmY31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzg1e2NvbG9yOiNmZmZmZmZkOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzkwe2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzk1e2NvbG9yOiNmZmZmZmZmMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjojZmZmZmZmNmJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MiUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOiNmZmZmZmY3YX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjQ4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQ4JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6I2ZmZmZmZjk0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNThcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTguMCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOiNmZmZmZmZlYn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjkyXF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkyJSx0cmFuc3BhcmVudCl9fS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LnRhYnVsYXItbnVtc3stLXR3LW51bWVyaWMtc3BhY2luZzp0YWJ1bGFyLW51bXM7Zm9udC12YXJpYW50LW51bWVyaWM6dmFyKC0tdHctb3JkaW5hbCwpdmFyKC0tdHctc2xhc2hlZC16ZXJvLCl2YXIoLS10dy1udW1lcmljLWZpZ3VyZSwpdmFyKC0tdHctbnVtZXJpYy1zcGFjaW5nLCl2YXIoLS10dy1udW1lcmljLWZyYWN0aW9uLCl9LlxbZm9udC12YXJpYW50LW51bWVyaWNcOnRhYnVsYXItbnVtc1xde2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ubm8tdW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmV9Lm9wYWNpdHktMHtvcGFjaXR5OjB9Lm9wYWNpdHktNDB7b3BhY2l0eTouNH0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4MCk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjQ1XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNzMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF8xMnB4XzQwcHhfcmdiYVwoMFwsMFwsMFwsMFwuNTVcKVxdey0tdHctc2hhZG93OjAgMTJweCA0MHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwOGMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbOHB4XzBfMzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4zNVwpXF17LS10dy1zaGFkb3c6OHB4IDAgMzJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDU5KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmcsLnJpbmctMXstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMXB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmctMnstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCg3NFwsMjIyXCwxMjhcLDBcLjdcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjNGFkZTgwYjN9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCgyNDhcLDExM1wsMTEzXCwwXC41NVwpXF17Ym94LXNoYWRvdzowIDAgNnB4ICNmODcxNzE4Y30ucmluZy1cW1wjMWMxYzFlXF17LS10dy1yaW5nLWNvbG9yOiMxYzFjMWV9LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0ub3V0bGluZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5ibHVyey0tdHctYmx1cjpibHVyKDhweCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5ncmF5c2NhbGV7LS10dy1ncmF5c2NhbGU6Z3JheXNjYWxlKDEwMCUpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1cnstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cig4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxMnB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMTJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzE4cHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLW1key0tdHctYmFja2Ryb3AtYmx1cjpibHVyKHZhcigtLWJsdXItbWQpKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1zYXR1cmF0ZS0xNTB7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTpzYXR1cmF0ZSgxNTAlKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1maWx0ZXJ7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0udHJhbnNpdGlvbnt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvLG9wYWNpdHksYm94LXNoYWRvdyx0cmFuc2Zvcm0sdHJhbnNsYXRlLHNjYWxlLHJvdGF0ZSxmaWx0ZXIsLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIsYmFja2Ryb3AtZmlsdGVyLGRpc3BsYXksY29udGVudC12aXNpYmlsaXR5LG92ZXJsYXkscG9pbnRlci1ldmVudHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW2JvcmRlci1jb2xvclwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW3dpZHRoXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTp3aWR0aCxiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG87dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5kdXJhdGlvbi0xNTB7LS10dy1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwey0tdHctZHVyYXRpb246LjJzO3RyYW5zaXRpb24tZHVyYXRpb246LjJzfS5kdXJhdGlvbi0zMDB7LS10dy1kdXJhdGlvbjouM3M7dHJhbnNpdGlvbi1kdXJhdGlvbjouM3N9LmVhc2Utb3V0ey0tdHctZWFzZTp2YXIoLS1lYXNlLW91dCk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZWFzZS1vdXQpfS5vdXRsaW5lLW5vbmV7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0LXRleHR7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHR9LlxbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcOmJsdXJcKDEycHhcKVxdey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCl9Llxbc2Nyb2xsYmFyLXdpZHRoXDp0aGluXF17c2Nyb2xsYmFyLXdpZHRoOnRoaW59LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnRyYW5zZm9ybV8wXC4yNXNfZWFzZVwsb3BhY2l0eV8wXC4yc19lYXNlXF17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyxvcGFjaXR5IC4yc30uXFt0cmFuc2l0aW9uXDp3aWR0aF8xMjBtc19saW5lYXJcXXt0cmFuc2l0aW9uOndpZHRoIC4xMnMgbGluZWFyfS5ncm91cC1mb2N1cy13aXRoaW5cOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpmb2N1cy13aXRoaW4gKil7b3BhY2l0eTowfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6cG9pbnRlci1ldmVudHMtYXV0bzppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmhpZGRlbjppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtkaXNwbGF5Om5vbmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eTowfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMTAwOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope29wYWNpdHk6MX19LnBsYWNlaG9sZGVyXDp0ZXh0LXdoaXRlXC80MDo6cGxhY2Vob2xkZXJ7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy13aXRoaW5cOmJnLXdoaXRlXC8xMDpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xNlwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyOX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzEyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzE4OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjJlfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmNDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNy4wJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZTpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZVwvODU6aG92ZXJ7Y29sb3I6I2ZmZmZmZmQ5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LXdoaXRlXC84NTpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6I2ZmZmZmZmU2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19fS5mb2N1c1w6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjRcKVxdOmZvY3Vze2JvcmRlci1jb2xvcjojZmZmZmZmM2R9LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5mb2N1cy12aXNpYmxlXDpiZy13aGl0ZVwvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6b3BhY2l0eS0xMDA6Zm9jdXMtdmlzaWJsZXtvcGFjaXR5OjF9LmZvY3VzLXZpc2libGVcOlxbb3V0bGluZVw6MVwuNXB4X3NvbGlkX3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNTVcKVxdOmZvY3VzLXZpc2libGV7b3V0bGluZToxLjVweCBzb2xpZCAjMGE4NGZmOGN9LmZvY3VzLXZpc2libGVcOm91dGxpbmU6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLTI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLW9mZnNldC0yOmZvY3VzLXZpc2libGV7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLW9mZnNldC00OmZvY3VzLXZpc2libGV7b3V0bGluZS1vZmZzZXQ6NHB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXdoaXRlXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6b3V0bGluZS13aGl0ZVwvNjA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0uYWN0aXZlXDpzY2FsZS1cWzBcLjk3XF06YWN0aXZle3NjYWxlOi45N31AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmMmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctXFtcIzJhMmEyY1xdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmEyYTJjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE3fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMzh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LVxbXCMwYTBhMGNcXTplbmFibGVkOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC13aGl0ZTplbmFibGVkOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpicmlnaHRuZXNzLVxbMVwuMDhcXTplbmFibGVkOmhvdmVyey0tdHctYnJpZ2h0bmVzczpicmlnaHRuZXNzKDEuMDgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX19LmRpc2FibGVkXDpjdXJzb3ItZGVmYXVsdDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5kaXNhYmxlZFw6b3BhY2l0eS00MDpkaXNhYmxlZHtvcGFjaXR5Oi40fS5kaXNhYmxlZFw6b3BhY2l0eS01MDpkaXNhYmxlZHtvcGFjaXR5Oi41fUBtZWRpYSAobWF4LXdpZHRoOjg5OS45OTlweCl7Lm1heC1cWzkwMHB4XF1cOmhpZGRlbntkaXNwbGF5Om5vbmV9fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXByb2dyZXNze2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpiZy1cW3ZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpXF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotbW96LXJhbmdlLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpib3JkZXItbm9uZTo6LW1vei1yYW5nZS10aHVtYnstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGU6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6aC1cWzRweFxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6XFtiYWNrZ3JvdW5kXDpsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCx2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwscmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjJcKV92YXJcKC0tc2xpZGVyLWZpbGxcKVwpXF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXNsaWRlci1maWxsLWNvbG9yKXZhcigtLXNsaWRlci1maWxsKSwjZmZmZmZmMzggdmFyKC0tc2xpZGVyLWZpbGwpKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDotbXQtXFs0XC41cHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7bWFyZ2luLXRvcDotNC41cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDphcHBlYXJhbmNlLW5vbmU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2FwcGVhcmFuY2U6bm9uZX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaGFkb3ctXFswXzFweF8zcHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdOjotd2Via2l0LXNsaWRlci10aHVtYnstLXR3LXNoYWRvdzowIDFweCAzcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fX06cm9vdHstLWJ1bmNzcy1saWdodDogOy0tYnVuY3NzLWRhcms6aW5pdGlhbDtjb2xvci1zY2hlbWU6ZGFyazstLXNlcnZlLXNpbS1wYW5lbC1iZzojMTgxODE4Oy0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50OiMxODE4MThjNzstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc3BhcmVudDojMTgxODE4MDB9QHN1cHBvcnRzIChpbnRlcnBvbGF0ZS1zaXplOiBhbGxvdy1rZXl3b3Jkcyl7OnJvb3R7aW50ZXJwb2xhdGUtc2l6ZTphbGxvdy1rZXl3b3Jkc319ZGV0YWlscy5sZW0tc2VjdGlvbjo6ZGV0YWlscy1jb250ZW50e292ZXJmbG93OmNsaXA7dHJhbnNpdGlvbjpoZWlnaHQgLjIycyBlYXNlLGNvbnRlbnQtdmlzaWJpbGl0eSAuMjJzIGFsbG93LWRpc2NyZXRlO2hlaWdodDowfWRldGFpbHMubGVtLXNlY3Rpb25bb3Blbl06OmRldGFpbHMtY29udGVudHtoZWlnaHQ6YXV0b31kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnl7bGlzdC1zdHlsZTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVye2NvbG9yOiNmZmZ9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVyIC5sZW0tY2hldnJvbntjb2xvcjojZmZmZmZmZDkhaW1wb3J0YW50fS5sZW0tY2hldnJvbnt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTZzLGNvbG9yIC4xMnN9QGNvbnRhaW5lciAod2lkdGg8PTIxMHB4KXtbZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWxde2Rpc3BsYXk6bm9uZX19QGtleWZyYW1lcyBncmlkLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMjUwJSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTJweClzY2FsZSguOTYpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3Atb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpc2NhbGUoLjk2KX19LnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRle2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlfS5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LmdyaWQtdGlsZTpob3ZlciAuZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eToxfS5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzVhMWQxZDtib3JkZXItY29sb3I6I2EzM30uZ3JpZC10aWxlOmhvdmVye2JvcmRlci1jb2xvcjojNTU1IWltcG9ydGFudH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yb3RhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ib3JkZXItc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWxlYWRpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1mb250LXdlaWdodHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXRyYWNraW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3JkaW5hbHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNsYXNoZWQtemVyb3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZmlndXJle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1zcGFjaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1mcmFjdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXJpbmctaW5zZXR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC13aWR0aHtzeW50YXg6IjxsZW5ndGg+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOiNmZmZ9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctb3V0bGluZS1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LXNpemV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHVyYXRpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1lYXNle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QGxheWVyIHByb3BlcnRpZXN7QHN1cHBvcnRzICgoLXdlYmtpdC1oeXBoZW5zOiBub25lKSBhbmQgKCBub3QgKG1hcmdpbi10cmltOiBpbmxpbmUpKSkgb3IgKCgtbW96LW9yaWVudDogaW5saW5lKSBhbmQgKCBub3QgKGNvbG9yOnJnYihmcm9tIHJlZCByIGcgYikpKSl7Kiw6YmVmb3JlLDphZnRlciw6OmJhY2tkcm9wey0tdHctdHJhbnNsYXRlLXg6MDstLXR3LXRyYW5zbGF0ZS15OjA7LS10dy10cmFuc2xhdGUtejowOy0tdHctcm90YXRlLXg6aW5pdGlhbDstLXR3LXJvdGF0ZS15OmluaXRpYWw7LS10dy1yb3RhdGUtejppbml0aWFsOy0tdHctc2tldy14OmluaXRpYWw7LS10dy1za2V3LXk6aW5pdGlhbDstLXR3LWJvcmRlci1zdHlsZTpzb2xpZDstLXR3LWxlYWRpbmc6aW5pdGlhbDstLXR3LWZvbnQtd2VpZ2h0OmluaXRpYWw7LS10dy10cmFja2luZzppbml0aWFsOy0tdHctb3JkaW5hbDppbml0aWFsOy0tdHctc2xhc2hlZC16ZXJvOmluaXRpYWw7LS10dy1udW1lcmljLWZpZ3VyZTppbml0aWFsOy0tdHctbnVtZXJpYy1zcGFjaW5nOmluaXRpYWw7LS10dy1udW1lcmljLWZyYWN0aW9uOmluaXRpYWw7LS10dy1zaGFkb3c6MCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWluc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctcmluZy1jb2xvcjppbml0aWFsOy0tdHctcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtcmluZy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctcmluZy1pbnNldDppbml0aWFsOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6MHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6I2ZmZjstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1vdXRsaW5lLXN0eWxlOnNvbGlkOy0tdHctYmx1cjppbml0aWFsOy0tdHctYnJpZ2h0bmVzczppbml0aWFsOy0tdHctY29udHJhc3Q6aW5pdGlhbDstLXR3LWdyYXlzY2FsZTppbml0aWFsOy0tdHctaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctaW52ZXJ0OmluaXRpYWw7LS10dy1vcGFjaXR5OmluaXRpYWw7LS10dy1zYXR1cmF0ZTppbml0aWFsOy0tdHctc2VwaWE6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93OmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWRyb3Atc2hhZG93LXNpemU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJsdXI6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWNvbnRyYXN0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWludmVydDppbml0aWFsOy0tdHctYmFja2Ryb3Atb3BhY2l0eTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2F0dXJhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNlcGlhOmluaXRpYWw7LS10dy1kdXJhdGlvbjppbml0aWFsOy0tdHctZWFzZTppbml0aWFsfX19Cjwvc3R5bGU+CjwvaGVhZD48Ym9keT4KPGRpdiBpZD0icm9vdCI+PC9kaXY+CjwhLS1fX1NJTV9QUkVWSUVXX0NPTkZJR19fLS0+CjxzY3JpcHQgdHlwZT0ibW9kdWxlIj52YXIgcTIsbyxmMywkNCxUMCxSMyxtMyxwMyxUNSxoMixYMix1MyxiNSx3NSxFNSxsMyxmMj17fSxtMj1bXSxRND0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLEcyPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gQzAoJCxRKXtmb3IodmFyIEogaW4gUSkkW0pdPVFbSl07cmV0dXJuICR9ZnVuY3Rpb24gUzUoJCl7JCYmJC5wYXJlbnROb2RlJiYkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoJCl9ZnVuY3Rpb24gdjEoJCxRLEope3ZhciBaLFgsWSxxPXt9O2ZvcihZIGluIFEpWT09ImtleSI/Wj1RW1ldOlk9PSJyZWYiP1g9UVtZXTpxW1ldPVFbWV07aWYoYXJndW1lbnRzLmxlbmd0aD4yJiYocS5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/cTIuY2FsbChhcmd1bWVudHMsMik6SiksdHlwZW9mICQ9PSJmdW5jdGlvbiImJiQuZGVmYXVsdFByb3BzIT1udWxsKWZvcihZIGluICQuZGVmYXVsdFByb3BzKXFbWV09PT12b2lkIDAmJihxW1ldPSQuZGVmYXVsdFByb3BzW1ldKTtyZXR1cm4gWTIoJCxxLFosWCxudWxsKX1mdW5jdGlvbiBZMigkLFEsSixaLFgpe3ZhciBZPXt0eXBlOiQscHJvcHM6USxrZXk6SixyZWY6WixfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6WD09bnVsbD8rK2YzOlgsX19pOi0xLF9fdTowfTtyZXR1cm4gWD09bnVsbCYmby52bm9kZSE9bnVsbCYmby52bm9kZShZKSxZfWZ1bmN0aW9uIFYyKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19ZnVuY3Rpb24gSjEoJCl7cmV0dXJuICQuY2hpbGRyZW59ZnVuY3Rpb24gZjEoJCxRKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PVF9ZnVuY3Rpb24gbTAoJCxRKXtpZihRPT1udWxsKXJldHVybiAkLl9fP20wKCQuX18sJC5fX2krMSk6bnVsbDtmb3IodmFyIEo7UTwkLl9fay5sZW5ndGg7USsrKWlmKChKPSQuX19rW1FdKSE9bnVsbCYmSi5fX2UhPW51bGwpcmV0dXJuIEouX19lO3JldHVybiB0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iP20wKCQpOm51bGx9ZnVuY3Rpb24gSjQoJCl7aWYoJC5fX1AmJiQuX19kKXt2YXIgUT0kLl9fdixKPVEuX19lLFo9W10sWD1bXSxZPUMwKHt9LFEpO1kuX192PVEuX192KzEsby52bm9kZSYmby52bm9kZShZKSx4NSgkLl9fUCxZLFEsJC5fX24sJC5fX1AubmFtZXNwYWNlVVJJLDMyJlEuX191P1tKXTpudWxsLFosSj09bnVsbD9tMChRKTpKLCEhKDMyJlEuX191KSxYKSxZLl9fdj1RLl9fdixZLl9fLl9fa1tZLl9faV09WSxvMyhaLFksWCksUS5fX2U9US5fXz1udWxsLFkuX19lIT1KJiZkMyhZKX19ZnVuY3Rpb24gZDMoJCl7aWYoKCQ9JC5fXykhPW51bGwmJiQuX19jIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPW51bGwsJC5fX2suc29tZShmdW5jdGlvbihRKXtpZihRIT1udWxsJiZRLl9fZSE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1RLl9fZX0pLGQzKCQpfWZ1bmN0aW9uIEk1KCQpeyghJC5fX2QmJigkLl9fZD0hMCkmJlQwLnB1c2goJCkmJiFwMi5fX3IrK3x8UjMhPW8uZGVib3VuY2VSZW5kZXJpbmcpJiYoKFIzPW8uZGVib3VuY2VSZW5kZXJpbmcpfHxtMykocDIpfWZ1bmN0aW9uIHAyKCl7dHJ5e2Zvcih2YXIgJCxRPTE7VDAubGVuZ3RoOylUMC5sZW5ndGg+USYmVDAuc29ydChwMyksJD1UMC5zaGlmdCgpLFE9VDAubGVuZ3RoLEo0KCQpfWZpbmFsbHl7VDAubGVuZ3RoPXAyLl9fcj0wfX1mdW5jdGlvbiBjMygkLFEsSixaLFgsWSxxLEcsTixCLFUpe3ZhciBWLGssTCxNLEMseixBLFA9WiYmWi5fX2t8fG0yLFI9US5sZW5ndGg7Zm9yKE49SzQoSixRLFAsTixSKSxWPTA7VjxSO1YrKykoTD1KLl9fa1tWXSkhPW51bGwmJihrPUwuX19pIT0tMSYmUFtMLl9faV18fGYyLEwuX19pPVYsej14NSgkLEwsayxYLFkscSxHLE4sQixVKSxNPUwuX19lLEwucmVmJiZrLnJlZiE9TC5yZWYmJihrLnJlZiYmdjUoay5yZWYsbnVsbCxMKSxVLnB1c2goTC5yZWYsTC5fX2N8fE0sTCkpLEM9PW51bGwmJk0hPW51bGwmJihDPU0pLChBPSEhKDQmTC5fX3UpKXx8ay5fX2s9PT1MLl9faz8oTj1yMyhMLE4sJCxBKSxBJiZrLl9fZSYmKGsuX19lPW51bGwpKTp0eXBlb2YgTC50eXBlPT0iZnVuY3Rpb24iJiZ6IT09dm9pZCAwP049ejpNJiYoTj1NLm5leHRTaWJsaW5nKSxMLl9fdSY9LTcpO3JldHVybiBKLl9fZT1DLE59ZnVuY3Rpb24gSzQoJCxRLEosWixYKXt2YXIgWSxxLEcsTixCLFU9Si5sZW5ndGgsVj1VLGs9MDtmb3IoJC5fX2s9QXJyYXkoWCksWT0wO1k8WDtZKyspKHE9UVtZXSkhPW51bGwmJnR5cGVvZiBxIT0iYm9vbGVhbiImJnR5cGVvZiBxIT0iZnVuY3Rpb24iPyh0eXBlb2YgcT09InN0cmluZyJ8fHR5cGVvZiBxPT0ibnVtYmVyInx8dHlwZW9mIHE9PSJiaWdpbnQifHxxLmNvbnN0cnVjdG9yPT1TdHJpbmc/cT0kLl9fa1tZXT1ZMihudWxsLHEsbnVsbCxudWxsLG51bGwpOkcyKHEpP3E9JC5fX2tbWV09WTIoSjEse2NoaWxkcmVuOnF9LG51bGwsbnVsbCxudWxsKTpxLmNvbnN0cnVjdG9yPT09dm9pZCAwJiZxLl9fYj4wP3E9JC5fX2tbWV09WTIocS50eXBlLHEucHJvcHMscS5rZXkscS5yZWY/cS5yZWY6bnVsbCxxLl9fdik6JC5fX2tbWV09cSxOPVkrayxxLl9fPSQscS5fX2I9JC5fX2IrMSxHPW51bGwsKEI9cS5fX2k9WjQocSxKLE4sVikpIT0tMSYmKFYtLSwoRz1KW0JdKSYmKEcuX191fD0yKSksRz09bnVsbHx8Ry5fX3Y9PW51bGw/KEI9PS0xJiYoWD5VP2stLTpYPFUmJmsrKyksdHlwZW9mIHEudHlwZSE9ImZ1bmN0aW9uIiYmKHEuX191fD00KSk6QiE9TiYmKEI9PU4tMT9rLS06Qj09TisxP2srKzooQj5OP2stLTprKysscS5fX3V8PTQpKSk6JC5fX2tbWV09bnVsbDtpZihWKWZvcihZPTA7WTxVO1krKykoRz1KW1ldKSE9bnVsbCYmKDImRy5fX3UpPT0wJiYoRy5fX2U9PVomJihaPW0wKEcpKSxuMyhHLEcpKTtyZXR1cm4gWn1mdW5jdGlvbiByMygkLFEsSixaKXt2YXIgWCxZO2lmKHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihYPSQuX19rLFk9MDtYJiZZPFgubGVuZ3RoO1krKylYW1ldJiYoWFtZXS5fXz0kLFE9cjMoWFtZXSxRLEosWikpO3JldHVybiBRfSQuX19lIT1RJiYoWiYmKFEmJiQudHlwZSYmIVEucGFyZW50Tm9kZSYmKFE9bTAoJCkpLEouaW5zZXJ0QmVmb3JlKCQuX19lLFF8fG51bGwpKSxRPSQuX19lKTtkbyBRPVEmJlEubmV4dFNpYmxpbmc7d2hpbGUoUSE9bnVsbCYmUS5ub2RlVHlwZT09OCk7cmV0dXJuIFF9ZnVuY3Rpb24gYTEoJCxRKXtyZXR1cm4gUT1RfHxbXSwkPT1udWxsfHx0eXBlb2YgJD09ImJvb2xlYW4ifHwoRzIoJCk/JC5zb21lKGZ1bmN0aW9uKEope2ExKEosUSl9KTpRLnB1c2goJCkpLFF9ZnVuY3Rpb24gWjQoJCxRLEosWil7dmFyIFgsWSxxLEc9JC5rZXksTj0kLnR5cGUsQj1RW0pdLFU9QiE9bnVsbCYmKDImQi5fX3UpPT0wO2lmKEI9PT1udWxsJiZHPT1udWxsfHxVJiZHPT1CLmtleSYmTj09Qi50eXBlKXJldHVybiBKO2lmKFo+KFU/MTowKSl7Zm9yKFg9Si0xLFk9SisxO1g+PTB8fFk8US5sZW5ndGg7KWlmKChCPVFbcT1YPj0wP1gtLTpZKytdKSE9bnVsbCYmKDImQi5fX3UpPT0wJiZHPT1CLmtleSYmTj09Qi50eXBlKXJldHVybiBxfXJldHVybi0xfWZ1bmN0aW9uIGczKCQsUSxKKXtRWzBdPT0iLSI/JC5zZXRQcm9wZXJ0eShRLEo9PW51bGw/IiI6Sik6JFtRXT1KPT1udWxsPyIiOnR5cGVvZiBKIT0ibnVtYmVyInx8UTQudGVzdChRKT9KOkorInB4In1mdW5jdGlvbiBnMigkLFEsSixaLFgpe3ZhciBZLHE7JDppZihRPT0ic3R5bGUiKWlmKHR5cGVvZiBKPT0ic3RyaW5nIikkLnN0eWxlLmNzc1RleHQ9SjtlbHNle2lmKHR5cGVvZiBaPT0ic3RyaW5nIiYmKCQuc3R5bGUuY3NzVGV4dD1aPSIiKSxaKWZvcihRIGluIFopSiYmUSBpbiBKfHxnMygkLnN0eWxlLFEsIiIpO2lmKEopZm9yKFEgaW4gSilaJiZKW1FdPT1aW1FdfHxnMygkLnN0eWxlLFEsSltRXSl9ZWxzZSBpZihRWzBdPT0ibyImJlFbMV09PSJuIilZPVEhPShRPVEucmVwbGFjZSh1MywiJDEiKSkscT1RLnRvTG93ZXJDYXNlKCksUT1xIGluICR8fFE9PSJvbkZvY3VzT3V0Inx8UT09Im9uRm9jdXNJbiI/cS5zbGljZSgyKTpRLnNsaWNlKDIpLCQubHx8KCQubD17fSksJC5sW1ErWV09SixKP1o/SltYMl09WltYMl06KEpbWDJdPWI1LCQuYWRkRXZlbnRMaXN0ZW5lcihRLFk/RTU6dzUsWSkpOiQucmVtb3ZlRXZlbnRMaXN0ZW5lcihRLFk/RTU6dzUsWSk7ZWxzZXtpZihYPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKVE9US5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZihRIT0id2lkdGgiJiZRIT0iaGVpZ2h0IiYmUSE9ImhyZWYiJiZRIT0ibGlzdCImJlEhPSJmb3JtIiYmUSE9InRhYkluZGV4IiYmUSE9ImRvd25sb2FkIiYmUSE9InJvd1NwYW4iJiZRIT0iY29sU3BhbiImJlEhPSJyb2xlIiYmUSE9InBvcG92ZXIiJiZRIGluICQpdHJ5eyRbUV09Sj09bnVsbD8iIjpKO2JyZWFrICR9Y2F0Y2goRyl7fXR5cGVvZiBKPT0iZnVuY3Rpb24ifHwoSj09bnVsbHx8Sj09PSExJiZRWzRdIT0iLSI/JC5yZW1vdmVBdHRyaWJ1dGUoUSk6JC5zZXRBdHRyaWJ1dGUoUSxRPT0icG9wb3ZlciImJko9PTE/IiI6SikpfX1mdW5jdGlvbiBoMygkKXtyZXR1cm4gZnVuY3Rpb24oUSl7aWYodGhpcy5sKXt2YXIgSj10aGlzLmxbUS50eXBlKyRdO2lmKFFbaDJdPT1udWxsKVFbaDJdPWI1Kys7ZWxzZSBpZihRW2gyXTxKW1gyXSlyZXR1cm47cmV0dXJuIEooby5ldmVudD9vLmV2ZW50KFEpOlEpfX19ZnVuY3Rpb24geDUoJCxRLEosWixYLFkscSxHLE4sQil7dmFyIFUsVixrLEwsTSxDLHosQSxQLFIsSSxULHksYyxtLGY9US50eXBlO2lmKFEuY29uc3RydWN0b3IhPT12b2lkIDApcmV0dXJuIG51bGw7MTI4JkouX191JiYoTj0hISgzMiZKLl9fdSksWT1bRz1RLl9fZT1KLl9fZV0pLChVPW8uX19iKSYmVShRKTskOmlmKHR5cGVvZiBmPT0iZnVuY3Rpb24iKXRyeXtpZihBPVEucHJvcHMsUD1mLnByb3RvdHlwZSYmZi5wcm90b3R5cGUucmVuZGVyLFI9KFU9Zi5jb250ZXh0VHlwZSkmJlpbVS5fX2NdLEk9VT9SP1IucHJvcHMudmFsdWU6VS5fXzpaLEouX19jP3o9KFY9US5fX2M9Si5fX2MpLl9fPVYuX19FOihQP1EuX19jPVY9bmV3IGYoQSxJKTooUS5fX2M9Vj1uZXcgZjEoQSxJKSxWLmNvbnN0cnVjdG9yPWYsVi5yZW5kZXI9WTQpLFImJlIuc3ViKFYpLFYuc3RhdGV8fChWLnN0YXRlPXt9KSxWLl9fbj1aLGs9Vi5fX2Q9ITAsVi5fX2g9W10sVi5fc2I9W10pLFAmJlYuX19zPT1udWxsJiYoVi5fX3M9Vi5zdGF0ZSksUCYmZi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJihWLl9fcz09Vi5zdGF0ZSYmKFYuX19zPUMwKHt9LFYuX19zKSksQzAoVi5fX3MsZi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoQSxWLl9fcykpKSxMPVYucHJvcHMsTT1WLnN0YXRlLFYuX192PVEsaylQJiZmLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmVi5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJlYuY29tcG9uZW50V2lsbE1vdW50KCksUCYmVi5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmVi5fX2gucHVzaChWLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKFAmJmYuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZBIT09TCYmVi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZWLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoQSxJKSxRLl9fdj09Si5fX3Z8fCFWLl9fZSYmVi5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJlYuc2hvdWxkQ29tcG9uZW50VXBkYXRlKEEsVi5fX3MsSSk9PT0hMSl7US5fX3YhPUouX192JiYoVi5wcm9wcz1BLFYuc3RhdGU9Vi5fX3MsVi5fX2Q9ITEpLFEuX19lPUouX19lLFEuX19rPUouX19rLFEuX19rLnNvbWUoZnVuY3Rpb24odSl7dSYmKHUuX189USl9KSxtMi5wdXNoLmFwcGx5KFYuX19oLFYuX3NiKSxWLl9zYj1bXSxWLl9faC5sZW5ndGgmJnEucHVzaChWKTticmVhayAkfVYuY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmVi5jb21wb25lbnRXaWxsVXBkYXRlKEEsVi5fX3MsSSksUCYmVi5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJlYuX19oLnB1c2goZnVuY3Rpb24oKXtWLmNvbXBvbmVudERpZFVwZGF0ZShMLE0sQyl9KX1pZihWLmNvbnRleHQ9SSxWLnByb3BzPUEsVi5fX1A9JCxWLl9fZT0hMSxUPW8uX19yLHk9MCxQKVYuc3RhdGU9Vi5fX3MsVi5fX2Q9ITEsVCYmVChRKSxVPVYucmVuZGVyKFYucHJvcHMsVi5zdGF0ZSxWLmNvbnRleHQpLG0yLnB1c2guYXBwbHkoVi5fX2gsVi5fc2IpLFYuX3NiPVtdO2Vsc2UgZG8gVi5fX2Q9ITEsVCYmVChRKSxVPVYucmVuZGVyKFYucHJvcHMsVi5zdGF0ZSxWLmNvbnRleHQpLFYuc3RhdGU9Vi5fX3M7d2hpbGUoVi5fX2QmJisreTwyNSk7Vi5zdGF0ZT1WLl9fcyxWLmdldENoaWxkQ29udGV4dCE9bnVsbCYmKFo9QzAoQzAoe30sWiksVi5nZXRDaGlsZENvbnRleHQoKSkpLFAmJiFrJiZWLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoQz1WLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKEwsTSkpLGM9VSE9bnVsbCYmVS50eXBlPT09SjEmJlUua2V5PT1udWxsP2kzKFUucHJvcHMuY2hpbGRyZW4pOlUsRz1jMygkLEcyKGMpP2M6W2NdLFEsSixaLFgsWSxxLEcsTixCKSxWLmJhc2U9US5fX2UsUS5fX3UmPS0xNjEsVi5fX2gubGVuZ3RoJiZxLnB1c2goVikseiYmKFYuX19FPVYuX189bnVsbCl9Y2F0Y2godSl7aWYoUS5fX3Y9bnVsbCxOfHxZIT1udWxsKWlmKHUudGhlbil7Zm9yKFEuX191fD1OPzE2MDoxMjg7RyYmRy5ub2RlVHlwZT09OCYmRy5uZXh0U2libGluZzspRz1HLm5leHRTaWJsaW5nO1lbWS5pbmRleE9mKEcpXT1udWxsLFEuX19lPUd9ZWxzZXtmb3IobT1ZLmxlbmd0aDttLS07KVM1KFlbbV0pO3k1KFEpfWVsc2UgUS5fX2U9Si5fX2UsUS5fX2s9Si5fX2ssdS50aGVufHx5NShRKTtvLl9fZSh1LFEsSil9ZWxzZSBZPT1udWxsJiZRLl9fdj09Si5fX3Y/KFEuX19rPUouX19rLFEuX19lPUouX19lKTpHPVEuX19lPVg0KEouX19lLFEsSixaLFgsWSxxLE4sQik7cmV0dXJuKFU9by5kaWZmZWQpJiZVKFEpLDEyOCZRLl9fdT92b2lkIDA6R31mdW5jdGlvbiB5NSgkKXskJiYoJC5fX2MmJigkLl9fYy5fX2U9ITApLCQuX19rJiYkLl9fay5zb21lKHk1KSl9ZnVuY3Rpb24gbzMoJCxRLEope2Zvcih2YXIgWj0wO1o8Si5sZW5ndGg7WisrKXY1KEpbWl0sSlsrK1pdLEpbKytaXSk7by5fX2MmJm8uX19jKFEsJCksJC5zb21lKGZ1bmN0aW9uKFgpe3RyeXskPVguX19oLFguX19oPVtdLCQuc29tZShmdW5jdGlvbihZKXtZLmNhbGwoWCl9KX1jYXRjaChZKXtvLl9fZShZLFguX192KX19KX1mdW5jdGlvbiBpMygkKXtyZXR1cm4gdHlwZW9mICQhPSJvYmplY3QifHwkPT1udWxsfHwkLl9fYj4wPyQ6RzIoJCk/JC5tYXAoaTMpOkMwKHt9LCQpfWZ1bmN0aW9uIFg0KCQsUSxKLFosWCxZLHEsRyxOKXt2YXIgQixVLFYsayxMLE0sQyx6PUoucHJvcHN8fGYyLEE9US5wcm9wcyxQPVEudHlwZTtpZihQPT0ic3ZnIj9YPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6UD09Im1hdGgiP1g9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOlh8fChYPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksWSE9bnVsbCl7Zm9yKEI9MDtCPFkubGVuZ3RoO0IrKylpZigoTD1ZW0JdKSYmInNldEF0dHJpYnV0ZSJpbiBMPT0hIVAmJihQP0wubG9jYWxOYW1lPT1QOkwubm9kZVR5cGU9PTMpKXskPUwsWVtCXT1udWxsO2JyZWFrfX1pZigkPT1udWxsKXtpZihQPT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShBKTskPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhYLFAsQS5pcyYmQSksRyYmKG8uX19tJiZvLl9fbShRLFkpLEc9ITEpLFk9bnVsbH1pZihQPT1udWxsKXo9PT1BfHxHJiYkLmRhdGE9PUF8fCgkLmRhdGE9QSk7ZWxzZXtpZihZPVkmJnEyLmNhbGwoJC5jaGlsZE5vZGVzKSwhRyYmWSE9bnVsbClmb3Ioej17fSxCPTA7QjwkLmF0dHJpYnV0ZXMubGVuZ3RoO0IrKyl6WyhMPSQuYXR0cmlidXRlc1tCXSkubmFtZV09TC52YWx1ZTtmb3IoQiBpbiB6KUw9eltCXSxCPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP1Y9TDpCPT0iY2hpbGRyZW4ifHwoQiBpbiBBKXx8Qj09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gQSl8fEI9PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiBBKXx8ZzIoJCxCLG51bGwsTCxYKTtmb3IoQiBpbiBBKUw9QVtCXSxCPT0iY2hpbGRyZW4iP2s9TDpCPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP1U9TDpCPT0idmFsdWUiP009TDpCPT0iY2hlY2tlZCI/Qz1MOkcmJnR5cGVvZiBMIT0iZnVuY3Rpb24ifHx6W0JdPT09THx8ZzIoJCxCLEwseltCXSxYKTtpZihVKUd8fFYmJihVLl9faHRtbD09Vi5fX2h0bWx8fFUuX19odG1sPT0kLmlubmVySFRNTCl8fCgkLmlubmVySFRNTD1VLl9faHRtbCksUS5fX2s9W107ZWxzZSBpZihWJiYoJC5pbm5lckhUTUw9IiIpLGMzKFEudHlwZT09InRlbXBsYXRlIj8kLmNvbnRlbnQ6JCxHMihrKT9rOltrXSxRLEosWixQPT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOlgsWSxxLFk/WVswXTpKLl9fayYmbTAoSiwwKSxHLE4pLFkhPW51bGwpZm9yKEI9WS5sZW5ndGg7Qi0tOylTNShZW0JdKTtHfHwoQj0idmFsdWUiLFA9PSJwcm9ncmVzcyImJk09PW51bGw/JC5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6TSE9bnVsbCYmKE0hPT0kW0JdfHxQPT0icHJvZ3Jlc3MiJiYhTXx8UD09Im9wdGlvbiImJk0hPXpbQl0pJiZnMigkLEIsTSx6W0JdLFgpLEI9ImNoZWNrZWQiLEMhPW51bGwmJkMhPSRbQl0mJmcyKCQsQixDLHpbQl0sWCkpfXJldHVybiAkfWZ1bmN0aW9uIHY1KCQsUSxKKXt0cnl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBaPXR5cGVvZiAkLl9fdT09ImZ1bmN0aW9uIjtaJiYkLl9fdSgpLFomJlE9PW51bGx8fCgkLl9fdT0kKFEpKX1lbHNlICQuY3VycmVudD1RfWNhdGNoKFgpe28uX19lKFgsSil9fWZ1bmN0aW9uIG4zKCQsUSxKKXt2YXIgWixYO2lmKG8udW5tb3VudCYmby51bm1vdW50KCQpLChaPSQucmVmKSYmKFouY3VycmVudCYmWi5jdXJyZW50IT0kLl9fZXx8djUoWixudWxsLFEpKSwoWj0kLl9fYykhPW51bGwpe2lmKFouY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e1ouY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChZKXtvLl9fZShZLFEpfVouYmFzZT1aLl9fUD1udWxsfWlmKFo9JC5fX2spZm9yKFg9MDtYPFoubGVuZ3RoO1grKylaW1hdJiZuMyhaW1hdLFEsSnx8dHlwZW9mICQudHlwZSE9ImZ1bmN0aW9uIik7Snx8UzUoJC5fX2UpLCQuX19jPSQuX189JC5fX2U9dm9pZCAwfWZ1bmN0aW9uIFk0KCQsUSxKKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcigkLEopfWZ1bmN0aW9uIFAwKCQsUSxKKXt2YXIgWixYLFkscTtRPT1kb2N1bWVudCYmKFE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxvLl9fJiZvLl9fKCQsUSksWD0oWj10eXBlb2YgSj09ImZ1bmN0aW9uIik/bnVsbDpKJiZKLl9fa3x8US5fX2ssWT1bXSxxPVtdLHg1KFEsJD0oIVomJkp8fFEpLl9faz12MShKMSxudWxsLFskXSksWHx8ZjIsZjIsUS5uYW1lc3BhY2VVUkksIVomJko/W0pdOlg/bnVsbDpRLmZpcnN0Q2hpbGQ/cTIuY2FsbChRLmNoaWxkTm9kZXMpOm51bGwsWSwhWiYmSj9KOlg/WC5fX2U6US5maXJzdENoaWxkLFoscSksbzMoWSwkLHEpfWZ1bmN0aW9uIHUyKCQsUSl7UDAoJCxRLHUyKX1mdW5jdGlvbiBqNSgkLFEsSil7dmFyIFosWCxZLHEsRz1DMCh7fSwkLnByb3BzKTtmb3IoWSBpbiAkLnR5cGUmJiQudHlwZS5kZWZhdWx0UHJvcHMmJihxPSQudHlwZS5kZWZhdWx0UHJvcHMpLFEpWT09ImtleSI/Wj1RW1ldOlk9PSJyZWYiP1g9UVtZXTpHW1ldPVFbWV09PT12b2lkIDAmJnEhPW51bGw/cVtZXTpRW1ldO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihHLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9xMi5jYWxsKGFyZ3VtZW50cywyKTpKKSxZMigkLnR5cGUsRyxafHwkLmtleSxYfHwkLnJlZixudWxsKX1mdW5jdGlvbiBxMCgkKXtmdW5jdGlvbiBRKEope3ZhciBaLFg7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwoWj1uZXcgU2V0LChYPXt9KVtRLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBYfSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7Wj1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihZKXt0aGlzLnByb3BzLnZhbHVlIT1ZLnZhbHVlJiZaLmZvckVhY2goZnVuY3Rpb24ocSl7cS5fX2U9ITAsSTUocSl9KX0sdGhpcy5zdWI9ZnVuY3Rpb24oWSl7Wi5hZGQoWSk7dmFyIHE9WS5jb21wb25lbnRXaWxsVW5tb3VudDtZLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7WiYmWi5kZWxldGUoWSkscSYmcS5jYWxsKFkpfX0pLEouY2hpbGRyZW59cmV0dXJuIFEuX19jPSJfX2NDIitsMysrLFEuX189JCxRLlByb3ZpZGVyPVEuX19sPShRLkNvbnN1bWVyPWZ1bmN0aW9uKEosWil7cmV0dXJuIEouY2hpbGRyZW4oWil9KS5jb250ZXh0VHlwZT1RLFF9cTI9bTIuc2xpY2Usbz17X19lOmZ1bmN0aW9uKCQsUSxKLFope2Zvcih2YXIgWCxZLHE7UT1RLl9fOylpZigoWD1RLl9fYykmJiFYLl9fKXRyeXtpZigoWT1YLmNvbnN0cnVjdG9yKSYmWS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IhPW51bGwmJihYLnNldFN0YXRlKFkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCQpKSxxPVguX19kKSxYLmNvbXBvbmVudERpZENhdGNoIT1udWxsJiYoWC5jb21wb25lbnREaWRDYXRjaCgkLFp8fHt9KSxxPVguX19kKSxxKXJldHVybiBYLl9fRT1YfWNhdGNoKEcpeyQ9R310aHJvdyAkfX0sZjM9MCwkND1mdW5jdGlvbigkKXtyZXR1cm4gJCE9bnVsbCYmJC5jb25zdHJ1Y3Rvcj09PXZvaWQgMH0sZjEucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKCQsUSl7dmFyIEo7Sj10aGlzLl9fcyE9bnVsbCYmdGhpcy5fX3MhPXRoaXMuc3RhdGU/dGhpcy5fX3M6dGhpcy5fX3M9QzAoe30sdGhpcy5zdGF0ZSksdHlwZW9mICQ9PSJmdW5jdGlvbiImJigkPSQoQzAoe30sSiksdGhpcy5wcm9wcykpLCQmJkMwKEosJCksJCE9bnVsbCYmdGhpcy5fX3YmJihRJiZ0aGlzLl9zYi5wdXNoKFEpLEk1KHRoaXMpKX0sZjEucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKCQpe3RoaXMuX192JiYodGhpcy5fX2U9ITAsJCYmdGhpcy5fX2gucHVzaCgkKSxJNSh0aGlzKSl9LGYxLnByb3RvdHlwZS5yZW5kZXI9SjEsVDA9W10sbTM9dHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiI/UHJvbWlzZS5wcm90b3R5cGUudGhlbi5iaW5kKFByb21pc2UucmVzb2x2ZSgpKTpzZXRUaW1lb3V0LHAzPWZ1bmN0aW9uKCQsUSl7cmV0dXJuICQuX192Ll9fYi1RLl9fdi5fX2J9LHAyLl9fcj0wLFQ1PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoOCksaDI9Il9fZCIrVDUsWDI9Il9fYSIrVDUsdTM9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksYjU9MCx3NT1oMyghMSksRTU9aDMoITApLGwzPTA7dmFyIHcwLFcxLFI1LGEzLHAwPTAsWjg9W10sSTE9byxzMz1JMS5fX2IsdDM9STEuX19yLGUzPUkxLmRpZmZlZCwkOD1JMS5fX2MsUTg9STEudW5tb3VudCxKOD1JMS5fXztmdW5jdGlvbiB1MCgkLFEpe0kxLl9faCYmSTEuX19oKFcxLCQscDB8fFEpLHAwPTA7dmFyIEo9VzEuX19IfHwoVzEuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gJD49Si5fXy5sZW5ndGgmJkouX18ucHVzaCh7fSksSi5fX1skXX1mdW5jdGlvbiBXKCQpe3JldHVybiBwMD0xLGIwKFg4LCQpfWZ1bmN0aW9uIGIwKCQsUSxKKXt2YXIgWj11MCh3MCsrLDIpO2lmKFoudD0kLCFaLl9fYyYmKFouX189W0o/SihRKTpYOCh2b2lkIDAsUSksZnVuY3Rpb24oRyl7dmFyIE49Wi5fX04/Wi5fX05bMF06Wi5fX1swXSxCPVoudChOLEcpO04hPT1CJiYoWi5fX049W0IsWi5fX1sxXV0sWi5fX2Muc2V0U3RhdGUoe30pKX1dLFouX19jPVcxLCFXMS5fX2YpKXt2YXIgWD1mdW5jdGlvbihHLE4sQil7aWYoIVouX19jLl9fSClyZXR1cm4hMDt2YXIgVT1aLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKGspe3JldHVybiBrLl9fY30pO2lmKFUuZXZlcnkoZnVuY3Rpb24oayl7cmV0dXJuIWsuX19OfSkpcmV0dXJuIVl8fFkuY2FsbCh0aGlzLEcsTixCKTt2YXIgVj1aLl9fYy5wcm9wcyE9PUc7cmV0dXJuIFUuc29tZShmdW5jdGlvbihrKXtpZihrLl9fTil7dmFyIEw9ay5fX1swXTtrLl9fPWsuX19OLGsuX19OPXZvaWQgMCxMIT09ay5fX1swXSYmKFY9ITApfX0pLFkmJlkuY2FsbCh0aGlzLEcsTixCKXx8Vn07VzEuX19mPSEwO3ZhcntzaG91bGRDb21wb25lbnRVcGRhdGU6WSxjb21wb25lbnRXaWxsVXBkYXRlOnF9PVcxO1cxLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24oRyxOLEIpe2lmKHRoaXMuX19lKXt2YXIgVT1ZO1k9dm9pZCAwLFgoRyxOLEIpLFk9VX1xJiZxLmNhbGwodGhpcyxHLE4sQil9LFcxLnNob3VsZENvbXBvbmVudFVwZGF0ZT1YfXJldHVybiBaLl9fTnx8Wi5fX31mdW5jdGlvbiB4KCQsUSl7dmFyIEo9dTAodzArKywzKTshSTEuX19zJiZoNShKLl9fSCxRKSYmKEouX189JCxKLnU9USxXMS5fX0guX19oLnB1c2goSikpfWZ1bmN0aW9uIEgwKCQsUSl7dmFyIEo9dTAodzArKyw0KTshSTEuX19zJiZoNShKLl9fSCxRKSYmKEouX189JCxKLnU9USxXMS5fX2gucHVzaChKKSl9ZnVuY3Rpb24gYigkKXtyZXR1cm4gcDA9NSxfMShmdW5jdGlvbigpe3JldHVybntjdXJyZW50OiR9fSxbXSl9ZnVuY3Rpb24gZDIoJCxRLEope3AwPTYsSDAoZnVuY3Rpb24oKXtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIil7dmFyIFo9JChRKCkpO3JldHVybiBmdW5jdGlvbigpeyQobnVsbCksWiYmdHlwZW9mIFo9PSJmdW5jdGlvbiImJlooKX19aWYoJClyZXR1cm4gJC5jdXJyZW50PVEoKSxmdW5jdGlvbigpe3JldHVybiAkLmN1cnJlbnQ9bnVsbH19LEo9PW51bGw/SjpKLmNvbmNhdCgkKSl9ZnVuY3Rpb24gXzEoJCxRKXt2YXIgSj11MCh3MCsrLDcpO3JldHVybiBoNShKLl9fSCxRKSYmKEouX189JCgpLEouX19IPVEsSi5fX2g9JCksSi5fX31mdW5jdGlvbiBFKCQsUSl7cmV0dXJuIHAwPTgsXzEoZnVuY3Rpb24oKXtyZXR1cm4gJH0sUSl9ZnVuY3Rpb24gRzAoJCl7dmFyIFE9VzEuY29udGV4dFskLl9fY10sSj11MCh3MCsrLDkpO3JldHVybiBKLmM9JCxRPyhKLl9fPT1udWxsJiYoSi5fXz0hMCxRLnN1YihXMSkpLFEucHJvcHMudmFsdWUpOiQuX199ZnVuY3Rpb24gYzIoJCxRKXtJMS51c2VEZWJ1Z1ZhbHVlJiZJMS51c2VEZWJ1Z1ZhbHVlKFE/USgkKTokKX1mdW5jdGlvbiBsMCgpe3ZhciAkPXUwKHcwKyssMTEpO2lmKCEkLl9fKXtmb3IodmFyIFE9VzEuX192O1EhPT1udWxsJiYhUS5fX20mJlEuX18hPT1udWxsOylRPVEuX187dmFyIEo9US5fX218fChRLl9fbT1bMCwwXSk7JC5fXz0iUCIrSlswXSsiLSIrSlsxXSsrfXJldHVybiAkLl9ffWZ1bmN0aW9uIHE0KCl7Zm9yKHZhciAkOyQ9Wjguc2hpZnQoKTspe3ZhciBRPSQuX19IO2lmKCQuX19QJiZRKXRyeXtRLl9faC5zb21lKGwyKSxRLl9faC5zb21lKGc1KSxRLl9faD1bXX1jYXRjaChKKXtRLl9faD1bXSxJMS5fX2UoSiwkLl9fdil9fX1JMS5fX2I9ZnVuY3Rpb24oJCl7VzE9bnVsbCxzMyYmczMoJCl9LEkxLl9fPWZ1bmN0aW9uKCQsUSl7JCYmUS5fX2smJlEuX19rLl9fbSYmKCQuX19tPVEuX19rLl9fbSksSjgmJko4KCQsUSl9LEkxLl9fcj1mdW5jdGlvbigkKXt0MyYmdDMoJCksdzA9MDt2YXIgUT0oVzE9JC5fX2MpLl9fSDtRJiYoUjU9PT1XMT8oUS5fX2g9W10sVzEuX19oPVtdLFEuX18uc29tZShmdW5jdGlvbihKKXtKLl9fTiYmKEouX189Si5fX04pLEoudT1KLl9fTj12b2lkIDB9KSk6KFEuX19oLnNvbWUobDIpLFEuX19oLnNvbWUoZzUpLFEuX19oPVtdLHcwPTApKSxSNT1XMX0sSTEuZGlmZmVkPWZ1bmN0aW9uKCQpe2UzJiZlMygkKTt2YXIgUT0kLl9fYztRJiZRLl9fSCYmKFEuX19ILl9faC5sZW5ndGgmJihaOC5wdXNoKFEpIT09MSYmYTM9PT1JMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoYTM9STEucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8RzQpKHE0KSksUS5fX0guX18uc29tZShmdW5jdGlvbihKKXtKLnUmJihKLl9fSD1KLnUpLEoudT12b2lkIDB9KSksUjU9VzE9bnVsbH0sSTEuX19jPWZ1bmN0aW9uKCQsUSl7US5zb21lKGZ1bmN0aW9uKEope3RyeXtKLl9faC5zb21lKGwyKSxKLl9faD1KLl9faC5maWx0ZXIoZnVuY3Rpb24oWil7cmV0dXJuIVouX198fGc1KFopfSl9Y2F0Y2goWil7US5zb21lKGZ1bmN0aW9uKFgpe1guX19oJiYoWC5fX2g9W10pfSksUT1bXSxJMS5fX2UoWixKLl9fdil9fSksJDgmJiQ4KCQsUSl9LEkxLnVubW91bnQ9ZnVuY3Rpb24oJCl7UTgmJlE4KCQpO3ZhciBRLEo9JC5fX2M7SiYmSi5fX0gmJihKLl9fSC5fXy5zb21lKGZ1bmN0aW9uKFope3RyeXtsMihaKX1jYXRjaChYKXtRPVh9fSksSi5fX0g9dm9pZCAwLFEmJkkxLl9fZShRLEouX192KSl9O3ZhciBLOD10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iO2Z1bmN0aW9uIEc0KCQpe3ZhciBRLEo9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoWiksSzgmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKFEpLHNldFRpbWVvdXQoJCl9LFo9c2V0VGltZW91dChKLDM1KTtLOCYmKFE9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEopKX1mdW5jdGlvbiBsMigkKXt2YXIgUT1XMSxKPSQuX19jO3R5cGVvZiBKPT0iZnVuY3Rpb24iJiYoJC5fX2M9dm9pZCAwLEooKSksVzE9UX1mdW5jdGlvbiBnNSgkKXt2YXIgUT1XMTskLl9fYz0kLl9fKCksVzE9UX1mdW5jdGlvbiBoNSgkLFEpe3JldHVybiEkfHwkLmxlbmd0aCE9PVEubGVuZ3RofHxRLnNvbWUoZnVuY3Rpb24oSixaKXtyZXR1cm4gSiE9PSRbWl19KX1mdW5jdGlvbiBYOCgkLFEpe3JldHVybiB0eXBlb2YgUT09ImZ1bmN0aW9uIj9RKCQpOlF9ZnVuY3Rpb24gVjQoJCxRKXtmb3IodmFyIEogaW4gUSkkW0pdPVFbSl07cmV0dXJuICR9ZnVuY3Rpb24gWTgoJCxRKXtmb3IodmFyIEogaW4gJClpZihKIT09Il9fc291cmNlIiYmIShKIGluIFEpKXJldHVybiEwO2Zvcih2YXIgWiBpbiBRKWlmKFohPT0iX19zb3VyY2UiJiYkW1pdIT09UVtaXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBxOCgkLFEpe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9UX0ocTgucHJvdG90eXBlPW5ldyBmMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAscTgucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLFEpe3JldHVybiBZOCh0aGlzLnByb3BzLCQpfHxZOCh0aGlzLnN0YXRlLFEpfTt2YXIgRzg9by5fX2I7by5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLEc4JiZHOCgkKX07dmFyIEI0PW8uX19lO28uX19lPWZ1bmN0aW9uKCQsUSxKLFope2lmKCQudGhlbil7Zm9yKHZhciBYLFk9UTtZPVkuX187KWlmKChYPVkuX19jKSYmWC5fX2MpcmV0dXJuIFEuX19lPT1udWxsJiYoUS5fX2U9Si5fX2UsUS5fX2s9Si5fX2spLFguX19jKCQsUSl9QjQoJCxRLEosWil9O3ZhciBWOD1vLnVubW91bnQ7ZnVuY3Rpb24gQzgoJCxRLEope3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFope3R5cGVvZiBaLl9fYz09ImZ1bmN0aW9uIiYmWi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1WNCh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09SiYmKCQuX19jLl9fUD1RKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gQzgoWixRLEopfSkpLCR9ZnVuY3Rpb24gSDgoJCxRLEope3JldHVybiAkJiZKJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBIOChaLFEsSil9KSwkLl9fYyYmJC5fX2MuX19QPT09USYmKCQuX19lJiZKLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPUopKSwkfWZ1bmN0aW9uIGY1KCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEY4KCQpe3ZhciBRPSQuX18mJiQuX18uX19jO3JldHVybiBRJiZRLl9fYSYmUS5fX2EoJCl9ZnVuY3Rpb24gcjIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1vLnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIFE9JC5fX2M7USYmKFEuX196PSEwKSxRJiZRLl9fUiYmUS5fX1IoKSxRJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSxWOCYmVjgoJCl9LChmNS5wcm90b3R5cGU9bmV3IGYxKS5fX2M9ZnVuY3Rpb24oJCxRKXt2YXIgSj1RLl9fYyxaPXRoaXM7Wi5vPT1udWxsJiYoWi5vPVtdKSxaLm8ucHVzaChKKTt2YXIgWD1GOChaLl9fdiksWT0hMSxxPWZ1bmN0aW9uKCl7WXx8Wi5fX3p8fChZPSEwLEouX19SPW51bGwsWD9YKE4pOk4oKSl9O0ouX19SPXE7dmFyIEc9Si5fX1A7Si5fX1A9bnVsbDt2YXIgTj1mdW5jdGlvbigpe2lmKCEtLVouX191KXtpZihaLnN0YXRlLl9fYSl7dmFyIEI9Wi5zdGF0ZS5fX2E7Wi5fX3YuX19rWzBdPUg4KEIsQi5fX2MuX19QLEIuX19jLl9fTyl9dmFyIFU7Zm9yKFouc2V0U3RhdGUoe19fYTpaLl9fYj1udWxsfSk7VT1aLm8ucG9wKCk7KVUuX19QPUcsVS5mb3JjZVVwZGF0ZSgpfX07Wi5fX3UrK3x8MzImUS5fX3V8fFouc2V0U3RhdGUoe19fYTpaLl9fYj1aLl9fdi5fX2tbMF19KSwkLnRoZW4ocSxxKX0sZjUucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxmNS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsUSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1DOCh0aGlzLl9fYixKLFouX19PPVouX19QKX10aGlzLl9fYj1udWxsfXZhciBYPVEuX19hJiZ2MShKMSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBYJiYoWC5fX3UmPS0zMyksW3YxKEoxLG51bGwsUS5fX2E/bnVsbDokLmNoaWxkcmVuKSxYXX07dmFyIEI4PWZ1bmN0aW9uKCQsUSxKKXtpZigrK0pbMV09PT1KWzBdJiYkLmwuZGVsZXRlKFEpLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihKPSQuaTtKOyl7Zm9yKDtKLmxlbmd0aD4zOylKLnBvcCgpKCk7aWYoSlsxXTxKWzBdKWJyZWFrOyQuaT1KPUpbMl19fTsocjIucHJvdG90eXBlPW5ldyBmMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBRPXRoaXMsSj1GOChRLl9fdiksWj1RLmwuZ2V0KCQpO3JldHVybiBaWzBdKyssZnVuY3Rpb24oWCl7dmFyIFk9ZnVuY3Rpb24oKXtRLnByb3BzLnJldmVhbE9yZGVyPyhaLnB1c2goWCksQjgoUSwkLFopKTpYKCl9O0o/SihZKTpZKCl9fSxyMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBRPWExKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJlEucmV2ZXJzZSgpO2Zvcih2YXIgSj1RLmxlbmd0aDtKLS07KXRoaXMubC5zZXQoUVtKXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0scjIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1yMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKFEsSil7QjgoJCxKLFEpfSl9O3ZhciBOND10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxVND0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sTDQ9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyx6ND0vW0EtWjAtOV0vZyxDND10eXBlb2YgZG9jdW1lbnQ8InUiLEg0PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gazgoJCxRLEope3JldHVybiBRLl9faz09bnVsbCYmKFEudGV4dENvbnRlbnQ9IiIpLFAwKCQsUSksdHlwZW9mIEo9PSJmdW5jdGlvbiImJkooKSwkPyQuX19jOm51bGx9ZjEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGYxLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oUSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlF9KX19KX0pO3ZhciBOOD1vLmV2ZW50O28uZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIE44JiYoJD1OOCgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIEE4LEY0PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxVOD1vLnZub2RlO28udm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKFEpe3Zhcntwcm9wczpKLHR5cGU6Wn09USxYPXt9LFk9Wi5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBKKXt2YXIgRz1KW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEopJiZHPT1udWxsfHxDNCYmcT09PSJjaGlsZHJlbiImJlo9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIE49cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIEomJkoudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpOPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6TlswXT09PSJvIiYmTlsxXT09PSJuIj9OPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOk4hPT0ib25jaGFuZ2UifHxaIT09ImlucHV0IiYmWiE9PSJ0ZXh0YXJlYSJ8fEg0KEoudHlwZSk/Tj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOk49PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjpMNC50ZXN0KHEpJiYocT1OKTpOPXE9Im9uaW5wdXQiOlkmJlU0LnRlc3QocSk/cT1xLnJlcGxhY2UoejQsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksTj09PSJvbmlucHV0IiYmWFtxPU5dJiYocT0ib25pbnB1dENhcHR1cmUiKSxYW3FdPUd9fVo9PSJzZWxlY3QiJiYoWC5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShYLnZhbHVlKSYmKFgudmFsdWU9YTEoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgudmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTF9KSksWC5kZWZhdWx0VmFsdWUhPW51bGwmJihYLnZhbHVlPWExKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1YLm11bHRpcGxlP1guZGVmYXVsdFZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xOlguZGVmYXVsdFZhbHVlPT1CLnByb3BzLnZhbHVlfSkpKSxKLmNsYXNzJiYhSi5jbGFzc05hbWU/KFguY2xhc3M9Si5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2xhc3NOYW1lIixGNCkpOkouY2xhc3NOYW1lJiYoWC5jbGFzcz1YLmNsYXNzTmFtZT1KLmNsYXNzTmFtZSksUS5wcm9wcz1YfSgkKSwkLiQkdHlwZW9mPU40LFU4JiZVOCgkKX07dmFyIEw4PW8uX19yO28uX19yPWZ1bmN0aW9uKCQpe0w4JiZMOCgkKSxBOD0kLl9fY307dmFyIHo4PW8uZGlmZmVkO28uZGlmZmVkPWZ1bmN0aW9uKCQpe3o4JiZ6OCgkKTt2YXJ7cHJvcHM6USxfX2U6Sn09JDtKIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gUSYmUS52YWx1ZSE9PUoudmFsdWUmJihKLnZhbHVlPVEudmFsdWU9PW51bGw/IiI6US52YWx1ZSksQTg9bnVsbH07ZnVuY3Rpb24gTTgoJCl7cmV0dXJuISEkLl9fayYmKFAwKG51bGwsJCksITApfWZ1bmN0aW9uIE84KCQpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oUSl7azgoUSwkKX0sdW5tb3VudDpmdW5jdGlvbigpe004KCQpfX19ZnVuY3Rpb24geTgoJCxRKXtmb3IodmFyIEogaW4gUSkkW0pdPVFbSl07cmV0dXJuICR9ZnVuY3Rpb24gcDUoJCxRKXtmb3IodmFyIEogaW4gJClpZihKIT09Il9fc291cmNlIiYmIShKIGluIFEpKXJldHVybiEwO2Zvcih2YXIgWiBpbiBRKWlmKFohPT0iX19zb3VyY2UiJiYkW1pdIT09UVtaXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBiOCgkLFEpe3ZhciBKPVEoKSxaPVcoe3Q6e19fOkosdTpRfX0pLFg9WlswXS50LFk9WlsxXTtyZXR1cm4gSDAoZnVuY3Rpb24oKXtYLl9fPUosWC51PVEsbTUoWCkmJlkoe3Q6WH0pfSxbJCxKLFFdKSx4KGZ1bmN0aW9uKCl7cmV0dXJuIG01KFgpJiZZKHt0Olh9KSwkKGZ1bmN0aW9uKCl7bTUoWCkmJlkoe3Q6WH0pfSl9LFskXSksSn1mdW5jdGlvbiBtNSgkKXt0cnl7cmV0dXJuISgoUT0kLl9fKT09PShKPSQudSgpKSYmKFEhPT0wfHwxL1E9PTEvSil8fFEhPVEmJkohPUopfWNhdGNoKFope3JldHVybiEwfXZhciBRLEp9ZnVuY3Rpb24gUzgoJCl7JCgpfWZ1bmN0aW9uIHg4KCQpe3JldHVybiAkfWZ1bmN0aW9uIHY4KCl7cmV0dXJuWyExLFM4XX12YXIgajg9SDA7ZnVuY3Rpb24gdTUoJCxRKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PVF9ZnVuY3Rpb24gUzAoJCxRKXtmdW5jdGlvbiBKKFgpe3ZhciBZPXRoaXMucHJvcHMucmVmO3JldHVybiBZIT1YLnJlZiYmWSYmKHR5cGVvZiBZPT0iZnVuY3Rpb24iP1kobnVsbCk6WS5jdXJyZW50PW51bGwpLFE/IVEodGhpcy5wcm9wcyxYKXx8WSE9WC5yZWY6cDUodGhpcy5wcm9wcyxYKX1mdW5jdGlvbiBaKFgpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1KLHYxKCQsWCl9cmV0dXJuIFouZGlzcGxheU5hbWU9Ik1lbW8oIisoJC5kaXNwbGF5TmFtZXx8JC5uYW1lKSsiKSIsWi5fX2Y9Wi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxaLnR5cGU9JCxafSh1NS5wcm90b3R5cGU9bmV3IGYxKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCx1NS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsUSl7cmV0dXJuIHA1KHRoaXMucHJvcHMsJCl8fHA1KHRoaXMuc3RhdGUsUSl9O3ZhciBXOD1vLl9fYjtvLl9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCksVzgmJlc4KCQpfTt2YXIgazQ9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIil8fDM5MTE7ZnVuY3Rpb24gQjAoJCl7ZnVuY3Rpb24gUShKKXt2YXIgWj15OCh7fSxKKTtyZXR1cm4gZGVsZXRlIFoucmVmLCQoWixKLnJlZnx8bnVsbCl9cmV0dXJuIFEuJCR0eXBlb2Y9azQsUS5yZW5kZXI9JCxRLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PVEuX19mPSEwLFEuZGlzcGxheU5hbWU9IkZvcndhcmRSZWYoIisoJC5kaXNwbGF5TmFtZXx8JC5uYW1lKSsiKSIsUX12YXIgXzg9ZnVuY3Rpb24oJCxRKXtyZXR1cm4gJD09bnVsbD9udWxsOmExKGExKCQpLm1hcChRKSl9LEE0PXttYXA6XzgsZm9yRWFjaDpfOCxjb3VudDpmdW5jdGlvbigkKXtyZXR1cm4gJD9hMSgkKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbigkKXt2YXIgUT1hMSgkKTtpZihRLmxlbmd0aCE9PTEpdGhyb3ciQ2hpbGRyZW4ub25seSI7cmV0dXJuIFFbMF19LHRvQXJyYXk6YTF9LE00PW8uX19lO28uX19lPWZ1bmN0aW9uKCQsUSxKLFope2lmKCQudGhlbil7Zm9yKHZhciBYLFk9UTtZPVkuX187KWlmKChYPVkuX19jKSYmWC5fX2MpcmV0dXJuIFEuX19lPT1udWxsJiYoUS5fX2U9Si5fX2UsUS5fX2s9Si5fX2spLFguX19jKCQsUSl9TTQoJCxRLEosWil9O3ZhciBQOD1vLnVubW91bnQ7ZnVuY3Rpb24gUjgoJCxRLEope3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFope3R5cGVvZiBaLl9fYz09ImZ1bmN0aW9uIiYmWi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD15OCh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09SiYmKCQuX19jLl9fUD1RKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gUjgoWixRLEopfSkpLCR9ZnVuY3Rpb24gZzgoJCxRLEope3JldHVybiAkJiZKJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBnOChaLFEsSil9KSwkLl9fYyYmJC5fX2MuX19QPT09USYmKCQuX19lJiZKLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPUopKSwkfWZ1bmN0aW9uIG8yKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIGg4KCQpe3ZhciBRPSQuX18mJiQuX18uX19jO3JldHVybiBRJiZRLl9fYSYmUS5fX2EoJCl9ZnVuY3Rpb24gTzQoJCl7dmFyIFEsSixaLFg9bnVsbDtmdW5jdGlvbiBZKHEpe2lmKFF8fChRPSQoKSkudGhlbihmdW5jdGlvbihHKXtHJiYoWD1HLmRlZmF1bHR8fEcpLFo9ITB9LGZ1bmN0aW9uKEcpe0o9RyxaPSEwfSksSil0aHJvdyBKO2lmKCFaKXRocm93IFE7cmV0dXJuIFg/djEoWCxxKTpudWxsfXJldHVybiBZLmRpc3BsYXlOYW1lPSJMYXp5IixZLl9fZj0hMCxZfWZ1bmN0aW9uIEIyKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9by51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBRPSQuX19jO1EmJihRLl9fej0hMCksUSYmUS5fX1ImJlEuX19SKCksUSYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksUDgmJlA4KCQpfSwobzIucHJvdG90eXBlPW5ldyBmMSkuX19jPWZ1bmN0aW9uKCQsUSl7dmFyIEo9US5fX2MsWj10aGlzO1oubz09bnVsbCYmKFoubz1bXSksWi5vLnB1c2goSik7dmFyIFg9aDgoWi5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fFouX196fHwoWT0hMCxKLl9fUj1udWxsLFg/WChOKTpOKCkpfTtKLl9fUj1xO3ZhciBHPUouX19QO0ouX19QPW51bGw7dmFyIE49ZnVuY3Rpb24oKXtpZighLS1aLl9fdSl7aWYoWi5zdGF0ZS5fX2Epe3ZhciBCPVouc3RhdGUuX19hO1ouX192Ll9fa1swXT1nOChCLEIuX19jLl9fUCxCLl9fYy5fX08pfXZhciBVO2ZvcihaLnNldFN0YXRlKHtfX2E6Wi5fX2I9bnVsbH0pO1U9Wi5vLnBvcCgpOylVLl9fUD1HLFUuZm9yY2VVcGRhdGUoKX19O1ouX191Kyt8fDMyJlEuX191fHxaLnNldFN0YXRlKHtfX2E6Wi5fX2I9Wi5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LG8yLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sbzIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLFEpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFo9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09UjgodGhpcy5fX2IsSixaLl9fTz1aLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgWD1RLl9fYSYmdjEoSjEsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gWCYmKFguX191Jj0tMzMpLFt2MShKMSxudWxsLFEuX19hP251bGw6JC5jaGlsZHJlbiksWF19O3ZhciBEOD1mdW5jdGlvbigkLFEsSil7aWYoKytKWzFdPT09SlswXSYmJC5sLmRlbGV0ZShRKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoSj0kLmk7Sjspe2Zvcig7Si5sZW5ndGg+MzspSi5wb3AoKSgpO2lmKEpbMV08SlswXSlicmVhazskLmk9Sj1KWzJdfX07ZnVuY3Rpb24gVzQoJCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuICQuY29udGV4dH0sJC5jaGlsZHJlbn1mdW5jdGlvbiBfNCgkKXt2YXIgUT10aGlzLEo9JC5oO2lmKFEuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtQMChudWxsLFEudiksUS52PW51bGwsUS5oPW51bGx9LFEuaCYmUS5oIT09SiYmUS5jb21wb25lbnRXaWxsVW5tb3VudCgpLCFRLnYpe2Zvcih2YXIgWj1RLl9fdjtaIT09bnVsbCYmIVouX19tJiZaLl9fIT09bnVsbDspWj1aLl9fO1EuaD1KLFEudj17bm9kZVR5cGU6MSxwYXJlbnROb2RlOkosY2hpbGROb2RlczpbXSxfX2s6e19fbTpaLl9fbX0sY29udGFpbnM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbmFtZXNwYWNlVVJJOkoubmFtZXNwYWNlVVJJLGluc2VydEJlZm9yZTpmdW5jdGlvbihYLFkpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKFgpLFEuaC5pbnNlcnRCZWZvcmUoWCxZKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oWCl7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihYKT4+PjEsMSksUS5oLnJlbW92ZUNoaWxkKFgpfX19UDAodjEoVzQse2NvbnRleHQ6US5jb250ZXh0fSwkLl9fdiksUS52KX1mdW5jdGlvbiBsNSgkLFEpe3ZhciBKPXYxKF80LHtfX3Y6JCxoOlF9KTtyZXR1cm4gSi5jb250YWluZXJJbmZvPVEsSn0oQjIucHJvdG90eXBlPW5ldyBmMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBRPXRoaXMsSj1oOChRLl9fdiksWj1RLmwuZ2V0KCQpO3JldHVybiBaWzBdKyssZnVuY3Rpb24oWCl7dmFyIFk9ZnVuY3Rpb24oKXtRLnByb3BzLnJldmVhbE9yZGVyPyhaLnB1c2goWCksRDgoUSwkLFopKTpYKCl9O0o/SihZKTpZKCl9fSxCMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBRPWExKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJlEucmV2ZXJzZSgpO2Zvcih2YXIgSj1RLmxlbmd0aDtKLS07KXRoaXMubC5zZXQoUVtKXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sQjIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1CMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKFEsSil7RDgoJCxKLFEpfSl9O3ZhciBmOD10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxQND0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sRDQ9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxUND0vW0EtWjAtOV0vZyx3ND10eXBlb2YgZG9jdW1lbnQ8InUiLEU0PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gSTQoJCxRLEope3JldHVybiBRLl9faz09bnVsbCYmKFEudGV4dENvbnRlbnQ9IiIpLFAwKCQsUSksdHlwZW9mIEo9PSJmdW5jdGlvbiImJkooKSwkPyQuX19jOm51bGx9ZnVuY3Rpb24geTQoJCxRLEope3JldHVybiB1MigkLFEpLHR5cGVvZiBKPT0iZnVuY3Rpb24iJiZKKCksJD8kLl9fYzpudWxsfWYxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShmMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKFEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpRfSl9fSl9KTt2YXIgVDg9by5ldmVudDtvLmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiBUOCYmKCQ9VDgoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBkNSxiND17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sdzg9by52bm9kZTtvLnZub2RlPWZ1bmN0aW9uKCQpe3R5cGVvZiAkLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihRKXt2YXJ7cHJvcHM6Six0eXBlOlp9PVEsWD17fSxZPVouaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIHEgaW4gSil7dmFyIEc9SltxXTtpZighKHE9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBKKSYmRz09bnVsbHx8dzQmJnE9PT0iY2hpbGRyZW4iJiZaPT09Im5vc2NyaXB0Inx8cT09PSJjbGFzcyJ8fHE9PT0iY2xhc3NOYW1lIikpe3ZhciBOPXEudG9Mb3dlckNhc2UoKTtxPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlPT1udWxsP3E9InZhbHVlIjpxPT09ImRvd25sb2FkIiYmRz09PSEwP0c9IiI6Tj09PSJ0cmFuc2xhdGUiJiZHPT09Im5vIj9HPSExOk5bMF09PT0ibyImJk5bMV09PT0ibiI/Tj09PSJvbmRvdWJsZWNsaWNrIj9xPSJvbmRibGNsaWNrIjpOIT09Im9uY2hhbmdlInx8WiE9PSJpbnB1dCImJlohPT0idGV4dGFyZWEifHxFNChKLnR5cGUpP049PT0ib25mb2N1cyI/cT0ib25mb2N1c2luIjpOPT09Im9uYmx1ciI/cT0ib25mb2N1c291dCI6RDQudGVzdChxKSYmKHE9Tik6Tj1xPSJvbmlucHV0IjpZJiZQNC50ZXN0KHEpP3E9cS5yZXBsYWNlKFQ0LCItJCYiKS50b0xvd2VyQ2FzZSgpOkc9PT1udWxsJiYoRz12b2lkIDApLE49PT0ib25pbnB1dCImJlhbcT1OXSYmKHE9Im9uaW5wdXRDYXB0dXJlIiksWFtxXT1HfX1aPT0ic2VsZWN0IiYmKFgubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoWC52YWx1ZSkmJihYLnZhbHVlPWExKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1YLnZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xfSkpLFguZGVmYXVsdFZhbHVlIT1udWxsJiYoWC52YWx1ZT1hMShKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9WC5tdWx0aXBsZT9YLmRlZmF1bHRWYWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMTpYLmRlZmF1bHRWYWx1ZT09Qi5wcm9wcy52YWx1ZX0pKSksSi5jbGFzcyYmIUouY2xhc3NOYW1lPyhYLmNsYXNzPUouY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNsYXNzTmFtZSIsYjQpKTpKLmNsYXNzTmFtZSYmKFguY2xhc3M9WC5jbGFzc05hbWU9Si5jbGFzc05hbWUpLFEucHJvcHM9WH0oJCksJC4kJHR5cGVvZj1mOCx3OCYmdzgoJCl9O3ZhciBFOD1vLl9fcjtvLl9fcj1mdW5jdGlvbigkKXtFOCYmRTgoJCksZDU9JC5fX2N9O3ZhciBJOD1vLmRpZmZlZDtvLmRpZmZlZD1mdW5jdGlvbigkKXtJOCYmSTgoJCk7dmFye3Byb3BzOlEsX19lOkp9PSQ7SiE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIFEmJlEudmFsdWUhPT1KLnZhbHVlJiYoSi52YWx1ZT1RLnZhbHVlPT1udWxsPyIiOlEudmFsdWUpLGQ1PW51bGx9O3ZhciBTND17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24oJCl7cmV0dXJuIGQ1Ll9fblskLl9fY10ucHJvcHMudmFsdWV9LHVzZUNhbGxiYWNrOkUsdXNlQ29udGV4dDpHMCx1c2VEZWJ1Z1ZhbHVlOmMyLHVzZURlZmVycmVkVmFsdWU6eDgsdXNlRWZmZWN0OngsdXNlSWQ6bDAsdXNlSW1wZXJhdGl2ZUhhbmRsZTpkMix1c2VJbnNlcnRpb25FZmZlY3Q6ajgsdXNlTGF5b3V0RWZmZWN0OkgwLHVzZU1lbW86XzEsdXNlUmVkdWNlcjpiMCx1c2VSZWY6Yix1c2VTdGF0ZTpXLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmI4LHVzZVRyYW5zaXRpb246djh9fX07ZnVuY3Rpb24geDQoJCl7cmV0dXJuIHYxLmJpbmQobnVsbCwkKX1mdW5jdGlvbiBpMigkKXtyZXR1cm4hISQmJiQuJCR0eXBlb2Y9PT1mOH1mdW5jdGlvbiB2NCgkKXtyZXR1cm4gaTIoJCkmJiQudHlwZT09PUoxfWZ1bmN0aW9uIGo0KCQpe3JldHVybiEhJCYmdHlwZW9mICQuZGlzcGxheU5hbWU9PSJzdHJpbmciJiYkLmRpc3BsYXlOYW1lLmluZGV4T2YoIk1lbW8oIik9PTB9ZnVuY3Rpb24gUjQoJCl7cmV0dXJuIGkyKCQpP2o1LmFwcGx5KG51bGwsYXJndW1lbnRzKTokfWZ1bmN0aW9uIGc0KCQpe3JldHVybiEhJC5fX2smJihQMChudWxsLCQpLCEwKX1mdW5jdGlvbiBoNCgkKXtyZXR1cm4gJCYmKCQuYmFzZXx8JC5ub2RlVHlwZT09PTEmJiQpfHxudWxsfXZhciBmND1mdW5jdGlvbigkLFEpe3JldHVybiAkKFEpfSxtND1mdW5jdGlvbigkLFEpe3ZhciBKPW8uZGVib3VuY2VSZW5kZXJpbmc7by5kZWJvdW5jZVJlbmRlcmluZz1mdW5jdGlvbihYKXtyZXR1cm4gWCgpfTt2YXIgWj0kKFEpO3JldHVybiBvLmRlYm91bmNlUmVuZGVyaW5nPUosWn0scDQ9aTIsaD17dXNlU3RhdGU6Vyx1c2VJZDpsMCx1c2VSZWR1Y2VyOmIwLHVzZUVmZmVjdDp4LHVzZUxheW91dEVmZmVjdDpIMCx1c2VJbnNlcnRpb25FZmZlY3Q6ajgsdXNlVHJhbnNpdGlvbjp2OCx1c2VEZWZlcnJlZFZhbHVlOng4LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmI4LHN0YXJ0VHJhbnNpdGlvbjpTOCx1c2VSZWY6Yix1c2VJbXBlcmF0aXZlSGFuZGxlOmQyLHVzZU1lbW86XzEsdXNlQ2FsbGJhY2s6RSx1c2VDb250ZXh0OkcwLHVzZURlYnVnVmFsdWU6YzIsdmVyc2lvbjoiMTguMy4xIixDaGlsZHJlbjpBNCxyZW5kZXI6STQsaHlkcmF0ZTp5NCx1bm1vdW50Q29tcG9uZW50QXROb2RlOmc0LGNyZWF0ZVBvcnRhbDpsNSxjcmVhdGVFbGVtZW50OnYxLGNyZWF0ZUNvbnRleHQ6cTAsY3JlYXRlRmFjdG9yeTp4NCxjbG9uZUVsZW1lbnQ6UjQsY3JlYXRlUmVmOlYyLEZyYWdtZW50OkoxLGlzVmFsaWRFbGVtZW50OmkyLGlzRWxlbWVudDpwNCxpc0ZyYWdtZW50OnY0LGlzTWVtbzpqNCxmaW5kRE9NTm9kZTpoNCxDb21wb25lbnQ6ZjEsUHVyZUNvbXBvbmVudDp1NSxtZW1vOlMwLGZvcndhcmRSZWY6QjAsZmx1c2hTeW5jOm00LHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOmY0LFN0cmljdE1vZGU6SjEsU3VzcGVuc2U6bzIsU3VzcGVuc2VMaXN0OkIyLGxhenk6TzQsX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6UzR9O3ZhciBkMD0zO2Z1bmN0aW9uIGM1KCQpe3JldHVybiAkPj0wLjkzPzM6dm9pZCAwfWZ1bmN0aW9uIHI1KCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIEUwKCQpe3JldHVybiEhJCYmKHI1KCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiBjMCgkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IFE9cjUoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsSj1RP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLFo9UT9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihKPT09JC53aWR0aCYmWj09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOkosaGVpZ2h0Olp9fWZ1bmN0aW9uIHIwKCQpe2xldCBRPWMwKCQpLEo9bTgoJD8ub3JpZW50YXRpb24pLFo9TWF0aC5hYnMoSik9PT05MCxYPSEhJCYmJC53aWR0aD4kLmhlaWdodCxZPUo9PT0xODB8fFomJiFYO3JldHVybntkaXNwbGF5Q29uZmlnOlEscm90YXRpb25EZWdyZWVzOlk/SjowLG5lZWRzQ3NzUm90YXRpb246WSxpbnB1dE9yaWVudGF0aW9uOlk/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBtOCgkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBvMCgkLFEsSil7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OkoseToxLVF9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLUoseTpRfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLVEseToxLUp9O2RlZmF1bHQ6cmV0dXJue3g6USx5Okp9fX1mdW5jdGlvbiBwOCgkLFEsSil7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybntkeDpKLGR5Oi1RfTtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJue2R4Oi1KLGR5OlF9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybntkeDotUSxkeTotSn07ZGVmYXVsdDpyZXR1cm57ZHg6USxkeTpKfX19ZnVuY3Rpb24gbzUoJCxRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6c3dpdGNoKFEpe2Nhc2UgMTpyZXR1cm4gMztjYXNlIDQ6cmV0dXJuIDI7Y2FzZSAyOnJldHVybiAxO2Nhc2UgMzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiBRfWNhc2UibGFuZHNjYXBlX3JpZ2h0Ijpzd2l0Y2goUSl7Y2FzZSAxOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gMztjYXNlIDI6cmV0dXJuIDQ7Y2FzZSAzOnJldHVybiAxO2RlZmF1bHQ6cmV0dXJuIFF9Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6c3dpdGNoKFEpe2Nhc2UgMTpyZXR1cm4gNDtjYXNlIDQ6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAzO2Nhc2UgMzpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiBRfWRlZmF1bHQ6cmV0dXJuIFF9fXZhciB1OD0xNjtmdW5jdGlvbiBOMigkLFEsSil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gbnVsbDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoSikmJko+MD9KOjEsWD1RPT09MT8kKjE2OlE9PT0yPyQqWjokLFk9TWF0aC5tYXgoLTIwMCxNYXRoLm1pbigyMDAsWCkpO3JldHVybiBNYXRoLmFicyhZKTwwLjAxP251bGw6WX1mdW5jdGlvbiBpNSgkLFEsSil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gMDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoSikmJko+MD9KOjE7aWYoUT09PTEpcmV0dXJuICQqdTg7aWYoUT09PTIpcmV0dXJuICQqWjtyZXR1cm4gJH12YXIgdTQ9e1sxXToiZGVzY3JpcHRpb24iLFsyXToia2V5ZnJhbWUiLFszXToiZGVsdGEiLFs0XToic2VlZCJ9O2NsYXNzIG4ye2J1ZmZlcj1uZXcgVWludDhBcnJheSgwKTtwdXNoKCQpe2lmKCQubGVuZ3RoPjApe2xldCBaPW5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLmxlbmd0aCskLmxlbmd0aCk7Wi5zZXQodGhpcy5idWZmZXIpLFouc2V0KCQsdGhpcy5idWZmZXIubGVuZ3RoKSx0aGlzLmJ1ZmZlcj1afWxldCBRPVtdLEo9MDt3aGlsZSh0aGlzLmJ1ZmZlci5sZW5ndGgtSj49NCl7bGV0IFg9bmV3IERhdGFWaWV3KHRoaXMuYnVmZmVyLmJ1ZmZlcix0aGlzLmJ1ZmZlci5ieXRlT2Zmc2V0K0osNCkuZ2V0VWludDMyKDAsITEpO2lmKHRoaXMuYnVmZmVyLmxlbmd0aC1KLTQ8WClicmVhaztpZihYPDEpe0orPTQ7Y29udGludWV9bGV0IFk9dGhpcy5idWZmZXJbSis0XSxxPXRoaXMuYnVmZmVyLnNsaWNlKEorNSxKKzQrWCksRz11NFtZXTtpZihHKVEucHVzaCh7dHlwZTpHLHBheWxvYWQ6cX0pO0orPTQrWH1yZXR1cm4gdGhpcy5idWZmZXI9Sj09PTA/dGhpcy5idWZmZXI6dGhpcy5idWZmZXIuc2xpY2UoSiksUX1yZXNldCgpe3RoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDApfX1mdW5jdGlvbiBuNSgkKXtpZigkLmxlbmd0aDw0KXJldHVybiJhdmMxLjQyRTAxRSI7bGV0IFE9KEopPT5KLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIik7cmV0dXJuImF2YzEuIitRKCRbMV0pK1EoJFsyXSkrUSgkWzNdKX1mdW5jdGlvbiB4MCgpe3JldHVybiB0eXBlb2YgZ2xvYmFsVGhpczwidSImJnR5cGVvZiBnbG9iYWxUaGlzLlZpZGVvRGVjb2RlcjwidSJ9dmFyIGw0PTEwMDAsZDQ9MTY2Njc7ZnVuY3Rpb24gYTUoe3VybDokLGVuYWJsZWQ6USxjYW52YXNSZWY6SixvbkZpcnN0RnJhbWU6WixvbkZyYW1lOlgsb25FcnJvcjpZLG9uRGVjb2RlckVycm9yOnF9KXtsZXQgRz1iKHtvbkZpcnN0RnJhbWU6WixvbkZyYW1lOlgsb25FcnJvcjpZLG9uRGVjb2RlckVycm9yOnF9KTtHLmN1cnJlbnQ9e29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0seCgoKT0+e2lmKCFRfHwhJHx8IXgwKCkpcmV0dXJuO2xldCBOPW5ldyBBYm9ydENvbnRyb2xsZXIsQj1uZXcgbjIsVT0hMSxWPSExLGs9MCxMPW51bGwsTT1udWxsLEM9KCk9PiFVJiYhTi5zaWduYWwuYWJvcnRlZCx6PShmKT0+e2lmKEcuY3VycmVudC5vbkRlY29kZXJFcnJvcilHLmN1cnJlbnQub25EZWNvZGVyRXJyb3IoKTtlbHNlIEcuY3VycmVudC5vbkVycm9yPy4oZil9LEE9KGYsdSx6MSk9PntpZighQygpKXJldHVybjtsZXQgUTE9Si5jdXJyZW50O2lmKCFRMSlyZXR1cm47aWYoUTEud2lkdGghPT11fHxRMS5oZWlnaHQhPT16MSlRMS53aWR0aD11LFExLmhlaWdodD16MTtsZXQgbj1RMS5nZXRDb250ZXh0KCIyZCIpO2lmKCFuKXJldHVybjtpZihuLmRyYXdJbWFnZShmLDAsMCx1LHoxKSxHLmN1cnJlbnQub25GcmFtZT8uKCksIVYpVj0hMCxHLmN1cnJlbnQub25GaXJzdEZyYW1lPy4oKX0sUD0oKT0+bmV3IFZpZGVvRGVjb2Rlcih7b3V0cHV0OihmKT0+e3RyeXtpZihDKCkpQShmLGYuZGlzcGxheVdpZHRoLGYuZGlzcGxheUhlaWdodCl9ZmluYWxseXtmLmNsb3NlKCl9fSxlcnJvcjooZik9PnooYGRlY29kZXI6ICR7Zi5tZXNzYWdlfWApfSksUj1hc3luYyhmKT0+e2xldCB1PWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKG5ldyBCbG9iKFtmXSx7dHlwZToiaW1hZ2UvanBlZyJ9KSk7dHJ5e2lmKEMoKSlBKHUsdS53aWR0aCx1LmhlaWdodCl9ZmluYWxseXt1LmNsb3NlKCl9fSxJPShmKT0+e2lmKCFNfHxNLnN0YXRlPT09ImNsb3NlZCIpTT1QKCk7dHJ5e00uY29uZmlndXJlKHtjb2RlYzpuNShmKSxkZXNjcmlwdGlvbjpmLG9wdGltaXplRm9yOiJsYXRlbmN5IixoYXJkd2FyZUFjY2VsZXJhdGlvbjoicHJlZmVyLWhhcmR3YXJlIn0pfWNhdGNoKHUpe3ooYGNvbmZpZzogJHt1Lm1lc3NhZ2V9YCl9fSxUPShmLHUpPT57aWYoTT8uc3RhdGUhPT0iY29uZmlndXJlZCIpcmV0dXJuO3RyeXtNLmRlY29kZShuZXcgRW5jb2RlZFZpZGVvQ2h1bmsoe3R5cGU6Zj09PSJrZXlmcmFtZSI/ImtleSI6ImRlbHRhIix0aW1lc3RhbXA6ayxkYXRhOnV9KSksays9ZDR9Y2F0Y2h7fX0seT0oZix1KT0+e3N3aXRjaChmKXtjYXNlInNlZWQiOlIodSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm47Y2FzZSJkZXNjcmlwdGlvbiI6SSh1KTtyZXR1cm47Y2FzZSJrZXlmcmFtZSI6Y2FzZSJkZWx0YSI6VChmLHUpO3JldHVybn19LGM9KCk9PntpZighQygpfHxMKXJldHVybjtMPXNldFRpbWVvdXQoKCk9PntMPW51bGwsbSgpfSxsNCl9LG09YXN5bmMoKT0+e0IucmVzZXQoKTt0cnl7bGV0IHU9KGF3YWl0IGZldGNoKGAkeyR9L3N0cmVhbS5hdmNjYCx7c2lnbmFsOk4uc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCF1KXJldHVybjtmb3IoOzspe2xldHtkb25lOnoxLHZhbHVlOlExfT1hd2FpdCB1LnJlYWQoKTtpZih6MSlicmVhaztpZighUTEpY29udGludWU7Zm9yKGxldCBuIG9mIEIucHVzaChRMSkpeShuLnR5cGUsbi5wYXlsb2FkKX19Y2F0Y2h7fWZpbmFsbHl7aWYoQygpKWMoKX19O3JldHVybiBtKCksKCk9PntpZihVPSEwLEwpY2xlYXJUaW1lb3V0KEwpO2lmKE4uYWJvcnQoKSxCLnJlc2V0KCksTSYmTS5zdGF0ZSE9PSJjbG9zZWQiKXRyeXtNLmNsb3NlKCl9Y2F0Y2h7fU09bnVsbH19LFskLFEsSl0pfXZhciBjND0wO2Z1bmN0aW9uIEsoJCxRLEosWixYLFkpe1F8fChRPXt9KTt2YXIgcSxHLE49UTtpZigicmVmImluIE4pZm9yKEcgaW4gTj17fSxRKUc9PSJyZWYiP3E9UVtHXTpOW0ddPVFbR107dmFyIEI9e3R5cGU6JCxwcm9wczpOLGtleTpKLHJlZjpxLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLWM0LF9faTotMSxfX3U6MCxfX3NvdXJjZTpYLF9fc2VsZjpZfTtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKHE9JC5kZWZhdWx0UHJvcHMpKWZvcihHIGluIHEpTltHXT09PXZvaWQgMCYmKE5bR109cVtHXSk7cmV0dXJuIG8udm5vZGUmJm8udm5vZGUoQiksQn12YXIgbDg9YHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzknIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsMC40NSknIHN0cm9rZT0ncmdiYSgwLDAsMCwwLjU1KScgc3Ryb2tlLXdpZHRoPScxLjI1JyBmaWx0ZXI9J2Ryb3Atc2hhZG93KDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNDUpKScvJTNFJTNDL3N2ZyUzRSIpIDEyIDEyLCBwb2ludGVyYCxyND0xLjAwNCxvND0zLGk0PTQsbjQ9NSxhND0xMCxzND0xMTtmdW5jdGlvbiBhMih7dXJsOiQsd3NVcmw6USxzdHlsZTpKLGltYWdlU3R5bGU6WixjbGFzc05hbWU6WCxvbkhvbWVQcmVzczpZLG9uU3RyZWFtVG91Y2g6cSxvblN0cmVhbU11bHRpVG91Y2g6RyxvblN0cmVhbUJ1dHRvbjpOLG9uU3RyZWFtRGlnaXRhbENyb3duOkIsb25TdHJlYW1TY3JvbGw6VSxlbmFibGVEaWdpdGFsQ3Jvd246VixzdWJzY3JpYmVGcmFtZTprLHN0cmVhbUZyYW1lOkwsc3RyZWFtQ29uZmlnOk0sb25TY3JlZW5Db25maWdDaGFuZ2U6QyxoaWRlQ29udHJvbHM6eixvblN0cmVhbWluZ0NoYW5nZTpBLGNvbm5lY3Rpb25RdWFsaXR5OlAsY29kZWM6Uj0iYXZjYyIsb25BdmNjRXJyb3I6SX0pe2xldCBUPSEhcSx5PVI9PT0iYXZjYyImJngwKCksYz1iKG51bGwpLG09YihudWxsKSxmPWIobnVsbCksdT1iKG51bGwpLHoxPWIobnVsbCksUTE9YihudWxsKSxbbixMMV09VyghMSksW2wsal09VyhudWxsKSxbSzEsQjFdPVcobnVsbCksVjE9YihudWxsKSxlPWIoQyk7ZS5jdXJyZW50PUM7bGV0IFgxPWIobnVsbCksW04xLHZdPVcobnVsbCk7eCgoKT0+e2xldCBGPVgxLmN1cnJlbnQ7aWYoIUZ8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBIPW5ldyBSZXNpemVPYnNlcnZlcigoRCk9PntsZXQgdz1EWzBdPy5jb250ZW50UmVjdDtpZih3KXYoe3dpZHRoOncud2lkdGgsaGVpZ2h0OncuaGVpZ2h0fSl9KTtyZXR1cm4gSC5vYnNlcnZlKEYpLCgpPT5ILmRpc2Nvbm5lY3QoKX0sW10pO2xldFtnLE9dPVcoMCksUz1iKDApLFtpLHJdPVcoITEpLHExPWIobnVsbCk7eCgoKT0+e2lmKFA9PT0icG9vciIpe2lmKHIoITApLHExLmN1cnJlbnQpY2xlYXJUaW1lb3V0KHExLmN1cnJlbnQpO3ExLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e3IoITEpLHExLmN1cnJlbnQ9bnVsbH0sMzAwMCl9ZWxzZSBpZihyKCExKSxxMS5jdXJyZW50KWNsZWFyVGltZW91dChxMS5jdXJyZW50KSxxMS5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihxMS5jdXJyZW50KWNsZWFyVGltZW91dChxMS5jdXJyZW50KX19LFtQXSk7bGV0IFoxPWAkeyR9L3N0cmVhbS5tanBlZ2A7eCgoKT0+e1YxLmN1cnJlbnQ9bnVsbCxCMShudWxsKX0sWyRdKTtsZXQgeTE9RSgoRik9PntpZighRnx8Ri53aWR0aDw9MHx8Ri5oZWlnaHQ8PTApcmV0dXJuO2xldCBIPVYxLmN1cnJlbnQsRD1GLm9yaWVudGF0aW9uPT09dm9pZCAwJiZIPy5vcmllbnRhdGlvbj97Li4uRixvcmllbnRhdGlvbjpILm9yaWVudGF0aW9ufTpGO2lmKEgmJkgud2lkdGg9PT1ELndpZHRoJiZILmhlaWdodD09PUQuaGVpZ2h0JiZILm9yaWVudGF0aW9uPT09RC5vcmllbnRhdGlvbilyZXR1cm47VjEuY3VycmVudD1ELEIxKEQpLGUuY3VycmVudD8uKEQpfSxbXSksYjE9YihBKTtiMS5jdXJyZW50PUEseCgoKT0+e2IxLmN1cnJlbnQ/LihuKX0sW25dKSx4KCgpPT57aWYoVCYmTSl5MShNKX0sW1QsTSx5MV0pO2xldCB0MT1iKCExKTt0MS5jdXJyZW50PW47bGV0IE8xPWIobnVsbCkscjE9YihudWxsKTt4KCgpPT57aWYoIVR8fCFrfHx5KXJldHVybjtsZXQgSD1zZXRUaW1lb3V0KCgpPT57aWYoIXQxLmN1cnJlbnQpaigiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLEQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGQoKXtsZXQgcz1PMS5jdXJyZW50O2lmKHMpe08xLmN1cnJlbnQ9bnVsbDtsZXQgQzE9Zi5jdXJyZW50O2lmKEMxKXtpZihyMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwocjEuY3VycmVudCk7cjEuY3VycmVudD1zLEMxLnNyYz1zLFMuY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTChzKX1EPXJlcXVlc3RBbmltYXRpb25GcmFtZShkKX0pLHc9aygoZCk9PntpZihsMS5jdXJyZW50PURhdGUubm93KCksTzEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKE8xLmN1cnJlbnQpO2lmKE8xLmN1cnJlbnQ9ZCwhdDEuY3VycmVudCljbGVhclRpbWVvdXQoSCksTDEoITApLGoobnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dChIKSxjYW5jZWxBbmltYXRpb25GcmFtZShEKSx3Py4oKSxPMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoTzEuY3VycmVudCksTzEuY3VycmVudD1udWxsO2lmKHIxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChyMS5jdXJyZW50KSxyMS5jdXJyZW50PW51bGx9fSxbVCxrLHldKTtsZXQgTTA9RSgoKT0+e2wxLmN1cnJlbnQ9RGF0ZS5ub3coKSxMMSghMCksaihudWxsKX0sW10pLFEwPUUoKCk9PntpZihTLmN1cnJlbnQrKyxsMS5jdXJyZW50PURhdGUubm93KCksIXQxLmN1cnJlbnQpTDEoITApLGoobnVsbCl9LFtdKTthNSh7dXJsOiQsZW5hYmxlZDp5LGNhbnZhc1JlZjptLG9uRmlyc3RGcmFtZTpNMCxvbkZyYW1lOlEwLG9uRXJyb3I6aixvbkRlY29kZXJFcnJvcjpJfSk7bGV0IE0xPUUoKEYpPT57bGV0IEg9cjAoVjEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixEPW8wKEgsRi54LEYueSksdz1GLmVkZ2U9PT12b2lkIDA/dm9pZCAwOm81KEgsRi5lZGdlKSxkPXc9PT12b2lkIDA/e3R5cGU6Ri50eXBlLC4uLkR9Ont0eXBlOkYudHlwZSwuLi5ELGVkZ2U6d307aWYoVCl7cT8uKGQpO3JldHVybn1sZXQgcz1RMS5jdXJyZW50O2lmKCFzfHxzLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IEMxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShkKSksazE9bmV3IFVpbnQ4QXJyYXkoMStDMS5sZW5ndGgpO2sxWzBdPW80LGsxLnNldChDMSwxKSxzLnNlbmQoazEpfSxbVCxxXSksUzE9RSgoRik9PntpZihUKXtOPy4oRik7cmV0dXJufWxldCBIPVExLmN1cnJlbnQ7aWYoIUh8fEgucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgRD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2J1dHRvbjpGfSkpLHc9bmV3IFVpbnQ4QXJyYXkoMStELmxlbmd0aCk7d1swXT1pNCx3LnNldChELDEpLEguc2VuZCh3KX0sW1QsTl0pLE8wPUUoKEYpPT57aWYoIU51bWJlci5pc0Zpbml0ZShGKXx8Rj09PTApcmV0dXJuO2lmKFQpe0I/LihGKTtyZXR1cm59bGV0IEg9UTEuY3VycmVudDtpZighSHx8SC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBEPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6Rn0pKSx3PW5ldyBVaW50OEFycmF5KDErRC5sZW5ndGgpO3dbMF09YTQsdy5zZXQoRCwxKSxILnNlbmQodyl9LFtULEJdKSxKMD1FKChGLEgsRCx3KT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoRil8fCFOdW1iZXIuaXNGaW5pdGUoSCl8fEY9PT0wJiZIPT09MClyZXR1cm47bGV0IGQ9cjAoVjEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixzPXA4KGQsRixIKSxDMT1vMChkLEQsdyksazE9e2R4OnMuZHgsZHk6cy5keSx4OkMxLngseTpDMS55fTtpZihUKXtVPy4oazEpO3JldHVybn1sZXQgaDE9UTEuY3VycmVudDtpZighaDF8fGgxLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IHowPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShrMSkpLHkwPW5ldyBVaW50OEFycmF5KDErejAubGVuZ3RoKTt5MFswXT1zNCx5MC5zZXQoejAsMSksaDEuc2VuZCh5MCl9LFtULFVdKSxGMT1FKChGKT0+e2xldCBIPXIwKFYxLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sRD1vMChILEYueDEsRi55MSksdz1vMChILEYueDIsRi55MiksZD17dHlwZTpGLnR5cGUseDE6RC54LHkxOkQueSx4Mjp3LngseTI6dy55fTtpZihUKXtHPy4oZCk7cmV0dXJufWxldCBzPVExLmN1cnJlbnQ7aWYoIXN8fHMucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgQzE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGQpKSxrMT1uZXcgVWludDhBcnJheSgxK0MxLmxlbmd0aCk7azFbMF09bjQsazEuc2V0KEMxLDEpLHMuc2VuZChrMSl9LFtULEddKTt4KCgpPT57aWYoVClyZXR1cm47bGV0IEY9UT8/JC5yZXBsYWNlKC9eaHR0cC8sIndzIikrIi93cyIsSD1uZXcgV2ViU29ja2V0KEYpO0guYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFExLmN1cnJlbnQ9SCxILm9ubWVzc2FnZT0oQzEpPT57aWYoIShDMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgazE9bmV3IFVpbnQ4QXJyYXkoQzEuZGF0YSk7aWYoazEubGVuZ3RoPDF8fGsxWzBdIT09MTMwKXJldHVybjt0cnl7eTEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoazEuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fX0sSC5vbm9wZW49KCk9PntpZigheSlMMSghMCk7aihudWxsKX0sSC5vbmNsb3NlPSgpPT57TDEoITEpfSxILm9uZXJyb3I9KCk9PntqKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSxMMSghMSl9O2xldCBEPW5ldyBBYm9ydENvbnRyb2xsZXIsdz1zZXRJbnRlcnZhbCgoKT0+e08oUy5jdXJyZW50KSxTLmN1cnJlbnQ9MH0sMTAwMCksZD0hMSxzPXk/bnVsbDpzZXRUaW1lb3V0KCgpPT57aWYoIWQpaigiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApO2lmKCF5KShhc3luYygpPT57dHJ5e2xldCBrMT0oYXdhaXQgZmV0Y2goWjEse3NpZ25hbDpELnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighazEpcmV0dXJuO2xldCBoMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoIi0tZnJhbWUiKTt3aGlsZSghMCl7bGV0e2RvbmU6ejAsdmFsdWU6eTB9PWF3YWl0IGsxLnJlYWQoKTtpZih6MClicmVhaztpZih5MClmb3IobGV0IEQ1PTA7RDU8PXkwLmxlbmd0aC1oMS5sZW5ndGg7RDUrKyl7bGV0IGozPSEwO2ZvcihsZXQgUjI9MDtSMjxoMS5sZW5ndGg7UjIrKylpZih5MFtENStSMl0hPT1oMVtSMl0pe2ozPSExO2JyZWFrfWlmKGozKXtpZihTLmN1cnJlbnQrKywhZCl7aWYoZD0hMCxzKWNsZWFyVGltZW91dChzKX19fX19Y2F0Y2h7fX0pKCk7cmV0dXJuKCk9PntpZihELmFib3J0KCksY2xlYXJJbnRlcnZhbCh3KSxzKWNsZWFyVGltZW91dChzKTtILmNsb3NlKCksUTEuY3VycmVudD1udWxsfX0sWyQsWjEsVCx5MSxRLHldKTtsZXQgbDE9YigwKTt4KCgpPT57aWYoIVQpcmV0dXJuO2xldCBGPTIwMDAsSD0oKT0+e2xldCBkPWwxLmN1cnJlbnQ7aWYoIWR8fCF0MS5jdXJyZW50KXJldHVybjtpZihEYXRlLm5vdygpLWQ+RilMMSghMSl9LEQ9c2V0SW50ZXJ2YWwoKCk9PntPKFMuY3VycmVudCksUy5jdXJyZW50PTAsSCgpfSwxMDAwKSx3PSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilIKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix3KSwoKT0+e2NsZWFySW50ZXJ2YWwoRCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdyl9fSxbVF0pO2xldCBXMD1FKCgpPT57aWYoeSlyZXR1cm4gbS5jdXJyZW50O3JldHVybiBUP2YuY3VycmVudDpjLmN1cnJlbnR9LFtULHldKSxEMT1FKCgpPT57cmV0dXJuIHUuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P1cwKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbVzBdKSxwMT1FKChGLEgpPT57bGV0IEQ9RDEoKTtpZighRClyZXR1cm47bGV0IHc9KEguY2xpZW50WC1ELmxlZnQpL0Qud2lkdGgsZD0oSC5jbGllbnRZLUQudG9wKS9ELmhlaWdodDtNMSh7dHlwZTpGLHg6dyx5OmR9KX0sW0QxLE0xXSksTjA9RSgoRixIKT0+e2xldCB3PUQxKCk/LmhlaWdodHx8MSxkPU4yKEYsSCx3KTtpZihkPT09bnVsbClyZXR1cm4hMTtyZXR1cm4gTzAoZCksITB9LFtEMSxPMF0pLHgxPWIoITEpLFQxPWIoITEpLG4xPWIoITEpLEswPWIoe2R4OjAsZHk6MH0pLG8xPWIoITEpLFtVMCxEMF09VyghMSksXzA9Yih7eDowLjUseTowLjV9KSxbZDEsdzFdPVcobnVsbCk7eCgoKT0+e2xldCBGPShEKT0+e2lmKEQua2V5PT09IkFsdCIpRDAoITApfSxIPShEKT0+e2lmKEQua2V5PT09IkFsdCIpe2lmKEQwKCExKSwhVDEuY3VycmVudCl3MShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsRiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixIKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixGKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLEgpfX0sW10pLHgoKCk9PntpZihVMCYmIVQxLmN1cnJlbnQpe2xldCBGPV8wLmN1cnJlbnQ7dzEoe3gxOkYueCx5MTpGLnkseDI6MS1GLngseTI6MS1GLnl9KX1lbHNlIGlmKCFVMCYmIVQxLmN1cnJlbnQpdzEobnVsbCl9LFtVMF0pO2xldCBqMT1iKG51bGwpLGcxPWIoITEpLGkxPWIoMCksWjA9RSgoRixIKT0+e2cxLmN1cnJlbnQ9ITA7bGV0IEQ9ajEuY3VycmVudDtpZihEKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGkxLmN1cnJlbnQpLGkxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57RC5zdHlsZS5sZWZ0PWAke0YqMTAwfSVgLEQuc3R5bGUudG9wPWAke0gqMTAwfSVgLEQuc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxMMD1FKChGLEgpPT57aWYoIWcxLmN1cnJlbnQpcmV0dXJuO2xldCBEPWoxLmN1cnJlbnQ7aWYoRCljYW5jZWxBbmltYXRpb25GcmFtZShpMS5jdXJyZW50KSxpMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e0Quc3R5bGUubGVmdD1gJHtGKjEwMH0lYCxELnN0eWxlLnRvcD1gJHtIKjEwMH0lYH0pfSxbXSksZTE9RSgoKT0+e2cxLmN1cnJlbnQ9ITE7bGV0IEY9ajEuY3VycmVudDtpZihGKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGkxLmN1cnJlbnQpLEYuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSwkMT1FKChGKT0+e2lmKGcxLmN1cnJlbnR8fFQxLmN1cnJlbnQpcmV0dXJuITE7bGV0IEg9RDEoKTtpZighSClyZXR1cm4hMTtsZXQgRD1pNShGLmRlbHRhWCxGLmRlbHRhTW9kZSxILndpZHRoKSx3PWk1KEYuZGVsdGFZLEYuZGVsdGFNb2RlLEguaGVpZ2h0KTtpZihEPT09MCYmdz09PTApcmV0dXJuITE7bGV0IGQ9TWF0aC5taW4oTWF0aC5tYXgoKEYuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgsMCksMSkscz1NYXRoLm1pbihNYXRoLm1heCgoRi5jbGllbnRZLUgudG9wKS9ILmhlaWdodCwwKSwxKTtyZXR1cm4gSjAoRC9ILndpZHRoLHcvSC5oZWlnaHQsZCxzKSwhMH0sW0QxLEowXSk7eCgoKT0+e2xldCBGPXoxLmN1cnJlbnQ7aWYoIUYpcmV0dXJuO2xldCBIPShEKT0+e2lmKCEoVj9OMChELmRlbHRhWSxELmRlbHRhTW9kZSk6JDEoRCkpKXJldHVybjtELnByZXZlbnREZWZhdWx0KCksRC5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIEYuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLEgse3Bhc3NpdmU6ITF9KSwoKT0+Ri5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsSCl9LFtWLE4wLCQxXSk7bGV0IF89YigwKSxwPWIobnVsbCksdD1FKCgpPT57bGV0IEY9RGF0ZS5ub3coKSxIPUYtXy5jdXJyZW50O2lmKF8uY3VycmVudD1GLEg8MzAwKXtpZihwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KHAuY3VycmVudCkscC5jdXJyZW50PW51bGw7aWYoWSlZKCk7ZWxzZSBTMSgiYXBwX3N3aXRjaGVyIil9ZWxzZSBwLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2lmKFkpWSgpO2Vsc2UgUzEoImhvbWUiKTtwLmN1cnJlbnQ9bnVsbH0sMzAwKX0sW1MxLFldKSxhPXIwKEsxKSxHMT1hLmRpc3BsYXlDb25maWcsWTE9KCgpPT57aWYoIUcxfHwhTjEpcmV0dXJuIG51bGw7aWYoTjEud2lkdGg9PT0wfHxOMS5oZWlnaHQ9PT0wKXJldHVybiBudWxsO2xldCBGPU1hdGgubWluKE4xLndpZHRoL0cxLndpZHRoLE4xLmhlaWdodC9HMS5oZWlnaHQpO3JldHVybnt3aWR0aDpHMS53aWR0aCpGLGhlaWdodDpHMS5oZWlnaHQqRn19KSgpLEUxPWEucm90YXRpb25EZWdyZWVzLFIxPWEubmVlZHNDc3NSb3RhdGlvbiYmTWF0aC5hYnMoRTEpPT09OTAsYzE9WixYMD17cG9zaXRpb246ImFic29sdXRlIix0b3A6IjUwJSIsbGVmdDoiNTAlIix3aWR0aDpSMSYmWTE/YCR7WTEuaGVpZ2h0fXB4YDoiMTAwJSIsaGVpZ2h0OlIxJiZZMT9gJHtZMS53aWR0aH1weGA6IjEwMCUiLHRyYW5zZm9ybTpgdHJhbnNsYXRlKC01MCUsIC01MCUpJHtFMT09PTA/IiI6YCByb3RhdGUoJHtFMX1kZWcpYH1gLHRyYW5zZm9ybU9yaWdpbjoiY2VudGVyIGNlbnRlciIsY3Vyc29yOmw4LGRpc3BsYXk6ImJsb2NrIix1c2VyU2VsZWN0OiJub25lIixXZWJraXRVc2VyU2VsZWN0OiJub25lIix0b3VjaEFjdGlvbjoibm9uZSIsLi4uWiwuLi5FMT09PTA/e306e2JvcmRlclJhZGl1czowLGNvcm5lclNoYXBlOnZvaWQgMH19LFkwPXsuLi5YMCx0cmFuc2Zvcm06YCR7WDAudHJhbnNmb3JtPz8iIn0gc2NhbGUoJHtyNH0pYH07cmV0dXJuIEsoImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGZsZXg6MSwuLi56P3t9Ontib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sb3ZlcmZsb3c6ImhpZGRlbiIsbWluV2lkdGg6MCxtaW5IZWlnaHQ6MCwuLi5KfSxjbGFzc05hbWU6WCxjaGlsZHJlbjpbSygiZGl2Iix7cmVmOlgxLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLGZsZXg6MSxtaW5IZWlnaHQ6MCxtaW5XaWR0aDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciJ9LGNoaWxkcmVuOksoImRpdiIse3JlZjp1LHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLHdpZHRoOlkxP2Ake1kxLndpZHRofXB4YDoiMTAwJSIsaGVpZ2h0OlkxP2Ake1kxLmhlaWdodH1weGA6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLGJvcmRlclJhZGl1czpjMT8uYm9yZGVyUmFkaXVzLGNvcm5lclNoYXBlOmMxPy5jb3JuZXJTaGFwZX0sY2hpbGRyZW46W3k/SygiY2FudmFzIix7cmVmOm0sc3R5bGU6WTB9KTpLKCJpbWciLHtyZWY6YyxzcmM6VD92b2lkIDA6WjEsZHJhZ2dhYmxlOiExLG9uTG9hZDooRik9PntsZXQgSD1GLmN1cnJlbnRUYXJnZXQ7aWYoSC5uYXR1cmFsV2lkdGg+MCYmSC5uYXR1cmFsSGVpZ2h0PjApeTEoe3dpZHRoOkgubmF0dXJhbFdpZHRoLGhlaWdodDpILm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6VD97ZGlzcGxheToibm9uZSJ9OlgwfSksVCYmIXkmJksoImltZyIse3JlZjpmLGRyYWdnYWJsZTohMSxvbkxvYWQ6KEYpPT57bGV0IEg9Ri5jdXJyZW50VGFyZ2V0O2lmKEgubmF0dXJhbFdpZHRoPjAmJkgubmF0dXJhbEhlaWdodD4wKXkxKHt3aWR0aDpILm5hdHVyYWxXaWR0aCxoZWlnaHQ6SC5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOlgwfSksSygiZGl2Iix7cmVmOnoxLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsY3Vyc29yOmw4LHRvdWNoQWN0aW9uOiJub25lIn0sb25Nb3VzZURvd246KEYpPT57Ri5wcmV2ZW50RGVmYXVsdCgpO2xldCBIPUQxKCk7aWYoIUgpcmV0dXJuO2xldCBEPShGLmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLHc9KEYuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHQ7aWYoRi5hbHRLZXkpe1QxLmN1cnJlbnQ9ITAsbjEuY3VycmVudD1GLnNoaWZ0S2V5O2xldCBzPXt4MTpELHkxOncseDI6MS1ELHkyOjEtd307SzAuY3VycmVudD17ZHg6MS1ELUQsZHk6MS13LXd9LHcxKHMpLEYxKHt0eXBlOiJiZWdpbiIsLi4uc30pO3JldHVybn1aMChELHcpO2xldCBkPWM1KHcpO2lmKGQhPT12b2lkIDApeDEuY3VycmVudD0hMCxNMSh7dHlwZToiYmVnaW4iLHg6RCx5OncsZWRnZTpkfSk7ZWxzZSB4MS5jdXJyZW50PSExLHAxKCJiZWdpbiIsRil9LG9uTW91c2VNb3ZlOihGKT0+e2xldCBIPUQxKCk7aWYoIUgpcmV0dXJuO2xldCBEPShGLmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLHc9KEYuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHQ7aWYoXzAuY3VycmVudD17eDpELHk6d30sRi5idXR0b25zPT09MCl7aWYoRi5hbHRLZXkpdzEoe3gxOkQseTE6dyx4MjoxLUQseTI6MS13fSk7cmV0dXJufWlmKFQxLmN1cnJlbnQpe2xldCBkO2lmKG4xLmN1cnJlbnQpe2xldCBzPUswLmN1cnJlbnQ7ZD17eDE6RCx5MTp3LHgyOkQrcy5keCx5Mjp3K3MuZHl9fWVsc2UgZD17eDE6RCx5MTp3LHgyOjEtRCx5MjoxLXd9O3cxKGQpLEYxKHt0eXBlOiJtb3ZlIiwuLi5kfSk7cmV0dXJufWlmKEwwKEQsdykseDEuY3VycmVudClNMSh7dHlwZToibW92ZSIseDpELHk6dyxlZGdlOmQwfSk7ZWxzZSBwMSgibW92ZSIsRil9LG9uTW91c2VVcDooRik9PntpZihUMS5jdXJyZW50KXtsZXQgSD1EMSgpO2lmKEgpe2xldCBEPShGLmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLHc9KEYuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHQ7aWYobjEuY3VycmVudCl7bGV0IGQ9SzAuY3VycmVudDtGMSh7dHlwZToiZW5kIix4MTpELHkxOncseDI6RCtkLmR4LHkyOncrZC5keX0pfWVsc2UgRjEoe3R5cGU6ImVuZCIseDE6RCx5MTp3LHgyOjEtRCx5MjoxLXd9KX1pZihUMS5jdXJyZW50PSExLCFGLmFsdEtleSl3MShudWxsKTtyZXR1cm59aWYoZTEoKSx4MS5jdXJyZW50KXtsZXQgSD1EMSgpO2lmKEgpe2xldCBEPShGLmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLHc9KEYuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHQ7TTEoe3R5cGU6ImVuZCIseDpELHk6dyxlZGdlOmQwfSl9eDEuY3VycmVudD0hMTtyZXR1cm59cDEoImVuZCIsRil9LG9uTW91c2VMZWF2ZTooRik9PntpZihUMS5jdXJyZW50KXtpZihkMSlGMSh7dHlwZToiZW5kIiwuLi5kMX0pO1QxLmN1cnJlbnQ9ITEsdzEobnVsbCk7cmV0dXJufWlmKGUxKCkseDEuY3VycmVudCl7bGV0IEg9RDEoKTtpZihIKXtsZXQgRD0oRi5jbGllbnRYLUgubGVmdCkvSC53aWR0aCx3PShGLmNsaWVudFktSC50b3ApL0guaGVpZ2h0O00xKHt0eXBlOiJlbmQiLHg6RCx5OncsZWRnZTpkMH0pfXgxLmN1cnJlbnQ9ITE7cmV0dXJufWlmKEYuYnV0dG9ucz4wKXAxKCJlbmQiLEYpO3cxKG51bGwpfSxvblRvdWNoU3RhcnQ6KEYpPT57Ri5wcmV2ZW50RGVmYXVsdCgpO2xldCBIPUQxKCk7aWYoIUgpcmV0dXJuO2lmKEYudG91Y2hlcy5sZW5ndGg+PTIpe2UxKCk7bGV0IEMxPUYudG91Y2hlc1swXSxrMT1GLnRvdWNoZXNbMV0saDE9e3gxOihDMS5jbGllbnRYLUgubGVmdCkvSC53aWR0aCx5MTooQzEuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHQseDI6KGsxLmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLHkyOihrMS5jbGllbnRZLUgudG9wKS9ILmhlaWdodH07aWYoIW8xLmN1cnJlbnQmJiF4MS5jdXJyZW50KU0xKHt0eXBlOiJlbmQiLHg6aDEueDEseTpoMS55MX0pO28xLmN1cnJlbnQ9ITAsVDEuY3VycmVudD0hMCx4MS5jdXJyZW50PSExLHcxKGgxKSxGMSh7dHlwZToiYmVnaW4iLC4uLmgxfSk7cmV0dXJufWxldCBEPUYudG91Y2hlc1swXTtpZighRClyZXR1cm47bGV0IHc9KEQuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgsZD0oRC5jbGllbnRZLUgudG9wKS9ILmhlaWdodDtaMCh3LGQpO2xldCBzPWM1KGQpO2lmKHMhPT12b2lkIDApeDEuY3VycmVudD0hMCxNMSh7dHlwZToiYmVnaW4iLHg6dyx5OmQsZWRnZTpzfSk7ZWxzZSB4MS5jdXJyZW50PSExLE0xKHt0eXBlOiJiZWdpbiIseDp3LHk6ZH0pfSxvblRvdWNoTW92ZTooRik9PntGLnByZXZlbnREZWZhdWx0KCk7bGV0IEg9RDEoKTtpZighSClyZXR1cm47aWYobzEuY3VycmVudCYmRi50b3VjaGVzLmxlbmd0aD49Mil7bGV0IHM9Ri50b3VjaGVzWzBdLEMxPUYudG91Y2hlc1sxXSxrMT17eDE6KHMuY2xpZW50WC1ILmxlZnQpL0gud2lkdGgseTE6KHMuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHQseDI6KEMxLmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLHkyOihDMS5jbGllbnRZLUgudG9wKS9ILmhlaWdodH07dzEoazEpLEYxKHt0eXBlOiJtb3ZlIiwuLi5rMX0pO3JldHVybn1sZXQgRD1GLnRvdWNoZXNbMF07aWYoIUQpcmV0dXJuO2xldCB3PShELmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLGQ9KEQuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHQ7aWYoTDAodyxkKSx4MS5jdXJyZW50KU0xKHt0eXBlOiJtb3ZlIix4OncseTpkLGVkZ2U6ZDB9KTtlbHNlIE0xKHt0eXBlOiJtb3ZlIix4OncseTpkfSl9LG9uVG91Y2hFbmQ6KEYpPT57Ri5wcmV2ZW50RGVmYXVsdCgpO2xldCBIPUQxKCk7aWYoIUgpcmV0dXJuO2lmKG8xLmN1cnJlbnQpe2lmKEYudG91Y2hlcy5sZW5ndGg8Mil7bGV0IHM9Ri5jaGFuZ2VkVG91Y2hlc1swXSxDMT1kMTtpZihzJiZDMSlGMSh7dHlwZToiZW5kIix4MToocy5jbGllbnRYLUgubGVmdCkvSC53aWR0aCx5MToocy5jbGllbnRZLUgudG9wKS9ILmhlaWdodCx4MjpDMS54Mix5MjpDMS55Mn0pO2Vsc2UgaWYoQzEpRjEoe3R5cGU6ImVuZCIsLi4uQzF9KTtvMS5jdXJyZW50PSExLFQxLmN1cnJlbnQ9ITEsdzEobnVsbCl9cmV0dXJufWxldCBEPUYuY2hhbmdlZFRvdWNoZXNbMF07aWYoIUQpcmV0dXJuO2xldCB3PShELmNsaWVudFgtSC5sZWZ0KS9ILndpZHRoLGQ9KEQuY2xpZW50WS1ILnRvcCkvSC5oZWlnaHQ7aWYoZTEoKSx4MS5jdXJyZW50KU0xKHt0eXBlOiJlbmQiLHg6dyx5OmQsZWRnZTpkMH0pLHgxLmN1cnJlbnQ9ITE7ZWxzZSBNMSh7dHlwZToiZW5kIix4OncseTpkfSl9fSksSygiZGl2Iix7cmVmOmoxLCJkYXRhLXRlc3RpZCI6InRvdWNoLWluZGljYXRvciIsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSIsd2lkdGg6MjQsaGVpZ2h0OjI0LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDU5LDEzMCwyNDYsMC41KSIsYm94U2hhZG93OiIwIDAgOHB4IHJnYmEoNTksMTMwLDI0NiwwLjMpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksZDEmJksoSjEse2NoaWxkcmVuOltLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTpyOChkMS54MSxkMS55MSl9KSxLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTpyOChkMS54MixkMS55Mil9KV19KSwhbiYmIWwmJksoImRpdiIse3N0eWxlOnsuLi5kOCwuLi5afHx7fX0sY2hpbGRyZW46Sygic3BhbiIse3N0eWxlOntjb2xvcjoiIzg4OCIsZm9udFNpemU6MTR9LGNoaWxkcmVuOiJDb25uZWN0aW5nLi4uIn0pfSksbCYmSygiZGl2Iix7c3R5bGU6ZDgsY2hpbGRyZW46Sygic3BhbiIse3N0eWxlOntjb2xvcjoiI2Y0NCIsZm9udFNpemU6MTQscGFkZGluZzoyMCx0ZXh0QWxpZ246ImNlbnRlciJ9LGNoaWxkcmVuOmx9KX0pLGkmJksoImRpdiIse3N0eWxlOnQ0LGNoaWxkcmVuOksoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCF6JiZLKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltLKCJidXR0b24iLHtvbkNsaWNrOnQsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLEsoInNwYW4iLHtzdHlsZTp7Y29sb3I6Zz4wPyIjNGY0IjoiIzg4OCIsZm9udFNpemU6MTIsZm9udEZhbWlseToibW9ub3NwYWNlIixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo2fSxjaGlsZHJlbjpbUCYmSygic3BhbiIseyJkYXRhLXRlc3RpZCI6InF1YWxpdHktZG90IixzdHlsZTp7d2lkdGg6OCxoZWlnaHQ6OCxib3JkZXJSYWRpdXM6IjUwJSIsZGlzcGxheToiaW5saW5lLWJsb2NrIixiYWNrZ3JvdW5kOlA9PT0iZ29vZCI/IiM0YWRlODAiOlA9PT0iZGVncmFkZWQiPyIjZmFjYzE1IjoiI2VmNDQ0NCJ9fSksZywiIGZwcyJdfSldfSldfSl9dmFyIHQ0PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sZDg9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LGM4PTIwO2Z1bmN0aW9uIHI4KCQsUSl7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHskKjEwMH0lYCx0b3A6YCR7USoxMDB9JWAsd2lkdGg6YzgsaGVpZ2h0OmM4LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIEYwKCQpe2lmKCEkKXJldHVybiJpcGhvbmUiO2xldCBRPSQudG9Mb3dlckNhc2UoKTtpZihRLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKFEuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZihRLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgUDE9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LHlKPVAxLmlwaG9uZS53aWR0aCxiSj1QMS5pcGhvbmUuaGVpZ2h0LFNKPVAxLmlwaG9uZS5iZXplbFgseEo9UDEuaXBob25lLmJlemVsWSx2Sj1QMS5pcGhvbmUuaW5uZXJSYWRpdXMsbzg9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBzMigkLFEpe2xldCBKPSQmJiQud2lkdGg+MCYmJC5oZWlnaHQ+MD8kOlEsWj1jMChKKTtpZihaKXJldHVybmAke1oud2lkdGh9IC8gJHtaLmhlaWdodH1gO3JldHVybmAke1AxLmlwaG9uZS53aWR0aC0yKlAxLmlwaG9uZS5iZXplbFh9IC8gJHtQMS5pcGhvbmUuaGVpZ2h0LTIqUDEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIGkwKCQ9ImlwaG9uZSIsUSl7bGV0IEo9UT9vOFtRXTpudWxsO2lmKEopcmV0dXJuIEo7bGV0IFo9UDFbJF07cmV0dXJue3dpZHRoOloud2lkdGgtMipaLmJlemVsWCxoZWlnaHQ6Wi5oZWlnaHQtMipaLmJlemVsWX19ZnVuY3Rpb24gbjAoJD0iaXBob25lIixRKXtpZihFMChRKSlzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIHQyKCQ9ImlwaG9uZSIsUSl7bGV0IEo9UDFbJF0sWj1KLndpZHRoLTIqSi5iZXplbFgsWD1KLmhlaWdodC0yKkouYmV6ZWxZO2lmKFo8WCYmRTAoUSkpcmV0dXJuYCR7Si5pbm5lclJhZGl1cy9YKjEwMH0lIC8gJHtKLmlubmVyUmFkaXVzL1oqMTAwfSVgO3JldHVybmAke0ouaW5uZXJSYWRpdXMvWioxMDB9JSAvICR7Si5pbm5lclJhZGl1cy9YKjEwMH0lYH1mdW5jdGlvbiBpOCgkKXtsZXQgUT1QMVskLnR5cGVdLEo9US53aWR0aC0yKlEuYmV6ZWxYLFo9US5oZWlnaHQtMipRLmJlemVsWSxYLFk7aWYoSjxaJiZFMCgkLmNvbmZpZz8/bnVsbCkpWD1RLmlubmVyUmFkaXVzL1osWT1RLmlubmVyUmFkaXVzL0o7ZWxzZSBYPVEuaW5uZXJSYWRpdXMvSixZPVEuaW5uZXJSYWRpdXMvWjtsZXQgcT1YKiQuY29udGFpbmVyV2lkdGgsRz1ZKiQuY29udGFpbmVySGVpZ2h0LE49TWF0aC5zcXJ0KE1hdGgubWF4KHEqRywwKSk7cmV0dXJue3J4OnEscnk6RyxyR2VvbTpOfX12YXIgJDc9MTMsUTc9NjI7ZnVuY3Rpb24gczUoJCl7bGV0e2NvbnRhaW5lcldpZHRoOlEsY29udGFpbmVySGVpZ2h0Okp9PSQsWj0oeik9PnoudG9GaXhlZCgzKSxYPSh6LEEpPT57bGV0IFA9QSxSPUEsST1RNy8yKihNYXRoLlBJLzE4MCksVD0yMjUqTWF0aC5QSS8xODAseT1UK0ksYz1ULUksbT1QK3oqTWF0aC5jb3MoeSksZj1SK3oqTWF0aC5zaW4oeSksdT1QK3oqTWF0aC5jb3MoYyksejE9Uit6Kk1hdGguc2luKGMpLFExPWBNICR7WihtKX0gJHtaKGYpfSBBICR7Wih6KX0gJHtaKHopfSAwIDAgMSAke1oodSl9ICR7Wih6MSl9YCxuPWBNICR7Wih1KX0gJHtaKHoxKX0gQSAke1ooeil9ICR7Wih6KX0gMCAwIDAgJHtaKG0pfSAke1ooZil9YDtyZXR1cm57ZDpRMSxkRmlsbDpufX07aWYoIShRPjApfHwhKEo+MCkpe2xldCB6PSQ3LEE9TWF0aC5jZWlsKHorMTQpLHtkOlAsZEZpbGw6Un09WCh6LEEpO3JldHVybntkOlAsZEZpbGw6Uix2aWV3Qm94U2l6ZTpBfX1sZXR7ckdlb206WX09aTgoJCkscT1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKFEsSikpKSxHPVkqMC4zNCtxLE49TWF0aC5taW4oUSxKKSxCPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLE4qMC4wNTIpKTtHPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLEcsQikpO2xldCBMPU1hdGgubWF4KDI2LE1hdGguY2VpbChHKzEzKSkse2Q6TSxkRmlsbDpDfT1YKEcsTCk7cmV0dXJue2Q6TSxkRmlsbDpDLHZpZXdCb3hTaXplOkx9fWZ1bmN0aW9uIGUyKHt0eXBlOiQ9ImlwaG9uZSIsc3RyZWFtaW5nOlE9ITF9KXtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gSyhLNyx7c3RyZWFtaW5nOlF9KTtjYXNlIndhdGNoIjpyZXR1cm4gSyhaNyx7c3RyZWFtaW5nOlF9KTtjYXNlInZpc2lvbiI6cmV0dXJuIEsoWDcse3N0cmVhbWluZzpRfSk7ZGVmYXVsdDpyZXR1cm4gSyhKNyx7c3RyZWFtaW5nOlF9KX19ZnVuY3Rpb24gSjcoe3N0cmVhbWluZzokPSExfSl7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6IjAgMCA0MjcgODgxIixzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpbSygiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIwIix4OiItMC4xNjY5OTIiLHk6IjAuMTY2NTA0Iix3aWR0aDoiNDI3IixoZWlnaHQ6Ijg4MC42NjciLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSksSygiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIxIix4OiI2LjMzMjM2Iix5OiI2LjMzMzgyIix3aWR0aDoiNDE0IixoZWlnaHQ6Ijg2OCIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pXX0pLEsoInJlY3QiLHt4OiIzLjgzMjY4Iix5OiIzLjgzMzY2Iix3aWR0aDoiNDE5IixoZWlnaHQ6Ijg3MyIscng6IjY2LjE2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQuMzMzMzMifSksSygicmVjdCIse3g6IjAuODMzMzMzIix5OiIwLjgzMzMzMyIsd2lkdGg6IjQyNSIsaGVpZ2h0OiI4NzkiLHJ4OiI2OS4xNjY3IixzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pLEsoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMCkiLGNoaWxkcmVuOksoInJlY3QiLHt4OiIxLjY2NjAyIix5OiIyIix3aWR0aDoiNDIzLjMzMyIsaGVpZ2h0OiI4NzciLHJ4OiI2OC42NjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pfSksSygiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIxKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjcuMzMyNjgiLHk6IjcuMzMzNjYiLHdpZHRoOiI0MTIiLGhlaWdodDoiODY2IixyeDoiNjIuNjY2NyIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjY2NjcifSl9KSxLKCJyZWN0Iix7eDoiMTUxLjY2NiIseToiMzEuNjY3Iix3aWR0aDoiMTIzLjMzMyIsaGVpZ2h0OiIzNiIscng6IjE4IixmaWxsOiJibGFjayIsc3R5bGU6e29wYWNpdHk6JD8wOjEsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIEs3KHtzdHJlYW1pbmc6JD0hMX0pe2xldCBRPVAxLmlwYWQud2lkdGgsSj1QMS5pcGFkLmhlaWdodCxaPTMwLFg9MjY7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAke1F9ICR7Sn1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOltLKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6USxoZWlnaHQ6SixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLEsoImZpbHRlciIse2lkOiJpcGFkLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpRLTEwLGhlaWdodDpKLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiYmx1ciJ9KV19KV19KSxLKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOlEtNyxoZWlnaHQ6Si03LHJ4OjI2LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQifSksSygicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6US0xLjY2NixoZWlnaHQ6Si0xLjY2NixyeDozMCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxLKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MCkiLGNoaWxkcmVuOksoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6US0zLGhlaWdodDpKLTMscng6Mjksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxLKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MSkiLGNoaWxkcmVuOksoInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpRLTEyLGhlaWdodDpKLTEyLHJ4OjI0LHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksSygiY2lyY2xlIix7Y3g6US8yLGN5OlAxLmlwYWQuYmV6ZWxZLzIrMSxyOiIzIixmaWxsOiIjMWExYTFhIixzdHlsZTp7b3BhY2l0eTokPzA6MC44LHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KSxLKCJyZWN0Iix7eDooUS0xMjApLzIseTpKLVAxLmlwYWQuYmV6ZWxZLzItMi41LHdpZHRoOiIxMjAiLGhlaWdodDoiNSIscng6IjIuNSIsZmlsbDoid2hpdGUiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjM1LG1peEJsZW5kTW9kZToiZGlmZmVyZW5jZSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIFo3KHtzdHJlYW1pbmc6JD0hMX0pe2xldCBRPVAxLndhdGNoLndpZHRoLEo9UDEud2F0Y2guaGVpZ2h0LFo9ODgsWD04MixZPTgscT0zNixHPUovMi0xOC0xNixOPTIyLEI9Si8yLTExKzE2O3JldHVybiBLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtRfSAke0p9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb3ZlcmZsb3c6InZpc2libGUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46SygiZmlsdGVyIix7aWQ6IndhdGNoLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpRKzEyLGhlaWdodDpKLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSl9KSxLKCJyZWN0Iix7eDpRLTIseTpHLHdpZHRoOjgsaGVpZ2h0OjM2LHJ4OiIzIixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxIn0pLEsoInJlY3QiLHt4OlEtMSx5OkIsd2lkdGg6NixoZWlnaHQ6MjIscng6IjIuNSIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMC44In0pLEsoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6US03LGhlaWdodDpKLTcscng6ODIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMy41In0pLEsoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOlEtMS42NjYsaGVpZ2h0OkotMS42NjYscng6ODgsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksSygiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3dhdGNoLWdsb3cwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpRLTMsaGVpZ2h0OkotMyxyeDo4NyxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pXX0pfWZ1bmN0aW9uIFg3KHtzdHJlYW1pbmc6JD0hMX0pe2xldCBRPVAxLnZpc2lvbi53aWR0aCxKPVAxLnZpc2lvbi5oZWlnaHQsWj00MCxYPTM0O3JldHVybiBLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtRfSAke0p9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpbSygiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6USxoZWlnaHQ6SixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLEsoImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOlEtMTAsaGVpZ2h0OkotMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMyIscmVzdWx0OiJibHVyIn0pXX0pLEsoImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMCIseTI6IjEiLGNoaWxkcmVuOltLKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNTU1NTU4IixzdG9wT3BhY2l0eToiMC4zIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzNhM2EzZCIsc3RvcE9wYWNpdHk6IjAuMSJ9KV19KV19KSxLKCJyZWN0Iix7eDoiMCIseToiMCIsd2lkdGg6USxoZWlnaHQ6SixyeDo0MCxmaWxsOiJ1cmwoI3Zpc2lvbi1nbGFzcykifSksSygicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpRLTcsaGVpZ2h0OkotNyxyeDozNCxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzIn0pLEsoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOlEtMS42NjYsaGVpZ2h0OkotMS42NjYscng6NDAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksSygiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MCkiLGNoaWxkcmVuOksoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6US0zLGhlaWdodDpKLTMscng6Mzksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxLKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cxKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOlEtMTIsaGVpZ2h0OkotMTIscng6MzIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxLKCJlbGxpcHNlIix7Y3g6US8yLGN5OkovMixyeDpRLzItMzAscnk6Si8yLTI0LHN0cm9rZToiIzRhNGE0ZCIsc3Ryb2tlV2lkdGg6IjAuNSIsb3BhY2l0eToiMC4zIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX12YXIgdDU9cTAobnVsbCk7ZnVuY3Rpb24gJDUoJCl7bGV0IFE9RzAodDUpO2lmKCFRKXRocm93IEVycm9yKGA8U2ltdWxhdG9yVG9vbGJhci4keyR9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8U2ltdWxhdG9yVG9vbGJhcj5gKTtyZXR1cm4gUX12YXIgcTc9e2Rpc3BsYXk6ImZsZXgiLGZsZXhXcmFwOiJ3cmFwIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6IjRweCAxMnB4IixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyUmFkaXVzOjI0LGJhY2tncm91bmQ6InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZywgIzE4MTgxOCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSIsYm94U2hhZG93OiIwIDFweCAycHggcmdiYSgwLDAsMCwwLjIpIixtaW5XaWR0aDoyNDAsd2lkdGg6IjEwMCUifTtmdW5jdGlvbiBHNyh7ZXhlYzokLG9uUm90YXRlOlEsb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlosZGV2aWNlTmFtZTpYLGRldmljZVJ1bnRpbWU6WSxzdHJlYW1pbmc6cT0hMSxkaXNhYmxlZDpHPSExLGNoaWxkcmVuOk4sc3R5bGU6QiwuLi5VfSl7bGV0IFY9RjAoWCksTD17ZXhlYzokLG9uUm90YXRlOlEsb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlosZGV2aWNlTmFtZTpYLGRldmljZVJ1bnRpbWU6WSxkZXZpY2VUeXBlOlYsc3RyZWFtaW5nOnEsZGlzYWJsZWQ6R3x8IVp8fCFxfTtyZXR1cm4gSyh0NS5Qcm92aWRlcix7dmFsdWU6TCxjaGlsZHJlbjpLKCJkaXYiLHsiZGF0YS1zaW11bGF0b3ItdG9vbGJhciI6ITAsc3R5bGU6ey4uLnE3LC4uLkJ9LC4uLlUsY2hpbGRyZW46Tn0pfSl9dmFyIFY3PXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGFsaWduSXRlbXM6ImZsZXgtc3RhcnQiLHRleHRBbGlnbjoibGVmdCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNmZmYiLHBhZGRpbmc6IjJweCA0cHgiLG1hcmdpbjoiLTJweCAtNHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGxpbmVIZWlnaHQ6MS4yLGZvbnRGYW1pbHk6ImluaGVyaXQifSxCNz1CMChmdW5jdGlvbih7bmFtZTpRLHN1YnRpdGxlOkosaGlkZUNoZXZyb246WixoaWRlU3VidGl0bGU6WCxzdHlsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpHLC4uLk59LEIpe2xldCBVPSQ1KCJUaXRsZSIpLFtWLGtdPVcoITEpLEw9UT8/VS5kZXZpY2VOYW1lPz8iTm8gc2ltdWxhdG9yIixNPUo/PyhVLmRldmljZVJ1bnRpbWU/VS5kZXZpY2VSdW50aW1lLnJlcGxhY2UoL1wuLywiICIpOiLigJQiKTtyZXR1cm4gSygiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiZGF0YS1zaW11bGF0b3ItdG9vbGJhci10aXRsZSI6ITAsb25Nb3VzZUVudGVyOihDKT0+e2soITApLHE/LihDKX0sb25Nb3VzZUxlYXZlOihDKT0+e2soITEpLEc/LihDKX0sc3R5bGU6ey4uLlY3LGJhY2tncm91bmQ6Vj8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLC4uLll9LC4uLk4sY2hpbGRyZW46W0soInNwYW4iLHtzdHlsZTp7ZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZm9udFNpemU6MTIsZm9udFdlaWdodDo2MDAsY29sb3I6IiNmZmYiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbTCwhWiYmSygic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixzdHlsZTp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsZmxleFNocmluazowfSxjaGlsZHJlbjpLKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSwhWCYmSygic3BhbiIse3N0eWxlOntmb250U2l6ZToxMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46TX0pXX0pfSksTjc9e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZmxleFNocmluazowfTtmdW5jdGlvbiBVNyh7c3R5bGU6JCwuLi5RfSl7cmV0dXJuIEsoImRpdiIse3N0eWxlOnsuLi5ONywuLi4kfSwuLi5RfSl9dmFyIEw3PXtiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjEyLGN1cnNvcjoicG9pbnRlciIsZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZC1jb2xvciAwLjE1cywgY29sb3IgMC4xNXMiLHBvc2l0aW9uOiJyZWxhdGl2ZSIsb3ZlcmZsb3c6InZpc2libGUifSxRNT1CMChmdW5jdGlvbih7Zm9yY2VEaXNhYmxlZDpRLHRvb2x0aXA6SixzdHlsZTpaLGRpc2FibGVkOlgsdGl0bGU6WSxvbk1vdXNlRW50ZXI6cSxvbk1vdXNlTGVhdmU6RyxvblBvaW50ZXJEb3duOk4sb25Gb2N1czpCLG9uQmx1cjpVLG9uQ2xpY2s6VixjaGlsZHJlbjprLCJhcmlhLWxhYmVsIjpMLC4uLk19LEMpe2xldCB6PUcwKHQ1KSxBPVh8fFF8fHo/LmRpc2FibGVkLFtQLFJdPVcoITEpLFtJLFRdPVcoITEpLHk9YighMSksYz1sMCgpLG09Sj8/WT8/KHR5cGVvZiBMPT09InN0cmluZyI/TDpudWxsKSxmPSEhbSYmIUEmJihQfHxJKTtyZXR1cm4gSygiYnV0dG9uIix7cmVmOkMsdHlwZToiYnV0dG9uIixkaXNhYmxlZDpBLCJhcmlhLWxhYmVsIjpMLCJhcmlhLWRlc2NyaWJlZGJ5IjptP2M6dm9pZCAwLG9uUG9pbnRlckRvd246KHUpPT57eS5jdXJyZW50PSEwLE4/Lih1KX0sb25Nb3VzZUVudGVyOih1KT0+e1IoITApLHE/Lih1KX0sb25Nb3VzZUxlYXZlOih1KT0+e1IoITEpLEc/Lih1KX0sb25Gb2N1czoodSk9PntUKCF5LmN1cnJlbnQpLEI/Lih1KX0sb25CbHVyOih1KT0+e3kuY3VycmVudD0hMSxUKCExKSxVPy4odSl9LG9uQ2xpY2s6KHUpPT57UighMSksVCghMSksdS5jdXJyZW50VGFyZ2V0LmJsdXIoKSxWPy4odSl9LHN0eWxlOnsuLi5MNyxjb2xvcjpBPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIixiYWNrZ3JvdW5kOlAmJiFBPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsY3Vyc29yOkE/Im5vdC1hbGxvd2VkIjoicG9pbnRlciIsLi4uWn0sLi4uTSxjaGlsZHJlbjpbayxtJiZLKCJzcGFuIix7aWQ6Yyxyb2xlOiJ0b29sdGlwIiwiYXJpYS1oaWRkZW4iOiFmLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6IjUwJSIsYm90dG9tOiJjYWxjKDEwMCUgKyA4cHgpIix0cmFuc2Zvcm06YHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgke2Y/MDoyfXB4KWAsb3BhY2l0eTpmPzE6MCxwb2ludGVyRXZlbnRzOiJub25lIix3aGl0ZVNwYWNlOiJub3dyYXAiLHBhZGRpbmc6IjRweCA3cHgiLGJvcmRlclJhZGl1czo2LGJhY2tncm91bmQ6InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZywgIzE4MTgxOCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTIpIixmb250U2l6ZToxMSxmb250V2VpZ2h0OjUwMCxsaW5lSGVpZ2h0OjEsYm94U2hhZG93OiIwIDRweCAxNHB4IHJnYmEoMCwwLDAsMC4zMikiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4xMnMgZWFzZSwgdHJhbnNmb3JtIDAuMTJzIGVhc2UiLHpJbmRleDoxMDB9LGNoaWxkcmVuOm19KV19KX0pO2Z1bmN0aW9uIHo3KCQsUSl7aWYoJD09PSJ3YXRjaCIpcmV0dXJuIEM3KCk7aWYoUSlyZXR1cm5geGNydW4gc2ltY3RsIGxhdW5jaCAke1F9IGNvbS5hcHBsZS5zcHJpbmdib2FyZGA7cmV0dXJuInNlcnZlLXNpbSBidXR0b24gaG9tZSJ9ZnVuY3Rpb24gQzcoKXtyZXR1cm5bJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBzZXQgZnJvbnRtb3N0IHRvIHRydWUnLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gcGVyZm9ybSBhY3Rpb24gIkFYUmFpc2UiIG9mIChmaXJzdCB3aW5kb3cgd2hvc2UgbmFtZSBjb250YWlucyAid2F0Y2hPUyIpJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIGNsaWNrIG1lbnUgaXRlbSAiSG9tZSIgb2YgbWVudSAiRGV2aWNlIiBvZiBtZW51IGJhciBpdGVtICJEZXZpY2UiIG9mIG1lbnUgYmFyIDEnXS5tYXAoKFEpPT5gLWUgJyR7UX0nYCkucmVkdWNlKChRLEopPT5gJHtRfSAke0p9YCwib3Nhc2NyaXB0Iil9dmFyIEg3PXtwb3J0cmFpdDoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdCJ9LEY3PUsoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMyAxMC41IDEyIDNsOSA3LjVWMjBhMSAxIDAgMCAxLTEgMWgtNXYtN2gtNnY3SDRhMSAxIDAgMCAxLTEtMXoifSl9KSxrNz1LKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCA0NCA0NCIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpLKCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixmaWxsOiJjdXJyZW50Q29sb3IiLGQ6Ik00My42ODc1IDEyLjQ2ODhWOC4yNzM0NEM0My42ODc1IDUuNzI2NTYgNDIuOTUzMSAzLjcxMDk0IDQxLjQ4NDQgMi4yMjY1NkM0MC4wMTU2IDAuNzQyMTg4IDM4IDAgMzUuNDM3NSAwSDMxLjE0ODRDMzAuNjAxNiAwIDMwLjEzMjggMC4xOTUzMTIgMjkuNzQyMiAwLjU4NTkzOEMyOS4zNTE2IDAuOTc2NTYyIDI5LjE1NjIgMS40NDUzMSAyOS4xNTYyIDEuOTkyMTlDMjkuMTU2MiAyLjUyMzQ0IDI5LjM1MTYgMi45ODQzOCAyOS43NDIyIDMuMzc1QzMwLjEzMjggMy43NjU2MiAzMC42MDE2IDMuOTYwOTQgMzEuMTQ4NCAzLjk2MDk0SDM1LjQzNzVDMzYuNzgxMiAzLjk2MDk0IDM3LjgzNTkgNC4zNDM3NSAzOC42MDE2IDUuMTA5MzhDMzkuMzUxNiA1Ljg3NSAzOS43MjY2IDYuOTI5NjkgMzkuNzI2NiA4LjI3MzQ0VjEyLjQ2ODhDMzkuNzI2NiAxMyAzOS45MjE5IDEzLjQ2MDkgNDAuMzEyNSAxMy44NTE2QzQwLjcwMzEgMTQuMjQyMiA0MS4xNzE5IDE0LjQzNzUgNDEuNzE4OCAxNC40Mzc1QzQyLjI1IDE0LjQzNzUgNDIuNzEwOSAxNC4yNDIyIDQzLjEwMTYgMTMuODUxNkM0My40OTIyIDEzLjQ2MDkgNDMuNjg3NSAxMyA0My42ODc1IDEyLjQ2ODhaTTAgMTIuNDY4OEMwIDEzIDAuMTk1MzEyIDEzLjQ2MDkgMC41ODU5MzggMTMuODUxNkMwLjk3NjU2MiAxNC4yNDIyIDEuNDM3NSAxNC40Mzc1IDEuOTY4NzUgMTQuNDM3NUMyLjUgMTQuNDM3NSAyLjk2MDk0IDE0LjI0MjIgMy4zNTE1NiAxMy44NTE2QzMuNzQyMTkgMTMuNDYwOSAzLjkzNzUgMTMgMy45Mzc1IDEyLjQ2ODhWOC4yNzM0NEMzLjkzNzUgNi45Mjk2OSA0LjMyMDMxIDUuODc1IDUuMDg1OTQgNS4xMDkzOEM1LjgzNTk0IDQuMzQzNzUgNi44OTA2MiAzLjk2MDk0IDguMjUgMy45NjA5NEgxMi41MzkxQzEzLjA4NTkgMy45NjA5NCAxMy41NTQ3IDMuNzY1NjIgMTMuOTQ1MyAzLjM3NUMxNC4zMjAzIDIuOTg0MzggMTQuNTA3OCAyLjUyMzQ0IDE0LjUwNzggMS45OTIxOUMxNC41MDc4IDEuNDQ1MzEgMTQuMzIwMyAwLjk3NjU2MiAxMy45NDUzIDAuNTg1OTM4QzEzLjU1NDcgMC4xOTUzMTIgMTMuMDg1OSAwIDEyLjUzOTEgMEg4LjI1QzUuNjg3NSAwIDMuNjcxODggMC43NDIxODggMi4yMDMxMiAyLjIyNjU2QzAuNzM0Mzc1IDMuNzEwOTQgMCA1LjcyNjU2IDAgOC4yNzM0NFYxMi40Njg4Wk00My42ODc1IDMxLjI0MjJDNDMuNjg3NSAzMC43MTA5IDQzLjQ5MjIgMzAuMjUgNDMuMTAxNiAyOS44NTk0QzQyLjcxMDkgMjkuNDY4OCA0Mi4yNSAyOS4yNzM0IDQxLjcxODggMjkuMjczNEM0MS4xNzE5IDI5LjI3MzQgNDAuNzAzMSAyOS40Njg4IDQwLjMxMjUgMjkuODU5NEMzOS45MjE5IDMwLjI1IDM5LjcyNjYgMzAuNzEwOSAzOS43MjY2IDMxLjI0MjJWMzUuNDM3NUMzOS43MjY2IDM2Ljc4MTIgMzkuMzUxNiAzNy44MzU5IDM4LjYwMTYgMzguNjAxNkMzNy44MzU5IDM5LjM2NzIgMzYuNzgxMiAzOS43NSAzNS40Mzc1IDM5Ljc1SDMxLjE0ODRDMzAuNjAxNiAzOS43NSAzMC4xMzI4IDM5Ljk0NTMgMjkuNzQyMiA0MC4zMzU5QzI5LjM1MTYgNDAuNzI2NiAyOS4xNTYyIDQxLjE4NzUgMjkuMTU2MiA0MS43MTg4QzI5LjE1NjIgNDIuMjY1NiAyOS4zNTE2IDQyLjcyNjYgMjkuNzQyMiA0My4xMDE2QzMwLjEzMjggNDMuNDkyMiAzMC42MDE2IDQzLjY4NzUgMzEuMTQ4NCA0My42ODc1SDM1LjQzNzVDMzggNDMuNjg3NSA0MC4wMTU2IDQyLjk0NTMgNDEuNDg0NCA0MS40NjA5QzQyLjk1MzEgMzkuOTkyMiA0My42ODc1IDM3Ljk4NDQgNDMuNjg3NSAzNS40Mzc1VjMxLjI0MjJaTTAgMzEuMjQyMlYzNS40Mzc1QzAgMzcuOTg0NCAwLjczNDM3NSAzOS45OTIyIDIuMjAzMTIgNDEuNDYwOUMzLjY3MTg4IDQyLjk0NTMgNS42ODc1IDQzLjY4NzUgOC4yNSA0My42ODc1SDEyLjUzOTFDMTMuMDg1OSA0My42ODc1IDEzLjU1NDcgNDMuNDkyMiAxMy45NDUzIDQzLjEwMTZDMTQuMzIwMyA0Mi43MjY2IDE0LjUwNzggNDIuMjY1NiAxNC41MDc4IDQxLjcxODhDMTQuNTA3OCA0MS4xODc1IDE0LjMyMDMgNDAuNzI2NiAxMy45NDUzIDQwLjMzNTlDMTMuNTU0NyAzOS45NDUzIDEzLjA4NTkgMzkuNzUgMTIuNTM5MSAzOS43NUg4LjI1QzYuODkwNjIgMzkuNzUgNS44MzU5NCAzOS4zNjcyIDUuMDg1OTQgMzguNjAxNkM0LjMyMDMxIDM3LjgzNTkgMy45Mzc1IDM2Ljc4MTIgMy45Mzc1IDM1LjQzNzVWMzEuMjQyMkMzLjkzNzUgMzAuNzEwOSAzLjc0MjE5IDMwLjI1IDMuMzUxNTYgMjkuODU5NEMyLjk2MDk0IDI5LjQ2ODggMi41IDI5LjI3MzQgMS45Njg3NSAyOS4yNzM0QzEuNDM3NSAyOS4yNzM0IDAuOTc2NTYyIDI5LjQ2ODggMC41ODU5MzggMjkuODU5NEMwLjE5NTMxMiAzMC4yNSAwIDMwLjcxMDkgMCAzMS4yNDIyWk0zMS41OTM4IDMxLjgwNDdDMzIuNzgxMiAzMS44MDQ3IDMzLjY3MTkgMzEuNTE1NiAzNC4yNjU2IDMwLjkzNzVDMzQuODU5NCAzMC4zNDM4IDM1LjE1NjIgMjkuNDY4OCAzNS4xNTYyIDI4LjMxMjVWMTYuNzEwOUMzNS4xNTYyIDE1LjUzOTEgMzQuODU5NCAxNC42NjQxIDM0LjI2NTYgMTQuMDg1OUMzMy42NzE5IDEzLjQ5MjIgMzIuNzgxMiAxMy4xOTUzIDMxLjU5MzggMTMuMTk1M0gyOC44OTg0QzI4LjQ2MDkgMTMuMTk1MyAyOC4xNDg0IDEzLjE0MDYgMjcuOTYwOSAxMy4wMzEyQzI3Ljc1NzggMTIuOTIxOSAyNy41MjM0IDEyLjcyNjYgMjcuMjU3OCAxMi40NDUzTDI2LjM2NzIgMTEuNTA3OEMyNi4wODU5IDExLjE5NTMgMjUuNzgxMiAxMC45Njg4IDI1LjQ1MzEgMTAuODI4MUMyNS4xMDk0IDEwLjY3MTkgMjQuNjU2MiAxMC41OTM4IDI0LjA5MzggMTAuNTkzOEgxOS42MTcyQzE5LjA1NDcgMTAuNTkzOCAxOC42MDk0IDEwLjY3MTkgMTguMjgxMiAxMC44MjgxQzE3LjkzNzUgMTAuOTY4OCAxNy42MjUgMTEuMTk1MyAxNy4zNDM4IDExLjUwNzhMMTYuNDc2NiAxMi40NDUzQzE2LjIxMDkgMTIuNzQyMiAxNS45NzY2IDEyLjk0NTMgMTUuNzczNCAxMy4wNTQ3QzE1LjU1NDcgMTMuMTQ4NCAxNS4yMzQ0IDEzLjE5NTMgMTQuODEyNSAxMy4xOTUzSDEyLjA0NjlDMTAuODkwNiAxMy4xOTUzIDEwLjAxNTYgMTMuNDkyMiA5LjQyMTg4IDE0LjA4NTlDOC44MTI1IDE0LjY2NDEgOC41MDc4MSAxNS41MzkxIDguNTA3ODEgMTYuNzEwOVYyOC4zMTI1QzguNTA3ODEgMjkuNDY4OCA4LjgxMjUgMzAuMzQzOCA5LjQyMTg4IDMwLjkzNzVDMTAuMDE1NiAzMS41MTU2IDEwLjg5MDYgMzEuODA0NyAxMi4wNDY5IDMxLjgwNDdIMzEuNTkzOFpNMjEuNzk2OSAyOC45NDUzQzIwLjU5MzggMjguOTQ1MyAxOS41IDI4LjY2NDEgMTguNTE1NiAyOC4xMDE2QzE3LjUxNTYgMjcuNTIzNCAxNi43MjY2IDI2Ljc0MjIgMTYuMTQ4NCAyNS43NTc4QzE1LjU1NDcgMjQuNzU3OCAxNS4yNTc4IDIzLjYzMjggMTUuMjU3OCAyMi4zODI4QzE1LjI1NzggMjEuMTc5NyAxNS41NTQ3IDIwLjA4NTkgMTYuMTQ4NCAxOS4xMDE2QzE2LjcyNjYgMTguMTAxNiAxNy41MTU2IDE3LjMxMjUgMTguNTE1NiAxNi43MzQ0QzE5LjUgMTYuMTQwNiAyMC41OTM4IDE1Ljg0MzggMjEuNzk2OSAxNS44NDM4QzIzLjAxNTYgMTUuODQzOCAyNC4xMjUgMTYuMTQwNiAyNS4xMjUgMTYuNzM0NEMyNi4xMDk0IDE3LjMxMjUgMjYuODk4NCAxOC4xMDE2IDI3LjQ5MjIgMTkuMTAxNkMyOC4wNzAzIDIwLjA4NTkgMjguMzU5NCAyMS4xNzk3IDI4LjM1OTQgMjIuMzgyOEMyOC4zNTk0IDIzLjYxNzIgMjguMDcwMyAyNC43MjY2IDI3LjQ5MjIgMjUuNzEwOUMyNi44OTg0IDI2LjY5NTMgMjYuMTA5NCAyNy40ODQ0IDI1LjEyNSAyOC4wNzgxQzI0LjEyNSAyOC42NTYyIDIzLjAxNTYgMjguOTQ1MyAyMS43OTY5IDI4Ljk0NTNaTTIxLjgyMDMgMjYuOTA2MkMyMi42NDg0IDI2LjkwNjIgMjMuNDA2MiAyNi43MTA5IDI0LjA5MzggMjYuMzIwM0MyNC43ODEyIDI1LjkxNDEgMjUuMzI4MSAyNS4zNjcyIDI1LjczNDQgMjQuNjc5N0MyNi4xMjUgMjMuOTkyMiAyNi4zMjAzIDIzLjIyNjYgMjYuMzIwMyAyMi4zODI4QzI2LjMyMDMgMjEuNTcwMyAyNi4xMjUgMjAuODIwMyAyNS43MzQ0IDIwLjEzMjhDMjUuMzI4MSAxOS40NDUzIDI0Ljc4MTIgMTguOTA2MiAyNC4wOTM4IDE4LjUxNTZDMjMuNDA2MiAxOC4xMDk0IDIyLjY0ODQgMTcuOTA2MiAyMS44MjAzIDE3LjkwNjJDMjAuOTkyMiAxNy45MDYyIDIwLjI0MjIgMTguMTA5NCAxOS41NzAzIDE4LjUxNTZDMTguODgyOCAxOC45MDYyIDE4LjMzNTkgMTkuNDQ1MyAxNy45Mjk3IDIwLjEzMjhDMTcuNTIzNCAyMC44MjAzIDE3LjMyMDMgMjEuNTcwMyAxNy4zMjAzIDIyLjM4MjhDMTcuMzIwMyAyMy4yMjY2IDE3LjUyMzQgMjMuOTkyMiAxNy45Mjk3IDI0LjY3OTdDMTguMzM1OSAyNS4zNjcyIDE4Ljg4MjggMjUuOTE0MSAxOS41NzAzIDI2LjMyMDNDMjAuMjQyMiAyNi43MTA5IDIwLjk5MjIgMjYuOTA2MiAyMS44MjAzIDI2LjkwNjJaTTEyLjYzMjggMTguOTg0NEMxMi4yMTA5IDE4Ljk4NDQgMTEuODU5NCAxOC44MzU5IDExLjU3ODEgMTguNTM5MUMxMS4yODEyIDE4LjI0MjIgMTEuMTMyOCAxNy44OTA2IDExLjEzMjggMTcuNDg0NEMxMS4xMzI4IDE3LjA2MjUgMTEuMjgxMiAxNi43MTA5IDExLjU3ODEgMTYuNDI5N0MxMS44NTk0IDE2LjEzMjggMTIuMjEwOSAxNS45ODQ0IDEyLjYzMjggMTUuOTg0NEMxMy4wMzkxIDE1Ljk4NDQgMTMuMzkwNiAxNi4xMzI4IDEzLjY4NzUgMTYuNDI5N0MxMy45ODQ0IDE2LjcxMDkgMTQuMTMyOCAxNy4wNjI1IDE0LjEzMjggMTcuNDg0NEMxNC4xMzI4IDE3Ljg5MDYgMTMuOTg0NCAxOC4yNDIyIDEzLjY4NzUgMTguNTM5MUMxMy4zOTA2IDE4LjgzNTkgMTMuMDM5MSAxOC45ODQ0IDEyLjYzMjggMTguOTg0NFoifSl9KSxBNz1LKCJzdmciLHt3aWR0aDoiMjEiLGhlaWdodDoiMjEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTEyIDVINmEyIDIgMCAwIDAtMiAydjMifSksSygicGF0aCIse2Q6Im05IDggMy0zLTMtMyJ9KSxLKCJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn0pXX0pLE03PUIwKGZ1bmN0aW9uKHtvbkNsaWNrOlEsLi4uSn0sWil7bGV0IFg9JDUoIkhvbWVCdXR0b24iKTtyZXR1cm4gSyhRNSx7cmVmOlosImFyaWEtbGFiZWwiOiJIb21lIixvbkNsaWNrOihZKT0+e2lmKFE/LihZKSxZLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO1guZXhlYyh6NyhYLmRldmljZVR5cGUsWC5kZXZpY2VVZGlkKSl9LC4uLkosY2hpbGRyZW46Rjd9KX0pLE83PUIwKGZ1bmN0aW9uKHtvbkNsaWNrOlEsLi4uSn0sWil7bGV0IFg9JDUoIlNjcmVlbnNob3RCdXR0b24iKTtyZXR1cm4gSyhRNSx7cmVmOlosImFyaWEtbGFiZWwiOiJTY3JlZW5zaG90IixvbkNsaWNrOihZKT0+e2lmKFE/LihZKSxZLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKFguZGV2aWNlVWRpZClYLmV4ZWMoYHhjcnVuIHNpbWN0bCBpbyAke1guZGV2aWNlVWRpZH0gc2NyZWVuc2hvdCB+L0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJChkYXRlICslcykucG5nYCl9LC4uLkosY2hpbGRyZW46azd9KX0pLFc3PUIwKGZ1bmN0aW9uKHtvbkNsaWNrOlEsZm9yY2VEaXNhYmxlZDpKLC4uLlp9LFgpe2xldCBZPSQ1KCJSb3RhdGVCdXR0b24iKSxxPVkuZGV2aWNlVHlwZT09PSJ3YXRjaCJ8fFkuZGV2aWNlVHlwZT09PSJ2aXNpb24iLFtHLE5dPVcoInBvcnRyYWl0Iik7cmV0dXJuIHgoKCk9PntOKFkub3JpZW50YXRpb24/PyJwb3J0cmFpdCIpfSxbWS5kZXZpY2VVZGlkLFkub3JpZW50YXRpb25dKSxLKFE1LHtyZWY6WCwiYXJpYS1sYWJlbCI6IlJvdGF0ZSBkZXZpY2UiLGZvcmNlRGlzYWJsZWQ6Snx8cSxvbkNsaWNrOihCKT0+e2lmKFE/LihCKSxCLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKCFZLmRldmljZVVkaWR8fHEpcmV0dXJuO2xldCBVPUg3W1kub3JpZW50YXRpb24/P0ddO2lmKE4oVSksWS5vblJvdGF0ZSlZLm9uUm90YXRlKFUpO2Vsc2UgWS5leGVjKGBzZXJ2ZS1zaW0gcm90YXRlICR7VX0gLWQgJHtZLmRldmljZVVkaWR9YCl9LC4uLlosY2hpbGRyZW46QTd9KX0pLG0xPUc3O20xLlRpdGxlPUI3O20xLkFjdGlvbnM9VTc7bTEuQnV0dG9uPVE1O20xLkhvbWVCdXR0b249TTc7bTEuU2NyZWVuc2hvdEJ1dHRvbj1PNzttMS5Sb3RhdGVCdXR0b249Vzc7dmFyIEo1PSguLi4kKT0+JC5maWx0ZXIoKFEsSixaKT0+e3JldHVybiBCb29sZWFuKFEpJiZRLnRyaW0oKSE9PSIiJiZaLmluZGV4T2YoUSk9PT1KfSkuam9pbigiICIpLnRyaW0oKTt2YXIgbjg9KCQpPT4kLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKTt2YXIgYTg9KCQpPT4kLnJlcGxhY2UoL14oW0EtWl0pfFtccy1fXSsoXHcpL2csKFEsSixaKT0+Wj9aLnRvVXBwZXJDYXNlKCk6Si50b0xvd2VyQ2FzZSgpKTt2YXIgZTU9KCQpPT57bGV0IFE9YTgoJCk7cmV0dXJuIFEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrUS5zbGljZSgxKX07dmFyIEs1PXt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOjI0LGhlaWdodDoyNCx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoyLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTt2YXIgczg9KCQpPT57Zm9yKGxldCBRIGluICQpaWYoUS5zdGFydHNXaXRoKCJhcmlhLSIpfHxRPT09InJvbGUifHxRPT09InRpdGxlIilyZXR1cm4hMDtyZXR1cm4hMX07dmFyIF83PXEwKHt9KTt2YXIgdDg9KCk9PkcwKF83KTt2YXIgZTg9QjAoKHtjb2xvcjokLHNpemU6USxzdHJva2VXaWR0aDpKLGFic29sdXRlU3Ryb2tlV2lkdGg6WixjbGFzc05hbWU6WD0iIixjaGlsZHJlbjpZLGljb25Ob2RlOnEsLi4uR30sTik9PntsZXR7c2l6ZTpCPTI0LHN0cm9rZVdpZHRoOlU9MixhYnNvbHV0ZVN0cm9rZVdpZHRoOlY9ITEsY29sb3I6az0iY3VycmVudENvbG9yIixjbGFzc05hbWU6TD0iIn09dDgoKT8/e30sTT1aPz9WP051bWJlcihKPz9VKSoyNC9OdW1iZXIoUT8/Qik6Sj8/VTtyZXR1cm4gdjEoInN2ZyIse3JlZjpOLC4uLks1LHdpZHRoOlE/P0I/P0s1LndpZHRoLGhlaWdodDpRPz9CPz9LNS5oZWlnaHQsc3Ryb2tlOiQ/P2ssc3Ryb2tlV2lkdGg6TSxjbGFzc05hbWU6SjUoImx1Y2lkZSIsTCxYKSwuLi4hWSYmIXM4KEcpJiZ7ImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LC4uLkd9LFsuLi5xLm1hcCgoW0Msel0pPT52MShDLHopKSwuLi5BcnJheS5pc0FycmF5KFkpP1k6W1ldXSl9KTt2YXIgSDE9KCQsUSk9PntsZXQgSj1CMCgoe2NsYXNzTmFtZTpaLC4uLlh9LFkpPT52MShlOCx7cmVmOlksaWNvbk5vZGU6USxjbGFzc05hbWU6SjUoYGx1Y2lkZS0ke244KGU1KCQpKX1gLGBsdWNpZGUtJHskfWAsWiksLi4uWH0pKTtyZXR1cm4gSi5kaXNwbGF5TmFtZT1lNSgkKSxKfTt2YXIgUDc9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dLFsicGF0aCIse2Q6Ik05IDN2MTgiLGtleToiZmgzaHFhIn1dXSxrMD1IMSgicGFuZWwtbGVmdCIsUDcpO3ZhciBENz1bWyJwYXRoIix7ZDoiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6IixrZXk6Inh3bnppcCJ9XSxbInBhdGgiLHtkOiJNMjEgMTFWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYiLGtleToiMTRyc3ZxIn1dXSxJMD1IMSgic3F1YXJlLW1vdXNlLXBvaW50ZXIiLEQ3KTt2YXIgVDc9W1sicmVjdCIse3g6IjIiLHk6IjQiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNiIscng6IjIiLGtleToiaXp4bGFvIn1dLFsicGF0aCIse2Q6Ik0xMCA0djQiLGtleToicHA4dTgwIn1dLFsicGF0aCIse2Q6Ik0yIDhoMjAiLGtleToiZDExY3M3In1dLFsicGF0aCIse2Q6Ik02IDR2NCIsa2V5OiIxc3Z0ancifV1dLFUyPUgxKCJhcHAtd2luZG93IixUNyk7dmFyIHc3PVtbInBhdGgiLHtkOiJNNyA3aDEwdjEwIixrZXk6IjF0aXZuOSJ9XSxbInBhdGgiLHtkOiJNNyAxNyAxNyA3IixrZXk6IjF2a2l6YSJ9XV0sTDI9SDEoImFycm93LXVwLXJpZ2h0Iix3Nyk7dmFyIEU3PVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXSx6Mj1IMSgiY2hlY2siLEU3KTt2YXIgSTc9W1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dLEMyPUgxKCJjaGV2cm9uLWRvd24iLEk3KTt2YXIgeTc9W1sicGF0aCIse2Q6Im05IDE4IDYtNi02LTYiLGtleToibXRoaHdxIn1dXSxIMj1IMSgiY2hldnJvbi1yaWdodCIseTcpO3ZhciBiNz1bWyJwYXRoIix7ZDoiTTEyIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAxMiAxOHoiLGtleToiYjE5aDVxIn1dLFsicGF0aCIse2Q6Ik0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIsa2V5OiJoN2g1Z2UifV1dLEYyPUgxKCJmYXN0LWZvcndhcmQiLGI3KTt2YXIgUzc9W1sicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3IixrZXk6ImNvdWhpNyJ9XSxbInBhdGgiLHtkOiJtMjEgNy01IDUgNSA1VjciLGtleToiNm91aWE3In1dLFsicGF0aCIse2Q6Ik0xMiAyMHYyIixrZXk6IjFsaDFrZyJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiIsa2V5OiI4amN4dWQifV0sWyJwYXRoIix7ZDoiTTEyIDh2MiIsa2V5OiIxd29xaXYifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV1dLGsyPUgxKCJmbGlwLWhvcml6b250YWwtMiIsUzcpO3ZhciB4Nz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Ik0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIixrZXk6IjEzbzF6bCJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMCIsa2V5OiI5aTRwdTQifV1dLEEyPUgxKCJnbG9iZSIseDcpO3ZhciB2Nz1bWyJwYXRoIix7ZDoibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIsa2V5OiI5a3p5MzUifV0sWyJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiIsa2V5OiIxdDBmMHQifV0sWyJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IiLGtleToiMW9idXM2In1dLFsicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIiLGtleToiMWd2aGJ5In1dXSxNMj1IMSgiaW1hZ2VzIix2Nyk7dmFyIGo3PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCIsa2V5OiIxNG52cDAifV1dLE8yPUgxKCJwYW5lbC1yaWdodCIsajcpO3ZhciBSNz1bWyJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIsa2V5OiIxMzU3ZTMifV0sWyJwYXRoIix7ZDoiTTMgM3Y1aDUiLGtleToiMXhocThhIn1dXSxXMj1IMSgicm90YXRlLWNjdyIsUjcpO3ZhciBnNz1bWyJwYXRoIix7ZDoibTIxIDIxLTQuMzQtNC4zNCIsa2V5OiIxNGo3cmoifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCIsa2V5OiI0ZWo5N3UifV1dLF8yPUgxKCJzZWFyY2giLGc3KTt2YXIgaDc9W1sicGF0aCIse2Q6Ik0xMiAzdjEyIixrZXk6IjF4MGo1cyJ9XSxbInBhdGgiLHtkOiJtMTcgOC01LTUtNSA1IixrZXk6IjdxOTdyOCJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIsa2V5OiJpaDduM2gifV1dLFAyPUgxKCJ1cGxvYWQiLGg3KTt2YXIgZjc9W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXSwkMD1IMSgieCIsZjcpO2Z1bmN0aW9uIEQyKHtvcGVuOiR9KXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjbGFzc05hbWU6ImxlbS1jaGV2cm9uIHRleHQtd2hpdGUvNTAiLHN0eWxlOnt0cmFuc2Zvcm06JD8icm90YXRlKDE4MGRlZykiOiJyb3RhdGUoMGRlZykifSxjaGlsZHJlbjpLKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KX1mdW5jdGlvbiBaNSh7ZGlyOiR9KXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZToibXItWzNweF0iLGNoaWxkcmVuOiQ9PT0idXAiP0soInBvbHlnb24iLHtwb2ludHM6IjEyLDQgMjAsMTggNCwxOCJ9KTpLKCJwb2x5Z29uIix7cG9pbnRzOiI0LDYgMjAsNiAxMiwyMCJ9KX0pfWZ1bmN0aW9uIFQyKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOksoInBvbHlnb24iLHtwb2ludHM6IjYsNCAyMCwxMiA2LDIwIn0pfSl9ZnVuY3Rpb24gJDMoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46W0soInJlY3QiLHt4OiI2Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KSxLKCJyZWN0Iix7eDoiMTQiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pXX0pfWZ1bmN0aW9uIHcyKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOksoInJlY3QiLHt4OiI1Iix5OiI1Iix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIxLjUifSl9KX1mdW5jdGlvbiBRMygpe3JldHVybiBLKEYyLHtzaXplOjEyLHN0cm9rZVdpZHRoOjIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KX1mdW5jdGlvbiBKMygpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNCAyIDkgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTYuMDA4NTIgMTQuODA1NEM1Ljg5MTgxIDE0LjkzNSA1Ljc1ODE1IDE0Ljk5OTggNS42MDc1NiAxNC45OTk4QzUuNDU2OTYgMTUuMDAzMyA1LjMyMzMgMTQuOTYxMyA1LjIwNjU5IDE0Ljg3MzdDNS4wOTM2NCAxNC43ODYxIDUuMDI1ODcgMTQuNjcyMyA1LjAwMzI4IDE0LjUzMjJDNC45ODQ0NiAxNC4zOTIxIDUuMDQ2NTggMTQuMjQ1IDUuMTg5NjUgMTQuMDkwOUw2Ljk0NTk5IDEyLjE1MjJMNy4yNDUzIDEwLjg3NTVMOC4xOTk3MSAxMS45ODkzTDguMDU4NTMgMTIuMzkzOUM4LjAyMDg4IDEyLjQ5NTUgNy45ODY5OSAxMi41NzA4IDcuOTU2ODcgMTIuNjE5OEM3LjkzMDUyIDEyLjY2ODggNy44NzQwNCAxMi43NDA2IDcuNzg3NDUgMTIuODM1Mkw2LjAwODUyIDE0LjgwNTRaTTEwLjM0NTcgMTQuNjQyNUw5LjEwMzI5IDEyLjMwNDZDOS4wNzY5NCAxMi4yNjI1IDkuMDU0MzUgMTIuMjIyMyA5LjAzNTUzIDEyLjE4MzdDOS4wMTY3IDEyLjE0NTIgOC45NzcxNyAxMi4wOTA5IDguOTE2OTMgMTIuMDIwOUw3LjcxOTY4IDEwLjYxODFDNy40OTM3OSAxMC4zNTU0IDcuMzM3NTQgMTAuMTI5NSA3LjI1MDk1IDkuOTQwMzRDNy4xNjQzNSA5Ljc0NzcgNy4xMzQyNCA5LjQ5OTAxIDcuMTYwNTkgOS4xOTQyOUw3LjI2MjI0IDcuOTgwNjVDNy4yNjk3NyA3LjkwNzEgNy4yMzIxMiA3Ljg1NDU2IDcuMTQ5MjkgNy44MjMwNEM3LjA2NjQ3IDcuNzkxNTEgNi45ODU1MiA3LjgwOTAzIDYuOTA2NDYgNy44NzU1N0w2LjQ3MTYxIDguMjQzMzRMNi4zNDE3MiA5LjY3MjM5QzYuMzIyODkgOS44NDc1MiA2LjI2NDU0IDkuOTc4ODcgNi4xNjY2NSAxMC4wNjY0QzYuMDY4NzYgMTAuMTU0IDUuOTM4ODcgMTAuMTkyNSA1Ljc3Njk4IDEwLjE4MkM1LjYxMTMyIDEwLjE3NSA1LjQ4MzMxIDEwLjExOSA1LjM5Mjk1IDEwLjAxMzlDNS4zMDYzNiA5LjkwODgyIDUuMjY4NzEgOS43NzM5NyA1LjI4MDAxIDkuNjA5MzVMNS4zODczMSA4LjMwNjM5QzUuNDAyMzcgOC4xMjc3NiA1LjQzODEzIDcuOTc1NCA1LjQ5NDYxIDcuODQ5MzFDNS41NTQ4NSA3LjcyMzIxIDUuNjYwMjYgNy41OTE4NyA1LjgxMDg2IDcuNDU1MjdMNi43MTQ0NSA2LjYyNTE2QzcuMDA0MzUgNi4zNjI0NyA3LjI2OTc3IDYuMTYxMDcgNy41MTA3MyA2LjAyMDk2QzcuNzUxNjggNS44NzczNiA4LjAyODQxIDUuODA1NTYgOC4zNDA5IDUuODA1NTZDOC43NTg4IDUuODA1NTYgOS4wNzg4MiA1LjkzMzQgOS4zMDA5NSA2LjE4OTA5QzkuNTI2ODUgNi40NDQ3OCA5LjYyNDc0IDYuNzYxNzYgOS41OTQ2MiA3LjE0MDA0TDkuNDc2MDIgOC43MzE5NUM5LjQ1MzQzIDkuMDE1NjYgOS40MTk1NSA5LjI2MjU5IDkuMzc0MzcgOS40NzI3NUM5LjMyOTE5IDkuNjgyOSA5LjI1Mzg5IDkuOTI5ODMgOS4xNDg0NyAxMC4yMTM1TDkuMDkyIDEwLjM2MDZMOS44NjU2OSAxMS4zNzk5QzkuOTIyMTcgMTEuNDUzNCA5Ljk4MDUyIDExLjUzNCAxMC4wNDA4IDExLjYyMTZDMTAuMTAxIDExLjcwOTEgMTAuMTUzNyAxMS43OTY3IDEwLjE5ODkgMTEuODg0M0wxMS40MDc0IDE0LjE2NDRDMTEuNTA1MyAxNC4zNTAxIDExLjUyNDEgMTQuNTExMiAxMS40NjM5IDE0LjY0NzhDMTEuNDAzNyAxNC43ODQ0IDExLjMwMiAxNC44ODI1IDExLjE1ODkgMTQuOTQyQzExLjAxOTYgMTUuMDAxNSAxMC44NzA5IDE1LjAxMDMgMTAuNzEyOCAxNC45NjgzQzEwLjU1ODQgMTQuOTI2MiAxMC40MzYxIDE0LjgxNzcgMTAuMzQ1NyAxNC42NDI1Wk0xMi40MDcgNy45NjQ4OUMxMi41ODQgNy45NjQ4OSAxMi43MjcgOC4wMTA0MiAxMi44MzYyIDguMTAxNDlDMTIuOTQ1NCA4LjE4OTA1IDEzIDguMzA2MzkgMTMgOC40NTM1QzEzIDguNjExMTEgMTIuOTQ1NCA4LjczMzcgMTIuODM2MiA4LjgyMTI3QzEyLjczMDggOC45MDg4MyAxMi41ODc3IDguOTUyNjEgMTIuNDA3IDguOTUyNjFIMTEuMTMwN0MxMC45NTM4IDguOTUyNjEgMTAuODE0NSA4LjkzNjg1IDEwLjcxMjggOC45MDUzM0MxMC42MTEyIDguODcwMyAxMC41MTMzIDguODA3MjYgMTAuNDE5MSA4LjcxNjE5TDEwLjA1MjEgOC4zNzk5NEwxMC4xNDI0IDcuMDQwMjFMMTEuMDM0NyA3Ljk2NDg5SDEyLjQwN1pNOS4wMDE2NCA1LjMxMTY5QzguNzcxOTggNS4zMTE2OSA4LjU2MzAzIDUuMjYwOTEgOC4zNzQ3OCA1LjE1OTMzQzguMTg2NTMgNS4wNTQyNiA4LjAzNTk0IDQuOTE0MTUgNy45MjI5OSA0LjczOTAzQzcuODEzODEgNC41NjM5IDcuNzU5MjEgNC4zNjk1IDcuNzU5MjEgNC4xNTU4NUM3Ljc1OTIxIDMuOTQyMTkgNy44MTM4MSAzLjc0NzggNy45MjI5OSAzLjU3MjY3QzguMDM1OTQgMy4zOTc1NCA4LjE4NjUzIDMuMjU5MTkgOC4zNzQ3OCAzLjE1NzYyQzguNTYzMDMgMy4wNTI1NCA4Ljc3MTk4IDMgOS4wMDE2NCAzQzkuMjMxMyAzIDkuNDQwMjYgMy4wNTI1NCA5LjYyODUgMy4xNTc2MkM5LjgxNjc1IDMuMjU5MTkgOS45NjU0NiAzLjM5NzU0IDEwLjA3NDYgMy41NzI2N0MxMC4xODc2IDMuNzQ3OCAxMC4yNDQxIDMuOTQyMTkgMTAuMjQ0MSA0LjE1NTg1QzEwLjI0NDEgNC4zNjk1IDEwLjE4NzYgNC41NjM5IDEwLjA3NDYgNC43MzkwM0M5Ljk2NTQ2IDQuOTE0MTUgOS44MTY3NSA1LjA1NDI2IDkuNjI4NSA1LjE1OTMzQzkuNDQwMjYgNS4yNjA5MSA5LjIzMTMgNS4zMTE2OSA5LjAwMTY0IDUuMzExNjlaIn0pfSl9ZnVuY3Rpb24gSzMoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIyNiAxIDEyIDE0IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik0zMy4yNDM3IDQuNTg0NTlDMzMuMDAwOCA0LjU4NDU5IDMyLjc4MTcgNC41MjcyOCAzMi41ODY2IDQuNDEyNjhDMzIuMzkxNSA0LjI5NDEyIDMyLjIzNDIgNC4xMzgwMSAzMi4xMTQ3IDMuOTQ0MzdDMzEuOTk5MiAzLjc0Njc3IDMxLjk0MTQgMy41Mjk0MSAzMS45NDE0IDMuMjkyMjlDMzEuOTQxNCAzLjA1MTIyIDMxLjk5OTIgMi44MzM4NyAzMi4xMTQ3IDIuNjQwMjJDMzIuMjM0MiAyLjQ0NjU3IDMyLjM5MTUgMi4yOTI0NSAzMi41ODY2IDIuMTc3ODRDMzIuNzgxNyAyLjA1OTI4IDMzLjAwMDggMiAzMy4yNDM3IDJDMzMuNDgyNiAyIDMzLjY5OTcgMi4wNTkyOCAzMy44OTQ4IDIuMTc3ODRDMzQuMDkzOSAyLjI5MjQ1IDM0LjI1MTIgMi40NDY1NyAzNC4zNjY3IDIuNjQwMjJDMzQuNDg2MiAyLjgzMzg3IDM0LjU0NTkgMy4wNTEyMiAzNC41NDU5IDMuMjkyMjlDMzQuNTQ1OSAzLjUyOTQxIDM0LjQ4NjIgMy43NDY3NyAzNC4zNjY3IDMuOTQ0MzdDMzQuMjUxMiA0LjEzODAxIDM0LjA5MzkgNC4yOTQxMiAzMy44OTQ4IDQuNDEyNjhDMzMuNjk5NyA0LjUyNzI4IDMzLjQ4MjYgNC41ODQ1OSAzMy4yNDM3IDQuNTg0NTlaTTMxLjIwMDcgOS43NDE5MUMzMS4wNzMzIDkuNjcwNzcgMzAuOTQxOSA5LjU5NTY4IDMwLjgwNjUgOS41MTY2NEMzMC42NzUgOS40Mzc2IDMwLjU1OTYgOS4zNDI3NiAzMC40NiA5LjIzMjFDMzAuMzYwNCA5LjExNzQ5IDMwLjI5MjcgOC45NzcyIDMwLjI1NjkgOC44MTEyMkMzMC4yMjUgOC42NDEyOCAzMC4yNDQ5IDguNDI5ODUgMzAuMzE2NiA4LjE3NjkzTDMwLjgwNjUgNi40ODE1M0MzMC44MzgzIDYuMzY2OTIgMzAuODE4NCA2LjI3OTk4IDMwLjc0NjcgNi4yMjA3QzMwLjY3OSA2LjE1NzQ3IDMwLjU5NzQgNi4xMjk4MSAzMC41MDE4IDYuMTM3NzFMMjkuNjU5NSA2LjE5Njk5TDI5LjQwMjcgNy45MjIwMkMyOS4zNzg4IDguMTA3NzcgMjkuMzE1MSA4LjI0NjA5IDI5LjIxMTUgOC4zMzY5OEMyOS4xMDggOC40Mjc4OCAyOC45NzI2IDguNDY1NDIgMjguODA1MyA4LjQ0OTYxQzI4LjY0MiA4LjQzMzggMjguNTE4NiA4LjM2NjYyIDI4LjQzNDkgOC4yNDgwNkMyOC4zNTEzIDguMTI5NSAyOC4zMjE0IDcuOTc3MzUgMjguMzQ1MyA3Ljc5MTYxTDI4LjYyNjEgNS42ODEyNkMyOC42NSA1LjUxMTMyIDI4LjcxNTcgNS4zNzQ5OCAyOC44MjMyIDUuMjcyMjNDMjguOTMwOCA1LjE2OTQ4IDI5LjA2ODEgNS4xMTIxNyAyOS4yMzU0IDUuMTAwMzJMMzEuMzMyMSA0Ljk1MjEyQzMxLjg4MTcgNC45MTI2IDMyLjMzNTcgNC45Njk5IDMyLjY5NDEgNS4xMjQwM0MzMy4wNTI1IDUuMjc4MTYgMzMuMzY3MSA1LjUzODk5IDMzLjYzNzkgNS45MDY1MkwzNC42NzE0IDcuMzIzM0wzNi4xNzA4IDYuNjY1M0MzNi4zMzggNi41OTAyMSAzNi40ODkzIDYuNTc0NCAzNi42MjQ4IDYuNjE3ODdDMzYuNzYwMiA2LjY1NzM5IDM2Ljg2NTcgNi43NTIyNCAzNi45NDE0IDYuOTAyNDJDMzcuMDEzIDcuMDUyNTkgMzcuMDE5IDcuMTk0ODYgMzYuOTU5MyA3LjMyOTIzQzM2LjkwMzUgNy40NjM2IDM2Ljc5MiA3LjU2ODMyIDM2LjYyNDggNy42NDM0MUwzNC43MzExIDguNDc5MjVDMzQuNjAzNyA4LjUzODUzIDM0LjQ3NDMgOC41NTAzOSAzNC4zNDI4IDguNTE0ODJDMzQuMjE1NCA4LjQ3NTMgMzQuMTEzOCA4LjQwMDIxIDM0LjAzODIgOC4yODk1NkwzMy4zODExIDcuMzM1MTZDMzMuMzEzNCA3LjI0MDMxIDMzLjIyOTggNy4xOTg4MSAzMy4xMzAyIDcuMjEwNjdDMzMuMDMwNiA3LjIyMjUzIDMyLjk2NDkgNy4yODM3OCAzMi45MzMxIDcuMzk0NDRMMzIuNDkxIDguOTI5NzhMMzQuNzMxMSAxMC4zODgxQzM0Ljg0MjYgMTAuNDU5MiAzNC45MjIzIDEwLjU1NiAzNC45NzAxIDEwLjY3ODVDMzUuMDE3OSAxMC44MDEgMzUuMDI5OCAxMC45MjU1IDM1LjAwNTkgMTEuMDUyQzM0Ljk4NiAxMS4xNzQ1IDM0LjkyODIgMTEuMjc1MyAzNC44MzI3IDExLjM1NDNMMzIuNzcxOCAxMy4wOTcxQzMyLjYwODUgMTMuMjM1NCAzMi40NDUyIDEzLjI5ODcgMzIuMjgxOSAxMy4yODY4QzMyLjEyMjYgMTMuMjc1IDMxLjk5MzIgMTMuMjEzNyAzMS44OTM3IDEzLjEwMzFDMzEuNzk4MSAxMi45OTY0IDMxLjc1NDMgMTIuODY1OSAzMS43NjIyIDEyLjcxMThDMzEuNzcwMiAxMi41NTM3IDMxLjg1MzggMTIuNDA3NSAzMi4wMTMxIDEyLjI3MzFMMzMuNDg4NiAxMS4wMTY0TDMxLjIwMDcgOS43NDE5MVpNMjcuMjA0NCAxNC44NjM3QzI3LjA4NDkgMTQuNzU3IDI3LjAxNzIgMTQuNjE4NiAyNy4wMDEzIDE0LjQ0ODdDMjYuOTg5MyAxNC4yNzg4IDI3LjA2MSAxNC4xMTY3IDI3LjIxNjMgMTMuOTYyNkwyOS4yMjM1IDExLjk3NjdMMjkuOTM0MyA5LjQ4MTA4QzMwLjA0MTggOS42MTU0NCAzMC4xNzUzIDkuNzQ1ODYgMzAuMzM0NSA5Ljg3MjMyQzMwLjQ5NzggOS45OTQ4MyAzMC42OTMgMTAuMTE3MyAzMC45MiAxMC4yMzk5TDMxLjExNzEgMTAuMzQ2NkwzMC4zMDQ3IDEyLjQzMzJDMzAuMjUyOSAxMi41NTU3IDMwLjIwOTEgMTIuNjQwNyAzMC4xNzMzIDEyLjY4ODFDMzAuMTQxNCAxMi43MzU1IDMwLjA4NTYgMTIuNzk4OCAzMC4wMDYgMTIuODc3OEwyOC4wNzA2IDE0Ljc4MDdDMjcuOTE5MiAxNC45MjY5IDI3Ljc2MzkgMTUgMjcuNjA0NiAxNUMyNy40NDkzIDE1IDI3LjMxNTkgMTQuOTU0NiAyNy4yMDQ0IDE0Ljg2MzdaIn0pfSl9ZnVuY3Rpb24gWjMoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0OSAzIDE2IDEyIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik01Ny4wMDI4IDExLjk0OUM1Ni44NDggMTEuOTQ5IDU2LjcxNzIgMTEuODk4NyA1Ni42MTAzIDExLjc5OEM1Ni41MDM1IDExLjY5MzkgNTYuNDUwMSAxMS41NzA3IDU2LjQ1MDEgMTEuNDI4NFY5LjAyODYzTDU0LjQyMTYgNy4xMDc3NkM1NC4yMjI3IDYuOTIwMzUgNTQuMDk1NSA2LjY5ODI1IDU0LjA0MDMgNi40NDE0NEM1My45ODUgNi4xODExNiA1NC4wMTA4IDUuOTI3ODIgNTQuMTE3NiA1LjY4MTQyQzU0LjIyODIgNS40Mzg0OSA1NC4zOTc3IDUuMjQ0MTQgNTQuNjI2MSA1LjA5ODM5QzU0Ljg1ODMgNC45NDkxNiA1NS4xMTYyIDQuODc0NTQgNTUuMzk5OSA0Ljg3NDU0SDU4LjExMzdDNTguNDIzMiA0Ljg3NDU0IDU4LjY4NDggNC45NzY5MiA1OC44OTg1IDUuMTgxNjhDNTkuMTE1OSA1LjM4Mjk2IDU5LjIyNDYgNS42MjkzNiA1OS4yMjQ2IDUuOTIwODdWNy43NjM2Nkg2MC44OTkzQzYxLjA1MDQgNy43NjM2NiA2MS4xNzk0IDcuODEzOTkgNjEuMjg2MiA3LjkxNDYzQzYxLjM5MzEgOC4wMTUyNyA2MS40NDY1IDguMTM4NDcgNjEuNDQ2NSA4LjI4NDIzQzYxLjQ0NjUgOC40MjY1MSA2MS4zOTMxIDguNTQ3OTggNjEuMjg2MiA4LjY0ODYyQzYxLjE3OTQgOC43NDkyNiA2MS4wNTA0IDguNzk5NTggNjAuODk5MyA4Ljc5OTU4SDU4LjY3MTlDNTguNTIwOSA4Ljc5OTU4IDU4LjM5MDEgOC43NDkyNiA1OC4yNzk1IDguNjQ4NjJDNTguMTcyNyA4LjU0Nzk4IDU4LjExOTIgOC40MjY1MSA1OC4xMTkyIDguMjg0MjNWNi45ODgwM0M1OC4xMTkyIDYuOTE4NjIgNTguMDk5IDYuODU0NDIgNTguMDU4NCA2Ljc5NTQyQzU4LjAxNzkgNi43MzI5NSA1Ny45NDQyIDYuNzAxNzIgNTcuODM3MyA2LjcwMTcySDU2LjA2MzJDNTUuOTkzMiA2LjcwMTcyIDU1Ljk0NTMgNi43Mjk0OCA1NS45MTk1IDYuNzg1MDFDNTUuODk3NCA2LjgzNzA2IDU1LjkwODQgNi44ODczOSA1NS45NTI2IDYuOTM1OTdMNTcuNDAwNyA4LjQ1NjAxQzU3LjUwMzkgOC41NjM2IDU3LjU1NTUgOC42ODE1OSA1Ny41NTU1IDguODA5OTlWMTEuNDI4NEM1Ny41NTU1IDExLjU3MDcgNTcuNTAwMiAxMS42OTM5IDU3LjM4OTcgMTEuNzk4QzU3LjI4MjggMTEuODk4NyA1Ny4xNTM4IDExLjk0OSA1Ny4wMDI4IDExLjk0OVpNNTMuMDAxMiAxNEM1Mi41ODQ4IDE0IDUyLjE5NDIgMTMuOTI3MSA1MS44Mjk1IDEzLjc4MTRDNTEuNDY4NCAxMy42MzU2IDUxLjE0OTYgMTMuNDMyNiA1MC44NzMzIDEzLjE3MjNDNTAuNjAwNiAxMi45MTIgNTAuMzg2OSAxMi42MTE4IDUwLjIzMjEgMTIuMjcxN0M1MC4wNzc0IDExLjkyODIgNTAgMTEuNTYwMyA1MCAxMS4xNjgxQzUwIDEwLjc3NiA1MC4wNzc0IDEwLjQwOTkgNTAuMjMyMSAxMC4wNjk4QzUwLjM4NjkgOS43MjYxOCA1MC42MDA2IDkuNDI0MjYgNTAuODczMyA5LjE2Mzk4QzUxLjE0OTYgOC45MDM3IDUxLjQ2ODQgOC43MDA2OCA1MS44Mjk1IDguNTU0OTJDNTIuMTk0MiA4LjQwOTE2IDUyLjU4NDggOC4zMzYyOCA1My4wMDEyIDguMzM2MjhDNTMuNDIxMiA4LjMzNjI4IDUzLjgxMTggOC40MDkxNiA1NC4xNzI5IDguNTU0OTJDNTQuNTM3NyA4LjcwMDY4IDU0Ljg1NjQgOC45MDM3IDU1LjEyOTEgOS4xNjM5OEM1NS40MDU0IDkuNDI0MjYgNTUuNjIxIDkuNzI2MTggNTUuNzc1OCAxMC4wNjk4QzU1LjkzMDUgMTAuNDA5OSA1Ni4wMDc5IDEwLjc3NiA1Ni4wMDc5IDExLjE2ODFDNTYuMDA3OSAxMS41NjAzIDU1LjkzMDUgMTEuOTI4MiA1NS43NzU4IDEyLjI3MTdDNTUuNjIxIDEyLjYxMTggNTUuNDA1NCAxMi45MTIgNTUuMTI5MSAxMy4xNzIzQzU0Ljg1NjQgMTMuNDMyNiA1NC41Mzc3IDEzLjYzNTYgNTQuMTcyOSAxMy43ODE0QzUzLjgxMTggMTMuOTI3MSA1My40MjEyIDE0IDUzLjAwMTIgMTRaTTUzLjAwMTIgMTMuMjY2QzUzLjQxMDIgMTMuMjY2IDUzLjc4MjMgMTMuMTcwNiA1NC4xMTc2IDEyLjk3OTdDNTQuNDU2NiAxMi43OTIzIDU0LjcyNTYgMTIuNTQwNyA1NC45MjQ2IDEyLjIyNDlDNTUuMTI3MyAxMS45MDU2IDU1LjIyODYgMTEuNTUzNCA1NS4yMjg2IDExLjE2ODFDNTUuMjI4NiAxMC43ODI5IDU1LjEyNzMgMTAuNDMyNCA1NC45MjQ2IDEwLjExNjZDNTQuNzI1NiA5Ljc5NzMzIDU0LjQ1NjYgOS41NDM5OSA1NC4xMTc2IDkuMzU2NTlDNTMuNzgyMyA5LjE2NTcxIDUzLjQxMDIgOS4wNzAyOCA1My4wMDEyIDkuMDcwMjhDNTIuNTk1OSA5LjA3MDI4IDUyLjIyMzcgOS4xNjU3MSA1MS44ODQ3IDkuMzU2NTlDNTEuNTQ5NCA5LjU0Mzk5IDUxLjI4MDQgOS43OTczMyA1MS4wNzc4IDEwLjExNjZDNTAuODc4OCAxMC40MzI0IDUwLjc3OTMgMTAuNzgyOSA1MC43NzkzIDExLjE2ODFDNTAuNzc5MyAxMS41NTM0IDUwLjg3ODggMTEuOTA1NiA1MS4wNzc4IDEyLjIyNDlDNTEuMjgwNCAxMi41NDA3IDUxLjU0OTQgMTIuNzkyMyA1MS44ODQ3IDEyLjk3OTdDNTIuMjIzNyAxMy4xNzA2IDUyLjU5NTkgMTMuMjY2IDUzLjAwMTIgMTMuMjY2Wk02Mi40ODAxIDkuNjExNjZDNjIuMzYyMiA5LjUxNDQ5IDYyLjMwMTQgOS40MTU1OCA2Mi4yOTc3IDkuMzE0OTRDNjIuMjk3NyA5LjIxMDgzIDYyLjMzMDggOS4xMjQwNyA2Mi4zOTcyIDkuMDU0NjZDNjIuNDY3MiA4Ljk4NTI1IDYyLjU1MzggOC45NDUzNCA2Mi42NTY5IDguOTM0OTNDNjIuNzYzOCA4LjkyMTA1IDYyLjg2ODggOC45NTU3NSA2Mi45NzIgOS4wMzkwNEM2My4yODg5IDkuMzAyNzkgNjMuNTM5NCA5LjYxNjg3IDYzLjcyMzYgOS45ODEyNkM2My45MDc5IDEwLjM0NTcgNjQgMTAuNzQxMyA2NCAxMS4xNjgxQzY0IDExLjU2MDMgNjMuOTIyNiAxMS45MjgyIDYzLjc2NzkgMTIuMjcxN0M2My42MTMxIDEyLjYxMTggNjMuMzk3NiAxMi45MTIgNjMuMTIxMiAxMy4xNzIzQzYyLjg0ODUgMTMuNDMyNiA2Mi41Mjk4IDEzLjYzNTYgNjIuMTY1IDEzLjc4MTRDNjEuODAzOSAxMy45MjcxIDYxLjQxNTIgMTQgNjAuOTk4OCAxNEM2MC41ODI0IDE0IDYwLjE5MTkgMTMuOTI3MSA1OS44MjcxIDEzLjc4MTRDNTkuNDYyMyAxMy42MzU2IDU5LjE0MTcgMTMuNDMyNiA1OC44NjU0IDEzLjE3MjNDNTguNTkyNyAxMi45MTIgNTguMzc5IDEyLjYxMTggNTguMjI0MiAxMi4yNzE3QzU4LjA2OTUgMTEuOTI4MiA1Ny45OTIxIDExLjU2MDMgNTcuOTkyMSAxMS4xNjgxQzU3Ljk5MjEgMTAuOTYzNCA1OC4wMTQyIDEwLjc2NTYgNTguMDU4NCAxMC41NzQ3QzU4LjEwNjMgMTAuMzgwNCA1OC4xNzI3IDEwLjE5MyA1OC4yNTc0IDEwLjAxMjVDNTguMzA5IDkuOTAxNDQgNTguMzgwOCA5LjgzMDMgNTguNDczIDkuNzk5MDZDNTguNTY4OCA5Ljc2NDM2IDU4LjY2MjcgOS43NjQzNiA1OC43NTQ4IDkuNzk5MDZDNTguODUwNiA5LjgzMDMgNTguOTIyNSA5Ljg5Mjc2IDU4Ljk3MDQgOS45ODY0N0M1OS4wMTgzIDEwLjA4MDIgNTkuMDEwOSAxMC4xOTgyIDU4Ljk0ODMgMTAuMzQwNEM1OC44MzA0IDEwLjYwMDcgNTguNzcxNCAxMC44NzY2IDU4Ljc3MTQgMTEuMTY4MUM1OC43NzE0IDExLjU1MzQgNTguODcwOSAxMS45MDU2IDU5LjA2OTkgMTIuMjI0OUM1OS4yNzI1IDEyLjU0MDcgNTkuNTQxNSAxMi43OTIzIDU5Ljg3NjggMTIuOTc5N0M2MC4yMTU4IDEzLjE3MDYgNjAuNTg5OCAxMy4yNjYgNjAuOTk4OCAxMy4yNjZDNjEuNDA3OCAxMy4yNjYgNjEuNzggMTMuMTcwNiA2Mi4xMTUzIDEyLjk3OTdDNjIuNDUwNiAxMi43OTIzIDYyLjcxNzcgMTIuNTQwNyA2Mi45MTY3IDEyLjIyNDlDNjMuMTE5NCAxMS45MDU2IDYzLjIyMDcgMTEuNTUzNCA2My4yMjA3IDExLjE2ODFDNjMuMjIwNyAxMC44NTkzIDYzLjE1MjUgMTAuNTcxMiA2My4wMTYyIDEwLjMwNEM2Mi44ODM1IDEwLjAzMzMgNjIuNzA0OCA5LjgwMjUzIDYyLjQ4MDEgOS42MTE2NlpNNjAuOTk4OCA2LjI3NDg2QzYwLjc3NCA2LjI3NDg2IDYwLjU2OTUgNi4yMjQ1NCA2MC4zODUzIDYuMTIzODlDNjAuMjAxMSA2LjAxOTc4IDYwLjA1MzcgNS44ODI3IDU5Ljk0MzIgNS43MTI2NUM1OS44MzYzIDUuNTM5MTMgNTkuNzgyOSA1LjM0NjUyIDU5Ljc4MjkgNS4xMzQ4M0M1OS43ODI5IDQuOTI2NiA1OS44MzYzIDQuNzM3NDYgNTkuOTQzMiA0LjU2NzQxQzYwLjA1MzcgNC4zOTM4OSA2MC4yMDExIDQuMjU2ODEgNjAuMzg1MyA0LjE1NjE3QzYwLjU2OTUgNC4wNTIwNiA2MC43NzQgNCA2MC45OTg4IDRDNjEuMjE5OSA0IDYxLjQyMDcgNC4wNTIwNiA2MS42MDEzIDQuMTU2MTdDNjEuNzgxOCA0LjI1NjgxIDYxLjkyNTUgNC4zOTM4OSA2Mi4wMzI0IDQuNTY3NDFDNjIuMTQyOSA0LjczNzQ2IDYyLjE5ODIgNC45MjY2IDYyLjE5ODIgNS4xMzQ4M0M2Mi4xOTgyIDUuMzQ2NTIgNjIuMTQyOSA1LjUzOTEzIDYyLjAzMjQgNS43MTI2NUM2MS45MjU1IDUuODgyNyA2MS43ODE4IDYuMDE5NzggNjEuNjAxMyA2LjEyMzg5QzYxLjQyMDcgNi4yMjQ1NCA2MS4yMTk5IDYuMjc0ODYgNjAuOTk4OCA2LjI3NDg2WiJ9KX0pfWZ1bmN0aW9uIFgzKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNzAgNSAxOCA5IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik04NS41NzIgMTIuMTAzOEM4Ni4wNiAxMi4xMDM4IDg2LjQyMDcgMTEuOTg5MiA4Ni42NTQyIDExLjc2MDFDODYuODg0NyAxMS41MjgxIDg3IDExLjE2NDEgODcgMTAuNjY4MVYxMC4xMTEyQzg3IDkuNzY5MDEgODYuOTIwNyA5LjQ2MzAyIDg2Ljc2MiA5LjE5MzI5Qzg2LjYwMzMgOC45MjA2NSA4Ni4zNzU4IDguNjk3MzMgODYuMDc5NCA4LjUyMzMxQzg1Ljc4MDEgOC4zNDkyOSA4NS40MjIzIDguMjM3NjIgODUuMDA2MiA4LjE4ODMyTDgzLjAxNjggNy45NTMzOUw4MS4xOTgxIDYuODQ4MzVDODAuOTIyNyA2LjY4MDEzIDgwLjY2MDggNi41NDIzNyA4MC40MTIzIDYuNDM1MDVDODAuMTYwOCA2LjMyNDg0IDc5Ljg5NzQgNi4yMzc4MyA3OS42MjE5IDYuMTc0MDJDNzkuMzQ2NSA2LjExMDIxIDc5LjAzODIgNi4wNjUyNiA3OC42OTY5IDYuMDM5MTVDNzguMzUyNiA2LjAxMzA1IDc3Ljk1MTQgNiA3Ny40OTM0IDZINzYuODEwOEM3Ni4zODg3IDYgNzUuOTk1IDYuMDQ5MzEgNzUuNjI5OCA2LjE0NzkyQzc1LjI2MTYgNi4yNDM2MyA3NC45MTg4IDYuMzcxMjUgNzQuNjAxNSA2LjUzMDc2Qzc0LjI4MTEgNi42OTAyOCA3My45ODYyIDYuODY1NzYgNzMuNzE2OCA3LjA1NzE4QzczLjQ0NDQgNy4yNDg2IDczLjE5NTkgNy40MzcxMiA3Mi45NzE0IDcuNjIyNzVMNzIuMjU3NCA3Ljg1MzMzQzcxLjgzMjMgNy45ODY3NCA3MS41MTY0IDguMTgzOTcgNzEuMzA5OSA4LjQ0NUM3MS4xMDMzIDguNzAzMTMgNzEgOS4wMzM3NyA3MSA5LjQzNjkyVjEwLjY0MkM3MSAxMS4xNDY3IDcxLjExNTMgMTEuNTE2NSA3MS4zNDU4IDExLjc1MTRDNzEuNTc2MyAxMS45ODYzIDcxLjkzNyAxMi4xMDM4IDcyLjQyOCAxMi4xMDM4SDcyLjcxNTRDNzIuNzAwNCAxMi4wMzcxIDcyLjY4ODUgMTEuOTcwNCA3Mi42Nzk1IDExLjkwMzdDNzIuNjcwNSAxMS44MzQxIDcyLjY2NiAxMS43NjQ1IDcyLjY2NiAxMS42OTQ4QzcyLjY2NiAxMS4zNTU1IDcyLjc0OTggMTEuMDQ5NSA3Mi45MTc1IDEwLjc3NjlDNzMuMDg1MSAxMC41MDQyIDczLjMxMTIgMTAuMjg4MiA3My41OTU2IDEwLjEyODdDNzMuODc3IDkuOTY2MjMgNzQuMTkyOCA5Ljg4NTAyIDc0LjU0MzEgOS44ODUwMkM3NC44OTA0IDkuODg1MDIgNzUuMjA2MiA5Ljk2NjIzIDc1LjQ5MDYgMTAuMTI4N0M3NS43NzIgMTAuMjg4MiA3NS45OTY1IDEwLjUwNDIgNzYuMTY0MiAxMC43NzY5Qzc2LjMzMTggMTEuMDQ5NSA3Ni40MTU3IDExLjM1NTUgNzYuNDE1NyAxMS42OTQ4Qzc2LjQxNTcgMTEuNzY0NSA3Ni40MTEyIDExLjgzNDEgNzYuNDAyMiAxMS45MDM3Qzc2LjM5MzIgMTEuOTcwNCA3Ni4zODI3IDEyLjAzNzEgNzYuMzcwOCAxMi4xMDM4SDgxLjYzODJDODEuNjIwMyAxMi4wMzcxIDgxLjYwODMgMTEuOTcwNCA4MS42MDIzIDExLjkwMzdDODEuNTkzMyAxMS44MzQxIDgxLjU4ODggMTEuNzY0NSA4MS41ODg4IDExLjY5NDhDODEuNTg4OCAxMS4zNTU1IDgxLjY3MjcgMTEuMDQ5NSA4MS44NDAzIDEwLjc3NjlDODIuMDA1IDEwLjUwNDIgODIuMjI5NSAxMC4yODgyIDgyLjUxMzkgMTAuMTI4N0M4Mi43OTUzIDkuOTY2MjMgODMuMTExMSA5Ljg4NTAyIDgzLjQ2MTQgOS44ODUwMkM4My44MTE3IDkuODg1MDIgODQuMTI5IDkuOTY2MjMgODQuNDEzNCAxMC4xMjg3Qzg0LjY5NDggMTAuMjg4MiA4NC45MTk0IDEwLjUwNDIgODUuMDg3IDEwLjc3NjlDODUuMjUxNyAxMS4wNDk1IDg1LjMzNCAxMS4zNTU1IDg1LjMzNCAxMS42OTQ4Qzg1LjMzNCAxMS43NjQ1IDg1LjMzMSAxMS44MzQxIDg1LjMyNSAxMS45MDM3Qzg1LjMxNiAxMS45NzA0IDg1LjMwNDEgMTIuMDM3MSA4NS4yODkxIDEyLjEwMzhIODUuNTcyWk04My40NjE0IDEzQzgzLjcxMjkgMTMgODMuOTQwNCAxMi45NDIgODQuMTQ0IDEyLjgyNkM4NC4zNDc2IDEyLjcxIDg0LjUwOTIgMTIuNTUzMyA4NC42MjkgMTIuMzU2MUM4NC43NDg3IDEyLjE1ODkgODQuODA4NiAxMS45Mzg1IDg0LjgwODYgMTEuNjk0OEM4NC44MDg2IDExLjQ1MTIgODQuNzQ4NyAxMS4yMzA4IDg0LjYyOSAxMS4wMzM2Qzg0LjUwOTIgMTAuODM2MyA4NC4zNDc2IDEwLjY3OTcgODQuMTQ0IDEwLjU2MzdDODMuOTQwNCAxMC40NDc3IDgzLjcxMjkgMTAuMzg5NyA4My40NjE0IDEwLjM4OTdDODMuMjA2OSAxMC4zODk3IDgyLjk3NzkgMTAuNDQ3NyA4Mi43NzQzIDEwLjU2MzdDODIuNTcwOCAxMC42Nzk3IDgyLjQwOTEgMTAuODM2MyA4Mi4yODk0IDExLjAzMzZDODIuMTY5NiAxMS4yMzA4IDgyLjEwOTcgMTEuNDUxMiA4Mi4xMDk3IDExLjY5NDhDODIuMTA5NyAxMS45Mzg1IDgyLjE2OTYgMTIuMTU4OSA4Mi4yODk0IDEyLjM1NjFDODIuNDA5MSAxMi41NTMzIDgyLjU3MDggMTIuNzEgODIuNzc0MyAxMi44MjZDODIuOTc3OSAxMi45NDIgODMuMjA2OSAxMyA4My40NjE0IDEzWk03NC41NDMxIDEzQzc0Ljc5NDYgMTMgNzUuMDIyMSAxMi45NDIgNzUuMjI1NyAxMi44MjZDNzUuNDI5MiAxMi43MSA3NS41OTA5IDEyLjU1MzMgNzUuNzEwNiAxMi4zNTYxQzc1LjgzMDQgMTIuMTU4OSA3NS44OTAzIDExLjkzODUgNzUuODkwMyAxMS42OTQ4Qzc1Ljg5MDMgMTEuNDUxMiA3NS44MzA0IDExLjIzMDggNzUuNzEwNiAxMS4wMzM2Qzc1LjU5MDkgMTAuODM2MyA3NS40MjkyIDEwLjY3OTcgNzUuMjI1NyAxMC41NjM3Qzc1LjAyMjEgMTAuNDQ3NyA3NC43OTQ2IDEwLjM4OTcgNzQuNTQzMSAxMC4zODk3Qzc0LjI4ODYgMTAuMzg5NyA3NC4wNTk2IDEwLjQ0NzcgNzMuODU2IDEwLjU2MzdDNzMuNjUyNCAxMC42Nzk3IDczLjQ5MDggMTAuODM2MyA3My4zNzEgMTEuMDMzNkM3My4yNTEzIDExLjIzMDggNzMuMTkxNCAxMS40NTEyIDczLjE5MTQgMTEuNjk0OEM3My4xOTE0IDExLjkzODUgNzMuMjUxMyAxMi4xNTg5IDczLjM3MSAxMi4zNTYxQzczLjQ5MDggMTIuNTUzMyA3My42NTI0IDEyLjcxIDczLjg1NiAxMi44MjZDNzQuMDU5NiAxMi45NDIgNzQuMjg4NiAxMyA3NC41NDMxIDEzWiJ9KX0pfWZ1bmN0aW9uIHYwKHtzaXplOiQ9MTgsc3Ryb2tlV2lkdGg6UT0yfSl7cmV0dXJuIEsoVzIse3NpemU6JCxzdHJva2VXaWR0aDpRfSl9dmFyICQ5PSJBY2Nlc3NpYmlsaXR5IHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiI7ZnVuY3Rpb24gWDUoJCl7cmV0dXJuICQ/LmVycm9ycz8uaW5jbHVkZXMoJDkpPz8hMX1mdW5jdGlvbiBZNSgkLFEpe2lmKCQ9PT1RKXJldHVybiEwO2lmKCQuaWQhPT1RLmlkfHwkLnBhdGghPT1RLnBhdGh8fCQubGFiZWwhPT1RLmxhYmVsfHwkLnZhbHVlIT09US52YWx1ZXx8JC5yb2xlIT09US5yb2xlfHwkLnR5cGUhPT1RLnR5cGV8fCQuZW5hYmxlZCE9PVEuZW5hYmxlZClyZXR1cm4hMTtsZXQgSj0kLmZyYW1lLFo9US5mcmFtZTtyZXR1cm4gSj09PVp8fEoueD09PVoueCYmSi55PT09Wi55JiZKLndpZHRoPT09Wi53aWR0aCYmSi5oZWlnaHQ9PT1aLmhlaWdodH1mdW5jdGlvbiBxNSgkLFEpe2xldCBKPSQubGFiZWx8fCQucm9sZXx8YGVsZW1lbnQgJHtRKzF9YCxaPSQucm9sZXx8JC50eXBlO3JldHVybntpZDokLmlkLHBhdGg6JC5wYXRoLGxhYmVsOkosdmFsdWU6JC52YWx1ZSxyb2xlOlosdHlwZTokLnR5cGUsZW5hYmxlZDokLmVuYWJsZWQsZnJhbWU6JC5mcmFtZX19ZnVuY3Rpb24gUTkoJCxRKXtsZXQgSj1NYXRoLm1heCgwLCQueCksWj1NYXRoLm1heCgwLCQueSksWD1NYXRoLm1pbihRLndpZHRoLCQueCskLndpZHRoKSxZPU1hdGgubWluKFEuaGVpZ2h0LCQueSskLmhlaWdodCkscT1NYXRoLm1heCgwLFgtSiksRz1NYXRoLm1heCgwLFktWik7cmV0dXJuIHE+MCYmRz4wP3t4OkoseTpaLHdpZHRoOnEsaGVpZ2h0Okd9Om51bGx9ZnVuY3Rpb24gajAoJCl7cmV0dXJuICQuaWR9ZnVuY3Rpb24gWTMoJCl7cmV0dXJuYCR7JC54fSwkeyQueX0gJHskLndpZHRofXgkeyQuaGVpZ2h0fWB9ZnVuY3Rpb24gSjkoJCl7cmV0dXJuW2BBWCBsYWJlbDogJHskLmxhYmVsfHwiVW5sYWJlbGVkIn1gLCQucm9sZT9gcm9sZTogJHskLnJvbGV9YDoiIiwkLnR5cGU/YHR5cGU6ICR7JC50eXBlfWA6IiIsJC52YWx1ZT9gdmFsdWU6ICR7JC52YWx1ZX1gOiIiLCQuaWQ/YGlkOiAkeyQuaWR9YDoiIixgcGF0aDogJHskLnBhdGh9YCxgZnJhbWU6ICR7WTMoJC5mcmFtZSl9YF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIjsgIil9ZnVuY3Rpb24gRTIoJCl7cmV0dXJuICQmJnR5cGVvZiAkLmRldmljZT09PSJzdHJpbmciJiZ0eXBlb2YgJC51cmw9PT0ic3RyaW5nIj8kOm51bGx9ZnVuY3Rpb24gdTEoJCl7bGV0IEo9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYmFzZVBhdGg/Pyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC8rJC8sIiIpfHwiLyIpO3JldHVybiBKPT09Ii8iP2AvJHskfWA6YCR7Sn0vJHskfWB9dmFyIG03PTUwMDAscDc9MjAwMCxJMj1udWxsLHEzPW51bGwsdTc9MSxsNz0xLHMwPW5ldyBNYXAsYTA9bmV3IE1hcDtmdW5jdGlvbiBkNygpe2xldCAkPW5ldyBVUkwodTEoImV4ZWMtd3MiKSx3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuICQucHJvdG9jb2w9JC5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IiwkLnRvU3RyaW5nKCl9ZnVuY3Rpb24gYzcoJCl7Zm9yKGxldCBRIG9mIHMwLnZhbHVlcygpKVEucmVqZWN0KCQpO3MwLmNsZWFyKCl9ZnVuY3Rpb24gSzkoKXtyZXR1cm4gSTI/Pz1uZXcgUHJvbWlzZSgoJCxRKT0+e2xldCBKPSExLFo7dHJ5e1o9bmV3IFdlYlNvY2tldChkNygpKX1jYXRjaChxKXtJMj1udWxsLFEocSk7cmV0dXJufWxldCBYPXNldFRpbWVvdXQoKCk9PntpZighSilKPSEwLEkyPW51bGwsUShFcnJvcigiY29udHJvbCBzb2NrZXQgY29ubmVjdCB0aW1lb3V0IikpLFouY2xvc2UoKX0sbTcpO1oub25vcGVuPSgpPT57Wi5zZW5kKEpTT04uc3RyaW5naWZ5KHt0b2tlbjp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4/PyIifSkpfSxaLm9ubWVzc2FnZT0ocSk9PntsZXQgRzt0cnl7Rz1KU09OLnBhcnNlKFN0cmluZyhxLmRhdGEpKX1jYXRjaHtyZXR1cm59aWYoRy5yZWFkeSl7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoWCkscTM9WiwkKFopO3JldHVybn1pZih0eXBlb2YgRy5zdWI9PT0ibnVtYmVyIil7bGV0IEI9YTAuZ2V0KEcuc3ViKTtpZighQilyZXR1cm47aWYoRy5lbmQpYTAuZGVsZXRlKEcuc3ViKSxCLm9uRW5kKCk7ZWxzZSBpZih0eXBlb2YgRy5kYXRhPT09InN0cmluZyIpQi5vbkRhdGEoRy5kYXRhKTtyZXR1cm59aWYodHlwZW9mIEcuaWQhPT0ibnVtYmVyIilyZXR1cm47bGV0IE49czAuZ2V0KEcuaWQpO2lmKCFOKXJldHVybjtzMC5kZWxldGUoRy5pZCksTi5yZXNvbHZlKEcpfTtsZXQgWT0oKT0+e0kyPW51bGwscTM9bnVsbDtsZXQgcT1FcnJvcigiY29udHJvbCBzb2NrZXQgY2xvc2VkIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpO2M3KHEpO2xldCBHPVsuLi5hMC52YWx1ZXMoKV07YTAuY2xlYXIoKTtmb3IobGV0IE4gb2YgRylOLm9uRW5kKCk7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoWCksUShxKX07Wi5vbmVycm9yPVksWi5vbmNsb3NlPVl9KSxJMn1hc3luYyBmdW5jdGlvbiBaOSgkLFEpe2xldCBKPWF3YWl0IEs5KCk7aWYoSi5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pdGhyb3cgRXJyb3IoImNvbnRyb2wgc29ja2V0IG5vdCBvcGVuIik7cmV0dXJuIG5ldyBQcm9taXNlKChaLFgpPT57bGV0IFk9dTcrKyxxPSgpPT57czAuZGVsZXRlKFkpLFgoUT8ucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX07aWYoUSl7aWYoUS5hYm9ydGVkKXtxKCk7cmV0dXJufVEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX1zMC5zZXQoWSx7cmVzb2x2ZTooRyk9PntRPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWihHKX0scmVqZWN0OihHKT0+e1E/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxYKEcpfX0pLEouc2VuZChKU09OLnN0cmluZ2lmeSh7aWQ6WSwuLi4kfSkpfSl9YXN5bmMgZnVuY3Rpb24gQTEoJCxRKXtsZXQgSj1hd2FpdCBaOSh7Y29tbWFuZDokfSxRPy5zaWduYWwpO3JldHVybntzdGRvdXQ6Si5zdGRvdXQ/PyIiLHN0ZGVycjpKLnN0ZGVycj8/IiIsZXhpdENvZGU6Si5leGl0Q29kZT8/MX19YXN5bmMgZnVuY3Rpb24gRzMoJCxRKXtsZXQgSj1hd2FpdCBaOSh7dWk6JH0sUT8uc2lnbmFsKTtpZihKLmVycm9yKXRocm93IEVycm9yKEouZXJyb3IpO3JldHVybiBKLnN0YXR1cz8/bnVsbH1mdW5jdGlvbiB5MigkKXtsZXQgUT17b25tZXNzYWdlOm51bGwsb25lcnJvcjpudWxsLGNsb3NlOigpPT57fX0sSj0hMSxaPW51bGwsWD1udWxsLFk9IiIscT0oQik9PntZKz1CLnJlcGxhY2UoL1xyXG4vZyxgCmApO2xldCBVO3doaWxlKChVPVkuaW5kZXhPZihgCgpgKSkhPT0tMSl7bGV0IFY9WS5zbGljZSgwLFUpO1k9WS5zbGljZShVKzIpO2xldCBrPVYuc3BsaXQoYApgKS5maWx0ZXIoKEwpPT5MLnN0YXJ0c1dpdGgoImRhdGE6IikpLm1hcCgoTCk9Pkwuc2xpY2UoNSkucmVwbGFjZSgvXiAvLCIiKSkuam9pbihgCmApO2lmKGspUS5vbm1lc3NhZ2U/Lih7ZGF0YTprfSl9fSxHPSgpPT57aWYoSnx8WClyZXR1cm47US5vbmVycm9yPy4oKSxYPXNldFRpbWVvdXQoKCk9PntYPW51bGwsTigpfSxwNyl9LE49YXN5bmMoKT0+e2lmKEopcmV0dXJuO3RyeXtsZXQgQj1hd2FpdCBLOSgpO2lmKEopcmV0dXJuO1k9IiIsWj1sNysrLGEwLnNldChaLHtvbkRhdGE6cSxvbkVuZDpHfSksQi5zZW5kKEpTT04uc3RyaW5naWZ5KHtzdWI6WixwYXRoOiR9KSl9Y2F0Y2h7RygpfX07cmV0dXJuIE4oKSxRLmNsb3NlPSgpPT57aWYoSj0hMCxYKWNsZWFyVGltZW91dChYKTtpZihaIT09bnVsbCl7YTAuZGVsZXRlKFopO3RyeXtxMz8uc2VuZChKU09OLnN0cmluZ2lmeSh7dW5zdWI6Wn0pKX1jYXRjaHt9Wj1udWxsfX0sUX1mdW5jdGlvbiBVMSgkKXtyZXR1cm5gJyR7JC5yZXBsYWNlKC8nL2csIidcXCcnIil9J2B9ZnVuY3Rpb24gWDkoJCl7bGV0W1EsSl09VyhudWxsKSxbWixYXT1XKCJBWCBvZmYiKTtyZXR1cm4geCgoKT0+e2lmKCEkKXtKKG51bGwpLFgoIkFYIG9mZiIpO3JldHVybn1KKG51bGwpLFgoIkFYIHdhaXRpbmciKTtsZXQgWT15MigkKTtyZXR1cm4gWS5vbm1lc3NhZ2U9KHEpPT57dHJ5e2xldCBHPUpTT04ucGFyc2UocS5kYXRhKTtKKEcpLFgoWDUoRyk/IkFYIHVuYXZhaWxhYmxlIjpgJHtHLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtYKCJBWCBwYXJzZSBlcnJvciIpfX0sWS5vbmVycm9yPSgpPT57WCgiQVggcmVjb25uZWN0aW5nIil9LCgpPT5ZLmNsb3NlKCl9LFskXSkse3NuYXBzaG90OlEsc3RhdHVzOlp9fXZhciBWMz1xMCh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxCMz1xMChudWxsKTtmdW5jdGlvbiB0MCgpe3JldHVybiBHMChWMyl9ZnVuY3Rpb24gRzUoKXtsZXQgJD1HMChCMyk7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9dmFyIFk5PVMwKGZ1bmN0aW9uKHtlbGVtZW50OlEsaW5kZXg6SixzY3JlZW46WixoaWdobGlnaHRlZDpYLHNlbGVjdGVkOlksb25IaWdobGlnaHQ6cSxvblNlbGVjdDpHfSl7bGV0IE49ajAoUSksQj1xNShRLEopLFU9UTkoUS5mcmFtZSxaKTtpZighVSlyZXR1cm4gbnVsbDtsZXQgVj1KOShCKTtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOk4sImRhdGEtYXgtaWQiOkIuaWQsImRhdGEtYXgtcGF0aCI6Qi5wYXRoLCJkYXRhLWF4LWxhYmVsIjpCLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpCLnZhbHVlLCJkYXRhLWF4LXJvbGUiOkIucm9sZSwiZGF0YS1heC10eXBlIjpCLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKEIuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOlkzKEIuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoWSksImFyaWEtbGFiZWwiOlEubGFiZWx8fFYsdGl0bGU6VixvbkNsaWNrOigpPT5HKE4pLG9uTW91c2VFbnRlcjooKT0+cShOKSxvbk1vdXNlTGVhdmU6KCk9PnEobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtVLngvWi53aWR0aCoxMDB9JWAsdG9wOmAke1UueS9aLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7VS53aWR0aC9aLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7VS5oZWlnaHQvWi5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOlk/IiM2MGE1ZmEiOlg/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOlk/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6WD8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsUSk9PiQuaW5kZXg9PT1RLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09US5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PVEuc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1RLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09US5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1RLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09US5zY3JlZW4uaGVpZ2h0JiZZNSgkLmVsZW1lbnQsUS5lbGVtZW50KSk7ZnVuY3Rpb24gcTkoKXtsZXR7c25hcHNob3Q6JH09dDAoKSx7aGlnaGxpZ2h0ZWRLZXk6USxzZWxlY3RlZEtleTpKLHNldEhpZ2hsaWdodGVkS2V5Olosc2V0U2VsZWN0ZWRLZXk6WH09RzUoKTtpZighJD8uc2NyZWVuLndpZHRofHwhJD8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQuZWxlbWVudHMubWFwKChZLHEpPT57bGV0IEc9ajAoWSk7cmV0dXJuIEsoWTkse2VsZW1lbnQ6WSxpbmRleDpxLHNjcmVlbjokLnNjcmVlbixoaWdobGlnaHRlZDpHPT09USxzZWxlY3RlZDpHPT09SixvbkhpZ2hsaWdodDpaLG9uU2VsZWN0Olh9LEcpfSl9KX1mdW5jdGlvbiBHOSh7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpRfSl7bGV0e3NuYXBzaG90Okosc3RhdHVzOlp9PVg5KCQpLFtYLFldPVcobnVsbCksW3EsR109VyhudWxsKTt4KCgpPT57aWYoISQpWShudWxsKSxHKG51bGwpfSxbJF0pO2xldCBOPV8xKCgpPT4oe3NuYXBzaG90Okosc3RhdHVzOlp9KSxbSixaXSksQj1fMSgoKT0+KHtoaWdobGlnaHRlZEtleTpYLHNlbGVjdGVkS2V5OnEsc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpHfSksW1gscV0pO3JldHVybiBLKFYzLHt2YWx1ZTpOLGNoaWxkcmVuOksoQjMse3ZhbHVlOkIsY2hpbGRyZW46UX0pfSl9ZnVuY3Rpb24gVjkoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOlEsb25Ub2dnbGVPdmVybGF5Okp9KXtsZXR7c3RhdHVzOlp9PXQwKCksW1gsWV09VyghMSkscT0kJiZRO3JldHVybiBLKG0xLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6WixvbkNsaWNrOkosb25Nb3VzZUVudGVyOigpPT5ZKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlkoITEpLHN0eWxlOnE/e2JhY2tncm91bmQ6WD8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOksoSTAse3NpemU6MTksc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gVjUoe2NsYXNzTmFtZTokPSIifSl7cmV0dXJuIEsoImEiLHtocmVmOiJodHRwczovL2dpdGh1Yi5jb20vRXZhbkJhY29uL3NlcnZlLXNpbSIsdGFyZ2V0OiJfYmxhbmsiLHJlbDoibm9yZWZlcnJlciIsY2xhc3NOYW1lOmBpbmxpbmUtZmxleCBoLVszMHB4XSBtaW4tdy0wIGl0ZW1zLWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHB4LTEuNSBmb250LW1vbm8gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzY1IG5vLXVuZGVybGluZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlLzg1IGZvY3VzLXZpc2libGU6b3V0bGluZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXdoaXRlLzYwICR7JH1gLnRyaW0oKSwiYXJpYS1sYWJlbCI6Ik9wZW4gc2VydmUtc2ltIix0aXRsZToiT3BlbiBzZXJ2ZS1zaW0iLGNoaWxkcmVuOiJzZXJ2ZS1zaW0ifSl9ZnVuY3Rpb24gQjkoe29wZW46JCxvbkNsaWNrOlF9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBsZWZ0LTMgei0zMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBwLTEgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSAkeyQ/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbSygiYnV0dG9uIix7b25DbGljazpRLGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpLKGswLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLEsoVjUse30pXX0pfWZ1bmN0aW9uIE45KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQiI7bGV0IFE9JC8xMDczNzQxODI0O2lmKFE+PTEpcmV0dXJuYCR7US50b0ZpeGVkKFE+PTEwPzA6MSl9IEdCYDtyZXR1cm5gJHsoJC8xMDQ4NTc2KS50b0ZpeGVkKDApfSBNQmB9ZnVuY3Rpb24gQjUoJCl7bGV0IFE9JC5tYXRjaCgvXihbYS16QS1aXSspLSguKykkLyk7aWYoIVEpcmV0dXJue29zOiQsdmVyc2lvbjoiIn07cmV0dXJue29zOlFbMV0sdmVyc2lvbjpRWzJdLnJlcGxhY2UoLy0vZywiLiIpfX1mdW5jdGlvbiBVOSgkKXtyZXR1cm4gQjUoJCkudmVyc2lvbnx8JH1mdW5jdGlvbiBONSgkKXtsZXR7b3M6USx2ZXJzaW9uOkp9PUI1KCQpO3JldHVybiBKP2Ake1F9ICR7Sn1gOlF9ZnVuY3Rpb24gTDUoe2Nocm9tZTokLHNjcmVlbjpRLGludGVyYWN0aXZlOko9ITEsb25CdXR0b246WixvbkNyb3duV2hlZWw6WH0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAiLGNoaWxkcmVuOlskLmJ1dHRvbnMubWFwKChZKT0+SyhvNyx7Y2hyb21lOiQsYnV0dG9uOlksaW50ZXJhY3RpdmU6SixvbkJ1dHRvbjpaLG9uV2hlZWw6SiYmWS5uYW1lPT09ImRpZ2l0YWwtY3Jvd24iP1g6dm9pZCAwfSxgYnV0dG9uLSR7WS5uYW1lfWApKSwkLmNvbXBvc2l0ZUltYWdlP0soejkse2Nocm9tZTokLGltYWdlOiQuY29tcG9zaXRlSW1hZ2UscmVjdDokLmJvZHksekluZGV4OjF9KTokLnNsaWNlJiYkLmNvcm5lcj9LKGk3LHtjaHJvbWU6JH0pOm51bGwsSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBvdmVyZmxvdy1oaWRkZW4gYmctYmxhY2siLHN0eWxlOnsuLi5OMygkLCQuc2NyZWVuLDIpLGJvcmRlclJhZGl1czpyNygkKX0sY2hpbGRyZW46UX0pXX0pfWZ1bmN0aW9uIHI3KCQpe3JldHVybmAkeyQuc2NyZWVuUmFkaXVzLyQuc2NyZWVuLndpZHRoKjEwMH0lIC8gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi5oZWlnaHQqMTAwfSVgfWZ1bmN0aW9uIG83KHtjaHJvbWU6JCxidXR0b246USxpbnRlcmFjdGl2ZTpKLG9uQnV0dG9uOlosb25XaGVlbDpYfSl7bGV0W1kscV09VyghMSksW0csTl09VyghMSksQj1iKG51bGwpLFU9YihudWxsKSxWPWIoWCk7Vi5jdXJyZW50PVgseCgoKT0+e2xldCBUPVUuY3VycmVudDtpZighVHx8IVgpcmV0dXJuO2xldCB5PShjKT0+e2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpLFYuY3VycmVudD8uKGMuZGVsdGFZLGMuZGVsdGFNb2RlKX07cmV0dXJuIFQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHkse3Bhc3NpdmU6ITF9KSwoKT0+VC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIseSl9LFshIVhdKTtsZXQgaz1KJiZRLnVzYWdlUGFnZSE9bnVsbCYmUS51c2FnZSE9bnVsbCxMPUUoKCk9PntpZihCLmN1cnJlbnQ9PT1udWxsKXJldHVybjtCLmN1cnJlbnQ9bnVsbCxOKCExKSxaPy4oe3BoYXNlOiJ1cCIsYnV0dG9uOlF9KX0sW1EsWl0pLE09RSgoVCk9PntpZihULmJ1dHRvbiE9PTAmJlQucG9pbnRlclR5cGU9PT0ibW91c2UiKXJldHVybjtULnByZXZlbnREZWZhdWx0KCksVC5zdG9wUHJvcGFnYXRpb24oKSxCLmN1cnJlbnQ9VC5wb2ludGVySWQ7dHJ5e1QuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShULnBvaW50ZXJJZCl9Y2F0Y2h7fU4oITApLFo/Lih7cGhhc2U6ImRvd24iLGJ1dHRvbjpRfSl9LFtRLFpdKSxDPVEub25Ub3A/NTowLHo9ayYmKFl8fEcpLEE9KHo/US5ob3Zlci54OjApKjEwMCxQPSh6P1EuaG92ZXIueTowKSoxMDAsUj1HJiZRLmltYWdlRG93bj9RLmltYWdlRG93bjpRLmltYWdlLEk9az97b25Qb2ludGVyRG93bjpNLG9uUG9pbnRlclVwOkwsb25Qb2ludGVyQ2FuY2VsOkwsb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT57cSghMSksTCgpfX06e307cmV0dXJuIEsoImRpdiIse3JlZjpVLHJvbGU6az8iYnV0dG9uIjp2b2lkIDAsImFyaWEtbGFiZWwiOms/TDkoUS5uYW1lKTp2b2lkIDAsImFyaWEtaGlkZGVuIjprP3ZvaWQgMDohMCx0aXRsZTprP0w5KFEubmFtZSk6dm9pZCAwLGNsYXNzTmFtZToiYWJzb2x1dGUgc2VsZWN0LW5vbmUiLHN0eWxlOnsuLi5OMygkLFEuZnJhbWUsQyksdHJhbnNmb3JtOkF8fFA/YHRyYW5zbGF0ZSgke0F9JSwgJHtQfSUpYDp2b2lkIDAsdHJhbnNpdGlvbjoidHJhbnNmb3JtIDAuMTJzIGVhc2UiLGN1cnNvcjprPyJwb2ludGVyIjp2b2lkIDAscG9pbnRlckV2ZW50czprPyJhdXRvIjoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUifSwuLi5JLGNoaWxkcmVuOlImJksoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6QzkoJC5pZGVudGlmaWVyLFIpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUiLHN0eWxlOntvYmplY3RGaXQ6ImZpbGwiLGZpbHRlcjpHJiYhUS5pbWFnZURvd24/ImJyaWdodG5lc3MoMS40KSI6dm9pZCAwLHRyYW5zaXRpb246ImZpbHRlciAwLjEycyBlYXNlIixXZWJraXRVc2VyRHJhZzoibm9uZSJ9fSl9KX1mdW5jdGlvbiBMOSgkKXtyZXR1cm4gJC5zcGxpdCgiLSIpLm1hcCgoUSk9PlEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrUS5zbGljZSgxKSkuam9pbigiICIpfWZ1bmN0aW9uIGk3KHtjaHJvbWU6JH0pe2lmKCEkLnNsaWNlfHwhJC5jb3JuZXIpcmV0dXJuIG51bGw7bGV0e2JvZHk6USxjb3JuZXI6SixzbGljZTpafT0kLFg9TWF0aC5tYXgoUS53aWR0aC1KLndpZHRoKjIsMCksWT1NYXRoLm1heChRLmhlaWdodC1KLmhlaWdodCoyLDApLHE9W3trZXk6InRvcC1sZWZ0IixpbWFnZTpaLnRvcExlZnQscmVjdDp7eDpRLngseTpRLnksd2lkdGg6Si53aWR0aCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJ0b3AtcmlnaHQiLGltYWdlOloudG9wUmlnaHQscmVjdDp7eDpRLngrUS53aWR0aC1KLndpZHRoLHk6US55LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToiYm90dG9tLWxlZnQiLGltYWdlOlouYm90dG9tTGVmdCxyZWN0Ont4OlEueCx5OlEueStRLmhlaWdodC1KLmhlaWdodCx3aWR0aDpKLndpZHRoLGhlaWdodDpKLmhlaWdodH19LHtrZXk6ImJvdHRvbS1yaWdodCIsaW1hZ2U6Wi5ib3R0b21SaWdodCxyZWN0Ont4OlEueCtRLndpZHRoLUoud2lkdGgseTpRLnkrUS5oZWlnaHQtSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJ0b3AiLGltYWdlOloudG9wLHJlY3Q6e3g6US54K0oud2lkdGgseTpRLnksd2lkdGg6WCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJib3R0b20iLGltYWdlOlouYm90dG9tLHJlY3Q6e3g6US54K0oud2lkdGgseTpRLnkrUS5oZWlnaHQtSi5oZWlnaHQsd2lkdGg6WCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJsZWZ0IixpbWFnZTpaLmxlZnQscmVjdDp7eDpRLngseTpRLnkrSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6WX19LHtrZXk6InJpZ2h0IixpbWFnZTpaLnJpZ2h0LHJlY3Q6e3g6US54K1Eud2lkdGgtSi53aWR0aCx5OlEueStKLmhlaWdodCx3aWR0aDpKLndpZHRoLGhlaWdodDpZfX1dO3JldHVybiBLKEoxLHtjaGlsZHJlbjpxLmZpbHRlcigoRyk9PkcucmVjdC53aWR0aD4wJiZHLnJlY3QuaGVpZ2h0PjApLm1hcCgoRyk9Pksoejkse2Nocm9tZTokLGltYWdlOkcuaW1hZ2UscmVjdDpHLnJlY3QsekluZGV4OjF9LEcua2V5KSl9KX1mdW5jdGlvbiB6OSh7Y2hyb21lOiQsaW1hZ2U6USxyZWN0OkosekluZGV4Olp9KXtyZXR1cm4gSygiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpDOSgkLmlkZW50aWZpZXIsUSksY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLk4zKCQsSixaKSxvYmplY3RGaXQ6ImZpbGwiLHBvaW50ZXJFdmVudHM6Im5vbmUiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX1mdW5jdGlvbiBDOSgkLFEpe2xldCBKPWBncmlkL2FwaS9kZXZpY2VraXQtY2hyb21lP2Nocm9tZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX0maW1hZ2U9JHtlbmNvZGVVUklDb21wb25lbnQoUSl9YDtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/YC8ke0p9YDp1MShKKX1mdW5jdGlvbiBOMygkLFEsSil7cmV0dXJue2xlZnQ6VTUoUS54LCQuZnJhbWUud2lkdGgpLHRvcDpVNShRLnksJC5mcmFtZS5oZWlnaHQpLHdpZHRoOlU1KFEud2lkdGgsJC5mcmFtZS53aWR0aCksaGVpZ2h0OlU1KFEuaGVpZ2h0LCQuZnJhbWUuaGVpZ2h0KSx6SW5kZXg6Sn19ZnVuY3Rpb24gVTUoJCxRKXtyZXR1cm5gJHskL1EqMTAwfSVgfWZ1bmN0aW9uIEg5KHtuYW1lOiQscnVudGltZTpRLGNocm9tZTpKLHBsYWNlaG9sZGVyQXNzZXQ6WixidXN5OlgsYnVzeUxhYmVsOlk9IlN0YXJ0aW5n4oCmIixlcnJvcjpxLG9uU3RhcnQ6R30pe2xldCBOPUYwKCQpLEI9UDFbTl0sVT1aPz9udWxsLFY9VT9udWxsOko/P251bGwsaz1WP3t3aWR0aDpWLnNjcmVlbi53aWR0aCxoZWlnaHQ6Vi5zY3JlZW4uaGVpZ2h0fTppMChOLCQpLEw9bjAoTixrKSxNPVU/bjcoTixVLm5hbWUpOlY/TCpWLmZyYW1lLndpZHRoL1Yuc2NyZWVuLndpZHRoOkwqQi53aWR0aC8oQi53aWR0aC0yKkIuYmV6ZWxYKSxDPVU/e3dpZHRoOlUud2lkdGgsaGVpZ2h0OlUuaGVpZ2h0fTpWP3t3aWR0aDpWLmZyYW1lLndpZHRoLGhlaWdodDpWLmZyYW1lLmhlaWdodH06e3dpZHRoOkIud2lkdGgsaGVpZ2h0OkIuaGVpZ2h0fSx6PWAke0Mud2lkdGh9IC8gJHtDLmhlaWdodH1gLEE9KEMud2lkdGgvQy5oZWlnaHQqYTcoTikpLnRvRml4ZWQoMiksUD1OPT09InZpc2lvbiI/SyhlNyx7fSk6SyhzNyx7dHlwZTpOfSk7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTUgbWluLXctMCB3LWZ1bGwiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCIsc3R5bGU6e3dpZHRoOmBtaW4oMTAwJSwgJHtNfXB4LCAke0F9ZHZoKWAsbWF4V2lkdGg6TSxhc3BlY3RSYXRpbzp6fSxjaGlsZHJlbjpVP0sodDcse25hbWU6VS5uYW1lLGZhbGxiYWNrOlB9KTpWP0soImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpLKEw1LHtjaHJvbWU6Vn0pfSk6UH0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzE3cHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46JH0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W041KFEpLCIgU2ltdWxhdG9yIl19KV19KSxxJiZLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtZGFuZ2VyIHRleHQtWzEycHhdIGZvbnQtbW9ubyBtYXgtdy05MCB0ZXh0LWNlbnRlciIsY2hpbGRyZW46cX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpHLGRpc2FibGVkOlgsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC01IHB5LTIgcm91bmRlZC1mdWxsIHRleHQtWzE0cHhdIGZvbnQtbWVkaXVtIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7WD8iYmctd2hpdGUvOCB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctd2hpdGUvMTIgdGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS8xOCBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpbWCYmSygic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJzaXplLTMuNSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzI1IGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0iLHN0eWxlOntib3JkZXJUb3BDb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkpIn19KSxYP1k6IlN0YXJ0Il19KV19KX1mdW5jdGlvbiBuNygkLFEpe2lmKCQ9PT0id2F0Y2giKXtpZihRLmluY2x1ZGVzKCJ1bHRyYSIpKXJldHVybiAyNTU7aWYoUS5pbmNsdWRlcygid2F0Y2gtc2UtIil8fFEuaW5jbHVkZXMoImFwcGxlLXdhdGNoLXNlLSIpKXJldHVybiAyMzg7cmV0dXJuIDI1MH1pZigkPT09InZpc2lvbiIpcmV0dXJuIDM5MDtpZigkPT09ImlwYWQiKXJldHVybiAzNDA7cmV0dXJuIDI4MH1mdW5jdGlvbiBhNygkKXtpZigkPT09InZpc2lvbiIpcmV0dXJuIDM0O2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDUwO2lmKCQ9PT0id2F0Y2giKXJldHVybiA1NjtyZXR1cm4gNTJ9ZnVuY3Rpb24gczcoe3R5cGU6JH0pe2xldCBRPVAxWyRdO3JldHVybiBLKEoxLHtjaGlsZHJlbjpbSygic3ZnIix7dmlld0JveDpgMCAwICR7US53aWR0aH0gJHtRLmhlaWdodH1gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46SygibGluZWFyR3JhZGllbnQiLHtpZDoicGxhY2Vob2xkZXItc2NyZWVuIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiM2ZmE4ZTYifSksSygic3RvcCIse29mZnNldDoiNTUlIixzdG9wQ29sb3I6IiM1YjkzZDYifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjNTE4OGNmIn0pXX0pfSksSygicmVjdCIse3g6US5iZXplbFgseTpRLmJlemVsWSx3aWR0aDpRLndpZHRoLTIqUS5iZXplbFgsaGVpZ2h0OlEuaGVpZ2h0LTIqUS5iZXplbFkscng6US5pbm5lclJhZGl1cyxmaWxsOiJ1cmwoI3BsYWNlaG9sZGVyLXNjcmVlbikifSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOksoZTIse3R5cGU6JH0pfSldfSl9ZnVuY3Rpb24gdDcoe25hbWU6JCxmYWxsYmFjazpRfSl7bGV0W0osWl09VygibG9hZGluZyIpO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltKIT09ImxvYWRlZCImJlEsSiE9PSJlcnJvciImJksoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6JCQoJCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBzZWxlY3Qtbm9uZSBvYmplY3QtY29udGFpbiIsc3R5bGU6e1dlYmtpdFVzZXJEcmFnOiJub25lIn0sb25Mb2FkOigpPT5aKCJsb2FkZWQiKSxvbkVycm9yOigpPT5aKCJlcnJvciIpfSldfSl9ZnVuY3Rpb24gZTcoKXtsZXR7d2lkdGg6JCxoZWlnaHQ6UX09UDEudmlzaW9uO3JldHVybiBLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHskfSAke1F9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixmaWxsOiJub25lIiwiYXJpYS1oaWRkZW4iOiEwLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46W0soImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1zaGVsbCIseDE6IjAiLHkxOiIwIix4MjoiMCIseTI6IjEiLGNoaWxkcmVuOltLKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjgyODJiIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjU0JSIsc3RvcENvbG9yOiIjMTIxMjE0In0pLEsoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzA3MDcwOCJ9KV19KSxLKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MiLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbSygic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzMxMzUzYSJ9KSxLKCJzdG9wIix7b2Zmc2V0OiI0OCUiLHN0b3BDb2xvcjoiIzBhMGIwZCJ9KSxLKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSksSygicmFkaWFsR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMiLGN4OiI1MCUiLGN5OiI0NiUiLHI6IjYwJSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyMDI4MzIifSksSygic3RvcCIse29mZnNldDoiNzIlIixzdG9wQ29sb3I6IiMwOTBhMGQifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pXX0pLEsoInBhdGgiLHtkOiJNOTUgMTc3Qzk1IDExOSAxNDcgODYgMjE4IDkxQzI1NyA5NCAyODYgMTExIDMyMCAxMTFDMzU0IDExMSAzODMgOTQgNDIyIDkxQzQ5MyA4NiA1NDUgMTE5IDU0NSAxNzdWMjIyQzU0NSAyNzggNTAxIDMxMSA0NDMgMzEwQzM5OCAzMDkgMzcxIDI4NiAzNDUgMjY4QzMyOSAyNTcgMzExIDI1NyAyOTUgMjY4QzI2OSAyODYgMjQyIDMwOSAxOTcgMzEwQzEzOSAzMTEgOTUgMjc4IDk1IDIyMlYxNzdaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1zaGVsbCkiLHN0cm9rZToiIzNkM2Q0MiIsc3Ryb2tlV2lkdGg6IjcifSksSygicGF0aCIse2Q6Ik0xMTcgMTgxQzExNyAxMzQgMTU3IDExMiAyMjAgMTE2QzI2MCAxMTkgMjg3IDEzNiAzMjAgMTM2QzM1MyAxMzYgMzgwIDExOSA0MjAgMTE2QzQ4MyAxMTIgNTIzIDEzNCA1MjMgMTgxVjIxN0M1MjMgMjYzIDQ4OCAyODcgNDM5IDI4N0MzOTkgMjg3IDM2OSAyNjQgMzQ1IDI1MEMzMjkgMjQwIDMxMSAyNDAgMjk1IDI1MEMyNzEgMjY0IDI0MSAyODcgMjAxIDI4N0MxNTIgMjg3IDExNyAyNjMgMTE3IDIxN1YxODFaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1nbGFzcykiLHN0cm9rZToiIzE3MTgxYiIsc3Ryb2tlV2lkdGg6IjUifSksSygicGF0aCIse2Q6Ik0xNDMgMTg2QzE0NSAxNDggMTc2IDEzNSAyMjYgMTM4QzI2NCAxNDEgMjg5IDE1NiAzMjAgMTU2QzM1MSAxNTYgMzc2IDE0MSA0MTQgMTM4QzQ2NCAxMzUgNDk1IDE0OCA0OTcgMTg2VjIxM0M0OTcgMjUwIDQ2OSAyNjYgNDMyIDI2NkMzOTQgMjY2IDM2OSAyNDYgMzQzIDIzNUMzMjggMjI5IDMxMiAyMjkgMjk3IDIzNUMyNzEgMjQ2IDI0NiAyNjYgMjA4IDI2NkMxNzEgMjY2IDE0MyAyNTAgMTQzIDIxM1YxODZaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1sZW5zKSIsc3Ryb2tlOiIjMjYyYTJmIixzdHJva2VXaWR0aDoiMiJ9KSxLKCJwYXRoIix7ZDoiTTE1MSAxNzFDMTc5IDE1MCAyMTcgMTQ3IDI1MSAxNTRNMzg5IDE1NEM0MjMgMTQ3IDQ2MSAxNTAgNDg5IDE3MSIsc3Ryb2tlOiIjNGU1MzVhIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQifSksSygicGF0aCIse2Q6Ik0yNzcgMjMzQzI4OSAyMjQgMzA0IDIxOSAzMjAgMjE5QzMzNiAyMTkgMzUxIDIyNCAzNjMgMjMzIixzdHJva2U6IiMzYjQwNDYiLHN0cm9rZVdpZHRoOiI0IixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KV19KX1mdW5jdGlvbiAkJCgkKXtsZXQgUT1gZ3JpZC9hcGkvZGV2aWNlLXBsYWNlaG9sZGVyLWFzc2V0P25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YDtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/YC8ke1F9YDp1MShRKX1mdW5jdGlvbiBlMCh7b3BlbjokLHdpZHRoOlEsY2hpbGRyZW46SixzdHlsZTpaLHNpZGU6WD0icmlnaHQifSl7cmV0dXJuIEsoImFzaWRlIix7Y2xhc3NOYW1lOmBmaXhlZCB6LTM1IG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIGJnLXBhbmVsLWJnIHRleHQtd2hpdGUvOTAgYmFja2Ryb3AtYmx1ci1bMThweF0gW2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZdIFt0cmFuc2l0aW9uOnRyYW5zZm9ybV8wLjI1c19lYXNlLG9wYWNpdHlfMC4yc19lYXNlXSBmbGV4IGZsZXgtY29sICR7WD09PSJsZWZ0Ij8idG9wLTAgYm90dG9tLTAgbGVmdC0wIHJvdW5kZWQtbm9uZSBib3JkZXItMCBib3JkZXItciBib3JkZXItd2hpdGUvMTAgc2hhZG93LVs4cHhfMF8zMnB4X3JnYmEoMCwwLDAsMC4zNSldIjoidG9wLTMgYm90dG9tLTMgcmlnaHQtMyByb3VuZGVkLVsxNHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bMF8xMnB4XzQwcHhfcmdiYSgwLDAsMCwwLjU1KV0ifWAsc3R5bGU6e3dpZHRoOlEsdHJhbnNmb3JtOiQ/InRyYW5zbGF0ZVgoMCkiOlg9PT0ibGVmdCI/InRyYW5zbGF0ZVgoLTEwMCUpIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6JD8xOjAscG9pbnRlckV2ZW50czokPyJhdXRvIjoibm9uZSIsLi4uWn0sImFyaWEtaGlkZGVuIjohJCxjaGlsZHJlbjpKfSl9ZnVuY3Rpb24gJDIoe2NoaWxkcmVuOiQsc3R5bGU6UX0pe3JldHVybiBLKCJoZWFkZXIiLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMi41IHB4LTIuNSBweS0xLjUgcGwtMyIsc3R5bGU6USxjaGlsZHJlbjokfSl9ZnVuY3Rpb24gRjkoe2NoaWxkcmVuOiR9KXtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1tZWRpdW0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIHo1KHtvbkNsaWNrOiQsYXJpYUxhYmVsOlE9IkNsb3NlIHBhbmVsIix0aXRsZTpKLGljb25TaXplOlo9MTZ9KXtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOiQsY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHAtMCB0ZXh0LVsjOGU4ZTkzXSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6USx0aXRsZTpKLGNoaWxkcmVuOksoJDAse3NpemU6WixzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiBrOSgkLFEpe2xldFtKLFpdPVcobnVsbCk7cmV0dXJuIHgoKCk9PntpZighUXx8ISQpcmV0dXJuO2xldCBYPSExLFk9YXN5bmMoKT0+e3RyeXtsZXQgTj1hd2FpdChhd2FpdCBmZXRjaCgkLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighWClaKE4pfWNhdGNoe319O1koKTtsZXQgcT1zZXRJbnRlcnZhbChZLDUwMDApO3JldHVybigpPT57WD0hMCxjbGVhckludGVydmFsKHEpfX0sWyQsUV0pLEp9ZnVuY3Rpb24gQTkoe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlcz09PTApcmV0dXJuIG51bGw7bGV0e2VzdGltYXRlZEFkZGl0aW9uYWw6USxhdmFpbGFibGVCeXRlczpKLHRvdGFsQnl0ZXM6WixydW5uaW5nU2ltdWxhdG9yczpYfT0kLFk9TWF0aC5tYXgoMCxNYXRoLm1pbigxLDEtSi9aKSkscT1YK1EsRz1RPT09MD8iI2U2NiI6UTw9MT8iI2U5YTEzYiI6IiMzYjMiLE49WT4wLjk/IiNlNjYiOlk+MC43NT8iI2U5YTEzYiI6IiMzYjMiO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IG1heC13LWZ1bGwgbWluLXctMCBmbGV4LW5vd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXAgcHgtMiBweS1bM3B4XSByb3VuZGVkLWZ1bGwgYmctWyMxMDEwMTBdIGJvcmRlciBib3JkZXItWyMyMjJdIGZvbnQtbW9ubyB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzcwIGxlYWRpbmctbm9uZSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAiLHN0eWxlOntiYWNrZ3JvdW5kOkd9fSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCB0cnVuY2F0ZSIsY2hpbGRyZW46W0soInNwYW4iLHtjaGlsZHJlbjpbWCwiLyIscSwiIHNpbXMiXX0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNDAiLGNoaWxkcmVuOiIgwrcgIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOltOOShKKSwiIGZyZWUiXX0pXX0pLEsoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToibWwtMC41IHctNyBoLVszcHhdIHNocmluay0wIGJnLVsjMWMxYzFjXSByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiBpbmxpbmUtYmxvY2siLGNoaWxkcmVuOksoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGgtZnVsbCB0cmFuc2l0aW9uLVt3aWR0aCxiYWNrZ3JvdW5kXSBkdXJhdGlvbi0zMDAgZWFzZS1vdXQiLHN0eWxlOnt3aWR0aDpgJHsoWSoxMDApLnRvRml4ZWQoMSl9JWAsYmFja2dyb3VuZDpOfX0pfSldfSl9ZnVuY3Rpb24gTTkoe3R5cGU6JCxzaXplOlE9MjAsc2NyZWVuT246Sj0hMX0pe2xldCBaPXt3aWR0aDpRLGhlaWdodDpRLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjEuNixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIEsoInN2ZyIsey4uLlosY2hpbGRyZW46W0omJksoInJlY3QiLHt4OiI1Iix5OiIzIix3aWR0aDoiMTUiLGhlaWdodDoiMTkiLHJ4OiIxLjY1IixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksSygicmVjdCIse3g6IjQiLHk6IjIuNSIsd2lkdGg6IjE2IixoZWlnaHQ6IjE5IixyeDoiMi41In0pLEsoImxpbmUiLHt4MToiMTIiLHkxOiIxOC41Iix4MjoiMTIiLHkyOiIxOC41In0pXX0pO2Nhc2Uid2F0Y2giOnJldHVybiBLKCJzdmciLHsuLi5aLGNoaWxkcmVuOltLKCJyZWN0Iix7eDoiNi41Iix5OiI3Iix3aWR0aDoiMTEiLGhlaWdodDoiMTAiLHJ4OiIzIn0pLEsoInBhdGgiLHtkOiJNOC41IDdsLjYtMy4yQTEuNSAxLjUgMCAwIDEgMTAuNiAyLjVoMi44YTEuNSAxLjUgMCAwIDEgMS41IDEuM0wxNS41IDcifSksSygicGF0aCIse2Q6Ik04LjUgMTdsLjYgMy4yYTEuNSAxLjUgMCAwIDAgMS41IDEuM2gyLjhhMS41IDEuNSAwIDAgMCAxLjUtMS4zbC42LTMuMiJ9KV19KTtjYXNlInZpc2lvbiI6cmV0dXJuIEsoInN2ZyIsey4uLlosY2hpbGRyZW46SygicGF0aCIse2Q6Ik0zIDExYTQgNCAwIDAgMSA0LTRoMTBhNCA0IDAgMCAxIDQgNHYyLjVhMi41IDIuNSAwIDAgMS0yLjUgMi41Yy0xLjggMC0yLjUtMS4yLTMuNS0xLjgtLjktLjUtMS42LS43LTIuNS0uN3MtMS42LjItMi41LjdjLTEgLjYtMS43IDEuOC0zLjUgMS44QTIuNSAyLjUgMCAwIDEgMyAxMy41eiJ9KX0pO2RlZmF1bHQ6cmV0dXJuIEsoInN2ZyIsey4uLlosY2hpbGRyZW46W0omJksoInJlY3QiLHt4OiI2Iix5OiIzIix3aWR0aDoiMTEiLGhlaWdodDoiMTkiLHJ4OiIyIixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksSygicmVjdCIse3g6IjYuNSIseToiMi41Iix3aWR0aDoiMTEiLGhlaWdodDoiMTkiLHJ4OiIyLjgifSksSygibGluZSIse3gxOiIxMC41Iix5MToiNSIseDI6IjEzLjUiLHkyOiI1In0pXX0pfX1mdW5jdGlvbiBPOSh7ZGV2aWNlOiQsYWN0aXZlOlEsc3RhcnRpbmc6SixzaHV0dGluZ0Rvd246WixvblNlbGVjdDpYLG9uU2h1dGRvd246WX0pe2xldCBxPSQuaGVscGVyLEc9JC5zdGF0ZT09PSJCb290ZWQiLE49RjAoJC5uYW1lKSxCPVU5KCQucnVudGltZSksVT1xPyJTdHJlYW1pbmciOko/Rz8iU3RhcnRpbmfigKYiOiJCb290aW5n4oCmIjpaPyJTaHV0dGluZyBkb3du4oCmIjpHPyJCb290ZWQiOm51bGwsVj1xPyIjMzRkMzk5IjpHPyIjZTlhMTNiIjpudWxsLGs9cXx8RyxMPXE/UT8iYmctWyMyNjM2NGNdIjoiYmctWyMyMDJiM2FdIjpRPyJiZy13aGl0ZS8xNSI6ImJnLXdoaXRlLzYiLE09cT8idGV4dC1bI2QyZTdmZl0iOlE/InRleHQtd2hpdGUvOTAiOiJ0ZXh0LXdoaXRlLzU1IjtyZXR1cm4gSygiZGl2Iix7cm9sZToiYnV0dG9uIix0YWJJbmRleDowLCJhcmlhLXByZXNzZWQiOlEsb25DbGljazpYLG9uS2V5RG93bjooQyk9PntpZihDLmtleT09PSJFbnRlciJ8fEMua2V5PT09IiAiKUMucHJldmVudERlZmF1bHQoKSxYKCl9LGNsYXNzTmFtZTpgZ3JvdXAgcmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSBweC0yIHB5LTEuNSByb3VuZGVkLWxnIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdICR7UT8iYmctd2hpdGUvMTAgdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvOTAgaG92ZXI6Ymctd2hpdGUvOCJ9YCxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOmByZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gJHtMfWAsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6TSxjaGlsZHJlbjpLKE05LHt0eXBlOk4sc2NyZWVuT246Qm9vbGVhbihxKX0pfSksViYmIXEmJksoInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wLjUgcmlnaHQtMC41IHNpemUtMS41IHJvdW5kZWQtZnVsbCByaW5nLTIgcmluZy1bIzFjMWMxZV0iLHN0eWxlOntiYWNrZ3JvdW5kOlZ9fSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToidHJ1bmNhdGUgdGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCBsZWFkaW5nLXRpZ2h0IixjaGlsZHJlbjokLm5hbWV9KSxVJiZLKCJkaXYiLHtjbGFzc05hbWU6YHRydW5jYXRlIHRleHQtWzExcHhdIGxlYWRpbmctdGlnaHQgJHtxPyJ0ZXh0LVsjMzRkMzk5XSI6UT8idGV4dC13aGl0ZS83NSI6InRleHQtd2hpdGUvNDUifWAsY2hpbGRyZW46VX0pXX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1yb3ctdHJhaWxpbmctc2xvdCIsY2xhc3NOYW1lOiJyZWxhdGl2ZSBzaHJpbmstMCB3LTggaC02IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0ZXh0LVsxMXB4XSBmb250LW1vbm8gdGFidWxhci1udW1zIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xMnNdICR7UT8idGV4dC13aGl0ZS84NSI6InRleHQtd2hpdGUvNDAifSAke2s/Imdyb3VwLWhvdmVyOm9wYWNpdHktMCBncm91cC1mb2N1cy13aXRoaW46b3BhY2l0eS0wIjoiIn1gLGNoaWxkcmVuOkJ9KSxrJiZLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHRpdGxlOlo/IlNodXR0aW5nIGRvd27igKYiOiJTaHV0IGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXQgZG93biBzaW11bGF0b3IiLG9uQ2xpY2s6KEMpPT57Qy5wcmV2ZW50RGVmYXVsdCgpLEMuc3RvcFByb3BhZ2F0aW9uKCksWSgpfSxkaXNhYmxlZDpaLGNsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS01IHJvdW5kZWQtbWQgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGZvY3VzLXZpc2libGU6b3BhY2l0eS0xMDAgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEycyxiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSAke1E/InRleHQtd2hpdGUvODAgaG92ZXI6Ymctd2hpdGUvMjAiOiJ0ZXh0LXdoaXRlLzcwIGhvdmVyOmJnLXdoaXRlLzEyIGhvdmVyOnRleHQtd2hpdGUifWAsY2hpbGRyZW46SygkMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyLjJ9KX0pXX0pXX0pfXZhciBRMj0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKSIsVTM9InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc3BhcmVudCkiO3ZhciBRJD0xMjtmdW5jdGlvbiBXOSh7b3BlbjokLG9uQ2xvc2U6USx3aWR0aDpKLHNpZGU6Wj0icmlnaHQiLGRldmljZXM6WCxzZWxlY3RlZFVkaWQ6WSxvblNlbGVjdDpxLHN0YXJ0aW5nOkcsc2h1dHRpbmdEb3duOk4sb25TaHV0ZG93bjpCfSl7bGV0IFY9KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDp3aW5kb3cuX19TSU1fUFJFVklFV19fKT8uZ3JpZE1lbW9yeUVuZHBvaW50Pz8odHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOnUxKCJncmlkL2FwaS9tZW1vcnkiKSksaz1rOShWLCQpLFtMLE1dPVcoIiIpLEM9XzEoKCk9PntsZXQgej1MLnRyaW0oKS50b0xvd2VyQ2FzZSgpO2lmKCF6fHwhWClyZXR1cm4gWDtyZXR1cm4gWC5maWx0ZXIoKEEpPT5BLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh6KXx8TjUoQS5ydW50aW1lKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHopKX0sW1gsTF0pO3JldHVybiBLKGUwLHtvcGVuOiQsd2lkdGg6SixzaWRlOlosc3R5bGU6e2JhY2tncm91bmRDb2xvcjpRMn0sY2hpbGRyZW46W0soJDIse3N0eWxlOntqdXN0aWZ5Q29udGVudDoiZmxleC1zdGFydCIscGFkZGluZ0xlZnQ6MTYscGFkZGluZ1RvcDoxNixnYXA6NH0sY2hpbGRyZW46W0soImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpRLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCB0ZXh0LVsjOGU4ZTkzXSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6IkNsb3NlIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6ITAsdGl0bGU6IkRldmljZXMiLGNoaWxkcmVuOksoazAse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksSyhWNSx7fSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJweC00IHBiLTIgcHQtMC41IHNocmluay0wIixjaGlsZHJlbjpLKCJsYWJlbCIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMi41IGgtOCByb3VuZGVkLWxnIGJnLXdoaXRlLzYgZm9jdXMtd2l0aGluOmJnLXdoaXRlLzEwIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdIixjaGlsZHJlbjpbSyhfMix7c2l6ZToxNCxzdHJva2VXaWR0aDoyLGNsYXNzTmFtZToidGV4dC13aGl0ZS80MCBzaHJpbmstMCJ9KSxLKCJpbnB1dCIse3ZhbHVlOkwsb25DaGFuZ2U6KHopPT5NKHoudGFyZ2V0LnZhbHVlKSxwbGFjZWhvbGRlcjoiU2VhcmNoIixjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIG91dGxpbmUtbm9uZSB0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzkwIHBsYWNlaG9sZGVyOnRleHQtd2hpdGUvNDAifSksTCYmSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNlYXJjaCIsb25DbGljazooKT0+TSgiIiksY2xhc3NOYW1lOiJzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTQgcm91bmRlZC1mdWxsIGJnLXdoaXRlLzE1IHRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMjUiLGNoaWxkcmVuOksoJDAse3NpemU6OSxzdHJva2VXaWR0aDozfSl9KV19KX0pLEsoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgZmxleC0xIG1pbi1oLTAiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBtaW4taC0wIG92ZXJmbG93LXktYXV0byBweC00IHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46Qz09PW51bGw/SyhKJCx7fSk6Qy5sZW5ndGg9PT0wP0soImRpdiIse2NsYXNzTmFtZToicHgtMiBweS02IHRleHQtd2hpdGUvNDAgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOkw/Ik5vIG1hdGNoaW5nIHNpbXVsYXRvcnMuIjoiTm8gaU9TIHNpbXVsYXRvcnMgYXZhaWxhYmxlLiJ9KTpLKEoxLHtjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIixjaGlsZHJlbjoiQXZhaWxhYmxlIn0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLGNoaWxkcmVuOkMubWFwKCh6KT0+SyhPOSx7ZGV2aWNlOnosYWN0aXZlOnouZGV2aWNlPT09WSxzdGFydGluZzohIUdbei5kZXZpY2VdLHNodXR0aW5nRG93bjohIU5bei5kZXZpY2VdLG9uU2VsZWN0OigpPT5xKHouZGV2aWNlKSxvblNodXRkb3duOigpPT5CKHouZGV2aWNlKX0sei5kZXZpY2UpKX0pXX0pfSksSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtdG9wLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICR7UTJ9IDAlLCAke1UzfSAxMDAlKWB9fSksSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtYm90dG9tLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byB0b3AsICR7UTJ9IDAlLCAke1UzfSAxMDAlKWB9fSldfSksSyhaJCx7cmVwb3J0Omt9KV19KX1mdW5jdGlvbiBKJCgpe3JldHVybiBLKEoxLHtjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3Qtc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBzaW11bGF0b3JzIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOlEkfSwoJCxRKT0+SyhLJCx7aW5kZXg6UX0sUSkpfSldfSl9ZnVuY3Rpb24gSyQoe2luZGV4OiR9KXtsZXQgUT1bInctWzYyJV0iLCJ3LVs3NCVdIiwidy1bNTglXSIsInctWzcwJV0iXVskJTRdLEo9WyJ3LVs0MiVdIiwidy1bMzYlXSIsInctWzQ4JV0iLCJ3LVszMiVdIl1bJCU0XSxaPVsidy03Iiwidy02Iiwidy04Il1bJCUzXTtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgc2VsZWN0LW5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS82IixjaGlsZHJlbjpLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy13aGl0ZS9bMC4xMl0ifSl9KSxLKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6YGgtMyByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdICR7UX1gfSksSygic3BhbiIse2NsYXNzTmFtZTpgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke0p9YH0pXX0pLEsoInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtafWB9KV19KX1mdW5jdGlvbiBaJCh7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPD0wKXJldHVybiBudWxsO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTMgcHktMiBmbGV4IGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpLKEE5LHtyZXBvcnQ6JH0pfSl9ZnVuY3Rpb24gQzUoe3BhbmVsV2lkdGg6JCx2aXNpYmxlOlEsb25Qb2ludGVyRG93bjpKLGFyaWFMYWJlbDpaLHNpZGU6WD0icmlnaHQifSl7bGV0W1kscV09VyghMSksW0csTl09VyghMSksQj1ZfHxHLFU9KFg9PT0ibGVmdCI/MDoxMikrJC05O3JldHVybiBLKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpaLCJhcmlhLWhpZGRlbiI6IVEsb25Qb2ludGVyRG93bjooayk9PntOKCEwKSxKKGspfSxvblBvaW50ZXJVcDooKT0+TighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5OKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgJHtYPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCI6InRvcC0zIGJvdHRvbS0zIn0gdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7UT8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOlg9PT0ibGVmdCI/e2xlZnQ6VX06e3JpZ2h0OlV9LGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Qj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLEsoImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Qj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke0c/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIF85KCl7bGV0WyQsUV09VygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIHgoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgSj13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWj0oKT0+UShKLm1hdGNoZXMpO3JldHVybiBaKCksSi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopLCgpPT5KLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWil9LFtdKSwkfWZ1bmN0aW9uIEg1KCl7bGV0WyQsUV09VygoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4geCgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBKPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFo9KCk9PlEoSi5tYXRjaGVzKTtyZXR1cm4gWigpLEouYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKSwoKT0+Si5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopfSxbXSksJH12YXIgUDk9MjgwO3ZhciBMMz0id2lkdGggNzBtcyBsaW5lYXIiLHozPSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLEQ5PSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsVDk9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixrNT0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsdzk9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsRTk9IjAuMTZzIixJOT0iMC4ycyIseTk9NSxiOT17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxTOT17aWRsZToiIzY4NmU3OCIsaG92ZXI6IiNiN2JiYzIiLGRyYWc6IiNmNGY2ZmEifSx4OT17aWRsZToyLjY1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSx2OT17aWRsZTowLjM4LGhvdmVyOjAuODYsZHJhZzoxfSxGNT1udWxsO2Z1bmN0aW9uIGo5KCl7aWYoRjUhPW51bGwpcmV0dXJuIEY1O2lmKHR5cGVvZiBDU1M+InUifHx0eXBlb2YgQ1NTLnN1cHBvcnRzIT09ImZ1bmN0aW9uIilyZXR1cm4hMTtyZXR1cm4gRjU9Q1NTLnN1cHBvcnRzKCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwibGluZWFyKDAsIDEpIiksRjV9dmFyIFgkPTQwLFI5PTE0LGc5PTI0MCxoOT0zMCxmOT0wLjE1LFkkPTgwLG05PTE1MCxwOT0yNTAsQzM9InNlcnZlLXNpbTpzaW11bGF0b3ItZnJhbWUtc2NhbGUiO2Z1bmN0aW9uIEgzKCQsUSxKLFope2xldCBYPSQqMyxZPVE+MD9NYXRoLm1heCgxODAsUS00OCk6WCxxPUo+MCYmTnVtYmVyLmlzRmluaXRlKFopJiZaPjA/TWF0aC5tYXgoMTgwLChKLTEzNikqWik6WDtyZXR1cm4gTWF0aC5tYXgoMTgwLE1hdGgubWluKFgsWSxxKSl9ZnVuY3Rpb24gUjAoJCxRLEosWixYKXtsZXQgWT1IMyhRLEosWixYKSxxPU1hdGgubWluKDI4MCxZKTtyZXR1cm4gTWF0aC5taW4oWSxNYXRoLm1heChxLCQpKX1mdW5jdGlvbiB1OSgkLFEsSixaLFgpe2xldCBZPU51bWJlci5pc0Zpbml0ZShYKT8kKlg6JDtyZXR1cm4gUjAoWSwkLFEsSixaKX1mdW5jdGlvbiBBNSgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO2xldCBRPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWF4KDEsd2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpOjE7cmV0dXJuIE1hdGgucm91bmQoJCpRKS9RfWZ1bmN0aW9uIEYzKCQsUSl7aWYoJDw9MHx8UTw9MClyZXR1cm4gMDtsZXQgSj0wLjU1LFo9JCpRKkovKFErSiokKTtyZXR1cm4gTWF0aC5taW4oWCQsWil9ZnVuY3Rpb24gbDkoJCxRLEope2xldCBaPSQsWD1KO2ZvcihsZXQgWSBvZiBRKXtsZXQgcT1NYXRoLmFicygkLVkpO2lmKHE8WClaPVksWD1xfXJldHVybiBafWZ1bmN0aW9uIGQ5KCQpe2xldHtmcm9tOlEsdG86Six2ZWxvY2l0eTpaLHN0aWZmbmVzczpYLGRhbXBpbmc6WSxvblVwZGF0ZTpxLG9uQ29tcGxldGU6R309JCxOPTAuNCxCPTAuMDMzMzMzMzMzMzMzMzMzMzMsVT1RLFY9WixrPXBlcmZvcm1hbmNlLm5vdygpLEw9MCxNPSExLEM9KHopPT57aWYoTSlyZXR1cm47bGV0IEE9TWF0aC5taW4oKHotaykvMTAwMCwwLjAzMzMzMzMzMzMzMzMzMzMzKTtrPXo7bGV0IFA9LVgqKFUtSiktWSpWO2lmKFYrPVAqQSxVKz1WKkEsTWF0aC5hYnMoVik8MC40JiZNYXRoLmFicyhVLUopPDAuNCl7cShKKSxHPy4oKTtyZXR1cm59cShVKSxMPXJlcXVlc3RBbmltYXRpb25GcmFtZShDKX07cmV0dXJuIEw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEMpLCgpPT57aWYoTT0hMCxMKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEwpfX1mdW5jdGlvbiBjOSgkKXtpZigkLmxlbmd0aDwyKXJldHVybiAwO2xldCBRPSRbJC5sZW5ndGgtMV0sSj0kWzBdO2ZvcihsZXQgWD0kLmxlbmd0aC0xO1g+PTA7WC0tKWlmKFEudC0kW1hdLnQ+PVkkKXtKPSRbWF07YnJlYWt9bGV0IFo9KFEudC1KLnQpLzEwMDA7cmV0dXJuIFo+MD8oUS54LUoueCkvWjowfXZhciByOT0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiO2Z1bmN0aW9uIHEkKHthcmM6JCxwaGFzZTpRLHJlZHVjZWRNb3Rpb246SixoaWdoQ29udHJhc3Q6Wixmb2N1c1Zpc2libGU6WH0pe2xldCBZPVEhPT0iaWRsZSIscT1aPzEuMTI6MSxHPUo/MTpiOVtRXSxOPXg5W1FdKnEsQj1aPzE6djlbUV0sVT1ZP0U5Okk5LFY9WT9UOTprNSxrPVkmJmo5KCk/dzk6VixMPUo/Im5vbmUiOmB0cmFuc2Zvcm0gJHtVfSAke2t9YCxNPUo/Im5vbmUiOmBzdHJva2UgJHtVfSAke1Z9LCBzdHJva2Utd2lkdGggJHtVfSAke1Z9YCxDPSQudmlld0JveFNpemUsej0kLmQsQT17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtHfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOkwsd2lsbENoYW5nZTpKP3ZvaWQgMDoidHJhbnNmb3JtIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4ifTtyZXR1cm4gSygic3ZnIix7d2lkdGg6QyxoZWlnaHQ6Qyx2aWV3Qm94OmAwIDAgJHtDfSAke0N9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoiaW5oZXJpdCIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbSygiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0soInBhdGgiLHtkOnosZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOih5OSoyKzYpKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpYPzAuOTU6MCx0cmFuc2l0aW9uOko/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7azV9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLEsoInBhdGgiLHtkOnosZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIixzdHJva2VXaWR0aDoxLjUqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Olg/MC43OjAsdHJhbnNpdGlvbjpKPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke2s1fWB9fSldfSksSygiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOkEsY2hpbGRyZW46SygiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0soInBhdGgiLHtkOnosc3Ryb2tlOiIjMzQzNjNiIixzdHJva2VXaWR0aDpOKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6TWF0aC5taW4oMSxCKzAuMDgpLHRyYW5zaXRpb246YCR7TX0sIG9wYWNpdHkgJHtVfSAke1Z9YCxmaWx0ZXI6cjl9fSksSygicGF0aCIse2Q6eixzdHJva2U6UzlbUV0sc3Ryb2tlV2lkdGg6TixzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5OkIsdHJhbnNpdGlvbjpgJHtNfSwgb3BhY2l0eSAke1V9ICR7Vn1gLGZpbHRlcjpyOX19KV19KX0pXX0pfWZ1bmN0aW9uIG85KHtzaW11bGF0b3JSZXNpemU6JCxkZXZpY2VUeXBlOlEsc3RyZWFtQ29uZmlnOkosY29udGFpbmVyV2lkdGg6Wixjb250YWluZXJIZWlnaHQ6WH0pe2xldCBZPUg1KCkscT1fOSgpLFtHLE5dPVcoITEpLEI9XzEoKCk9PnM1KHt0eXBlOlEsY29uZmlnOko/P251bGwsY29udGFpbmVyV2lkdGg6Wixjb250YWluZXJIZWlnaHQ6WH0pLFtRLEosWixYXSksVT0kLmlzUmVzaXppbmd8fCQuaXNJbmVydGlhPyJkcmFnIjokLmhhbmRsZUhvdmVyZWQ/ImhvdmVyIjoiaWRsZSI7cmV0dXJuIEsoImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtbGFiZWwiOiJSZXNpemUgc2ltdWxhdG9yIHdpZHRoLiBEcmFnIHRoZSBjb3JuZXIgb3IgdXNlIExlZnQgYW5kIFJpZ2h0IEFycm93IGtleXM7IGhvbGQgU2hpZnQgZm9yIGxhcmdlciBzdGVwcy4iLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLXZhbHVlbWluIjpNYXRoLnJvdW5kKCQubWluV2lkdGgpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKCQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKCQuY29tbWl0dGVkV2lkdGgpLHRhYkluZGV4OjAscmVmOiQuaGFuZGxlUmVmLG9uS2V5RG93bjokLm9uS2V5RG93bixvblBvaW50ZXJEb3duOiQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOiQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6JC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMSksb25Gb2N1czooVik9PntOKFYuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5OKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIixvdXRsaW5lOiJub25lIix6SW5kZXg6MjUsV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6InRyYW5zcGFyZW50In0sY2hpbGRyZW46SyhxJCx7YXJjOkIscGhhc2U6VSxyZWR1Y2VkTW90aW9uOlksaGlnaENvbnRyYXN0OnEsZm9jdXNWaXNpYmxlOkd9KX0pfWZ1bmN0aW9uIEckKCQpe2lmKCEkfHx0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybjtsZXQgUT1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtKLnR5cGU9InRleHQvY3NzIixRLmFwcGVuZENoaWxkKEopLEouc3R5bGVTaGVldD9KLnN0eWxlU2hlZXQuY3NzVGV4dD0kOkouYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJCkpfXZhciBWJD0oJCk9Pntzd2l0Y2goJCl7Y2FzZSJzdWNjZXNzIjpyZXR1cm4gVSQ7Y2FzZSJpbmZvIjpyZXR1cm4geiQ7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gTCQ7Y2FzZSJlcnJvciI6cmV0dXJuIEMkO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxCJD1BcnJheSgxMikuZmlsbCgwKSxOJD0oe3Zpc2libGU6JCxjbGFzc05hbWU6UX0pPT57cmV0dXJuIGguY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlsic29ubmVyLWxvYWRpbmctd3JhcHBlciIsUV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSwiZGF0YS12aXNpYmxlIjokfSxoLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLXNwaW5uZXIifSxCJC5tYXAoKEosWik9PmguY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItbG9hZGluZy1iYXIiLGtleTpgc3Bpbm5lci1iYXItJHtafWB9KSkpKX0sVSQ9aC5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxoLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuODU3LTkuODA5YS43NS43NSAwIDAwLTEuMjE0LS44ODJsLTMuNDgzIDQuNzktMS44OC0xLjg4YS43NS43NSAwIDEwLTEuMDYgMS4wNjFsMi41IDIuNWEuNzUuNzUgMCAwMDEuMTM3LS4wODlsNC01LjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksTCQ9aC5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxoLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTkuNDAxIDMuMDAzYzEuMTU1LTIgNC4wNDMtMiA1LjE5NyAwbDcuMzU1IDEyLjc0OGMxLjE1NCAyLS4yOSA0LjUtMi41OTkgNC41SDQuNjQ1Yy0yLjMwOSAwLTMuNzUyLTIuNS0yLjU5OC00LjVMOS40IDMuMDAzek0xMiA4LjI1YS43NS43NSAwIDAxLjc1Ljc1djMuNzVhLjc1Ljc1IDAgMDEtMS41IDBWOWEuNzUuNzUgMCAwMS43NS0uNzV6bTAgOC4yNWEuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSx6JD1oLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGguY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03LTRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek05IDlhLjc1Ljc1IDAgMDAwIDEuNWguMjUzYS4yNS4yNSAwIDAxLjI0NC4zMDRsLS40NTkgMi4wNjZBMS43NSAxLjc1IDAgMDAxMC43NDcgMTVIMTFhLjc1Ljc1IDAgMDAwLTEuNWgtLjI1M2EuMjUuMjUgMCAwMS0uMjQ0LS4zMDRsLjQ1OS0yLjA2NkExLjc1IDEuNzUgMCAwMDkuMjUzIDlIOXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxDJD1oLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGguY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS04LTVhLjc1Ljc1IDAgMDEuNzUuNzV2NC41YS43NS43NSAwIDAxLTEuNSAwdi00LjVBLjc1Ljc1IDAgMDExMCA1em0wIDEwYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyeiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLEgkPWguY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoiMTIiLGhlaWdodDoiMTIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifSxoLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLGguY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkpLEYkPSgpPT57bGV0WyQsUV09aC51c2VTdGF0ZShkb2N1bWVudC5oaWRkZW4pO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2xldCBKPSgpPT57UShkb2N1bWVudC5oaWRkZW4pfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsSiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixKKX0sW10pLCR9LGszPTE7Y2xhc3MgYTl7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmliZT0oJCk9PntyZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5wdXNoKCQpLCgpPT57bGV0IFE9dGhpcy5zdWJzY3JpYmVycy5pbmRleE9mKCQpO3RoaXMuc3Vic2NyaWJlcnMuc3BsaWNlKFEsMSl9fSx0aGlzLnB1Ymxpc2g9KCQpPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChRKT0+USgkKSl9LHRoaXMuYWRkVG9hc3Q9KCQpPT57dGhpcy5wdWJsaXNoKCQpLHRoaXMudG9hc3RzPVsuLi50aGlzLnRvYXN0cywkXX0sdGhpcy5jcmVhdGU9KCQpPT57dmFyIFE7bGV0e21lc3NhZ2U6SiwuLi5afT0kLFg9dHlwZW9mKCQ9PW51bGw/dm9pZCAwOiQuaWQpPT09Im51bWJlciJ8fCgoUT0kLmlkKT09bnVsbD92b2lkIDA6US5sZW5ndGgpPjA/JC5pZDprMysrLFk9dGhpcy50b2FzdHMuZmluZCgoRyk9PntyZXR1cm4gRy5pZD09PVh9KSxxPSQuZGlzbWlzc2libGU9PT12b2lkIDA/ITA6JC5kaXNtaXNzaWJsZTtpZih0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoWCkpdGhpcy5kaXNtaXNzZWRUb2FzdHMuZGVsZXRlKFgpO2lmKFkpdGhpcy50b2FzdHM9dGhpcy50b2FzdHMubWFwKChHKT0+e2lmKEcuaWQ9PT1YKXJldHVybiB0aGlzLnB1Ymxpc2goey4uLkcsLi4uJCxpZDpYLHRpdGxlOkp9KSx7Li4uRywuLi4kLGlkOlgsZGlzbWlzc2libGU6cSx0aXRsZTpKfTtyZXR1cm4gR30pO2Vsc2UgdGhpcy5hZGRUb2FzdCh7dGl0bGU6SiwuLi5aLGRpc21pc3NpYmxlOnEsaWQ6WH0pO3JldHVybiBYfSx0aGlzLmRpc21pc3M9KCQpPT57aWYoJCl0aGlzLmRpc21pc3NlZFRvYXN0cy5hZGQoJCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKFEpPT5RKHtpZDokLGRpc21pc3M6ITB9KSkpO2Vsc2UgdGhpcy50b2FzdHMuZm9yRWFjaCgoUSk9Pnt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKEopPT5KKHtpZDpRLmlkLGRpc21pc3M6ITB9KSl9KTtyZXR1cm4gJH0sdGhpcy5tZXNzYWdlPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLG1lc3NhZ2U6JH0pfSx0aGlzLmVycm9yPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLG1lc3NhZ2U6JCx0eXBlOiJlcnJvciJ9KX0sdGhpcy5zdWNjZXNzPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLHR5cGU6InN1Y2Nlc3MiLG1lc3NhZ2U6JH0pfSx0aGlzLmluZm89KCQsUSk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLlEsdHlwZToiaW5mbyIsbWVzc2FnZTokfSl9LHRoaXMud2FybmluZz0oJCxRKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uUSx0eXBlOiJ3YXJuaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5sb2FkaW5nPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLHR5cGU6ImxvYWRpbmciLG1lc3NhZ2U6JH0pfSx0aGlzLnByb21pc2U9KCQsUSk9PntpZighUSlyZXR1cm47bGV0IEo9dm9pZCAwO2lmKFEubG9hZGluZyE9PXZvaWQgMClKPXRoaXMuY3JlYXRlKHsuLi5RLHByb21pc2U6JCx0eXBlOiJsb2FkaW5nIixtZXNzYWdlOlEubG9hZGluZyxkZXNjcmlwdGlvbjp0eXBlb2YgUS5kZXNjcmlwdGlvbiE9PSJmdW5jdGlvbiI/US5kZXNjcmlwdGlvbjp2b2lkIDB9KTtsZXQgWj1Qcm9taXNlLnJlc29sdmUoJCBpbnN0YW5jZW9mIEZ1bmN0aW9uPyQoKTokKSxYPUohPT12b2lkIDAsWSxxPVoudGhlbihhc3luYyhOKT0+e2lmKFk9WyJyZXNvbHZlIixOXSxoLmlzVmFsaWRFbGVtZW50KE4pKVg9ITEsdGhpcy5jcmVhdGUoe2lkOkosdHlwZToiZGVmYXVsdCIsbWVzc2FnZTpOfSk7ZWxzZSBpZihBJChOKSYmIU4ub2spe1g9ITE7bGV0IFU9dHlwZW9mIFEuZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IFEuZXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtOLnN0YXR1c31gKTpRLmVycm9yLFY9dHlwZW9mIFEuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IFEuZGVzY3JpcHRpb24oYEhUVFAgZXJyb3IhIHN0YXR1czogJHtOLnN0YXR1c31gKTpRLmRlc2NyaXB0aW9uLEw9dHlwZW9mIFU9PT0ib2JqZWN0IiYmIWguaXNWYWxpZEVsZW1lbnQoVSk/VTp7bWVzc2FnZTpVfTt0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246ViwuLi5MfSl9ZWxzZSBpZihOIGluc3RhbmNlb2YgRXJyb3Ipe1g9ITE7bGV0IFU9dHlwZW9mIFEuZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IFEuZXJyb3IoTik6US5lcnJvcixWPXR5cGVvZiBRLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBRLmRlc2NyaXB0aW9uKE4pOlEuZGVzY3JpcHRpb24sTD10eXBlb2YgVT09PSJvYmplY3QiJiYhaC5pc1ZhbGlkRWxlbWVudChVKT9VOnttZXNzYWdlOlV9O3RoaXMuY3JlYXRlKHtpZDpKLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpWLC4uLkx9KX1lbHNlIGlmKFEuc3VjY2VzcyE9PXZvaWQgMCl7WD0hMTtsZXQgVT10eXBlb2YgUS5zdWNjZXNzPT09ImZ1bmN0aW9uIj9hd2FpdCBRLnN1Y2Nlc3MoTik6US5zdWNjZXNzLFY9dHlwZW9mIFEuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IFEuZGVzY3JpcHRpb24oTik6US5kZXNjcmlwdGlvbixMPXR5cGVvZiBVPT09Im9iamVjdCImJiFoLmlzVmFsaWRFbGVtZW50KFUpP1U6e21lc3NhZ2U6VX07dGhpcy5jcmVhdGUoe2lkOkosdHlwZToic3VjY2VzcyIsZGVzY3JpcHRpb246ViwuLi5MfSl9fSkuY2F0Y2goYXN5bmMoTik9PntpZihZPVsicmVqZWN0IixOXSxRLmVycm9yIT09dm9pZCAwKXtYPSExO2xldCBCPXR5cGVvZiBRLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBRLmVycm9yKE4pOlEuZXJyb3IsVT10eXBlb2YgUS5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgUS5kZXNjcmlwdGlvbihOKTpRLmRlc2NyaXB0aW9uLGs9dHlwZW9mIEI9PT0ib2JqZWN0IiYmIWguaXNWYWxpZEVsZW1lbnQoQik/Qjp7bWVzc2FnZTpCfTt0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246VSwuLi5rfSl9fSkuZmluYWxseSgoKT0+e2lmKFgpdGhpcy5kaXNtaXNzKEopLEo9dm9pZCAwO1EuZmluYWxseT09bnVsbHx8US5maW5hbGx5LmNhbGwoUSl9KSxHPSgpPT5uZXcgUHJvbWlzZSgoTixCKT0+cS50aGVuKCgpPT5ZWzBdPT09InJlamVjdCI/QihZWzFdKTpOKFlbMV0pKS5jYXRjaChCKSk7aWYodHlwZW9mIEohPT0ic3RyaW5nIiYmdHlwZW9mIEohPT0ibnVtYmVyIilyZXR1cm57dW53cmFwOkd9O2Vsc2UgcmV0dXJuIE9iamVjdC5hc3NpZ24oSix7dW53cmFwOkd9KX0sdGhpcy5jdXN0b209KCQsUSk9PntsZXQgSj0oUT09bnVsbD92b2lkIDA6US5pZCl8fGszKys7cmV0dXJuIHRoaXMuY3JlYXRlKHtqc3g6JChKKSxpZDpKLC4uLlF9KSxKfSx0aGlzLmdldEFjdGl2ZVRvYXN0cz0oKT0+e3JldHVybiB0aGlzLnRvYXN0cy5maWx0ZXIoKCQpPT4hdGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKCQuaWQpKX0sdGhpcy5zdWJzY3JpYmVycz1bXSx0aGlzLnRvYXN0cz1bXSx0aGlzLmRpc21pc3NlZFRvYXN0cz1uZXcgU2V0fX12YXIgczE9bmV3IGE5LGskPSgkLFEpPT57bGV0IEo9KFE9PW51bGw/dm9pZCAwOlEuaWQpfHxrMysrO3JldHVybiBzMS5hZGRUb2FzdCh7dGl0bGU6JCwuLi5RLGlkOkp9KSxKfSxBJD0oJCk9PntyZXR1cm4gJCYmdHlwZW9mICQ9PT0ib2JqZWN0IiYmIm9rImluICQmJnR5cGVvZiAkLm9rPT09ImJvb2xlYW4iJiYic3RhdHVzImluICQmJnR5cGVvZiAkLnN0YXR1cz09PSJudW1iZXIifSxNJD1rJCxPJD0oKT0+czEudG9hc3RzLFckPSgpPT5zMS5nZXRBY3RpdmVUb2FzdHMoKSxiMj1PYmplY3QuYXNzaWduKE0kLHtzdWNjZXNzOnMxLnN1Y2Nlc3MsaW5mbzpzMS5pbmZvLHdhcm5pbmc6czEud2FybmluZyxlcnJvcjpzMS5lcnJvcixjdXN0b206czEuY3VzdG9tLG1lc3NhZ2U6czEubWVzc2FnZSxwcm9taXNlOnMxLnByb21pc2UsZGlzbWlzczpzMS5kaXNtaXNzLGxvYWRpbmc6czEubG9hZGluZ30se2dldEhpc3Rvcnk6TyQsZ2V0VG9hc3RzOlckfSk7RyQoIltkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9bHRyXSxodG1sW2Rpcj1sdHJdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6LTNweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDo0cHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0Oi0xcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDowcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OmF1dG87LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OjA7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoLTM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxdLGh0bWxbZGlyPXJ0bF17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDo0cHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6LTNweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6MHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6LTFweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6MDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOmF1dG87LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgzNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1mYW1pbHk6dWktc2Fucy1zZXJpZixzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLEhlbHZldGljYSBOZXVlLEFyaWFsLE5vdG8gU2FucyxzYW5zLXNlcmlmLEFwcGxlIENvbG9yIEVtb2ppLFNlZ29lIFVJIEVtb2ppLFNlZ29lIFVJIFN5bWJvbCxOb3RvIENvbG9yIEVtb2ppOy0tZ3JheTE6aHNsKDAsIDAlLCA5OSUpOy0tZ3JheTI6aHNsKDAsIDAlLCA5Ny4zJSk7LS1ncmF5Mzpoc2woMCwgMCUsIDk1LjElKTstLWdyYXk0OmhzbCgwLCAwJSwgOTMlKTstLWdyYXk1OmhzbCgwLCAwJSwgOTAuOSUpOy0tZ3JheTY6aHNsKDAsIDAlLCA4OC43JSk7LS1ncmF5Nzpoc2woMCwgMCUsIDg1LjglKTstLWdyYXk4OmhzbCgwLCAwJSwgNzglKTstLWdyYXk5OmhzbCgwLCAwJSwgNTYuMSUpOy0tZ3JheTEwOmhzbCgwLCAwJSwgNTIuMyUpOy0tZ3JheTExOmhzbCgwLCAwJSwgNDMuNSUpOy0tZ3JheTEyOmhzbCgwLCAwJSwgOSUpOy0tYm9yZGVyLXJhZGl1czo4cHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7b3V0bGluZTowO3otaW5kZXg6OTk5OTk5OTk5O3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlfUBtZWRpYSAoaG92ZXI6bm9uZSkgYW5kIChwb2ludGVyOmNvYXJzZSl7W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtbGlmdGVkPXRydWVde3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDp2YXIoLS1vZmZzZXQtcmlnaHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rdey0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpO3otaW5kZXg6dmFyKC0tei1pbmRleCk7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RyYW5zZm9ybTp2YXIoLS15KTt0b3VjaC1hY3Rpb246bm9uZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMsb3BhY2l0eSAuNHMsaGVpZ2h0IC40cyxib3gtc2hhZG93IC4ycztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTowO292ZXJmbG93LXdyYXA6YW55d2hlcmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXXtwYWRkaW5nOjE2cHg7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JvcmRlci1yYWRpdXM6dmFyKC0tYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9W2RhdGEtc29ubmVyLXRvYXN0XTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6MDstLXk6dHJhbnNsYXRlWSgtMTAwJSk7LS1saWZ0OjE7LS1saWZ0LWFtb3VudDpjYWxjKDEgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTowOy0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdDotMTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiMzZjNmM2Z9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6I2U4ZThlOH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLXRpdGxlXXtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXByb21pc2U9dHJ1ZV0gW2RhdGEtaWNvbl0+c3Zne29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1pbiAuM3MgZWFzZSBmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dPip7ZmxleC1zaHJpbms6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dIHN2Z3ttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXXtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLW5vcm1hbC1iZyk7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtdGV4dCk7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKTtib3JkZXI6bm9uZTtmb250LXdlaWdodDo1MDA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzLGJveC1zaGFkb3cgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMCwwLDAsLjQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmaXJzdC1vZi10eXBle21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA4KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25de3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0KTtyaWdodDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tZW5kKTt0b3A6MDtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tZ3JheTEyKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ncmF5NCk7dHJhbnNmb3JtOnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm0pO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzLGJhY2tncm91bmQgLjJzLGJvcmRlci1jb2xvciAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRpc2FibGVkPXRydWVde2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdOmhvdmVyIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ncmF5Mik7Ym9yZGVyLWNvbG9yOnZhcigtLWdyYXk1KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTAwJTtyaWdodDotMTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4Oi0xfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Ym90dG9tOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle3RvcDo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPWZhbHNlXVtkYXRhLXJlbW92ZWQ9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7dHJhbnNmb3JtOnNjYWxlWSgyKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV06OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2hlaWdodDpjYWxjKHZhcigtLWdhcCkgKyAxcHgpO2JvdHRvbToxMDAlO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoMCk7b3BhY2l0eToxfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV17LS1zY2FsZTp2YXIoLS10b2FzdHMtYmVmb3JlKSAqIDAuMDUgKyAxOy0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdC1hbW91bnQpICogdmFyKC0tdG9hc3RzLWJlZm9yZSkpKSBzY2FsZShjYWxjKC0xICogdmFyKC0tc2NhbGUpKSk7aGVpZ2h0OnZhcigtLWZyb250LXRvYXN0LWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246b3BhY2l0eSAuNHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zdHlsZWQ9dHJ1ZV0+KntvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkpKTtoZWlnaHQ6dmFyKC0taW5pdGlhbC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9dHJ1ZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSArIHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKDQwJSk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIC41cyxvcGFjaXR5IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXTo6YmVmb3Jle2hlaWdodDpjYWxjKHZhcigtLWluaXRpYWwtaGVpZ2h0KSArIDIwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV17dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXksMCkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgsMCkpO3RyYW5zaXRpb246bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGVkPXRydWVde3VzZXItc2VsZWN0Om5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXSxbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj10b3Bde2FuaW1hdGlvbi1kdXJhdGlvbjouMnM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249bGVmdF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWxlZnR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1yaWdodF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXJpZ2h0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249dXBde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC11cH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWRvd25de2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1kb3dufUBrZXlmcmFtZXMgc3dpcGUtb3V0LWxlZnR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXJpZ2h0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgKyAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC11cHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtZG93bntmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpICsgMTAwJSkpO29wYWNpdHk6MH19QG1lZGlhIChtYXgtd2lkdGg6NjAwcHgpe1tkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF17bGVmdDpjYWxjKHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAtMSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdIFtkYXRhLXNvbm5lci10b2FzdF17bGVmdDowO3JpZ2h0OjA7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIDIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tbW9iaWxlLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tbW9iaWxlLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTQpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKTstLXN1Y2Nlc3MtYmc6aHNsKDE0MywgODUlLCA5NiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NSwgOTIlLCA4NyUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNDAsIDEwMCUsIDI3JSk7LS1pbmZvLWJnOmhzbCgyMDgsIDEwMCUsIDk3JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIxLCA5MSUsIDkzJSk7LS1pbmZvLXRleHQ6aHNsKDIxMCwgOTIlLCA0NSUpOy0td2FybmluZy1iZzpoc2woNDksIDEwMCUsIDk3JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNDksIDkxJSwgODQlKTstLXdhcm5pbmctdGV4dDpoc2woMzEsIDkyJSwgNDUlKTstLWVycm9yLWJnOmhzbCgzNTksIDEwMCUsIDk3JSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1OSwgMTAwJSwgOTQlKTstLWVycm9yLXRleHQ6aHNsKDM2MCwgMTAwJSwgNDUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXkzKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYmctaG92ZXI6aHNsKDAsIDAlLCAxMiUpOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtYm9yZGVyLWhvdmVyOmhzbCgwLCAwJSwgMjUlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKTstLXN1Y2Nlc3MtYmc6aHNsKDE1MCwgMTAwJSwgNiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NywgMTAwJSwgMTIlKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTUwLCA4NiUsIDY1JSk7LS1pbmZvLWJnOmhzbCgyMTUsIDEwMCUsIDYlKTstLWluZm8tYm9yZGVyOmhzbCgyMjMsIDQzJSwgMTclKTstLWluZm8tdGV4dDpoc2woMjE2LCA4NyUsIDY1JSk7LS13YXJuaW5nLWJnOmhzbCg2NCwgMTAwJSwgNiUpOy0td2FybmluZy1ib3JkZXI6aHNsKDYwLCAxMDAlLCA5JSk7LS13YXJuaW5nLXRleHQ6aHNsKDQ2LCA4NyUsIDY1JSk7LS1lcnJvci1iZzpoc2woMzU4LCA3NiUsIDEwJSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1NywgODklLCAxNiUpOy0tZXJyb3ItdGV4dDpoc2woMzU4LCAxMDAlLCA4MSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZy1ob3Zlcik7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXItaG92ZXIpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc117YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb117YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ117YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3Jde2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3JdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJ7LS1zaXplOjE2cHg7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7ei1pbmRleDoxMH0uc29ubmVyLWxvYWRpbmctd3JhcHBlcltkYXRhLXZpc2libGU9ZmFsc2Vde3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1vdXQgLjJzIGVhc2UgZm9yd2FyZHN9LnNvbm5lci1zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDo1MCU7bGVmdDo1MCU7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpfS5zb25uZXItbG9hZGluZy1iYXJ7YW5pbWF0aW9uOnNvbm5lci1zcGluIDEuMnMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQ6dmFyKC0tZ3JheTExKTtib3JkZXItcmFkaXVzOjZweDtoZWlnaHQ6OCU7bGVmdDotMTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMy45JTt3aWR0aDoyNCV9LnNvbm5lci1sb2FkaW5nLWJhcjpmaXJzdC1jaGlsZHthbmltYXRpb24tZGVsYXk6LTEuMnM7dHJhbnNmb3JtOnJvdGF0ZSguMDAwMWRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDIpe2FuaW1hdGlvbi1kZWxheTotMS4xczt0cmFuc2Zvcm06cm90YXRlKDMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMyl7YW5pbWF0aW9uLWRlbGF5Oi0xczt0cmFuc2Zvcm06cm90YXRlKDYwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNCl7YW5pbWF0aW9uLWRlbGF5Oi0uOXM7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDUpe2FuaW1hdGlvbi1kZWxheTotLjhzO3RyYW5zZm9ybTpyb3RhdGUoMTIwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNil7YW5pbWF0aW9uLWRlbGF5Oi0uN3M7dHJhbnNmb3JtOnJvdGF0ZSgxNTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg3KXthbmltYXRpb24tZGVsYXk6LS42czt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDgpe2FuaW1hdGlvbi1kZWxheTotLjVzO3RyYW5zZm9ybTpyb3RhdGUoMjEwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOSl7YW5pbWF0aW9uLWRlbGF5Oi0uNHM7dHJhbnNmb3JtOnJvdGF0ZSgyNDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMCl7YW5pbWF0aW9uLWRlbGF5Oi0uM3M7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMSl7YW5pbWF0aW9uLWRlbGF5Oi0uMnM7dHJhbnNmb3JtOnJvdGF0ZSgzMDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMil7YW5pbWF0aW9uLWRlbGF5Oi0uMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBzb25uZXItZmFkZS1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfX1Aa2V5ZnJhbWVzIHNvbm5lci1zcGluezAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6LjE1fX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5zb25uZXItbG9hZGluZy1iYXIsW2RhdGEtc29ubmVyLXRvYXN0XSxbZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudDthbmltYXRpb246bm9uZSFpbXBvcnRhbnR9fS5zb25uZXItbG9hZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246b3BhY2l0eSAuMnMsdHJhbnNmb3JtIC4yc30uc29ubmVyLWxvYWRlcltkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZSgtNTAlLC01MCUpfSIpO2Z1bmN0aW9uIE01KCQpe3JldHVybiAkLmxhYmVsIT09dm9pZCAwfXZhciBfJD0zLFAkPSIyNHB4IixEJD0iMTZweCIsaTk9NDAwMCxUJD0zNTYsdyQ9MTQsRSQ9NDUsSSQ9MjAwO2Z1bmN0aW9uIEEwKC4uLiQpe3JldHVybiAkLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9ZnVuY3Rpb24geSQoJCl7bGV0W1EsSl09JC5zcGxpdCgiLSIpLFo9W107aWYoUSlaLnB1c2goUSk7aWYoSilaLnB1c2goSik7cmV0dXJuIFp9dmFyIGIkPSgkKT0+e3ZhciBRLEosWixYLFkscSxHLE4sQjtsZXR7aW52ZXJ0OlUsdG9hc3Q6Vix1bnN0eWxlZDprLGludGVyYWN0aW5nOkwsc2V0SGVpZ2h0czpNLHZpc2libGVUb2FzdHM6QyxoZWlnaHRzOnosaW5kZXg6QSx0b2FzdHM6UCxleHBhbmRlZDpSLHJlbW92ZVRvYXN0OkksZGVmYXVsdFJpY2hDb2xvcnM6VCxjbG9zZUJ1dHRvbjp5LHN0eWxlOmMsY2FuY2VsQnV0dG9uU3R5bGU6bSxhY3Rpb25CdXR0b25TdHlsZTpmLGNsYXNzTmFtZTp1PSIiLGRlc2NyaXB0aW9uQ2xhc3NOYW1lOnoxPSIiLGR1cmF0aW9uOlExLHBvc2l0aW9uOm4sZ2FwOkwxLGV4cGFuZEJ5RGVmYXVsdDpsLGNsYXNzTmFtZXM6aixpY29uczpLMSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpCMT0iQ2xvc2UgdG9hc3QifT0kLFtWMSxlXT1oLnVzZVN0YXRlKG51bGwpLFtYMSxOMV09aC51c2VTdGF0ZShudWxsKSxbdixnXT1oLnVzZVN0YXRlKCExKSxbTyxTXT1oLnVzZVN0YXRlKCExKSxbaSxyXT1oLnVzZVN0YXRlKCExKSxbcTEsWjFdPWgudXNlU3RhdGUoITEpLFt5MSxiMV09aC51c2VTdGF0ZSghMSksW3QxLE8xXT1oLnVzZVN0YXRlKDApLFtyMSxNMF09aC51c2VTdGF0ZSgwKSxRMD1oLnVzZVJlZihWLmR1cmF0aW9ufHxRMXx8aTkpLE0xPWgudXNlUmVmKG51bGwpLFMxPWgudXNlUmVmKG51bGwpLE8wPUE9PT0wLEowPUErMTw9QyxGMT1WLnR5cGUsbDE9Vi5kaXNtaXNzaWJsZSE9PSExLFcwPVYuY2xhc3NOYW1lfHwiIixEMT1WLmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIixwMT1oLnVzZU1lbW8oKCk9PnouZmluZEluZGV4KCgkMSk9PiQxLnRvYXN0SWQ9PT1WLmlkKXx8MCxbeixWLmlkXSksTjA9aC51c2VNZW1vKCgpPT57dmFyICQxO3JldHVybigkMT1WLmNsb3NlQnV0dG9uKSE9bnVsbD8kMTp5fSxbVi5jbG9zZUJ1dHRvbix5XSkseDE9aC51c2VNZW1vKCgpPT5WLmR1cmF0aW9ufHxRMXx8aTksW1YuZHVyYXRpb24sUTFdKSxUMT1oLnVzZVJlZigwKSxuMT1oLnVzZVJlZigwKSxLMD1oLnVzZVJlZigwKSxvMT1oLnVzZVJlZihudWxsKSxbVTAsRDBdPW4uc3BsaXQoIi0iKSxfMD1oLnVzZU1lbW8oKCk9PntyZXR1cm4gei5yZWR1Y2UoKCQxLF8scCk9PntpZihwPj1wMSlyZXR1cm4gJDE7cmV0dXJuICQxK18uaGVpZ2h0fSwwKX0sW3oscDFdKSxkMT1GJCgpLHcxPVYuaW52ZXJ0fHxVLGoxPUYxPT09ImxvYWRpbmciO24xLmN1cnJlbnQ9aC51c2VNZW1vKCgpPT5wMSpMMStfMCxbcDEsXzBdKSxoLnVzZUVmZmVjdCgoKT0+e1EwLmN1cnJlbnQ9eDF9LFt4MV0pLGgudXNlRWZmZWN0KCgpPT57ZyghMCl9LFtdKSxoLnVzZUVmZmVjdCgoKT0+e2xldCAkMT1TMS5jdXJyZW50O2lmKCQxKXtsZXQgXz0kMS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7cmV0dXJuIE0wKF8pLE0oKHApPT5be3RvYXN0SWQ6Vi5pZCxoZWlnaHQ6Xyxwb3NpdGlvbjpWLnBvc2l0aW9ufSwuLi5wXSksKCk9Pk0oKHApPT5wLmZpbHRlcigodCk9PnQudG9hc3RJZCE9PVYuaWQpKX19LFtNLFYuaWRdKSxoLnVzZUxheW91dEVmZmVjdCgoKT0+e2lmKCF2KXJldHVybjtsZXQgJDE9UzEuY3VycmVudCxfPSQxLnN0eWxlLmhlaWdodDskMS5zdHlsZS5oZWlnaHQ9ImF1dG8iO2xldCBwPSQxLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDskMS5zdHlsZS5oZWlnaHQ9XyxNMChwKSxNKCh0KT0+e2lmKCF0LmZpbmQoKEcxKT0+RzEudG9hc3RJZD09PVYuaWQpKXJldHVyblt7dG9hc3RJZDpWLmlkLGhlaWdodDpwLHBvc2l0aW9uOlYucG9zaXRpb259LC4uLnRdO2Vsc2UgcmV0dXJuIHQubWFwKChHMSk9PkcxLnRvYXN0SWQ9PT1WLmlkP3suLi5HMSxoZWlnaHQ6cH06RzEpfSl9LFt2LFYudGl0bGUsVi5kZXNjcmlwdGlvbixNLFYuaWQsVi5qc3gsVi5hY3Rpb24sVi5jYW5jZWxdKTtsZXQgZzE9aC51c2VDYWxsYmFjaygoKT0+e1MoITApLE8xKG4xLmN1cnJlbnQpLE0oKCQxKT0+JDEuZmlsdGVyKChfKT0+Xy50b2FzdElkIT09Vi5pZCkpLHNldFRpbWVvdXQoKCk9PntJKFYpfSxJJCl9LFtWLEksTSxuMV0pO2gudXNlRWZmZWN0KCgpPT57aWYoVi5wcm9taXNlJiZGMT09PSJsb2FkaW5nInx8Vi5kdXJhdGlvbj09PTEvMHx8Vi50eXBlPT09ImxvYWRpbmciKXJldHVybjtsZXQgJDEsXz0oKT0+e2lmKEswLmN1cnJlbnQ8VDEuY3VycmVudCl7bGV0IHQ9bmV3IERhdGUoKS5nZXRUaW1lKCktVDEuY3VycmVudDtRMC5jdXJyZW50PVEwLmN1cnJlbnQtdH1LMC5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpfSxwPSgpPT57aWYoUTAuY3VycmVudD09PTEvMClyZXR1cm47VDEuY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKSwkMT1zZXRUaW1lb3V0KCgpPT57Vi5vbkF1dG9DbG9zZT09bnVsbHx8Vi5vbkF1dG9DbG9zZS5jYWxsKFYsViksZzEoKX0sUTAuY3VycmVudCl9O2lmKFJ8fEx8fGQxKV8oKTtlbHNlIHAoKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KCQxKX0sW1IsTCxWLEYxLGQxLGcxXSksaC51c2VFZmZlY3QoKCk9PntpZihWLmRlbGV0ZSlnMSgpLFYub25EaXNtaXNzPT1udWxsfHxWLm9uRGlzbWlzcy5jYWxsKFYsVil9LFtnMSxWLmRlbGV0ZV0pO2Z1bmN0aW9uIGkxKCl7dmFyICQxO2lmKEsxPT1udWxsP3ZvaWQgMDpLMS5sb2FkaW5nKXt2YXIgXztyZXR1cm4gaC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6QTAoaj09bnVsbD92b2lkIDA6ai5sb2FkZXIsVj09bnVsbD92b2lkIDA6KF89Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Xy5sb2FkZXIsInNvbm5lci1sb2FkZXIiKSwiZGF0YS12aXNpYmxlIjpGMT09PSJsb2FkaW5nIn0sSzEubG9hZGluZyl9cmV0dXJuIGguY3JlYXRlRWxlbWVudChOJCx7Y2xhc3NOYW1lOkEwKGo9PW51bGw/dm9pZCAwOmoubG9hZGVyLFY9PW51bGw/dm9pZCAwOigkMT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDokMS5sb2FkZXIpLHZpc2libGU6RjE9PT0ibG9hZGluZyJ9KX1sZXQgWjA9Vi5pY29ufHwoSzE9PW51bGw/dm9pZCAwOksxW0YxXSl8fFYkKEYxKTt2YXIgTDAsZTE7cmV0dXJuIGguY3JlYXRlRWxlbWVudCgibGkiLHt0YWJJbmRleDowLHJlZjpTMSxjbGFzc05hbWU6QTAodSxXMCxqPT1udWxsP3ZvaWQgMDpqLnRvYXN0LFY9PW51bGw/dm9pZCAwOihRPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlEudG9hc3Qsaj09bnVsbD92b2lkIDA6ai5kZWZhdWx0LGo9PW51bGw/dm9pZCAwOmpbRjFdLFY9PW51bGw/dm9pZCAwOihKPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkpbRjFdKSwiZGF0YS1zb25uZXItdG9hc3QiOiIiLCJkYXRhLXJpY2gtY29sb3JzIjooTDA9Vi5yaWNoQ29sb3JzKSE9bnVsbD9MMDpULCJkYXRhLXN0eWxlZCI6IUJvb2xlYW4oVi5qc3h8fFYudW5zdHlsZWR8fGspLCJkYXRhLW1vdW50ZWQiOnYsImRhdGEtcHJvbWlzZSI6Qm9vbGVhbihWLnByb21pc2UpLCJkYXRhLXN3aXBlZCI6eTEsImRhdGEtcmVtb3ZlZCI6TywiZGF0YS12aXNpYmxlIjpKMCwiZGF0YS15LXBvc2l0aW9uIjpVMCwiZGF0YS14LXBvc2l0aW9uIjpEMCwiZGF0YS1pbmRleCI6QSwiZGF0YS1mcm9udCI6TzAsImRhdGEtc3dpcGluZyI6aSwiZGF0YS1kaXNtaXNzaWJsZSI6bDEsImRhdGEtdHlwZSI6RjEsImRhdGEtaW52ZXJ0Ijp3MSwiZGF0YS1zd2lwZS1vdXQiOnExLCJkYXRhLXN3aXBlLWRpcmVjdGlvbiI6WDEsImRhdGEtZXhwYW5kZWQiOkJvb2xlYW4oUnx8bCYmdiksImRhdGEtdGVzdGlkIjpWLnRlc3RJZCxzdHlsZTp7Ii0taW5kZXgiOkEsIi0tdG9hc3RzLWJlZm9yZSI6QSwiLS16LWluZGV4IjpQLmxlbmd0aC1BLCItLW9mZnNldCI6YCR7Tz90MTpuMS5jdXJyZW50fXB4YCwiLS1pbml0aWFsLWhlaWdodCI6bD8iYXV0byI6YCR7cjF9cHhgLC4uLmMsLi4uVi5zdHlsZX0sb25EcmFnRW5kOigpPT57cighMSksZShudWxsKSxvMS5jdXJyZW50PW51bGx9LG9uUG9pbnRlckRvd246KCQxKT0+e2lmKCQxLmJ1dHRvbj09PTIpcmV0dXJuO2lmKGoxfHwhbDEpcmV0dXJuO2lmKE0xLmN1cnJlbnQ9bmV3IERhdGUsTzEobjEuY3VycmVudCksJDEudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKCQxLnBvaW50ZXJJZCksJDEudGFyZ2V0LnRhZ05hbWU9PT0iQlVUVE9OIilyZXR1cm47cighMCksbzEuY3VycmVudD17eDokMS5jbGllbnRYLHk6JDEuY2xpZW50WX19LG9uUG9pbnRlclVwOigpPT57dmFyICQxLF8scDtpZihxMXx8IWwxKXJldHVybjtvMS5jdXJyZW50PW51bGw7bGV0IHQ9TnVtYmVyKCgoJDE9UzEuY3VycmVudCk9PW51bGw/dm9pZCAwOiQxLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXgiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksYT1OdW1iZXIoKChfPVMxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpfLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXkiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksRzE9bmV3IERhdGUoKS5nZXRUaW1lKCktKChwPU0xLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpwLmdldFRpbWUoKSksWTE9VjE9PT0ieCI/dDphLEUxPU1hdGguYWJzKFkxKS9HMTtpZihNYXRoLmFicyhZMSk+PUUkfHxFMT4wLjExKXtpZihPMShuMS5jdXJyZW50KSxWLm9uRGlzbWlzcz09bnVsbHx8Vi5vbkRpc21pc3MuY2FsbChWLFYpLFYxPT09IngiKU4xKHQ+MD8icmlnaHQiOiJsZWZ0Iik7ZWxzZSBOMShhPjA/ImRvd24iOiJ1cCIpO2cxKCksWjEoITApO3JldHVybn1lbHNle3ZhciBSMSxjMTsoUjE9UzEuY3VycmVudCk9PW51bGx8fFIxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC14IiwiMHB4IiksKGMxPVMxLmN1cnJlbnQpPT1udWxsfHxjMS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteSIsIjBweCIpfWIxKCExKSxyKCExKSxlKG51bGwpfSxvblBvaW50ZXJNb3ZlOigkMSk9Pnt2YXIgXyxwLHQ7aWYoIW8xLmN1cnJlbnR8fCFsMSlyZXR1cm47aWYoKChfPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSk9PW51bGw/dm9pZCAwOl8udG9TdHJpbmcoKS5sZW5ndGgpPjApcmV0dXJuO2xldCBHMT0kMS5jbGllbnRZLW8xLmN1cnJlbnQueSxZMT0kMS5jbGllbnRYLW8xLmN1cnJlbnQueDt2YXIgRTE7bGV0IFIxPShFMT0kLnN3aXBlRGlyZWN0aW9ucykhPW51bGw/RTE6eSQobik7aWYoIVYxJiYoTWF0aC5hYnMoWTEpPjF8fE1hdGguYWJzKEcxKT4xKSllKE1hdGguYWJzKFkxKT5NYXRoLmFicyhHMSk/IngiOiJ5Iik7bGV0IGMxPXt4OjAseTowfSxYMD0oWTApPT57cmV0dXJuIDEvKDEuNStNYXRoLmFicyhZMCkvMjApfTtpZihWMT09PSJ5Iil7aWYoUjEuaW5jbHVkZXMoInRvcCIpfHxSMS5pbmNsdWRlcygiYm90dG9tIikpaWYoUjEuaW5jbHVkZXMoInRvcCIpJiZHMTwwfHxSMS5pbmNsdWRlcygiYm90dG9tIikmJkcxPjApYzEueT1HMTtlbHNle2xldCBZMD1HMSpYMChHMSk7YzEueT1NYXRoLmFicyhZMCk8TWF0aC5hYnMoRzEpP1kwOkcxfX1lbHNlIGlmKFYxPT09IngiKXtpZihSMS5pbmNsdWRlcygibGVmdCIpfHxSMS5pbmNsdWRlcygicmlnaHQiKSlpZihSMS5pbmNsdWRlcygibGVmdCIpJiZZMTwwfHxSMS5pbmNsdWRlcygicmlnaHQiKSYmWTE+MCljMS54PVkxO2Vsc2V7bGV0IFkwPVkxKlgwKFkxKTtjMS54PU1hdGguYWJzKFkwKTxNYXRoLmFicyhZMSk/WTA6WTF9fWlmKE1hdGguYWJzKGMxLngpPjB8fE1hdGguYWJzKGMxLnkpPjApYjEoITApOyhwPVMxLmN1cnJlbnQpPT1udWxsfHxwLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC14IixgJHtjMS54fXB4YCksKHQ9UzEuY3VycmVudCk9PW51bGx8fHQuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXkiLGAke2MxLnl9cHhgKX19LE4wJiYhVi5qc3gmJkYxIT09ImxvYWRpbmciP2guY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7ImFyaWEtbGFiZWwiOkIxLCJkYXRhLWRpc2FibGVkIjpqMSwiZGF0YS1jbG9zZS1idXR0b24iOiEwLG9uQ2xpY2s6ajF8fCFsMT8oKT0+e306KCk9PntnMSgpLFYub25EaXNtaXNzPT1udWxsfHxWLm9uRGlzbWlzcy5jYWxsKFYsVil9LGNsYXNzTmFtZTpBMChqPT1udWxsP3ZvaWQgMDpqLmNsb3NlQnV0dG9uLFY9PW51bGw/dm9pZCAwOihaPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlouY2xvc2VCdXR0b24pfSwoZTE9SzE9PW51bGw/dm9pZCAwOksxLmNsb3NlKSE9bnVsbD9lMTpIJCk6bnVsbCwoRjF8fFYuaWNvbnx8Vi5wcm9taXNlKSYmVi5pY29uIT09bnVsbCYmKChLMT09bnVsbD92b2lkIDA6SzFbRjFdKSE9PW51bGx8fFYuaWNvbik/aC5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS1pY29uIjoiIixjbGFzc05hbWU6QTAoaj09bnVsbD92b2lkIDA6ai5pY29uLFY9PW51bGw/dm9pZCAwOihYPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlguaWNvbil9LFYucHJvbWlzZXx8Vi50eXBlPT09ImxvYWRpbmciJiYhVi5pY29uP1YuaWNvbnx8aTEoKTpudWxsLFYudHlwZSE9PSJsb2FkaW5nIj9aMDpudWxsKTpudWxsLGguY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtY29udGVudCI6IiIsY2xhc3NOYW1lOkEwKGo9PW51bGw/dm9pZCAwOmouY29udGVudCxWPT1udWxsP3ZvaWQgMDooWT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpZLmNvbnRlbnQpfSxoLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLXRpdGxlIjoiIixjbGFzc05hbWU6QTAoaj09bnVsbD92b2lkIDA6ai50aXRsZSxWPT1udWxsP3ZvaWQgMDoocT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpxLnRpdGxlKX0sVi5qc3g/Vi5qc3g6dHlwZW9mIFYudGl0bGU9PT0iZnVuY3Rpb24iP1YudGl0bGUoKTpWLnRpdGxlKSxWLmRlc2NyaXB0aW9uP2guY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtZGVzY3JpcHRpb24iOiIiLGNsYXNzTmFtZTpBMCh6MSxEMSxqPT1udWxsP3ZvaWQgMDpqLmRlc2NyaXB0aW9uLFY9PW51bGw/dm9pZCAwOihHPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcuZGVzY3JpcHRpb24pfSx0eXBlb2YgVi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/Vi5kZXNjcmlwdGlvbigpOlYuZGVzY3JpcHRpb24pOm51bGwpLGguaXNWYWxpZEVsZW1lbnQoVi5jYW5jZWwpP1YuY2FuY2VsOlYuY2FuY2VsJiZNNShWLmNhbmNlbCk/aC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWNhbmNlbCI6ITAsc3R5bGU6Vi5jYW5jZWxCdXR0b25TdHlsZXx8bSxvbkNsaWNrOigkMSk9PntpZighTTUoVi5jYW5jZWwpKXJldHVybjtpZighbDEpcmV0dXJuO1YuY2FuY2VsLm9uQ2xpY2s9PW51bGx8fFYuY2FuY2VsLm9uQ2xpY2suY2FsbChWLmNhbmNlbCwkMSksZzEoKX0sY2xhc3NOYW1lOkEwKGo9PW51bGw/dm9pZCAwOmouY2FuY2VsQnV0dG9uLFY9PW51bGw/dm9pZCAwOihOPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOk4uY2FuY2VsQnV0dG9uKX0sVi5jYW5jZWwubGFiZWwpOm51bGwsaC5pc1ZhbGlkRWxlbWVudChWLmFjdGlvbik/Vi5hY3Rpb246Vi5hY3Rpb24mJk01KFYuYWN0aW9uKT9oLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTpWLmFjdGlvbkJ1dHRvblN0eWxlfHxmLG9uQ2xpY2s6KCQxKT0+e2lmKCFNNShWLmFjdGlvbikpcmV0dXJuO2lmKFYuYWN0aW9uLm9uQ2xpY2s9PW51bGx8fFYuYWN0aW9uLm9uQ2xpY2suY2FsbChWLmFjdGlvbiwkMSksJDEuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47ZzEoKX0sY2xhc3NOYW1lOkEwKGo9PW51bGw/dm9pZCAwOmouYWN0aW9uQnV0dG9uLFY9PW51bGw/dm9pZCAwOihCPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuYWN0aW9uQnV0dG9uKX0sVi5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiBuOSgpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIFMkKCQsUSl7bGV0IEo9e307cmV0dXJuWyQsUV0uZm9yRWFjaCgoWixYKT0+e2xldCBZPVg9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLEc9WT9EJDpQJDtmdW5jdGlvbiBOKEIpe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoVSk9PntKW2Ake3F9LSR7VX1gXT10eXBlb2YgQj09PSJudW1iZXIiP2Ake0J9cHhgOkJ9KX1pZih0eXBlb2YgWj09PSJudW1iZXIifHx0eXBlb2YgWj09PSJzdHJpbmciKU4oWik7ZWxzZSBpZih0eXBlb2YgWj09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoQik9PntpZihaW0JdPT09dm9pZCAwKUpbYCR7cX0tJHtCfWBdPUc7ZWxzZSBKW2Ake3F9LSR7Qn1gXT10eXBlb2YgWltCXT09PSJudW1iZXIiP2Ake1pbQl19cHhgOlpbQl19KTtlbHNlIE4oRyl9KSxKfXZhciBzOT1oLmZvcndhcmRSZWYoZnVuY3Rpb24oUSxKKXtsZXR7aWQ6WixpbnZlcnQ6WCxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpHLGNsb3NlQnV0dG9uOk4sY2xhc3NOYW1lOkIsb2Zmc2V0OlUsbW9iaWxlT2Zmc2V0OlYsdGhlbWU6az0ibGlnaHQiLHJpY2hDb2xvcnM6TCxkdXJhdGlvbjpNLHN0eWxlOkMsdmlzaWJsZVRvYXN0czp6PV8kLHRvYXN0T3B0aW9uczpBLGRpcjpQPW45KCksZ2FwOlI9dyQsaWNvbnM6SSxjb250YWluZXJBcmlhTGFiZWw6VD0iTm90aWZpY2F0aW9ucyJ9PVEsW3ksY109aC51c2VTdGF0ZShbXSksbT1oLnVzZU1lbW8oKCk9PntpZihaKXJldHVybiB5LmZpbHRlcigodik9PnYudG9hc3RlcklkPT09Wik7cmV0dXJuIHkuZmlsdGVyKCh2KT0+IXYudG9hc3RlcklkKX0sW3ksWl0pLGY9aC51c2VNZW1vKCgpPT57cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChbWV0uY29uY2F0KG0uZmlsdGVyKCh2KT0+di5wb3NpdGlvbikubWFwKCh2KT0+di5wb3NpdGlvbikpKSl9LFttLFldKSxbdSx6MV09aC51c2VTdGF0ZShbXSksW1ExLG5dPWgudXNlU3RhdGUoITEpLFtMMSxsXT1oLnVzZVN0YXRlKCExKSxbaixLMV09aC51c2VTdGF0ZShrIT09InN5c3RlbSI/azp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzPyJkYXJrIjoibGlnaHQiOiJsaWdodCIpLEIxPWgudXNlUmVmKG51bGwpLFYxPXEuam9pbigiKyIpLnJlcGxhY2UoL0tleS9nLCIiKS5yZXBsYWNlKC9EaWdpdC9nLCIiKSxlPWgudXNlUmVmKG51bGwpLFgxPWgudXNlUmVmKCExKSxOMT1oLnVzZUNhbGxiYWNrKCh2KT0+e2MoKGcpPT57dmFyIE87aWYoISgoTz1nLmZpbmQoKFMpPT5TLmlkPT09di5pZCkpPT1udWxsP3ZvaWQgMDpPLmRlbGV0ZSkpczEuZGlzbWlzcyh2LmlkKTtyZXR1cm4gZy5maWx0ZXIoKHtpZDpTfSk9PlMhPT12LmlkKX0pfSxbXSk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57cmV0dXJuIHMxLnN1YnNjcmliZSgodik9PntpZih2LmRpc21pc3Mpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2MoKGcpPT5nLm1hcCgoTyk9Pk8uaWQ9PT12LmlkP3suLi5PLGRlbGV0ZTohMH06TykpfSk7cmV0dXJufXNldFRpbWVvdXQoKCk9PntoLmZsdXNoU3luYygoKT0+e2MoKGcpPT57bGV0IE89Zy5maW5kSW5kZXgoKFMpPT5TLmlkPT09di5pZCk7aWYoTyE9PS0xKXJldHVyblsuLi5nLnNsaWNlKDAsTyksey4uLmdbT10sLi4udn0sLi4uZy5zbGljZShPKzEpXTtyZXR1cm5bdiwuLi5nXX0pfSl9KX0pfSxbeV0pLGgudXNlRWZmZWN0KCgpPT57aWYoayE9PSJzeXN0ZW0iKXtLMShrKTtyZXR1cm59aWYoaz09PSJzeXN0ZW0iKWlmKHdpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXMpSzEoImRhcmsiKTtlbHNlIEsxKCJsaWdodCIpO2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgdj13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpO3RyeXt2LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKHttYXRjaGVzOmd9KT0+e2lmKGcpSzEoImRhcmsiKTtlbHNlIEsxKCJsaWdodCIpfSl9Y2F0Y2goZyl7di5hZGRMaXN0ZW5lcigoe21hdGNoZXM6T30pPT57dHJ5e2lmKE8pSzEoImRhcmsiKTtlbHNlIEsxKCJsaWdodCIpfWNhdGNoKFMpe2NvbnNvbGUuZXJyb3IoUyl9fSl9fSxba10pLGgudXNlRWZmZWN0KCgpPT57aWYoeS5sZW5ndGg8PTEpbighMSl9LFt5XSksaC51c2VFZmZlY3QoKCk9PntsZXQgdj0oZyk9Pnt2YXIgTztpZihxLmV2ZXJ5KChyKT0+Z1tyXXx8Zy5jb2RlPT09cikpe3ZhciBpO24oITApLChpPUIxLmN1cnJlbnQpPT1udWxsfHxpLmZvY3VzKCl9aWYoZy5jb2RlPT09IkVzY2FwZSImJihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09QjEuY3VycmVudHx8KChPPUIxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpPLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSkpbighMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix2KSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdil9LFtxXSksaC51c2VFZmZlY3QoKCk9PntpZihCMS5jdXJyZW50KXJldHVybigpPT57aWYoZS5jdXJyZW50KWUuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGUuY3VycmVudD1udWxsLFgxLmN1cnJlbnQ9ITF9fSxbQjEuY3VycmVudF0pLGguY3JlYXRlRWxlbWVudCgic2VjdGlvbiIse3JlZjpKLCJhcmlhLWxhYmVsIjpgJHtUfSAke1YxfWAsdGFiSW5kZXg6LTEsImFyaWEtbGl2ZSI6InBvbGl0ZSIsImFyaWEtcmVsZXZhbnQiOiJhZGRpdGlvbnMgdGV4dCIsImFyaWEtYXRvbWljIjoiZmFsc2UiLHN1cHByZXNzSHlkcmF0aW9uV2FybmluZzohMH0sZi5tYXAoKHYsZyk9Pnt2YXIgTztsZXRbUyxpXT12LnNwbGl0KCItIik7aWYoIW0ubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoIm9sIix7a2V5OnYsZGlyOlA9PT0iYXV0byI/bjkoKTpQLHRhYkluZGV4Oi0xLHJlZjpCMSxjbGFzc05hbWU6QiwiZGF0YS1zb25uZXItdG9hc3RlciI6ITAsImRhdGEtc29ubmVyLXRoZW1lIjpqLCJkYXRhLXktcG9zaXRpb24iOlMsImRhdGEteC1wb3NpdGlvbiI6aSxzdHlsZTp7Ii0tZnJvbnQtdG9hc3QtaGVpZ2h0IjpgJHsoKE89dVswXSk9PW51bGw/dm9pZCAwOk8uaGVpZ2h0KXx8MH1weGAsIi0td2lkdGgiOmAke1QkfXB4YCwiLS1nYXAiOmAke1J9cHhgLC4uLkMsLi4uUyQoVSxWKX0sb25CbHVyOihyKT0+e2lmKFgxLmN1cnJlbnQmJiFyLmN1cnJlbnRUYXJnZXQuY29udGFpbnMoci5yZWxhdGVkVGFyZ2V0KSl7aWYoWDEuY3VycmVudD0hMSxlLmN1cnJlbnQpZS5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksZS5jdXJyZW50PW51bGx9fSxvbkZvY3VzOihyKT0+e2lmKHIudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJnIudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGU9PT0iZmFsc2UiKXJldHVybjtpZighWDEuY3VycmVudClYMS5jdXJyZW50PSEwLGUuY3VycmVudD1yLnJlbGF0ZWRUYXJnZXR9LG9uTW91c2VFbnRlcjooKT0+bighMCksb25Nb3VzZU1vdmU6KCk9Pm4oITApLG9uTW91c2VMZWF2ZTooKT0+e2lmKCFMMSluKCExKX0sb25EcmFnRW5kOigpPT5uKCExKSxvblBvaW50ZXJEb3duOihyKT0+e2lmKHIudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJnIudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGU9PT0iZmFsc2UiKXJldHVybjtsKCEwKX0sb25Qb2ludGVyVXA6KCk9PmwoITEpfSxtLmZpbHRlcigocik9PiFyLnBvc2l0aW9uJiZnPT09MHx8ci5wb3NpdGlvbj09PXYpLm1hcCgocixxMSk9Pnt2YXIgWjEseTE7cmV0dXJuIGguY3JlYXRlRWxlbWVudChiJCx7a2V5OnIuaWQsaWNvbnM6SSxpbmRleDpxMSx0b2FzdDpyLGRlZmF1bHRSaWNoQ29sb3JzOkwsZHVyYXRpb246KFoxPUE9PW51bGw/dm9pZCAwOkEuZHVyYXRpb24pIT1udWxsP1oxOk0sY2xhc3NOYW1lOkE9PW51bGw/dm9pZCAwOkEuY2xhc3NOYW1lLGRlc2NyaXB0aW9uQ2xhc3NOYW1lOkE9PW51bGw/dm9pZCAwOkEuZGVzY3JpcHRpb25DbGFzc05hbWUsaW52ZXJ0OlgsdmlzaWJsZVRvYXN0czp6LGNsb3NlQnV0dG9uOih5MT1BPT1udWxsP3ZvaWQgMDpBLmNsb3NlQnV0dG9uKSE9bnVsbD95MTpOLGludGVyYWN0aW5nOkwxLHBvc2l0aW9uOnYsc3R5bGU6QT09bnVsbD92b2lkIDA6QS5zdHlsZSx1bnN0eWxlZDpBPT1udWxsP3ZvaWQgMDpBLnVuc3R5bGVkLGNsYXNzTmFtZXM6QT09bnVsbD92b2lkIDA6QS5jbGFzc05hbWVzLGNhbmNlbEJ1dHRvblN0eWxlOkE9PW51bGw/dm9pZCAwOkEuY2FuY2VsQnV0dG9uU3R5bGUsYWN0aW9uQnV0dG9uU3R5bGU6QT09bnVsbD92b2lkIDA6QS5hY3Rpb25CdXR0b25TdHlsZSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpBPT1udWxsP3ZvaWQgMDpBLmNsb3NlQnV0dG9uQXJpYUxhYmVsLHJlbW92ZVRvYXN0Ok4xLHRvYXN0czptLmZpbHRlcigoYjEpPT5iMS5wb3NpdGlvbj09ci5wb3NpdGlvbiksaGVpZ2h0czp1LmZpbHRlcigoYjEpPT5iMS5wb3NpdGlvbj09ci5wb3NpdGlvbiksc2V0SGVpZ2h0czp6MSxleHBhbmRCeURlZmF1bHQ6RyxnYXA6UixleHBhbmRlZDpRMSxzd2lwZURpcmVjdGlvbnM6US5zd2lwZURpcmVjdGlvbnN9KX0pKX0pKX0pO2Z1bmN0aW9uIHQ5KCl7cmV0dXJuIEsoczkse3RoZW1lOiJkYXJrIixwb3NpdGlvbjoiYm90dG9tLWNlbnRlciIsdmlzaWJsZVRvYXN0czo0LGdhcDo4LG9mZnNldDp7Ym90dG9tOjI0fSx0b2FzdE9wdGlvbnM6e3Vuc3R5bGVkOiEwfSxzdHlsZTp7ekluZGV4OjIxNDc0ODM2NDd9LGNvbnRhaW5lckFyaWFMYWJlbDoic2VydmUtc2ltIG5vdGlmaWNhdGlvbnMifSl9ZnVuY3Rpb24gZTkoe3RvYXN0OiR9KXtsZXQgUT0kLnN0YXR1cz09PSJlcnJvciIsSj0kLnN0YXR1cz09PSJ1cGxvYWRpbmciLFo9SiYmJC5wcm9ncmVzcyE9PW51bGwsWD0kLnByb2dyZXNzIT1udWxsP01hdGgucm91bmQoJC5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6InVwbG9hZC10b2FzdCIsY2xhc3NOYW1lOmBmbGV4IHctW21pbigzMjBweCxjYWxjKDEwMHZ3LTMycHgpKV0gZmxleC1jb2wgZ2FwLTEuNSBweC0zIHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tb25vIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSAke1E/InNlbGVjdC10ZXh0IGN1cnNvci10ZXh0Ijoic2VsZWN0LW5vbmUgY3Vyc29yLWRlZmF1bHQifWAsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuM3NdIixzdHlsZTp7YmFja2dyb3VuZDpKPyIjYTViNGZjIjokLnN0YXR1cz09PSJzdWNjZXNzIj8iIzRhZGU4MCI6IiNmODcxNzEifX0pLEsoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W0omJlomJmBVcGxvYWRpbmcgJHskLm5hbWV94oCmICR7WH0lYCxKJiYhWiYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsaW5nICR7JC5uYW1lfeKApmA6YEFkZGluZyAkeyQubmFtZX3igKZgKSwkLnN0YXR1cz09PSJzdWNjZXNzIiYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsZWQgJHskLm5hbWV9YDpgQWRkZWQgJHskLm5hbWV9IHRvIFBob3Rvc2ApLFEmJmAkeyQubmFtZX06ICR7JC5tZXNzYWdlPz8iVXBsb2FkIGZhaWxlZCJ9YF19KV19KSxKJiZLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGgtWzNweF0gdy1mdWxsIGJnLXdoaXRlLzggcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4iLGNoaWxkcmVuOlo/SygiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgYmctYWNjZW50IHJvdW5kZWQtWzJweF0gW3RyYW5zaXRpb246d2lkdGhfMTIwbXNfbGluZWFyXSIsc3R5bGU6e3dpZHRoOmAke1h9JWB9fSk6SygiZGl2Iix7Y2xhc3NOYW1lOiJzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaC1mdWxsIHctWzQwJV0gYmctYWNjZW50IHJvdW5kZWQtWzJweF0ifSl9KV19KX1mdW5jdGlvbiAkNih7d2lkdGg6JCxoZWlnaHQ6USx2aXNpYmxlOkp9KXtyZXR1cm4gSygiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctcGFuZWwtYmctdHJhbnNsdWNlbnQgc2hhZG93LVswXzFweF8ycHhfcmdiYSgwLDAsMCwwLjE4KSwwXzZweF8xOHB4X3JnYmEoMCwwLDAsMC4yOCksaW5zZXRfMF8wXzBfMXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNildIGJhY2tkcm9wLWJsdXItbWQgYmFja2Ryb3Atc2F0dXJhdGUtMTUwIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7b3BhY2l0eTpKPzE6MCx0cmFuc2Zvcm06YHRyYW5zbGF0ZVkoJHtKPzA6NH1weCkgc2NhbGUoJHtKPzE6MC45Nn0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjoib3BhY2l0eSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCB0cmFuc2Zvcm0gMjIwbXMgY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkifSxjaGlsZHJlbjpbTWF0aC5yb3VuZCgkKSwiICIsSygic3BhbiIse2NsYXNzTmFtZToib3BhY2l0eS02MCBteC0wLjUiLGNoaWxkcmVuOiLDlyJ9KSwiICIsTWF0aC5yb3VuZChRKV19KX1mdW5jdGlvbiBRNih7c3RyZWFtaW5nOiR9KXtsZXQgUT0kPyIjNGFkZTgwIjoiIzhlOGU5MyI7cmV0dXJuIEsoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJzdHJlYW0tc3RhdHVzLXBpbGwiLGNsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC1bNXB4XSB0ZXh0LVsxMnB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6UX0sImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2hpbGRyZW46W0soInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMThzX2Vhc2VdIixzdHlsZTp7YmFja2dyb3VuZDpRfX0pLCQ/ImxpdmUiOiJjb25uZWN0aW5nIl19KX1mdW5jdGlvbiB4JCgkLFEsSil7bGV0IFo9Si5sYXQqTWF0aC5QSS8xODAsWD0oJC1KLmxhdCkqTWF0aC5QSS8xODA7cmV0dXJue3g6KFEtSi5sbmcpKk1hdGguUEkvMTgwKk1hdGguY29zKFopKjYzNzEwMDAsejotWCo2MzcxMDAwfX1mdW5jdGlvbiB2JCgkLFEsSil7bGV0IFo9Si5sYXQqTWF0aC5QSS8xODAsWD0tUS82MzcxMDAwKigxODAvTWF0aC5QSSksWT0kLyg2MzcxMDAwKk1hdGguY29zKFopKSooMTgwL01hdGguUEkpO3JldHVybntsYXQ6Si5sYXQrWCxsbmc6Si5sbmcrWX19ZnVuY3Rpb24gaiQoJCxRLEosWixYKXtsZXQgWT1YKlgscT1ZKlgsRz0oTixCLFUsVik9PjAuNSooMipCKygtTitVKSpYKygyKk4tNSpCKzQqVS1WKSpZKygtTiszKkItMypVK1YpKnEpO3JldHVybnt4OkcoJC54LFEueCxKLngsWi54KSx6OkcoJC56LFEueixKLnosWi56KSx5OkcoJC55LFEueSxKLnksWi55KSxyYXdBbHQ6RygkLnJhd0FsdCxRLnJhd0FsdCxKLnJhd0FsdCxaLnJhd0FsdCl9fWZ1bmN0aW9uIFIkKCQsUSxKKXtpZigkLmxlbmd0aDwyKXJldHVybiAkLnNsaWNlKCk7bGV0IFo9W10sWD0kLmxlbmd0aCxZPUo/WDpYLTE7Zm9yKGxldCBxPTA7cTxZO3ErKyl7bGV0IEc9JFtKPyhxLTErWCklWDpNYXRoLm1heCgwLHEtMSldLE49JFtxJVhdLEI9JFsocSsxKSVYXSxVPSRbSj8ocSsyKSVYOk1hdGgubWluKFgtMSxxKzIpXSxWPUIueC1OLngsaz1CLnotTi56LEw9TWF0aC5oeXBvdChWLGspLE09TWF0aC5tYXgoMixNYXRoLmNlaWwoTC9RKSk7Zm9yKGxldCBDPTA7QzxNO0MrKyl7bGV0IHo9Qy9NO1oucHVzaChqJChHLE4sQixVLHopKX19aWYoIUopWi5wdXNoKCRbWC0xXSk7cmV0dXJuIFp9ZnVuY3Rpb24gSjYoJCl7aWYoJC53YXlwb2ludHMubGVuZ3RoPDIpdGhyb3cgRXJyb3IoYFRyYWlsICR7JC5pZH0gbmVlZHMgYXQgbGVhc3QgMiB3YXlwb2ludHNgKTtsZXQgUT17bGF0OiQud2F5cG9pbnRzLnJlZHVjZSgoQyx6KT0+Qyt6LmxhdCwwKS8kLndheXBvaW50cy5sZW5ndGgsbG5nOiQud2F5cG9pbnRzLnJlZHVjZSgoQyx6KT0+Qyt6LmxuZywwKS8kLndheXBvaW50cy5sZW5ndGh9LEo9JC53YXlwb2ludHMubWFwKChDKT0+Qy5hbHQ/PzApLFo9TWF0aC5taW4oLi4uSiksWD1NYXRoLm1heCguLi5KKSxZPSQud2F5cG9pbnRzLm1hcCgoQyk9PntsZXR7eDp6LHo6QX09eCQoQy5sYXQsQy5sbmcsUSksUD1DLmFsdD8/MDtyZXR1cm57eDp6LHo6QSx5OlAtWixyYXdBbHQ6UH19KSxxPVIkKFksOCwhISQubG9vcCksRz1bXSxOPTA7Zm9yKGxldCBDPTA7QzxxLmxlbmd0aDtDKyspe2xldCB6PXFbQ107aWYoQz4wKXtsZXQgST1xW0MtMV07Tis9TWF0aC5oeXBvdCh6LngtSS54LHouei1JLnosei55LUkueSl9bGV0e2xhdDpBLGxuZzpQfT12JCh6Lngsei56LFEpLFI9TWF0aC5tYXgoMCx6LnkpO0cucHVzaCh7eDp6Lngsejp6LnoseTpSLGFyYzpOLGxhdDpBLGxuZzpQfSl9bGV0IEI9MS8wLFU9LTEvMCxWPTEvMCxrPS0xLzAsTD0xLzAsTT0tMS8wO2ZvcihsZXQgQyBvZiBHKXtpZihDLng8QilCPUMueDtpZihDLng+VSlVPUMueDtpZihDLno8VilWPUMuejtpZihDLno+aylrPUMuejtpZihDLnk8TClMPUMueTtpZihDLnk+TSlNPUMueX1yZXR1cm57dHJhaWw6JCxvcmlnaW46USxwb2ludHM6Ryx0b3RhbERpc3RhbmNlOkdbRy5sZW5ndGgtMV0uYXJjLGJvdW5kczp7eDpbQixVXSx5OltMLE1dLHo6W1Ysa119LHJhd01pbkFsdDpaLHJhd01heEFsdDpYfX1mdW5jdGlvbiBnMCgkLFEpe2xldCBKPSQudG90YWxEaXN0YW5jZTtpZihKPT09MClyZXR1cm4gJC5wb2ludHNbMF07bGV0IFo9UTtpZigkLnRyYWlsLmxvb3ApWj0oWiVKK0opJUo7ZWxzZXtpZihaPD0wKXJldHVybiAkLnBvaW50c1swXTtpZihaPj1KKXJldHVybiAkLnBvaW50c1skLnBvaW50cy5sZW5ndGgtMV19bGV0IFg9MCxZPSQucG9pbnRzLmxlbmd0aC0xO3doaWxlKFgrMTxZKXtsZXQgVT1YK1k+Pj4xO2lmKCQucG9pbnRzW1VdLmFyYzw9WilYPVU7ZWxzZSBZPVV9bGV0IHE9JC5wb2ludHNbWF0sRz0kLnBvaW50c1tZXSxOPUcuYXJjLXEuYXJjLEI9Tj09PTA/MDooWi1xLmFyYykvTjtyZXR1cm57eDpxLngrKEcueC1xLngpKkIsejpxLnorKEcuei1xLnopKkIseTpxLnkrKEcueS1xLnkpKkIsYXJjOlosbGF0OnEubGF0KyhHLmxhdC1xLmxhdCkqQixsbmc6cS5sbmcrKEcubG5nLXEubG5nKSpCfX1mdW5jdGlvbiBBMygkKXtzd2l0Y2goJCl7Y2FzZSJ3YWxrIjpyZXR1cm4gMS40O2Nhc2UicnVuIjpyZXR1cm4gMztjYXNlImN5Y2xlIjpyZXR1cm4gNS41O2Nhc2UiZHJpdmUiOnJldHVybiAxMy40fX12YXIgZyQ9W3tsYXQ6MzcuMzMyNzIsbG5nOi0xMjIuMDA4MzMsYWx0OjQ5fSx7bGF0OjM3LjMzMzA5LGxuZzotMTIyLjAwNzM1LGFsdDo0OH0se2xhdDozNy4zMzM3Myxsbmc6LTEyMi4wMDY2MyxhbHQ6NDl9LHtsYXQ6MzcuMzM0NTQsbG5nOi0xMjIuMDA2MjcsYWx0OjQ5fSx7bGF0OjM3LjMzNTQsbG5nOi0xMjIuMDA2MzMsYWx0OjQ5fSx7bGF0OjM3LjMzNjE4LGxuZzotMTIyLjAwNjc5LGFsdDo0NX0se2xhdDozNy4zMzY3NSxsbmc6LTEyMi4wMDc1OSxhbHQ6NDV9LHtsYXQ6MzcuMzM3MDQsbG5nOi0xMjIuMDA4NjEsYWx0OjQ2fSx7bGF0OjM3LjMzNjk4LGxuZzotMTIyLjAwOTY5LGFsdDo0OH0se2xhdDozNy4zMzY2Mixsbmc6LTEyMi4wMTA2NixhbHQ6NDh9LHtsYXQ6MzcuMzM1OTgsbG5nOi0xMjIuMDExMzgsYWx0OjQ5fSx7bGF0OjM3LjMzNTE3LGxuZzotMTIyLjAxMTc0LGFsdDo1MH0se2xhdDozNy4zMzQzMSxsbmc6LTEyMi4wMTE2OSxhbHQ6NTB9LHtsYXQ6MzcuMzMzNTQsbG5nOi0xMjIuMDExMjIsYWx0OjUwfSx7bGF0OjM3LjMzMjk2LGxuZzotMTIyLjAxMDQyLGFsdDo1MX0se2xhdDozNy4zMzI2OCxsbmc6LTEyMi4wMDk0LGFsdDo1MH1dLGgkPVt7bGF0OjM3LjgzMjEyLGxuZzotMTIyLjQ4MDY1LGFsdDozMH0se2xhdDozNy44MjkzNyxsbmc6LTEyMi40Nzk3NCxhbHQ6MzB9LHtsYXQ6MzcuODI2NDksbG5nOi0xMjIuNDc5NCxhbHQ6MzB9LHtsYXQ6MzcuODIzNjIsbG5nOi0xMjIuNDc5MDcsYWx0OjQ1fSx7bGF0OjM3LjgyMDc0LGxuZzotMTIyLjQ3ODczLGFsdDo1OX0se2xhdDozNy44MTc4Nixsbmc6LTEyMi40NzgzOSxhbHQ6NjZ9LHtsYXQ6MzcuODE0OTgsbG5nOi0xMjIuNDc4MDYsYWx0OjY2fSx7bGF0OjM3LjgxMjExLGxuZzotMTIyLjQ3NzcyLGFsdDo1OH0se2xhdDozNy44MDkyMyxsbmc6LTEyMi40NzczNCxhbHQ6NDR9LHtsYXQ6MzcuODA5NDksbG5nOi0xMjIuNDc3MyxhbHQ6NDV9LHtsYXQ6MzcuODEyMzYsbG5nOi0xMjIuNDc3NjUsYWx0OjU5fSx7bGF0OjM3LjgxNTI0LGxuZzotMTIyLjQ3Nzk4LGFsdDo2Nn0se2xhdDozNy44MTgxMixsbmc6LTEyMi40NzgzMixhbHQ6NjZ9LHtsYXQ6MzcuODIxLGxuZzotMTIyLjQ3ODY2LGFsdDo1OH0se2xhdDozNy44MjM4Nyxsbmc6LTEyMi40NzksYWx0OjQ0fSx7bGF0OjM3LjgyNjc1LGxuZzotMTIyLjQ3OTMzLGFsdDozMH0se2xhdDozNy44Mjk2Myxsbmc6LTEyMi40Nzk2NyxhbHQ6MzB9LHtsYXQ6MzcuODMyMzMsbG5nOi0xMjIuNDgwNzIsYWx0OjMwfV0sZiQ9W3tsYXQ6MzcuODg2NjQsbG5nOi0xMjIuNjI1OTksYWx0OjEyMX0se2xhdDozNy44ODg4Nyxsbmc6LTEyMi42MjMzMixhbHQ6MTM1fSx7bGF0OjM3Ljg5MTE1LGxuZzotMTIyLjYyMTYsYWx0OjE2NH0se2xhdDozNy44OTM1Myxsbmc6LTEyMi42MTkyMSxhbHQ6MTgwfSx7bGF0OjM3Ljg5NDY2LGxuZzotMTIyLjYxNTc3LGFsdDoyMjB9LHtsYXQ6MzcuODk2MzEsbG5nOi0xMjIuNjEyNjgsYWx0OjI3M30se2xhdDozNy44OTkxNyxsbmc6LTEyMi42MTA5OCxhbHQ6MzEzfSx7bGF0OjM3LjkwMTY2LGxuZzotMTIyLjYwODU1LGFsdDozNDJ9LHtsYXQ6MzcuOTAxOTksbG5nOi0xMjIuNjA2MDEsYWx0OjQwOH0se2xhdDozNy45MDMzOSxsbmc6LTEyMi42MDQwMSxhbHQ6NDUwfSx7bGF0OjM3LjkwNjYyLGxuZzotMTIyLjYwMjkxLGFsdDo0NDB9LHtsYXQ6MzcuOTA5NzEsbG5nOi0xMjIuNjAxNzMsYWx0OjQzMn0se2xhdDozNy45MTIxMyxsbmc6LTEyMi42MDAwNyxhbHQ6NDM2fSx7bGF0OjM3LjkxNDM5LGxuZzotMTIyLjU5NzgsYWx0OjQxMH0se2xhdDozNy45MTI4NSxsbmc6LTEyMi41OTUwNCxhbHQ6NDIyfSx7bGF0OjM3LjkxMjc0LGxuZzotMTIyLjU5MjAyLGFsdDo0MjV9LHtsYXQ6MzcuOTE1LGxuZzotMTIyLjU5MDMyLGFsdDo0MTJ9LHtsYXQ6MzcuOTE2MzcsbG5nOi0xMjIuNTg5MDMsYWx0OjQwNn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODU5NSxhbHQ6MzgyfSx7bGF0OjM3LjkxNzQsbG5nOi0xMjIuNTgzOTgsYWx0OjM3Mn0se2xhdDozNy45MTY0Mixsbmc6LTEyMi41ODIzNixhbHQ6MzUyfSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4MDExLGFsdDozNDJ9XSxtJD1be2xhdDo0MC43ODIxNixsbmc6LTczLjk2MjU0LGFsdDozN30se2xhdDo0MC43ODIyMSxsbmc6LTczLjk2MDk4LGFsdDozNn0se2xhdDo0MC43ODMyOCxsbmc6LTczLjk2MDEsYWx0OjM2fSx7bGF0OjQwLjc4NDQsbG5nOi03My45NTkzLGFsdDozNn0se2xhdDo0MC43ODU1LGxuZzotNzMuOTU4NDgsYWx0OjM2fSx7bGF0OjQwLjc4NjY0LGxuZzotNzMuOTU3NzQsYWx0OjM2fSx7bGF0OjQwLjc4NzksbG5nOi03My45NTc2NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg4OTgsbG5nOi03My45NTc5MixhbHQ6MzZ9LHtsYXQ6NDAuNzg4NjgsbG5nOi03My45NTk1MSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4OTcsbG5nOi03My45NjExMixhbHQ6MzZ9LHtsYXQ6NDAuNzg4MzMsbG5nOi03My45NjI1LGFsdDozN30se2xhdDo0MC43ODgyOCxsbmc6LTczLjk2NDE2LGFsdDozN30se2xhdDo0MC43ODgwNSxsbmc6LTczLjk2NTczLGFsdDozNn0se2xhdDo0MC43ODY5MSxsbmc6LTczLjk2NjM2LGFsdDozNn0se2xhdDo0MC43ODU2Nixsbmc6LTczLjk2NjY1LGFsdDozNn0se2xhdDo0MC43ODQ1OCxsbmc6LTczLjk2NjA4LGFsdDozNn0se2xhdDo0MC43ODQwMixsbmc6LTczLjk2NDU5LGFsdDozNn0se2xhdDo0MC43ODMyMixsbmc6LTczLjk2MzM0LGFsdDozN31dLHAkPVt7bGF0OjM3LjU5NjU5LGxuZzotMTIyLjUwMzE2LGFsdDo0fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODUwNSxsbmc6LTEyMi41MDY5OCxhbHQ6OTN9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fV0saDA9W3tpZDoiYXBwbGUtcGFyay1sb29wIixuYW1lOiJBcHBsZSBQYXJrIExvb3AiLGRlc2NyaXB0aW9uOiJDdXBlcnRpbm8g4oCiIGZsYXQgcmluZyByb2FkIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6ZyQsbG9vcDohMH0se2lkOiJnb2xkZW4tZ2F0ZSIsbmFtZToiR29sZGVuIEdhdGUgQ3Jvc3NpbmciLGRlc2NyaXB0aW9uOiJTYW4gRnJhbmNpc2NvIOKAoiBicmlkZ2Ugcm91bmQtdHJpcCIsbW9kZToicnVuIix3YXlwb2ludHM6aCQsbG9vcDohMH0se2lkOiJ0YW0tcmlkZ2UiLG5hbWU6Ik10LiBUYW0gUmlkZ2UiLGRlc2NyaXB0aW9uOiJTdGluc29uIEJlYWNoIOKAoiBTdGVlcCBSYXZpbmUgKyBNYXR0IERhdmlzIGxvb3AiLG1vZGU6IndhbGsiLHdheXBvaW50czpmJCxsb29wOiEwfSx7aWQ6ImNlbnRyYWwtcGFyayIsbmFtZToiUmVzZXJ2b2lyIExvb3AiLGRlc2NyaXB0aW9uOiJDZW50cmFsIFBhcmsg4oCiIDIuNSBrbSIsbW9kZToicnVuIix3YXlwb2ludHM6bSQsbG9vcDohMH0se2lkOiJwY2gtcGFjaWZpY2EiLG5hbWU6IlBhY2lmaWMgQ29hc3QgSHd5IixkZXNjcmlwdGlvbjoiUGFjaWZpY2Eg4oCiIERldmlsJ3MgU2xpZGUgcm91bmQtdHJpcCIsbW9kZToiZHJpdmUiLHdheXBvaW50czpwJCxsb29wOiEwfV07ZnVuY3Rpb24gVjAoe29wZW46JCxvbk9wZW5DaGFuZ2U6USxzdW1tYXJ5OkosY2hpbGRyZW46WixzdW1tYXJ5Q2xhc3NOYW1lOlg9IiIsYm9keUNsYXNzTmFtZTpZPSJmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHQtMi41IixjbGFzc05hbWU6cT0iIiwuLi5HfSl7cmV0dXJuIEsoImRldGFpbHMiLHtvcGVuOiQsb25Ub2dnbGU6KE4pPT5RKE4uY3VycmVudFRhcmdldC5vcGVuKSxjbGFzc05hbWU6YGxlbS1zZWN0aW9uIGJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiAke3F9YCwuLi5HLGNoaWxkcmVuOltLKCJzdW1tYXJ5Iix7Y2xhc3NOYW1lOmBsZW0tdG9nZ2xlIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIHRleHQtd2hpdGUvOTAgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gJHtYfWAsY2hpbGRyZW46W0osSyhEMix7b3BlbjokfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOlksY2hpbGRyZW46Wn0pXX0pfWZ1bmN0aW9uIE81KHtsYWJlbDokLHZhbHVlOlEsb3B0aW9uczpKLGRpc2FibGVkOlosb25DaGFuZ2U6WCxjbGFzc05hbWU6WX0pe2xldFtxLEddPVcoITEpLE49YihudWxsKSxCPWIobnVsbCksW1UsVl09VyhudWxsKSxrPSgpPT57bGV0IHo9Ti5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigheilyZXR1cm47Vih7dG9wOnouYm90dG9tKzQsbGVmdDp6LmxlZnQsbWluV2lkdGg6ei53aWR0aH0pfTtIMCgoKT0+e2lmKHEpaygpfSxbcV0pLEgwKCgpPT57aWYoIXF8fCFVKXJldHVybjtsZXQgej1CLmN1cnJlbnQ7aWYoIXopcmV0dXJuO2xldCBBPTgsUD13aW5kb3cuaW5uZXJXaWR0aC16Lm9mZnNldFdpZHRoLUE7aWYoVS5sZWZ0PlApVih7Li4uVSxsZWZ0Ok1hdGgubWF4KEEsUCl9KX0sW3EsVV0pLHgoKCk9PntpZighcSlyZXR1cm47bGV0IHo9KCk9PkcoITEpLEE9KFIpPT57bGV0IEk9Ui50YXJnZXQ7aWYoIUIuY3VycmVudD8uY29udGFpbnMoSSkmJiFOLmN1cnJlbnQ/LmNvbnRhaW5zKEkpKXooKX0sUD0oUik9PntpZighQi5jdXJyZW50Py5jb250YWlucyhSLnRhcmdldCkpaygpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsUCwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIseiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixBKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixQLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix6KX19LFtxXSk7bGV0IEw9YighMSk7eCgoKT0+e2lmKCFxKXtMLmN1cnJlbnQ9ITE7cmV0dXJufWlmKCFVfHxMLmN1cnJlbnQpcmV0dXJuO2xldCB6PUIuY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpO2lmKCF6Py5sZW5ndGgpcmV0dXJuO0wuY3VycmVudD0hMDtsZXQgQT1KLmZpbmRJbmRleCgoUCk9PlAudmFsdWU9PT1RKTt6W01hdGgubWF4KEEsMCldPy5mb2N1cygpfSxbcSxVLEosUV0pO2xldCBNPSh6KT0+e2xldCBBPVsuLi5CLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKT8/W11dLFA9QS5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO2lmKHoua2V5PT09IkFycm93RG93biJ8fHoua2V5PT09IkFycm93VXAiKXt6LnByZXZlbnREZWZhdWx0KCk7bGV0IFI9ei5rZXk9PT0iQXJyb3dEb3duIj9NYXRoLm1pbihQKzEsQS5sZW5ndGgtMSk6TWF0aC5tYXgoUC0xLDApO0FbUl0/LmZvY3VzKCl9ZWxzZSBpZih6LmtleT09PSJFc2NhcGUiKXoucHJldmVudERlZmF1bHQoKSxHKCExKSxOLmN1cnJlbnQ/LmZvY3VzKCl9LEM9Si5maW5kKCh6KT0+ei52YWx1ZT09PVEpO3JldHVybiBLKEoxLHtjaGlsZHJlbjpbSygiYnV0dG9uIix7cmVmOk4sdHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6JCwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpxLGRpc2FibGVkOlosb25DbGljazooKT0+Rygoeik9PiF6KSxjbGFzc05hbWU6YHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCAke1k/PyIifWAsY2hpbGRyZW46Sygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgdHJ1bmNhdGUiLGNoaWxkcmVuOkM/LmxhYmVsPz9RfSl9KSxxJiZVJiZsNShLKCJkaXYiLHtyZWY6Qixyb2xlOiJsaXN0Ym94IiwiYXJpYS1sYWJlbCI6JCxvbktleURvd246TSxzdHlsZTp7dG9wOlUudG9wLGxlZnQ6VS5sZWZ0LG1pbldpZHRoOlUubWluV2lkdGh9LGNsYXNzTmFtZToiZml4ZWQgbWF4LWgtOTAgb3ZlcmZsb3cteS1hdXRvIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bMTBweF0gcC0xIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgei01MCIsY2hpbGRyZW46Si5tYXAoKHopPT5LKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOnoudmFsdWU9PT1RLG9uQ2xpY2s6KCk9PntYKHoudmFsdWUpLEcoITEpLE4uY3VycmVudD8uZm9jdXMoKX0sY2xhc3NOYW1lOmBibG9jayB3LWZ1bGwgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIHB4LTIuNSBweS0xIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctd2hpdGUvOCBmb2N1cy12aXNpYmxlOmJnLXdoaXRlLzggb3V0bGluZS1ub25lICR7ei52YWx1ZT09PVE/InRleHQtYWNjZW50IjoiIn1gLGNoaWxkcmVuOnoubGFiZWx9LHoudmFsdWUpKX0pLGRvY3VtZW50LmJvZHkpXX0pfXZhciB1JD02NTAsTTM9WzEsMiw1LDIwXSxLNj0xMDAwLE8zPXtzdGF0dXM6ImlkbGUiLGFyYzowLGVsYXBzZWRNczowfTtmdW5jdGlvbiBWNih7dWRpZDokLGV4ZWM6UX0pe2xldFtKLFpdPVcoITEpLFtYLFldPVcoaDBbMF0uaWQpLFtxLEddPVcoaDBbMF0ubW9kZSksW04sQl09VygxKSxbVSxWXT1XKE8zKSxbayxMXT1XKG51bGwpLE09XzEoKCk9PmgwLmZpbmQoKGwpPT5sLmlkPT09WCk/P2gwWzBdLFtYXSksQz1fMSgoKT0+SjYoTSksW01dKSx6PWIoMCksQT1iKCJpZGxlIiksUD1iKEEzKHEpKk4pLFI9YigwKSxJPWIoQyksVD1iKG51bGwpO3goKCk9PntQLmN1cnJlbnQ9QTMocSkqTn0sW3EsTl0pO2xldCB5PWIobnVsbCk7eCgoKT0+e2xldCBsPUkuY3VycmVudCxqPXouY3VycmVudDtpZihJLmN1cnJlbnQ9QyxsJiZsIT09Qyl5LmN1cnJlbnQ9YyQobCxqLEMscGVyZm9ybWFuY2Uubm93KCkpO3ouY3VycmVudD0wLFIuY3VycmVudD0wLEEuY3VycmVudD0iaWRsZSIsVC5jdXJyZW50PW51bGwsVihPMyl9LFtDXSk7bGV0IGM9YigwKSxtPWIobnVsbCksZj1iKG51bGwpO3goKCk9PntsZXQgbD0wLGo9KEsxKT0+e2xldCBCMT1tLmN1cnJlbnQsVjE9QjE9PW51bGw/MTY6TWF0aC5taW4oNjQsSzEtQjEpO2lmKG0uY3VycmVudD1LMSxjLmN1cnJlbnQ9KGMuY3VycmVudCtWMSowLjAwMDEyKSUoTWF0aC5QSSoyKSxBLmN1cnJlbnQ9PT0icGxheWluZyIpe2xldCBYMT1QLmN1cnJlbnQqVjEvMTAwMDt6LmN1cnJlbnQrPVgxLFIuY3VycmVudCs9VjE7bGV0IE4xPUkuY3VycmVudC50b3RhbERpc3RhbmNlO2lmKCFJLmN1cnJlbnQudHJhaWwubG9vcCYmei5jdXJyZW50Pj1OMSl6LmN1cnJlbnQ9TjEsQS5jdXJyZW50PSJwYXVzZWQiLFYoe3N0YXR1czoicGF1c2VkIixhcmM6TjEsZWxhcHNlZE1zOlIuY3VycmVudH0pfWxldCBlPWYuY3VycmVudDtpZihlKXtsZXQgWDE9SS5jdXJyZW50LE4xPW51bGwsdj15LmN1cnJlbnQ7aWYodil7bGV0IGc9KEsxLXYuc3RhcnRNcykvdSQ7aWYoZz49MSl5LmN1cnJlbnQ9bnVsbDtlbHNle2xldCBPPWkkKGcpO1gxPW8kKHYsTyksTjE9e3g6di5wcmV2TWFya2VyLngrKHYubmV4dE1hcmtlci54LXYucHJldk1hcmtlci54KSpPLHk6di5wcmV2TWFya2VyLnkrKHYubmV4dE1hcmtlci55LXYucHJldk1hcmtlci55KSpPLHo6di5wcmV2TWFya2VyLnorKHYubmV4dE1hcmtlci56LXYucHJldk1hcmtlci56KSpPfX19biQoZSxYMSx6LmN1cnJlbnQsYy5jdXJyZW50LEsxLEEuY3VycmVudD09PSJwbGF5aW5nIixOMSl9bD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoail9O3JldHVybiBsPXJlcXVlc3RBbmltYXRpb25GcmFtZShqKSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUobCl9LFtdKSx4KCgpPT57bGV0IGw9c2V0SW50ZXJ2YWwoKCk9PntpZihBLmN1cnJlbnQ9PT0icGxheWluZyIpVih7c3RhdHVzOiJwbGF5aW5nIixhcmM6ei5jdXJyZW50LGVsYXBzZWRNczpSLmN1cnJlbnR9KX0sMjUwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChsKX0sW10pLHgoKCk9PntpZihVLnN0YXR1cyE9PSJwbGF5aW5nIilyZXR1cm47bGV0IGw9ITEsaj0wLEsxPW51bGwsQjE9YXN5bmMoKT0+e2lmKGx8fEsxKXJldHVybjtsZXQgZT1EYXRlLm5vdygpO2lmKGUtajxLNilyZXR1cm47aj1lO2xldCBYMT1nMChJLmN1cnJlbnQsei5jdXJyZW50KSxOMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7WDEubGF0LnRvRml4ZWQoNyl9LCR7WDEubG5nLnRvRml4ZWQoNyl9YDtLMT1RKE4xKS50aGVuKCh2KT0+e2lmKGwpcmV0dXJuO2lmKHYuZXhpdENvZGUhPT0wKUwoRzYodi5zdGRlcnIpfHwic2ltY3RsIGxvY2F0aW9uIHNldCBmYWlsZWQiKTtlbHNlIEwobnVsbCl9KS5jYXRjaCgodik9PntpZighbClMKHYgaW5zdGFuY2VvZiBFcnJvcj92Lm1lc3NhZ2U6U3RyaW5nKHYpKX0pLmZpbmFsbHkoKCk9PntLMT1udWxsfSl9O0IxKCk7bGV0IFYxPXNldEludGVydmFsKEIxLEs2KTtyZXR1cm4oKT0+e2w9ITAsY2xlYXJJbnRlcnZhbChWMSl9fSxbVS5zdGF0dXMsJCxRXSk7bGV0IHU9RSgoKT0+e2lmKEEuY3VycmVudD09PSJwbGF5aW5nIil7QS5jdXJyZW50PSJwYXVzZWQiLFYoKGwpPT4oey4uLmwsc3RhdHVzOiJwYXVzZWQifSkpO3JldHVybn1pZih6LmN1cnJlbnQ+PUkuY3VycmVudC50b3RhbERpc3RhbmNlJiYhSS5jdXJyZW50LnRyYWlsLmxvb3Apei5jdXJyZW50PTAsUi5jdXJyZW50PTA7aWYoVC5jdXJyZW50PT1udWxsKXtsZXQgbD1nMChJLmN1cnJlbnQsei5jdXJyZW50KTtULmN1cnJlbnQ9e2xhdDpsLmxhdCxsbmc6bC5sbmd9fUEuY3VycmVudD0icGxheWluZyIsVigobCk9Pih7Li4ubCxzdGF0dXM6InBsYXlpbmciLGFyYzp6LmN1cnJlbnQsZWxhcHNlZE1zOlIuY3VycmVudH0pKX0sW10pLHoxPUUoKCk9PntBLmN1cnJlbnQ9ImlkbGUiLHouY3VycmVudD0wLFIuY3VycmVudD0wLFYoTzMpO2xldCBsPVQuY3VycmVudDtULmN1cnJlbnQ9bnVsbDtsZXQgaj1sP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtsLmxhdC50b0ZpeGVkKDcpfSwke2wubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO1EoaikudGhlbigoSzEpPT57aWYoSzEuZXhpdENvZGUhPT0wKUwoRzYoSzEuc3RkZXJyKXx8bnVsbCk7ZWxzZSBMKG51bGwpfSl9LFtRLCRdKSxRMT1FKChsKT0+e1kobCk7bGV0IGo9aDAuZmluZCgoSzEpPT5LMS5pZD09PWwpO2lmKGopRyhqLm1vZGUpfSxbXSk7eCgoKT0+KCk9PntpZihBLmN1cnJlbnQ9PT0iaWRsZSIpcmV0dXJuO2xldCBsPVQuY3VycmVudCxqPWw/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke2wubGF0LnRvRml4ZWQoNyl9LCR7bC5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7UShqKS5jYXRjaCgoKT0+e30pfSxbUSwkXSk7bGV0IG49VS5zdGF0dXM9PT0icGxheWluZyIsTDE9bj9gJHtfMyhVLmFyYyl9IMK3ICR7WTYoVS5lbGFwc2VkTXMpfWA6XzMoQy50b3RhbERpc3RhbmNlKTtyZXR1cm4gSyhWMCx7b3BlbjpKLG9uT3BlbkNoYW5nZTpaLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvX21pbm1heCgwLDFmcilfYXV0b10gW2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoSjEse2NoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJMb2NhdGlvbiJ9KSxKP0soInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMiOiEwLGNsYXNzTmFtZToibWluLXctMCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBqdXN0aWZ5LXNlbGYtZW5kIGxlYWRpbmctbm9uZSB3aGl0ZXNwYWNlLW5vd3JhcCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyBtYXgtdy1mdWxsIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4ycyxib3gtc2hhZG93XzAuMnNdIixzdHlsZTp7YmFja2dyb3VuZDpuPyIjNGFkZTgwIjpDLnRvdGFsRGlzdGFuY2U+MD8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoidHJhbnNwYXJlbnQiLGJveFNoYWRvdzpuPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyIsY2hpbGRyZW46TDF9KSwhbiYmSygic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cy10b3RhbCI6ITAsY2xhc3NOYW1lOiJzaHJpbmstMCIsY2hpbGRyZW46InRvdGFsIn0pXX0pOksoInNwYW4iLHt9KV19KSxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBibG9jayIsY2hpbGRyZW46W0soTzUse2xhYmVsOiJUcmFpbCIsdmFsdWU6WCxvbkNoYW5nZTpRMSxvcHRpb25zOmgwLm1hcCgobCk9Pih7dmFsdWU6bC5pZCxsYWJlbDpsLm5hbWV9KSksY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBweS0xLjUgcHItWzI2cHhdIHBsLTIgdy1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsYm9yZGVyLWNvbG9yXzAuMTJzXSBob3ZlcjpiZy13aGl0ZS9bMC4wN10gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTYpXSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ymctd2hpdGUvWzAuMDhdIGZvY3VzOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjI0KV0ifSksSygic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoRDIse29wZW46ITF9KX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46TS5kZXNjcmlwdGlvbn0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltLKCJjYW52YXMiLHtyZWY6ZixjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksSyhkJCx7cHJlcGFyZWQ6Q30pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbSyhXMyx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpfMyhVLmFyYyl9KSxLKFczLHtsYWJlbDoiUGFjZSIsdmFsdWU6cyQoUC5jdXJyZW50KX0pLEsoVzMse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTpZNihVLmVsYXBzZWRNcyl9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W0soImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazp1LGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7bj8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJ9YCwiYXJpYS1wcmVzc2VkIjpuLHRpdGxlOm4/IlBhdXNlIjoiUGxheSIsY2hpbGRyZW46W24/SygkMyx7fSk6SyhUMix7fSksSygic3BhbiIse2NoaWxkcmVuOm4/IlBhdXNlIjoiUGxheSJ9KV19KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6ejEsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMyBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1tZWRpdW0gYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjA2XSBlbmFibGVkOmhvdmVyOmJvcmRlci13aGl0ZS8yMCBlbmFibGVkOmhvdmVyOnRleHQtd2hpdGUgZGlzYWJsZWQ6b3BhY2l0eS00MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQiLGRpc2FibGVkOlUuc3RhdHVzPT09ImlkbGUiJiZVLmFyYz09PTAsdGl0bGU6IlN0b3AgYW5kIGNsZWFyIHNpbXVsYXRlZCBsb2NhdGlvbiIsY2hpbGRyZW46W0sodzIse30pLEsoInNwYW4iLHtjaGlsZHJlbjoiU3RvcCJ9KV19KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46SyhsJCx7YXJpYUxhYmVsOiJUcmFuc3BvcnQgbW9kZSIsdmFsdWU6cSxvbkNoYW5nZToobCk9PkcobCksb3B0aW9uczpbe3ZhbHVlOiJ3YWxrIixsYWJlbDoiV2FsayIsaWNvbjpLKEozLHt9KX0se3ZhbHVlOiJydW4iLGxhYmVsOiJSdW4iLGljb246SyhLMyx7fSl9LHt2YWx1ZToiY3ljbGUiLGxhYmVsOiJDeWNsZSIsaWNvbjpLKFozLHt9KX0se3ZhbHVlOiJkcml2ZSIsbGFiZWw6IkRyaXZlIixpY29uOksoWDMse30pfV19KX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e2xldCBsPU0zLmluZGV4T2YoTiksaj1NM1sobCsxKSVNMy5sZW5ndGhdO0Ioail9LGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMi41IGJvcmRlciByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgbWluLXctWzU2cHhdIGFjdGl2ZTpzY2FsZS1bMC45N10gJHtOPjE/ImJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSBob3ZlcjpiZy13aGl0ZS9bMC44OF0gaG92ZXI6Ym9yZGVyLXdoaXRlL1swLjg4XSBob3Zlcjp0ZXh0LVsjMGEwYTBjXSI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXItd2hpdGUvOCB0ZXh0LXdoaXRlLzg1IGhvdmVyOmJnLXdoaXRlL1swLjA5XSBob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xOCldIGhvdmVyOnRleHQtd2hpdGUifWAsImFyaWEtbGFiZWwiOmBTcGVlZCAke059w5cg4oCUIHRhcCB0byBjeWNsZWAsdGl0bGU6YFNwZWVkICR7Tn3DlyDigJQgdGFwIHRvIGN5Y2xlYCxjaGlsZHJlbjpbSyhRMyx7fSksTj4xJiZLKCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LW1vbm8gW2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc10iLGNoaWxkcmVuOltOLCLDlyJdfSldfSldfSksayYmSygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjprfSldfSl9dmFyIFczPVMwKGZ1bmN0aW9uKHtsYWJlbDpRLHZhbHVlOkp9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgYmctd2hpdGUvWzAuMDNdIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIHJvdW5kZWQtbWQgcHktWzVweF0gcHgtWzdweF0gbWluLXctMCIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToidGV4dC1bOXB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDZlbV0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46UX0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gZm9udC1tb25vIHRleHQtd2hpdGUgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkp9KV19KX0pO2Z1bmN0aW9uIGwkKHt2YWx1ZTokLG9uQ2hhbmdlOlEsb3B0aW9uczpKLGFyaWFMYWJlbDpafSl7cmV0dXJuIEsoImRpdiIse3JvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6WixjbGFzc05hbWU6ImZsZXggYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHAtMC41IGdhcC0wLjUiLGNoaWxkcmVuOkoubWFwKChYKT0+e2xldCBZPVgudmFsdWU9PT0kO3JldHVybiBLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PlEoWC52YWx1ZSksY2xhc3NOYW1lOmBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSBweS1bNXB4XSBweC0yIHRleHQtWzExcHhdIGZvbnQtbWVkaXVtIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIG1pbi1oLVsyMnB4XSAke1k/ImJnLXdoaXRlL1swLjEyXSB0ZXh0LXdoaXRlIjoiYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS82MCBob3ZlcjpiZy13aGl0ZS9bMC4wNV0gaG92ZXI6dGV4dC13aGl0ZS85MCJ9YCwiYXJpYS1wcmVzc2VkIjpZLCJhcmlhLWxhYmVsIjpYLmljb24/WC5sYWJlbDp2b2lkIDAsdGl0bGU6WC5pY29uP1gubGFiZWw6dm9pZCAwLGNoaWxkcmVuOlguaWNvbj8/WC5sYWJlbH0sWC52YWx1ZSl9KX0pfWZ1bmN0aW9uIGQkKHtwcmVwYXJlZDokfSl7aWYoJC5yYXdNYXhBbHQtJC5yYXdNaW5BbHQ8NSlyZXR1cm4gbnVsbDtyZXR1cm4gSyhKMSx7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltLKFo1LHtkaXI6InVwIn0pLCIgIixxNigkLnJhd01heEFsdCldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiByaWdodC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltLKFo1LHtkaXI6ImRvd24ifSksIiAiLHE2KCQucmF3TWluQWx0KV19KV19KX12YXIgWjY9MTQwO2Z1bmN0aW9uIFg2KCQsUSl7bGV0IEo9QXJyYXkoUSk7Zm9yKGxldCBaPTA7WjxRO1orKyl7bGV0IFg9UT09PTE/MDpaLyhRLTEpLFk9ZzAoJCxYKiQudG90YWxEaXN0YW5jZSk7SltaXT17eDpZLngseTpZLnksejpZLnp9fXJldHVybiBKfWZ1bmN0aW9uIGMkKCQsUSxKLFope2xldCBYPSgkLmJvdW5kcy54WzBdKyQuYm91bmRzLnhbMV0pLzIsWT0oJC5ib3VuZHMuelswXSskLmJvdW5kcy56WzFdKS8yLHE9JC5ib3VuZHMueVswXSxHPU1hdGgubWF4KDEsJC5ib3VuZHMueFsxXS0kLmJvdW5kcy54WzBdLCQuYm91bmRzLnpbMV0tJC5ib3VuZHMuelswXSksTj0oSi5ib3VuZHMueFswXStKLmJvdW5kcy54WzFdKS8yLEI9KEouYm91bmRzLnpbMF0rSi5ib3VuZHMuelsxXSkvMixVPUouYm91bmRzLnlbMF0saz1NYXRoLm1heCgxLEouYm91bmRzLnhbMV0tSi5ib3VuZHMueFswXSxKLmJvdW5kcy56WzFdLUouYm91bmRzLnpbMF0pL0csTT1YNigkLFo2KS5tYXAoKHkpPT4oe3g6KHkueC1YKSprK04seTooeS55LXEpKmsrVSx6Oih5LnotWSkqaytCfSkpLEM9WDYoSixaNiksej0oJC50cmFpbC5sb29wfHxKLnRyYWlsLmxvb3ApPz8hMSxBPXIkKE0sQyx6KSxQPWcwKCQsUSksUj17eDooUC54LVgpKmsrTix5OihQLnktcSkqaytVLHo6KFAuei1ZKSprK0J9LEk9ZzAoSiwwKSxUPXt4OkkueCx5OkkueSx6Okkuen07cmV0dXJue2Zyb206JCx0bzpKLGZyb21QdHM6TSx0b1B0czpBLHByZXZNYXJrZXI6UixuZXh0TWFya2VyOlQsc3RhcnRNczpafX1mdW5jdGlvbiByJCgkLFEsSil7bGV0IFo9JC5sZW5ndGgsWD0xLzAsWT0wLHE9ITEsRz1bUSxbLi4uUV0ucmV2ZXJzZSgpXTtmb3IobGV0IFU9MDtVPEcubGVuZ3RoO1UrKyl7bGV0IFY9R1tVXSxrPUo/WjoxO2ZvcihsZXQgTD0wO0w8aztMKyspe2xldCBNPTA7Zm9yKGxldCBDPTA7QzxaO0MrKyl7bGV0IHo9JFtDXSxBPVZbKEMrTCklWl0sUD16LngtQS54LFI9ei55LUEueSxJPXouei1BLno7aWYoTSs9UCpQK1IqUitJKkksTT49WClicmVha31pZihNPFgpWD1NLFk9TCxxPVU9PT0xfX1sZXQgTj1xP1suLi5RXS5yZXZlcnNlKCk6USxCPUFycmF5KFopO2ZvcihsZXQgVT0wO1U8WjtVKyspQltVXT1OWyhVK1kpJVpdO3JldHVybiBCfWZ1bmN0aW9uIG8kKCQsUSl7bGV0IEo9JC5mcm9tUHRzLmxlbmd0aCxaPUFycmF5KEopLFg9MCxZPW51bGwscT0xLzAsRz0tMS8wLE49MS8wLEI9LTEvMCxVPTEvMCxWPS0xLzA7Zm9yKGxldCBrPTA7azxKO2srKyl7bGV0IEw9JC5mcm9tUHRzW2tdLE09JC50b1B0c1trXSxDPUwueCsoTS54LUwueCkqUSx6PUwueSsoTS55LUwueSkqUSxBPUwueisoTS56LUwueikqUTtpZihZKXtsZXQgUj1DLVkueCxJPXotWS55LFQ9QS1ZLno7WCs9TWF0aC5zcXJ0KFIqUitJKkkrVCpUKX1sZXQgUD17eDpDLHk6eix6OkEsYXJjOlgsbGF0OjAsbG5nOjB9O2lmKFpba109UCxZPVAsQzxxKXE9QztpZihDPkcpRz1DO2lmKHo8TilOPXo7aWYoej5CKUI9ejtpZihBPFUpVT1BO2lmKEE+VilWPUF9cmV0dXJue3RyYWlsOiQudG8udHJhaWwsb3JpZ2luOiQudG8ub3JpZ2luLHBvaW50czpaLHRvdGFsRGlzdGFuY2U6WCxib3VuZHM6e3g6W3EsR10seTpbTixCXSx6OltVLFZdfSxyYXdNaW5BbHQ6JC50by5yYXdNaW5BbHQrKCQuZnJvbS5yYXdNaW5BbHQtJC50by5yYXdNaW5BbHQpKigxLVEpLHJhd01heEFsdDokLnRvLnJhd01heEFsdCsoJC5mcm9tLnJhd01heEFsdC0kLnRvLnJhd01heEFsdCkqKDEtUSl9fWZ1bmN0aW9uIGkkKCQpe3JldHVybiAkPDAuNT8yKiQqJDoxLU1hdGgucG93KC0yKiQrMiwyKS8yfWZ1bmN0aW9uIG4kKCQsUSxKLFosWCxZLHEpe2xldCBHPSQuZ2V0Q29udGV4dCgiMmQiKTtpZighRylyZXR1cm47bGV0e2NsaWVudFdpZHRoOk4sY2xpZW50SGVpZ2h0OkJ9PSQ7aWYoTj09PTB8fEI9PT0wKXJldHVybjtsZXQgVT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MToxLFY9TWF0aC5yb3VuZChOKlUpLGs9TWF0aC5yb3VuZChCKlUpO2lmKCQud2lkdGghPT1WfHwkLmhlaWdodCE9PWspJC53aWR0aD1WLCQuaGVpZ2h0PWs7Ry5zZXRUcmFuc2Zvcm0oVSwwLDAsVSwwLDApLEcuY2xlYXJSZWN0KDAsMCxOLEIpO2xldCBMPUcuY3JlYXRlUmFkaWFsR3JhZGllbnQoTiowLjUsQiowLjU1LE1hdGgubWluKE4sQikqMC4yLE4qMC41LEIqMC41NSxNYXRoLm1heChOLEIpKjAuODUpO0wuYWRkQ29sb3JTdG9wKDAsIiMxYTFhMWQiKSxMLmFkZENvbG9yU3RvcCgxLCIjMGEwYTBjIiksRy5maWxsU3R5bGU9TCxHLmZpbGxSZWN0KDAsMCxOLEIpLGEkKEcsTixCKTtsZXR7cG9pbnRzOk0sYm91bmRzOkN9PVE7aWYoTS5sZW5ndGg8MilyZXR1cm47bGV0IHo9MjgqTWF0aC5QSS8xODAsQT1NYXRoLnNpbih6KSxQPU1hdGguY29zKHopLFI9TWF0aC5zaW4oWiksST1NYXRoLmNvcyhaKSxUPShDLnhbMF0rQy54WzFdKS8yLHk9KEMuelswXStDLnpbMV0pLzIsYz1DLnhbMV0tQy54WzBdLG09Qy56WzFdLUMuelswXSxmPUMueVsxXS1DLnlbMF0sdT1NYXRoLm1heChjLG0pKjEuMDUsejE9TWF0aC5tYXgobSpQK2YqQSxjKjAuNCkqMS4xNSxRMT1OKjAuMDgsbj1CKjAuMTgsTDE9TWF0aC5taW4oKE4tUTEqMikvdSwoQi1uKjIpL3oxKSoxLjQ1LGw9ZjwxPzE6TWF0aC5taW4oMjQsMTQwL01hdGgubWF4KDIwLGYpKSxqPSh2LGcsTyk9PntsZXQgUz12LVQsaT1PLXkscj1TKkkraSpSLHExPS1TKlIraSpJLFoxPWcqbCx5MT1aMSpQLXExKkEsYjE9WjEqQStxMSpQO3JldHVybntzeDpOLzIrcipMMSxzeTpCKjAuNTUteTEqTDEsZGVwdGg6YjF9fSxLMT0zOCxCMT1NLm1hcCgodik9PntsZXQgZz1qKHYueCx2Lnksdi56KSxPPWoodi54LDAsdi56KSxTPXtzeDpnLnN4LHN5Ok1hdGgubWF4KE8uc3ksZy5zeStLMSksZGVwdGg6Ty5kZXB0aH07cmV0dXJue3A6dix0b3A6Zyxib3Q6U319KTtmb3IobGV0IHY9MTt2PEIxLmxlbmd0aDt2Kyspe2xldCBnPUIxW3YtMV0sTz1CMVt2XSxTPUcuY3JlYXRlTGluZWFyR3JhZGllbnQoKGcudG9wLnN4K08udG9wLnN4KS8yLChnLnRvcC5zeStPLnRvcC5zeSkvMiwoZy5ib3Quc3grTy5ib3Quc3gpLzIsKGcuYm90LnN5K08uYm90LnN5KS8yKTtTLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIiksUy5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLFMuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSxTLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDAsMCwwLDApIiksRy5maWxsU3R5bGU9UyxHLmJlZ2luUGF0aCgpLEcubW92ZVRvKGcudG9wLnN4LGcudG9wLnN5KSxHLmxpbmVUbyhPLnRvcC5zeCxPLnRvcC5zeSksRy5saW5lVG8oTy5ib3Quc3gsTy5ib3Quc3kpLEcubGluZVRvKGcuYm90LnN4LGcuYm90LnN5KSxHLmNsb3NlUGF0aCgpLEcuZmlsbCgpfUcuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLEcubGluZVdpZHRoPTEuNixHLmxpbmVDYXA9InJvdW5kIixHLmxpbmVKb2luPSJyb3VuZCIsRy5iZWdpblBhdGgoKTtmb3IobGV0IHY9MDt2PEIxLmxlbmd0aDt2Kyspe2xldHt0b3A6Z309QjFbdl07aWYodj09PTApRy5tb3ZlVG8oZy5zeCxnLnN5KTtlbHNlIEcubGluZVRvKGcuc3gsZy5zeSl9Ry5zdHJva2UoKTtsZXQgVjE9SjtHLnN0cm9rZVN0eWxlPSIjZjlkMmE0IixHLmxpbmVXaWR0aD0yLjIsRy5iZWdpblBhdGgoKTtsZXQgZT0hMTtmb3IobGV0IHY9MDt2PEIxLmxlbmd0aDt2Kyspe2xldHtwOmcsdG9wOk99PUIxW3ZdO2lmKGcuYXJjPlYxKWJyZWFrO2lmKCFlKUcubW92ZVRvKE8uc3gsTy5zeSksZT0hMDtlbHNlIEcubGluZVRvKE8uc3gsTy5zeSl9aWYoZSlHLnN0cm9rZSgpO2xldCBYMT1xPz9nMChRLEopLE4xPWooWDEueCxYMS55LFgxLnopO2lmKFkpe2xldCBPPVglMjYwMC8yNjAwLFM9NCsyMipPLGk9MC4yMiooMS1PKSxyPUcuY3JlYXRlUmFkaWFsR3JhZGllbnQoTjEuc3gsTjEuc3ksUyowLjUsTjEuc3gsTjEuc3ksUyk7ci5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLHIuYWRkQ29sb3JTdG9wKDAuNyxgcmdiYSgyNTUsMjU1LDI1NSwke2kudG9GaXhlZCgzKX0pYCksci5hZGRDb2xvclN0b3AoMSwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLEcuZmlsbFN0eWxlPXIsRy5iZWdpblBhdGgoKSxHLmFyYyhOMS5zeCxOMS5zeSxTLDAsTWF0aC5QSSoyKSxHLmZpbGwoKX1HLmZpbGxTdHlsZT0iI2ZmZiIsRy5iZWdpblBhdGgoKSxHLmFyYyhOMS5zeCxOMS5zeSwzLjgsMCxNYXRoLlBJKjIpLEcuZmlsbCgpfWZ1bmN0aW9uIGEkKCQsUSxKKXskLmZpbGxTdHlsZT0icmdiYSgyNTUsMjU1LDI1NSwwLjA2KSI7Zm9yKGxldCBZPTc7WTxKO1krPTE0KWZvcihsZXQgcT03O3E8UTtxKz0xNCkkLmJlZ2luUGF0aCgpLCQuYXJjKHEsWSwwLjcsMCxNYXRoLlBJKjIpLCQuZmlsbCgpfWZ1bmN0aW9uIF8zKCQpe2lmKCQ8MTAwMClyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeygkLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiBZNigkKXtsZXQgUT1NYXRoLmZsb29yKCQvMTAwMCksSj1NYXRoLmZsb29yKFEvMzYwMCksWj1NYXRoLmZsb29yKFElMzYwMC82MCksWD1RJTYwO2lmKEo+MClyZXR1cm5gJHtKfToke1oudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke1p9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIHMkKCQpe2lmKCQ8PTApcmV0dXJuIuKAlCI7aWYoJD43KXJldHVybmAkeygkKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0IFE9MTAwMC8kLEo9TWF0aC5mbG9vcihRLzYwKSxaPU1hdGgucm91bmQoUSU2MCk7cmV0dXJuYCR7Sn06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gcTYoJCl7cmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiBHNigkKXtsZXQgUT0kLnRyaW0oKTtpZighUSlyZXR1cm4iIjtsZXQgSj1RLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoSilyZXR1cm4gSlsxXTtyZXR1cm4gUS5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/UX1hc3luYyBmdW5jdGlvbiBQMygkLFEsSil7bGV0IFo9YXdhaXQgJChgeGNydW4gc2ltY3RsIGdldF9hcHBfY29udGFpbmVyICR7UX0gJHtVMShKKX0gYXBwYCk7aWYoWi5leGl0Q29kZSE9PTApcmV0dXJue2Vycm9yOlouc3RkZXJyLnRyaW0oKXx8IkFwcCBub3QgZm91bmQgb24gc2ltdWxhdG9yIn07bGV0IFg9Wi5zdGRvdXQudHJpbSgpO2lmKCFYKXJldHVybntlcnJvcjoiRW1wdHkgYXBwIHBhdGgifTtsZXQgWT1hd2FpdCAkKGBwbHV0aWwgLWNvbnZlcnQganNvbiAtbyAtICR7VTEoWCsiL0luZm8ucGxpc3QiKX1gKSxxPXt9O2lmKFkuZXhpdENvZGU9PT0wKXRyeXtxPUpTT04ucGFyc2UoWS5zdGRvdXQpfWNhdGNoe31sZXQgRyxCPShxPy5DRkJ1bmRsZUljb25zPy5DRkJ1bmRsZVByaW1hcnlJY29uPz9xPy5bIkNGQnVuZGxlSWNvbnN+aXBhZCJdPy5DRkJ1bmRsZVByaW1hcnlJY29uKT8uQ0ZCdW5kbGVJY29uRmlsZXM/P3E/LkNGQnVuZGxlSWNvbkZpbGVzO2lmKEImJkIubGVuZ3RoPjApRz1CW0IubGVuZ3RoLTFdO2Vsc2UgaWYodHlwZW9mIHE/LkNGQnVuZGxlSWNvbkZpbGU9PT0ic3RyaW5nIilHPXEuQ0ZCdW5kbGVJY29uRmlsZTtsZXQgVT1udWxsO2lmKEcpe2xldCBWPVtgJHtHfUAzeC5wbmdgLGAke0d9QDJ4LnBuZ2AsYCR7R30ucG5nYCxgJHtHfTYweDYwQDN4LnBuZ2AsYCR7R302MHg2MEAyeC5wbmdgXSxMPShhd2FpdCAkKGBiYXNoIC1jICR7VTEoVi5tYXAoKE0pPT5gWyAtZiAke1UxKFgrIi8iK00pfSBdICYmIGVjaG8gJHtVMShYKyIvIitNKX0gJiYgZXhpdCAwYCkuam9pbigiOyAiKSsiOyBleGl0IDEiKX1gKSkuc3Rkb3V0LnRyaW0oKTtpZihMKXtsZXQgTT1hd2FpdCAkKGBiYXNlNjQgLWkgJHtVMShMKX1gKTtpZihNLmV4aXRDb2RlPT09MClVPWBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtNLnN0ZG91dC5yZXBsYWNlKC9ccysvZywiIil9YH19cmV0dXJue2FwcFBhdGg6WCxkaXNwbGF5TmFtZTpxLkNGQnVuZGxlRGlzcGxheU5hbWU/P3EuQ0ZCdW5kbGVOYW1lLHNob3J0VmVyc2lvbjpxLkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nLGJ1bmRsZVZlcnNpb246cS5DRkJ1bmRsZVZlcnNpb24sbWluT1M6cS5NaW5pbXVtT1NWZXJzaW9uLGV4ZWN1dGFibGU6cS5DRkJ1bmRsZUV4ZWN1dGFibGUsaWNvbkRhdGFVcmw6VX19dmFyIEoyPW5ldyBNYXA7ZnVuY3Rpb24gQjYoJCxRLEope2xldCBaPWAke1F9OiR7Sn1gLFg9SjIuZ2V0KFopO2lmKFghPT12b2lkIDApcmV0dXJuIFByb21pc2UucmVzb2x2ZShYKTtsZXQgWT1QMygkLFEsSikudGhlbigocSk9PntsZXQgRz1xLmljb25EYXRhVXJsPz9udWxsO3JldHVybiBKMi5zZXQoWixHKSxHfSkuY2F0Y2goKCk9PntyZXR1cm4gSjIuc2V0KFosbnVsbCksbnVsbH0pO3JldHVybiBKMi5zZXQoWixZKSxZfWZ1bmN0aW9uIHQkKCQpe3JldHVybiAkLnN0YXJ0c1dpdGgoImNvbS5hcHBsZS4iKX1mdW5jdGlvbiBlJCgkKXtpZigkPT09ImNvbS5hcHBsZS5zcHJpbmdib2FyZCIpcmV0dXJuIlNwcmluZ0JvYXJkIjtyZXR1cm4gJH1mdW5jdGlvbiAkUSh7YnVuZGxlSWQ6JH0pe2xldCBRPXQkKCQpO3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOlE/InN5c3RlbS1hcHAtaWNvbiI6ImFwcC1pY29uLWZhbGxiYWNrIixjbGFzc05hbWU6YHctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIGJvcmRlciBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciAke1E/ImJvcmRlci1bIzNiNWY5OV0gYmctW2xpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKV0gdGV4dC1bI2M4ZDdmZl0iOiJib3JkZXItd2hpdGUvMTAgYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODAifWAsImFyaWEtbGFiZWwiOlE/IlN5c3RlbSBhcHAiOiJBcHAgaWNvbiB1bmF2YWlsYWJsZSIsdGl0bGU6UT8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIixjaGlsZHJlbjpRP0soInN2ZyIse3JvbGU6ImltZyIsdmlld0JveDoiMCAwIDI0IDI0Iix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNsYXNzTmFtZToic2l6ZS1bMTlweF0iLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46W0soInRpdGxlIix7Y2hpbGRyZW46IkFwcGxlIn0pLEsoInBhdGgiLHtkOiJNMTIuMTUyIDYuODk2Yy0uOTQ4IDAtMi40MTUtMS4wNzgtMy45Ni0xLjA0LTIuMDQuMDI3LTMuOTEgMS4xODMtNC45NjEgMy4wMTQtMi4xMTcgMy42NzUtLjU0NiA5LjEwMyAxLjUxOSAxMi4wOSAxLjAxMyAxLjQ1NCAyLjIwOCAzLjA5IDMuNzkyIDMuMDM5IDEuNTItLjA2NSAyLjA5LS45ODcgMy45MzUtLjk4NyAxLjgzMSAwIDIuMzUuOTg3IDMuOTYuOTQ4IDEuNjM3LS4wMjYgMi42NzYtMS40OCAzLjY3Ni0yLjk0OCAxLjE1Ni0xLjY4OCAxLjYzNi0zLjMyNSAxLjY2Mi0zLjQxNS0uMDM5LS4wMTMtMy4xODItMS4yMjEtMy4yMi00Ljg1Ny0uMDI2LTMuMDQgMi40OC00LjQ5NCAyLjU5Ny00LjU1OS0xLjQyOS0yLjA5LTMuNjIzLTIuMzI0LTQuMzktMi4zNzYtMi0uMTU2LTMuNjc1IDEuMDktNC42MSAxLjA5ek0xNS41MyAzLjgzYy44NDMtMS4wMTIgMS40LTIuNDI3IDEuMjQ1LTMuODMtMS4yMDcuMDUyLTIuNjYyLjgwNS0zLjUzMiAxLjgxOC0uNzguODk2LTEuNDU0IDIuMzM4LTEuMjczIDMuNzE0IDEuMzM4LjEwNCAyLjcxNS0uNjg4IDMuNTU5LTEuNzAxIn0pXX0pOksoVTIse3NpemU6MTksc3Ryb2tlV2lkdGg6MS45fSl9KX1mdW5jdGlvbiBRUSh7YnVuZGxlSWQ6JCxpY29uRGF0YVVybDpRfSl7aWYoUSlyZXR1cm4gSygiaW1nIix7c3JjOlEsY2xhc3NOYW1lOiJ3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBvYmplY3QtY292ZXIgYm9yZGVyIGJvcmRlci13aGl0ZS84IixhbHQ6IiJ9KTtyZXR1cm4gSygkUSx7YnVuZGxlSWQ6JH0pfWZ1bmN0aW9uIE42KHt1ZGlkOiQsY3VycmVudEFwcDpRfSl7bGV0W0osWl09VyhudWxsKSxbWCxZXT1XKCExKTtpZih4KCgpPT57aWYoIVEpe1oobnVsbCk7cmV0dXJufWxldCBxPSExO3JldHVybiBaKHtidW5kbGVJZDpRLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6US5pc1JlYWN0TmF0aXZlLHBpZDpRLnBpZCxsb2FkaW5nOiEwfSksUDMoQTEsJCxRLmJ1bmRsZUlkKS50aGVuKChHKT0+e2lmKHEpcmV0dXJuO1ooe2J1bmRsZUlkOlEuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpRLmlzUmVhY3ROYXRpdmUscGlkOlEucGlkLGxvYWRpbmc6ITEsLi4uR30pfSksKCk9PntxPSEwfX0sWyQsUSxRPy5idW5kbGVJZCxRPy5waWQsUT8uaXNSZWFjdE5hdGl2ZV0pLCFKKXJldHVybiBLKEpRLHt9KTtyZXR1cm4gSyhWMCx7b3BlbjpYLG9uT3BlbkNoYW5nZTpZLHN1bW1hcnlDbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCIsc3VtbWFyeTpLKEoxLHtjaGlsZHJlbjpbSyhRUSx7YnVuZGxlSWQ6Si5idW5kbGVJZCxpY29uRGF0YVVybDpKLmljb25EYXRhVXJsfSksSyhLUSx7YnVuZGxlSWQ6Si5idW5kbGVJZCxkaXNwbGF5TmFtZTpKLmRpc3BsYXlOYW1lfSldfSksY2hpbGRyZW46W0ouZXJyb3ImJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46Si5lcnJvcn0pLEsoImRsIix7Y2xhc3NOYW1lOiJtLTAgZmxleCBmbGV4LWNvbCBnYXAtMS41IixjaGlsZHJlbjpbSyhLMix7bGFiZWw6IlZlcnNpb24iLHZhbHVlOkouc2hvcnRWZXJzaW9uP2Ake0ouc2hvcnRWZXJzaW9ufSAoJHtKLmJ1bmRsZVZlcnNpb24/PyLigJQifSlgOkoubG9hZGluZz8i4oCmIjoi4oCUIn0pLEsoSzIse2xhYmVsOiJNaW4gaU9TIix2YWx1ZTpKLm1pbk9TPz8oSi5sb2FkaW5nPyLigKYiOiLigJQiKX0pLEsoSzIse2xhYmVsOiJFeGVjdXRhYmxlIix2YWx1ZTpKLmV4ZWN1dGFibGU/PyhKLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksSyhLMix7bGFiZWw6IlBJRCIsdmFsdWU6Si5waWQhPW51bGw/U3RyaW5nKEoucGlkKToi4oCUIn0pLEouaXNSZWFjdE5hdGl2ZSYmSyhLMix7bGFiZWw6IlJlYWN0IE5hdGl2ZSIsdmFsdWU6IlllcyJ9KSxLKEsyLHtsYWJlbDoiQXBwIHBhdGgiLHZhbHVlOkouYXBwUGF0aD8/KEoubG9hZGluZz8i4oCmIjoi4oCUIiksbW9ubzohMCxhY3Rpb246Si5hcHBQYXRoP3t0aXRsZToiUmV2ZWFsIGluIEZpbmRlciIsb25DbGljazooKT0+e0ExKGBvcGVuIC1SICR7VTEoSi5hcHBQYXRoKX1gKX0saWNvbjpLKEwyLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuMn0pfTp2b2lkIDB9KV19KV19KX1mdW5jdGlvbiBKUSgpe3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtZGV0ZWN0aW9uLXNrZWxldG9uIixjbGFzc05hbWU6ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiIsImFyaWEtbGFiZWwiOiJXYWl0aW5nIGZvciBmb3JlZ3JvdW5kIGFwcCIsY2hpbGRyZW46SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBiZy13aGl0ZS9bMC4wOF0ifSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMiIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImgtMy41IHctWzQ2JV0gcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjEyXSJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTIuNSB3LVs2OCVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSksSygic3BhbiIse2NsYXNzTmFtZToidy0yLjUgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSJ9KV19KX0pfWZ1bmN0aW9uIEtRKHtidW5kbGVJZDokLGRpc3BsYXlOYW1lOlF9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBsZWFkaW5nLXRpZ2h0IHRleHQtbGVmdCIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzkwIHRydW5jYXRlIixjaGlsZHJlbjpRPz9lJCgkKX0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gdHJ1bmNhdGUiLHRpdGxlOiQsY2hpbGRyZW46JH0pXX0pfWZ1bmN0aW9uIEsyKHtsYWJlbDokLHZhbHVlOlEsbW9ubzpKLGFjdGlvbjpafSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZ3JvdXAgZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbSygiZHQiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzUwIHctMjEgc2hyaW5rLTAiLGNoaWxkcmVuOiR9KSxLKCJkZCIse2NsYXNzTmFtZTpgbS0wIHRleHQtd2hpdGUvOTAgZmxleC0xIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgcmVsYXRpdmUgJHtKPyJmb250LW1vbm8gdGV4dC1bMTFweF0iOiJ0ZXh0LVsxMnB4XSJ9YCx0aXRsZTpRLGNoaWxkcmVuOltRLFomJksoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCBib3R0b20tMCBwbC03IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQscmdiYSgyOCwyOCwzMCwwKV8wJSwjMWMxYzFlXzU1JSldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSx0cmFuc2Zvcm1fMC4xNXNfZWFzZV0gb3BhY2l0eS0wIHRyYW5zbGF0ZS14LTEgcG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBncm91cC1ob3Zlcjp0cmFuc2xhdGUteC0wIGdyb3VwLWhvdmVyOnBvaW50ZXItZXZlbnRzLWF1dG8iLGNoaWxkcmVuOksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpaLm9uQ2xpY2ssdGl0bGU6Wi50aXRsZSwiYXJpYS1sYWJlbCI6Wi50aXRsZSxjbGFzc05hbWU6InctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZCB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46Wi5pY29ufSl9KV19KV19KX12YXIgVTY9W3trZXk6ImNhbWVyYSIsbGFiZWw6IkNhbWVyYSJ9LHtrZXk6Im1pY3JvcGhvbmUiLGxhYmVsOiJNaWNyb3Bob25lIn0se2tleToicGhvdG9zIixsYWJlbDoiUGhvdG9zIn0se2tleToicGhvdG9zLWFkZCIsbGFiZWw6IkFkZCB0byBQaG90b3MifSx7a2V5OiJjb250YWN0cyIsbGFiZWw6IkNvbnRhY3RzIn0se2tleToiY2FsZW5kYXIiLGxhYmVsOiJDYWxlbmRhciJ9LHtrZXk6InJlbWluZGVycyIsbGFiZWw6IlJlbWluZGVycyJ9LHtrZXk6ImxvY2F0aW9uIixsYWJlbDoiTG9jYXRpb24ifSx7a2V5OiJsb2NhdGlvbi1hbHdheXMiLGxhYmVsOiJMb2NhdGlvbiAoQWx3YXlzKSJ9LHtrZXk6Im5vdGlmaWNhdGlvbnMiLGxhYmVsOiJOb3RpZmljYXRpb25zIn0se2tleToibW90aW9uIixsYWJlbDoiTW90aW9uIn0se2tleToibWVkaWEtbGlicmFyeSIsbGFiZWw6Ik1lZGlhIExpYnJhcnkifSx7a2V5OiJzaXJpIixsYWJlbDoiU2lyaSJ9XTtmdW5jdGlvbiBMNih7dWRpZDokLGJ1bmRsZUlkOlF9KXtsZXRbSixaXT1XKHt9KSxbWCxZXT1XKG51bGwpLFtxLEddPVcobnVsbCksW04sQl09VyghMSksVT1fMSgoKT0+e2xldCBMPXR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5zZXJ2ZVNpbUJpbjtpZighTClyZXR1cm4ic2VydmUtc2ltIjtpZigvXC50cyQvLnRlc3QoTCkpcmV0dXJuYGJ1biAke1UxKEwpfWA7aWYoL1wuanMkLy50ZXN0KEwpKXJldHVybmBub2RlICR7VTEoTCl9YDtyZXR1cm4gVTEoTCl9LFtdKTt4KCgpPT57Wih7fSksRyhudWxsKX0sW1FdKTtsZXQgVj1FKGFzeW5jKEwsTSk9PntpZighUSlyZXR1cm47bGV0IEM9YCR7TH06JHtNfWA7WShDKSxHKG51bGwpO3RyeXtsZXQgej1hd2FpdCBBMShgJHtVfSBwZXJtaXNzaW9ucyAke019ICR7TH0gJHtVMShRKX0gLWQgJHtVMSgkKX1gKTtpZih6LmV4aXRDb2RlIT09MCl7Ryh6LnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7ei5leGl0Q29kZX0pYCk7cmV0dXJufVooKEEpPT4oey4uLkEsW0xdOk09PT0icmVzZXQiP3ZvaWQgMDpNfSkpfWZpbmFsbHl7WShudWxsKX19LFtVLCQsUV0pLGs9RShhc3luYygpPT57aWYoIVEpcmV0dXJuO1koIl9fYWxsX18iKSxHKG51bGwpO3RyeXtsZXQgTD1hd2FpdCBBMShgJHtVfSBwZXJtaXNzaW9ucyByZXNldCBhbGwgJHtVMShRKX0gLWQgJHtVMSgkKX1gKTtpZihMLmV4aXRDb2RlIT09MCl7RyhMLnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7TC5leGl0Q29kZX0pYCk7cmV0dXJufVooe30pfWZpbmFsbHl7WShudWxsKX19LFtVLCQsUV0pO2lmKCFRKXJldHVybiBLKFpRLHt9KTtyZXR1cm4gSyhWMCx7b3BlbjpOLG9uT3BlbkNoYW5nZTpCLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoSjEse2NoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxLKCJzcGFuIix7fSldfSksY2hpbGRyZW46W3EmJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46cX0pLEsoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6Im1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIGZsZXggZmxleC1jb2wgZ2FwLTEgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpVNi5tYXAoKHtrZXk6TCxsYWJlbDpNfSk9PntsZXQgQz1KW0xdO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweC0wLjUgcHktMSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOk19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTAuNSBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgcC0wLjUiLHJvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6TSxjaGlsZHJlbjpbSyhEMyx7YWN0aXZlOkM9PT0iZ3JhbnQiLHBlbmRpbmc6WD09PWAke0x9OmdyYW50YCxvbkNsaWNrOigpPT5WKEwsImdyYW50IiksdmFyaWFudDoiZ3JhbnQiLHRpdGxlOiJBbGxvdyIsY2hpbGRyZW46Syh6Mix7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxLKEQzLHthY3RpdmU6Qz09PSJyZXZva2UiLHBlbmRpbmc6WD09PWAke0x9OnJldm9rZWAsb25DbGljazooKT0+VihMLCJyZXZva2UiKSx2YXJpYW50OiJyZXZva2UiLHRpdGxlOiJEZW55IixjaGlsZHJlbjpLKCQwLHtzaXplOjExLHN0cm9rZVdpZHRoOjN9KX0pLEsoRDMse2FjdGl2ZTohMSxwZW5kaW5nOlg9PT1gJHtMfTpyZXNldGAsb25DbGljazooKT0+VihMLCJyZXNldCIpLHZhcmlhbnQ6InJlc2V0Iix0aXRsZToiUmVzZXQiLGNoaWxkcmVuOksodjAse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi40fSl9KV19KV19LEwpfSl9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgcm91bmRlZC10LVsxMHB4XSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX2JvdHRvbSwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3RvcCwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46SygiYnV0dG9uIix7b25DbGljazprLGRpc2FibGVkOlg9PT0iX19hbGxfXyIsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InNlcnZlLXNpbSBwZXJtaXNzaW9ucyByZXNldCBhbGwiLGNoaWxkcmVuOlg9PT0iX19hbGxfXyI/IuKApiI6IlJlc2V0IGFsbCJ9KX0pXX0pfWZ1bmN0aW9uIFpRKCl7cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1wZXJtaXNzaW9ucy1sb2FkaW5nIixjbGFzc05hbWU6ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiIsImFyaWEtZGlzYWJsZWQiOiJ0cnVlIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46SygiZGl2Iix7Y2xhc3NOYW1lOiJzZWxlY3Qtbm9uZSB0ZXh0LXdoaXRlLzU1IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIGdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IGN1cnNvci1kZWZhdWx0IixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLEsoInNwYW4iLHt9KSxLKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicGVybWlzc2lvbnMtbG9hZGluZy1pbmRpY2F0b3IiLHJvbGU6InN0YXR1cyIsImFyaWEtbGFiZWwiOiJMb2FkaW5nIHBlcm1pc3Npb25zIixjbGFzc05hbWU6InNpemUtMi41IHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLVsjNWY2MjY4XSBib3JkZXItdC1bI2Y0ZjRmNV0gYW5pbWF0ZS1bZ3JpZC1zcGluXzAuN3NfbGluZWFyX2luZmluaXRlXSJ9KV19KX0pfWZ1bmN0aW9uIEQzKHthY3RpdmU6JCxwZW5kaW5nOlEsb25DbGljazpKLHZhcmlhbnQ6Wix0aXRsZTpYLGNoaWxkcmVuOll9KXtsZXQgcT1aPT09ImdyYW50Ij8iIzRhZGU4MCI6Wj09PSJyZXZva2UiPyIjZjg3MTcxIjoiI2E1YjRmYyI7cmV0dXJuIEsoImJ1dHRvbiIse29uQ2xpY2s6SixkaXNhYmxlZDpRLHRpdGxlOlgsImFyaWEtbGFiZWwiOlgsY2xhc3NOYW1lOiJ3LTYgaC01LjUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLW5vbmUgcm91bmRlZCBwLTAgY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10iLHN0eWxlOntiYWNrZ3JvdW5kOiQ/YCR7cX0yMmA6InRyYW5zcGFyZW50Iixjb2xvcjokP3E6InJnYmEoMjU1LDI1NSwyNTUsMC41NSkiLG9wYWNpdHk6UT8wLjU6MX0sY2hpbGRyZW46WX0pfWZ1bmN0aW9uIFc1KHtsYWJlbDokLGNoZWNrZWQ6USxkaXNhYmxlZDpKPSExLG9uQ2hhbmdlOlp9KXtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOlEsImFyaWEtbGFiZWwiOiQsZGlzYWJsZWQ6SixvbkNsaWNrOigpPT5aKCFRKSxjbGFzc05hbWU6YHJlbGF0aXZlIGgtWzE4cHhdIHctOCBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLW5vbmUgcC0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7Sj8iY3Vyc29yLWRlZmF1bHQgYmctd2hpdGUvMjAiOlE/ImN1cnNvci1wb2ludGVyIGJnLVsjMGE4NGZmXSI6ImN1cnNvci1wb2ludGVyIGJnLXdoaXRlLzIwIn1gLGNoaWxkcmVuOksoInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC1bMnB4XSBzaXplLVsxNHB4XSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246bGVmdF8wLjE1c10gJHtKPyJiZy13aGl0ZS81MCI6ImJnLXdoaXRlIn1gLHN0eWxlOntsZWZ0OlE/MTY6Mn19KX0pfXZhciBYUT0iYmctcGFuZWwgcm91bmRlZC1bMTBweF0iLFlRPSJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIG0tMCI7ZnVuY3Rpb24gQzYoe292ZXJsYXlFbmFibGVkOiQsb25Ub2dnbGVPdmVybGF5OlF9KXtsZXR7c25hcHNob3Q6Sn09dDAoKSx7aGlnaGxpZ2h0ZWRLZXk6WixzZXRIaWdobGlnaHRlZEtleTpYfT1HNSgpLFk9Sj8uZWxlbWVudHM/P1tdLHE9WDUoSiksRz1KPy5lcnJvcnM/LlswXT8/bnVsbDtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOmAke1hRfSBweC0zIHB5LTJgLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6WVEsY2hpbGRyZW46IkFYIFRyZWUifSksSyhXNSx7bGFiZWw6IkVuYWJsZSBvdmVybGF5IixjaGVja2VkOiQsb25DaGFuZ2U6UX0pXX0pLCEkP251bGw6cT9LKHo2LHtjaGlsZHJlbjoiQVggdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIn0pOlkubGVuZ3RoPT09MD9LKHo2LHtzcGlubmVyOiFHLGNoaWxkcmVuOkc/PyJXYWl0aW5nIGZvciBhY2Nlc3NpYmlsaXR5IGRhdGHigKYifSk6SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIG10LTIgcHktMiBtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpZLm1hcCgoTixCKT0+e2xldCBVPWowKE4pO3JldHVybiBLKHFRLHtlbGVtZW50Ok4saW5kZXg6QixhY3RpdmU6VT09PVosb25IaWdobGlnaHQ6WH0sVSl9KX0pXX0pfWZ1bmN0aW9uIHo2KHtjaGlsZHJlbjokLHNwaW5uZXI6UT0hMX0pe3JldHVybiBLKCJkaXYiLHtyb2xlOiJzdGF0dXMiLCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNsYXNzTmFtZToibXQtMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBweS00IHRleHQtWzEycHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOltRP0soInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMy41IHNocmluay0wIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMjAgYm9yZGVyLXQtd2hpdGUvNjAgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KTpudWxsLEsoInNwYW4iLHtjaGlsZHJlbjokfSldfSl9dmFyIHFRPVMwKGZ1bmN0aW9uKHtlbGVtZW50OlEsaW5kZXg6SixhY3RpdmU6WixvbkhpZ2hsaWdodDpYfSl7bGV0IFk9ajAoUSkscT1xNShRLEopLEc9YCR7TWF0aC5yb3VuZChRLmZyYW1lLndpZHRoKX14JHtNYXRoLnJvdW5kKFEuZnJhbWUuaGVpZ2h0KX1gLE49W3EubGFiZWwscS5yb2xlfHxxLnR5cGV8fCJlbGVtZW50IixHXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybiBLKCJkaXYiLHtyb2xlOiJsaXN0aXRlbSIsdGFiSW5kZXg6MCwiZGF0YS1heC1rZXkiOlksdGl0bGU6Tixvbk1vdXNlRW50ZXI6KCk9PlgoWSksb25Nb3VzZUxlYXZlOigpPT5YKG51bGwpLG9uRm9jdXM6KCk9PlgoWSksb25CbHVyOigpPT5YKG51bGwpLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgcHktMSBweC0wLjUgbWluLXctMCAke1o/ImJnLXdoaXRlL1swLjA2XSI6IiJ9YCxjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46US5sYWJlbHx8US5yb2xlfHwiVW5sYWJlbGVkIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvNDUgZm9udC1tb25vIHRleHQtWzEwcHhdIixjaGlsZHJlbjpRLnJvbGV8fFEudHlwZXx8ImVsZW1lbnQifSldfSksSygiY29kZSIse2NsYXNzTmFtZToic2hyaW5rLTAgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRleHQtWzEwcHhdIHB4LTEuNSBweS1bM3B4XSIsY2hpbGRyZW46R30pXX0pfSwoJCxRKT0+JC5pbmRleD09PVEuaW5kZXgmJiQuYWN0aXZlPT09US5hY3RpdmUmJiQub25IaWdobGlnaHQ9PT1RLm9uSGlnaGxpZ2h0JiZZNSgkLmVsZW1lbnQsUS5lbGVtZW50KSk7dmFyIEdRPW5ldyBTZXQoWyJpbWFnZS9qcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvZ2lmIiwiaW1hZ2UvaGVpYyIsImltYWdlL2hlaWYiLCJpbWFnZS93ZWJwIiwidmlkZW8vbXA0IiwidmlkZW8vcXVpY2t0aW1lIl0pLFQzPTE5NjYwOCxINj01MjQyODgwMDAsXzU9ImFwcGxpY2F0aW9uL3gtc2VydmUtc2ltLWhvc3QtcGF0aCI7YXN5bmMgZnVuY3Rpb24gRjYoJCxRLEope2xldCBaPWF3YWl0IFEoYHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke0p9ICR7VTEoJCl9YCk7aWYoWi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoWi5zdGRlcnJ8fGBhZGRtZWRpYSBmYWlsZWQgKGV4aXQgJHtaLmV4aXRDb2RlfSlgKX1mdW5jdGlvbiBaMigkKXtsZXQgUT0kLm5hbWUsSj1RLmxhc3RJbmRleE9mKCIuIik7aWYoSj49MClyZXR1cm4gUS5zbGljZShKKzEpLnRvTG93ZXJDYXNlKCk7aWYoJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiJtcDQiO3JldHVybiJqcGcifWZ1bmN0aW9uIGs2KCQpe2lmKFoyKCQpPT09ImlwYSIpcmV0dXJuImlwYSI7aWYoR1EuaGFzKCQudHlwZSkpcmV0dXJuIm1lZGlhIjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBWUSgkKXtsZXQgUT1uZXcgVWludDhBcnJheSgkKSxKPSIiO2ZvcihsZXQgWj0wO1o8US5sZW5ndGg7Wis9MzI3NjgpSis9U3RyaW5nLmZyb21DaGFyQ29kZSguLi5RLnN1YmFycmF5KFosWiszMjc2OCkpO3JldHVybiBidG9hKEopfWFzeW5jIGZ1bmN0aW9uIEE2KCQsUSxKLFope2xldCBYPTA7Zm9yKGxldCBZPTA7WTwkLnNpemU7WSs9VDMpe2xldCBxPWF3YWl0ICQuc2xpY2UoWSxZK1QzKS5hcnJheUJ1ZmZlcigpLEc9VlEocSksQj1hd2FpdCBKKGBiYXNoIC1jICdlY2hvICR7R30gfCBiYXNlNjQgLWQgJHtZPT09MD8iPiI6Ij4+In0gJHtRfSdgKTtpZihCLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihCLnN0ZGVycnx8YFdyaXRlIGZhaWxlZCAoZXhpdCAke0IuZXhpdENvZGV9KWApO2lmKCFaKWNvbnRpbnVlO2xldCBVPU1hdGgubWluKFkrVDMsJC5zaXplKSxWPU1hdGguZmxvb3IoVS8kLnNpemUqMTAwKTtpZihWIT09WClYPVYsWihVLyQuc2l6ZSl9fWFzeW5jIGZ1bmN0aW9uIE02KCQsUSxKLFope2lmKCQuc2l6ZT5INil0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWD1gL3RtcC8ke1F9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtKfWA7cmV0dXJuIGF3YWl0IEE2KCQsWCxaKSxYfWFzeW5jIGZ1bmN0aW9uIE82KCQsUSxKLFosWCl7aWYoJC5zaXplPkg2KXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBZPVE9PT0iaXBhIj8iaXBhIjpaMigkKSxHPWAvdG1wLyR7UT09PSJpcGEiPyJzZXJ2ZS1zaW0taW5zdGFsbCI6InNlcnZlLXNpbS11cGxvYWQifS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7WX1gO3RyeXtYKDApLGF3YWl0IEE2KCQsRyxKLFgpLFgobnVsbCk7bGV0IE49UT09PSJpcGEiP2B4Y3J1biBzaW1jdGwgaW5zdGFsbCAke1p9ICR7R31gOmB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtafSAke0d9YCxCPWF3YWl0IEooTik7aWYoQi5leGl0Q29kZSE9PTApe2xldCBVPVE9PT0iaXBhIj8iaW5zdGFsbCI6ImFkZG1lZGlhIjt0aHJvdyBFcnJvcihCLnN0ZGVycnx8YCR7VX0gZmFpbGVkIChleGl0ICR7Qi5leGl0Q29kZX0pYCl9fWZpbmFsbHl7SihgYmFzaCAtYyAncm0gLWYgJHtHfSdgKS5jYXRjaCgoKT0+e30pfX12YXIgQlE9MzAwMCxOUT0yMDk3MTUyMDAsVVE9IkxhcmdlIHZpZGVvICg+MjAwIE1CKSDigJQgbWF5IHN0dXR0ZXIgb24gc2hhcmVkIG1lbW9yeSIsXzY9IkhFSUMgZGVjb2RlIGZhaWxlZCDigJQgZXhwb3J0IGFzIEpQRUcgb3IgUE5HIGFuZCByZXRyeSI7ZnVuY3Rpb24gTFEoJCxRKXtpZihRKXJldHVybiJhY3RpdmUiO2lmKCQ9PT0iYWN0aXZlIilyZXR1cm4iZGlzY29ubmVjdGVkIjtpZigkPT09ImRpc2Nvbm5lY3RlZCIpcmV0dXJuInJlYWR5IjtyZXR1cm4gJH1mdW5jdGlvbiB6USgkKXtpZighJC5pbmplY3RlZClyZXR1cm4icGxheSI7aWYoJC5zb3VyY2U9PT0icGxhY2Vob2xkZXIiKXJldHVybiJwbGF5IjtpZigkLmJ1bmRsZUlkJiYhJC5mb3JlZ3JvdW5kSXNJbmplY3RlZClyZXR1cm4iYXR0YWNoIjtyZXR1cm4ic3RvcCJ9ZnVuY3Rpb24gQ1EoJCl7cmV0dXJuICQuc3BsaXQoYApgKS5tYXAoKFEpPT5RLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLmZsYXRNYXAoKFEpPT57bGV0IEo9US5pbmRleE9mKCJcdCIpO2lmKEo8PTApcmV0dXJuW107bGV0IFo9US5zbGljZSgwLEopLnRyaW0oKSxYPVEuc2xpY2UoSisxKS50cmltKCk7aWYoIVp8fCFYKXJldHVybltdO3JldHVyblt7aWQ6WixuYW1lOlh9XX0pfXZhciBIUT1uZXcgU2V0KFsibXA0IiwibTR2IiwibW92IiwicXQiLCJhdmkiLCJta3YiLCJ3ZWJtIiwibXBnIiwibXBlZyIsIjNncCIsIjNnMiIsInRzIiwid212Il0pO2Z1bmN0aW9uIFA2KCQpe2lmKCQudHlwZSYmJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiEwO2xldCBRPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpLEo9US5sYXN0SW5kZXhPZigiLiIpO2lmKEo8MClyZXR1cm4hMTtyZXR1cm4gSFEuaGFzKFEuc2xpY2UoSisxKSl9ZnVuY3Rpb24gRlEoJCl7cmV0dXJuIFA2KCQpJiYkLnNpemU+TlF9ZnVuY3Rpb24ga1EoJCl7bGV0IFE9KCQudHlwZT8/IiIpLnRvTG93ZXJDYXNlKCk7aWYoUT09PSJpbWFnZS9oZWljInx8UT09PSJpbWFnZS9oZWlmIilyZXR1cm4hMDtsZXQgSj0oJC5uYW1lPz8iIikudG9Mb3dlckNhc2UoKTtyZXR1cm4gSi5lbmRzV2l0aCgiLmhlaWMiKXx8Si5lbmRzV2l0aCgiLmhlaWYiKX1mdW5jdGlvbiBBUSh7cmF3TWVzc2FnZTokLGxhc3RGaWxlSXNIZWljOlEsc291cmNlOkp9KXtpZihRJiYoSj09PSJpbWFnZSJ8fEo9PT0idmlkZW8iKSlyZXR1cm4gXzY7cmV0dXJuICR9ZnVuY3Rpb24gTVEoe3N0YXRlOiR9KXtsZXQgUT0kPT09ImFjdGl2ZSI/IkFjdGl2ZSI6JD09PSJkaXNjb25uZWN0ZWQiPyJEaXNjb25uZWN0ZWQiOiJSZWFkeSIsSj0kPT09ImFjdGl2ZSI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1zdWNjZXNzLWVtZXJhbGQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDc0LDIyMiwxMjgsMC43KV0iOiQ9PT0iZGlzY29ubmVjdGVkIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLWRhbmdlci1zb2Z0IFtib3gtc2hhZG93OjBfMF82cHhfcmdiYSgyNDgsMTEzLDExMywwLjU1KV0iOm51bGw7cmV0dXJuIEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIiwiZGF0YS1jYW1lcmEtcGlsbC1zdGF0ZSI6JCxjaGlsZHJlbjpbSiYmSygic3BhbiIse2NsYXNzTmFtZTpKfSksUV19KX1mdW5jdGlvbiBPUSgpe3JldHVybiBLKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1jZW50ZXIgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IiwiZGF0YS1jYW1lcmEtdGVzdC1wYXR0ZXJuLWhpbnQiOiEwLGNoaWxkcmVuOiJUZXN0LXBhdHRlcm4gZmVlZCJ9KX1mdW5jdGlvbiBXUSh7bW9kZTokLGZpbGVOYW1lOlEsd2ViY2FtTmFtZTpKLHNvdXJjZUtpbmQ6Wn0pe2lmKCQ9PT0idXBsb2FkaW5nIilyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46IlVwbG9hZGluZ+KApiJ9KTtpZigkPT09ImZpbGUiKXJldHVybiBLKEoxLHtjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOlo9PT0idmlkZW8iPyJWaWRlbyI6IkltYWdlIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpRPz8iIn0pXX0pO2lmKCQ9PT0id2ViY2FtIilyZXR1cm4gSyhKMSx7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjoiV2ViY2FtIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpKPz8iIn0pXX0pO3JldHVybiBLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzg1IGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiU2VsZWN0IG9yIGRyb3AgbWVkaWEifSl9ZnVuY3Rpb24gVzYoe2tpbmQ6JCxtZXNzYWdlOlF9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiQ9PT0id2FybmluZyI/ImJnLXdhcm5pbmcvMTAgYm9yZGVyIGJvcmRlci13YXJuaW5nLzI1IHRleHQtd2FybmluZy1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIiwiZGF0YS1jYW1lcmEtYmFubmVyLWtpbmQiOiQscm9sZTokPT09ImVycm9yIj8iYWxlcnQiOiJzdGF0dXMiLGNoaWxkcmVuOlF9KX1mdW5jdGlvbiBENih7dWRpZDokLGJ1bmRsZUlkOlF9KXtsZXRbSixaXT1XKCExKSxbWCxZXT1XKCJwbGFjZWhvbGRlciIpLFtxLEddPVcoIiIpLFtOLEJdPVcobnVsbCksW1UsVl09VyghMSksaz1iKDApLFtMLE1dPVcoITEpLFtDLHpdPVcoITEpLEE9YihudWxsKSxbUCxSXT1XKFtdKSxbSSxUXT1XKCExKSxbeSxjXT1XKCIiKSxbbSxmXT1XKCJvZmYiKSxbdSx6MV09VyhudWxsKSxbUTEsbl09VyhudWxsKSxMMT11IT09bnVsbHx8UTEhPT1udWxsLFtsLGpdPVcobnVsbCksW0sxLEIxXT1XKG51bGwpLFssVjFdPVcobnVsbCksW2UsWDFdPVcoITEpLFtOMSx2XT1XKCJyZWFkeSIpLFtnLE9dPVcoKCk9Pm5ldyBTZXQpLFtTLGldPVcobnVsbCksW3IscTFdPVcobnVsbCksWjE9YighMSkseTE9YighMSksYjE9Yigib2ZmIiksdDE9YighMSksTzE9XzEoKCk9PntsZXQgXz13aW5kb3cuX19TSU1fUFJFVklFV19fPy5zZXJ2ZVNpbUJpbjtpZighXylyZXR1cm4ic2VydmUtc2ltIjtpZigvXC50cyQvLnRlc3QoXykpcmV0dXJuYGJ1biAke1UxKF8pfWA7aWYoL1wuanMkLy50ZXN0KF8pKXJldHVybmBub2RlICR7VTEoXyl9YDtyZXR1cm4gVTEoXyl9LFtdKSxyMT1FKGFzeW5jKCk9PntsZXQgXz1hd2FpdCBBMShgJHtPMX0gY2FtZXJhIHN0YXR1cyAtZCAkeyR9YCk7aWYoXy5leGl0Q29kZSE9PTApcmV0dXJuIG51bGw7dHJ5e3JldHVybiBKU09OLnBhcnNlKF8uc3Rkb3V0LnRyaW0oKSl9Y2F0Y2h7cmV0dXJuIG51bGx9fSxbTzEsJF0pLE0wPWIoYXN5bmMoKT0+e30pLFEwPWIoUSk7eCgoKT0+e1EwLmN1cnJlbnQ9UX0sW1FdKSx4KCgpPT57bGV0IF89ITE7cmV0dXJuKGFzeW5jKCk9PntsZXQgcD1hd2FpdCByMSgpO2lmKF98fCFwfHwhcC5hbGl2ZSlyZXR1cm47eTEuY3VycmVudD0hMDtsZXQgdD1wLnNvdXJjZTtpZih0PT09InBsYWNlaG9sZGVyInx8dD09PSJ3ZWJjYW0ifHx0PT09ImltYWdlInx8dD09PSJ2aWRlbyIpWSh0KTtpZigodD09PSJpbWFnZSJ8fHQ9PT0idmlkZW8iKSYmcC5hcmcpRyhwLmFyZyksQihwLmFyZy5zcGxpdCgiLyIpLnBvcCgpPz9udWxsKTtpZih0PT09IndlYmNhbSImJnAuYXJnKWMocC5hcmcpLE0wLmN1cnJlbnQoKTtsZXQgYT1wLm1pcnJvcj09PSJvbiI/Im9uIjoib2ZmIjtmKGEpLGIxLmN1cnJlbnQ9YSxpKHAuaGVscGVyUGlkPz9udWxsKSxYMSghMCk7bGV0IEcxPUFycmF5LmlzQXJyYXkocC5idW5kbGVJZHMpP3AuYnVuZGxlSWRzOltdO2lmKEcxLmxlbmd0aD4wKU8obmV3IFNldChHMSkpO2xldCBZMT1RMC5jdXJyZW50LEUxPXQmJnQhPT0icGxhY2Vob2xkZXIiO3YoWTEmJkcxLmluY2x1ZGVzKFkxKSYmRTE/ImFjdGl2ZSI6InJlYWR5IiksVjEoYFJlYXR0YWNoZWQg4oaSICR7dD8/InJ1bm5pbmcgaGVscGVyIn0ke3AuYXJnP2AgKCR7cC5hcmd9KWA6IiJ9YCl9KSgpLCgpPT57Xz0hMH19LFskLHIxXSkseCgoKT0+e2xldCBfPSExLHA9ITEsdD1udWxsLGE9YXN5bmMoKT0+e2lmKF98fHApcmV0dXJuO2lmKHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKXJldHVybjtwPSEwO3RyeXtsZXQgWTE9YXdhaXQgcjEoKTtpZihfKXJldHVybjtsZXQgRTE9ISFZMT8uYWxpdmUsUjE9QXJyYXkuaXNBcnJheShZMT8uYnVuZGxlSWRzKT9ZMS5idW5kbGVJZHM6bnVsbCxjMT0hIVEmJihSMT9SMS5pbmNsdWRlcyhRKTpnLmhhcyhRKSksWDA9WTE/LnNvdXJjZT8/bnVsbCxGPWUmJkUxJiZjMSYmISEoWDAmJlgwIT09InBsYWNlaG9sZGVyIikmJihTPT1udWxsfHxZMT8uaGVscGVyUGlkPT09Uyk7aWYodigoSCk9PkxRKEgsRikpLCFFMSlYMSgoSCk9PntpZighSClyZXR1cm4gSDtyZXR1cm4gTyhuZXcgU2V0KSxpKG51bGwpLGIxLmN1cnJlbnQ9Im9mZiIsITF9KTtlbHNlIGlmKGUmJlMhPW51bGwmJlkxPy5oZWxwZXJQaWQhPT1TKVgxKCExKSxPKG5ldyBTZXQpLGkobnVsbCksYjEuY3VycmVudD0ib2ZmIjtlbHNlIGlmKEUxJiZBcnJheS5pc0FycmF5KFkxPy5idW5kbGVJZHMpKXtsZXQgSD1ZMS5idW5kbGVJZHM7TygoRCk9PntpZihELnNpemU9PT1ILmxlbmd0aCYmSC5ldmVyeSgodyk9PkQuaGFzKHcpKSlyZXR1cm4gRDtyZXR1cm4gbmV3IFNldChIKX0pfX1maW5hbGx5e3A9ITF9fTt0PXNldEludGVydmFsKCgpPT57YSgpfSxCUSk7bGV0IEcxPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiKWEoKX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixHMSk7cmV0dXJuKCk9PntpZihfPSEwLHQpY2xlYXJJbnRlcnZhbCh0KTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEcxKX19LFtyMSxlLFMsUSxnXSk7bGV0IE0xPUUoYXN5bmMoKT0+e1QoITApLGoobnVsbCk7dHJ5e2xldCBfPWF3YWl0IEExKGAke08xfSBjYW1lcmEgLS1saXN0LXdlYmNhbXNgKTtpZihfLmV4aXRDb2RlIT09MCl7aihfLnN0ZGVyci50cmltKCl8fGAtLWxpc3Qtd2ViY2FtcyBmYWlsZWQgKCR7Xy5leGl0Q29kZX0pYCk7cmV0dXJufWxldCBwPUNRKF8uc3Rkb3V0KTtpZihSKHApLHAubGVuZ3RoPjAmJiF5KWMocFswXS5pZCl9ZmluYWxseXtUKCExKX19LFt5LE8xXSk7eCgoKT0+e00wLmN1cnJlbnQ9TTF9LFtNMV0pLHgoKCk9PntpZihDJiZQLmxlbmd0aD09PTAmJiFJKU0xKCl9LFtDLFAubGVuZ3RoLEksTTFdKTtsZXQgUzE9RSgoXyk9PntqKEFRKHtyYXdNZXNzYWdlOl8sbGFzdEZpbGVJc0hlaWM6WjEuY3VycmVudCxzb3VyY2U6WH0pKX0sW1hdKSxPMD1FKGFzeW5jKF8scCx0KT0+e2xldCBhPV89PT0iaW1hZ2UifHxfPT09InZpZGVvIixHMT1bImNhbWVyYSIsInN3aXRjaCIsYT8iZmlsZSI6X107aWYoXz09PSJ3ZWJjYW0iJiZwKUcxLnB1c2goVTEocCkpO2lmKGEpe2lmKCF0LnRyaW0oKSlyZXR1cm4gaigiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKSwhMTtHMS5wdXNoKFUxKHQudHJpbSgpKSl9RzEucHVzaCgiLWQiLCQsIi0tcXVpZXQiKTtsZXQgWTE9YXdhaXQgQTEoYCR7TzF9ICR7RzEuam9pbigiICIpfWApO2lmKFkxLmV4aXRDb2RlIT09MClyZXR1cm4gUzEoWTEuc3RkZXJyLnRyaW0oKXx8WTEuc3Rkb3V0LnRyaW0oKXx8YHN3aXRjaCBmYWlsZWQgKCR7WTEuZXhpdENvZGV9KWApLCExO1oxLmN1cnJlbnQ9ITE7dHJ5e2xldCBFMT1KU09OLnBhcnNlKFkxLnN0ZG91dC50cmltKCkpO1YxKGBTd2l0Y2hlZCDihpIgJHtFMS5zb3VyY2U/P199JHtFMS5hcmc/YCAoJHtFMS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7VjEoYFN3aXRjaGVkIOKGkiAke199YCl9cmV0dXJuITB9LFskLE8xLFMxXSksSjA9RShhc3luYygpPT57aWYoIVEpcmV0dXJuO3oxKCJpbmplY3QiKSxqKG51bGwpLFYxKG51bGwpO3RyeXtsZXQgXz1bImNhbWVyYSIsVTEoUSksIi1kIiwkLCItLXF1aWV0Il07aWYoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKXtpZighcS50cmltKCkpe2ooIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufV8ucHVzaCgiLS1maWxlIixVMShxLnRyaW0oKSkpfWVsc2UgaWYoWD09PSJ3ZWJjYW0iKWlmKHkpXy5wdXNoKCItLXdlYmNhbSIsVTEoeSkpO2Vsc2UgXy5wdXNoKCItLXdlYmNhbSIpO18ucHVzaCgiLS1taXJyb3IiLG0pO2xldCBwPWF3YWl0IEExKGAke08xfSAke18uam9pbigiICIpfWApO2lmKHAuZXhpdENvZGUhPT0wKXtTMShwLnN0ZGVyci50cmltKCl8fHAuc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7cC5leGl0Q29kZX0pYCk7cmV0dXJufVoxLmN1cnJlbnQ9ITE7bGV0IHQ9bnVsbDt0cnl7bGV0IGE9SlNPTi5wYXJzZShwLnN0ZG91dC50cmltKCkpO3Q9YS5oZWxwZXJQaWQ/P251bGw7bGV0IEcxPWEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixZMT1hLnBpZD9gIHBpZCAke2EucGlkfWA6IiIsRTE9YS5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke2EuaGVscGVyUGlkfWA6IiI7VjEoYCR7RzF9ICR7YS5zb3VyY2U/P1h9IGludG8gJHtRfSR7WTF9JHtFMX1gKX1jYXRjaHtWMShwLnN0ZG91dC50cmltKCl8fCJJbmplY3RlZC4iKX1YMSghMCksdihYPT09InBsYWNlaG9sZGVyIj8icmVhZHkiOiJhY3RpdmUiKSxpKHQpLE8oKGEpPT5hLmhhcyhRKT9hOm5ldyBTZXQoYSkuYWRkKFEpKSxiMS5jdXJyZW50PW19ZmluYWxseXt6MShudWxsKX19LFtRLCQsWCxxLHksbSxPMSxTMV0pLEYxPWU/YCR7WH06OiR7WD09PSJ3ZWJjYW0iP3k6IiJ9Ojoke1g9PT0iaW1hZ2UifHxYPT09InZpZGVvIj9xOiIifWA6bnVsbCxsMT0hIVEmJmcuaGFzKFEpLFcwPWwxJiZYIT09InBsYWNlaG9sZGVyIjt4KCgpPT57aWYoIVcwKXt0MS5jdXJyZW50PSExO3JldHVybn1pZih0MS5jdXJyZW50KXJldHVybjt0MS5jdXJyZW50PSEwLFooITApfSxbVzBdKSx4KCgpPT57aWYoIXIpcmV0dXJuO2lmKCFRfHxMMXx8TClyZXR1cm47aWYoWCE9PSJ3ZWJjYW0ifHx5IT09cilyZXR1cm47aWYocTEobnVsbCksZSlyZXR1cm47SjAoKX0sW3IsUSxMMSxMLFgseSxlLEowXSkseCgoKT0+e2lmKCFlKXJldHVybjtpZigoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmIXEudHJpbSgpKXJldHVybjtpZihYPT09IndlYmNhbSImJiF5KXJldHVybjtpZih5MS5jdXJyZW50KXt5MS5jdXJyZW50PSExO3JldHVybn1sZXQgXz0hMTtyZXR1cm4oYXN5bmMoKT0+e24oInN3aXRjaCIpLGoobnVsbCk7dHJ5e2lmKF8pcmV0dXJuO2F3YWl0IE8wKFgseSxxKX1maW5hbGx5e2lmKCFfKW4obnVsbCl9fSkoKSwoKT0+e189ITB9fSxbRjFdKSx4KCgpPT57aWYoIWUpcmV0dXJuO2lmKGIxLmN1cnJlbnQ9PT1tKXJldHVybjtsZXQgXz1tLHA9ITE7cmV0dXJuKGFzeW5jKCk9PntuKCJtaXJyb3IiKSxqKG51bGwpO3RyeXtsZXQgdD1hd2FpdCBBMShgJHtPMX0gY2FtZXJhIG1pcnJvciAke199IC1kICR7JH0gLS1xdWlldGApO2lmKHApcmV0dXJuO2lmKHQuZXhpdENvZGUhPT0wKXtqKHQuc3RkZXJyLnRyaW0oKXx8dC5zdGRvdXQudHJpbSgpfHxgbWlycm9yIGZhaWxlZCAoJHt0LmV4aXRDb2RlfSlgKTtyZXR1cm59YjEuY3VycmVudD1fLFYxKGBNaXJyb3Ig4oaSICR7X31gKX1maW5hbGx5e2lmKCFwKW4obnVsbCl9fSkoKSwoKT0+e3A9ITB9fSxbbSxlXSk7bGV0IEQxPUUoYXN5bmMoKT0+e3oxKCJzdG9wIiksaihudWxsKTt0cnl7bGV0IF89YXdhaXQgQTEoYCR7TzF9IGNhbWVyYSAtLXN0b3Atd2ViY2FtIC1kICR7JH1gKTtpZihfLmV4aXRDb2RlIT09MCl7aihfLnN0ZGVyci50cmltKCl8fGBzdG9wLXdlYmNhbSBmYWlsZWQgKCR7Xy5leGl0Q29kZX0pYCk7cmV0dXJufVYxKCJDYW1lcmEgaGVscGVyIHN0b3BwZWQuIiksWDEoITEpLHYoInJlYWR5IiksTyhuZXcgU2V0KSxiMS5jdXJyZW50PSJvZmYifWZpbmFsbHl7ejEobnVsbCl9fSxbJCxPMV0pLHAxPUUoYXN5bmMoXyk9PntsZXQgcD1rUSh7dHlwZTpfLnR5cGUsbmFtZTpfLm5hbWV9KSx0PV8udHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKXx8cCxhPV8udHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKXx8UDYoe3R5cGU6Xy50eXBlLG5hbWU6Xy5uYW1lfSk7aWYoIXQmJiFhKXtaMS5jdXJyZW50PSExLGooYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtfLnR5cGV8fF8ubmFtZX1gKTtyZXR1cm59aWYoTSghMCksaihudWxsKSxCMShudWxsKSxGUSh7dHlwZTpfLnR5cGUsbmFtZTpfLm5hbWUsc2l6ZTpfLnNpemV9KSlCMShVUSk7WjEuY3VycmVudD1wO3RyeXtsZXQgRzE9WjIoXyksWTE9YXdhaXQgTTYoXywic2VydmUtc2ltLWNhbXNyYyIsRzEsQTEpO0IoXy5uYW1lKSxZKGE/InZpZGVvIjoiaW1hZ2UiKSxHKFkxKSxWMShgTG9hZGVkICR7Xy5uYW1lfWApfWNhdGNoKEcxKXtpZihaMS5jdXJyZW50KWooXzYpO2Vsc2UgaihHMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e00oITEpfX0sW10pLE4wPUUoYXN5bmMoXyk9PntfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxrLmN1cnJlbnQ9MCxWKCExKTtsZXQgcD1fLmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZihwKWF3YWl0IHAxKHApfSxbcDFdKSx4MT1FKCgpPT57WSgicGxhY2Vob2xkZXIiKSxHKCIiKSxCKG51bGwpLGoobnVsbCksQjEobnVsbCksWjEuY3VycmVudD0hMX0sW10pLFQxPUUoKCk9PntBLmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxuMT1FKGFzeW5jKF8pPT57bGV0IHA9Xy50YXJnZXQsdD1wLmZpbGVzPy5bMF07aWYocC52YWx1ZT0iIix0KWF3YWl0IHAxKHQpfSxbcDFdKTt4KCgpPT57aWYoIUMpcmV0dXJuO2xldCBfPShwKT0+e2xldCB0PXAudGFyZ2V0O2lmKHQgaW5zdGFuY2VvZiBFbGVtZW50JiZ0LmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47eighMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyl9LFtDXSk7bGV0IEswPUUoKF8pPT57aWYoYyhfLmlkKSxZKCJ3ZWJjYW0iKSxCKG51bGwpLGoobnVsbCksWjEuY3VycmVudD0hMSx6KCExKSxRKXExKF8uaWQpfSxbUV0pLG8xPUUoKCk9PntmKChfKT0+Xz09PSJvbiI/Im9mZiI6Im9uIil9LFtdKSxVMD0hZXx8WD09PSJwbGFjZWhvbGRlciIsRDA9RSgoXyk9PntpZihfLnByZXZlbnREZWZhdWx0KCksay5jdXJyZW50Kyssay5jdXJyZW50PT09MSlWKCEwKX0sW10pLF8wPUUoKF8pPT57aWYoXy5wcmV2ZW50RGVmYXVsdCgpLF8uZGF0YVRyYW5zZmVyKV8uZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksZDE9RSgoXyk9PntpZihfLnByZXZlbnREZWZhdWx0KCksay5jdXJyZW50LS0say5jdXJyZW50PD0wKWsuY3VycmVudD0wLFYoITEpfSxbXSksdzE9elEoe2J1bmRsZUlkOlEsaW5qZWN0ZWQ6ZSxzb3VyY2U6WCxmb3JlZ3JvdW5kSXNJbmplY3RlZDpsMX0pLGoxPXcxPT09InN0b3AiP3tsYWJlbDp1PT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6RDEsa2luZDoic3RvcCJ9OncxPT09ImF0dGFjaCI/e2xhYmVsOnU9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7UX1gLG9uQ2xpY2s6SjAsa2luZDoiYXR0YWNoIn06e2xhYmVsOnU9PT0iaW5qZWN0Ij8iU3RhcnRpbmfigKYiOiJQbGF5IixvbkNsaWNrOkowLGtpbmQ6InBsYXkifSxnMT13MT09PSJzdG9wIj9MfHx1IT09bnVsbDohUXx8THx8dSE9PW51bGwsaTE9WD09PSJwbGFjZWhvbGRlciIsWjA9WD09PSJ3ZWJjYW0iLEwwPShYPT09ImltYWdlInx8WD09PSJ2aWRlbyIpJiYhIU4sZTE9WjA/UC5maW5kKChfKT0+Xy5pZD09PXkpPy5uYW1lPz95Pz8iV2ViY2FtIjpudWxsLCQxPUw/InVwbG9hZGluZyI6TDA/ImZpbGUiOlowPyJ3ZWJjYW0iOiJwbGFjZWhvbGRlciI7cmV0dXJuIEsoVjAse29wZW46Sixvbk9wZW5DaGFuZ2U6Wixib2R5Q2xhc3NOYW1lOiJwdC0yLjUiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoSjEse2NoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJDYW1lcmEifSksSyhNUSx7c3RhdGU6TjF9KV19KSxjaGlsZHJlbjpLKCJkaXYiLHtvbkRyYWdFbnRlcjpEMCxvbkRyYWdPdmVyOl8wLG9uRHJhZ0xlYXZlOmQxLG9uRHJvcDpOMCxjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTIuNSIsY2hpbGRyZW46W0soInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOiJSZXBsYWNlcyB0aGUgc2ltdWxhdG9yJ3MgY2FtZXJhIGZlZWQgYnkgaW5qZWN0aW5nIGEgZHlsaWIgYXQgYXBwIGxhdW5jaCBhbmQgc3RyZWFtaW5nIGZyYW1lcyBpbnRvIHNoYXJlZCBtZW1vcnkuIFBpY2sgbWVkaWEgb3IgYSB3ZWJjYW0sIHRoZW4gUGxheSB0byBpbmplY3QgaW50byB0aGUgZm9yZWdyb3VuZCBhcHAuIn0pLEsoImlucHV0Iix7cmVmOkEsdHlwZToiZmlsZSIsYWNjZXB0OiJpbWFnZS8qLHZpZGVvLyoiLGNsYXNzTmFtZToiaGlkZGVuIixvbkNoYW5nZTpuMX0pLEsoImRpdiIse29uQ2xpY2s6KF8pPT57aWYoIWkxKXJldHVybjtpZihfLnRhcmdldC5jbG9zZXN0KCJbZGF0YS1jbGVhci1tZWRpYV0iKSlyZXR1cm47VDEoKX0sdGl0bGU6aTE/Ik5vIHNvdXJjZSBzZWxlY3RlZCDigJQgUGxheSB1c2VzIGEgdGVzdC1wYXR0ZXJuIGZlZWQuIENsaWNrIHRvIHBpY2sgYW4gaW1hZ2UvdmlkZW8sIG9yIGRyb3Agb25lIGhlcmUuIjpaMD9gU291cmNlOiAke2UxfWA6YFNvdXJjZTogJHtOPz9YfWAsY2xhc3NOYW1lOlsicmVsYXRpdmUgbWluLWgtWzQ0cHhdIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yLjUgcHgtMy41IHB5LTIuNSByb3VuZGVkLVs3cHhdIHRleHQtY2VudGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixiYWNrZ3JvdW5kXSBkdXJhdGlvbi0xNTAiLGkxPyJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEyIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCIsVT8iIWJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4wOCldICFib3JkZXItW3JnYmEoMTAsMTMyLDI1NSwwLjYpXSI6IiIsTD8iY3Vyc29yLXByb2dyZXNzIjppMT8iY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3ItZGVmYXVsdCJdLmpvaW4oIiAiKSxjaGlsZHJlbjpbSyhXUSx7bW9kZTokMSxmaWxlTmFtZTpOLHdlYmNhbU5hbWU6ZTEsc291cmNlS2luZDpYfSksIWkxJiYhTCYmSygiYnV0dG9uIix7ImRhdGEtY2xlYXItbWVkaWEiOiEwLG9uQ2xpY2s6KF8pPT57Xy5zdG9wUHJvcGFnYXRpb24oKSx4MSgpfSxjbGFzc05hbWU6InNocmluay0wIHctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtbGFiZWwiOiJDbGVhciBzb3VyY2UiLHRpdGxlOiJDbGVhciDihpIgcGxhY2Vob2xkZXIiLGNoaWxkcmVuOksoJDAse3NpemU6MTQsc3Ryb2tlV2lkdGg6Mn0pfSldfSksaTEmJiFMJiZLKE9RLHt9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsImRhdGEtY2FtZXJhLXNvdXJjZS1tZW51IjohMCxjaGlsZHJlbjpbSygiYnV0dG9uIix7b25DbGljazooKT0+eigoXyk9PiFfKSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvODUgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBwLTAgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIGhvdmVyOmJvcmRlci13aGl0ZS8yMCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1oYXNwb3B1cCI6Im1lbnUiLCJhcmlhLWV4cGFuZGVkIjpDLHRpdGxlOlg9PT0id2ViY2FtIj9gU291cmNlOiB3ZWJjYW0ke3k/YCAoJHtQLmZpbmQoKF8pPT5fLmlkPT09eSk/Lm5hbWU/P3l9KWA6IiJ9IOKAlCBjbGljayB0byBjaGFuZ2VgOmBTb3VyY2U6ICR7WH0g4oCUIGNsaWNrIHRvIHBpY2sgbWVkaWEgb3Igd2ViY2FtYCwiYXJpYS1sYWJlbCI6IkNob29zZSBjYW1lcmEgc291cmNlIixjaGlsZHJlbjpLKE0yLHtzaXplOjIwLHN0cm9rZVdpZHRoOjJ9KX0pLEMmJksoImRpdiIse3JvbGU6Im1lbnUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIHotMTAgbWluLXctWzIwMHB4XSBmbGV4IGZsZXgtY29sIGdhcC1weCBwLTEgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40KV0iLGNoaWxkcmVuOltLKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOiJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLG9uQ2xpY2s6KCk9Pnt6KCExKSxUMSgpfSx0aXRsZToiUGljayBhbiBpbWFnZSBvciB2aWRlbyBmcm9tIGRpc2siLGNoaWxkcmVuOiJCcm93c2UgbWVkaWHigKYifSksSygiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwbC0yLjUgcHItMiBwdC0xIHBiLVsycHhdIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOkk/IkNhbWVyYXMgKGxvYWRpbmfigKYpIjpQLmxlbmd0aD09PTA/Ik5vIGNhbWVyYXMiOiJDYW1lcmFzIn0pLEsoImJ1dHRvbiIse29uQ2xpY2s6KF8pPT57Xy5zdG9wUHJvcGFnYXRpb24oKSxNMSgpfSxkaXNhYmxlZDpJLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1bMjJweF0gaC1bMjJweF0gYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiUmVmcmVzaCBjYW1lcmFzIix0aXRsZToiUmVmcmVzaCBjYW1lcmFzIixjaGlsZHJlbjpLKHYwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjJ9KX0pXX0pLFAubWFwKChfKT0+e2xldCBwPVg9PT0id2ViY2FtIiYmeT09PV8uaWQ7cmV0dXJuIEsoImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6WyJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixwPyIhYmctd2hpdGUvWzAuMTJdICF0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS84NSJdLmpvaW4oIiAiKSxvbkNsaWNrOigpPT5LMChfKSx0aXRsZTpfLm5hbWUsY2hpbGRyZW46Xy5uYW1lfSxfLmlkKX0pXX0pXX0pLEsoImJ1dHRvbiIse29uQ2xpY2s6ajEub25DbGljayxkaXNhYmxlZDpnMSxjbGFzc05hbWU6WyJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6b3BhY2l0eS01MCBtaW4taC1bMzZweF0iLGoxLmtpbmQ9PT0ic3RvcCI/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0iXS5qb2luKCIgIiksdGl0bGU6ajEua2luZD09PSJzdG9wIj8iU3RvcCB0aGUgY2FtZXJhIGhlbHBlciBhbmQgdGVybWluYXRlIGluamVjdGVkIGFwcHMiOmoxLmtpbmQ9PT0iYXR0YWNoIj9gSW5qZWN0ICR7UX0gc28gaXQgam9pbnMgdGhlIGNhbWVyYSBmZWVkYDohUT8iQnJpbmcgYW4gYXBwIHRvIHRoZSBmb3JlZ3JvdW5kIGZpcnN0IjoiU3RhcnQ6IGluamVjdCB0aGUgZHlsaWIgYW5kIGxhdW5jaCB0aGUgZm9yZWdyb3VuZCBhcHAgd2l0aCB0aGUgY2hvc2VuIHNvdXJjZSIsImFyaWEtcHJlc3NlZCI6ajEua2luZD09PSJzdG9wIiwiYXJpYS1sYWJlbCI6ajEua2luZD09PSJzdG9wIj8iU3RvcCI6IlBsYXkiLGNoaWxkcmVuOltqMS5raW5kPT09InN0b3AiP0sodzIse30pOksoVDIse30pLEsoInNwYW4iLHtjaGlsZHJlbjpqMS5raW5kPT09InN0b3AiPyJTdG9wIjpqMS5raW5kPT09ImF0dGFjaCI/IkluamVjdCI6IlBsYXkifSldfSksSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOm8xLGRpc2FibGVkOlUwLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xMCBtaW4taC1bMzZweF0gYm9yZGVyIHJvdW5kZWQtWzdweF0gZm9udC1baW5oZXJpdF0gZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgYWN0aXZlOnNjYWxlLVswLjk3XSAke209PT0ib24iPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjA5XSBlbmFibGVkOmhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgTWlycm9yOiAke219IOKAlCB0YXAgdG8gdG9nZ2xlYCx0aXRsZTpVMD8iTWlycm9yIHRvZ2dsZSBhdmFpbGFibGUgb25jZSBhIHNvdXJjZSBpcyBzdHJlYW1pbmciOmBNaXJyb3I6ICR7bX0g4oCUIGNsaWNrIHRvIHRvZ2dsZWAsImFyaWEtcHJlc3NlZCI6bT09PSJvbiIsY2hpbGRyZW46SyhrMix7c2l6ZToyMCxzdHJva2VXaWR0aDoyLGZpbGw6bT09PSJvbiI/ImN1cnJlbnRDb2xvciI6Im5vbmUifSl9KV19KSxLMSYmSyhXNix7a2luZDoid2FybmluZyIsbWVzc2FnZTpLMX0pLGwmJksoVzYse2tpbmQ6ImVycm9yIixtZXNzYWdlOmx9KV19KX0pfXZhciB4Mj1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLF9RPTI1MCxQUT17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sdzM9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LERRPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiBmMCh7aWNvbjokLGxhYmVsOlEsY2hpbGRyZW46Sn0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpRLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaXplLVsxOHB4XSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSIsY2hpbGRyZW46JH0pLFFdfSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGp1c3RpZnktZW5kIixjaGlsZHJlbjpKfSldfSl9ZnVuY3Rpb24gVFEoe3ZhbHVlOiQsZGlzYWJsZWQ6USxvbkNoYW5nZTpKfSl7bGV0W1osWF09VyhudWxsKSxZPWIobnVsbCkscT1iKG51bGwpLEc9RSgoeik9PntpZihxLmN1cnJlbnQ9PT16KXJldHVybjtxLmN1cnJlbnQ9eixKKHopfSxbSl0pLE49RSgoeik9PntpZihYKHopLFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KTtZLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+Ryh6KSxfUSl9LFtHXSksQj1FKCgpPT57aWYoWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpLFkuY3VycmVudD1udWxsO1goKHopPT57aWYoeiE9PW51bGwpRyh6KTtyZXR1cm4gbnVsbH0pLHEuY3VycmVudD1udWxsfSxbR10pLFU9eDIubGVuZ3RoLTEsVj1aPz8kLGs9YCR7Vi9VKjEwMH0lYDtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToiZmxleCB3LVsxMjBweF0gbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W0soImlucHV0Iix7dHlwZToicmFuZ2UiLCJhcmlhLWxhYmVsIjoiVGV4dCBTaXplIixtaW46MCxtYXg6VSxzdGVwOjEsdmFsdWU6VixkaXNhYmxlZDpRLG9uQ2hhbmdlOih6KT0+TihOdW1iZXIoei50YXJnZXQudmFsdWUpKSxvblBvaW50ZXJVcDpCLG9uS2V5VXA6QixvbkJsdXI6QixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOmssIi0tc2xpZGVyLWZpbGwtY29sb3IiOlE/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6IiMwYTg0ZmYifSxjbGFzc05hbWU6YGgtWzEzcHhdIHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgcm91bmRlZC1mdWxsIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOltvdXRsaW5lOjEuNXB4X3NvbGlkX3JnYmEoMTAsMTMyLDI1NSwwLjU1KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7UT8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLHJnYmEoMjU1LDI1NSwyNTUsMC4yMilfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106Ymctd2hpdGUvMjAgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106YmctW3ZhcigtLXNsaWRlci1maWxsLWNvbG9yKV0ifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAifWB9KSxLKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgbXQtWzNweF0gZmxleCBqdXN0aWZ5LWJldHdlZW4gcHgtWzUuNXB4XSIsY2hpbGRyZW46eDIubWFwKCh6KT0+Sygic3BhbiIse2NsYXNzTmFtZToic2l6ZS1bMnB4XSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvNDAifSx6KSl9KV19KX1mdW5jdGlvbiB2Mih7bGFiZWw6JCx2YWx1ZTpRLG9wdGlvbnM6SixkaXNhYmxlZDpaLG9uQ2hhbmdlOlh9KXtyZXR1cm4gSyhPNSx7bGFiZWw6JCx2YWx1ZTpRLG9wdGlvbnM6SixkaXNhYmxlZDpaLG9uQ2hhbmdlOlgsY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtd2hpdGUvNDAifSl9dmFyIFMyPXthcHBlYXJhbmNlOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KSxLKCJwYXRoIix7ZDoiTTE0LjgzNyAxNi4zODVhNiA2IDAgMSAxLTcuMjIzLTcuMjIyYy42MjQtLjE0Ny45Ny42Ni43MTUgMS4yNDhhNCA0IDAgMCAwIDUuMjYgNS4yNTljLjU4OS0uMjU1IDEuMzk2LjA5IDEuMjQ4LjcxNSJ9KSxLKCJwYXRoIix7ZDoiTTE2IDEyYTQgNCAwIDAgMC00LTQifSksSygicGF0aCIse2Q6Im0xOSA1LTEuMjU2IDEuMjU2In0pLEsoInBhdGgiLHtkOiJNMjAgMTJoMiJ9KV19KSxnbGFzczpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyMjAgMjIwIixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNMTUyIDE4M1YxOTVIMTAwVjE4M0gxNTJaTTE5NiAxMzlWMTI2QzE5NiAxMDEuNjk5IDE3Ni4zMDEgODIgMTUyIDgySDEwMEM3NS42OTk1IDgyIDU2IDEwMS42OTkgNTYgMTI2VjEzOUM1NiAxNjMuMzAxIDc1LjY5OTUgMTgzIDEwMCAxODNWMTk1TDk5LjI3NjQgMTk0Ljk5NUM2OC45MjI4IDE5NC42MTEgNDQuMzg5MyAxNzAuMDc3IDQ0LjAwNDkgMTM5LjcyNEw0NCAxMzlWMTI2QzQ0IDk1LjA3MjEgNjkuMDcyMSA3MCAxMDAgNzBIMTUyQzE4Mi45MjggNzAgMjA4IDk1LjA3MjEgMjA4IDEyNlYxMzlMMjA3Ljk5NSAxMzkuNzI0QzIwNy42MTEgMTcwLjA3NyAxODMuMDc3IDE5NC42MTEgMTUyLjcyNCAxOTQuOTk1TDE1MiAxOTVWMTgzQzE3Ni4zMDEgMTgzIDE5NiAxNjMuMzAxIDE5NiAxMzlaIn0pLEsoInBhdGgiLHtkOiJNMTM2IDI1QzE0Ny4wNDYgMjUgMTU2IDMzLjk1NDMgMTU2IDQ1VjcwSDE0M1Y0NUMxNDMgNDEuMTM0IDEzOS44NjYgMzggMTM2IDM4SDQxQzM3LjEzNCAzOCAzNCA0MS4xMzQgMzQgNDVWMTQwQzM0IDE0My44NjYgMzcuMTM0IDE0NyA0MSAxNDdINDQuODYwNEM0NS42NDg3IDE1MS41MzYgNDYuOTYzNCAxNTUuODkxIDQ4Ljc0MDIgMTYwSDQxTDQwLjQ4MzQgMTU5Ljk5M0MyOS44NDgxIDE1OS43MjQgMjEuMjc2NSAxNTEuMTUyIDIxLjAwNjggMTQwLjUxN0wyMSAxNDBWNDVDMjEgMzMuOTU0MyAyOS45NTQzIDI1IDQxIDI1SDEzNloifSksSygicGF0aCIse2Q6Ik0xNTYuMTk5IDE0MEMxNTYuMTk5IDE1MC44NzMgMTQ3LjUyMyAxNTkuNzE5IDEzNi43MTYgMTU5Ljk5M0wxMzYuMTk5IDE2MEg4MC45MTdDNzcuOTQ2MSAxNjAgNzYuMTYzOSAxNjMuMyA3Ny43OTMgMTY1Ljc4NEM3OS4yNDUxIDE2Ny45OTkgNzYuMTY0NyAxNzAuMzUzIDc0LjQwOTQgMTY4LjM3TDczLjYwNTkgMTY3LjQ2MkM2OS4zNDk3IDE2Mi42NTQgNjcgMTU2LjQ1NSA2NyAxNTAuMDM0QzY3IDE0OC4zNTggNjguMzU4MyAxNDcgNzAuMDMzOSAxNDdIMTM2LjE5OUMxNDAuMDY1IDE0NyAxNDMuMTk5IDE0My44NjYgMTQzLjE5OSAxNDBWOTYuOTk1NUMxNDMuMTk5IDkzLjk4MjIgMTQxLjM1NCA5MS4yNzYzIDEzOC41NDkgOTAuMTc2MUMxMzcuMzg5IDg5LjcyMTUgMTM3LjcxNSA4OCAxMzguOTYgODhMMTQzLjE5OSA4OEMxNTAuMzc5IDg4IDE1Ni4xOTkgOTMuODIwMyAxNTYuMTk5IDEwMVYxNDBaIn0pXX0pLGZpbHRlcjpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSygicGF0aCIse2Q6Ik0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIn0pLEsoInBhdGgiLHtkOiJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3In0pLEsoInBhdGgiLHtkOiJNIDcgMTdoLjAxIn0pLEsoInBhdGgiLHtkOiJtMTEgOCAyLjMtMi4zYTIuNCAyLjQgMCAwIDEgMy40MDQuMDA0TDE4LjYgNy42YTIuNCAyLjQgMCAwIDEgLjAyNiAzLjQzNEw5LjkgMTkuOCJ9KV19KSx0ZXh0U2l6ZTpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA1MiAzNCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMzkuNzI2NiAzMy4wMjM0QzM4LjE0ODQgMzMuMDIzNCAzNi43NSAzMi43MjY2IDM1LjUzMTIgMzIuMTMyOEMzNC4zMTI1IDMxLjUzOTEgMzMuMzU5NCAzMC43MTA5IDMyLjY3MTkgMjkuNjQ4NEMzMiAyOC41NzAzIDMxLjY2NDEgMjcuMzEyNSAzMS42NjQxIDI1Ljg3NUMzMS42NjQxIDIzLjc4MTIgMzIuNDI5NyAyMi4xMDk0IDMzLjk2MDkgMjAuODU5NEMzNS41MDc4IDE5LjYwOTQgMzcuNzEwOSAxOC45MDYyIDQwLjU3MDMgMTguNzVMNDcuNjAxNiAxOC4zNTE2VjE2LjVDNDcuNjAxNiAxNS4wMTU2IDQ3LjEzMjggMTMuODM1OSA0Ni4xOTUzIDEyLjk2MDlDNDUuMjU3OCAxMi4wODU5IDQzLjk1MzEgMTEuNjQ4NCA0Mi4yODEyIDExLjY0ODRDNDAuOTA2MiAxMS42NDg0IDM5Ljc1IDExLjk0NTMgMzguODEyNSAxMi41MzkxQzM3Ljg3NSAxMy4xMzI4IDM3LjA5MzggMTQuMDQ2OSAzNi40Njg4IDE1LjI4MTJDMzYuMjY1NiAxNS42MDk0IDM2LjAxNTYgMTUuODUxNiAzNS43MTg4IDE2LjAwNzhDMzUuNDIxOSAxNi4xNjQxIDM1LjA3ODEgMTYuMjQyMiAzNC42ODc1IDE2LjI0MjJDMzQuMTU2MiAxNi4yNDIyIDMzLjcxMDkgMTYuMDc4MSAzMy4zNTE2IDE1Ljc1QzMzLjAwNzggMTUuNDIxOSAzMi44MzU5IDE0Ljk5MjIgMzIuODM1OSAxNC40NjA5QzMyLjgzNTkgMTQuMjI2NiAzMi44NjcyIDEzLjk3NjYgMzIuOTI5NyAxMy43MTA5QzMzLjAwNzggMTMuNDQ1MyAzMy4xMDk0IDEzLjE3OTcgMzMuMjM0NCAxMi45MTQxQzMzLjg3NSAxMS40NjA5IDM1LjAxNTYgMTAuMzA0NyAzNi42NTYyIDkuNDQ1MzFDMzguMzEyNSA4LjU4NTk0IDQwLjIyNjYgOC4xNTYyNSA0Mi4zOTg0IDguMTU2MjVDNDQuMzIwMyA4LjE1NjI1IDQ1Ljk4NDQgOC40OTIxOSA0Ny4zOTA2IDkuMTY0MDZDNDguODEyNSA5LjgyMDMxIDQ5Ljg5ODQgMTAuNzUgNTAuNjQ4NCAxMS45NTMxQzUxLjQxNDEgMTMuMTU2MiA1MS43OTY5IDE0LjU3MDMgNTEuNzk2OSAxNi4xOTUzVjMwLjkxNDFDNTEuNzk2OSAzMS41ODU5IDUxLjYwOTQgMzIuMTA5NCA1MS4yMzQ0IDMyLjQ4NDRDNTAuODU5NCAzMi44NTk0IDUwLjM2NzIgMzMuMDQ2OSA0OS43NTc4IDMzLjA0NjlDNDkuMTY0MSAzMy4wNDY5IDQ4LjY3OTcgMzIuODY3MiA0OC4zMDQ3IDMyLjUwNzhDNDcuOTI5NyAzMi4xNDg0IDQ3LjczNDQgMzEuNjY0MSA0Ny43MTg4IDMxLjA1NDdWMjguMzU5NEg0Ny42NzE5QzQ2Ljk4NDQgMjkuNzgxMiA0NS45MDYyIDMwLjkxNDEgNDQuNDM3NSAzMS43NTc4QzQyLjk4NDQgMzIuNjAxNiA0MS40MTQxIDMzLjAyMzQgMzkuNzI2NiAzMy4wMjM0Wk00MC44MDQ3IDI5LjY3MTlDNDIuMDcwMyAyOS42NzE5IDQzLjIxMDkgMjkuNDA2MiA0NC4yMjY2IDI4Ljg3NUM0NS4yNTc4IDI4LjM0MzggNDYuMDc4MSAyNy42MTcyIDQ2LjY4NzUgMjYuNjk1M0M0Ny4yOTY5IDI1Ljc3MzQgNDcuNjAxNiAyNC43NSA0Ny42MDE2IDIzLjYyNVYyMS4zMjgxTDQxLjEzMjggMjEuNzVDMzkuNDQ1MyAyMS44NTk0IDM4LjE2NDEgMjIuMjczNCAzNy4yODkxIDIyLjk5MjJDMzYuNDE0MSAyMy42OTUzIDM1Ljk3NjYgMjQuNjA5NCAzNS45NzY2IDI1LjczNDRDMzUuOTc2NiAyNi45MjE5IDM2LjQyMTkgMjcuODc1IDM3LjMxMjUgMjguNTkzOEMzOC4yMDMxIDI5LjMxMjUgMzkuMzY3MiAyOS42NzE5IDQwLjgwNDcgMjkuNjcxOVpNMi4xNzk2OSAzMy4wMjM0QzEuNTA3ODEgMzMuMDIzNCAwLjk3NjU2MiAzMi44MzU5IDAuNTg1OTM4IDMyLjQ2MDlDMC4xOTUzMTIgMzIuMDg1OSAwIDMxLjU3ODEgMCAzMC45Mzc1QzAgMzAuNTMxMiAwLjA4NTkzNzUgMzAuMDcwMyAwLjI1NzgxMiAyOS41NTQ3TDEwLjQwNjIgMi40MTQwNkMxMC45ODQ0IDAuODA0Njg4IDEyLjEwMTYgMCAxMy43NTc4IDBDMTQuNjE3MiAwIDE1LjMyODEgMC4yMDMxMjUgMTUuODkwNiAwLjYwOTM3NUMxNi40NTMxIDEuMDE1NjIgMTYuODc1IDEuNjI1IDE3LjE1NjIgMi40Mzc1TDI3LjI1NzggMjkuNDg0NEMyNy40NDUzIDMwIDI3LjUzOTEgMzAuNDY4OCAyNy41MzkxIDMwLjg5MDZDMjcuNTM5MSAzMS41NDY5IDI3LjMzNTkgMzIuMDcwMyAyNi45Mjk3IDMyLjQ2MDlDMjYuNTIzNCAzMi44MzU5IDI1Ljk3NjYgMzMuMDIzNCAyNS4yODkxIDMzLjAyMzRDMjQuNjMyOCAzMy4wMjM0IDI0LjEwOTQgMzIuODc1IDIzLjcxODggMzIuNTc4MUMyMy4zNDM4IDMyLjI4MTIgMjMuMDM5MSAzMS43ODkxIDIyLjgwNDcgMzEuMTAxNkwxMy44MjgxIDUuMzQzNzVIMTMuNjY0MUw0LjY2NDA2IDMxLjEwMTZDNC40Mjk2OSAzMS43ODkxIDQuMTI1IDMyLjI4MTIgMy43NSAzMi41NzgxQzMuMzc1IDMyLjg3NSAyLjg1MTU2IDMzLjAyMzQgMi4xNzk2OSAzMy4wMjM0Wk02LjY3OTY5IDIzLjc0MjJDNi4xNDg0NCAyMy43NDIyIDUuNzAzMTIgMjMuNTYyNSA1LjM0Mzc1IDIzLjIwMzFDNC45ODQzOCAyMi44NDM4IDQuODA0NjkgMjIuMzk4NCA0LjgwNDY5IDIxLjg2NzJDNC44MDQ2OSAyMS4zNTE2IDQuOTg0MzggMjAuOTE0MSA1LjM0Mzc1IDIwLjU1NDdDNS43MDMxMiAyMC4xOTUzIDYuMTQ4NDQgMjAuMDE1NiA2LjY3OTY5IDIwLjAxNTZIMjAuODU5NEMyMS4zNzUgMjAuMDE1NiAyMS44MTI1IDIwLjE5NTMgMjIuMTcxOSAyMC41NTQ3QzIyLjUzMTIgMjAuOTE0MSAyMi43MTA5IDIxLjM1MTYgMjIuNzEwOSAyMS44NjcyQzIyLjcxMDkgMjIuMzk4NCAyMi41MzEyIDIyLjg0MzggMjIuMTcxOSAyMy4yMDMxQzIxLjgxMjUgMjMuNTYyNSAyMS4zNzUgMjMuNzQyMiAyMC44NTk0IDIzLjc0MjJINi42Nzk2OVoifSl9KSxtb3Rpb246Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLGNoaWxkcmVuOltLKCJjaXJjbGUiLHtjeDoiMTQiLGN5OiIxMiIscjoiNiJ9KSxLKCJwYXRoIix7ZDoiTTMgOGg0TTIgMTJoNE0zIDE2aDQifSldfSksY29udHJhc3Q6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxLKCJwYXRoIix7ZDoiTTEyIDE4YTYgNiAwIDAgMCAwLTEydjEyeiJ9KV19KSxib3JkZXJzOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIn0pLEsoInBhdGgiLHtkOiJNOSAyMWgxIn0pLEsoInBhdGgiLHtkOiJNMTQgMjFoMSJ9KV19KSx0cmFuc3BhcmVuY3k6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNjMgNDYiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTIyLjczNDQgNC4xNzE4OEMyMi4xODc1IDQuMTcxODggMjEuNzE4OCAzLjk3NjU2IDIxLjMyODEgMy41ODU5NEMyMC45Mzc1IDMuMTk1MzEgMjAuNzQyMiAyLjcxODc1IDIwLjc0MjIgMi4xNTYyNUMyMC43NDIyIDEuNjA5MzggMjAuOTM3NSAxLjE0MDYyIDIxLjMyODEgMC43NUMyMS43MTg4IDAuMzU5Mzc1IDIyLjE4NzUgMC4xNjQwNjIgMjIuNzM0NCAwLjE2NDA2MkMyMy4yODEyIDAuMTY0MDYyIDIzLjc1IDAuMzU5Mzc1IDI0LjE0MDYgMC43NUMyNC41MzEyIDEuMTQwNjIgMjQuNzI2NiAxLjYwOTM4IDI0LjcyNjYgMi4xNTYyNUMyNC43MjY2IDIuNzE4NzUgMjQuNTMxMiAzLjE5NTMxIDI0LjE0MDYgMy41ODU5NEMyMy43NSAzLjk3NjU2IDIzLjI4MTIgNC4xNzE4OCAyMi43MzQ0IDQuMTcxODhaTTI5LjEwOTQgNS4yMDMxMkMyOC41NDY5IDUuMjAzMTIgMjguMDcwMyA1LjAwNzgxIDI3LjY3OTcgNC42MTcxOUMyNy4yODkxIDQuMjI2NTYgMjcuMDkzOCAzLjc1NzgxIDI3LjA5MzggMy4yMTA5NEMyNy4wOTM4IDIuNjY0MDYgMjcuMjg5MSAyLjE5NTMxIDI3LjY3OTcgMS44MDQ2OUMyOC4wNzAzIDEuMzk4NDQgMjguNTQ2OSAxLjE5NTMxIDI5LjEwOTQgMS4xOTUzMUMyOS42NTYyIDEuMTk1MzEgMzAuMTI1IDEuMzk4NDQgMzAuNTE1NiAxLjgwNDY5QzMwLjkwNjIgMi4xOTUzMSAzMS4xMDE2IDIuNjY0MDYgMzEuMTAxNiAzLjIxMDk0QzMxLjEwMTYgMy43NTc4MSAzMC45MDYyIDQuMjI2NTYgMzAuNTE1NiA0LjYxNzE5QzMwLjEyNSA1LjAwNzgxIDI5LjY1NjIgNS4yMDMxMiAyOS4xMDk0IDUuMjAzMTJaTTM0Ljg3NSA4LjEzMjgxQzM0LjMyODEgOC4xMzI4MSAzMy44NTE2IDcuOTM3NSAzMy40NDUzIDcuNTQ2ODhDMzMuMDU0NyA3LjE0MDYyIDMyLjg1OTQgNi42NzE4OCAzMi44NTk0IDYuMTQwNjJDMzIuODU5NCA1LjU3ODEyIDMzLjA1NDcgNS4xMDE1NiAzMy40NDUzIDQuNzEwOTRDMzMuODUxNiA0LjMyMDMxIDM0LjMyODEgNC4xMjUgMzQuODc1IDQuMTI1QzM1LjQyMTkgNC4xMjUgMzUuODkwNiA0LjMyMDMxIDM2LjI4MTIgNC43MTA5NEMzNi42ODc1IDUuMTAxNTYgMzYuODkwNiA1LjU3ODEyIDM2Ljg5MDYgNi4xNDA2MkMzNi44OTA2IDYuNjcxODggMzYuNjg3NSA3LjE0MDYyIDM2LjI4MTIgNy41NDY4OEMzNS44OTA2IDcuOTM3NSAzNS40MjE5IDguMTMyODEgMzQuODc1IDguMTMyODFaTTM5LjQ0NTMgMTIuNjc5N0MzOC44OTg0IDEyLjY3OTcgMzguNDIxOSAxMi40ODQ0IDM4LjAxNTYgMTIuMDkzOEMzNy42MjUgMTEuNzAzMSAzNy40Mjk3IDExLjIzNDQgMzcuNDI5NyAxMC42ODc1QzM3LjQyOTcgMTAuMTU2MiAzNy42MjUgOS42OTUzMSAzOC4wMTU2IDkuMzA0NjlDMzguNDIxOSA4Ljg5ODQ0IDM4Ljg5ODQgOC42OTUzMSAzOS40NDUzIDguNjk1MzFDMzkuOTkyMiA4LjY5NTMxIDQwLjQ2MDkgOC44OTg0NCA0MC44NTE2IDkuMzA0NjlDNDEuMjQyMiA5LjY5NTMxIDQxLjQzNzUgMTAuMTU2MiA0MS40Mzc1IDEwLjY4NzVDNDEuNDM3NSAxMS4yMzQ0IDQxLjI0MjIgMTEuNzAzMSA0MC44NTE2IDEyLjA5MzhDNDAuNDYwOSAxMi40ODQ0IDM5Ljk5MjIgMTIuNjc5NyAzOS40NDUzIDEyLjY3OTdaTTQyLjM3NSAxOC4zOTg0QzQxLjgxMjUgMTguMzk4NCA0MS4zMjgxIDE4LjIwMzEgNDAuOTIxOSAxNy44MTI1QzQwLjUzMTIgMTcuNDIxOSA0MC4zMzU5IDE2Ljk1MzEgNDAuMzM1OSAxNi40MDYyQzQwLjMzNTkgMTUuODQzOCA0MC41MzEyIDE1LjM2NzIgNDAuOTIxOSAxNC45NzY2QzQxLjMyODEgMTQuNTg1OSA0MS44MTI1IDE0LjM5MDYgNDIuMzc1IDE0LjM5MDZDNDIuOTA2MiAxNC4zOTA2IDQzLjM2NzIgMTQuNTg1OSA0My43NTc4IDE0Ljk3NjZDNDQuMTY0MSAxNS4zNjcyIDQ0LjM2NzIgMTUuODQzOCA0NC4zNjcyIDE2LjQwNjJDNDQuMzY3MiAxNi45NTMxIDQ0LjE2NDEgMTcuNDIxOSA0My43NTc4IDE3LjgxMjVDNDMuMzY3MiAxOC4yMDMxIDQyLjkwNjIgMTguMzk4NCA0Mi4zNzUgMTguMzk4NFpNNDMuNDUzMSAyNC43OTY5QzQyLjkwNjIgMjQuNzk2OSA0Mi40Mzc1IDI0LjYwMTYgNDIuMDQ2OSAyNC4yMTA5QzQxLjY1NjIgMjMuODIwMyA0MS40NjA5IDIzLjM0MzggNDEuNDYwOSAyMi43ODEyQzQxLjQ2MDkgMjIuMjM0NCA0MS42NTYyIDIxLjc2NTYgNDIuMDQ2OSAyMS4zNzVDNDIuNDM3NSAyMC45ODQ0IDQyLjkwNjIgMjAuNzg5MSA0My40NTMxIDIwLjc4OTFDNDQgMjAuNzg5MSA0NC40Njg4IDIwLjk4NDQgNDQuODU5NCAyMS4zNzVDNDUuMjY1NiAyMS43NjU2IDQ1LjQ2ODggMjIuMjM0NCA0NS40Njg4IDIyLjc4MTJDNDUuNDY4OCAyMy4zNDM4IDQ1LjI2NTYgMjMuODIwMyA0NC44NTk0IDI0LjIxMDlDNDQuNDY4OCAyNC42MDE2IDQ0IDI0Ljc5NjkgNDMuNDUzMSAyNC43OTY5Wk00Mi4zNzUgMzEuMTcxOUM0MS44MTI1IDMxLjE3MTkgNDEuMzI4MSAzMC45NzY2IDQwLjkyMTkgMzAuNTg1OUM0MC41MzEyIDMwLjE5NTMgNDAuMzM1OSAyOS43MjY2IDQwLjMzNTkgMjkuMTc5N0M0MC4zMzU5IDI4LjYxNzIgNDAuNTMxMiAyOC4xNDA2IDQwLjkyMTkgMjcuNzVDNDEuMzI4MSAyNy4zNTk0IDQxLjgxMjUgMjcuMTY0MSA0Mi4zNzUgMjcuMTY0MUM0Mi45MDYyIDI3LjE2NDEgNDMuMzY3MiAyNy4zNTk0IDQzLjc1NzggMjcuNzVDNDQuMTY0MSAyOC4xNDA2IDQ0LjM2NzIgMjguNjE3MiA0NC4zNjcyIDI5LjE3OTdDNDQuMzY3MiAyOS43MjY2IDQ0LjE2NDEgMzAuMTk1MyA0My43NTc4IDMwLjU4NTlDNDMuMzY3MiAzMC45NzY2IDQyLjkwNjIgMzEuMTcxOSA0Mi4zNzUgMzEuMTcxOVpNMzkuNDQ1MyAzNi44OTA2QzM4Ljg5ODQgMzYuODkwNiAzOC40MjE5IDM2LjY5NTMgMzguMDE1NiAzNi4zMDQ3QzM3LjYyNSAzNS44OTg0IDM3LjQyOTcgMzUuNDIxOSAzNy40Mjk3IDM0Ljg3NUMzNy40Mjk3IDM0LjMyODEgMzcuNjI1IDMzLjg1OTQgMzguMDE1NiAzMy40Njg4QzM4LjQyMTkgMzMuMDYyNSAzOC44OTg0IDMyLjg1OTQgMzkuNDQ1MyAzMi44NTk0QzM5Ljk5MjIgMzIuODU5NCA0MC40NjA5IDMzLjA2MjUgNDAuODUxNiAzMy40Njg4QzQxLjI0MjIgMzMuODU5NCA0MS40Mzc1IDM0LjMyODEgNDEuNDM3NSAzNC44NzVDNDEuNDM3NSAzNS40MjE5IDQxLjI0MjIgMzUuODk4NCA0MC44NTE2IDM2LjMwNDdDNDAuNDYwOSAzNi42OTUzIDM5Ljk5MjIgMzYuODkwNiAzOS40NDUzIDM2Ljg5MDZaTTM0Ljg3NSA0MS40Mzc1QzM0LjMyODEgNDEuNDM3NSAzMy44NTE2IDQxLjI0MjIgMzMuNDQ1MyA0MC44NTE2QzMzLjA1NDcgNDAuNDYwOSAzMi44NTk0IDM5Ljk5MjIgMzIuODU5NCAzOS40NDUzQzMyLjg1OTQgMzguODk4NCAzMy4wNTQ3IDM4LjQyOTcgMzMuNDQ1MyAzOC4wMzkxQzMzLjg1MTYgMzcuNjMyOCAzNC4zMjgxIDM3LjQyOTcgMzQuODc1IDM3LjQyOTdDMzUuNDIxOSAzNy40Mjk3IDM1Ljg5MDYgMzcuNjMyOCAzNi4yODEyIDM4LjAzOTFDMzYuNjg3NSAzOC40Mjk3IDM2Ljg5MDYgMzguODk4NCAzNi44OTA2IDM5LjQ0NTNDMzYuODkwNiAzOS45OTIyIDM2LjY4NzUgNDAuNDYwOSAzNi4yODEyIDQwLjg1MTZDMzUuODkwNiA0MS4yNDIyIDM1LjQyMTkgNDEuNDM3NSAzNC44NzUgNDEuNDM3NVpNMjkuMTA5NCA0NC4zNjcyQzI4LjU0NjkgNDQuMzY3MiAyOC4wNzAzIDQ0LjE2NDEgMjcuNjc5NyA0My43NTc4QzI3LjI4OTEgNDMuMzY3MiAyNy4wOTM4IDQyLjg5ODQgMjcuMDkzOCA0Mi4zNTE2QzI3LjA5MzggNDEuODA0NyAyNy4yODkxIDQxLjMzNTkgMjcuNjc5NyA0MC45NDUzQzI4LjA3MDMgNDAuNTU0NyAyOC41NDY5IDQwLjM1OTQgMjkuMTA5NCA0MC4zNTk0QzI5LjY1NjIgNDAuMzU5NCAzMC4xMjUgNDAuNTU0NyAzMC41MTU2IDQwLjk0NTNDMzAuOTA2MiA0MS4zMzU5IDMxLjEwMTYgNDEuODA0NyAzMS4xMDE2IDQyLjM1MTZDMzEuMTAxNiA0Mi44OTg0IDMwLjkwNjIgNDMuMzY3MiAzMC41MTU2IDQzLjc1NzhDMzAuMTI1IDQ0LjE2NDEgMjkuNjU2MiA0NC4zNjcyIDI5LjEwOTQgNDQuMzY3MlpNMjIuNzM0NCA0NS4zOTg0QzIyLjE4NzUgNDUuMzk4NCAyMS43MTg4IDQ1LjIwMzEgMjEuMzI4MSA0NC44MTI1QzIwLjkzNzUgNDQuNDIxOSAyMC43NDIyIDQzLjk1MzEgMjAuNzQyMiA0My40MDYyQzIwLjc0MjIgNDIuODQzOCAyMC45Mzc1IDQyLjM2NzIgMjEuMzI4MSA0MS45NzY2QzIxLjcxODggNDEuNTg1OSAyMi4xODc1IDQxLjM5MDYgMjIuNzM0NCA0MS4zOTA2QzIzLjI4MTIgNDEuMzkwNiAyMy43NSA0MS41ODU5IDI0LjE0MDYgNDEuOTc2NkMyNC41MzEyIDQyLjM2NzIgMjQuNzI2NiA0Mi44NDM4IDI0LjcyNjYgNDMuNDA2MkMyNC43MjY2IDQzLjk1MzEgMjQuNTMxMiA0NC40MjE5IDI0LjE0MDYgNDQuODEyNUMyMy43NSA0NS4yMDMxIDIzLjI4MTIgNDUuMzk4NCAyMi43MzQ0IDQ1LjM5ODRaTTE2LjM1OTQgNDQuMzY3MkMxNS44MTI1IDQ0LjM2NzIgMTUuMzQzOCA0NC4xNjQxIDE0Ljk1MzEgNDMuNzU3OEMxNC41NjI1IDQzLjM2NzIgMTQuMzY3MiA0Mi44OTg0IDE0LjM2NzIgNDIuMzUxNkMxNC4zNjcyIDQxLjgwNDcgMTQuNTYyNSA0MS4zMzU5IDE0Ljk1MzEgNDAuOTQ1M0MxNS4zNDM4IDQwLjU1NDcgMTUuODEyNSA0MC4zNTk0IDE2LjM1OTQgNDAuMzU5NEMxNi45MjE5IDQwLjM1OTQgMTcuMzk4NCA0MC41NTQ3IDE3Ljc4OTEgNDAuOTQ1M0MxOC4xNzk3IDQxLjMzNTkgMTguMzc1IDQxLjgwNDcgMTguMzc1IDQyLjM1MTZDMTguMzc1IDQyLjg5ODQgMTguMTc5NyA0My4zNjcyIDE3Ljc4OTEgNDMuNzU3OEMxNy4zOTg0IDQ0LjE2NDEgMTYuOTIxOSA0NC4zNjcyIDE2LjM1OTQgNDQuMzY3MlpNMTAuNTcwMyA0MS40Mzc1QzEwLjAzOTEgNDEuNDM3NSA5LjU3MDMxIDQxLjI0MjIgOS4xNjQwNiA0MC44NTE2QzguNzczNDQgNDAuNDYwOSA4LjU3ODEyIDM5Ljk5MjIgOC41NzgxMiAzOS40NDUzQzguNTc4MTIgMzguODk4NCA4Ljc3MzQ0IDM4LjQyOTcgOS4xNjQwNiAzOC4wMzkxQzkuNTcwMzEgMzcuNjMyOCAxMC4wMzkxIDM3LjQyOTcgMTAuNTcwMyAzNy40Mjk3QzExLjEzMjggMzcuNDI5NyAxMS42MDk0IDM3LjYzMjggMTIgMzguMDM5MUMxMi4zOTA2IDM4LjQyOTcgMTIuNTg1OSAzOC44OTg0IDEyLjU4NTkgMzkuNDQ1M0MxMi41ODU5IDM5Ljk5MjIgMTIuMzkwNiA0MC40NjA5IDEyIDQwLjg1MTZDMTEuNjA5NCA0MS4yNDIyIDExLjEzMjggNDEuNDM3NSAxMC41NzAzIDQxLjQzNzVaTTYuMDIzNDQgMzYuODkwNkM1LjQ3NjU2IDM2Ljg5MDYgNSAzNi42OTUzIDQuNTkzNzUgMzYuMzA0N0M0LjIwMzEyIDM1Ljg5ODQgNC4wMDc4MSAzNS40MjE5IDQuMDA3ODEgMzQuODc1QzQuMDA3ODEgMzQuMzI4MSA0LjIwMzEyIDMzLjg1OTQgNC41OTM3NSAzMy40Njg4QzUgMzMuMDYyNSA1LjQ3NjU2IDMyLjg1OTQgNi4wMjM0NCAzMi44NTk0QzYuNTcwMzEgMzIuODU5NCA3LjAzOTA2IDMzLjA2MjUgNy40Mjk2OSAzMy40Njg4QzcuODIwMzEgMzMuODU5NCA4LjAxNTYyIDM0LjMyODEgOC4wMTU2MiAzNC44NzVDOC4wMTU2MiAzNS40MjE5IDcuODIwMzEgMzUuODk4NCA3LjQyOTY5IDM2LjMwNDdDNy4wMzkwNiAzNi42OTUzIDYuNTcwMzEgMzYuODkwNiA2LjAyMzQ0IDM2Ljg5MDZaTTMuMDkzNzUgMzEuMTcxOUMyLjU2MjUgMzEuMTcxOSAyLjA5Mzc1IDMwLjk3NjYgMS42ODc1IDMwLjU4NTlDMS4yOTY4OCAzMC4xOTUzIDEuMTAxNTYgMjkuNzI2NiAxLjEwMTU2IDI5LjE3OTdDMS4xMDE1NiAyOC42MTcyIDEuMjk2ODggMjguMTQwNiAxLjY4NzUgMjcuNzVDMi4wOTM3NSAyNy4zNTk0IDIuNTYyNSAyNy4xNjQxIDMuMDkzNzUgMjcuMTY0MUMzLjY1NjI1IDI3LjE2NDEgNC4xMzI4MSAyNy4zNTk0IDQuNTIzNDQgMjcuNzVDNC45MTQwNiAyOC4xNDA2IDUuMTA5MzggMjguNjE3MiA1LjEwOTM4IDI5LjE3OTdDNS4xMDkzOCAyOS43MjY2IDQuOTE0MDYgMzAuMTk1MyA0LjUyMzQ0IDMwLjU4NTlDNC4xMzI4MSAzMC45NzY2IDMuNjU2MjUgMzEuMTcxOSAzLjA5Mzc1IDMxLjE3MTlaTTIuMDE1NjIgMjQuNzk2OUMxLjQ1MzEyIDI0Ljc5NjkgMC45NzY1NjIgMjQuNjAxNiAwLjU4NTkzOCAyNC4yMTA5QzAuMTk1MzEyIDIzLjgyMDMgMCAyMy4zNDM4IDAgMjIuNzgxMkMwIDIyLjIzNDQgMC4xOTUzMTIgMjEuNzY1NiAwLjU4NTkzOCAyMS4zNzVDMC45NzY1NjIgMjAuOTg0NCAxLjQ1MzEyIDIwLjc4OTEgMi4wMTU2MiAyMC43ODkxQzIuNTYyNSAyMC43ODkxIDMuMDMxMjUgMjAuOTg0NCAzLjQyMTg4IDIxLjM3NUMzLjgxMjUgMjEuNzY1NiA0LjAwNzgxIDIyLjIzNDQgNC4wMDc4MSAyMi43ODEyQzQuMDA3ODEgMjMuMzQzOCAzLjgxMjUgMjMuODIwMyAzLjQyMTg4IDI0LjIxMDlDMy4wMzEyNSAyNC42MDE2IDIuNTYyNSAyNC43OTY5IDIuMDE1NjIgMjQuNzk2OVpNMy4wOTM3NSAxOC4zOTg0QzIuNTYyNSAxOC4zOTg0IDIuMDkzNzUgMTguMjAzMSAxLjY4NzUgMTcuODEyNUMxLjI5Njg4IDE3LjQyMTkgMS4xMDE1NiAxNi45NTMxIDEuMTAxNTYgMTYuNDA2MkMxLjEwMTU2IDE1Ljg0MzggMS4yOTY4OCAxNS4zNjcyIDEuNjg3NSAxNC45NzY2QzIuMDkzNzUgMTQuNTg1OSAyLjU2MjUgMTQuMzkwNiAzLjA5Mzc1IDE0LjM5MDZDMy42NTYyNSAxNC4zOTA2IDQuMTMyODEgMTQuNTg1OSA0LjUyMzQ0IDE0Ljk3NjZDNC45MTQwNiAxNS4zNjcyIDUuMTA5MzggMTUuODQzOCA1LjEwOTM4IDE2LjQwNjJDNS4xMDkzOCAxNi45NTMxIDQuOTE0MDYgMTcuNDIxOSA0LjUyMzQ0IDE3LjgxMjVDNC4xMzI4MSAxOC4yMDMxIDMuNjU2MjUgMTguMzk4NCAzLjA5Mzc1IDE4LjM5ODRaTTYuMDIzNDQgMTIuNjc5N0M1LjQ3NjU2IDEyLjY3OTcgNSAxMi40ODQ0IDQuNTkzNzUgMTIuMDkzOEM0LjIwMzEyIDExLjcwMzEgNC4wMDc4MSAxMS4yMzQ0IDQuMDA3ODEgMTAuNjg3NUM0LjAwNzgxIDEwLjE1NjIgNC4yMDMxMiA5LjY5NTMxIDQuNTkzNzUgOS4zMDQ2OUM1IDguODk4NDQgNS40NzY1NiA4LjY5NTMxIDYuMDIzNDQgOC42OTUzMUM2LjU3MDMxIDguNjk1MzEgNy4wMzkwNiA4Ljg5ODQ0IDcuNDI5NjkgOS4zMDQ2OUM3LjgyMDMxIDkuNjk1MzEgOC4wMTU2MiAxMC4xNTYyIDguMDE1NjIgMTAuNjg3NUM4LjAxNTYyIDExLjIzNDQgNy44MjAzMSAxMS43MDMxIDcuNDI5NjkgMTIuMDkzOEM3LjAzOTA2IDEyLjQ4NDQgNi41NzAzMSAxMi42Nzk3IDYuMDIzNDQgMTIuNjc5N1pNMTAuNTcwMyA4LjEzMjgxQzEwLjAzOTEgOC4xMzI4MSA5LjU3MDMxIDcuOTM3NSA5LjE2NDA2IDcuNTQ2ODhDOC43NzM0NCA3LjE0MDYyIDguNTc4MTIgNi42NzE4OCA4LjU3ODEyIDYuMTQwNjJDOC41NzgxMiA1LjU3ODEyIDguNzczNDQgNS4xMDE1NiA5LjE2NDA2IDQuNzEwOTRDOS41NzAzMSA0LjMyMDMxIDEwLjAzOTEgNC4xMjUgMTAuNTcwMyA0LjEyNUMxMS4xMzI4IDQuMTI1IDExLjYwOTQgNC4zMjAzMSAxMiA0LjcxMDk0QzEyLjM5MDYgNS4xMDE1NiAxMi41ODU5IDUuNTc4MTIgMTIuNTg1OSA2LjE0MDYyQzEyLjU4NTkgNi42NzE4OCAxMi4zOTA2IDcuMTQwNjIgMTIgNy41NDY4OEMxMS42MDk0IDcuOTM3NSAxMS4xMzI4IDguMTMyODEgMTAuNTcwMyA4LjEzMjgxWk0xNi4zNTk0IDUuMjAzMTJDMTUuODEyNSA1LjIwMzEyIDE1LjM0MzggNS4wMDc4MSAxNC45NTMxIDQuNjE3MTlDMTQuNTYyNSA0LjIyNjU2IDE0LjM2NzIgMy43NTc4MSAxNC4zNjcyIDMuMjEwOTRDMTQuMzY3MiAyLjY2NDA2IDE0LjU2MjUgMi4xOTUzMSAxNC45NTMxIDEuODA0NjlDMTUuMzQzOCAxLjM5ODQ0IDE1LjgxMjUgMS4xOTUzMSAxNi4zNTk0IDEuMTk1MzFDMTYuOTIxOSAxLjE5NTMxIDE3LjM5ODQgMS4zOTg0NCAxNy43ODkxIDEuODA0NjlDMTguMTc5NyAyLjE5NTMxIDE4LjM3NSAyLjY2NDA2IDE4LjM3NSAzLjIxMDk0QzE4LjM3NSAzLjc1NzgxIDE4LjE3OTcgNC4yMjY1NiAxNy43ODkxIDQuNjE3MTlDMTcuMzk4NCA1LjAwNzgxIDE2LjkyMTkgNS4yMDMxMiAxNi4zNTk0IDUuMjAzMTJaTTQwLjEwMTYgNDUuNTYyNUMzNi45NDUzIDQ1LjU2MjUgMzMuOTkyMiA0NC45Njg4IDMxLjI0MjIgNDMuNzgxMkMyOC41MDc4IDQyLjYwOTQgMjYuMDkzOCA0MC45NzY2IDI0IDM4Ljg4MjhDMjEuOTA2MiAzNi43ODkxIDIwLjI2NTYgMzQuMzY3MiAxOS4wNzgxIDMxLjYxNzJDMTcuOTA2MiAyOC44NjcyIDE3LjMyMDMgMjUuOTIxOSAxNy4zMjAzIDIyLjc4MTJDMTcuMzIwMyAxOS42NDA2IDE3LjkwNjIgMTYuNjk1MyAxOS4wNzgxIDEzLjk0NTNDMjAuMjY1NiAxMS4xNzk3IDIxLjkwNjIgOC43NTc4MSAyNCA2LjY3OTY5QzI2LjA5MzggNC41ODU5NCAyOC41MDc4IDIuOTUzMTIgMzEuMjQyMiAxLjc4MTI1QzMzLjk5MjIgMC41OTM3NSAzNi45NDUzIDAgNDAuMTAxNiAwQzQzLjI0MjIgMCA0Ni4xODc1IDAuNTkzNzUgNDguOTM3NSAxLjc4MTI1QzUxLjY4NzUgMi45NTMxMiA1NC4xMDE2IDQuNTg1OTQgNTYuMTc5NyA2LjY3OTY5QzU4LjI3MzQgOC43NTc4MSA1OS45MDYyIDExLjE3OTcgNjEuMDc4MSAxMy45NDUzQzYyLjI2NTYgMTYuNjk1MyA2Mi44NTk0IDE5LjY0MDYgNjIuODU5NCAyMi43ODEyQzYyLjg1OTQgMjUuOTIxOSA2Mi4yNjU2IDI4Ljg2NzIgNjEuMDc4MSAzMS42MTcyQzU5LjkwNjIgMzQuMzY3MiA1OC4yNzM0IDM2Ljc4OTEgNTYuMTc5NyAzOC44ODI4QzU0LjEwMTYgNDAuOTc2NiA1MS42ODc1IDQyLjYwOTQgNDguOTM3NSA0My43ODEyQzQ2LjE4NzUgNDQuOTY4OCA0My4yNDIyIDQ1LjU2MjUgNDAuMTAxNiA0NS41NjI1Wk00MC4xMDE2IDQxLjM5MDZDNDIuNjY0MSA0MS4zOTA2IDQ1LjA3MDMgNDAuOTA2MiA0Ny4zMjAzIDM5LjkzNzVDNDkuNTcwMyAzOC45Njg4IDUxLjU0NjkgMzcuNjMyOCA1My4yNSAzNS45Mjk3QzU0Ljk2ODggMzQuMjI2NiA1Ni4zMDQ3IDMyLjI1NzggNTcuMjU3OCAzMC4wMjM0QzU4LjIxMDkgMjcuNzczNCA1OC42ODc1IDI1LjM1OTQgNTguNjg3NSAyMi43ODEyQzU4LjY4NzUgMjAuMjAzMSA1OC4yMTA5IDE3Ljc5NjkgNTcuMjU3OCAxNS41NjI1QzU2LjMwNDcgMTMuMzEyNSA1NC45Njg4IDExLjMzNTkgNTMuMjUgOS42MzI4MUM1MS41NDY5IDcuOTI5NjkgNDkuNTcwMyA2LjU5Mzc1IDQ3LjMyMDMgNS42MjVDNDUuMDcwMyA0LjY1NjI1IDQyLjY2NDEgNC4xNzE4OCA0MC4xMDE2IDQuMTcxODhDMzcuNTIzNCA0LjE3MTg4IDM1LjEwOTQgNC42NTYyNSAzMi44NTk0IDUuNjI1QzMwLjYyNSA2LjU5Mzc1IDI4LjY0ODQgNy45Mjk2OSAyNi45Mjk3IDkuNjMyODFDMjUuMjI2NiAxMS4zMzU5IDIzLjg5MDYgMTMuMzEyNSAyMi45MjE5IDE1LjU2MjVDMjEuOTY4OCAxNy43OTY5IDIxLjQ5MjIgMjAuMjAzMSAyMS40OTIyIDIyLjc4MTJDMjEuNDkyMiAyNS4zNTk0IDIxLjk2ODggMjcuNzczNCAyMi45MjE5IDMwLjAyMzRDMjMuODkwNiAzMi4yNTc4IDI1LjIyNjYgMzQuMjI2NiAyNi45Mjk3IDM1LjkyOTdDMjguNjQ4NCAzNy42MzI4IDMwLjYyNSAzOC45Njg4IDMyLjg1OTQgMzkuOTM3NUMzNS4xMDk0IDQwLjkwNjIgMzcuNTIzNCA0MS4zOTA2IDQwLjEwMTYgNDEuMzkwNloifSl9KSx2b2ljZW92ZXI6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiJ9KSxLKCJwYXRoIix7ZDoiTTE2LjUgMjEuMTc0QzE1LjUgMjAuNSAxNC4zNzIgMjAgMTMgMjBjLTIuMDU4IDAtMy45MjggMi4zNTYtNiAyLTIuMDcyLS4zNTYtMi43NzUtMy4zNjktMS41LTQuNSJ9KSxLKCJjaXJjbGUiLHtjeDoiMTYiLGN5OiI3IixyOiI1In0pXX0pfTtmdW5jdGlvbiB3USgkKXtpZighJClyZXR1cm4hMDtyZXR1cm4gQjUoJCkub3MudG9Mb3dlckNhc2UoKT09PSJpb3MifWZ1bmN0aW9uIFQ2KHt1ZGlkOiQscnVudGltZTpRfSl7bGV0W0osWl09VyghMCksW1gsWV09VyhudWxsKSxbcSxHXT1XKG51bGwpLFtOLEJdPVcobnVsbCksVT13UShRKSxWPUUoYXN5bmMoKT0+e0IobnVsbCk7dHJ5e2xldCBJPWF3YWl0IEczKHtkZXZpY2U6JH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pO2lmKEkpWShJKTtlbHNlIEIoIlVuZXhwZWN0ZWQgc2ltdWxhdG9yLXNldHRpbmdzIHJlcGx5Iil9Y2F0Y2goSSl7QihJIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZJLm5hbWU9PT0iVGltZW91dEVycm9yIj8iVGltZWQgb3V0IHJlYWRpbmcgc2ltdWxhdG9yIHNldHRpbmdzIjpJIGluc3RhbmNlb2YgRXJyb3ImJkkubWVzc2FnZSE9PSJGYWlsZWQgdG8gZmV0Y2giP0kubWVzc2FnZToiQ291bGQgbm90IHJlYWNoIHRoZSBwcmV2aWV3IHNlcnZlciDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKX19LFskXSk7eCgoKT0+e2lmKFkobnVsbCksIVUpcmV0dXJuO1YoKX0sW1YsVV0pO2xldCBrPUUoYXN5bmMoSSxUKT0+e0coSSksQihudWxsKSxZKCh5KT0+eT97Li4ueSxbSV06VH06eSk7dHJ5e2F3YWl0IEczKHtkZXZpY2U6JCxvcHRpb246SSx2YWx1ZTpUfSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSl9Y2F0Y2goeSl7Qih5IGluc3RhbmNlb2YgRXJyb3I/eS5tZXNzYWdlOmBGYWlsZWQgdG8gc2V0ICR7SX1gKSxWKCl9ZmluYWxseXtHKG51bGwpfX0sWyQsVl0pLEw9Yih7cnVubmluZzohMSxuZXh0Om51bGx9KSxNPWIoayk7TS5jdXJyZW50PWs7bGV0IEM9RSgoSSk9PntsZXQgVD1MLmN1cnJlbnQ7aWYoVC5uZXh0PUksVC5ydW5uaW5nKXJldHVybjtULnJ1bm5pbmc9ITAsKGFzeW5jKCk9Pnt3aGlsZShULm5leHQhPT1udWxsKXtsZXQgeT1ULm5leHQ7VC5uZXh0PW51bGwsYXdhaXQgTS5jdXJyZW50KCJ0ZXh0LXNpemUiLHgyW3ldKX1ULnJ1bm5pbmc9ITF9KSgpfSxbXSksej1YIT09bnVsbCxBPVg/P1BRLFA9eDIuaW5kZXhPZihBWyJ0ZXh0LXNpemUiXSksUj1QPj0wP1A6QVsidGV4dC1zaXplIl0/LnN0YXJ0c1dpdGgoImFjY2Vzc2liaWxpdHkiKT94Mi5sZW5ndGgtMTozO3JldHVybiBLKFYwLHtvcGVuOkosb25PcGVuQ2hhbmdlOlosImRhdGEtc2ltdWxhdG9yLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKEoxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU2ltdWxhdG9yIn0pLEsoInNwYW4iLHt9KV19KSxjaGlsZHJlbjohVT9LKCJkaXYiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNDUgdGV4dC1bMTFweF0gcHgtMC41IHB5LTEiLGNoaWxkcmVuOiJTaW11bGF0b3Igc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBvbiBpT1Mgc2ltdWxhdG9ycyBvbmx5LiJ9KTpLKEoxLHtjaGlsZHJlbjpbTiYmSygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOk59KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnZvaWQgVigpLGNsYXNzTmFtZToic2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWRhbmdlci8zMCBiZy10cmFuc3BhcmVudCBweC0xLjUgcHktMC41IHRleHQtWzExcHhdIHRleHQtZGFuZ2VyLXNvZnQiLGNoaWxkcmVuOiJSZXRyeSJ9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltLKGYwLHtpY29uOlMyLmFwcGVhcmFuY2UsbGFiZWw6IkFwcGVhcmFuY2UiLGNoaWxkcmVuOksodjIse2xhYmVsOiJBcHBlYXJhbmNlIix2YWx1ZTpBLmFwcGVhcmFuY2U/PyJsaWdodCIsb3B0aW9uczp3My5hcHBlYXJhbmNlLGRpc2FibGVkOiF6fHxxPT09ImFwcGVhcmFuY2UiLG9uQ2hhbmdlOihJKT0+aygiYXBwZWFyYW5jZSIsSSl9KX0pLEsoZjAse2ljb246UzIuZ2xhc3MsbGFiZWw6IkxpcXVpZCBHbGFzcyIsY2hpbGRyZW46Syh2Mix7bGFiZWw6IkxpcXVpZCBHbGFzcyIsdmFsdWU6QVsibGlxdWlkLWdsYXNzIl0/PyJjbGVhciIsb3B0aW9uczp3M1sibGlxdWlkLWdsYXNzIl0sZGlzYWJsZWQ6IXp8fHE9PT0ibGlxdWlkLWdsYXNzIixvbkNoYW5nZTooSSk9PmsoImxpcXVpZC1nbGFzcyIsSSl9KX0pLEsoZjAse2ljb246UzIuZmlsdGVyLGxhYmVsOiJDb2xvciBGaWx0ZXIiLGNoaWxkcmVuOksodjIse2xhYmVsOiJDb2xvciBGaWx0ZXIiLHZhbHVlOkFbImNvbG9yLWZpbHRlciJdPz8ibm9uZSIsb3B0aW9uczp3M1siY29sb3ItZmlsdGVyIl0sZGlzYWJsZWQ6IXp8fHE9PT0iY29sb3ItZmlsdGVyIixvbkNoYW5nZTooSSk9PmsoImNvbG9yLWZpbHRlciIsSSl9KX0pLEsoZjAse2ljb246UzIudGV4dFNpemUsbGFiZWw6IlRleHQgU2l6ZSIsY2hpbGRyZW46SyhUUSx7dmFsdWU6UixkaXNhYmxlZDoheixvbkNoYW5nZTpDfSl9KSxEUS5tYXAoKHtrZXk6SSxsYWJlbDpUfSk9PksoZjAse2ljb246UzJbST09PSJyZWR1Y2UtbW90aW9uIj8ibW90aW9uIjpJPT09ImluY3JlYXNlLWNvbnRyYXN0Ij8iY29udHJhc3QiOkk9PT0ic2hvdy1ib3JkZXJzIj8iYm9yZGVycyI6ST09PSJyZWR1Y2UtdHJhbnNwYXJlbmN5Ij8idHJhbnNwYXJlbmN5Ijoidm9pY2VvdmVyIl0sbGFiZWw6VCxjaGlsZHJlbjpLKFc1LHtsYWJlbDpULGNoZWNrZWQ6QVtJXT09PSJvbiIsZGlzYWJsZWQ6IXp8fHE9PT1JLG9uQ2hhbmdlOih5KT0+ayhJLHk/Im9uIjoib2ZmIil9KX0sSSkpXX0pXX0pfSl9dmFyIEUzPSJzZXJ2ZS1zaW06Y29kZWMiLEVRPVt7dmFsdWU6ImF1dG8iLGxhYmVsOiJILjI2NCAoSGFyZHdhcmUpIn0se3ZhbHVlOiJtanBlZyIsbGFiZWw6Ik1KUEVHIChDb21wYXRpYmlsaXR5KSJ9XSxJUT1LKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSygicGF0aCIse2Q6Im0xNiAxMyA1LjIyMyAzLjQ4MmEuNS41IDAgMCAwIC43NzctLjQxNlY3Ljg3YS41LjUgMCAwIDAtLjc1Mi0uNDMyTDE2IDEwLjUifSksSygicmVjdCIse3g6IjIiLHk6IjYiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxMiIscng6IjIifSldfSk7ZnVuY3Rpb24gdzYoe3ByZWZlcmVuY2U6JCxvblByZWZlcmVuY2VDaGFuZ2U6USxhY3RpdmVDb2RlYzpKLGF2Y2NTdXBwb3J0ZWQ6Wn0pe2xldFtYLFldPVcoITEpLHE9Wj8kOiJtanBlZyI7cmV0dXJuIEsoVjAse29wZW46WCxvbk9wZW5DaGFuZ2U6WSwiZGF0YS1zdHJlYW0tc2V0dGluZ3MiOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OksoSjEse2NoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTdHJlYW0ifSksSygic3BhbiIse30pXX0pLGNoaWxkcmVuOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMS41IHBiLTEuNSIsY2hpbGRyZW46W0soZjAse2ljb246SVEsbGFiZWw6IkNvZGVjIixjaGlsZHJlbjpLKHYyLHtsYWJlbDoiQ29kZWMiLHZhbHVlOnEsb3B0aW9uczpFUSxkaXNhYmxlZDohWixvbkNoYW5nZTooTik9PlEoTil9KX0pLEsoInAiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgbGVhZGluZy1zbnVnIHB4LTAuNSIsY2hpbGRyZW46IVo/IlRoaXMgYnJvd3NlciBjYW4ndCBkZWNvZGUgSC4yNjQsIHNvIHRoZSBzdHJlYW0gdXNlcyBNSlBFRy4iOnE9PT0iYXV0byImJko9PT0ibWpwZWciPyJILjI2NCB3YXMgdW5hdmFpbGFibGUgZm9yIHRoaXMgc3RyZWFtLCBzbyBpdCBmZWxsIGJhY2sgdG8gTUpQRUcuIjoiU3dpdGNoIHRvIE1KUEVHIGlmIHRoZSBzdHJlYW0gc3R1dHRlcnMgb3IgZHJvcHMgd2hpbGUgc2NyZWVuIHJlY29yZGluZyB0aGUgYnJvd3NlciB3aW5kb3cuIn0pXX0pfSl9ZnVuY3Rpb24gRTYoe29wZW46JCxvbkNsb3NlOlEsdWRpZDpKLGRldmljZVJ1bnRpbWU6WixjdXJyZW50QXBwOlgsYXhPdmVybGF5RW5hYmxlZDpZLG9uVG9nZ2xlQXhPdmVybGF5OnEsY29kZWNQcmVmZXJlbmNlOkcsb25Db2RlY1ByZWZlcmVuY2VDaGFuZ2U6TixhY3RpdmVDb2RlYzpCLGF2Y2NTdXBwb3J0ZWQ6VSx3aWR0aDpWfSl7cmV0dXJuIEsoZTAse29wZW46JCx3aWR0aDpWLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6UTJ9LGNoaWxkcmVuOltLKCQyLHtjaGlsZHJlbjpbSyhGOSx7Y2hpbGRyZW46IlRvb2xzIn0pLEsoejUse29uQ2xpY2s6UX0pXX0pLCQmJksoImRpdiIse2NsYXNzTmFtZToicC0zLjUgb3ZlcmZsb3cteS1hdXRvIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0zIixjaGlsZHJlbjpbSyhONix7dWRpZDpKLGN1cnJlbnRBcHA6WH0pLEsoVDYse3VkaWQ6SixydW50aW1lOlp9KSxLKEM2LHtvdmVybGF5RW5hYmxlZDpZLG9uVG9nZ2xlT3ZlcmxheTpxfSksSyhENix7dWRpZDpKLGJ1bmRsZUlkOlg/LmJ1bmRsZUlkPz9udWxsfSksSyhWNix7dWRpZDpKLGV4ZWM6QTF9KSxLKEw2LHt1ZGlkOkosYnVuZGxlSWQ6WD8uYnVuZGxlSWQ/P251bGx9KSxLKHc2LHtwcmVmZXJlbmNlOkcsb25QcmVmZXJlbmNlQ2hhbmdlOk4sYWN0aXZlQ29kZWM6QixhdmNjU3VwcG9ydGVkOlV9KV19KV19KX1mdW5jdGlvbiBJNigkLFEpe2xldCBKO3RyeXtKPW5ldyBVUkwoJC53ZWJTb2NrZXREZWJ1Z2dlclVybCl9Y2F0Y2h7cmV0dXJuICR9bGV0IFo9YCR7Si5wYXRobmFtZX0ke0ouc2VhcmNofWAsWD1RLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiLFk9US5wcm90b2NvbD09PSJodHRwczoiPyJ3c3MiOiJ3cyIscT1gJHtRLmhvc3R9JHtafWAsRz0kLmRldnRvb2xzRnJvbnRlbmRVcmw7dHJ5e2xldCBOPW5ldyBVUkwoJC5kZXZ0b29sc0Zyb250ZW5kVXJsLGAke1EucHJvdG9jb2x9Ly8ke1EuaG9zdH1gKTtOLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzIiksTi5zZWFyY2hQYXJhbXMuZGVsZXRlKCJ3c3MiKSxOLnNlYXJjaFBhcmFtcy5zZXQoWSxxKSxHPWAke04ucGF0aG5hbWV9JHtOLnNlYXJjaH0ke04uaGFzaH1gfWNhdGNoe31yZXR1cm57Li4uJCx3ZWJTb2NrZXREZWJ1Z2dlclVybDpgJHtYfS8vJHtRLmhvc3R9JHtafWAsZGV2dG9vbHNGcm9udGVuZFVybDpHfX1mdW5jdGlvbiBqMigkLFEpe2ZldGNoKHUxKCJkZXZ0b29scy9oaWdobGlnaHQiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3RhcmdldElkOiQsb246UX0pLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gSTMoKXtsZXQgJD11MSgiZGV2dG9vbHMvcmVsZWFzZSIpO3RyeXtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNlbmRCZWFjb24pe2xldCBRPW5ldyBCbG9iKFsie30iXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KTtpZihuYXZpZ2F0b3Iuc2VuZEJlYWNvbigkLFEpKXJldHVybn19Y2F0Y2h7fWZldGNoKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OiJ7fSIsa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiB5NigkKXtsZXQgUT0kLmNvbnRlbnREb2N1bWVudDtpZighUSlyZXR1cm47bGV0IEo9KCk9PntsZXQgWT1bUV07d2hpbGUoWS5sZW5ndGgpe2xldCBxPVkucG9wKCksRz1xLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxhYmVsXSxbdGl0bGVdIik7Zm9yKGxldCBOIG9mIEcpe2xldCBCPU4uZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fE4udGl0bGV8fCIiO2lmKC9edG9nZ2xlIHNjcmVlbmNhc3QkL2kudGVzdChCKSlyZXR1cm4gTn1mb3IobGV0IE4gb2YgcS5xdWVyeVNlbGVjdG9yQWxsKCIqIikpaWYoTi5zaGFkb3dSb290KVkucHVzaChOLnNoYWRvd1Jvb3QpfXJldHVybiBudWxsfSxaPTAsWD0oKT0+e1orKztsZXQgWT1KKCk7aWYoWSYmWS5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09ImZhbHNlIil7WS5jbGljaygpO3JldHVybn1pZihaPDIwKXNldFRpbWVvdXQoWCwxMDApfTtYKCl9ZnVuY3Rpb24gYjYoJCl7bGV0IFE9W10sSj1uZXcgTWFwO2ZvcihsZXQgWiBvZiAkKXtsZXQgWD1aLmFwcE5hbWV8fFouYnVuZGxlSWR8fCJVbmtub3duIixZPVouYnVuZGxlSWR8fFgscT1KLmdldChZKTtpZighcSlxPXtrZXk6WSxhcHBOYW1lOlgsYnVuZGxlSWQ6Wi5idW5kbGVJZCx0YXJnZXRzOltdfSxKLnNldChZLHEpLFEucHVzaChZKTtxLnRhcmdldHMucHVzaChaKX1yZXR1cm4gUS5tYXAoKFopPT5KLmdldChaKSl9ZnVuY3Rpb24gUzYoJCxRKXtsZXRbSixaXT1XKHt9KSxYPV8xKCgpPT5RLnNsaWNlKCkuc29ydCgpLmpvaW4oInwiKSxbUV0pO3JldHVybiB4KCgpPT57aWYoISQpcmV0dXJuO2xldCBZPSExO2ZvcihsZXQgcSBvZiBRKXtpZighcSljb250aW51ZTtsZXQgRz1gJHskfToke3F9YCxOPUoyLmdldChHKTtpZih0eXBlb2YgTj09PSJzdHJpbmcifHxOPT09bnVsbCl7WigoQik9PkJbcV09PT1OP0I6ey4uLkIsW3FdOk59KTtjb250aW51ZX1CNihBMSwkLHEpLnRoZW4oKEIpPT57aWYoWSlyZXR1cm47WigoVSk9Pih7Li4uVSxbcV06Qn0pKX0pfXJldHVybigpPT57WT0hMH19LFskLFhdKSxKfWZ1bmN0aW9uIHg2KHt1ZGlkOiQsdGFyZ2V0czpRLHNlbGVjdGVkOkosb25TZWxlY3RUYXJnZXQ6WixvblJlZnJlc2g6WH0pe2xldCBZPWI2KFEpLHE9WS5tYXAoKEMpPT5DLmJ1bmRsZUlkKS5maWx0ZXIoKEMpPT4hIUMpLEc9UzYoJCxxKSxbTixCXT1XKCExKSxbVSxWXT1XKG51bGwpLGs9YihudWxsKSxMPWIobnVsbCk7eCgoKT0+e2lmKCFOKXJldHVybjtsZXQgQz0oeik9PntpZighTC5jdXJyZW50KXJldHVybjtpZighTC5jdXJyZW50LmNvbnRhaW5zKHoudGFyZ2V0KSlCKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQyksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQyl9LFtOXSkseCgoKT0+e2lmKE4pcmV0dXJuO2lmKGsuY3VycmVudClqMihrLmN1cnJlbnQsITEpLGsuY3VycmVudD1udWxsO0kzKCl9LFtOXSkseCgoKT0+e2xldCBDPSgpPT5JMygpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEMpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEMpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixDKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixDKX19LFtdKTtsZXQgTT1KPyhKLnRpdGxlfHxKLnVybHx8Si5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKToiU2VsZWN0IHRhcmdldCI7cmV0dXJuIEsoImRpdiIse3JlZjpMLGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIG1pbi13LTAiLGNoaWxkcmVuOltLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntCKChDKT0+e2lmKCFDKVgoKTtyZXR1cm4hQ30pfSxjbGFzc05hbWU6InctZnVsbCBtaW4tdy0wIGgtWzI2cHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBiZy1wYW5lbCB0ZXh0LXdoaXRlLzkwIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1tZCB0ZXh0LVsxMnB4XSBweC0yIGN1cnNvci1wb2ludGVyIHRleHQtbGVmdCIsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6TiwiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBtaW4tdy0wIixjaGlsZHJlbjpNfSksSyhDMix7c2l6ZToxMixzdHJva2VXaWR0aDoyfSldfSksTiYmSygidWwiLHtyb2xlOiJsaXN0Ym94IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzRweCldIGxlZnQtMCBtLTAgcC0xIGxpc3Qtbm9uZSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gbWluLXctWzIyMHB4XSBtYXgtdy1bMzYwcHhdIG1heC1oLVszMjBweF0gb3ZlcmZsb3cteS1hdXRvIHotNTAiLGNoaWxkcmVuOlkubWFwKChDKT0+e2xldCB6PUMuYnVuZGxlSWQ/R1tDLmJ1bmRsZUlkXTpudWxsO3JldHVybiBLKCJsaSIse2NsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTEuNSBwdC0xIHBiLTAuNSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvWzAuOTJdIixjaGlsZHJlbjpbej9LKCJpbWciLHtzcmM6eixhbHQ6IiIsY2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIn0pOksoInNwYW4iLHtjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksSygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkMuYXBwTmFtZX0pXX0pLEsoInVsIix7cm9sZToiZ3JvdXAiLGNsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAgcGwtWzI2cHhdIixjaGlsZHJlbjpDLnRhcmdldHMubWFwKChBKT0+e2xldCBQPUo/LmlkPT09QS5pZCxSPSEhQS5pblVzZUJ5T3RoZXJJbnNwZWN0b3ImJiFQLEk9KEEudGl0bGV8fEEudXJsfHxBLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApLFQ9VT09PUEuaWQmJiFSLHk9ImZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdIjtyZXR1cm4gSygibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpQLCJhcmlhLWRpc2FibGVkIjpSLHRhYkluZGV4OlI/LTE6MCx0aXRsZTpSPyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYoUilyZXR1cm47aWYoay5jdXJyZW50JiZrLmN1cnJlbnQhPT1BLmlkKWoyKGsuY3VycmVudCwhMSk7ay5jdXJyZW50PUEuaWQsVihBLmlkKSxqMihBLmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoay5jdXJyZW50PT09QS5pZClqMihBLmlkLCExKSxrLmN1cnJlbnQ9bnVsbDtWKChtKT0+bT09PUEuaWQ/bnVsbDptKX0sb25DbGljazooKT0+e2lmKFIpcmV0dXJuO1ooQS5pZCksQighMSl9LGNsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0gJHtSPyJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBpdGFsaWMgdGV4dC13aGl0ZS84NSI6VD8iYmctW3JnYmEoMTAsMTMyLDI1NSwwLjIyKV0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6UD8iYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOiJ0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46SX0pLEEudXJsJiZBLnVybCE9PSJhYm91dDpibGFuayImJksoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlL1swLjQyXSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46QS51cmx9KV19LEEuaWQpfSl9KV19LEMua2V5KX0pfSldfSl9ZnVuY3Rpb24gdjYoe29wZW46JCxvbkNsb3NlOlEsdWRpZDpKLHRhcmdldHM6WixzZWxlY3RlZFRhcmdldElkOlgsb25TZWxlY3RUYXJnZXQ6WSxsb2FkaW5nOnEsZXJyb3I6RyxvblJlZnJlc2g6Tix3aWR0aDpCfSl7bGV0IFU9WD9aLmZpbmQoKFYpPT5WLmlkPT09WCk/P251bGw6bnVsbDtyZXR1cm4gSyhlMCx7b3BlbjokLHdpZHRoOkIsY2hpbGRyZW46W0soJDIse2NoaWxkcmVuOltaLmxlbmd0aD4wP0soeDYse3VkaWQ6Six0YXJnZXRzOlosc2VsZWN0ZWQ6VSxvblNlbGVjdFRhcmdldDpZLG9uUmVmcmVzaDpOfSk6Sygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS9bMC40OF0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOnE/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksSyh6NSx7b25DbGljazpRLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46Rz9LKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46R30pOlUmJiQ/SygiaWZyYW1lIix7c3JjOlUuZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtVLnRpdGxlfHxVLnVybHx8VS5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOihWKT0+eTYoVi5jdXJyZW50VGFyZ2V0KX0sVS5pZCk6SygiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOlU/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24geVEoe2hvc3RQYXRoOiQsZXhlYzpRLHVkaWQ6SixvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6cX0pe3E/LigkKTtsZXQgRz0kLnNwbGl0KCIvIikucG9wKCk/PyJpbWFnZSIsTj1aKEcsIm1lZGlhIik7cmV0dXJuIFgoTixudWxsKSxGNigkLFEsSikudGhlbigoKT0+WShOLCEwKSkuY2F0Y2goKEIpPT5ZKE4sITEsQiBpbnN0YW5jZW9mIEVycm9yP0IubWVzc2FnZToiQWRkIGZhaWxlZCIpKX1mdW5jdGlvbiBqNih7ZXhlYzokLHVkaWQ6USxlbmFibGVkOkosb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6WCxvblVwbG9hZEVuZDpZLG9uVW5zdXBwb3J0ZWQ6cSxvbkhvc3RQYXRoRHJvcDpHfSl7bGV0W04sQl09VyghMSksVT1iKDApLFY9RShhc3luYyhDKT0+e2lmKEMucHJldmVudERlZmF1bHQoKSxDLnN0b3BQcm9wYWdhdGlvbigpLFUuY3VycmVudD0wLEIoITEpLCFKfHwhUSlyZXR1cm47bGV0IHo9Qy5kYXRhVHJhbnNmZXIuZ2V0RGF0YShfNSk7aWYoeil7eVEoe2hvc3RQYXRoOnosZXhlYzokLHVkaWQ6USxvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6R30pO3JldHVybn1sZXQgQT1BcnJheS5mcm9tKEMuZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihBLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgUCBvZiBBKXtsZXQgUj1rNihQKTtpZighUil7cShQKTtjb250aW51ZX1sZXQgST1aKFAubmFtZSxSKTtPNihQLFIsJCxRLChUKT0+WChJLFQpKS50aGVuKCgpPT5ZKEksITApKS5jYXRjaCgoVCk9PlkoSSwhMSxUIGluc3RhbmNlb2YgRXJyb3I/VC5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW0osUSwkLFosWCxZLHEsR10pLGs9RSgoQyk9PntpZihDLnByZXZlbnREZWZhdWx0KCksSilDLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW0pdKSxMPUUoKEMpPT57aWYoQy5wcmV2ZW50RGVmYXVsdCgpLCFKKXJldHVybjtpZihVLmN1cnJlbnQrKyxVLmN1cnJlbnQ9PT0xKUIoITApfSxbSl0pLE09RSgoQyk9PntpZihDLnByZXZlbnREZWZhdWx0KCksVS5jdXJyZW50LS0sVS5jdXJyZW50PD0wKVUuY3VycmVudD0wLEIoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6Tixkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOmssb25EcmFnRW50ZXI6TCxvbkRyYWdMZWF2ZTpNLG9uRHJvcDpWfX19ZnVuY3Rpb24gUjYoJCl7bGV0IFE9YihuZXcgU2V0KSxKPUUoKFopPT57cmV0dXJuIFEuY3VycmVudC5hZGQoWiksKCk9PntRLmN1cnJlbnQuZGVsZXRlKFopfX0sW10pO3JldHVybiB4KCgpPT57aWYoISQpcmV0dXJuO2xldCBaPW5ldyBBYm9ydENvbnRyb2xsZXIsWD0hMSxZPW51bGwscT1uZXcgVVJMKCQpO3Euc2VhcmNoUGFyYW1zLnNldCgicmF3IiwiMSIpO2xldCBHPXEudG9TdHJpbmcoKSxOPSgpPT57aWYoWHx8Wi5zaWduYWwuYWJvcnRlZHx8WSlyZXR1cm47WT1zZXRUaW1lb3V0KCgpPT57WT1udWxsLFUoKX0sMTAwMCl9LEI9KFYpPT57aWYoUS5jdXJyZW50LnNpemU9PT0wKXJldHVybjtsZXQgaz1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtWXSx7dHlwZToiaW1hZ2UvanBlZyJ9KSk7Zm9yKGxldCBMIG9mIFEuY3VycmVudClMKGspfSxVPWFzeW5jKCk9Pnt0cnl7bGV0IGs9KGF3YWl0IGZldGNoKEcse3NpZ25hbDpaLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighayl7TigpO3JldHVybn1sZXQgTD1uZXcgVWludDhBcnJheSgwKSxNPTAsQz0xMDI0LHo9KFQseSk9PntsZXQgYz1NYXRoLm1pbihULmxlbmd0aC00LHkrQyk7Zm9yKGxldCBtPXk7bTw9YzttKyspaWYoVFttXT09PTEzJiZUW20rMV09PT0xMCYmVFttKzJdPT09MTMmJlRbbSszXT09PTEwKXJldHVybiBtO3JldHVybi0xfSxBPW5ldyBUZXh0RGVjb2RlcigibGF0aW4xIiksUD0oVCx5LGMpPT57bGV0IG09QS5kZWNvZGUoVC5zdWJhcnJheSh5LGMpKSxmPS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMobSk7cmV0dXJuIGY/TnVtYmVyKGZbMV0pOm51bGx9LFI9KFQseSk9PntsZXQgYz0tMTtmb3IobGV0IG09eTttPFQubGVuZ3RoLTE7bSsrKWlmKFRbbV09PT0yNTUmJlRbbSsxXT09PTIxNil7Yz1tO2JyZWFrfWlmKGM9PT0tMSlyZXR1cm4gbnVsbDtmb3IobGV0IG09YysyO208VC5sZW5ndGgtMTttKyspaWYoVFttXT09PTI1NSYmVFttKzFdPT09MjE3KXJldHVybntzOmMsZTptKzJ9O3JldHVybiBudWxsfSxJPSgpPT57d2hpbGUoTTxMLmxlbmd0aCl7bGV0IFQ9eihMLE0pO2lmKFQ+PTApe2xldCBjPVAoTCxNLFQpO2lmKGMhPW51bGwmJmM+MCl7bGV0IG09VCs0LGY9bStjO2lmKEwubGVuZ3RoPGYpYnJlYWs7QihMLnN1YmFycmF5KG0sZikpLE09Zjtjb250aW51ZX19ZWxzZSBpZihMLmxlbmd0aC1NPD1DKWJyZWFrO2xldCB5PVIoTCxNKTtpZigheSlicmVhaztCKEwuc3ViYXJyYXkoeS5zLHkuZSkpLE09eS5lfWlmKE0+MClMPU08TC5sZW5ndGg/TC5zbGljZShNKTpuZXcgVWludDhBcnJheSgwKSxNPTB9O3doaWxlKCEwKXtsZXR7ZG9uZTpULHZhbHVlOnl9PWF3YWl0IGsucmVhZCgpO2lmKFQpYnJlYWs7aWYoeSYmeS5sZW5ndGgpe2xldCBjPW5ldyBVaW50OEFycmF5KEwubGVuZ3RoK3kubGVuZ3RoKTtjLnNldChMKSxjLnNldCh5LEwubGVuZ3RoKSxMPWMsSSgpfX19Y2F0Y2h7fWZpbmFsbHl7TigpfX07cmV0dXJuIFUoKSwoKT0+e2lmKFg9ITAsWSljbGVhclRpbWVvdXQoWSk7Wi5hYm9ydCgpfX0sWyRdKSx7c3Vic2NyaWJlRnJhbWU6SixmcmFtZTpudWxsfX1mdW5jdGlvbiBnNigpe2xldFskXT1XKHgwKTtyZXR1cm57c3VwcG9ydGVkOiR9fWZ1bmN0aW9uIFA1KCQsUSxKLFosWD0ibGVmdCIpe2xldCBZPUUoKGssTCk9Plg9PT0ibGVmdCI/ay1MOkwtayxbWF0pLHE9RSgoayk9Pk1hdGgubWF4KEosTWF0aC5taW4oWixrKSksW0osWl0pLFtHLE5dPVcoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gUTtsZXQgaz13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJCksTD1rIT1udWxsP051bWJlcihrKTpOYU47cmV0dXJuIE51bWJlci5pc0Zpbml0ZShMKT9xKEwpOlF9KSxCPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWluKFosd2luZG93LmlubmVyV2lkdGgtMzIpOlosVT1NYXRoLm1heChKLE1hdGgubWluKEIsRykpLFY9RSgoayk9PntrLnByZXZlbnREZWZhdWx0KCk7bGV0IEw9ay5jbGllbnRYLE09VSxDPWsuY3VycmVudFRhcmdldDtDLnNldFBvaW50ZXJDYXB0dXJlKGsucG9pbnRlcklkKTtsZXQgej0oUCk9PntsZXQgUj1xKE0rWShMLFAuY2xpZW50WCkpO04oUil9LEE9KFApPT57Qy5yZWxlYXNlUG9pbnRlckNhcHR1cmUoUC5wb2ludGVySWQpLEMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHopLEMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixBKSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEEpO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJCxTdHJpbmcocShNK1koTCxQLmNsaWVudFgpKSkpfWNhdGNoe319O0MuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHopLEMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixBKSxDLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEEpfSxbcSxZLFUsJF0pO3JldHVybnt3aWR0aDpVLG9uUG9pbnRlckRvd246Vn19dmFyIGJRPTgwMDA7ZnVuY3Rpb24gU1EoJCl7cmV0dXJuImZpbGU6Ly8iKyQuc3BsaXQoIi8iKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCIvIil9ZnVuY3Rpb24geFEoJCl7cmV0dXJuICQhPT0ibm9uZSJ9ZnVuY3Rpb24gaDYoe3RvYXN0OiQsb25SZXZlYWw6USxvbkRpc21pc3M6SixvblBhdXNlOlosb25SZXN1bWU6WH0pe2xldFtZLHFdPVcoITEpLEc9YihudWxsKSxOPWIobnVsbCksQj0oKT0+e2lmKE4uY3VycmVudCljbGVhclRpbWVvdXQoTi5jdXJyZW50KTtOLmN1cnJlbnQ9bnVsbH07eCgoKT0+KCk9PkIoKSxbXSk7bGV0IFU9KGspPT57aWYoISQucGF0aCl7ay5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1CKCksWigpLE4uY3VycmVudD1zZXRUaW1lb3V0KCgpPT57Ti5jdXJyZW50PW51bGwscSghMSksWCgpfSxiUSksay5kYXRhVHJhbnNmZXIuc2V0RGF0YSgidGV4dC9wbGFpbiIsU1EoJC5wYXRoKSksay5kYXRhVHJhbnNmZXIuc2V0RGF0YShfNSwkLnBhdGgpLGsuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9ImNvcHkiO2xldCBMPUcuY3VycmVudDtpZihMKWsuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShMLEwub2Zmc2V0V2lkdGgvMixMLm9mZnNldEhlaWdodC8yKTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnEoITApKX0sVj0oayk9PntpZihCKCkscSghMSkseFEoay5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCkpSigpO2Vsc2UgWCgpfTtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoic2NyZWVuc2hvdC10b2FzdCIsY2xhc3NOYW1lOiJ3LVttaW4oMzIwcHgsY2FsYygxMDB2dy0zMnB4KSldIixvbk1vdXNlRW50ZXI6Wixvbk1vdXNlTGVhdmU6WCxjaGlsZHJlbjpbJC50aHVtYiYmSygiaW1nIix7cmVmOkcsImRhdGEtdGVzdGlkIjoiZHJhZy1pbWFnZSIsc3JjOiQudGh1bWIsYWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDotOTk5OSxsZWZ0OjAsd2lkdGg6ODAsaGVpZ2h0OjgwLGJvcmRlclJhZGl1czoxMixvYmplY3RGaXQ6ImNvdmVyIixwb2ludGVyRXZlbnRzOiJub25lIn19KSwkLnN0YXR1cz09PSJlcnJvciI/SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0zLjUgcHktMi41IGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBiZy1bI2Y4NzE3MV0ifSksSygic3BhbiIse2NsYXNzTmFtZToic2VsZWN0LXRleHQiLGNoaWxkcmVuOiQubWVzc2FnZT8/IlNjcmVlbnNob3QgZmFpbGVkIn0pXX0pOksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpRLGRpc2FibGVkOiQuc3RhdHVzIT09InNhdmVkIixkcmFnZ2FibGU6JC5zdGF0dXM9PT0ic2F2ZWQiLG9uRHJhZ1N0YXJ0OlUsb25EcmFnRW5kOlYsImFyaWEtbGFiZWwiOiJPcGVuIHNjcmVlbnNob3QgaW4gRmluZGVyIix0aXRsZToiQ2xpY2sgdG8gcmV2ZWFsIGluIEZpbmRlciDCtyBkcmFnIHRvIGNvcHkgdGhlIGZpbGUiLGNsYXNzTmFtZTpgZ3JvdXAgZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0zIHBsLTIgcHItMy41IHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLXhsIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSB0ZXh0LWxlZnQgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy1bIzJhMmEyY10gZGlzYWJsZWQ6Y3Vyc29yLWRlZmF1bHQgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlXSAke1k/ImludmlzaWJsZSI6IiJ9YCxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJzaXplLTkgcm91bmRlZC1tZCBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGUvMTAgc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcmluZy0xIHJpbmctd2hpdGUvMTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC50aHVtYj9LKCJpbWciLHtzcmM6JC50aHVtYixhbHQ6IiIsY2xhc3NOYW1lOiJzaXplLWZ1bGwgb2JqZWN0LWNvdmVyIixkcmFnZ2FibGU6ITF9KTpLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBzaXplLTQgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8zMCBib3JkZXItdC13aGl0ZSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIn0pfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGxlYWRpbmctdGlnaHQgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSIsY2hpbGRyZW46JC5zdGF0dXM9PT0ic2F2aW5nIj8iU2F2aW5nIFNjcmVlbnNob3TigKYiOiJTY3JlZW5zaG90IFNhdmVkIn0pLCQuc3RhdHVzPT09InNhdmVkIiYmSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS82MCIsY2hpbGRyZW46Ik9wZW4gaW4gRmluZGVyIn0pXX0pLCQuc3RhdHVzPT09InNhdmVkIiYmSyhIMix7Y2xhc3NOYW1lOiJtbC1hdXRvIHRleHQtd2hpdGUvODAgcG9pbnRlci1ldmVudHMtbm9uZSIsc2l6ZToxNixzdHJva2VXaWR0aDoyLjI1fSldfSldfSl9dmFyIGY2PTM1MDAsbTY9NDAwMDtmdW5jdGlvbiB2USgpe3JldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCItIikuc2xpY2UoMCwyMyl9ZnVuY3Rpb24gcDYoJCl7bGV0IFE9YihudWxsKSxKPWIobnVsbCksWj1iKG51bGwpLFg9YihudWxsKSxZPWIobnVsbCkscT1FKCgpPT57aWYoWi5jdXJyZW50KWNsZWFyVGltZW91dChaLmN1cnJlbnQpO1ouY3VycmVudD1udWxsLFguY3VycmVudD1udWxsfSxbXSksRz1FKChNKT0+e2xldCBDPU0/P0ouY3VycmVudD8/dm9pZCAwO2lmKHEoKSxZLmN1cnJlbnQ9bnVsbCxiMi5kaXNtaXNzKEMpLEM9PT12b2lkIDB8fEouY3VycmVudD09PVN0cmluZyhDKSlRLmN1cnJlbnQ9bnVsbCxKLmN1cnJlbnQ9bnVsbH0sW3FdKSxOPUUoKCk9PntsZXQgTT1RLmN1cnJlbnQ7aWYoTT8ucGF0aClBMShgb3BlbiAtUiAke1UxKE0ucGF0aCl9YCl9LFtdKSxCPUUoKE0pPT57cSgpO2xldCBDPU1hdGgubWF4KDAsTSksej1KLmN1cnJlbnQ7WS5jdXJyZW50PUMsWC5jdXJyZW50PURhdGUubm93KCkrQyxaLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+Ryh6Pz92b2lkIDApLEMpfSxbcSxHXSksVT1FKCgpPT57aWYoIVouY3VycmVudHx8WC5jdXJyZW50PT1udWxsKXJldHVybjtZLmN1cnJlbnQ9TWF0aC5tYXgoMCxYLmN1cnJlbnQtRGF0ZS5ub3coKSkscSgpfSxbcV0pLFY9RSgoKT0+e2xldCBNPVkuY3VycmVudDtpZihNPT1udWxsKXJldHVybjtCKE0pfSxbQl0pLGs9RSgoTSxDPTEvMCk9PntpZihRLmN1cnJlbnQ9TSxKLmN1cnJlbnQ9TS5pZCxiMi5jdXN0b20oKHopPT5LKGg2LHt0b2FzdDpNLG9uUmV2ZWFsOk4sb25EaXNtaXNzOigpPT5HKHopLG9uUGF1c2U6VSxvblJlc3VtZTpWfSkse2lkOk0uaWQsZHVyYXRpb246MS8wfSksTnVtYmVyLmlzRmluaXRlKEMpKUIoQyk7ZWxzZSBxKCksWS5jdXJyZW50PW51bGx9LFtxLEcsVSxWLE4sQl0pO3JldHVybntjYXB0dXJlOkUoYXN5bmMoKT0+e2lmKCEkKXJldHVybjtsZXQgTT1jcnlwdG8ucmFuZG9tVVVJRCgpO2soe2lkOk0sc3RhdHVzOiJzYXZpbmciLHBoYXNlOiJpbiJ9KTtsZXQgej1gRj0iJHtgJEhPTUUvRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0ke3ZRKCl9LnBuZ2B9IjsgeGNydW4gc2ltY3RsIGlvICR7VTEoJCl9IHNjcmVlbnNob3QgIiRGIiAmJiBwcmludGYgJyVzJyAiJEYiYCxBO3RyeXtsZXQgUj1hd2FpdCBBMSh6KTtpZihBPVIuc3Rkb3V0LnRyaW0oKSxSLmV4aXRDb2RlIT09MHx8IUEpe2soe2lkOk0sc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOlIuc3RkZXJyLnRyaW0oKXx8IlNjcmVlbnNob3QgZmFpbGVkIn0sbTYpO3JldHVybn19Y2F0Y2goUil7ayh7aWQ6TSxzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6UiBpbnN0YW5jZW9mIEVycm9yP1IubWVzc2FnZToiU2NyZWVuc2hvdCBmYWlsZWQifSxtNik7cmV0dXJufWsoe2lkOk0sc3RhdHVzOiJzYXZlZCIscGhhc2U6ImluIixwYXRoOkF9LGY2KTtsZXQgUD1gL3RtcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC10aHVtYi0ke019LnBuZ2A7dHJ5e2xldCBJPShhd2FpdCBBMShgc2lwcyAtWiAzMjAgJHtVMShBKX0gLS1vdXQgJHtVMShQKX0gPi9kZXYvbnVsbCAyPiYxICYmIGJhc2U2NCAtaSAke1UxKFApfTsgcm0gLWYgJHtVMShQKX1gKSkuc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKTtpZihJKXtsZXQgVD1RLmN1cnJlbnQ7aWYoVD8uaWQ9PT1NKWsoey4uLlQsdGh1bWI6YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke0l9YH0sZjYpfX1jYXRjaHt9fSxbJCxrXSkscmV2ZWFsOk4sZGlzbWlzczpHfX1mdW5jdGlvbiBsNih7ZGVmYXVsdFdpZHRoOiQsdmlld3BvcnRXaWR0aDpRLHZpZXdwb3J0SGVpZ2h0OkosYXNwZWN0UmF0aW86WixvblN0YXJ0Olh9KXtsZXQgWT1INSgpLFtxLEddPVcoITEpLFtOLEJdPVcoITEpLFtVLFZdPVcoITEpLGs9YihudWxsKSxMPWIoW10pLE09YihudWxsKSxDPWIobnVsbCksej1iKG51bGwpLEE9YihudWxsKSxQPUUoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gJDtsZXQgTz1OYU47dHJ5e2xldCBTPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShDMyk7Tz1TIT1udWxsP051bWJlcihTKTpOYU59Y2F0Y2h7fXJldHVybiB1OSgkLFEsSixaLE8pfSxbWiwkLEosUV0pLFI9XzEoKCk9PlAoKSxbUF0pLFtJLFRdPVcoUikseT1iKFIpLGM9YigkKSxtPUgzKCQsUSxKLFopLGY9TWF0aC5taW4oUDksbSksdT1JPz8kLHoxPVIwKHUsJCxRLEosWiksUTE9RSgoTyk9PntsZXQgUz1BNShPKTt5LmN1cnJlbnQ9UyxUKFMpfSxbXSksbj1FKChPKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwkPD0wKXJldHVybjtsZXQgUz1SMChPLCQsUSxKLFopO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oQzMsU3RyaW5nKFMvJCkpfWNhdGNoe319LFtaLCQsSixRXSksTDE9RSgoTyk9PntpZih6LmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KHouY3VycmVudCk7ei5jdXJyZW50PXNldFRpbWVvdXQoKCk9Pnt6LmN1cnJlbnQ9bnVsbCxuKE8pfSxwOSl9LFtuXSk7eCgoKT0+e2lmKHF8fE4pcmV0dXJuO2xldCBPPXkuY3VycmVudDtpZihPPT1udWxsKXJldHVybjtsZXQgUz1SMChPLCQsUSxKLFopO2lmKFMhPT1PKVExKFMpfSxbWiwkLE4scSxKLFEsUTFdKSx4KCgpPT57aWYoYy5jdXJyZW50PT09JClyZXR1cm47Yy5jdXJyZW50PSQsUTEoUCgpKX0sWyQsUCxRMV0pLHgoKCk9PntpZighcSYmIU4pcmV0dXJuO2xldCBPPWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yLFM9ZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0LGk9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0O3JldHVybiBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0ibndzZS1yZXNpemUiLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIiwoKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPU8sZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PVMsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PWl9fSxbcSxOXSkseCgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgTz0oKT0+e2xldCBpPXkuY3VycmVudDtpZihpPT1udWxsKXJldHVybjtpZih6LmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KHouY3VycmVudCksei5jdXJyZW50PW51bGw7bihpKX0sUz0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKU8oKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLE8pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFMpfX0sW25dKTtsZXQgbD1FKChPKT0+e2lmKE8+bSlyZXR1cm4gbStGMyhPLW0sbSk7aWYoTzxmKXJldHVybiBmLUYzKGYtTyxtKTtyZXR1cm4gT30sW20sZl0pLGo9RSgoKT0+e2lmKEMuY3VycmVudClDLmN1cnJlbnQoKSxDLmN1cnJlbnQ9bnVsbDtCKCExKX0sW10pLEsxPUUoKE8pPT57bGV0IFM9cGVyZm9ybWFuY2Uubm93KCksaT1MLmN1cnJlbnQ7aS5wdXNoKHt0OlMseDpPfSk7d2hpbGUoaS5sZW5ndGg+MSYmUy1pWzBdLnQ+bTkpaS5zaGlmdCgpfSxbXSksQjE9RSgoTyk9PntsZXQgUz1sKE8pO2lmKE0uY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShNLmN1cnJlbnQpO00uY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntNLmN1cnJlbnQ9bnVsbCxRMShTKSxLMShTKX0pfSxbbCxLMSxRMV0pLFYxPUUoKE8sUyxpKT0+e2ooKTtsZXQgcj15LmN1cnJlbnQ/PyQ7ay5jdXJyZW50PXtwb2ludGVySWQ6TyxzdGFydFg6UyxzdGFydFk6aSxzdGFydFdpZHRoOnJ9LEwuY3VycmVudD1be3Q6cGVyZm9ybWFuY2Uubm93KCkseDpyfV0sWCgpLEcoITApfSxbaiwkLFhdKSxlPUUoKCk9PntsZXQgTz1rLmN1cnJlbnQ7aWYoay5jdXJyZW50PW51bGwsTS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKE0uY3VycmVudCksTS5jdXJyZW50PW51bGw7aWYoTyYmTy5wb2ludGVySWQ+PTApe2xldCB5MT1BLmN1cnJlbnQ7aWYoeTE/Lmhhc1BvaW50ZXJDYXB0dXJlKE8ucG9pbnRlcklkKSl5MS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoTy5wb2ludGVySWQpfUcoITEpO2xldCBTPXkuY3VycmVudD8/JCxpPWM5KEwuY3VycmVudCk7TC5jdXJyZW50PVtdO2xldCByPVIwKFMraSpmOSwkLFEsSixaKSxxMT1BNShsOShyLFskXSxSOSkpLFoxPU1hdGguYWJzKFMtcTEpPDAuNSYmTWF0aC5hYnMoaSk8ODtpZihZfHxaMSl7UTEocTEpLEwxKHExKTtyZXR1cm59QighMCksQy5jdXJyZW50PWQ5KHtmcm9tOlMsdG86cTEsdmVsb2NpdHk6aSxzdGlmZm5lc3M6ZzksZGFtcGluZzpoOSxvblVwZGF0ZTpRMSxvbkNvbXBsZXRlOigpPT57Qy5jdXJyZW50PW51bGwsQighMSksTDEocTEpfX0pfSxbWiwkLFksTDEsSixRLFExXSk7eCgoKT0+e3JldHVybigpPT57aWYoaigpLE0uY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShNLmN1cnJlbnQpO2lmKHouY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KHouY3VycmVudCkseS5jdXJyZW50IT1udWxsKW4oeS5jdXJyZW50KX19fSxbaixuXSkseCgoKT0+e2lmKCFxKXJldHVybjtsZXQgTz0oKT0+ZSgpLFM9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIillKCl9LGk9KHIpPT57bGV0IHExPWsuY3VycmVudDtpZighcTF8fHExLnBvaW50ZXJJZCE9PXIucG9pbnRlcklkKXJldHVybjtyLnByZXZlbnREZWZhdWx0KCksQjEodTYocTEsci5jbGllbnRYLHIuY2xpZW50WSxaKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsTyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixpLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixPLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsTywhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsTyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixpLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixPLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsTywhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUyl9fSxbWixlLHEsQjFdKTtsZXQgWDE9RSgoTyk9PntsZXQgUz1rLmN1cnJlbnQ7aWYoIVN8fFMucG9pbnRlcklkIT09Ty5wb2ludGVySWQpcmV0dXJuO08ucHJldmVudERlZmF1bHQoKSxPLnN0b3BQcm9wYWdhdGlvbigpLGUoKX0sW2VdKSxOMT1FKChPKT0+e2lmKE8uYnV0dG9uIT09MClyZXR1cm47Ty5wcmV2ZW50RGVmYXVsdCgpLE8uc3RvcFByb3BhZ2F0aW9uKCksTy5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKE8ucG9pbnRlcklkKSxWMShPLnBvaW50ZXJJZCxPLmNsaWVudFgsTy5jbGllbnRZKX0sW1YxXSksdj1FKChPKT0+e2xldCBTPWsuY3VycmVudDtpZighU3x8Uy5wb2ludGVySWQhPT1PLnBvaW50ZXJJZClyZXR1cm47Ty5wcmV2ZW50RGVmYXVsdCgpLEIxKHU2KFMsTy5jbGllbnRYLE8uY2xpZW50WSxaKSl9LFtaLEIxXSksZz1FKChPKT0+e2xldCBTPU8ua2V5PT09IkFycm93UmlnaHQifHxPLmtleT09PSJBcnJvd0Rvd24iPzE6Ty5rZXk9PT0iQXJyb3dMZWZ0Inx8Ty5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihTPT09MClyZXR1cm47Ty5wcmV2ZW50RGVmYXVsdCgpLGooKTtsZXQgaT1PLnNoaWZ0S2V5PzgwOjI0LHI9QTUoUjAoejErUyppLCQsUSxKLFopKTtRMShyKSxMMShyKX0sW1osaix6MSwkLEwxLEosUSxRMV0pO3JldHVybntoYW5kbGVSZWY6QSx3aWR0aDp1LGNvbW1pdHRlZFdpZHRoOnoxLG1pbldpZHRoOmYsbWF4V2lkdGg6bSxpc1Jlc2l6aW5nOnEsaXNJbmVydGlhOk4saGFuZGxlSG92ZXJlZDpVLGhhbmRsZUFjdGl2ZTpVfHxxfHxOLHNldEhhbmRsZUhvdmVyZWQ6VixvblBvaW50ZXJEb3duOk4xLG9uUG9pbnRlck1vdmU6dixvblBvaW50ZXJFbmQ6WDEsb25LZXlEb3duOmd9fWZ1bmN0aW9uIHU2KCQsUSxKLFope2xldCBYPVEtJC5zdGFydFgsWT0oSi0kLnN0YXJ0WSkqWjtyZXR1cm4gJC5zdGFydFdpZHRoKyhNYXRoLmFicyhYKT49TWF0aC5hYnMoWSk/WDpZKX1mdW5jdGlvbiBkNigpe2xldCAkPWIobmV3IE1hcCksUT1iKG5ldyBNYXApLEo9RSgoRyk9PntsZXQgTj1RLmN1cnJlbnQuZ2V0KEcpO2lmKE4pY2xlYXJUaW1lb3V0KE4pO1EuY3VycmVudC5kZWxldGUoRyl9LFtdKSxaPUUoKEcsTj0xLzApPT57YjIuY3VzdG9tKCgpPT5LKGU5LHt0b2FzdDpHfSkse2lkOkcuaWQsZHVyYXRpb246Tn0pfSxbXSksWD1FKChHLE4pPT57bGV0IEI9Y3J5cHRvLnJhbmRvbVVVSUQoKSxVPXtpZDpCLG5hbWU6RyxraW5kOk4sc3RhdHVzOiJ1cGxvYWRpbmciLHByb2dyZXNzOjB9O3JldHVybiAkLmN1cnJlbnQuc2V0KEIsVSksWihVKSxCfSxbWl0pLFk9RSgoRyxOKT0+e2xldCBCPSQuY3VycmVudC5nZXQoRyk7aWYoIUIpcmV0dXJuO0ooRyk7bGV0IFU9ey4uLkIsLi4uTn07aWYoJC5jdXJyZW50LnNldChHLFUpLFooVSxOLnN0YXR1cz09PSJzdWNjZXNzInx8Ti5zdGF0dXM9PT0iZXJyb3IiPzMwMDA6MS8wKSxOLnN0YXR1cz09PSJzdWNjZXNzInx8Ti5zdGF0dXM9PT0iZXJyb3IiKXtsZXQgVj1zZXRUaW1lb3V0KCgpPT57JC5jdXJyZW50LmRlbGV0ZShHKSxRLmN1cnJlbnQuZGVsZXRlKEcpfSwzMDAwKTtRLmN1cnJlbnQuc2V0KEcsVil9fSxbSixaXSkscT1FKChHLE4pPT57bGV0IEI9JC5jdXJyZW50LmdldChHKTtpZighQilyZXR1cm47bGV0IFU9ey4uLkIscHJvZ3Jlc3M6Tn07JC5jdXJyZW50LnNldChHLFUpLFooVSl9LFtaXSk7cmV0dXJue2FkZDpYLHVwZGF0ZTpZLHNldFByb2dyZXNzOnF9fWZ1bmN0aW9uIGM2KCQsUSl7bGV0W0osWl09VyhbXSksW1gsWV09VyhudWxsKSxbcSxHXT1XKCExKSxOPUUoYXN5bmMoKT0+e2lmKCEkKXJldHVybjtHKCEwKSxZKG51bGwpO3RyeXtsZXQgQj1hd2FpdCBmZXRjaCgkLHtjYWNoZToibm8tc3RvcmUifSksVT1hd2FpdCBCLmpzb24oKTtpZighQi5va3x8VS5lcnJvcil0aHJvdyBFcnJvcihVLmVycm9yfHwiRmFpbGVkIHRvIGxpc3QgV2ViS2l0IHRhcmdldHMiKTtsZXQgVj10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdy5sb2NhdGlvbixrPVUudGFyZ2V0cz8/W107WihWP2subWFwKChMKT0+STYoTCxWKSk6ayl9Y2F0Y2goQil7WShCIGluc3RhbmNlb2YgRXJyb3I/Qi5tZXNzYWdlOiJGYWlsZWQgdG8gc3RhcnQgV2ViS2l0IERldlRvb2xzIil9ZmluYWxseXtHKCExKX19LFskXSk7cmV0dXJuIHgoKCk9PntpZighUSlyZXR1cm47TigpO2xldCBCPXNldEludGVydmFsKCgpPT52b2lkIE4oKSwyNTAwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChCKX0sW1EsTl0pLHt0YXJnZXRzOkosZXJyb3I6WCxsb2FkaW5nOnEscmVmcmVzaDpOfX1mdW5jdGlvbiByNigkLFEsSil7bGV0W1osWF09VyhudWxsKSxbWSxxXT1XKDApO3goKCk9PntpZighUXx8ISQpcmV0dXJuO2xldCBOPSExLEI9YXN5bmMoKT0+e3RyeXtsZXQgaz1hd2FpdChhd2FpdCBmZXRjaCgkLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighTilYKGsuZGV2aWNlcz8/W10pfWNhdGNoe2lmKCFOKVgoW10pfX07QigpO2xldCBVPXNldEludGVydmFsKEIsSj83NTA6MzAwMCk7cmV0dXJuKCk9PntOPSEwLGNsZWFySW50ZXJ2YWwoVSl9fSxbJCxRLFksSl0pO2xldCBHPUUoKCk9PnEoKE4pPT5OKzEpLFtdKTtyZXR1cm57ZGV2aWNlczpaLHJlZnJlc2g6R319dmFyIHkzPXtzdHJlYW1lZDohMSxmZWxsQmFjazohMX07ZnVuY3Rpb24gbzYoJCxRKXtzd2l0Y2goUSl7Y2FzZSJmcmFtZSI6cmV0dXJuICQuc3RyZWFtZWQ/JDp7Li4uJCxzdHJlYW1lZDohMH07Y2FzZSJ0aW1lb3V0IjpyZXR1cm4gJC5zdHJlYW1lZHx8JC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlImVycm9yIjpyZXR1cm4gJC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlInJlc2V0IjpyZXR1cm4geTN9fXZhciBpNj00MDAwO3ZhciBqUT17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gbjYoJCl7cmV0dXJuIGpRWyRdPz9udWxsfXZhciBiMz0zMjAsYTY9NzYwLFMzPTMwMDtmdW5jdGlvbiB4MygkLFEpe2lmKCEkKXJldHVybiBudWxsO2lmKCEkLmRldmljZSlyZXR1cm4gJDtpZighJC5wcm94eUhlbHBlcnMpcmV0dXJuICQ7bGV0IFo9YCR7JC5iYXNlUGF0aD09PSIvIj8iIjooJC5iYXNlUGF0aD8/IiIpLnJlcGxhY2UoL1wvKyQvLCIiKX0vaGVscGVyLyR7ZW5jb2RlVVJJQ29tcG9uZW50KCQuZGV2aWNlKX1gLFg9YCR7US5wcm90b2NvbH0vLyR7US5ob3N0fWAsWT1RLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiO3JldHVybnsuLi4kLHVybDpgJHtYfSR7Wn1gLHN0cmVhbVVybDpgJHtYfSR7Wn0vc3RyZWFtLm1qcGVnYCx3c1VybDpgJHtZfS8vJHtRLmhvc3R9JHtafS93c2B9fWZ1bmN0aW9uIHM2KCQsUSl7bGV0IEo9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEpKSxaPW5ldyBVaW50OEFycmF5KDErSi5sZW5ndGgpO3JldHVybiBaWzBdPSQsWi5zZXQoSiwxKSxafWZ1bmN0aW9uIFJRKCQsUSxKPTMyKXtsZXQgWj1bLi4uJCxRXTtyZXR1cm4gWi5sZW5ndGg+Sj9aLnNsaWNlKFoubGVuZ3RoLUopOlp9ZnVuY3Rpb24gdjMoJCxRLEo9RGF0ZS5ub3coKSxaPTE1MDApe2xldCBYPVEuZmlsdGVyKChZKT0+Si1ZLmNyZWF0ZWRBdDw9Wik7aWYoISR8fCQucmVhZHlTdGF0ZSE9PTEpcmV0dXJuIFg7Zm9yKGxldCBZIG9mIFgpJC5zZW5kKHM2KFkudGFnLFkucGF5bG9hZCkuYnVmZmVyKTtyZXR1cm5bXX1mdW5jdGlvbiB0NigkLFEsSixaLFg9RGF0ZS5ub3coKSl7bGV0IFk9djMoJCxRLFgpO2lmKCQ/LnJlYWR5U3RhdGU9PT0xKXJldHVybiAkLnNlbmQoczYoSixaKS5idWZmZXIpLFk7cmV0dXJuIFJRKFkse3RhZzpKLHBheWxvYWQ6WixjcmVhdGVkQXQ6WH0pfXZhciBnUT17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxoUT17cG9ydHJhaXQ6ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXQifTtmdW5jdGlvbiBlNigkKXtyZXR1cm4gJD9gJHskLmRldmljZX06JHskLnBpZH06JHskLnN0cmVhbVVybH06JHskLndzVXJsfWA6IiJ9ZnVuY3Rpb24gZlEoKXtsZXRbJCxRXT1XKCgpPT54MyhFMih3aW5kb3cuX19TSU1fUFJFVklFV19fKSx3aW5kb3cubG9jYXRpb24pKSxbSixaXT1XKCExKSxbWCxZXT1XKCgpPT57bGV0IGc9RTIod2luZG93Ll9fU0lNX1BSRVZJRVdfXyk7aWYoZylyZXR1cm4gZy5kZXZpY2U7cmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJkZXZpY2UiKX0pLFtxLEddPVcoITEpLFtOLEJdPVcoITEpLFtVLFZdPVcoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PVMzKzUyMH0pLHt3aWR0aDprLG9uUG9pbnRlckRvd246TH09UDUoInNlcnZlLXNpbTpkZXZpY2Utc2lkZWJhci13aWR0aCIsUzMsMjQwLDY0MCwicmlnaHQiKSxbTSxDXT1XKG51bGwpLHo9d2luZG93Ll9fU0lNX1BSRVZJRVdfXyxBPXo/LmdyaWRBcGlFbmRwb2ludD8/dTEoImdyaWQvYXBpIiksUD16Py5ncmlkU3RhcnRFbmRwb2ludD8/dTEoImdyaWQvYXBpL3N0YXJ0IiksUj16Py5ncmlkU2h1dGRvd25FbmRwb2ludD8/dTEoImdyaWQvYXBpL3NodXRkb3duIiksW0ksVF09Vyh7fSksW3ksY109Vyh7fSksW20sZl09Vyh7fSksW3UsejFdPVcoKCk9Pm5ldyBTZXQpLFExPU9iamVjdC52YWx1ZXMoSSkuc29tZShCb29sZWFuKXx8T2JqZWN0LnZhbHVlcyh5KS5zb21lKEJvb2xlYW4pLHtkZXZpY2VzOm4scmVmcmVzaDpMMX09cjYoQSwhMCxRMSksbD0hIShYJiZuPy5maW5kKChnKT0+Zy5kZXZpY2U9PT1YKT8uaGVscGVyKSxqPUUoKGcpPT57WShnKTt0cnl7bGV0IE89bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7Ty5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLGcpLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCIiLE8udG9TdHJpbmcoKSl9Y2F0Y2h7fX0sW10pLEsxPUUoYXN5bmMoZyxPPTIwMDAwKT0+e2xldCBTPURhdGUubm93KCkrTzt3aGlsZShEYXRlLm5vdygpPFMpe3RyeXtpZigoKGF3YWl0KGF3YWl0IGZldGNoKEEse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpKS5kZXZpY2VzPz9bXSkuc29tZSgocTEpPT5xMS5kZXZpY2U9PT1nJiZxMS5oZWxwZXIpKXJldHVybiEwfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoaSk9PnNldFRpbWVvdXQoaSw0MDApKX1yZXR1cm4hMX0sW0FdKSxCMT1FKGFzeW5jKGcpPT57VCgoTyk9Pih7Li4uTyxbZ106ITB9KSksZigoTyk9Pih7Li4uTyxbZ106bnVsbH0pKTt0cnl7bGV0IE89YXdhaXQgZmV0Y2goUCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6Z30pfSksUz1hd2FpdCBPLmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIU8ub2t8fCFTLm9rKXtmKChpKT0+KHsuLi5pLFtnXTpTLmVycm9yPz9gSFRUUCAke08uc3RhdHVzfWB9KSk7cmV0dXJufXoxKChpKT0+aS5oYXMoZyk/aTpuZXcgU2V0KGkpLmFkZChnKSksYXdhaXQgSzEoZyl9Y2F0Y2goTyl7ZigoUyk9Pih7Li4uUyxbZ106Tz8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e1QoKE8pPT4oey4uLk8sW2ddOiExfSkpLEwxKCl9fSxbUCxLMSxMMV0pLFYxPUUoYXN5bmMoZyk9PntjKChPKT0+KHsuLi5PLFtnXTohMH0pKSxmKChPKT0+KHsuLi5PLFtnXTpudWxsfSkpO3RyeXtsZXQgTz1hd2FpdCBmZXRjaChSLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpnfSl9KSxTPWF3YWl0IE8uanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighTy5va3x8IVMub2spZigoaSk9Pih7Li4uaSxbZ106Uy5lcnJvcj8/YEhUVFAgJHtPLnN0YXR1c31gfSkpfWNhdGNoKE8pe2YoKFMpPT4oey4uLlMsW2ddOk8/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtjKChPKT0+KHsuLi5PLFtnXTohMX0pKSxMMSgpfX0sW1IsTDFdKTt4KCgpPT57aWYoWClyZXR1cm47aWYoJD8uZGV2aWNlKXtZKCQuZGV2aWNlKTtyZXR1cm59aWYoIW58fG4ubGVuZ3RoPT09MClyZXR1cm47bGV0IGc9bi5maW5kKChPKT0+Ty5oZWxwZXIpPz9uLmZpbmQoKE8pPT5PLnN0YXRlPT09IkJvb3RlZCIpPz9uWzBdO2lmKGcpWShnLmRldmljZSl9LFtYLCQ/LmRldmljZSxuXSkseCgoKT0+e2xldCBnPWAke3UxKCJhcGkvZXZlbnRzIil9JHtYP2A/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFgpfWA6IiJ9YCxPPShpKT0+e1EoKHIpPT57aWYoaT14MyhFMihpKSx3aW5kb3cubG9jYXRpb24pLGU2KHIpPT09ZTYoaSkpcmV0dXJuIHI7aWYoaSl3aW5kb3cuX19TSU1fUFJFVklFV19fPWk7ZWxzZSBpZih3aW5kb3cuX19TSU1fUFJFVklFV19fKXtsZXR7YmFzZVBhdGg6cTEsZXhlY1Rva2VuOloxfT13aW5kb3cuX19TSU1fUFJFVklFV19fO3dpbmRvdy5fX1NJTV9QUkVWSUVXX189e2Jhc2VQYXRoOnExLGV4ZWNUb2tlbjpaMX19cmV0dXJuIGl9KX0sUz15MihnKTtyZXR1cm4gUy5vbm1lc3NhZ2U9KGkpPT57dHJ5e08oRTIoSlNPTi5wYXJzZShpLmRhdGEpKSl9Y2F0Y2h7fX0sKCk9PlMuY2xvc2UoKX0sW1gsbF0pO2xldCBlPVg/PyQ/LmRldmljZT8/bnVsbCxYMT1uPy5maW5kKChnKT0+Zy5kZXZpY2U9PT1lKT8/bnVsbCxOMT0hISQmJiQuZGV2aWNlPT09ZSx2O2lmKE4xJiYkKXY9SyhtUSx7Y29uZmlnOiQsZGV2aWNlTmFtZTpYMT8ubmFtZT8/bnVsbCxkZXZpY2VSdW50aW1lOlgxPy5ydW50aW1lPz9udWxsLGNocm9tZTpYMT8uY2hyb21lPz9udWxsLHByZWZlck1qcGVnOnUuaGFzKCQuZGV2aWNlKSxheE92ZXJsYXlFbmFibGVkOnEsc2V0QXhPdmVybGF5RW5hYmxlZDpHLGRldnRvb2xzT3BlbjpOLHNldERldnRvb2xzT3BlbjpCLGdyaWRPcGVuOlUsc2V0R3JpZE9wZW46VixncmlkUGFuZWxXaWR0aDprLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpNLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpDLHN0cmVhbWluZzpKLHNldFN0cmVhbWluZzpafSk7ZWxzZXtsZXQgZz1VP2srMzY6MjQ7dj1LKCJkaXYiLHtjbGFzc05hbWU6Imgtc2NyZWVuIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0zIGJnLXBhZ2UgZm9udC1zeXN0ZW0gYm94LWJvcmRlciBbdHJhbnNpdGlvbjpwYWRkaW5nXzAuMjVzX2Vhc2VdIixzdHlsZTp7cGFkZGluZ0xlZnQ6ZyxwYWRkaW5nUmlnaHQ6MjR9LGNoaWxkcmVuOlgxP0soSDkse25hbWU6WDEubmFtZSxydW50aW1lOlgxLnJ1bnRpbWUsY2hyb21lOlgxLmNocm9tZT8/bnVsbCxwbGFjZWhvbGRlckFzc2V0OlgxLnBsYWNlaG9sZGVyQXNzZXQ/P251bGwsYnVzeTohIVgxLmhlbHBlcnx8ISFJW1gxLmRldmljZV0sYnVzeUxhYmVsOlgxLmhlbHBlcj8iQ29ubmVjdGluZ+KApiI6IlN0YXJ0aW5n4oCmIixlcnJvcjptW1gxLmRldmljZV0/P251bGwsb25TdGFydDooKT0+QjEoWDEuZGV2aWNlKX0pOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltLKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxLKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IHRleHQtWzE0cHhdIG1heC13LTEyMCIsY2hpbGRyZW46WyJDcmVhdGUgYSBzaW11bGF0b3IgaW4gWGNvZGUsIG9yIHN0YXJ0IG9uZSB3aXRoIiwiICIsSygiY29kZSIse2NsYXNzTmFtZToiYmctWyMyMjJdIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ImJ1bnggc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KV19KX0pfXJldHVybiBLKEoxLHtjaGlsZHJlbjpbdixLKHQ5LHt9KSxLKFc5LHtvcGVuOlUsb25DbG9zZTooKT0+VighMSksd2lkdGg6ayxzaWRlOiJsZWZ0IixkZXZpY2VzOm4sc2VsZWN0ZWRVZGlkOmUsb25TZWxlY3Q6aixzdGFydGluZzpJLHNodXR0aW5nRG93bjp5LG9uU2h1dGRvd246VjF9KSxLKEM1LHtwYW5lbFdpZHRoOmssdmlzaWJsZTpVLG9uUG9pbnRlckRvd246TCxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHNpZGViYXIiLHNpZGU6ImxlZnQifSksSyhCOSx7b3BlbjpVLG9uQ2xpY2s6KCk9PlYoITApfSldfSl9ZnVuY3Rpb24gbVEoe2NvbmZpZzokLGRldmljZU5hbWU6USxkZXZpY2VSdW50aW1lOkosY2hyb21lOloscHJlZmVyTWpwZWc6WCxheE92ZXJsYXlFbmFibGVkOlksc2V0QXhPdmVybGF5RW5hYmxlZDpxLGRldnRvb2xzT3BlbjpHLHNldERldnRvb2xzT3BlbjpOLGdyaWRPcGVuOkIsc2V0R3JpZE9wZW46VSxncmlkUGFuZWxXaWR0aDpWLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDprLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpMLHN0cmVhbWluZzpNLHNldFN0cmVhbWluZzpDfSl7eCgoKT0+e2RvY3VtZW50LnRpdGxlPVE/YFNpbXVsYXRvciAtICR7UX1gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtRXSk7bGV0IHo9RjAoUSksQT1jNigkLmRldnRvb2xzRW5kcG9pbnQ/P3UxKCJkZXZ0b29scyIpLEcpO3goKCk9PntpZighRylyZXR1cm47aWYoayYmQS50YXJnZXRzLnNvbWUoKEYpPT5GLmlkPT09aykpcmV0dXJuO0woQS50YXJnZXRzLmxlbmd0aD09PTE/QS50YXJnZXRzWzBdLmlkOm51bGwpfSxbRyxBLnRhcmdldHMsayxMXSkseCgoKT0+e0wobnVsbCl9LFskLmRldmljZSxMXSk7bGV0IFA9ZzYoKSxbUixJXT1iMChvNix5MyksW1RdPVcoKCk9Pm5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJjb2RlYyIpPT09Im1qcGVnIiksW3ksY109VygoKT0+d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEUzKT09PSJtanBlZyI/Im1qcGVnIjoiYXV0byIpO3goKCk9Pnt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oRTMseSl9LFt5XSk7bGV0IGY9JC5jb2RlYyE9PSJtanBlZyImJlAuc3VwcG9ydGVkJiYhUi5mZWxsQmFjayYmIVgmJiFUJiZ5IT09Im1qcGVnIix1PVI2KGY/bnVsbDokLnN0cmVhbVVybCk7eCgoKT0+e0MoITEpLEkoInJlc2V0Iil9LFskLnN0cmVhbVVybCxDXSkseCgoKT0+e2lmKGYmJk0pSSgiZnJhbWUiKX0sW2YsTV0pLHgoKCk9PntpZighZilyZXR1cm47bGV0IEY9c2V0VGltZW91dCgoKT0+SSgidGltZW91dCIpLGk2KTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KEYpfSxbZiwkLnN0cmVhbVVybF0pO2xldFt6MSxRMV09VyhudWxsKSxbbixMMV09VyhudWxsKSxsPW4saj16MT8/bD8/aTAoeixRKSxLMT10Mih6LGopLEIxPW4wKHosaiksVjE9czIoaiksZT1jMChqKSxYMT1lP2Uud2lkdGgvZS5oZWlnaHQ6MSxOMT1FMChqKSx2PSEhWiYmIU4xLGc9dj9aLmZyYW1lLndpZHRoL1ouc2NyZWVuLndpZHRoOjEsTz1CMSpnLFM9dj9aLmZyYW1lLndpZHRoL1ouZnJhbWUuaGVpZ2h0OlgxLGk9dj9gJHtaLmZyYW1lLndpZHRofSAvICR7Wi5mcmFtZS5oZWlnaHR9YDpWMSxyPWIobnVsbCkscTE9YihbXSk7eCgoKT0+e2xldCBGPSExLEg9bnVsbCxEPW51bGw7cTEuY3VycmVudD1bXTtsZXQgdz0oKT0+e2lmKEZ8fEgpcmV0dXJuO0g9c2V0VGltZW91dCgoKT0+e0g9bnVsbCxkKCl9LDEwMDApfSxkPSgpPT57bGV0IHM9bmV3IFdlYlNvY2tldCgkLndzVXJsKTtzLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIixEPXMsci5jdXJyZW50PXMscy5vbm9wZW49KCk9PntxMS5jdXJyZW50PXYzKHMscTEuY3VycmVudCl9LHMub25tZXNzYWdlPShDMSk9PntpZighKEMxLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuO2xldCBrMT1uZXcgVWludDhBcnJheShDMS5kYXRhKTtpZihrMS5sZW5ndGg8MXx8azFbMF0hPT0xMzApcmV0dXJuO3RyeXtsZXQgaDE9SlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoazEuc3ViYXJyYXkoMSkpKTtpZihoMS53aWR0aDw9MHx8aDEuaGVpZ2h0PD0wKXJldHVybjtMMSgoejApPT56MCYmejAud2lkdGg9PT1oMS53aWR0aCYmejAuaGVpZ2h0PT09aDEuaGVpZ2h0JiZ6MC5vcmllbnRhdGlvbj09PWgxLm9yaWVudGF0aW9uP3owOmgxKX1jYXRjaHt9fSxzLm9uY2xvc2U9KCk9PntpZihyLmN1cnJlbnQ9PT1zKXIuY3VycmVudD1udWxsO3coKX0scy5vbmVycm9yPSgpPT57cy5jbG9zZSgpfX07cmV0dXJuIGQoKSwoKT0+e2lmKEY9ITAsSCljbGVhclRpbWVvdXQoSCk7aWYoci5jdXJyZW50PT09RClyLmN1cnJlbnQ9bnVsbDtEPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgWjE9RSgoRixIKT0+e3ExLmN1cnJlbnQ9dDYoci5jdXJyZW50LHExLmN1cnJlbnQsRixIKX0sW10pLHkxPUUoKEYpPT5aMSgzLEYpLFtaMV0pLGIxPUUoKEYpPT5aMSg1LEYpLFtaMV0pLHQxPUUoKEYpPT5aMSg0LHtidXR0b246Rn0pLFtaMV0pLE8xPUUoKHtwaGFzZTpGLGJ1dHRvbjpIfSk9PntpZihILnVzYWdlUGFnZT09bnVsbHx8SC51c2FnZT09bnVsbClyZXR1cm47WjEoNCx7YnV0dG9uOkgubmFtZSxwYWdlOkgudXNhZ2VQYWdlLHVzYWdlOkgudXNhZ2UscGhhc2U6Rn0pfSxbWjFdKSxyMT1FKChGKT0+WjEoMTAse2RlbHRhOkZ9KSxbWjFdKSxNMD1FKChGKT0+WjEoMTEsRiksW1oxXSksUTA9RSgoRik9PntRMSgoSCk9PkgmJkgud2lkdGg9PT1GLndpZHRoJiZILmhlaWdodD09PUYuaGVpZ2h0JiZILm9yaWVudGF0aW9uPT09Ri5vcmllbnRhdGlvbj9IOkYpfSxbXSksTTE9RSgoRik9PntaMSg3LHtvcmllbnRhdGlvbjpGfSl9LFtaMV0pLFMxPWoub3JpZW50YXRpb24/PyJwb3J0cmFpdCIsTzA9eiE9PSJ3YXRjaCImJnohPT0idmlzaW9uIixKMD1FKChGKT0+e2lmKCFPMClyZXR1cm47bGV0IEg9KEY9PT0ibGVmdCI/Z1E6aFEpW1MxXTtNMShIKX0sW08wLFMxLE0xXSk7eCgoKT0+e1ExKG51bGwpLEwxKG51bGwpfSxbJC5zdHJlYW1VcmxdKSx4KCgpPT57bGV0IEY9bDtpZighRilyZXR1cm47UTEoKEgpPT5IJiZILndpZHRoPT09Ri53aWR0aCYmSC5oZWlnaHQ9PT1GLmhlaWdodCYmSC5vcmllbnRhdGlvbj09PUYub3JpZW50YXRpb24/SDpudWxsKX0sW2wsbD8ud2lkdGgsbD8uaGVpZ2h0LGw/Lm9yaWVudGF0aW9uXSk7bGV0IEYxPUUoKEYsSCk9PntaMSg2LHt0eXBlOkYsdXNhZ2U6SH0pfSxbWjFdKSxbbDEsVzBdPVcobnVsbCksW0QxLHAxXT1XKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuITE7bGV0IEY9TnVtYmVyKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIikpLEg9TnVtYmVyLmlzRmluaXRlKEYpJiZGPjA/RjpiMztyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PUgrNDgwfSkse3dpZHRoOk4wLG9uUG9pbnRlckRvd246eDF9PVA1KCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLGIzLDI0MCw3MjApLHt3aWR0aDpUMSxvblBvaW50ZXJEb3duOm4xfT1QNSgic2VydmUtc2ltOmRldnRvb2xzLXBhbmVsLXdpZHRoIixhNiw0MjAsMTQwMCksW0swLG8xXT1XKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbVTAsRDBdPVcoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTt4KCgpPT57bGV0IEY9KCk9PntvMSh3aW5kb3cuaW5uZXJXaWR0aCksRDAod2luZG93LmlubmVySGVpZ2h0KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLEYpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixGKX0sW10pLHgoKCk9PntsZXQgRj15MigkLmFwcFN0YXRlRW5kcG9pbnQ/P3UxKCJhcHBzdGF0ZSIpKSxIPW51bGw7cmV0dXJuIEYub25tZXNzYWdlPShEKT0+e3RyeXtsZXQgdz1KU09OLnBhcnNlKEQuZGF0YSk7aWYoSCljbGVhclRpbWVvdXQoSCk7bGV0IGQ9dz8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtIPXNldFRpbWVvdXQoKCk9PlcwKHcpLGQpfWNhdGNoe319LCgpPT57aWYoSCljbGVhclRpbWVvdXQoSCk7Ri5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBfMD1FKGFzeW5jKCk9PntGMSgiZG93biIsMjI3KSxhd2FpdCBuZXcgUHJvbWlzZSgoRCk9PnNldFRpbWVvdXQoRCwzMCkpLEYxKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKEQpPT5zZXRUaW1lb3V0KEQsMzApKSxGMSgidXAiLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgoRCk9PnNldFRpbWVvdXQoRCwzMCkpLEYxKCJ1cCIsMjI3KX0sW0YxXSksZDE9YihudWxsKSxbdzEsajFdPVcoMCksW2cxLGkxXT1XKDApO3goKCk9PntsZXQgRj1kMS5jdXJyZW50O2lmKCFGfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgSD1uZXcgUmVzaXplT2JzZXJ2ZXIoKEQpPT57bGV0IHc9RFswXT8uY29udGVudFJlY3Q7ajEodz8ud2lkdGg/PzApLGkxKHc/LmhlaWdodD8/MCl9KTtyZXR1cm4gSC5vYnNlcnZlKEYpLCgpPT5ILmRpc2Nvbm5lY3QoKX0sW10pO2xldFtaMCxMMF09VyghMCksZTE9YighMCk7ZTEuY3VycmVudD1aMDtsZXQgJDE9YihuZXcgU2V0KTt4KCgpPT57bGV0IEY9KEgpPT57bGV0IEQ9ISFkMS5jdXJyZW50Py5jb250YWlucyhILnRhcmdldCk7TDAoRCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsRiwhMCksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixGLCEwKX0sW10pLHgoKCk9PntpZihaMClyZXR1cm47bGV0IEY9JDEuY3VycmVudDtpZihGLnNpemU9PT0wKXJldHVybjtmb3IobGV0IEggb2YgRilaMSg2LHt0eXBlOiJ1cCIsdXNhZ2U6SH0pO0YuY2xlYXIoKX0sW1owLFoxXSkseCgoKT0+e2xldCBGPSh3LGQpPT57aWYoIWUxLmN1cnJlbnQpcmV0dXJuO2lmKHcuY29kZT09PSJLZXlIIiYmdy5tZXRhS2V5JiZ3LnNoaWZ0S2V5KXtpZih3LnByZXZlbnREZWZhdWx0KCksZD09PSJkb3duIiYmIXcucmVwZWF0KVoxKDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoKHcuY29kZT09PSJBcnJvd0xlZnQifHx3LmNvZGU9PT0iQXJyb3dSaWdodCIpJiZ3Lm1ldGFLZXkmJiF3LnNoaWZ0S2V5JiYhdy5hbHRLZXkmJiF3LmN0cmxLZXkpe2lmKHcucHJldmVudERlZmF1bHQoKSxkPT09ImRvd24iJiYhdy5yZXBlYXQpSjAody5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZih3LmNvZGU9PT0iS2V5QSImJncubWV0YUtleSYmdy5zaGlmdEtleSl7aWYody5wcmV2ZW50RGVmYXVsdCgpLGQ9PT0iZG93biImJiF3LnJlcGVhdClBMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChDMSk9PntsZXQgazE9QzEuc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4gQTEoYHhjcnVuIHNpbWN0bCB1aSAkeyQuZGV2aWNlfSBhcHBlYXJhbmNlICR7azF9YCl9KS5jYXRjaCgoKT0+e30pO3JldHVybn1pZih3LmNvZGU9PT0iS2V5SyImJncubWV0YUtleSYmIXcuc2hpZnRLZXkmJiF3LmFsdEtleSYmIXcuY3RybEtleSl7aWYody5wcmV2ZW50RGVmYXVsdCgpLGQ9PT0iZG93biImJiF3LnJlcGVhdClaMSgxMix7fSk7cmV0dXJufWxldCBzPW42KHcuY29kZSk7aWYocz09bnVsbClyZXR1cm47aWYody5wcmV2ZW50RGVmYXVsdCgpLGQ9PT0iZG93biIpJDEuY3VycmVudC5hZGQocyk7ZWxzZSAkMS5jdXJyZW50LmRlbGV0ZShzKTtaMSg2LHt0eXBlOmQsdXNhZ2U6c30pfSxIPSh3KT0+Rih3LCJkb3duIiksRD0odyk9PkYodywidXAiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsRCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsSCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixEKX19LFtaMSwkLmRldmljZSxKMF0pO2xldCBfPWQ2KCkscD1wNigkLmRldmljZSksdD1qNih7ZXhlYzpBMSx1ZGlkOiQuZGV2aWNlLGVuYWJsZWQ6TSxvblVwbG9hZFN0YXJ0Ol8uYWRkLG9uVXBsb2FkUHJvZ3Jlc3M6Xy5zZXRQcm9ncmVzcyxvblVwbG9hZEVuZDooRixILEQpPT5fLnVwZGF0ZShGLHtzdGF0dXM6SD8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOkR9KSxvblVuc3VwcG9ydGVkOihGKT0+e2xldCBIPV8uYWRkKEYubmFtZSwibWVkaWEiKTtfLnVwZGF0ZShILHtzdGF0dXM6ImVycm9yIixtZXNzYWdlOmBVbnN1cHBvcnRlZDogJHtGLnR5cGV8fFoyKEYpfWB9KX0sb25Ib3N0UGF0aERyb3A6cC5kaXNtaXNzfSksYT1sNih7ZGVmYXVsdFdpZHRoOk8sdmlld3BvcnRXaWR0aDpLMCx2aWV3cG9ydEhlaWdodDpVMCxhc3BlY3RSYXRpbzpTLG9uU3RhcnQ6KCk9PkwwKCExKX0pLEcxPTEyLFkxPTI0LEUxPXcxPjA/TWF0aC5taW4odzEsYS53aWR0aCk6YS53aWR0aCxSMT0oRik9PntpZihGPD0wKXJldHVybiAwO2xldCBIPUswLUcxLUYsdz1LMC8yK0UxLzItKEgtWTEpO2lmKHc8PTApcmV0dXJuIDA7bGV0IGQ9Mip3O3JldHVybiBkPD1GK1kxP2Q6MH0sWDA9UjEoRz9UMTpEMT9OMDowKSxZMD1SMShCP1Y6MCk7cmV0dXJuIEsoRzkse2VuZHBvaW50Olk/JD8uYXhFbmRwb2ludDp2b2lkIDAsY2hpbGRyZW46SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLXNjcmVlbiBiZy1wYWdlIHB5LTYgZ2FwLTMgZm9udC1zeXN0ZW0gYm94LWJvcmRlciIsc3R5bGU6e3BhZGRpbmdMZWZ0OjI0K1kwLHBhZGRpbmdSaWdodDoyNCtYMCx0cmFuc2l0aW9uOmEuaXNSZXNpemluZ3x8YS5pc0luZXJ0aWE/Im5vbmUiOkQ5fSxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6YS53aWR0aCx0cmFuc2l0aW9uOmEuaXNSZXNpemluZ3x8YS5pc0luZXJ0aWE/TDM6ejN9LGNoaWxkcmVuOltLKG0xLHtleGVjOkExLG9uUm90YXRlOk0xLG9yaWVudGF0aW9uOmoub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpKLHN0cmVhbWluZzpNLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIHN0YXR1cyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsZmxleFdyYXA6Im5vd3JhcCIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjEwLHBhZGRpbmc6IjZweCAxMHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOltLKG0xLlRpdGxlLHtvbkNsaWNrOigpPT5VKChGKT0+IUYpLCJhcmlhLWxhYmVsIjoiVG9nZ2xlIHNpbXVsYXRvcnMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6Qix0aXRsZToiU2ltdWxhdG9ycyIsaGlkZVN1YnRpdGxlOiEwLGhpZGVDaGV2cm9uOiEwLHN0eWxlOnttYXhXaWR0aDoibWluKDIzMHB4LCBjYWxjKDEwMHZ3IC0gMTcwcHgpKSJ9fSksSyhRNix7c3RyZWFtaW5nOk19KV19KSxLKCJkaXYiLHtyZWY6ZDEsY2xhc3NOYW1lOiJyZWxhdGl2ZSBtYXgtaC1mdWxsIixzdHlsZTp7d2lkdGg6YS53aWR0aCxhc3BlY3RSYXRpbzppLHRyYW5zaXRpb246YS5pc1Jlc2l6aW5nfHxhLmlzSW5lcnRpYT9MMzp6Myx3aWxsQ2hhbmdlOmEuaXNSZXNpemluZ3x8YS5pc0luZXJ0aWE/IndpZHRoIjp2b2lkIDB9LC4uLnQuZHJvcFpvbmVQcm9wcyxjaGlsZHJlbjpbKCgpPT57bGV0IEY9SyhhMix7dXJsOiQudXJsLHdzVXJsOiQud3NVcmwsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGJvcmRlcjoibm9uZSIscG9pbnRlckV2ZW50czphLmlzUmVzaXppbmd8fGEuaXNJbmVydGlhPyJub25lIjp2b2lkIDB9LGltYWdlU3R5bGU6e2JvcmRlclJhZGl1czp2PzA6SzEsY29ybmVyU2hhcGU6dj92b2lkIDA6InN1cGVyZWxsaXBzZSgxLjMpIiwuLi52P3t9Ontib3hTaGFkb3c6Imluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikifX0saGlkZUNvbnRyb2xzOiEwLG9uU3RyZWFtaW5nQ2hhbmdlOkMsb25TdHJlYW1Ub3VjaDp5MSxvblN0cmVhbU11bHRpVG91Y2g6YjEsb25TdHJlYW1CdXR0b246dDEsb25TdHJlYW1EaWdpdGFsQ3Jvd246cjEsb25TdHJlYW1TY3JvbGw6TTAsY29kZWM6Zj8iYXZjYyI6Im1qcGVnIixvbkF2Y2NFcnJvcjooKT0+SSgiZXJyb3IiKSxzdWJzY3JpYmVGcmFtZTpmP3ZvaWQgMDp1LnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOmY/dm9pZCAwOnUuZnJhbWUsc3RyZWFtQ29uZmlnOmosZW5hYmxlRGlnaXRhbENyb3duOno9PT0id2F0Y2giLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOlEwfSksSD1LKEoxLHtjaGlsZHJlbjpbRixZJiZLKHE5LHt9KV19KTtpZighdilyZXR1cm4gSDtyZXR1cm4gSyhMNSx7Y2hyb21lOlosaW50ZXJhY3RpdmU6ITAsb25CdXR0b246TzEsb25Dcm93bldoZWVsOihELHcpPT57bGV0IGQ9TjIoRCx3LGcxfHwxKTtpZihkIT1udWxsKXIxKGQpfSxzY3JlZW46SH0pfSkoKSx0LmlzRHJhZ092ZXImJksoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1hY2NlbnQgYmctW3JnYmEoOTksMTAyLDI0MSwwLjE4KV0gdGV4dC1hY2NlbnQgcG9pbnRlci1ldmVudHMtbm9uZSB6LTIwIixzdHlsZTp7Ym9yZGVyUmFkaXVzOnY/dm9pZCAwOksxfSxjaGlsZHJlbjpbSyhQMix7c2l6ZTozMixzdHJva2VXaWR0aDoxLjV9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46IkRyb3AgbWVkaWEgb3IgLmlwYSJ9KV19KSxLKG85LHtzaW11bGF0b3JSZXNpemU6YSxkZXZpY2VUeXBlOnosc3RyZWFtQ29uZmlnOmosY29udGFpbmVyV2lkdGg6dzF8fGEud2lkdGgsY29udGFpbmVySGVpZ2h0OmcxfHwoUz4wP2Eud2lkdGgvUzowKX0pLEsoJDYse3dpZHRoOncxfHxhLndpZHRoLGhlaWdodDpnMXx8KFM+MD9hLndpZHRoL1M6MCksdmlzaWJsZTphLmlzUmVzaXppbmd8fGEuaXNJbmVydGlhfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgbWF4LXctZnVsbCIsY2hpbGRyZW46W0sobTEse2V4ZWM6QTEsb25Sb3RhdGU6TTEsb3JpZW50YXRpb246ai5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6USxkZXZpY2VSdW50aW1lOkosc3RyZWFtaW5nOk0sImFyaWEtbGFiZWwiOiJTaW11bGF0b3IgYWN0aW9ucyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzoiNnB4IDhweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpLKG0xLkFjdGlvbnMse2NoaWxkcmVuOltsMT8uaXNSZWFjdE5hdGl2ZSYmSyhtMS5CdXR0b24seyJhcmlhLWxhYmVsIjoiUmVsb2FkIFJlYWN0IE5hdGl2ZSBidW5kbGUiLHRpdGxlOiJSZWxvYWQgKENtZCtSKSIsb25DbGljazooKT0+dm9pZCBfMCgpLGNoaWxkcmVuOksodjAse30pfSksSyhtMS5Ib21lQnV0dG9uLHt0aXRsZToiSG9tZSJ9KSxLKG0xLlNjcmVlbnNob3RCdXR0b24se3RpdGxlOiJTY3JlZW5zaG90IixvbkNsaWNrOihGKT0+e0YucHJldmVudERlZmF1bHQoKSxwLmNhcHR1cmUoKX19KSxLKG0xLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSldfSl9KSxLKG0xLHtleGVjOkExLG9uUm90YXRlOk0xLG9yaWVudGF0aW9uOmoub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpKLHN0cmVhbWluZzpNLCJhcmlhLWxhYmVsIjoiQWNjZXNzaWJpbGl0eSBvdmVybGF5IixzdHlsZTp7d2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzo2LGJvcmRlclJhZGl1czoyMn0sY2hpbGRyZW46SyhWOSx7b3ZlcmxheUVuYWJsZWQ6WSxzdHJlYW1pbmc6TSxvblRvZ2dsZU92ZXJsYXk6KCk9PnEoKEYpPT4hRil9KX0pXX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgcmlnaHQtMyBmbGV4IGZsZXgtY29sIGdhcC0xIHAtMSBiZy1wYW5lbC1iZyBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gYmFja2Ryb3AtYmx1ci1bMTJweF0gWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gei00MCAke0QxfHxHPyJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSI6Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8ifWAsY2hpbGRyZW46W0soImJ1dHRvbiIse29uQ2xpY2s6KCk9PntOKCExKSxwMSgoRik9PiFGKX0sY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiB0b29scyBwYW5lbCIsImFyaWEtcHJlc3NlZCI6RDEsdGl0bGU6IlRvb2xzIixjaGlsZHJlbjpLKE8yLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLEsoImJ1dHRvbiIse29uQ2xpY2s6KCk9PntwMSghMSksTigoRik9PiFGKX0sY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiBXZWJLaXQgRGV2VG9vbHMiLCJhcmlhLXByZXNzZWQiOkcsdGl0bGU6IldlYktpdCBEZXZUb29scyIsY2hpbGRyZW46SyhBMix7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KV19KSxLKEU2LHtvcGVuOkQxLG9uQ2xvc2U6KCk9PnAxKCExKSx1ZGlkOiQuZGV2aWNlLGRldmljZVJ1bnRpbWU6SixjdXJyZW50QXBwOmwxLGF4T3ZlcmxheUVuYWJsZWQ6WSxvblRvZ2dsZUF4T3ZlcmxheTooKT0+cSgoRik9PiFGKSxjb2RlY1ByZWZlcmVuY2U6eSxvbkNvZGVjUHJlZmVyZW5jZUNoYW5nZTpjLGFjdGl2ZUNvZGVjOmY/ImgyNjQiOiJtanBlZyIsYXZjY1N1cHBvcnRlZDpQLnN1cHBvcnRlZCx3aWR0aDpOMH0pLEsoQzUse3BhbmVsV2lkdGg6TjAsdmlzaWJsZTpEMSxvblBvaW50ZXJEb3duOngxLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLEsodjYse29wZW46RyxvbkNsb3NlOigpPT5OKCExKSx1ZGlkOiQuZGV2aWNlLHRhcmdldHM6QS50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6ayxvblNlbGVjdFRhcmdldDpMLGxvYWRpbmc6QS5sb2FkaW5nLGVycm9yOkEuZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIEEucmVmcmVzaCgpLHdpZHRoOlQxfSksSyhDNSx7cGFuZWxXaWR0aDpUMSx2aXNpYmxlOkcsb25Qb2ludGVyRG93bjpuMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSldfSl9KX1POChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoSyhmUSx7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return T8}function h2(){try{let Q=yQ("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),$=JSON.parse(Q),Z=[];for(let[J,Y]of Object.entries($.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(J))continue;for(let G of Y){if(G.isAvailable===!1)continue;Z.push({...G,runtime:J.replace(/^.*SimRuntime\./,"")})}}return Z}catch{return[]}}function g2(){try{let Q=Number(yQ("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),$=Number(yQ("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=yQ("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(Q)?Q:0,availableBytes:Y*(Number.isFinite($)?$:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function l2(){try{let Q=yQ("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(`
102
- `)){let G=Y.trimStart();if(!G)continue;let X=J.exec(G);if(!X)continue;let H=Number(G.split(/\s+/,1)[0]);if(!Number.isFinite(H))continue;let W=H*1024,z=X[1].toUpperCase();$[z]=($[z]??0)+W,Z+=W}return{perUdid:$,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function c2(){let{totalBytes:Q,availableBytes:$}=g2(),Z=l2(),J=Object.keys(Z.perUdid).length,Y=J>0?Z.totalBytes/J:0,G=Y>=268435456?"measured":"estimated",X=G==="measured"?Y:u2,H=X>0?Math.max(0,Math.floor($/X)):0;return{totalBytes:Q,availableBytes:$,runningSimulators:J,perSimAvgBytes:X,perSimSource:G,estimatedAdditional:H}}function m2(Q,$){let Z=Buffer.from(Q),J=Buffer.from($);if(Z.length!==J.length)return!1;return U2(Z,J)}function p2(Q){if(!Q)return!1;return Q.split(";",1)[0].trim().toLowerCase()==="application/json"}function d2(Q){let $=(Q?.basePath??"/.sim").replace(/\/+$/,""),Z=q2($),J=D2($),Y=Q?.proxyHelpers??!1,G=Q?.inspectWebKitBridge??S2,X=Q?.execToken??L2(32).toString("base64url"),H=async(M)=>{let L=M??{};if(typeof L.device!=="string"||!/^[0-9A-Za-z-]+$/.test(L.device))throw Error("missing or invalid device udid");if(L.option===void 0)return{status:await C6(L.device)};if(!UQ[L.option])throw Error(`unknown option: ${L.option}`);let T=typeof L.value==="string"?O6(L.option,L.value):null;if(T===null)throw Error(`invalid value for ${L.option}: ${L.value}`);return await A6(L.device,L.option,T),{ok:!0}},W=(M,L,T)=>{let j=M.url??"",q=j.indexOf("?"),D=q===-1?j:j.slice(0,q),A=R0(j)??Q?.device??null,O=$==="/"?"/devtools-frontend":`${$}/devtools-frontend`,E=_0(j,Z);if(E){let N=E.device??A;if(I2(M,L,N,E.upstreamPath))return;L.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),L.end("No serve-sim device");return}if(D===O||D.startsWith(`${O}/`)){(async()=>{let N=D===O?"inspector.html":D.slice(O.length+1);if(N.split("/").some((B)=>B==="..")){L.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),L.end("Invalid asset path");return}try{let B=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${R2}/${N}${q===-1?"":j.slice(q)}`),U={"Cache-Control":"public, max-age=604800"},V=B.headers.get("content-type");if(V)U["Content-Type"]=V;L.writeHead(B.status,U),L.end(Buffer.from(await B.arrayBuffer()))}catch(B){L.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),L.end(B instanceof Error?B.message:"Failed to load DevTools frontend")}})();return}if(D===$||D===$+"/"){let N=OQ(),B=SQ(N,A),U=v2();if(!B){let V=JSON.stringify({basePath:$,execToken:X});U=U.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${V}</script>`)}if(B){let V=R4(B,L4(M),$,a4(M),Y),_=`<script>window.__SIM_PREVIEW__=${JSON.stringify(r4(V,$,j8(),X,Q?.codec,Y))}</script>`;U=U.replace("<!--__SIM_PREVIEW_CONFIG__-->",_)}L.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),L.end(U);return}if(D===$+"/grid/api/memory"){L.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),L.end(JSON.stringify(c2()));return}if(D===$+"/grid/api/devicekit-chrome"){N$(new URL(j||"/","http://serve-sim.local"),L);return}if(D===$+"/grid/api/device-placeholder-asset"){F$(new URL(j||"/","http://serve-sim.local"),L);return}if(D===$+"/grid/api"){let N=OQ(),B=new Map(N.map((I)=>[I.device,I])),V=h2().map((I)=>{let k=B.get(I.udid),w=k?R4(k,L4(M),$,a4(M),Y):null;return{device:I.udid,name:I.name,runtime:I.runtime,state:I.state,chrome:_$(I),placeholderAsset:B$(I),helper:w?{port:w.port,url:w.url,streamUrl:w.streamUrl,wsUrl:w.wsUrl}:null}}),R=O2(),_=(I)=>{if(/iphone/i.test(I))return 0;if(/ipad/i.test(I))return 1;if(/watch/i.test(I))return 2;if(/(apple\s*tv|^tv\b)/i.test(I))return 3;if(/vision|reality/i.test(I))return 4;return 5},P=(I)=>I.helper?0:I.state==="Booted"?1:I.device===R?2:3,C=(I)=>{let k=I.match(/-(\d+)-(\d+)/),w=k?Number(k[1]):0,y=k?Number(k[2]):0;return-(w*1000+y)};V.sort((I,k)=>P(I)-P(k)||_(I.name)-_(k.name)||I.name.localeCompare(k.name)||C(I.runtime)-C(k.runtime)),L.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),L.end(JSON.stringify({devices:V}));return}if(D===$+"/grid/api/shutdown"&&M.method==="POST"){let N="";M.on("data",(B)=>{N+=typeof B==="string"?B:B.toString()}),M.on("end",()=>{let B="";try{B=JSON.parse(N).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(B)){L.writeHead(400,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}U4={at:0,booted:null},_4("xcrun",["simctl","shutdown",B],{timeout:30000},(U,V,R)=>{if(U){L.writeHead(500,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!1,error:R?.toString().trim()||U.message}));return}L.writeHead(200,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!0}))})});return}if(D===$+"/grid/api/start"&&M.method==="POST"){let N="";M.on("data",(B)=>{N+=typeof B==="string"?B:B.toString()}),M.on("end",()=>{let B="";try{B=JSON.parse(N).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(B)){L.writeHead(400,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let U=M.socket.localPort??0;O0(B,U,$).then((V)=>{if(L.writableEnded)return;if(V)L.writeHead(500,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!1,error:V}));else L.writeHead(200,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!0}))})});return}if(D===$+"/devtools"){(async()=>{let N=OQ();if(!SQ(N,A)){L.writeHead(404,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:"No serve-sim device"}));return}try{let U=await G(),V=await U.listTargets(),R=Y?f2(M):"ws",_=Y?`${L4(M)??`127.0.0.1:${U.port}`}${J}`:`127.0.0.1:${U.port}/devtools`,P=V.map((C)=>({...C,webSocketDebuggerUrl:`${R}://${_}/page/${encodeURIComponent(C.id)}`,devtoolsFrontendUrl:b2(O,R,_,C.id)}));L.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),L.end(JSON.stringify({port:U.port,targets:P}))}catch(U){L.writeHead(500,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:U instanceof Error?U.message:"Failed to start inspect-webkit"}))}})();return}if(D===$+"/devtools/release"&&M.method==="POST"){let N="";M.on("data",(B)=>N+=B),M.on("end",async()=>{try{let B=N?JSON.parse(N):{};(await G()).releaseHighlight?.(B.targetId),L.writeHead(200,{"Content-Type":"application/json"}),L.end("{}")}catch(B){L.writeHead(500,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:B instanceof Error?B.message:"Failed to release"}))}});return}if(D===$+"/devtools/highlight"&&M.method==="POST"){let N="";M.on("data",(B)=>N+=B),M.on("end",async()=>{try{let{targetId:B,on:U}=JSON.parse(N||"{}");if(!B){L.writeHead(400,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:"Missing targetId"}));return}let V=await G();if(!V.highlightTarget){L.writeHead(501,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await V.highlightTarget(B,!!U),L.writeHead(200,{"Content-Type":"application/json"}),L.end("{}")}catch(B){L.writeHead(500,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:B instanceof Error?B.message:"Failed to highlight target"}))}});return}if(D===$+"/api"){let N=OQ(),B=SQ(N,A),U=`${A??"(any)"}|${N.length}|${B?`${B.device}@${B.port}`:"none"}`;if(U!==V0)V0=U,y4("GET /api selectedDevice=%s states=%d chose=%s",A??"(any)",N.length,B?`${B.device}@${B.port}`:"none");L.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let V=B?R4(B,L4(M),$,a4(M),Y):null;L.end(JSON.stringify(V?r4(V,$,j8(),X,Q?.codec,Y):null));return}if(D===$+"/api/events"){let N=()=>{let w=OQ(),y=SQ(w,A),h=y?R4(y,L4(M),$,a4(M),Y):null;return JSON.stringify(h?r4(h,$,j8(),X,Q?.codec,Y):null)};L.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),L.write(`:
101
+ `),$.resume(),!0}function I2(Q,$,Z,J){if(!q0(Q,$))return;let Y=new W0(J);Y.binaryType="arraybuffer";let X=!1,G=!1,H=[],W=Buffer.from(Z),z=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{$.end(D8(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},K=(L)=>{if(X&&Y.readyState===W0.OPEN){Y.send(L.opcode===1?L.payload.toString("utf8"):B0(L.payload));return}H.push({opcode:L.opcode,payload:Buffer.from(L.payload)})},M=()=>{try{while(W.length>0){let L=j0(W);if(!L)break;if(W=W.subarray(L.consumed),L.opcode===8){B4($,8,L.payload),z();return}if(L.opcode===9){B4($,10,L.payload);continue}if(L.opcode===1||L.opcode===2)K({opcode:L.opcode,payload:L.payload})}}catch{z()}};Y.onopen=()=>{X=!0;for(let L of H)Y.send(L.opcode===1?L.payload.toString("utf8"):B0(L.payload));H=[]},Y.onmessage=(L)=>{let T=L.data,j=typeof T==="string"?Buffer.from(T):Buffer.from(T);B4($,typeof T==="string"?1:2,j)},Y.onerror=z,Y.onclose=z,$.on("data",(L)=>{if(typeof L==="string")L=Buffer.from(L);W=Buffer.concat([W,L]),M()}),$.on("error",z),$.on("close",z),M()}function x2(Q,$,Z,J){if(!Z)return!1;let Y;try{Y=c6(Z)}catch{return!1}switch(J.split("?")[0]){case"/stream.mjpeg":return Y.handleMjpeg(Q,$),!0;case"/stream.avcc":return Y.handleAvcc(Q,$),!0;case"/config":return Y.handleConfig(Q,$),!0;case"/health":return Y.handleHealth(Q,$),!0;case"/ax":return Y.handleAx(Q,$),!0;case"/foreground":return Y.handleForeground(Q,$),!0;default:return!1}}async function O0(Q,$,Z){if(await new Promise((Y)=>_4("xcrun",["simctl","boot",Q],()=>Y())),!await new Promise((Y)=>{_4("xcrun",["simctl","bootstatus",Q,"-b"],{timeout:180000},(X)=>Y(!X))})){if(!await new Promise((X)=>{_4("xcrun",["simctl","list","devices","-j"],(G,H)=>{if(G)return X(!1);try{let W=JSON.parse(H);X(Object.values(W.devices).flat().some((z)=>z.udid===Q&&z.state==="Booted"))}catch{X(!1)}})}))return`Device ${Q} failed to reach booted state`}return U9(mQ(Q,$,Z)),null}function k2(Q,$){let Z=[],J=[],Y=Buffer.from($),X=!1,G=()=>{if(X)return;X=!0;for(let z of J)z()},H=()=>{G();try{Q.end(D8(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},W=()=>{for(;;){let z;try{z=j0(Y)}catch{H();return}if(!z)return;if(Y=Y.subarray(z.consumed),z.opcode===8)return H();if(z.opcode===9){B4(Q,10,z.payload);continue}if(z.opcode===1||z.opcode===2)for(let K of Z)K(z.payload)}};if(Q.on("data",(z)=>{Y=Buffer.concat([Y,z]),W()}),Q.on("close",G),Q.on("error",G),$.length)W();return{send(z){B4(Q,2,z)},on(z,K){if(z==="message")Z.push(K);else J.push(K)},close:H}}function S2(Q,$,Z,J){if(!J)return!1;let Y;try{Y=c6(J)}catch{return!1}if(!q0(Q,$))return!0;return Y.attachHidSocket(k2($,Z)),!0}function r4(Q,$,Z,J,Y,X=!1){let G=($===""?"":$)+"/grid/api";return{...Q,basePath:$,appStateEndpoint:E8($,"/appstate",Q.device),axEndpoint:E8($,"/ax",Q.device),devtoolsEndpoint:E8($,"/devtools",Q.device),serveSimBin:Z,gridApiEndpoint:G,gridStartEndpoint:G+"/start",gridShutdownEndpoint:G+"/shutdown",gridMemoryEndpoint:G+"/memory",previewEndpoint:$===""?"/":$,execToken:J,...Y?{codec:Y}:{},...X?{proxyHelpers:!0}:{}}}async function w2(Q){return new Promise(($)=>{let Z=M2();Z.once("error",()=>$(!1)),Z.once("listening",()=>Z.close(()=>$(!0))),Z.listen(Q,"127.0.0.1")})}async function N0(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 W=G.id.split(":")[1],z=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:W,bundleId:z}})}}}catch{return null}}async function y2(){if(SQ)try{return await(await SQ).listTargets(),SQ}catch{SQ=null}return SQ=(async()=>{let{startCdpServer:Q}=await Promise.resolve().then(() => (z0(),G0));for(let $=o4;$<o4+50;$++){if(!await w2($)){let Z=await N0($);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 N0($);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${o4}-${o4+49}`)})().catch((Q)=>{throw SQ=null,Q}),SQ}function f2(Q){return Array.isArray(Q)?Q[0]:Q}function D0(Q){return f2(Q.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function b2(Q){return D0(Q)==="https"?"wss":"ws"}function a4(Q){return D0(Q)==="https"?"https":"http"}function v2(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}`}function j8(){try{let Q=process.argv;if(Q[1]&&F0(Q[1]))return Q[1]}catch{}return"serve-sim"}function h2(){if(!T8)T8=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctd2lkZTouMDI1ZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1sZWFkaW5nLXNudWc6MS4zNzU7LS1yYWRpdXMteHM6LjEyNXJlbTstLXJhZGl1cy1tZDouMzc1cmVtOy0tcmFkaXVzLWxnOi41cmVtOy0tcmFkaXVzLXhsOi43NXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzp2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpOy0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQ6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50KTstLWNvbG9yLXBhbmVsLW92ZXJsYXk6IzE4MTgxOGE2Oy0tY29sb3ItcGFuZWwtZGVlcDojMTExMTEzOy0tY29sb3ItcGFnZTojMGEwYTBhOy0tY29sb3ItYWNjZW50OiNhNWI0ZmM7LS1jb2xvci1zdWNjZXNzLWVtZXJhbGQ6IzM0ZDM5OTstLWNvbG9yLWRhbmdlcjojZjg3MTcxOy0tY29sb3ItZGFuZ2VyLXNvZnQ6I2ZjYTVhNTstLWNvbG9yLXdhcm5pbmc6I2ZiYmYyNDstLWNvbG9yLXdhcm5pbmctc29mdDojZmNkMzRkOy0tZm9udC1zeXN0ZW06LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZn19QGxheWVyIGJhc2V7Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsOmhvc3R7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGFiLXNpemU6NDtsaW5lLWhlaWdodDoxLjU7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1mb250LWZhbWlseSx1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweDtoZWlnaHQ6MH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsIkxpYmVyYXRpb24gTW9ubyIsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2UpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19dGFibGV7dGV4dC1pbmRlbnQ6MDtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06d2hlcmUoc2VsZWN0Oi1tb3otYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6ZmlsZS1zZWxlY3Rvci1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfUBzdXBwb3J0cyAoIG5vdCAoLXdlYmtpdC1hcHBlYXJhbmNlOiAtYXBwbGUtcGF5LWJ1dHRvbikpIG9yIChjb250YWluLWludHJpbnNpYy1zaXplOiAxcHgpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y3VycmVudENvbG9yfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsY3VycmVudGNvbG9yIDUwJSx0cmFuc3BhcmVudCl9fX10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1kYXRlLWFuZC10aW1lLXZhbHVle3RleHQtYWxpZ246aW5oZXJpdDttaW4taGVpZ2h0OjFsaH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtkaXNwbGF5OmlubGluZS1mbGV4fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWZpZWxkcy13cmFwcGVye3BhZGRpbmc6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWRheS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWVyaWRpZW0tZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6MX06LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1idXR0b257YXBwZWFyYW5jZTpidXR0b259aW5wdXQ6d2hlcmUoW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XSl7YXBwZWFyYW5jZTpidXR0b259Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBsYXllciB1dGlsaXRpZXN7LlxbY29udGFpbmVyLXR5cGVcOmlubGluZS1zaXplXF17Y29udGFpbmVyLXR5cGU6aW5saW5lLXNpemV9LnBvaW50ZXItZXZlbnRzLWF1dG97cG9pbnRlci1ldmVudHM6YXV0b30ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS5jb2xsYXBzZXt2aXNpYmlsaXR5OmNvbGxhcHNlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZml4ZWR7cG9zaXRpb246Zml4ZWR9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGF0aWN7cG9zaXRpb246c3RhdGljfS5zdGlja3l7cG9zaXRpb246c3RpY2t5fS5pbnNldC0we2luc2V0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnRvcC0we3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMVwvMnt0b3A6NTAlfS50b3AtMnt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0udG9wLTN7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnRvcC1cWzJweFxde3RvcDoycHh9LnRvcC1cW2NhbGNcKDEwMFwlXCs0cHhcKVxde3RvcDpjYWxjKDEwMCUgKyA0cHgpfS50b3AtXFtjYWxjXCgxMDBcJVwrNnB4XClcXXt0b3A6Y2FsYygxMDAlICsgNnB4KX0ucmlnaHQtMHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5yaWdodC0wXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5yaWdodC0yXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucmlnaHQtM3tyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5sZWZ0LTN7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm10LVxbM3B4XF17bWFyZ2luLXRvcDozcHh9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubWwtYXV0b3ttYXJnaW4tbGVmdDphdXRvfS5ib3gtYm9yZGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYmxvY2t7ZGlzcGxheTpibG9ja30uY29udGVudHN7ZGlzcGxheTpjb250ZW50c30uZmxleHtkaXNwbGF5OmZsZXh9LmdyaWR7ZGlzcGxheTpncmlkfS5oaWRkZW57ZGlzcGxheTpub25lfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0udGFibGV7ZGlzcGxheTp0YWJsZX0uXFthc3BlY3QtcmF0aW9cOjE2XC8xMVxde2FzcGVjdC1yYXRpbzoxNi8xMX0uc2l6ZS0xXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMS41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5zaXplLTJcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnNpemUtM1wuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uc2l6ZS00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNCl9LnNpemUtNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5zaXplLTl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5KX0uc2l6ZS1cWzJweFxde3dpZHRoOjJweDtoZWlnaHQ6MnB4fS5zaXplLVxbMTRweFxde3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHh9LnNpemUtXFsxOHB4XF17d2lkdGg6MThweDtoZWlnaHQ6MThweH0uc2l6ZS1cWzE5cHhcXXt3aWR0aDoxOXB4O2hlaWdodDoxOXB4fS5zaXplLWZ1bGx7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uaC0yXC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmgtM3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uaC0zXC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LmgtNHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uaC01e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5oLTVcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNS41KX0uaC02e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LmgtOHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo4KX0uaC0xMHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMCl9LmgtXFszcHhcXXtoZWlnaHQ6M3B4fS5oLVxbMTNweFxde2hlaWdodDoxM3B4fS5oLVxbMTRweFxde2hlaWdodDoxNHB4fS5oLVxbMTZweFxde2hlaWdodDoxNnB4fS5oLVxbMThweFxde2hlaWdodDoxOHB4fS5oLVxbMjJweFxde2hlaWdodDoyMnB4fS5oLVxbMjZweFxde2hlaWdodDoyNnB4fS5oLVxbMzBweFxde2hlaWdodDozMHB4fS5oLWZ1bGx7aGVpZ2h0OjEwMCV9LmgtcHh7aGVpZ2h0OjFweH0uaC1zY3JlZW57aGVpZ2h0OjEwMHZofS5tYXgtaC05MHttYXgtaGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOTApfS5tYXgtaC1cWzI2MHB4XF17bWF4LWhlaWdodDoyNjBweH0ubWF4LWgtXFszMjBweFxde21heC1oZWlnaHQ6MzIwcHh9Lm1heC1oLWZ1bGx7bWF4LWhlaWdodDoxMDAlfS5taW4taC0we21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLWgtXFsyMnB4XF17bWluLWhlaWdodDoyMnB4fS5taW4taC1cWzMwcHhcXXttaW4taGVpZ2h0OjMwcHh9Lm1pbi1oLVxbMzZweFxde21pbi1oZWlnaHQ6MzZweH0ubWluLWgtXFs0NHB4XF17bWluLWhlaWdodDo0NHB4fS5taW4taC1weHttaW4taGVpZ2h0OjFweH0udy0xe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnctMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnctNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS53LTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0udy02e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNil9LnctN3t3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS53LTh7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo4KX0udy0xMHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0udy0yMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIxKX0udy1cWzIycHhcXXt3aWR0aDoyMnB4fS53LVxbMzBweFxde3dpZHRoOjMwcHh9LnctXFszMlwlXF17d2lkdGg6MzIlfS53LVxbMzZcJVxde3dpZHRoOjM2JX0udy1cWzQwXCVcXXt3aWR0aDo0MCV9LnctXFs0MlwlXF17d2lkdGg6NDIlfS53LVxbNDZcJVxde3dpZHRoOjQ2JX0udy1cWzQ4XCVcXXt3aWR0aDo0OCV9LnctXFs1OFwlXF17d2lkdGg6NTglfS53LVxbNjJcJVxde3dpZHRoOjYyJX0udy1cWzY4XCVcXXt3aWR0aDo2OCV9LnctXFs3MFwlXF17d2lkdGg6NzAlfS53LVxbNzRcJVxde3dpZHRoOjc0JX0udy1cWzEyMHB4XF17d2lkdGg6MTIwcHh9LnctXFtjYWxjXCgxMDBcJVwrOHB4XClcXXt3aWR0aDpjYWxjKDEwMCUgKyA4cHgpfS53LVxbbWluXCgzMjBweFwsY2FsY1woMTAwdnctMzJweFwpXClcXXt3aWR0aDptaW4oMzIwcHgsMTAwdncgLSAzMnB4KX0udy1mdWxse3dpZHRoOjEwMCV9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzE1MHB4XF17bWF4LXdpZHRoOjE1MHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy1cWzU2cHhcXXttaW4td2lkdGg6NTZweH0ubWluLXctXFsyMDBweFxde21pbi13aWR0aDoyMDBweH0ubWluLXctXFsyMjBweFxde21pbi13aWR0aDoyMjBweH0ubWluLXctcHh7bWluLXdpZHRoOjFweH0uZmxleC0xe2ZsZXg6MX0uc2hyaW5re2ZsZXgtc2hyaW5rOjF9LnNocmluay0we2ZsZXgtc2hyaW5rOjB9Lmdyb3d7ZmxleC1ncm93OjF9Li10cmFuc2xhdGUteC0xXC8yey0tdHctdHJhbnNsYXRlLXg6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNsYXRlLXgtMXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2Zvcm17dHJhbnNmb3JtOnZhcigtLXR3LXJvdGF0ZS14LCl2YXIoLS10dy1yb3RhdGUteSwpdmFyKC0tdHctcm90YXRlLXosKXZhcigtLXR3LXNrZXcteCwpdmFyKC0tdHctc2tldy15LCl9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuN3NfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6MWZyXzFmcl8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnJ9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvXzFmcl9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG99LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvX21pbm1heFwoMFwsMWZyXClfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIG1pbm1heCgwLDFmcilhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMHtib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MH0uYm9yZGVyLTJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjJweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci10b3Atd2lkdGg6MXB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItZGFzaGVkey0tdHctYm9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItc3R5bGU6ZGFzaGVkfS5ib3JkZXItbm9uZXstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cIWJvcmRlci1cW3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNlwpXF17Ym9yZGVyLWNvbG9yOiMwYTg0ZmY5OSFpbXBvcnRhbnR9LmJvcmRlci1cW1wjM2I1Zjk5XF17Ym9yZGVyLWNvbG9yOiMzYjVmOTl9LmJvcmRlci1cW1wjNWY2MjY4XF17Ym9yZGVyLWNvbG9yOiM1ZjYyNjh9LmJvcmRlci1cW1wjMjIyXF17Ym9yZGVyLWNvbG9yOiMyMjJ9LmJvcmRlci1hY2NlbnR7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJvcmRlci1kYW5nZXJcLzIwe2JvcmRlci1jb2xvcjojZjg3MTcxMzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjojZjg3MTcxNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6I2ZiYmYyNDQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZXtib3JkZXItY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItdC1cW1wjZjRmNGY1XF17Ym9yZGVyLXRvcC1jb2xvcjojZjRmNGY1fS5ib3JkZXItdC13aGl0ZXtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMwYTg0ZmZcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmZ9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMyMDJiM2FcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMDJiM2F9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMyNjM2NGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyNjM2NGN9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbXCNmODcxNzFcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzF9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoOTlcLDEwMlwsMjQxXCwwXC4xOFwpXF17YmFja2dyb3VuZC1jb2xvcjojNjM2NmYxMmV9LmJnLWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJnLWJsYWNre2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYmxhY2spfS5iZy1kYW5nZXItc29mdHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0uYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzExYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikxMCUsdHJhbnNwYXJlbnQpfX0uYmctcGFnZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhZ2UpfS5iZy1wYW5lbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsKX0uYmctcGFuZWwtYmd7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZyl9LmJnLXBhbmVsLWJnLXRyYW5zbHVjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQpfS5iZy1wYW5lbC1kZWVwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtZGVlcCl9LmJnLXBhbmVsLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1vdmVybGF5KX0uYmctc3VjY2Vzcy1lbWVyYWxke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkKX0uYmctdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjojZmJiZjI0MWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzUwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wOFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xNlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTYlLHRyYW5zcGFyZW50KX19LmJnLVxbbGluZWFyLWdyYWRpZW50XCgxNDVkZWdcLFwjMjUzYTVmXCxcIzE2MjEzMlwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMil9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19ib3R0b21cLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlIDAlLCMxYzFjMWUwMCAxMDAlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMFwlXCxcIzFjMWMxZV81NVwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg5MGRlZywjMWMxYzFlMDAgMCUsIzFjMWMxZSA1NSUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fdG9wXCxcIzFjMWMxZV8wXCVcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzFjMWMxZTAwIDAlLCMxYzFjMWUgMTAwJSl9Lm9iamVjdC1jb250YWlue29iamVjdC1maXQ6Y29udGFpbn0ub2JqZWN0LWNvdmVye29iamVjdC1maXQ6Y292ZXJ9LnAtMHtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMCl9LnAtMFwuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wLTF7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wLTNcLjV7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnAtNntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB4LTBcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB4LTF7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHgtMVwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB4LTJ7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHgtMlwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB4LTN7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucHgtM1wuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnB4LTR7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucHgtNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5weC1cWzVcLjVweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjUuNXB4O3BhZGRpbmctaW5saW5lLWVuZDo1LjVweH0ucHgtXFs3cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo3cHg7cGFkZGluZy1pbmxpbmUtZW5kOjdweH0ucHktMFwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5weS0xe3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHktMVwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHktMntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMil9LnB5LTJcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB5LTR7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weS02e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHktXFsycHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjJweDtwYWRkaW5nLWJsb2NrLWVuZDoycHh9LnB5LVxbM3B4XF17cGFkZGluZy1ibG9jay1zdGFydDozcHg7cGFkZGluZy1ibG9jay1lbmQ6M3B4fS5weS1cWzVweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6NXB4O3BhZGRpbmctYmxvY2stZW5kOjVweH0ucHktXFs3cHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjdweDtwYWRkaW5nLWJsb2NrLWVuZDo3cHh9LnB0LTBcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB0LTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHQtMlwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci0zXC41e3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLTF7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucGItMVwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnBiLTJ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGItXFsycHhcXXtwYWRkaW5nLWJvdHRvbToycHh9LnBsLTJ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnBsLTJcLjV7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucGwtM3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucGwtN3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0ucGwtXFsyNnB4XF17cGFkZGluZy1sZWZ0OjI2cHh9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS5cW2ZvbnQtZmFtaWx5XDotYXBwbGUtc3lzdGVtXCxzeXN0ZW0tdWlcLHNhbnMtc2VyaWZcXXtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLE5vdG8gU2FucyxVYnVudHUsQ2FudGFyZWxsLEhlbHZldGljYSBOZXVlLHNhbnMtc2VyaWZ9LmZvbnQtXFtpbmhlcml0XF17Zm9udC1mYW1pbHk6aW5oZXJpdH0uZm9udC1tb25ve2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyl9LmZvbnQtc3lzdGVte2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc3lzdGVtKX0udGV4dC1cWzlweFxde2ZvbnQtc2l6ZTo5cHh9LnRleHQtXFsxMHB4XF17Zm9udC1zaXplOjEwcHh9LnRleHQtXFsxMVwuNXB4XF17Zm9udC1zaXplOjExLjVweH0udGV4dC1cWzExcHhcXXtmb250LXNpemU6MTFweH0udGV4dC1cWzEycHhcXXtmb250LXNpemU6MTJweH0udGV4dC1cWzEzcHhcXXtmb250LXNpemU6MTNweH0udGV4dC1cWzE0cHhcXXtmb250LXNpemU6MTRweH0udGV4dC1cWzE3cHhcXXtmb250LXNpemU6MTdweH0udGV4dC1cWzE4cHhcXXtmb250LXNpemU6MThweH0ubGVhZGluZy1cWzFcLjVcXXstLXR3LWxlYWRpbmc6MS41O2xpbmUtaGVpZ2h0OjEuNX0ubGVhZGluZy1cWzFcLjM1XF17LS10dy1sZWFkaW5nOjEuMzU7bGluZS1oZWlnaHQ6MS4zNX0ubGVhZGluZy1ub25ley0tdHctbGVhZGluZzoxO2xpbmUtaGVpZ2h0OjF9LmxlYWRpbmctc251Z3stLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy1zbnVnKTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXNudWcpfS5sZWFkaW5nLXRpZ2h0ey0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXRpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXRpZ2h0KX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtc2VtaWJvbGR7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50cmFja2luZy1cWzBcLjFlbVxdey0tdHctdHJhY2tpbmc6LjFlbTtsZXR0ZXItc3BhY2luZzouMWVtfS50cmFja2luZy1cWzBcLjAyZW1cXXstLXR3LXRyYWNraW5nOi4wMmVtO2xldHRlci1zcGFjaW5nOi4wMmVtfS50cmFja2luZy1cWzBcLjA0ZW1cXXstLXR3LXRyYWNraW5nOi4wNGVtO2xldHRlci1zcGFjaW5nOi4wNGVtfS50cmFja2luZy1cWzBcLjA2ZW1cXXstLXR3LXRyYWNraW5nOi4wNmVtO2xldHRlci1zcGFjaW5nOi4wNmVtfS50cmFja2luZy1cWzBcLjA4ZW1cXXstLXR3LXRyYWNraW5nOi4wOGVtO2xldHRlci1zcGFjaW5nOi4wOGVtfS50cmFja2luZy13aWRley0tdHctdHJhY2tpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSl9LmJyZWFrLXdvcmRze292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0udGV4dC1lbGxpcHNpc3t0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LlwhdGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSkhaW1wb3J0YW50fS50ZXh0LVxbXCMwYTBhMGNcXXtjb2xvcjojMGEwYTBjfS50ZXh0LVxbXCM4ZThlOTNcXXtjb2xvcjojOGU4ZTkzfS50ZXh0LVxbXCMzNGQzOTlcXXtjb2xvcjojMzRkMzk5fS50ZXh0LVxbXCMwNjIwMThcXXtjb2xvcjojMDYyMDE4fS50ZXh0LVxbXCNjOGQ3ZmZcXXtjb2xvcjojYzhkN2ZmfS50ZXh0LVxbXCNkMmU3ZmZcXXtjb2xvcjojZDJlN2ZmfS50ZXh0LWFjY2VudHtjb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS50ZXh0LWRhbmdlcntjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfS50ZXh0LWRhbmdlci1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0udGV4dC13YXJuaW5nLXNvZnR7Y29sb3I6dmFyKC0tY29sb3Itd2FybmluZy1zb2Z0KX0udGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LnRleHQtd2hpdGVcLzM1e2NvbG9yOiNmZmZmZmY1OX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC8zNXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQwe2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNDV7Y29sb3I6I2ZmZmZmZjczfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQ1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTB7Y29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzUwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTV7Y29sb3I6I2ZmZmZmZjhjfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzU1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjB7Y29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNjB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC82NXtjb2xvcjojZmZmZmZmYTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNjV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTY1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC83MHtjb2xvcjojZmZmZmZmYjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNzB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTcwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC83NXtjb2xvcjojZmZmZmZmYmZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTc1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84MHtjb2xvcjojZmZmY31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzg1e2NvbG9yOiNmZmZmZmZkOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzkwe2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzk1e2NvbG9yOiNmZmZmZmZmMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjojZmZmZmZmNmJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MiUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOiNmZmZmZmY3YX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjQ4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQ4JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6I2ZmZmZmZjk0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNThcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTguMCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOiNmZmZmZmZlYn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjkyXF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkyJSx0cmFuc3BhcmVudCl9fS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LnRhYnVsYXItbnVtc3stLXR3LW51bWVyaWMtc3BhY2luZzp0YWJ1bGFyLW51bXM7Zm9udC12YXJpYW50LW51bWVyaWM6dmFyKC0tdHctb3JkaW5hbCwpdmFyKC0tdHctc2xhc2hlZC16ZXJvLCl2YXIoLS10dy1udW1lcmljLWZpZ3VyZSwpdmFyKC0tdHctbnVtZXJpYy1zcGFjaW5nLCl2YXIoLS10dy1udW1lcmljLWZyYWN0aW9uLCl9LlxbZm9udC12YXJpYW50LW51bWVyaWNcOnRhYnVsYXItbnVtc1xde2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ubm8tdW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmV9LmFudGlhbGlhc2Vkey13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlfS5vcGFjaXR5LTB7b3BhY2l0eTowfS5vcGFjaXR5LTQwe29wYWNpdHk6LjR9Lm9wYWNpdHktNjB7b3BhY2l0eTouNn0ub3BhY2l0eS0xMDB7b3BhY2l0eToxfS5zaGFkb3d7LS10dy1zaGFkb3c6MCAxcHggM3B4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSksMCAxcHggMnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMThcKVwsMF82cHhfMThweF9yZ2JhXCgwXCwwXCwwXCwwXC4yOFwpXCxpbnNldF8wXzBfMF8xcHhfcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMDZcKVxdey0tdHctc2hhZG93OjAgMXB4IDJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDJlKSwwIDZweCAxOHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNDcpLGluc2V0IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsI2ZmZmZmZjBmKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNFwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC41XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwODApO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMTJweF80MHB4X3JnYmFcKDBcLDBcLDBcLDBcLjU1XClcXXstLXR3LXNoYWRvdzowIDEycHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDhjKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzhweF8wXzMycHhfcmdiYVwoMFwsMFwsMFwsMFwuMzVcKVxdey0tdHctc2hhZG93OjhweCAwIDMycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA1OSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5yaW5nLC5yaW5nLTF7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDFweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5yaW5nLTJ7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDJweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoNzRcLDIyMlwsMTI4XCwwXC43XClcXXtib3gtc2hhZG93OjAgMCA2cHggIzRhZGU4MGIzfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoMjQ4XCwxMTNcLDExM1wsMFwuNTVcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjZjg3MTcxOGN9LnJpbmctXFtcIzFjMWMxZVxdey0tdHctcmluZy1jb2xvcjojMWMxYzFlfS5yaW5nLXdoaXRlXC8xMHstLXR3LXJpbmctY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZ3JheXNjYWxley0tdHctZ3JheXNjYWxlOmdyYXlzY2FsZSgxMDAlKTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmZpbHRlcntmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmJhY2tkcm9wLWJsdXJ7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMTJweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDEycHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxOHB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMThweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1tZHstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cih2YXIoLS1ibHVyLW1kKSk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3Atc2F0dXJhdGUtMTUwey0tdHctYmFja2Ryb3Atc2F0dXJhdGU6c2F0dXJhdGUoMTUwJSk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtZmlsdGVyey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LnRyYW5zaXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10byxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLHRyYW5zbGF0ZSxzY2FsZSxyb3RhdGUsZmlsdGVyLC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyLGJhY2tkcm9wLWZpbHRlcixkaXNwbGF5LGNvbnRlbnQtdmlzaWJpbGl0eSxvdmVybGF5LHBvaW50ZXItZXZlbnRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFtib3JkZXItY29sb3JcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFt3aWR0aFwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6d2lkdGgsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0uZHVyYXRpb24tMTUwey0tdHctZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHstLXR3LWR1cmF0aW9uOi4yczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZHVyYXRpb24tMzAwey0tdHctZHVyYXRpb246LjNzO3RyYW5zaXRpb24tZHVyYXRpb246LjNzfS5lYXNlLW91dHstLXR3LWVhc2U6dmFyKC0tZWFzZS1vdXQpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2Utb3V0KX0ub3V0bGluZS1ub25ley0tdHctb3V0bGluZS1zdHlsZTpub25lO291dGxpbmUtc3R5bGU6bm9uZX0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdC10ZXh0ey13ZWJraXQtdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0fS5cWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyXDpibHVyXCgxMnB4XClcXXstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpfS5cW3Njcm9sbGJhci13aWR0aFw6dGhpblxde3Njcm9sbGJhci13aWR0aDp0aGlufS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMnNcLGJveC1zaGFkb3dfMFwuMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzLGJveC1zaGFkb3cgLjJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuM3NcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjNzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxib3JkZXItY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsYm9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE1c1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcLGNvbG9yXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXMsY29sb3IgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xOHNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMThzfS5cW3RyYW5zaXRpb25cOmxlZnRfMFwuMTVzXF17dHJhbnNpdGlvbjpsZWZ0IC4xNXN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xMnNcLGJhY2tncm91bmRfMFwuMTJzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLGJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyxiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsdHJhbnNmb3JtXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsdHJhbnNmb3JtIC4xNXN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xOHNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMThzfS5cW3RyYW5zaXRpb25cOnBhZGRpbmdfMFwuMjVzX2Vhc2VcXXt0cmFuc2l0aW9uOnBhZGRpbmcgLjI1c30uXFt0cmFuc2l0aW9uXDp0cmFuc2Zvcm1fMFwuMjVzX2Vhc2VcLG9wYWNpdHlfMFwuMnNfZWFzZVxde3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMsb3BhY2l0eSAuMnN9LlxbdHJhbnNpdGlvblw6d2lkdGhfMTIwbXNfbGluZWFyXF17dHJhbnNpdGlvbjp3aWR0aCAuMTJzIGxpbmVhcn0uZ3JvdXAtZm9jdXMtd2l0aGluXDpvcGFjaXR5LTA6aXMoOndoZXJlKC5ncm91cCk6Zm9jdXMtd2l0aGluICope29wYWNpdHk6MH1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOnBvaW50ZXItZXZlbnRzLWF1dG86aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7cG9pbnRlci1ldmVudHM6YXV0b319QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpoaWRkZW46aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7ZGlzcGxheTpub25lfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOnRyYW5zbGF0ZS14LTA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjApO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope29wYWNpdHk6MH19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjF9fS5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnBsYWNlaG9sZGVyXDp0ZXh0LXdoaXRlXC80MDo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5mb2N1cy13aXRoaW5cOmJnLXdoaXRlXC8xMDpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMTZcKVxdOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmMjl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMThcKVxdOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmMmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDpob3Zlcntib3JkZXItY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzEyOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYyZX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzE4OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTE4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMjU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDVcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDVcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wN1xdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjEyfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wN1xdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTcuMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE3fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTklLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LVxbXCMwYTBhMGNcXTpob3Zlcntjb2xvcjojMGEwYTBjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGU6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzg1OmhvdmVye2NvbG9yOiNmZmZmZmZkOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvODU6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fX0uZm9jdXNcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjI0XClcXTpmb2N1c3tib3JkZXItY29sb3I6I2ZmZmZmZjNkfS5mb2N1c1w6Ymctd2hpdGVcL1xbMFwuMDhcXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1c1w6Ymctd2hpdGVcL1xbMFwuMDhcXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1c1w6b3V0bGluZS1ub25lOmZvY3Vzey0tdHctb3V0bGluZS1zdHlsZTpub25lO291dGxpbmUtc3R5bGU6bm9uZX0uZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpiZy13aGl0ZVwvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmZvY3VzLXZpc2libGVcOm9wYWNpdHktMTAwOmZvY3VzLXZpc2libGV7b3BhY2l0eToxfS5mb2N1cy12aXNpYmxlXDpcW291dGxpbmVcOjFcLjVweF9zb2xpZF9yZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjU1XClcXTpmb2N1cy12aXNpYmxle291dGxpbmU6MS41cHggc29saWQgIzBhODRmZjhjfS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS0yOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtMjpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtNDpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjRweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS13aGl0ZVwvNjA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOm91dGxpbmUtd2hpdGVcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LmFjdGl2ZVw6c2NhbGUtXFswXC45N1xdOmFjdGl2ZXtzY2FsZTouOTd9QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLVxbXCMyYTJhMmNcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzJhMmEyY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTklLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjM4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06ZW5hYmxlZDpob3Zlcntjb2xvcjojMGEwYTBjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtd2hpdGU6ZW5hYmxlZDpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YnJpZ2h0bmVzcy1cWzFcLjA4XF06ZW5hYmxlZDpob3ZlcnstLXR3LWJyaWdodG5lc3M6YnJpZ2h0bmVzcygxLjA4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9fS5kaXNhYmxlZFw6Y3Vyc29yLWRlZmF1bHQ6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZGlzYWJsZWRcOm9wYWNpdHktNDA6ZGlzYWJsZWR7b3BhY2l0eTouNH0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX1AbWVkaWEgKG1heC13aWR0aDo4OTkuOTk5cHgpey5tYXgtXFs5MDBweFxdXDpoaWRkZW57ZGlzcGxheTpub25lfX0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXByb2dyZXNze2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6YmctXFt2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKVxdOjotbW96LXJhbmdlLXByb2dyZXNze2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LW1vei1yYW5nZS10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ym9yZGVyLW5vbmU6Oi1tb3otcmFuZ2UtdGh1bWJ7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXRyYWNre2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6Ymctd2hpdGVcLzIwOjotbW96LXJhbmdlLXRyYWNre2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOlxbYmFja2dyb3VuZFw6bGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClfdmFyXCgtLXNsaWRlci1maWxsXClcLHJnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjIyXClfdmFyXCgtLXNsaWRlci1maWxsXClcKVxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil2YXIoLS1zbGlkZXItZmlsbCksI2ZmZmZmZjM4IHZhcigtLXNsaWRlci1maWxsKSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6LW10LVxbNFwuNXB4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie21hcmdpbi10b3A6LTQuNXB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6YXBwZWFyYW5jZS1ub25lOjotd2Via2l0LXNsaWRlci10aHVtYnthcHBlYXJhbmNlOm5vbmV9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotd2Via2l0LXNsaWRlci10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2hhZG93LVxbMF8xcHhfM3B4X3JnYmFcKDBcLDBcLDBcLDBcLjQ1XClcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7LS10dy1zaGFkb3c6MCAxcHggM3B4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNzMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX19OnJvb3R7LS1idW5jc3MtbGlnaHQ6IDstLWJ1bmNzcy1kYXJrOmluaXRpYWw7Y29sb3Itc2NoZW1lOmRhcms7LS1zZXJ2ZS1zaW0tcGFuZWwtYmc6IzE4MTgxODstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudDojMTgxODE4Yzc7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNwYXJlbnQ6IzE4MTgxODAwfUBzdXBwb3J0cyAoaW50ZXJwb2xhdGUtc2l6ZTogYWxsb3cta2V5d29yZHMpezpyb290e2ludGVycG9sYXRlLXNpemU6YWxsb3cta2V5d29yZHN9fWRldGFpbHMubGVtLXNlY3Rpb246OmRldGFpbHMtY29udGVudHtvdmVyZmxvdzpjbGlwO3RyYW5zaXRpb246aGVpZ2h0IC4yMnMgZWFzZSxjb250ZW50LXZpc2liaWxpdHkgLjIycyBhbGxvdy1kaXNjcmV0ZTtoZWlnaHQ6MH1kZXRhaWxzLmxlbS1zZWN0aW9uW29wZW5dOjpkZXRhaWxzLWNvbnRlbnR7aGVpZ2h0OmF1dG99ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5e2xpc3Qtc3R5bGU6bm9uZX1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTpob3Zlcntjb2xvcjojZmZmfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTpob3ZlciAubGVtLWNoZXZyb257Y29sb3I6I2ZmZmZmZmQ5IWltcG9ydGFudH0ubGVtLWNoZXZyb257dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE2cyxjb2xvciAuMTJzfUBjb250YWluZXIgKHdpZHRoPD0yMTBweCl7W2RhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsXXtkaXNwbGF5Om5vbmV9fUBrZXlmcmFtZXMgZ3JpZC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDI1MCUpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3AtaW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEycHgpc2NhbGUoLjk2KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLW91dHswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoOHB4KXNjYWxlKC45Nil9fS5zZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXthbmltYXRpb246c2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZX0uZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5ncmlkLXRpbGU6aG92ZXIgLmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MX0uZ3JpZC1zaHV0ZG93bi1idG46aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM1YTFkMWQ7Ym9yZGVyLWNvbG9yOiNhMzN9LmdyaWQtdGlsZTpob3Zlcntib3JkZXItY29sb3I6IzU1NSFpbXBvcnRhbnR9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcm90YXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYm9yZGVyLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1sZWFkaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZm9udC13ZWlnaHR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy10cmFja2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9yZGluYWx7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zbGFzaGVkLXplcm97c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZpZ3VyZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtc3BhY2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZnJhY3Rpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZWFzZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKC13ZWJraXQtaHlwaGVuczogbm9uZSkgYW5kICggbm90IChtYXJnaW4tdHJpbTogaW5saW5lKSkpIG9yICgoLW1vei1vcmllbnQ6IGlubGluZSkgYW5kICggbm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpeyosOmJlZm9yZSw6YWZ0ZXIsOjpiYWNrZHJvcHstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctdHJhbnNsYXRlLXo6MDstLXR3LXJvdGF0ZS14OmluaXRpYWw7LS10dy1yb3RhdGUteTppbml0aWFsOy0tdHctcm90YXRlLXo6aW5pdGlhbDstLXR3LXNrZXcteDppbml0aWFsOy0tdHctc2tldy15OmluaXRpYWw7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LW9yZGluYWw6aW5pdGlhbDstLXR3LXNsYXNoZWQtemVybzppbml0aWFsOy0tdHctbnVtZXJpYy1maWd1cmU6aW5pdGlhbDstLXR3LW51bWVyaWMtc3BhY2luZzppbml0aWFsOy0tdHctbnVtZXJpYy1mcmFjdGlvbjppbml0aWFsOy0tdHctc2hhZG93OjAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctc2hhZG93LWFscGhhOjEwMCU7LS10dy1pbnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LXJpbmctaW5zZXQ6aW5pdGlhbDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOjBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiNmZmY7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctb3V0bGluZS1zdHlsZTpzb2xpZDstLXR3LWJsdXI6aW5pdGlhbDstLXR3LWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWNvbnRyYXN0OmluaXRpYWw7LS10dy1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWludmVydDppbml0aWFsOy0tdHctb3BhY2l0eTppbml0aWFsOy0tdHctc2F0dXJhdGU6aW5pdGlhbDstLXR3LXNlcGlhOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdzppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWFscGhhOjEwMCU7LS10dy1kcm9wLXNoYWRvdy1zaXplOmluaXRpYWw7LS10dy1iYWNrZHJvcC1ibHVyOmluaXRpYWw7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1iYWNrZHJvcC1jb250cmFzdDppbml0aWFsOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1pbnZlcnQ6aW5pdGlhbDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1zZXBpYTppbml0aWFsOy0tdHctZHVyYXRpb246aW5pdGlhbDstLXR3LWVhc2U6aW5pdGlhbH19fQo8L3N0eWxlPgo8L2hlYWQ+PGJvZHk+CjxkaXYgaWQ9InJvb3QiPjwvZGl2Pgo8IS0tX19TSU1fUFJFVklFV19DT05GSUdfXy0tPgo8c2NyaXB0IHR5cGU9Im1vZHVsZSI+dmFyIHEyLG8scDMsWjQsVDAsaDMsdTMsbDMsdzUsZjIsWDIsZDMsUzUsRTUsSTUsYzMsbTI9e30scDI9W10sSzQ9L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxHMj1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIEMwKCQsUSl7Zm9yKHZhciBKIGluIFEpJFtKXT1RW0pdO3JldHVybiAkfWZ1bmN0aW9uIHg1KCQpeyQmJiQucGFyZW50Tm9kZSYmJC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCQpfWZ1bmN0aW9uIGoxKCQsUSxKKXt2YXIgSyxYLFkscT17fTtmb3IoWSBpbiBRKVk9PSJrZXkiP0s9UVtZXTpZPT0icmVmIj9YPVFbWV06cVtZXT1RW1ldO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKHEuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP3EyLmNhbGwoYXJndW1lbnRzLDIpOkopLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYkLmRlZmF1bHRQcm9wcyE9bnVsbClmb3IoWSBpbiAkLmRlZmF1bHRQcm9wcylxW1ldPT09dm9pZCAwJiYocVtZXT0kLmRlZmF1bHRQcm9wc1tZXSk7cmV0dXJuIFkyKCQscSxLLFgsbnVsbCl9ZnVuY3Rpb24gWTIoJCxRLEosSyxYKXt2YXIgWT17dHlwZTokLHByb3BzOlEsa2V5OkoscmVmOkssX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Olg9PW51bGw/KytwMzpYLF9faTotMSxfX3U6MH07cmV0dXJuIFg9PW51bGwmJm8udm5vZGUhPW51bGwmJm8udm5vZGUoWSksWX1mdW5jdGlvbiBWMigpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIFExKCQpe3JldHVybiAkLmNoaWxkcmVufWZ1bmN0aW9uIGYxKCQsUSl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1RfWZ1bmN0aW9uIG0wKCQsUSl7aWYoUT09bnVsbClyZXR1cm4gJC5fXz9tMCgkLl9fLCQuX19pKzEpOm51bGw7Zm9yKHZhciBKO1E8JC5fX2subGVuZ3RoO1ErKylpZigoSj0kLl9fa1tRXSkhPW51bGwmJkouX19lIT1udWxsKXJldHVybiBKLl9fZTtyZXR1cm4gdHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIj9tMCgkKTpudWxsfWZ1bmN0aW9uIFg0KCQpe2lmKCQuX19QJiYkLl9fZCl7dmFyIFE9JC5fX3YsSj1RLl9fZSxLPVtdLFg9W10sWT1DMCh7fSxRKTtZLl9fdj1RLl9fdisxLG8udm5vZGUmJm8udm5vZGUoWSksajUoJC5fX1AsWSxRLCQuX19uLCQuX19QLm5hbWVzcGFjZVVSSSwzMiZRLl9fdT9bSl06bnVsbCxLLEo9PW51bGw/bTAoUSk6SiwhISgzMiZRLl9fdSksWCksWS5fX3Y9US5fX3YsWS5fXy5fX2tbWS5fX2ldPVksbjMoSyxZLFgpLFEuX19lPVEuX189bnVsbCxZLl9fZSE9SiYmcjMoWSl9fWZ1bmN0aW9uIHIzKCQpe2lmKCgkPSQuX18pIT1udWxsJiYkLl9fYyE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1udWxsLCQuX19rLnNvbWUoZnVuY3Rpb24oUSl7aWYoUSE9bnVsbCYmUS5fX2UhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9US5fX2V9KSxyMygkKX1mdW5jdGlvbiBiNSgkKXsoISQuX19kJiYoJC5fX2Q9ITApJiZUMC5wdXNoKCQpJiYhdTIuX19yKyt8fGgzIT1vLmRlYm91bmNlUmVuZGVyaW5nKSYmKChoMz1vLmRlYm91bmNlUmVuZGVyaW5nKXx8dTMpKHUyKX1mdW5jdGlvbiB1Migpe3RyeXtmb3IodmFyICQsUT0xO1QwLmxlbmd0aDspVDAubGVuZ3RoPlEmJlQwLnNvcnQobDMpLCQ9VDAuc2hpZnQoKSxRPVQwLmxlbmd0aCxYNCgkKX1maW5hbGx5e1QwLmxlbmd0aD11Mi5fX3I9MH19ZnVuY3Rpb24gbzMoJCxRLEosSyxYLFkscSxHLE4sQixVKXt2YXIgVix6LEwsQSxDLEgsTyxXPUsmJksuX19rfHxwMix4PVEubGVuZ3RoO2ZvcihOPVk0KEosUSxXLE4seCksVj0wO1Y8eDtWKyspKEw9Si5fX2tbVl0pIT1udWxsJiYoej1MLl9faSE9LTEmJldbTC5fX2ldfHxtMixMLl9faT1WLEg9ajUoJCxMLHosWCxZLHEsRyxOLEIsVSksQT1MLl9fZSxMLnJlZiYmei5yZWYhPUwucmVmJiYoei5yZWYmJnY1KHoucmVmLG51bGwsTCksVS5wdXNoKEwucmVmLEwuX19jfHxBLEwpKSxDPT1udWxsJiZBIT1udWxsJiYoQz1BKSwoTz0hISg0JkwuX191KSl8fHouX19rPT09TC5fX2s/KE49aTMoTCxOLCQsTyksTyYmei5fX2UmJih6Ll9fZT1udWxsKSk6dHlwZW9mIEwudHlwZT09ImZ1bmN0aW9uIiYmSCE9PXZvaWQgMD9OPUg6QSYmKE49QS5uZXh0U2libGluZyksTC5fX3UmPS03KTtyZXR1cm4gSi5fX2U9QyxOfWZ1bmN0aW9uIFk0KCQsUSxKLEssWCl7dmFyIFkscSxHLE4sQixVPUoubGVuZ3RoLFY9VSx6PTA7Zm9yKCQuX19rPUFycmF5KFgpLFk9MDtZPFg7WSsrKShxPVFbWV0pIT1udWxsJiZ0eXBlb2YgcSE9ImJvb2xlYW4iJiZ0eXBlb2YgcSE9ImZ1bmN0aW9uIj8odHlwZW9mIHE9PSJzdHJpbmcifHx0eXBlb2YgcT09Im51bWJlciJ8fHR5cGVvZiBxPT0iYmlnaW50Inx8cS5jb25zdHJ1Y3Rvcj09U3RyaW5nP3E9JC5fX2tbWV09WTIobnVsbCxxLG51bGwsbnVsbCxudWxsKTpHMihxKT9xPSQuX19rW1ldPVkyKFExLHtjaGlsZHJlbjpxfSxudWxsLG51bGwsbnVsbCk6cS5jb25zdHJ1Y3Rvcj09PXZvaWQgMCYmcS5fX2I+MD9xPSQuX19rW1ldPVkyKHEudHlwZSxxLnByb3BzLHEua2V5LHEucmVmP3EucmVmOm51bGwscS5fX3YpOiQuX19rW1ldPXEsTj1ZK3oscS5fXz0kLHEuX19iPSQuX19iKzEsRz1udWxsLChCPXEuX19pPXE0KHEsSixOLFYpKSE9LTEmJihWLS0sKEc9SltCXSkmJihHLl9fdXw9MikpLEc9PW51bGx8fEcuX192PT1udWxsPyhCPT0tMSYmKFg+VT96LS06WDxVJiZ6KyspLHR5cGVvZiBxLnR5cGUhPSJmdW5jdGlvbiImJihxLl9fdXw9NCkpOkIhPU4mJihCPT1OLTE/ei0tOkI9PU4rMT96Kys6KEI+Tj96LS06eisrLHEuX191fD00KSkpOiQuX19rW1ldPW51bGw7aWYoVilmb3IoWT0wO1k8VTtZKyspKEc9SltZXSkhPW51bGwmJigyJkcuX191KT09MCYmKEcuX19lPT1LJiYoSz1tMChHKSksczMoRyxHKSk7cmV0dXJuIEt9ZnVuY3Rpb24gaTMoJCxRLEosSyl7dmFyIFgsWTtpZih0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iKXtmb3IoWD0kLl9fayxZPTA7WCYmWTxYLmxlbmd0aDtZKyspWFtZXSYmKFhbWV0uX189JCxRPWkzKFhbWV0sUSxKLEspKTtyZXR1cm4gUX0kLl9fZSE9USYmKEsmJihRJiYkLnR5cGUmJiFRLnBhcmVudE5vZGUmJihRPW0wKCQpKSxKLmluc2VydEJlZm9yZSgkLl9fZSxRfHxudWxsKSksUT0kLl9fZSk7ZG8gUT1RJiZRLm5leHRTaWJsaW5nO3doaWxlKFEhPW51bGwmJlEubm9kZVR5cGU9PTgpO3JldHVybiBRfWZ1bmN0aW9uIHMxKCQsUSl7cmV0dXJuIFE9UXx8W10sJD09bnVsbHx8dHlwZW9mICQ9PSJib29sZWFuInx8KEcyKCQpPyQuc29tZShmdW5jdGlvbihKKXtzMShKLFEpfSk6US5wdXNoKCQpKSxRfWZ1bmN0aW9uIHE0KCQsUSxKLEspe3ZhciBYLFkscSxHPSQua2V5LE49JC50eXBlLEI9UVtKXSxVPUIhPW51bGwmJigyJkIuX191KT09MDtpZihCPT09bnVsbCYmRz09bnVsbHx8VSYmRz09Qi5rZXkmJk49PUIudHlwZSlyZXR1cm4gSjtpZihLPihVPzE6MCkpe2ZvcihYPUotMSxZPUorMTtYPj0wfHxZPFEubGVuZ3RoOylpZigoQj1RW3E9WD49MD9YLS06WSsrXSkhPW51bGwmJigyJkIuX191KT09MCYmRz09Qi5rZXkmJk49PUIudHlwZSlyZXR1cm4gcX1yZXR1cm4tMX1mdW5jdGlvbiBmMygkLFEsSil7UVswXT09Ii0iPyQuc2V0UHJvcGVydHkoUSxKPT1udWxsPyIiOkopOiRbUV09Sj09bnVsbD8iIjp0eXBlb2YgSiE9Im51bWJlciJ8fEs0LnRlc3QoUSk/SjpKKyJweCJ9ZnVuY3Rpb24gaDIoJCxRLEosSyxYKXt2YXIgWSxxOyQ6aWYoUT09InN0eWxlIilpZih0eXBlb2YgSj09InN0cmluZyIpJC5zdHlsZS5jc3NUZXh0PUo7ZWxzZXtpZih0eXBlb2YgSz09InN0cmluZyImJigkLnN0eWxlLmNzc1RleHQ9Sz0iIiksSylmb3IoUSBpbiBLKUomJlEgaW4gSnx8ZjMoJC5zdHlsZSxRLCIiKTtpZihKKWZvcihRIGluIEopSyYmSltRXT09S1tRXXx8ZjMoJC5zdHlsZSxRLEpbUV0pfWVsc2UgaWYoUVswXT09Im8iJiZRWzFdPT0ibiIpWT1RIT0oUT1RLnJlcGxhY2UoZDMsIiQxIikpLHE9US50b0xvd2VyQ2FzZSgpLFE9cSBpbiAkfHxRPT0ib25Gb2N1c091dCJ8fFE9PSJvbkZvY3VzSW4iP3Euc2xpY2UoMik6US5zbGljZSgyKSwkLmx8fCgkLmw9e30pLCQubFtRK1ldPUosSj9LP0pbWDJdPUtbWDJdOihKW1gyXT1TNSwkLmFkZEV2ZW50TGlzdGVuZXIoUSxZP0k1OkU1LFkpKTokLnJlbW92ZUV2ZW50TGlzdGVuZXIoUSxZP0k1OkU1LFkpO2Vsc2V7aWYoWD09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIilRPVEucmVwbGFjZSgveGxpbmsoSHw6aCkvLCJoIikucmVwbGFjZSgvc05hbWUkLywicyIpO2Vsc2UgaWYoUSE9IndpZHRoIiYmUSE9ImhlaWdodCImJlEhPSJocmVmIiYmUSE9Imxpc3QiJiZRIT0iZm9ybSImJlEhPSJ0YWJJbmRleCImJlEhPSJkb3dubG9hZCImJlEhPSJyb3dTcGFuIiYmUSE9ImNvbFNwYW4iJiZRIT0icm9sZSImJlEhPSJwb3BvdmVyIiYmUSBpbiAkKXRyeXskW1FdPUo9PW51bGw/IiI6SjticmVhayAkfWNhdGNoKEcpe310eXBlb2YgSj09ImZ1bmN0aW9uInx8KEo9PW51bGx8fEo9PT0hMSYmUVs0XSE9Ii0iPyQucmVtb3ZlQXR0cmlidXRlKFEpOiQuc2V0QXR0cmlidXRlKFEsUT09InBvcG92ZXIiJiZKPT0xPyIiOkopKX19ZnVuY3Rpb24gbTMoJCl7cmV0dXJuIGZ1bmN0aW9uKFEpe2lmKHRoaXMubCl7dmFyIEo9dGhpcy5sW1EudHlwZSskXTtpZihRW2YyXT09bnVsbClRW2YyXT1TNSsrO2Vsc2UgaWYoUVtmMl08SltYMl0pcmV0dXJuO3JldHVybiBKKG8uZXZlbnQ/by5ldmVudChRKTpRKX19fWZ1bmN0aW9uIGo1KCQsUSxKLEssWCxZLHEsRyxOLEIpe3ZhciBVLFYseixMLEEsQyxILE8sVyx4LEUsYixqLFoxLGYsaD1RLnR5cGU7aWYoUS5jb25zdHJ1Y3RvciE9PXZvaWQgMClyZXR1cm4gbnVsbDsxMjgmSi5fX3UmJihOPSEhKDMyJkouX191KSxZPVtHPVEuX19lPUouX19lXSksKFU9by5fX2IpJiZVKFEpOyQ6aWYodHlwZW9mIGg9PSJmdW5jdGlvbiIpdHJ5e2lmKE89US5wcm9wcyxXPWgucHJvdG90eXBlJiZoLnByb3RvdHlwZS5yZW5kZXIseD0oVT1oLmNvbnRleHRUeXBlKSYmS1tVLl9fY10sRT1VP3g/eC5wcm9wcy52YWx1ZTpVLl9fOkssSi5fX2M/SD0oVj1RLl9fYz1KLl9fYykuX189Vi5fX0U6KFc/US5fX2M9Vj1uZXcgaChPLEUpOihRLl9fYz1WPW5ldyBmMShPLEUpLFYuY29uc3RydWN0b3I9aCxWLnJlbmRlcj1WNCkseCYmeC5zdWIoViksVi5zdGF0ZXx8KFYuc3RhdGU9e30pLFYuX19uPUssej1WLl9fZD0hMCxWLl9faD1bXSxWLl9zYj1bXSksVyYmVi5fX3M9PW51bGwmJihWLl9fcz1WLnN0YXRlKSxXJiZoLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyE9bnVsbCYmKFYuX19zPT1WLnN0YXRlJiYoVi5fX3M9QzAoe30sVi5fX3MpKSxDMChWLl9fcyxoLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhPLFYuX19zKSkpLEw9Vi5wcm9wcyxBPVYuc3RhdGUsVi5fX3Y9USx6KVcmJmguZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZWLmNvbXBvbmVudFdpbGxNb3VudCE9bnVsbCYmVi5jb21wb25lbnRXaWxsTW91bnQoKSxXJiZWLmNvbXBvbmVudERpZE1vdW50IT1udWxsJiZWLl9faC5wdXNoKFYuY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYoVyYmaC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJk8hPT1MJiZWLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPW51bGwmJlYuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhPLEUpLFEuX192PT1KLl9fdnx8IVYuX19lJiZWLnNob3VsZENvbXBvbmVudFVwZGF0ZSE9bnVsbCYmVi5zaG91bGRDb21wb25lbnRVcGRhdGUoTyxWLl9fcyxFKT09PSExKXtRLl9fdiE9Si5fX3YmJihWLnByb3BzPU8sVi5zdGF0ZT1WLl9fcyxWLl9fZD0hMSksUS5fX2U9Si5fX2UsUS5fX2s9Si5fX2ssUS5fX2suc29tZShmdW5jdGlvbihkKXtkJiYoZC5fXz1RKX0pLHAyLnB1c2guYXBwbHkoVi5fX2gsVi5fc2IpLFYuX3NiPVtdLFYuX19oLmxlbmd0aCYmcS5wdXNoKFYpO2JyZWFrICR9Vi5jb21wb25lbnRXaWxsVXBkYXRlIT1udWxsJiZWLmNvbXBvbmVudFdpbGxVcGRhdGUoTyxWLl9fcyxFKSxXJiZWLmNvbXBvbmVudERpZFVwZGF0ZSE9bnVsbCYmVi5fX2gucHVzaChmdW5jdGlvbigpe1YuY29tcG9uZW50RGlkVXBkYXRlKEwsQSxDKX0pfWlmKFYuY29udGV4dD1FLFYucHJvcHM9TyxWLl9fUD0kLFYuX19lPSExLGI9by5fX3Isaj0wLFcpVi5zdGF0ZT1WLl9fcyxWLl9fZD0hMSxiJiZiKFEpLFU9Vi5yZW5kZXIoVi5wcm9wcyxWLnN0YXRlLFYuY29udGV4dCkscDIucHVzaC5hcHBseShWLl9faCxWLl9zYiksVi5fc2I9W107ZWxzZSBkbyBWLl9fZD0hMSxiJiZiKFEpLFU9Vi5yZW5kZXIoVi5wcm9wcyxWLnN0YXRlLFYuY29udGV4dCksVi5zdGF0ZT1WLl9fczt3aGlsZShWLl9fZCYmKytqPDI1KTtWLnN0YXRlPVYuX19zLFYuZ2V0Q2hpbGRDb250ZXh0IT1udWxsJiYoSz1DMChDMCh7fSxLKSxWLmdldENoaWxkQ29udGV4dCgpKSksVyYmIXomJlYuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPW51bGwmJihDPVYuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoTCxBKSksWjE9VSE9bnVsbCYmVS50eXBlPT09UTEmJlUua2V5PT1udWxsP2EzKFUucHJvcHMuY2hpbGRyZW4pOlUsRz1vMygkLEcyKFoxKT9aMTpbWjFdLFEsSixLLFgsWSxxLEcsTixCKSxWLmJhc2U9US5fX2UsUS5fX3UmPS0xNjEsVi5fX2gubGVuZ3RoJiZxLnB1c2goViksSCYmKFYuX19FPVYuX189bnVsbCl9Y2F0Y2goZCl7aWYoUS5fX3Y9bnVsbCxOfHxZIT1udWxsKWlmKGQudGhlbil7Zm9yKFEuX191fD1OPzE2MDoxMjg7RyYmRy5ub2RlVHlwZT09OCYmRy5uZXh0U2libGluZzspRz1HLm5leHRTaWJsaW5nO1lbWS5pbmRleE9mKEcpXT1udWxsLFEuX19lPUd9ZWxzZXtmb3IoZj1ZLmxlbmd0aDtmLS07KXg1KFlbZl0pO3k1KFEpfWVsc2UgUS5fX2U9Si5fX2UsUS5fX2s9Si5fX2ssZC50aGVufHx5NShRKTtvLl9fZShkLFEsSil9ZWxzZSBZPT1udWxsJiZRLl9fdj09Si5fX3Y/KFEuX19rPUouX19rLFEuX19lPUouX19lKTpHPVEuX19lPUc0KEouX19lLFEsSixLLFgsWSxxLE4sQik7cmV0dXJuKFU9by5kaWZmZWQpJiZVKFEpLDEyOCZRLl9fdT92b2lkIDA6R31mdW5jdGlvbiB5NSgkKXskJiYoJC5fX2MmJigkLl9fYy5fX2U9ITApLCQuX19rJiYkLl9fay5zb21lKHk1KSl9ZnVuY3Rpb24gbjMoJCxRLEope2Zvcih2YXIgSz0wO0s8Si5sZW5ndGg7SysrKXY1KEpbS10sSlsrK0tdLEpbKytLXSk7by5fX2MmJm8uX19jKFEsJCksJC5zb21lKGZ1bmN0aW9uKFgpe3RyeXskPVguX19oLFguX19oPVtdLCQuc29tZShmdW5jdGlvbihZKXtZLmNhbGwoWCl9KX1jYXRjaChZKXtvLl9fZShZLFguX192KX19KX1mdW5jdGlvbiBhMygkKXtyZXR1cm4gdHlwZW9mICQhPSJvYmplY3QifHwkPT1udWxsfHwkLl9fYj4wPyQ6RzIoJCk/JC5tYXAoYTMpOkMwKHt9LCQpfWZ1bmN0aW9uIEc0KCQsUSxKLEssWCxZLHEsRyxOKXt2YXIgQixVLFYseixMLEEsQyxIPUoucHJvcHN8fG0yLE89US5wcm9wcyxXPVEudHlwZTtpZihXPT0ic3ZnIj9YPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6Vz09Im1hdGgiP1g9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOlh8fChYPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksWSE9bnVsbCl7Zm9yKEI9MDtCPFkubGVuZ3RoO0IrKylpZigoTD1ZW0JdKSYmInNldEF0dHJpYnV0ZSJpbiBMPT0hIVcmJihXP0wubG9jYWxOYW1lPT1XOkwubm9kZVR5cGU9PTMpKXskPUwsWVtCXT1udWxsO2JyZWFrfX1pZigkPT1udWxsKXtpZihXPT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShPKTskPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhYLFcsTy5pcyYmTyksRyYmKG8uX19tJiZvLl9fbShRLFkpLEc9ITEpLFk9bnVsbH1pZihXPT1udWxsKUg9PT1PfHxHJiYkLmRhdGE9PU98fCgkLmRhdGE9Tyk7ZWxzZXtpZihZPVkmJnEyLmNhbGwoJC5jaGlsZE5vZGVzKSwhRyYmWSE9bnVsbClmb3IoSD17fSxCPTA7QjwkLmF0dHJpYnV0ZXMubGVuZ3RoO0IrKylIWyhMPSQuYXR0cmlidXRlc1tCXSkubmFtZV09TC52YWx1ZTtmb3IoQiBpbiBIKUw9SFtCXSxCPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP1Y9TDpCPT0iY2hpbGRyZW4ifHwoQiBpbiBPKXx8Qj09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gTyl8fEI9PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiBPKXx8aDIoJCxCLG51bGwsTCxYKTtmb3IoQiBpbiBPKUw9T1tCXSxCPT0iY2hpbGRyZW4iP3o9TDpCPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP1U9TDpCPT0idmFsdWUiP0E9TDpCPT0iY2hlY2tlZCI/Qz1MOkcmJnR5cGVvZiBMIT0iZnVuY3Rpb24ifHxIW0JdPT09THx8aDIoJCxCLEwsSFtCXSxYKTtpZihVKUd8fFYmJihVLl9faHRtbD09Vi5fX2h0bWx8fFUuX19odG1sPT0kLmlubmVySFRNTCl8fCgkLmlubmVySFRNTD1VLl9faHRtbCksUS5fX2s9W107ZWxzZSBpZihWJiYoJC5pbm5lckhUTUw9IiIpLG8zKFEudHlwZT09InRlbXBsYXRlIj8kLmNvbnRlbnQ6JCxHMih6KT96Olt6XSxRLEosSyxXPT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOlgsWSxxLFk/WVswXTpKLl9fayYmbTAoSiwwKSxHLE4pLFkhPW51bGwpZm9yKEI9WS5sZW5ndGg7Qi0tOyl4NShZW0JdKTtHfHwoQj0idmFsdWUiLFc9PSJwcm9ncmVzcyImJkE9PW51bGw/JC5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6QSE9bnVsbCYmKEEhPT0kW0JdfHxXPT0icHJvZ3Jlc3MiJiYhQXx8Vz09Im9wdGlvbiImJkEhPUhbQl0pJiZoMigkLEIsQSxIW0JdLFgpLEI9ImNoZWNrZWQiLEMhPW51bGwmJkMhPSRbQl0mJmgyKCQsQixDLEhbQl0sWCkpfXJldHVybiAkfWZ1bmN0aW9uIHY1KCQsUSxKKXt0cnl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBLPXR5cGVvZiAkLl9fdT09ImZ1bmN0aW9uIjtLJiYkLl9fdSgpLEsmJlE9PW51bGx8fCgkLl9fdT0kKFEpKX1lbHNlICQuY3VycmVudD1RfWNhdGNoKFgpe28uX19lKFgsSil9fWZ1bmN0aW9uIHMzKCQsUSxKKXt2YXIgSyxYO2lmKG8udW5tb3VudCYmby51bm1vdW50KCQpLChLPSQucmVmKSYmKEsuY3VycmVudCYmSy5jdXJyZW50IT0kLl9fZXx8djUoSyxudWxsLFEpKSwoSz0kLl9fYykhPW51bGwpe2lmKEsuY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e0suY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChZKXtvLl9fZShZLFEpfUsuYmFzZT1LLl9fUD1udWxsfWlmKEs9JC5fX2spZm9yKFg9MDtYPEsubGVuZ3RoO1grKylLW1hdJiZzMyhLW1hdLFEsSnx8dHlwZW9mICQudHlwZSE9ImZ1bmN0aW9uIik7Snx8eDUoJC5fX2UpLCQuX19jPSQuX189JC5fX2U9dm9pZCAwfWZ1bmN0aW9uIFY0KCQsUSxKKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcigkLEopfWZ1bmN0aW9uIFAwKCQsUSxKKXt2YXIgSyxYLFkscTtRPT1kb2N1bWVudCYmKFE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxvLl9fJiZvLl9fKCQsUSksWD0oSz10eXBlb2YgSj09ImZ1bmN0aW9uIik/bnVsbDpKJiZKLl9fa3x8US5fX2ssWT1bXSxxPVtdLGo1KFEsJD0oIUsmJkp8fFEpLl9faz1qMShRMSxudWxsLFskXSksWHx8bTIsbTIsUS5uYW1lc3BhY2VVUkksIUsmJko/W0pdOlg/bnVsbDpRLmZpcnN0Q2hpbGQ/cTIuY2FsbChRLmNoaWxkTm9kZXMpOm51bGwsWSwhSyYmSj9KOlg/WC5fX2U6US5maXJzdENoaWxkLEsscSksbjMoWSwkLHEpfWZ1bmN0aW9uIGwyKCQsUSl7UDAoJCxRLGwyKX1mdW5jdGlvbiBSNSgkLFEsSil7dmFyIEssWCxZLHEsRz1DMCh7fSwkLnByb3BzKTtmb3IoWSBpbiAkLnR5cGUmJiQudHlwZS5kZWZhdWx0UHJvcHMmJihxPSQudHlwZS5kZWZhdWx0UHJvcHMpLFEpWT09ImtleSI/Sz1RW1ldOlk9PSJyZWYiP1g9UVtZXTpHW1ldPVFbWV09PT12b2lkIDAmJnEhPW51bGw/cVtZXTpRW1ldO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihHLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9xMi5jYWxsKGFyZ3VtZW50cywyKTpKKSxZMigkLnR5cGUsRyxLfHwkLmtleSxYfHwkLnJlZixudWxsKX1mdW5jdGlvbiBxMCgkKXtmdW5jdGlvbiBRKEope3ZhciBLLFg7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwoSz1uZXcgU2V0LChYPXt9KVtRLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBYfSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7Sz1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihZKXt0aGlzLnByb3BzLnZhbHVlIT1ZLnZhbHVlJiZLLmZvckVhY2goZnVuY3Rpb24ocSl7cS5fX2U9ITAsYjUocSl9KX0sdGhpcy5zdWI9ZnVuY3Rpb24oWSl7Sy5hZGQoWSk7dmFyIHE9WS5jb21wb25lbnRXaWxsVW5tb3VudDtZLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7SyYmSy5kZWxldGUoWSkscSYmcS5jYWxsKFkpfX0pLEouY2hpbGRyZW59cmV0dXJuIFEuX19jPSJfX2NDIitjMysrLFEuX189JCxRLlByb3ZpZGVyPVEuX19sPShRLkNvbnN1bWVyPWZ1bmN0aW9uKEosSyl7cmV0dXJuIEouY2hpbGRyZW4oSyl9KS5jb250ZXh0VHlwZT1RLFF9cTI9cDIuc2xpY2Usbz17X19lOmZ1bmN0aW9uKCQsUSxKLEspe2Zvcih2YXIgWCxZLHE7UT1RLl9fOylpZigoWD1RLl9fYykmJiFYLl9fKXRyeXtpZigoWT1YLmNvbnN0cnVjdG9yKSYmWS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IhPW51bGwmJihYLnNldFN0YXRlKFkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCQpKSxxPVguX19kKSxYLmNvbXBvbmVudERpZENhdGNoIT1udWxsJiYoWC5jb21wb25lbnREaWRDYXRjaCgkLEt8fHt9KSxxPVguX19kKSxxKXJldHVybiBYLl9fRT1YfWNhdGNoKEcpeyQ9R310aHJvdyAkfX0scDM9MCxaND1mdW5jdGlvbigkKXtyZXR1cm4gJCE9bnVsbCYmJC5jb25zdHJ1Y3Rvcj09PXZvaWQgMH0sZjEucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKCQsUSl7dmFyIEo7Sj10aGlzLl9fcyE9bnVsbCYmdGhpcy5fX3MhPXRoaXMuc3RhdGU/dGhpcy5fX3M6dGhpcy5fX3M9QzAoe30sdGhpcy5zdGF0ZSksdHlwZW9mICQ9PSJmdW5jdGlvbiImJigkPSQoQzAoe30sSiksdGhpcy5wcm9wcykpLCQmJkMwKEosJCksJCE9bnVsbCYmdGhpcy5fX3YmJihRJiZ0aGlzLl9zYi5wdXNoKFEpLGI1KHRoaXMpKX0sZjEucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKCQpe3RoaXMuX192JiYodGhpcy5fX2U9ITAsJCYmdGhpcy5fX2gucHVzaCgkKSxiNSh0aGlzKSl9LGYxLnByb3RvdHlwZS5yZW5kZXI9UTEsVDA9W10sdTM9dHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiI/UHJvbWlzZS5wcm90b3R5cGUudGhlbi5iaW5kKFByb21pc2UucmVzb2x2ZSgpKTpzZXRUaW1lb3V0LGwzPWZ1bmN0aW9uKCQsUSl7cmV0dXJuICQuX192Ll9fYi1RLl9fdi5fX2J9LHUyLl9fcj0wLHc1PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoOCksZjI9Il9fZCIrdzUsWDI9Il9fYSIrdzUsZDM9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksUzU9MCxFNT1tMyghMSksSTU9bTMoITApLGMzPTA7dmFyIHcwLFAxLGc1LHQzLHAwPTAsWTg9W10seTE9byxlMz15MS5fX2IsJDg9eTEuX19yLFE4PXkxLmRpZmZlZCxKOD15MS5fX2MsWjg9eTEudW5tb3VudCxLOD15MS5fXztmdW5jdGlvbiB1MCgkLFEpe3kxLl9faCYmeTEuX19oKFAxLCQscDB8fFEpLHAwPTA7dmFyIEo9UDEuX19IfHwoUDEuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gJD49Si5fXy5sZW5ndGgmJkouX18ucHVzaCh7fSksSi5fX1skXX1mdW5jdGlvbiBNKCQpe3JldHVybiBwMD0xLHkwKHE4LCQpfWZ1bmN0aW9uIHkwKCQsUSxKKXt2YXIgSz11MCh3MCsrLDIpO2lmKEsudD0kLCFLLl9fYyYmKEsuX189W0o/SihRKTpxOCh2b2lkIDAsUSksZnVuY3Rpb24oRyl7dmFyIE49Sy5fX04/Sy5fX05bMF06Sy5fX1swXSxCPUsudChOLEcpO04hPT1CJiYoSy5fX049W0IsSy5fX1sxXV0sSy5fX2Muc2V0U3RhdGUoe30pKX1dLEsuX19jPVAxLCFQMS5fX2YpKXt2YXIgWD1mdW5jdGlvbihHLE4sQil7aWYoIUsuX19jLl9fSClyZXR1cm4hMDt2YXIgVT1LLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKHope3JldHVybiB6Ll9fY30pO2lmKFUuZXZlcnkoZnVuY3Rpb24oeil7cmV0dXJuIXouX19OfSkpcmV0dXJuIVl8fFkuY2FsbCh0aGlzLEcsTixCKTt2YXIgVj1LLl9fYy5wcm9wcyE9PUc7cmV0dXJuIFUuc29tZShmdW5jdGlvbih6KXtpZih6Ll9fTil7dmFyIEw9ei5fX1swXTt6Ll9fPXouX19OLHouX19OPXZvaWQgMCxMIT09ei5fX1swXSYmKFY9ITApfX0pLFkmJlkuY2FsbCh0aGlzLEcsTixCKXx8Vn07UDEuX19mPSEwO3ZhcntzaG91bGRDb21wb25lbnRVcGRhdGU6WSxjb21wb25lbnRXaWxsVXBkYXRlOnF9PVAxO1AxLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24oRyxOLEIpe2lmKHRoaXMuX19lKXt2YXIgVT1ZO1k9dm9pZCAwLFgoRyxOLEIpLFk9VX1xJiZxLmNhbGwodGhpcyxHLE4sQil9LFAxLnNob3VsZENvbXBvbmVudFVwZGF0ZT1YfXJldHVybiBLLl9fTnx8Sy5fX31mdW5jdGlvbiB5KCQsUSl7dmFyIEo9dTAodzArKywzKTsheTEuX19zJiZmNShKLl9fSCxRKSYmKEouX189JCxKLnU9USxQMS5fX0guX19oLnB1c2goSikpfWZ1bmN0aW9uIEgwKCQsUSl7dmFyIEo9dTAodzArKyw0KTsheTEuX19zJiZmNShKLl9fSCxRKSYmKEouX189JCxKLnU9USxQMS5fX2gucHVzaChKKSl9ZnVuY3Rpb24gSSgkKXtyZXR1cm4gcDA9NSxEMShmdW5jdGlvbigpe3JldHVybntjdXJyZW50OiR9fSxbXSl9ZnVuY3Rpb24gYzIoJCxRLEope3AwPTYsSDAoZnVuY3Rpb24oKXtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIil7dmFyIEs9JChRKCkpO3JldHVybiBmdW5jdGlvbigpeyQobnVsbCksSyYmdHlwZW9mIEs9PSJmdW5jdGlvbiImJksoKX19aWYoJClyZXR1cm4gJC5jdXJyZW50PVEoKSxmdW5jdGlvbigpe3JldHVybiAkLmN1cnJlbnQ9bnVsbH19LEo9PW51bGw/SjpKLmNvbmNhdCgkKSl9ZnVuY3Rpb24gRDEoJCxRKXt2YXIgSj11MCh3MCsrLDcpO3JldHVybiBmNShKLl9fSCxRKSYmKEouX189JCgpLEouX19IPVEsSi5fX2g9JCksSi5fX31mdW5jdGlvbiBUKCQsUSl7cmV0dXJuIHAwPTgsRDEoZnVuY3Rpb24oKXtyZXR1cm4gJH0sUSl9ZnVuY3Rpb24gRzAoJCl7dmFyIFE9UDEuY29udGV4dFskLl9fY10sSj11MCh3MCsrLDkpO3JldHVybiBKLmM9JCxRPyhKLl9fPT1udWxsJiYoSi5fXz0hMCxRLnN1YihQMSkpLFEucHJvcHMudmFsdWUpOiQuX199ZnVuY3Rpb24gcjIoJCxRKXt5MS51c2VEZWJ1Z1ZhbHVlJiZ5MS51c2VEZWJ1Z1ZhbHVlKFE/USgkKTokKX1mdW5jdGlvbiBsMCgpe3ZhciAkPXUwKHcwKyssMTEpO2lmKCEkLl9fKXtmb3IodmFyIFE9UDEuX192O1EhPT1udWxsJiYhUS5fX20mJlEuX18hPT1udWxsOylRPVEuX187dmFyIEo9US5fX218fChRLl9fbT1bMCwwXSk7JC5fXz0iUCIrSlswXSsiLSIrSlsxXSsrfXJldHVybiAkLl9ffWZ1bmN0aW9uIEI0KCl7Zm9yKHZhciAkOyQ9WTguc2hpZnQoKTspe3ZhciBRPSQuX19IO2lmKCQuX19QJiZRKXRyeXtRLl9faC5zb21lKGQyKSxRLl9faC5zb21lKGg1KSxRLl9faD1bXX1jYXRjaChKKXtRLl9faD1bXSx5MS5fX2UoSiwkLl9fdil9fX15MS5fX2I9ZnVuY3Rpb24oJCl7UDE9bnVsbCxlMyYmZTMoJCl9LHkxLl9fPWZ1bmN0aW9uKCQsUSl7JCYmUS5fX2smJlEuX19rLl9fbSYmKCQuX19tPVEuX19rLl9fbSksSzgmJks4KCQsUSl9LHkxLl9fcj1mdW5jdGlvbigkKXskOCYmJDgoJCksdzA9MDt2YXIgUT0oUDE9JC5fX2MpLl9fSDtRJiYoZzU9PT1QMT8oUS5fX2g9W10sUDEuX19oPVtdLFEuX18uc29tZShmdW5jdGlvbihKKXtKLl9fTiYmKEouX189Si5fX04pLEoudT1KLl9fTj12b2lkIDB9KSk6KFEuX19oLnNvbWUoZDIpLFEuX19oLnNvbWUoaDUpLFEuX19oPVtdLHcwPTApKSxnNT1QMX0seTEuZGlmZmVkPWZ1bmN0aW9uKCQpe1E4JiZROCgkKTt2YXIgUT0kLl9fYztRJiZRLl9fSCYmKFEuX19ILl9faC5sZW5ndGgmJihZOC5wdXNoKFEpIT09MSYmdDM9PT15MS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgodDM9eTEucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8TjQpKEI0KSksUS5fX0guX18uc29tZShmdW5jdGlvbihKKXtKLnUmJihKLl9fSD1KLnUpLEoudT12b2lkIDB9KSksZzU9UDE9bnVsbH0seTEuX19jPWZ1bmN0aW9uKCQsUSl7US5zb21lKGZ1bmN0aW9uKEope3RyeXtKLl9faC5zb21lKGQyKSxKLl9faD1KLl9faC5maWx0ZXIoZnVuY3Rpb24oSyl7cmV0dXJuIUsuX198fGg1KEspfSl9Y2F0Y2goSyl7US5zb21lKGZ1bmN0aW9uKFgpe1guX19oJiYoWC5fX2g9W10pfSksUT1bXSx5MS5fX2UoSyxKLl9fdil9fSksSjgmJko4KCQsUSl9LHkxLnVubW91bnQ9ZnVuY3Rpb24oJCl7WjgmJlo4KCQpO3ZhciBRLEo9JC5fX2M7SiYmSi5fX0gmJihKLl9fSC5fXy5zb21lKGZ1bmN0aW9uKEspe3RyeXtkMihLKX1jYXRjaChYKXtRPVh9fSksSi5fX0g9dm9pZCAwLFEmJnkxLl9fZShRLEouX192KSl9O3ZhciBYOD10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iO2Z1bmN0aW9uIE40KCQpe3ZhciBRLEo9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoSyksWDgmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKFEpLHNldFRpbWVvdXQoJCl9LEs9c2V0VGltZW91dChKLDM1KTtYOCYmKFE9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEopKX1mdW5jdGlvbiBkMigkKXt2YXIgUT1QMSxKPSQuX19jO3R5cGVvZiBKPT0iZnVuY3Rpb24iJiYoJC5fX2M9dm9pZCAwLEooKSksUDE9UX1mdW5jdGlvbiBoNSgkKXt2YXIgUT1QMTskLl9fYz0kLl9fKCksUDE9UX1mdW5jdGlvbiBmNSgkLFEpe3JldHVybiEkfHwkLmxlbmd0aCE9PVEubGVuZ3RofHxRLnNvbWUoZnVuY3Rpb24oSixLKXtyZXR1cm4gSiE9PSRbS119KX1mdW5jdGlvbiBxOCgkLFEpe3JldHVybiB0eXBlb2YgUT09ImZ1bmN0aW9uIj9RKCQpOlF9ZnVuY3Rpb24gVTQoJCxRKXtmb3IodmFyIEogaW4gUSkkW0pdPVFbSl07cmV0dXJuICR9ZnVuY3Rpb24gRzgoJCxRKXtmb3IodmFyIEogaW4gJClpZihKIT09Il9fc291cmNlIiYmIShKIGluIFEpKXJldHVybiEwO2Zvcih2YXIgSyBpbiBRKWlmKEshPT0iX19zb3VyY2UiJiYkW0tdIT09UVtLXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBWOCgkLFEpe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9UX0oVjgucHJvdG90eXBlPW5ldyBmMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsVjgucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLFEpe3JldHVybiBHOCh0aGlzLnByb3BzLCQpfHxHOCh0aGlzLnN0YXRlLFEpfTt2YXIgQjg9by5fX2I7by5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLEI4JiZCOCgkKX07dmFyIEw0PW8uX19lO28uX19lPWZ1bmN0aW9uKCQsUSxKLEspe2lmKCQudGhlbil7Zm9yKHZhciBYLFk9UTtZPVkuX187KWlmKChYPVkuX19jKSYmWC5fX2MpcmV0dXJuIFEuX19lPT1udWxsJiYoUS5fX2U9Si5fX2UsUS5fX2s9Si5fX2spLFguX19jKCQsUSl9TDQoJCxRLEosSyl9O3ZhciBOOD1vLnVubW91bnQ7ZnVuY3Rpb24gRjgoJCxRLEope3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKEspe3R5cGVvZiBLLl9fYz09ImZ1bmN0aW9uIiYmSy5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1VNCh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09SiYmKCQuX19jLl9fUD1RKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihLKXtyZXR1cm4gRjgoSyxRLEopfSkpLCR9ZnVuY3Rpb24gazgoJCxRLEope3JldHVybiAkJiZKJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKEspe3JldHVybiBrOChLLFEsSil9KSwkLl9fYyYmJC5fX2MuX19QPT09USYmKCQuX19lJiZKLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPUopKSwkfWZ1bmN0aW9uIG01KCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEE4KCQpe3ZhciBRPSQuX18mJiQuX18uX19jO3JldHVybiBRJiZRLl9fYSYmUS5fX2EoJCl9ZnVuY3Rpb24gbzIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1vLnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIFE9JC5fX2M7USYmKFEuX196PSEwKSxRJiZRLl9fUiYmUS5fX1IoKSxRJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSxOOCYmTjgoJCl9LChtNS5wcm90b3R5cGU9bmV3IGYxKS5fX2M9ZnVuY3Rpb24oJCxRKXt2YXIgSj1RLl9fYyxLPXRoaXM7Sy5vPT1udWxsJiYoSy5vPVtdKSxLLm8ucHVzaChKKTt2YXIgWD1BOChLLl9fdiksWT0hMSxxPWZ1bmN0aW9uKCl7WXx8Sy5fX3p8fChZPSEwLEouX19SPW51bGwsWD9YKE4pOk4oKSl9O0ouX19SPXE7dmFyIEc9Si5fX1A7Si5fX1A9bnVsbDt2YXIgTj1mdW5jdGlvbigpe2lmKCEtLUsuX191KXtpZihLLnN0YXRlLl9fYSl7dmFyIEI9Sy5zdGF0ZS5fX2E7Sy5fX3YuX19rWzBdPWs4KEIsQi5fX2MuX19QLEIuX19jLl9fTyl9dmFyIFU7Zm9yKEsuc2V0U3RhdGUoe19fYTpLLl9fYj1udWxsfSk7VT1LLm8ucG9wKCk7KVUuX19QPUcsVS5mb3JjZVVwZGF0ZSgpfX07Sy5fX3UrK3x8MzImUS5fX3V8fEsuc2V0U3RhdGUoe19fYTpLLl9fYj1LLl9fdi5fX2tbMF19KSwkLnRoZW4ocSxxKX0sbTUucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxtNS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsUSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksSz10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1GOCh0aGlzLl9fYixKLEsuX19PPUsuX19QKX10aGlzLl9fYj1udWxsfXZhciBYPVEuX19hJiZqMShRMSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBYJiYoWC5fX3UmPS0zMyksW2oxKFExLG51bGwsUS5fX2E/bnVsbDokLmNoaWxkcmVuKSxYXX07dmFyIFU4PWZ1bmN0aW9uKCQsUSxKKXtpZigrK0pbMV09PT1KWzBdJiYkLmwuZGVsZXRlKFEpLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihKPSQuaTtKOyl7Zm9yKDtKLmxlbmd0aD4zOylKLnBvcCgpKCk7aWYoSlsxXTxKWzBdKWJyZWFrOyQuaT1KPUpbMl19fTsobzIucHJvdG90eXBlPW5ldyBmMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBRPXRoaXMsSj1BOChRLl9fdiksSz1RLmwuZ2V0KCQpO3JldHVybiBLWzBdKyssZnVuY3Rpb24oWCl7dmFyIFk9ZnVuY3Rpb24oKXtRLnByb3BzLnJldmVhbE9yZGVyPyhLLnB1c2goWCksVTgoUSwkLEspKTpYKCl9O0o/SihZKTpZKCl9fSxvMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBRPXMxKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJlEucmV2ZXJzZSgpO2Zvcih2YXIgSj1RLmxlbmd0aDtKLS07KXRoaXMubC5zZXQoUVtKXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sbzIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1vMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKFEsSil7VTgoJCxKLFEpfSl9O3ZhciB6ND10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxDND0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sSDQ9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxGND0vW0EtWjAtOV0vZyxrND10eXBlb2YgZG9jdW1lbnQ8InUiLEE0PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gTzgoJCxRLEope3JldHVybiBRLl9faz09bnVsbCYmKFEudGV4dENvbnRlbnQ9IiIpLFAwKCQsUSksdHlwZW9mIEo9PSJmdW5jdGlvbiImJkooKSwkPyQuX19jOm51bGx9ZjEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGYxLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oUSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlF9KX19KX0pO3ZhciBMOD1vLmV2ZW50O28uZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIEw4JiYoJD1MOCgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIE04LE80PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSx6OD1vLnZub2RlO28udm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKFEpe3Zhcntwcm9wczpKLHR5cGU6S309USxYPXt9LFk9Sy5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBKKXt2YXIgRz1KW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEopJiZHPT1udWxsfHxrNCYmcT09PSJjaGlsZHJlbiImJks9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIE49cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIEomJkoudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpOPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6TlswXT09PSJvIiYmTlsxXT09PSJuIj9OPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOk4hPT0ib25jaGFuZ2UifHxLIT09ImlucHV0IiYmSyE9PSJ0ZXh0YXJlYSJ8fEE0KEoudHlwZSk/Tj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOk49PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjpINC50ZXN0KHEpJiYocT1OKTpOPXE9Im9uaW5wdXQiOlkmJkM0LnRlc3QocSk/cT1xLnJlcGxhY2UoRjQsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksTj09PSJvbmlucHV0IiYmWFtxPU5dJiYocT0ib25pbnB1dENhcHR1cmUiKSxYW3FdPUd9fUs9PSJzZWxlY3QiJiYoWC5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShYLnZhbHVlKSYmKFgudmFsdWU9czEoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgudmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTF9KSksWC5kZWZhdWx0VmFsdWUhPW51bGwmJihYLnZhbHVlPXMxKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1YLm11bHRpcGxlP1guZGVmYXVsdFZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xOlguZGVmYXVsdFZhbHVlPT1CLnByb3BzLnZhbHVlfSkpKSxKLmNsYXNzJiYhSi5jbGFzc05hbWU/KFguY2xhc3M9Si5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2xhc3NOYW1lIixPNCkpOkouY2xhc3NOYW1lJiYoWC5jbGFzcz1YLmNsYXNzTmFtZT1KLmNsYXNzTmFtZSksUS5wcm9wcz1YfSgkKSwkLiQkdHlwZW9mPXo0LHo4JiZ6OCgkKX07dmFyIEM4PW8uX19yO28uX19yPWZ1bmN0aW9uKCQpe0M4JiZDOCgkKSxNOD0kLl9fY307dmFyIEg4PW8uZGlmZmVkO28uZGlmZmVkPWZ1bmN0aW9uKCQpe0g4JiZIOCgkKTt2YXJ7cHJvcHM6USxfX2U6Sn09JDtKIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gUSYmUS52YWx1ZSE9PUoudmFsdWUmJihKLnZhbHVlPVEudmFsdWU9PW51bGw/IiI6US52YWx1ZSksTTg9bnVsbH07ZnVuY3Rpb24gVzgoJCl7cmV0dXJuISEkLl9fayYmKFAwKG51bGwsJCksITApfWZ1bmN0aW9uIF84KCQpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oUSl7TzgoUSwkKX0sdW5tb3VudDpmdW5jdGlvbigpe1c4KCQpfX19ZnVuY3Rpb24gUzgoJCxRKXtmb3IodmFyIEogaW4gUSkkW0pdPVFbSl07cmV0dXJuICR9ZnVuY3Rpb24gdTUoJCxRKXtmb3IodmFyIEogaW4gJClpZihKIT09Il9fc291cmNlIiYmIShKIGluIFEpKXJldHVybiEwO2Zvcih2YXIgSyBpbiBRKWlmKEshPT0iX19zb3VyY2UiJiYkW0tdIT09UVtLXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB4OCgkLFEpe3ZhciBKPVEoKSxLPU0oe3Q6e19fOkosdTpRfX0pLFg9S1swXS50LFk9S1sxXTtyZXR1cm4gSDAoZnVuY3Rpb24oKXtYLl9fPUosWC51PVEscDUoWCkmJlkoe3Q6WH0pfSxbJCxKLFFdKSx5KGZ1bmN0aW9uKCl7cmV0dXJuIHA1KFgpJiZZKHt0Olh9KSwkKGZ1bmN0aW9uKCl7cDUoWCkmJlkoe3Q6WH0pfSl9LFskXSksSn1mdW5jdGlvbiBwNSgkKXt0cnl7cmV0dXJuISgoUT0kLl9fKT09PShKPSQudSgpKSYmKFEhPT0wfHwxL1E9PTEvSil8fFEhPVEmJkohPUopfWNhdGNoKEspe3JldHVybiEwfXZhciBRLEp9ZnVuY3Rpb24gajgoJCl7JCgpfWZ1bmN0aW9uIHY4KCQpe3JldHVybiAkfWZ1bmN0aW9uIFI4KCl7cmV0dXJuWyExLGo4XX12YXIgZzg9SDA7ZnVuY3Rpb24gbDUoJCxRKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PVF9ZnVuY3Rpb24gUzAoJCxRKXtmdW5jdGlvbiBKKFgpe3ZhciBZPXRoaXMucHJvcHMucmVmO3JldHVybiBZIT1YLnJlZiYmWSYmKHR5cGVvZiBZPT0iZnVuY3Rpb24iP1kobnVsbCk6WS5jdXJyZW50PW51bGwpLFE/IVEodGhpcy5wcm9wcyxYKXx8WSE9WC5yZWY6dTUodGhpcy5wcm9wcyxYKX1mdW5jdGlvbiBLKFgpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1KLGoxKCQsWCl9cmV0dXJuIEsuZGlzcGxheU5hbWU9Ik1lbW8oIisoJC5kaXNwbGF5TmFtZXx8JC5uYW1lKSsiKSIsSy5fX2Y9Sy5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxLLnR5cGU9JCxLfShsNS5wcm90b3R5cGU9bmV3IGYxKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxsNS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsUSl7cmV0dXJuIHU1KHRoaXMucHJvcHMsJCl8fHU1KHRoaXMuc3RhdGUsUSl9O3ZhciBQOD1vLl9fYjtvLl9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCksUDgmJlA4KCQpfTt2YXIgTTQ9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIil8fDM5MTE7ZnVuY3Rpb24gQjAoJCl7ZnVuY3Rpb24gUShKKXt2YXIgSz1TOCh7fSxKKTtyZXR1cm4gZGVsZXRlIEsucmVmLCQoSyxKLnJlZnx8bnVsbCl9cmV0dXJuIFEuJCR0eXBlb2Y9TTQsUS5yZW5kZXI9JCxRLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PVEuX19mPSEwLFEuZGlzcGxheU5hbWU9IkZvcndhcmRSZWYoIisoJC5kaXNwbGF5TmFtZXx8JC5uYW1lKSsiKSIsUX12YXIgRDg9ZnVuY3Rpb24oJCxRKXtyZXR1cm4gJD09bnVsbD9udWxsOnMxKHMxKCQpLm1hcChRKSl9LFc0PXttYXA6RDgsZm9yRWFjaDpEOCxjb3VudDpmdW5jdGlvbigkKXtyZXR1cm4gJD9zMSgkKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbigkKXt2YXIgUT1zMSgkKTtpZihRLmxlbmd0aCE9PTEpdGhyb3ciQ2hpbGRyZW4ub25seSI7cmV0dXJuIFFbMF19LHRvQXJyYXk6czF9LF80PW8uX19lO28uX19lPWZ1bmN0aW9uKCQsUSxKLEspe2lmKCQudGhlbil7Zm9yKHZhciBYLFk9UTtZPVkuX187KWlmKChYPVkuX19jKSYmWC5fX2MpcmV0dXJuIFEuX19lPT1udWxsJiYoUS5fX2U9Si5fX2UsUS5fX2s9Si5fX2spLFguX19jKCQsUSl9XzQoJCxRLEosSyl9O3ZhciBUOD1vLnVubW91bnQ7ZnVuY3Rpb24gaDgoJCxRLEope3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKEspe3R5cGVvZiBLLl9fYz09ImZ1bmN0aW9uIiYmSy5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1TOCh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09SiYmKCQuX19jLl9fUD1RKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihLKXtyZXR1cm4gaDgoSyxRLEopfSkpLCR9ZnVuY3Rpb24gZjgoJCxRLEope3JldHVybiAkJiZKJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKEspe3JldHVybiBmOChLLFEsSil9KSwkLl9fYyYmJC5fX2MuX19QPT09USYmKCQuX19lJiZKLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPUopKSwkfWZ1bmN0aW9uIGkyKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIG04KCQpe3ZhciBRPSQuX18mJiQuX18uX19jO3JldHVybiBRJiZRLl9fYSYmUS5fX2EoJCl9ZnVuY3Rpb24gUDQoJCl7dmFyIFEsSixLLFg9bnVsbDtmdW5jdGlvbiBZKHEpe2lmKFF8fChRPSQoKSkudGhlbihmdW5jdGlvbihHKXtHJiYoWD1HLmRlZmF1bHR8fEcpLEs9ITB9LGZ1bmN0aW9uKEcpe0o9RyxLPSEwfSksSil0aHJvdyBKO2lmKCFLKXRocm93IFE7cmV0dXJuIFg/ajEoWCxxKTpudWxsfXJldHVybiBZLmRpc3BsYXlOYW1lPSJMYXp5IixZLl9fZj0hMCxZfWZ1bmN0aW9uIEIyKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9by51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBRPSQuX19jO1EmJihRLl9fej0hMCksUSYmUS5fX1ImJlEuX19SKCksUSYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksVDgmJlQ4KCQpfSwoaTIucHJvdG90eXBlPW5ldyBmMSkuX19jPWZ1bmN0aW9uKCQsUSl7dmFyIEo9US5fX2MsSz10aGlzO0subz09bnVsbCYmKEsubz1bXSksSy5vLnB1c2goSik7dmFyIFg9bTgoSy5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fEsuX196fHwoWT0hMCxKLl9fUj1udWxsLFg/WChOKTpOKCkpfTtKLl9fUj1xO3ZhciBHPUouX19QO0ouX19QPW51bGw7dmFyIE49ZnVuY3Rpb24oKXtpZighLS1LLl9fdSl7aWYoSy5zdGF0ZS5fX2Epe3ZhciBCPUsuc3RhdGUuX19hO0suX192Ll9fa1swXT1mOChCLEIuX19jLl9fUCxCLl9fYy5fX08pfXZhciBVO2ZvcihLLnNldFN0YXRlKHtfX2E6Sy5fX2I9bnVsbH0pO1U9Sy5vLnBvcCgpOylVLl9fUD1HLFUuZm9yY2VVcGRhdGUoKX19O0suX191Kyt8fDMyJlEuX191fHxLLnNldFN0YXRlKHtfX2E6Sy5fX2I9Sy5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LGkyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0saTIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLFEpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEs9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09aDgodGhpcy5fX2IsSixLLl9fTz1LLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgWD1RLl9fYSYmajEoUTEsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gWCYmKFguX191Jj0tMzMpLFtqMShRMSxudWxsLFEuX19hP251bGw6JC5jaGlsZHJlbiksWF19O3ZhciB3OD1mdW5jdGlvbigkLFEsSil7aWYoKytKWzFdPT09SlswXSYmJC5sLmRlbGV0ZShRKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoSj0kLmk7Sjspe2Zvcig7Si5sZW5ndGg+MzspSi5wb3AoKSgpO2lmKEpbMV08SlswXSlicmVhazskLmk9Sj1KWzJdfX07ZnVuY3Rpb24gRDQoJCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuICQuY29udGV4dH0sJC5jaGlsZHJlbn1mdW5jdGlvbiBUNCgkKXt2YXIgUT10aGlzLEo9JC5oO2lmKFEuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtQMChudWxsLFEudiksUS52PW51bGwsUS5oPW51bGx9LFEuaCYmUS5oIT09SiYmUS5jb21wb25lbnRXaWxsVW5tb3VudCgpLCFRLnYpe2Zvcih2YXIgSz1RLl9fdjtLIT09bnVsbCYmIUsuX19tJiZLLl9fIT09bnVsbDspSz1LLl9fO1EuaD1KLFEudj17bm9kZVR5cGU6MSxwYXJlbnROb2RlOkosY2hpbGROb2RlczpbXSxfX2s6e19fbTpLLl9fbX0sY29udGFpbnM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbmFtZXNwYWNlVVJJOkoubmFtZXNwYWNlVVJJLGluc2VydEJlZm9yZTpmdW5jdGlvbihYLFkpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKFgpLFEuaC5pbnNlcnRCZWZvcmUoWCxZKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oWCl7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihYKT4+PjEsMSksUS5oLnJlbW92ZUNoaWxkKFgpfX19UDAoajEoRDQse2NvbnRleHQ6US5jb250ZXh0fSwkLl9fdiksUS52KX1mdW5jdGlvbiBkNSgkLFEpe3ZhciBKPWoxKFQ0LHtfX3Y6JCxoOlF9KTtyZXR1cm4gSi5jb250YWluZXJJbmZvPVEsSn0oQjIucHJvdG90eXBlPW5ldyBmMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBRPXRoaXMsSj1tOChRLl9fdiksSz1RLmwuZ2V0KCQpO3JldHVybiBLWzBdKyssZnVuY3Rpb24oWCl7dmFyIFk9ZnVuY3Rpb24oKXtRLnByb3BzLnJldmVhbE9yZGVyPyhLLnB1c2goWCksdzgoUSwkLEspKTpYKCl9O0o/SihZKTpZKCl9fSxCMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBRPXMxKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJlEucmV2ZXJzZSgpO2Zvcih2YXIgSj1RLmxlbmd0aDtKLS07KXRoaXMubC5zZXQoUVtKXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sQjIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1CMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKFEsSil7dzgoJCxKLFEpfSl9O3ZhciBwOD10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyx3ND0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sRTQ9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxJND0vW0EtWjAtOV0vZyxiND10eXBlb2YgZG9jdW1lbnQ8InUiLHk0PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gUzQoJCxRLEope3JldHVybiBRLl9faz09bnVsbCYmKFEudGV4dENvbnRlbnQ9IiIpLFAwKCQsUSksdHlwZW9mIEo9PSJmdW5jdGlvbiImJkooKSwkPyQuX19jOm51bGx9ZnVuY3Rpb24geDQoJCxRLEope3JldHVybiBsMigkLFEpLHR5cGVvZiBKPT0iZnVuY3Rpb24iJiZKKCksJD8kLl9fYzpudWxsfWYxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShmMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKFEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpRfSl9fSl9KTt2YXIgRTg9by5ldmVudDtvLmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiBFOCYmKCQ9RTgoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBjNSxqND17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sSTg9by52bm9kZTtvLnZub2RlPWZ1bmN0aW9uKCQpe3R5cGVvZiAkLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihRKXt2YXJ7cHJvcHM6Six0eXBlOkt9PVEsWD17fSxZPUsuaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIHEgaW4gSil7dmFyIEc9SltxXTtpZighKHE9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBKKSYmRz09bnVsbHx8YjQmJnE9PT0iY2hpbGRyZW4iJiZLPT09Im5vc2NyaXB0Inx8cT09PSJjbGFzcyJ8fHE9PT0iY2xhc3NOYW1lIikpe3ZhciBOPXEudG9Mb3dlckNhc2UoKTtxPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlPT1udWxsP3E9InZhbHVlIjpxPT09ImRvd25sb2FkIiYmRz09PSEwP0c9IiI6Tj09PSJ0cmFuc2xhdGUiJiZHPT09Im5vIj9HPSExOk5bMF09PT0ibyImJk5bMV09PT0ibiI/Tj09PSJvbmRvdWJsZWNsaWNrIj9xPSJvbmRibGNsaWNrIjpOIT09Im9uY2hhbmdlInx8SyE9PSJpbnB1dCImJkshPT0idGV4dGFyZWEifHx5NChKLnR5cGUpP049PT0ib25mb2N1cyI/cT0ib25mb2N1c2luIjpOPT09Im9uYmx1ciI/cT0ib25mb2N1c291dCI6RTQudGVzdChxKSYmKHE9Tik6Tj1xPSJvbmlucHV0IjpZJiZ3NC50ZXN0KHEpP3E9cS5yZXBsYWNlKEk0LCItJCYiKS50b0xvd2VyQ2FzZSgpOkc9PT1udWxsJiYoRz12b2lkIDApLE49PT0ib25pbnB1dCImJlhbcT1OXSYmKHE9Im9uaW5wdXRDYXB0dXJlIiksWFtxXT1HfX1LPT0ic2VsZWN0IiYmKFgubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoWC52YWx1ZSkmJihYLnZhbHVlPXMxKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1YLnZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xfSkpLFguZGVmYXVsdFZhbHVlIT1udWxsJiYoWC52YWx1ZT1zMShKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9WC5tdWx0aXBsZT9YLmRlZmF1bHRWYWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMTpYLmRlZmF1bHRWYWx1ZT09Qi5wcm9wcy52YWx1ZX0pKSksSi5jbGFzcyYmIUouY2xhc3NOYW1lPyhYLmNsYXNzPUouY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNsYXNzTmFtZSIsajQpKTpKLmNsYXNzTmFtZSYmKFguY2xhc3M9WC5jbGFzc05hbWU9Si5jbGFzc05hbWUpLFEucHJvcHM9WH0oJCksJC4kJHR5cGVvZj1wOCxJOCYmSTgoJCl9O3ZhciBiOD1vLl9fcjtvLl9fcj1mdW5jdGlvbigkKXtiOCYmYjgoJCksYzU9JC5fX2N9O3ZhciB5OD1vLmRpZmZlZDtvLmRpZmZlZD1mdW5jdGlvbigkKXt5OCYmeTgoJCk7dmFye3Byb3BzOlEsX19lOkp9PSQ7SiE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIFEmJlEudmFsdWUhPT1KLnZhbHVlJiYoSi52YWx1ZT1RLnZhbHVlPT1udWxsPyIiOlEudmFsdWUpLGM1PW51bGx9O3ZhciB2ND17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24oJCl7cmV0dXJuIGM1Ll9fblskLl9fY10ucHJvcHMudmFsdWV9LHVzZUNhbGxiYWNrOlQsdXNlQ29udGV4dDpHMCx1c2VEZWJ1Z1ZhbHVlOnIyLHVzZURlZmVycmVkVmFsdWU6djgsdXNlRWZmZWN0OnksdXNlSWQ6bDAsdXNlSW1wZXJhdGl2ZUhhbmRsZTpjMix1c2VJbnNlcnRpb25FZmZlY3Q6ZzgsdXNlTGF5b3V0RWZmZWN0OkgwLHVzZU1lbW86RDEsdXNlUmVkdWNlcjp5MCx1c2VSZWY6SSx1c2VTdGF0ZTpNLHVzZVN5bmNFeHRlcm5hbFN0b3JlOng4LHVzZVRyYW5zaXRpb246Ujh9fX07ZnVuY3Rpb24gUjQoJCl7cmV0dXJuIGoxLmJpbmQobnVsbCwkKX1mdW5jdGlvbiBuMigkKXtyZXR1cm4hISQmJiQuJCR0eXBlb2Y9PT1wOH1mdW5jdGlvbiBnNCgkKXtyZXR1cm4gbjIoJCkmJiQudHlwZT09PVExfWZ1bmN0aW9uIGg0KCQpe3JldHVybiEhJCYmdHlwZW9mICQuZGlzcGxheU5hbWU9PSJzdHJpbmciJiYkLmRpc3BsYXlOYW1lLmluZGV4T2YoIk1lbW8oIik9PTB9ZnVuY3Rpb24gZjQoJCl7cmV0dXJuIG4yKCQpP1I1LmFwcGx5KG51bGwsYXJndW1lbnRzKTokfWZ1bmN0aW9uIG00KCQpe3JldHVybiEhJC5fX2smJihQMChudWxsLCQpLCEwKX1mdW5jdGlvbiBwNCgkKXtyZXR1cm4gJCYmKCQuYmFzZXx8JC5ub2RlVHlwZT09PTEmJiQpfHxudWxsfXZhciB1ND1mdW5jdGlvbigkLFEpe3JldHVybiAkKFEpfSxsND1mdW5jdGlvbigkLFEpe3ZhciBKPW8uZGVib3VuY2VSZW5kZXJpbmc7by5kZWJvdW5jZVJlbmRlcmluZz1mdW5jdGlvbihYKXtyZXR1cm4gWCgpfTt2YXIgSz0kKFEpO3JldHVybiBvLmRlYm91bmNlUmVuZGVyaW5nPUosS30sZDQ9bjIsZz17dXNlU3RhdGU6TSx1c2VJZDpsMCx1c2VSZWR1Y2VyOnkwLHVzZUVmZmVjdDp5LHVzZUxheW91dEVmZmVjdDpIMCx1c2VJbnNlcnRpb25FZmZlY3Q6ZzgsdXNlVHJhbnNpdGlvbjpSOCx1c2VEZWZlcnJlZFZhbHVlOnY4LHVzZVN5bmNFeHRlcm5hbFN0b3JlOng4LHN0YXJ0VHJhbnNpdGlvbjpqOCx1c2VSZWY6SSx1c2VJbXBlcmF0aXZlSGFuZGxlOmMyLHVzZU1lbW86RDEsdXNlQ2FsbGJhY2s6VCx1c2VDb250ZXh0OkcwLHVzZURlYnVnVmFsdWU6cjIsdmVyc2lvbjoiMTguMy4xIixDaGlsZHJlbjpXNCxyZW5kZXI6UzQsaHlkcmF0ZTp4NCx1bm1vdW50Q29tcG9uZW50QXROb2RlOm00LGNyZWF0ZVBvcnRhbDpkNSxjcmVhdGVFbGVtZW50OmoxLGNyZWF0ZUNvbnRleHQ6cTAsY3JlYXRlRmFjdG9yeTpSNCxjbG9uZUVsZW1lbnQ6ZjQsY3JlYXRlUmVmOlYyLEZyYWdtZW50OlExLGlzVmFsaWRFbGVtZW50Om4yLGlzRWxlbWVudDpkNCxpc0ZyYWdtZW50Omc0LGlzTWVtbzpoNCxmaW5kRE9NTm9kZTpwNCxDb21wb25lbnQ6ZjEsUHVyZUNvbXBvbmVudDpsNSxtZW1vOlMwLGZvcndhcmRSZWY6QjAsZmx1c2hTeW5jOmw0LHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOnU0LFN0cmljdE1vZGU6UTEsU3VzcGVuc2U6aTIsU3VzcGVuc2VMaXN0OkIyLGxhenk6UDQsX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6djR9O3ZhciBOMj17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxyNT17cG9ydHJhaXQ6ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXQifTt2YXIgZDA9MztmdW5jdGlvbiBvNSgkKXtyZXR1cm4gJD49MC45Mz8zOnZvaWQgMH1mdW5jdGlvbiBpNSgkKXtyZXR1cm4gJD09PSJsYW5kc2NhcGVfbGVmdCJ8fCQ9PT0ibGFuZHNjYXBlX3JpZ2h0In1mdW5jdGlvbiBFMCgkKXtyZXR1cm4hISQmJihpNSgkLm9yaWVudGF0aW9uKXx8JC53aWR0aD4kLmhlaWdodCl9ZnVuY3Rpb24gYzAoJCl7aWYoISR8fCQud2lkdGg8PTB8fCQuaGVpZ2h0PD0wKXJldHVybiBudWxsO2xldCBRPWk1KCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0LEo9UT9NYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KSxLPVE/TWF0aC5taW4oJC53aWR0aCwkLmhlaWdodCk6TWF0aC5tYXgoJC53aWR0aCwkLmhlaWdodCk7aWYoSj09PSQud2lkdGgmJks9PT0kLmhlaWdodClyZXR1cm4gJDtyZXR1cm57Li4uJCx3aWR0aDpKLGhlaWdodDpLfX1mdW5jdGlvbiByMCgkKXtsZXQgUT1jMCgkKSxKPXU4KCQ/Lm9yaWVudGF0aW9uKSxLPU1hdGguYWJzKEopPT09OTAsWD0hISQmJiQud2lkdGg+JC5oZWlnaHQsWT1KPT09MTgwfHxLJiYhWDtyZXR1cm57ZGlzcGxheUNvbmZpZzpRLHJvdGF0aW9uRGVncmVlczpZP0o6MCxuZWVkc0Nzc1JvdGF0aW9uOlksaW5wdXRPcmllbnRhdGlvbjpZPyQ/Lm9yaWVudGF0aW9uOnZvaWQgMH19ZnVuY3Rpb24gdTgoJCl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybiA5MDtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJuLTkwO2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybiAxODA7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gbzAoJCxRLEope3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm57eDpKLHk6MS1RfTtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJue3g6MS1KLHk6UX07Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJue3g6MS1RLHk6MS1KfTtkZWZhdWx0OnJldHVybnt4OlEseTpKfX19ZnVuY3Rpb24gbDgoJCxRLEope3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm57ZHg6SixkeTotUX07Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybntkeDotSixkeTpRfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57ZHg6LVEsZHk6LUp9O2RlZmF1bHQ6cmV0dXJue2R4OlEsZHk6Sn19fWZ1bmN0aW9uIG41KCQsUSl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnN3aXRjaChRKXtjYXNlIDE6cmV0dXJuIDM7Y2FzZSA0OnJldHVybiAyO2Nhc2UgMjpyZXR1cm4gMTtjYXNlIDM6cmV0dXJuIDQ7ZGVmYXVsdDpyZXR1cm4gUX1jYXNlImxhbmRzY2FwZV9yaWdodCI6c3dpdGNoKFEpe2Nhc2UgMTpyZXR1cm4gMjtjYXNlIDQ6cmV0dXJuIDM7Y2FzZSAyOnJldHVybiA0O2Nhc2UgMzpyZXR1cm4gMTtkZWZhdWx0OnJldHVybiBRfWNhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnN3aXRjaChRKXtjYXNlIDE6cmV0dXJuIDQ7Y2FzZSA0OnJldHVybiAxO2Nhc2UgMjpyZXR1cm4gMztjYXNlIDM6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gUX1kZWZhdWx0OnJldHVybiBRfX12YXIgZDg9MTY7ZnVuY3Rpb24gVTIoJCxRLEope2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuIG51bGw7bGV0IEs9TnVtYmVyLmlzRmluaXRlKEopJiZKPjA/SjoxLFg9UT09PTE/JCoxNjpRPT09Mj8kKks6JCxZPU1hdGgubWF4KC0yMDAsTWF0aC5taW4oMjAwLFgpKTtyZXR1cm4gTWF0aC5hYnMoWSk8MC4wMT9udWxsOll9ZnVuY3Rpb24gYTUoJCxRLEope2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuIDA7bGV0IEs9TnVtYmVyLmlzRmluaXRlKEopJiZKPjA/SjoxO2lmKFE9PT0xKXJldHVybiAkKmQ4O2lmKFE9PT0yKXJldHVybiAkKks7cmV0dXJuICR9dmFyIGM0PXtbMV06ImRlc2NyaXB0aW9uIixbMl06ImtleWZyYW1lIixbM106ImRlbHRhIixbNF06InNlZWQifTtjbGFzcyBhMntidWZmZXI9bmV3IFVpbnQ4QXJyYXkoNjU1MzYpO2xlbj0wO3N0YXJ0PTA7YXBwZW5kKCQpe2lmKHRoaXMubGVuKyQubGVuZ3RoPnRoaXMuYnVmZmVyLmxlbmd0aCl7aWYodGhpcy5zdGFydD4wKXRoaXMuYnVmZmVyLmNvcHlXaXRoaW4oMCx0aGlzLnN0YXJ0LHRoaXMubGVuKSx0aGlzLmxlbi09dGhpcy5zdGFydCx0aGlzLnN0YXJ0PTA7aWYodGhpcy5sZW4rJC5sZW5ndGg+dGhpcy5idWZmZXIubGVuZ3RoKXtsZXQgUT10aGlzLmJ1ZmZlci5sZW5ndGg7d2hpbGUoUTx0aGlzLmxlbiskLmxlbmd0aClRKj0yO2xldCBKPW5ldyBVaW50OEFycmF5KFEpO0ouc2V0KHRoaXMuYnVmZmVyLnN1YmFycmF5KDAsdGhpcy5sZW4pKSx0aGlzLmJ1ZmZlcj1KfX10aGlzLmJ1ZmZlci5zZXQoJCx0aGlzLmxlbiksdGhpcy5sZW4rPSQubGVuZ3RofXB1c2goJCl7aWYoJC5sZW5ndGg+MCl0aGlzLmFwcGVuZCgkKTtsZXQgUT1bXSxKPXRoaXMuYnVmZmVyO3doaWxlKHRoaXMubGVuLXRoaXMuc3RhcnQ+PTQpe2xldCBLPXRoaXMuc3RhcnQsWD0oSltLXTw8MjR8SltLKzFdPDwxNnxKW0srMl08PDh8SltLKzNdKT4+PjA7aWYodGhpcy5sZW4tSy00PFgpYnJlYWs7aWYoWDwxKXt0aGlzLnN0YXJ0Kz00O2NvbnRpbnVlfWxldCBZPUpbSys0XSxxPWM0W1ldO2lmKHEpUS5wdXNoKHt0eXBlOnEscGF5bG9hZDpKLnNsaWNlKEsrNSxLKzQrWCl9KTt0aGlzLnN0YXJ0Kz00K1h9aWYodGhpcy5zdGFydD4wKXtpZih0aGlzLnN0YXJ0PHRoaXMubGVuKXRoaXMuYnVmZmVyLmNvcHlXaXRoaW4oMCx0aGlzLnN0YXJ0LHRoaXMubGVuKTt0aGlzLmxlbi09dGhpcy5zdGFydCx0aGlzLnN0YXJ0PTB9cmV0dXJuIFF9cmVzZXQoKXt0aGlzLmxlbj0wLHRoaXMuc3RhcnQ9MH19ZnVuY3Rpb24gczUoJCl7aWYoJC5sZW5ndGg8NClyZXR1cm4iYXZjMS40MkUwMUUiO2xldCBRPShKKT0+Si50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpO3JldHVybiJhdmMxLiIrUSgkWzFdKStRKCRbMl0pK1EoJFszXSl9ZnVuY3Rpb24geDAoKXtyZXR1cm4gdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZ0eXBlb2YgZ2xvYmFsVGhpcy5WaWRlb0RlY29kZXI8InUifXZhciByND0xMDAwLG80PTE2NjY3O2Z1bmN0aW9uIHQ1KHt1cmw6JCxlbmFibGVkOlEsY2FudmFzUmVmOkosb25GaXJzdEZyYW1lOkssb25GcmFtZTpYLG9uRXJyb3I6WSxvbkRlY29kZXJFcnJvcjpxfSl7bGV0IEc9SSh7b25GaXJzdEZyYW1lOkssb25GcmFtZTpYLG9uRXJyb3I6WSxvbkRlY29kZXJFcnJvcjpxfSk7Ry5jdXJyZW50PXtvbkZpcnN0RnJhbWU6SyxvbkZyYW1lOlgsb25FcnJvcjpZLG9uRGVjb2RlckVycm9yOnF9LHkoKCk9PntpZighUXx8ISR8fCF4MCgpKXJldHVybjtsZXQgTj1uZXcgQWJvcnRDb250cm9sbGVyLEI9bmV3IGEyLFU9ITEsVj0hMSx6PTAsTD1udWxsLEE9bnVsbCxDPSgpPT4hVSYmIU4uc2lnbmFsLmFib3J0ZWQsSD0oaCk9PntpZihHLmN1cnJlbnQub25EZWNvZGVyRXJyb3IpRy5jdXJyZW50Lm9uRGVjb2RlckVycm9yKCk7ZWxzZSBHLmN1cnJlbnQub25FcnJvcj8uKGgpfSxPPShoLGQsQzEpPT57aWYoIUMoKSlyZXR1cm47bGV0ICQxPUouY3VycmVudDtpZighJDEpcmV0dXJuO2lmKCQxLndpZHRoIT09ZHx8JDEuaGVpZ2h0IT09QzEpJDEud2lkdGg9ZCwkMS5oZWlnaHQ9QzE7bGV0IG49JDEuZ2V0Q29udGV4dCgiMmQiKTtpZighbilyZXR1cm47aWYobi5kcmF3SW1hZ2UoaCwwLDAsZCxDMSksRy5jdXJyZW50Lm9uRnJhbWU/LigpLCFWKVY9ITAsRy5jdXJyZW50Lm9uRmlyc3RGcmFtZT8uKCl9LFc9KCk9Pm5ldyBWaWRlb0RlY29kZXIoe291dHB1dDooaCk9Pnt0cnl7aWYoQygpKU8oaCxoLmRpc3BsYXlXaWR0aCxoLmRpc3BsYXlIZWlnaHQpfWZpbmFsbHl7aC5jbG9zZSgpfX0sZXJyb3I6KGgpPT5IKGBkZWNvZGVyOiAke2gubWVzc2FnZX1gKX0pLHg9YXN5bmMoaCk9PntsZXQgZD1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChuZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL2pwZWcifSkpO3RyeXtpZihDKCkpTyhkLGQud2lkdGgsZC5oZWlnaHQpfWZpbmFsbHl7ZC5jbG9zZSgpfX0sRT0oaCk9PntpZighQXx8QS5zdGF0ZT09PSJjbG9zZWQiKUE9VygpO3RyeXtBLmNvbmZpZ3VyZSh7Y29kZWM6czUoaCksZGVzY3JpcHRpb246aCxvcHRpbWl6ZUZvcjoibGF0ZW5jeSIsaGFyZHdhcmVBY2NlbGVyYXRpb246InByZWZlci1oYXJkd2FyZSJ9KX1jYXRjaChkKXtIKGBjb25maWc6ICR7ZC5tZXNzYWdlfWApfX0sYj0oaCxkKT0+e2lmKEE/LnN0YXRlIT09ImNvbmZpZ3VyZWQiKXJldHVybjt0cnl7QS5kZWNvZGUobmV3IEVuY29kZWRWaWRlb0NodW5rKHt0eXBlOmg9PT0ia2V5ZnJhbWUiPyJrZXkiOiJkZWx0YSIsdGltZXN0YW1wOnosZGF0YTpkfSkpLHorPW80fWNhdGNoe319LGo9KGgsZCk9Pntzd2l0Y2goaCl7Y2FzZSJzZWVkIjp4KGQpLmNhdGNoKCgpPT57fSk7cmV0dXJuO2Nhc2UiZGVzY3JpcHRpb24iOkUoZCk7cmV0dXJuO2Nhc2Uia2V5ZnJhbWUiOmNhc2UiZGVsdGEiOmIoaCxkKTtyZXR1cm59fSxaMT0oKT0+e2lmKCFDKCl8fEwpcmV0dXJuO0w9c2V0VGltZW91dCgoKT0+e0w9bnVsbCxmKCl9LHI0KX0sZj1hc3luYygpPT57Qi5yZXNldCgpO3RyeXtsZXQgZD0oYXdhaXQgZmV0Y2goYCR7JH0vc3RyZWFtLmF2Y2NgLHtzaWduYWw6Ti5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIWQpcmV0dXJuO2Zvcig7Oyl7bGV0e2RvbmU6QzEsdmFsdWU6JDF9PWF3YWl0IGQucmVhZCgpO2lmKEMxKWJyZWFrO2lmKCEkMSljb250aW51ZTtmb3IobGV0IG4gb2YgQi5wdXNoKCQxKSlqKG4udHlwZSxuLnBheWxvYWQpfX1jYXRjaHt9ZmluYWxseXtpZihDKCkpWjEoKX19O3JldHVybiBmKCksKCk9PntpZihVPSEwLEwpY2xlYXJUaW1lb3V0KEwpO2lmKE4uYWJvcnQoKSxCLnJlc2V0KCksQSYmQS5zdGF0ZSE9PSJjbG9zZWQiKXRyeXtBLmNsb3NlKCl9Y2F0Y2h7fUE9bnVsbH19LFskLFEsSl0pfXZhciBpND0wO2Z1bmN0aW9uIFooJCxRLEosSyxYLFkpe1F8fChRPXt9KTt2YXIgcSxHLE49UTtpZigicmVmImluIE4pZm9yKEcgaW4gTj17fSxRKUc9PSJyZWYiP3E9UVtHXTpOW0ddPVFbR107dmFyIEI9e3R5cGU6JCxwcm9wczpOLGtleTpKLHJlZjpxLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLWk0LF9faTotMSxfX3U6MCxfX3NvdXJjZTpYLF9fc2VsZjpZfTtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKHE9JC5kZWZhdWx0UHJvcHMpKWZvcihHIGluIHEpTltHXT09PXZvaWQgMCYmKE5bR109cVtHXSk7cmV0dXJuIG8udm5vZGUmJm8udm5vZGUoQiksQn12YXIgYzg9YHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzknIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsMC40NSknIHN0cm9rZT0ncmdiYSgwLDAsMCwwLjU1KScgc3Ryb2tlLXdpZHRoPScxLjI1JyBmaWx0ZXI9J2Ryb3Atc2hhZG93KDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNDUpKScvJTNFJTNDL3N2ZyUzRSIpIDEyIDEyLCBwb2ludGVyYCxuND0xLjAwNCxhND0zLHM0PTQsdDQ9NSxlND0xMCwkNz0xMTtmdW5jdGlvbiBzMih7dXJsOiQsd3NVcmw6USxzdHlsZTpKLGltYWdlU3R5bGU6SyxjbGFzc05hbWU6WCxvbkhvbWVQcmVzczpZLG9uU3RyZWFtVG91Y2g6cSxvblN0cmVhbU11bHRpVG91Y2g6RyxvblN0cmVhbUJ1dHRvbjpOLG9uU3RyZWFtRGlnaXRhbENyb3duOkIsb25TdHJlYW1TY3JvbGw6VSxlbmFibGVEaWdpdGFsQ3Jvd246VixzdWJzY3JpYmVGcmFtZTp6LHN0cmVhbUZyYW1lOkwsc3RyZWFtQ29uZmlnOkEsb25TY3JlZW5Db25maWdDaGFuZ2U6QyxoaWRlQ29udHJvbHM6SCxvblN0cmVhbWluZ0NoYW5nZTpPLGNvbm5lY3Rpb25RdWFsaXR5OlcsY29kZWM6eD0iYXZjYyIsb25BdmNjRXJyb3I6RX0pe2xldCBiPSEhcSxqPXg9PT0iYXZjYyImJngwKCksWjE9SShudWxsKSxmPUkobnVsbCksaD1JKG51bGwpLGQ9SShudWxsKSxDMT1JKG51bGwpLCQxPUkobnVsbCksW24sazFdPU0oITEpLFtsLFJdPU0obnVsbCksW0sxLEIxXT1NKG51bGwpLFYxPUkobnVsbCksSjE9SShDKTtKMS5jdXJyZW50PUM7bGV0IHoxPUkobnVsbCksW04xLHZdPU0obnVsbCk7eSgoKT0+e2xldCBrPXoxLmN1cnJlbnQ7aWYoIWt8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBGPW5ldyBSZXNpemVPYnNlcnZlcigoRCk9PntsZXQgdz1EWzBdPy5jb250ZW50UmVjdDtpZih3KXYoe3dpZHRoOncud2lkdGgsaGVpZ2h0OncuaGVpZ2h0fSl9KTtyZXR1cm4gRi5vYnNlcnZlKGspLCgpPT5GLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtpLF9dPU0oMCksUz1JKDApLFtZMSxyXT1NKCExKSx1PUkobnVsbCk7eSgoKT0+e2lmKFc9PT0icG9vciIpe2lmKHIoITApLHUuY3VycmVudCljbGVhclRpbWVvdXQodS5jdXJyZW50KTt1LmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e3IoITEpLHUuY3VycmVudD1udWxsfSwzMDAwKX1lbHNlIGlmKHIoITEpLHUuY3VycmVudCljbGVhclRpbWVvdXQodS5jdXJyZW50KSx1LmN1cnJlbnQ9bnVsbDtyZXR1cm4oKT0+e2lmKHUuY3VycmVudCljbGVhclRpbWVvdXQodS5jdXJyZW50KX19LFtXXSk7bGV0IG09YCR7JH0vc3RyZWFtLm1qcGVnYDt5KCgpPT57VjEuY3VycmVudD1udWxsLEIxKG51bGwpfSxbJF0pO2xldCBVMT1UKChrKT0+e2lmKCFrfHxrLndpZHRoPD0wfHxrLmhlaWdodDw9MClyZXR1cm47bGV0IEY9VjEuY3VycmVudCxEPWsub3JpZW50YXRpb249PT12b2lkIDAmJkY/Lm9yaWVudGF0aW9uP3suLi5rLG9yaWVudGF0aW9uOkYub3JpZW50YXRpb259Oms7aWYoRiYmRi53aWR0aD09PUQud2lkdGgmJkYuaGVpZ2h0PT09RC5oZWlnaHQmJkYub3JpZW50YXRpb249PT1ELm9yaWVudGF0aW9uKXJldHVybjtWMS5jdXJyZW50PUQsQjEoRCksSjEuY3VycmVudD8uKEQpfSxbXSksRzE9SShPKTtHMS5jdXJyZW50PU8seSgoKT0+e0cxLmN1cnJlbnQ/LihuKX0sW25dKSx5KCgpPT57aWYoYiYmQSlVMShBKX0sW2IsQSxVMV0pO2xldCBkMT1JKCExKTtkMS5jdXJyZW50PW47bGV0IEExPUkobnVsbCkscDE9SShudWxsKTt5KCgpPT57aWYoIWJ8fCF6fHxqKXJldHVybjtsZXQgRj1zZXRUaW1lb3V0KCgpPT57aWYoIWQxLmN1cnJlbnQpUigiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLEQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGMoKXtsZXQgcz1BMS5jdXJyZW50O2lmKHMpe0ExLmN1cnJlbnQ9bnVsbDtsZXQgSDE9aC5jdXJyZW50O2lmKEgxKXtpZihwMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwocDEuY3VycmVudCk7cDEuY3VycmVudD1zLEgxLnNyYz1zLFMuY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTChzKX1EPXJlcXVlc3RBbmltYXRpb25GcmFtZShjKX0pLHc9eigoYyk9PntpZihjMS5jdXJyZW50PURhdGUubm93KCksQTEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKEExLmN1cnJlbnQpO2lmKEExLmN1cnJlbnQ9YywhZDEuY3VycmVudCljbGVhclRpbWVvdXQoRiksazEoITApLFIobnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dChGKSxjYW5jZWxBbmltYXRpb25GcmFtZShEKSx3Py4oKSxBMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoQTEuY3VycmVudCksQTEuY3VycmVudD1udWxsO2lmKHAxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChwMS5jdXJyZW50KSxwMS5jdXJyZW50PW51bGx9fSxbYix6LGpdKTtsZXQgTzA9VCgoKT0+e2MxLmN1cnJlbnQ9RGF0ZS5ub3coKSxrMSghMCksUihudWxsKX0sW10pLFEwPVQoKCk9PntpZihTLmN1cnJlbnQrKyxjMS5jdXJyZW50PURhdGUubm93KCksIWQxLmN1cnJlbnQpazEoITApLFIobnVsbCl9LFtdKTt0NSh7dXJsOiQsZW5hYmxlZDpqLGNhbnZhc1JlZjpmLG9uRmlyc3RGcmFtZTpPMCxvbkZyYW1lOlEwLG9uRXJyb3I6UixvbkRlY29kZXJFcnJvcjpFfSk7bGV0IF8xPVQoKGspPT57bGV0IEY9cjAoVjEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixEPW8wKEYsay54LGsueSksdz1rLmVkZ2U9PT12b2lkIDA/dm9pZCAwOm41KEYsay5lZGdlKSxjPXc9PT12b2lkIDA/e3R5cGU6ay50eXBlLC4uLkR9Ont0eXBlOmsudHlwZSwuLi5ELGVkZ2U6d307aWYoYil7cT8uKGMpO3JldHVybn1sZXQgcz0kMS5jdXJyZW50O2lmKCFzfHxzLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IEgxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShjKSksTTE9bmV3IFVpbnQ4QXJyYXkoMStIMS5sZW5ndGgpO00xWzBdPWE0LE0xLnNldChIMSwxKSxzLnNlbmQoTTEpfSxbYixxXSksUzE9VCgoayk9PntpZihiKXtOPy4oayk7cmV0dXJufWxldCBGPSQxLmN1cnJlbnQ7aWYoIUZ8fEYucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgRD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2J1dHRvbjprfSkpLHc9bmV3IFVpbnQ4QXJyYXkoMStELmxlbmd0aCk7d1swXT1zNCx3LnNldChELDEpLEYuc2VuZCh3KX0sW2IsTl0pLE0wPVQoKGspPT57aWYoIU51bWJlci5pc0Zpbml0ZShrKXx8az09PTApcmV0dXJuO2lmKGIpe0I/LihrKTtyZXR1cm59bGV0IEY9JDEuY3VycmVudDtpZighRnx8Ri5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBEPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6a30pKSx3PW5ldyBVaW50OEFycmF5KDErRC5sZW5ndGgpO3dbMF09ZTQsdy5zZXQoRCwxKSxGLnNlbmQodyl9LFtiLEJdKSxKMD1UKChrLEYsRCx3KT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoayl8fCFOdW1iZXIuaXNGaW5pdGUoRil8fGs9PT0wJiZGPT09MClyZXR1cm47bGV0IGM9cjAoVjEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixzPWw4KGMsayxGKSxIMT1vMChjLEQsdyksTTE9e2R4OnMuZHgsZHk6cy5keSx4OkgxLngseTpIMS55fTtpZihiKXtVPy4oTTEpO3JldHVybn1sZXQgaDE9JDEuY3VycmVudDtpZighaDF8fGgxLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IHowPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShNMSkpLGIwPW5ldyBVaW50OEFycmF5KDErejAubGVuZ3RoKTtiMFswXT0kNyxiMC5zZXQoejAsMSksaDEuc2VuZChiMCl9LFtiLFVdKSxPMT1UKChrKT0+e2xldCBGPXIwKFYxLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sRD1vMChGLGsueDEsay55MSksdz1vMChGLGsueDIsay55MiksYz17dHlwZTprLnR5cGUseDE6RC54LHkxOkQueSx4Mjp3LngseTI6dy55fTtpZihiKXtHPy4oYyk7cmV0dXJufWxldCBzPSQxLmN1cnJlbnQ7aWYoIXN8fHMucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgSDE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGMpKSxNMT1uZXcgVWludDhBcnJheSgxK0gxLmxlbmd0aCk7TTFbMF09dDQsTTEuc2V0KEgxLDEpLHMuc2VuZChNMSl9LFtiLEddKTt5KCgpPT57aWYoYilyZXR1cm47bGV0IGs9UT8/JC5yZXBsYWNlKC9eaHR0cC8sIndzIikrIi93cyIsRj1uZXcgV2ViU29ja2V0KGspO0YuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLCQxLmN1cnJlbnQ9RixGLm9ubWVzc2FnZT0oSDEpPT57aWYoIShIMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgTTE9bmV3IFVpbnQ4QXJyYXkoSDEuZGF0YSk7aWYoTTEubGVuZ3RoPDF8fE0xWzBdIT09MTMwKXJldHVybjt0cnl7VTEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoTTEuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fX0sRi5vbm9wZW49KCk9PntpZighailrMSghMCk7UihudWxsKX0sRi5vbmNsb3NlPSgpPT57azEoITEpfSxGLm9uZXJyb3I9KCk9PntSKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSxrMSghMSl9O2xldCBEPW5ldyBBYm9ydENvbnRyb2xsZXIsdz1zZXRJbnRlcnZhbCgoKT0+e18oUy5jdXJyZW50KSxTLmN1cnJlbnQ9MH0sMTAwMCksYz0hMSxzPWo/bnVsbDpzZXRUaW1lb3V0KCgpPT57aWYoIWMpUigiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApO2lmKCFqKShhc3luYygpPT57dHJ5e2xldCBNMT0oYXdhaXQgZmV0Y2gobSx7c2lnbmFsOkQuc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFNMSlyZXR1cm47bGV0IGgxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSgiLS1mcmFtZSIpO3doaWxlKCEwKXtsZXR7ZG9uZTp6MCx2YWx1ZTpiMH09YXdhaXQgTTEucmVhZCgpO2lmKHowKWJyZWFrO2lmKGIwKWZvcihsZXQgVDU9MDtUNTw9YjAubGVuZ3RoLWgxLmxlbmd0aDtUNSsrKXtsZXQgZzM9ITA7Zm9yKGxldCBnMj0wO2cyPGgxLmxlbmd0aDtnMisrKWlmKGIwW1Q1K2cyXSE9PWgxW2cyXSl7ZzM9ITE7YnJlYWt9aWYoZzMpe2lmKFMuY3VycmVudCsrLCFjKXtpZihjPSEwLHMpY2xlYXJUaW1lb3V0KHMpfX19fX1jYXRjaHt9fSkoKTtyZXR1cm4oKT0+e2lmKEQuYWJvcnQoKSxjbGVhckludGVydmFsKHcpLHMpY2xlYXJUaW1lb3V0KHMpO0YuY2xvc2UoKSwkMS5jdXJyZW50PW51bGx9fSxbJCxtLGIsVTEsUSxqXSk7bGV0IGMxPUkoMCk7eSgoKT0+e2lmKCFiKXJldHVybjtsZXQgaz0yMDAwLEY9KCk9PntsZXQgYz1jMS5jdXJyZW50O2lmKCFjfHwhZDEuY3VycmVudClyZXR1cm47aWYoRGF0ZS5ub3coKS1jPmspazEoITEpfSxEPXNldEludGVydmFsKCgpPT57XyhTLmN1cnJlbnQpLFMuY3VycmVudD0wLEYoKX0sMTAwMCksdz0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4pRigpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdyksKCk9PntjbGVhckludGVydmFsKEQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHcpfX0sW2JdKTtsZXQgVzA9VCgoKT0+e2lmKGopcmV0dXJuIGYuY3VycmVudDtyZXR1cm4gYj9oLmN1cnJlbnQ6WjEuY3VycmVudH0sW2Isal0pLHcxPVQoKCk9PntyZXR1cm4gZC5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/VzAoKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P251bGx9LFtXMF0pLHUxPVQoKGssRik9PntsZXQgRD13MSgpO2lmKCFEKXJldHVybjtsZXQgdz0oRi5jbGllbnRYLUQubGVmdCkvRC53aWR0aCxjPShGLmNsaWVudFktRC50b3ApL0QuaGVpZ2h0O18xKHt0eXBlOmsseDp3LHk6Y30pfSxbdzEsXzFdKSxOMD1UKChrLEYpPT57bGV0IHc9dzEoKT8uaGVpZ2h0fHwxLGM9VTIoayxGLHcpO2lmKGM9PT1udWxsKXJldHVybiExO3JldHVybiBNMChjKSwhMH0sW3cxLE0wXSkseDE9SSghMSksRTE9SSghMSksYTE9SSghMSksWjA9SSh7ZHg6MCxkeTowfSksaTE9SSghMSksW1UwLEQwXT1NKCExKSxfMD1JKHt4OjAuNSx5OjAuNX0pLFtyMSxJMV09TShudWxsKTt5KCgpPT57bGV0IGs9KEQpPT57aWYoRC5rZXk9PT0iQWx0IilEMCghMCl9LEY9KEQpPT57aWYoRC5rZXk9PT0iQWx0Iil7aWYoRDAoITEpLCFFMS5jdXJyZW50KUkxKG51bGwpfX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixrKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLEYpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGspLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsRil9fSxbXSkseSgoKT0+e2lmKFUwJiYhRTEuY3VycmVudCl7bGV0IGs9XzAuY3VycmVudDtJMSh7eDE6ay54LHkxOmsueSx4MjoxLWsueCx5MjoxLWsueX0pfWVsc2UgaWYoIVUwJiYhRTEuY3VycmVudClJMShudWxsKX0sW1UwXSk7bGV0IHYxPUkobnVsbCksZzE9SSghMSksbjE9SSgwKSxLMD1UKChrLEYpPT57ZzEuY3VycmVudD0hMDtsZXQgRD12MS5jdXJyZW50O2lmKEQpY2FuY2VsQW5pbWF0aW9uRnJhbWUobjEuY3VycmVudCksbjEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntELnN0eWxlLmxlZnQ9YCR7ayoxMDB9JWAsRC5zdHlsZS50b3A9YCR7RioxMDB9JWAsRC5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sW10pLEwwPVQoKGssRik9PntpZighZzEuY3VycmVudClyZXR1cm47bGV0IEQ9djEuY3VycmVudDtpZihEKWNhbmNlbEFuaW1hdGlvbkZyYW1lKG4xLmN1cnJlbnQpLG4xLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57RC5zdHlsZS5sZWZ0PWAke2sqMTAwfSVgLEQuc3R5bGUudG9wPWAke0YqMTAwfSVgfSl9LFtdKSxlMT1UKCgpPT57ZzEuY3VycmVudD0hMTtsZXQgaz12MS5jdXJyZW50O2lmKGspY2FuY2VsQW5pbWF0aW9uRnJhbWUobjEuY3VycmVudCksay5zdHlsZS5kaXNwbGF5PSJub25lIn0sW10pLGU9VCgoayk9PntpZihnMS5jdXJyZW50fHxFMS5jdXJyZW50KXJldHVybiExO2xldCBGPXcxKCk7aWYoIUYpcmV0dXJuITE7bGV0IEQ9YTUoay5kZWx0YVgsay5kZWx0YU1vZGUsRi53aWR0aCksdz1hNShrLmRlbHRhWSxrLmRlbHRhTW9kZSxGLmhlaWdodCk7aWYoRD09PTAmJnc9PT0wKXJldHVybiExO2xldCBjPU1hdGgubWluKE1hdGgubWF4KChrLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLDApLDEpLHM9TWF0aC5taW4oTWF0aC5tYXgoKGsuY2xpZW50WS1GLnRvcCkvRi5oZWlnaHQsMCksMSk7cmV0dXJuIEowKEQvRi53aWR0aCx3L0YuaGVpZ2h0LGMscyksITB9LFt3MSxKMF0pO3koKCk9PntsZXQgaz1DMS5jdXJyZW50O2lmKCFrKXJldHVybjtsZXQgRj0oRCk9PntpZighKFY/TjAoRC5kZWx0YVksRC5kZWx0YU1vZGUpOmUoRCkpKXJldHVybjtELnByZXZlbnREZWZhdWx0KCksRC5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIGsuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLEYse3Bhc3NpdmU6ITF9KSwoKT0+ay5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsRil9LFtWLE4wLGVdKTtsZXQgUD1JKDApLHA9SShudWxsKSx0PVQoKCk9PntsZXQgaz1EYXRlLm5vdygpLEY9ay1QLmN1cnJlbnQ7aWYoUC5jdXJyZW50PWssRjwzMDApe2lmKHAuY3VycmVudCljbGVhclRpbWVvdXQocC5jdXJyZW50KSxwLmN1cnJlbnQ9bnVsbDtpZihZKVkoKTtlbHNlIFMxKCJhcHBfc3dpdGNoZXIiKX1lbHNlIHAuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57aWYoWSlZKCk7ZWxzZSBTMSgiaG9tZSIpO3AuY3VycmVudD1udWxsfSwzMDApfSxbUzEsWV0pLGE9cjAoSzEpLHExPWEuZGlzcGxheUNvbmZpZyxYMT0oKCk9PntpZighcTF8fCFOMSlyZXR1cm4gbnVsbDtpZihOMS53aWR0aD09PTB8fE4xLmhlaWdodD09PTApcmV0dXJuIG51bGw7bGV0IGs9TWF0aC5taW4oTjEud2lkdGgvcTEud2lkdGgsTjEuaGVpZ2h0L3ExLmhlaWdodCk7cmV0dXJue3dpZHRoOnExLndpZHRoKmssaGVpZ2h0OnExLmhlaWdodCprfX0pKCksYjE9YS5yb3RhdGlvbkRlZ3JlZXMsUjE9YS5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhiMSk9PT05MCxvMT1LLFgwPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNTAlIixsZWZ0OiI1MCUiLHdpZHRoOlIxJiZYMT9gJHtYMS5oZWlnaHR9cHhgOiIxMDAlIixoZWlnaHQ6UjEmJlgxP2Ake1gxLndpZHRofXB4YDoiMTAwJSIsdHJhbnNmb3JtOmB0cmFuc2xhdGUoLTUwJSwgLTUwJSkke2IxPT09MD8iIjpgIHJvdGF0ZSgke2IxfWRlZylgfWAsdHJhbnNmb3JtT3JpZ2luOiJjZW50ZXIgY2VudGVyIixjdXJzb3I6YzgsZGlzcGxheToiYmxvY2siLHVzZXJTZWxlY3Q6Im5vbmUiLFdlYmtpdFVzZXJTZWxlY3Q6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIiwuLi5LLC4uLmIxPT09MD97fTp7Ym9yZGVyUmFkaXVzOjAsY29ybmVyU2hhcGU6dm9pZCAwfX0sWTA9ey4uLlgwLHRyYW5zZm9ybTpgJHtYMC50cmFuc2Zvcm0/PyIifSBzY2FsZSgke240fSlgfTtyZXR1cm4gWigiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLkg/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLkp9LGNsYXNzTmFtZTpYLGNoaWxkcmVuOltaKCJkaXYiLHtyZWY6ejEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46WigiZGl2Iix7cmVmOmQsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6WDE/YCR7WDEud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6WDE/YCR7WDEuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOm8xPy5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6bzE/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbaj9aKCJjYW52YXMiLHtyZWY6ZixzdHlsZTpZMH0pOlooImltZyIse3JlZjpaMSxzcmM6Yj92b2lkIDA6bSxkcmFnZ2FibGU6ITEsb25Mb2FkOihrKT0+e2xldCBGPWsuY3VycmVudFRhcmdldDtpZihGLm5hdHVyYWxXaWR0aD4wJiZGLm5hdHVyYWxIZWlnaHQ+MClVMSh7d2lkdGg6Ri5uYXR1cmFsV2lkdGgsaGVpZ2h0OkYubmF0dXJhbEhlaWdodH0pfSxzdHlsZTpiP3tkaXNwbGF5OiJub25lIn06WDB9KSxiJiYhaiYmWigiaW1nIix7cmVmOmgsZHJhZ2dhYmxlOiExLG9uTG9hZDooayk9PntsZXQgRj1rLmN1cnJlbnRUYXJnZXQ7aWYoRi5uYXR1cmFsV2lkdGg+MCYmRi5uYXR1cmFsSGVpZ2h0PjApVTEoe3dpZHRoOkYubmF0dXJhbFdpZHRoLGhlaWdodDpGLm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6WDB9KSxaKCJkaXYiLHtyZWY6QzEsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6YzgsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooayk9PntrLnByZXZlbnREZWZhdWx0KCk7bGV0IEY9dzEoKTtpZighRilyZXR1cm47bGV0IEQ9KGsuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgsdz0oay5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtpZihrLmFsdEtleSl7RTEuY3VycmVudD0hMCxhMS5jdXJyZW50PWsuc2hpZnRLZXk7bGV0IHM9e3gxOkQseTE6dyx4MjoxLUQseTI6MS13fTtaMC5jdXJyZW50PXtkeDoxLUQtRCxkeToxLXctd30sSTEocyksTzEoe3R5cGU6ImJlZ2luIiwuLi5zfSk7cmV0dXJufUswKEQsdyk7bGV0IGM9bzUodyk7aWYoYyE9PXZvaWQgMCl4MS5jdXJyZW50PSEwLF8xKHt0eXBlOiJiZWdpbiIseDpELHk6dyxlZGdlOmN9KTtlbHNlIHgxLmN1cnJlbnQ9ITEsdTEoImJlZ2luIixrKX0sb25Nb3VzZU1vdmU6KGspPT57bGV0IEY9dzEoKTtpZighRilyZXR1cm47bGV0IEQ9KGsuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgsdz0oay5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtpZihfMC5jdXJyZW50PXt4OkQseTp3fSxrLmJ1dHRvbnM9PT0wKXtpZihrLmFsdEtleSlJMSh7eDE6RCx5MTp3LHgyOjEtRCx5MjoxLXd9KTtyZXR1cm59aWYoRTEuY3VycmVudCl7bGV0IGM7aWYoYTEuY3VycmVudCl7bGV0IHM9WjAuY3VycmVudDtjPXt4MTpELHkxOncseDI6RCtzLmR4LHkyOncrcy5keX19ZWxzZSBjPXt4MTpELHkxOncseDI6MS1ELHkyOjEtd307STEoYyksTzEoe3R5cGU6Im1vdmUiLC4uLmN9KTtyZXR1cm59aWYoTDAoRCx3KSx4MS5jdXJyZW50KV8xKHt0eXBlOiJtb3ZlIix4OkQseTp3LGVkZ2U6ZDB9KTtlbHNlIHUxKCJtb3ZlIixrKX0sb25Nb3VzZVVwOihrKT0+e2lmKEUxLmN1cnJlbnQpe2xldCBGPXcxKCk7aWYoRil7bGV0IEQ9KGsuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgsdz0oay5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtpZihhMS5jdXJyZW50KXtsZXQgYz1aMC5jdXJyZW50O08xKHt0eXBlOiJlbmQiLHgxOkQseTE6dyx4MjpEK2MuZHgseTI6dytjLmR5fSl9ZWxzZSBPMSh7dHlwZToiZW5kIix4MTpELHkxOncseDI6MS1ELHkyOjEtd30pfWlmKEUxLmN1cnJlbnQ9ITEsIWsuYWx0S2V5KUkxKG51bGwpO3JldHVybn1pZihlMSgpLHgxLmN1cnJlbnQpe2xldCBGPXcxKCk7aWYoRil7bGV0IEQ9KGsuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgsdz0oay5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtfMSh7dHlwZToiZW5kIix4OkQseTp3LGVkZ2U6ZDB9KX14MS5jdXJyZW50PSExO3JldHVybn11MSgiZW5kIixrKX0sb25Nb3VzZUxlYXZlOihrKT0+e2lmKEUxLmN1cnJlbnQpe2lmKHIxKU8xKHt0eXBlOiJlbmQiLC4uLnIxfSk7RTEuY3VycmVudD0hMSxJMShudWxsKTtyZXR1cm59aWYoZTEoKSx4MS5jdXJyZW50KXtsZXQgRj13MSgpO2lmKEYpe2xldCBEPShrLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLHc9KGsuY2xpZW50WS1GLnRvcCkvRi5oZWlnaHQ7XzEoe3R5cGU6ImVuZCIseDpELHk6dyxlZGdlOmQwfSl9eDEuY3VycmVudD0hMTtyZXR1cm59aWYoay5idXR0b25zPjApdTEoImVuZCIsayk7STEobnVsbCl9LG9uVG91Y2hTdGFydDooayk9PntrLnByZXZlbnREZWZhdWx0KCk7bGV0IEY9dzEoKTtpZighRilyZXR1cm47aWYoay50b3VjaGVzLmxlbmd0aD49Mil7ZTEoKTtsZXQgSDE9ay50b3VjaGVzWzBdLE0xPWsudG91Y2hlc1sxXSxoMT17eDE6KEgxLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLHkxOihIMS5jbGllbnRZLUYudG9wKS9GLmhlaWdodCx4MjooTTEuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgseTI6KE0xLmNsaWVudFktRi50b3ApL0YuaGVpZ2h0fTtpZighaTEuY3VycmVudCYmIXgxLmN1cnJlbnQpXzEoe3R5cGU6ImVuZCIseDpoMS54MSx5OmgxLnkxfSk7aTEuY3VycmVudD0hMCxFMS5jdXJyZW50PSEwLHgxLmN1cnJlbnQ9ITEsSTEoaDEpLE8xKHt0eXBlOiJiZWdpbiIsLi4uaDF9KTtyZXR1cm59bGV0IEQ9ay50b3VjaGVzWzBdO2lmKCFEKXJldHVybjtsZXQgdz0oRC5jbGllbnRYLUYubGVmdCkvRi53aWR0aCxjPShELmNsaWVudFktRi50b3ApL0YuaGVpZ2h0O0swKHcsYyk7bGV0IHM9bzUoYyk7aWYocyE9PXZvaWQgMCl4MS5jdXJyZW50PSEwLF8xKHt0eXBlOiJiZWdpbiIseDp3LHk6YyxlZGdlOnN9KTtlbHNlIHgxLmN1cnJlbnQ9ITEsXzEoe3R5cGU6ImJlZ2luIix4OncseTpjfSl9LG9uVG91Y2hNb3ZlOihrKT0+e2sucHJldmVudERlZmF1bHQoKTtsZXQgRj13MSgpO2lmKCFGKXJldHVybjtpZihpMS5jdXJyZW50JiZrLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgcz1rLnRvdWNoZXNbMF0sSDE9ay50b3VjaGVzWzFdLE0xPXt4MToocy5jbGllbnRYLUYubGVmdCkvRi53aWR0aCx5MToocy5jbGllbnRZLUYudG9wKS9GLmhlaWdodCx4MjooSDEuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgseTI6KEgxLmNsaWVudFktRi50b3ApL0YuaGVpZ2h0fTtJMShNMSksTzEoe3R5cGU6Im1vdmUiLC4uLk0xfSk7cmV0dXJufWxldCBEPWsudG91Y2hlc1swXTtpZighRClyZXR1cm47bGV0IHc9KEQuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgsYz0oRC5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtpZihMMCh3LGMpLHgxLmN1cnJlbnQpXzEoe3R5cGU6Im1vdmUiLHg6dyx5OmMsZWRnZTpkMH0pO2Vsc2UgXzEoe3R5cGU6Im1vdmUiLHg6dyx5OmN9KX0sb25Ub3VjaEVuZDooayk9PntrLnByZXZlbnREZWZhdWx0KCk7bGV0IEY9dzEoKTtpZighRilyZXR1cm47aWYoaTEuY3VycmVudCl7aWYoay50b3VjaGVzLmxlbmd0aDwyKXtsZXQgcz1rLmNoYW5nZWRUb3VjaGVzWzBdLEgxPXIxO2lmKHMmJkgxKU8xKHt0eXBlOiJlbmQiLHgxOihzLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLHkxOihzLmNsaWVudFktRi50b3ApL0YuaGVpZ2h0LHgyOkgxLngyLHkyOkgxLnkyfSk7ZWxzZSBpZihIMSlPMSh7dHlwZToiZW5kIiwuLi5IMX0pO2kxLmN1cnJlbnQ9ITEsRTEuY3VycmVudD0hMSxJMShudWxsKX1yZXR1cm59bGV0IEQ9ay5jaGFuZ2VkVG91Y2hlc1swXTtpZighRClyZXR1cm47bGV0IHc9KEQuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgsYz0oRC5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtpZihlMSgpLHgxLmN1cnJlbnQpXzEoe3R5cGU6ImVuZCIseDp3LHk6YyxlZGdlOmQwfSkseDEuY3VycmVudD0hMTtlbHNlIF8xKHt0eXBlOiJlbmQiLHg6dyx5OmN9KX19KSxaKCJkaXYiLHtyZWY6djEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxyMSYmWihRMSx7Y2hpbGRyZW46W1ooImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOmk4KHIxLngxLHIxLnkxKX0pLFooImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOmk4KHIxLngyLHIxLnkyKX0pXX0pLCFuJiYhbCYmWigiZGl2Iix7c3R5bGU6ey4uLnI4LC4uLkt8fHt9fSxjaGlsZHJlbjpaKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxsJiZaKCJkaXYiLHtzdHlsZTpyOCxjaGlsZHJlbjpaKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46bH0pfSksWTEmJlooImRpdiIse3N0eWxlOlE3LGNoaWxkcmVuOlooInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFIJiZaKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltaKCJidXR0b24iLHtvbkNsaWNrOnQsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLFooInNwYW4iLHtzdHlsZTp7Y29sb3I6aT4wPyIjNGY0IjoiIzg4OCIsZm9udFNpemU6MTIsZm9udEZhbWlseToibW9ub3NwYWNlIixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo2fSxjaGlsZHJlbjpbVyYmWigic3BhbiIseyJkYXRhLXRlc3RpZCI6InF1YWxpdHktZG90IixzdHlsZTp7d2lkdGg6OCxoZWlnaHQ6OCxib3JkZXJSYWRpdXM6IjUwJSIsZGlzcGxheToiaW5saW5lLWJsb2NrIixiYWNrZ3JvdW5kOlc9PT0iZ29vZCI/IiM0YWRlODAiOlc9PT0iZGVncmFkZWQiPyIjZmFjYzE1IjoiI2VmNDQ0NCJ9fSksaSwiIGZwcyJdfSldfSldfSl9dmFyIFE3PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0scjg9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LG84PTIwO2Z1bmN0aW9uIGk4KCQsUSl7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHskKjEwMH0lYCx0b3A6YCR7USoxMDB9JWAsd2lkdGg6bzgsaGVpZ2h0Om84LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIEYwKCQpe2lmKCEkKXJldHVybiJpcGhvbmUiO2xldCBRPSQudG9Mb3dlckNhc2UoKTtpZihRLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKFEuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZihRLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgVDE9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LFNKPVQxLmlwaG9uZS53aWR0aCx4Sj1UMS5pcGhvbmUuaGVpZ2h0LGpKPVQxLmlwaG9uZS5iZXplbFgsdko9VDEuaXBob25lLmJlemVsWSxSSj1UMS5pcGhvbmUuaW5uZXJSYWRpdXMsbjg9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiB0MigkLFEpe2xldCBKPSQmJiQud2lkdGg+MCYmJC5oZWlnaHQ+MD8kOlEsSz1jMChKKTtpZihLKXJldHVybmAke0sud2lkdGh9IC8gJHtLLmhlaWdodH1gO3JldHVybmAke1QxLmlwaG9uZS53aWR0aC0yKlQxLmlwaG9uZS5iZXplbFh9IC8gJHtUMS5pcGhvbmUuaGVpZ2h0LTIqVDEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIGkwKCQ9ImlwaG9uZSIsUSl7bGV0IEo9UT9uOFtRXTpudWxsO2lmKEopcmV0dXJuIEo7bGV0IEs9VDFbJF07cmV0dXJue3dpZHRoOksud2lkdGgtMipLLmJlemVsWCxoZWlnaHQ6Sy5oZWlnaHQtMipLLmJlemVsWX19ZnVuY3Rpb24gbjAoJD0iaXBob25lIixRKXtpZihFMChRKSlzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIGUyKCQ9ImlwaG9uZSIsUSl7bGV0IEo9VDFbJF0sSz1KLndpZHRoLTIqSi5iZXplbFgsWD1KLmhlaWdodC0yKkouYmV6ZWxZO2lmKEs8WCYmRTAoUSkpcmV0dXJuYCR7Si5pbm5lclJhZGl1cy9YKjEwMH0lIC8gJHtKLmlubmVyUmFkaXVzL0sqMTAwfSVgO3JldHVybmAke0ouaW5uZXJSYWRpdXMvSyoxMDB9JSAvICR7Si5pbm5lclJhZGl1cy9YKjEwMH0lYH1mdW5jdGlvbiBhOCgkKXtsZXQgUT1UMVskLnR5cGVdLEo9US53aWR0aC0yKlEuYmV6ZWxYLEs9US5oZWlnaHQtMipRLmJlemVsWSxYLFk7aWYoSjxLJiZFMCgkLmNvbmZpZz8/bnVsbCkpWD1RLmlubmVyUmFkaXVzL0ssWT1RLmlubmVyUmFkaXVzL0o7ZWxzZSBYPVEuaW5uZXJSYWRpdXMvSixZPVEuaW5uZXJSYWRpdXMvSztsZXQgcT1YKiQuY29udGFpbmVyV2lkdGgsRz1ZKiQuY29udGFpbmVySGVpZ2h0LE49TWF0aC5zcXJ0KE1hdGgubWF4KHEqRywwKSk7cmV0dXJue3J4OnEscnk6RyxyR2VvbTpOfX12YXIgWjc9MTMsSzc9NjI7ZnVuY3Rpb24gZTUoJCl7bGV0e2NvbnRhaW5lcldpZHRoOlEsY29udGFpbmVySGVpZ2h0Okp9PSQsSz0oSCk9PkgudG9GaXhlZCgzKSxYPShILE8pPT57bGV0IFc9Tyx4PU8sRT1LNy8yKihNYXRoLlBJLzE4MCksYj0yMjUqTWF0aC5QSS8xODAsaj1iK0UsWjE9Yi1FLGY9VytIKk1hdGguY29zKGopLGg9eCtIKk1hdGguc2luKGopLGQ9VytIKk1hdGguY29zKFoxKSxDMT14K0gqTWF0aC5zaW4oWjEpLCQxPWBNICR7SyhmKX0gJHtLKGgpfSBBICR7SyhIKX0gJHtLKEgpfSAwIDAgMSAke0soZCl9ICR7SyhDMSl9YCxuPWBNICR7SyhkKX0gJHtLKEMxKX0gQSAke0soSCl9ICR7SyhIKX0gMCAwIDAgJHtLKGYpfSAke0soaCl9YDtyZXR1cm57ZDokMSxkRmlsbDpufX07aWYoIShRPjApfHwhKEo+MCkpe2xldCBIPVo3LE89TWF0aC5jZWlsKEgrMTQpLHtkOlcsZEZpbGw6eH09WChILE8pO3JldHVybntkOlcsZEZpbGw6eCx2aWV3Qm94U2l6ZTpPfX1sZXR7ckdlb206WX09YTgoJCkscT1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKFEsSikpKSxHPVkqMC4zNCtxLE49TWF0aC5taW4oUSxKKSxCPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLE4qMC4wNTIpKTtHPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLEcsQikpO2xldCBMPU1hdGgubWF4KDI2LE1hdGguY2VpbChHKzEzKSkse2Q6QSxkRmlsbDpDfT1YKEcsTCk7cmV0dXJue2Q6QSxkRmlsbDpDLHZpZXdCb3hTaXplOkx9fWZ1bmN0aW9uICQ1KHt0eXBlOiQ9ImlwaG9uZSIsc3RyZWFtaW5nOlE9ITF9KXtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gWihZNyx7c3RyZWFtaW5nOlF9KTtjYXNlIndhdGNoIjpyZXR1cm4gWihxNyx7c3RyZWFtaW5nOlF9KTtjYXNlInZpc2lvbiI6cmV0dXJuIFooRzcse3N0cmVhbWluZzpRfSk7ZGVmYXVsdDpyZXR1cm4gWihYNyx7c3RyZWFtaW5nOlF9KX19ZnVuY3Rpb24gWDcoe3N0cmVhbWluZzokPSExfSl7cmV0dXJuIFooInN2ZyIse3ZpZXdCb3g6IjAgMCA0MjcgODgxIixzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpbWigiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIwIix4OiItMC4xNjY5OTIiLHk6IjAuMTY2NTA0Iix3aWR0aDoiNDI3IixoZWlnaHQ6Ijg4MC42NjciLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxaKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSksWigiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIxIix4OiI2LjMzMjM2Iix5OiI2LjMzMzgyIix3aWR0aDoiNDE0IixoZWlnaHQ6Ijg2OCIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pXX0pLFooInJlY3QiLHt4OiIzLjgzMjY4Iix5OiIzLjgzMzY2Iix3aWR0aDoiNDE5IixoZWlnaHQ6Ijg3MyIscng6IjY2LjE2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQuMzMzMzMifSksWigicmVjdCIse3g6IjAuODMzMzMzIix5OiIwLjgzMzMzMyIsd2lkdGg6IjQyNSIsaGVpZ2h0OiI4NzkiLHJ4OiI2OS4xNjY3IixzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pLFooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMCkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiIxLjY2NjAyIix5OiIyIix3aWR0aDoiNDIzLjMzMyIsaGVpZ2h0OiI4NzciLHJ4OiI2OC42NjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pfSksWigiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIxKSIsY2hpbGRyZW46WigicmVjdCIse3g6IjcuMzMyNjgiLHk6IjcuMzMzNjYiLHdpZHRoOiI0MTIiLGhlaWdodDoiODY2IixyeDoiNjIuNjY2NyIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjY2NjcifSl9KSxaKCJyZWN0Iix7eDoiMTUxLjY2NiIseToiMzEuNjY3Iix3aWR0aDoiMTIzLjMzMyIsaGVpZ2h0OiIzNiIscng6IjE4IixmaWxsOiJibGFjayIsc3R5bGU6e29wYWNpdHk6JD8wOjEsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIFk3KHtzdHJlYW1pbmc6JD0hMX0pe2xldCBRPVQxLmlwYWQud2lkdGgsSj1UMS5pcGFkLmhlaWdodCxLPTMwLFg9MjY7cmV0dXJuIFooInN2ZyIse3ZpZXdCb3g6YDAgMCAke1F9ICR7Sn1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWigiZGVmcyIse2NoaWxkcmVuOltaKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6USxoZWlnaHQ6SixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLFooImZpbHRlciIse2lkOiJpcGFkLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpRLTEwLGhlaWdodDpKLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxaKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiYmx1ciJ9KV19KV19KSxaKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOlEtNyxoZWlnaHQ6Si03LHJ4OjI2LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQifSksWigicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6US0xLjY2NixoZWlnaHQ6Si0xLjY2NixyeDozMCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxaKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MCkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6US0zLGhlaWdodDpKLTMscng6Mjksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxaKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MSkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpRLTEyLGhlaWdodDpKLTEyLHJ4OjI0LHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksWigiY2lyY2xlIix7Y3g6US8yLGN5OlQxLmlwYWQuYmV6ZWxZLzIrMSxyOiIzIixmaWxsOiIjMWExYTFhIixzdHlsZTp7b3BhY2l0eTokPzA6MC44LHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KSxaKCJyZWN0Iix7eDooUS0xMjApLzIseTpKLVQxLmlwYWQuYmV6ZWxZLzItMi41LHdpZHRoOiIxMjAiLGhlaWdodDoiNSIscng6IjIuNSIsZmlsbDoid2hpdGUiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjM1LG1peEJsZW5kTW9kZToiZGlmZmVyZW5jZSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIHE3KHtzdHJlYW1pbmc6JD0hMX0pe2xldCBRPVQxLndhdGNoLndpZHRoLEo9VDEud2F0Y2guaGVpZ2h0LEs9ODgsWD04MixZPTgscT0zNixHPUovMi0xOC0xNixOPTIyLEI9Si8yLTExKzE2O3JldHVybiBaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtRfSAke0p9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb3ZlcmZsb3c6InZpc2libGUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltaKCJkZWZzIix7Y2hpbGRyZW46WigiZmlsdGVyIix7aWQ6IndhdGNoLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpRKzEyLGhlaWdodDpKLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxaKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSl9KSxaKCJyZWN0Iix7eDpRLTIseTpHLHdpZHRoOjgsaGVpZ2h0OjM2LHJ4OiIzIixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxIn0pLFooInJlY3QiLHt4OlEtMSx5OkIsd2lkdGg6NixoZWlnaHQ6MjIscng6IjIuNSIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMC44In0pLFooInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6US03LGhlaWdodDpKLTcscng6ODIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMy41In0pLFooInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOlEtMS42NjYsaGVpZ2h0OkotMS42NjYscng6ODgsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWigiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3dhdGNoLWdsb3cwKSIsY2hpbGRyZW46WigicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpRLTMsaGVpZ2h0OkotMyxyeDo4NyxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pXX0pfWZ1bmN0aW9uIEc3KHtzdHJlYW1pbmc6JD0hMX0pe2xldCBRPVQxLnZpc2lvbi53aWR0aCxKPVQxLnZpc2lvbi5oZWlnaHQsSz00MCxYPTM0O3JldHVybiBaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtRfSAke0p9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpbWigiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6USxoZWlnaHQ6SixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLFooImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOlEtMTAsaGVpZ2h0OkotMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMyIscmVzdWx0OiJibHVyIn0pXX0pLFooImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMCIseTI6IjEiLGNoaWxkcmVuOltaKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNTU1NTU4IixzdG9wT3BhY2l0eToiMC4zIn0pLFooInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzNhM2EzZCIsc3RvcE9wYWNpdHk6IjAuMSJ9KV19KV19KSxaKCJyZWN0Iix7eDoiMCIseToiMCIsd2lkdGg6USxoZWlnaHQ6SixyeDo0MCxmaWxsOiJ1cmwoI3Zpc2lvbi1nbGFzcykifSksWigicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpRLTcsaGVpZ2h0OkotNyxyeDozNCxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzIn0pLFooInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOlEtMS42NjYsaGVpZ2h0OkotMS42NjYscng6NDAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWigiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MCkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6US0zLGhlaWdodDpKLTMscng6Mzksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxaKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cxKSIsY2hpbGRyZW46WigicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOlEtMTIsaGVpZ2h0OkotMTIscng6MzIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxaKCJlbGxpcHNlIix7Y3g6US8yLGN5OkovMixyeDpRLzItMzAscnk6Si8yLTI0LHN0cm9rZToiIzRhNGE0ZCIsc3Ryb2tlV2lkdGg6IjAuNSIsb3BhY2l0eToiMC4zIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX12YXIgJDM9cTAobnVsbCk7ZnVuY3Rpb24gUTUoJCl7bGV0IFE9RzAoJDMpO2lmKCFRKXRocm93IEVycm9yKGA8U2ltdWxhdG9yVG9vbGJhci4keyR9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8U2ltdWxhdG9yVG9vbGJhcj5gKTtyZXR1cm4gUX12YXIgQjc9e2Rpc3BsYXk6ImZsZXgiLGZsZXhXcmFwOiJ3cmFwIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6IjRweCAxMnB4IixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyUmFkaXVzOjI0LGJhY2tncm91bmQ6InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZywgIzE4MTgxOCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSIsYm94U2hhZG93OiIwIDFweCAycHggcmdiYSgwLDAsMCwwLjIpIixtaW5XaWR0aDoyNDAsd2lkdGg6IjEwMCUifTtmdW5jdGlvbiBONyh7ZXhlYzokLG9uUm90YXRlOlEsb3JpZW50YXRpb246SixkZXZpY2VVZGlkOkssZGV2aWNlTmFtZTpYLGRldmljZVJ1bnRpbWU6WSxzdHJlYW1pbmc6cT0hMSxkaXNhYmxlZDpHPSExLGNoaWxkcmVuOk4sc3R5bGU6QiwuLi5VfSl7bGV0IFY9RjAoWCksTD17ZXhlYzokLG9uUm90YXRlOlEsb3JpZW50YXRpb246SixkZXZpY2VVZGlkOkssZGV2aWNlTmFtZTpYLGRldmljZVJ1bnRpbWU6WSxkZXZpY2VUeXBlOlYsc3RyZWFtaW5nOnEsZGlzYWJsZWQ6R3x8IUt8fCFxfTtyZXR1cm4gWigkMy5Qcm92aWRlcix7dmFsdWU6TCxjaGlsZHJlbjpaKCJkaXYiLHsiZGF0YS1zaW11bGF0b3ItdG9vbGJhciI6ITAsc3R5bGU6ey4uLkI3LC4uLkJ9LC4uLlUsY2hpbGRyZW46Tn0pfSl9dmFyIFU3PXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGFsaWduSXRlbXM6ImZsZXgtc3RhcnQiLHRleHRBbGlnbjoibGVmdCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNmZmYiLHBhZGRpbmc6IjJweCA0cHgiLG1hcmdpbjoiLTJweCAtNHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGxpbmVIZWlnaHQ6MS4yLGZvbnRGYW1pbHk6ImluaGVyaXQifSxMNz1CMChmdW5jdGlvbih7bmFtZTpRLHN1YnRpdGxlOkosaGlkZUNoZXZyb246SyxoaWRlU3VidGl0bGU6WCxzdHlsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpHLC4uLk59LEIpe2xldCBVPVE1KCJUaXRsZSIpLFtWLHpdPU0oITEpLEw9UT8/VS5kZXZpY2VOYW1lPz8iTm8gc2ltdWxhdG9yIixBPUo/PyhVLmRldmljZVJ1bnRpbWU/VS5kZXZpY2VSdW50aW1lLnJlcGxhY2UoL1wuLywiICIpOiLigJQiKTtyZXR1cm4gWigiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiZGF0YS1zaW11bGF0b3ItdG9vbGJhci10aXRsZSI6ITAsb25Nb3VzZUVudGVyOihDKT0+e3ooITApLHE/LihDKX0sb25Nb3VzZUxlYXZlOihDKT0+e3ooITEpLEc/LihDKX0sc3R5bGU6ey4uLlU3LGJhY2tncm91bmQ6Vj8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLC4uLll9LC4uLk4sY2hpbGRyZW46W1ooInNwYW4iLHtzdHlsZTp7ZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZm9udFNpemU6MTIsZm9udFdlaWdodDo2MDAsY29sb3I6IiNmZmYiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbTCwhSyYmWigic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixzdHlsZTp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsZmxleFNocmluazowfSxjaGlsZHJlbjpaKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSwhWCYmWigic3BhbiIse3N0eWxlOntmb250U2l6ZToxMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46QX0pXX0pfSksejc9e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZmxleFNocmluazowfTtmdW5jdGlvbiBDNyh7c3R5bGU6JCwuLi5RfSl7cmV0dXJuIFooImRpdiIse3N0eWxlOnsuLi56NywuLi4kfSwuLi5RfSl9dmFyIEg3PXtiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjEyLGN1cnNvcjoicG9pbnRlciIsZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZC1jb2xvciAwLjE1cywgY29sb3IgMC4xNXMiLHBvc2l0aW9uOiJyZWxhdGl2ZSIsb3ZlcmZsb3c6InZpc2libGUifSxKNT1CMChmdW5jdGlvbih7Zm9yY2VEaXNhYmxlZDpRLHRvb2x0aXA6SixzdHlsZTpLLGRpc2FibGVkOlgsdGl0bGU6WSxvbk1vdXNlRW50ZXI6cSxvbk1vdXNlTGVhdmU6RyxvblBvaW50ZXJEb3duOk4sb25Gb2N1czpCLG9uQmx1cjpVLG9uQ2xpY2s6VixjaGlsZHJlbjp6LCJhcmlhLWxhYmVsIjpMLC4uLkF9LEMpe2xldCBIPUcwKCQzKSxPPVh8fFF8fEg/LmRpc2FibGVkLFtXLHhdPU0oITEpLFtFLGJdPU0oITEpLGo9SSghMSksWjE9bDAoKSxmPUo/P1k/Pyh0eXBlb2YgTD09PSJzdHJpbmciP0w6bnVsbCksaD0hIWYmJiFPJiYoV3x8RSk7cmV0dXJuIFooImJ1dHRvbiIse3JlZjpDLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6TywiYXJpYS1sYWJlbCI6TCwiYXJpYS1kZXNjcmliZWRieSI6Zj9aMTp2b2lkIDAsb25Qb2ludGVyRG93bjooZCk9PntqLmN1cnJlbnQ9ITAsTj8uKGQpfSxvbk1vdXNlRW50ZXI6KGQpPT57eCghMCkscT8uKGQpfSxvbk1vdXNlTGVhdmU6KGQpPT57eCghMSksRz8uKGQpfSxvbkZvY3VzOihkKT0+e2IoIWouY3VycmVudCksQj8uKGQpfSxvbkJsdXI6KGQpPT57ai5jdXJyZW50PSExLGIoITEpLFU/LihkKX0sb25DbGljazooZCk9Pnt4KCExKSxiKCExKSxkLmN1cnJlbnRUYXJnZXQuYmx1cigpLFY/LihkKX0sc3R5bGU6ey4uLkg3LGNvbG9yOk8/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6VyYmIU8/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6Tz8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5LfSwuLi5BLGNoaWxkcmVuOlt6LGYmJlooInNwYW4iLHtpZDpaMSxyb2xlOiJ0b29sdGlwIiwiYXJpYS1oaWRkZW4iOiFoLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6IjUwJSIsYm90dG9tOiJjYWxjKDEwMCUgKyA4cHgpIix0cmFuc2Zvcm06YHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgke2g/MDoyfXB4KWAsb3BhY2l0eTpoPzE6MCxwb2ludGVyRXZlbnRzOiJub25lIix3aGl0ZVNwYWNlOiJub3dyYXAiLHBhZGRpbmc6IjRweCA3cHgiLGJvcmRlclJhZGl1czo2LGJhY2tncm91bmQ6InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZywgIzE4MTgxOCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTIpIixmb250U2l6ZToxMSxmb250V2VpZ2h0OjUwMCxsaW5lSGVpZ2h0OjEsYm94U2hhZG93OiIwIDRweCAxNHB4IHJnYmEoMCwwLDAsMC4zMikiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4xMnMgZWFzZSwgdHJhbnNmb3JtIDAuMTJzIGVhc2UiLHpJbmRleDoxMDB9LGNoaWxkcmVuOmZ9KV19KX0pO2Z1bmN0aW9uIEY3KCQsUSl7aWYoJD09PSJ3YXRjaCIpcmV0dXJuIGs3KCk7aWYoUSlyZXR1cm5geGNydW4gc2ltY3RsIGxhdW5jaCAke1F9IGNvbS5hcHBsZS5zcHJpbmdib2FyZGA7cmV0dXJuInNlcnZlLXNpbSBidXR0b24gaG9tZSJ9ZnVuY3Rpb24gazcoKXtyZXR1cm5bJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBzZXQgZnJvbnRtb3N0IHRvIHRydWUnLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gcGVyZm9ybSBhY3Rpb24gIkFYUmFpc2UiIG9mIChmaXJzdCB3aW5kb3cgd2hvc2UgbmFtZSBjb250YWlucyAid2F0Y2hPUyIpJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIGNsaWNrIG1lbnUgaXRlbSAiSG9tZSIgb2YgbWVudSAiRGV2aWNlIiBvZiBtZW51IGJhciBpdGVtICJEZXZpY2UiIG9mIG1lbnUgYmFyIDEnXS5tYXAoKFEpPT5gLWUgJyR7UX0nYCkucmVkdWNlKChRLEopPT5gJHtRfSAke0p9YCwib3Nhc2NyaXB0Iil9dmFyIEE3PVooInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNMyAxMC41IDEyIDNsOSA3LjVWMjBhMSAxIDAgMCAxLTEgMWgtNXYtN2gtNnY3SDRhMSAxIDAgMCAxLTEtMXoifSl9KSxPNz1aKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCA0NCA0NCIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpaKCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixmaWxsOiJjdXJyZW50Q29sb3IiLGQ6Ik00My42ODc1IDEyLjQ2ODhWOC4yNzM0NEM0My42ODc1IDUuNzI2NTYgNDIuOTUzMSAzLjcxMDk0IDQxLjQ4NDQgMi4yMjY1NkM0MC4wMTU2IDAuNzQyMTg4IDM4IDAgMzUuNDM3NSAwSDMxLjE0ODRDMzAuNjAxNiAwIDMwLjEzMjggMC4xOTUzMTIgMjkuNzQyMiAwLjU4NTkzOEMyOS4zNTE2IDAuOTc2NTYyIDI5LjE1NjIgMS40NDUzMSAyOS4xNTYyIDEuOTkyMTlDMjkuMTU2MiAyLjUyMzQ0IDI5LjM1MTYgMi45ODQzOCAyOS43NDIyIDMuMzc1QzMwLjEzMjggMy43NjU2MiAzMC42MDE2IDMuOTYwOTQgMzEuMTQ4NCAzLjk2MDk0SDM1LjQzNzVDMzYuNzgxMiAzLjk2MDk0IDM3LjgzNTkgNC4zNDM3NSAzOC42MDE2IDUuMTA5MzhDMzkuMzUxNiA1Ljg3NSAzOS43MjY2IDYuOTI5NjkgMzkuNzI2NiA4LjI3MzQ0VjEyLjQ2ODhDMzkuNzI2NiAxMyAzOS45MjE5IDEzLjQ2MDkgNDAuMzEyNSAxMy44NTE2QzQwLjcwMzEgMTQuMjQyMiA0MS4xNzE5IDE0LjQzNzUgNDEuNzE4OCAxNC40Mzc1QzQyLjI1IDE0LjQzNzUgNDIuNzEwOSAxNC4yNDIyIDQzLjEwMTYgMTMuODUxNkM0My40OTIyIDEzLjQ2MDkgNDMuNjg3NSAxMyA0My42ODc1IDEyLjQ2ODhaTTAgMTIuNDY4OEMwIDEzIDAuMTk1MzEyIDEzLjQ2MDkgMC41ODU5MzggMTMuODUxNkMwLjk3NjU2MiAxNC4yNDIyIDEuNDM3NSAxNC40Mzc1IDEuOTY4NzUgMTQuNDM3NUMyLjUgMTQuNDM3NSAyLjk2MDk0IDE0LjI0MjIgMy4zNTE1NiAxMy44NTE2QzMuNzQyMTkgMTMuNDYwOSAzLjkzNzUgMTMgMy45Mzc1IDEyLjQ2ODhWOC4yNzM0NEMzLjkzNzUgNi45Mjk2OSA0LjMyMDMxIDUuODc1IDUuMDg1OTQgNS4xMDkzOEM1LjgzNTk0IDQuMzQzNzUgNi44OTA2MiAzLjk2MDk0IDguMjUgMy45NjA5NEgxMi41MzkxQzEzLjA4NTkgMy45NjA5NCAxMy41NTQ3IDMuNzY1NjIgMTMuOTQ1MyAzLjM3NUMxNC4zMjAzIDIuOTg0MzggMTQuNTA3OCAyLjUyMzQ0IDE0LjUwNzggMS45OTIxOUMxNC41MDc4IDEuNDQ1MzEgMTQuMzIwMyAwLjk3NjU2MiAxMy45NDUzIDAuNTg1OTM4QzEzLjU1NDcgMC4xOTUzMTIgMTMuMDg1OSAwIDEyLjUzOTEgMEg4LjI1QzUuNjg3NSAwIDMuNjcxODggMC43NDIxODggMi4yMDMxMiAyLjIyNjU2QzAuNzM0Mzc1IDMuNzEwOTQgMCA1LjcyNjU2IDAgOC4yNzM0NFYxMi40Njg4Wk00My42ODc1IDMxLjI0MjJDNDMuNjg3NSAzMC43MTA5IDQzLjQ5MjIgMzAuMjUgNDMuMTAxNiAyOS44NTk0QzQyLjcxMDkgMjkuNDY4OCA0Mi4yNSAyOS4yNzM0IDQxLjcxODggMjkuMjczNEM0MS4xNzE5IDI5LjI3MzQgNDAuNzAzMSAyOS40Njg4IDQwLjMxMjUgMjkuODU5NEMzOS45MjE5IDMwLjI1IDM5LjcyNjYgMzAuNzEwOSAzOS43MjY2IDMxLjI0MjJWMzUuNDM3NUMzOS43MjY2IDM2Ljc4MTIgMzkuMzUxNiAzNy44MzU5IDM4LjYwMTYgMzguNjAxNkMzNy44MzU5IDM5LjM2NzIgMzYuNzgxMiAzOS43NSAzNS40Mzc1IDM5Ljc1SDMxLjE0ODRDMzAuNjAxNiAzOS43NSAzMC4xMzI4IDM5Ljk0NTMgMjkuNzQyMiA0MC4zMzU5QzI5LjM1MTYgNDAuNzI2NiAyOS4xNTYyIDQxLjE4NzUgMjkuMTU2MiA0MS43MTg4QzI5LjE1NjIgNDIuMjY1NiAyOS4zNTE2IDQyLjcyNjYgMjkuNzQyMiA0My4xMDE2QzMwLjEzMjggNDMuNDkyMiAzMC42MDE2IDQzLjY4NzUgMzEuMTQ4NCA0My42ODc1SDM1LjQzNzVDMzggNDMuNjg3NSA0MC4wMTU2IDQyLjk0NTMgNDEuNDg0NCA0MS40NjA5QzQyLjk1MzEgMzkuOTkyMiA0My42ODc1IDM3Ljk4NDQgNDMuNjg3NSAzNS40Mzc1VjMxLjI0MjJaTTAgMzEuMjQyMlYzNS40Mzc1QzAgMzcuOTg0NCAwLjczNDM3NSAzOS45OTIyIDIuMjAzMTIgNDEuNDYwOUMzLjY3MTg4IDQyLjk0NTMgNS42ODc1IDQzLjY4NzUgOC4yNSA0My42ODc1SDEyLjUzOTFDMTMuMDg1OSA0My42ODc1IDEzLjU1NDcgNDMuNDkyMiAxMy45NDUzIDQzLjEwMTZDMTQuMzIwMyA0Mi43MjY2IDE0LjUwNzggNDIuMjY1NiAxNC41MDc4IDQxLjcxODhDMTQuNTA3OCA0MS4xODc1IDE0LjMyMDMgNDAuNzI2NiAxMy45NDUzIDQwLjMzNTlDMTMuNTU0NyAzOS45NDUzIDEzLjA4NTkgMzkuNzUgMTIuNTM5MSAzOS43NUg4LjI1QzYuODkwNjIgMzkuNzUgNS44MzU5NCAzOS4zNjcyIDUuMDg1OTQgMzguNjAxNkM0LjMyMDMxIDM3LjgzNTkgMy45Mzc1IDM2Ljc4MTIgMy45Mzc1IDM1LjQzNzVWMzEuMjQyMkMzLjkzNzUgMzAuNzEwOSAzLjc0MjE5IDMwLjI1IDMuMzUxNTYgMjkuODU5NEMyLjk2MDk0IDI5LjQ2ODggMi41IDI5LjI3MzQgMS45Njg3NSAyOS4yNzM0QzEuNDM3NSAyOS4yNzM0IDAuOTc2NTYyIDI5LjQ2ODggMC41ODU5MzggMjkuODU5NEMwLjE5NTMxMiAzMC4yNSAwIDMwLjcxMDkgMCAzMS4yNDIyWk0zMS41OTM4IDMxLjgwNDdDMzIuNzgxMiAzMS44MDQ3IDMzLjY3MTkgMzEuNTE1NiAzNC4yNjU2IDMwLjkzNzVDMzQuODU5NCAzMC4zNDM4IDM1LjE1NjIgMjkuNDY4OCAzNS4xNTYyIDI4LjMxMjVWMTYuNzEwOUMzNS4xNTYyIDE1LjUzOTEgMzQuODU5NCAxNC42NjQxIDM0LjI2NTYgMTQuMDg1OUMzMy42NzE5IDEzLjQ5MjIgMzIuNzgxMiAxMy4xOTUzIDMxLjU5MzggMTMuMTk1M0gyOC44OTg0QzI4LjQ2MDkgMTMuMTk1MyAyOC4xNDg0IDEzLjE0MDYgMjcuOTYwOSAxMy4wMzEyQzI3Ljc1NzggMTIuOTIxOSAyNy41MjM0IDEyLjcyNjYgMjcuMjU3OCAxMi40NDUzTDI2LjM2NzIgMTEuNTA3OEMyNi4wODU5IDExLjE5NTMgMjUuNzgxMiAxMC45Njg4IDI1LjQ1MzEgMTAuODI4MUMyNS4xMDk0IDEwLjY3MTkgMjQuNjU2MiAxMC41OTM4IDI0LjA5MzggMTAuNTkzOEgxOS42MTcyQzE5LjA1NDcgMTAuNTkzOCAxOC42MDk0IDEwLjY3MTkgMTguMjgxMiAxMC44MjgxQzE3LjkzNzUgMTAuOTY4OCAxNy42MjUgMTEuMTk1MyAxNy4zNDM4IDExLjUwNzhMMTYuNDc2NiAxMi40NDUzQzE2LjIxMDkgMTIuNzQyMiAxNS45NzY2IDEyLjk0NTMgMTUuNzczNCAxMy4wNTQ3QzE1LjU1NDcgMTMuMTQ4NCAxNS4yMzQ0IDEzLjE5NTMgMTQuODEyNSAxMy4xOTUzSDEyLjA0NjlDMTAuODkwNiAxMy4xOTUzIDEwLjAxNTYgMTMuNDkyMiA5LjQyMTg4IDE0LjA4NTlDOC44MTI1IDE0LjY2NDEgOC41MDc4MSAxNS41MzkxIDguNTA3ODEgMTYuNzEwOVYyOC4zMTI1QzguNTA3ODEgMjkuNDY4OCA4LjgxMjUgMzAuMzQzOCA5LjQyMTg4IDMwLjkzNzVDMTAuMDE1NiAzMS41MTU2IDEwLjg5MDYgMzEuODA0NyAxMi4wNDY5IDMxLjgwNDdIMzEuNTkzOFpNMjEuNzk2OSAyOC45NDUzQzIwLjU5MzggMjguOTQ1MyAxOS41IDI4LjY2NDEgMTguNTE1NiAyOC4xMDE2QzE3LjUxNTYgMjcuNTIzNCAxNi43MjY2IDI2Ljc0MjIgMTYuMTQ4NCAyNS43NTc4QzE1LjU1NDcgMjQuNzU3OCAxNS4yNTc4IDIzLjYzMjggMTUuMjU3OCAyMi4zODI4QzE1LjI1NzggMjEuMTc5NyAxNS41NTQ3IDIwLjA4NTkgMTYuMTQ4NCAxOS4xMDE2QzE2LjcyNjYgMTguMTAxNiAxNy41MTU2IDE3LjMxMjUgMTguNTE1NiAxNi43MzQ0QzE5LjUgMTYuMTQwNiAyMC41OTM4IDE1Ljg0MzggMjEuNzk2OSAxNS44NDM4QzIzLjAxNTYgMTUuODQzOCAyNC4xMjUgMTYuMTQwNiAyNS4xMjUgMTYuNzM0NEMyNi4xMDk0IDE3LjMxMjUgMjYuODk4NCAxOC4xMDE2IDI3LjQ5MjIgMTkuMTAxNkMyOC4wNzAzIDIwLjA4NTkgMjguMzU5NCAyMS4xNzk3IDI4LjM1OTQgMjIuMzgyOEMyOC4zNTk0IDIzLjYxNzIgMjguMDcwMyAyNC43MjY2IDI3LjQ5MjIgMjUuNzEwOUMyNi44OTg0IDI2LjY5NTMgMjYuMTA5NCAyNy40ODQ0IDI1LjEyNSAyOC4wNzgxQzI0LjEyNSAyOC42NTYyIDIzLjAxNTYgMjguOTQ1MyAyMS43OTY5IDI4Ljk0NTNaTTIxLjgyMDMgMjYuOTA2MkMyMi42NDg0IDI2LjkwNjIgMjMuNDA2MiAyNi43MTA5IDI0LjA5MzggMjYuMzIwM0MyNC43ODEyIDI1LjkxNDEgMjUuMzI4MSAyNS4zNjcyIDI1LjczNDQgMjQuNjc5N0MyNi4xMjUgMjMuOTkyMiAyNi4zMjAzIDIzLjIyNjYgMjYuMzIwMyAyMi4zODI4QzI2LjMyMDMgMjEuNTcwMyAyNi4xMjUgMjAuODIwMyAyNS43MzQ0IDIwLjEzMjhDMjUuMzI4MSAxOS40NDUzIDI0Ljc4MTIgMTguOTA2MiAyNC4wOTM4IDE4LjUxNTZDMjMuNDA2MiAxOC4xMDk0IDIyLjY0ODQgMTcuOTA2MiAyMS44MjAzIDE3LjkwNjJDMjAuOTkyMiAxNy45MDYyIDIwLjI0MjIgMTguMTA5NCAxOS41NzAzIDE4LjUxNTZDMTguODgyOCAxOC45MDYyIDE4LjMzNTkgMTkuNDQ1MyAxNy45Mjk3IDIwLjEzMjhDMTcuNTIzNCAyMC44MjAzIDE3LjMyMDMgMjEuNTcwMyAxNy4zMjAzIDIyLjM4MjhDMTcuMzIwMyAyMy4yMjY2IDE3LjUyMzQgMjMuOTkyMiAxNy45Mjk3IDI0LjY3OTdDMTguMzM1OSAyNS4zNjcyIDE4Ljg4MjggMjUuOTE0MSAxOS41NzAzIDI2LjMyMDNDMjAuMjQyMiAyNi43MTA5IDIwLjk5MjIgMjYuOTA2MiAyMS44MjAzIDI2LjkwNjJaTTEyLjYzMjggMTguOTg0NEMxMi4yMTA5IDE4Ljk4NDQgMTEuODU5NCAxOC44MzU5IDExLjU3ODEgMTguNTM5MUMxMS4yODEyIDE4LjI0MjIgMTEuMTMyOCAxNy44OTA2IDExLjEzMjggMTcuNDg0NEMxMS4xMzI4IDE3LjA2MjUgMTEuMjgxMiAxNi43MTA5IDExLjU3ODEgMTYuNDI5N0MxMS44NTk0IDE2LjEzMjggMTIuMjEwOSAxNS45ODQ0IDEyLjYzMjggMTUuOTg0NEMxMy4wMzkxIDE1Ljk4NDQgMTMuMzkwNiAxNi4xMzI4IDEzLjY4NzUgMTYuNDI5N0MxMy45ODQ0IDE2LjcxMDkgMTQuMTMyOCAxNy4wNjI1IDE0LjEzMjggMTcuNDg0NEMxNC4xMzI4IDE3Ljg5MDYgMTMuOTg0NCAxOC4yNDIyIDEzLjY4NzUgMTguNTM5MUMxMy4zOTA2IDE4LjgzNTkgMTMuMDM5MSAxOC45ODQ0IDEyLjYzMjggMTguOTg0NFoifSl9KSxNNz1aKCJzdmciLHt3aWR0aDoiMjEiLGhlaWdodDoiMjEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltaKCJwYXRoIix7ZDoiTTEyIDVINmEyIDIgMCAwIDAtMiAydjMifSksWigicGF0aCIse2Q6Im05IDggMy0zLTMtMyJ9KSxaKCJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn0pXX0pLFc3PUIwKGZ1bmN0aW9uKHtvbkNsaWNrOlEsLi4uSn0sSyl7bGV0IFg9UTUoIkhvbWVCdXR0b24iKTtyZXR1cm4gWihKNSx7cmVmOkssImFyaWEtbGFiZWwiOiJIb21lIixvbkNsaWNrOihZKT0+e2lmKFE/LihZKSxZLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO1guZXhlYyhGNyhYLmRldmljZVR5cGUsWC5kZXZpY2VVZGlkKSl9LC4uLkosY2hpbGRyZW46QTd9KX0pLF83PUIwKGZ1bmN0aW9uKHtvbkNsaWNrOlEsLi4uSn0sSyl7bGV0IFg9UTUoIlNjcmVlbnNob3RCdXR0b24iKTtyZXR1cm4gWihKNSx7cmVmOkssImFyaWEtbGFiZWwiOiJTY3JlZW5zaG90IixvbkNsaWNrOihZKT0+e2lmKFE/LihZKSxZLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKFguZGV2aWNlVWRpZClYLmV4ZWMoYHhjcnVuIHNpbWN0bCBpbyAke1guZGV2aWNlVWRpZH0gc2NyZWVuc2hvdCB+L0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJChkYXRlICslcykucG5nYCl9LC4uLkosY2hpbGRyZW46Tzd9KX0pLFA3PUIwKGZ1bmN0aW9uKHtvbkNsaWNrOlEsZm9yY2VEaXNhYmxlZDpKLC4uLkt9LFgpe2xldCBZPVE1KCJSb3RhdGVCdXR0b24iKSxxPVkuZGV2aWNlVHlwZT09PSJ3YXRjaCJ8fFkuZGV2aWNlVHlwZT09PSJ2aXNpb24iLFtHLE5dPU0oInBvcnRyYWl0Iik7cmV0dXJuIHkoKCk9PntOKFkub3JpZW50YXRpb24/PyJwb3J0cmFpdCIpfSxbWS5kZXZpY2VVZGlkLFkub3JpZW50YXRpb25dKSxaKEo1LHtyZWY6WCwiYXJpYS1sYWJlbCI6IlJvdGF0ZSBkZXZpY2UiLGZvcmNlRGlzYWJsZWQ6Snx8cSxvbkNsaWNrOihCKT0+e2lmKFE/LihCKSxCLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKCFZLmRldmljZVVkaWR8fHEpcmV0dXJuO2xldCBVPU4yW1kub3JpZW50YXRpb24/P0ddO2lmKE4oVSksWS5vblJvdGF0ZSlZLm9uUm90YXRlKFUpO2Vsc2UgWS5leGVjKGBzZXJ2ZS1zaW0gcm90YXRlICR7VX0gLWQgJHtZLmRldmljZVVkaWR9YCl9LC4uLkssY2hpbGRyZW46TTd9KX0pLG0xPU43O20xLlRpdGxlPUw3O20xLkFjdGlvbnM9Qzc7bTEuQnV0dG9uPUo1O20xLkhvbWVCdXR0b249Vzc7bTEuU2NyZWVuc2hvdEJ1dHRvbj1fNzttMS5Sb3RhdGVCdXR0b249UDc7dmFyIFo1PSguLi4kKT0+JC5maWx0ZXIoKFEsSixLKT0+e3JldHVybiBCb29sZWFuKFEpJiZRLnRyaW0oKSE9PSIiJiZLLmluZGV4T2YoUSk9PT1KfSkuam9pbigiICIpLnRyaW0oKTt2YXIgczg9KCQpPT4kLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKTt2YXIgdDg9KCQpPT4kLnJlcGxhY2UoL14oW0EtWl0pfFtccy1fXSsoXHcpL2csKFEsSixLKT0+Sz9LLnRvVXBwZXJDYXNlKCk6Si50b0xvd2VyQ2FzZSgpKTt2YXIgUTM9KCQpPT57bGV0IFE9dDgoJCk7cmV0dXJuIFEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrUS5zbGljZSgxKX07dmFyIEs1PXt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOjI0LGhlaWdodDoyNCx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoyLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTt2YXIgZTg9KCQpPT57Zm9yKGxldCBRIGluICQpaWYoUS5zdGFydHNXaXRoKCJhcmlhLSIpfHxRPT09InJvbGUifHxRPT09InRpdGxlIilyZXR1cm4hMDtyZXR1cm4hMX07dmFyIEQ3PXEwKHt9KTt2YXIgJDk9KCk9PkcwKEQ3KTt2YXIgUTk9QjAoKHtjb2xvcjokLHNpemU6USxzdHJva2VXaWR0aDpKLGFic29sdXRlU3Ryb2tlV2lkdGg6SyxjbGFzc05hbWU6WD0iIixjaGlsZHJlbjpZLGljb25Ob2RlOnEsLi4uR30sTik9PntsZXR7c2l6ZTpCPTI0LHN0cm9rZVdpZHRoOlU9MixhYnNvbHV0ZVN0cm9rZVdpZHRoOlY9ITEsY29sb3I6ej0iY3VycmVudENvbG9yIixjbGFzc05hbWU6TD0iIn09JDkoKT8/e30sQT1LPz9WP051bWJlcihKPz9VKSoyNC9OdW1iZXIoUT8/Qik6Sj8/VTtyZXR1cm4gajEoInN2ZyIse3JlZjpOLC4uLks1LHdpZHRoOlE/P0I/P0s1LndpZHRoLGhlaWdodDpRPz9CPz9LNS5oZWlnaHQsc3Ryb2tlOiQ/P3osc3Ryb2tlV2lkdGg6QSxjbGFzc05hbWU6WjUoImx1Y2lkZSIsTCxYKSwuLi4hWSYmIWU4KEcpJiZ7ImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LC4uLkd9LFsuLi5xLm1hcCgoW0MsSF0pPT5qMShDLEgpKSwuLi5BcnJheS5pc0FycmF5KFkpP1k6W1ldXSl9KTt2YXIgRjE9KCQsUSk9PntsZXQgSj1CMCgoe2NsYXNzTmFtZTpLLC4uLlh9LFkpPT5qMShROSx7cmVmOlksaWNvbk5vZGU6USxjbGFzc05hbWU6WjUoYGx1Y2lkZS0ke3M4KFEzKCQpKX1gLGBsdWNpZGUtJHskfWAsSyksLi4uWH0pKTtyZXR1cm4gSi5kaXNwbGF5TmFtZT1RMygkKSxKfTt2YXIgVDc9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dLFsicGF0aCIse2Q6Ik05IDN2MTgiLGtleToiZmgzaHFhIn1dXSxrMD1GMSgicGFuZWwtbGVmdCIsVDcpO3ZhciB3Nz1bWyJwYXRoIix7ZDoiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6IixrZXk6Inh3bnppcCJ9XSxbInBhdGgiLHtkOiJNMjEgMTFWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYiLGtleToiMTRyc3ZxIn1dXSxJMD1GMSgic3F1YXJlLW1vdXNlLXBvaW50ZXIiLHc3KTt2YXIgRTc9W1sicmVjdCIse3g6IjIiLHk6IjQiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNiIscng6IjIiLGtleToiaXp4bGFvIn1dLFsicGF0aCIse2Q6Ik0xMCA0djQiLGtleToicHA4dTgwIn1dLFsicGF0aCIse2Q6Ik0yIDhoMjAiLGtleToiZDExY3M3In1dLFsicGF0aCIse2Q6Ik02IDR2NCIsa2V5OiIxc3Z0ancifV1dLEwyPUYxKCJhcHAtd2luZG93IixFNyk7dmFyIEk3PVtbInBhdGgiLHtkOiJNNyA3aDEwdjEwIixrZXk6IjF0aXZuOSJ9XSxbInBhdGgiLHtkOiJNNyAxNyAxNyA3IixrZXk6IjF2a2l6YSJ9XV0sejI9RjEoImFycm93LXVwLXJpZ2h0IixJNyk7dmFyIGI3PVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXSxDMj1GMSgiY2hlY2siLGI3KTt2YXIgeTc9W1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dLEgyPUYxKCJjaGV2cm9uLWRvd24iLHk3KTt2YXIgUzc9W1sicGF0aCIse2Q6Im05IDE4IDYtNi02LTYiLGtleToibXRoaHdxIn1dXSxGMj1GMSgiY2hldnJvbi1yaWdodCIsUzcpO3ZhciB4Nz1bWyJwYXRoIix7ZDoiTTEyIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAxMiAxOHoiLGtleToiYjE5aDVxIn1dLFsicGF0aCIse2Q6Ik0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIsa2V5OiJoN2g1Z2UifV1dLGsyPUYxKCJmYXN0LWZvcndhcmQiLHg3KTt2YXIgajc9W1sicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3IixrZXk6ImNvdWhpNyJ9XSxbInBhdGgiLHtkOiJtMjEgNy01IDUgNSA1VjciLGtleToiNm91aWE3In1dLFsicGF0aCIse2Q6Ik0xMiAyMHYyIixrZXk6IjFsaDFrZyJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiIsa2V5OiI4amN4dWQifV0sWyJwYXRoIix7ZDoiTTEyIDh2MiIsa2V5OiIxd29xaXYifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV1dLEEyPUYxKCJmbGlwLWhvcml6b250YWwtMiIsajcpO3ZhciB2Nz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Ik0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIixrZXk6IjEzbzF6bCJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMCIsa2V5OiI5aTRwdTQifV1dLE8yPUYxKCJnbG9iZSIsdjcpO3ZhciBSNz1bWyJwYXRoIix7ZDoibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIsa2V5OiI5a3p5MzUifV0sWyJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiIsa2V5OiIxdDBmMHQifV0sWyJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IiLGtleToiMW9idXM2In1dLFsicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIiLGtleToiMWd2aGJ5In1dXSxNMj1GMSgiaW1hZ2VzIixSNyk7dmFyIGc3PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCIsa2V5OiIxNG52cDAifV1dLFcyPUYxKCJwYW5lbC1yaWdodCIsZzcpO3ZhciBoNz1bWyJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIsa2V5OiIxMzU3ZTMifV0sWyJwYXRoIix7ZDoiTTMgM3Y1aDUiLGtleToiMXhocThhIn1dXSxfMj1GMSgicm90YXRlLWNjdyIsaDcpO3ZhciBmNz1bWyJwYXRoIix7ZDoibTIxIDIxLTQuMzQtNC4zNCIsa2V5OiIxNGo3cmoifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCIsa2V5OiI0ZWo5N3UifV1dLFAyPUYxKCJzZWFyY2giLGY3KTt2YXIgbTc9W1sicGF0aCIse2Q6Ik0xMiAzdjEyIixrZXk6IjF4MGo1cyJ9XSxbInBhdGgiLHtkOiJtMTcgOC01LTUtNSA1IixrZXk6IjdxOTdyOCJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIsa2V5OiJpaDduM2gifV1dLEQyPUYxKCJ1cGxvYWQiLG03KTt2YXIgcDc9W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXSwkMD1GMSgieCIscDcpO2Z1bmN0aW9uIFQyKHtvcGVuOiR9KXtyZXR1cm4gWigic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjbGFzc05hbWU6ImxlbS1jaGV2cm9uIHRleHQtd2hpdGUvNTAiLHN0eWxlOnt0cmFuc2Zvcm06JD8icm90YXRlKDE4MGRlZykiOiJyb3RhdGUoMGRlZykifSxjaGlsZHJlbjpaKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KX1mdW5jdGlvbiBYNSh7ZGlyOiR9KXtyZXR1cm4gWigic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZToibXItWzNweF0iLGNoaWxkcmVuOiQ9PT0idXAiP1ooInBvbHlnb24iLHtwb2ludHM6IjEyLDQgMjAsMTggNCwxOCJ9KTpaKCJwb2x5Z29uIix7cG9pbnRzOiI0LDYgMjAsNiAxMiwyMCJ9KX0pfWZ1bmN0aW9uIHcyKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOlooInBvbHlnb24iLHtwb2ludHM6IjYsNCAyMCwxMiA2LDIwIn0pfSl9ZnVuY3Rpb24gSjMoKXtyZXR1cm4gWigic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46W1ooInJlY3QiLHt4OiI2Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KSxaKCJyZWN0Iix7eDoiMTQiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pXX0pfWZ1bmN0aW9uIEUyKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOlooInJlY3QiLHt4OiI1Iix5OiI1Iix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIxLjUifSl9KX1mdW5jdGlvbiBaMygpe3JldHVybiBaKGsyLHtzaXplOjEyLHN0cm9rZVdpZHRoOjIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KX1mdW5jdGlvbiBLMygpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNCAyIDkgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTYuMDA4NTIgMTQuODA1NEM1Ljg5MTgxIDE0LjkzNSA1Ljc1ODE1IDE0Ljk5OTggNS42MDc1NiAxNC45OTk4QzUuNDU2OTYgMTUuMDAzMyA1LjMyMzMgMTQuOTYxMyA1LjIwNjU5IDE0Ljg3MzdDNS4wOTM2NCAxNC43ODYxIDUuMDI1ODcgMTQuNjcyMyA1LjAwMzI4IDE0LjUzMjJDNC45ODQ0NiAxNC4zOTIxIDUuMDQ2NTggMTQuMjQ1IDUuMTg5NjUgMTQuMDkwOUw2Ljk0NTk5IDEyLjE1MjJMNy4yNDUzIDEwLjg3NTVMOC4xOTk3MSAxMS45ODkzTDguMDU4NTMgMTIuMzkzOUM4LjAyMDg4IDEyLjQ5NTUgNy45ODY5OSAxMi41NzA4IDcuOTU2ODcgMTIuNjE5OEM3LjkzMDUyIDEyLjY2ODggNy44NzQwNCAxMi43NDA2IDcuNzg3NDUgMTIuODM1Mkw2LjAwODUyIDE0LjgwNTRaTTEwLjM0NTcgMTQuNjQyNUw5LjEwMzI5IDEyLjMwNDZDOS4wNzY5NCAxMi4yNjI1IDkuMDU0MzUgMTIuMjIyMyA5LjAzNTUzIDEyLjE4MzdDOS4wMTY3IDEyLjE0NTIgOC45NzcxNyAxMi4wOTA5IDguOTE2OTMgMTIuMDIwOUw3LjcxOTY4IDEwLjYxODFDNy40OTM3OSAxMC4zNTU0IDcuMzM3NTQgMTAuMTI5NSA3LjI1MDk1IDkuOTQwMzRDNy4xNjQzNSA5Ljc0NzcgNy4xMzQyNCA5LjQ5OTAxIDcuMTYwNTkgOS4xOTQyOUw3LjI2MjI0IDcuOTgwNjVDNy4yNjk3NyA3LjkwNzEgNy4yMzIxMiA3Ljg1NDU2IDcuMTQ5MjkgNy44MjMwNEM3LjA2NjQ3IDcuNzkxNTEgNi45ODU1MiA3LjgwOTAzIDYuOTA2NDYgNy44NzU1N0w2LjQ3MTYxIDguMjQzMzRMNi4zNDE3MiA5LjY3MjM5QzYuMzIyODkgOS44NDc1MiA2LjI2NDU0IDkuOTc4ODcgNi4xNjY2NSAxMC4wNjY0QzYuMDY4NzYgMTAuMTU0IDUuOTM4ODcgMTAuMTkyNSA1Ljc3Njk4IDEwLjE4MkM1LjYxMTMyIDEwLjE3NSA1LjQ4MzMxIDEwLjExOSA1LjM5Mjk1IDEwLjAxMzlDNS4zMDYzNiA5LjkwODgyIDUuMjY4NzEgOS43NzM5NyA1LjI4MDAxIDkuNjA5MzVMNS4zODczMSA4LjMwNjM5QzUuNDAyMzcgOC4xMjc3NiA1LjQzODEzIDcuOTc1NCA1LjQ5NDYxIDcuODQ5MzFDNS41NTQ4NSA3LjcyMzIxIDUuNjYwMjYgNy41OTE4NyA1LjgxMDg2IDcuNDU1MjdMNi43MTQ0NSA2LjYyNTE2QzcuMDA0MzUgNi4zNjI0NyA3LjI2OTc3IDYuMTYxMDcgNy41MTA3MyA2LjAyMDk2QzcuNzUxNjggNS44NzczNiA4LjAyODQxIDUuODA1NTYgOC4zNDA5IDUuODA1NTZDOC43NTg4IDUuODA1NTYgOS4wNzg4MiA1LjkzMzQgOS4zMDA5NSA2LjE4OTA5QzkuNTI2ODUgNi40NDQ3OCA5LjYyNDc0IDYuNzYxNzYgOS41OTQ2MiA3LjE0MDA0TDkuNDc2MDIgOC43MzE5NUM5LjQ1MzQzIDkuMDE1NjYgOS40MTk1NSA5LjI2MjU5IDkuMzc0MzcgOS40NzI3NUM5LjMyOTE5IDkuNjgyOSA5LjI1Mzg5IDkuOTI5ODMgOS4xNDg0NyAxMC4yMTM1TDkuMDkyIDEwLjM2MDZMOS44NjU2OSAxMS4zNzk5QzkuOTIyMTcgMTEuNDUzNCA5Ljk4MDUyIDExLjUzNCAxMC4wNDA4IDExLjYyMTZDMTAuMTAxIDExLjcwOTEgMTAuMTUzNyAxMS43OTY3IDEwLjE5ODkgMTEuODg0M0wxMS40MDc0IDE0LjE2NDRDMTEuNTA1MyAxNC4zNTAxIDExLjUyNDEgMTQuNTExMiAxMS40NjM5IDE0LjY0NzhDMTEuNDAzNyAxNC43ODQ0IDExLjMwMiAxNC44ODI1IDExLjE1ODkgMTQuOTQyQzExLjAxOTYgMTUuMDAxNSAxMC44NzA5IDE1LjAxMDMgMTAuNzEyOCAxNC45NjgzQzEwLjU1ODQgMTQuOTI2MiAxMC40MzYxIDE0LjgxNzcgMTAuMzQ1NyAxNC42NDI1Wk0xMi40MDcgNy45NjQ4OUMxMi41ODQgNy45NjQ4OSAxMi43MjcgOC4wMTA0MiAxMi44MzYyIDguMTAxNDlDMTIuOTQ1NCA4LjE4OTA1IDEzIDguMzA2MzkgMTMgOC40NTM1QzEzIDguNjExMTEgMTIuOTQ1NCA4LjczMzcgMTIuODM2MiA4LjgyMTI3QzEyLjczMDggOC45MDg4MyAxMi41ODc3IDguOTUyNjEgMTIuNDA3IDguOTUyNjFIMTEuMTMwN0MxMC45NTM4IDguOTUyNjEgMTAuODE0NSA4LjkzNjg1IDEwLjcxMjggOC45MDUzM0MxMC42MTEyIDguODcwMyAxMC41MTMzIDguODA3MjYgMTAuNDE5MSA4LjcxNjE5TDEwLjA1MjEgOC4zNzk5NEwxMC4xNDI0IDcuMDQwMjFMMTEuMDM0NyA3Ljk2NDg5SDEyLjQwN1pNOS4wMDE2NCA1LjMxMTY5QzguNzcxOTggNS4zMTE2OSA4LjU2MzAzIDUuMjYwOTEgOC4zNzQ3OCA1LjE1OTMzQzguMTg2NTMgNS4wNTQyNiA4LjAzNTk0IDQuOTE0MTUgNy45MjI5OSA0LjczOTAzQzcuODEzODEgNC41NjM5IDcuNzU5MjEgNC4zNjk1IDcuNzU5MjEgNC4xNTU4NUM3Ljc1OTIxIDMuOTQyMTkgNy44MTM4MSAzLjc0NzggNy45MjI5OSAzLjU3MjY3QzguMDM1OTQgMy4zOTc1NCA4LjE4NjUzIDMuMjU5MTkgOC4zNzQ3OCAzLjE1NzYyQzguNTYzMDMgMy4wNTI1NCA4Ljc3MTk4IDMgOS4wMDE2NCAzQzkuMjMxMyAzIDkuNDQwMjYgMy4wNTI1NCA5LjYyODUgMy4xNTc2MkM5LjgxNjc1IDMuMjU5MTkgOS45NjU0NiAzLjM5NzU0IDEwLjA3NDYgMy41NzI2N0MxMC4xODc2IDMuNzQ3OCAxMC4yNDQxIDMuOTQyMTkgMTAuMjQ0MSA0LjE1NTg1QzEwLjI0NDEgNC4zNjk1IDEwLjE4NzYgNC41NjM5IDEwLjA3NDYgNC43MzkwM0M5Ljk2NTQ2IDQuOTE0MTUgOS44MTY3NSA1LjA1NDI2IDkuNjI4NSA1LjE1OTMzQzkuNDQwMjYgNS4yNjA5MSA5LjIzMTMgNS4zMTE2OSA5LjAwMTY0IDUuMzExNjlaIn0pfSl9ZnVuY3Rpb24gWDMoKXtyZXR1cm4gWigic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIyNiAxIDEyIDE0IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WigicGF0aCIse2Q6Ik0zMy4yNDM3IDQuNTg0NTlDMzMuMDAwOCA0LjU4NDU5IDMyLjc4MTcgNC41MjcyOCAzMi41ODY2IDQuNDEyNjhDMzIuMzkxNSA0LjI5NDEyIDMyLjIzNDIgNC4xMzgwMSAzMi4xMTQ3IDMuOTQ0MzdDMzEuOTk5MiAzLjc0Njc3IDMxLjk0MTQgMy41Mjk0MSAzMS45NDE0IDMuMjkyMjlDMzEuOTQxNCAzLjA1MTIyIDMxLjk5OTIgMi44MzM4NyAzMi4xMTQ3IDIuNjQwMjJDMzIuMjM0MiAyLjQ0NjU3IDMyLjM5MTUgMi4yOTI0NSAzMi41ODY2IDIuMTc3ODRDMzIuNzgxNyAyLjA1OTI4IDMzLjAwMDggMiAzMy4yNDM3IDJDMzMuNDgyNiAyIDMzLjY5OTcgMi4wNTkyOCAzMy44OTQ4IDIuMTc3ODRDMzQuMDkzOSAyLjI5MjQ1IDM0LjI1MTIgMi40NDY1NyAzNC4zNjY3IDIuNjQwMjJDMzQuNDg2MiAyLjgzMzg3IDM0LjU0NTkgMy4wNTEyMiAzNC41NDU5IDMuMjkyMjlDMzQuNTQ1OSAzLjUyOTQxIDM0LjQ4NjIgMy43NDY3NyAzNC4zNjY3IDMuOTQ0MzdDMzQuMjUxMiA0LjEzODAxIDM0LjA5MzkgNC4yOTQxMiAzMy44OTQ4IDQuNDEyNjhDMzMuNjk5NyA0LjUyNzI4IDMzLjQ4MjYgNC41ODQ1OSAzMy4yNDM3IDQuNTg0NTlaTTMxLjIwMDcgOS43NDE5MUMzMS4wNzMzIDkuNjcwNzcgMzAuOTQxOSA5LjU5NTY4IDMwLjgwNjUgOS41MTY2NEMzMC42NzUgOS40Mzc2IDMwLjU1OTYgOS4zNDI3NiAzMC40NiA5LjIzMjFDMzAuMzYwNCA5LjExNzQ5IDMwLjI5MjcgOC45NzcyIDMwLjI1NjkgOC44MTEyMkMzMC4yMjUgOC42NDEyOCAzMC4yNDQ5IDguNDI5ODUgMzAuMzE2NiA4LjE3NjkzTDMwLjgwNjUgNi40ODE1M0MzMC44MzgzIDYuMzY2OTIgMzAuODE4NCA2LjI3OTk4IDMwLjc0NjcgNi4yMjA3QzMwLjY3OSA2LjE1NzQ3IDMwLjU5NzQgNi4xMjk4MSAzMC41MDE4IDYuMTM3NzFMMjkuNjU5NSA2LjE5Njk5TDI5LjQwMjcgNy45MjIwMkMyOS4zNzg4IDguMTA3NzcgMjkuMzE1MSA4LjI0NjA5IDI5LjIxMTUgOC4zMzY5OEMyOS4xMDggOC40Mjc4OCAyOC45NzI2IDguNDY1NDIgMjguODA1MyA4LjQ0OTYxQzI4LjY0MiA4LjQzMzggMjguNTE4NiA4LjM2NjYyIDI4LjQzNDkgOC4yNDgwNkMyOC4zNTEzIDguMTI5NSAyOC4zMjE0IDcuOTc3MzUgMjguMzQ1MyA3Ljc5MTYxTDI4LjYyNjEgNS42ODEyNkMyOC42NSA1LjUxMTMyIDI4LjcxNTcgNS4zNzQ5OCAyOC44MjMyIDUuMjcyMjNDMjguOTMwOCA1LjE2OTQ4IDI5LjA2ODEgNS4xMTIxNyAyOS4yMzU0IDUuMTAwMzJMMzEuMzMyMSA0Ljk1MjEyQzMxLjg4MTcgNC45MTI2IDMyLjMzNTcgNC45Njk5IDMyLjY5NDEgNS4xMjQwM0MzMy4wNTI1IDUuMjc4MTYgMzMuMzY3MSA1LjUzODk5IDMzLjYzNzkgNS45MDY1MkwzNC42NzE0IDcuMzIzM0wzNi4xNzA4IDYuNjY1M0MzNi4zMzggNi41OTAyMSAzNi40ODkzIDYuNTc0NCAzNi42MjQ4IDYuNjE3ODdDMzYuNzYwMiA2LjY1NzM5IDM2Ljg2NTcgNi43NTIyNCAzNi45NDE0IDYuOTAyNDJDMzcuMDEzIDcuMDUyNTkgMzcuMDE5IDcuMTk0ODYgMzYuOTU5MyA3LjMyOTIzQzM2LjkwMzUgNy40NjM2IDM2Ljc5MiA3LjU2ODMyIDM2LjYyNDggNy42NDM0MUwzNC43MzExIDguNDc5MjVDMzQuNjAzNyA4LjUzODUzIDM0LjQ3NDMgOC41NTAzOSAzNC4zNDI4IDguNTE0ODJDMzQuMjE1NCA4LjQ3NTMgMzQuMTEzOCA4LjQwMDIxIDM0LjAzODIgOC4yODk1NkwzMy4zODExIDcuMzM1MTZDMzMuMzEzNCA3LjI0MDMxIDMzLjIyOTggNy4xOTg4MSAzMy4xMzAyIDcuMjEwNjdDMzMuMDMwNiA3LjIyMjUzIDMyLjk2NDkgNy4yODM3OCAzMi45MzMxIDcuMzk0NDRMMzIuNDkxIDguOTI5NzhMMzQuNzMxMSAxMC4zODgxQzM0Ljg0MjYgMTAuNDU5MiAzNC45MjIzIDEwLjU1NiAzNC45NzAxIDEwLjY3ODVDMzUuMDE3OSAxMC44MDEgMzUuMDI5OCAxMC45MjU1IDM1LjAwNTkgMTEuMDUyQzM0Ljk4NiAxMS4xNzQ1IDM0LjkyODIgMTEuMjc1MyAzNC44MzI3IDExLjM1NDNMMzIuNzcxOCAxMy4wOTcxQzMyLjYwODUgMTMuMjM1NCAzMi40NDUyIDEzLjI5ODcgMzIuMjgxOSAxMy4yODY4QzMyLjEyMjYgMTMuMjc1IDMxLjk5MzIgMTMuMjEzNyAzMS44OTM3IDEzLjEwMzFDMzEuNzk4MSAxMi45OTY0IDMxLjc1NDMgMTIuODY1OSAzMS43NjIyIDEyLjcxMThDMzEuNzcwMiAxMi41NTM3IDMxLjg1MzggMTIuNDA3NSAzMi4wMTMxIDEyLjI3MzFMMzMuNDg4NiAxMS4wMTY0TDMxLjIwMDcgOS43NDE5MVpNMjcuMjA0NCAxNC44NjM3QzI3LjA4NDkgMTQuNzU3IDI3LjAxNzIgMTQuNjE4NiAyNy4wMDEzIDE0LjQ0ODdDMjYuOTg5MyAxNC4yNzg4IDI3LjA2MSAxNC4xMTY3IDI3LjIxNjMgMTMuOTYyNkwyOS4yMjM1IDExLjk3NjdMMjkuOTM0MyA5LjQ4MTA4QzMwLjA0MTggOS42MTU0NCAzMC4xNzUzIDkuNzQ1ODYgMzAuMzM0NSA5Ljg3MjMyQzMwLjQ5NzggOS45OTQ4MyAzMC42OTMgMTAuMTE3MyAzMC45MiAxMC4yMzk5TDMxLjExNzEgMTAuMzQ2NkwzMC4zMDQ3IDEyLjQzMzJDMzAuMjUyOSAxMi41NTU3IDMwLjIwOTEgMTIuNjQwNyAzMC4xNzMzIDEyLjY4ODFDMzAuMTQxNCAxMi43MzU1IDMwLjA4NTYgMTIuNzk4OCAzMC4wMDYgMTIuODc3OEwyOC4wNzA2IDE0Ljc4MDdDMjcuOTE5MiAxNC45MjY5IDI3Ljc2MzkgMTUgMjcuNjA0NiAxNUMyNy40NDkzIDE1IDI3LjMxNTkgMTQuOTU0NiAyNy4yMDQ0IDE0Ljg2MzdaIn0pfSl9ZnVuY3Rpb24gWTMoKXtyZXR1cm4gWigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0OSAzIDE2IDEyIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WigicGF0aCIse2Q6Ik01Ny4wMDI4IDExLjk0OUM1Ni44NDggMTEuOTQ5IDU2LjcxNzIgMTEuODk4NyA1Ni42MTAzIDExLjc5OEM1Ni41MDM1IDExLjY5MzkgNTYuNDUwMSAxMS41NzA3IDU2LjQ1MDEgMTEuNDI4NFY5LjAyODYzTDU0LjQyMTYgNy4xMDc3NkM1NC4yMjI3IDYuOTIwMzUgNTQuMDk1NSA2LjY5ODI1IDU0LjA0MDMgNi40NDE0NEM1My45ODUgNi4xODExNiA1NC4wMTA4IDUuOTI3ODIgNTQuMTE3NiA1LjY4MTQyQzU0LjIyODIgNS40Mzg0OSA1NC4zOTc3IDUuMjQ0MTQgNTQuNjI2MSA1LjA5ODM5QzU0Ljg1ODMgNC45NDkxNiA1NS4xMTYyIDQuODc0NTQgNTUuMzk5OSA0Ljg3NDU0SDU4LjExMzdDNTguNDIzMiA0Ljg3NDU0IDU4LjY4NDggNC45NzY5MiA1OC44OTg1IDUuMTgxNjhDNTkuMTE1OSA1LjM4Mjk2IDU5LjIyNDYgNS42MjkzNiA1OS4yMjQ2IDUuOTIwODdWNy43NjM2Nkg2MC44OTkzQzYxLjA1MDQgNy43NjM2NiA2MS4xNzk0IDcuODEzOTkgNjEuMjg2MiA3LjkxNDYzQzYxLjM5MzEgOC4wMTUyNyA2MS40NDY1IDguMTM4NDcgNjEuNDQ2NSA4LjI4NDIzQzYxLjQ0NjUgOC40MjY1MSA2MS4zOTMxIDguNTQ3OTggNjEuMjg2MiA4LjY0ODYyQzYxLjE3OTQgOC43NDkyNiA2MS4wNTA0IDguNzk5NTggNjAuODk5MyA4Ljc5OTU4SDU4LjY3MTlDNTguNTIwOSA4Ljc5OTU4IDU4LjM5MDEgOC43NDkyNiA1OC4yNzk1IDguNjQ4NjJDNTguMTcyNyA4LjU0Nzk4IDU4LjExOTIgOC40MjY1MSA1OC4xMTkyIDguMjg0MjNWNi45ODgwM0M1OC4xMTkyIDYuOTE4NjIgNTguMDk5IDYuODU0NDIgNTguMDU4NCA2Ljc5NTQyQzU4LjAxNzkgNi43MzI5NSA1Ny45NDQyIDYuNzAxNzIgNTcuODM3MyA2LjcwMTcySDU2LjA2MzJDNTUuOTkzMiA2LjcwMTcyIDU1Ljk0NTMgNi43Mjk0OCA1NS45MTk1IDYuNzg1MDFDNTUuODk3NCA2LjgzNzA2IDU1LjkwODQgNi44ODczOSA1NS45NTI2IDYuOTM1OTdMNTcuNDAwNyA4LjQ1NjAxQzU3LjUwMzkgOC41NjM2IDU3LjU1NTUgOC42ODE1OSA1Ny41NTU1IDguODA5OTlWMTEuNDI4NEM1Ny41NTU1IDExLjU3MDcgNTcuNTAwMiAxMS42OTM5IDU3LjM4OTcgMTEuNzk4QzU3LjI4MjggMTEuODk4NyA1Ny4xNTM4IDExLjk0OSA1Ny4wMDI4IDExLjk0OVpNNTMuMDAxMiAxNEM1Mi41ODQ4IDE0IDUyLjE5NDIgMTMuOTI3MSA1MS44Mjk1IDEzLjc4MTRDNTEuNDY4NCAxMy42MzU2IDUxLjE0OTYgMTMuNDMyNiA1MC44NzMzIDEzLjE3MjNDNTAuNjAwNiAxMi45MTIgNTAuMzg2OSAxMi42MTE4IDUwLjIzMjEgMTIuMjcxN0M1MC4wNzc0IDExLjkyODIgNTAgMTEuNTYwMyA1MCAxMS4xNjgxQzUwIDEwLjc3NiA1MC4wNzc0IDEwLjQwOTkgNTAuMjMyMSAxMC4wNjk4QzUwLjM4NjkgOS43MjYxOCA1MC42MDA2IDkuNDI0MjYgNTAuODczMyA5LjE2Mzk4QzUxLjE0OTYgOC45MDM3IDUxLjQ2ODQgOC43MDA2OCA1MS44Mjk1IDguNTU0OTJDNTIuMTk0MiA4LjQwOTE2IDUyLjU4NDggOC4zMzYyOCA1My4wMDEyIDguMzM2MjhDNTMuNDIxMiA4LjMzNjI4IDUzLjgxMTggOC40MDkxNiA1NC4xNzI5IDguNTU0OTJDNTQuNTM3NyA4LjcwMDY4IDU0Ljg1NjQgOC45MDM3IDU1LjEyOTEgOS4xNjM5OEM1NS40MDU0IDkuNDI0MjYgNTUuNjIxIDkuNzI2MTggNTUuNzc1OCAxMC4wNjk4QzU1LjkzMDUgMTAuNDA5OSA1Ni4wMDc5IDEwLjc3NiA1Ni4wMDc5IDExLjE2ODFDNTYuMDA3OSAxMS41NjAzIDU1LjkzMDUgMTEuOTI4MiA1NS43NzU4IDEyLjI3MTdDNTUuNjIxIDEyLjYxMTggNTUuNDA1NCAxMi45MTIgNTUuMTI5MSAxMy4xNzIzQzU0Ljg1NjQgMTMuNDMyNiA1NC41Mzc3IDEzLjYzNTYgNTQuMTcyOSAxMy43ODE0QzUzLjgxMTggMTMuOTI3MSA1My40MjEyIDE0IDUzLjAwMTIgMTRaTTUzLjAwMTIgMTMuMjY2QzUzLjQxMDIgMTMuMjY2IDUzLjc4MjMgMTMuMTcwNiA1NC4xMTc2IDEyLjk3OTdDNTQuNDU2NiAxMi43OTIzIDU0LjcyNTYgMTIuNTQwNyA1NC45MjQ2IDEyLjIyNDlDNTUuMTI3MyAxMS45MDU2IDU1LjIyODYgMTEuNTUzNCA1NS4yMjg2IDExLjE2ODFDNTUuMjI4NiAxMC43ODI5IDU1LjEyNzMgMTAuNDMyNCA1NC45MjQ2IDEwLjExNjZDNTQuNzI1NiA5Ljc5NzMzIDU0LjQ1NjYgOS41NDM5OSA1NC4xMTc2IDkuMzU2NTlDNTMuNzgyMyA5LjE2NTcxIDUzLjQxMDIgOS4wNzAyOCA1My4wMDEyIDkuMDcwMjhDNTIuNTk1OSA5LjA3MDI4IDUyLjIyMzcgOS4xNjU3MSA1MS44ODQ3IDkuMzU2NTlDNTEuNTQ5NCA5LjU0Mzk5IDUxLjI4MDQgOS43OTczMyA1MS4wNzc4IDEwLjExNjZDNTAuODc4OCAxMC40MzI0IDUwLjc3OTMgMTAuNzgyOSA1MC43NzkzIDExLjE2ODFDNTAuNzc5MyAxMS41NTM0IDUwLjg3ODggMTEuOTA1NiA1MS4wNzc4IDEyLjIyNDlDNTEuMjgwNCAxMi41NDA3IDUxLjU0OTQgMTIuNzkyMyA1MS44ODQ3IDEyLjk3OTdDNTIuMjIzNyAxMy4xNzA2IDUyLjU5NTkgMTMuMjY2IDUzLjAwMTIgMTMuMjY2Wk02Mi40ODAxIDkuNjExNjZDNjIuMzYyMiA5LjUxNDQ5IDYyLjMwMTQgOS40MTU1OCA2Mi4yOTc3IDkuMzE0OTRDNjIuMjk3NyA5LjIxMDgzIDYyLjMzMDggOS4xMjQwNyA2Mi4zOTcyIDkuMDU0NjZDNjIuNDY3MiA4Ljk4NTI1IDYyLjU1MzggOC45NDUzNCA2Mi42NTY5IDguOTM0OTNDNjIuNzYzOCA4LjkyMTA1IDYyLjg2ODggOC45NTU3NSA2Mi45NzIgOS4wMzkwNEM2My4yODg5IDkuMzAyNzkgNjMuNTM5NCA5LjYxNjg3IDYzLjcyMzYgOS45ODEyNkM2My45MDc5IDEwLjM0NTcgNjQgMTAuNzQxMyA2NCAxMS4xNjgxQzY0IDExLjU2MDMgNjMuOTIyNiAxMS45MjgyIDYzLjc2NzkgMTIuMjcxN0M2My42MTMxIDEyLjYxMTggNjMuMzk3NiAxMi45MTIgNjMuMTIxMiAxMy4xNzIzQzYyLjg0ODUgMTMuNDMyNiA2Mi41Mjk4IDEzLjYzNTYgNjIuMTY1IDEzLjc4MTRDNjEuODAzOSAxMy45MjcxIDYxLjQxNTIgMTQgNjAuOTk4OCAxNEM2MC41ODI0IDE0IDYwLjE5MTkgMTMuOTI3MSA1OS44MjcxIDEzLjc4MTRDNTkuNDYyMyAxMy42MzU2IDU5LjE0MTcgMTMuNDMyNiA1OC44NjU0IDEzLjE3MjNDNTguNTkyNyAxMi45MTIgNTguMzc5IDEyLjYxMTggNTguMjI0MiAxMi4yNzE3QzU4LjA2OTUgMTEuOTI4MiA1Ny45OTIxIDExLjU2MDMgNTcuOTkyMSAxMS4xNjgxQzU3Ljk5MjEgMTAuOTYzNCA1OC4wMTQyIDEwLjc2NTYgNTguMDU4NCAxMC41NzQ3QzU4LjEwNjMgMTAuMzgwNCA1OC4xNzI3IDEwLjE5MyA1OC4yNTc0IDEwLjAxMjVDNTguMzA5IDkuOTAxNDQgNTguMzgwOCA5LjgzMDMgNTguNDczIDkuNzk5MDZDNTguNTY4OCA5Ljc2NDM2IDU4LjY2MjcgOS43NjQzNiA1OC43NTQ4IDkuNzk5MDZDNTguODUwNiA5LjgzMDMgNTguOTIyNSA5Ljg5Mjc2IDU4Ljk3MDQgOS45ODY0N0M1OS4wMTgzIDEwLjA4MDIgNTkuMDEwOSAxMC4xOTgyIDU4Ljk0ODMgMTAuMzQwNEM1OC44MzA0IDEwLjYwMDcgNTguNzcxNCAxMC44NzY2IDU4Ljc3MTQgMTEuMTY4MUM1OC43NzE0IDExLjU1MzQgNTguODcwOSAxMS45MDU2IDU5LjA2OTkgMTIuMjI0OUM1OS4yNzI1IDEyLjU0MDcgNTkuNTQxNSAxMi43OTIzIDU5Ljg3NjggMTIuOTc5N0M2MC4yMTU4IDEzLjE3MDYgNjAuNTg5OCAxMy4yNjYgNjAuOTk4OCAxMy4yNjZDNjEuNDA3OCAxMy4yNjYgNjEuNzggMTMuMTcwNiA2Mi4xMTUzIDEyLjk3OTdDNjIuNDUwNiAxMi43OTIzIDYyLjcxNzcgMTIuNTQwNyA2Mi45MTY3IDEyLjIyNDlDNjMuMTE5NCAxMS45MDU2IDYzLjIyMDcgMTEuNTUzNCA2My4yMjA3IDExLjE2ODFDNjMuMjIwNyAxMC44NTkzIDYzLjE1MjUgMTAuNTcxMiA2My4wMTYyIDEwLjMwNEM2Mi44ODM1IDEwLjAzMzMgNjIuNzA0OCA5LjgwMjUzIDYyLjQ4MDEgOS42MTE2NlpNNjAuOTk4OCA2LjI3NDg2QzYwLjc3NCA2LjI3NDg2IDYwLjU2OTUgNi4yMjQ1NCA2MC4zODUzIDYuMTIzODlDNjAuMjAxMSA2LjAxOTc4IDYwLjA1MzcgNS44ODI3IDU5Ljk0MzIgNS43MTI2NUM1OS44MzYzIDUuNTM5MTMgNTkuNzgyOSA1LjM0NjUyIDU5Ljc4MjkgNS4xMzQ4M0M1OS43ODI5IDQuOTI2NiA1OS44MzYzIDQuNzM3NDYgNTkuOTQzMiA0LjU2NzQxQzYwLjA1MzcgNC4zOTM4OSA2MC4yMDExIDQuMjU2ODEgNjAuMzg1MyA0LjE1NjE3QzYwLjU2OTUgNC4wNTIwNiA2MC43NzQgNCA2MC45OTg4IDRDNjEuMjE5OSA0IDYxLjQyMDcgNC4wNTIwNiA2MS42MDEzIDQuMTU2MTdDNjEuNzgxOCA0LjI1NjgxIDYxLjkyNTUgNC4zOTM4OSA2Mi4wMzI0IDQuNTY3NDFDNjIuMTQyOSA0LjczNzQ2IDYyLjE5ODIgNC45MjY2IDYyLjE5ODIgNS4xMzQ4M0M2Mi4xOTgyIDUuMzQ2NTIgNjIuMTQyOSA1LjUzOTEzIDYyLjAzMjQgNS43MTI2NUM2MS45MjU1IDUuODgyNyA2MS43ODE4IDYuMDE5NzggNjEuNjAxMyA2LjEyMzg5QzYxLjQyMDcgNi4yMjQ1NCA2MS4yMTk5IDYuMjc0ODYgNjAuOTk4OCA2LjI3NDg2WiJ9KX0pfWZ1bmN0aW9uIHEzKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNzAgNSAxOCA5IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WigicGF0aCIse2Q6Ik04NS41NzIgMTIuMTAzOEM4Ni4wNiAxMi4xMDM4IDg2LjQyMDcgMTEuOTg5MiA4Ni42NTQyIDExLjc2MDFDODYuODg0NyAxMS41MjgxIDg3IDExLjE2NDEgODcgMTAuNjY4MVYxMC4xMTEyQzg3IDkuNzY5MDEgODYuOTIwNyA5LjQ2MzAyIDg2Ljc2MiA5LjE5MzI5Qzg2LjYwMzMgOC45MjA2NSA4Ni4zNzU4IDguNjk3MzMgODYuMDc5NCA4LjUyMzMxQzg1Ljc4MDEgOC4zNDkyOSA4NS40MjIzIDguMjM3NjIgODUuMDA2MiA4LjE4ODMyTDgzLjAxNjggNy45NTMzOUw4MS4xOTgxIDYuODQ4MzVDODAuOTIyNyA2LjY4MDEzIDgwLjY2MDggNi41NDIzNyA4MC40MTIzIDYuNDM1MDVDODAuMTYwOCA2LjMyNDg0IDc5Ljg5NzQgNi4yMzc4MyA3OS42MjE5IDYuMTc0MDJDNzkuMzQ2NSA2LjExMDIxIDc5LjAzODIgNi4wNjUyNiA3OC42OTY5IDYuMDM5MTVDNzguMzUyNiA2LjAxMzA1IDc3Ljk1MTQgNiA3Ny40OTM0IDZINzYuODEwOEM3Ni4zODg3IDYgNzUuOTk1IDYuMDQ5MzEgNzUuNjI5OCA2LjE0NzkyQzc1LjI2MTYgNi4yNDM2MyA3NC45MTg4IDYuMzcxMjUgNzQuNjAxNSA2LjUzMDc2Qzc0LjI4MTEgNi42OTAyOCA3My45ODYyIDYuODY1NzYgNzMuNzE2OCA3LjA1NzE4QzczLjQ0NDQgNy4yNDg2IDczLjE5NTkgNy40MzcxMiA3Mi45NzE0IDcuNjIyNzVMNzIuMjU3NCA3Ljg1MzMzQzcxLjgzMjMgNy45ODY3NCA3MS41MTY0IDguMTgzOTcgNzEuMzA5OSA4LjQ0NUM3MS4xMDMzIDguNzAzMTMgNzEgOS4wMzM3NyA3MSA5LjQzNjkyVjEwLjY0MkM3MSAxMS4xNDY3IDcxLjExNTMgMTEuNTE2NSA3MS4zNDU4IDExLjc1MTRDNzEuNTc2MyAxMS45ODYzIDcxLjkzNyAxMi4xMDM4IDcyLjQyOCAxMi4xMDM4SDcyLjcxNTRDNzIuNzAwNCAxMi4wMzcxIDcyLjY4ODUgMTEuOTcwNCA3Mi42Nzk1IDExLjkwMzdDNzIuNjcwNSAxMS44MzQxIDcyLjY2NiAxMS43NjQ1IDcyLjY2NiAxMS42OTQ4QzcyLjY2NiAxMS4zNTU1IDcyLjc0OTggMTEuMDQ5NSA3Mi45MTc1IDEwLjc3NjlDNzMuMDg1MSAxMC41MDQyIDczLjMxMTIgMTAuMjg4MiA3My41OTU2IDEwLjEyODdDNzMuODc3IDkuOTY2MjMgNzQuMTkyOCA5Ljg4NTAyIDc0LjU0MzEgOS44ODUwMkM3NC44OTA0IDkuODg1MDIgNzUuMjA2MiA5Ljk2NjIzIDc1LjQ5MDYgMTAuMTI4N0M3NS43NzIgMTAuMjg4MiA3NS45OTY1IDEwLjUwNDIgNzYuMTY0MiAxMC43NzY5Qzc2LjMzMTggMTEuMDQ5NSA3Ni40MTU3IDExLjM1NTUgNzYuNDE1NyAxMS42OTQ4Qzc2LjQxNTcgMTEuNzY0NSA3Ni40MTEyIDExLjgzNDEgNzYuNDAyMiAxMS45MDM3Qzc2LjM5MzIgMTEuOTcwNCA3Ni4zODI3IDEyLjAzNzEgNzYuMzcwOCAxMi4xMDM4SDgxLjYzODJDODEuNjIwMyAxMi4wMzcxIDgxLjYwODMgMTEuOTcwNCA4MS42MDIzIDExLjkwMzdDODEuNTkzMyAxMS44MzQxIDgxLjU4ODggMTEuNzY0NSA4MS41ODg4IDExLjY5NDhDODEuNTg4OCAxMS4zNTU1IDgxLjY3MjcgMTEuMDQ5NSA4MS44NDAzIDEwLjc3NjlDODIuMDA1IDEwLjUwNDIgODIuMjI5NSAxMC4yODgyIDgyLjUxMzkgMTAuMTI4N0M4Mi43OTUzIDkuOTY2MjMgODMuMTExMSA5Ljg4NTAyIDgzLjQ2MTQgOS44ODUwMkM4My44MTE3IDkuODg1MDIgODQuMTI5IDkuOTY2MjMgODQuNDEzNCAxMC4xMjg3Qzg0LjY5NDggMTAuMjg4MiA4NC45MTk0IDEwLjUwNDIgODUuMDg3IDEwLjc3NjlDODUuMjUxNyAxMS4wNDk1IDg1LjMzNCAxMS4zNTU1IDg1LjMzNCAxMS42OTQ4Qzg1LjMzNCAxMS43NjQ1IDg1LjMzMSAxMS44MzQxIDg1LjMyNSAxMS45MDM3Qzg1LjMxNiAxMS45NzA0IDg1LjMwNDEgMTIuMDM3MSA4NS4yODkxIDEyLjEwMzhIODUuNTcyWk04My40NjE0IDEzQzgzLjcxMjkgMTMgODMuOTQwNCAxMi45NDIgODQuMTQ0IDEyLjgyNkM4NC4zNDc2IDEyLjcxIDg0LjUwOTIgMTIuNTUzMyA4NC42MjkgMTIuMzU2MUM4NC43NDg3IDEyLjE1ODkgODQuODA4NiAxMS45Mzg1IDg0LjgwODYgMTEuNjk0OEM4NC44MDg2IDExLjQ1MTIgODQuNzQ4NyAxMS4yMzA4IDg0LjYyOSAxMS4wMzM2Qzg0LjUwOTIgMTAuODM2MyA4NC4zNDc2IDEwLjY3OTcgODQuMTQ0IDEwLjU2MzdDODMuOTQwNCAxMC40NDc3IDgzLjcxMjkgMTAuMzg5NyA4My40NjE0IDEwLjM4OTdDODMuMjA2OSAxMC4zODk3IDgyLjk3NzkgMTAuNDQ3NyA4Mi43NzQzIDEwLjU2MzdDODIuNTcwOCAxMC42Nzk3IDgyLjQwOTEgMTAuODM2MyA4Mi4yODk0IDExLjAzMzZDODIuMTY5NiAxMS4yMzA4IDgyLjEwOTcgMTEuNDUxMiA4Mi4xMDk3IDExLjY5NDhDODIuMTA5NyAxMS45Mzg1IDgyLjE2OTYgMTIuMTU4OSA4Mi4yODk0IDEyLjM1NjFDODIuNDA5MSAxMi41NTMzIDgyLjU3MDggMTIuNzEgODIuNzc0MyAxMi44MjZDODIuOTc3OSAxMi45NDIgODMuMjA2OSAxMyA4My40NjE0IDEzWk03NC41NDMxIDEzQzc0Ljc5NDYgMTMgNzUuMDIyMSAxMi45NDIgNzUuMjI1NyAxMi44MjZDNzUuNDI5MiAxMi43MSA3NS41OTA5IDEyLjU1MzMgNzUuNzEwNiAxMi4zNTYxQzc1LjgzMDQgMTIuMTU4OSA3NS44OTAzIDExLjkzODUgNzUuODkwMyAxMS42OTQ4Qzc1Ljg5MDMgMTEuNDUxMiA3NS44MzA0IDExLjIzMDggNzUuNzEwNiAxMS4wMzM2Qzc1LjU5MDkgMTAuODM2MyA3NS40MjkyIDEwLjY3OTcgNzUuMjI1NyAxMC41NjM3Qzc1LjAyMjEgMTAuNDQ3NyA3NC43OTQ2IDEwLjM4OTcgNzQuNTQzMSAxMC4zODk3Qzc0LjI4ODYgMTAuMzg5NyA3NC4wNTk2IDEwLjQ0NzcgNzMuODU2IDEwLjU2MzdDNzMuNjUyNCAxMC42Nzk3IDczLjQ5MDggMTAuODM2MyA3My4zNzEgMTEuMDMzNkM3My4yNTEzIDExLjIzMDggNzMuMTkxNCAxMS40NTEyIDczLjE5MTQgMTEuNjk0OEM3My4xOTE0IDExLjkzODUgNzMuMjUxMyAxMi4xNTg5IDczLjM3MSAxMi4zNTYxQzczLjQ5MDggMTIuNTUzMyA3My42NTI0IDEyLjcxIDczLjg1NiAxMi44MjZDNzQuMDU5NiAxMi45NDIgNzQuMjg4NiAxMyA3NC41NDMxIDEzWiJ9KX0pfWZ1bmN0aW9uIGowKHtzaXplOiQ9MTgsc3Ryb2tlV2lkdGg6UT0yfSl7cmV0dXJuIFooXzIse3NpemU6JCxzdHJva2VXaWR0aDpRfSl9dmFyIEo5PSJBY2Nlc3NpYmlsaXR5IHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiI7ZnVuY3Rpb24gWTUoJCl7cmV0dXJuICQ/LmVycm9ycz8uaW5jbHVkZXMoSjkpPz8hMX1mdW5jdGlvbiBxNSgkLFEpe2lmKCQ9PT1RKXJldHVybiEwO2lmKCQuaWQhPT1RLmlkfHwkLnBhdGghPT1RLnBhdGh8fCQubGFiZWwhPT1RLmxhYmVsfHwkLnZhbHVlIT09US52YWx1ZXx8JC5yb2xlIT09US5yb2xlfHwkLnR5cGUhPT1RLnR5cGV8fCQuZW5hYmxlZCE9PVEuZW5hYmxlZClyZXR1cm4hMTtsZXQgSj0kLmZyYW1lLEs9US5mcmFtZTtyZXR1cm4gSj09PUt8fEoueD09PUsueCYmSi55PT09Sy55JiZKLndpZHRoPT09Sy53aWR0aCYmSi5oZWlnaHQ9PT1LLmhlaWdodH1mdW5jdGlvbiBHNSgkLFEpe2xldCBKPSQubGFiZWx8fCQucm9sZXx8YGVsZW1lbnQgJHtRKzF9YCxLPSQucm9sZXx8JC50eXBlO3JldHVybntpZDokLmlkLHBhdGg6JC5wYXRoLGxhYmVsOkosdmFsdWU6JC52YWx1ZSxyb2xlOkssdHlwZTokLnR5cGUsZW5hYmxlZDokLmVuYWJsZWQsZnJhbWU6JC5mcmFtZX19ZnVuY3Rpb24gWjkoJCxRKXtsZXQgSj1NYXRoLm1heCgwLCQueCksSz1NYXRoLm1heCgwLCQueSksWD1NYXRoLm1pbihRLndpZHRoLCQueCskLndpZHRoKSxZPU1hdGgubWluKFEuaGVpZ2h0LCQueSskLmhlaWdodCkscT1NYXRoLm1heCgwLFgtSiksRz1NYXRoLm1heCgwLFktSyk7cmV0dXJuIHE+MCYmRz4wP3t4OkoseTpLLHdpZHRoOnEsaGVpZ2h0Okd9Om51bGx9ZnVuY3Rpb24gdjAoJCl7cmV0dXJuICQuaWR9ZnVuY3Rpb24gRzMoJCl7cmV0dXJuYCR7JC54fSwkeyQueX0gJHskLndpZHRofXgkeyQuaGVpZ2h0fWB9ZnVuY3Rpb24gSzkoJCl7cmV0dXJuW2BBWCBsYWJlbDogJHskLmxhYmVsfHwiVW5sYWJlbGVkIn1gLCQucm9sZT9gcm9sZTogJHskLnJvbGV9YDoiIiwkLnR5cGU/YHR5cGU6ICR7JC50eXBlfWA6IiIsJC52YWx1ZT9gdmFsdWU6ICR7JC52YWx1ZX1gOiIiLCQuaWQ/YGlkOiAkeyQuaWR9YDoiIixgcGF0aDogJHskLnBhdGh9YCxgZnJhbWU6ICR7RzMoJC5mcmFtZSl9YF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIjsgIil9ZnVuY3Rpb24gSTIoJCl7cmV0dXJuICQmJnR5cGVvZiAkLmRldmljZT09PSJzdHJpbmciJiZ0eXBlb2YgJC51cmw9PT0ic3RyaW5nIj8kOm51bGx9ZnVuY3Rpb24gbDEoJCl7bGV0IEo9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYmFzZVBhdGg/Pyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC8rJC8sIiIpfHwiLyIpO3JldHVybiBKPT09Ii8iP2AvJHskfWA6YCR7Sn0vJHskfWB9dmFyIHU3PTUwMDAsbDc9MjAwMCxiMj1udWxsLFYzPW51bGwsZDc9MSxjNz0xLHMwPW5ldyBNYXAsYTA9bmV3IE1hcDtmdW5jdGlvbiByNygpe2xldCAkPW5ldyBVUkwobDEoImV4ZWMtd3MiKSx3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuICQucHJvdG9jb2w9JC5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IiwkLnRvU3RyaW5nKCl9ZnVuY3Rpb24gbzcoJCl7Zm9yKGxldCBRIG9mIHMwLnZhbHVlcygpKVEucmVqZWN0KCQpO3MwLmNsZWFyKCl9ZnVuY3Rpb24gWDkoKXtyZXR1cm4gYjI/Pz1uZXcgUHJvbWlzZSgoJCxRKT0+e2xldCBKPSExLEs7dHJ5e0s9bmV3IFdlYlNvY2tldChyNygpKX1jYXRjaChxKXtiMj1udWxsLFEocSk7cmV0dXJufWxldCBYPXNldFRpbWVvdXQoKCk9PntpZighSilKPSEwLGIyPW51bGwsUShFcnJvcigiY29udHJvbCBzb2NrZXQgY29ubmVjdCB0aW1lb3V0IikpLEsuY2xvc2UoKX0sdTcpO0sub25vcGVuPSgpPT57Sy5zZW5kKEpTT04uc3RyaW5naWZ5KHt0b2tlbjp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4/PyIifSkpfSxLLm9ubWVzc2FnZT0ocSk9PntsZXQgRzt0cnl7Rz1KU09OLnBhcnNlKFN0cmluZyhxLmRhdGEpKX1jYXRjaHtyZXR1cm59aWYoRy5yZWFkeSl7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoWCksVjM9SywkKEspO3JldHVybn1pZih0eXBlb2YgRy5zdWI9PT0ibnVtYmVyIil7bGV0IEI9YTAuZ2V0KEcuc3ViKTtpZighQilyZXR1cm47aWYoRy5lbmQpYTAuZGVsZXRlKEcuc3ViKSxCLm9uRW5kKCk7ZWxzZSBpZih0eXBlb2YgRy5kYXRhPT09InN0cmluZyIpQi5vbkRhdGEoRy5kYXRhKTtyZXR1cm59aWYodHlwZW9mIEcuaWQhPT0ibnVtYmVyIilyZXR1cm47bGV0IE49czAuZ2V0KEcuaWQpO2lmKCFOKXJldHVybjtzMC5kZWxldGUoRy5pZCksTi5yZXNvbHZlKEcpfTtsZXQgWT0oKT0+e2IyPW51bGwsVjM9bnVsbDtsZXQgcT1FcnJvcigiY29udHJvbCBzb2NrZXQgY2xvc2VkIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpO283KHEpO2xldCBHPVsuLi5hMC52YWx1ZXMoKV07YTAuY2xlYXIoKTtmb3IobGV0IE4gb2YgRylOLm9uRW5kKCk7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoWCksUShxKX07Sy5vbmVycm9yPVksSy5vbmNsb3NlPVl9KSxiMn1hc3luYyBmdW5jdGlvbiBZOSgkLFEpe2xldCBKPWF3YWl0IFg5KCk7aWYoSi5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pdGhyb3cgRXJyb3IoImNvbnRyb2wgc29ja2V0IG5vdCBvcGVuIik7cmV0dXJuIG5ldyBQcm9taXNlKChLLFgpPT57bGV0IFk9ZDcrKyxxPSgpPT57czAuZGVsZXRlKFkpLFgoUT8ucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX07aWYoUSl7aWYoUS5hYm9ydGVkKXtxKCk7cmV0dXJufVEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX1zMC5zZXQoWSx7cmVzb2x2ZTooRyk9PntRPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksSyhHKX0scmVqZWN0OihHKT0+e1E/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxYKEcpfX0pLEouc2VuZChKU09OLnN0cmluZ2lmeSh7aWQ6WSwuLi4kfSkpfSl9YXN5bmMgZnVuY3Rpb24gVzEoJCxRKXtsZXQgSj1hd2FpdCBZOSh7Y29tbWFuZDokfSxRPy5zaWduYWwpO3JldHVybntzdGRvdXQ6Si5zdGRvdXQ/PyIiLHN0ZGVycjpKLnN0ZGVycj8/IiIsZXhpdENvZGU6Si5leGl0Q29kZT8/MX19YXN5bmMgZnVuY3Rpb24gQjMoJCxRKXtsZXQgSj1hd2FpdCBZOSh7dWk6JH0sUT8uc2lnbmFsKTtpZihKLmVycm9yKXRocm93IEVycm9yKEouZXJyb3IpO3JldHVybiBKLnN0YXR1cz8/bnVsbH1mdW5jdGlvbiB5MigkKXtsZXQgUT17b25tZXNzYWdlOm51bGwsb25lcnJvcjpudWxsLGNsb3NlOigpPT57fX0sSj0hMSxLPW51bGwsWD1udWxsLFk9IiIscT0oQik9PntZKz1CLnJlcGxhY2UoL1xyXG4vZyxgCmApO2xldCBVO3doaWxlKChVPVkuaW5kZXhPZihgCgpgKSkhPT0tMSl7bGV0IFY9WS5zbGljZSgwLFUpO1k9WS5zbGljZShVKzIpO2xldCB6PVYuc3BsaXQoYApgKS5maWx0ZXIoKEwpPT5MLnN0YXJ0c1dpdGgoImRhdGE6IikpLm1hcCgoTCk9Pkwuc2xpY2UoNSkucmVwbGFjZSgvXiAvLCIiKSkuam9pbihgCmApO2lmKHopUS5vbm1lc3NhZ2U/Lih7ZGF0YTp6fSl9fSxHPSgpPT57aWYoSnx8WClyZXR1cm47US5vbmVycm9yPy4oKSxYPXNldFRpbWVvdXQoKCk9PntYPW51bGwsTigpfSxsNyl9LE49YXN5bmMoKT0+e2lmKEopcmV0dXJuO3RyeXtsZXQgQj1hd2FpdCBYOSgpO2lmKEopcmV0dXJuO1k9IiIsSz1jNysrLGEwLnNldChLLHtvbkRhdGE6cSxvbkVuZDpHfSksQi5zZW5kKEpTT04uc3RyaW5naWZ5KHtzdWI6SyxwYXRoOiR9KSl9Y2F0Y2h7RygpfX07cmV0dXJuIE4oKSxRLmNsb3NlPSgpPT57aWYoSj0hMCxYKWNsZWFyVGltZW91dChYKTtpZihLIT09bnVsbCl7YTAuZGVsZXRlKEspO3RyeXtWMz8uc2VuZChKU09OLnN0cmluZ2lmeSh7dW5zdWI6S30pKX1jYXRjaHt9Sz1udWxsfX0sUX1mdW5jdGlvbiBMMSgkKXtyZXR1cm5gJyR7JC5yZXBsYWNlKC8nL2csIidcXCcnIil9J2B9ZnVuY3Rpb24gcTkoJCl7bGV0W1EsSl09TShudWxsKSxbSyxYXT1NKCJBWCBvZmYiKTtyZXR1cm4geSgoKT0+e2lmKCEkKXtKKG51bGwpLFgoIkFYIG9mZiIpO3JldHVybn1KKG51bGwpLFgoIkFYIHdhaXRpbmciKTtsZXQgWT15MigkKTtyZXR1cm4gWS5vbm1lc3NhZ2U9KHEpPT57dHJ5e2xldCBHPUpTT04ucGFyc2UocS5kYXRhKTtKKEcpLFgoWTUoRyk/IkFYIHVuYXZhaWxhYmxlIjpgJHtHLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtYKCJBWCBwYXJzZSBlcnJvciIpfX0sWS5vbmVycm9yPSgpPT57WCgiQVggcmVjb25uZWN0aW5nIil9LCgpPT5ZLmNsb3NlKCl9LFskXSkse3NuYXBzaG90OlEsc3RhdHVzOkt9fXZhciBOMz1xMCh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxVMz1xMChudWxsKTtmdW5jdGlvbiB0MCgpe3JldHVybiBHMChOMyl9ZnVuY3Rpb24gVjUoKXtsZXQgJD1HMChVMyk7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9dmFyIEc5PVMwKGZ1bmN0aW9uKHtlbGVtZW50OlEsaW5kZXg6SixzY3JlZW46SyxoaWdobGlnaHRlZDpYLHNlbGVjdGVkOlksb25IaWdobGlnaHQ6cSxvblNlbGVjdDpHfSl7bGV0IE49djAoUSksQj1HNShRLEopLFU9WjkoUS5mcmFtZSxLKTtpZighVSlyZXR1cm4gbnVsbDtsZXQgVj1LOShCKTtyZXR1cm4gWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOk4sImRhdGEtYXgtaWQiOkIuaWQsImRhdGEtYXgtcGF0aCI6Qi5wYXRoLCJkYXRhLWF4LWxhYmVsIjpCLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpCLnZhbHVlLCJkYXRhLWF4LXJvbGUiOkIucm9sZSwiZGF0YS1heC10eXBlIjpCLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKEIuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOkczKEIuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoWSksImFyaWEtbGFiZWwiOlEubGFiZWx8fFYsdGl0bGU6VixvbkNsaWNrOigpPT5HKE4pLG9uTW91c2VFbnRlcjooKT0+cShOKSxvbk1vdXNlTGVhdmU6KCk9PnEobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtVLngvSy53aWR0aCoxMDB9JWAsdG9wOmAke1UueS9LLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7VS53aWR0aC9LLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7VS5oZWlnaHQvSy5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOlk/IiM2MGE1ZmEiOlg/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOlk/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6WD8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsUSk9PiQuaW5kZXg9PT1RLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09US5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PVEuc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1RLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09US5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1RLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09US5zY3JlZW4uaGVpZ2h0JiZxNSgkLmVsZW1lbnQsUS5lbGVtZW50KSk7ZnVuY3Rpb24gVjkoKXtsZXR7c25hcHNob3Q6JH09dDAoKSx7aGlnaGxpZ2h0ZWRLZXk6USxzZWxlY3RlZEtleTpKLHNldEhpZ2hsaWdodGVkS2V5Okssc2V0U2VsZWN0ZWRLZXk6WH09VjUoKTtpZighJD8uc2NyZWVuLndpZHRofHwhJD8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQuZWxlbWVudHMubWFwKChZLHEpPT57bGV0IEc9djAoWSk7cmV0dXJuIFooRzkse2VsZW1lbnQ6WSxpbmRleDpxLHNjcmVlbjokLnNjcmVlbixoaWdobGlnaHRlZDpHPT09USxzZWxlY3RlZDpHPT09SixvbkhpZ2hsaWdodDpLLG9uU2VsZWN0Olh9LEcpfSl9KX1mdW5jdGlvbiBCOSh7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpRfSl7bGV0e3NuYXBzaG90Okosc3RhdHVzOkt9PXE5KCQpLFtYLFldPU0obnVsbCksW3EsR109TShudWxsKTt5KCgpPT57aWYoISQpWShudWxsKSxHKG51bGwpfSxbJF0pO2xldCBOPUQxKCgpPT4oe3NuYXBzaG90Okosc3RhdHVzOkt9KSxbSixLXSksQj1EMSgoKT0+KHtoaWdobGlnaHRlZEtleTpYLHNlbGVjdGVkS2V5OnEsc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpHfSksW1gscV0pO3JldHVybiBaKE4zLHt2YWx1ZTpOLGNoaWxkcmVuOlooVTMse3ZhbHVlOkIsY2hpbGRyZW46UX0pfSl9ZnVuY3Rpb24gTjkoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOlEsb25Ub2dnbGVPdmVybGF5Okp9KXtsZXR7c3RhdHVzOkt9PXQwKCksW1gsWV09TSghMSkscT0kJiZRO3JldHVybiBaKG0xLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6SyxvbkNsaWNrOkosb25Nb3VzZUVudGVyOigpPT5ZKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlkoITEpLHN0eWxlOnE/e2JhY2tncm91bmQ6WD8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOlooSTAse3NpemU6MTksc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gQjUoe2NsYXNzTmFtZTokPSIifSl7cmV0dXJuIFooImEiLHtocmVmOiJodHRwczovL2dpdGh1Yi5jb20vRXZhbkJhY29uL3NlcnZlLXNpbSIsdGFyZ2V0OiJfYmxhbmsiLHJlbDoibm9yZWZlcnJlciIsY2xhc3NOYW1lOmBpbmxpbmUtZmxleCBoLVszMHB4XSBtaW4tdy0wIGl0ZW1zLWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHB4LTEuNSBmb250LW1vbm8gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzY1IG5vLXVuZGVybGluZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlLzg1IGZvY3VzLXZpc2libGU6b3V0bGluZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXdoaXRlLzYwICR7JH1gLnRyaW0oKSwiYXJpYS1sYWJlbCI6Ik9wZW4gc2VydmUtc2ltIix0aXRsZToiT3BlbiBzZXJ2ZS1zaW0iLGNoaWxkcmVuOiJzZXJ2ZS1zaW0ifSl9ZnVuY3Rpb24gVTkoe29wZW46JCxvbkNsaWNrOlF9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBsZWZ0LTMgei0zMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBwLTEgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSAkeyQ/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbWigiYnV0dG9uIix7b25DbGljazpRLGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpaKGswLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLFooQjUse30pXX0pfWZ1bmN0aW9uIEw5KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQiI7bGV0IFE9JC8xMDczNzQxODI0O2lmKFE+PTEpcmV0dXJuYCR7US50b0ZpeGVkKFE+PTEwPzA6MSl9IEdCYDtyZXR1cm5gJHsoJC8xMDQ4NTc2KS50b0ZpeGVkKDApfSBNQmB9ZnVuY3Rpb24gTjUoJCl7bGV0IFE9JC5tYXRjaCgvXihbYS16QS1aXSspLSguKykkLyk7aWYoIVEpcmV0dXJue29zOiQsdmVyc2lvbjoiIn07cmV0dXJue29zOlFbMV0sdmVyc2lvbjpRWzJdLnJlcGxhY2UoLy0vZywiLiIpfX1mdW5jdGlvbiB6OSgkKXtyZXR1cm4gTjUoJCkudmVyc2lvbnx8JH1mdW5jdGlvbiBVNSgkKXtsZXR7b3M6USx2ZXJzaW9uOkp9PU41KCQpO3JldHVybiBKP2Ake1F9ICR7Sn1gOlF9ZnVuY3Rpb24gejUoe2Nocm9tZTokLHNjcmVlbjpRLGludGVyYWN0aXZlOko9ITEsb25CdXR0b246SyxvbkNyb3duV2hlZWw6WH0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAiLGNoaWxkcmVuOlskLmJ1dHRvbnMubWFwKChZKT0+WihuNyx7Y2hyb21lOiQsYnV0dG9uOlksaW50ZXJhY3RpdmU6SixvbkJ1dHRvbjpLLG9uV2hlZWw6SiYmWS5uYW1lPT09ImRpZ2l0YWwtY3Jvd24iP1g6dm9pZCAwfSxgYnV0dG9uLSR7WS5uYW1lfWApKSwkLmNvbXBvc2l0ZUltYWdlP1ooSDkse2Nocm9tZTokLGltYWdlOiQuY29tcG9zaXRlSW1hZ2UscmVjdDokLmJvZHksekluZGV4OjF9KTokLnNsaWNlJiYkLmNvcm5lcj9aKGE3LHtjaHJvbWU6JH0pOm51bGwsWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBvdmVyZmxvdy1oaWRkZW4gYmctYmxhY2siLHN0eWxlOnsuLi5MMygkLCQuc2NyZWVuLDIpLGJvcmRlclJhZGl1czppNygkKX0sY2hpbGRyZW46UX0pXX0pfWZ1bmN0aW9uIGk3KCQpe3JldHVybmAkeyQuc2NyZWVuUmFkaXVzLyQuc2NyZWVuLndpZHRoKjEwMH0lIC8gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi5oZWlnaHQqMTAwfSVgfWZ1bmN0aW9uIG43KHtjaHJvbWU6JCxidXR0b246USxpbnRlcmFjdGl2ZTpKLG9uQnV0dG9uOkssb25XaGVlbDpYfSl7bGV0W1kscV09TSghMSksW0csTl09TSghMSksQj1JKG51bGwpLFU9SShudWxsKSxWPUkoWCk7Vi5jdXJyZW50PVgseSgoKT0+e2xldCBiPVUuY3VycmVudDtpZighYnx8IVgpcmV0dXJuO2xldCBqPShaMSk9PntaMS5wcmV2ZW50RGVmYXVsdCgpLFoxLnN0b3BQcm9wYWdhdGlvbigpLFYuY3VycmVudD8uKFoxLmRlbHRhWSxaMS5kZWx0YU1vZGUpfTtyZXR1cm4gYi5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsaix7cGFzc2l2ZTohMX0pLCgpPT5iLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixqKX0sWyEhWF0pO2xldCB6PUomJlEudXNhZ2VQYWdlIT1udWxsJiZRLnVzYWdlIT1udWxsLEw9VCgoKT0+e2lmKEIuY3VycmVudD09PW51bGwpcmV0dXJuO0IuY3VycmVudD1udWxsLE4oITEpLEs/Lih7cGhhc2U6InVwIixidXR0b246UX0pfSxbUSxLXSksQT1UKChiKT0+e2lmKGIuYnV0dG9uIT09MCYmYi5wb2ludGVyVHlwZT09PSJtb3VzZSIpcmV0dXJuO2IucHJldmVudERlZmF1bHQoKSxiLnN0b3BQcm9wYWdhdGlvbigpLEIuY3VycmVudD1iLnBvaW50ZXJJZDt0cnl7Yi5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGIucG9pbnRlcklkKX1jYXRjaHt9TighMCksSz8uKHtwaGFzZToiZG93biIsYnV0dG9uOlF9KX0sW1EsS10pLEM9US5vblRvcD81OjAsSD16JiYoWXx8RyksTz0oSD9RLmhvdmVyLng6MCkqMTAwLFc9KEg/US5ob3Zlci55OjApKjEwMCx4PUcmJlEuaW1hZ2VEb3duP1EuaW1hZ2VEb3duOlEuaW1hZ2UsRT16P3tvblBvaW50ZXJEb3duOkEsb25Qb2ludGVyVXA6TCxvblBvaW50ZXJDYW5jZWw6TCxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PntxKCExKSxMKCl9fTp7fTtyZXR1cm4gWigiZGl2Iix7cmVmOlUscm9sZTp6PyJidXR0b24iOnZvaWQgMCwiYXJpYS1sYWJlbCI6ej9DOShRLm5hbWUpOnZvaWQgMCwiYXJpYS1oaWRkZW4iOno/dm9pZCAwOiEwLHRpdGxlOno/QzkoUS5uYW1lKTp2b2lkIDAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLkwzKCQsUS5mcmFtZSxDKSx0cmFuc2Zvcm06T3x8Vz9gdHJhbnNsYXRlKCR7T30lLCAke1d9JSlgOnZvaWQgMCx0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsY3Vyc29yOno/InBvaW50ZXIiOnZvaWQgMCxwb2ludGVyRXZlbnRzOno/ImF1dG8iOiJub25lIix0b3VjaEFjdGlvbjoibm9uZSJ9LC4uLkUsY2hpbGRyZW46eCYmWigiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpGOSgkLmlkZW50aWZpZXIseCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBzZWxlY3Qtbm9uZSIsc3R5bGU6e29iamVjdEZpdDoiZmlsbCIsZmlsdGVyOkcmJiFRLmltYWdlRG93bj8iYnJpZ2h0bmVzcygxLjQpIjp2b2lkIDAsdHJhbnNpdGlvbjoiZmlsdGVyIDAuMTJzIGVhc2UiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX0pfWZ1bmN0aW9uIEM5KCQpe3JldHVybiAkLnNwbGl0KCItIikubWFwKChRKT0+US5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStRLnNsaWNlKDEpKS5qb2luKCIgIil9ZnVuY3Rpb24gYTcoe2Nocm9tZTokfSl7aWYoISQuc2xpY2V8fCEkLmNvcm5lcilyZXR1cm4gbnVsbDtsZXR7Ym9keTpRLGNvcm5lcjpKLHNsaWNlOkt9PSQsWD1NYXRoLm1heChRLndpZHRoLUoud2lkdGgqMiwwKSxZPU1hdGgubWF4KFEuaGVpZ2h0LUouaGVpZ2h0KjIsMCkscT1be2tleToidG9wLWxlZnQiLGltYWdlOksudG9wTGVmdCxyZWN0Ont4OlEueCx5OlEueSx3aWR0aDpKLndpZHRoLGhlaWdodDpKLmhlaWdodH19LHtrZXk6InRvcC1yaWdodCIsaW1hZ2U6Sy50b3BSaWdodCxyZWN0Ont4OlEueCtRLndpZHRoLUoud2lkdGgseTpRLnksd2lkdGg6Si53aWR0aCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJib3R0b20tbGVmdCIsaW1hZ2U6Sy5ib3R0b21MZWZ0LHJlY3Q6e3g6US54LHk6US55K1EuaGVpZ2h0LUouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToiYm90dG9tLXJpZ2h0IixpbWFnZTpLLmJvdHRvbVJpZ2h0LHJlY3Q6e3g6US54K1Eud2lkdGgtSi53aWR0aCx5OlEueStRLmhlaWdodC1KLmhlaWdodCx3aWR0aDpKLndpZHRoLGhlaWdodDpKLmhlaWdodH19LHtrZXk6InRvcCIsaW1hZ2U6Sy50b3AscmVjdDp7eDpRLngrSi53aWR0aCx5OlEueSx3aWR0aDpYLGhlaWdodDpKLmhlaWdodH19LHtrZXk6ImJvdHRvbSIsaW1hZ2U6Sy5ib3R0b20scmVjdDp7eDpRLngrSi53aWR0aCx5OlEueStRLmhlaWdodC1KLmhlaWdodCx3aWR0aDpYLGhlaWdodDpKLmhlaWdodH19LHtrZXk6ImxlZnQiLGltYWdlOksubGVmdCxyZWN0Ont4OlEueCx5OlEueStKLmhlaWdodCx3aWR0aDpKLndpZHRoLGhlaWdodDpZfX0se2tleToicmlnaHQiLGltYWdlOksucmlnaHQscmVjdDp7eDpRLngrUS53aWR0aC1KLndpZHRoLHk6US55K0ouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0Oll9fV07cmV0dXJuIFooUTEse2NoaWxkcmVuOnEuZmlsdGVyKChHKT0+Ry5yZWN0LndpZHRoPjAmJkcucmVjdC5oZWlnaHQ+MCkubWFwKChHKT0+WihIOSx7Y2hyb21lOiQsaW1hZ2U6Ry5pbWFnZSxyZWN0OkcucmVjdCx6SW5kZXg6MX0sRy5rZXkpKX0pfWZ1bmN0aW9uIEg5KHtjaHJvbWU6JCxpbWFnZTpRLHJlY3Q6Six6SW5kZXg6S30pe3JldHVybiBaKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOkY5KCQuaWRlbnRpZmllcixRKSxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4uTDMoJCxKLEspLG9iamVjdEZpdDoiZmlsbCIscG9pbnRlckV2ZW50czoibm9uZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfWZ1bmN0aW9uIEY5KCQsUSl7bGV0IEo9YGdyaWQvYXBpL2RldmljZWtpdC1jaHJvbWU/Y2hyb21lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfSZpbWFnZT0ke2VuY29kZVVSSUNvbXBvbmVudChRKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7Sn1gOmwxKEopfWZ1bmN0aW9uIEwzKCQsUSxKKXtyZXR1cm57bGVmdDpMNShRLngsJC5mcmFtZS53aWR0aCksdG9wOkw1KFEueSwkLmZyYW1lLmhlaWdodCksd2lkdGg6TDUoUS53aWR0aCwkLmZyYW1lLndpZHRoKSxoZWlnaHQ6TDUoUS5oZWlnaHQsJC5mcmFtZS5oZWlnaHQpLHpJbmRleDpKfX1mdW5jdGlvbiBMNSgkLFEpe3JldHVybmAkeyQvUSoxMDB9JWB9ZnVuY3Rpb24gazkoe25hbWU6JCxydW50aW1lOlEsY2hyb21lOkoscGxhY2Vob2xkZXJBc3NldDpLLGJ1c3k6WCxidXN5TGFiZWw6WT0iU3RhcnRpbmfigKYiLGVycm9yOnEsb25TdGFydDpHfSl7bGV0IE49RjAoJCksQj1UMVtOXSxVPUs/P251bGwsVj1VP251bGw6Sj8/bnVsbCx6PVY/e3dpZHRoOlYuc2NyZWVuLndpZHRoLGhlaWdodDpWLnNjcmVlbi5oZWlnaHR9OmkwKE4sJCksTD1uMChOLHopLEE9VT9zNyhOLFUubmFtZSk6Vj9MKlYuZnJhbWUud2lkdGgvVi5zY3JlZW4ud2lkdGg6TCpCLndpZHRoLyhCLndpZHRoLTIqQi5iZXplbFgpLEM9VT97d2lkdGg6VS53aWR0aCxoZWlnaHQ6VS5oZWlnaHR9OlY/e3dpZHRoOlYuZnJhbWUud2lkdGgsaGVpZ2h0OlYuZnJhbWUuaGVpZ2h0fTp7d2lkdGg6Qi53aWR0aCxoZWlnaHQ6Qi5oZWlnaHR9LEg9YCR7Qy53aWR0aH0gLyAke0MuaGVpZ2h0fWAsTz0oQy53aWR0aC9DLmhlaWdodCp0NyhOKSkudG9GaXhlZCgyKSxXPU49PT0idmlzaW9uIj9aKFEkLHt9KTpaKGU3LHt0eXBlOk59KTtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtNSBtaW4tdy0wIHctZnVsbCIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIixzdHlsZTp7d2lkdGg6YG1pbigxMDAlLCAke0F9cHgsICR7T31kdmgpYCxtYXhXaWR0aDpBLGFzcGVjdFJhdGlvOkh9LGNoaWxkcmVuOlU/WigkJCx7bmFtZTpVLm5hbWUsZmFsbGJhY2s6V30pOlY/WigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOlooejUse2Nocm9tZTpWfSl9KTpXfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTdweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjokfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbVTUoUSksIiBTaW11bGF0b3IiXX0pXX0pLHEmJlooImRpdiIse2NsYXNzTmFtZToidGV4dC1kYW5nZXIgdGV4dC1bMTJweF0gZm9udC1tb25vIG1heC13LTkwIHRleHQtY2VudGVyIixjaGlsZHJlbjpxfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkcsZGlzYWJsZWQ6WCxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTUgcHktMiByb3VuZGVkLWZ1bGwgdGV4dC1bMTRweF0gZm9udC1tZWRpdW0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtYPyJiZy13aGl0ZS84IHRleHQtd2hpdGUvNTUgY3Vyc29yLWRlZmF1bHQiOiJiZy13aGl0ZS8xMiB0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzE4IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltYJiZaKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InNpemUtMy41IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMjUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSIsc3R5bGU6e2JvcmRlclRvcENvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOSkifX0pLFg/WToiU3RhcnQiXX0pXX0pfWZ1bmN0aW9uIHM3KCQsUSl7aWYoJD09PSJ3YXRjaCIpe2lmKFEuaW5jbHVkZXMoInVsdHJhIikpcmV0dXJuIDI1NTtpZihRLmluY2x1ZGVzKCJ3YXRjaC1zZS0iKXx8US5pbmNsdWRlcygiYXBwbGUtd2F0Y2gtc2UtIikpcmV0dXJuIDIzODtyZXR1cm4gMjUwfWlmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzkwO2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDM0MDtyZXR1cm4gMjgwfWZ1bmN0aW9uIHQ3KCQpe2lmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzQ7aWYoJD09PSJpcGFkIilyZXR1cm4gNTA7aWYoJD09PSJ3YXRjaCIpcmV0dXJuIDU2O3JldHVybiA1Mn1mdW5jdGlvbiBlNyh7dHlwZTokfSl7bGV0IFE9VDFbJF07cmV0dXJuIFooUTEse2NoaWxkcmVuOltaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtRLndpZHRofSAke1EuaGVpZ2h0fWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpaKCJsaW5lYXJHcmFkaWVudCIse2lkOiJwbGFjZWhvbGRlci1zY3JlZW4iLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzZmYThlNiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiI1NSUiLHN0b3BDb2xvcjoiIzViOTNkNiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiM1MTg4Y2YifSldfSl9KSxaKCJyZWN0Iix7eDpRLmJlemVsWCx5OlEuYmV6ZWxZLHdpZHRoOlEud2lkdGgtMipRLmJlemVsWCxoZWlnaHQ6US5oZWlnaHQtMipRLmJlemVsWSxyeDpRLmlubmVyUmFkaXVzLGZpbGw6InVybCgjcGxhY2Vob2xkZXItc2NyZWVuKSJ9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46WigkNSx7dHlwZTokfSl9KV19KX1mdW5jdGlvbiAkJCh7bmFtZTokLGZhbGxiYWNrOlF9KXtsZXRbSixLXT1NKCJsb2FkaW5nIik7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W0ohPT0ibG9hZGVkIiYmUSxKIT09ImVycm9yIiYmWigiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpKJCgkKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIG9iamVjdC1jb250YWluIixzdHlsZTp7V2Via2l0VXNlckRyYWc6Im5vbmUifSxvbkxvYWQ6KCk9PksoImxvYWRlZCIpLG9uRXJyb3I6KCk9PksoImVycm9yIil9KV19KX1mdW5jdGlvbiBRJCgpe2xldHt3aWR0aDokLGhlaWdodDpRfT1UMS52aXNpb247cmV0dXJuIFooInN2ZyIse3ZpZXdCb3g6YDAgMCAkeyR9ICR7UX1gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGZpbGw6Im5vbmUiLCJhcmlhLWhpZGRlbiI6ITAsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpbWigibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W1ooInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyODI4MmIifSksWigic3RvcCIse29mZnNldDoiNTQlIixzdG9wQ29sb3I6IiMxMjEyMTQifSksWigic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDcwNzA4In0pXX0pLFooImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltaKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMzEzNTNhIn0pLFooInN0b3AiLHtvZmZzZXQ6IjQ4JSIsc3RvcENvbG9yOiIjMGEwYjBkIn0pLFooInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KSxaKCJyYWRpYWxHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItbGVucyIsY3g6IjUwJSIsY3k6IjQ2JSIscjoiNjAlIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzIwMjgzMiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiI3MiUiLHN0b3BDb2xvcjoiIzA5MGEwZCJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSldfSksWigicGF0aCIse2Q6Ik05NSAxNzdDOTUgMTE5IDE0NyA4NiAyMTggOTFDMjU3IDk0IDI4NiAxMTEgMzIwIDExMUMzNTQgMTExIDM4MyA5NCA0MjIgOTFDNDkzIDg2IDU0NSAxMTkgNTQ1IDE3N1YyMjJDNTQ1IDI3OCA1MDEgMzExIDQ0MyAzMTBDMzk4IDMwOSAzNzEgMjg2IDM0NSAyNjhDMzI5IDI1NyAzMTEgMjU3IDI5NSAyNjhDMjY5IDI4NiAyNDIgMzA5IDE5NyAzMTBDMTM5IDMxMSA5NSAyNzggOTUgMjIyVjE3N1oiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsKSIsc3Ryb2tlOiIjM2QzZDQyIixzdHJva2VXaWR0aDoiNyJ9KSxaKCJwYXRoIix7ZDoiTTExNyAxODFDMTE3IDEzNCAxNTcgMTEyIDIyMCAxMTZDMjYwIDExOSAyODcgMTM2IDMyMCAxMzZDMzUzIDEzNiAzODAgMTE5IDQyMCAxMTZDNDgzIDExMiA1MjMgMTM0IDUyMyAxODFWMjE3QzUyMyAyNjMgNDg4IDI4NyA0MzkgMjg3QzM5OSAyODcgMzY5IDI2NCAzNDUgMjUwQzMyOSAyNDAgMzExIDI0MCAyOTUgMjUwQzI3MSAyNjQgMjQxIDI4NyAyMDEgMjg3QzE1MiAyODcgMTE3IDI2MyAxMTcgMjE3VjE4MVoiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzKSIsc3Ryb2tlOiIjMTcxODFiIixzdHJva2VXaWR0aDoiNSJ9KSxaKCJwYXRoIix7ZDoiTTE0MyAxODZDMTQ1IDE0OCAxNzYgMTM1IDIyNiAxMzhDMjY0IDE0MSAyODkgMTU2IDMyMCAxNTZDMzUxIDE1NiAzNzYgMTQxIDQxNCAxMzhDNDY0IDEzNSA0OTUgMTQ4IDQ5NyAxODZWMjEzQzQ5NyAyNTAgNDY5IDI2NiA0MzIgMjY2QzM5NCAyNjYgMzY5IDI0NiAzNDMgMjM1QzMyOCAyMjkgMzEyIDIyOSAyOTcgMjM1QzI3MSAyNDYgMjQ2IDI2NiAyMDggMjY2QzE3MSAyNjYgMTQzIDI1MCAxNDMgMjEzVjE4NloiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMpIixzdHJva2U6IiMyNjJhMmYiLHN0cm9rZVdpZHRoOiIyIn0pLFooInBhdGgiLHtkOiJNMTUxIDE3MUMxNzkgMTUwIDIxNyAxNDcgMjUxIDE1NE0zODkgMTU0QzQyMyAxNDcgNDYxIDE1MCA0ODkgMTcxIixzdHJva2U6IiM0ZTUzNWEiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KSxaKCJwYXRoIix7ZDoiTTI3NyAyMzNDMjg5IDIyNCAzMDQgMjE5IDMyMCAyMTlDMzM2IDIxOSAzNTEgMjI0IDM2MyAyMzMiLHN0cm9rZToiIzNiNDA0NiIsc3Ryb2tlV2lkdGg6IjQiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pXX0pfWZ1bmN0aW9uIEokKCQpe2xldCBRPWBncmlkL2FwaS9kZXZpY2UtcGxhY2Vob2xkZXItYXNzZXQ/bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7UX1gOmwxKFEpfWZ1bmN0aW9uIGUwKHtvcGVuOiQsd2lkdGg6USxjaGlsZHJlbjpKLHN0eWxlOkssc2lkZTpYPSJyaWdodCJ9KXtyZXR1cm4gWigiYXNpZGUiLHtjbGFzc05hbWU6YGZpeGVkIHotMzUgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gYmctcGFuZWwtYmcgdGV4dC13aGl0ZS85MCBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wgJHtYPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCBsZWZ0LTAgcm91bmRlZC1ub25lIGJvcmRlci0wIGJvcmRlci1yIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzhweF8wXzMycHhfcmdiYSgwLDAsMCwwLjM1KV0iOiJ0b3AtMyBib3R0b20tMyByaWdodC0zIHJvdW5kZWQtWzE0cHhdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgc2hhZG93LVswXzEycHhfNDBweF9yZ2JhKDAsMCwwLDAuNTUpXSJ9YCxzdHlsZTp7d2lkdGg6USx0cmFuc2Zvcm06JD8idHJhbnNsYXRlWCgwKSI6WD09PSJsZWZ0Ij8idHJhbnNsYXRlWCgtMTAwJSkiOiJ0cmFuc2xhdGVYKGNhbGMoMTAwJSArIDI0cHgpKSIsb3BhY2l0eTokPzE6MCxwb2ludGVyRXZlbnRzOiQ/ImF1dG8iOiJub25lIiwuLi5LfSwiYXJpYS1oaWRkZW4iOiEkLGNoaWxkcmVuOkp9KX1mdW5jdGlvbiAkMih7Y2hpbGRyZW46JCxzdHlsZTpRfSl7cmV0dXJuIFooImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yLjUgcHgtMi41IHB5LTEuNSBwbC0zIixzdHlsZTpRLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBBOSh7Y2hpbGRyZW46JH0pe3JldHVybiBaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjokfSl9ZnVuY3Rpb24gQzUoe29uQ2xpY2s6JCxhcmlhTGFiZWw6UT0iQ2xvc2UgcGFuZWwiLHRpdGxlOkosaWNvblNpemU6Sz0xNn0pe3JldHVybiBaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6JCxjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgcC0wIHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjpRLHRpdGxlOkosY2hpbGRyZW46WigkMCx7c2l6ZTpLLHN0cm9rZVdpZHRoOjJ9KX0pfWZ1bmN0aW9uIE85KCQsUSl7bGV0W0osS109TShudWxsKTtyZXR1cm4geSgoKT0+e2lmKCFRfHwhJClyZXR1cm47bGV0IFg9ITEsWT1hc3luYygpPT57dHJ5e2xldCBOPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFYKUsoTil9Y2F0Y2h7fX07WSgpO2xldCBxPXNldEludGVydmFsKFksNTAwMCk7cmV0dXJuKCk9PntYPSEwLGNsZWFySW50ZXJ2YWwocSl9fSxbJCxRXSksSn1mdW5jdGlvbiBNOSh7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPT09MClyZXR1cm4gbnVsbDtsZXR7ZXN0aW1hdGVkQWRkaXRpb25hbDpRLGF2YWlsYWJsZUJ5dGVzOkosdG90YWxCeXRlczpLLHJ1bm5pbmdTaW11bGF0b3JzOlh9PSQsWT1NYXRoLm1heCgwLE1hdGgubWluKDEsMS1KL0spKSxxPVgrUSxHPVE9PT0wPyIjZTY2IjpRPD0xPyIjZTlhMTNiIjoiIzNiMyIsTj1ZPjAuOT8iI2U2NiI6WT4wLjc1PyIjZTlhMTNiIjoiIzNiMyI7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggbWF4LXctZnVsbCBtaW4tdy0wIGZsZXgtbm93cmFwIGl0ZW1zLWNlbnRlciBnYXAtMS41IG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6R319KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIHRydW5jYXRlIixjaGlsZHJlbjpbWigic3BhbiIse2NoaWxkcmVuOltYLCIvIixxLCIgc2ltcyJdfSksWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80MCIsY2hpbGRyZW46IiDCtyAifSksWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W0w5KEopLCIgZnJlZSJdfSldfSksWigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gc2hyaW5rLTAgYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhZKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOk59fSl9KV19KX1mdW5jdGlvbiBXOSh7dHlwZTokLHNpemU6UT0yMCxzY3JlZW5PbjpKPSExfSl7bGV0IEs9e3dpZHRoOlEsaGVpZ2h0OlEsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MS42LHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gWigic3ZnIix7Li4uSyxjaGlsZHJlbjpbSiYmWigicmVjdCIse3g6IjUiLHk6IjMiLHdpZHRoOiIxNSIsaGVpZ2h0OiIxOSIscng6IjEuNjUiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxaKCJyZWN0Iix7eDoiNCIseToiMi41Iix3aWR0aDoiMTYiLGhlaWdodDoiMTkiLHJ4OiIyLjUifSksWigibGluZSIse3gxOiIxMiIseTE6IjE4LjUiLHgyOiIxMiIseTI6IjE4LjUifSldfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIFooInN2ZyIsey4uLkssY2hpbGRyZW46W1ooInJlY3QiLHt4OiI2LjUiLHk6IjciLHdpZHRoOiIxMSIsaGVpZ2h0OiIxMCIscng6IjMifSksWigicGF0aCIse2Q6Ik04LjUgN2wuNi0zLjJBMS41IDEuNSAwIDAgMSAxMC42IDIuNWgyLjhhMS41IDEuNSAwIDAgMSAxLjUgMS4zTDE1LjUgNyJ9KSxaKCJwYXRoIix7ZDoiTTguNSAxN2wuNiAzLjJhMS41IDEuNSAwIDAgMCAxLjUgMS4zaDIuOGExLjUgMS41IDAgMCAwIDEuNS0xLjNsLjYtMy4yIn0pXX0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gWigic3ZnIix7Li4uSyxjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTMgMTFhNCA0IDAgMCAxIDQtNGgxMGE0IDQgMCAwIDEgNCA0djIuNWEyLjUgMi41IDAgMCAxLTIuNSAyLjVjLTEuOCAwLTIuNS0xLjItMy41LTEuOC0uOS0uNS0xLjYtLjctMi41LS43cy0xLjYuMi0yLjUuN2MtMSAuNi0xLjcgMS44LTMuNSAxLjhBMi41IDIuNSAwIDAgMSAzIDEzLjV6In0pfSk7ZGVmYXVsdDpyZXR1cm4gWigic3ZnIix7Li4uSyxjaGlsZHJlbjpbSiYmWigicmVjdCIse3g6IjYiLHk6IjMiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxaKCJyZWN0Iix7eDoiNi41Iix5OiIyLjUiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIuOCJ9KSxaKCJsaW5lIix7eDE6IjEwLjUiLHkxOiI1Iix4MjoiMTMuNSIseTI6IjUifSldfSl9fWZ1bmN0aW9uIF85KHtkZXZpY2U6JCxhY3RpdmU6USxzdGFydGluZzpKLHNodXR0aW5nRG93bjpLLG9uU2VsZWN0Olgsb25TaHV0ZG93bjpZfSl7bGV0IHE9JC5oZWxwZXIsRz0kLnN0YXRlPT09IkJvb3RlZCIsTj1GMCgkLm5hbWUpLEI9ejkoJC5ydW50aW1lKSxVPXE/IlN0cmVhbWluZyI6Sj9HPyJTdGFydGluZ+KApiI6IkJvb3RpbmfigKYiOks/IlNodXR0aW5nIGRvd27igKYiOkc/IkJvb3RlZCI6bnVsbCxWPXE/IiMzNGQzOTkiOkc/IiNlOWExM2IiOm51bGwsej1xfHxHLEw9cT9RPyJiZy1bIzI2MzY0Y10iOiJiZy1bIzIwMmIzYV0iOlE/ImJnLXdoaXRlLzE1IjoiYmctd2hpdGUvNiIsQT1xPyJ0ZXh0LVsjZDJlN2ZmXSI6UT8idGV4dC13aGl0ZS85MCI6InRleHQtd2hpdGUvNTUiO3JldHVybiBaKCJkaXYiLHtyb2xlOiJidXR0b24iLHRhYkluZGV4OjAsImFyaWEtcHJlc3NlZCI6USxvbkNsaWNrOlgsb25LZXlEb3duOihDKT0+e2lmKEMua2V5PT09IkVudGVyInx8Qy5rZXk9PT0iICIpQy5wcmV2ZW50RGVmYXVsdCgpLFgoKX0sY2xhc3NOYW1lOmBncm91cCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10gJHtRPyJiZy13aGl0ZS8xMCB0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS84In1gLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6YHJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiAke0x9YCxjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZTpBLGNoaWxkcmVuOlooVzkse3R5cGU6TixzY3JlZW5PbjpCb29sZWFuKHEpfSl9KSxWJiYhcSYmWigic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAuNSByaWdodC0wLjUgc2l6ZS0xLjUgcm91bmRlZC1mdWxsIHJpbmctMiByaW5nLVsjMWMxYzFlXSIsc3R5bGU6e2JhY2tncm91bmQ6Vn19KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSB0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOiQubmFtZX0pLFUmJlooImRpdiIse2NsYXNzTmFtZTpgdHJ1bmNhdGUgdGV4dC1bMTFweF0gbGVhZGluZy10aWdodCAke3E/InRleHQtWyMzNGQzOTldIjpRPyJ0ZXh0LXdoaXRlLzc1IjoidGV4dC13aGl0ZS80NSJ9YCxjaGlsZHJlbjpVfSldfSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy10cmFpbGluZy1zbG90IixjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIHctOCBoLTYgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0YWJ1bGFyLW51bXMgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEyc10gJHtRPyJ0ZXh0LXdoaXRlLzg1IjoidGV4dC13aGl0ZS80MCJ9ICR7ej8iZ3JvdXAtaG92ZXI6b3BhY2l0eS0wIGdyb3VwLWZvY3VzLXdpdGhpbjpvcGFjaXR5LTAiOiIifWAsY2hpbGRyZW46Qn0pLHomJlooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsdGl0bGU6Sz8iU2h1dHRpbmcgZG93buKApiI6IlNodXQgZG93biBzaW11bGF0b3IiLCJhcmlhLWxhYmVsIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsb25DbGljazooQyk9PntDLnByZXZlbnREZWZhdWx0KCksQy5zdG9wUHJvcGFnYXRpb24oKSxZKCl9LGRpc2FibGVkOkssY2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTUgcm91bmRlZC1tZCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXMtdmlzaWJsZTpvcGFjaXR5LTEwMCBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzLGJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdICR7UT8idGV4dC13aGl0ZS84MCBob3ZlcjpiZy13aGl0ZS8yMCI6InRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMTIgaG92ZXI6dGV4dC13aGl0ZSJ9YCxjaGlsZHJlbjpaKCQwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjIuMn0pfSldfSldfSl9dmFyIFEyPSJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpIix6Mz0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50KSI7dmFyIFokPTEyO2Z1bmN0aW9uIFA5KHtvcGVuOiQsb25DbG9zZTpRLHdpZHRoOkosc2lkZTpLPSJyaWdodCIsZGV2aWNlczpYLHRvdGFsOlk9MCxoYXNNb3JlOnE9ITEsb25Mb2FkTW9yZTpHLG9uTG9hZEFsbDpOLG9uUmVzZXRQYWdlOkIsc2VsZWN0ZWRVZGlkOlUsb25TZWxlY3Q6VixzdGFydGluZzp6LHNodXR0aW5nRG93bjpMLG9uU2h1dGRvd246QX0pe2xldCBIPSh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXyk/LmdyaWRNZW1vcnlFbmRwb2ludD8/KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDpsMSgiZ3JpZC9hcGkvbWVtb3J5IikpLE89TzkoSCwkKSxbVyx4XT1NKCIiKSxFPUQxKCgpPT57bGV0IGY9Vy50cmltKCkudG9Mb3dlckNhc2UoKTtpZighZnx8IVgpcmV0dXJuIFg7cmV0dXJuIFguZmlsdGVyKChoKT0+aC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZil8fFU1KGgucnVudGltZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmKSl9LFtYLFddKSxiPUkoITEpO3koKCk9PntsZXQgZj0hIVcudHJpbSgpO2lmKGYmJnEpTj8uKCk7ZWxzZSBpZighZiYmYi5jdXJyZW50KUI/LigpO2IuY3VycmVudD1mfSxbVyxxLE4sQl0pO2xldCBqPUkobnVsbCk7cmV0dXJuIFooZTAse29wZW46JCx3aWR0aDpKLHNpZGU6SyxzdHlsZTp7YmFja2dyb3VuZENvbG9yOlEyfSxjaGlsZHJlbjpbWigkMix7c3R5bGU6e2p1c3RpZnlDb250ZW50OiJmbGV4LXN0YXJ0IixwYWRkaW5nTGVmdDoxNixwYWRkaW5nVG9wOjE2LGdhcDo0fSxjaGlsZHJlbjpbWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlEsY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiQ2xvc2UgZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjohMCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46WihrMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxaKEI1LHt9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6InB4LTQgcGItMiBwdC0wLjUgc2hyaW5rLTAiLGNoaWxkcmVuOlooImxhYmVsIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgaC04IHJvdW5kZWQtbGcgYmctd2hpdGUvNiBmb2N1cy13aXRoaW46Ymctd2hpdGUvMTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10iLGNoaWxkcmVuOltaKFAyLHtzaXplOjE0LHN0cm9rZVdpZHRoOjIsY2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIHNocmluay0wIn0pLFooImlucHV0Iix7dmFsdWU6VyxvbkNoYW5nZTooZik9PngoZi50YXJnZXQudmFsdWUpLHBsYWNlaG9sZGVyOiJTZWFyY2giLGNsYXNzTmFtZToibWluLXctMCBmbGV4LTEgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgb3V0bGluZS1ub25lIHRleHQtWzEzcHhdIHRleHQtd2hpdGUvOTAgcGxhY2Vob2xkZXI6dGV4dC13aGl0ZS80MCJ9KSxXJiZaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc2VhcmNoIixvbkNsaWNrOigpPT54KCIiKSxjbGFzc05hbWU6InNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNCByb3VuZGVkLWZ1bGwgYmctd2hpdGUvMTUgdGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8yNSIsY2hpbGRyZW46WigkMCx7c2l6ZTo5LHN0cm9rZVdpZHRoOjN9KX0pXX0pfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBmbGV4LTEgbWluLWgtMCIsY2hpbGRyZW46W1ooImRpdiIse3JlZjpqLG9uU2Nyb2xsOigpPT57aWYoVy50cmltKCl8fCFxfHwhRylyZXR1cm47bGV0IGY9ai5jdXJyZW50O2lmKCFmKXJldHVybjtpZihmLnNjcm9sbFRvcCtmLmNsaWVudEhlaWdodD49Zi5zY3JvbGxIZWlnaHQtMjQwKUcoKX0sY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcHgtNCBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOkU9PT1udWxsP1ooSyQse30pOkUubGVuZ3RoPT09MD9aKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHktNiB0ZXh0LXdoaXRlLzQwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjpXPyJObyBtYXRjaGluZyBzaW11bGF0b3JzLiI6Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6WihRMSx7Y2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicHQtMSBwYi0xIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIixjaGlsZHJlbjpFLm1hcCgoZik9PlooXzkse2RldmljZTpmLGFjdGl2ZTpmLmRldmljZT09PVUsc3RhcnRpbmc6ISF6W2YuZGV2aWNlXSxzaHV0dGluZ0Rvd246ISFMW2YuZGV2aWNlXSxvblNlbGVjdDooKT0+VihmLmRldmljZSksb25TaHV0ZG93bjooKT0+QShmLmRldmljZSl9LGYuZGV2aWNlKSl9KSwhVyYmcSYmWigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTIgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS8zNSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46WD9gJHtYLmxlbmd0aH0gb2YgJHtZfWA6bnVsbH0pXX0pfSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtdG9wLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICR7UTJ9IDAlLCAke3ozfSAxMDAlKWB9fSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtYm90dG9tLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byB0b3AsICR7UTJ9IDAlLCAke3ozfSAxMDAlKWB9fSldfSksWihZJCx7cmVwb3J0Ok99KV19KX1mdW5jdGlvbiBLJCgpe3JldHVybiBaKFExLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3Qtc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBzaW11bGF0b3JzIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOlokfSwoJCxRKT0+WihYJCx7aW5kZXg6UX0sUSkpfSldfSl9ZnVuY3Rpb24gWCQoe2luZGV4OiR9KXtsZXQgUT1bInctWzYyJV0iLCJ3LVs3NCVdIiwidy1bNTglXSIsInctWzcwJV0iXVskJTRdLEo9WyJ3LVs0MiVdIiwidy1bMzYlXSIsInctWzQ4JV0iLCJ3LVszMiVdIl1bJCU0XSxLPVsidy03Iiwidy02Iiwidy04Il1bJCUzXTtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgc2VsZWN0LW5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS82IixjaGlsZHJlbjpaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy13aGl0ZS9bMC4xMl0ifSl9KSxaKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6YGgtMyByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdICR7UX1gfSksWigic3BhbiIse2NsYXNzTmFtZTpgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke0p9YH0pXX0pLFooInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtLfWB9KV19KX1mdW5jdGlvbiBZJCh7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPD0wKXJldHVybiBudWxsO3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTMgcHktMiBmbGV4IGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpaKE05LHtyZXBvcnQ6JH0pfSl9ZnVuY3Rpb24gSDUoe3BhbmVsV2lkdGg6JCx2aXNpYmxlOlEsb25Qb2ludGVyRG93bjpKLGFyaWFMYWJlbDpLLHNpZGU6WD0icmlnaHQifSl7bGV0W1kscV09TSghMSksW0csTl09TSghMSksQj1ZfHxHLFU9KFg9PT0ibGVmdCI/MDoxMikrJC05O3JldHVybiBaKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpLLCJhcmlhLWhpZGRlbiI6IVEsb25Qb2ludGVyRG93bjooeik9PntOKCEwKSxKKHopfSxvblBvaW50ZXJVcDooKT0+TighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5OKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgJHtYPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCI6InRvcC0zIGJvdHRvbS0zIn0gdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7UT8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOlg9PT0ibGVmdCI/e2xlZnQ6VX06e3JpZ2h0OlV9LGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Qj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLFooImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Qj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke0c/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIEQ5KCl7bGV0WyQsUV09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIHkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgSj13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksSz0oKT0+UShKLm1hdGNoZXMpO3JldHVybiBLKCksSi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLEspLCgpPT5KLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsSyl9LFtdKSwkfWZ1bmN0aW9uIEY1KCl7bGV0WyQsUV09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4geSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBKPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLEs9KCk9PlEoSi5tYXRjaGVzKTtyZXR1cm4gSygpLEouYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixLKSwoKT0+Si5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLEspfSxbXSksJH12YXIgVDk9MjgwO3ZhciBDMz0id2lkdGggNzBtcyBsaW5lYXIiLEgzPSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLHc5PSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsRTk9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixBNT0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsSTk9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsYjk9IjAuMTZzIix5OT0iMC4ycyIsUzk9NSx4OT17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxqOT17aWRsZToiIzY4NmU3OCIsaG92ZXI6IiNiN2JiYzIiLGRyYWc6IiNmNGY2ZmEifSx2OT17aWRsZToyLjY1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxSOT17aWRsZTowLjM4LGhvdmVyOjAuODYsZHJhZzoxfSxrNT1udWxsO2Z1bmN0aW9uIGc5KCl7aWYoazUhPW51bGwpcmV0dXJuIGs1O2lmKHR5cGVvZiBDU1M+InUifHx0eXBlb2YgQ1NTLnN1cHBvcnRzIT09ImZ1bmN0aW9uIilyZXR1cm4hMTtyZXR1cm4gazU9Q1NTLnN1cHBvcnRzKCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwibGluZWFyKDAsIDEpIiksazV9dmFyIHEkPTQwLGg5PTE0LGY5PTI0MCxtOT0zMCxwOT0wLjE1LEckPTgwLHU5PTE1MCxsOT0yNTAsRjM9InNlcnZlLXNpbTpzaW11bGF0b3ItZnJhbWUtc2NhbGUiO2Z1bmN0aW9uIGszKCQsUSxKLEspe2xldCBYPSQqMyxZPVE+MD9NYXRoLm1heCgxODAsUS00OCk6WCxxPUo+MCYmTnVtYmVyLmlzRmluaXRlKEspJiZLPjA/TWF0aC5tYXgoMTgwLChKLTEzNikqSyk6WDtyZXR1cm4gTWF0aC5tYXgoMTgwLE1hdGgubWluKFgsWSxxKSl9ZnVuY3Rpb24gUjAoJCxRLEosSyxYKXtsZXQgWT1rMyhRLEosSyxYKSxxPU1hdGgubWluKDI4MCxZKTtyZXR1cm4gTWF0aC5taW4oWSxNYXRoLm1heChxLCQpKX1mdW5jdGlvbiBkOSgkLFEsSixLLFgpe2xldCBZPU51bWJlci5pc0Zpbml0ZShYKT8kKlg6JDtyZXR1cm4gUjAoWSwkLFEsSixLKX1mdW5jdGlvbiBPNSgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO2xldCBRPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWF4KDEsd2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpOjE7cmV0dXJuIE1hdGgucm91bmQoJCpRKS9RfWZ1bmN0aW9uIEEzKCQsUSl7aWYoJDw9MHx8UTw9MClyZXR1cm4gMDtsZXQgSj0wLjU1LEs9JCpRKkovKFErSiokKTtyZXR1cm4gTWF0aC5taW4ocSQsSyl9ZnVuY3Rpb24gYzkoJCxRLEope2xldCBLPSQsWD1KO2ZvcihsZXQgWSBvZiBRKXtsZXQgcT1NYXRoLmFicygkLVkpO2lmKHE8WClLPVksWD1xfXJldHVybiBLfWZ1bmN0aW9uIHI5KCQpe2xldHtmcm9tOlEsdG86Six2ZWxvY2l0eTpLLHN0aWZmbmVzczpYLGRhbXBpbmc6WSxvblVwZGF0ZTpxLG9uQ29tcGxldGU6R309JCxOPTAuNCxCPTAuMDMzMzMzMzMzMzMzMzMzMzMsVT1RLFY9Syx6PXBlcmZvcm1hbmNlLm5vdygpLEw9MCxBPSExLEM9KEgpPT57aWYoQSlyZXR1cm47bGV0IE89TWF0aC5taW4oKEgteikvMTAwMCwwLjAzMzMzMzMzMzMzMzMzMzMzKTt6PUg7bGV0IFc9LVgqKFUtSiktWSpWO2lmKFYrPVcqTyxVKz1WKk8sTWF0aC5hYnMoVik8MC40JiZNYXRoLmFicyhVLUopPDAuNCl7cShKKSxHPy4oKTtyZXR1cm59cShVKSxMPXJlcXVlc3RBbmltYXRpb25GcmFtZShDKX07cmV0dXJuIEw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEMpLCgpPT57aWYoQT0hMCxMKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEwpfX1mdW5jdGlvbiBvOSgkKXtpZigkLmxlbmd0aDwyKXJldHVybiAwO2xldCBRPSRbJC5sZW5ndGgtMV0sSj0kWzBdO2ZvcihsZXQgWD0kLmxlbmd0aC0xO1g+PTA7WC0tKWlmKFEudC0kW1hdLnQ+PUckKXtKPSRbWF07YnJlYWt9bGV0IEs9KFEudC1KLnQpLzEwMDA7cmV0dXJuIEs+MD8oUS54LUoueCkvSzowfXZhciBpOT0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiO2Z1bmN0aW9uIFYkKHthcmM6JCxwaGFzZTpRLHJlZHVjZWRNb3Rpb246SixoaWdoQ29udHJhc3Q6Syxmb2N1c1Zpc2libGU6WH0pe2xldCBZPVEhPT0iaWRsZSIscT1LPzEuMTI6MSxHPUo/MTp4OVtRXSxOPXY5W1FdKnEsQj1LPzE6UjlbUV0sVT1ZP2I5Onk5LFY9WT9FOTpBNSx6PVkmJmc5KCk/STk6VixMPUo/Im5vbmUiOmB0cmFuc2Zvcm0gJHtVfSAke3p9YCxBPUo/Im5vbmUiOmBzdHJva2UgJHtVfSAke1Z9LCBzdHJva2Utd2lkdGggJHtVfSAke1Z9YCxDPSQudmlld0JveFNpemUsSD0kLmQsTz17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtHfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOkwsd2lsbENoYW5nZTpKP3ZvaWQgMDoidHJhbnNmb3JtIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4ifTtyZXR1cm4gWigic3ZnIix7d2lkdGg6QyxoZWlnaHQ6Qyx2aWV3Qm94OmAwIDAgJHtDfSAke0N9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoiaW5oZXJpdCIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W1ooInBhdGgiLHtkOkgsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOihTOSoyKzYpKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpYPzAuOTU6MCx0cmFuc2l0aW9uOko/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7QTV9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLFooInBhdGgiLHtkOkgsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIixzdHJva2VXaWR0aDoxLjUqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Olg/MC43OjAsdHJhbnNpdGlvbjpKPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke0E1fWB9fSldfSksWigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOk8sY2hpbGRyZW46WigiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W1ooInBhdGgiLHtkOkgsc3Ryb2tlOiIjMzQzNjNiIixzdHJva2VXaWR0aDpOKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6TWF0aC5taW4oMSxCKzAuMDgpLHRyYW5zaXRpb246YCR7QX0sIG9wYWNpdHkgJHtVfSAke1Z9YCxmaWx0ZXI6aTl9fSksWigicGF0aCIse2Q6SCxzdHJva2U6ajlbUV0sc3Ryb2tlV2lkdGg6TixzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5OkIsdHJhbnNpdGlvbjpgJHtBfSwgb3BhY2l0eSAke1V9ICR7Vn1gLGZpbHRlcjppOX19KV19KX0pXX0pfWZ1bmN0aW9uIG45KHtzaW11bGF0b3JSZXNpemU6JCxkZXZpY2VUeXBlOlEsc3RyZWFtQ29uZmlnOkosY29udGFpbmVyV2lkdGg6Syxjb250YWluZXJIZWlnaHQ6WH0pe2xldCBZPUY1KCkscT1EOSgpLFtHLE5dPU0oITEpLEI9RDEoKCk9PmU1KHt0eXBlOlEsY29uZmlnOko/P251bGwsY29udGFpbmVyV2lkdGg6Syxjb250YWluZXJIZWlnaHQ6WH0pLFtRLEosSyxYXSksVT0kLmlzUmVzaXppbmd8fCQuaXNJbmVydGlhPyJkcmFnIjokLmhhbmRsZUhvdmVyZWQ/ImhvdmVyIjoiaWRsZSI7cmV0dXJuIFooImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtbGFiZWwiOiJSZXNpemUgc2ltdWxhdG9yIHdpZHRoLiBEcmFnIHRoZSBjb3JuZXIgb3IgdXNlIExlZnQgYW5kIFJpZ2h0IEFycm93IGtleXM7IGhvbGQgU2hpZnQgZm9yIGxhcmdlciBzdGVwcy4iLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLXZhbHVlbWluIjpNYXRoLnJvdW5kKCQubWluV2lkdGgpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKCQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKCQuY29tbWl0dGVkV2lkdGgpLHRhYkluZGV4OjAscmVmOiQuaGFuZGxlUmVmLG9uS2V5RG93bjokLm9uS2V5RG93bixvblBvaW50ZXJEb3duOiQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOiQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6JC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMSksb25Gb2N1czooVik9PntOKFYuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5OKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIixvdXRsaW5lOiJub25lIix6SW5kZXg6MjUsV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6InRyYW5zcGFyZW50In0sY2hpbGRyZW46WihWJCx7YXJjOkIscGhhc2U6VSxyZWR1Y2VkTW90aW9uOlksaGlnaENvbnRyYXN0OnEsZm9jdXNWaXNpYmxlOkd9KX0pfWZ1bmN0aW9uIEIkKCQpe2lmKCEkfHx0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybjtsZXQgUT1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtKLnR5cGU9InRleHQvY3NzIixRLmFwcGVuZENoaWxkKEopLEouc3R5bGVTaGVldD9KLnN0eWxlU2hlZXQuY3NzVGV4dD0kOkouYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJCkpfXZhciBOJD0oJCk9Pntzd2l0Y2goJCl7Y2FzZSJzdWNjZXNzIjpyZXR1cm4geiQ7Y2FzZSJpbmZvIjpyZXR1cm4gSCQ7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gQyQ7Y2FzZSJlcnJvciI6cmV0dXJuIEYkO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxVJD1BcnJheSgxMikuZmlsbCgwKSxMJD0oe3Zpc2libGU6JCxjbGFzc05hbWU6UX0pPT57cmV0dXJuIGcuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlsic29ubmVyLWxvYWRpbmctd3JhcHBlciIsUV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSwiZGF0YS12aXNpYmxlIjokfSxnLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLXNwaW5uZXIifSxVJC5tYXAoKEosSyk9PmcuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItbG9hZGluZy1iYXIiLGtleTpgc3Bpbm5lci1iYXItJHtLfWB9KSkpKX0seiQ9Zy5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxnLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuODU3LTkuODA5YS43NS43NSAwIDAwLTEuMjE0LS44ODJsLTMuNDgzIDQuNzktMS44OC0xLjg4YS43NS43NSAwIDEwLTEuMDYgMS4wNjFsMi41IDIuNWEuNzUuNzUgMCAwMDEuMTM3LS4wODlsNC01LjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksQyQ9Zy5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxnLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTkuNDAxIDMuMDAzYzEuMTU1LTIgNC4wNDMtMiA1LjE5NyAwbDcuMzU1IDEyLjc0OGMxLjE1NCAyLS4yOSA0LjUtMi41OTkgNC41SDQuNjQ1Yy0yLjMwOSAwLTMuNzUyLTIuNS0yLjU5OC00LjVMOS40IDMuMDAzek0xMiA4LjI1YS43NS43NSAwIDAxLjc1Ljc1djMuNzVhLjc1Ljc1IDAgMDEtMS41IDBWOWEuNzUuNzUgMCAwMS43NS0uNzV6bTAgOC4yNWEuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxIJD1nLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGcuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03LTRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek05IDlhLjc1Ljc1IDAgMDAwIDEuNWguMjUzYS4yNS4yNSAwIDAxLjI0NC4zMDRsLS40NTkgMi4wNjZBMS43NSAxLjc1IDAgMDAxMC43NDcgMTVIMTFhLjc1Ljc1IDAgMDAwLTEuNWgtLjI1M2EuMjUuMjUgMCAwMS0uMjQ0LS4zMDRsLjQ1OS0yLjA2NkExLjc1IDEuNzUgMCAwMDkuMjUzIDlIOXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxGJD1nLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGcuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS04LTVhLjc1Ljc1IDAgMDEuNzUuNzV2NC41YS43NS43NSAwIDAxLTEuNSAwdi00LjVBLjc1Ljc1IDAgMDExMCA1em0wIDEwYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyeiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLGskPWcuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoiMTIiLGhlaWdodDoiMTIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifSxnLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLGcuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkpLEEkPSgpPT57bGV0WyQsUV09Zy51c2VTdGF0ZShkb2N1bWVudC5oaWRkZW4pO3JldHVybiBnLnVzZUVmZmVjdCgoKT0+e2xldCBKPSgpPT57UShkb2N1bWVudC5oaWRkZW4pfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsSiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixKKX0sW10pLCR9LE8zPTE7Y2xhc3MgdDl7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmliZT0oJCk9PntyZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5wdXNoKCQpLCgpPT57bGV0IFE9dGhpcy5zdWJzY3JpYmVycy5pbmRleE9mKCQpO3RoaXMuc3Vic2NyaWJlcnMuc3BsaWNlKFEsMSl9fSx0aGlzLnB1Ymxpc2g9KCQpPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChRKT0+USgkKSl9LHRoaXMuYWRkVG9hc3Q9KCQpPT57dGhpcy5wdWJsaXNoKCQpLHRoaXMudG9hc3RzPVsuLi50aGlzLnRvYXN0cywkXX0sdGhpcy5jcmVhdGU9KCQpPT57dmFyIFE7bGV0e21lc3NhZ2U6SiwuLi5LfT0kLFg9dHlwZW9mKCQ9PW51bGw/dm9pZCAwOiQuaWQpPT09Im51bWJlciJ8fCgoUT0kLmlkKT09bnVsbD92b2lkIDA6US5sZW5ndGgpPjA/JC5pZDpPMysrLFk9dGhpcy50b2FzdHMuZmluZCgoRyk9PntyZXR1cm4gRy5pZD09PVh9KSxxPSQuZGlzbWlzc2libGU9PT12b2lkIDA/ITA6JC5kaXNtaXNzaWJsZTtpZih0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoWCkpdGhpcy5kaXNtaXNzZWRUb2FzdHMuZGVsZXRlKFgpO2lmKFkpdGhpcy50b2FzdHM9dGhpcy50b2FzdHMubWFwKChHKT0+e2lmKEcuaWQ9PT1YKXJldHVybiB0aGlzLnB1Ymxpc2goey4uLkcsLi4uJCxpZDpYLHRpdGxlOkp9KSx7Li4uRywuLi4kLGlkOlgsZGlzbWlzc2libGU6cSx0aXRsZTpKfTtyZXR1cm4gR30pO2Vsc2UgdGhpcy5hZGRUb2FzdCh7dGl0bGU6SiwuLi5LLGRpc21pc3NpYmxlOnEsaWQ6WH0pO3JldHVybiBYfSx0aGlzLmRpc21pc3M9KCQpPT57aWYoJCl0aGlzLmRpc21pc3NlZFRvYXN0cy5hZGQoJCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKFEpPT5RKHtpZDokLGRpc21pc3M6ITB9KSkpO2Vsc2UgdGhpcy50b2FzdHMuZm9yRWFjaCgoUSk9Pnt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKEopPT5KKHtpZDpRLmlkLGRpc21pc3M6ITB9KSl9KTtyZXR1cm4gJH0sdGhpcy5tZXNzYWdlPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLG1lc3NhZ2U6JH0pfSx0aGlzLmVycm9yPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLG1lc3NhZ2U6JCx0eXBlOiJlcnJvciJ9KX0sdGhpcy5zdWNjZXNzPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLHR5cGU6InN1Y2Nlc3MiLG1lc3NhZ2U6JH0pfSx0aGlzLmluZm89KCQsUSk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLlEsdHlwZToiaW5mbyIsbWVzc2FnZTokfSl9LHRoaXMud2FybmluZz0oJCxRKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uUSx0eXBlOiJ3YXJuaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5sb2FkaW5nPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLHR5cGU6ImxvYWRpbmciLG1lc3NhZ2U6JH0pfSx0aGlzLnByb21pc2U9KCQsUSk9PntpZighUSlyZXR1cm47bGV0IEo9dm9pZCAwO2lmKFEubG9hZGluZyE9PXZvaWQgMClKPXRoaXMuY3JlYXRlKHsuLi5RLHByb21pc2U6JCx0eXBlOiJsb2FkaW5nIixtZXNzYWdlOlEubG9hZGluZyxkZXNjcmlwdGlvbjp0eXBlb2YgUS5kZXNjcmlwdGlvbiE9PSJmdW5jdGlvbiI/US5kZXNjcmlwdGlvbjp2b2lkIDB9KTtsZXQgSz1Qcm9taXNlLnJlc29sdmUoJCBpbnN0YW5jZW9mIEZ1bmN0aW9uPyQoKTokKSxYPUohPT12b2lkIDAsWSxxPUsudGhlbihhc3luYyhOKT0+e2lmKFk9WyJyZXNvbHZlIixOXSxnLmlzVmFsaWRFbGVtZW50KE4pKVg9ITEsdGhpcy5jcmVhdGUoe2lkOkosdHlwZToiZGVmYXVsdCIsbWVzc2FnZTpOfSk7ZWxzZSBpZihNJChOKSYmIU4ub2spe1g9ITE7bGV0IFU9dHlwZW9mIFEuZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IFEuZXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtOLnN0YXR1c31gKTpRLmVycm9yLFY9dHlwZW9mIFEuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IFEuZGVzY3JpcHRpb24oYEhUVFAgZXJyb3IhIHN0YXR1czogJHtOLnN0YXR1c31gKTpRLmRlc2NyaXB0aW9uLEw9dHlwZW9mIFU9PT0ib2JqZWN0IiYmIWcuaXNWYWxpZEVsZW1lbnQoVSk/VTp7bWVzc2FnZTpVfTt0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246ViwuLi5MfSl9ZWxzZSBpZihOIGluc3RhbmNlb2YgRXJyb3Ipe1g9ITE7bGV0IFU9dHlwZW9mIFEuZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IFEuZXJyb3IoTik6US5lcnJvcixWPXR5cGVvZiBRLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBRLmRlc2NyaXB0aW9uKE4pOlEuZGVzY3JpcHRpb24sTD10eXBlb2YgVT09PSJvYmplY3QiJiYhZy5pc1ZhbGlkRWxlbWVudChVKT9VOnttZXNzYWdlOlV9O3RoaXMuY3JlYXRlKHtpZDpKLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpWLC4uLkx9KX1lbHNlIGlmKFEuc3VjY2VzcyE9PXZvaWQgMCl7WD0hMTtsZXQgVT10eXBlb2YgUS5zdWNjZXNzPT09ImZ1bmN0aW9uIj9hd2FpdCBRLnN1Y2Nlc3MoTik6US5zdWNjZXNzLFY9dHlwZW9mIFEuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IFEuZGVzY3JpcHRpb24oTik6US5kZXNjcmlwdGlvbixMPXR5cGVvZiBVPT09Im9iamVjdCImJiFnLmlzVmFsaWRFbGVtZW50KFUpP1U6e21lc3NhZ2U6VX07dGhpcy5jcmVhdGUoe2lkOkosdHlwZToic3VjY2VzcyIsZGVzY3JpcHRpb246ViwuLi5MfSl9fSkuY2F0Y2goYXN5bmMoTik9PntpZihZPVsicmVqZWN0IixOXSxRLmVycm9yIT09dm9pZCAwKXtYPSExO2xldCBCPXR5cGVvZiBRLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBRLmVycm9yKE4pOlEuZXJyb3IsVT10eXBlb2YgUS5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgUS5kZXNjcmlwdGlvbihOKTpRLmRlc2NyaXB0aW9uLHo9dHlwZW9mIEI9PT0ib2JqZWN0IiYmIWcuaXNWYWxpZEVsZW1lbnQoQik/Qjp7bWVzc2FnZTpCfTt0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246VSwuLi56fSl9fSkuZmluYWxseSgoKT0+e2lmKFgpdGhpcy5kaXNtaXNzKEopLEo9dm9pZCAwO1EuZmluYWxseT09bnVsbHx8US5maW5hbGx5LmNhbGwoUSl9KSxHPSgpPT5uZXcgUHJvbWlzZSgoTixCKT0+cS50aGVuKCgpPT5ZWzBdPT09InJlamVjdCI/QihZWzFdKTpOKFlbMV0pKS5jYXRjaChCKSk7aWYodHlwZW9mIEohPT0ic3RyaW5nIiYmdHlwZW9mIEohPT0ibnVtYmVyIilyZXR1cm57dW53cmFwOkd9O2Vsc2UgcmV0dXJuIE9iamVjdC5hc3NpZ24oSix7dW53cmFwOkd9KX0sdGhpcy5jdXN0b209KCQsUSk9PntsZXQgSj0oUT09bnVsbD92b2lkIDA6US5pZCl8fE8zKys7cmV0dXJuIHRoaXMuY3JlYXRlKHtqc3g6JChKKSxpZDpKLC4uLlF9KSxKfSx0aGlzLmdldEFjdGl2ZVRvYXN0cz0oKT0+e3JldHVybiB0aGlzLnRvYXN0cy5maWx0ZXIoKCQpPT4hdGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKCQuaWQpKX0sdGhpcy5zdWJzY3JpYmVycz1bXSx0aGlzLnRvYXN0cz1bXSx0aGlzLmRpc21pc3NlZFRvYXN0cz1uZXcgU2V0fX12YXIgdDE9bmV3IHQ5LE8kPSgkLFEpPT57bGV0IEo9KFE9PW51bGw/dm9pZCAwOlEuaWQpfHxPMysrO3JldHVybiB0MS5hZGRUb2FzdCh7dGl0bGU6JCwuLi5RLGlkOkp9KSxKfSxNJD0oJCk9PntyZXR1cm4gJCYmdHlwZW9mICQ9PT0ib2JqZWN0IiYmIm9rImluICQmJnR5cGVvZiAkLm9rPT09ImJvb2xlYW4iJiYic3RhdHVzImluICQmJnR5cGVvZiAkLnN0YXR1cz09PSJudW1iZXIifSxXJD1PJCxfJD0oKT0+dDEudG9hc3RzLFAkPSgpPT50MS5nZXRBY3RpdmVUb2FzdHMoKSxTMj1PYmplY3QuYXNzaWduKFckLHtzdWNjZXNzOnQxLnN1Y2Nlc3MsaW5mbzp0MS5pbmZvLHdhcm5pbmc6dDEud2FybmluZyxlcnJvcjp0MS5lcnJvcixjdXN0b206dDEuY3VzdG9tLG1lc3NhZ2U6dDEubWVzc2FnZSxwcm9taXNlOnQxLnByb21pc2UsZGlzbWlzczp0MS5kaXNtaXNzLGxvYWRpbmc6dDEubG9hZGluZ30se2dldEhpc3Rvcnk6XyQsZ2V0VG9hc3RzOlAkfSk7QiQoIltkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9bHRyXSxodG1sW2Rpcj1sdHJdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6LTNweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDo0cHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0Oi0xcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDowcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OmF1dG87LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OjA7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoLTM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxdLGh0bWxbZGlyPXJ0bF17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDo0cHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6LTNweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6MHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6LTFweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6MDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOmF1dG87LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgzNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1mYW1pbHk6dWktc2Fucy1zZXJpZixzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLEhlbHZldGljYSBOZXVlLEFyaWFsLE5vdG8gU2FucyxzYW5zLXNlcmlmLEFwcGxlIENvbG9yIEVtb2ppLFNlZ29lIFVJIEVtb2ppLFNlZ29lIFVJIFN5bWJvbCxOb3RvIENvbG9yIEVtb2ppOy0tZ3JheTE6aHNsKDAsIDAlLCA5OSUpOy0tZ3JheTI6aHNsKDAsIDAlLCA5Ny4zJSk7LS1ncmF5Mzpoc2woMCwgMCUsIDk1LjElKTstLWdyYXk0OmhzbCgwLCAwJSwgOTMlKTstLWdyYXk1OmhzbCgwLCAwJSwgOTAuOSUpOy0tZ3JheTY6aHNsKDAsIDAlLCA4OC43JSk7LS1ncmF5Nzpoc2woMCwgMCUsIDg1LjglKTstLWdyYXk4OmhzbCgwLCAwJSwgNzglKTstLWdyYXk5OmhzbCgwLCAwJSwgNTYuMSUpOy0tZ3JheTEwOmhzbCgwLCAwJSwgNTIuMyUpOy0tZ3JheTExOmhzbCgwLCAwJSwgNDMuNSUpOy0tZ3JheTEyOmhzbCgwLCAwJSwgOSUpOy0tYm9yZGVyLXJhZGl1czo4cHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7b3V0bGluZTowO3otaW5kZXg6OTk5OTk5OTk5O3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlfUBtZWRpYSAoaG92ZXI6bm9uZSkgYW5kIChwb2ludGVyOmNvYXJzZSl7W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtbGlmdGVkPXRydWVde3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDp2YXIoLS1vZmZzZXQtcmlnaHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rdey0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpO3otaW5kZXg6dmFyKC0tei1pbmRleCk7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RyYW5zZm9ybTp2YXIoLS15KTt0b3VjaC1hY3Rpb246bm9uZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMsb3BhY2l0eSAuNHMsaGVpZ2h0IC40cyxib3gtc2hhZG93IC4ycztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTowO292ZXJmbG93LXdyYXA6YW55d2hlcmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXXtwYWRkaW5nOjE2cHg7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JvcmRlci1yYWRpdXM6dmFyKC0tYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9W2RhdGEtc29ubmVyLXRvYXN0XTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6MDstLXk6dHJhbnNsYXRlWSgtMTAwJSk7LS1saWZ0OjE7LS1saWZ0LWFtb3VudDpjYWxjKDEgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTowOy0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdDotMTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiMzZjNmM2Z9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6I2U4ZThlOH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLXRpdGxlXXtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXByb21pc2U9dHJ1ZV0gW2RhdGEtaWNvbl0+c3Zne29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1pbiAuM3MgZWFzZSBmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dPip7ZmxleC1zaHJpbms6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dIHN2Z3ttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXXtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLW5vcm1hbC1iZyk7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtdGV4dCk7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKTtib3JkZXI6bm9uZTtmb250LXdlaWdodDo1MDA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzLGJveC1zaGFkb3cgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMCwwLDAsLjQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmaXJzdC1vZi10eXBle21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA4KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25de3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0KTtyaWdodDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tZW5kKTt0b3A6MDtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tZ3JheTEyKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ncmF5NCk7dHJhbnNmb3JtOnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm0pO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzLGJhY2tncm91bmQgLjJzLGJvcmRlci1jb2xvciAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRpc2FibGVkPXRydWVde2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdOmhvdmVyIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ncmF5Mik7Ym9yZGVyLWNvbG9yOnZhcigtLWdyYXk1KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTAwJTtyaWdodDotMTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4Oi0xfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Ym90dG9tOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle3RvcDo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPWZhbHNlXVtkYXRhLXJlbW92ZWQ9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7dHJhbnNmb3JtOnNjYWxlWSgyKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV06OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2hlaWdodDpjYWxjKHZhcigtLWdhcCkgKyAxcHgpO2JvdHRvbToxMDAlO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoMCk7b3BhY2l0eToxfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV17LS1zY2FsZTp2YXIoLS10b2FzdHMtYmVmb3JlKSAqIDAuMDUgKyAxOy0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdC1hbW91bnQpICogdmFyKC0tdG9hc3RzLWJlZm9yZSkpKSBzY2FsZShjYWxjKC0xICogdmFyKC0tc2NhbGUpKSk7aGVpZ2h0OnZhcigtLWZyb250LXRvYXN0LWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246b3BhY2l0eSAuNHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zdHlsZWQ9dHJ1ZV0+KntvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkpKTtoZWlnaHQ6dmFyKC0taW5pdGlhbC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9dHJ1ZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSArIHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKDQwJSk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIC41cyxvcGFjaXR5IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXTo6YmVmb3Jle2hlaWdodDpjYWxjKHZhcigtLWluaXRpYWwtaGVpZ2h0KSArIDIwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV17dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXksMCkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgsMCkpO3RyYW5zaXRpb246bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGVkPXRydWVde3VzZXItc2VsZWN0Om5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXSxbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj10b3Bde2FuaW1hdGlvbi1kdXJhdGlvbjouMnM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249bGVmdF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWxlZnR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1yaWdodF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXJpZ2h0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249dXBde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC11cH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWRvd25de2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1kb3dufUBrZXlmcmFtZXMgc3dpcGUtb3V0LWxlZnR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXJpZ2h0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgKyAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC11cHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtZG93bntmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpICsgMTAwJSkpO29wYWNpdHk6MH19QG1lZGlhIChtYXgtd2lkdGg6NjAwcHgpe1tkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF17bGVmdDpjYWxjKHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAtMSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdIFtkYXRhLXNvbm5lci10b2FzdF17bGVmdDowO3JpZ2h0OjA7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIDIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tbW9iaWxlLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tbW9iaWxlLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTQpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKTstLXN1Y2Nlc3MtYmc6aHNsKDE0MywgODUlLCA5NiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NSwgOTIlLCA4NyUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNDAsIDEwMCUsIDI3JSk7LS1pbmZvLWJnOmhzbCgyMDgsIDEwMCUsIDk3JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIxLCA5MSUsIDkzJSk7LS1pbmZvLXRleHQ6aHNsKDIxMCwgOTIlLCA0NSUpOy0td2FybmluZy1iZzpoc2woNDksIDEwMCUsIDk3JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNDksIDkxJSwgODQlKTstLXdhcm5pbmctdGV4dDpoc2woMzEsIDkyJSwgNDUlKTstLWVycm9yLWJnOmhzbCgzNTksIDEwMCUsIDk3JSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1OSwgMTAwJSwgOTQlKTstLWVycm9yLXRleHQ6aHNsKDM2MCwgMTAwJSwgNDUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXkzKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYmctaG92ZXI6aHNsKDAsIDAlLCAxMiUpOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtYm9yZGVyLWhvdmVyOmhzbCgwLCAwJSwgMjUlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKTstLXN1Y2Nlc3MtYmc6aHNsKDE1MCwgMTAwJSwgNiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NywgMTAwJSwgMTIlKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTUwLCA4NiUsIDY1JSk7LS1pbmZvLWJnOmhzbCgyMTUsIDEwMCUsIDYlKTstLWluZm8tYm9yZGVyOmhzbCgyMjMsIDQzJSwgMTclKTstLWluZm8tdGV4dDpoc2woMjE2LCA4NyUsIDY1JSk7LS13YXJuaW5nLWJnOmhzbCg2NCwgMTAwJSwgNiUpOy0td2FybmluZy1ib3JkZXI6aHNsKDYwLCAxMDAlLCA5JSk7LS13YXJuaW5nLXRleHQ6aHNsKDQ2LCA4NyUsIDY1JSk7LS1lcnJvci1iZzpoc2woMzU4LCA3NiUsIDEwJSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1NywgODklLCAxNiUpOy0tZXJyb3ItdGV4dDpoc2woMzU4LCAxMDAlLCA4MSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZy1ob3Zlcik7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXItaG92ZXIpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc117YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb117YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ117YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3Jde2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3JdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJ7LS1zaXplOjE2cHg7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7ei1pbmRleDoxMH0uc29ubmVyLWxvYWRpbmctd3JhcHBlcltkYXRhLXZpc2libGU9ZmFsc2Vde3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1vdXQgLjJzIGVhc2UgZm9yd2FyZHN9LnNvbm5lci1zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDo1MCU7bGVmdDo1MCU7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpfS5zb25uZXItbG9hZGluZy1iYXJ7YW5pbWF0aW9uOnNvbm5lci1zcGluIDEuMnMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQ6dmFyKC0tZ3JheTExKTtib3JkZXItcmFkaXVzOjZweDtoZWlnaHQ6OCU7bGVmdDotMTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMy45JTt3aWR0aDoyNCV9LnNvbm5lci1sb2FkaW5nLWJhcjpmaXJzdC1jaGlsZHthbmltYXRpb24tZGVsYXk6LTEuMnM7dHJhbnNmb3JtOnJvdGF0ZSguMDAwMWRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDIpe2FuaW1hdGlvbi1kZWxheTotMS4xczt0cmFuc2Zvcm06cm90YXRlKDMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMyl7YW5pbWF0aW9uLWRlbGF5Oi0xczt0cmFuc2Zvcm06cm90YXRlKDYwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNCl7YW5pbWF0aW9uLWRlbGF5Oi0uOXM7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDUpe2FuaW1hdGlvbi1kZWxheTotLjhzO3RyYW5zZm9ybTpyb3RhdGUoMTIwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNil7YW5pbWF0aW9uLWRlbGF5Oi0uN3M7dHJhbnNmb3JtOnJvdGF0ZSgxNTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg3KXthbmltYXRpb24tZGVsYXk6LS42czt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDgpe2FuaW1hdGlvbi1kZWxheTotLjVzO3RyYW5zZm9ybTpyb3RhdGUoMjEwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOSl7YW5pbWF0aW9uLWRlbGF5Oi0uNHM7dHJhbnNmb3JtOnJvdGF0ZSgyNDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMCl7YW5pbWF0aW9uLWRlbGF5Oi0uM3M7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMSl7YW5pbWF0aW9uLWRlbGF5Oi0uMnM7dHJhbnNmb3JtOnJvdGF0ZSgzMDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMil7YW5pbWF0aW9uLWRlbGF5Oi0uMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBzb25uZXItZmFkZS1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfX1Aa2V5ZnJhbWVzIHNvbm5lci1zcGluezAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6LjE1fX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5zb25uZXItbG9hZGluZy1iYXIsW2RhdGEtc29ubmVyLXRvYXN0XSxbZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudDthbmltYXRpb246bm9uZSFpbXBvcnRhbnR9fS5zb25uZXItbG9hZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246b3BhY2l0eSAuMnMsdHJhbnNmb3JtIC4yc30uc29ubmVyLWxvYWRlcltkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZSgtNTAlLC01MCUpfSIpO2Z1bmN0aW9uIE01KCQpe3JldHVybiAkLmxhYmVsIT09dm9pZCAwfXZhciBEJD0zLFQkPSIyNHB4Iix3JD0iMTZweCIsYTk9NDAwMCxFJD0zNTYsSSQ9MTQsYiQ9NDUseSQ9MjAwO2Z1bmN0aW9uIEEwKC4uLiQpe3JldHVybiAkLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9ZnVuY3Rpb24gUyQoJCl7bGV0W1EsSl09JC5zcGxpdCgiLSIpLEs9W107aWYoUSlLLnB1c2goUSk7aWYoSilLLnB1c2goSik7cmV0dXJuIEt9dmFyIHgkPSgkKT0+e3ZhciBRLEosSyxYLFkscSxHLE4sQjtsZXR7aW52ZXJ0OlUsdG9hc3Q6Vix1bnN0eWxlZDp6LGludGVyYWN0aW5nOkwsc2V0SGVpZ2h0czpBLHZpc2libGVUb2FzdHM6QyxoZWlnaHRzOkgsaW5kZXg6Tyx0b2FzdHM6VyxleHBhbmRlZDp4LHJlbW92ZVRvYXN0OkUsZGVmYXVsdFJpY2hDb2xvcnM6YixjbG9zZUJ1dHRvbjpqLHN0eWxlOloxLGNhbmNlbEJ1dHRvblN0eWxlOmYsYWN0aW9uQnV0dG9uU3R5bGU6aCxjbGFzc05hbWU6ZD0iIixkZXNjcmlwdGlvbkNsYXNzTmFtZTpDMT0iIixkdXJhdGlvbjokMSxwb3NpdGlvbjpuLGdhcDprMSxleHBhbmRCeURlZmF1bHQ6bCxjbGFzc05hbWVzOlIsaWNvbnM6SzEsY2xvc2VCdXR0b25BcmlhTGFiZWw6QjE9IkNsb3NlIHRvYXN0In09JCxbVjEsSjFdPWcudXNlU3RhdGUobnVsbCksW3oxLE4xXT1nLnVzZVN0YXRlKG51bGwpLFt2LGldPWcudXNlU3RhdGUoITEpLFtfLFNdPWcudXNlU3RhdGUoITEpLFtZMSxyXT1nLnVzZVN0YXRlKCExKSxbdSxtXT1nLnVzZVN0YXRlKCExKSxbVTEsRzFdPWcudXNlU3RhdGUoITEpLFtkMSxBMV09Zy51c2VTdGF0ZSgwKSxbcDEsTzBdPWcudXNlU3RhdGUoMCksUTA9Zy51c2VSZWYoVi5kdXJhdGlvbnx8JDF8fGE5KSxfMT1nLnVzZVJlZihudWxsKSxTMT1nLnVzZVJlZihudWxsKSxNMD1PPT09MCxKMD1PKzE8PUMsTzE9Vi50eXBlLGMxPVYuZGlzbWlzc2libGUhPT0hMSxXMD1WLmNsYXNzTmFtZXx8IiIsdzE9Vi5kZXNjcmlwdGlvbkNsYXNzTmFtZXx8IiIsdTE9Zy51c2VNZW1vKCgpPT5ILmZpbmRJbmRleCgoZSk9PmUudG9hc3RJZD09PVYuaWQpfHwwLFtILFYuaWRdKSxOMD1nLnVzZU1lbW8oKCk9Pnt2YXIgZTtyZXR1cm4oZT1WLmNsb3NlQnV0dG9uKSE9bnVsbD9lOmp9LFtWLmNsb3NlQnV0dG9uLGpdKSx4MT1nLnVzZU1lbW8oKCk9PlYuZHVyYXRpb258fCQxfHxhOSxbVi5kdXJhdGlvbiwkMV0pLEUxPWcudXNlUmVmKDApLGExPWcudXNlUmVmKDApLFowPWcudXNlUmVmKDApLGkxPWcudXNlUmVmKG51bGwpLFtVMCxEMF09bi5zcGxpdCgiLSIpLF8wPWcudXNlTWVtbygoKT0+e3JldHVybiBILnJlZHVjZSgoZSxQLHApPT57aWYocD49dTEpcmV0dXJuIGU7cmV0dXJuIGUrUC5oZWlnaHR9LDApfSxbSCx1MV0pLHIxPUEkKCksSTE9Vi5pbnZlcnR8fFUsdjE9TzE9PT0ibG9hZGluZyI7YTEuY3VycmVudD1nLnVzZU1lbW8oKCk9PnUxKmsxK18wLFt1MSxfMF0pLGcudXNlRWZmZWN0KCgpPT57UTAuY3VycmVudD14MX0sW3gxXSksZy51c2VFZmZlY3QoKCk9PntpKCEwKX0sW10pLGcudXNlRWZmZWN0KCgpPT57bGV0IGU9UzEuY3VycmVudDtpZihlKXtsZXQgUD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtyZXR1cm4gTzAoUCksQSgocCk9Plt7dG9hc3RJZDpWLmlkLGhlaWdodDpQLHBvc2l0aW9uOlYucG9zaXRpb259LC4uLnBdKSwoKT0+QSgocCk9PnAuZmlsdGVyKCh0KT0+dC50b2FzdElkIT09Vi5pZCkpfX0sW0EsVi5pZF0pLGcudXNlTGF5b3V0RWZmZWN0KCgpPT57aWYoIXYpcmV0dXJuO2xldCBlPVMxLmN1cnJlbnQsUD1lLnN0eWxlLmhlaWdodDtlLnN0eWxlLmhlaWdodD0iYXV0byI7bGV0IHA9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7ZS5zdHlsZS5oZWlnaHQ9UCxPMChwKSxBKCh0KT0+e2lmKCF0LmZpbmQoKHExKT0+cTEudG9hc3RJZD09PVYuaWQpKXJldHVyblt7dG9hc3RJZDpWLmlkLGhlaWdodDpwLHBvc2l0aW9uOlYucG9zaXRpb259LC4uLnRdO2Vsc2UgcmV0dXJuIHQubWFwKChxMSk9PnExLnRvYXN0SWQ9PT1WLmlkP3suLi5xMSxoZWlnaHQ6cH06cTEpfSl9LFt2LFYudGl0bGUsVi5kZXNjcmlwdGlvbixBLFYuaWQsVi5qc3gsVi5hY3Rpb24sVi5jYW5jZWxdKTtsZXQgZzE9Zy51c2VDYWxsYmFjaygoKT0+e1MoITApLEExKGExLmN1cnJlbnQpLEEoKGUpPT5lLmZpbHRlcigoUCk9PlAudG9hc3RJZCE9PVYuaWQpKSxzZXRUaW1lb3V0KCgpPT57RShWKX0seSQpfSxbVixFLEEsYTFdKTtnLnVzZUVmZmVjdCgoKT0+e2lmKFYucHJvbWlzZSYmTzE9PT0ibG9hZGluZyJ8fFYuZHVyYXRpb249PT0xLzB8fFYudHlwZT09PSJsb2FkaW5nIilyZXR1cm47bGV0IGUsUD0oKT0+e2lmKFowLmN1cnJlbnQ8RTEuY3VycmVudCl7bGV0IHQ9bmV3IERhdGUoKS5nZXRUaW1lKCktRTEuY3VycmVudDtRMC5jdXJyZW50PVEwLmN1cnJlbnQtdH1aMC5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpfSxwPSgpPT57aWYoUTAuY3VycmVudD09PTEvMClyZXR1cm47RTEuY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKSxlPXNldFRpbWVvdXQoKCk9PntWLm9uQXV0b0Nsb3NlPT1udWxsfHxWLm9uQXV0b0Nsb3NlLmNhbGwoVixWKSxnMSgpfSxRMC5jdXJyZW50KX07aWYoeHx8THx8cjEpUCgpO2Vsc2UgcCgpO3JldHVybigpPT5jbGVhclRpbWVvdXQoZSl9LFt4LEwsVixPMSxyMSxnMV0pLGcudXNlRWZmZWN0KCgpPT57aWYoVi5kZWxldGUpZzEoKSxWLm9uRGlzbWlzcz09bnVsbHx8Vi5vbkRpc21pc3MuY2FsbChWLFYpfSxbZzEsVi5kZWxldGVdKTtmdW5jdGlvbiBuMSgpe3ZhciBlO2lmKEsxPT1udWxsP3ZvaWQgMDpLMS5sb2FkaW5nKXt2YXIgUDtyZXR1cm4gZy5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6QTAoUj09bnVsbD92b2lkIDA6Ui5sb2FkZXIsVj09bnVsbD92b2lkIDA6KFA9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6UC5sb2FkZXIsInNvbm5lci1sb2FkZXIiKSwiZGF0YS12aXNpYmxlIjpPMT09PSJsb2FkaW5nIn0sSzEubG9hZGluZyl9cmV0dXJuIGcuY3JlYXRlRWxlbWVudChMJCx7Y2xhc3NOYW1lOkEwKFI9PW51bGw/dm9pZCAwOlIubG9hZGVyLFY9PW51bGw/dm9pZCAwOihlPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOmUubG9hZGVyKSx2aXNpYmxlOk8xPT09ImxvYWRpbmcifSl9bGV0IEswPVYuaWNvbnx8KEsxPT1udWxsP3ZvaWQgMDpLMVtPMV0pfHxOJChPMSk7dmFyIEwwLGUxO3JldHVybiBnLmNyZWF0ZUVsZW1lbnQoImxpIix7dGFiSW5kZXg6MCxyZWY6UzEsY2xhc3NOYW1lOkEwKGQsVzAsUj09bnVsbD92b2lkIDA6Ui50b2FzdCxWPT1udWxsP3ZvaWQgMDooUT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpRLnRvYXN0LFI9PW51bGw/dm9pZCAwOlIuZGVmYXVsdCxSPT1udWxsP3ZvaWQgMDpSW08xXSxWPT1udWxsP3ZvaWQgMDooSj1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpKW08xXSksImRhdGEtc29ubmVyLXRvYXN0IjoiIiwiZGF0YS1yaWNoLWNvbG9ycyI6KEwwPVYucmljaENvbG9ycykhPW51bGw/TDA6YiwiZGF0YS1zdHlsZWQiOiFCb29sZWFuKFYuanN4fHxWLnVuc3R5bGVkfHx6KSwiZGF0YS1tb3VudGVkIjp2LCJkYXRhLXByb21pc2UiOkJvb2xlYW4oVi5wcm9taXNlKSwiZGF0YS1zd2lwZWQiOlUxLCJkYXRhLXJlbW92ZWQiOl8sImRhdGEtdmlzaWJsZSI6SjAsImRhdGEteS1wb3NpdGlvbiI6VTAsImRhdGEteC1wb3NpdGlvbiI6RDAsImRhdGEtaW5kZXgiOk8sImRhdGEtZnJvbnQiOk0wLCJkYXRhLXN3aXBpbmciOlkxLCJkYXRhLWRpc21pc3NpYmxlIjpjMSwiZGF0YS10eXBlIjpPMSwiZGF0YS1pbnZlcnQiOkkxLCJkYXRhLXN3aXBlLW91dCI6dSwiZGF0YS1zd2lwZS1kaXJlY3Rpb24iOnoxLCJkYXRhLWV4cGFuZGVkIjpCb29sZWFuKHh8fGwmJnYpLCJkYXRhLXRlc3RpZCI6Vi50ZXN0SWQsc3R5bGU6eyItLWluZGV4IjpPLCItLXRvYXN0cy1iZWZvcmUiOk8sIi0tei1pbmRleCI6Vy5sZW5ndGgtTywiLS1vZmZzZXQiOmAke18/ZDE6YTEuY3VycmVudH1weGAsIi0taW5pdGlhbC1oZWlnaHQiOmw/ImF1dG8iOmAke3AxfXB4YCwuLi5aMSwuLi5WLnN0eWxlfSxvbkRyYWdFbmQ6KCk9PntyKCExKSxKMShudWxsKSxpMS5jdXJyZW50PW51bGx9LG9uUG9pbnRlckRvd246KGUpPT57aWYoZS5idXR0b249PT0yKXJldHVybjtpZih2MXx8IWMxKXJldHVybjtpZihfMS5jdXJyZW50PW5ldyBEYXRlLEExKGExLmN1cnJlbnQpLGUudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKSxlLnRhcmdldC50YWdOYW1lPT09IkJVVFRPTiIpcmV0dXJuO3IoITApLGkxLmN1cnJlbnQ9e3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZfX0sb25Qb2ludGVyVXA6KCk9Pnt2YXIgZSxQLHA7aWYodXx8IWMxKXJldHVybjtpMS5jdXJyZW50PW51bGw7bGV0IHQ9TnVtYmVyKCgoZT1TMS5jdXJyZW50KT09bnVsbD92b2lkIDA6ZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCItLXN3aXBlLWFtb3VudC14IikucmVwbGFjZSgicHgiLCIiKSl8fDApLGE9TnVtYmVyKCgoUD1TMS5jdXJyZW50KT09bnVsbD92b2lkIDA6UC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCItLXN3aXBlLWFtb3VudC15IikucmVwbGFjZSgicHgiLCIiKSl8fDApLHExPW5ldyBEYXRlKCkuZ2V0VGltZSgpLSgocD1fMS5jdXJyZW50KT09bnVsbD92b2lkIDA6cC5nZXRUaW1lKCkpLFgxPVYxPT09IngiP3Q6YSxiMT1NYXRoLmFicyhYMSkvcTE7aWYoTWF0aC5hYnMoWDEpPj1iJHx8YjE+MC4xMSl7aWYoQTEoYTEuY3VycmVudCksVi5vbkRpc21pc3M9PW51bGx8fFYub25EaXNtaXNzLmNhbGwoVixWKSxWMT09PSJ4IilOMSh0PjA/InJpZ2h0IjoibGVmdCIpO2Vsc2UgTjEoYT4wPyJkb3duIjoidXAiKTtnMSgpLG0oITApO3JldHVybn1lbHNle3ZhciBSMSxvMTsoUjE9UzEuY3VycmVudCk9PW51bGx8fFIxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC14IiwiMHB4IiksKG8xPVMxLmN1cnJlbnQpPT1udWxsfHxvMS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteSIsIjBweCIpfUcxKCExKSxyKCExKSxKMShudWxsKX0sb25Qb2ludGVyTW92ZTooZSk9Pnt2YXIgUCxwLHQ7aWYoIWkxLmN1cnJlbnR8fCFjMSlyZXR1cm47aWYoKChQPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSk9PW51bGw/dm9pZCAwOlAudG9TdHJpbmcoKS5sZW5ndGgpPjApcmV0dXJuO2xldCBxMT1lLmNsaWVudFktaTEuY3VycmVudC55LFgxPWUuY2xpZW50WC1pMS5jdXJyZW50Lng7dmFyIGIxO2xldCBSMT0oYjE9JC5zd2lwZURpcmVjdGlvbnMpIT1udWxsP2IxOlMkKG4pO2lmKCFWMSYmKE1hdGguYWJzKFgxKT4xfHxNYXRoLmFicyhxMSk+MSkpSjEoTWF0aC5hYnMoWDEpPk1hdGguYWJzKHExKT8ieCI6InkiKTtsZXQgbzE9e3g6MCx5OjB9LFgwPShZMCk9PntyZXR1cm4gMS8oMS41K01hdGguYWJzKFkwKS8yMCl9O2lmKFYxPT09InkiKXtpZihSMS5pbmNsdWRlcygidG9wIil8fFIxLmluY2x1ZGVzKCJib3R0b20iKSlpZihSMS5pbmNsdWRlcygidG9wIikmJnExPDB8fFIxLmluY2x1ZGVzKCJib3R0b20iKSYmcTE+MClvMS55PXExO2Vsc2V7bGV0IFkwPXExKlgwKHExKTtvMS55PU1hdGguYWJzKFkwKTxNYXRoLmFicyhxMSk/WTA6cTF9fWVsc2UgaWYoVjE9PT0ieCIpe2lmKFIxLmluY2x1ZGVzKCJsZWZ0Iil8fFIxLmluY2x1ZGVzKCJyaWdodCIpKWlmKFIxLmluY2x1ZGVzKCJsZWZ0IikmJlgxPDB8fFIxLmluY2x1ZGVzKCJyaWdodCIpJiZYMT4wKW8xLng9WDE7ZWxzZXtsZXQgWTA9WDEqWDAoWDEpO28xLng9TWF0aC5hYnMoWTApPE1hdGguYWJzKFgxKT9ZMDpYMX19aWYoTWF0aC5hYnMobzEueCk+MHx8TWF0aC5hYnMobzEueSk+MClHMSghMCk7KHA9UzEuY3VycmVudCk9PW51bGx8fHAuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLGAke28xLnh9cHhgKSwodD1TMS5jdXJyZW50KT09bnVsbHx8dC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteSIsYCR7bzEueX1weGApfX0sTjAmJiFWLmpzeCYmTzEhPT0ibG9hZGluZyI/Zy5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiYXJpYS1sYWJlbCI6QjEsImRhdGEtZGlzYWJsZWQiOnYxLCJkYXRhLWNsb3NlLWJ1dHRvbiI6ITAsb25DbGljazp2MXx8IWMxPygpPT57fTooKT0+e2cxKCksVi5vbkRpc21pc3M9PW51bGx8fFYub25EaXNtaXNzLmNhbGwoVixWKX0sY2xhc3NOYW1lOkEwKFI9PW51bGw/dm9pZCAwOlIuY2xvc2VCdXR0b24sVj09bnVsbD92b2lkIDA6KEs9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Sy5jbG9zZUJ1dHRvbil9LChlMT1LMT09bnVsbD92b2lkIDA6SzEuY2xvc2UpIT1udWxsP2UxOmskKTpudWxsLChPMXx8Vi5pY29ufHxWLnByb21pc2UpJiZWLmljb24hPT1udWxsJiYoKEsxPT1udWxsP3ZvaWQgMDpLMVtPMV0pIT09bnVsbHx8Vi5pY29uKT9nLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWljb24iOiIiLGNsYXNzTmFtZTpBMChSPT1udWxsP3ZvaWQgMDpSLmljb24sVj09bnVsbD92b2lkIDA6KFg9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WC5pY29uKX0sVi5wcm9taXNlfHxWLnR5cGU9PT0ibG9hZGluZyImJiFWLmljb24/Vi5pY29ufHxuMSgpOm51bGwsVi50eXBlIT09ImxvYWRpbmciP0swOm51bGwpOm51bGwsZy5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS1jb250ZW50IjoiIixjbGFzc05hbWU6QTAoUj09bnVsbD92b2lkIDA6Ui5jb250ZW50LFY9PW51bGw/dm9pZCAwOihZPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlkuY29udGVudCl9LGcuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtdGl0bGUiOiIiLGNsYXNzTmFtZTpBMChSPT1udWxsP3ZvaWQgMDpSLnRpdGxlLFY9PW51bGw/dm9pZCAwOihxPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOnEudGl0bGUpfSxWLmpzeD9WLmpzeDp0eXBlb2YgVi50aXRsZT09PSJmdW5jdGlvbiI/Vi50aXRsZSgpOlYudGl0bGUpLFYuZGVzY3JpcHRpb24/Zy5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS1kZXNjcmlwdGlvbiI6IiIsY2xhc3NOYW1lOkEwKEMxLHcxLFI9PW51bGw/dm9pZCAwOlIuZGVzY3JpcHRpb24sVj09bnVsbD92b2lkIDA6KEc9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Ry5kZXNjcmlwdGlvbil9LHR5cGVvZiBWLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9WLmRlc2NyaXB0aW9uKCk6Vi5kZXNjcmlwdGlvbik6bnVsbCksZy5pc1ZhbGlkRWxlbWVudChWLmNhbmNlbCk/Vi5jYW5jZWw6Vi5jYW5jZWwmJk01KFYuY2FuY2VsKT9nLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtY2FuY2VsIjohMCxzdHlsZTpWLmNhbmNlbEJ1dHRvblN0eWxlfHxmLG9uQ2xpY2s6KGUpPT57aWYoIU01KFYuY2FuY2VsKSlyZXR1cm47aWYoIWMxKXJldHVybjtWLmNhbmNlbC5vbkNsaWNrPT1udWxsfHxWLmNhbmNlbC5vbkNsaWNrLmNhbGwoVi5jYW5jZWwsZSksZzEoKX0sY2xhc3NOYW1lOkEwKFI9PW51bGw/dm9pZCAwOlIuY2FuY2VsQnV0dG9uLFY9PW51bGw/dm9pZCAwOihOPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOk4uY2FuY2VsQnV0dG9uKX0sVi5jYW5jZWwubGFiZWwpOm51bGwsZy5pc1ZhbGlkRWxlbWVudChWLmFjdGlvbik/Vi5hY3Rpb246Vi5hY3Rpb24mJk01KFYuYWN0aW9uKT9nLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTpWLmFjdGlvbkJ1dHRvblN0eWxlfHxoLG9uQ2xpY2s6KGUpPT57aWYoIU01KFYuYWN0aW9uKSlyZXR1cm47aWYoVi5hY3Rpb24ub25DbGljaz09bnVsbHx8Vi5hY3Rpb24ub25DbGljay5jYWxsKFYuYWN0aW9uLGUpLGUuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47ZzEoKX0sY2xhc3NOYW1lOkEwKFI9PW51bGw/dm9pZCAwOlIuYWN0aW9uQnV0dG9uLFY9PW51bGw/dm9pZCAwOihCPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuYWN0aW9uQnV0dG9uKX0sVi5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiBzOSgpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIGokKCQsUSl7bGV0IEo9e307cmV0dXJuWyQsUV0uZm9yRWFjaCgoSyxYKT0+e2xldCBZPVg9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLEc9WT93JDpUJDtmdW5jdGlvbiBOKEIpe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoVSk9PntKW2Ake3F9LSR7VX1gXT10eXBlb2YgQj09PSJudW1iZXIiP2Ake0J9cHhgOkJ9KX1pZih0eXBlb2YgSz09PSJudW1iZXIifHx0eXBlb2YgSz09PSJzdHJpbmciKU4oSyk7ZWxzZSBpZih0eXBlb2YgSz09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoQik9PntpZihLW0JdPT09dm9pZCAwKUpbYCR7cX0tJHtCfWBdPUc7ZWxzZSBKW2Ake3F9LSR7Qn1gXT10eXBlb2YgS1tCXT09PSJudW1iZXIiP2Ake0tbQl19cHhgOktbQl19KTtlbHNlIE4oRyl9KSxKfXZhciBlOT1nLmZvcndhcmRSZWYoZnVuY3Rpb24oUSxKKXtsZXR7aWQ6SyxpbnZlcnQ6WCxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpHLGNsb3NlQnV0dG9uOk4sY2xhc3NOYW1lOkIsb2Zmc2V0OlUsbW9iaWxlT2Zmc2V0OlYsdGhlbWU6ej0ibGlnaHQiLHJpY2hDb2xvcnM6TCxkdXJhdGlvbjpBLHN0eWxlOkMsdmlzaWJsZVRvYXN0czpIPUQkLHRvYXN0T3B0aW9uczpPLGRpcjpXPXM5KCksZ2FwOng9SSQsaWNvbnM6RSxjb250YWluZXJBcmlhTGFiZWw6Yj0iTm90aWZpY2F0aW9ucyJ9PVEsW2osWjFdPWcudXNlU3RhdGUoW10pLGY9Zy51c2VNZW1vKCgpPT57aWYoSylyZXR1cm4gai5maWx0ZXIoKHYpPT52LnRvYXN0ZXJJZD09PUspO3JldHVybiBqLmZpbHRlcigodik9PiF2LnRvYXN0ZXJJZCl9LFtqLEtdKSxoPWcudXNlTWVtbygoKT0+e3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoW1ldLmNvbmNhdChmLmZpbHRlcigodik9PnYucG9zaXRpb24pLm1hcCgodik9PnYucG9zaXRpb24pKSkpfSxbZixZXSksW2QsQzFdPWcudXNlU3RhdGUoW10pLFskMSxuXT1nLnVzZVN0YXRlKCExKSxbazEsbF09Zy51c2VTdGF0ZSghMSksW1IsSzFdPWcudXNlU3RhdGUoeiE9PSJzeXN0ZW0iP3o6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz8iZGFyayI6ImxpZ2h0IjoibGlnaHQiKSxCMT1nLnVzZVJlZihudWxsKSxWMT1xLmpvaW4oIisiKS5yZXBsYWNlKC9LZXkvZywiIikucmVwbGFjZSgvRGlnaXQvZywiIiksSjE9Zy51c2VSZWYobnVsbCksejE9Zy51c2VSZWYoITEpLE4xPWcudXNlQ2FsbGJhY2soKHYpPT57WjEoKGkpPT57dmFyIF87aWYoISgoXz1pLmZpbmQoKFMpPT5TLmlkPT09di5pZCkpPT1udWxsP3ZvaWQgMDpfLmRlbGV0ZSkpdDEuZGlzbWlzcyh2LmlkKTtyZXR1cm4gaS5maWx0ZXIoKHtpZDpTfSk9PlMhPT12LmlkKX0pfSxbXSk7cmV0dXJuIGcudXNlRWZmZWN0KCgpPT57cmV0dXJuIHQxLnN1YnNjcmliZSgodik9PntpZih2LmRpc21pc3Mpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e1oxKChpKT0+aS5tYXAoKF8pPT5fLmlkPT09di5pZD97Li4uXyxkZWxldGU6ITB9Ol8pKX0pO3JldHVybn1zZXRUaW1lb3V0KCgpPT57Zy5mbHVzaFN5bmMoKCk9PntaMSgoaSk9PntsZXQgXz1pLmZpbmRJbmRleCgoUyk9PlMuaWQ9PT12LmlkKTtpZihfIT09LTEpcmV0dXJuWy4uLmkuc2xpY2UoMCxfKSx7Li4uaVtfXSwuLi52fSwuLi5pLnNsaWNlKF8rMSldO3JldHVyblt2LC4uLmldfSl9KX0pfSl9LFtqXSksZy51c2VFZmZlY3QoKCk9PntpZih6IT09InN5c3RlbSIpe0sxKHopO3JldHVybn1pZih6PT09InN5c3RlbSIpaWYod2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcylLMSgiZGFyayIpO2Vsc2UgSzEoImxpZ2h0Iik7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuO2xldCB2PXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIik7dHJ5e3YuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwoe21hdGNoZXM6aX0pPT57aWYoaSlLMSgiZGFyayIpO2Vsc2UgSzEoImxpZ2h0Iil9KX1jYXRjaChpKXt2LmFkZExpc3RlbmVyKCh7bWF0Y2hlczpffSk9Pnt0cnl7aWYoXylLMSgiZGFyayIpO2Vsc2UgSzEoImxpZ2h0Iil9Y2F0Y2goUyl7Y29uc29sZS5lcnJvcihTKX19KX19LFt6XSksZy51c2VFZmZlY3QoKCk9PntpZihqLmxlbmd0aDw9MSluKCExKX0sW2pdKSxnLnVzZUVmZmVjdCgoKT0+e2xldCB2PShpKT0+e3ZhciBfO2lmKHEuZXZlcnkoKHIpPT5pW3JdfHxpLmNvZGU9PT1yKSl7dmFyIFkxO24oITApLChZMT1CMS5jdXJyZW50KT09bnVsbHx8WTEuZm9jdXMoKX1pZihpLmNvZGU9PT0iRXNjYXBlIiYmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1CMS5jdXJyZW50fHwoKF89QjEuY3VycmVudCk9PW51bGw/dm9pZCAwOl8uY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpKSluKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHYpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix2KX0sW3FdKSxnLnVzZUVmZmVjdCgoKT0+e2lmKEIxLmN1cnJlbnQpcmV0dXJuKCk9PntpZihKMS5jdXJyZW50KUoxLmN1cnJlbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxKMS5jdXJyZW50PW51bGwsejEuY3VycmVudD0hMX19LFtCMS5jdXJyZW50XSksZy5jcmVhdGVFbGVtZW50KCJzZWN0aW9uIix7cmVmOkosImFyaWEtbGFiZWwiOmAke2J9ICR7VjF9YCx0YWJJbmRleDotMSwiYXJpYS1saXZlIjoicG9saXRlIiwiYXJpYS1yZWxldmFudCI6ImFkZGl0aW9ucyB0ZXh0IiwiYXJpYS1hdG9taWMiOiJmYWxzZSIsc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nOiEwfSxoLm1hcCgodixpKT0+e3ZhciBfO2xldFtTLFkxXT12LnNwbGl0KCItIik7aWYoIWYubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiBnLmNyZWF0ZUVsZW1lbnQoIm9sIix7a2V5OnYsZGlyOlc9PT0iYXV0byI/czkoKTpXLHRhYkluZGV4Oi0xLHJlZjpCMSxjbGFzc05hbWU6QiwiZGF0YS1zb25uZXItdG9hc3RlciI6ITAsImRhdGEtc29ubmVyLXRoZW1lIjpSLCJkYXRhLXktcG9zaXRpb24iOlMsImRhdGEteC1wb3NpdGlvbiI6WTEsc3R5bGU6eyItLWZyb250LXRvYXN0LWhlaWdodCI6YCR7KChfPWRbMF0pPT1udWxsP3ZvaWQgMDpfLmhlaWdodCl8fDB9cHhgLCItLXdpZHRoIjpgJHtFJH1weGAsIi0tZ2FwIjpgJHt4fXB4YCwuLi5DLC4uLmokKFUsVil9LG9uQmx1cjoocik9PntpZih6MS5jdXJyZW50JiYhci5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKHIucmVsYXRlZFRhcmdldCkpe2lmKHoxLmN1cnJlbnQ9ITEsSjEuY3VycmVudClKMS5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksSjEuY3VycmVudD1udWxsfX0sb25Gb2N1czoocik9PntpZihyLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZyLnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47aWYoIXoxLmN1cnJlbnQpejEuY3VycmVudD0hMCxKMS5jdXJyZW50PXIucmVsYXRlZFRhcmdldH0sb25Nb3VzZUVudGVyOigpPT5uKCEwKSxvbk1vdXNlTW92ZTooKT0+bighMCksb25Nb3VzZUxlYXZlOigpPT57aWYoIWsxKW4oITEpfSxvbkRyYWdFbmQ6KCk9Pm4oITEpLG9uUG9pbnRlckRvd246KHIpPT57aWYoci50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmci50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZT09PSJmYWxzZSIpcmV0dXJuO2woITApfSxvblBvaW50ZXJVcDooKT0+bCghMSl9LGYuZmlsdGVyKChyKT0+IXIucG9zaXRpb24mJmk9PT0wfHxyLnBvc2l0aW9uPT09dikubWFwKChyLHUpPT57dmFyIG0sVTE7cmV0dXJuIGcuY3JlYXRlRWxlbWVudCh4JCx7a2V5OnIuaWQsaWNvbnM6RSxpbmRleDp1LHRvYXN0OnIsZGVmYXVsdFJpY2hDb2xvcnM6TCxkdXJhdGlvbjoobT1PPT1udWxsP3ZvaWQgMDpPLmR1cmF0aW9uKSE9bnVsbD9tOkEsY2xhc3NOYW1lOk89PW51bGw/dm9pZCAwOk8uY2xhc3NOYW1lLGRlc2NyaXB0aW9uQ2xhc3NOYW1lOk89PW51bGw/dm9pZCAwOk8uZGVzY3JpcHRpb25DbGFzc05hbWUsaW52ZXJ0OlgsdmlzaWJsZVRvYXN0czpILGNsb3NlQnV0dG9uOihVMT1PPT1udWxsP3ZvaWQgMDpPLmNsb3NlQnV0dG9uKSE9bnVsbD9VMTpOLGludGVyYWN0aW5nOmsxLHBvc2l0aW9uOnYsc3R5bGU6Tz09bnVsbD92b2lkIDA6Ty5zdHlsZSx1bnN0eWxlZDpPPT1udWxsP3ZvaWQgMDpPLnVuc3R5bGVkLGNsYXNzTmFtZXM6Tz09bnVsbD92b2lkIDA6Ty5jbGFzc05hbWVzLGNhbmNlbEJ1dHRvblN0eWxlOk89PW51bGw/dm9pZCAwOk8uY2FuY2VsQnV0dG9uU3R5bGUsYWN0aW9uQnV0dG9uU3R5bGU6Tz09bnVsbD92b2lkIDA6Ty5hY3Rpb25CdXR0b25TdHlsZSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpPPT1udWxsP3ZvaWQgMDpPLmNsb3NlQnV0dG9uQXJpYUxhYmVsLHJlbW92ZVRvYXN0Ok4xLHRvYXN0czpmLmZpbHRlcigoRzEpPT5HMS5wb3NpdGlvbj09ci5wb3NpdGlvbiksaGVpZ2h0czpkLmZpbHRlcigoRzEpPT5HMS5wb3NpdGlvbj09ci5wb3NpdGlvbiksc2V0SGVpZ2h0czpDMSxleHBhbmRCeURlZmF1bHQ6RyxnYXA6eCxleHBhbmRlZDokMSxzd2lwZURpcmVjdGlvbnM6US5zd2lwZURpcmVjdGlvbnN9KX0pKX0pKX0pO2Z1bmN0aW9uICQ2KCl7cmV0dXJuIFooZTkse3RoZW1lOiJkYXJrIixwb3NpdGlvbjoiYm90dG9tLWNlbnRlciIsdmlzaWJsZVRvYXN0czo0LGdhcDo4LG9mZnNldDp7Ym90dG9tOjI0fSx0b2FzdE9wdGlvbnM6e3Vuc3R5bGVkOiEwfSxzdHlsZTp7ekluZGV4OjIxNDc0ODM2NDd9LGNvbnRhaW5lckFyaWFMYWJlbDoic2VydmUtc2ltIG5vdGlmaWNhdGlvbnMifSl9ZnVuY3Rpb24gUTYoe3RvYXN0OiR9KXtsZXQgUT0kLnN0YXR1cz09PSJlcnJvciIsSj0kLnN0YXR1cz09PSJ1cGxvYWRpbmciLEs9SiYmJC5wcm9ncmVzcyE9PW51bGwsWD0kLnByb2dyZXNzIT1udWxsP01hdGgucm91bmQoJC5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6InVwbG9hZC10b2FzdCIsY2xhc3NOYW1lOmBmbGV4IHctW21pbigzMjBweCxjYWxjKDEwMHZ3LTMycHgpKV0gZmxleC1jb2wgZ2FwLTEuNSBweC0zIHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tb25vIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSAke1E/InNlbGVjdC10ZXh0IGN1cnNvci10ZXh0Ijoic2VsZWN0LW5vbmUgY3Vyc29yLWRlZmF1bHQifWAsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuM3NdIixzdHlsZTp7YmFja2dyb3VuZDpKPyIjYTViNGZjIjokLnN0YXR1cz09PSJzdWNjZXNzIj8iIzRhZGU4MCI6IiNmODcxNzEifX0pLFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W0omJksmJmBVcGxvYWRpbmcgJHskLm5hbWV94oCmICR7WH0lYCxKJiYhSyYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsaW5nICR7JC5uYW1lfeKApmA6YEFkZGluZyAkeyQubmFtZX3igKZgKSwkLnN0YXR1cz09PSJzdWNjZXNzIiYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsZWQgJHskLm5hbWV9YDpgQWRkZWQgJHskLm5hbWV9IHRvIFBob3Rvc2ApLFEmJmAkeyQubmFtZX06ICR7JC5tZXNzYWdlPz8iVXBsb2FkIGZhaWxlZCJ9YF19KV19KSxKJiZaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGgtWzNweF0gdy1mdWxsIGJnLXdoaXRlLzggcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4iLGNoaWxkcmVuOks/WigiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgYmctYWNjZW50IHJvdW5kZWQtWzJweF0gW3RyYW5zaXRpb246d2lkdGhfMTIwbXNfbGluZWFyXSIsc3R5bGU6e3dpZHRoOmAke1h9JWB9fSk6WigiZGl2Iix7Y2xhc3NOYW1lOiJzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaC1mdWxsIHctWzQwJV0gYmctYWNjZW50IHJvdW5kZWQtWzJweF0ifSl9KV19KX1mdW5jdGlvbiBKNih7d2lkdGg6JCxoZWlnaHQ6USx2aXNpYmxlOkp9KXtyZXR1cm4gWigiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctcGFuZWwtYmctdHJhbnNsdWNlbnQgc2hhZG93LVswXzFweF8ycHhfcmdiYSgwLDAsMCwwLjE4KSwwXzZweF8xOHB4X3JnYmEoMCwwLDAsMC4yOCksaW5zZXRfMF8wXzBfMXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNildIGJhY2tkcm9wLWJsdXItbWQgYmFja2Ryb3Atc2F0dXJhdGUtMTUwIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7b3BhY2l0eTpKPzE6MCx0cmFuc2Zvcm06YHRyYW5zbGF0ZVkoJHtKPzA6NH1weCkgc2NhbGUoJHtKPzE6MC45Nn0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjoib3BhY2l0eSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCB0cmFuc2Zvcm0gMjIwbXMgY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkifSxjaGlsZHJlbjpbTWF0aC5yb3VuZCgkKSwiICIsWigic3BhbiIse2NsYXNzTmFtZToib3BhY2l0eS02MCBteC0wLjUiLGNoaWxkcmVuOiLDlyJ9KSwiICIsTWF0aC5yb3VuZChRKV19KX1mdW5jdGlvbiBaNih7c3RyZWFtaW5nOiR9KXtsZXQgUT0kPyIjNGFkZTgwIjoiIzhlOGU5MyI7cmV0dXJuIFooInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJzdHJlYW0tc3RhdHVzLXBpbGwiLGNsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC1bNXB4XSB0ZXh0LVsxMnB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6UX0sImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2hpbGRyZW46W1ooInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMThzX2Vhc2VdIixzdHlsZTp7YmFja2dyb3VuZDpRfX0pLCQ/ImxpdmUiOiJjb25uZWN0aW5nIl19KX1mdW5jdGlvbiB2JCgkLFEsSil7bGV0IEs9Si5sYXQqTWF0aC5QSS8xODAsWD0oJC1KLmxhdCkqTWF0aC5QSS8xODA7cmV0dXJue3g6KFEtSi5sbmcpKk1hdGguUEkvMTgwKk1hdGguY29zKEspKjYzNzEwMDAsejotWCo2MzcxMDAwfX1mdW5jdGlvbiBSJCgkLFEsSil7bGV0IEs9Si5sYXQqTWF0aC5QSS8xODAsWD0tUS82MzcxMDAwKigxODAvTWF0aC5QSSksWT0kLyg2MzcxMDAwKk1hdGguY29zKEspKSooMTgwL01hdGguUEkpO3JldHVybntsYXQ6Si5sYXQrWCxsbmc6Si5sbmcrWX19ZnVuY3Rpb24gZyQoJCxRLEosSyxYKXtsZXQgWT1YKlgscT1ZKlgsRz0oTixCLFUsVik9PjAuNSooMipCKygtTitVKSpYKygyKk4tNSpCKzQqVS1WKSpZKygtTiszKkItMypVK1YpKnEpO3JldHVybnt4OkcoJC54LFEueCxKLngsSy54KSx6OkcoJC56LFEueixKLnosSy56KSx5OkcoJC55LFEueSxKLnksSy55KSxyYXdBbHQ6RygkLnJhd0FsdCxRLnJhd0FsdCxKLnJhd0FsdCxLLnJhd0FsdCl9fWZ1bmN0aW9uIGgkKCQsUSxKKXtpZigkLmxlbmd0aDwyKXJldHVybiAkLnNsaWNlKCk7bGV0IEs9W10sWD0kLmxlbmd0aCxZPUo/WDpYLTE7Zm9yKGxldCBxPTA7cTxZO3ErKyl7bGV0IEc9JFtKPyhxLTErWCklWDpNYXRoLm1heCgwLHEtMSldLE49JFtxJVhdLEI9JFsocSsxKSVYXSxVPSRbSj8ocSsyKSVYOk1hdGgubWluKFgtMSxxKzIpXSxWPUIueC1OLngsej1CLnotTi56LEw9TWF0aC5oeXBvdChWLHopLEE9TWF0aC5tYXgoMixNYXRoLmNlaWwoTC9RKSk7Zm9yKGxldCBDPTA7QzxBO0MrKyl7bGV0IEg9Qy9BO0sucHVzaChnJChHLE4sQixVLEgpKX19aWYoIUopSy5wdXNoKCRbWC0xXSk7cmV0dXJuIEt9ZnVuY3Rpb24gSzYoJCl7aWYoJC53YXlwb2ludHMubGVuZ3RoPDIpdGhyb3cgRXJyb3IoYFRyYWlsICR7JC5pZH0gbmVlZHMgYXQgbGVhc3QgMiB3YXlwb2ludHNgKTtsZXQgUT17bGF0OiQud2F5cG9pbnRzLnJlZHVjZSgoQyxIKT0+QytILmxhdCwwKS8kLndheXBvaW50cy5sZW5ndGgsbG5nOiQud2F5cG9pbnRzLnJlZHVjZSgoQyxIKT0+QytILmxuZywwKS8kLndheXBvaW50cy5sZW5ndGh9LEo9JC53YXlwb2ludHMubWFwKChDKT0+Qy5hbHQ/PzApLEs9TWF0aC5taW4oLi4uSiksWD1NYXRoLm1heCguLi5KKSxZPSQud2F5cG9pbnRzLm1hcCgoQyk9PntsZXR7eDpILHo6T309diQoQy5sYXQsQy5sbmcsUSksVz1DLmFsdD8/MDtyZXR1cm57eDpILHo6Tyx5OlctSyxyYXdBbHQ6V319KSxxPWgkKFksOCwhISQubG9vcCksRz1bXSxOPTA7Zm9yKGxldCBDPTA7QzxxLmxlbmd0aDtDKyspe2xldCBIPXFbQ107aWYoQz4wKXtsZXQgRT1xW0MtMV07Tis9TWF0aC5oeXBvdChILngtRS54LEguei1FLnosSC55LUUueSl9bGV0e2xhdDpPLGxuZzpXfT1SJChILngsSC56LFEpLHg9TWF0aC5tYXgoMCxILnkpO0cucHVzaCh7eDpILngsejpILnoseTp4LGFyYzpOLGxhdDpPLGxuZzpXfSl9bGV0IEI9MS8wLFU9LTEvMCxWPTEvMCx6PS0xLzAsTD0xLzAsQT0tMS8wO2ZvcihsZXQgQyBvZiBHKXtpZihDLng8QilCPUMueDtpZihDLng+VSlVPUMueDtpZihDLno8VilWPUMuejtpZihDLno+eil6PUMuejtpZihDLnk8TClMPUMueTtpZihDLnk+QSlBPUMueX1yZXR1cm57dHJhaWw6JCxvcmlnaW46USxwb2ludHM6Ryx0b3RhbERpc3RhbmNlOkdbRy5sZW5ndGgtMV0uYXJjLGJvdW5kczp7eDpbQixVXSx5OltMLEFdLHo6W1Ysel19LHJhd01pbkFsdDpLLHJhd01heEFsdDpYfX1mdW5jdGlvbiBnMCgkLFEpe2xldCBKPSQudG90YWxEaXN0YW5jZTtpZihKPT09MClyZXR1cm4gJC5wb2ludHNbMF07bGV0IEs9UTtpZigkLnRyYWlsLmxvb3ApSz0oSyVKK0opJUo7ZWxzZXtpZihLPD0wKXJldHVybiAkLnBvaW50c1swXTtpZihLPj1KKXJldHVybiAkLnBvaW50c1skLnBvaW50cy5sZW5ndGgtMV19bGV0IFg9MCxZPSQucG9pbnRzLmxlbmd0aC0xO3doaWxlKFgrMTxZKXtsZXQgVT1YK1k+Pj4xO2lmKCQucG9pbnRzW1VdLmFyYzw9SylYPVU7ZWxzZSBZPVV9bGV0IHE9JC5wb2ludHNbWF0sRz0kLnBvaW50c1tZXSxOPUcuYXJjLXEuYXJjLEI9Tj09PTA/MDooSy1xLmFyYykvTjtyZXR1cm57eDpxLngrKEcueC1xLngpKkIsejpxLnorKEcuei1xLnopKkIseTpxLnkrKEcueS1xLnkpKkIsYXJjOkssbGF0OnEubGF0KyhHLmxhdC1xLmxhdCkqQixsbmc6cS5sbmcrKEcubG5nLXEubG5nKSpCfX1mdW5jdGlvbiBNMygkKXtzd2l0Y2goJCl7Y2FzZSJ3YWxrIjpyZXR1cm4gMS40O2Nhc2UicnVuIjpyZXR1cm4gMztjYXNlImN5Y2xlIjpyZXR1cm4gNS41O2Nhc2UiZHJpdmUiOnJldHVybiAxMy40fX12YXIgZiQ9W3tsYXQ6MzcuMzMyNzIsbG5nOi0xMjIuMDA4MzMsYWx0OjQ5fSx7bGF0OjM3LjMzMzA5LGxuZzotMTIyLjAwNzM1LGFsdDo0OH0se2xhdDozNy4zMzM3Myxsbmc6LTEyMi4wMDY2MyxhbHQ6NDl9LHtsYXQ6MzcuMzM0NTQsbG5nOi0xMjIuMDA2MjcsYWx0OjQ5fSx7bGF0OjM3LjMzNTQsbG5nOi0xMjIuMDA2MzMsYWx0OjQ5fSx7bGF0OjM3LjMzNjE4LGxuZzotMTIyLjAwNjc5LGFsdDo0NX0se2xhdDozNy4zMzY3NSxsbmc6LTEyMi4wMDc1OSxhbHQ6NDV9LHtsYXQ6MzcuMzM3MDQsbG5nOi0xMjIuMDA4NjEsYWx0OjQ2fSx7bGF0OjM3LjMzNjk4LGxuZzotMTIyLjAwOTY5LGFsdDo0OH0se2xhdDozNy4zMzY2Mixsbmc6LTEyMi4wMTA2NixhbHQ6NDh9LHtsYXQ6MzcuMzM1OTgsbG5nOi0xMjIuMDExMzgsYWx0OjQ5fSx7bGF0OjM3LjMzNTE3LGxuZzotMTIyLjAxMTc0LGFsdDo1MH0se2xhdDozNy4zMzQzMSxsbmc6LTEyMi4wMTE2OSxhbHQ6NTB9LHtsYXQ6MzcuMzMzNTQsbG5nOi0xMjIuMDExMjIsYWx0OjUwfSx7bGF0OjM3LjMzMjk2LGxuZzotMTIyLjAxMDQyLGFsdDo1MX0se2xhdDozNy4zMzI2OCxsbmc6LTEyMi4wMDk0LGFsdDo1MH1dLG0kPVt7bGF0OjM3LjgzMjEyLGxuZzotMTIyLjQ4MDY1LGFsdDozMH0se2xhdDozNy44MjkzNyxsbmc6LTEyMi40Nzk3NCxhbHQ6MzB9LHtsYXQ6MzcuODI2NDksbG5nOi0xMjIuNDc5NCxhbHQ6MzB9LHtsYXQ6MzcuODIzNjIsbG5nOi0xMjIuNDc5MDcsYWx0OjQ1fSx7bGF0OjM3LjgyMDc0LGxuZzotMTIyLjQ3ODczLGFsdDo1OX0se2xhdDozNy44MTc4Nixsbmc6LTEyMi40NzgzOSxhbHQ6NjZ9LHtsYXQ6MzcuODE0OTgsbG5nOi0xMjIuNDc4MDYsYWx0OjY2fSx7bGF0OjM3LjgxMjExLGxuZzotMTIyLjQ3NzcyLGFsdDo1OH0se2xhdDozNy44MDkyMyxsbmc6LTEyMi40NzczNCxhbHQ6NDR9LHtsYXQ6MzcuODA5NDksbG5nOi0xMjIuNDc3MyxhbHQ6NDV9LHtsYXQ6MzcuODEyMzYsbG5nOi0xMjIuNDc3NjUsYWx0OjU5fSx7bGF0OjM3LjgxNTI0LGxuZzotMTIyLjQ3Nzk4LGFsdDo2Nn0se2xhdDozNy44MTgxMixsbmc6LTEyMi40NzgzMixhbHQ6NjZ9LHtsYXQ6MzcuODIxLGxuZzotMTIyLjQ3ODY2LGFsdDo1OH0se2xhdDozNy44MjM4Nyxsbmc6LTEyMi40NzksYWx0OjQ0fSx7bGF0OjM3LjgyNjc1LGxuZzotMTIyLjQ3OTMzLGFsdDozMH0se2xhdDozNy44Mjk2Myxsbmc6LTEyMi40Nzk2NyxhbHQ6MzB9LHtsYXQ6MzcuODMyMzMsbG5nOi0xMjIuNDgwNzIsYWx0OjMwfV0scCQ9W3tsYXQ6MzcuODg2NjQsbG5nOi0xMjIuNjI1OTksYWx0OjEyMX0se2xhdDozNy44ODg4Nyxsbmc6LTEyMi42MjMzMixhbHQ6MTM1fSx7bGF0OjM3Ljg5MTE1LGxuZzotMTIyLjYyMTYsYWx0OjE2NH0se2xhdDozNy44OTM1Myxsbmc6LTEyMi42MTkyMSxhbHQ6MTgwfSx7bGF0OjM3Ljg5NDY2LGxuZzotMTIyLjYxNTc3LGFsdDoyMjB9LHtsYXQ6MzcuODk2MzEsbG5nOi0xMjIuNjEyNjgsYWx0OjI3M30se2xhdDozNy44OTkxNyxsbmc6LTEyMi42MTA5OCxhbHQ6MzEzfSx7bGF0OjM3LjkwMTY2LGxuZzotMTIyLjYwODU1LGFsdDozNDJ9LHtsYXQ6MzcuOTAxOTksbG5nOi0xMjIuNjA2MDEsYWx0OjQwOH0se2xhdDozNy45MDMzOSxsbmc6LTEyMi42MDQwMSxhbHQ6NDUwfSx7bGF0OjM3LjkwNjYyLGxuZzotMTIyLjYwMjkxLGFsdDo0NDB9LHtsYXQ6MzcuOTA5NzEsbG5nOi0xMjIuNjAxNzMsYWx0OjQzMn0se2xhdDozNy45MTIxMyxsbmc6LTEyMi42MDAwNyxhbHQ6NDM2fSx7bGF0OjM3LjkxNDM5LGxuZzotMTIyLjU5NzgsYWx0OjQxMH0se2xhdDozNy45MTI4NSxsbmc6LTEyMi41OTUwNCxhbHQ6NDIyfSx7bGF0OjM3LjkxMjc0LGxuZzotMTIyLjU5MjAyLGFsdDo0MjV9LHtsYXQ6MzcuOTE1LGxuZzotMTIyLjU5MDMyLGFsdDo0MTJ9LHtsYXQ6MzcuOTE2MzcsbG5nOi0xMjIuNTg5MDMsYWx0OjQwNn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODU5NSxhbHQ6MzgyfSx7bGF0OjM3LjkxNzQsbG5nOi0xMjIuNTgzOTgsYWx0OjM3Mn0se2xhdDozNy45MTY0Mixsbmc6LTEyMi41ODIzNixhbHQ6MzUyfSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4MDExLGFsdDozNDJ9XSx1JD1be2xhdDo0MC43ODIxNixsbmc6LTczLjk2MjU0LGFsdDozN30se2xhdDo0MC43ODIyMSxsbmc6LTczLjk2MDk4LGFsdDozNn0se2xhdDo0MC43ODMyOCxsbmc6LTczLjk2MDEsYWx0OjM2fSx7bGF0OjQwLjc4NDQsbG5nOi03My45NTkzLGFsdDozNn0se2xhdDo0MC43ODU1LGxuZzotNzMuOTU4NDgsYWx0OjM2fSx7bGF0OjQwLjc4NjY0LGxuZzotNzMuOTU3NzQsYWx0OjM2fSx7bGF0OjQwLjc4NzksbG5nOi03My45NTc2NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg4OTgsbG5nOi03My45NTc5MixhbHQ6MzZ9LHtsYXQ6NDAuNzg4NjgsbG5nOi03My45NTk1MSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4OTcsbG5nOi03My45NjExMixhbHQ6MzZ9LHtsYXQ6NDAuNzg4MzMsbG5nOi03My45NjI1LGFsdDozN30se2xhdDo0MC43ODgyOCxsbmc6LTczLjk2NDE2LGFsdDozN30se2xhdDo0MC43ODgwNSxsbmc6LTczLjk2NTczLGFsdDozNn0se2xhdDo0MC43ODY5MSxsbmc6LTczLjk2NjM2LGFsdDozNn0se2xhdDo0MC43ODU2Nixsbmc6LTczLjk2NjY1LGFsdDozNn0se2xhdDo0MC43ODQ1OCxsbmc6LTczLjk2NjA4LGFsdDozNn0se2xhdDo0MC43ODQwMixsbmc6LTczLjk2NDU5LGFsdDozNn0se2xhdDo0MC43ODMyMixsbmc6LTczLjk2MzM0LGFsdDozN31dLGwkPVt7bGF0OjM3LjU5NjU5LGxuZzotMTIyLjUwMzE2LGFsdDo0fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODUwNSxsbmc6LTEyMi41MDY5OCxhbHQ6OTN9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fV0saDA9W3tpZDoiYXBwbGUtcGFyay1sb29wIixuYW1lOiJBcHBsZSBQYXJrIExvb3AiLGRlc2NyaXB0aW9uOiJDdXBlcnRpbm8g4oCiIGZsYXQgcmluZyByb2FkIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6ZiQsbG9vcDohMH0se2lkOiJnb2xkZW4tZ2F0ZSIsbmFtZToiR29sZGVuIEdhdGUgQ3Jvc3NpbmciLGRlc2NyaXB0aW9uOiJTYW4gRnJhbmNpc2NvIOKAoiBicmlkZ2Ugcm91bmQtdHJpcCIsbW9kZToicnVuIix3YXlwb2ludHM6bSQsbG9vcDohMH0se2lkOiJ0YW0tcmlkZ2UiLG5hbWU6Ik10LiBUYW0gUmlkZ2UiLGRlc2NyaXB0aW9uOiJTdGluc29uIEJlYWNoIOKAoiBTdGVlcCBSYXZpbmUgKyBNYXR0IERhdmlzIGxvb3AiLG1vZGU6IndhbGsiLHdheXBvaW50czpwJCxsb29wOiEwfSx7aWQ6ImNlbnRyYWwtcGFyayIsbmFtZToiUmVzZXJ2b2lyIExvb3AiLGRlc2NyaXB0aW9uOiJDZW50cmFsIFBhcmsg4oCiIDIuNSBrbSIsbW9kZToicnVuIix3YXlwb2ludHM6dSQsbG9vcDohMH0se2lkOiJwY2gtcGFjaWZpY2EiLG5hbWU6IlBhY2lmaWMgQ29hc3QgSHd5IixkZXNjcmlwdGlvbjoiUGFjaWZpY2Eg4oCiIERldmlsJ3MgU2xpZGUgcm91bmQtdHJpcCIsbW9kZToiZHJpdmUiLHdheXBvaW50czpsJCxsb29wOiEwfV07ZnVuY3Rpb24gVjAoe29wZW46JCxvbk9wZW5DaGFuZ2U6USxzdW1tYXJ5OkosY2hpbGRyZW46SyxzdW1tYXJ5Q2xhc3NOYW1lOlg9IiIsYm9keUNsYXNzTmFtZTpZPSJmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHQtMi41IixjbGFzc05hbWU6cT0iIiwuLi5HfSl7cmV0dXJuIFooImRldGFpbHMiLHtvcGVuOiQsb25Ub2dnbGU6KE4pPT5RKE4uY3VycmVudFRhcmdldC5vcGVuKSxjbGFzc05hbWU6YGxlbS1zZWN0aW9uIGJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiAke3F9YCwuLi5HLGNoaWxkcmVuOltaKCJzdW1tYXJ5Iix7Y2xhc3NOYW1lOmBsZW0tdG9nZ2xlIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIHRleHQtd2hpdGUvOTAgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gJHtYfWAsY2hpbGRyZW46W0osWihUMix7b3BlbjokfSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOlksY2hpbGRyZW46S30pXX0pfWZ1bmN0aW9uIFc1KHtsYWJlbDokLHZhbHVlOlEsb3B0aW9uczpKLGRpc2FibGVkOkssb25DaGFuZ2U6WCxjbGFzc05hbWU6WX0pe2xldFtxLEddPU0oITEpLE49SShudWxsKSxCPUkobnVsbCksW1UsVl09TShudWxsKSx6PSgpPT57bGV0IEg9Ti5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighSClyZXR1cm47Vih7dG9wOkguYm90dG9tKzQsbGVmdDpILmxlZnQsbWluV2lkdGg6SC53aWR0aH0pfTtIMCgoKT0+e2lmKHEpeigpfSxbcV0pLEgwKCgpPT57aWYoIXF8fCFVKXJldHVybjtsZXQgSD1CLmN1cnJlbnQ7aWYoIUgpcmV0dXJuO2xldCBPPTgsVz13aW5kb3cuaW5uZXJXaWR0aC1ILm9mZnNldFdpZHRoLU87aWYoVS5sZWZ0PlcpVih7Li4uVSxsZWZ0Ok1hdGgubWF4KE8sVyl9KX0sW3EsVV0pLHkoKCk9PntpZighcSlyZXR1cm47bGV0IEg9KCk9PkcoITEpLE89KHgpPT57bGV0IEU9eC50YXJnZXQ7aWYoIUIuY3VycmVudD8uY29udGFpbnMoRSkmJiFOLmN1cnJlbnQ/LmNvbnRhaW5zKEUpKUgoKX0sVz0oeCk9PntpZighQi5jdXJyZW50Py5jb250YWlucyh4LnRhcmdldCkpeigpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsTyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsVywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixPKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixXLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixIKX19LFtxXSk7bGV0IEw9SSghMSk7eSgoKT0+e2lmKCFxKXtMLmN1cnJlbnQ9ITE7cmV0dXJufWlmKCFVfHxMLmN1cnJlbnQpcmV0dXJuO2xldCBIPUIuY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpO2lmKCFIPy5sZW5ndGgpcmV0dXJuO0wuY3VycmVudD0hMDtsZXQgTz1KLmZpbmRJbmRleCgoVyk9PlcudmFsdWU9PT1RKTtIW01hdGgubWF4KE8sMCldPy5mb2N1cygpfSxbcSxVLEosUV0pO2xldCBBPShIKT0+e2xldCBPPVsuLi5CLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKT8/W11dLFc9Ty5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO2lmKEgua2V5PT09IkFycm93RG93biJ8fEgua2V5PT09IkFycm93VXAiKXtILnByZXZlbnREZWZhdWx0KCk7bGV0IHg9SC5rZXk9PT0iQXJyb3dEb3duIj9NYXRoLm1pbihXKzEsTy5sZW5ndGgtMSk6TWF0aC5tYXgoVy0xLDApO09beF0/LmZvY3VzKCl9ZWxzZSBpZihILmtleT09PSJFc2NhcGUiKUgucHJldmVudERlZmF1bHQoKSxHKCExKSxOLmN1cnJlbnQ/LmZvY3VzKCl9LEM9Si5maW5kKChIKT0+SC52YWx1ZT09PVEpO3JldHVybiBaKFExLHtjaGlsZHJlbjpbWigiYnV0dG9uIix7cmVmOk4sdHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6JCwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpxLGRpc2FibGVkOkssb25DbGljazooKT0+RygoSCk9PiFIKSxjbGFzc05hbWU6YHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCAke1k/PyIifWAsY2hpbGRyZW46Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgdHJ1bmNhdGUiLGNoaWxkcmVuOkM/LmxhYmVsPz9RfSl9KSxxJiZVJiZkNShaKCJkaXYiLHtyZWY6Qixyb2xlOiJsaXN0Ym94IiwiYXJpYS1sYWJlbCI6JCxvbktleURvd246QSxzdHlsZTp7dG9wOlUudG9wLGxlZnQ6VS5sZWZ0LG1pbldpZHRoOlUubWluV2lkdGh9LGNsYXNzTmFtZToiZml4ZWQgbWF4LWgtOTAgb3ZlcmZsb3cteS1hdXRvIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bMTBweF0gcC0xIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgei01MCIsY2hpbGRyZW46Si5tYXAoKEgpPT5aKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOkgudmFsdWU9PT1RLG9uQ2xpY2s6KCk9PntYKEgudmFsdWUpLEcoITEpLE4uY3VycmVudD8uZm9jdXMoKX0sY2xhc3NOYW1lOmBibG9jayB3LWZ1bGwgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIHB4LTIuNSBweS0xIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctd2hpdGUvOCBmb2N1cy12aXNpYmxlOmJnLXdoaXRlLzggb3V0bGluZS1ub25lICR7SC52YWx1ZT09PVE/InRleHQtYWNjZW50IjoiIn1gLGNoaWxkcmVuOkgubGFiZWx9LEgudmFsdWUpKX0pLGRvY3VtZW50LmJvZHkpXX0pfXZhciBkJD02NTAsVzM9WzEsMiw1LDIwXSxYNj0xMDAwLF8zPXtzdGF0dXM6ImlkbGUiLGFyYzowLGVsYXBzZWRNczowfTtmdW5jdGlvbiBONih7dWRpZDokLGV4ZWM6UX0pe2xldFtKLEtdPU0oITEpLFtYLFldPU0oaDBbMF0uaWQpLFtxLEddPU0oaDBbMF0ubW9kZSksW04sQl09TSgxKSxbVSxWXT1NKF8zKSxbeixMXT1NKG51bGwpLEE9RDEoKCk9PmgwLmZpbmQoKGwpPT5sLmlkPT09WCk/P2gwWzBdLFtYXSksQz1EMSgoKT0+SzYoQSksW0FdKSxIPUkoMCksTz1JKCJpZGxlIiksVz1JKE0zKHEpKk4pLHg9SSgwKSxFPUkoQyksYj1JKG51bGwpO3koKCk9PntXLmN1cnJlbnQ9TTMocSkqTn0sW3EsTl0pO2xldCBqPUkobnVsbCk7eSgoKT0+e2xldCBsPUUuY3VycmVudCxSPUguY3VycmVudDtpZihFLmN1cnJlbnQ9QyxsJiZsIT09QylqLmN1cnJlbnQ9byQobCxSLEMscGVyZm9ybWFuY2Uubm93KCkpO0guY3VycmVudD0wLHguY3VycmVudD0wLE8uY3VycmVudD0iaWRsZSIsYi5jdXJyZW50PW51bGwsVihfMyl9LFtDXSk7bGV0IFoxPUkoMCksZj1JKG51bGwpLGg9SShudWxsKTt5KCgpPT57bGV0IGw9MCxSPShLMSk9PntsZXQgQjE9Zi5jdXJyZW50LFYxPUIxPT1udWxsPzE2Ok1hdGgubWluKDY0LEsxLUIxKTtpZihmLmN1cnJlbnQ9SzEsWjEuY3VycmVudD0oWjEuY3VycmVudCtWMSowLjAwMDEyKSUoTWF0aC5QSSoyKSxPLmN1cnJlbnQ9PT0icGxheWluZyIpe2xldCB6MT1XLmN1cnJlbnQqVjEvMTAwMDtILmN1cnJlbnQrPXoxLHguY3VycmVudCs9VjE7bGV0IE4xPUUuY3VycmVudC50b3RhbERpc3RhbmNlO2lmKCFFLmN1cnJlbnQudHJhaWwubG9vcCYmSC5jdXJyZW50Pj1OMSlILmN1cnJlbnQ9TjEsTy5jdXJyZW50PSJwYXVzZWQiLFYoe3N0YXR1czoicGF1c2VkIixhcmM6TjEsZWxhcHNlZE1zOnguY3VycmVudH0pfWxldCBKMT1oLmN1cnJlbnQ7aWYoSjEpe2xldCB6MT1FLmN1cnJlbnQsTjE9bnVsbCx2PWouY3VycmVudDtpZih2KXtsZXQgaT0oSzEtdi5zdGFydE1zKS9kJDtpZihpPj0xKWouY3VycmVudD1udWxsO2Vsc2V7bGV0IF89YSQoaSk7ejE9biQodixfKSxOMT17eDp2LnByZXZNYXJrZXIueCsodi5uZXh0TWFya2VyLngtdi5wcmV2TWFya2VyLngpKl8seTp2LnByZXZNYXJrZXIueSsodi5uZXh0TWFya2VyLnktdi5wcmV2TWFya2VyLnkpKl8sejp2LnByZXZNYXJrZXIueisodi5uZXh0TWFya2VyLnotdi5wcmV2TWFya2VyLnopKl99fX1zJChKMSx6MSxILmN1cnJlbnQsWjEuY3VycmVudCxLMSxPLmN1cnJlbnQ9PT0icGxheWluZyIsTjEpfWw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFIpfTtyZXR1cm4gbD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUiksKCk9PmNhbmNlbEFuaW1hdGlvbkZyYW1lKGwpfSxbXSkseSgoKT0+e2xldCBsPXNldEludGVydmFsKCgpPT57aWYoTy5jdXJyZW50PT09InBsYXlpbmciKVYoe3N0YXR1czoicGxheWluZyIsYXJjOkguY3VycmVudCxlbGFwc2VkTXM6eC5jdXJyZW50fSl9LDI1MCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwobCl9LFtdKSx5KCgpPT57aWYoVS5zdGF0dXMhPT0icGxheWluZyIpcmV0dXJuO2xldCBsPSExLFI9MCxLMT1udWxsLEIxPWFzeW5jKCk9PntpZihsfHxLMSlyZXR1cm47bGV0IEoxPURhdGUubm93KCk7aWYoSjEtUjxYNilyZXR1cm47Uj1KMTtsZXQgejE9ZzAoRS5jdXJyZW50LEguY3VycmVudCksTjE9YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke3oxLmxhdC50b0ZpeGVkKDcpfSwke3oxLmxuZy50b0ZpeGVkKDcpfWA7SzE9UShOMSkudGhlbigodik9PntpZihsKXJldHVybjtpZih2LmV4aXRDb2RlIT09MClMKEI2KHYuc3RkZXJyKXx8InNpbWN0bCBsb2NhdGlvbiBzZXQgZmFpbGVkIik7ZWxzZSBMKG51bGwpfSkuY2F0Y2goKHYpPT57aWYoIWwpTCh2IGluc3RhbmNlb2YgRXJyb3I/di5tZXNzYWdlOlN0cmluZyh2KSl9KS5maW5hbGx5KCgpPT57SzE9bnVsbH0pfTtCMSgpO2xldCBWMT1zZXRJbnRlcnZhbChCMSxYNik7cmV0dXJuKCk9PntsPSEwLGNsZWFySW50ZXJ2YWwoVjEpfX0sW1Uuc3RhdHVzLCQsUV0pO2xldCBkPVQoKCk9PntpZihPLmN1cnJlbnQ9PT0icGxheWluZyIpe08uY3VycmVudD0icGF1c2VkIixWKChsKT0+KHsuLi5sLHN0YXR1czoicGF1c2VkIn0pKTtyZXR1cm59aWYoSC5jdXJyZW50Pj1FLmN1cnJlbnQudG90YWxEaXN0YW5jZSYmIUUuY3VycmVudC50cmFpbC5sb29wKUguY3VycmVudD0wLHguY3VycmVudD0wO2lmKGIuY3VycmVudD09bnVsbCl7bGV0IGw9ZzAoRS5jdXJyZW50LEguY3VycmVudCk7Yi5jdXJyZW50PXtsYXQ6bC5sYXQsbG5nOmwubG5nfX1PLmN1cnJlbnQ9InBsYXlpbmciLFYoKGwpPT4oey4uLmwsc3RhdHVzOiJwbGF5aW5nIixhcmM6SC5jdXJyZW50LGVsYXBzZWRNczp4LmN1cnJlbnR9KSl9LFtdKSxDMT1UKCgpPT57Ty5jdXJyZW50PSJpZGxlIixILmN1cnJlbnQ9MCx4LmN1cnJlbnQ9MCxWKF8zKTtsZXQgbD1iLmN1cnJlbnQ7Yi5jdXJyZW50PW51bGw7bGV0IFI9bD9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7bC5sYXQudG9GaXhlZCg3KX0sJHtsLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IGNsZWFyYDtRKFIpLnRoZW4oKEsxKT0+e2lmKEsxLmV4aXRDb2RlIT09MClMKEI2KEsxLnN0ZGVycil8fG51bGwpO2Vsc2UgTChudWxsKX0pfSxbUSwkXSksJDE9VCgobCk9PntZKGwpO2xldCBSPWgwLmZpbmQoKEsxKT0+SzEuaWQ9PT1sKTtpZihSKUcoUi5tb2RlKX0sW10pO3koKCk9PigpPT57aWYoTy5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgbD1iLmN1cnJlbnQsUj1sP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtsLmxhdC50b0ZpeGVkKDcpfSwke2wubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO1EoUikuY2F0Y2goKCk9Pnt9KX0sW1EsJF0pO2xldCBuPVUuc3RhdHVzPT09InBsYXlpbmciLGsxPW4/YCR7RDMoVS5hcmMpfSDCtyAke0c2KFUuZWxhcHNlZE1zKX1gOkQzKEMudG90YWxEaXN0YW5jZSk7cmV0dXJuIFooVjAse29wZW46Sixvbk9wZW5DaGFuZ2U6SyxzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b19taW5tYXgoMCwxZnIpX2F1dG9dIFtjb250YWluZXItdHlwZTppbmxpbmUtc2l6ZV0gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpaKFExLHtjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiTG9jYXRpb24ifSksSj9aKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzIjohMCxjbGFzc05hbWU6Im1pbi13LTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgbWF4LXctZnVsbCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMnMsYm94LXNoYWRvd18wLjJzXSIsc3R5bGU6e2JhY2tncm91bmQ6bj8iIzRhZGU4MCI6Qy50b3RhbERpc3RhbmNlPjA/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6InRyYW5zcGFyZW50Iixib3hTaGFkb3c6bj8iMCAwIDZweCByZ2JhKDc0LDIyMiwxMjgsMC43KSI6Im5vbmUifX0pLFooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMiLGNoaWxkcmVuOmsxfSksIW4mJlooInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWwiOiEwLGNsYXNzTmFtZToic2hyaW5rLTAiLGNoaWxkcmVuOiJ0b3RhbCJ9KV19KTpaKCJzcGFuIix7fSldfSksY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgYmxvY2siLGNoaWxkcmVuOltaKFc1LHtsYWJlbDoiVHJhaWwiLHZhbHVlOlgsb25DaGFuZ2U6JDEsb3B0aW9uczpoMC5tYXAoKGwpPT4oe3ZhbHVlOmwuaWQsbGFiZWw6bC5uYW1lfSkpLGNsYXNzTmFtZToiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMS41IHByLVsyNnB4XSBwbC0yIHctZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGJvcmRlci1jb2xvcl8wLjEyc10gaG92ZXI6Ymctd2hpdGUvWzAuMDddIGhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE2KV0gZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOmJnLXdoaXRlL1swLjA4XSBmb2N1czpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4yNCldIn0pLFooInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIHJpZ2h0LVs5cHhdIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiBwb2ludGVyLWV2ZW50cy1ub25lIGZsZXggaXRlbXMtY2VudGVyIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpaKFQyLHtvcGVuOiExfSl9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOkEuZGVzY3JpcHRpb259KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCByb3VuZGVkLVsxMHB4XSBvdmVyZmxvdy1oaWRkZW4gYmctWyMwYTBhMGNdIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIFthc3BlY3QtcmF0aW86MTYvMTFdIixjaGlsZHJlbjpbWigiY2FudmFzIix7cmVmOmgsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJsb2NrIn0pLFoociQse3ByZXBhcmVkOkN9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJfMWZyXzFmcl0gZ2FwLTEuNSIsY2hpbGRyZW46W1ooUDMse2xhYmVsOiJEaXN0YW5jZSIsdmFsdWU6RDMoVS5hcmMpfSksWihQMyx7bGFiZWw6IlBhY2UiLHZhbHVlOmUkKFcuY3VycmVudCl9KSxaKFAzLHtsYWJlbDoiRWxhcHNlZCIsdmFsdWU6RzYoVS5lbGFwc2VkTXMpfSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0xLjUiLGNoaWxkcmVuOltaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6ZCxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMi41IGJvcmRlci1ub25lIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSAke24/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0ifWAsImFyaWEtcHJlc3NlZCI6bix0aXRsZTpuPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOltuP1ooSjMse30pOloodzIse30pLFooInNwYW4iLHtjaGlsZHJlbjpuPyJQYXVzZSI6IlBsYXkifSldfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkMxLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wNl0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvMjAgZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIixkaXNhYmxlZDpVLnN0YXR1cz09PSJpZGxlIiYmVS5hcmM9PT0wLHRpdGxlOiJTdG9wIGFuZCBjbGVhciBzaW11bGF0ZWQgbG9jYXRpb24iLGNoaWxkcmVuOltaKEUyLHt9KSxaKCJzcGFuIix7Y2hpbGRyZW46IlN0b3AifSldfSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOlooYyQse2FyaWFMYWJlbDoiVHJhbnNwb3J0IG1vZGUiLHZhbHVlOnEsb25DaGFuZ2U6KGwpPT5HKGwpLG9wdGlvbnM6W3t2YWx1ZToid2FsayIsbGFiZWw6IldhbGsiLGljb246WihLMyx7fSl9LHt2YWx1ZToicnVuIixsYWJlbDoiUnVuIixpY29uOlooWDMse30pfSx7dmFsdWU6ImN5Y2xlIixsYWJlbDoiQ3ljbGUiLGljb246WihZMyx7fSl9LHt2YWx1ZToiZHJpdmUiLGxhYmVsOiJEcml2ZSIsaWNvbjpaKHEzLHt9KX1dfSl9KSxaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntsZXQgbD1XMy5pbmRleE9mKE4pLFI9VzNbKGwrMSklVzMubGVuZ3RoXTtCKFIpfSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIHB4LTIuNSBib3JkZXIgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIG1pbi13LVs1NnB4XSBhY3RpdmU6c2NhbGUtWzAuOTddICR7Tj4xPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gaG92ZXI6Ymctd2hpdGUvWzAuODhdIGhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gaG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBob3ZlcjpiZy13aGl0ZS9bMC4wOV0gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgU3BlZWQgJHtOfcOXIOKAlCB0YXAgdG8gY3ljbGVgLHRpdGxlOmBTcGVlZCAke059w5cg4oCUIHRhcCB0byBjeWNsZWAsY2hpbGRyZW46W1ooWjMse30pLE4+MSYmWigic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIFtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXNdIixjaGlsZHJlbjpbTiwiw5ciXX0pXX0pXX0pLHomJlooImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46en0pXX0pfXZhciBQMz1TMChmdW5jdGlvbih7bGFiZWw6USx2YWx1ZTpKfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJnLXdoaXRlL1swLjAzXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSByb3VuZGVkLW1kIHB5LVs1cHhdIHB4LVs3cHhdIG1pbi13LTAiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzlweF0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjA2ZW1dIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOlF9KSxaKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpKfSldfSl9KTtmdW5jdGlvbiBjJCh7dmFsdWU6JCxvbkNoYW5nZTpRLG9wdGlvbnM6SixhcmlhTGFiZWw6S30pe3JldHVybiBaKCJkaXYiLHtyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOkssY2xhc3NOYW1lOiJmbGV4IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBwLTAuNSBnYXAtMC41IixjaGlsZHJlbjpKLm1hcCgoWCk9PntsZXQgWT1YLnZhbHVlPT09JDtyZXR1cm4gWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5RKFgudmFsdWUpLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gcHktWzVweF0gcHgtMiB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSBtaW4taC1bMjJweF0gJHtZPyJiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvNjAgaG92ZXI6Ymctd2hpdGUvWzAuMDVdIGhvdmVyOnRleHQtd2hpdGUvOTAifWAsImFyaWEtcHJlc3NlZCI6WSwiYXJpYS1sYWJlbCI6WC5pY29uP1gubGFiZWw6dm9pZCAwLHRpdGxlOlguaWNvbj9YLmxhYmVsOnZvaWQgMCxjaGlsZHJlbjpYLmljb24/P1gubGFiZWx9LFgudmFsdWUpfSl9KX1mdW5jdGlvbiByJCh7cHJlcGFyZWQ6JH0pe2lmKCQucmF3TWF4QWx0LSQucmF3TWluQWx0PDUpcmV0dXJuIG51bGw7cmV0dXJuIFooUTEse2NoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIGxlZnQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbWihYNSx7ZGlyOiJ1cCJ9KSwiICIsVjYoJC5yYXdNYXhBbHQpXX0pLFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgcmlnaHQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbWihYNSx7ZGlyOiJkb3duIn0pLCIgIixWNigkLnJhd01pbkFsdCldfSldfSl9dmFyIFk2PTE0MDtmdW5jdGlvbiBxNigkLFEpe2xldCBKPUFycmF5KFEpO2ZvcihsZXQgSz0wO0s8UTtLKyspe2xldCBYPVE9PT0xPzA6Sy8oUS0xKSxZPWcwKCQsWCokLnRvdGFsRGlzdGFuY2UpO0pbS109e3g6WS54LHk6WS55LHo6WS56fX1yZXR1cm4gSn1mdW5jdGlvbiBvJCgkLFEsSixLKXtsZXQgWD0oJC5ib3VuZHMueFswXSskLmJvdW5kcy54WzFdKS8yLFk9KCQuYm91bmRzLnpbMF0rJC5ib3VuZHMuelsxXSkvMixxPSQuYm91bmRzLnlbMF0sRz1NYXRoLm1heCgxLCQuYm91bmRzLnhbMV0tJC5ib3VuZHMueFswXSwkLmJvdW5kcy56WzFdLSQuYm91bmRzLnpbMF0pLE49KEouYm91bmRzLnhbMF0rSi5ib3VuZHMueFsxXSkvMixCPShKLmJvdW5kcy56WzBdK0ouYm91bmRzLnpbMV0pLzIsVT1KLmJvdW5kcy55WzBdLHo9TWF0aC5tYXgoMSxKLmJvdW5kcy54WzFdLUouYm91bmRzLnhbMF0sSi5ib3VuZHMuelsxXS1KLmJvdW5kcy56WzBdKS9HLEE9cTYoJCxZNikubWFwKChqKT0+KHt4OihqLngtWCkqeitOLHk6KGoueS1xKSp6K1Usejooai56LVkpKnorQn0pKSxDPXE2KEosWTYpLEg9KCQudHJhaWwubG9vcHx8Si50cmFpbC5sb29wKT8/ITEsTz1pJChBLEMsSCksVz1nMCgkLFEpLHg9e3g6KFcueC1YKSp6K04seTooVy55LXEpKnorVSx6OihXLnotWSkqeitCfSxFPWcwKEosMCksYj17eDpFLngseTpFLnksejpFLnp9O3JldHVybntmcm9tOiQsdG86Sixmcm9tUHRzOkEsdG9QdHM6TyxwcmV2TWFya2VyOngsbmV4dE1hcmtlcjpiLHN0YXJ0TXM6S319ZnVuY3Rpb24gaSQoJCxRLEope2xldCBLPSQubGVuZ3RoLFg9MS8wLFk9MCxxPSExLEc9W1EsWy4uLlFdLnJldmVyc2UoKV07Zm9yKGxldCBVPTA7VTxHLmxlbmd0aDtVKyspe2xldCBWPUdbVV0sej1KP0s6MTtmb3IobGV0IEw9MDtMPHo7TCsrKXtsZXQgQT0wO2ZvcihsZXQgQz0wO0M8SztDKyspe2xldCBIPSRbQ10sTz1WWyhDK0wpJUtdLFc9SC54LU8ueCx4PUgueS1PLnksRT1ILnotTy56O2lmKEErPVcqVyt4KngrRSpFLEE+PVgpYnJlYWt9aWYoQTxYKVg9QSxZPUwscT1VPT09MX19bGV0IE49cT9bLi4uUV0ucmV2ZXJzZSgpOlEsQj1BcnJheShLKTtmb3IobGV0IFU9MDtVPEs7VSsrKUJbVV09TlsoVStZKSVLXTtyZXR1cm4gQn1mdW5jdGlvbiBuJCgkLFEpe2xldCBKPSQuZnJvbVB0cy5sZW5ndGgsSz1BcnJheShKKSxYPTAsWT1udWxsLHE9MS8wLEc9LTEvMCxOPTEvMCxCPS0xLzAsVT0xLzAsVj0tMS8wO2ZvcihsZXQgej0wO3o8Sjt6Kyspe2xldCBMPSQuZnJvbVB0c1t6XSxBPSQudG9QdHNbel0sQz1MLngrKEEueC1MLngpKlEsSD1MLnkrKEEueS1MLnkpKlEsTz1MLnorKEEuei1MLnopKlE7aWYoWSl7bGV0IHg9Qy1ZLngsRT1ILVkueSxiPU8tWS56O1grPU1hdGguc3FydCh4KngrRSpFK2IqYil9bGV0IFc9e3g6Qyx5OkgsejpPLGFyYzpYLGxhdDowLGxuZzowfTtpZihLW3pdPVcsWT1XLEM8cSlxPUM7aWYoQz5HKUc9QztpZihIPE4pTj1IO2lmKEg+QilCPUg7aWYoTzxVKVU9TztpZihPPlYpVj1PfXJldHVybnt0cmFpbDokLnRvLnRyYWlsLG9yaWdpbjokLnRvLm9yaWdpbixwb2ludHM6Syx0b3RhbERpc3RhbmNlOlgsYm91bmRzOnt4OltxLEddLHk6W04sQl0sejpbVSxWXX0scmF3TWluQWx0OiQudG8ucmF3TWluQWx0KygkLmZyb20ucmF3TWluQWx0LSQudG8ucmF3TWluQWx0KSooMS1RKSxyYXdNYXhBbHQ6JC50by5yYXdNYXhBbHQrKCQuZnJvbS5yYXdNYXhBbHQtJC50by5yYXdNYXhBbHQpKigxLVEpfX1mdW5jdGlvbiBhJCgkKXtyZXR1cm4gJDwwLjU/MiokKiQ6MS1NYXRoLnBvdygtMiokKzIsMikvMn1mdW5jdGlvbiBzJCgkLFEsSixLLFgsWSxxKXtsZXQgRz0kLmdldENvbnRleHQoIjJkIik7aWYoIUcpcmV0dXJuO2xldHtjbGllbnRXaWR0aDpOLGNsaWVudEhlaWdodDpCfT0kO2lmKE49PT0wfHxCPT09MClyZXR1cm47bGV0IFU9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE6MSxWPU1hdGgucm91bmQoTipVKSx6PU1hdGgucm91bmQoQipVKTtpZigkLndpZHRoIT09Vnx8JC5oZWlnaHQhPT16KSQud2lkdGg9ViwkLmhlaWdodD16O0cuc2V0VHJhbnNmb3JtKFUsMCwwLFUsMCwwKSxHLmNsZWFyUmVjdCgwLDAsTixCKTtsZXQgTD1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KE4qMC41LEIqMC41NSxNYXRoLm1pbihOLEIpKjAuMixOKjAuNSxCKjAuNTUsTWF0aC5tYXgoTixCKSowLjg1KTtMLmFkZENvbG9yU3RvcCgwLCIjMWExYTFkIiksTC5hZGRDb2xvclN0b3AoMSwiIzBhMGEwYyIpLEcuZmlsbFN0eWxlPUwsRy5maWxsUmVjdCgwLDAsTixCKSx0JChHLE4sQik7bGV0e3BvaW50czpBLGJvdW5kczpDfT1RO2lmKEEubGVuZ3RoPDIpcmV0dXJuO2xldCBIPTI4Kk1hdGguUEkvMTgwLE89TWF0aC5zaW4oSCksVz1NYXRoLmNvcyhIKSx4PU1hdGguc2luKEspLEU9TWF0aC5jb3MoSyksYj0oQy54WzBdK0MueFsxXSkvMixqPShDLnpbMF0rQy56WzFdKS8yLFoxPUMueFsxXS1DLnhbMF0sZj1DLnpbMV0tQy56WzBdLGg9Qy55WzFdLUMueVswXSxkPU1hdGgubWF4KFoxLGYpKjEuMDUsQzE9TWF0aC5tYXgoZipXK2gqTyxaMSowLjQpKjEuMTUsJDE9TiowLjA4LG49QiowLjE4LGsxPU1hdGgubWluKChOLSQxKjIpL2QsKEItbioyKS9DMSkqMS40NSxsPWg8MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCxoKSksUj0odixpLF8pPT57bGV0IFM9di1iLFkxPV8taixyPVMqRStZMSp4LHU9LVMqeCtZMSpFLG09aSpsLFUxPW0qVy11Kk8sRzE9bSpPK3UqVztyZXR1cm57c3g6Ti8yK3IqazEsc3k6QiowLjU1LVUxKmsxLGRlcHRoOkcxfX0sSzE9MzgsQjE9QS5tYXAoKHYpPT57bGV0IGk9Uih2Lngsdi55LHYueiksXz1SKHYueCwwLHYueiksUz17c3g6aS5zeCxzeTpNYXRoLm1heChfLnN5LGkuc3krSzEpLGRlcHRoOl8uZGVwdGh9O3JldHVybntwOnYsdG9wOmksYm90OlN9fSk7Zm9yKGxldCB2PTE7djxCMS5sZW5ndGg7disrKXtsZXQgaT1CMVt2LTFdLF89QjFbdl0sUz1HLmNyZWF0ZUxpbmVhckdyYWRpZW50KChpLnRvcC5zeCtfLnRvcC5zeCkvMiwoaS50b3Auc3krXy50b3Auc3kpLzIsKGkuYm90LnN4K18uYm90LnN4KS8yLChpLmJvdC5zeStfLmJvdC5zeSkvMik7Uy5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIpLFMuYWRkQ29sb3JTdG9wKDAuNDUsInJnYmEoMTgwLDE4MCwxODUsMC4yOCkiKSxTLmFkZENvbG9yU3RvcCgwLjg1LCJyZ2JhKDQwLDQwLDQ1LDAuMTgpIiksUy5hZGRDb2xvclN0b3AoMSwicmdiYSgwLDAsMCwwKSIpLEcuZmlsbFN0eWxlPVMsRy5iZWdpblBhdGgoKSxHLm1vdmVUbyhpLnRvcC5zeCxpLnRvcC5zeSksRy5saW5lVG8oXy50b3Auc3gsXy50b3Auc3kpLEcubGluZVRvKF8uYm90LnN4LF8uYm90LnN5KSxHLmxpbmVUbyhpLmJvdC5zeCxpLmJvdC5zeSksRy5jbG9zZVBhdGgoKSxHLmZpbGwoKX1HLnN0cm9rZVN0eWxlPSIjZmZmZmZmIixHLmxpbmVXaWR0aD0xLjYsRy5saW5lQ2FwPSJyb3VuZCIsRy5saW5lSm9pbj0icm91bmQiLEcuYmVnaW5QYXRoKCk7Zm9yKGxldCB2PTA7djxCMS5sZW5ndGg7disrKXtsZXR7dG9wOml9PUIxW3ZdO2lmKHY9PT0wKUcubW92ZVRvKGkuc3gsaS5zeSk7ZWxzZSBHLmxpbmVUbyhpLnN4LGkuc3kpfUcuc3Ryb2tlKCk7bGV0IFYxPUo7Ry5zdHJva2VTdHlsZT0iI2Y5ZDJhNCIsRy5saW5lV2lkdGg9Mi4yLEcuYmVnaW5QYXRoKCk7bGV0IEoxPSExO2ZvcihsZXQgdj0wO3Y8QjEubGVuZ3RoO3YrKyl7bGV0e3A6aSx0b3A6X309QjFbdl07aWYoaS5hcmM+VjEpYnJlYWs7aWYoIUoxKUcubW92ZVRvKF8uc3gsXy5zeSksSjE9ITA7ZWxzZSBHLmxpbmVUbyhfLnN4LF8uc3kpfWlmKEoxKUcuc3Ryb2tlKCk7bGV0IHoxPXE/P2cwKFEsSiksTjE9Uih6MS54LHoxLnksejEueik7aWYoWSl7bGV0IF89WCUyNjAwLzI2MDAsUz00KzIyKl8sWTE9MC4yMiooMS1fKSxyPUcuY3JlYXRlUmFkaWFsR3JhZGllbnQoTjEuc3gsTjEuc3ksUyowLjUsTjEuc3gsTjEuc3ksUyk7ci5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLHIuYWRkQ29sb3JTdG9wKDAuNyxgcmdiYSgyNTUsMjU1LDI1NSwke1kxLnRvRml4ZWQoMyl9KWApLHIuYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxHLmZpbGxTdHlsZT1yLEcuYmVnaW5QYXRoKCksRy5hcmMoTjEuc3gsTjEuc3ksUywwLE1hdGguUEkqMiksRy5maWxsKCl9Ry5maWxsU3R5bGU9IiNmZmYiLEcuYmVnaW5QYXRoKCksRy5hcmMoTjEuc3gsTjEuc3ksMy44LDAsTWF0aC5QSSoyKSxHLmZpbGwoKX1mdW5jdGlvbiB0JCgkLFEsSil7JC5maWxsU3R5bGU9InJnYmEoMjU1LDI1NSwyNTUsMC4wNikiO2ZvcihsZXQgWT03O1k8SjtZKz0xNClmb3IobGV0IHE9NztxPFE7cSs9MTQpJC5iZWdpblBhdGgoKSwkLmFyYyhxLFksMC43LDAsTWF0aC5QSSoyKSwkLmZpbGwoKX1mdW5jdGlvbiBEMygkKXtpZigkPDEwMDApcmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYDtyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDIpfSBrbWB9ZnVuY3Rpb24gRzYoJCl7bGV0IFE9TWF0aC5mbG9vcigkLzEwMDApLEo9TWF0aC5mbG9vcihRLzM2MDApLEs9TWF0aC5mbG9vcihRJTM2MDAvNjApLFg9USU2MDtpZihKPjApcmV0dXJuYCR7Sn06JHtLLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YDtyZXR1cm5gJHtLfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YH1mdW5jdGlvbiBlJCgkKXtpZigkPD0wKXJldHVybiLigJQiO2lmKCQ+NylyZXR1cm5gJHsoJCozLjYpLnRvRml4ZWQoMCl9IGttL2hgO2xldCBRPTEwMDAvJCxKPU1hdGguZmxvb3IoUS82MCksSz1NYXRoLnJvdW5kKFElNjApO3JldHVybmAke0p9OiR7Sy50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0va21gfWZ1bmN0aW9uIFY2KCQpe3JldHVybmAkeyQudG9GaXhlZCgwKX0gbWB9ZnVuY3Rpb24gQjYoJCl7bGV0IFE9JC50cmltKCk7aWYoIVEpcmV0dXJuIiI7bGV0IEo9US5tYXRjaCgvUmVhc29uOlxzKiguKykkL20pO2lmKEopcmV0dXJuIEpbMV07cmV0dXJuIFEuc3BsaXQoYApgKS5zbGljZSgtMSlbMF0/P1F9YXN5bmMgZnVuY3Rpb24gVDMoJCxRLEope2xldCBLPWF3YWl0ICQoYHhjcnVuIHNpbWN0bCBnZXRfYXBwX2NvbnRhaW5lciAke1F9ICR7TDEoSil9IGFwcGApO2lmKEsuZXhpdENvZGUhPT0wKXJldHVybntlcnJvcjpLLnN0ZGVyci50cmltKCl8fCJBcHAgbm90IGZvdW5kIG9uIHNpbXVsYXRvciJ9O2xldCBYPUsuc3Rkb3V0LnRyaW0oKTtpZighWClyZXR1cm57ZXJyb3I6IkVtcHR5IGFwcCBwYXRoIn07bGV0IFk9YXdhaXQgJChgcGx1dGlsIC1jb252ZXJ0IGpzb24gLW8gLSAke0wxKFgrIi9JbmZvLnBsaXN0Iil9YCkscT17fTtpZihZLmV4aXRDb2RlPT09MCl0cnl7cT1KU09OLnBhcnNlKFkuc3Rkb3V0KX1jYXRjaHt9bGV0IEcsQj0ocT8uQ0ZCdW5kbGVJY29ucz8uQ0ZCdW5kbGVQcmltYXJ5SWNvbj8/cT8uWyJDRkJ1bmRsZUljb25zfmlwYWQiXT8uQ0ZCdW5kbGVQcmltYXJ5SWNvbik/LkNGQnVuZGxlSWNvbkZpbGVzPz9xPy5DRkJ1bmRsZUljb25GaWxlcztpZihCJiZCLmxlbmd0aD4wKUc9QltCLmxlbmd0aC0xXTtlbHNlIGlmKHR5cGVvZiBxPy5DRkJ1bmRsZUljb25GaWxlPT09InN0cmluZyIpRz1xLkNGQnVuZGxlSWNvbkZpbGU7bGV0IFU9bnVsbDtpZihHKXtsZXQgVj1bYCR7R31AM3gucG5nYCxgJHtHfUAyeC5wbmdgLGAke0d9LnBuZ2AsYCR7R302MHg2MEAzeC5wbmdgLGAke0d9NjB4NjBAMngucG5nYF0sTD0oYXdhaXQgJChgYmFzaCAtYyAke0wxKFYubWFwKChBKT0+YFsgLWYgJHtMMShYKyIvIitBKX0gXSAmJiBlY2hvICR7TDEoWCsiLyIrQSl9ICYmIGV4aXQgMGApLmpvaW4oIjsgIikrIjsgZXhpdCAxIil9YCkpLnN0ZG91dC50cmltKCk7aWYoTCl7bGV0IEE9YXdhaXQgJChgYmFzZTY0IC1pICR7TDEoTCl9YCk7aWYoQS5leGl0Q29kZT09PTApVT1gZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7QS5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpfWB9fXJldHVybnthcHBQYXRoOlgsZGlzcGxheU5hbWU6cS5DRkJ1bmRsZURpc3BsYXlOYW1lPz9xLkNGQnVuZGxlTmFtZSxzaG9ydFZlcnNpb246cS5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyxidW5kbGVWZXJzaW9uOnEuQ0ZCdW5kbGVWZXJzaW9uLG1pbk9TOnEuTWluaW11bU9TVmVyc2lvbixleGVjdXRhYmxlOnEuQ0ZCdW5kbGVFeGVjdXRhYmxlLGljb25EYXRhVXJsOlV9fXZhciBKMj1uZXcgTWFwO2Z1bmN0aW9uIFU2KCQsUSxKKXtsZXQgSz1gJHtRfToke0p9YCxYPUoyLmdldChLKTtpZihYIT09dm9pZCAwKXJldHVybiBQcm9taXNlLnJlc29sdmUoWCk7bGV0IFk9VDMoJCxRLEopLnRoZW4oKHEpPT57bGV0IEc9cS5pY29uRGF0YVVybD8/bnVsbDtyZXR1cm4gSjIuc2V0KEssRyksR30pLmNhdGNoKCgpPT57cmV0dXJuIEoyLnNldChLLG51bGwpLG51bGx9KTtyZXR1cm4gSjIuc2V0KEssWSksWX1mdW5jdGlvbiAkUSgkKXtyZXR1cm4gJC5zdGFydHNXaXRoKCJjb20uYXBwbGUuIil9ZnVuY3Rpb24gUVEoJCl7aWYoJD09PSJjb20uYXBwbGUuc3ByaW5nYm9hcmQiKXJldHVybiJTcHJpbmdCb2FyZCI7cmV0dXJuICR9ZnVuY3Rpb24gSlEoe2J1bmRsZUlkOiR9KXtsZXQgUT0kUSgkKTtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjpRPyJzeXN0ZW0tYXBwLWljb24iOiJhcHAtaWNvbi1mYWxsYmFjayIsY2xhc3NOYW1lOmB3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBib3JkZXIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgJHtRPyJib3JkZXItWyMzYjVmOTldIGJnLVtsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMildIHRleHQtWyNjOGQ3ZmZdIjoiYm9yZGVyLXdoaXRlLzEwIGJnLXdoaXRlL1swLjA2XSB0ZXh0LXdoaXRlLzgwIn1gLCJhcmlhLWxhYmVsIjpRPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLHRpdGxlOlE/IlN5c3RlbSBhcHAiOiJBcHAgaWNvbiB1bmF2YWlsYWJsZSIsY2hpbGRyZW46UT9aKCJzdmciLHtyb2xlOiJpbWciLHZpZXdCb3g6IjAgMCAyNCAyNCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjbGFzc05hbWU6InNpemUtWzE5cHhdIixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltaKCJ0aXRsZSIse2NoaWxkcmVuOiJBcHBsZSJ9KSxaKCJwYXRoIix7ZDoiTTEyLjE1MiA2Ljg5NmMtLjk0OCAwLTIuNDE1LTEuMDc4LTMuOTYtMS4wNC0yLjA0LjAyNy0zLjkxIDEuMTgzLTQuOTYxIDMuMDE0LTIuMTE3IDMuNjc1LS41NDYgOS4xMDMgMS41MTkgMTIuMDkgMS4wMTMgMS40NTQgMi4yMDggMy4wOSAzLjc5MiAzLjAzOSAxLjUyLS4wNjUgMi4wOS0uOTg3IDMuOTM1LS45ODcgMS44MzEgMCAyLjM1Ljk4NyAzLjk2Ljk0OCAxLjYzNy0uMDI2IDIuNjc2LTEuNDggMy42NzYtMi45NDggMS4xNTYtMS42ODggMS42MzYtMy4zMjUgMS42NjItMy40MTUtLjAzOS0uMDEzLTMuMTgyLTEuMjIxLTMuMjItNC44NTctLjAyNi0zLjA0IDIuNDgtNC40OTQgMi41OTctNC41NTktMS40MjktMi4wOS0zLjYyMy0yLjMyNC00LjM5LTIuMzc2LTItLjE1Ni0zLjY3NSAxLjA5LTQuNjEgMS4wOXpNMTUuNTMgMy44M2MuODQzLTEuMDEyIDEuNC0yLjQyNyAxLjI0NS0zLjgzLTEuMjA3LjA1Mi0yLjY2Mi44MDUtMy41MzIgMS44MTgtLjc4Ljg5Ni0xLjQ1NCAyLjMzOC0xLjI3MyAzLjcxNCAxLjMzOC4xMDQgMi43MTUtLjY4OCAzLjU1OS0xLjcwMSJ9KV19KTpaKEwyLHtzaXplOjE5LHN0cm9rZVdpZHRoOjEuOX0pfSl9ZnVuY3Rpb24gWlEoe2J1bmRsZUlkOiQsaWNvbkRhdGFVcmw6UX0pe2lmKFEpcmV0dXJuIFooImltZyIse3NyYzpRLGNsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIGJvcmRlciBib3JkZXItd2hpdGUvOCIsYWx0OiIifSk7cmV0dXJuIFooSlEse2J1bmRsZUlkOiR9KX1mdW5jdGlvbiBMNih7dWRpZDokLGN1cnJlbnRBcHA6UX0pe2xldFtKLEtdPU0obnVsbCksW1gsWV09TSghMSk7aWYoeSgoKT0+e2lmKCFRKXtLKG51bGwpO3JldHVybn1sZXQgcT0hMTtyZXR1cm4gSyh7YnVuZGxlSWQ6US5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOlEuaXNSZWFjdE5hdGl2ZSxwaWQ6US5waWQsbG9hZGluZzohMH0pLFQzKFcxLCQsUS5idW5kbGVJZCkudGhlbigoRyk9PntpZihxKXJldHVybjtLKHtidW5kbGVJZDpRLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6US5pc1JlYWN0TmF0aXZlLHBpZDpRLnBpZCxsb2FkaW5nOiExLC4uLkd9KX0pLCgpPT57cT0hMH19LFskLFEsUT8uYnVuZGxlSWQsUT8ucGlkLFE/LmlzUmVhY3ROYXRpdmVdKSwhSilyZXR1cm4gWihLUSx7fSk7cmV0dXJuIFooVjAse29wZW46WCxvbk9wZW5DaGFuZ2U6WSxzdW1tYXJ5Q2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWxlZnQiLHN1bW1hcnk6WihRMSx7Y2hpbGRyZW46W1ooWlEse2J1bmRsZUlkOkouYnVuZGxlSWQsaWNvbkRhdGFVcmw6Si5pY29uRGF0YVVybH0pLFooWFEse2J1bmRsZUlkOkouYnVuZGxlSWQsZGlzcGxheU5hbWU6Si5kaXNwbGF5TmFtZX0pXX0pLGNoaWxkcmVuOltKLmVycm9yJiZaKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkouZXJyb3J9KSxaKCJkbCIse2NsYXNzTmFtZToibS0wIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W1ooWjIse2xhYmVsOiJWZXJzaW9uIix2YWx1ZTpKLnNob3J0VmVyc2lvbj9gJHtKLnNob3J0VmVyc2lvbn0gKCR7Si5idW5kbGVWZXJzaW9uPz8i4oCUIn0pYDpKLmxvYWRpbmc/IuKApiI6IuKAlCJ9KSxaKFoyLHtsYWJlbDoiTWluIGlPUyIsdmFsdWU6Si5taW5PUz8/KEoubG9hZGluZz8i4oCmIjoi4oCUIil9KSxaKFoyLHtsYWJlbDoiRXhlY3V0YWJsZSIsdmFsdWU6Si5leGVjdXRhYmxlPz8oSi5sb2FkaW5nPyLigKYiOiLigJQiKX0pLFooWjIse2xhYmVsOiJQSUQiLHZhbHVlOkoucGlkIT1udWxsP1N0cmluZyhKLnBpZCk6IuKAlCJ9KSxKLmlzUmVhY3ROYXRpdmUmJlooWjIse2xhYmVsOiJSZWFjdCBOYXRpdmUiLHZhbHVlOiJZZXMifSksWihaMix7bGFiZWw6IkFwcCBwYXRoIix2YWx1ZTpKLmFwcFBhdGg/PyhKLmxvYWRpbmc/IuKApiI6IuKAlCIpLG1vbm86ITAsYWN0aW9uOkouYXBwUGF0aD97dGl0bGU6IlJldmVhbCBpbiBGaW5kZXIiLG9uQ2xpY2s6KCk9PntXMShgb3BlbiAtUiAke0wxKEouYXBwUGF0aCl9YCl9LGljb246Wih6Mix7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjJ9KX06dm9pZCAwfSldfSldfSl9ZnVuY3Rpb24gS1EoKXtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLWRldGVjdGlvbi1za2VsZXRvbiIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWxhYmVsIjoiV2FpdGluZyBmb3IgZm9yZWdyb3VuZCBhcHAiLGNoaWxkcmVuOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYmctd2hpdGUvWzAuMDhdIn0pLFooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTMuNSB3LVs0NiVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0ifSksWigic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pLFooInNwYW4iLHtjbGFzc05hbWU6InctMi41IGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSl9KX1mdW5jdGlvbiBYUSh7YnVuZGxlSWQ6JCxkaXNwbGF5TmFtZTpRfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgbGVhZGluZy10aWdodCB0ZXh0LWxlZnQiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46UT8/UVEoJCl9KSxaKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTokLGNoaWxkcmVuOiR9KV19KX1mdW5jdGlvbiBaMih7bGFiZWw6JCx2YWx1ZTpRLG1vbm86SixhY3Rpb246S30pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6Imdyb3VwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W1ooImR0Iix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCB3LTIxIHNocmluay0wIixjaGlsZHJlbjokfSksWigiZGQiLHtjbGFzc05hbWU6YG0tMCB0ZXh0LXdoaXRlLzkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7Sj8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6USxjaGlsZHJlbjpbUSxLJiZaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHJnYmEoMjgsMjgsMzAsMClfMCUsIzFjMWMxZV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6Sy5vbkNsaWNrLHRpdGxlOksudGl0bGUsImFyaWEtbGFiZWwiOksudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOksuaWNvbn0pfSldfSldfSl9dmFyIHo2PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJub3RpZmljYXRpb25zIixsYWJlbDoiTm90aWZpY2F0aW9ucyJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gQzYoe3VkaWQ6JCxidW5kbGVJZDpRfSl7bGV0W0osS109TSh7fSksW1gsWV09TShudWxsKSxbcSxHXT1NKG51bGwpLFtOLEJdPU0oITEpLFU9RDEoKCk9PntsZXQgTD10eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIUwpcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KEwpKXJldHVybmBidW4gJHtMMShMKX1gO2lmKC9cLmpzJC8udGVzdChMKSlyZXR1cm5gbm9kZSAke0wxKEwpfWA7cmV0dXJuIEwxKEwpfSxbXSk7eSgoKT0+e0soe30pLEcobnVsbCl9LFtRXSk7bGV0IFY9VChhc3luYyhMLEEpPT57aWYoIVEpcmV0dXJuO2xldCBDPWAke0x9OiR7QX1gO1koQyksRyhudWxsKTt0cnl7bGV0IEg9YXdhaXQgVzEoYCR7VX0gcGVybWlzc2lvbnMgJHtBfSAke0x9ICR7TDEoUSl9IC1kICR7TDEoJCl9YCk7aWYoSC5leGl0Q29kZSE9PTApe0coSC5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke0guZXhpdENvZGV9KWApO3JldHVybn1LKChPKT0+KHsuLi5PLFtMXTpBPT09InJlc2V0Ij92b2lkIDA6QX0pKX1maW5hbGx5e1kobnVsbCl9fSxbVSwkLFFdKSx6PVQoYXN5bmMoKT0+e2lmKCFRKXJldHVybjtZKCJfX2FsbF9fIiksRyhudWxsKTt0cnl7bGV0IEw9YXdhaXQgVzEoYCR7VX0gcGVybWlzc2lvbnMgcmVzZXQgYWxsICR7TDEoUSl9IC1kICR7TDEoJCl9YCk7aWYoTC5leGl0Q29kZSE9PTApe0coTC5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke0wuZXhpdENvZGV9KWApO3JldHVybn1LKHt9KX1maW5hbGx5e1kobnVsbCl9fSxbVSwkLFFdKTtpZighUSlyZXR1cm4gWihZUSx7fSk7cmV0dXJuIFooVjAse29wZW46Tixvbk9wZW5DaGFuZ2U6QixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpaKFExLHtjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksWigic3BhbiIse30pXX0pLGNoaWxkcmVuOltxJiZaKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOnF9KSxaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBmbGV4IGZsZXgtY29sIGdhcC0xIHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46ejYubWFwKCh7a2V5OkwsbGFiZWw6QX0pPT57bGV0IEM9SltMXTtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHgtMC41IHB5LTEiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpBfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0wLjUgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHAtMC41Iixyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOkEsY2hpbGRyZW46W1oodzMse2FjdGl2ZTpDPT09ImdyYW50IixwZW5kaW5nOlg9PT1gJHtMfTpncmFudGAsb25DbGljazooKT0+VihMLCJncmFudCIpLHZhcmlhbnQ6ImdyYW50Iix0aXRsZToiQWxsb3ciLGNoaWxkcmVuOlooQzIse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksWih3Myx7YWN0aXZlOkM9PT0icmV2b2tlIixwZW5kaW5nOlg9PT1gJHtMfTpyZXZva2VgLG9uQ2xpY2s6KCk9PlYoTCwicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46WigkMCx7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxaKHczLHthY3RpdmU6ITEscGVuZGluZzpYPT09YCR7TH06cmVzZXRgLG9uQ2xpY2s6KCk9PlYoTCwicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpaKGowLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxMKX0pfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQiLGNoaWxkcmVuOlooImJ1dHRvbiIse29uQ2xpY2s6eixkaXNhYmxlZDpYPT09Il9fYWxsX18iLGNsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzcwIHRleHQtWzEwcHhdIHB4LTIgcHktWzNweF0gcm91bmRlZC1bNXB4XSBjdXJzb3ItcG9pbnRlciB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDRlbV0iLHRpdGxlOiJzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgcmVzZXQgYWxsIixjaGlsZHJlbjpYPT09Il9fYWxsX18iPyLigKYiOiJSZXNldCBhbGwifSl9KV19KX1mdW5jdGlvbiBZUSgpe3JldHVybiBaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtcGVybWlzc2lvbnMtbG9hZGluZyIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWRpc2FibGVkIjoidHJ1ZSIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOlooImRpdiIse2NsYXNzTmFtZToic2VsZWN0LW5vbmUgdGV4dC13aGl0ZS81NSBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCBjdXJzb3ItZGVmYXVsdCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxaKCJzcGFuIix7fSksWigic3BhbiIseyJkYXRhLXRlc3RpZCI6InBlcm1pc3Npb25zLWxvYWRpbmctaW5kaWNhdG9yIixyb2xlOiJzdGF0dXMiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBwZXJtaXNzaW9ucyIsY2xhc3NOYW1lOiJzaXplLTIuNSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzVmNjI2OF0gYm9yZGVyLXQtWyNmNGY0ZjVdIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjdzX2xpbmVhcl9pbmZpbml0ZV0ifSldfSl9KX1mdW5jdGlvbiB3Myh7YWN0aXZlOiQscGVuZGluZzpRLG9uQ2xpY2s6Six2YXJpYW50OkssdGl0bGU6WCxjaGlsZHJlbjpZfSl7bGV0IHE9Sz09PSJncmFudCI/IiM0YWRlODAiOks9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBaKCJidXR0b24iLHtvbkNsaWNrOkosZGlzYWJsZWQ6USx0aXRsZTpYLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToidy02IGgtNS41IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQgcC0wIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIixzdHlsZTp7YmFja2dyb3VuZDokP2Ake3F9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6JD9xOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5OlE/MC41OjF9LGNoaWxkcmVuOll9KX1mdW5jdGlvbiBfNSh7bGFiZWw6JCxjaGVja2VkOlEsZGlzYWJsZWQ6Sj0hMSxvbkNoYW5nZTpLfSl7cmV0dXJuIFooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToic3dpdGNoIiwiYXJpYS1jaGVja2VkIjpRLCJhcmlhLWxhYmVsIjokLGRpc2FibGVkOkosb25DbGljazooKT0+SyghUSksY2xhc3NOYW1lOmByZWxhdGl2ZSBoLVsxOHB4XSB3LTggc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci1ub25lIHAtMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke0o/ImN1cnNvci1kZWZhdWx0IGJnLXdoaXRlLzIwIjpRPyJjdXJzb3ItcG9pbnRlciBiZy1bIzBhODRmZl0iOiJjdXJzb3ItcG9pbnRlciBiZy13aGl0ZS8yMCJ9YCxjaGlsZHJlbjpaKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtWzJweF0gc2l6ZS1bMTRweF0gcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmxlZnRfMC4xNXNdICR7Sj8iYmctd2hpdGUvNTAiOiJiZy13aGl0ZSJ9YCxzdHlsZTp7bGVmdDpRPzE2OjJ9fSl9KX12YXIgcVE9ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIixHUT0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiO2Z1bmN0aW9uIEY2KHtvdmVybGF5RW5hYmxlZDokLG9uVG9nZ2xlT3ZlcmxheTpRfSl7bGV0e3NuYXBzaG90Okp9PXQwKCkse2hpZ2hsaWdodGVkS2V5Okssc2V0SGlnaGxpZ2h0ZWRLZXk6WH09VjUoKSxZPUo/LmVsZW1lbnRzPz9bXSxxPVk1KEopLEc9Sj8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZTpgJHtxUX0gcHgtMyBweS0yYCxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOkdRLGNoaWxkcmVuOiJBWCBUcmVlIn0pLFooXzUse2xhYmVsOiJFbmFibGUgb3ZlcmxheSIsY2hlY2tlZDokLG9uQ2hhbmdlOlF9KV19KSwhJD9udWxsOnE/WihINix7Y2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpZLmxlbmd0aD09PTA/WihINix7c3Bpbm5lcjohRyxjaGlsZHJlbjpHPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0yIHB5LTIgbWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46WS5tYXAoKE4sQik9PntsZXQgVT12MChOKTtyZXR1cm4gWihWUSx7ZWxlbWVudDpOLGluZGV4OkIsYWN0aXZlOlU9PT1LLG9uSGlnaGxpZ2h0Olh9LFUpfSl9KV19KX1mdW5jdGlvbiBINih7Y2hpbGRyZW46JCxzcGlubmVyOlE9ITF9KXtyZXR1cm4gWigiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6Im10LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbUT9aKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTMuNSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzIwIGJvcmRlci10LXdoaXRlLzYwIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSk6bnVsbCxaKCJzcGFuIix7Y2hpbGRyZW46JH0pXX0pfXZhciBWUT1TMChmdW5jdGlvbih7ZWxlbWVudDpRLGluZGV4OkosYWN0aXZlOkssb25IaWdobGlnaHQ6WH0pe2xldCBZPXYwKFEpLHE9RzUoUSxKKSxHPWAke01hdGgucm91bmQoUS5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChRLmZyYW1lLmhlaWdodCl9YCxOPVtxLmxhYmVsLHEucm9sZXx8cS50eXBlfHwiZWxlbWVudCIsR10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gWigiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpZLHRpdGxlOk4sb25Nb3VzZUVudGVyOigpPT5YKFkpLG9uTW91c2VMZWF2ZTooKT0+WChudWxsKSxvbkZvY3VzOigpPT5YKFkpLG9uQmx1cjooKT0+WChudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtLPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOlEubGFiZWx8fFEucm9sZXx8IlVubGFiZWxlZCJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46US5yb2xlfHxRLnR5cGV8fCJlbGVtZW50In0pXX0pLFooImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOkd9KV19KX0sKCQsUSk9PiQuaW5kZXg9PT1RLmluZGV4JiYkLmFjdGl2ZT09PVEuYWN0aXZlJiYkLm9uSGlnaGxpZ2h0PT09US5vbkhpZ2hsaWdodCYmcTUoJC5lbGVtZW50LFEuZWxlbWVudCkpO3ZhciBCUT1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSxFMz0xOTY2MDgsazY9NTI0Mjg4MDAwLFA1PSJhcHBsaWNhdGlvbi94LXNlcnZlLXNpbS1ob3N0LXBhdGgiO2FzeW5jIGZ1bmN0aW9uIEE2KCQsUSxKKXtsZXQgSz1hd2FpdCBRKGB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtKfSAke0wxKCQpfWApO2lmKEsuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKEsuc3RkZXJyfHxgYWRkbWVkaWEgZmFpbGVkIChleGl0ICR7Sy5leGl0Q29kZX0pYCl9ZnVuY3Rpb24gSzIoJCl7bGV0IFE9JC5uYW1lLEo9US5sYXN0SW5kZXhPZigiLiIpO2lmKEo+PTApcmV0dXJuIFEuc2xpY2UoSisxKS50b0xvd2VyQ2FzZSgpO2lmKCQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1mdW5jdGlvbiBPNigkKXtpZihLMigkKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKEJRLmhhcygkLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTlEoJCl7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoJCksSj0iIjtmb3IobGV0IEs9MDtLPFEubGVuZ3RoO0srPTMyNzY4KUorPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4uUS5zdWJhcnJheShLLEsrMzI3NjgpKTtyZXR1cm4gYnRvYShKKX1hc3luYyBmdW5jdGlvbiBNNigkLFEsSixLKXtsZXQgWD0wO2ZvcihsZXQgWT0wO1k8JC5zaXplO1krPUUzKXtsZXQgcT1hd2FpdCAkLnNsaWNlKFksWStFMykuYXJyYXlCdWZmZXIoKSxHPU5RKHEpLEI9YXdhaXQgSihgYmFzaCAtYyAnZWNobyAke0d9IHwgYmFzZTY0IC1kICR7WT09PTA/Ij4iOiI+PiJ9ICR7UX0nYCk7aWYoQi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoQi5zdGRlcnJ8fGBXcml0ZSBmYWlsZWQgKGV4aXQgJHtCLmV4aXRDb2RlfSlgKTtpZighSyljb250aW51ZTtsZXQgVT1NYXRoLm1pbihZK0UzLCQuc2l6ZSksVj1NYXRoLmZsb29yKFUvJC5zaXplKjEwMCk7aWYoViE9PVgpWD1WLEsoVS8kLnNpemUpfX1hc3luYyBmdW5jdGlvbiBXNigkLFEsSixLKXtpZigkLnNpemU+azYpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFg9YC90bXAvJHtRfS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7Sn1gO3JldHVybiBhd2FpdCBNNigkLFgsSyksWH1hc3luYyBmdW5jdGlvbiBfNigkLFEsSixLLFgpe2lmKCQuc2l6ZT5rNil0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWT1RPT09ImlwYSI/ImlwYSI6SzIoJCksRz1gL3RtcC8ke1E9PT0iaXBhIj8ic2VydmUtc2ltLWluc3RhbGwiOiJzZXJ2ZS1zaW0tdXBsb2FkIn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1l9YDt0cnl7WCgwKSxhd2FpdCBNNigkLEcsSixYKSxYKG51bGwpO2xldCBOPVE9PT0iaXBhIj9geGNydW4gc2ltY3RsIGluc3RhbGwgJHtLfSAke0d9YDpgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7S30gJHtHfWAsQj1hd2FpdCBKKE4pO2lmKEIuZXhpdENvZGUhPT0wKXtsZXQgVT1RPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoQi5zdGRlcnJ8fGAke1V9IGZhaWxlZCAoZXhpdCAke0IuZXhpdENvZGV9KWApfX1maW5hbGx5e0ooYGJhc2ggLWMgJ3JtIC1mICR7R30nYCkuY2F0Y2goKCk9Pnt9KX19dmFyIFVRPTMwMDAsTFE9MjA5NzE1MjAwLHpRPSJMYXJnZSB2aWRlbyAoPjIwMCBNQikg4oCUIG1heSBzdHV0dGVyIG9uIHNoYXJlZCBtZW1vcnkiLEQ2PSJIRUlDIGRlY29kZSBmYWlsZWQg4oCUIGV4cG9ydCBhcyBKUEVHIG9yIFBORyBhbmQgcmV0cnkiO2Z1bmN0aW9uIENRKCQsUSl7aWYoUSlyZXR1cm4iYWN0aXZlIjtpZigkPT09ImFjdGl2ZSIpcmV0dXJuImRpc2Nvbm5lY3RlZCI7aWYoJD09PSJkaXNjb25uZWN0ZWQiKXJldHVybiJyZWFkeSI7cmV0dXJuICR9ZnVuY3Rpb24gSFEoJCl7aWYoISQuaW5qZWN0ZWQpcmV0dXJuInBsYXkiO2lmKCQuc291cmNlPT09InBsYWNlaG9sZGVyIilyZXR1cm4icGxheSI7aWYoJC5idW5kbGVJZCYmISQuZm9yZWdyb3VuZElzSW5qZWN0ZWQpcmV0dXJuImF0dGFjaCI7cmV0dXJuInN0b3AifWZ1bmN0aW9uIEZRKCQpe3JldHVybiAkLnNwbGl0KGAKYCkubWFwKChRKT0+US50cmltKCkpLmZpbHRlcihCb29sZWFuKS5mbGF0TWFwKChRKT0+e2xldCBKPVEuaW5kZXhPZigiXHQiKTtpZihKPD0wKXJldHVybltdO2xldCBLPVEuc2xpY2UoMCxKKS50cmltKCksWD1RLnNsaWNlKEorMSkudHJpbSgpO2lmKCFLfHwhWClyZXR1cm5bXTtyZXR1cm5be2lkOkssbmFtZTpYfV19KX12YXIga1E9bmV3IFNldChbIm1wNCIsIm00diIsIm1vdiIsInF0IiwiYXZpIiwibWt2Iiwid2VibSIsIm1wZyIsIm1wZWciLCIzZ3AiLCIzZzIiLCJ0cyIsIndtdiJdKTtmdW5jdGlvbiBUNigkKXtpZigkLnR5cGUmJiQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4hMDtsZXQgUT0oJC5uYW1lPz8iIikudG9Mb3dlckNhc2UoKSxKPVEubGFzdEluZGV4T2YoIi4iKTtpZihKPDApcmV0dXJuITE7cmV0dXJuIGtRLmhhcyhRLnNsaWNlKEorMSkpfWZ1bmN0aW9uIEFRKCQpe3JldHVybiBUNigkKSYmJC5zaXplPkxRfWZ1bmN0aW9uIE9RKCQpe2xldCBRPSgkLnR5cGU/PyIiKS50b0xvd2VyQ2FzZSgpO2lmKFE9PT0iaW1hZ2UvaGVpYyJ8fFE9PT0iaW1hZ2UvaGVpZiIpcmV0dXJuITA7bGV0IEo9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIEouZW5kc1dpdGgoIi5oZWljIil8fEouZW5kc1dpdGgoIi5oZWlmIil9ZnVuY3Rpb24gTVEoe3Jhd01lc3NhZ2U6JCxsYXN0RmlsZUlzSGVpYzpRLHNvdXJjZTpKfSl7aWYoUSYmKEo9PT0iaW1hZ2UifHxKPT09InZpZGVvIikpcmV0dXJuIEQ2O3JldHVybiAkfWZ1bmN0aW9uIFdRKHtzdGF0ZTokfSl7bGV0IFE9JD09PSJhY3RpdmUiPyJBY3RpdmUiOiQ9PT0iZGlzY29ubmVjdGVkIj8iRGlzY29ubmVjdGVkIjoiUmVhZHkiLEo9JD09PSJhY3RpdmUiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctc3VjY2Vzcy1lbWVyYWxkIFtib3gtc2hhZG93OjBfMF82cHhfcmdiYSg3NCwyMjIsMTI4LDAuNyldIjokPT09ImRpc2Nvbm5lY3RlZCI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1kYW5nZXItc29mdCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoMjQ4LDExMywxMTMsMC41NSldIjpudWxsO3JldHVybiBaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBqdXN0aWZ5LXNlbGYtZW5kIGxlYWRpbmctbm9uZSIsImRhdGEtY2FtZXJhLXBpbGwtc3RhdGUiOiQsY2hpbGRyZW46W0omJlooInNwYW4iLHtjbGFzc05hbWU6Sn0pLFFdfSl9ZnVuY3Rpb24gX1EoKXtyZXR1cm4gWigicCIse2NsYXNzTmFtZToibS0wIHRleHQtY2VudGVyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsImRhdGEtY2FtZXJhLXRlc3QtcGF0dGVybi1oaW50IjohMCxjaGlsZHJlbjoiVGVzdC1wYXR0ZXJuIGZlZWQifSl9ZnVuY3Rpb24gUFEoe21vZGU6JCxmaWxlTmFtZTpRLHdlYmNhbU5hbWU6Sixzb3VyY2VLaW5kOkt9KXtpZigkPT09InVwbG9hZGluZyIpcmV0dXJuIFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiJVcGxvYWRpbmfigKYifSk7aWYoJD09PSJmaWxlIilyZXR1cm4gWihRMSx7Y2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjpLPT09InZpZGVvIj8iVmlkZW8iOiJJbWFnZSJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46UT8/IiJ9KV19KTtpZigkPT09IndlYmNhbSIpcmV0dXJuIFooUTEse2NoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46IldlYmNhbSJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46Sj8/IiJ9KV19KTtyZXR1cm4gWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS84NSBmb250LW1lZGl1bSIsY2hpbGRyZW46IlNlbGVjdCBvciBkcm9wIG1lZGlhIn0pfWZ1bmN0aW9uIFA2KHtraW5kOiQsbWVzc2FnZTpRfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZTokPT09Indhcm5pbmciPyJiZy13YXJuaW5nLzEwIGJvcmRlciBib3JkZXItd2FybmluZy8yNSB0ZXh0LXdhcm5pbmctc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIjoiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyIsImRhdGEtY2FtZXJhLWJhbm5lci1raW5kIjokLHJvbGU6JD09PSJlcnJvciI/ImFsZXJ0Ijoic3RhdHVzIixjaGlsZHJlbjpRfSl9ZnVuY3Rpb24gdzYoe3VkaWQ6JCxidW5kbGVJZDpRfSl7bGV0W0osS109TSghMSksW1gsWV09TSgicGxhY2Vob2xkZXIiKSxbcSxHXT1NKCIiKSxbTixCXT1NKG51bGwpLFtVLFZdPU0oITEpLHo9SSgwKSxbTCxBXT1NKCExKSxbQyxIXT1NKCExKSxPPUkobnVsbCksW1cseF09TShbXSksW0UsYl09TSghMSksW2osWjFdPU0oIiIpLFtmLGhdPU0oIm9mZiIpLFtkLEMxXT1NKG51bGwpLFskMSxuXT1NKG51bGwpLGsxPWQhPT1udWxsfHwkMSE9PW51bGwsW2wsUl09TShudWxsKSxbSzEsQjFdPU0obnVsbCksWyxWMV09TShudWxsKSxbSjEsejFdPU0oITEpLFtOMSx2XT1NKCJyZWFkeSIpLFtpLF9dPU0oKCk9Pm5ldyBTZXQpLFtTLFkxXT1NKG51bGwpLFtyLHVdPU0obnVsbCksbT1JKCExKSxVMT1JKCExKSxHMT1JKCJvZmYiKSxkMT1JKCExKSxBMT1EMSgoKT0+e2xldCBQPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFQKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChQKSlyZXR1cm5gYnVuICR7TDEoUCl9YDtpZigvXC5qcyQvLnRlc3QoUCkpcmV0dXJuYG5vZGUgJHtMMShQKX1gO3JldHVybiBMMShQKX0sW10pLHAxPVQoYXN5bmMoKT0+e2xldCBQPWF3YWl0IFcxKGAke0ExfSBjYW1lcmEgc3RhdHVzIC1kICR7JH1gKTtpZihQLmV4aXRDb2RlIT09MClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEpTT04ucGFyc2UoUC5zdGRvdXQudHJpbSgpKX1jYXRjaHtyZXR1cm4gbnVsbH19LFtBMSwkXSksTzA9SShhc3luYygpPT57fSksUTA9SShRKTt5KCgpPT57UTAuY3VycmVudD1RfSxbUV0pLHkoKCk9PntsZXQgUD0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCBwPWF3YWl0IHAxKCk7aWYoUHx8IXB8fCFwLmFsaXZlKXJldHVybjtVMS5jdXJyZW50PSEwO2xldCB0PXAuc291cmNlO2lmKHQ9PT0icGxhY2Vob2xkZXIifHx0PT09IndlYmNhbSJ8fHQ9PT0iaW1hZ2UifHx0PT09InZpZGVvIilZKHQpO2lmKCh0PT09ImltYWdlInx8dD09PSJ2aWRlbyIpJiZwLmFyZylHKHAuYXJnKSxCKHAuYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKHQ9PT0id2ViY2FtIiYmcC5hcmcpWjEocC5hcmcpLE8wLmN1cnJlbnQoKTtsZXQgYT1wLm1pcnJvcj09PSJvbiI/Im9uIjoib2ZmIjtoKGEpLEcxLmN1cnJlbnQ9YSxZMShwLmhlbHBlclBpZD8/bnVsbCksejEoITApO2xldCBxMT1BcnJheS5pc0FycmF5KHAuYnVuZGxlSWRzKT9wLmJ1bmRsZUlkczpbXTtpZihxMS5sZW5ndGg+MClfKG5ldyBTZXQocTEpKTtsZXQgWDE9UTAuY3VycmVudCxiMT10JiZ0IT09InBsYWNlaG9sZGVyIjt2KFgxJiZxMS5pbmNsdWRlcyhYMSkmJmIxPyJhY3RpdmUiOiJyZWFkeSIpLFYxKGBSZWF0dGFjaGVkIOKGkiAke3Q/PyJydW5uaW5nIGhlbHBlciJ9JHtwLmFyZz9gICgke3AuYXJnfSlgOiIifWApfSkoKSwoKT0+e1A9ITB9fSxbJCxwMV0pLHkoKCk9PntsZXQgUD0hMSxwPSExLHQ9bnVsbCxhPWFzeW5jKCk9PntpZihQfHxwKXJldHVybjtpZih0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilyZXR1cm47cD0hMDt0cnl7bGV0IFgxPWF3YWl0IHAxKCk7aWYoUClyZXR1cm47bGV0IGIxPSEhWDE/LmFsaXZlLFIxPUFycmF5LmlzQXJyYXkoWDE/LmJ1bmRsZUlkcyk/WDEuYnVuZGxlSWRzOm51bGwsbzE9ISFRJiYoUjE/UjEuaW5jbHVkZXMoUSk6aS5oYXMoUSkpLFgwPVgxPy5zb3VyY2U/P251bGwsaz1KMSYmYjEmJm8xJiYhIShYMCYmWDAhPT0icGxhY2Vob2xkZXIiKSYmKFM9PW51bGx8fFgxPy5oZWxwZXJQaWQ9PT1TKTtpZih2KChGKT0+Q1EoRixrKSksIWIxKXoxKChGKT0+e2lmKCFGKXJldHVybiBGO3JldHVybiBfKG5ldyBTZXQpLFkxKG51bGwpLEcxLmN1cnJlbnQ9Im9mZiIsITF9KTtlbHNlIGlmKEoxJiZTIT1udWxsJiZYMT8uaGVscGVyUGlkIT09Uyl6MSghMSksXyhuZXcgU2V0KSxZMShudWxsKSxHMS5jdXJyZW50PSJvZmYiO2Vsc2UgaWYoYjEmJkFycmF5LmlzQXJyYXkoWDE/LmJ1bmRsZUlkcykpe2xldCBGPVgxLmJ1bmRsZUlkcztfKChEKT0+e2lmKEQuc2l6ZT09PUYubGVuZ3RoJiZGLmV2ZXJ5KCh3KT0+RC5oYXModykpKXJldHVybiBEO3JldHVybiBuZXcgU2V0KEYpfSl9fWZpbmFsbHl7cD0hMX19O3Q9c2V0SW50ZXJ2YWwoKCk9PnthKCl9LFVRKTtsZXQgcTE9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0idmlzaWJsZSIpYSgpfTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHExKTtyZXR1cm4oKT0+e2lmKFA9ITAsdCljbGVhckludGVydmFsKHQpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscTEpfX0sW3AxLEoxLFMsUSxpXSk7bGV0IF8xPVQoYXN5bmMoKT0+e2IoITApLFIobnVsbCk7dHJ5e2xldCBQPWF3YWl0IFcxKGAke0ExfSBjYW1lcmEgLS1saXN0LXdlYmNhbXNgKTtpZihQLmV4aXRDb2RlIT09MCl7UihQLnN0ZGVyci50cmltKCl8fGAtLWxpc3Qtd2ViY2FtcyBmYWlsZWQgKCR7UC5leGl0Q29kZX0pYCk7cmV0dXJufWxldCBwPUZRKFAuc3Rkb3V0KTtpZih4KHApLHAubGVuZ3RoPjAmJiFqKVoxKHBbMF0uaWQpfWZpbmFsbHl7YighMSl9fSxbaixBMV0pO3koKCk9PntPMC5jdXJyZW50PV8xfSxbXzFdKSx5KCgpPT57aWYoQyYmVy5sZW5ndGg9PT0wJiYhRSlfMSgpfSxbQyxXLmxlbmd0aCxFLF8xXSk7bGV0IFMxPVQoKFApPT57UihNUSh7cmF3TWVzc2FnZTpQLGxhc3RGaWxlSXNIZWljOm0uY3VycmVudCxzb3VyY2U6WH0pKX0sW1hdKSxNMD1UKGFzeW5jKFAscCx0KT0+e2xldCBhPVA9PT0iaW1hZ2UifHxQPT09InZpZGVvIixxMT1bImNhbWVyYSIsInN3aXRjaCIsYT8iZmlsZSI6UF07aWYoUD09PSJ3ZWJjYW0iJiZwKXExLnB1c2goTDEocCkpO2lmKGEpe2lmKCF0LnRyaW0oKSlyZXR1cm4gUigiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKSwhMTtxMS5wdXNoKEwxKHQudHJpbSgpKSl9cTEucHVzaCgiLWQiLCQsIi0tcXVpZXQiKTtsZXQgWDE9YXdhaXQgVzEoYCR7QTF9ICR7cTEuam9pbigiICIpfWApO2lmKFgxLmV4aXRDb2RlIT09MClyZXR1cm4gUzEoWDEuc3RkZXJyLnRyaW0oKXx8WDEuc3Rkb3V0LnRyaW0oKXx8YHN3aXRjaCBmYWlsZWQgKCR7WDEuZXhpdENvZGV9KWApLCExO20uY3VycmVudD0hMTt0cnl7bGV0IGIxPUpTT04ucGFyc2UoWDEuc3Rkb3V0LnRyaW0oKSk7VjEoYFN3aXRjaGVkIOKGkiAke2IxLnNvdXJjZT8/UH0ke2IxLmFyZz9gICgke2IxLmFyZ30pYDoiIn1gKX1jYXRjaHtWMShgU3dpdGNoZWQg4oaSICR7UH1gKX1yZXR1cm4hMH0sWyQsQTEsUzFdKSxKMD1UKGFzeW5jKCk9PntpZighUSlyZXR1cm47QzEoImluamVjdCIpLFIobnVsbCksVjEobnVsbCk7dHJ5e2xldCBQPVsiY2FtZXJhIixMMShRKSwiLWQiLCQsIi0tcXVpZXQiXTtpZihYPT09ImltYWdlInx8WD09PSJ2aWRlbyIpe2lmKCFxLnRyaW0oKSl7UigiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKTtyZXR1cm59UC5wdXNoKCItLWZpbGUiLEwxKHEudHJpbSgpKSl9ZWxzZSBpZihYPT09IndlYmNhbSIpaWYoailQLnB1c2goIi0td2ViY2FtIixMMShqKSk7ZWxzZSBQLnB1c2goIi0td2ViY2FtIik7UC5wdXNoKCItLW1pcnJvciIsZik7bGV0IHA9YXdhaXQgVzEoYCR7QTF9ICR7UC5qb2luKCIgIil9YCk7aWYocC5leGl0Q29kZSE9PTApe1MxKHAuc3RkZXJyLnRyaW0oKXx8cC5zdGRvdXQudHJpbSgpfHxgaW5qZWN0IGZhaWxlZCAoJHtwLmV4aXRDb2RlfSlgKTtyZXR1cm59bS5jdXJyZW50PSExO2xldCB0PW51bGw7dHJ5e2xldCBhPUpTT04ucGFyc2UocC5zdGRvdXQudHJpbSgpKTt0PWEuaGVscGVyUGlkPz9udWxsO2xldCBxMT1hLmhlbHBlclJlbGF1bmNoZWQ9PT0hMT8iQXR0YWNoZWQiOiJJbmplY3RlZCIsWDE9YS5waWQ/YCBwaWQgJHthLnBpZH1gOiIiLGIxPWEuaGVscGVyUGlkP2AsIGhlbHBlciBwaWQgJHthLmhlbHBlclBpZH1gOiIiO1YxKGAke3ExfSAke2Euc291cmNlPz9YfSBpbnRvICR7UX0ke1gxfSR7YjF9YCl9Y2F0Y2h7VjEocC5zdGRvdXQudHJpbSgpfHwiSW5qZWN0ZWQuIil9ejEoITApLHYoWD09PSJwbGFjZWhvbGRlciI/InJlYWR5IjoiYWN0aXZlIiksWTEodCksXygoYSk9PmEuaGFzKFEpP2E6bmV3IFNldChhKS5hZGQoUSkpLEcxLmN1cnJlbnQ9Zn1maW5hbGx5e0MxKG51bGwpfX0sW1EsJCxYLHEsaixmLEExLFMxXSksTzE9SjE/YCR7WH06OiR7WD09PSJ3ZWJjYW0iP2o6IiJ9Ojoke1g9PT0iaW1hZ2UifHxYPT09InZpZGVvIj9xOiIifWA6bnVsbCxjMT0hIVEmJmkuaGFzKFEpLFcwPWMxJiZYIT09InBsYWNlaG9sZGVyIjt5KCgpPT57aWYoIVcwKXtkMS5jdXJyZW50PSExO3JldHVybn1pZihkMS5jdXJyZW50KXJldHVybjtkMS5jdXJyZW50PSEwLEsoITApfSxbVzBdKSx5KCgpPT57aWYoIXIpcmV0dXJuO2lmKCFRfHxrMXx8TClyZXR1cm47aWYoWCE9PSJ3ZWJjYW0ifHxqIT09cilyZXR1cm47aWYodShudWxsKSxKMSlyZXR1cm47SjAoKX0sW3IsUSxrMSxMLFgsaixKMSxKMF0pLHkoKCk9PntpZighSjEpcmV0dXJuO2lmKChYPT09ImltYWdlInx8WD09PSJ2aWRlbyIpJiYhcS50cmltKCkpcmV0dXJuO2lmKFg9PT0id2ViY2FtIiYmIWopcmV0dXJuO2lmKFUxLmN1cnJlbnQpe1UxLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBQPSExO3JldHVybihhc3luYygpPT57bigic3dpdGNoIiksUihudWxsKTt0cnl7aWYoUClyZXR1cm47YXdhaXQgTTAoWCxqLHEpfWZpbmFsbHl7aWYoIVApbihudWxsKX19KSgpLCgpPT57UD0hMH19LFtPMV0pLHkoKCk9PntpZighSjEpcmV0dXJuO2lmKEcxLmN1cnJlbnQ9PT1mKXJldHVybjtsZXQgUD1mLHA9ITE7cmV0dXJuKGFzeW5jKCk9PntuKCJtaXJyb3IiKSxSKG51bGwpO3RyeXtsZXQgdD1hd2FpdCBXMShgJHtBMX0gY2FtZXJhIG1pcnJvciAke1B9IC1kICR7JH0gLS1xdWlldGApO2lmKHApcmV0dXJuO2lmKHQuZXhpdENvZGUhPT0wKXtSKHQuc3RkZXJyLnRyaW0oKXx8dC5zdGRvdXQudHJpbSgpfHxgbWlycm9yIGZhaWxlZCAoJHt0LmV4aXRDb2RlfSlgKTtyZXR1cm59RzEuY3VycmVudD1QLFYxKGBNaXJyb3Ig4oaSICR7UH1gKX1maW5hbGx5e2lmKCFwKW4obnVsbCl9fSkoKSwoKT0+e3A9ITB9fSxbZixKMV0pO2xldCB3MT1UKGFzeW5jKCk9PntDMSgic3RvcCIpLFIobnVsbCk7dHJ5e2xldCBQPWF3YWl0IFcxKGAke0ExfSBjYW1lcmEgLS1zdG9wLXdlYmNhbSAtZCAkeyR9YCk7aWYoUC5leGl0Q29kZSE9PTApe1IoUC5zdGRlcnIudHJpbSgpfHxgc3RvcC13ZWJjYW0gZmFpbGVkICgke1AuZXhpdENvZGV9KWApO3JldHVybn1WMSgiQ2FtZXJhIGhlbHBlciBzdG9wcGVkLiIpLHoxKCExKSx2KCJyZWFkeSIpLF8obmV3IFNldCksRzEuY3VycmVudD0ib2ZmIn1maW5hbGx5e0MxKG51bGwpfX0sWyQsQTFdKSx1MT1UKGFzeW5jKFApPT57bGV0IHA9T1Eoe3R5cGU6UC50eXBlLG5hbWU6UC5uYW1lfSksdD1QLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIil8fHAsYT1QLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIil8fFQ2KHt0eXBlOlAudHlwZSxuYW1lOlAubmFtZX0pO2lmKCF0JiYhYSl7bS5jdXJyZW50PSExLFIoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtQLnR5cGV8fFAubmFtZX1gKTtyZXR1cm59aWYoQSghMCksUihudWxsKSxCMShudWxsKSxBUSh7dHlwZTpQLnR5cGUsbmFtZTpQLm5hbWUsc2l6ZTpQLnNpemV9KSlCMSh6USk7bS5jdXJyZW50PXA7dHJ5e2xldCBxMT1LMihQKSxYMT1hd2FpdCBXNihQLCJzZXJ2ZS1zaW0tY2Ftc3JjIixxMSxXMSk7QihQLm5hbWUpLFkoYT8idmlkZW8iOiJpbWFnZSIpLEcoWDEpLFYxKGBMb2FkZWQgJHtQLm5hbWV9YCl9Y2F0Y2gocTEpe2lmKG0uY3VycmVudClSKEQ2KTtlbHNlIFIocTE/Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIil9ZmluYWxseXtBKCExKX19LFtdKSxOMD1UKGFzeW5jKFApPT57UC5wcmV2ZW50RGVmYXVsdCgpLFAuc3RvcFByb3BhZ2F0aW9uKCksei5jdXJyZW50PTAsVighMSk7bGV0IHA9UC5kYXRhVHJhbnNmZXI/LmZpbGVzPy5bMF07aWYocClhd2FpdCB1MShwKX0sW3UxXSkseDE9VCgoKT0+e1koInBsYWNlaG9sZGVyIiksRygiIiksQihudWxsKSxSKG51bGwpLEIxKG51bGwpLG0uY3VycmVudD0hMX0sW10pLEUxPVQoKCk9PntPLmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxhMT1UKGFzeW5jKFApPT57bGV0IHA9UC50YXJnZXQsdD1wLmZpbGVzPy5bMF07aWYocC52YWx1ZT0iIix0KWF3YWl0IHUxKHQpfSxbdTFdKTt5KCgpPT57aWYoIUMpcmV0dXJuO2xldCBQPShwKT0+e2xldCB0PXAudGFyZ2V0O2lmKHQgaW5zdGFuY2VvZiBFbGVtZW50JiZ0LmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47SCghMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixQKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsUCl9LFtDXSk7bGV0IFowPVQoKFApPT57aWYoWjEoUC5pZCksWSgid2ViY2FtIiksQihudWxsKSxSKG51bGwpLG0uY3VycmVudD0hMSxIKCExKSxRKXUoUC5pZCl9LFtRXSksaTE9VCgoKT0+e2goKFApPT5QPT09Im9uIj8ib2ZmIjoib24iKX0sW10pLFUwPSFKMXx8WD09PSJwbGFjZWhvbGRlciIsRDA9VCgoUCk9PntpZihQLnByZXZlbnREZWZhdWx0KCksei5jdXJyZW50Kyssei5jdXJyZW50PT09MSlWKCEwKX0sW10pLF8wPVQoKFApPT57aWYoUC5wcmV2ZW50RGVmYXVsdCgpLFAuZGF0YVRyYW5zZmVyKVAuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSkscjE9VCgoUCk9PntpZihQLnByZXZlbnREZWZhdWx0KCksei5jdXJyZW50LS0sei5jdXJyZW50PD0wKXouY3VycmVudD0wLFYoITEpfSxbXSksSTE9SFEoe2J1bmRsZUlkOlEsaW5qZWN0ZWQ6SjEsc291cmNlOlgsZm9yZWdyb3VuZElzSW5qZWN0ZWQ6YzF9KSx2MT1JMT09PSJzdG9wIj97bGFiZWw6ZD09PSJzdG9wIj8iU3RvcHBpbmfigKYiOiJTdG9wIixvbkNsaWNrOncxLGtpbmQ6InN0b3AifTpJMT09PSJhdHRhY2giP3tsYWJlbDpkPT09ImluamVjdCI/IkluamVjdGluZ+KApiI6YEluamVjdCAke1F9YCxvbkNsaWNrOkowLGtpbmQ6ImF0dGFjaCJ9OntsYWJlbDpkPT09ImluamVjdCI/IlN0YXJ0aW5n4oCmIjoiUGxheSIsb25DbGljazpKMCxraW5kOiJwbGF5In0sZzE9STE9PT0ic3RvcCI/THx8ZCE9PW51bGw6IVF8fEx8fGQhPT1udWxsLG4xPVg9PT0icGxhY2Vob2xkZXIiLEswPVg9PT0id2ViY2FtIixMMD0oWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmISFOLGUxPUswP1cuZmluZCgoUCk9PlAuaWQ9PT1qKT8ubmFtZT8/aj8/IldlYmNhbSI6bnVsbCxlPUw/InVwbG9hZGluZyI6TDA/ImZpbGUiOkswPyJ3ZWJjYW0iOiJwbGFjZWhvbGRlciI7cmV0dXJuIFooVjAse29wZW46Sixvbk9wZW5DaGFuZ2U6Syxib2R5Q2xhc3NOYW1lOiJwdC0yLjUiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlooUTEse2NoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJDYW1lcmEifSksWihXUSx7c3RhdGU6TjF9KV19KSxjaGlsZHJlbjpaKCJkaXYiLHtvbkRyYWdFbnRlcjpEMCxvbkRyYWdPdmVyOl8wLG9uRHJhZ0xlYXZlOnIxLG9uRHJvcDpOMCxjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTIuNSIsY2hpbGRyZW46W1ooInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOiJSZXBsYWNlcyB0aGUgc2ltdWxhdG9yJ3MgY2FtZXJhIGZlZWQgYnkgaW5qZWN0aW5nIGEgZHlsaWIgYXQgYXBwIGxhdW5jaCBhbmQgc3RyZWFtaW5nIGZyYW1lcyBpbnRvIHNoYXJlZCBtZW1vcnkuIFBpY2sgbWVkaWEgb3IgYSB3ZWJjYW0sIHRoZW4gUGxheSB0byBpbmplY3QgaW50byB0aGUgZm9yZWdyb3VuZCBhcHAuIn0pLFooImlucHV0Iix7cmVmOk8sdHlwZToiZmlsZSIsYWNjZXB0OiJpbWFnZS8qLHZpZGVvLyoiLGNsYXNzTmFtZToiaGlkZGVuIixvbkNoYW5nZTphMX0pLFooImRpdiIse29uQ2xpY2s6KFApPT57aWYoIW4xKXJldHVybjtpZihQLnRhcmdldC5jbG9zZXN0KCJbZGF0YS1jbGVhci1tZWRpYV0iKSlyZXR1cm47RTEoKX0sdGl0bGU6bjE/Ik5vIHNvdXJjZSBzZWxlY3RlZCDigJQgUGxheSB1c2VzIGEgdGVzdC1wYXR0ZXJuIGZlZWQuIENsaWNrIHRvIHBpY2sgYW4gaW1hZ2UvdmlkZW8sIG9yIGRyb3Agb25lIGhlcmUuIjpLMD9gU291cmNlOiAke2UxfWA6YFNvdXJjZTogJHtOPz9YfWAsY2xhc3NOYW1lOlsicmVsYXRpdmUgbWluLWgtWzQ0cHhdIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yLjUgcHgtMy41IHB5LTIuNSByb3VuZGVkLVs3cHhdIHRleHQtY2VudGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixiYWNrZ3JvdW5kXSBkdXJhdGlvbi0xNTAiLG4xPyJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEyIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCIsVT8iIWJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4wOCldICFib3JkZXItW3JnYmEoMTAsMTMyLDI1NSwwLjYpXSI6IiIsTD8iY3Vyc29yLXByb2dyZXNzIjpuMT8iY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3ItZGVmYXVsdCJdLmpvaW4oIiAiKSxjaGlsZHJlbjpbWihQUSx7bW9kZTplLGZpbGVOYW1lOk4sd2ViY2FtTmFtZTplMSxzb3VyY2VLaW5kOlh9KSwhbjEmJiFMJiZaKCJidXR0b24iLHsiZGF0YS1jbGVhci1tZWRpYSI6ITAsb25DbGljazooUCk9PntQLnN0b3BQcm9wYWdhdGlvbigpLHgxKCl9LGNsYXNzTmFtZToic2hyaW5rLTAgdy01IGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNvdXJjZSIsdGl0bGU6IkNsZWFyIOKGkiBwbGFjZWhvbGRlciIsY2hpbGRyZW46WigkMCx7c2l6ZToxNCxzdHJva2VXaWR0aDoyfSl9KV19KSxuMSYmIUwmJlooX1Ese30pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIiwiZGF0YS1jYW1lcmEtc291cmNlLW1lbnUiOiEwLGNoaWxkcmVuOltaKCJidXR0b24iLHtvbkNsaWNrOigpPT5IKChQKT0+IVApLGNsYXNzTmFtZToiaC1mdWxsIG1pbi1oLVszNnB4XSB3LTEwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS84NSByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIHAtMCBob3ZlcjpiZy13aGl0ZS9bMC4wNl0gaG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOkMsdGl0bGU6WD09PSJ3ZWJjYW0iP2BTb3VyY2U6IHdlYmNhbSR7aj9gICgke1cuZmluZCgoUCk9PlAuaWQ9PT1qKT8ubmFtZT8/an0pYDoiIn0g4oCUIGNsaWNrIHRvIGNoYW5nZWA6YFNvdXJjZTogJHtYfSDigJQgY2xpY2sgdG8gcGljayBtZWRpYSBvciB3ZWJjYW1gLCJhcmlhLWxhYmVsIjoiQ2hvb3NlIGNhbWVyYSBzb3VyY2UiLGNoaWxkcmVuOlooTTIse3NpemU6MjAsc3Ryb2tlV2lkdGg6Mn0pfSksQyYmWigiZGl2Iix7cm9sZToibWVudSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs2cHgpXSBsZWZ0LTAgei0xMCBtaW4tdy1bMjAwcHhdIGZsZXggZmxleC1jb2wgZ2FwLXB4IHAtMSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQpXSIsY2hpbGRyZW46W1ooImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6InRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsb25DbGljazooKT0+e0goITEpLEUxKCl9LHRpdGxlOiJQaWNrIGFuIGltYWdlIG9yIHZpZGVvIGZyb20gZGlzayIsY2hpbGRyZW46IkJyb3dzZSBtZWRpYeKApiJ9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImgtcHggYmctd2hpdGUvOCBteS0xIn0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHBsLTIuNSBwci0yIHB0LTEgcGItWzJweF0iLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSIsY2hpbGRyZW46RT8iQ2FtZXJhcyAobG9hZGluZ+KApikiOlcubGVuZ3RoPT09MD8iTm8gY2FtZXJhcyI6IkNhbWVyYXMifSksWigiYnV0dG9uIix7b25DbGljazooUCk9PntQLnN0b3BQcm9wYWdhdGlvbigpLF8xKCl9LGRpc2FibGVkOkUsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LVsyMnB4XSBoLVsyMnB4XSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAgZGlzYWJsZWQ6b3BhY2l0eS01MCIsImFyaWEtbGFiZWwiOiJSZWZyZXNoIGNhbWVyYXMiLHRpdGxlOiJSZWZyZXNoIGNhbWVyYXMiLGNoaWxkcmVuOlooajAse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mn0pfSldfSksVy5tYXAoKFApPT57bGV0IHA9WD09PSJ3ZWJjYW0iJiZqPT09UC5pZDtyZXR1cm4gWigiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZTpbInRleHQtbGVmdCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLHA/IiFiZy13aGl0ZS9bMC4xMl0gIXRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzg1Il0uam9pbigiICIpLG9uQ2xpY2s6KCk9PlowKFApLHRpdGxlOlAubmFtZSxjaGlsZHJlbjpQLm5hbWV9LFAuaWQpfSldfSldfSksWigiYnV0dG9uIix7b25DbGljazp2MS5vbkNsaWNrLGRpc2FibGVkOmcxLGNsYXNzTmFtZTpbImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMi41IGJvcmRlci1ub25lIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpvcGFjaXR5LTUwIG1pbi1oLVszNnB4XSIsdjEua2luZD09PSJzdG9wIj8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJdLmpvaW4oIiAiKSx0aXRsZTp2MS5raW5kPT09InN0b3AiPyJTdG9wIHRoZSBjYW1lcmEgaGVscGVyIGFuZCB0ZXJtaW5hdGUgaW5qZWN0ZWQgYXBwcyI6djEua2luZD09PSJhdHRhY2giP2BJbmplY3QgJHtRfSBzbyBpdCBqb2lucyB0aGUgY2FtZXJhIGZlZWRgOiFRPyJCcmluZyBhbiBhcHAgdG8gdGhlIGZvcmVncm91bmQgZmlyc3QiOiJTdGFydDogaW5qZWN0IHRoZSBkeWxpYiBhbmQgbGF1bmNoIHRoZSBmb3JlZ3JvdW5kIGFwcCB3aXRoIHRoZSBjaG9zZW4gc291cmNlIiwiYXJpYS1wcmVzc2VkIjp2MS5raW5kPT09InN0b3AiLCJhcmlhLWxhYmVsIjp2MS5raW5kPT09InN0b3AiPyJTdG9wIjoiUGxheSIsY2hpbGRyZW46W3YxLmtpbmQ9PT0ic3RvcCI/WihFMix7fSk6Wih3Mix7fSksWigic3BhbiIse2NoaWxkcmVuOnYxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOnYxLmtpbmQ9PT0iYXR0YWNoIj8iSW5qZWN0IjoiUGxheSJ9KV19KSxaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6aTEsZGlzYWJsZWQ6VTAsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIG1pbi1oLVszNnB4XSBib3JkZXIgcm91bmRlZC1bN3B4XSBmb250LVtpbmhlcml0XSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBhY3RpdmU6c2NhbGUtWzAuOTddICR7Zj09PSJvbiI/ImJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjg4XSBlbmFibGVkOmhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjp0ZXh0LVsjMGEwYTBjXSI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXItd2hpdGUvOCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDldIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBlbmFibGVkOmhvdmVyOnRleHQtd2hpdGUifWAsImFyaWEtbGFiZWwiOmBNaXJyb3I6ICR7Zn0g4oCUIHRhcCB0byB0b2dnbGVgLHRpdGxlOlUwPyJNaXJyb3IgdG9nZ2xlIGF2YWlsYWJsZSBvbmNlIGEgc291cmNlIGlzIHN0cmVhbWluZyI6YE1pcnJvcjogJHtmfSDigJQgY2xpY2sgdG8gdG9nZ2xlYCwiYXJpYS1wcmVzc2VkIjpmPT09Im9uIixjaGlsZHJlbjpaKEEyLHtzaXplOjIwLHN0cm9rZVdpZHRoOjIsZmlsbDpmPT09Im9uIj8iY3VycmVudENvbG9yIjoibm9uZSJ9KX0pXX0pLEsxJiZaKFA2LHtraW5kOiJ3YXJuaW5nIixtZXNzYWdlOksxfSksbCYmWihQNix7a2luZDoiZXJyb3IiLG1lc3NhZ2U6bH0pXX0pfSl9dmFyIGoyPVsiZXh0cmEtc21hbGwiLCJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwiZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1sYXJnZSIsImV4dHJhLWV4dHJhLWV4dHJhLWxhcmdlIl0sRFE9MjUwLFRRPXthcHBlYXJhbmNlOiJsaWdodCIsImxpcXVpZC1nbGFzcyI6ImNsZWFyIiwiY29sb3ItZmlsdGVyIjoibm9uZSIsInRleHQtc2l6ZSI6ImxhcmdlIiwicmVkdWNlLW1vdGlvbiI6Im9mZiIsImluY3JlYXNlLWNvbnRyYXN0Ijoib2ZmIiwic2hvdy1ib3JkZXJzIjoib2ZmIiwicmVkdWNlLXRyYW5zcGFyZW5jeSI6Im9mZiIsdm9pY2VvdmVyOiJvZmYifSxJMz17YXBwZWFyYW5jZTpbe3ZhbHVlOiJsaWdodCIsbGFiZWw6IkxpZ2h0In0se3ZhbHVlOiJkYXJrIixsYWJlbDoiRGFyayJ9XSwibGlxdWlkLWdsYXNzIjpbe3ZhbHVlOiJjbGVhciIsbGFiZWw6IkNsZWFyIn0se3ZhbHVlOiJ0aW50ZWQiLGxhYmVsOiJUaW50ZWQifV0sImNvbG9yLWZpbHRlciI6W3t2YWx1ZToibm9uZSIsbGFiZWw6Ik5vbmUifSx7dmFsdWU6InJlZC1ncmVlbiIsbGFiZWw6IlJlZC9HcmVlbiAoUHJvdGFub3BpYSkifSx7dmFsdWU6ImdyZWVuLXJlZCIsbGFiZWw6IkdyZWVuL1JlZCAoRGV1dGVyYW5vcGlhKSJ9LHt2YWx1ZToiYmx1ZS15ZWxsb3ciLGxhYmVsOiJCbHVlL1llbGxvdyAoVHJpdGFub3BpYSkifSx7dmFsdWU6ImdyYXlzY2FsZSIsbGFiZWw6IkdyYXlzY2FsZSJ9XX0sd1E9W3trZXk6InJlZHVjZS1tb3Rpb24iLGxhYmVsOiJSZWR1Y2UgTW90aW9uIn0se2tleToiaW5jcmVhc2UtY29udHJhc3QiLGxhYmVsOiJJbmNyZWFzZSBDb250cmFzdCJ9LHtrZXk6InNob3ctYm9yZGVycyIsbGFiZWw6IlNob3cgQm9yZGVycyJ9LHtrZXk6InJlZHVjZS10cmFuc3BhcmVuY3kiLGxhYmVsOiJSZWR1Y2UgVHJhbnNwYXJlbmN5In0se2tleToidm9pY2VvdmVyIixsYWJlbDoiVm9pY2VPdmVyIn1dO2Z1bmN0aW9uIGYwKHtpY29uOiQsbGFiZWw6USxjaGlsZHJlbjpKfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIG1pbi1oLVszMHB4XSIsImRhdGEtc2V0dGluZy1yb3ciOlEsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNpemUtWzE4cHhdIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIixjaGlsZHJlbjokfSksUV19KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IG1pbi13LTAganVzdGlmeS1lbmQiLGNoaWxkcmVuOkp9KV19KX1mdW5jdGlvbiBFUSh7dmFsdWU6JCxkaXNhYmxlZDpRLG9uQ2hhbmdlOkp9KXtsZXRbSyxYXT1NKG51bGwpLFk9SShudWxsKSxxPUkobnVsbCksRz1UKChIKT0+e2lmKHEuY3VycmVudD09PUgpcmV0dXJuO3EuY3VycmVudD1ILEooSCl9LFtKXSksTj1UKChIKT0+e2lmKFgoSCksWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpO1kuY3VycmVudD1zZXRUaW1lb3V0KCgpPT5HKEgpLERRKX0sW0ddKSxCPVQoKCk9PntpZihZLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFkuY3VycmVudCksWS5jdXJyZW50PW51bGw7WCgoSCk9PntpZihIIT09bnVsbClHKEgpO3JldHVybiBudWxsfSkscS5jdXJyZW50PW51bGx9LFtHXSksVT1qMi5sZW5ndGgtMSxWPUs/PyQsej1gJHtWL1UqMTAwfSVgO3JldHVybiBaKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHctWzEyMHB4XSBtaW4tdy0wIGZsZXgtY29sIixjaGlsZHJlbjpbWigiaW5wdXQiLHt0eXBlOiJyYW5nZSIsImFyaWEtbGFiZWwiOiJUZXh0IFNpemUiLG1pbjowLG1heDpVLHN0ZXA6MSx2YWx1ZTpWLGRpc2FibGVkOlEsb25DaGFuZ2U6KEgpPT5OKE51bWJlcihILnRhcmdldC52YWx1ZSkpLG9uUG9pbnRlclVwOkIsb25LZXlVcDpCLG9uQmx1cjpCLHN0eWxlOnsiLS1zbGlkZXItZmlsbCI6eiwiLS1zbGlkZXItZmlsbC1jb2xvciI6UT8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoiIzBhODRmZiJ9LGNsYXNzTmFtZTpgaC1bMTNweF0gdy1mdWxsIGFwcGVhcmFuY2Utbm9uZSByb3VuZGVkLWZ1bGwgYmctdHJhbnNwYXJlbnQgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6W291dGxpbmU6MS41cHhfc29saWRfcmdiYSgxMCwxMzIsMjU1LDAuNTUpXSBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTQgJHtRPyJjdXJzb3ItZGVmYXVsdCI6ImN1cnNvci1wb2ludGVyIn0gJHsiWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpoLVs0cHhdIFsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106W2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHZhcigtLXNsaWRlci1maWxsLWNvbG9yKV92YXIoLS1zbGlkZXItZmlsbCkscmdiYSgyNTUsMjU1LDI1NSwwLjIyKV92YXIoLS1zbGlkZXItZmlsbCkpXSBbJjo6LW1vei1yYW5nZS10cmFja106aC1bNHB4XSBbJjo6LW1vei1yYW5nZS10cmFja106cm91bmRlZC1mdWxsIFsmOjotbW96LXJhbmdlLXRyYWNrXTpiZy13aGl0ZS8yMCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106aC1bNHB4XSBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106cm91bmRlZC1mdWxsIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpiZy1bdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpXSJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci10aHVtYl06YXBwZWFyYW5jZS1ub25lIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06c2l6ZS1bMTNweF0gWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmJnLXdoaXRlLzUwIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06c2hhZG93LVswXzFweF8zcHhfcmdiYSgwLDAsMCwwLjQ1KV0gWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTotbXQtWzQuNXB4XSBbJjo6LW1vei1yYW5nZS10aHVtYl06c2l6ZS1bMTNweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10aHVtYl06Ym9yZGVyLW5vbmUgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJnLXdoaXRlIFsmOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZS81MCJ9YH0pLFooInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToicG9pbnRlci1ldmVudHMtbm9uZSBtdC1bM3B4XSBmbGV4IGp1c3RpZnktYmV0d2VlbiBweC1bNS41cHhdIixjaGlsZHJlbjpqMi5tYXAoKEgpPT5aKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLVsycHhdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS80MCJ9LEgpKX0pXX0pfWZ1bmN0aW9uIHYyKHtsYWJlbDokLHZhbHVlOlEsb3B0aW9uczpKLGRpc2FibGVkOkssb25DaGFuZ2U6WH0pe3JldHVybiBaKFc1LHtsYWJlbDokLHZhbHVlOlEsb3B0aW9uczpKLGRpc2FibGVkOkssb25DaGFuZ2U6WCxjbGFzc05hbWU6ImJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtbWQgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBweS0wLjUgcHgtMiBtaW4tdy0wIG1heC13LVsxNTBweF0gZGlzYWJsZWQ6dGV4dC13aGl0ZS80MCJ9KX12YXIgeDI9e2FwcGVhcmFuY2U6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1ooInBhdGgiLHtkOiJNMTIgMnYyIn0pLFooInBhdGgiLHtkOiJNMTQuODM3IDE2LjM4NWE2IDYgMCAxIDEtNy4yMjMtNy4yMjJjLjYyNC0uMTQ3Ljk3LjY2LjcxNSAxLjI0OGE0IDQgMCAwIDAgNS4yNiA1LjI1OWMuNTg5LS4yNTUgMS4zOTYuMDkgMS4yNDguNzE1In0pLFooInBhdGgiLHtkOiJNMTYgMTJhNCA0IDAgMCAwLTQtNCJ9KSxaKCJwYXRoIix7ZDoibTE5IDUtMS4yNTYgMS4yNTYifSksWigicGF0aCIse2Q6Ik0yMCAxMmgyIn0pXX0pLGdsYXNzOlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDIyMCAyMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik0xNTIgMTgzVjE5NUgxMDBWMTgzSDE1MlpNMTk2IDEzOVYxMjZDMTk2IDEwMS42OTkgMTc2LjMwMSA4MiAxNTIgODJIMTAwQzc1LjY5OTUgODIgNTYgMTAxLjY5OSA1NiAxMjZWMTM5QzU2IDE2My4zMDEgNzUuNjk5NSAxODMgMTAwIDE4M1YxOTVMOTkuMjc2NCAxOTQuOTk1QzY4LjkyMjggMTk0LjYxMSA0NC4zODkzIDE3MC4wNzcgNDQuMDA0OSAxMzkuNzI0TDQ0IDEzOVYxMjZDNDQgOTUuMDcyMSA2OS4wNzIxIDcwIDEwMCA3MEgxNTJDMTgyLjkyOCA3MCAyMDggOTUuMDcyMSAyMDggMTI2VjEzOUwyMDcuOTk1IDEzOS43MjRDMjA3LjYxMSAxNzAuMDc3IDE4My4wNzcgMTk0LjYxMSAxNTIuNzI0IDE5NC45OTVMMTUyIDE5NVYxODNDMTc2LjMwMSAxODMgMTk2IDE2My4zMDEgMTk2IDEzOVoifSksWigicGF0aCIse2Q6Ik0xMzYgMjVDMTQ3LjA0NiAyNSAxNTYgMzMuOTU0MyAxNTYgNDVWNzBIMTQzVjQ1QzE0MyA0MS4xMzQgMTM5Ljg2NiAzOCAxMzYgMzhINDFDMzcuMTM0IDM4IDM0IDQxLjEzNCAzNCA0NVYxNDBDMzQgMTQzLjg2NiAzNy4xMzQgMTQ3IDQxIDE0N0g0NC44NjA0QzQ1LjY0ODcgMTUxLjUzNiA0Ni45NjM0IDE1NS44OTEgNDguNzQwMiAxNjBINDFMNDAuNDgzNCAxNTkuOTkzQzI5Ljg0ODEgMTU5LjcyNCAyMS4yNzY1IDE1MS4xNTIgMjEuMDA2OCAxNDAuNTE3TDIxIDE0MFY0NUMyMSAzMy45NTQzIDI5Ljk1NDMgMjUgNDEgMjVIMTM2WiJ9KSxaKCJwYXRoIix7ZDoiTTE1Ni4xOTkgMTQwQzE1Ni4xOTkgMTUwLjg3MyAxNDcuNTIzIDE1OS43MTkgMTM2LjcxNiAxNTkuOTkzTDEzNi4xOTkgMTYwSDgwLjkxN0M3Ny45NDYxIDE2MCA3Ni4xNjM5IDE2My4zIDc3Ljc5MyAxNjUuNzg0Qzc5LjI0NTEgMTY3Ljk5OSA3Ni4xNjQ3IDE3MC4zNTMgNzQuNDA5NCAxNjguMzdMNzMuNjA1OSAxNjcuNDYyQzY5LjM0OTcgMTYyLjY1NCA2NyAxNTYuNDU1IDY3IDE1MC4wMzRDNjcgMTQ4LjM1OCA2OC4zNTgzIDE0NyA3MC4wMzM5IDE0N0gxMzYuMTk5QzE0MC4wNjUgMTQ3IDE0My4xOTkgMTQzLjg2NiAxNDMuMTk5IDE0MFY5Ni45OTU1QzE0My4xOTkgOTMuOTgyMiAxNDEuMzU0IDkxLjI3NjMgMTM4LjU0OSA5MC4xNzYxQzEzNy4zODkgODkuNzIxNSAxMzcuNzE1IDg4IDEzOC45NiA4OEwxNDMuMTk5IDg4QzE1MC4zNzkgODggMTU2LjE5OSA5My44MjAzIDE1Ni4xOTkgMTAxVjE0MFoifSldfSksZmlsdGVyOlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltaKCJwYXRoIix7ZDoiTTExIDE3YTQgNCAwIDAgMS04IDBWNWEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMloifSksWigicGF0aCIse2Q6Ik0xNi43IDEzSDE5YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAySDcifSksWigicGF0aCIse2Q6Ik0gNyAxN2guMDEifSksWigicGF0aCIse2Q6Im0xMSA4IDIuMy0yLjNhMi40IDIuNCAwIDAgMSAzLjQwNC4wMDRMMTguNiA3LjZhMi40IDIuNCAwIDAgMSAuMDI2IDMuNDM0TDkuOSAxOS44In0pXX0pLHRleHRTaXplOlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDUyIDM0IixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46WigicGF0aCIse2Q6Ik0zOS43MjY2IDMzLjAyMzRDMzguMTQ4NCAzMy4wMjM0IDM2Ljc1IDMyLjcyNjYgMzUuNTMxMiAzMi4xMzI4QzM0LjMxMjUgMzEuNTM5MSAzMy4zNTk0IDMwLjcxMDkgMzIuNjcxOSAyOS42NDg0QzMyIDI4LjU3MDMgMzEuNjY0MSAyNy4zMTI1IDMxLjY2NDEgMjUuODc1QzMxLjY2NDEgMjMuNzgxMiAzMi40Mjk3IDIyLjEwOTQgMzMuOTYwOSAyMC44NTk0QzM1LjUwNzggMTkuNjA5NCAzNy43MTA5IDE4LjkwNjIgNDAuNTcwMyAxOC43NUw0Ny42MDE2IDE4LjM1MTZWMTYuNUM0Ny42MDE2IDE1LjAxNTYgNDcuMTMyOCAxMy44MzU5IDQ2LjE5NTMgMTIuOTYwOUM0NS4yNTc4IDEyLjA4NTkgNDMuOTUzMSAxMS42NDg0IDQyLjI4MTIgMTEuNjQ4NEM0MC45MDYyIDExLjY0ODQgMzkuNzUgMTEuOTQ1MyAzOC44MTI1IDEyLjUzOTFDMzcuODc1IDEzLjEzMjggMzcuMDkzOCAxNC4wNDY5IDM2LjQ2ODggMTUuMjgxMkMzNi4yNjU2IDE1LjYwOTQgMzYuMDE1NiAxNS44NTE2IDM1LjcxODggMTYuMDA3OEMzNS40MjE5IDE2LjE2NDEgMzUuMDc4MSAxNi4yNDIyIDM0LjY4NzUgMTYuMjQyMkMzNC4xNTYyIDE2LjI0MjIgMzMuNzEwOSAxNi4wNzgxIDMzLjM1MTYgMTUuNzVDMzMuMDA3OCAxNS40MjE5IDMyLjgzNTkgMTQuOTkyMiAzMi44MzU5IDE0LjQ2MDlDMzIuODM1OSAxNC4yMjY2IDMyLjg2NzIgMTMuOTc2NiAzMi45Mjk3IDEzLjcxMDlDMzMuMDA3OCAxMy40NDUzIDMzLjEwOTQgMTMuMTc5NyAzMy4yMzQ0IDEyLjkxNDFDMzMuODc1IDExLjQ2MDkgMzUuMDE1NiAxMC4zMDQ3IDM2LjY1NjIgOS40NDUzMUMzOC4zMTI1IDguNTg1OTQgNDAuMjI2NiA4LjE1NjI1IDQyLjM5ODQgOC4xNTYyNUM0NC4zMjAzIDguMTU2MjUgNDUuOTg0NCA4LjQ5MjE5IDQ3LjM5MDYgOS4xNjQwNkM0OC44MTI1IDkuODIwMzEgNDkuODk4NCAxMC43NSA1MC42NDg0IDExLjk1MzFDNTEuNDE0MSAxMy4xNTYyIDUxLjc5NjkgMTQuNTcwMyA1MS43OTY5IDE2LjE5NTNWMzAuOTE0MUM1MS43OTY5IDMxLjU4NTkgNTEuNjA5NCAzMi4xMDk0IDUxLjIzNDQgMzIuNDg0NEM1MC44NTk0IDMyLjg1OTQgNTAuMzY3MiAzMy4wNDY5IDQ5Ljc1NzggMzMuMDQ2OUM0OS4xNjQxIDMzLjA0NjkgNDguNjc5NyAzMi44NjcyIDQ4LjMwNDcgMzIuNTA3OEM0Ny45Mjk3IDMyLjE0ODQgNDcuNzM0NCAzMS42NjQxIDQ3LjcxODggMzEuMDU0N1YyOC4zNTk0SDQ3LjY3MTlDNDYuOTg0NCAyOS43ODEyIDQ1LjkwNjIgMzAuOTE0MSA0NC40Mzc1IDMxLjc1NzhDNDIuOTg0NCAzMi42MDE2IDQxLjQxNDEgMzMuMDIzNCAzOS43MjY2IDMzLjAyMzRaTTQwLjgwNDcgMjkuNjcxOUM0Mi4wNzAzIDI5LjY3MTkgNDMuMjEwOSAyOS40MDYyIDQ0LjIyNjYgMjguODc1QzQ1LjI1NzggMjguMzQzOCA0Ni4wNzgxIDI3LjYxNzIgNDYuNjg3NSAyNi42OTUzQzQ3LjI5NjkgMjUuNzczNCA0Ny42MDE2IDI0Ljc1IDQ3LjYwMTYgMjMuNjI1VjIxLjMyODFMNDEuMTMyOCAyMS43NUMzOS40NDUzIDIxLjg1OTQgMzguMTY0MSAyMi4yNzM0IDM3LjI4OTEgMjIuOTkyMkMzNi40MTQxIDIzLjY5NTMgMzUuOTc2NiAyNC42MDk0IDM1Ljk3NjYgMjUuNzM0NEMzNS45NzY2IDI2LjkyMTkgMzYuNDIxOSAyNy44NzUgMzcuMzEyNSAyOC41OTM4QzM4LjIwMzEgMjkuMzEyNSAzOS4zNjcyIDI5LjY3MTkgNDAuODA0NyAyOS42NzE5Wk0yLjE3OTY5IDMzLjAyMzRDMS41MDc4MSAzMy4wMjM0IDAuOTc2NTYyIDMyLjgzNTkgMC41ODU5MzggMzIuNDYwOUMwLjE5NTMxMiAzMi4wODU5IDAgMzEuNTc4MSAwIDMwLjkzNzVDMCAzMC41MzEyIDAuMDg1OTM3NSAzMC4wNzAzIDAuMjU3ODEyIDI5LjU1NDdMMTAuNDA2MiAyLjQxNDA2QzEwLjk4NDQgMC44MDQ2ODggMTIuMTAxNiAwIDEzLjc1NzggMEMxNC42MTcyIDAgMTUuMzI4MSAwLjIwMzEyNSAxNS44OTA2IDAuNjA5Mzc1QzE2LjQ1MzEgMS4wMTU2MiAxNi44NzUgMS42MjUgMTcuMTU2MiAyLjQzNzVMMjcuMjU3OCAyOS40ODQ0QzI3LjQ0NTMgMzAgMjcuNTM5MSAzMC40Njg4IDI3LjUzOTEgMzAuODkwNkMyNy41MzkxIDMxLjU0NjkgMjcuMzM1OSAzMi4wNzAzIDI2LjkyOTcgMzIuNDYwOUMyNi41MjM0IDMyLjgzNTkgMjUuOTc2NiAzMy4wMjM0IDI1LjI4OTEgMzMuMDIzNEMyNC42MzI4IDMzLjAyMzQgMjQuMTA5NCAzMi44NzUgMjMuNzE4OCAzMi41NzgxQzIzLjM0MzggMzIuMjgxMiAyMy4wMzkxIDMxLjc4OTEgMjIuODA0NyAzMS4xMDE2TDEzLjgyODEgNS4zNDM3NUgxMy42NjQxTDQuNjY0MDYgMzEuMTAxNkM0LjQyOTY5IDMxLjc4OTEgNC4xMjUgMzIuMjgxMiAzLjc1IDMyLjU3ODFDMy4zNzUgMzIuODc1IDIuODUxNTYgMzMuMDIzNCAyLjE3OTY5IDMzLjAyMzRaTTYuNjc5NjkgMjMuNzQyMkM2LjE0ODQ0IDIzLjc0MjIgNS43MDMxMiAyMy41NjI1IDUuMzQzNzUgMjMuMjAzMUM0Ljk4NDM4IDIyLjg0MzggNC44MDQ2OSAyMi4zOTg0IDQuODA0NjkgMjEuODY3MkM0LjgwNDY5IDIxLjM1MTYgNC45ODQzOCAyMC45MTQxIDUuMzQzNzUgMjAuNTU0N0M1LjcwMzEyIDIwLjE5NTMgNi4xNDg0NCAyMC4wMTU2IDYuNjc5NjkgMjAuMDE1NkgyMC44NTk0QzIxLjM3NSAyMC4wMTU2IDIxLjgxMjUgMjAuMTk1MyAyMi4xNzE5IDIwLjU1NDdDMjIuNTMxMiAyMC45MTQxIDIyLjcxMDkgMjEuMzUxNiAyMi43MTA5IDIxLjg2NzJDMjIuNzEwOSAyMi4zOTg0IDIyLjUzMTIgMjIuODQzOCAyMi4xNzE5IDIzLjIwMzFDMjEuODEyNSAyMy41NjI1IDIxLjM3NSAyMy43NDIyIDIwLjg1OTQgMjMuNzQyMkg2LjY3OTY5WiJ9KX0pLG1vdGlvbjpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsY2hpbGRyZW46W1ooImNpcmNsZSIse2N4OiIxNCIsY3k6IjEyIixyOiI2In0pLFooInBhdGgiLHtkOiJNMyA4aDRNMiAxMmg0TTMgMTZoNCJ9KV19KSxjb250cmFzdDpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWigiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn0pLFooInBhdGgiLHtkOiJNMTIgMThhNiA2IDAgMCAwIDAtMTJ2MTJ6In0pXX0pLGJvcmRlcnM6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1ooInBhdGgiLHtkOiJNNSAyMWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDIifSksWigicGF0aCIse2Q6Ik05IDIxaDEifSksWigicGF0aCIse2Q6Ik0xNCAyMWgxIn0pXX0pLHRyYW5zcGFyZW5jeTpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA2MyA0NiIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNMjIuNzM0NCA0LjE3MTg4QzIyLjE4NzUgNC4xNzE4OCAyMS43MTg4IDMuOTc2NTYgMjEuMzI4MSAzLjU4NTk0QzIwLjkzNzUgMy4xOTUzMSAyMC43NDIyIDIuNzE4NzUgMjAuNzQyMiAyLjE1NjI1QzIwLjc0MjIgMS42MDkzOCAyMC45Mzc1IDEuMTQwNjIgMjEuMzI4MSAwLjc1QzIxLjcxODggMC4zNTkzNzUgMjIuMTg3NSAwLjE2NDA2MiAyMi43MzQ0IDAuMTY0MDYyQzIzLjI4MTIgMC4xNjQwNjIgMjMuNzUgMC4zNTkzNzUgMjQuMTQwNiAwLjc1QzI0LjUzMTIgMS4xNDA2MiAyNC43MjY2IDEuNjA5MzggMjQuNzI2NiAyLjE1NjI1QzI0LjcyNjYgMi43MTg3NSAyNC41MzEyIDMuMTk1MzEgMjQuMTQwNiAzLjU4NTk0QzIzLjc1IDMuOTc2NTYgMjMuMjgxMiA0LjE3MTg4IDIyLjczNDQgNC4xNzE4OFpNMjkuMTA5NCA1LjIwMzEyQzI4LjU0NjkgNS4yMDMxMiAyOC4wNzAzIDUuMDA3ODEgMjcuNjc5NyA0LjYxNzE5QzI3LjI4OTEgNC4yMjY1NiAyNy4wOTM4IDMuNzU3ODEgMjcuMDkzOCAzLjIxMDk0QzI3LjA5MzggMi42NjQwNiAyNy4yODkxIDIuMTk1MzEgMjcuNjc5NyAxLjgwNDY5QzI4LjA3MDMgMS4zOTg0NCAyOC41NDY5IDEuMTk1MzEgMjkuMTA5NCAxLjE5NTMxQzI5LjY1NjIgMS4xOTUzMSAzMC4xMjUgMS4zOTg0NCAzMC41MTU2IDEuODA0NjlDMzAuOTA2MiAyLjE5NTMxIDMxLjEwMTYgMi42NjQwNiAzMS4xMDE2IDMuMjEwOTRDMzEuMTAxNiAzLjc1NzgxIDMwLjkwNjIgNC4yMjY1NiAzMC41MTU2IDQuNjE3MTlDMzAuMTI1IDUuMDA3ODEgMjkuNjU2MiA1LjIwMzEyIDI5LjEwOTQgNS4yMDMxMlpNMzQuODc1IDguMTMyODFDMzQuMzI4MSA4LjEzMjgxIDMzLjg1MTYgNy45Mzc1IDMzLjQ0NTMgNy41NDY4OEMzMy4wNTQ3IDcuMTQwNjIgMzIuODU5NCA2LjY3MTg4IDMyLjg1OTQgNi4xNDA2MkMzMi44NTk0IDUuNTc4MTIgMzMuMDU0NyA1LjEwMTU2IDMzLjQ0NTMgNC43MTA5NEMzMy44NTE2IDQuMzIwMzEgMzQuMzI4MSA0LjEyNSAzNC44NzUgNC4xMjVDMzUuNDIxOSA0LjEyNSAzNS44OTA2IDQuMzIwMzEgMzYuMjgxMiA0LjcxMDk0QzM2LjY4NzUgNS4xMDE1NiAzNi44OTA2IDUuNTc4MTIgMzYuODkwNiA2LjE0MDYyQzM2Ljg5MDYgNi42NzE4OCAzNi42ODc1IDcuMTQwNjIgMzYuMjgxMiA3LjU0Njg4QzM1Ljg5MDYgNy45Mzc1IDM1LjQyMTkgOC4xMzI4MSAzNC44NzUgOC4xMzI4MVpNMzkuNDQ1MyAxMi42Nzk3QzM4Ljg5ODQgMTIuNjc5NyAzOC40MjE5IDEyLjQ4NDQgMzguMDE1NiAxMi4wOTM4QzM3LjYyNSAxMS43MDMxIDM3LjQyOTcgMTEuMjM0NCAzNy40Mjk3IDEwLjY4NzVDMzcuNDI5NyAxMC4xNTYyIDM3LjYyNSA5LjY5NTMxIDM4LjAxNTYgOS4zMDQ2OUMzOC40MjE5IDguODk4NDQgMzguODk4NCA4LjY5NTMxIDM5LjQ0NTMgOC42OTUzMUMzOS45OTIyIDguNjk1MzEgNDAuNDYwOSA4Ljg5ODQ0IDQwLjg1MTYgOS4zMDQ2OUM0MS4yNDIyIDkuNjk1MzEgNDEuNDM3NSAxMC4xNTYyIDQxLjQzNzUgMTAuNjg3NUM0MS40Mzc1IDExLjIzNDQgNDEuMjQyMiAxMS43MDMxIDQwLjg1MTYgMTIuMDkzOEM0MC40NjA5IDEyLjQ4NDQgMzkuOTkyMiAxMi42Nzk3IDM5LjQ0NTMgMTIuNjc5N1pNNDIuMzc1IDE4LjM5ODRDNDEuODEyNSAxOC4zOTg0IDQxLjMyODEgMTguMjAzMSA0MC45MjE5IDE3LjgxMjVDNDAuNTMxMiAxNy40MjE5IDQwLjMzNTkgMTYuOTUzMSA0MC4zMzU5IDE2LjQwNjJDNDAuMzM1OSAxNS44NDM4IDQwLjUzMTIgMTUuMzY3MiA0MC45MjE5IDE0Ljk3NjZDNDEuMzI4MSAxNC41ODU5IDQxLjgxMjUgMTQuMzkwNiA0Mi4zNzUgMTQuMzkwNkM0Mi45MDYyIDE0LjM5MDYgNDMuMzY3MiAxNC41ODU5IDQzLjc1NzggMTQuOTc2NkM0NC4xNjQxIDE1LjM2NzIgNDQuMzY3MiAxNS44NDM4IDQ0LjM2NzIgMTYuNDA2MkM0NC4zNjcyIDE2Ljk1MzEgNDQuMTY0MSAxNy40MjE5IDQzLjc1NzggMTcuODEyNUM0My4zNjcyIDE4LjIwMzEgNDIuOTA2MiAxOC4zOTg0IDQyLjM3NSAxOC4zOTg0Wk00My40NTMxIDI0Ljc5NjlDNDIuOTA2MiAyNC43OTY5IDQyLjQzNzUgMjQuNjAxNiA0Mi4wNDY5IDI0LjIxMDlDNDEuNjU2MiAyMy44MjAzIDQxLjQ2MDkgMjMuMzQzOCA0MS40NjA5IDIyLjc4MTJDNDEuNDYwOSAyMi4yMzQ0IDQxLjY1NjIgMjEuNzY1NiA0Mi4wNDY5IDIxLjM3NUM0Mi40Mzc1IDIwLjk4NDQgNDIuOTA2MiAyMC43ODkxIDQzLjQ1MzEgMjAuNzg5MUM0NCAyMC43ODkxIDQ0LjQ2ODggMjAuOTg0NCA0NC44NTk0IDIxLjM3NUM0NS4yNjU2IDIxLjc2NTYgNDUuNDY4OCAyMi4yMzQ0IDQ1LjQ2ODggMjIuNzgxMkM0NS40Njg4IDIzLjM0MzggNDUuMjY1NiAyMy44MjAzIDQ0Ljg1OTQgMjQuMjEwOUM0NC40Njg4IDI0LjYwMTYgNDQgMjQuNzk2OSA0My40NTMxIDI0Ljc5NjlaTTQyLjM3NSAzMS4xNzE5QzQxLjgxMjUgMzEuMTcxOSA0MS4zMjgxIDMwLjk3NjYgNDAuOTIxOSAzMC41ODU5QzQwLjUzMTIgMzAuMTk1MyA0MC4zMzU5IDI5LjcyNjYgNDAuMzM1OSAyOS4xNzk3QzQwLjMzNTkgMjguNjE3MiA0MC41MzEyIDI4LjE0MDYgNDAuOTIxOSAyNy43NUM0MS4zMjgxIDI3LjM1OTQgNDEuODEyNSAyNy4xNjQxIDQyLjM3NSAyNy4xNjQxQzQyLjkwNjIgMjcuMTY0MSA0My4zNjcyIDI3LjM1OTQgNDMuNzU3OCAyNy43NUM0NC4xNjQxIDI4LjE0MDYgNDQuMzY3MiAyOC42MTcyIDQ0LjM2NzIgMjkuMTc5N0M0NC4zNjcyIDI5LjcyNjYgNDQuMTY0MSAzMC4xOTUzIDQzLjc1NzggMzAuNTg1OUM0My4zNjcyIDMwLjk3NjYgNDIuOTA2MiAzMS4xNzE5IDQyLjM3NSAzMS4xNzE5Wk0zOS40NDUzIDM2Ljg5MDZDMzguODk4NCAzNi44OTA2IDM4LjQyMTkgMzYuNjk1MyAzOC4wMTU2IDM2LjMwNDdDMzcuNjI1IDM1Ljg5ODQgMzcuNDI5NyAzNS40MjE5IDM3LjQyOTcgMzQuODc1QzM3LjQyOTcgMzQuMzI4MSAzNy42MjUgMzMuODU5NCAzOC4wMTU2IDMzLjQ2ODhDMzguNDIxOSAzMy4wNjI1IDM4Ljg5ODQgMzIuODU5NCAzOS40NDUzIDMyLjg1OTRDMzkuOTkyMiAzMi44NTk0IDQwLjQ2MDkgMzMuMDYyNSA0MC44NTE2IDMzLjQ2ODhDNDEuMjQyMiAzMy44NTk0IDQxLjQzNzUgMzQuMzI4MSA0MS40Mzc1IDM0Ljg3NUM0MS40Mzc1IDM1LjQyMTkgNDEuMjQyMiAzNS44OTg0IDQwLjg1MTYgMzYuMzA0N0M0MC40NjA5IDM2LjY5NTMgMzkuOTkyMiAzNi44OTA2IDM5LjQ0NTMgMzYuODkwNlpNMzQuODc1IDQxLjQzNzVDMzQuMzI4MSA0MS40Mzc1IDMzLjg1MTYgNDEuMjQyMiAzMy40NDUzIDQwLjg1MTZDMzMuMDU0NyA0MC40NjA5IDMyLjg1OTQgMzkuOTkyMiAzMi44NTk0IDM5LjQ0NTNDMzIuODU5NCAzOC44OTg0IDMzLjA1NDcgMzguNDI5NyAzMy40NDUzIDM4LjAzOTFDMzMuODUxNiAzNy42MzI4IDM0LjMyODEgMzcuNDI5NyAzNC44NzUgMzcuNDI5N0MzNS40MjE5IDM3LjQyOTcgMzUuODkwNiAzNy42MzI4IDM2LjI4MTIgMzguMDM5MUMzNi42ODc1IDM4LjQyOTcgMzYuODkwNiAzOC44OTg0IDM2Ljg5MDYgMzkuNDQ1M0MzNi44OTA2IDM5Ljk5MjIgMzYuNjg3NSA0MC40NjA5IDM2LjI4MTIgNDAuODUxNkMzNS44OTA2IDQxLjI0MjIgMzUuNDIxOSA0MS40Mzc1IDM0Ljg3NSA0MS40Mzc1Wk0yOS4xMDk0IDQ0LjM2NzJDMjguNTQ2OSA0NC4zNjcyIDI4LjA3MDMgNDQuMTY0MSAyNy42Nzk3IDQzLjc1NzhDMjcuMjg5MSA0My4zNjcyIDI3LjA5MzggNDIuODk4NCAyNy4wOTM4IDQyLjM1MTZDMjcuMDkzOCA0MS44MDQ3IDI3LjI4OTEgNDEuMzM1OSAyNy42Nzk3IDQwLjk0NTNDMjguMDcwMyA0MC41NTQ3IDI4LjU0NjkgNDAuMzU5NCAyOS4xMDk0IDQwLjM1OTRDMjkuNjU2MiA0MC4zNTk0IDMwLjEyNSA0MC41NTQ3IDMwLjUxNTYgNDAuOTQ1M0MzMC45MDYyIDQxLjMzNTkgMzEuMTAxNiA0MS44MDQ3IDMxLjEwMTYgNDIuMzUxNkMzMS4xMDE2IDQyLjg5ODQgMzAuOTA2MiA0My4zNjcyIDMwLjUxNTYgNDMuNzU3OEMzMC4xMjUgNDQuMTY0MSAyOS42NTYyIDQ0LjM2NzIgMjkuMTA5NCA0NC4zNjcyWk0yMi43MzQ0IDQ1LjM5ODRDMjIuMTg3NSA0NS4zOTg0IDIxLjcxODggNDUuMjAzMSAyMS4zMjgxIDQ0LjgxMjVDMjAuOTM3NSA0NC40MjE5IDIwLjc0MjIgNDMuOTUzMSAyMC43NDIyIDQzLjQwNjJDMjAuNzQyMiA0Mi44NDM4IDIwLjkzNzUgNDIuMzY3MiAyMS4zMjgxIDQxLjk3NjZDMjEuNzE4OCA0MS41ODU5IDIyLjE4NzUgNDEuMzkwNiAyMi43MzQ0IDQxLjM5MDZDMjMuMjgxMiA0MS4zOTA2IDIzLjc1IDQxLjU4NTkgMjQuMTQwNiA0MS45NzY2QzI0LjUzMTIgNDIuMzY3MiAyNC43MjY2IDQyLjg0MzggMjQuNzI2NiA0My40MDYyQzI0LjcyNjYgNDMuOTUzMSAyNC41MzEyIDQ0LjQyMTkgMjQuMTQwNiA0NC44MTI1QzIzLjc1IDQ1LjIwMzEgMjMuMjgxMiA0NS4zOTg0IDIyLjczNDQgNDUuMzk4NFpNMTYuMzU5NCA0NC4zNjcyQzE1LjgxMjUgNDQuMzY3MiAxNS4zNDM4IDQ0LjE2NDEgMTQuOTUzMSA0My43NTc4QzE0LjU2MjUgNDMuMzY3MiAxNC4zNjcyIDQyLjg5ODQgMTQuMzY3MiA0Mi4zNTE2QzE0LjM2NzIgNDEuODA0NyAxNC41NjI1IDQxLjMzNTkgMTQuOTUzMSA0MC45NDUzQzE1LjM0MzggNDAuNTU0NyAxNS44MTI1IDQwLjM1OTQgMTYuMzU5NCA0MC4zNTk0QzE2LjkyMTkgNDAuMzU5NCAxNy4zOTg0IDQwLjU1NDcgMTcuNzg5MSA0MC45NDUzQzE4LjE3OTcgNDEuMzM1OSAxOC4zNzUgNDEuODA0NyAxOC4zNzUgNDIuMzUxNkMxOC4zNzUgNDIuODk4NCAxOC4xNzk3IDQzLjM2NzIgMTcuNzg5MSA0My43NTc4QzE3LjM5ODQgNDQuMTY0MSAxNi45MjE5IDQ0LjM2NzIgMTYuMzU5NCA0NC4zNjcyWk0xMC41NzAzIDQxLjQzNzVDMTAuMDM5MSA0MS40Mzc1IDkuNTcwMzEgNDEuMjQyMiA5LjE2NDA2IDQwLjg1MTZDOC43NzM0NCA0MC40NjA5IDguNTc4MTIgMzkuOTkyMiA4LjU3ODEyIDM5LjQ0NTNDOC41NzgxMiAzOC44OTg0IDguNzczNDQgMzguNDI5NyA5LjE2NDA2IDM4LjAzOTFDOS41NzAzMSAzNy42MzI4IDEwLjAzOTEgMzcuNDI5NyAxMC41NzAzIDM3LjQyOTdDMTEuMTMyOCAzNy40Mjk3IDExLjYwOTQgMzcuNjMyOCAxMiAzOC4wMzkxQzEyLjM5MDYgMzguNDI5NyAxMi41ODU5IDM4Ljg5ODQgMTIuNTg1OSAzOS40NDUzQzEyLjU4NTkgMzkuOTkyMiAxMi4zOTA2IDQwLjQ2MDkgMTIgNDAuODUxNkMxMS42MDk0IDQxLjI0MjIgMTEuMTMyOCA0MS40Mzc1IDEwLjU3MDMgNDEuNDM3NVpNNi4wMjM0NCAzNi44OTA2QzUuNDc2NTYgMzYuODkwNiA1IDM2LjY5NTMgNC41OTM3NSAzNi4zMDQ3QzQuMjAzMTIgMzUuODk4NCA0LjAwNzgxIDM1LjQyMTkgNC4wMDc4MSAzNC44NzVDNC4wMDc4MSAzNC4zMjgxIDQuMjAzMTIgMzMuODU5NCA0LjU5Mzc1IDMzLjQ2ODhDNSAzMy4wNjI1IDUuNDc2NTYgMzIuODU5NCA2LjAyMzQ0IDMyLjg1OTRDNi41NzAzMSAzMi44NTk0IDcuMDM5MDYgMzMuMDYyNSA3LjQyOTY5IDMzLjQ2ODhDNy44MjAzMSAzMy44NTk0IDguMDE1NjIgMzQuMzI4MSA4LjAxNTYyIDM0Ljg3NUM4LjAxNTYyIDM1LjQyMTkgNy44MjAzMSAzNS44OTg0IDcuNDI5NjkgMzYuMzA0N0M3LjAzOTA2IDM2LjY5NTMgNi41NzAzMSAzNi44OTA2IDYuMDIzNDQgMzYuODkwNlpNMy4wOTM3NSAzMS4xNzE5QzIuNTYyNSAzMS4xNzE5IDIuMDkzNzUgMzAuOTc2NiAxLjY4NzUgMzAuNTg1OUMxLjI5Njg4IDMwLjE5NTMgMS4xMDE1NiAyOS43MjY2IDEuMTAxNTYgMjkuMTc5N0MxLjEwMTU2IDI4LjYxNzIgMS4yOTY4OCAyOC4xNDA2IDEuNjg3NSAyNy43NUMyLjA5Mzc1IDI3LjM1OTQgMi41NjI1IDI3LjE2NDEgMy4wOTM3NSAyNy4xNjQxQzMuNjU2MjUgMjcuMTY0MSA0LjEzMjgxIDI3LjM1OTQgNC41MjM0NCAyNy43NUM0LjkxNDA2IDI4LjE0MDYgNS4xMDkzOCAyOC42MTcyIDUuMTA5MzggMjkuMTc5N0M1LjEwOTM4IDI5LjcyNjYgNC45MTQwNiAzMC4xOTUzIDQuNTIzNDQgMzAuNTg1OUM0LjEzMjgxIDMwLjk3NjYgMy42NTYyNSAzMS4xNzE5IDMuMDkzNzUgMzEuMTcxOVpNMi4wMTU2MiAyNC43OTY5QzEuNDUzMTIgMjQuNzk2OSAwLjk3NjU2MiAyNC42MDE2IDAuNTg1OTM4IDI0LjIxMDlDMC4xOTUzMTIgMjMuODIwMyAwIDIzLjM0MzggMCAyMi43ODEyQzAgMjIuMjM0NCAwLjE5NTMxMiAyMS43NjU2IDAuNTg1OTM4IDIxLjM3NUMwLjk3NjU2MiAyMC45ODQ0IDEuNDUzMTIgMjAuNzg5MSAyLjAxNTYyIDIwLjc4OTFDMi41NjI1IDIwLjc4OTEgMy4wMzEyNSAyMC45ODQ0IDMuNDIxODggMjEuMzc1QzMuODEyNSAyMS43NjU2IDQuMDA3ODEgMjIuMjM0NCA0LjAwNzgxIDIyLjc4MTJDNC4wMDc4MSAyMy4zNDM4IDMuODEyNSAyMy44MjAzIDMuNDIxODggMjQuMjEwOUMzLjAzMTI1IDI0LjYwMTYgMi41NjI1IDI0Ljc5NjkgMi4wMTU2MiAyNC43OTY5Wk0zLjA5Mzc1IDE4LjM5ODRDMi41NjI1IDE4LjM5ODQgMi4wOTM3NSAxOC4yMDMxIDEuNjg3NSAxNy44MTI1QzEuMjk2ODggMTcuNDIxOSAxLjEwMTU2IDE2Ljk1MzEgMS4xMDE1NiAxNi40MDYyQzEuMTAxNTYgMTUuODQzOCAxLjI5Njg4IDE1LjM2NzIgMS42ODc1IDE0Ljk3NjZDMi4wOTM3NSAxNC41ODU5IDIuNTYyNSAxNC4zOTA2IDMuMDkzNzUgMTQuMzkwNkMzLjY1NjI1IDE0LjM5MDYgNC4xMzI4MSAxNC41ODU5IDQuNTIzNDQgMTQuOTc2NkM0LjkxNDA2IDE1LjM2NzIgNS4xMDkzOCAxNS44NDM4IDUuMTA5MzggMTYuNDA2MkM1LjEwOTM4IDE2Ljk1MzEgNC45MTQwNiAxNy40MjE5IDQuNTIzNDQgMTcuODEyNUM0LjEzMjgxIDE4LjIwMzEgMy42NTYyNSAxOC4zOTg0IDMuMDkzNzUgMTguMzk4NFpNNi4wMjM0NCAxMi42Nzk3QzUuNDc2NTYgMTIuNjc5NyA1IDEyLjQ4NDQgNC41OTM3NSAxMi4wOTM4QzQuMjAzMTIgMTEuNzAzMSA0LjAwNzgxIDExLjIzNDQgNC4wMDc4MSAxMC42ODc1QzQuMDA3ODEgMTAuMTU2MiA0LjIwMzEyIDkuNjk1MzEgNC41OTM3NSA5LjMwNDY5QzUgOC44OTg0NCA1LjQ3NjU2IDguNjk1MzEgNi4wMjM0NCA4LjY5NTMxQzYuNTcwMzEgOC42OTUzMSA3LjAzOTA2IDguODk4NDQgNy40Mjk2OSA5LjMwNDY5QzcuODIwMzEgOS42OTUzMSA4LjAxNTYyIDEwLjE1NjIgOC4wMTU2MiAxMC42ODc1QzguMDE1NjIgMTEuMjM0NCA3LjgyMDMxIDExLjcwMzEgNy40Mjk2OSAxMi4wOTM4QzcuMDM5MDYgMTIuNDg0NCA2LjU3MDMxIDEyLjY3OTcgNi4wMjM0NCAxMi42Nzk3Wk0xMC41NzAzIDguMTMyODFDMTAuMDM5MSA4LjEzMjgxIDkuNTcwMzEgNy45Mzc1IDkuMTY0MDYgNy41NDY4OEM4Ljc3MzQ0IDcuMTQwNjIgOC41NzgxMiA2LjY3MTg4IDguNTc4MTIgNi4xNDA2MkM4LjU3ODEyIDUuNTc4MTIgOC43NzM0NCA1LjEwMTU2IDkuMTY0MDYgNC43MTA5NEM5LjU3MDMxIDQuMzIwMzEgMTAuMDM5MSA0LjEyNSAxMC41NzAzIDQuMTI1QzExLjEzMjggNC4xMjUgMTEuNjA5NCA0LjMyMDMxIDEyIDQuNzEwOTRDMTIuMzkwNiA1LjEwMTU2IDEyLjU4NTkgNS41NzgxMiAxMi41ODU5IDYuMTQwNjJDMTIuNTg1OSA2LjY3MTg4IDEyLjM5MDYgNy4xNDA2MiAxMiA3LjU0Njg4QzExLjYwOTQgNy45Mzc1IDExLjEzMjggOC4xMzI4MSAxMC41NzAzIDguMTMyODFaTTE2LjM1OTQgNS4yMDMxMkMxNS44MTI1IDUuMjAzMTIgMTUuMzQzOCA1LjAwNzgxIDE0Ljk1MzEgNC42MTcxOUMxNC41NjI1IDQuMjI2NTYgMTQuMzY3MiAzLjc1NzgxIDE0LjM2NzIgMy4yMTA5NEMxNC4zNjcyIDIuNjY0MDYgMTQuNTYyNSAyLjE5NTMxIDE0Ljk1MzEgMS44MDQ2OUMxNS4zNDM4IDEuMzk4NDQgMTUuODEyNSAxLjE5NTMxIDE2LjM1OTQgMS4xOTUzMUMxNi45MjE5IDEuMTk1MzEgMTcuMzk4NCAxLjM5ODQ0IDE3Ljc4OTEgMS44MDQ2OUMxOC4xNzk3IDIuMTk1MzEgMTguMzc1IDIuNjY0MDYgMTguMzc1IDMuMjEwOTRDMTguMzc1IDMuNzU3ODEgMTguMTc5NyA0LjIyNjU2IDE3Ljc4OTEgNC42MTcxOUMxNy4zOTg0IDUuMDA3ODEgMTYuOTIxOSA1LjIwMzEyIDE2LjM1OTQgNS4yMDMxMlpNNDAuMTAxNiA0NS41NjI1QzM2Ljk0NTMgNDUuNTYyNSAzMy45OTIyIDQ0Ljk2ODggMzEuMjQyMiA0My43ODEyQzI4LjUwNzggNDIuNjA5NCAyNi4wOTM4IDQwLjk3NjYgMjQgMzguODgyOEMyMS45MDYyIDM2Ljc4OTEgMjAuMjY1NiAzNC4zNjcyIDE5LjA3ODEgMzEuNjE3MkMxNy45MDYyIDI4Ljg2NzIgMTcuMzIwMyAyNS45MjE5IDE3LjMyMDMgMjIuNzgxMkMxNy4zMjAzIDE5LjY0MDYgMTcuOTA2MiAxNi42OTUzIDE5LjA3ODEgMTMuOTQ1M0MyMC4yNjU2IDExLjE3OTcgMjEuOTA2MiA4Ljc1NzgxIDI0IDYuNjc5NjlDMjYuMDkzOCA0LjU4NTk0IDI4LjUwNzggMi45NTMxMiAzMS4yNDIyIDEuNzgxMjVDMzMuOTkyMiAwLjU5Mzc1IDM2Ljk0NTMgMCA0MC4xMDE2IDBDNDMuMjQyMiAwIDQ2LjE4NzUgMC41OTM3NSA0OC45Mzc1IDEuNzgxMjVDNTEuNjg3NSAyLjk1MzEyIDU0LjEwMTYgNC41ODU5NCA1Ni4xNzk3IDYuNjc5NjlDNTguMjczNCA4Ljc1NzgxIDU5LjkwNjIgMTEuMTc5NyA2MS4wNzgxIDEzLjk0NTNDNjIuMjY1NiAxNi42OTUzIDYyLjg1OTQgMTkuNjQwNiA2Mi44NTk0IDIyLjc4MTJDNjIuODU5NCAyNS45MjE5IDYyLjI2NTYgMjguODY3MiA2MS4wNzgxIDMxLjYxNzJDNTkuOTA2MiAzNC4zNjcyIDU4LjI3MzQgMzYuNzg5MSA1Ni4xNzk3IDM4Ljg4MjhDNTQuMTAxNiA0MC45NzY2IDUxLjY4NzUgNDIuNjA5NCA0OC45Mzc1IDQzLjc4MTJDNDYuMTg3NSA0NC45Njg4IDQzLjI0MjIgNDUuNTYyNSA0MC4xMDE2IDQ1LjU2MjVaTTQwLjEwMTYgNDEuMzkwNkM0Mi42NjQxIDQxLjM5MDYgNDUuMDcwMyA0MC45MDYyIDQ3LjMyMDMgMzkuOTM3NUM0OS41NzAzIDM4Ljk2ODggNTEuNTQ2OSAzNy42MzI4IDUzLjI1IDM1LjkyOTdDNTQuOTY4OCAzNC4yMjY2IDU2LjMwNDcgMzIuMjU3OCA1Ny4yNTc4IDMwLjAyMzRDNTguMjEwOSAyNy43NzM0IDU4LjY4NzUgMjUuMzU5NCA1OC42ODc1IDIyLjc4MTJDNTguNjg3NSAyMC4yMDMxIDU4LjIxMDkgMTcuNzk2OSA1Ny4yNTc4IDE1LjU2MjVDNTYuMzA0NyAxMy4zMTI1IDU0Ljk2ODggMTEuMzM1OSA1My4yNSA5LjYzMjgxQzUxLjU0NjkgNy45Mjk2OSA0OS41NzAzIDYuNTkzNzUgNDcuMzIwMyA1LjYyNUM0NS4wNzAzIDQuNjU2MjUgNDIuNjY0MSA0LjE3MTg4IDQwLjEwMTYgNC4xNzE4OEMzNy41MjM0IDQuMTcxODggMzUuMTA5NCA0LjY1NjI1IDMyLjg1OTQgNS42MjVDMzAuNjI1IDYuNTkzNzUgMjguNjQ4NCA3LjkyOTY5IDI2LjkyOTcgOS42MzI4MUMyNS4yMjY2IDExLjMzNTkgMjMuODkwNiAxMy4zMTI1IDIyLjkyMTkgMTUuNTYyNUMyMS45Njg4IDE3Ljc5NjkgMjEuNDkyMiAyMC4yMDMxIDIxLjQ5MjIgMjIuNzgxMkMyMS40OTIyIDI1LjM1OTQgMjEuOTY4OCAyNy43NzM0IDIyLjkyMTkgMzAuMDIzNEMyMy44OTA2IDMyLjI1NzggMjUuMjI2NiAzNC4yMjY2IDI2LjkyOTcgMzUuOTI5N0MyOC42NDg0IDM3LjYzMjggMzAuNjI1IDM4Ljk2ODggMzIuODU5NCAzOS45Mzc1QzM1LjEwOTQgNDAuOTA2MiAzNy41MjM0IDQxLjM5MDYgNDAuMTAxNiA0MS4zOTA2WiJ9KX0pLHZvaWNlb3ZlcjpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Im0xMSA3LjYwMS01Ljk5NCA4LjE5YTEgMSAwIDAgMCAuMSAxLjI5OGwuODE3LjgxOGExIDEgMCAwIDAgMS4zMTQuMDg3TDE1LjA5IDEyIn0pLFooInBhdGgiLHtkOiJNMTYuNSAyMS4xNzRDMTUuNSAyMC41IDE0LjM3MiAyMCAxMyAyMGMtMi4wNTggMC0zLjkyOCAyLjM1Ni02IDItMi4wNzItLjM1Ni0yLjc3NS0zLjM2OS0xLjUtNC41In0pLFooImNpcmNsZSIse2N4OiIxNiIsY3k6IjciLHI6IjUifSldfSl9O2Z1bmN0aW9uIElRKCQpe2lmKCEkKXJldHVybiEwO3JldHVybiBONSgkKS5vcy50b0xvd2VyQ2FzZSgpPT09ImlvcyJ9ZnVuY3Rpb24gRTYoe3VkaWQ6JCxydW50aW1lOlF9KXtsZXRbSixLXT1NKCEwKSxbWCxZXT1NKG51bGwpLFtxLEddPU0obnVsbCksW04sQl09TShudWxsKSxVPUlRKFEpLFY9VChhc3luYygpPT57QihudWxsKTt0cnl7bGV0IEU9YXdhaXQgQjMoe2RldmljZTokfSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSk7aWYoRSlZKEUpO2Vsc2UgQigiVW5leHBlY3RlZCBzaW11bGF0b3Itc2V0dGluZ3MgcmVwbHkiKX1jYXRjaChFKXtCKEUgaW5zdGFuY2VvZiBET01FeGNlcHRpb24mJkUubmFtZT09PSJUaW1lb3V0RXJyb3IiPyJUaW1lZCBvdXQgcmVhZGluZyBzaW11bGF0b3Igc2V0dGluZ3MiOkUgaW5zdGFuY2VvZiBFcnJvciYmRS5tZXNzYWdlIT09IkZhaWxlZCB0byBmZXRjaCI/RS5tZXNzYWdlOiJDb3VsZCBub3QgcmVhY2ggdGhlIHByZXZpZXcgc2VydmVyIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpfX0sWyRdKTt5KCgpPT57aWYoWShudWxsKSwhVSlyZXR1cm47VigpfSxbVixVXSk7bGV0IHo9VChhc3luYyhFLGIpPT57RyhFKSxCKG51bGwpLFkoKGopPT5qP3suLi5qLFtFXTpifTpqKTt0cnl7YXdhaXQgQjMoe2RldmljZTokLG9wdGlvbjpFLHZhbHVlOmJ9LHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dCgxNTAwMCl9KX1jYXRjaChqKXtCKGogaW5zdGFuY2VvZiBFcnJvcj9qLm1lc3NhZ2U6YEZhaWxlZCB0byBzZXQgJHtFfWApLFYoKX1maW5hbGx5e0cobnVsbCl9fSxbJCxWXSksTD1JKHtydW5uaW5nOiExLG5leHQ6bnVsbH0pLEE9SSh6KTtBLmN1cnJlbnQ9ejtsZXQgQz1UKChFKT0+e2xldCBiPUwuY3VycmVudDtpZihiLm5leHQ9RSxiLnJ1bm5pbmcpcmV0dXJuO2IucnVubmluZz0hMCwoYXN5bmMoKT0+e3doaWxlKGIubmV4dCE9PW51bGwpe2xldCBqPWIubmV4dDtiLm5leHQ9bnVsbCxhd2FpdCBBLmN1cnJlbnQoInRleHQtc2l6ZSIsajJbal0pfWIucnVubmluZz0hMX0pKCl9LFtdKSxIPVghPT1udWxsLE89WD8/VFEsVz1qMi5pbmRleE9mKE9bInRleHQtc2l6ZSJdKSx4PVc+PTA/VzpPWyJ0ZXh0LXNpemUiXT8uc3RhcnRzV2l0aCgiYWNjZXNzaWJpbGl0eSIpP2oyLmxlbmd0aC0xOjM7cmV0dXJuIFooVjAse29wZW46Sixvbk9wZW5DaGFuZ2U6SywiZGF0YS1zaW11bGF0b3Itc2V0dGluZ3MiOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlooUTEse2NoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTaW11bGF0b3IifSksWigic3BhbiIse30pXX0pLGNoaWxkcmVuOiFVP1ooImRpdiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80NSB0ZXh0LVsxMXB4XSBweC0wLjUgcHktMSIsY2hpbGRyZW46IlNpbXVsYXRvciBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIG9uIGlPUyBzaW11bGF0b3JzIG9ubHkuIn0pOlooUTEse2NoaWxkcmVuOltOJiZaKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToibWluLXctMCIsY2hpbGRyZW46Tn0pLFooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+dm9pZCBWKCksY2xhc3NOYW1lOiJzaHJpbmstMCBjdXJzb3ItcG9pbnRlciByb3VuZGVkIGJvcmRlciBib3JkZXItZGFuZ2VyLzMwIGJnLXRyYW5zcGFyZW50IHB4LTEuNSBweS0wLjUgdGV4dC1bMTFweF0gdGV4dC1kYW5nZXItc29mdCIsY2hpbGRyZW46IlJldHJ5In0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMS41IHBiLTEuNSIsY2hpbGRyZW46W1ooZjAse2ljb246eDIuYXBwZWFyYW5jZSxsYWJlbDoiQXBwZWFyYW5jZSIsY2hpbGRyZW46Wih2Mix7bGFiZWw6IkFwcGVhcmFuY2UiLHZhbHVlOk8uYXBwZWFyYW5jZT8/ImxpZ2h0IixvcHRpb25zOkkzLmFwcGVhcmFuY2UsZGlzYWJsZWQ6IUh8fHE9PT0iYXBwZWFyYW5jZSIsb25DaGFuZ2U6KEUpPT56KCJhcHBlYXJhbmNlIixFKX0pfSksWihmMCx7aWNvbjp4Mi5nbGFzcyxsYWJlbDoiTGlxdWlkIEdsYXNzIixjaGlsZHJlbjpaKHYyLHtsYWJlbDoiTGlxdWlkIEdsYXNzIix2YWx1ZTpPWyJsaXF1aWQtZ2xhc3MiXT8/ImNsZWFyIixvcHRpb25zOkkzWyJsaXF1aWQtZ2xhc3MiXSxkaXNhYmxlZDohSHx8cT09PSJsaXF1aWQtZ2xhc3MiLG9uQ2hhbmdlOihFKT0+eigibGlxdWlkLWdsYXNzIixFKX0pfSksWihmMCx7aWNvbjp4Mi5maWx0ZXIsbGFiZWw6IkNvbG9yIEZpbHRlciIsY2hpbGRyZW46Wih2Mix7bGFiZWw6IkNvbG9yIEZpbHRlciIsdmFsdWU6T1siY29sb3ItZmlsdGVyIl0/PyJub25lIixvcHRpb25zOkkzWyJjb2xvci1maWx0ZXIiXSxkaXNhYmxlZDohSHx8cT09PSJjb2xvci1maWx0ZXIiLG9uQ2hhbmdlOihFKT0+eigiY29sb3ItZmlsdGVyIixFKX0pfSksWihmMCx7aWNvbjp4Mi50ZXh0U2l6ZSxsYWJlbDoiVGV4dCBTaXplIixjaGlsZHJlbjpaKEVRLHt2YWx1ZTp4LGRpc2FibGVkOiFILG9uQ2hhbmdlOkN9KX0pLHdRLm1hcCgoe2tleTpFLGxhYmVsOmJ9KT0+WihmMCx7aWNvbjp4MltFPT09InJlZHVjZS1tb3Rpb24iPyJtb3Rpb24iOkU9PT0iaW5jcmVhc2UtY29udHJhc3QiPyJjb250cmFzdCI6RT09PSJzaG93LWJvcmRlcnMiPyJib3JkZXJzIjpFPT09InJlZHVjZS10cmFuc3BhcmVuY3kiPyJ0cmFuc3BhcmVuY3kiOiJ2b2ljZW92ZXIiXSxsYWJlbDpiLGNoaWxkcmVuOlooXzUse2xhYmVsOmIsY2hlY2tlZDpPW0VdPT09Im9uIixkaXNhYmxlZDohSHx8cT09PUUsb25DaGFuZ2U6KGopPT56KEUsaj8ib24iOiJvZmYiKX0pfSxFKSldfSldfSl9KX12YXIgYjM9InNlcnZlLXNpbTpjb2RlYyIsYlE9W3t2YWx1ZToiYXV0byIsbGFiZWw6IkguMjY0IChIYXJkd2FyZSkifSx7dmFsdWU6Im1qcGVnIixsYWJlbDoiTUpQRUcgKENvbXBhdGliaWxpdHkpIn1dLHlRPVooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltaKCJwYXRoIix7ZDoibTE2IDEzIDUuMjIzIDMuNDgyYS41LjUgMCAwIDAgLjc3Ny0uNDE2VjcuODdhLjUuNSAwIDAgMC0uNzUyLS40MzJMMTYgMTAuNSJ9KSxaKCJyZWN0Iix7eDoiMiIseToiNiIsd2lkdGg6IjE0IixoZWlnaHQ6IjEyIixyeDoiMiJ9KV19KTtmdW5jdGlvbiBJNih7cHJlZmVyZW5jZTokLG9uUHJlZmVyZW5jZUNoYW5nZTpRLGFjdGl2ZUNvZGVjOkosYXZjY1N1cHBvcnRlZDpLfSl7bGV0W1gsWV09TSghMSkscT1LPyQ6Im1qcGVnIjtyZXR1cm4gWihWMCx7b3BlbjpYLG9uT3BlbkNoYW5nZTpZLCJkYXRhLXN0cmVhbS1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WihRMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlN0cmVhbSJ9KSxaKCJzcGFuIix7fSldfSksY2hpbGRyZW46WigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbWihmMCx7aWNvbjp5USxsYWJlbDoiQ29kZWMiLGNoaWxkcmVuOloodjIse2xhYmVsOiJDb2RlYyIsdmFsdWU6cSxvcHRpb25zOmJRLGRpc2FibGVkOiFLLG9uQ2hhbmdlOihOKT0+UShOKX0pfSksWigicCIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBsZWFkaW5nLXNudWcgcHgtMC41IixjaGlsZHJlbjohSz8iVGhpcyBicm93c2VyIGNhbid0IGRlY29kZSBILjI2NCwgc28gdGhlIHN0cmVhbSB1c2VzIE1KUEVHLiI6cT09PSJhdXRvIiYmSj09PSJtanBlZyI/IkguMjY0IHdhcyB1bmF2YWlsYWJsZSBmb3IgdGhpcyBzdHJlYW0sIHNvIGl0IGZlbGwgYmFjayB0byBNSlBFRy4iOiJTd2l0Y2ggdG8gTUpQRUcgaWYgdGhlIHN0cmVhbSBzdHV0dGVycyBvciBkcm9wcyB3aGlsZSBzY3JlZW4gcmVjb3JkaW5nIHRoZSBicm93c2VyIHdpbmRvdy4ifSldfSl9KX1mdW5jdGlvbiBiNih7b3BlbjokLG9uQ2xvc2U6USx1ZGlkOkosZGV2aWNlUnVudGltZTpLLGN1cnJlbnRBcHA6WCxheE92ZXJsYXlFbmFibGVkOlksb25Ub2dnbGVBeE92ZXJsYXk6cSxjb2RlY1ByZWZlcmVuY2U6RyxvbkNvZGVjUHJlZmVyZW5jZUNoYW5nZTpOLGFjdGl2ZUNvZGVjOkIsYXZjY1N1cHBvcnRlZDpVLHdpZHRoOlZ9KXtyZXR1cm4gWihlMCx7b3BlbjokLHdpZHRoOlYsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpRMn0sY2hpbGRyZW46W1ooJDIse2NoaWxkcmVuOltaKEE5LHtjaGlsZHJlbjoiVG9vbHMifSksWihDNSx7b25DbGljazpRfSldfSksJCYmWigiZGl2Iix7Y2xhc3NOYW1lOiJwLTMuNSBvdmVyZmxvdy15LWF1dG8gZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTMiLGNoaWxkcmVuOltaKEw2LHt1ZGlkOkosY3VycmVudEFwcDpYfSksWihFNix7dWRpZDpKLHJ1bnRpbWU6S30pLFooRjYse292ZXJsYXlFbmFibGVkOlksb25Ub2dnbGVPdmVybGF5OnF9KSxaKHc2LHt1ZGlkOkosYnVuZGxlSWQ6WD8uYnVuZGxlSWQ/P251bGx9KSxaKE42LHt1ZGlkOkosZXhlYzpXMX0pLFooQzYse3VkaWQ6SixidW5kbGVJZDpYPy5idW5kbGVJZD8/bnVsbH0pLFooSTYse3ByZWZlcmVuY2U6RyxvblByZWZlcmVuY2VDaGFuZ2U6TixhY3RpdmVDb2RlYzpCLGF2Y2NTdXBwb3J0ZWQ6VX0pXX0pXX0pfWZ1bmN0aW9uIHk2KCQsUSl7bGV0IEo7dHJ5e0o9bmV3IFVSTCgkLndlYlNvY2tldERlYnVnZ2VyVXJsKX1jYXRjaHtyZXR1cm4gJH1sZXQgSz1gJHtKLnBhdGhuYW1lfSR7Si5zZWFyY2h9YCxYPVEucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsWT1RLnByb3RvY29sPT09Imh0dHBzOiI/IndzcyI6IndzIixxPWAke1EuaG9zdH0ke0t9YCxHPSQuZGV2dG9vbHNGcm9udGVuZFVybDt0cnl7bGV0IE49bmV3IFVSTCgkLmRldnRvb2xzRnJvbnRlbmRVcmwsYCR7US5wcm90b2NvbH0vLyR7US5ob3N0fWApO04uc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3MiKSxOLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzcyIpLE4uc2VhcmNoUGFyYW1zLnNldChZLHEpLEc9YCR7Ti5wYXRobmFtZX0ke04uc2VhcmNofSR7Ti5oYXNofWB9Y2F0Y2h7fXJldHVybnsuLi4kLHdlYlNvY2tldERlYnVnZ2VyVXJsOmAke1h9Ly8ke1EuaG9zdH0ke0t9YCxkZXZ0b29sc0Zyb250ZW5kVXJsOkd9fWZ1bmN0aW9uIFIyKCQsUSl7ZmV0Y2gobDEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6JCxvbjpRfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiB5Mygpe2xldCAkPWwxKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IFE9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKCQsUSkpcmV0dXJufX1jYXRjaHt9ZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIFM2KCQpe2xldCBRPSQuY29udGVudERvY3VtZW50O2lmKCFRKXJldHVybjtsZXQgSj0oKT0+e2xldCBZPVtRXTt3aGlsZShZLmxlbmd0aCl7bGV0IHE9WS5wb3AoKSxHPXEucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IE4gb2YgRyl7bGV0IEI9Ti5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Ti50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KEIpKXJldHVybiBOfWZvcihsZXQgTiBvZiBxLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihOLnNoYWRvd1Jvb3QpWS5wdXNoKE4uc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LEs9MCxYPSgpPT57SysrO2xldCBZPUooKTtpZihZJiZZLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtZLmNsaWNrKCk7cmV0dXJufWlmKEs8MjApc2V0VGltZW91dChYLDEwMCl9O1goKX1mdW5jdGlvbiB4NigkKXtsZXQgUT1bXSxKPW5ldyBNYXA7Zm9yKGxldCBLIG9mICQpe2xldCBYPUsuYXBwTmFtZXx8Sy5idW5kbGVJZHx8IlVua25vd24iLFk9Sy5idW5kbGVJZHx8WCxxPUouZ2V0KFkpO2lmKCFxKXE9e2tleTpZLGFwcE5hbWU6WCxidW5kbGVJZDpLLmJ1bmRsZUlkLHRhcmdldHM6W119LEouc2V0KFkscSksUS5wdXNoKFkpO3EudGFyZ2V0cy5wdXNoKEspfXJldHVybiBRLm1hcCgoSyk9PkouZ2V0KEspKX1mdW5jdGlvbiBqNigkLFEpe2xldFtKLEtdPU0oe30pLFg9RDEoKCk9PlEuc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtRXSk7cmV0dXJuIHkoKCk9PntpZighJClyZXR1cm47bGV0IFk9ITE7Zm9yKGxldCBxIG9mIFEpe2lmKCFxKWNvbnRpbnVlO2xldCBHPWAkeyR9OiR7cX1gLE49SjIuZ2V0KEcpO2lmKHR5cGVvZiBOPT09InN0cmluZyJ8fE49PT1udWxsKXtLKChCKT0+QltxXT09PU4/Qjp7Li4uQixbcV06Tn0pO2NvbnRpbnVlfVU2KFcxLCQscSkudGhlbigoQik9PntpZihZKXJldHVybjtLKChVKT0+KHsuLi5VLFtxXTpCfSkpfSl9cmV0dXJuKCk9PntZPSEwfX0sWyQsWF0pLEp9ZnVuY3Rpb24gdjYoe3VkaWQ6JCx0YXJnZXRzOlEsc2VsZWN0ZWQ6SixvblNlbGVjdFRhcmdldDpLLG9uUmVmcmVzaDpYfSl7bGV0IFk9eDYoUSkscT1ZLm1hcCgoQyk9PkMuYnVuZGxlSWQpLmZpbHRlcigoQyk9PiEhQyksRz1qNigkLHEpLFtOLEJdPU0oITEpLFtVLFZdPU0obnVsbCksej1JKG51bGwpLEw9SShudWxsKTt5KCgpPT57aWYoIU4pcmV0dXJuO2xldCBDPShIKT0+e2lmKCFMLmN1cnJlbnQpcmV0dXJuO2lmKCFMLmN1cnJlbnQuY29udGFpbnMoSC50YXJnZXQpKUIoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixDKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixDKX0sW05dKSx5KCgpPT57aWYoTilyZXR1cm47aWYoei5jdXJyZW50KVIyKHouY3VycmVudCwhMSksei5jdXJyZW50PW51bGw7eTMoKX0sW05dKSx5KCgpPT57bGV0IEM9KCk9PnkzKCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsQyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsQyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEMpfX0sW10pO2xldCBBPUo/KEoudGl0bGV8fEoudXJsfHxKLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gWigiZGl2Iix7cmVmOkwsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W1ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e0IoKEMpPT57aWYoIUMpWCgpO3JldHVybiFDfSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtd2hpdGUvOTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLW1kIHRleHQtWzEycHhdIHB4LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1sZWZ0IiwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpOLCJhcmlhLWxhYmVsIjoiV2ViS2l0IHRhcmdldCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIG1pbi13LTAiLGNoaWxkcmVuOkF9KSxaKEgyLHtzaXplOjEyLHN0cm9rZVdpZHRoOjJ9KV19KSxOJiZaKCJ1bCIse3JvbGU6Imxpc3Rib3giLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNHB4KV0gbGVmdC0wIG0tMCBwLTEgbGlzdC1ub25lIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46WS5tYXAoKEMpPT57bGV0IEg9Qy5idW5kbGVJZD9HW0MuYnVuZGxlSWRdOm51bGw7cmV0dXJuIFooImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS9bMC45Ml0iLGNoaWxkcmVuOltIP1ooImltZyIse3NyYzpILGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6Wigic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46Qy5hcHBOYW1lfSldfSksWigidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOkMudGFyZ2V0cy5tYXAoKE8pPT57bGV0IFc9Sj8uaWQ9PT1PLmlkLHg9ISFPLmluVXNlQnlPdGhlckluc3BlY3RvciYmIVcsRT0oTy50aXRsZXx8Ty51cmx8fE8uYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCksYj1VPT09Ty5pZCYmIXgsaj0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBaKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOlcsImFyaWEtZGlzYWJsZWQiOngsdGFiSW5kZXg6eD8tMTowLHRpdGxlOng/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZih4KXJldHVybjtpZih6LmN1cnJlbnQmJnouY3VycmVudCE9PU8uaWQpUjIoei5jdXJyZW50LCExKTt6LmN1cnJlbnQ9Ty5pZCxWKE8uaWQpLFIyKE8uaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZih6LmN1cnJlbnQ9PT1PLmlkKVIyKE8uaWQsITEpLHouY3VycmVudD1udWxsO1YoKGYpPT5mPT09Ty5pZD9udWxsOmYpfSxvbkNsaWNrOigpPT57aWYoeClyZXR1cm47SyhPLmlkKSxCKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke3g/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LXdoaXRlLzg1IjpiPyJiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMjIpXSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjpXPyJiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6InRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpFfSksTy51cmwmJk8udXJsIT09ImFib3V0OmJsYW5rIiYmWigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvWzAuNDJdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpPLnVybH0pXX0sTy5pZCl9KX0pXX0sQy5rZXkpfSl9KV19KX1mdW5jdGlvbiBSNih7b3BlbjokLG9uQ2xvc2U6USx1ZGlkOkosdGFyZ2V0czpLLHNlbGVjdGVkVGFyZ2V0SWQ6WCxvblNlbGVjdFRhcmdldDpZLGxvYWRpbmc6cSxlcnJvcjpHLG9uUmVmcmVzaDpOLHdpZHRoOkJ9KXtsZXQgVT1YP0suZmluZCgoVik9PlYuaWQ9PT1YKT8/bnVsbDpudWxsO3JldHVybiBaKGUwLHtvcGVuOiQsd2lkdGg6QixjaGlsZHJlbjpbWigkMix7Y2hpbGRyZW46W0subGVuZ3RoPjA/Wih2Nix7dWRpZDpKLHRhcmdldHM6SyxzZWxlY3RlZDpVLG9uU2VsZWN0VGFyZ2V0Olksb25SZWZyZXNoOk59KTpaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlL1swLjQ4XSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46cT8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxaKEM1LHtvbkNsaWNrOlEsYXJpYUxhYmVsOiJDbG9zZSBXZWJLaXQgRGV2VG9vbHMiLHRpdGxlOiJDbG9zZSIsaWNvblNpemU6MTV9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGJnLXdoaXRlIHJlbGF0aXZlIixjaGlsZHJlbjpHP1ooImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpHfSk6VSYmJD9aKCJpZnJhbWUiLHtzcmM6VS5kZXZ0b29sc0Zyb250ZW5kVXJsLHRpdGxlOmBXZWJLaXQgRGV2VG9vbHMgLSAke1UudGl0bGV8fFUudXJsfHxVLmlkfWAsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJvcmRlci1ub25lIGJsb2NrIGJnLXdoaXRlIixvbkxvYWQ6KFYpPT5TNihWLmN1cnJlbnRUYXJnZXQpfSxVLmlkKTpaKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46VT8iRGV2VG9vbHMgcGF1c2VkIOKAlCBvcGVuIHRoZSBwYW5lbCB0byByZWF0dGFjaC4iOiJPcGVuIFNhZmFyaSBvciBhbiBpbnNwZWN0YWJsZSBXS1dlYlZpZXcgaW4gdGhlIHNpbXVsYXRvci4ifSl9KV19KX1mdW5jdGlvbiBTUSh7aG9zdFBhdGg6JCxleGVjOlEsdWRpZDpKLG9uVXBsb2FkU3RhcnQ6SyxvblVwbG9hZFByb2dyZXNzOlgsb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpxfSl7cT8uKCQpO2xldCBHPSQuc3BsaXQoIi8iKS5wb3AoKT8/ImltYWdlIixOPUsoRywibWVkaWEiKTtyZXR1cm4gWChOLG51bGwpLEE2KCQsUSxKKS50aGVuKCgpPT5ZKE4sITApKS5jYXRjaCgoQik9PlkoTiwhMSxCIGluc3RhbmNlb2YgRXJyb3I/Qi5tZXNzYWdlOiJBZGQgZmFpbGVkIikpfWZ1bmN0aW9uIGc2KHtleGVjOiQsdWRpZDpRLGVuYWJsZWQ6SixvblVwbG9hZFN0YXJ0Okssb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25VbnN1cHBvcnRlZDpxLG9uSG9zdFBhdGhEcm9wOkd9KXtsZXRbTixCXT1NKCExKSxVPUkoMCksVj1UKGFzeW5jKEMpPT57aWYoQy5wcmV2ZW50RGVmYXVsdCgpLEMuc3RvcFByb3BhZ2F0aW9uKCksVS5jdXJyZW50PTAsQighMSksIUp8fCFRKXJldHVybjtsZXQgSD1DLmRhdGFUcmFuc2Zlci5nZXREYXRhKFA1KTtpZihIKXtTUSh7aG9zdFBhdGg6SCxleGVjOiQsdWRpZDpRLG9uVXBsb2FkU3RhcnQ6SyxvblVwbG9hZFByb2dyZXNzOlgsb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpHfSk7cmV0dXJufWxldCBPPUFycmF5LmZyb20oQy5kYXRhVHJhbnNmZXIuZmlsZXMpO2lmKE8ubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBXIG9mIE8pe2xldCB4PU82KFcpO2lmKCF4KXtxKFcpO2NvbnRpbnVlfWxldCBFPUsoVy5uYW1lLHgpO182KFcseCwkLFEsKGIpPT5YKEUsYikpLnRoZW4oKCk9PlkoRSwhMCkpLmNhdGNoKChiKT0+WShFLCExLGIgaW5zdGFuY2VvZiBFcnJvcj9iLm1lc3NhZ2U6IlVwbG9hZCBmYWlsZWQiKSl9fSxbSixRLCQsSyxYLFkscSxHXSksej1UKChDKT0+e2lmKEMucHJldmVudERlZmF1bHQoKSxKKUMuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbSl0pLEw9VCgoQyk9PntpZihDLnByZXZlbnREZWZhdWx0KCksIUopcmV0dXJuO2lmKFUuY3VycmVudCsrLFUuY3VycmVudD09PTEpQighMCl9LFtKXSksQT1UKChDKT0+e2lmKEMucHJldmVudERlZmF1bHQoKSxVLmN1cnJlbnQtLSxVLmN1cnJlbnQ8PTApVS5jdXJyZW50PTAsQighMSl9LFtdKTtyZXR1cm57aXNEcmFnT3ZlcjpOLGRyb3Bab25lUHJvcHM6e29uRHJhZ092ZXI6eixvbkRyYWdFbnRlcjpMLG9uRHJhZ0xlYXZlOkEsb25Ecm9wOlZ9fX1mdW5jdGlvbiBoNigkKXtsZXQgUT1uZXcgVWludDhBcnJheSg2NTUzNiksSj0wLEs9MCxYPTEwMjQsWT1uZXcgVGV4dERlY29kZXIoImxhdGluMSIpLHE9KHopPT57aWYoSit6Lmxlbmd0aD5RLmxlbmd0aCl7aWYoSz4wKVEuY29weVdpdGhpbigwLEssSiksSi09SyxLPTA7aWYoSit6Lmxlbmd0aD5RLmxlbmd0aCl7bGV0IEw9US5sZW5ndGg7d2hpbGUoTDxKK3oubGVuZ3RoKUwqPTI7bGV0IEE9bmV3IFVpbnQ4QXJyYXkoTCk7QS5zZXQoUS5zdWJhcnJheSgwLEopKSxRPUF9fVEuc2V0KHosSiksSis9ei5sZW5ndGh9LEc9KHopPT57bGV0IEw9TWF0aC5taW4oSi00LHorWCk7Zm9yKGxldCBBPXo7QTw9TDtBKyspaWYoUVtBXT09PTEzJiZRW0ErMV09PT0xMCYmUVtBKzJdPT09MTMmJlFbQSszXT09PTEwKXJldHVybiBBO3JldHVybi0xfSxOPSh6LEwpPT57bGV0IEE9WS5kZWNvZGUoUS5zdWJhcnJheSh6LEwpKSxDPS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMoQSk7cmV0dXJuIEM/TnVtYmVyKENbMV0pOm51bGx9LEI9MCxVPSh6KT0+e2xldCBMPS0xO2ZvcihsZXQgQT16O0E8Si0xO0ErKylpZihRW0FdPT09MjU1JiZRW0ErMV09PT0yMTYpe0w9QTticmVha31pZihMPT09LTEpcmV0dXJuIG51bGw7Zm9yKGxldCBBPU1hdGgubWF4KEwrMixCKTtBPEotMTtBKyspaWYoUVtBXT09PTI1NSYmUVtBKzFdPT09MjE3KXJldHVybiBCPTAse3M6TCxlOkErMn07cmV0dXJuIEI9TWF0aC5tYXgoTCsyLEotMSksbnVsbH0sVj0oKT0+e3doaWxlKEs8Sil7bGV0IHo9RyhLKTtpZih6Pj0wKXtsZXQgQT1OKEsseik7aWYoQSE9bnVsbCYmQT4wKXtsZXQgQz16KzQsSD1DK0E7aWYoSjxIKWJyZWFrOyQoUS5zdWJhcnJheShDLEgpKSxLPUg7Y29udGludWV9fWVsc2UgaWYoSi1LPD1YKWJyZWFrO2xldCBMPVUoSyk7aWYoIUwpYnJlYWs7JChRLnN1YmFycmF5KEwucyxMLmUpKSxLPUwuZX1pZihLPjApe2lmKEs8SilRLmNvcHlXaXRoaW4oMCxLLEopO0otPUssQj1CPks/Qi1LOjAsSz0wfX07cmV0dXJue3B1c2goeil7aWYoei5sZW5ndGg9PT0wKXJldHVybjtxKHopLFYoKX19fWZ1bmN0aW9uIGY2KCQpe2xldCBRPUkobmV3IFNldCksSj1UKChLKT0+e3JldHVybiBRLmN1cnJlbnQuYWRkKEspLCgpPT57US5jdXJyZW50LmRlbGV0ZShLKX19LFtdKTtyZXR1cm4geSgoKT0+e2lmKCEkKXJldHVybjtsZXQgSz1uZXcgQWJvcnRDb250cm9sbGVyLFg9ITEsWT1udWxsLHE9bmV3IFVSTCgkKTtxLnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgRz1xLnRvU3RyaW5nKCksTj0oKT0+e2lmKFh8fEsuc2lnbmFsLmFib3J0ZWR8fFkpcmV0dXJuO1k9c2V0VGltZW91dCgoKT0+e1k9bnVsbCxVKCl9LDEwMDApfSxCPShWKT0+e2lmKFEuY3VycmVudC5zaXplPT09MClyZXR1cm47bGV0IHo9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbVl0se3R5cGU6ImltYWdlL2pwZWcifSkpO2ZvcihsZXQgTCBvZiBRLmN1cnJlbnQpTCh6KX0sVT1hc3luYygpPT57dHJ5e2xldCB6PShhd2FpdCBmZXRjaChHLHtzaWduYWw6Sy5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIXope04oKTtyZXR1cm59bGV0IEw9aDYoQik7d2hpbGUoITApe2xldHtkb25lOkEsdmFsdWU6Q309YXdhaXQgei5yZWFkKCk7aWYoQSlicmVhaztpZihDJiZDLmxlbmd0aClMLnB1c2goQyl9fWNhdGNoe31maW5hbGx5e04oKX19O3JldHVybiBVKCksKCk9PntpZihYPSEwLFkpY2xlYXJUaW1lb3V0KFkpO0suYWJvcnQoKX19LFskXSkse3N1YnNjcmliZUZyYW1lOkosZnJhbWU6bnVsbH19ZnVuY3Rpb24gbTYoKXtsZXRbJF09TSh4MCk7cmV0dXJue3N1cHBvcnRlZDokfX1mdW5jdGlvbiBENSgkLFEsSixLLFg9ImxlZnQiKXtsZXQgWT1UKCh6LEwpPT5YPT09ImxlZnQiP3otTDpMLXosW1hdKSxxPVQoKHopPT5NYXRoLm1heChKLE1hdGgubWluKEsseikpLFtKLEtdKSxbRyxOXT1NKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIFE7bGV0IHo9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLEw9eiE9bnVsbD9OdW1iZXIoeik6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoTCk/cShMKTpRfSksQj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihLLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpLLFU9TWF0aC5tYXgoSixNYXRoLm1pbihCLEcpKSxWPVQoKHopPT57ei5wcmV2ZW50RGVmYXVsdCgpO2xldCBMPXouY2xpZW50WCxBPVUsQz16LmN1cnJlbnRUYXJnZXQ7Qy5zZXRQb2ludGVyQ2FwdHVyZSh6LnBvaW50ZXJJZCk7bGV0IEg9KFcpPT57bGV0IHg9cShBK1koTCxXLmNsaWVudFgpKTtOKHgpfSxPPShXKT0+e0MucmVsZWFzZVBvaW50ZXJDYXB0dXJlKFcucG9pbnRlcklkKSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTyksQy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixPKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoQStZKEwsVy5jbGllbnRYKSkpKX1jYXRjaHt9fTtDLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSxDLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTyksQy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixPKX0sW3EsWSxVLCRdKTtyZXR1cm57d2lkdGg6VSxvblBvaW50ZXJEb3duOlZ9fXZhciB4UT04MDAwO2Z1bmN0aW9uIGpRKCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIHZRKCQpe3JldHVybiAkIT09Im5vbmUifWZ1bmN0aW9uIHA2KHt0b2FzdDokLG9uUmV2ZWFsOlEsb25EaXNtaXNzOkosb25QYXVzZTpLLG9uUmVzdW1lOlh9KXtsZXRbWSxxXT1NKCExKSxHPUkobnVsbCksTj1JKG51bGwpLEI9KCk9PntpZihOLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE4uY3VycmVudCk7Ti5jdXJyZW50PW51bGx9O3koKCk9PigpPT5CKCksW10pO2xldCBVPSh6KT0+e2lmKCEkLnBhdGgpe3oucHJldmVudERlZmF1bHQoKTtyZXR1cm59QigpLEsoKSxOLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e04uY3VycmVudD1udWxsLHEoITEpLFgoKX0seFEpLHouZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLGpRKCQucGF0aCkpLHouZGF0YVRyYW5zZmVyLnNldERhdGEoUDUsJC5wYXRoKSx6LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5IjtsZXQgTD1HLmN1cnJlbnQ7aWYoTCl6LmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoTCxMLm9mZnNldFdpZHRoLzIsTC5vZmZzZXRIZWlnaHQvMik7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5xKCEwKSl9LFY9KHopPT57aWYoQigpLHEoITEpLHZRKHouZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpKUooKTtlbHNlIFgoKX07cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6InNjcmVlbnNob3QtdG9hc3QiLGNsYXNzTmFtZToidy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSIsb25Nb3VzZUVudGVyOkssb25Nb3VzZUxlYXZlOlgsY2hpbGRyZW46WyQudGh1bWImJlooImltZyIse3JlZjpHLCJkYXRhLXRlc3RpZCI6ImRyYWctaW1hZ2UiLHNyYzokLnRodW1iLGFsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6LTk5OTksbGVmdDowLHdpZHRoOjgwLGhlaWdodDo4MCxib3JkZXJSYWRpdXM6MTIsb2JqZWN0Rml0OiJjb3ZlciIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksJC5zdGF0dXM9PT0iZXJyb3IiP1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLFooInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6USxkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIixvbkRyYWdTdGFydDpVLG9uRHJhZ0VuZDpWLCJhcmlhLWxhYmVsIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtMyBwbC0yIHByLTMuNSBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gdGV4dC1sZWZ0IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6YmctWyMyYTJhMmNdIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtZPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzEwIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJpbmctMSByaW5nLXdoaXRlLzEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQudGh1bWI/WigiaW1nIix7c3JjOiQudGh1bWIsYWx0OiIiLGNsYXNzTmFtZToic2l6ZS1mdWxsIG9iamVjdC1jb3ZlciIsZHJhZ2dhYmxlOiExfSk6Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgc2l6ZS00IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMzAgYm9yZGVyLXQtd2hpdGUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBsZWFkaW5nLXRpZ2h0IHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiQuc3RhdHVzPT09InNhdmluZyI/IlNhdmluZyBTY3JlZW5zaG904oCmIjoiU2NyZWVuc2hvdCBTYXZlZCJ9KSwkLnN0YXR1cz09PSJzYXZlZCImJlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOiJPcGVuIGluIEZpbmRlciJ9KV19KSwkLnN0YXR1cz09PSJzYXZlZCImJlooRjIse2NsYXNzTmFtZToibWwtYXV0byB0ZXh0LXdoaXRlLzgwIHBvaW50ZXItZXZlbnRzLW5vbmUiLHNpemU6MTYsc3Ryb2tlV2lkdGg6Mi4yNX0pXX0pXX0pfXZhciB1Nj0zNTAwLGw2PTQwMDA7ZnVuY3Rpb24gUlEoKXtyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1s6Ll0vZywiLSIpLnNsaWNlKDAsMjMpfWZ1bmN0aW9uIGQ2KCQpe2xldCBRPUkobnVsbCksSj1JKG51bGwpLEs9SShudWxsKSxYPUkobnVsbCksWT1JKG51bGwpLHE9VCgoKT0+e2lmKEsuY3VycmVudCljbGVhclRpbWVvdXQoSy5jdXJyZW50KTtLLmN1cnJlbnQ9bnVsbCxYLmN1cnJlbnQ9bnVsbH0sW10pLEc9VCgoQSk9PntsZXQgQz1BPz9KLmN1cnJlbnQ/P3ZvaWQgMDtpZihxKCksWS5jdXJyZW50PW51bGwsUzIuZGlzbWlzcyhDKSxDPT09dm9pZCAwfHxKLmN1cnJlbnQ9PT1TdHJpbmcoQykpUS5jdXJyZW50PW51bGwsSi5jdXJyZW50PW51bGx9LFtxXSksTj1UKCgpPT57bGV0IEE9US5jdXJyZW50O2lmKEE/LnBhdGgpVzEoYG9wZW4gLVIgJHtMMShBLnBhdGgpfWApfSxbXSksQj1UKChBKT0+e3EoKTtsZXQgQz1NYXRoLm1heCgwLEEpLEg9Si5jdXJyZW50O1kuY3VycmVudD1DLFguY3VycmVudD1EYXRlLm5vdygpK0MsSy5jdXJyZW50PXNldFRpbWVvdXQoKCk9PkcoSD8/dm9pZCAwKSxDKX0sW3EsR10pLFU9VCgoKT0+e2lmKCFLLmN1cnJlbnR8fFguY3VycmVudD09bnVsbClyZXR1cm47WS5jdXJyZW50PU1hdGgubWF4KDAsWC5jdXJyZW50LURhdGUubm93KCkpLHEoKX0sW3FdKSxWPVQoKCk9PntsZXQgQT1ZLmN1cnJlbnQ7aWYoQT09bnVsbClyZXR1cm47QihBKX0sW0JdKSx6PVQoKEEsQz0xLzApPT57aWYoUS5jdXJyZW50PUEsSi5jdXJyZW50PUEuaWQsUzIuY3VzdG9tKChIKT0+WihwNix7dG9hc3Q6QSxvblJldmVhbDpOLG9uRGlzbWlzczooKT0+RyhIKSxvblBhdXNlOlUsb25SZXN1bWU6Vn0pLHtpZDpBLmlkLGR1cmF0aW9uOjEvMH0pLE51bWJlci5pc0Zpbml0ZShDKSlCKEMpO2Vsc2UgcSgpLFkuY3VycmVudD1udWxsfSxbcSxHLFUsVixOLEJdKTtyZXR1cm57Y2FwdHVyZTpUKGFzeW5jKCk9PntpZighJClyZXR1cm47bGV0IEE9Y3J5cHRvLnJhbmRvbVVVSUQoKTt6KHtpZDpBLHN0YXR1czoic2F2aW5nIixwaGFzZToiaW4ifSk7bGV0IEg9YEY9IiR7YCRIT01FL0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJHtSUSgpfS5wbmdgfSI7IHhjcnVuIHNpbWN0bCBpbyAke0wxKCQpfSBzY3JlZW5zaG90ICIkRiIgJiYgcHJpbnRmICclcycgIiRGImAsTzt0cnl7bGV0IHg9YXdhaXQgVzEoSCk7aWYoTz14LnN0ZG91dC50cmltKCkseC5leGl0Q29kZSE9PTB8fCFPKXt6KHtpZDpBLHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTp4LnN0ZGVyci50cmltKCl8fCJTY3JlZW5zaG90IGZhaWxlZCJ9LGw2KTtyZXR1cm59fWNhdGNoKHgpe3ooe2lkOkEsc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOnggaW5zdGFuY2VvZiBFcnJvcj94Lm1lc3NhZ2U6IlNjcmVlbnNob3QgZmFpbGVkIn0sbDYpO3JldHVybn16KHtpZDpBLHN0YXR1czoic2F2ZWQiLHBoYXNlOiJpbiIscGF0aDpPfSx1Nik7bGV0IFc9YC90bXAvc2VydmUtc2ltLXNjcmVlbnNob3QtdGh1bWItJHtBfS5wbmdgO3RyeXtsZXQgRT0oYXdhaXQgVzEoYHNpcHMgLVogMzIwICR7TDEoTyl9IC0tb3V0ICR7TDEoVyl9ID4vZGV2L251bGwgMj4mMSAmJiBiYXNlNjQgLWkgJHtMMShXKX07IHJtIC1mICR7TDEoVyl9YCkpLnN0ZG91dC5yZXBsYWNlKC9ccysvZywiIik7aWYoRSl7bGV0IGI9US5jdXJyZW50O2lmKGI/LmlkPT09QSl6KHsuLi5iLHRodW1iOmBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtFfWB9LHU2KX19Y2F0Y2h7fX0sWyQsel0pLHJldmVhbDpOLGRpc21pc3M6R319ZnVuY3Rpb24gcjYoe2RlZmF1bHRXaWR0aDokLHZpZXdwb3J0V2lkdGg6USx2aWV3cG9ydEhlaWdodDpKLGFzcGVjdFJhdGlvOkssb25TdGFydDpYfSl7bGV0IFk9RjUoKSxbcSxHXT1NKCExKSxbTixCXT1NKCExKSxbVSxWXT1NKCExKSx6PUkobnVsbCksTD1JKFtdKSxBPUkobnVsbCksQz1JKG51bGwpLEg9SShudWxsKSxPPUkobnVsbCksVz1UKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuICQ7bGV0IF89TmFOO3RyeXtsZXQgUz13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oRjMpO189UyE9bnVsbD9OdW1iZXIoUyk6TmFOfWNhdGNoe31yZXR1cm4gZDkoJCxRLEosSyxfKX0sW0ssJCxKLFFdKSx4PUQxKCgpPT5XKCksW1ddKSxbRSxiXT1NKHgpLGo9SSh4KSxaMT1JKCQpLGY9azMoJCxRLEosSyksaD1NYXRoLm1pbihUOSxmKSxkPUU/PyQsQzE9UjAoZCwkLFEsSixLKSwkMT1UKChfKT0+e2xldCBTPU81KF8pO2ouY3VycmVudD1TLGIoUyl9LFtdKSxuPVQoKF8pPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCQ8PTApcmV0dXJuO2xldCBTPVIwKF8sJCxRLEosSyk7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShGMyxTdHJpbmcoUy8kKSl9Y2F0Y2h7fX0sW0ssJCxKLFFdKSxrMT1UKChfKT0+e2lmKEguY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoSC5jdXJyZW50KTtILmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0guY3VycmVudD1udWxsLG4oXyl9LGw5KX0sW25dKTt5KCgpPT57aWYocXx8TilyZXR1cm47bGV0IF89ai5jdXJyZW50O2lmKF89PW51bGwpcmV0dXJuO2xldCBTPVIwKF8sJCxRLEosSyk7aWYoUyE9PV8pJDEoUyl9LFtLLCQsTixxLEosUSwkMV0pLHkoKCk9PntpZihaMS5jdXJyZW50PT09JClyZXR1cm47WjEuY3VycmVudD0kLCQxKFcoKSl9LFskLFcsJDFdKSx5KCgpPT57aWYoIXEmJiFOKXJldHVybjtsZXQgXz1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcixTPWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCxZMT1kb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q7cmV0dXJuIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPSJud3NlLXJlc2l6ZSIsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PSJub25lIixkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiLCgpPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Xyxkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9Uyxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9WTF9fSxbcSxOXSkseSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgXz0oKT0+e2xldCBZMT1qLmN1cnJlbnQ7aWYoWTE9PW51bGwpcmV0dXJuO2lmKEguY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoSC5jdXJyZW50KSxILmN1cnJlbnQ9bnVsbDtuKFkxKX0sUz0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKV8oKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsXyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLF8pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFMpfX0sW25dKTtsZXQgbD1UKChfKT0+e2lmKF8+ZilyZXR1cm4gZitBMyhfLWYsZik7aWYoXzxoKXJldHVybiBoLUEzKGgtXyxmKTtyZXR1cm4gX30sW2YsaF0pLFI9VCgoKT0+e2lmKEMuY3VycmVudClDLmN1cnJlbnQoKSxDLmN1cnJlbnQ9bnVsbDtCKCExKX0sW10pLEsxPVQoKF8pPT57bGV0IFM9cGVyZm9ybWFuY2Uubm93KCksWTE9TC5jdXJyZW50O1kxLnB1c2goe3Q6Uyx4Ol99KTt3aGlsZShZMS5sZW5ndGg+MSYmUy1ZMVswXS50PnU5KVkxLnNoaWZ0KCl9LFtdKSxCMT1UKChfKT0+e2xldCBTPWwoXyk7aWYoQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCk7QS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e0EuY3VycmVudD1udWxsLCQxKFMpLEsxKFMpfSl9LFtsLEsxLCQxXSksVjE9VCgoXyxTLFkxKT0+e1IoKTtsZXQgcj1qLmN1cnJlbnQ/PyQ7ei5jdXJyZW50PXtwb2ludGVySWQ6XyxzdGFydFg6UyxzdGFydFk6WTEsc3RhcnRXaWR0aDpyfSxMLmN1cnJlbnQ9W3t0OnBlcmZvcm1hbmNlLm5vdygpLHg6cn1dLFgoKSxHKCEwKX0sW1IsJCxYXSksSjE9VCgoKT0+e2xldCBfPXouY3VycmVudDtpZih6LmN1cnJlbnQ9bnVsbCxBLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQS5jdXJyZW50KSxBLmN1cnJlbnQ9bnVsbDtpZihfJiZfLnBvaW50ZXJJZD49MCl7bGV0IFUxPU8uY3VycmVudDtpZihVMT8uaGFzUG9pbnRlckNhcHR1cmUoXy5wb2ludGVySWQpKVUxLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShfLnBvaW50ZXJJZCl9RyghMSk7bGV0IFM9ai5jdXJyZW50Pz8kLFkxPW85KEwuY3VycmVudCk7TC5jdXJyZW50PVtdO2xldCByPVIwKFMrWTEqcDksJCxRLEosSyksdT1PNShjOShyLFskXSxoOSkpLG09TWF0aC5hYnMoUy11KTwwLjUmJk1hdGguYWJzKFkxKTw4O2lmKFl8fG0peyQxKHUpLGsxKHUpO3JldHVybn1CKCEwKSxDLmN1cnJlbnQ9cjkoe2Zyb206Uyx0bzp1LHZlbG9jaXR5OlkxLHN0aWZmbmVzczpmOSxkYW1waW5nOm05LG9uVXBkYXRlOiQxLG9uQ29tcGxldGU6KCk9PntDLmN1cnJlbnQ9bnVsbCxCKCExKSxrMSh1KX19KX0sW0ssJCxZLGsxLEosUSwkMV0pO3koKCk9PntyZXR1cm4oKT0+e2lmKFIoKSxBLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQS5jdXJyZW50KTtpZihILmN1cnJlbnQhPW51bGwpe2lmKGNsZWFyVGltZW91dChILmN1cnJlbnQpLGouY3VycmVudCE9bnVsbCluKGouY3VycmVudCl9fX0sW1Isbl0pLHkoKCk9PntpZighcSlyZXR1cm47bGV0IF89KCk9PkoxKCksUz0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKUoxKCl9LFkxPShyKT0+e2xldCB1PXouY3VycmVudDtpZighdXx8dS5wb2ludGVySWQhPT1yLnBvaW50ZXJJZClyZXR1cm47ci5wcmV2ZW50RGVmYXVsdCgpLEIxKGM2KHUsci5jbGllbnRYLHIuY2xpZW50WSxLKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsXyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixZMSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsXywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLF8sITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFMpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLF8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsWTEsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLF8sITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixfLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixTKX19LFtLLEoxLHEsQjFdKTtsZXQgejE9VCgoXyk9PntsZXQgUz16LmN1cnJlbnQ7aWYoIVN8fFMucG9pbnRlcklkIT09Xy5wb2ludGVySWQpcmV0dXJuO18ucHJldmVudERlZmF1bHQoKSxfLnN0b3BQcm9wYWdhdGlvbigpLEoxKCl9LFtKMV0pLE4xPVQoKF8pPT57aWYoXy5idXR0b24hPT0wKXJldHVybjtfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxfLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoXy5wb2ludGVySWQpLFYxKF8ucG9pbnRlcklkLF8uY2xpZW50WCxfLmNsaWVudFkpfSxbVjFdKSx2PVQoKF8pPT57bGV0IFM9ei5jdXJyZW50O2lmKCFTfHxTLnBvaW50ZXJJZCE9PV8ucG9pbnRlcklkKXJldHVybjtfLnByZXZlbnREZWZhdWx0KCksQjEoYzYoUyxfLmNsaWVudFgsXy5jbGllbnRZLEspKX0sW0ssQjFdKSxpPVQoKF8pPT57bGV0IFM9Xy5rZXk9PT0iQXJyb3dSaWdodCJ8fF8ua2V5PT09IkFycm93RG93biI/MTpfLmtleT09PSJBcnJvd0xlZnQifHxfLmtleT09PSJBcnJvd1VwIj8tMTowO2lmKFM9PT0wKXJldHVybjtfLnByZXZlbnREZWZhdWx0KCksUigpO2xldCBZMT1fLnNoaWZ0S2V5PzgwOjI0LHI9TzUoUjAoQzErUypZMSwkLFEsSixLKSk7JDEociksazEocil9LFtLLFIsQzEsJCxrMSxKLFEsJDFdKTtyZXR1cm57aGFuZGxlUmVmOk8sd2lkdGg6ZCxjb21taXR0ZWRXaWR0aDpDMSxtaW5XaWR0aDpoLG1heFdpZHRoOmYsaXNSZXNpemluZzpxLGlzSW5lcnRpYTpOLGhhbmRsZUhvdmVyZWQ6VSxoYW5kbGVBY3RpdmU6VXx8cXx8TixzZXRIYW5kbGVIb3ZlcmVkOlYsb25Qb2ludGVyRG93bjpOMSxvblBvaW50ZXJNb3ZlOnYsb25Qb2ludGVyRW5kOnoxLG9uS2V5RG93bjppfX1mdW5jdGlvbiBjNigkLFEsSixLKXtsZXQgWD1RLSQuc3RhcnRYLFk9KEotJC5zdGFydFkpKks7cmV0dXJuICQuc3RhcnRXaWR0aCsoTWF0aC5hYnMoWCk+PU1hdGguYWJzKFkpP1g6WSl9ZnVuY3Rpb24gbzYoKXtsZXQgJD1JKG5ldyBNYXApLFE9SShuZXcgTWFwKSxKPVQoKEcpPT57bGV0IE49US5jdXJyZW50LmdldChHKTtpZihOKWNsZWFyVGltZW91dChOKTtRLmN1cnJlbnQuZGVsZXRlKEcpfSxbXSksSz1UKChHLE49MS8wKT0+e1MyLmN1c3RvbSgoKT0+WihRNix7dG9hc3Q6R30pLHtpZDpHLmlkLGR1cmF0aW9uOk59KX0sW10pLFg9VCgoRyxOKT0+e2xldCBCPWNyeXB0by5yYW5kb21VVUlEKCksVT17aWQ6QixuYW1lOkcsa2luZDpOLHN0YXR1czoidXBsb2FkaW5nIixwcm9ncmVzczowfTtyZXR1cm4gJC5jdXJyZW50LnNldChCLFUpLEsoVSksQn0sW0tdKSxZPVQoKEcsTik9PntsZXQgQj0kLmN1cnJlbnQuZ2V0KEcpO2lmKCFCKXJldHVybjtKKEcpO2xldCBVPXsuLi5CLC4uLk59O2lmKCQuY3VycmVudC5zZXQoRyxVKSxLKFUsTi5zdGF0dXM9PT0ic3VjY2VzcyJ8fE4uc3RhdHVzPT09ImVycm9yIj8zMDAwOjEvMCksTi5zdGF0dXM9PT0ic3VjY2VzcyJ8fE4uc3RhdHVzPT09ImVycm9yIil7bGV0IFY9c2V0VGltZW91dCgoKT0+eyQuY3VycmVudC5kZWxldGUoRyksUS5jdXJyZW50LmRlbGV0ZShHKX0sMzAwMCk7US5jdXJyZW50LnNldChHLFYpfX0sW0osS10pLHE9VCgoRyxOKT0+e2xldCBCPSQuY3VycmVudC5nZXQoRyk7aWYoIUIpcmV0dXJuO2xldCBVPXsuLi5CLHByb2dyZXNzOk59OyQuY3VycmVudC5zZXQoRyxVKSxLKFUpfSxbS10pO3JldHVybnthZGQ6WCx1cGRhdGU6WSxzZXRQcm9ncmVzczpxfX1mdW5jdGlvbiBpNigkLFEpe2xldFtKLEtdPU0oW10pLFtYLFldPU0obnVsbCksW3EsR109TSghMSksTj1UKGFzeW5jKCk9PntpZighJClyZXR1cm47RyghMCksWShudWxsKTt0cnl7bGV0IEI9YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLFU9YXdhaXQgQi5qc29uKCk7aWYoIUIub2t8fFUuZXJyb3IpdGhyb3cgRXJyb3IoVS5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7bGV0IFY9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3cubG9jYXRpb24sej1VLnRhcmdldHM/P1tdO0soVj96Lm1hcCgoTCk9Pnk2KEwsVikpOnopfWNhdGNoKEIpe1koQiBpbnN0YW5jZW9mIEVycm9yP0IubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IFdlYktpdCBEZXZUb29scyIpfWZpbmFsbHl7RyghMSl9fSxbJF0pO3JldHVybiB5KCgpPT57aWYoIVEpcmV0dXJuO04oKTtsZXQgQj1zZXRJbnRlcnZhbCgoKT0+dm9pZCBOKCksMjUwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoQil9LFtRLE5dKSx7dGFyZ2V0czpKLGVycm9yOlgsbG9hZGluZzpxLHJlZnJlc2g6Tn19dmFyIGdRPTYwLGhRPTEwMDA7ZnVuY3Rpb24gbjYoJCxRLEosSz1nUSl7bGV0W1gsWV09TShudWxsKSxbcSxHXT1NKDApLFtOLEJdPU0oSyksW1UsVl09TSgwKTt5KCgpPT57aWYoIVF8fCEkKXJldHVybjtsZXQgTz0hMSxXPSQuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iLHg9YXN5bmMoKT0+e3RyeXtsZXQgaj1hd2FpdChhd2FpdCBmZXRjaChgJHskfSR7V31saW1pdD0ke059Jm9mZnNldD0wYCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoTylyZXR1cm47aWYoWShqLmRldmljZXM/P1tdKSx0eXBlb2Ygai50b3RhbD09PSJudW1iZXIiKUcoai50b3RhbCl9Y2F0Y2h7aWYoIU8pWShbXSl9fTt4KCk7bGV0IEU9c2V0SW50ZXJ2YWwoeCxKPzc1MDozMDAwKTtyZXR1cm4oKT0+e089ITAsY2xlYXJJbnRlcnZhbChFKX19LFskLFEsVSxKLE5dKTtsZXQgej1UKCgpPT5WKChPKT0+TysxKSxbXSksTD1UKCgpPT5CKChPKT0+TytLKSxbS10pLEE9VCgoKT0+QihoUSksW10pLEM9VCgoKT0+QihLKSxbS10pLEg9cT4oWD8ubGVuZ3RoPz8wKTtyZXR1cm57ZGV2aWNlczpYLHRvdGFsOnEscmVmcmVzaDp6LGxvYWRNb3JlOkwsbG9hZEFsbDpBLHJlc2V0UGFnZTpDLGhhc01vcmU6SH19dmFyIFMzPXtzdHJlYW1lZDohMSxmZWxsQmFjazohMX07ZnVuY3Rpb24gYTYoJCxRKXtzd2l0Y2goUSl7Y2FzZSJmcmFtZSI6cmV0dXJuICQuc3RyZWFtZWQ/JDp7Li4uJCxzdHJlYW1lZDohMH07Y2FzZSJ0aW1lb3V0IjpyZXR1cm4gJC5zdHJlYW1lZHx8JC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlImVycm9yIjpyZXR1cm4gJC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlInJlc2V0IjpyZXR1cm4gUzN9fXZhciBzNj00MDAwO3ZhciBmUT17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gdDYoJCl7cmV0dXJuIGZRWyRdPz9udWxsfXZhciB4Mz0zMjAsZTY9NzYwLGozPTMwMDtmdW5jdGlvbiB2MygkLFEpe2lmKCEkKXJldHVybiBudWxsO2lmKCEkLmRldmljZSlyZXR1cm4gJDtpZighJC5wcm94eUhlbHBlcnMpcmV0dXJuICQ7bGV0IEs9YCR7JC5iYXNlUGF0aD09PSIvIj8iIjooJC5iYXNlUGF0aD8/IiIpLnJlcGxhY2UoL1wvKyQvLCIiKX0vaGVscGVyLyR7ZW5jb2RlVVJJQ29tcG9uZW50KCQuZGV2aWNlKX1gLFg9YCR7US5wcm90b2NvbH0vLyR7US5ob3N0fWAsWT1RLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiO3JldHVybnsuLi4kLHVybDpgJHtYfSR7S31gLHN0cmVhbVVybDpgJHtYfSR7S30vc3RyZWFtLm1qcGVnYCx3c1VybDpgJHtZfS8vJHtRLmhvc3R9JHtLfS93c2B9fWZ1bmN0aW9uICQ0KCQsUSl7bGV0IEo9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEpKSxLPW5ldyBVaW50OEFycmF5KDErSi5sZW5ndGgpO3JldHVybiBLWzBdPSQsSy5zZXQoSiwxKSxLfWZ1bmN0aW9uIG1RKCQsUSxKPTMyKXtsZXQgSz1bLi4uJCxRXTtyZXR1cm4gSy5sZW5ndGg+Sj9LLnNsaWNlKEsubGVuZ3RoLUopOkt9ZnVuY3Rpb24gUjMoJCxRLEo9RGF0ZS5ub3coKSxLPTE1MDApe2xldCBYPVEuZmlsdGVyKChZKT0+Si1ZLmNyZWF0ZWRBdDw9Syk7aWYoISR8fCQucmVhZHlTdGF0ZSE9PTEpcmV0dXJuIFg7Zm9yKGxldCBZIG9mIFgpJC5zZW5kKCQ0KFkudGFnLFkucGF5bG9hZCkuYnVmZmVyKTtyZXR1cm5bXX1mdW5jdGlvbiBRNCgkLFEsSixLLFg9RGF0ZS5ub3coKSl7bGV0IFk9UjMoJCxRLFgpO2lmKCQ/LnJlYWR5U3RhdGU9PT0xKXJldHVybiAkLnNlbmQoJDQoSixLKS5idWZmZXIpLFk7cmV0dXJuIG1RKFkse3RhZzpKLHBheWxvYWQ6SyxjcmVhdGVkQXQ6WH0pfWZ1bmN0aW9uIEo0KCQpe3JldHVybiAkP2AkeyQuZGV2aWNlfTokeyQucGlkfTokeyQuc3RyZWFtVXJsfTokeyQud3NVcmx9YDoiIn1mdW5jdGlvbiBwUSgpe2xldFskLFFdPU0oKCk9PnYzKEkyKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pLHdpbmRvdy5sb2NhdGlvbikpLFtKLEtdPU0oITEpLFtYLFldPU0oKCk9PntsZXQgdT1JMih3aW5kb3cuX19TSU1fUFJFVklFV19fKTtpZih1KXJldHVybiB1LmRldmljZTtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImRldmljZSIpfSksW3EsR109TSghMSksW04sQl09TSghMSksW1UsVl09TSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49ajMrNTIwfSkse3dpZHRoOnosb25Qb2ludGVyRG93bjpMfT1ENSgic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIixqMywyNDAsNjQwLCJyaWdodCIpLFtBLENdPU0obnVsbCksSD13aW5kb3cuX19TSU1fUFJFVklFV19fLE89SD8uZ3JpZEFwaUVuZHBvaW50Pz9sMSgiZ3JpZC9hcGkiKSxXPUg/LmdyaWRTdGFydEVuZHBvaW50Pz9sMSgiZ3JpZC9hcGkvc3RhcnQiKSx4PUg/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9sMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbRSxiXT1NKHt9KSxbaixaMV09TSh7fSksW2YsaF09TSh7fSksW2QsQzFdPU0oKCk9Pm5ldyBTZXQpLCQxPU9iamVjdC52YWx1ZXMoRSkuc29tZShCb29sZWFuKXx8T2JqZWN0LnZhbHVlcyhqKS5zb21lKEJvb2xlYW4pLHtkZXZpY2VzOm4sdG90YWw6azEscmVmcmVzaDpsLGxvYWRNb3JlOlIsbG9hZEFsbDpLMSxyZXNldFBhZ2U6QjEsaGFzTW9yZTpWMX09bjYoTywhMCwkMSksSjE9ISEoWCYmbj8uZmluZCgodSk9PnUuZGV2aWNlPT09WCk/LmhlbHBlciksejE9VCgodSk9PntZKHUpO3RyeXtsZXQgbT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTttLnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsdSksd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIsbS50b1N0cmluZygpKX1jYXRjaHt9fSxbXSksTjE9VChhc3luYyh1LG09MjAwMDApPT57bGV0IFUxPURhdGUubm93KCkrbTt3aGlsZShEYXRlLm5vdygpPFUxKXt0cnl7aWYoKChhd2FpdChhd2FpdCBmZXRjaChPLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKSkuZGV2aWNlcz8/W10pLnNvbWUoKEExKT0+QTEuZGV2aWNlPT09dSYmQTEuaGVscGVyKSlyZXR1cm4hMH1jYXRjaHt9YXdhaXQgbmV3IFByb21pc2UoKEcxKT0+c2V0VGltZW91dChHMSw0MDApKX1yZXR1cm4hMX0sW09dKSx2PVQoYXN5bmModSk9PntiKChtKT0+KHsuLi5tLFt1XTohMH0pKSxoKChtKT0+KHsuLi5tLFt1XTpudWxsfSkpO3RyeXtsZXQgbT1hd2FpdCBmZXRjaChXLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDp1fSl9KSxVMT1hd2FpdCBtLmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIW0ub2t8fCFVMS5vayl7aCgoRzEpPT4oey4uLkcxLFt1XTpVMS5lcnJvcj8/YEhUVFAgJHttLnN0YXR1c31gfSkpO3JldHVybn1DMSgoRzEpPT5HMS5oYXModSk/RzE6bmV3IFNldChHMSkuYWRkKHUpKSxhd2FpdCBOMSh1KX1jYXRjaChtKXtoKChVMSk9Pih7Li4uVTEsW3VdOm0/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtiKChtKT0+KHsuLi5tLFt1XTohMX0pKSxsKCl9fSxbVyxOMSxsXSksaT1UKGFzeW5jKHUpPT57WjEoKG0pPT4oey4uLm0sW3VdOiEwfSkpLGgoKG0pPT4oey4uLm0sW3VdOm51bGx9KSk7dHJ5e2xldCBtPWF3YWl0IGZldGNoKHgse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOnV9KX0pLFUxPWF3YWl0IG0uanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighbS5va3x8IVUxLm9rKWgoKEcxKT0+KHsuLi5HMSxbdV06VTEuZXJyb3I/P2BIVFRQICR7bS5zdGF0dXN9YH0pKX1jYXRjaChtKXtoKChVMSk9Pih7Li4uVTEsW3VdOm0/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtaMSgobSk9Pih7Li4ubSxbdV06ITF9KSksbCgpfX0sW3gsbF0pO3koKCk9PntpZihYKXJldHVybjtpZigkPy5kZXZpY2Upe1koJC5kZXZpY2UpO3JldHVybn1pZighbnx8bi5sZW5ndGg9PT0wKXJldHVybjtsZXQgdT1uLmZpbmQoKG0pPT5tLmhlbHBlcik/P24uZmluZCgobSk9Pm0uc3RhdGU9PT0iQm9vdGVkIik/P25bMF07aWYodSlZKHUuZGV2aWNlKX0sW1gsJD8uZGV2aWNlLG5dKSx5KCgpPT57bGV0IHU9YCR7bDEoImFwaS9ldmVudHMiKX0ke1g/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoWCl9YDoiIn1gLG09KEcxKT0+e1EoKGQxKT0+e2lmKEcxPXYzKEkyKEcxKSx3aW5kb3cubG9jYXRpb24pLEo0KGQxKT09PUo0KEcxKSlyZXR1cm4gZDE7aWYoRzEpd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1HMTtlbHNlIGlmKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pe2xldHtiYXNlUGF0aDpBMSxleGVjVG9rZW46cDF9PXdpbmRvdy5fX1NJTV9QUkVWSUVXX187d2luZG93Ll9fU0lNX1BSRVZJRVdfXz17YmFzZVBhdGg6QTEsZXhlY1Rva2VuOnAxfX1yZXR1cm4gRzF9KX0sVTE9eTIodSk7cmV0dXJuIFUxLm9ubWVzc2FnZT0oRzEpPT57dHJ5e20oSTIoSlNPTi5wYXJzZShHMS5kYXRhKSkpfWNhdGNoe319LCgpPT5VMS5jbG9zZSgpfSxbWCxKMV0pO2xldCBfPVg/PyQ/LmRldmljZT8/bnVsbCxTPW4/LmZpbmQoKHUpPT51LmRldmljZT09PV8pPz9udWxsLFkxPSEhJCYmJC5kZXZpY2U9PT1fLHI7aWYoWTEmJiQpcj1aKHVRLHtjb25maWc6JCxkZXZpY2VOYW1lOlM/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpTPy5ydW50aW1lPz9udWxsLGNocm9tZTpTPy5jaHJvbWU/P251bGwscHJlZmVyTWpwZWc6ZC5oYXMoJC5kZXZpY2UpLGF4T3ZlcmxheUVuYWJsZWQ6cSxzZXRBeE92ZXJsYXlFbmFibGVkOkcsZGV2dG9vbHNPcGVuOk4sc2V0RGV2dG9vbHNPcGVuOkIsZ3JpZE9wZW46VSxzZXRHcmlkT3BlbjpWLGdyaWRQYW5lbFdpZHRoOnosc2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkEsc2V0U2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkMsc3RyZWFtaW5nOkosc2V0U3RyZWFtaW5nOkt9KTtlbHNle2xldCB1PVU/eiszNjoyNDtyPVooImRpdiIse2NsYXNzTmFtZToiaC1zY3JlZW4gZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTMgYmctcGFnZSBmb250LXN5c3RlbSBib3gtYm9yZGVyIFt0cmFuc2l0aW9uOnBhZGRpbmdfMC4yNXNfZWFzZV0iLHN0eWxlOntwYWRkaW5nTGVmdDp1LHBhZGRpbmdSaWdodDoyNH0sY2hpbGRyZW46Uz9aKGs5LHtuYW1lOlMubmFtZSxydW50aW1lOlMucnVudGltZSxjaHJvbWU6Uy5jaHJvbWU/P251bGwscGxhY2Vob2xkZXJBc3NldDpTLnBsYWNlaG9sZGVyQXNzZXQ/P251bGwsYnVzeTohIVMuaGVscGVyfHwhIUVbUy5kZXZpY2VdLGJ1c3lMYWJlbDpTLmhlbHBlcj8iQ29ubmVjdGluZ+KApiI6IlN0YXJ0aW5n4oCmIixlcnJvcjpmW1MuZGV2aWNlXT8/bnVsbCxvblN0YXJ0OigpPT52KFMuZGV2aWNlKX0pOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltaKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxaKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IHRleHQtWzE0cHhdIG1heC13LTEyMCIsY2hpbGRyZW46WyJDcmVhdGUgYSBzaW11bGF0b3IgaW4gWGNvZGUsIG9yIHN0YXJ0IG9uZSB3aXRoIiwiICIsWigiY29kZSIse2NsYXNzTmFtZToiYmctWyMyMjJdIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ImJ1bnggc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KV19KX0pfXJldHVybiBaKFExLHtjaGlsZHJlbjpbcixaKCQ2LHt9KSxaKFA5LHtvcGVuOlUsb25DbG9zZTooKT0+VighMSksd2lkdGg6eixzaWRlOiJsZWZ0IixkZXZpY2VzOm4sdG90YWw6azEsaGFzTW9yZTpWMSxvbkxvYWRNb3JlOlIsb25Mb2FkQWxsOksxLG9uUmVzZXRQYWdlOkIxLHNlbGVjdGVkVWRpZDpfLG9uU2VsZWN0OnoxLHN0YXJ0aW5nOkUsc2h1dHRpbmdEb3duOmosb25TaHV0ZG93bjppfSksWihINSx7cGFuZWxXaWR0aDp6LHZpc2libGU6VSxvblBvaW50ZXJEb3duOkwsYXJpYUxhYmVsOiJSZXNpemUgc2ltdWxhdG9ycyBzaWRlYmFyIixzaWRlOiJsZWZ0In0pLFooVTkse29wZW46VSxvbkNsaWNrOigpPT5WKCEwKX0pXX0pfWZ1bmN0aW9uIHVRKHtjb25maWc6JCxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpKLGNocm9tZTpLLHByZWZlck1qcGVnOlgsYXhPdmVybGF5RW5hYmxlZDpZLHNldEF4T3ZlcmxheUVuYWJsZWQ6cSxkZXZ0b29sc09wZW46RyxzZXREZXZ0b29sc09wZW46TixncmlkT3BlbjpCLHNldEdyaWRPcGVuOlUsZ3JpZFBhbmVsV2lkdGg6VixzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6eixzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6TCxzdHJlYW1pbmc6QSxzZXRTdHJlYW1pbmc6Q30pe3koKCk9Pntkb2N1bWVudC50aXRsZT1RP2BTaW11bGF0b3IgLSAke1F9YDoiU2ltdWxhdG9yIFByZXZpZXcifSxbUV0pO2xldCBIPUYwKFEpLE89aTYoJC5kZXZ0b29sc0VuZHBvaW50Pz9sMSgiZGV2dG9vbHMiKSxHKTt5KCgpPT57aWYoIUcpcmV0dXJuO2lmKHomJk8udGFyZ2V0cy5zb21lKChrKT0+ay5pZD09PXopKXJldHVybjtMKE8udGFyZ2V0cy5sZW5ndGg9PT0xP08udGFyZ2V0c1swXS5pZDpudWxsKX0sW0csTy50YXJnZXRzLHosTF0pLHkoKCk9PntMKG51bGwpfSxbJC5kZXZpY2UsTF0pO2xldCBXPW02KCksW3gsRV09eTAoYTYsUzMpLFtiXT1NKCgpPT5uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiY29kZWMiKT09PSJtanBlZyIpLFtqLFoxXT1NKCgpPT53aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYjMpPT09Im1qcGVnIj8ibWpwZWciOiJhdXRvIik7eSgoKT0+e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShiMyxqKX0sW2pdKTtsZXQgaD0kLmNvZGVjIT09Im1qcGVnIiYmVy5zdXBwb3J0ZWQmJiF4LmZlbGxCYWNrJiYhWCYmIWImJmohPT0ibWpwZWciLGQ9ZjYoaD9udWxsOiQuc3RyZWFtVXJsKTt5KCgpPT57QyghMSksRSgicmVzZXQiKX0sWyQuc3RyZWFtVXJsLENdKSx5KCgpPT57aWYoaCYmQSlFKCJmcmFtZSIpfSxbaCxBXSkseSgoKT0+e2lmKCFoKXJldHVybjtsZXQgaz1zZXRUaW1lb3V0KCgpPT5FKCJ0aW1lb3V0IiksczYpO3JldHVybigpPT5jbGVhclRpbWVvdXQoayl9LFtoLCQuc3RyZWFtVXJsXSk7bGV0W0MxLCQxXT1NKG51bGwpLFtuLGsxXT1NKG51bGwpLGw9bixSPUMxPz9sPz9pMChILFEpLEsxPWUyKEgsUiksQjE9bjAoSCxSKSxWMT10MihSKSxKMT1jMChSKSx6MT1KMT9KMS53aWR0aC9KMS5oZWlnaHQ6MSxOMT1FMChSKSx2PSEhSyYmIU4xLGk9dj9LLmZyYW1lLndpZHRoL0suc2NyZWVuLndpZHRoOjEsXz1CMSppLFM9dj9LLmZyYW1lLndpZHRoL0suZnJhbWUuaGVpZ2h0OnoxLFkxPXY/YCR7Sy5mcmFtZS53aWR0aH0gLyAke0suZnJhbWUuaGVpZ2h0fWA6VjEscj1JKG51bGwpLHU9SShbXSk7eSgoKT0+e2xldCBrPSExLEY9bnVsbCxEPW51bGw7dS5jdXJyZW50PVtdO2xldCB3PSgpPT57aWYoa3x8RilyZXR1cm47Rj1zZXRUaW1lb3V0KCgpPT57Rj1udWxsLGMoKX0sMTAwMCl9LGM9KCk9PntsZXQgcz1uZXcgV2ViU29ja2V0KCQud3NVcmwpO3MuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLEQ9cyxyLmN1cnJlbnQ9cyxzLm9ub3Blbj0oKT0+e3UuY3VycmVudD1SMyhzLHUuY3VycmVudCl9LHMub25tZXNzYWdlPShIMSk9PntpZighKEgxLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuO2xldCBNMT1uZXcgVWludDhBcnJheShIMS5kYXRhKTtpZihNMS5sZW5ndGg8MXx8TTFbMF0hPT0xMzApcmV0dXJuO3RyeXtsZXQgaDE9SlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoTTEuc3ViYXJyYXkoMSkpKTtpZihoMS53aWR0aDw9MHx8aDEuaGVpZ2h0PD0wKXJldHVybjtrMSgoejApPT56MCYmejAud2lkdGg9PT1oMS53aWR0aCYmejAuaGVpZ2h0PT09aDEuaGVpZ2h0JiZ6MC5vcmllbnRhdGlvbj09PWgxLm9yaWVudGF0aW9uP3owOmgxKX1jYXRjaHt9fSxzLm9uY2xvc2U9KCk9PntpZihyLmN1cnJlbnQ9PT1zKXIuY3VycmVudD1udWxsO3coKX0scy5vbmVycm9yPSgpPT57cy5jbG9zZSgpfX07cmV0dXJuIGMoKSwoKT0+e2lmKGs9ITAsRiljbGVhclRpbWVvdXQoRik7aWYoci5jdXJyZW50PT09RClyLmN1cnJlbnQ9bnVsbDtEPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgbT1UKChrLEYpPT57dS5jdXJyZW50PVE0KHIuY3VycmVudCx1LmN1cnJlbnQsayxGKX0sW10pLFUxPVQoKGspPT5tKDMsayksW21dKSxHMT1UKChrKT0+bSg1LGspLFttXSksZDE9VCgoayk9Pm0oNCx7YnV0dG9uOmt9KSxbbV0pLEExPVQoKHtwaGFzZTprLGJ1dHRvbjpGfSk9PntpZihGLnVzYWdlUGFnZT09bnVsbHx8Ri51c2FnZT09bnVsbClyZXR1cm47bSg0LHtidXR0b246Ri5uYW1lLHBhZ2U6Ri51c2FnZVBhZ2UsdXNhZ2U6Ri51c2FnZSxwaGFzZTprfSl9LFttXSkscDE9VCgoayk9Pm0oMTAse2RlbHRhOmt9KSxbbV0pLE8wPVQoKGspPT5tKDExLGspLFttXSksUTA9VCgoayk9PnskMSgoRik9PkYmJkYud2lkdGg9PT1rLndpZHRoJiZGLmhlaWdodD09PWsuaGVpZ2h0JiZGLm9yaWVudGF0aW9uPT09ay5vcmllbnRhdGlvbj9GOmspfSxbXSksXzE9VCgoayk9PnttKDcse29yaWVudGF0aW9uOmt9KX0sW21dKSxTMT1SLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiLE0wPUghPT0id2F0Y2giJiZIIT09InZpc2lvbiIsSjA9VCgoayk9PntpZighTTApcmV0dXJuO2xldCBGPShrPT09ImxlZnQiP04yOnI1KVtTMV07XzEoRil9LFtNMCxTMSxfMV0pO3koKCk9PnskMShudWxsKSxrMShudWxsKX0sWyQuc3RyZWFtVXJsXSkseSgoKT0+e2xldCBrPWw7aWYoIWspcmV0dXJuOyQxKChGKT0+RiYmRi53aWR0aD09PWsud2lkdGgmJkYuaGVpZ2h0PT09ay5oZWlnaHQmJkYub3JpZW50YXRpb249PT1rLm9yaWVudGF0aW9uP0Y6bnVsbCl9LFtsLGw/LndpZHRoLGw/LmhlaWdodCxsPy5vcmllbnRhdGlvbl0pO2xldCBPMT1UKChrLEYpPT57bSg2LHt0eXBlOmssdXNhZ2U6Rn0pfSxbbV0pLFtjMSxXMF09TShudWxsKSxbdzEsdTFdPU0oKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtsZXQgaz1OdW1iZXIod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiKSksRj1OdW1iZXIuaXNGaW5pdGUoaykmJms+MD9rOngzO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49Ris0ODB9KSx7d2lkdGg6TjAsb25Qb2ludGVyRG93bjp4MX09RDUoInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIseDMsMjQwLDcyMCkse3dpZHRoOkUxLG9uUG9pbnRlckRvd246YTF9PUQ1KCJzZXJ2ZS1zaW06ZGV2dG9vbHMtcGFuZWwtd2lkdGgiLGU2LDQyMCwxNDAwKSxbWjAsaTFdPU0oKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lcldpZHRoOjApLFtVMCxEMF09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO3koKCk9PntsZXQgaz0oKT0+e2kxKHdpbmRvdy5pbm5lcldpZHRoKSxEMCh3aW5kb3cuaW5uZXJIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsayksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGspfSxbXSkseSgoKT0+e2xldCBrPXkyKCQuYXBwU3RhdGVFbmRwb2ludD8/bDEoImFwcHN0YXRlIikpLEY9bnVsbDtyZXR1cm4gay5vbm1lc3NhZ2U9KEQpPT57dHJ5e2xldCB3PUpTT04ucGFyc2UoRC5kYXRhKTtpZihGKWNsZWFyVGltZW91dChGKTtsZXQgYz13Py5pc1JlYWN0TmF0aXZlPzA6NjAwO0Y9c2V0VGltZW91dCgoKT0+VzAodyksYyl9Y2F0Y2h7fX0sKCk9PntpZihGKWNsZWFyVGltZW91dChGKTtrLmNsb3NlKCl9fSxbJC5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0IF8wPVQoYXN5bmMoKT0+e08xKCJkb3duIiwyMjcpLGF3YWl0IG5ldyBQcm9taXNlKChEKT0+c2V0VGltZW91dChELDMwKSksTzEoImRvd24iLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgoRCk9PnNldFRpbWVvdXQoRCwzMCkpLE8xKCJ1cCIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChEKT0+c2V0VGltZW91dChELDMwKSksTzEoInVwIiwyMjcpfSxbTzFdKSxyMT1JKG51bGwpLFtJMSx2MV09TSgwKSxbZzEsbjFdPU0oMCk7eSgoKT0+e2xldCBrPXIxLmN1cnJlbnQ7aWYoIWt8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBGPW5ldyBSZXNpemVPYnNlcnZlcigoRCk9PntsZXQgdz1EWzBdPy5jb250ZW50UmVjdDt2MSh3Py53aWR0aD8/MCksbjEodz8uaGVpZ2h0Pz8wKX0pO3JldHVybiBGLm9ic2VydmUoayksKCk9PkYuZGlzY29ubmVjdCgpfSxbXSk7bGV0W0swLEwwXT1NKCEwKSxlMT1JKCEwKTtlMS5jdXJyZW50PUswO2xldCBlPUkobmV3IFNldCk7eSgoKT0+e2xldCBrPShGKT0+e2xldCBEPSEhcjEuY3VycmVudD8uY29udGFpbnMoRi50YXJnZXQpO0wwKEQpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLGssITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsaywhMCl9LFtdKSx5KCgpPT57aWYoSzApcmV0dXJuO2xldCBrPWUuY3VycmVudDtpZihrLnNpemU9PT0wKXJldHVybjtmb3IobGV0IEYgb2YgayltKDYse3R5cGU6InVwIix1c2FnZTpGfSk7ay5jbGVhcigpfSxbSzAsbV0pLHkoKCk9PntsZXQgaz0odyxjKT0+e2lmKCFlMS5jdXJyZW50KXJldHVybjtpZih3LmNvZGU9PT0iS2V5SCImJncubWV0YUtleSYmdy5zaGlmdEtleSl7aWYody5wcmV2ZW50RGVmYXVsdCgpLGM9PT0iZG93biImJiF3LnJlcGVhdCltKDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoKHcuY29kZT09PSJBcnJvd0xlZnQifHx3LmNvZGU9PT0iQXJyb3dSaWdodCIpJiZ3Lm1ldGFLZXkmJiF3LnNoaWZ0S2V5JiYhdy5hbHRLZXkmJiF3LmN0cmxLZXkpe2lmKHcucHJldmVudERlZmF1bHQoKSxjPT09ImRvd24iJiYhdy5yZXBlYXQpSjAody5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZih3LmNvZGU9PT0iS2V5QSImJncubWV0YUtleSYmdy5zaGlmdEtleSl7aWYody5wcmV2ZW50RGVmYXVsdCgpLGM9PT0iZG93biImJiF3LnJlcGVhdClXMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChIMSk9PntsZXQgTTE9SDEuc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4gVzEoYHhjcnVuIHNpbWN0bCB1aSAkeyQuZGV2aWNlfSBhcHBlYXJhbmNlICR7TTF9YCl9KS5jYXRjaCgoKT0+e30pO3JldHVybn1pZih3LmNvZGU9PT0iS2V5SyImJncubWV0YUtleSYmIXcuc2hpZnRLZXkmJiF3LmFsdEtleSYmIXcuY3RybEtleSl7aWYody5wcmV2ZW50RGVmYXVsdCgpLGM9PT0iZG93biImJiF3LnJlcGVhdCltKDEyLHt9KTtyZXR1cm59bGV0IHM9dDYody5jb2RlKTtpZihzPT1udWxsKXJldHVybjtpZih3LnByZXZlbnREZWZhdWx0KCksYz09PSJkb3duIillLmN1cnJlbnQuYWRkKHMpO2Vsc2UgZS5jdXJyZW50LmRlbGV0ZShzKTttKDYse3R5cGU6Yyx1c2FnZTpzfSl9LEY9KHcpPT5rKHcsImRvd24iKSxEPSh3KT0+ayh3LCJ1cCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsRiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixEKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixGKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLEQpfX0sW20sJC5kZXZpY2UsSjBdKTtsZXQgUD1vNigpLHA9ZDYoJC5kZXZpY2UpLHQ9ZzYoe2V4ZWM6VzEsdWRpZDokLmRldmljZSxlbmFibGVkOkEsb25VcGxvYWRTdGFydDpQLmFkZCxvblVwbG9hZFByb2dyZXNzOlAuc2V0UHJvZ3Jlc3Msb25VcGxvYWRFbmQ6KGssRixEKT0+UC51cGRhdGUoayx7c3RhdHVzOkY/InN1Y2Nlc3MiOiJlcnJvciIsbWVzc2FnZTpEfSksb25VbnN1cHBvcnRlZDooayk9PntsZXQgRj1QLmFkZChrLm5hbWUsIm1lZGlhIik7UC51cGRhdGUoRix7c3RhdHVzOiJlcnJvciIsbWVzc2FnZTpgVW5zdXBwb3J0ZWQ6ICR7ay50eXBlfHxLMihrKX1gfSl9LG9uSG9zdFBhdGhEcm9wOnAuZGlzbWlzc30pLGE9cjYoe2RlZmF1bHRXaWR0aDpfLHZpZXdwb3J0V2lkdGg6WjAsdmlld3BvcnRIZWlnaHQ6VTAsYXNwZWN0UmF0aW86UyxvblN0YXJ0OigpPT5MMCghMSl9KSxxMT0xMixYMT0yNCxiMT1JMT4wP01hdGgubWluKEkxLGEud2lkdGgpOmEud2lkdGgsUjE9KGspPT57aWYoazw9MClyZXR1cm4gMDtsZXQgRj1aMC1xMS1rLHc9WjAvMitiMS8yLShGLVgxKTtpZih3PD0wKXJldHVybiAwO2xldCBjPTIqdztyZXR1cm4gYzw9aytYMT9jOjB9LFgwPVIxKEc/RTE6dzE/TjA6MCksWTA9UjEoQj9WOjApO3JldHVybiBaKEI5LHtlbmRwb2ludDpZPyQ/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1zY3JlZW4gYmctcGFnZSBweS02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLHN0eWxlOntwYWRkaW5nTGVmdDoyNCtZMCxwYWRkaW5nUmlnaHQ6MjQrWDAsdHJhbnNpdGlvbjphLmlzUmVzaXppbmd8fGEuaXNJbmVydGlhPyJub25lIjp3OX0sY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgbWluLXctMCIsc3R5bGU6e3dpZHRoOmEud2lkdGgsdHJhbnNpdGlvbjphLmlzUmVzaXppbmd8fGEuaXNJbmVydGlhP0MzOkgzfSxjaGlsZHJlbjpbWihtMSx7ZXhlYzpXMSxvblJvdGF0ZTpfMSxvcmllbnRhdGlvbjpSLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpRLGRldmljZVJ1bnRpbWU6SixzdHJlYW1pbmc6QSwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBzdGF0dXMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGZsZXhXcmFwOiJub3dyYXAiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDoxMCxwYWRkaW5nOiI2cHggMTBweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpbWihtMS5UaXRsZSx7b25DbGljazooKT0+VSgoayk9PiFrKSwiYXJpYS1sYWJlbCI6IlRvZ2dsZSBzaW11bGF0b3JzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOkIsdGl0bGU6IlNpbXVsYXRvcnMiLGhpZGVTdWJ0aXRsZTohMCxoaWRlQ2hldnJvbjohMCxzdHlsZTp7bWF4V2lkdGg6Im1pbigyMzBweCwgY2FsYygxMDB2dyAtIDE3MHB4KSkifX0pLFooWjYse3N0cmVhbWluZzpBfSldfSksWigiZGl2Iix7cmVmOnIxLGNsYXNzTmFtZToicmVsYXRpdmUgbWF4LWgtZnVsbCIsc3R5bGU6e3dpZHRoOmEud2lkdGgsYXNwZWN0UmF0aW86WTEsdHJhbnNpdGlvbjphLmlzUmVzaXppbmd8fGEuaXNJbmVydGlhP0MzOkgzLHdpbGxDaGFuZ2U6YS5pc1Jlc2l6aW5nfHxhLmlzSW5lcnRpYT8id2lkdGgiOnZvaWQgMH0sLi4udC5kcm9wWm9uZVByb3BzLGNoaWxkcmVuOlsoKCk9PntsZXQgaz1aKHMyLHt1cmw6JC51cmwsd3NVcmw6JC53c1VybCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIixwb2ludGVyRXZlbnRzOmEuaXNSZXNpemluZ3x8YS5pc0luZXJ0aWE/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOnY/MDpLMSxjb3JuZXJTaGFwZTp2P3ZvaWQgMDoic3VwZXJlbGxpcHNlKDEuMykiLC4uLnY/e306e2JveFNoYWRvdzoiaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSJ9fSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6QyxvblN0cmVhbVRvdWNoOlUxLG9uU3RyZWFtTXVsdGlUb3VjaDpHMSxvblN0cmVhbUJ1dHRvbjpkMSxvblN0cmVhbURpZ2l0YWxDcm93bjpwMSxvblN0cmVhbVNjcm9sbDpPMCxjb2RlYzpoPyJhdmNjIjoibWpwZWciLG9uQXZjY0Vycm9yOigpPT5FKCJlcnJvciIpLHN1YnNjcmliZUZyYW1lOmg/dm9pZCAwOmQuc3Vic2NyaWJlRnJhbWUsc3RyZWFtRnJhbWU6aD92b2lkIDA6ZC5mcmFtZSxzdHJlYW1Db25maWc6UixlbmFibGVEaWdpdGFsQ3Jvd246SD09PSJ3YXRjaCIsb25TY3JlZW5Db25maWdDaGFuZ2U6UTB9KSxGPVooUTEse2NoaWxkcmVuOltrLFkmJlooVjkse30pXX0pO2lmKCF2KXJldHVybiBGO3JldHVybiBaKHo1LHtjaHJvbWU6SyxpbnRlcmFjdGl2ZTohMCxvbkJ1dHRvbjpBMSxvbkNyb3duV2hlZWw6KEQsdyk9PntsZXQgYz1VMihELHcsZzF8fDEpO2lmKGMhPW51bGwpcDEoYyl9LHNjcmVlbjpGfSl9KSgpLHQuaXNEcmFnT3ZlciYmWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIGJvcmRlci0yIGJvcmRlci1kYXNoZWQgYm9yZGVyLWFjY2VudCBiZy1bcmdiYSg5OSwxMDIsMjQxLDAuMTgpXSB0ZXh0LWFjY2VudCBwb2ludGVyLWV2ZW50cy1ub25lIHotMjAiLHN0eWxlOntib3JkZXJSYWRpdXM6dj92b2lkIDA6SzF9LGNoaWxkcmVuOltaKEQyLHtzaXplOjMyLHN0cm9rZVdpZHRoOjEuNX0pLFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiRHJvcCBtZWRpYSBvciAuaXBhIn0pXX0pLFoobjkse3NpbXVsYXRvclJlc2l6ZTphLGRldmljZVR5cGU6SCxzdHJlYW1Db25maWc6Uixjb250YWluZXJXaWR0aDpJMXx8YS53aWR0aCxjb250YWluZXJIZWlnaHQ6ZzF8fChTPjA/YS53aWR0aC9TOjApfSksWihKNix7d2lkdGg6STF8fGEud2lkdGgsaGVpZ2h0OmcxfHwoUz4wP2Eud2lkdGgvUzowKSx2aXNpYmxlOmEuaXNSZXNpemluZ3x8YS5pc0luZXJ0aWF9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBtYXgtdy1mdWxsIixjaGlsZHJlbjpbWihtMSx7ZXhlYzpXMSxvblJvdGF0ZTpfMSxvcmllbnRhdGlvbjpSLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpRLGRldmljZVJ1bnRpbWU6SixzdHJlYW1pbmc6QSwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBhY3Rpb25zIixzdHlsZTp7YWxpZ25TZWxmOiJjZW50ZXIiLHdpZHRoOiJhdXRvIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOloobTEuQWN0aW9ucyx7Y2hpbGRyZW46W2MxPy5pc1JlYWN0TmF0aXZlJiZaKG0xLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiJSZWxvYWQgUmVhY3QgTmF0aXZlIGJ1bmRsZSIsdGl0bGU6IlJlbG9hZCAoQ21kK1IpIixvbkNsaWNrOigpPT52b2lkIF8wKCksY2hpbGRyZW46WihqMCx7fSl9KSxaKG0xLkhvbWVCdXR0b24se3RpdGxlOiJIb21lIn0pLFoobTEuU2NyZWVuc2hvdEJ1dHRvbix7dGl0bGU6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KGspPT57ay5wcmV2ZW50RGVmYXVsdCgpLHAuY2FwdHVyZSgpfX0pLFoobTEuUm90YXRlQnV0dG9uLHt0aXRsZToiUm90YXRlIGRldmljZSJ9KV19KX0pLFoobTEse2V4ZWM6VzEsb25Sb3RhdGU6XzEsb3JpZW50YXRpb246Ui5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6USxkZXZpY2VSdW50aW1lOkosc3RyZWFtaW5nOkEsImFyaWEtbGFiZWwiOiJBY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLHN0eWxlOnt3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjIyfSxjaGlsZHJlbjpaKE45LHtvdmVybGF5RW5hYmxlZDpZLHN0cmVhbWluZzpBLG9uVG9nZ2xlT3ZlcmxheTooKT0+cSgoayk9PiFrKX0pfSldfSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyByaWdodC0zIGZsZXggZmxleC1jb2wgZ2FwLTEgcC0xIGJnLXBhbmVsLWJnIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBiYWNrZHJvcC1ibHVyLVsxMnB4XSBbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7dzF8fEc/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbWigiYnV0dG9uIix7b25DbGljazooKT0+e04oITEpLHUxKChrKT0+IWspfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHRvb2xzIHBhbmVsIiwiYXJpYS1wcmVzc2VkIjp3MSx0aXRsZToiVG9vbHMiLGNoaWxkcmVuOlooVzIse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksWigiYnV0dG9uIix7b25DbGljazooKT0+e3UxKCExKSxOKChrKT0+IWspfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIFdlYktpdCBEZXZUb29scyIsImFyaWEtcHJlc3NlZCI6Ryx0aXRsZToiV2ViS2l0IERldlRvb2xzIixjaGlsZHJlbjpaKE8yLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pXX0pLFooYjYse29wZW46dzEsb25DbG9zZTooKT0+dTEoITEpLHVkaWQ6JC5kZXZpY2UsZGV2aWNlUnVudGltZTpKLGN1cnJlbnRBcHA6YzEsYXhPdmVybGF5RW5hYmxlZDpZLG9uVG9nZ2xlQXhPdmVybGF5OigpPT5xKChrKT0+IWspLGNvZGVjUHJlZmVyZW5jZTpqLG9uQ29kZWNQcmVmZXJlbmNlQ2hhbmdlOloxLGFjdGl2ZUNvZGVjOmg/ImgyNjQiOiJtanBlZyIsYXZjY1N1cHBvcnRlZDpXLnN1cHBvcnRlZCx3aWR0aDpOMH0pLFooSDUse3BhbmVsV2lkdGg6TjAsdmlzaWJsZTp3MSxvblBvaW50ZXJEb3duOngxLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLFooUjYse29wZW46RyxvbkNsb3NlOigpPT5OKCExKSx1ZGlkOiQuZGV2aWNlLHRhcmdldHM6Ty50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6eixvblNlbGVjdFRhcmdldDpMLGxvYWRpbmc6Ty5sb2FkaW5nLGVycm9yOk8uZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIE8ucmVmcmVzaCgpLHdpZHRoOkUxfSksWihINSx7cGFuZWxXaWR0aDpFMSx2aXNpYmxlOkcsb25Qb2ludGVyRG93bjphMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSldfSl9KX1fOChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoWihwUSx7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return T8}function u2(){try{let Q=yQ("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),$=JSON.parse(Q),Z=[];for(let[J,Y]of Object.entries($.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(J))continue;for(let X of Y){if(X.isAvailable===!1)continue;Z.push({...X,runtime:J.replace(/^.*SimRuntime\./,"")})}}return Z}catch{return[]}}function l2(){try{let Q=Number(yQ("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),$=Number(yQ("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=yQ("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 c2(){try{let Q=yQ("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(`
102
+ `)){let X=Y.trimStart();if(!X)continue;let G=J.exec(X);if(!G)continue;let H=Number(X.split(/\s+/,1)[0]);if(!Number.isFinite(H))continue;let W=H*1024,z=G[1].toUpperCase();$[z]=($[z]??0)+W,Z+=W}return{perUdid:$,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function m2(){let{totalBytes:Q,availableBytes:$}=l2(),Z=c2(),J=Object.keys(Z.perUdid).length,Y=J>0?Z.totalBytes/J:0,X=Y>=268435456?"measured":"estimated",G=X==="measured"?Y:g2,H=G>0?Math.max(0,Math.floor($/G)):0;return{totalBytes:Q,availableBytes:$,runningSimulators:J,perSimAvgBytes:G,perSimSource:X,estimatedAdditional:H}}function p2(Q,$){let Z=Buffer.from(Q),J=Buffer.from($);if(Z.length!==J.length)return!1;return U2(Z,J)}function d2(Q){if(!Q)return!1;return Q.split(";",1)[0].trim().toLowerCase()==="application/json"}function n2(Q){let $=(Q?.basePath??"/.sim").replace(/\/+$/,""),Z=D2($),J=A2($),Y=Q?.proxyHelpers??!1,X=Q?.inspectWebKitBridge??y2,G=Q?.execToken??R2(32).toString("base64url"),H=async(M)=>{let L=M??{};if(typeof L.device!=="string"||!/^[0-9A-Za-z-]+$/.test(L.device))throw Error("missing or invalid device udid");if(L.option===void 0)return{status:await C6(L.device)};if(!RQ[L.option])throw Error(`unknown option: ${L.option}`);let T=typeof L.value==="string"?q6(L.option,L.value):null;if(T===null)throw Error(`invalid value for ${L.option}: ${L.value}`);return await A6(L.device,L.option,T),{ok:!0}},W=(M,L,T)=>{let j=M.url??"",O=j.indexOf("?"),A=O===-1?j:j.slice(0,O),D=U0(j)??Q?.device??null,q=$==="/"?"/devtools-frontend":`${$}/devtools-frontend`,E=_0(j,Z);if(E){let N=E.device??D;if(x2(M,L,N,E.upstreamPath))return;L.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),L.end("No serve-sim device");return}if(A===q||A.startsWith(`${q}/`)){(async()=>{let N=A===q?"inspector.html":A.slice(q.length+1);if(N.split("/").some((B)=>B==="..")){L.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),L.end("Invalid asset path");return}try{let B=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${_2}/${N}${O===-1?"":j.slice(O)}`),R={"Cache-Control":"public, max-age=604800"},V=B.headers.get("content-type");if(V)R["Content-Type"]=V;L.writeHead(B.status,R),L.end(Buffer.from(await B.arrayBuffer()))}catch(B){L.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),L.end(B instanceof Error?B.message:"Failed to load DevTools frontend")}})();return}if(A===$||A===$+"/"){let N=qQ(),B=wQ(N,D),R=h2();if(!B){let V=JSON.stringify({basePath:$,execToken:G});R=R.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${V}</script>`)}if(B){let V=U4(B,L4(M),$,a4(M),Y),_=`<script>window.__SIM_PREVIEW__=${JSON.stringify(r4(V,$,j8(),G,Q?.codec,Y))}</script>`;R=R.replace("<!--__SIM_PREVIEW_CONFIG__-->",_)}L.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),L.end(R);return}if(A===$+"/grid/api/memory"){L.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),L.end(JSON.stringify(m2()));return}if(A===$+"/grid/api/devicekit-chrome"){N$(new URL(j||"/","http://serve-sim.local"),L);return}if(A===$+"/grid/api/device-placeholder-asset"){F$(new URL(j||"/","http://serve-sim.local"),L);return}if(A===$+"/grid/api"){let N=qQ(),B=new Map(N.map((S)=>[S.device,S])),R=u2(),V=O2(),U=(S)=>{if(/iphone/i.test(S))return 0;if(/ipad/i.test(S))return 1;if(/watch/i.test(S))return 2;if(/(apple\s*tv|^tv\b)/i.test(S))return 3;if(/vision|reality/i.test(S))return 4;return 5},_=(S)=>{if(B.has(S.udid))return 0;if(D&&S.udid===D)return 1;if(S.state==="Booted")return 2;if(S.udid===V)return 3;return 4},P=(S)=>{let l=S.match(/-(\d+)-(\d+)/),w=l?Number(l[1]):0,WQ=l?Number(l[2]):0;return-(w*1000+WQ)};R.sort((S,l)=>_(S)-_(l)||U(S.name)-U(l.name)||S.name.localeCompare(l.name)||P(S.runtime)-P(l.runtime));let C=R.length,{limit:I,offset:k}=T0(j),f=(I==null?R:R.slice(k,k+I)).map((S)=>{let l=B.get(S.udid),w=l?U4(l,L4(M),$,a4(M),Y):null;return{device:S.udid,name:S.name,runtime:S.runtime,state:S.state,chrome:_$(S),placeholderAsset:B$(S),helper:w?{port:w.port,url:w.url,streamUrl:w.streamUrl,wsUrl:w.wsUrl}:null}});L.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),L.end(JSON.stringify({devices:f,total:C,offset:I==null?0:k,limit:I??C}));return}if(A===$+"/grid/api/shutdown"&&M.method==="POST"){let N="";M.on("data",(B)=>{N+=typeof B==="string"?B:B.toString()}),M.on("end",()=>{let B="";try{B=JSON.parse(N).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(B)){L.writeHead(400,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}R4={at:0,booted:null},_4("xcrun",["simctl","shutdown",B],{timeout:30000},(R,V,U)=>{if(R){L.writeHead(500,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!1,error:U?.toString().trim()||R.message}));return}L.writeHead(200,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!0}))})});return}if(A===$+"/grid/api/start"&&M.method==="POST"){let N="";M.on("data",(B)=>{N+=typeof B==="string"?B:B.toString()}),M.on("end",()=>{let B="";try{B=JSON.parse(N).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(B)){L.writeHead(400,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let R=M.socket.localPort??0;O0(B,R,$).then((V)=>{if(L.writableEnded)return;if(V)L.writeHead(500,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!1,error:V}));else L.writeHead(200,{"Content-Type":"application/json"}),L.end(JSON.stringify({ok:!0}))})});return}if(A===$+"/devtools"){(async()=>{let N=qQ();if(!wQ(N,D)){L.writeHead(404,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:"No serve-sim device"}));return}try{let R=await X(),V=await R.listTargets(),U=Y?b2(M):"ws",_=Y?`${L4(M)??`127.0.0.1:${R.port}`}${J}`:`127.0.0.1:${R.port}/devtools`,P=V.map((C)=>({...C,webSocketDebuggerUrl:`${U}://${_}/page/${encodeURIComponent(C.id)}`,devtoolsFrontendUrl:v2(q,U,_,C.id)}));L.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),L.end(JSON.stringify({port:R.port,targets:P}))}catch(R){L.writeHead(500,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:R instanceof Error?R.message:"Failed to start inspect-webkit"}))}})();return}if(A===$+"/devtools/release"&&M.method==="POST"){let N="";M.on("data",(B)=>N+=B),M.on("end",async()=>{try{let B=N?JSON.parse(N):{};(await X()).releaseHighlight?.(B.targetId),L.writeHead(200,{"Content-Type":"application/json"}),L.end("{}")}catch(B){L.writeHead(500,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:B instanceof Error?B.message:"Failed to release"}))}});return}if(A===$+"/devtools/highlight"&&M.method==="POST"){let N="";M.on("data",(B)=>N+=B),M.on("end",async()=>{try{let{targetId:B,on:R}=JSON.parse(N||"{}");if(!B){L.writeHead(400,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:"Missing targetId"}));return}let V=await X();if(!V.highlightTarget){L.writeHead(501,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await V.highlightTarget(B,!!R),L.writeHead(200,{"Content-Type":"application/json"}),L.end("{}")}catch(B){L.writeHead(500,{"Content-Type":"application/json"}),L.end(JSON.stringify({error:B instanceof Error?B.message:"Failed to highlight target"}))}});return}if(A===$+"/api"){let N=qQ(),B=wQ(N,D),R=`${D??"(any)"}|${N.length}|${B?`${B.device}@${B.port}`:"none"}`;if(R!==V0)V0=R,y4("GET /api selectedDevice=%s states=%d chose=%s",D??"(any)",N.length,B?`${B.device}@${B.port}`:"none");L.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let V=B?U4(B,L4(M),$,a4(M),Y):null;L.end(JSON.stringify(V?r4(V,$,j8(),G,Q?.codec,Y):null));return}if(A===$+"/api/events"){let N=()=>{let y=qQ(),f=wQ(y,D),S=f?U4(f,L4(M),$,a4(M),Y):null;return JSON.stringify(S?r4(S,$,j8(),G,Q?.codec,Y):null)};L.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),L.write(`:
103
103
 
104
104
  `);let B=N();L.write("data: "+B+`
105
105
 
106
- `);let U=!1,V=()=>{if(U||L.writableEnded)return;let w=N();if(w===B)return;B=w,L.write("data: "+w+`
106
+ `);let R=!1,V=()=>{if(R||L.writableEnded)return;let y=N();if(y===B)return;B=y,L.write("data: "+y+`
107
107
 
108
- `)},R=null,_=()=>{if(R)return;R=setTimeout(()=>{R=null,V()},150)},P=null,C=null,I=()=>{if(U||L.writableEnded||P||C)return;C=setTimeout(()=>{if(C=null,U||L.writableEnded||P)return;try{P=z2(O8,_),P.on("error",()=>{P?.close(),P=null,I()}),V()}catch{I()}},250)};I();let k=setInterval(()=>{if(U||L.writableEnded)return;L.write(`:
108
+ `)},U=null,_=()=>{if(U)return;U=setTimeout(()=>{U=null,V()},150)},P=null,C=null,I=()=>{if(R||L.writableEnded||P||C)return;C=setTimeout(()=>{if(C=null,R||L.writableEnded||P)return;try{P=K2(q8,_),P.on("error",()=>{P?.close(),P=null,I()}),V()}catch{I()}},250)};I();let k=setInterval(()=>{if(R||L.writableEnded)return;L.write(`:
109
109
 
110
- `),I()},15000);M.on("close",()=>{if(U=!0,R)clearTimeout(R);if(C)clearTimeout(C);clearInterval(k),P?.close()});return}if(D===$+"/ax"){let N=OQ(),B=SQ(N,A);if(!B){L.writeHead(404),L.end("No serve-sim device");return}L.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),L.write(`:
110
+ `),I()},15000);M.on("close",()=>{if(R=!0,U)clearTimeout(U);if(C)clearTimeout(C);clearInterval(k),P?.close()});return}if(A===$+"/ax"){let N=qQ(),B=wQ(N,D);if(!B){L.writeHead(404),L.end("No serve-sim device");return}L.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),L.write(`:
111
111
 
112
- `),H0.prune(N.map((R)=>R.device));let V=H0.get(B.device).addClient(L);M.on("close",V);return}if((D===$+"/exec"||D===$+"/exec/")&&M.method==="POST"){if(!p2(M.headers["content-type"])){L.writeHead(415,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let N=M.headers.origin;if(N)try{if(new URL(N).host!==M.headers.host){L.writeHead(403,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{L.writeHead(403,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let B=M.headers.authorization??"",U=/^Bearer\s+(.+)$/i.exec(B);if(!U||!m2(U[1].trim(),X)){L.writeHead(401,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let V="",R=!1;M.on("data",(_)=>{if(V+=typeof _==="string"?_:_.toString(),V.length>4194304)R=!0,L.writeHead(413,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),M.destroy()}),M.on("end",()=>{if(R)return;let _="";try{_=JSON.parse(V).command??""}catch{}if(!_){L.writeHead(400,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}W2(_,{maxBuffer:16777216},(P,C,I)=>{L.writeHead(200,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:C.toString(),stderr:I.toString(),exitCode:P?P.code??1:0}))})});return}if(D===$+"/appstate"){let N=OQ(),B=SQ(N,A);if(!B){L.writeHead(404),L.end("No serve-sim device");return}let U=B.device;L.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),L.write(`:
112
+ `),H0.prune(N.map((U)=>U.device));let V=H0.get(B.device).addClient(L);M.on("close",V);return}if((A===$+"/exec"||A===$+"/exec/")&&M.method==="POST"){if(!d2(M.headers["content-type"])){L.writeHead(415,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let N=M.headers.origin;if(N)try{if(new URL(N).host!==M.headers.host){L.writeHead(403,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{L.writeHead(403,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let B=M.headers.authorization??"",R=/^Bearer\s+(.+)$/i.exec(B);if(!R||!p2(R[1].trim(),G)){L.writeHead(401,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let V="",U=!1;M.on("data",(_)=>{if(V+=typeof _==="string"?_:_.toString(),V.length>4194304)U=!0,L.writeHead(413,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),M.destroy()}),M.on("end",()=>{if(U)return;let _="";try{_=JSON.parse(V).command??""}catch{}if(!_){L.writeHead(400,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}V2(_,{maxBuffer:16777216},(P,C,I)=>{L.writeHead(200,{"Content-Type":"application/json"}),L.end(JSON.stringify({stdout:C.toString(),stderr:I.toString(),exitCode:P?P.code??1:0}))})});return}if(A===$+"/appstate"){let N=qQ(),B=wQ(N,D);if(!B){L.writeHead(404),L.end("No serve-sim device");return}let R=B.device;L.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),L.write(`:
113
113
 
114
- `);let V="";(async()=>{try{let I=JSON.parse(await v4(U));if(!I.bundleId||!M0(I.bundleId))return;if(L.writableEnded)return;V=I.bundleId;let k=await L0(U,I.bundleId);if(L.writableEnded)return;L.write("data: "+JSON.stringify({bundleId:I.bundleId,pid:I.pid,isReactNative:k})+`
114
+ `);let V="";(async()=>{try{let I=JSON.parse(await v4(R));if(!I.bundleId||!M0(I.bundleId))return;if(L.writableEnded)return;V=I.bundleId;let k=await L0(R,I.bundleId);if(L.writableEnded)return;L.write("data: "+JSON.stringify({bundleId:I.bundleId,pid:I.pid,isReactNative:k})+`
115
115
 
116
- `)}catch{}})();let R=K2("xcrun",["simctl","spawn",U,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),_=!1,P=async(I,k)=>{if(!M0(I))return;if(I===V)return;V=I;let w=await L0(U,I);if(!_)L.write("data: "+JSON.stringify({bundleId:I,pid:k,isReactNative:w})+`
116
+ `)}catch{}})();let U=W2("xcrun",["simctl","spawn",R,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),_=!1,P=async(I,k)=>{if(!M0(I))return;if(I===V)return;V=I;let y=await L0(R,I);if(!_)L.write("data: "+JSON.stringify({bundleId:I,pid:k,isReactNative:y})+`
117
117
 
118
- `)},C="";R.stdout.on("data",(I)=>{C+=I.toString();let k;while((k=C.indexOf(`
119
- `))!==-1){let w=C.slice(0,k).trim();if(C=C.slice(k+1),!w)continue;let y;try{y=JSON.parse(w).eventMessage??""}catch{continue}let h=E0(y);if(!h)continue;P(h.bundleId,h.pid)}if(C.length>_2)C=""}),R.on("error",()=>{_=!0;try{L.end()}catch{}}),R.on("close",()=>L.end()),M.on("close",()=>{_=!0,R.stdout?.destroy(),R.kill()});return}if(T)T()};W.handleUpgrade=(M,L,T)=>{let j=M.url??"",q=R0(j)??Q?.device??null,D=_0(j,Z),A=A2(j,J);if(A){(async()=>{try{let E=await G();P2(M,L,T,`ws://127.0.0.1:${E.port}${A.upstreamPath}`)}catch(E){let N=E instanceof Error?E.message:"Failed to start inspect-webkit";L.end(`HTTP/1.1 502 Bad Gateway\r
118
+ `)},C="";U.stdout.on("data",(I)=>{C+=I.toString();let k;while((k=C.indexOf(`
119
+ `))!==-1){let y=C.slice(0,k).trim();if(C=C.slice(k+1),!y)continue;let f;try{f=JSON.parse(y).eventMessage??""}catch{continue}let S=E0(f);if(!S)continue;P(S.bundleId,S.pid)}if(C.length>B2)C=""}),U.on("error",()=>{_=!0;try{L.end()}catch{}}),U.on("close",()=>L.end()),M.on("close",()=>{_=!0,U.stdout?.destroy(),U.kill()});return}if(T)T()};W.handleUpgrade=(M,L,T)=>{let j=M.url??"",O=U0(j)??Q?.device??null,A=_0(j,Z),D=C2(j,J);if(D){(async()=>{try{let E=await X();I2(M,L,T,`ws://127.0.0.1:${E.port}${D.upstreamPath}`)}catch(E){let N=E instanceof Error?E.message:"Failed to start inspect-webkit";L.end(`HTTP/1.1 502 Bad Gateway\r
120
120
  Content-Type: text/plain; charset=utf-8\r
121
121
  \r
122
- ${N}`)}})();return}if(!D){L.destroy();return}let O=D.device??q;if(D.upstreamPath==="/ws"){if(k2(M,L,T,O))return;L.end(`HTTP/1.1 404 Not Found\r
122
+ ${N}`)}})();return}if(!A){L.destroy();return}let q=A.device??O;if(A.upstreamPath==="/ws"){if(S2(M,L,T,q))return;L.end(`HTTP/1.1 404 Not Found\r
123
123
  \r
124
124
  `);return}L.end(`HTTP/1.1 400 Bad Request\r
125
125
  \r
126
- `)};let z=I$({path:`${$}/exec-ws`,execToken:X,ssePrefixes:[`${$}/api/events`,`${$}/appstate`,`${$}/ax`],onUiRequest:H}),K=W.handleUpgrade;return W.handleUpgrade=(M,L,T)=>{if(z(M,L,T))return;K(M,L,T)},W}var O8,V0,R2="854a02be78c7ffea104cb523636efa991bef5c5b",o4=9222,H0,_2=1048576,wQ=null,B2,N2,F2,U4,F8,C2="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",T8=null,u2=1610612736;var A0=GQ(()=>{s9();Z$();h4();U6();S6();C$();x$();P6();O8=q8(V2(),"serve-sim"),H0=r9(),B2=new Set(["host.exp.Exponent","dev.expo.Exponent"]),N2=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],F2=/(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;U4={at:0,booted:null};F8={at:0,udid:null}});var M9=o8(H9(),1),{program:bY,createCommand:vY,createArgument:hY,createOption:uY,CommanderError:gY,InvalidArgumentError:L9,InvalidOptionArgumentError:lY,Command:U9,Argument:cY,Option:mY,Help:pY}=M9.default;U6();import{execSync as t,spawn as P0}from"child_process";import{existsSync as i,mkdirSync as P8,openSync as I8,closeSync as x8,readSync as n2,readFileSync as WQ,unlinkSync as rQ,writeFileSync as k8}from"fs";import{createHash as I0}from"crypto";import{networkInterfaces as i2}from"os";import{join as JQ,resolve as fQ}from"path";function e5(){let Q={};for(let Y=0;Y<26;Y++){let G=4+Y;Q[String.fromCharCode(97+Y)]={usage:G,shift:!1},Q[String.fromCharCode(65+Y)]={usage:G,shift:!0}}let $="1234567890",Z="!@#$%^&*()";for(let Y=0;Y<10;Y++){let G=30+Y;Q[$[Y]]={usage:G,shift:!1},Q[Z[Y]]={usage:G,shift:!0}}let J=[["-","_",45],["=","+",46],["[","{",47],["]","}",48],["\\","|",49],[";",":",51],["'",'"',52],["`","~",53],[",","<",54],[".",">",55],["/","?",56]];for(let[Y,G,X]of J)Q[Y]={usage:X,shift:!1},Q[G]={usage:X,shift:!0};return Q[" "]={usage:44,shift:!1},Q[`
127
- `]={usage:40,shift:!1},Q["\t"]={usage:43,shift:!1},Q}var Q7=e5();class D4 extends Error{char;constructor(Q){super(`Unsupported character: ${JSON.stringify(Q)}`);this.char=Q}}async function _9(Q,$,Z=4){return new Promise((J,Y)=>{let G=new WebSocket(Q);G.binaryType="arraybuffer",G.onopen=async()=>{try{for(let X of $){let H=new TextEncoder().encode(JSON.stringify(X)),W=new Uint8Array(1+H.length);if(W[0]=6,W.set(H,1),G.send(W),Z>0)await new Promise((z)=>setTimeout(z,Z))}setTimeout(()=>{G.close(),J()},50)}catch(X){G.close(),Y(X)}},G.onerror=()=>{Y(Error(`WebSocket connection failed: ${Q}`))}})}function B9(Q){let $=[];for(let Z of Q){if(Z==="\r")continue;let J=Q7[Z];if(!J)throw new D4(Z);if(J.shift)$.push({type:"down",usage:225});if($.push({type:"down",usage:J.usage}),$.push({type:"up",usage:J.usage}),J.shift)$.push({type:"up",usage:225})}return $}C4();C4();import{execSync as W7}from"child_process";function V7(Q){try{let $=W7(`lsof -ti tcp:${Q} -sTCP:LISTEN`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!$)return[];let Z=process.pid;return $.split(`
128
- `).map((J)=>parseInt(J,10)).filter((J)=>Number.isFinite(J)&&J!==Z)}catch{return[]}}function T9(Q){let $=V7(Q);if($.length===0)return;console.log(`\x1B[90mPort ${Q} busy, killing listener pid(s): ${$.join(", ")}\x1B[0m`);for(let Z of $)try{process.kill(Z,"SIGKILL")}catch{}AQ(100)}P4();P4();import{execFileSync as pQ}from"child_process";import{chmodSync as H7,existsSync as CQ,mkdtempSync as M7,rmSync as q9,writeFileSync as D9}from"fs";import{homedir as L7,tmpdir as U7}from"os";import{join as NQ}from"path";var F6={camera:"kTCCServiceCamera",microphone:"kTCCServiceMicrophone",photos:"kTCCServicePhotos","photos-add":"kTCCServicePhotosAdd",contacts:"kTCCServiceAddressBook",calendar:"kTCCServiceCalendar",reminders:"kTCCServiceReminders",motion:"kTCCServiceMotion","media-library":"kTCCServiceMediaLibrary",siri:"kTCCServiceSiri",speech:"kTCCServiceSpeechRecognition",faceid:"kTCCServiceFaceID","user-tracking":"kTCCServiceUserTracking",homekit:"kTCCServiceWillow"},R7={push:{permission:"notifications"},notification:{permission:"notifications"},"photo-library":{permission:"photos"},photo:{permission:"photos"},"location-always":{permission:"location",value:"always"},"location-in-use":{permission:"location",value:"inuse"},"location-inuse":{permission:"location",value:"inuse"},mic:{permission:"microphone"}};function A9(Q){if(Q==="notifications")return{kind:"notifications",values:["critical"]};if(Q==="location")return{kind:"location",values:["always","inuse","never"]};let $=F6[Q];if($)return{kind:"tcc",tccService:$,tccAuthVersion:Q==="photos"?2:1,values:Q==="photos"?["limited"]:void 0};return null}function _6(){return["notifications","location",...Object.keys(F6)]}var R6=/^[A-Za-z0-9][A-Za-z0-9.-]*$/;function _7(Q){let $,Z,J=[];for(let K=0;K<Q.length;K++){let M=Q[K];if(M===void 0)continue;if(M==="-d"||M==="--device"){if($=Q[++K],!$)return{error:"Missing value for -d/--device"}}else if(M==="--value"){if(Z=Q[++K],Z===void 0)return{error:"Missing value for --value"}}else if(M.startsWith("--value="))Z=M.slice(8);else if(M.startsWith("-"))return{error:`Unknown flag: ${M}`};else J.push(M)}let Y=J[0];if(!Y)return{error:"Missing subcommand: grant | revoke | reset | list"};let G={grant:"grant",revoke:"revoke",deny:"revoke",reset:"reset",list:"list"}[Y];if(!G)return{error:`Unknown subcommand: ${Y}`};if(G==="list"){let K=J[1];if(K&&!R6.test(K))return{error:`Invalid bundle id: ${K}`};return{verb:G,bundleId:K,device:$}}let X=J[1];if(!X)return{error:`Missing permission name for "${G}"`};if(G==="reset"&&X==="all"){let K=J[2];if(!K)return{error:"Missing bundle id for `reset all`"};if(!R6.test(K))return{error:`Invalid bundle id: ${K}`};return{verb:G,permission:"all",bundleId:K,device:$}}let H=R7[X];if(H){if(X=H.permission,H.value&&!Z)Z=H.value}let W=A9(X);if(!W)return{error:`Unknown permission: ${J[1]}
129
- Supported: ${_6().join(", ")}`};let z=J[2];if(!z)return{error:`Missing bundle id for "${G} ${X}"`};if(!R6.test(z))return{error:`Invalid bundle id: ${z}`};if(!Z&&J[3])Z=J[3];if(Z!==void 0){if(!W.values||!W.values.includes(Z)){let K=W.values?W.values.join(", "):"(none)";return{error:`Invalid --value "${Z}" for ${X}. Allowed: ${K}`}}}return{verb:G,permission:X,value:Z,bundleId:z,device:$}}function E6(Q){return NQ(L7(),"Library/Developer/CoreSimulator/Devices",Q,"data/Library")}function C9(Q){return NQ(E6(Q),"TCC/TCC.db")}function B7(Q){return NQ(E6(Q),"BulletinBoard")}function N7(Q){return NQ(E6(Q),"Caches/locationd/clients.plist")}function F7(Q){let $=Date.now()+5000;for(;;)try{return Q()}catch(Z){let J=String(Z?.stderr??Z?.message??Z);if(Date.now()<$&&/database is locked|database is busy/i.test(J)){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,200);continue}throw Z}}function B6(Q,$){return F7(()=>pQ("sqlite3",[Q,$],{encoding:"utf-8"}))}function E7(Q,$,Z,J,Y){let G=C9(Q);if(!CQ(G))throw Error(`TCC.db not found for ${Q}. Is the simulator booted?
130
- ${G}`);if(B6(G,`DELETE FROM access WHERE service='${$}' AND client='${J}' AND client_type=0;`),Y!=="delete")B6(G,`INSERT INTO access (service, client, client_type, auth_value, auth_reason, auth_version, flags) VALUES ('${$}', '${J}', 0, ${Y}, 2, ${Z}, 0);`)}var T7=Object.fromEntries(Object.entries(F6).map(([Q,$])=>[$,Q]));function j7(Q,$){let Z=C9(Q);if(!CQ(Z))return{};let J=$?` WHERE client='${$}'`:"",Y=B6(Z,`SELECT service, auth_value FROM access${J};`),G={};for(let X of Y.split(`
131
- `)){let[H,W]=X.split("|");if(H)G[T7[H]??H]=Number(W)}return G}function G4(Q){return pQ("plutil",Q,{encoding:"utf-8"})}function N6(Q,$,Z={}){let J=[];for(let Y of $)J.push("-c",Y);J.push(Q);try{return pQ("/usr/libexec/PlistBuddy",J,{encoding:"utf-8",stdio:["ignore","pipe","pipe"]})}catch(Y){if(Z.ignoreErrors)return String(Y?.stdout??"");throw Error(String(Y?.stderr??Y?.stdout??Y?.message??Y).trim())}}function P9(){return M7(NQ(U7(),"serve-sim-perm-"))}function O7(Q,$,Z,J){let Y="grant",G="location";if(Z==="reset")Y="reset";else if(Z==="revoke"||J==="never")Y="revoke";else if(J==="always")G="location-always";try{pQ("xcrun",["simctl","privacy",Q,Y,G,$],{stdio:["ignore","ignore","pipe"]})}catch(X){throw Error(`simctl privacy ${Y} ${G} failed: `+String(X?.stderr??X?.message??X).trim())}}function q7(Q,$){if(!$)return null;let Z=N7(Q);if(!CQ(Z))return null;let J;try{J=G4(["-convert","xml1","-o","-",Z])}catch{return null}let Y=J.match(new RegExp(`<key>i${$.replace(/[.-]/g,"\\$&")}:</key>\\s*<dict>[\\s\\S]*?<key>Authorization</key>\\s*<integer>(\\d+)</integer>`));return Y?{Authorization:Number(Y[1])}:null}var D7="YnBsaXN0MDDUAQIDBAUGTU5YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCDAxQUgfSVUkbnVsbN8QFQkKCwwNDg8QERITFBUWFxgZGhscHR4fHiEiIx4jJicfHygjIh8jIyMjI18QFHN1cHByZXNzRnJvbVNldHRpbmdzXxASc3VwcHJlc3NlZFNldHRpbmdzWmhpZGVXZWVBcHBZc2VjdGlvbklEW2Rpc3BsYXlOYW1lVGljb25fEBlkaXNwbGF5c0NyaXRpY2FsQnVsbGV0aW5zW3N1YnNlY3Rpb25zXxATc2VjdGlvbkluZm9TZXR0aW5nc1YkY2xhc3NfEA9zZWN0aW9uQ2F0ZWdvcnlfEBJzdWJzZWN0aW9uUHJpb3JpdHlXdmVyc2lvbl8QGm1hbmFnZWRTZWN0aW9uSW5mb1NldHRpbmdzV2FwcE5hbWVbc2VjdGlvblR5cGVfEBBmYWN0b3J5U2VjdGlvbklEXxAPZGF0YVByb3ZpZGVySURzXHN1YnNlY3Rpb25JRFdmaWx0ZXJzXxAYcGF0aFRvV2VlQXBwUGx1Z2luQnVuZGxlCBAACIACgAWAAAiAAIADgAeABoAAgAWAAIAAgACAAIAAXxAmY29tLkxlb05hdGFuLkxOUG9wdXBDb250cm9sbGVyRXhhbXBsZS3ZMjM0NTY3Ejg5Ojs7Ox8fPjtAXHB1c2hTZXR0aW5nc18QGXNob3dzSW5Ob3RpZmljYXRpb25DZW50ZXJfEBNhbGxvd3NOb3RpZmljYXRpb25zXxAWc2hvd3NPbkV4dGVybmFsRGV2aWNlc18QFWNvbnRlbnRQcmV2aWV3U2V0dGluZ15jYXJQbGF5U2V0dGluZ18QEXNob3dzSW5Mb2NrU2NyZWVuWWFsZXJ0VHlwZRA/CQkJgAQJEAHSQkNERVokY2xhc3NuYW1lWCRjbGFzc2VzXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzokZHXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzWE5TT2JqZWN0V0xOUG9wdXDSQkNKS11CQlNlY3Rpb25JbmZvokxHXUJCU2VjdGlvbkluZm9fEA9OU0tleWVkQXJjaGl2ZXLRT1BUcm9vdIABAAgAEQAaACMALQAyADcAQABGAHMAigCfAKoAtADAAMUA4QDtAQMBCgEcATEBOQFWAV4BagF9AY8BnAGkAb8BwAHCAcMBxQHHAckBygHMAc4B0AHSAdQB1gHYAdoB3AHeAeACCQIcAikCRQJbAnQCjAKbAq8CuQK7ArwCvQK+AsACwQLDAsgC0wLcAvQC9wMPAxgDIAMlAzMDNgNEA1YDWQNeAAAAAAAAAgEAAAAAAAAAUQAAAAAAAAAAAAAAAAAAA2A=";function I9(Q){return NQ(B7(Q),"VersionedSectionInfo.plist")}function A7(Q,$,Z,J){let Y=NQ(Q,"section-info.plist");return D9(Y,Buffer.from(D7,"base64")),N6(Y,[`Set :$objects:2 ${$}`,`Set :$objects:3:allowsNotifications ${Z?"true":"false"}`,`Add :$objects:3:criticalAlertSetting integer ${J?2:0}`,`Set :$objects:5 ${$}`,"Save"]),G4(["-convert","binary1",Y]),Y}function C7(Q,$,Z){let J=I9(Q);if(!CQ(J)){if(Z==="reset")return;let G=Date.now()+5000;while(!CQ(J)&&Date.now()<G)Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250);if(!CQ(J))throw Error(`BulletinBoard plist not found for ${Q}. The simulator may still `+`be booting — wait for it to finish and retry.
132
- ${J}`)}try{pQ("chflags",["nouchg",J])}catch{}let Y=P9();try{if(N6(J,[`Delete :sectionInfo:${$}`,"Save"],{ignoreErrors:!0}),Z!=="reset"){let G=A7(Y,$,Z!=="revoke",Z==="critical");N6(J,[`Import :sectionInfo:${$} ${G}`,"Save"])}G4(["-convert","binary1",J])}finally{q9(Y,{recursive:!0,force:!0});try{H7(J,420),pQ("chflags",["uchg",J])}catch{}}}function P7(Q,$){if(!$)return null;let Z=I9(Q);if(!CQ(Z))return null;let J;try{J=G4(["-extract","sectionInfo","xml1","-o","-",Z])}catch{return null}let Y=J.match(new RegExp(`<key>${$.replace(/[.-]/g,"\\$&")}</key>\\s*<data>([\\s\\S]*?)</data>`));if(!Y?.[1])return null;let G=P9();try{let X=NQ(G,"section-info.plist");D9(X,Buffer.from(Y[1].replace(/\s/g,""),"base64"));let H=G4(["-convert","xml1","-o","-",X]);return{allowsNotifications:/<key>allowsNotifications<\/key>\s*<true\/>/.test(H),critical:/<key>criticalAlertSetting<\/key>\s*<integer>2<\/integer>/.test(H)}}catch{return null}finally{q9(G,{recursive:!0,force:!0})}}function O9(Q,$,Z,J,Y){let G=A9(Z);if(G.kind==="tcc"){let X=$==="reset"?"delete":$==="revoke"?0:J==="limited"?3:2;E7(Q,G.tccService,G.tccAuthVersion,Y,X)}else if(G.kind==="notifications")C7(Q,Y,$==="reset"?"reset":$==="revoke"?"revoke":J==="critical"?"critical":"grant");else O7(Q,Y,$,J)}async function x9(Q){let $=Q.includes("-q")||Q.includes("--quiet"),Z=Q.filter((X)=>X!=="-q"&&X!=="--quiet"),J=_7(Z);if("error"in J)console.error(J.error),console.error(`
126
+ `)};let z=I$({path:`${$}/exec-ws`,execToken:G,ssePrefixes:[`${$}/api/events`,`${$}/appstate`,`${$}/ax`],onUiRequest:H}),K=W.handleUpgrade;return W.handleUpgrade=(M,L,T)=>{if(z(M,L,T))return;K(M,L,T)},W}var q8,V0,_2="854a02be78c7ffea104cb523636efa991bef5c5b",o4=9222,H0,B2=1048576,SQ=null,N2,F2,E2,R4,F8,P2="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",T8=null,g2=1610612736;var C0=XQ(()=>{s9();Z$();h4();R6();w6();C$();x$();P6();q8=O8(H2(),"serve-sim"),H0=r9(),N2=new Set(["host.exp.Exponent","dev.expo.Exponent"]),F2=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],E2=/(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;R4={at:0,booted:null};F8={at:0,udid:null}});var M9=o8(H9(),1),{program:vY,createCommand:hY,createArgument:uY,createOption:gY,CommanderError:lY,InvalidArgumentError:L9,InvalidOptionArgumentError:cY,Command:R9,Argument:mY,Option:pY,Help:dY}=M9.default;R6();import{execSync as t,spawn as I0}from"child_process";import{existsSync as i,mkdirSync as P8,openSync as I8,closeSync as x8,readSync as i2,readFileSync as VQ,unlinkSync as rQ,writeFileSync as k8}from"fs";import{createHash as x0}from"crypto";import{networkInterfaces as o2}from"os";import{join as JQ,resolve as fQ}from"path";function Q7(){let Q={};for(let Y=0;Y<26;Y++){let X=4+Y;Q[String.fromCharCode(97+Y)]={usage:X,shift:!1},Q[String.fromCharCode(65+Y)]={usage:X,shift:!0}}let $="1234567890",Z="!@#$%^&*()";for(let Y=0;Y<10;Y++){let X=30+Y;Q[$[Y]]={usage:X,shift:!1},Q[Z[Y]]={usage:X,shift:!0}}let J=[["-","_",45],["=","+",46],["[","{",47],["]","}",48],["\\","|",49],[";",":",51],["'",'"',52],["`","~",53],[",","<",54],[".",">",55],["/","?",56]];for(let[Y,X,G]of J)Q[Y]={usage:G,shift:!1},Q[X]={usage:G,shift:!0};return Q[" "]={usage:44,shift:!1},Q[`
127
+ `]={usage:40,shift:!1},Q["\t"]={usage:43,shift:!1},Q}var $7=Q7();class D4 extends Error{char;constructor(Q){super(`Unsupported character: ${JSON.stringify(Q)}`);this.char=Q}}async function _9(Q,$,Z=4){return new Promise((J,Y)=>{let X=new WebSocket(Q);X.binaryType="arraybuffer",X.onopen=async()=>{try{for(let G of $){let H=new TextEncoder().encode(JSON.stringify(G)),W=new Uint8Array(1+H.length);if(W[0]=6,W.set(H,1),X.send(W),Z>0)await new Promise((z)=>setTimeout(z,Z))}setTimeout(()=>{X.close(),J()},50)}catch(G){X.close(),Y(G)}},X.onerror=()=>{Y(Error(`WebSocket connection failed: ${Q}`))}})}function B9(Q){let $=[];for(let Z of Q){if(Z==="\r")continue;let J=$7[Z];if(!J)throw new D4(Z);if(J.shift)$.push({type:"down",usage:225});if($.push({type:"down",usage:J.usage}),$.push({type:"up",usage:J.usage}),J.shift)$.push({type:"up",usage:225})}return $}C4();C4();import{execSync as V7}from"child_process";function H7(Q){try{let $=V7(`lsof -ti tcp:${Q} -sTCP:LISTEN`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!$)return[];let Z=process.pid;return $.split(`
128
+ `).map((J)=>parseInt(J,10)).filter((J)=>Number.isFinite(J)&&J!==Z)}catch{return[]}}function T9(Q){let $=H7(Q);if($.length===0)return;console.log(`\x1B[90mPort ${Q} busy, killing listener pid(s): ${$.join(", ")}\x1B[0m`);for(let Z of $)try{process.kill(Z,"SIGKILL")}catch{}AQ(100)}P4();P4();import{execFileSync as pQ}from"child_process";import{chmodSync as M7,existsSync as CQ,mkdtempSync as L7,rmSync as O9,writeFileSync as D9}from"fs";import{homedir as R7,tmpdir as U7}from"os";import{join as NQ}from"path";var F6={camera:"kTCCServiceCamera",microphone:"kTCCServiceMicrophone",photos:"kTCCServicePhotos","photos-add":"kTCCServicePhotosAdd",contacts:"kTCCServiceAddressBook",calendar:"kTCCServiceCalendar",reminders:"kTCCServiceReminders",motion:"kTCCServiceMotion","media-library":"kTCCServiceMediaLibrary",siri:"kTCCServiceSiri",speech:"kTCCServiceSpeechRecognition",faceid:"kTCCServiceFaceID","user-tracking":"kTCCServiceUserTracking",homekit:"kTCCServiceWillow"},_7={push:{permission:"notifications"},notification:{permission:"notifications"},"photo-library":{permission:"photos"},photo:{permission:"photos"},"location-always":{permission:"location",value:"always"},"location-in-use":{permission:"location",value:"inuse"},"location-inuse":{permission:"location",value:"inuse"},mic:{permission:"microphone"}};function A9(Q){if(Q==="notifications")return{kind:"notifications",values:["critical"]};if(Q==="location")return{kind:"location",values:["always","inuse","never"]};let $=F6[Q];if($)return{kind:"tcc",tccService:$,tccAuthVersion:Q==="photos"?2:1,values:Q==="photos"?["limited"]:void 0};return null}function _6(){return["notifications","location",...Object.keys(F6)]}var U6=/^[A-Za-z0-9][A-Za-z0-9.-]*$/;function B7(Q){let $,Z,J=[];for(let K=0;K<Q.length;K++){let M=Q[K];if(M===void 0)continue;if(M==="-d"||M==="--device"){if($=Q[++K],!$)return{error:"Missing value for -d/--device"}}else if(M==="--value"){if(Z=Q[++K],Z===void 0)return{error:"Missing value for --value"}}else if(M.startsWith("--value="))Z=M.slice(8);else if(M.startsWith("-"))return{error:`Unknown flag: ${M}`};else J.push(M)}let Y=J[0];if(!Y)return{error:"Missing subcommand: grant | revoke | reset | list"};let X={grant:"grant",revoke:"revoke",deny:"revoke",reset:"reset",list:"list"}[Y];if(!X)return{error:`Unknown subcommand: ${Y}`};if(X==="list"){let K=J[1];if(K&&!U6.test(K))return{error:`Invalid bundle id: ${K}`};return{verb:X,bundleId:K,device:$}}let G=J[1];if(!G)return{error:`Missing permission name for "${X}"`};if(X==="reset"&&G==="all"){let K=J[2];if(!K)return{error:"Missing bundle id for `reset all`"};if(!U6.test(K))return{error:`Invalid bundle id: ${K}`};return{verb:X,permission:"all",bundleId:K,device:$}}let H=_7[G];if(H){if(G=H.permission,H.value&&!Z)Z=H.value}let W=A9(G);if(!W)return{error:`Unknown permission: ${J[1]}
129
+ Supported: ${_6().join(", ")}`};let z=J[2];if(!z)return{error:`Missing bundle id for "${X} ${G}"`};if(!U6.test(z))return{error:`Invalid bundle id: ${z}`};if(!Z&&J[3])Z=J[3];if(Z!==void 0){if(!W.values||!W.values.includes(Z)){let K=W.values?W.values.join(", "):"(none)";return{error:`Invalid --value "${Z}" for ${G}. Allowed: ${K}`}}}return{verb:X,permission:G,value:Z,bundleId:z,device:$}}function E6(Q){return NQ(R7(),"Library/Developer/CoreSimulator/Devices",Q,"data/Library")}function C9(Q){return NQ(E6(Q),"TCC/TCC.db")}function N7(Q){return NQ(E6(Q),"BulletinBoard")}function F7(Q){return NQ(E6(Q),"Caches/locationd/clients.plist")}function E7(Q){let $=Date.now()+5000;for(;;)try{return Q()}catch(Z){let J=String(Z?.stderr??Z?.message??Z);if(Date.now()<$&&/database is locked|database is busy/i.test(J)){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,200);continue}throw Z}}function B6(Q,$){return E7(()=>pQ("sqlite3",[Q,$],{encoding:"utf-8"}))}function T7(Q,$,Z,J,Y){let X=C9(Q);if(!CQ(X))throw Error(`TCC.db not found for ${Q}. Is the simulator booted?
130
+ ${X}`);if(B6(X,`DELETE FROM access WHERE service='${$}' AND client='${J}' AND client_type=0;`),Y!=="delete")B6(X,`INSERT INTO access (service, client, client_type, auth_value, auth_reason, auth_version, flags) VALUES ('${$}', '${J}', 0, ${Y}, 2, ${Z}, 0);`)}var j7=Object.fromEntries(Object.entries(F6).map(([Q,$])=>[$,Q]));function q7(Q,$){let Z=C9(Q);if(!CQ(Z))return{};let J=$?` WHERE client='${$}'`:"",Y=B6(Z,`SELECT service, auth_value FROM access${J};`),X={};for(let G of Y.split(`
131
+ `)){let[H,W]=G.split("|");if(H)X[j7[H]??H]=Number(W)}return X}function X4(Q){return pQ("plutil",Q,{encoding:"utf-8"})}function N6(Q,$,Z={}){let J=[];for(let Y of $)J.push("-c",Y);J.push(Q);try{return pQ("/usr/libexec/PlistBuddy",J,{encoding:"utf-8",stdio:["ignore","pipe","pipe"]})}catch(Y){if(Z.ignoreErrors)return String(Y?.stdout??"");throw Error(String(Y?.stderr??Y?.stdout??Y?.message??Y).trim())}}function P9(){return L7(NQ(U7(),"serve-sim-perm-"))}function O7(Q,$,Z,J){let Y="grant",X="location";if(Z==="reset")Y="reset";else if(Z==="revoke"||J==="never")Y="revoke";else if(J==="always")X="location-always";try{pQ("xcrun",["simctl","privacy",Q,Y,X,$],{stdio:["ignore","ignore","pipe"]})}catch(G){throw Error(`simctl privacy ${Y} ${X} failed: `+String(G?.stderr??G?.message??G).trim())}}function D7(Q,$){if(!$)return null;let Z=F7(Q);if(!CQ(Z))return null;let J;try{J=X4(["-convert","xml1","-o","-",Z])}catch{return null}let Y=J.match(new RegExp(`<key>i${$.replace(/[.-]/g,"\\$&")}:</key>\\s*<dict>[\\s\\S]*?<key>Authorization</key>\\s*<integer>(\\d+)</integer>`));return Y?{Authorization:Number(Y[1])}:null}var A7="YnBsaXN0MDDUAQIDBAUGTU5YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCDAxQUgfSVUkbnVsbN8QFQkKCwwNDg8QERITFBUWFxgZGhscHR4fHiEiIx4jJicfHygjIh8jIyMjI18QFHN1cHByZXNzRnJvbVNldHRpbmdzXxASc3VwcHJlc3NlZFNldHRpbmdzWmhpZGVXZWVBcHBZc2VjdGlvbklEW2Rpc3BsYXlOYW1lVGljb25fEBlkaXNwbGF5c0NyaXRpY2FsQnVsbGV0aW5zW3N1YnNlY3Rpb25zXxATc2VjdGlvbkluZm9TZXR0aW5nc1YkY2xhc3NfEA9zZWN0aW9uQ2F0ZWdvcnlfEBJzdWJzZWN0aW9uUHJpb3JpdHlXdmVyc2lvbl8QGm1hbmFnZWRTZWN0aW9uSW5mb1NldHRpbmdzV2FwcE5hbWVbc2VjdGlvblR5cGVfEBBmYWN0b3J5U2VjdGlvbklEXxAPZGF0YVByb3ZpZGVySURzXHN1YnNlY3Rpb25JRFdmaWx0ZXJzXxAYcGF0aFRvV2VlQXBwUGx1Z2luQnVuZGxlCBAACIACgAWAAAiAAIADgAeABoAAgAWAAIAAgACAAIAAXxAmY29tLkxlb05hdGFuLkxOUG9wdXBDb250cm9sbGVyRXhhbXBsZS3ZMjM0NTY3Ejg5Ojs7Ox8fPjtAXHB1c2hTZXR0aW5nc18QGXNob3dzSW5Ob3RpZmljYXRpb25DZW50ZXJfEBNhbGxvd3NOb3RpZmljYXRpb25zXxAWc2hvd3NPbkV4dGVybmFsRGV2aWNlc18QFWNvbnRlbnRQcmV2aWV3U2V0dGluZ15jYXJQbGF5U2V0dGluZ18QEXNob3dzSW5Mb2NrU2NyZWVuWWFsZXJ0VHlwZRA/CQkJgAQJEAHSQkNERVokY2xhc3NuYW1lWCRjbGFzc2VzXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzokZHXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzWE5TT2JqZWN0V0xOUG9wdXDSQkNKS11CQlNlY3Rpb25JbmZvokxHXUJCU2VjdGlvbkluZm9fEA9OU0tleWVkQXJjaGl2ZXLRT1BUcm9vdIABAAgAEQAaACMALQAyADcAQABGAHMAigCfAKoAtADAAMUA4QDtAQMBCgEcATEBOQFWAV4BagF9AY8BnAGkAb8BwAHCAcMBxQHHAckBygHMAc4B0AHSAdQB1gHYAdoB3AHeAeACCQIcAikCRQJbAnQCjAKbAq8CuQK7ArwCvQK+AsACwQLDAsgC0wLcAvQC9wMPAxgDIAMlAzMDNgNEA1YDWQNeAAAAAAAAAgEAAAAAAAAAUQAAAAAAAAAAAAAAAAAAA2A=";function I9(Q){return NQ(N7(Q),"VersionedSectionInfo.plist")}function C7(Q,$,Z,J){let Y=NQ(Q,"section-info.plist");return D9(Y,Buffer.from(A7,"base64")),N6(Y,[`Set :$objects:2 ${$}`,`Set :$objects:3:allowsNotifications ${Z?"true":"false"}`,`Add :$objects:3:criticalAlertSetting integer ${J?2:0}`,`Set :$objects:5 ${$}`,"Save"]),X4(["-convert","binary1",Y]),Y}function P7(Q,$,Z){let J=I9(Q);if(!CQ(J)){if(Z==="reset")return;let X=Date.now()+5000;while(!CQ(J)&&Date.now()<X)Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250);if(!CQ(J))throw Error(`BulletinBoard plist not found for ${Q}. The simulator may still `+`be booting — wait for it to finish and retry.
132
+ ${J}`)}try{pQ("chflags",["nouchg",J])}catch{}let Y=P9();try{if(N6(J,[`Delete :sectionInfo:${$}`,"Save"],{ignoreErrors:!0}),Z!=="reset"){let X=C7(Y,$,Z!=="revoke",Z==="critical");N6(J,[`Import :sectionInfo:${$} ${X}`,"Save"])}X4(["-convert","binary1",J])}finally{O9(Y,{recursive:!0,force:!0});try{M7(J,420),pQ("chflags",["uchg",J])}catch{}}}function I7(Q,$){if(!$)return null;let Z=I9(Q);if(!CQ(Z))return null;let J;try{J=X4(["-extract","sectionInfo","xml1","-o","-",Z])}catch{return null}let Y=J.match(new RegExp(`<key>${$.replace(/[.-]/g,"\\$&")}</key>\\s*<data>([\\s\\S]*?)</data>`));if(!Y?.[1])return null;let X=P9();try{let G=NQ(X,"section-info.plist");D9(G,Buffer.from(Y[1].replace(/\s/g,""),"base64"));let H=X4(["-convert","xml1","-o","-",G]);return{allowsNotifications:/<key>allowsNotifications<\/key>\s*<true\/>/.test(H),critical:/<key>criticalAlertSetting<\/key>\s*<integer>2<\/integer>/.test(H)}}catch{return null}finally{O9(X,{recursive:!0,force:!0})}}function q9(Q,$,Z,J,Y){let X=A9(Z);if(X.kind==="tcc"){let G=$==="reset"?"delete":$==="revoke"?0:J==="limited"?3:2;T7(Q,X.tccService,X.tccAuthVersion,Y,G)}else if(X.kind==="notifications")P7(Q,Y,$==="reset"?"reset":$==="revoke"?"revoke":J==="critical"?"critical":"grant");else O7(Q,Y,$,J)}async function x9(Q){let $=Q.includes("-q")||Q.includes("--quiet"),Z=Q.filter((G)=>G!=="-q"&&G!=="--quiet"),J=B7(Z);if("error"in J)console.error(J.error),console.error(`
133
133
  Usage:
134
134
  serve-sim permissions grant <permission> <bundle-id> [--value <v>] [-d <udid|name>]
135
135
  serve-sim permissions revoke <permission> <bundle-id> [-d <udid|name>]
136
136
  serve-sim permissions reset <permission|all> <bundle-id> [-d <udid|name>]
137
137
  serve-sim permissions list [bundle-id] [-d <udid|name>]
138
138
 
139
- Permissions: ${_6().join(", ")}`),process.exit(1);let Y=J.device?o(J.device):$Q();if(!Y)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);if(J.verb==="list"){let X={udid:Y,bundleId:J.bundleId??null,tcc:j7(Y,J.bundleId),location:q7(Y,J.bundleId),notifications:P7(Y,J.bundleId)};console.log(JSON.stringify(X,null,$?0:2)),process.exit(0)}let G=J.bundleId;try{if(J.permission==="all")for(let X of _6())O9(Y,"reset",X,void 0,G);else O9(Y,J.verb,J.permission,J.value,G)}catch(X){console.error(X?.message??String(X)),process.exit(1)}if($)console.log(JSON.stringify({udid:Y,verb:J.verb,permission:J.permission,value:J.value??null,bundleId:G}));else{let X=J.value?` (${J.value})`:"";console.log(`\uD83D\uDD10 ${J.verb} ${J.permission}${X} for ${G} on ${Y}`)}process.exit(0)}P6();S6();var qQ=A4(import.meta.url);function o2(){return"0.1.44-beta.99.3"}function x0(){if(!i(VQ))P8(VQ,{recursive:!0})}function e(Q){if(Q)return A8(Y4(Q));for(let $ of q4()){let Z=A8($);if(Z)return Z}return null}var s4={at:0,booted:null};function a2(){let Q=Date.now();if(s4.booted&&Q-s4.at<1000)return s4.booted;try{let $=t("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),Z=JSON.parse($),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 s4={at:Q,booted:J},J}catch{return null}}function A8(Q){try{if(!i(Q))return RQ("state file missing %s",Q),null;let $=JSON.parse(WQ(Q,"utf-8"));try{process.kill($.pid,0)}catch{return RQ("helper pid %d dead, removing stale state %s",$.pid,Q),rQ(Q),null}let Z=a2();if(Z&&!Z.has($.device)){RQ("helper pid %d bound to non-booted device %s — killing stale helper",$.pid,$.device),console.error(`[serve-sim] Helper pid ${$.pid} is bound to device ${$.device} which is no longer booted — killing stale helper.`);try{process.kill($.pid,"SIGTERM")}catch{}try{rQ(Q)}catch{}return null}return RQ("state ok pid=%d device=%s port=%d",$.pid,$.device,$.port),$}catch($){return RQ("readStateFile threw for %s: %o",Q,$),null}}function F4(){let Q=[];for(let $ of q4()){let Z=A8($);if(Z)Q.push(Z)}return Q}function r2(Q){x0(),k8(Y4(Q.device),JSON.stringify(Q,null,2)),RQ("wrote state pid=%d device=%s port=%d",Q.pid,Q.device,Q.port)}function bQ(Q){if(Q){RQ("clearState device=%s",Q);try{rQ(Y4(Q))}catch{}}else{RQ("clearState (all)");for(let $ of q4())try{rQ($)}catch{}}}function w8(){try{let Q=t("xcrun simctl list devices -j",{encoding:"utf-8"}),$=JSON.parse(Q),Z=Object.keys($.devices).filter((J)=>/SimRuntime\.iOS-/i.test(J)).sort((J,Y)=>{let G=(J.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),X=(Y.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(X[0]??0)-(G[0]??0)||(X[1]??0)-(G[1]??0)});for(let J of Z){let G=($.devices[J]??[]).find((X)=>X.isAvailable!==!1&&/^iPhone\b/i.test(X.name));if(G)return{udid:G.udid,name:G.name}}}catch{}return null}function C0(Q){try{let $=t("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse($);for(let J of Object.values(Z.devices))for(let Y of J)if(Y.udid===Q)return Y.name}catch{}return null}function k0(Q){try{let $=t("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse($);for(let J of Object.values(Z.devices))for(let Y of J)if(Y.udid===Q)return Y.state==="Booted"}catch{}return!1}function e4(Q){try{return process.kill(Q,0),!0}catch{return!1}}function w0(Q){try{process.kill(Q,"SIGTERM")}catch{return}let $=Date.now()+500;while(Date.now()<$)try{process.kill(Q,0),AQ(25)}catch{return}try{process.kill(Q,"SIGKILL")}catch{}let Z=Date.now()+500;while(Date.now()<Z)try{process.kill(Q,0),AQ(25)}catch{return}}function s2(Q){if(!k0(Q))try{t(`xcrun simctl boot ${Q}`,{encoding:"utf-8",stdio:"pipe"})}catch($){let Z=($.stderr??$.message??"").toLowerCase();if(!Z.includes("booted")&&!Z.includes("current state"))throw Error(`Failed to boot device ${Q}: ${$.stderr||$.message}`)}try{t("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function t2(){let Q=i2();for(let $ of Object.values(Q))for(let Z of $??[])if(Z.family==="IPv4"&&!Z.internal)return Z.address;return null}async function S0(Q){let $=new Set(F4().map((Z)=>Z.port));for(let Z=Q;Z<Q+100;Z++){if($.has(Z))continue;if(await F9(Z))return Z}throw Error(`No available port found in range ${Q}-${Q+99}`)}async function e2(Q){s2(Q);try{t(`xcrun simctl bootstatus ${Q} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch($){if(!k0(Q))console.error(`Device ${Q} failed to reach booted state: ${$.stderr||$.message}`),process.exit(1)}}function QY(Q){if(process.argv[0]&&/(^|\/)serve-sim$/.test(process.argv[0]))return{command:process.argv[0],args:Q};return{command:process.argv[0],args:[process.argv[1],...Q]}}async function $Y(Q,$=150000){let Z=Date.now();while(Date.now()-Z<$){let J=e(Q);if(J)return J;await new Promise((Y)=>setTimeout(Y,200))}return null}async function y0(Q,$,Z){w6("startHelper udid=%s port=%d detach=%s",Q,$,Z.detach);let J="127.0.0.1";x0(),bQ(Q),T9($);let Y=JQ(VQ,`server-${Q}.log`),G=I8(Y,"w"),{command:X,args:H}=QY([Q,"--port",String($),"--host",J]),W=P0(X,H,{detached:Z.detach,stdio:["ignore",G,G]});if(x8(G),Z.detach)W.unref();let z=await $Y(Q);if(!z){if(W.pid)w0(W.pid);let K="";try{K=WQ(Y,"utf-8").trim()}catch{}console.error(K?`Preview server failed:
140
- ${K}`:"Preview server failed to start"),process.exit(1)}return Z.detach?{pid:z.pid}:{pid:z.pid,child:W}}async function ZY(Q,$,Z){k6("follow devices=%o startPort=%d",Q,$);let J=Q.length>0?Q.map(o):(()=>{let z=$Q();if(z)return[z];let K=w8();if(!K)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!Z)console.log(`No booted simulator — booting ${K.name}...`);return[K.udid]})(),Y=new Map,G=[],X=$;for(let z of J){let K=e(z);if(K){if(!Z){let T=C0(z)??z;if(J.length>1)console.log(`
141
- ==> ${T} (${z}) <==`);console.log(` Already running on port ${K.port}`),console.log(` Stream: ${K.streamUrl}`),console.log(` WebSocket: ${K.wsUrl}`)}G.push(K);continue}X=await S0(X);let{child:M}=await y0(z,X,{detach:!1});if(M)Y.set(z,M);let L=e(z)??mQ(z,X,"/","127.0.0.1");if(G.push(L),!Z){let T=C0(z)??z;if(J.length>1)console.log(`
142
- ==> ${T} (${z}) <==`);console.log(` Stream: ${L.streamUrl}`),console.log(` WebSocket: ${L.wsUrl}`),console.log(` Port: ${X}`)}X++}if(G.length===1){let z=G[0];console.log(JSON.stringify({url:z.url,streamUrl:z.streamUrl,wsUrl:z.wsUrl,port:z.port,device:z.device}))}else console.log(JSON.stringify({devices:G.map((z)=>({url:z.url,streamUrl:z.streamUrl,wsUrl:z.wsUrl,port:z.port,device:z.device}))}));if(Y.size===0)return;let H=!1,W=(z)=>{if(H)return;if(H=!0,!Z)console.log(`
143
- Shutting down...`);for(let[K,M]of Y){let L=M.pid;if(L)w0(L);bQ(K)}Y.clear(),process.exit(z)};for(let[z,K]of Y)K.on("exit",(M)=>{if(w6("child exit udid=%s pid=%d code=%s",z,K.pid,M),H)return;if(!Z)console.error(`[${z}] Helper exited (code ${M})`);if(bQ(z),Y.delete(z),Y.size===0)W(M??1)});process.on("SIGINT",()=>W(0)),process.on("SIGTERM",()=>W(0)),process.on("SIGHUP",()=>W(0)),process.on("exit",()=>{for(let[z,K]of Y){try{if(K.pid)process.kill(K.pid,"SIGTERM")}catch{}try{bQ(z)}catch{}}}),await new Promise(()=>{})}async function JY(Q,$){k6("detach devices=%o startPort=%d",Q,$);let Z=Q.length>0?Q.map(o):(()=>{let G=$Q();if(G)return[G];let X=w8();if(!X)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[X.udid]})(),J=[],Y=$;for(let G of Z){let X=e(G);if(X){J.push(X);continue}Y=await S0(Y),await y0(G,Y,{detach:!0}),J.push(e(G)??mQ(G,Y,"/","127.0.0.1")),Y++}return J}function YY(Q){if(Q.length===1){let $=Q[0];console.log(JSON.stringify({url:$.url,streamUrl:$.streamUrl,wsUrl:$.wsUrl,port:$.port,device:$.device}))}else console.log(JSON.stringify({devices:Q.map(($)=>({url:$.url,streamUrl:$.streamUrl,wsUrl:$.wsUrl,port:$.port,device:$.device}))}))}function GY(Q){if(Q){let Z=o(Q),J=e(Z);if(!J)console.log(JSON.stringify({running:!1,device:Z}));else console.log(JSON.stringify({running:!0,url:J.url,streamUrl:J.streamUrl,wsUrl:J.wsUrl,port:J.port,device:J.device,pid:J.pid}));return}let $=F4();if($.length===0)console.log(JSON.stringify({running:!1}));else if($.length===1){let Z=$[0];console.log(JSON.stringify({running:!0,url:Z.url,streamUrl:Z.streamUrl,wsUrl:Z.wsUrl,port:Z.port,device:Z.device,pid:Z.pid}))}else console.log(JSON.stringify({running:!0,streams:$.map((Z)=>({url:Z.url,streamUrl:Z.streamUrl,wsUrl:Z.wsUrl,port:Z.port,device:Z.device,pid:Z.pid}))}))}function XY(Q){if(Q){let $=o(Q),Z=e($);if(!Z){console.log(JSON.stringify({disconnected:!0,device:$}));return}try{process.kill(Z.pid,"SIGTERM")}catch{}bQ($),console.log(JSON.stringify({disconnected:!0,device:Z.device}))}else{let $=F4();if($.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let Z=[];for(let J of $){try{process.kill(J.pid,"SIGTERM")}catch{}Z.push(J.device)}bQ(),console.log(JSON.stringify({disconnected:!0,devices:Z}))}}async function zY(Q,$){let Z=e($);if(!Z)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let J;try{J=JSON.parse(Q)}catch{console.error("Invalid JSON:",Q),process.exit(1)}return new Promise((Y,G)=>{let X=new WebSocket(Z.wsUrl);X.binaryType="arraybuffer",X.onopen=()=>{let H=new TextEncoder().encode(JSON.stringify(J)),W=new Uint8Array(1+H.length);W[0]=3,W.set(H,1),X.send(W),setTimeout(()=>{X.close(),Y()},50)},X.onerror=()=>{console.error("Failed to connect to serve-sim server at",Z.wsUrl),G(Error("WebSocket connection failed"))}})}async function KY(Q,$,Z){let J=Number(Q),Y=Number($);if(!Number.isFinite(J)||!Number.isFinite(Y)||J<0||J>1||Y<0||Y>1)console.error("Usage: serve-sim tap <x> <y> [-d udid]"),console.error(" x, y are normalized 0..1 of the simulator screen"),console.error(" Example: serve-sim tap 0.5 0.9 # near bottom-center"),process.exit(1);let G=e(Z);if(!G)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((X,H)=>{let W=new WebSocket(G.wsUrl);W.binaryType="arraybuffer";let z=(K)=>{let M=new TextEncoder().encode(JSON.stringify({type:K,x:J,y:Y})),L=new Uint8Array(1+M.length);L[0]=3,L.set(M,1),W.send(L)};W.onopen=()=>{z("begin"),setTimeout(()=>{z("end"),setTimeout(()=>{W.close(),X()},50)},40)},W.onerror=()=>{console.error("Failed to connect to serve-sim server at",G.wsUrl),H(Error("WebSocket connection failed"))}})}async function WY(Q,$){let Z=$.device,J=$.stdin??!1,Y=$.file,G=[Q.length>0,J,Y!=null].filter(Boolean).length;if(G===0||G>1)console.error("Usage: serve-sim type <text> [-d udid]"),console.error(" serve-sim type --stdin [-d udid]"),console.error(" serve-sim type --file <path> [-d udid]"),console.error(""),console.error("Only US-keyboard ASCII characters are supported (A-Z, a-z, 0-9,"),console.error("space, newline, tab, and standard punctuation)."),process.exit(1);let X;if(J)X=WQ(0,"utf8");else if(Y)try{X=WQ(Y,"utf8")}catch(z){console.error(`Failed to read file '${Y}': ${z.message}`),process.exit(1)}else X=Q.join(" ");let H;try{H=B9(X)}catch(z){if(z instanceof D4)console.error(z.message),console.error("Supported: A-Z, a-z, 0-9, space, newline, tab, and standard punctuation."),process.exit(1);throw z}let W=e(Z);if(!W)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);await _9(W.wsUrl,H)}async function VY(Q,$){let Z=e($);if(!Z)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let J=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!Q||!J.has(Q))console.error(`Usage: serve-sim rotate <${[...J].join("|")}> [-d udid]`),process.exit(1);return new Promise((Y,G)=>{let X=new WebSocket(Z.wsUrl);X.binaryType="arraybuffer",X.onopen=()=>{let H=new TextEncoder().encode(JSON.stringify({orientation:Q})),W=new Uint8Array(1+H.length);W[0]=7,W.set(H,1),X.send(W),setTimeout(()=>{X.close(),Y()},50)},X.onerror=()=>{console.error("Failed to connect to serve-sim server at",Z.wsUrl),G(Error("WebSocket connection failed"))}})}var HY={power:{page:12,usage:48},"volume-up":{page:12,usage:233},"volume-down":{page:12,usage:234},action:{page:11,usage:45},"side-button":{page:12,usage:149},"digital-crown":{page:12,usage:64},"left-side-button":{page:65281,usage:512}};async function MY(Q="home",$){let Z=e($);if(!Z)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let J=HY[Q],Y=J?{button:Q,...J}:{button:Q};return new Promise((G,X)=>{let H=new WebSocket(Z.wsUrl);H.binaryType="arraybuffer",H.onopen=()=>{let W=new TextEncoder().encode(JSON.stringify(Y)),z=new Uint8Array(1+W.length);z[0]=4,z.set(W,1),H.send(z),setTimeout(()=>{H.close(),G()},50)},H.onerror=()=>{console.error("Failed to connect to serve-sim server at",Z.wsUrl),X(Error("WebSocket connection failed"))}})}async function LY(Q,$,Z){let J=($??"").toLowerCase(),Y=J==="on"||J==="1"||J==="true",G={blended:"debug_color_blended",copies:"debug_color_copies",copied:"debug_color_copies",misaligned:"debug_color_misaligned",offscreen:"debug_color_offscreen","slow-animations":"debug_slow_animations",slow:"debug_slow_animations"},X=Q?G[Q]??Q:void 0;if(!X||!["on","off","1","0","true","false"].includes(J))console.error(`Usage: serve-sim ca-debug <option> <on|off> [-d udid]
144
- option shortcuts: ${Object.keys(G).join(", ")}`),process.exit(1);let H=e(Z);if(!H)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((W,z)=>{let K=new WebSocket(H.wsUrl);K.binaryType="arraybuffer",K.onopen=()=>{let M=new TextEncoder().encode(JSON.stringify({option:X,enabled:Y})),L=new Uint8Array(1+M.length);L[0]=8,L.set(M,1),K.send(L),setTimeout(()=>{K.close(),W()},50)},K.onerror=()=>{console.error("Failed to connect to serve-sim server at",H.wsUrl),z(Error("WebSocket connection failed"))}})}async function UY(Q){let $=e(Q);if(!$)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((Z,J)=>{let Y=new WebSocket($.wsUrl);Y.binaryType="arraybuffer",Y.onopen=()=>{Y.send(new Uint8Array([9])),setTimeout(()=>{Y.close(),Z()},50)},Y.onerror=()=>{console.error("Failed to connect to serve-sim server at",$.wsUrl),J(Error("WebSocket connection failed"))}})}function f0(){let Q=[JQ(qQ,"..","dist","simcam","libSimCameraInjector.dylib"),JQ(qQ,"simcam","libSimCameraInjector.dylib"),JQ(qQ,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let $ of Q)if(i($))return fQ($);return null}function RY(){let Q=JQ(qQ,"..","Sources","SimCameraInjector","build.sh");if(!i(Q))throw Error("SimCameraInjector source not found — this build of serve-sim does not "+"include camera support sources. Reinstall from a recent release.");console.error("[serve-sim] building libSimCameraInjector.dylib (one-time)…"),t(`bash "${Q}"`,{stdio:"inherit"});let $=f0();if(!$)throw Error("Build succeeded but dylib not found.");return $}function S8(){let Q=[JQ(qQ,"..","dist","simcam","serve-sim-camera-helper"),JQ(qQ,"simcam","serve-sim-camera-helper")];for(let $ of Q)if(i($))return fQ($);return null}function b0(){let Q=JQ(qQ,"..","Sources","SimCameraHelper","build.sh");if(!i(Q))throw Error("SimCameraHelper source not found — webcam support requires building "+"from a checkout that includes Sources/SimCameraHelper.");console.error("[serve-sim] building serve-sim-camera-helper (one-time)…"),t(`bash "${Q}"`,{stdio:"inherit"});let $=S8();if(!$)throw Error("Build succeeded but helper binary not found.");return $}var vQ=JQ(VQ,"simcam");function _Y(Q){return`/serve-sim-cam-${I0("sha1").update(Q).digest("hex").slice(0,8)}`}function sQ(Q){return JQ(vQ,`${Q}.pid`)}function y8(Q){return JQ(vQ,`${Q}.bundles.json`)}function f8(Q){return`/tmp/serve-sim-cam-${I0("sha1").update(Q).digest("hex").slice(0,12)}.sock`}async function N4(Q,$){let Z=f8(Q);if(!i(Z))throw Error("camera helper socket not found");let J=await import("net");return await new Promise((Y,G)=>{let X=J.createConnection(Z),H="",W=!1;X.on("data",(z)=>{H+=z.toString();let K=H.indexOf(`
145
- `);if(K>=0&&!W){W=!0;try{Y(JSON.parse(H.slice(0,K)))}catch(M){G(M)}X.end()}}),X.on("error",(z)=>{if(!W)W=!0,G(z)}),X.on("close",()=>{if(!W)W=!0,G(Error("socket closed"))}),X.write(JSON.stringify($)+`
146
- `),setTimeout(()=>{if(!W)W=!0,X.destroy(),G(Error("helper timeout"))},3000)})}function t4(Q){let $=sQ(Q);if(!i($))return!1;let Z=Number(WQ($,"utf-8").trim());return Number.isFinite(Z)&&e4(Z)&&i(f8(Q))}function C8(Q){let $=y8(Q);if(!i($))return[];let Z;try{Z=JSON.parse(WQ($,"utf-8"))}catch{return[]}let J=null;try{J=Number(WQ(sQ(Q),"utf-8").trim())||null}catch{}if(J==null||Z.helperPid!==J)return[];return Array.isArray(Z.bundleIds)?Z.bundleIds:[]}function BY(Q,$,Z){let J=C8(Q),Y=J.includes($)?J:[...J,$],G={helperPid:Z,bundleIds:Y};if(!i(vQ))P8(vQ,{recursive:!0});k8(y8(Q),JSON.stringify(G))}function v0(Q){try{rQ(y8(Q))}catch{}}function h0(Q){let $=sQ(Q);if(!i($))return;let Z=Number(WQ($,"utf-8").trim());if(Number.isFinite(Z)&&e4(Z)){try{process.kill(Z,"SIGTERM")}catch{}let J=Date.now();while(e4(Z)&&Date.now()-J<1500)AQ(50)}try{rQ($)}catch{}v0(Q)}function NY(Q){if(!i(vQ))P8(vQ,{recursive:!0});let $=JQ(vQ,`${Q.udid}.log`),Z=I8($,"a"),J=["--shm",Q.shmName,"--socket",Q.socketPath,"--source",Q.source];if(Q.arg)J.push("--arg",Q.arg);if(Q.width)J.push("--width",String(Q.width));if(Q.height)J.push("--height",String(Q.height));let Y=P0(Q.helperBin,J,{detached:!0,stdio:["ignore",Z,Z]});if(Y.unref(),x8(Z),!Y.pid)throw Error("failed to spawn camera helper");k8(sQ(Q.udid),String(Y.pid)),v0(Q.udid);let G=Date.now();while(Date.now()-G<3000){if(!e4(Y.pid))throw Error(`camera helper exited early — see log at ${$}`);if(i(Q.socketPath))break;AQ(50)}return Y.pid}var FY=new Set(["mp4","m4v","mov","qt","avi","mkv","webm","mpg","mpeg","3gp","3g2","ts","wmv"]),EY=new Set(["png","jpg","jpeg","gif","heic","heif","webp","bmp","tif","tiff"]);function u0(Q){let $=Q.toLowerCase().split(".").pop()??"";if(FY.has($))return"video";if(EY.has($))return"image";let Z;try{let J=I8(Q,"r");Z=Buffer.alloc(16),n2(J,Z,0,Z.length,0),x8(J)}catch{return null}if(Z.length>=8&&Z.slice(4,8).toString("ascii")==="ftyp")return"video";if(Z.slice(0,4).toString("ascii")==="RIFF"&&Z.length>=12){let J=Z.slice(8,12).toString("ascii");if(J==="AVI ")return"video";if(J==="WEBP")return"image"}if(Z[0]===26&&Z[1]===69&&Z[2]===223&&Z[3]===163)return"video";if(Z[0]===137&&Z[1]===80&&Z[2]===78&&Z[3]===71)return"image";if(Z[0]===255&&Z[1]===216&&Z[2]===255)return"image";if(Z.slice(0,6).toString("ascii").startsWith("GIF8"))return"image";if(Z[0]===66&&Z[1]===77)return"image";return null}function TY(Q){if(Q.file){let $=fQ(Q.file),Z=u0($);if(!Z)throw Error(`Could not detect image/video type for: ${$}`);return{kind:Z,arg:$}}if(Q.webcam)return{kind:"webcam",arg:typeof Q.webcam==="string"?Q.webcam:void 0};return{kind:"placeholder"}}async function jY(Q){let $=_Y(Q.udid),Z=f8(Q.udid);if(t4(Q.udid)){let G=await N4(Q.udid,{action:"switch",source:Q.source.kind,arg:Q.source.arg});if(!G.ok)throw Error(G.error||"helper rejected switch");return{helperPid:Number(WQ(sQ(Q.udid),"utf-8").trim()),shmName:$,relaunched:!1}}h0(Q.udid);let J=!Q.forceBuild&&S8()||b0();return{helperPid:NY({udid:Q.udid,helperBin:J,shmName:$,socketPath:Z,source:Q.source.kind,arg:Q.source.arg}),shmName:$,relaunched:!0}}async function OY(Q){let $,Z,J,Y=!1,G=!1,X=!1,H=!1,W="auto",z=[];for(let U=0;U<Q.length;U++){let V=Q[U];if(V==="--device"||V==="-d"){$=Q[++U];continue}if(V==="--file"||V==="-f"||V==="--image"||V==="-i"||V==="--video"){Z=Q[++U];continue}if(V==="--webcam"){let R=Q[U+1];if(R&&!R.startsWith("-"))J=R,U++;else J=!0;continue}if(V==="--list-webcams"){G=!0;continue}if(V==="--stop-webcam"){Y=!0;continue}if(V==="--build"){X=!0;continue}if(V==="--quiet"||V==="-q"){H=!0;continue}if(V==="--mirror"){let R=Q[U+1];if(R==="on"||R==="off"||R==="auto")W=R,U++;else W="on";continue}if(V==="--no-mirror"){W="off";continue}if(V==="--help"||V==="-h"){console.log(`Usage: serve-sim camera <bundle-id> [-d udid] [source-options] [--build]
139
+ Permissions: ${_6().join(", ")}`),process.exit(1);let Y=J.device?o(J.device):$Q();if(!Y)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);if(J.verb==="list"){let G={udid:Y,bundleId:J.bundleId??null,tcc:q7(Y,J.bundleId),location:D7(Y,J.bundleId),notifications:I7(Y,J.bundleId)};console.log(JSON.stringify(G,null,$?0:2)),process.exit(0)}let X=J.bundleId;try{if(J.permission==="all")for(let G of _6())q9(Y,"reset",G,void 0,X);else q9(Y,J.verb,J.permission,J.value,X)}catch(G){console.error(G?.message??String(G)),process.exit(1)}if($)console.log(JSON.stringify({udid:Y,verb:J.verb,permission:J.permission,value:J.value??null,bundleId:X}));else{let G=J.value?` (${J.value})`:"";console.log(`\uD83D\uDD10 ${J.verb} ${J.permission}${G} for ${X} on ${Y}`)}process.exit(0)}P6();w6();var OQ=A4(import.meta.url);function a2(){return"0.1.44"}function k0(){if(!i(HQ))P8(HQ,{recursive:!0})}function e(Q){if(Q)return A8(Y4(Q));for(let $ of O4()){let Z=A8($);if(Z)return Z}return null}var s4={at:0,booted:null};function r2(){let Q=Date.now();if(s4.booted&&Q-s4.at<1000)return s4.booted;try{let $=t("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),Z=JSON.parse($),J=new Set;for(let Y of Object.values(Z.devices))for(let X of Y)if(X.state==="Booted")J.add(X.udid);return s4={at:Q,booted:J},J}catch{return null}}function A8(Q){try{if(!i(Q))return UQ("state file missing %s",Q),null;let $=JSON.parse(VQ(Q,"utf-8"));try{process.kill($.pid,0)}catch{return UQ("helper pid %d dead, removing stale state %s",$.pid,Q),rQ(Q),null}let Z=r2();if(Z&&!Z.has($.device)){UQ("helper pid %d bound to non-booted device %s — killing stale helper",$.pid,$.device),console.error(`[serve-sim] Helper pid ${$.pid} is bound to device ${$.device} which is no longer booted — killing stale helper.`);try{process.kill($.pid,"SIGTERM")}catch{}try{rQ(Q)}catch{}return null}return UQ("state ok pid=%d device=%s port=%d",$.pid,$.device,$.port),$}catch($){return UQ("readStateFile threw for %s: %o",Q,$),null}}function F4(){let Q=[];for(let $ of O4()){let Z=A8($);if(Z)Q.push(Z)}return Q}function s2(Q){k0(),k8(Y4(Q.device),JSON.stringify(Q,null,2)),UQ("wrote state pid=%d device=%s port=%d",Q.pid,Q.device,Q.port)}function bQ(Q){if(Q){UQ("clearState device=%s",Q);try{rQ(Y4(Q))}catch{}}else{UQ("clearState (all)");for(let $ of O4())try{rQ($)}catch{}}}function S8(){try{let Q=t("xcrun simctl list devices -j",{encoding:"utf-8"}),$=JSON.parse(Q),Z=Object.keys($.devices).filter((J)=>/SimRuntime\.iOS-/i.test(J)).sort((J,Y)=>{let X=(J.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),G=(Y.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(G[0]??0)-(X[0]??0)||(G[1]??0)-(X[1]??0)});for(let J of Z){let X=($.devices[J]??[]).find((G)=>G.isAvailable!==!1&&/^iPhone\b/i.test(G.name));if(X)return{udid:X.udid,name:X.name}}}catch{}return null}function P0(Q){try{let $=t("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse($);for(let J of Object.values(Z.devices))for(let Y of J)if(Y.udid===Q)return Y.name}catch{}return null}function S0(Q){try{let $=t("xcrun simctl list devices -j",{encoding:"utf-8"}),Z=JSON.parse($);for(let J of Object.values(Z.devices))for(let Y of J)if(Y.udid===Q)return Y.state==="Booted"}catch{}return!1}function e4(Q){try{return process.kill(Q,0),!0}catch{return!1}}function w0(Q){try{process.kill(Q,"SIGTERM")}catch{return}let $=Date.now()+500;while(Date.now()<$)try{process.kill(Q,0),AQ(25)}catch{return}try{process.kill(Q,"SIGKILL")}catch{}let Z=Date.now()+500;while(Date.now()<Z)try{process.kill(Q,0),AQ(25)}catch{return}}function t2(Q){if(!S0(Q))try{t(`xcrun simctl boot ${Q}`,{encoding:"utf-8",stdio:"pipe"})}catch($){let Z=($.stderr??$.message??"").toLowerCase();if(!Z.includes("booted")&&!Z.includes("current state"))throw Error(`Failed to boot device ${Q}: ${$.stderr||$.message}`)}try{t("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function e2(){let Q=o2();for(let $ of Object.values(Q))for(let Z of $??[])if(Z.family==="IPv4"&&!Z.internal)return Z.address;return null}async function y0(Q){let $=new Set(F4().map((Z)=>Z.port));for(let Z=Q;Z<Q+100;Z++){if($.has(Z))continue;if(await F9(Z))return Z}throw Error(`No available port found in range ${Q}-${Q+99}`)}async function QY(Q){t2(Q);try{t(`xcrun simctl bootstatus ${Q} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch($){if(!S0(Q))console.error(`Device ${Q} failed to reach booted state: ${$.stderr||$.message}`),process.exit(1)}}function $Y(Q){if(process.argv[0]&&/(^|\/)serve-sim$/.test(process.argv[0]))return{command:process.argv[0],args:Q};return{command:process.argv[0],args:[process.argv[1],...Q]}}async function ZY(Q,$=150000){let Z=Date.now();while(Date.now()-Z<$){let J=e(Q);if(J)return J;await new Promise((Y)=>setTimeout(Y,200))}return null}async function f0(Q,$,Z){S6("startHelper udid=%s port=%d detach=%s",Q,$,Z.detach);let J="127.0.0.1";k0(),bQ(Q),T9($);let Y=JQ(HQ,`server-${Q}.log`),X=I8(Y,"w"),{command:G,args:H}=$Y([Q,"--port",String($),"--host",J]),W=I0(G,H,{detached:Z.detach,stdio:["ignore",X,X]});if(x8(X),Z.detach)W.unref();let z=await ZY(Q);if(!z){if(W.pid)w0(W.pid);let K="";try{K=VQ(Y,"utf-8").trim()}catch{}console.error(K?`Preview server failed:
140
+ ${K}`:"Preview server failed to start"),process.exit(1)}return Z.detach?{pid:z.pid}:{pid:z.pid,child:W}}async function JY(Q,$,Z){k6("follow devices=%o startPort=%d",Q,$);let J=Q.length>0?Q.map(o):(()=>{let z=$Q();if(z)return[z];let K=S8();if(!K)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!Z)console.log(`No booted simulator — booting ${K.name}...`);return[K.udid]})(),Y=new Map,X=[],G=$;for(let z of J){let K=e(z);if(K){if(!Z){let T=P0(z)??z;if(J.length>1)console.log(`
141
+ ==> ${T} (${z}) <==`);console.log(` Already running on port ${K.port}`),console.log(` Stream: ${K.streamUrl}`),console.log(` WebSocket: ${K.wsUrl}`)}X.push(K);continue}G=await y0(G);let{child:M}=await f0(z,G,{detach:!1});if(M)Y.set(z,M);let L=e(z)??mQ(z,G,"/","127.0.0.1");if(X.push(L),!Z){let T=P0(z)??z;if(J.length>1)console.log(`
142
+ ==> ${T} (${z}) <==`);console.log(` Stream: ${L.streamUrl}`),console.log(` WebSocket: ${L.wsUrl}`),console.log(` Port: ${G}`)}G++}if(X.length===1){let z=X[0];console.log(JSON.stringify({url:z.url,streamUrl:z.streamUrl,wsUrl:z.wsUrl,port:z.port,device:z.device}))}else console.log(JSON.stringify({devices:X.map((z)=>({url:z.url,streamUrl:z.streamUrl,wsUrl:z.wsUrl,port:z.port,device:z.device}))}));if(Y.size===0)return;let H=!1,W=(z)=>{if(H)return;if(H=!0,!Z)console.log(`
143
+ Shutting down...`);for(let[K,M]of Y){let L=M.pid;if(L)w0(L);bQ(K)}Y.clear(),process.exit(z)};for(let[z,K]of Y)K.on("exit",(M)=>{if(S6("child exit udid=%s pid=%d code=%s",z,K.pid,M),H)return;if(!Z)console.error(`[${z}] Helper exited (code ${M})`);if(bQ(z),Y.delete(z),Y.size===0)W(M??1)});process.on("SIGINT",()=>W(0)),process.on("SIGTERM",()=>W(0)),process.on("SIGHUP",()=>W(0)),process.on("exit",()=>{for(let[z,K]of Y){try{if(K.pid)process.kill(K.pid,"SIGTERM")}catch{}try{bQ(z)}catch{}}}),await new Promise(()=>{})}async function YY(Q,$){k6("detach devices=%o startPort=%d",Q,$);let Z=Q.length>0?Q.map(o):(()=>{let X=$Q();if(X)return[X];let G=S8();if(!G)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[G.udid]})(),J=[],Y=$;for(let X of Z){let G=e(X);if(G){J.push(G);continue}Y=await y0(Y),await f0(X,Y,{detach:!0}),J.push(e(X)??mQ(X,Y,"/","127.0.0.1")),Y++}return J}function XY(Q){if(Q.length===1){let $=Q[0];console.log(JSON.stringify({url:$.url,streamUrl:$.streamUrl,wsUrl:$.wsUrl,port:$.port,device:$.device}))}else console.log(JSON.stringify({devices:Q.map(($)=>({url:$.url,streamUrl:$.streamUrl,wsUrl:$.wsUrl,port:$.port,device:$.device}))}))}function GY(Q){if(Q){let Z=o(Q),J=e(Z);if(!J)console.log(JSON.stringify({running:!1,device:Z}));else console.log(JSON.stringify({running:!0,url:J.url,streamUrl:J.streamUrl,wsUrl:J.wsUrl,port:J.port,device:J.device,pid:J.pid}));return}let $=F4();if($.length===0)console.log(JSON.stringify({running:!1}));else if($.length===1){let Z=$[0];console.log(JSON.stringify({running:!0,url:Z.url,streamUrl:Z.streamUrl,wsUrl:Z.wsUrl,port:Z.port,device:Z.device,pid:Z.pid}))}else console.log(JSON.stringify({running:!0,streams:$.map((Z)=>({url:Z.url,streamUrl:Z.streamUrl,wsUrl:Z.wsUrl,port:Z.port,device:Z.device,pid:Z.pid}))}))}function zY(Q){if(Q){let $=o(Q),Z=e($);if(!Z){console.log(JSON.stringify({disconnected:!0,device:$}));return}try{process.kill(Z.pid,"SIGTERM")}catch{}bQ($),console.log(JSON.stringify({disconnected:!0,device:Z.device}))}else{let $=F4();if($.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let Z=[];for(let J of $){try{process.kill(J.pid,"SIGTERM")}catch{}Z.push(J.device)}bQ(),console.log(JSON.stringify({disconnected:!0,devices:Z}))}}async function KY(Q,$){let Z=e($);if(!Z)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let J;try{J=JSON.parse(Q)}catch{console.error("Invalid JSON:",Q),process.exit(1)}return new Promise((Y,X)=>{let G=new WebSocket(Z.wsUrl);G.binaryType="arraybuffer",G.onopen=()=>{let H=new TextEncoder().encode(JSON.stringify(J)),W=new Uint8Array(1+H.length);W[0]=3,W.set(H,1),G.send(W),setTimeout(()=>{G.close(),Y()},50)},G.onerror=()=>{console.error("Failed to connect to serve-sim server at",Z.wsUrl),X(Error("WebSocket connection failed"))}})}async function WY(Q,$,Z){let J=Number(Q),Y=Number($);if(!Number.isFinite(J)||!Number.isFinite(Y)||J<0||J>1||Y<0||Y>1)console.error("Usage: serve-sim tap <x> <y> [-d udid]"),console.error(" x, y are normalized 0..1 of the simulator screen"),console.error(" Example: serve-sim tap 0.5 0.9 # near bottom-center"),process.exit(1);let X=e(Z);if(!X)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((G,H)=>{let W=new WebSocket(X.wsUrl);W.binaryType="arraybuffer";let z=(K)=>{let M=new TextEncoder().encode(JSON.stringify({type:K,x:J,y:Y})),L=new Uint8Array(1+M.length);L[0]=3,L.set(M,1),W.send(L)};W.onopen=()=>{z("begin"),setTimeout(()=>{z("end"),setTimeout(()=>{W.close(),G()},50)},40)},W.onerror=()=>{console.error("Failed to connect to serve-sim server at",X.wsUrl),H(Error("WebSocket connection failed"))}})}async function VY(Q,$){let Z=$.device,J=$.stdin??!1,Y=$.file,X=[Q.length>0,J,Y!=null].filter(Boolean).length;if(X===0||X>1)console.error("Usage: serve-sim type <text> [-d udid]"),console.error(" serve-sim type --stdin [-d udid]"),console.error(" serve-sim type --file <path> [-d udid]"),console.error(""),console.error("Only US-keyboard ASCII characters are supported (A-Z, a-z, 0-9,"),console.error("space, newline, tab, and standard punctuation)."),process.exit(1);let G;if(J)G=VQ(0,"utf8");else if(Y)try{G=VQ(Y,"utf8")}catch(z){console.error(`Failed to read file '${Y}': ${z.message}`),process.exit(1)}else G=Q.join(" ");let H;try{H=B9(G)}catch(z){if(z instanceof D4)console.error(z.message),console.error("Supported: A-Z, a-z, 0-9, space, newline, tab, and standard punctuation."),process.exit(1);throw z}let W=e(Z);if(!W)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);await _9(W.wsUrl,H)}async function HY(Q,$){let Z=e($);if(!Z)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let J=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!Q||!J.has(Q))console.error(`Usage: serve-sim rotate <${[...J].join("|")}> [-d udid]`),process.exit(1);return new Promise((Y,X)=>{let G=new WebSocket(Z.wsUrl);G.binaryType="arraybuffer",G.onopen=()=>{let H=new TextEncoder().encode(JSON.stringify({orientation:Q})),W=new Uint8Array(1+H.length);W[0]=7,W.set(H,1),G.send(W),setTimeout(()=>{G.close(),Y()},50)},G.onerror=()=>{console.error("Failed to connect to serve-sim server at",Z.wsUrl),X(Error("WebSocket connection failed"))}})}var MY={power:{page:12,usage:48},"volume-up":{page:12,usage:233},"volume-down":{page:12,usage:234},action:{page:11,usage:45},"side-button":{page:12,usage:149},"digital-crown":{page:12,usage:64},"left-side-button":{page:65281,usage:512}};async function LY(Q="home",$){let Z=e($);if(!Z)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let J=MY[Q],Y=J?{button:Q,...J}:{button:Q};return new Promise((X,G)=>{let H=new WebSocket(Z.wsUrl);H.binaryType="arraybuffer",H.onopen=()=>{let W=new TextEncoder().encode(JSON.stringify(Y)),z=new Uint8Array(1+W.length);z[0]=4,z.set(W,1),H.send(z),setTimeout(()=>{H.close(),X()},50)},H.onerror=()=>{console.error("Failed to connect to serve-sim server at",Z.wsUrl),G(Error("WebSocket connection failed"))}})}async function RY(Q,$,Z){let J=($??"").toLowerCase(),Y=J==="on"||J==="1"||J==="true",X={blended:"debug_color_blended",copies:"debug_color_copies",copied:"debug_color_copies",misaligned:"debug_color_misaligned",offscreen:"debug_color_offscreen","slow-animations":"debug_slow_animations",slow:"debug_slow_animations"},G=Q?X[Q]??Q:void 0;if(!G||!["on","off","1","0","true","false"].includes(J))console.error(`Usage: serve-sim ca-debug <option> <on|off> [-d udid]
144
+ option shortcuts: ${Object.keys(X).join(", ")}`),process.exit(1);let H=e(Z);if(!H)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((W,z)=>{let K=new WebSocket(H.wsUrl);K.binaryType="arraybuffer",K.onopen=()=>{let M=new TextEncoder().encode(JSON.stringify({option:G,enabled:Y})),L=new Uint8Array(1+M.length);L[0]=8,L.set(M,1),K.send(L),setTimeout(()=>{K.close(),W()},50)},K.onerror=()=>{console.error("Failed to connect to serve-sim server at",H.wsUrl),z(Error("WebSocket connection failed"))}})}async function UY(Q){let $=e(Q);if(!$)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((Z,J)=>{let Y=new WebSocket($.wsUrl);Y.binaryType="arraybuffer",Y.onopen=()=>{Y.send(new Uint8Array([9])),setTimeout(()=>{Y.close(),Z()},50)},Y.onerror=()=>{console.error("Failed to connect to serve-sim server at",$.wsUrl),J(Error("WebSocket connection failed"))}})}function b0(){let Q=[JQ(OQ,"..","dist","simcam","libSimCameraInjector.dylib"),JQ(OQ,"simcam","libSimCameraInjector.dylib"),JQ(OQ,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let $ of Q)if(i($))return fQ($);return null}function _Y(){let Q=JQ(OQ,"..","Sources","SimCameraInjector","build.sh");if(!i(Q))throw Error("SimCameraInjector source not found — this build of serve-sim does not "+"include camera support sources. Reinstall from a recent release.");console.error("[serve-sim] building libSimCameraInjector.dylib (one-time)…"),t(`bash "${Q}"`,{stdio:"inherit"});let $=b0();if(!$)throw Error("Build succeeded but dylib not found.");return $}function w8(){let Q=[JQ(OQ,"..","dist","simcam","serve-sim-camera-helper"),JQ(OQ,"simcam","serve-sim-camera-helper")];for(let $ of Q)if(i($))return fQ($);return null}function v0(){let Q=JQ(OQ,"..","Sources","SimCameraHelper","build.sh");if(!i(Q))throw Error("SimCameraHelper source not found — webcam support requires building "+"from a checkout that includes Sources/SimCameraHelper.");console.error("[serve-sim] building serve-sim-camera-helper (one-time)…"),t(`bash "${Q}"`,{stdio:"inherit"});let $=w8();if(!$)throw Error("Build succeeded but helper binary not found.");return $}var vQ=JQ(HQ,"simcam");function BY(Q){return`/serve-sim-cam-${x0("sha1").update(Q).digest("hex").slice(0,8)}`}function sQ(Q){return JQ(vQ,`${Q}.pid`)}function y8(Q){return JQ(vQ,`${Q}.bundles.json`)}function f8(Q){return`/tmp/serve-sim-cam-${x0("sha1").update(Q).digest("hex").slice(0,12)}.sock`}async function N4(Q,$){let Z=f8(Q);if(!i(Z))throw Error("camera helper socket not found");let J=await import("net");return await new Promise((Y,X)=>{let G=J.createConnection(Z),H="",W=!1;G.on("data",(z)=>{H+=z.toString();let K=H.indexOf(`
145
+ `);if(K>=0&&!W){W=!0;try{Y(JSON.parse(H.slice(0,K)))}catch(M){X(M)}G.end()}}),G.on("error",(z)=>{if(!W)W=!0,X(z)}),G.on("close",()=>{if(!W)W=!0,X(Error("socket closed"))}),G.write(JSON.stringify($)+`
146
+ `),setTimeout(()=>{if(!W)W=!0,G.destroy(),X(Error("helper timeout"))},3000)})}function t4(Q){let $=sQ(Q);if(!i($))return!1;let Z=Number(VQ($,"utf-8").trim());return Number.isFinite(Z)&&e4(Z)&&i(f8(Q))}function C8(Q){let $=y8(Q);if(!i($))return[];let Z;try{Z=JSON.parse(VQ($,"utf-8"))}catch{return[]}let J=null;try{J=Number(VQ(sQ(Q),"utf-8").trim())||null}catch{}if(J==null||Z.helperPid!==J)return[];return Array.isArray(Z.bundleIds)?Z.bundleIds:[]}function NY(Q,$,Z){let J=C8(Q),Y=J.includes($)?J:[...J,$],X={helperPid:Z,bundleIds:Y};if(!i(vQ))P8(vQ,{recursive:!0});k8(y8(Q),JSON.stringify(X))}function h0(Q){try{rQ(y8(Q))}catch{}}function u0(Q){let $=sQ(Q);if(!i($))return;let Z=Number(VQ($,"utf-8").trim());if(Number.isFinite(Z)&&e4(Z)){try{process.kill(Z,"SIGTERM")}catch{}let J=Date.now();while(e4(Z)&&Date.now()-J<1500)AQ(50)}try{rQ($)}catch{}h0(Q)}function FY(Q){if(!i(vQ))P8(vQ,{recursive:!0});let $=JQ(vQ,`${Q.udid}.log`),Z=I8($,"a"),J=["--shm",Q.shmName,"--socket",Q.socketPath,"--source",Q.source];if(Q.arg)J.push("--arg",Q.arg);if(Q.width)J.push("--width",String(Q.width));if(Q.height)J.push("--height",String(Q.height));let Y=I0(Q.helperBin,J,{detached:!0,stdio:["ignore",Z,Z]});if(Y.unref(),x8(Z),!Y.pid)throw Error("failed to spawn camera helper");k8(sQ(Q.udid),String(Y.pid)),h0(Q.udid);let X=Date.now();while(Date.now()-X<3000){if(!e4(Y.pid))throw Error(`camera helper exited early — see log at ${$}`);if(i(Q.socketPath))break;AQ(50)}return Y.pid}var EY=new Set(["mp4","m4v","mov","qt","avi","mkv","webm","mpg","mpeg","3gp","3g2","ts","wmv"]),TY=new Set(["png","jpg","jpeg","gif","heic","heif","webp","bmp","tif","tiff"]);function g0(Q){let $=Q.toLowerCase().split(".").pop()??"";if(EY.has($))return"video";if(TY.has($))return"image";let Z;try{let J=I8(Q,"r");Z=Buffer.alloc(16),i2(J,Z,0,Z.length,0),x8(J)}catch{return null}if(Z.length>=8&&Z.slice(4,8).toString("ascii")==="ftyp")return"video";if(Z.slice(0,4).toString("ascii")==="RIFF"&&Z.length>=12){let J=Z.slice(8,12).toString("ascii");if(J==="AVI ")return"video";if(J==="WEBP")return"image"}if(Z[0]===26&&Z[1]===69&&Z[2]===223&&Z[3]===163)return"video";if(Z[0]===137&&Z[1]===80&&Z[2]===78&&Z[3]===71)return"image";if(Z[0]===255&&Z[1]===216&&Z[2]===255)return"image";if(Z.slice(0,6).toString("ascii").startsWith("GIF8"))return"image";if(Z[0]===66&&Z[1]===77)return"image";return null}function jY(Q){if(Q.file){let $=fQ(Q.file),Z=g0($);if(!Z)throw Error(`Could not detect image/video type for: ${$}`);return{kind:Z,arg:$}}if(Q.webcam)return{kind:"webcam",arg:typeof Q.webcam==="string"?Q.webcam:void 0};return{kind:"placeholder"}}async function qY(Q){let $=BY(Q.udid),Z=f8(Q.udid);if(t4(Q.udid)){let X=await N4(Q.udid,{action:"switch",source:Q.source.kind,arg:Q.source.arg});if(!X.ok)throw Error(X.error||"helper rejected switch");return{helperPid:Number(VQ(sQ(Q.udid),"utf-8").trim()),shmName:$,relaunched:!1}}u0(Q.udid);let J=!Q.forceBuild&&w8()||v0();return{helperPid:FY({udid:Q.udid,helperBin:J,shmName:$,socketPath:Z,source:Q.source.kind,arg:Q.source.arg}),shmName:$,relaunched:!0}}async function OY(Q){let $,Z,J,Y=!1,X=!1,G=!1,H=!1,W="auto",z=[];for(let R=0;R<Q.length;R++){let V=Q[R];if(V==="--device"||V==="-d"){$=Q[++R];continue}if(V==="--file"||V==="-f"||V==="--image"||V==="-i"||V==="--video"){Z=Q[++R];continue}if(V==="--webcam"){let U=Q[R+1];if(U&&!U.startsWith("-"))J=U,R++;else J=!0;continue}if(V==="--list-webcams"){X=!0;continue}if(V==="--stop-webcam"){Y=!0;continue}if(V==="--build"){G=!0;continue}if(V==="--quiet"||V==="-q"){H=!0;continue}if(V==="--mirror"){let U=Q[R+1];if(U==="on"||U==="off"||U==="auto")W=U,R++;else W="on";continue}if(V==="--no-mirror"){W="off";continue}if(V==="--help"||V==="-h"){console.log(`Usage: serve-sim camera <bundle-id> [-d udid] [source-options] [--build]
147
147
  serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]
148
148
  serve-sim camera mirror <auto|on|off> [-d udid]
149
149
  serve-sim camera --list-webcams
@@ -181,7 +181,7 @@ Examples:
181
181
  serve-sim camera switch placeholder # back to placeholder
182
182
  serve-sim camera switch ~/Movies/loop.mp4 # hot-swap to file
183
183
  serve-sim camera --list-webcams
184
- serve-sim camera --stop-webcam`);return}z.push(V)}if(G){let U=S8()??b0();t(`"${U}" --list`,{stdio:"inherit"});return}if(Y){let U=$?o($):$Q();if(!U)console.error("No booted simulator."),process.exit(1);let V=C8(U),R=[];for(let _ of V)try{t(`xcrun simctl terminate "${U}" "${_}"`,{stdio:"ignore"}),R.push(_)}catch{}if(h0(U),H)console.log(JSON.stringify({udid:U,stopped:!0,terminated:R}));else if(console.log(`Stopped camera helper for ${U}`),R.length>0)console.log(`Terminated injected apps: ${R.join(", ")}`);return}if(z[0]==="mirror"){let U=$?o($):$Q();if(!U)console.error("No booted simulator."),process.exit(1);let V=z[1];if(V!=="auto"&&V!=="on"&&V!=="off")console.error("Usage: serve-sim camera mirror <auto|on|off> [-d udid]"),process.exit(1);if(!t4(U))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let R=await N4(U,{action:"setMirror",mode:V});if(!R.ok)console.error(`mirror failed: ${R.error??"?"}`),process.exit(1);if(H)console.log(JSON.stringify({udid:U,mirror:V,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${V} on ${U}`)}catch(R){console.error(`mirror failed: ${R?.message??R}`),process.exit(1)}return}if(z[0]==="switch"){let U=$?o($):$Q();if(!U)console.error("No booted simulator."),process.exit(1);let V=z[1],R=z[2];if(V&&V!=="placeholder"&&V!=="webcam"&&V!=="image"&&V!=="video"&&V!=="file"){let _=fQ(V);if(i(_))R=_,V="file"}if(V==="file"){if(!R)console.error("camera switch file <path>"),process.exit(1);R=fQ(R);let _=u0(R);if(!_)console.error(`Could not detect image/video type for: ${R}`),process.exit(1);V=_}if(!V||V!=="placeholder"&&V!=="webcam"&&V!=="image"&&V!=="video")console.error("Usage: serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]"),process.exit(1);if((V==="image"||V==="video")&&R)R=fQ(R);if(!t4(U))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let _=await N4(U,{action:"switch",source:V,arg:R});if(!_.ok)console.error(`switch failed: ${_.error??"?"}`),process.exit(1);if(H)console.log(JSON.stringify({udid:U,..._}));else console.log(`\uD83D\uDCF7 Switched ${U} → ${_.source}${_.arg?` (${_.arg})`:""}`)}catch(_){console.error(`switch failed: ${_?.message??_}`),process.exit(1)}return}if(z[0]==="status"){let U=$?o($):$Q();if(!U){console.log(JSON.stringify({alive:!1,error:"no booted simulator"}));return}if(!t4(U)){console.log(JSON.stringify({udid:U,alive:!1}));return}let V=null;try{V=Number(WQ(sQ(U),"utf-8").trim())||null}catch{}let R=C8(U);try{let _=await N4(U,{action:"status"});console.log(JSON.stringify({udid:U,alive:!0,helperPid:V,bundleIds:R,..._}))}catch(_){console.log(JSON.stringify({udid:U,alive:!0,helperPid:V,bundleIds:R,error:_?.message??String(_)}))}return}let K=z[0];if(!K)console.error("Usage: serve-sim camera <bundle-id> [--image <path>] [-d udid]"),process.exit(1);let M=$?o($):$Q();if(!M)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);let L=X?null:f0();if(!L)try{L=RY()}catch(U){console.error(`Failed to obtain camera dylib: ${U?.message??U}`),process.exit(1)}if(Z&&J)console.error("Pick one source: --file or --webcam, not both."),process.exit(1);if(Z){if(Z=fQ(Z),!i(Z))console.error(`File not found: ${Z}`),process.exit(1)}let T;try{T=TY({file:Z,webcam:J})}catch(U){console.error(U?.message??String(U)),process.exit(1)}let j=await jY({udid:M,source:T,forceBuild:X}),q=j.shmName,D=j.helperPid;if(W!=="auto"||!j.relaunched)try{await N4(M,{action:"setMirror",mode:W})}catch{}try{t(`xcrun simctl privacy "${M}" grant camera "${K}"`,{stdio:"ignore"})}catch{}try{t(`xcrun simctl terminate "${M}" "${K}"`,{stdio:"ignore"})}catch{}let A={...process.env,SIMCTL_CHILD_DYLD_INSERT_LIBRARIES:L,SIMCTL_CHILD_SIMCAM_SHM_NAME:q,...W!=="auto"?{SIMCTL_CHILD_SIMCAM_MIRROR_MODE:W}:{}},O="";try{O=t(`xcrun simctl launch "${M}" "${K}"`,{env:A,encoding:"utf-8"})}catch(U){console.error(`simctl launch failed: ${U?.stderr??U?.message??U}`),process.exit(1)}let E=O.trim().match(/:\s*(\d+)\s*$/),N=E?Number(E[1]):null;if(D)BY(M,K,D);let B={udid:M,bundleId:K,pid:N,dylib:L,source:T.kind,arg:T.arg??null,shm:q,helperPid:D,mirror:W,hotSwapped:!1,helperRelaunched:j.relaunched};if(H)console.log(JSON.stringify(B));else{let U=j.relaunched?"Injected":"Attached";if(console.log(`\uD83D\uDCF7 ${U} camera into ${K} (pid ${N??"?"}) on ${M}`),console.log(` source: ${T.kind}${T.arg?` (${T.arg})`:""}`),D)console.log(` helper pid: ${D} (shm ${q})`);console.log(` dylib: ${L}`)}}function qY(Q){if(Q.length>0)return Q.map(o);let $=F4();if($.length>0)return[$[0].device];let Z=$Q();if(Z)return[Z];let J=w8();if(!J)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[J.udid]}async function DY(Q,$,Z,J,Y){let G=qY($);if($.length===0&&F4().length===0)console.log("Starting simulator stream...");for(let D of G)await e2(D);let X=G[0],{simMiddleware:H}=await Promise.resolve().then(() => (A0(),D0)),W=H({basePath:"/",device:X,codec:Y,proxyHelpers:!0}),z=Z?1:50,K=Q,M,L=!1;for(let D=0;D<z;D++){let A=Q+D;try{await AY(A,W,J),K=A,L=!0;break}catch(O){if(M=O,O?.code!=="EADDRINUSE")break}}if(!L){if(M?.code==="EADDRINUSE")if(Z)console.error(`Port ${Q} is already in use. Pass a different --port or stop the other process.`);else console.error(`No available port found in range ${Q}-${Q+z-1}.`);else console.error(`Failed to start preview server: ${M?.message??M}`);process.exit(1)}for(let D of G)r2(mQ(D,K,"/",J));let T=()=>{for(let D of G)try{bQ(D)}catch{}};process.on("exit",T);let j=J!=="127.0.0.1"&&J!=="localhost"&&J!=="::1",q=t2();if(console.log(""),console.log(` - Local: http://localhost:${K}`),j&&q)console.log(` - Network: http://${q}:${K}`);else if(q)console.log(` - Network: \x1B[2muse --host 0.0.0.0 to expose on http://${q}:${K}\x1B[0m`);else console.log(" - Network: \x1B[2muse --host 0.0.0.0 to expose on the LAN\x1B[0m");console.log(""),process.on("SIGINT",()=>process.exit(0)),process.on("SIGTERM",()=>process.exit(0)),await new Promise(()=>{})}function AY(Q,$,Z){return E9({port:Q,middleware:$,host:Z})}var KQ=new U9;KQ.name("serve-sim").description("Stream iOS Simulator to the browser").version(o2(),"-v, --version","Output the serve-sim version").helpOption("-h, --help","Show this help").argument("[devices...]","Simulator(s) to target (udid or name; default: booted)").option("-p, --port <port>","Starting port (preview default: 3200; helper default: 3100)",(Q)=>parseInt(Q,10)).option("--host <addr>","Interface to bind the preview server to. Use 0.0.0.0 to expose on the "+"LAN — only on trusted networks: the preview exposes a token-gated "+"shell-exec route.","127.0.0.1").option("--detach","Spawn helper and exit (daemon mode)").option("-q, --quiet","Suppress human-readable output, JSON only").option("--no-preview","Skip the web preview server; stream in foreground only").option("--codec <codec>","Stream codec for the preview UI: 'auto' (H.264 when the browser can decode "+"it) or 'mjpeg' (force software JPEG — e.g. on VMs without H.264 encode).",(Q)=>{let $=Q.toLowerCase(),Z=["auto","h264","mjpeg"];if(!Z.includes($))throw new L9(`Unsupported codec '${Q}'. Supported: ${Z.join(", ")}.`);return $}).option("-l, --list [device]","List running streams").option("-k, --kill [device]","Kill running stream(s)").addHelpText("after",`
184
+ serve-sim camera --stop-webcam`);return}z.push(V)}if(X){let R=w8()??v0();t(`"${R}" --list`,{stdio:"inherit"});return}if(Y){let R=$?o($):$Q();if(!R)console.error("No booted simulator."),process.exit(1);let V=C8(R),U=[];for(let _ of V)try{t(`xcrun simctl terminate "${R}" "${_}"`,{stdio:"ignore"}),U.push(_)}catch{}if(u0(R),H)console.log(JSON.stringify({udid:R,stopped:!0,terminated:U}));else if(console.log(`Stopped camera helper for ${R}`),U.length>0)console.log(`Terminated injected apps: ${U.join(", ")}`);return}if(z[0]==="mirror"){let R=$?o($):$Q();if(!R)console.error("No booted simulator."),process.exit(1);let V=z[1];if(V!=="auto"&&V!=="on"&&V!=="off")console.error("Usage: serve-sim camera mirror <auto|on|off> [-d udid]"),process.exit(1);if(!t4(R))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let U=await N4(R,{action:"setMirror",mode:V});if(!U.ok)console.error(`mirror failed: ${U.error??"?"}`),process.exit(1);if(H)console.log(JSON.stringify({udid:R,mirror:V,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${V} on ${R}`)}catch(U){console.error(`mirror failed: ${U?.message??U}`),process.exit(1)}return}if(z[0]==="switch"){let R=$?o($):$Q();if(!R)console.error("No booted simulator."),process.exit(1);let V=z[1],U=z[2];if(V&&V!=="placeholder"&&V!=="webcam"&&V!=="image"&&V!=="video"&&V!=="file"){let _=fQ(V);if(i(_))U=_,V="file"}if(V==="file"){if(!U)console.error("camera switch file <path>"),process.exit(1);U=fQ(U);let _=g0(U);if(!_)console.error(`Could not detect image/video type for: ${U}`),process.exit(1);V=_}if(!V||V!=="placeholder"&&V!=="webcam"&&V!=="image"&&V!=="video")console.error("Usage: serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]"),process.exit(1);if((V==="image"||V==="video")&&U)U=fQ(U);if(!t4(R))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let _=await N4(R,{action:"switch",source:V,arg:U});if(!_.ok)console.error(`switch failed: ${_.error??"?"}`),process.exit(1);if(H)console.log(JSON.stringify({udid:R,..._}));else console.log(`\uD83D\uDCF7 Switched ${R} → ${_.source}${_.arg?` (${_.arg})`:""}`)}catch(_){console.error(`switch failed: ${_?.message??_}`),process.exit(1)}return}if(z[0]==="status"){let R=$?o($):$Q();if(!R){console.log(JSON.stringify({alive:!1,error:"no booted simulator"}));return}if(!t4(R)){console.log(JSON.stringify({udid:R,alive:!1}));return}let V=null;try{V=Number(VQ(sQ(R),"utf-8").trim())||null}catch{}let U=C8(R);try{let _=await N4(R,{action:"status"});console.log(JSON.stringify({udid:R,alive:!0,helperPid:V,bundleIds:U,..._}))}catch(_){console.log(JSON.stringify({udid:R,alive:!0,helperPid:V,bundleIds:U,error:_?.message??String(_)}))}return}let K=z[0];if(!K)console.error("Usage: serve-sim camera <bundle-id> [--image <path>] [-d udid]"),process.exit(1);let M=$?o($):$Q();if(!M)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);let L=G?null:b0();if(!L)try{L=_Y()}catch(R){console.error(`Failed to obtain camera dylib: ${R?.message??R}`),process.exit(1)}if(Z&&J)console.error("Pick one source: --file or --webcam, not both."),process.exit(1);if(Z){if(Z=fQ(Z),!i(Z))console.error(`File not found: ${Z}`),process.exit(1)}let T;try{T=jY({file:Z,webcam:J})}catch(R){console.error(R?.message??String(R)),process.exit(1)}let j=await qY({udid:M,source:T,forceBuild:G}),O=j.shmName,A=j.helperPid;if(W!=="auto"||!j.relaunched)try{await N4(M,{action:"setMirror",mode:W})}catch{}try{t(`xcrun simctl privacy "${M}" grant camera "${K}"`,{stdio:"ignore"})}catch{}try{t(`xcrun simctl terminate "${M}" "${K}"`,{stdio:"ignore"})}catch{}let D={...process.env,SIMCTL_CHILD_DYLD_INSERT_LIBRARIES:L,SIMCTL_CHILD_SIMCAM_SHM_NAME:O,...W!=="auto"?{SIMCTL_CHILD_SIMCAM_MIRROR_MODE:W}:{}},q="";try{q=t(`xcrun simctl launch "${M}" "${K}"`,{env:D,encoding:"utf-8"})}catch(R){console.error(`simctl launch failed: ${R?.stderr??R?.message??R}`),process.exit(1)}let E=q.trim().match(/:\s*(\d+)\s*$/),N=E?Number(E[1]):null;if(A)NY(M,K,A);let B={udid:M,bundleId:K,pid:N,dylib:L,source:T.kind,arg:T.arg??null,shm:O,helperPid:A,mirror:W,hotSwapped:!1,helperRelaunched:j.relaunched};if(H)console.log(JSON.stringify(B));else{let R=j.relaunched?"Injected":"Attached";if(console.log(`\uD83D\uDCF7 ${R} camera into ${K} (pid ${N??"?"}) on ${M}`),console.log(` source: ${T.kind}${T.arg?` (${T.arg})`:""}`),A)console.log(` helper pid: ${A} (shm ${O})`);console.log(` dylib: ${L}`)}}function DY(Q){if(Q.length>0)return Q.map(o);let $=F4();if($.length>0)return[$[0].device];let Z=$Q();if(Z)return[Z];let J=S8();if(!J)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[J.udid]}async function AY(Q,$,Z,J,Y){let X=DY($);if($.length===0&&F4().length===0)console.log("Starting simulator stream...");for(let A of X)await QY(A);let G=X[0],{simMiddleware:H}=await Promise.resolve().then(() => (C0(),A0)),W=H({basePath:"/",device:G,codec:Y,proxyHelpers:!0}),z=Z?1:50,K=Q,M,L=!1;for(let A=0;A<z;A++){let D=Q+A;try{await CY(D,W,J),K=D,L=!0;break}catch(q){if(M=q,q?.code!=="EADDRINUSE")break}}if(!L){if(M?.code==="EADDRINUSE")if(Z)console.error(`Port ${Q} is already in use. Pass a different --port or stop the other process.`);else console.error(`No available port found in range ${Q}-${Q+z-1}.`);else console.error(`Failed to start preview server: ${M?.message??M}`);process.exit(1)}for(let A of X)s2(mQ(A,K,"/",J));let T=()=>{for(let A of X)try{bQ(A)}catch{}};process.on("exit",T);let j=J!=="127.0.0.1"&&J!=="localhost"&&J!=="::1",O=e2();if(console.log(""),console.log(` - Local: http://localhost:${K}`),j&&O)console.log(` - Network: http://${O}:${K}`);else if(O)console.log(` - Network: \x1B[2muse --host 0.0.0.0 to expose on http://${O}:${K}\x1B[0m`);else console.log(" - Network: \x1B[2muse --host 0.0.0.0 to expose on the LAN\x1B[0m");console.log(""),process.on("SIGINT",()=>process.exit(0)),process.on("SIGTERM",()=>process.exit(0)),await new Promise(()=>{})}function CY(Q,$,Z){return E9({port:Q,middleware:$,host:Z})}var KQ=new R9;KQ.name("serve-sim").description("Stream iOS Simulator to the browser").version(a2(),"-v, --version","Output the serve-sim version").helpOption("-h, --help","Show this help").argument("[devices...]","Simulator(s) to target (udid or name; default: booted)").option("-p, --port <port>","Starting port (preview default: 3200; helper default: 3100)",(Q)=>parseInt(Q,10)).option("--host <addr>","Interface to bind the preview server to. Use 0.0.0.0 to expose on the "+"LAN — only on trusted networks: the preview exposes a token-gated "+"shell-exec route.","127.0.0.1").option("--detach","Spawn helper and exit (daemon mode)").option("-q, --quiet","Suppress human-readable output, JSON only").option("--no-preview","Skip the web preview server; stream in foreground only").option("--codec <codec>","Stream codec for the preview UI: 'auto' (H.264 when the browser can decode "+"it) or 'mjpeg' (force software JPEG — e.g. on VMs without H.264 encode).",(Q)=>{let $=Q.toLowerCase(),Z=["auto","h264","mjpeg"];if(!Z.includes($))throw new L9(`Unsupported codec '${Q}'. Supported: ${Z.join(", ")}.`);return $}).option("-l, --list [device]","List running streams").option("-k, --kill [device]","Kill running stream(s)").addHelpText("after",`
185
185
  Examples:
186
186
  serve-sim Open simulator preview at localhost:3200
187
187
  serve-sim -p 8080 Preview on a custom port
@@ -190,4 +190,4 @@ Examples:
190
190
  serve-sim --no-preview "iPhone 16 Pro" Stream a specific device (no preview)
191
191
  serve-sim --detach Start streaming in background (daemon)
192
192
  serve-sim --list Show all running streams
193
- serve-sim --kill Stop all streams`).action(async(Q,$)=>{if($.list!==void 0){GY(typeof $.list==="string"?$.list:void 0);return}if($.kill!==void 0){XY(typeof $.kill==="string"?$.kill:void 0);return}let Z=$.port;if($.detach){let J=await JY(Q,Z??3100);YY(J)}else if($.preview===!1)await ZY(Q,Z??3100,!!$.quiet);else await DY(Z??3200,Q,Z!==void 0,$.host,$.codec)});var hQ=["-d, --device <udid>","Target a specific simulator (udid or name)"];KQ.command("gesture").description("Send a touch gesture").argument("<json>",`Gesture JSON, e.g. '{"type":"begin","x":0.5,"y":0.5}'`).option(...hQ).action((Q,$)=>zY(Q,$.device));KQ.command("tap").description("Tap at normalized 0..1 coords").argument("<x>","X coord, normalized 0..1").argument("<y>","Y coord, normalized 0..1").option(...hQ).action((Q,$,Z)=>KY(Q,$,Z.device));KQ.command("button").description("Send a hardware button press").argument("[name]","Button name","home").option(...hQ).action((Q,$)=>MY(Q,$.device));KQ.command("type").description("Type text (US keyboard only)").argument("[text...]","Text to type").option(...hQ).option("--stdin","Read text from stdin").option("--file <path>","Read text from a file").action((Q,$)=>WY(Q,{device:$.device,stdin:$.stdin,file:$.file}));KQ.command("rotate").description("Set device orientation (portrait|portrait_upside_down|landscape_left|landscape_right)").argument("<orientation>").option(...hQ).action((Q,$)=>VY(Q,$.device));KQ.command("ca-debug").description("Toggle a CoreAnimation debug render flag (blended|copies|misaligned|offscreen|slow-animations)").argument("<option>").argument("<state>","on|off").option(...hQ).action((Q,$,Z)=>LY(Q,$,Z.device));KQ.command("memory-warning").description("Simulate a memory warning on the device").option(...hQ).action((Q)=>UY(Q.device));KQ.command("camera").description("Inject a synthetic camera feed and launch an app (see `camera --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((Q)=>OY(Q));KQ.command("permissions").description("Manage app permissions (see `permissions` with no args for usage)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((Q)=>x9(Q));KQ.command("ui").description("Get or set simulator-wide UI options (see `ui --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((Q)=>v9(Q));await KQ.parseAsync(process.argv);
193
+ serve-sim --kill Stop all streams`).action(async(Q,$)=>{if($.list!==void 0){GY(typeof $.list==="string"?$.list:void 0);return}if($.kill!==void 0){zY(typeof $.kill==="string"?$.kill:void 0);return}let Z=$.port;if($.detach){let J=await YY(Q,Z??3100);XY(J)}else if($.preview===!1)await JY(Q,Z??3100,!!$.quiet);else await AY(Z??3200,Q,Z!==void 0,$.host,$.codec)});var hQ=["-d, --device <udid>","Target a specific simulator (udid or name)"];KQ.command("gesture").description("Send a touch gesture").argument("<json>",`Gesture JSON, e.g. '{"type":"begin","x":0.5,"y":0.5}'`).option(...hQ).action((Q,$)=>KY(Q,$.device));KQ.command("tap").description("Tap at normalized 0..1 coords").argument("<x>","X coord, normalized 0..1").argument("<y>","Y coord, normalized 0..1").option(...hQ).action((Q,$,Z)=>WY(Q,$,Z.device));KQ.command("button").description("Send a hardware button press").argument("[name]","Button name","home").option(...hQ).action((Q,$)=>LY(Q,$.device));KQ.command("type").description("Type text (US keyboard only)").argument("[text...]","Text to type").option(...hQ).option("--stdin","Read text from stdin").option("--file <path>","Read text from a file").action((Q,$)=>VY(Q,{device:$.device,stdin:$.stdin,file:$.file}));KQ.command("rotate").description("Set device orientation (portrait|portrait_upside_down|landscape_left|landscape_right)").argument("<orientation>").option(...hQ).action((Q,$)=>HY(Q,$.device));KQ.command("ca-debug").description("Toggle a CoreAnimation debug render flag (blended|copies|misaligned|offscreen|slow-animations)").argument("<option>").argument("<state>","on|off").option(...hQ).action((Q,$,Z)=>RY(Q,$,Z.device));KQ.command("memory-warning").description("Simulate a memory warning on the device").option(...hQ).action((Q)=>UY(Q.device));KQ.command("camera").description("Inject a synthetic camera feed and launch an app (see `camera --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((Q)=>OY(Q));KQ.command("permissions").description("Manage app permissions (see `permissions` with no args for usage)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((Q)=>x9(Q));KQ.command("ui").description("Get or set simulator-wide UI options (see `ui --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((Q)=>v9(Q));await KQ.parseAsync(process.argv);